diff --git a/go.mod b/go.mod index a45c6c5ffb..5af71af1ac 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/imdario/mergo v0.3.10 // indirect github.com/kevinburke/go-bindata v3.11.0+incompatible github.com/onsi/ginkgo v1.14.0 // indirect - github.com/openshift/api v0.0.0-20210319173601-ab6d2da2c3ef + github.com/openshift/api v0.0.0-20210325163602-e37aaed4c278 github.com/openshift/library-go v0.0.0-20200423123937-d1360419413d github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.7.1 diff --git a/go.sum b/go.sum index 843da1de92..24d61b9e1d 100644 --- a/go.sum +++ b/go.sum @@ -473,8 +473,8 @@ github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zM github.com/opencontainers/runc v0.0.0-20191031171055-b133feaeeb2e/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/openshift/api v0.0.0-20200326152221-912866ddb162/go.mod h1:RKMJ5CBnljLfnej+BJ/xnOWc3kZDvJUaIAEq2oKSPtE= github.com/openshift/api v0.0.0-20200326160804-ecb9283fe820/go.mod h1:RKMJ5CBnljLfnej+BJ/xnOWc3kZDvJUaIAEq2oKSPtE= -github.com/openshift/api v0.0.0-20210319173601-ab6d2da2c3ef h1:vPNGjH9vmJJZYitIwpnJS6hHHb+lMCB3af+miA68y6I= -github.com/openshift/api v0.0.0-20210319173601-ab6d2da2c3ef/go.mod h1:aqU5Cq+kqKKPbDMqxo9FojgDeSpNJI7iuskjXjtojDg= +github.com/openshift/api v0.0.0-20210325163602-e37aaed4c278 h1:v36R7Yzq/CvWnYaPM+eh09ffZtmURq0k6gLmyhxOc3c= +github.com/openshift/api v0.0.0-20210325163602-e37aaed4c278/go.mod h1:aqU5Cq+kqKKPbDMqxo9FojgDeSpNJI7iuskjXjtojDg= github.com/openshift/build-machinery-go v0.0.0-20200211121458-5e3d6e570160/go.mod h1:1CkcsT3aVebzRBzVTSbiKSkJMsC/CASqxesfqEMfJEc= github.com/openshift/build-machinery-go v0.0.0-20200917070002-f171684f77ab/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE= github.com/openshift/client-go v0.0.0-20200326155132-2a6cd50aedd0/go.mod h1:uUQ4LClRO+fg5MF/P6QxjMCb1C9f7Oh4RKepftDnEJE= diff --git a/manifests/00-custom-resource-definition.yaml b/manifests/00-custom-resource-definition.yaml index 8ecf9c9569..a22523aae1 100644 --- a/manifests/00-custom-resource-definition.yaml +++ b/manifests/00-custom-resource-definition.yaml @@ -93,6 +93,30 @@ spec: hostNetwork: description: hostNetwork holds parameters for the HostNetwork endpoint publishing strategy. Present only if type is HostNetwork. + properties: + protocol: + description: "protocol specifies whether the IngressController + expects incoming connections to use plain TCP or whether + the IngressController expects PROXY protocol. \n PROXY protocol + can be used with load balancers that support it to communicate + the source addresses of client connections when forwarding + those connections to the IngressController. Using PROXY + protocol enables the IngressController to report those source + addresses instead of reporting the load balancer's address + in HTTP headers and logs. Note that enabling PROXY protocol + on the IngressController will cause connections to fail + if you are not using a load balancer that uses PROXY protocol + to forward connections to the IngressController. See http://www.haproxy.org/download/2.2/doc/proxy-protocol.txt + for information about PROXY protocol. \n The following values + are valid for this field: \n * The empty string. * \"TCP\". + * \"PROXY\". \n The empty string specifies the default, + which is TCP without PROXY protocol. Note that the default + is subject to change." + enum: + - "" + - TCP + - PROXY + type: string type: object loadBalancer: description: loadBalancer holds parameters for the load balancer. @@ -189,6 +213,30 @@ spec: nodePort: description: nodePort holds parameters for the NodePortService endpoint publishing strategy. Present only if type is NodePortService. + properties: + protocol: + description: "protocol specifies whether the IngressController + expects incoming connections to use plain TCP or whether + the IngressController expects PROXY protocol. \n PROXY protocol + can be used with load balancers that support it to communicate + the source addresses of client connections when forwarding + those connections to the IngressController. Using PROXY + protocol enables the IngressController to report those source + addresses instead of reporting the load balancer's address + in HTTP headers and logs. Note that enabling PROXY protocol + on the IngressController will cause connections to fail + if you are not using a load balancer that uses PROXY protocol + to forward connections to the IngressController. See http://www.haproxy.org/download/2.2/doc/proxy-protocol.txt + for information about PROXY protocol. \n The following values + are valid for this field: \n * The empty string. * \"TCP\". + * \"PROXY\". \n The empty string specifies the default, + which is TCP without PROXY protocol. Note that the default + is subject to change." + enum: + - "" + - TCP + - PROXY + type: string type: object private: description: private holds parameters for the Private endpoint @@ -958,6 +1006,30 @@ spec: hostNetwork: description: hostNetwork holds parameters for the HostNetwork endpoint publishing strategy. Present only if type is HostNetwork. + properties: + protocol: + description: "protocol specifies whether the IngressController + expects incoming connections to use plain TCP or whether + the IngressController expects PROXY protocol. \n PROXY protocol + can be used with load balancers that support it to communicate + the source addresses of client connections when forwarding + those connections to the IngressController. Using PROXY + protocol enables the IngressController to report those source + addresses instead of reporting the load balancer's address + in HTTP headers and logs. Note that enabling PROXY protocol + on the IngressController will cause connections to fail + if you are not using a load balancer that uses PROXY protocol + to forward connections to the IngressController. See http://www.haproxy.org/download/2.2/doc/proxy-protocol.txt + for information about PROXY protocol. \n The following values + are valid for this field: \n * The empty string. * \"TCP\". + * \"PROXY\". \n The empty string specifies the default, + which is TCP without PROXY protocol. Note that the default + is subject to change." + enum: + - "" + - TCP + - PROXY + type: string type: object loadBalancer: description: loadBalancer holds parameters for the load balancer. @@ -1054,6 +1126,30 @@ spec: nodePort: description: nodePort holds parameters for the NodePortService endpoint publishing strategy. Present only if type is NodePortService. + properties: + protocol: + description: "protocol specifies whether the IngressController + expects incoming connections to use plain TCP or whether + the IngressController expects PROXY protocol. \n PROXY protocol + can be used with load balancers that support it to communicate + the source addresses of client connections when forwarding + those connections to the IngressController. Using PROXY + protocol enables the IngressController to report those source + addresses instead of reporting the load balancer's address + in HTTP headers and logs. Note that enabling PROXY protocol + on the IngressController will cause connections to fail + if you are not using a load balancer that uses PROXY protocol + to forward connections to the IngressController. See http://www.haproxy.org/download/2.2/doc/proxy-protocol.txt + for information about PROXY protocol. \n The following values + are valid for this field: \n * The empty string. * \"TCP\". + * \"PROXY\". \n The empty string specifies the default, + which is TCP without PROXY protocol. Note that the default + is subject to change." + enum: + - "" + - TCP + - PROXY + type: string type: object private: description: private holds parameters for the Private endpoint diff --git a/pkg/manifests/bindata.go b/pkg/manifests/bindata.go index 1730960308..eff5f1d014 100644 --- a/pkg/manifests/bindata.go +++ b/pkg/manifests/bindata.go @@ -17,7 +17,7 @@ // assets/router/service-internal.yaml (429B) // manifests/00-cluster-role.yaml (2.85kB) // manifests/00-custom-resource-definition-internal.yaml (6.924kB) -// manifests/00-custom-resource-definition.yaml (69.899kB) +// manifests/00-custom-resource-definition.yaml (76.695kB) // manifests/00-ingress-credentials-request.yaml (2.135kB) // manifests/00-namespace.yaml (460B) // manifests/0000_90_ingress-operator_00_prometheusrole.yaml (446B) @@ -441,7 +441,7 @@ func manifests00CustomResourceDefinitionInternalYaml() (*asset, error) { return a, nil } -var _manifests00CustomResourceDefinitionYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xf1\x77\x1b\xb7\xd1\xe0\xef\xf9\x2b\x70\xcc\xe7\xb3\x94\x88\x94\x65\x27\x6e\xaa\x7e\xf7\xf5\xc9\xb2\xe3\xf8\x55\x91\x75\xa6\x9a\xf4\x4b\x94\xfa\xc0\x5d\x90\x44\xb5\x04\x18\x00\x2b\x89\x6e\x7b\x7f\xfb\x3d\x0c\x80\x5d\xec\x12\xc0\x82\xb2\xdd\xf6\xf5\xbc\xef\xb5\xb1\xb8\xd8\x01\x30\x33\x98\x19\x0c\x66\x06\x78\x4d\x7f\x20\x42\x52\xce\x8e\x11\x5e\x53\x72\xa7\x08\xd3\x7f\xc9\xc9\xf5\x37\x72\x42\xf9\xe1\xcd\xd1\x67\xd7\x94\x95\xc7\xe8\xb4\x96\x8a\xaf\xde\x10\xc9\x6b\x51\x90\xe7\x64\x4e\x19\x55\x94\xb3\xcf\x56\x44\xe1\x12\x2b\x7c\xfc\x19\x42\x98\x31\xae\xb0\xfe\x59\xea\x3f\x11\xa2\xac\xa8\xea\x92\x4c\x04\xa9\x08\x96\x64\xc2\xd7\x84\xc9\x25\x9d\x2b\x0d\x9b\xce\x56\xe3\xa2\xe2\x75\x39\x5e\x61\x86\x17\xa4\x3c\x46\x23\x25\x6a\x32\x1a\xfe\x54\x92\x6a\xee\xbe\x1a\x2f\xe9\x62\x39\xc6\x37\x98\x56\x78\x46\x2b\xaa\x36\x3b\xc0\xa1\x6c\x51\x91\x31\xe3\x25\x19\x97\xe4\x86\x54\x7c\x4d\x84\xf7\x39\xc3\x2b\x72\x8c\x28\x5b\x08\x22\x65\xc1\x99\x12\xbc\xaa\x88\x90\x1a\x8a\xc0\x8a\x8b\x0e\xb8\xcf\xe4\x9a\x14\x7a\xe2\x0b\xc1\xeb\xf5\x31\x0a\x37\x32\x50\x2d\x82\x0c\x72\x5f\x99\x0e\x4e\x9b\x0e\xe0\x5d\x45\xa5\xfa\x43\xf8\xfd\x19\x95\x0a\xda\xac\xab\x5a\xe0\x2a\x34\x44\x78\xad\xe7\x57\x57\x58\x04\x1a\x7c\x86\x90\x2c\xf8\x9a\x1c\xa3\x73\x3d\x9c\x35\x2e\x48\xf9\x19\x42\x37\x86\x1d\x60\x78\x63\x3b\xff\x9b\x23\x03\xac\x58\x92\x15\x36\xe3\x46\x7a\x72\xec\xe4\xe2\xd5\x0f\x4f\xa6\x9d\x9f\x11\x2a\x89\x2c\x04\x5d\x2b\x60\xaa\xd1\xd6\xd0\xed\xfb\x19\x91\x08\x23\x4b\x42\x37\x3a\xd4\x0e\x0f\xcd\xb9\x68\x40\x22\xa4\x96\x04\x15\x55\x2d\x15\x11\x13\x74\xa9\xff\x68\x5b\x16\x98\x21\x49\xc4\x0d\x2d\x08\x7a\xbd\x26\x6c\xaa\x31\x8d\xde\xf0\x5a\x11\x84\x59\x89\xfe\x50\xcf\x88\x60\x44\x11\xe9\x10\xe9\x01\x16\x96\xa3\xe5\x04\x5d\x31\xf4\xe3\x92\x30\x84\xd9\x36\xc2\x11\x95\xa8\x10\x04\x2b\x52\x1e\x20\x8c\x18\xb9\x0d\x8c\xd9\x03\x5b\x92\x75\xc5\x37\x2b\xc2\x94\xf7\x25\x52\x1c\xe1\xaa\xe2\xb7\x48\x2f\x34\xc1\x70\x85\x94\xc0\xf3\x39\x2d\xf4\x1b\x41\x70\xb1\x84\x89\xda\xc9\x48\xa4\x96\x58\x79\x40\xc9\xdd\x9a\x4b\xe2\x06\x87\xb8\xb0\x93\xf4\xe6\xf0\xc7\x75\x89\x15\x65\x0b\xa4\x96\x54\x36\x2f\xd0\x0a\x6f\x50\x45\x30\x8c\xa0\xa4\x52\xd4\x40\x1e\x0f\xf4\x9c\x0b\xb4\xae\x67\x15\x2d\xd0\x1c\x17\x1a\x00\x23\xea\x96\x8b\x6b\x3d\x3d\x46\x0a\x58\xd3\x08\xcb\xe8\xdc\x91\x20\x37\x54\x76\x81\xea\x5e\x67\x04\x41\x83\x12\xf1\x5a\x01\x8e\x97\x4a\xad\xe5\xf1\xe1\xe1\x75\x43\x16\xbd\x12\x4b\x5e\xc8\xc3\x82\xb3\x82\xac\x95\x3c\x74\x18\x18\xdb\x51\x50\xb6\x38\xb4\x7d\x8e\xfb\x3c\x6e\x1e\x4b\x3c\x72\x43\x04\x5a\x73\x29\xe9\xac\x22\x07\x48\x6a\x71\x36\xab\x08\x2a\xc9\x1c\xd7\x95\x92\x30\x51\x8d\xe3\x75\x85\xd5\x9c\x8b\x15\xc2\x82\xa0\x5a\x92\x72\x82\xa6\x84\x20\x4d\x03\x1f\x2d\x94\x54\x25\x7c\xb3\xe2\x42\x43\x51\x98\x56\x72\x32\x6a\x9a\xac\x85\x5e\xe4\x8a\xba\xf5\x6c\x1e\x4f\xac\x7a\xbf\xf6\x96\xc6\x43\xbd\x7a\x4c\x2b\x3d\x3c\xca\x80\xe0\xc4\xad\x40\x52\xda\x05\x87\xf8\xdc\x51\x73\x2d\x88\x24\xcc\x48\xd8\x0e\x60\xa4\x1b\x61\x86\xf8\xec\x2f\xa4\x50\x7a\x2a\x42\x83\x41\x72\xc9\xeb\xaa\xd4\x64\xba\x21\x42\x21\x41\x0a\xbe\x60\xf4\x5d\x03\x5b\x6a\x86\xd0\x9d\x56\x58\x11\xa9\x7a\x30\x29\xb3\x5c\x7a\x83\xab\x9a\x1c\xc0\x62\xd2\x34\x15\x44\xf7\x82\x6a\xe6\xc1\x83\x26\x72\x82\xbe\xd7\x78\xa2\x6c\xce\x8f\x1b\x42\x2f\xa8\x72\xea\xa4\xe0\xab\x55\xcd\xa8\xda\x1c\x02\x15\xe9\xac\x56\x5c\xc8\x43\x10\xbd\x87\x92\x2e\xc6\x58\x14\x4b\xaa\x48\xa1\x6a\x41\x0e\xf1\x9a\x8e\x61\xe8\x0c\xd8\x6f\xb2\x2a\x3f\x6f\x58\xfd\x61\x67\xac\x6a\xa3\x05\x99\x54\x82\xb2\x85\xf7\x02\xa4\x6b\x82\x02\x5a\xba\xea\xf5\x89\xed\xa7\x66\x16\x2d\xa2\xcd\x42\x22\xe8\xcd\x8b\xe9\x65\xbb\x98\x34\x31\xfa\xd8\x07\xbc\xb7\x1f\xca\x96\x04\x1a\x61\x94\xcd\x89\x30\x44\x9c\x0b\xbe\x02\x98\x84\x95\x6b\x4e\x99\xb2\xa2\x8d\x12\xd6\x47\xbf\xac\x67\x2b\xaa\x34\xdd\x7f\xad\x89\x54\x9a\x56\x13\x74\x0a\x3a\x56\x2f\xab\x5a\x2f\x75\xcd\xb7\xaf\x18\x3a\xc5\x2b\x52\x9d\x6a\xf5\xf6\xb1\x09\xa0\x31\x2d\xc7\x1a\xb1\x79\x24\xf0\xcd\x83\x7e\x63\x83\x35\xef\x85\xd3\x9f\x11\x7a\xe9\xd7\x9a\x5c\x20\x23\xd7\xa4\xa0\x73\x5a\xc0\x5a\x30\x4b\x44\xaf\x4f\x49\x05\x29\xd1\x8c\x2c\xf1\x0d\xe5\xc2\xfe\xde\xc3\xeb\x96\x70\x9f\x74\x1a\x84\x97\xb4\x19\x0c\x08\x91\x53\xfd\x16\xba\x26\xfd\x16\x7d\xed\xb7\xfd\x85\x61\x37\x41\xe6\x44\x10\xa6\x99\x89\x6b\xee\x23\x85\x20\x0a\xa4\x29\xa6\xac\x8b\xc0\x06\x65\xcb\x46\x8a\xa1\xc2\x83\xa7\x45\xa5\x9e\xf2\x06\x5a\x6c\x0b\xe6\x89\x51\x6a\xa0\x29\xfa\x6c\x0b\x03\xe6\xec\xa1\xb2\xe8\x04\x18\x54\x20\x7e\xcb\xfc\x3e\x0e\x02\x33\xd7\xf3\x00\xb1\x19\x00\x79\xc5\x40\x45\xdb\x59\xad\x6a\xd9\x4c\x0d\xc6\x38\xe7\x5a\x07\xea\xb5\x75\x4d\x36\x12\xa4\x0a\x70\x88\xfe\x0e\x21\x55\xc9\x49\x21\xd4\x36\x66\x51\x67\xda\x73\x5a\x19\x23\x40\xaf\x36\xfb\xd9\x35\xd9\x1c\x6b\x98\xbd\x97\x57\x0c\xbd\x9a\xa3\x9a\x49\xa2\x0e\x02\x50\x31\xba\xa5\x55\x59\x60\x51\x76\x3a\xd0\x74\xaa\x15\x5f\x61\x45\x0b\x5c\x55\x1b\xb4\x20\x4c\x9b\x73\xa4\x84\x11\x1b\x95\x71\xb9\xc5\x5c\xfd\x71\x52\xa9\x85\x0a\x2d\x1b\xc5\x13\x50\x9d\x25\x5f\x69\xdc\xec\x69\xb8\xb2\x9e\x99\x3f\xe5\x7e\x68\xac\xac\x04\x20\xed\x58\xbc\xbe\x1e\x4a\x74\x7a\xa2\x27\x53\x69\xf1\xd0\x1d\xbc\x16\xe5\x0b\xf8\x22\x00\xf5\x96\xaa\xa5\x6f\x61\x3d\x94\x48\x09\x4d\x35\xa9\xb8\x20\x13\x8b\xc0\x28\x9e\x02\x10\x35\x76\x60\xb0\x72\x89\x85\xe1\xce\x55\x5d\x29\xba\xae\x08\xfa\xee\xf2\xf2\xe2\xf0\x31\x22\x0c\xcf\xb4\x59\x20\x80\x31\xd1\xde\xed\x92\x16\x4b\x44\x57\xeb\x8a\x06\xf9\xf4\xe4\xec\xe2\x7c\x5f\x8f\x92\x59\x69\x29\xd1\x1e\x9d\x90\xc9\x01\xd2\x7b\x8e\x59\xb5\x41\x33\xc1\x6f\x25\x11\x72\x1f\x74\x3a\x56\xa8\xa2\x33\x22\xd4\xc6\x18\x57\xb5\x0c\x91\x4a\x5b\xb1\xbe\x89\xa3\x49\x4a\x25\x5a\x11\xac\xcd\x1d\xdb\x13\x58\x98\x00\x41\xff\xd4\x34\x46\x8a\x07\x49\xc4\xd5\x52\xdb\x43\x8d\xfd\xa9\xad\x38\xcd\x07\x15\xbd\x26\x15\x8c\x66\x8e\x69\x65\x7b\xb2\xa2\xaa\x06\x0b\xd3\x90\xb5\xaa\x36\x01\xb8\xd7\x4c\xaf\x4a\x2c\xfd\x01\x14\x1c\x57\x44\x6a\x73\x6d\xe2\x16\x1d\x65\x63\x3d\x4e\x9f\x42\x7b\xb7\x4b\xa2\x87\x14\x00\xda\xf2\x11\x17\x9a\x68\x62\x6c\xe5\x2a\x29\xf7\x07\x39\x09\xf8\x26\x00\xb4\xb1\xc1\x1f\x4a\x34\xab\x69\xa5\xc6\x94\xa1\xd7\x27\xb5\x5a\x1a\x61\x25\x3c\xfb\xc9\x3d\x71\xa1\xab\x1f\xd8\x86\x04\x7e\xef\xeb\x73\xbd\x93\x71\xba\xc0\x8a\x58\x15\xd4\x88\x29\xdb\x93\xdf\x68\xe3\x93\xdc\x1e\x5a\xc3\x73\xac\xa7\x39\x36\xba\x4a\x1e\xc2\xde\xed\xf0\x73\xf8\x4f\x70\x44\x08\x5d\xbe\x7e\xfe\xfa\x18\x9d\x94\x25\x32\x9c\x50\x4b\x32\xaf\x2b\x63\x4b\xca\x89\x67\x1c\x1e\x80\x81\x72\x80\x6a\x5a\xfe\xfe\x61\x10\x58\x44\xa9\xfa\x2f\xb7\x94\x28\xa0\x05\x44\xc8\xa0\x76\x32\x72\x07\x34\xd2\xf3\xf3\x29\xa0\xd9\x6d\x3e\x12\x1a\x25\x22\x97\xac\x42\xd0\xfc\x5d\x70\x36\xa7\x8b\x5a\x90\x76\xd5\xcf\x09\xd6\x26\x85\x04\x29\xff\x05\xfa\xd6\x4a\xc3\x33\x8e\xcb\x67\xb8\xc2\xac\x20\x62\x6a\x7a\x0e\x80\x6f\x6c\x25\xd8\xa2\xc8\xa5\xd6\x1d\x52\x69\x26\x5c\x6c\x0e\x50\x3b\x0d\x14\x18\xc1\xf3\xf3\x69\x00\xa2\xb6\x5c\x45\x29\xad\xd1\x6f\xc1\x5f\x34\xd0\xa7\x16\xf8\xc4\x8c\x16\x34\x68\xad\x37\xd3\x08\xb7\x6b\x26\xa4\x4c\xb7\x15\xf4\x81\x91\xac\xde\x7a\x74\xeb\xca\xe8\x05\xb3\xf7\x32\x73\x88\x61\x56\x49\x4f\x2f\x98\x31\x6f\x6b\x64\x3b\x56\x2d\x04\x8c\x19\x4b\xa5\xc3\x57\x70\xac\x8a\x23\xca\x4a\x7a\x43\xcb\x1a\x57\x76\x27\x29\x15\x56\xb5\x24\x12\x49\x6e\xc4\x16\x61\xa5\x96\x27\x42\x5a\x09\x84\x6e\x97\x44\x80\xd5\xa2\xb0\x58\x90\x3e\xdf\x01\xb1\xdc\xde\x56\xb3\x54\x83\xe7\x2b\xe6\xe8\x04\xf6\x80\xb6\x5f\x19\xfd\xb5\x26\x08\xaf\xb8\x46\x6b\x55\x6d\xdb\x65\x32\xa8\xae\x59\xa9\xe5\x71\xdf\x08\x36\x3a\x8a\xac\xd6\x6a\x73\xd0\xee\xf6\x60\x8e\x00\x75\x62\x38\xa2\xeb\xfe\xb1\xfa\x2e\xd0\xcb\x44\xcb\xc1\x89\x19\x71\x40\x5c\x25\xd6\x65\x9c\x99\x86\x96\x63\xfc\x4b\x7f\x6d\x59\x92\xfa\x6b\x33\x64\x82\xb4\xd6\x85\x03\x0b\xd8\x30\x12\xc9\xee\xaa\xe5\x81\xd5\xc2\xa8\xe2\xb8\x44\x33\xbb\x0e\x1b\x11\xaf\x15\x62\x88\x04\x44\x15\x93\x8e\x55\xd5\x31\x4e\xb5\x52\xc3\x7a\xb0\x9c\x69\xa9\x2b\xb0\x54\xa2\x86\xfd\xc4\xce\x34\x00\x6e\x9c\xb8\xad\xba\x35\x10\x4f\x7e\x9c\x1e\x9b\x06\x01\xe1\x81\xf6\xc0\x98\x79\x61\x79\x30\x00\x15\x9c\x5e\xfb\x1a\xce\xbb\x5a\x90\xe3\x3c\x38\xed\x57\x2f\x4f\x2f\x42\x9a\xe8\x2a\x73\x40\x2d\xa0\x57\xcf\xbe\x3f\xad\x78\x5d\x1e\x67\xca\xc0\x18\x9c\x33\x3a\xbb\xa1\x42\x1d\x23\xf4\x1d\x97\xea\xdc\x7a\x6d\xae\x18\x3a\x61\x1b\x4b\x6e\x87\xc0\x90\x10\xd0\xdb\x39\xb4\x67\x9c\xa4\x5a\xbe\x9d\x73\x46\xf6\x1b\x5a\x2a\xee\x43\x05\xa2\xc7\xb9\x34\xc4\x86\x5b\x0b\x75\x57\xd5\xbf\x6c\xbb\xcf\xb0\x00\xbc\xd6\x68\xc9\xab\x52\xa2\x35\x16\x78\x45\x94\x96\x60\xce\x02\xf7\x66\x14\xd1\xe0\x29\x7d\x33\x41\x17\x66\x8f\x8f\x38\xd3\xe6\xd0\x1c\x70\xa8\xb9\xde\xc7\x54\x42\x9b\x07\x15\xb6\x7e\x2a\x8f\x0f\x32\xe6\xea\x37\x8f\x4f\xb6\xb3\xb2\xc3\xc3\x42\xd1\x19\x05\x38\x33\x0c\x22\x4d\x43\xdb\xe2\x86\x96\x44\x5c\x34\x43\x8c\xb5\xec\x8b\xc5\xed\x2f\xed\x6c\xdd\x6e\xbf\x33\xc5\x28\x50\x04\x26\xa0\x58\x19\x87\x81\x73\x1f\x38\xff\x57\xcd\x4a\x22\xaa\x8d\x26\x74\x57\x66\x35\x03\x8f\xe1\x0e\x99\x0d\x6f\x40\xf9\x34\xf6\xf3\x5a\xef\x69\xac\x83\xb1\xe9\x78\x7b\x5a\x89\x0e\x8c\xed\x68\x2c\x05\xe3\x83\x44\x78\xc6\x6b\x65\xf7\xeb\xae\xcb\xc0\xea\xf2\xf0\x3f\x40\x21\xfd\xe0\xdb\xe4\xeb\x3e\x69\xf0\xad\x74\xf3\x90\x8d\xc9\x65\x11\x4c\x94\xa2\x6c\xb1\xe5\xc3\x0e\xf6\x2a\x48\x87\x20\x27\x3f\x4e\xbb\x44\x95\x11\xfd\x3e\x00\x37\x4d\x00\x3d\xf8\x6d\xbc\x0e\x0d\x75\x37\xac\xa3\x6c\xcc\xeb\xa7\xa8\xb0\x94\xb4\x38\x1b\x94\x03\xfe\xd3\xa1\x48\x00\xc2\xd6\xb2\xe9\xd0\x69\x10\x3c\xea\x0b\x15\xcc\x80\x3e\xb6\xa7\x9e\x7c\x71\x92\x24\x03\x6c\x5f\xd6\x9c\x1a\x80\xa9\x65\x66\x9e\x01\x29\xea\x3f\xd6\xce\x79\x0f\x84\x06\x20\x7c\x24\x84\xba\xf3\x96\x0f\x86\xd0\xf3\xb3\x67\x1f\x14\x99\xd0\x74\x37\xec\x8d\xdc\x58\xb4\x88\x85\x7f\xf3\xf9\xf6\xea\xce\x98\x1b\xd8\xf1\x52\x61\xa6\x28\x38\xff\x0c\xda\xb6\xce\x34\x41\x4c\xfc\xa0\xb7\x55\x19\x30\xcd\x89\x85\x16\x3e\x76\x4f\x7a\x35\xb2\x3c\x78\x35\x3a\x46\x27\x8e\x21\x41\x09\xa2\x67\x3b\x8c\x55\xef\x9b\x56\xf8\x9a\x48\xf0\x01\x69\x95\x52\x92\x02\xce\xc6\x24\xd2\x5b\x2a\x0a\x46\x99\xf1\xe8\x2a\x81\x99\x5c\x73\x91\x43\xe0\x0a\x6f\x88\x40\x7b\x97\xa7\x17\x87\xd3\xe9\xd9\x3e\xb2\x1a\x1e\xa4\x9b\xf5\x83\xdb\x26\xe0\x62\xd3\xff\x37\xdd\x1f\x66\x01\x04\x62\x11\xf5\x5c\xb3\x80\xe2\xb2\x84\x33\x7e\x5c\x39\xe9\x68\x4d\x70\xd4\x38\x52\x4a\x5e\xc8\x09\xbe\x95\x13\xbc\xc2\xef\x38\x9b\x14\x7c\x75\x78\x02\xff\x7c\x71\x3a\x3d\x34\xa7\x4a\x87\xcd\xc9\xfa\xa2\xa6\x25\x39\xd4\xc4\x1f\x3b\xe2\x8f\xc1\x02\x9d\x2c\xd5\xaa\xfa\xbc\xa8\x66\x19\xa3\xb5\xb4\x3a\x3f\x7b\x66\xe8\xe4\xec\xbd\x0e\x9d\x3c\x2a\x64\x80\x0c\xd2\x49\xe3\x03\xb5\x04\xea\xa3\x3f\x17\xb1\xff\x7c\xb4\xb2\x6a\x96\xd6\x50\x08\x4c\xde\x7a\x35\xbc\xba\xc7\x6e\x55\x64\xb4\x3c\x3f\x7b\x96\x29\x7e\x22\xfe\x2d\xff\x11\xe4\xd7\x5a\x1b\x7b\xe9\x21\x8e\x01\x60\xb2\x49\xa6\xc0\x5b\x14\xeb\x5d\x0c\xa1\x45\xb1\xfe\x18\x86\xd0\xcb\xd3\x8b\x7f\x80\x21\xa4\x07\xff\xaf\x66\x08\x51\xc2\xd4\x49\x51\x10\x39\xd8\xb6\x4f\x0a\xff\x5b\x2f\xd6\x64\xc9\x6f\x9d\x37\x1f\xc3\xbb\x8c\xe5\x6b\x22\x28\x94\xa0\x85\x22\xe6\x00\xa7\x39\x11\x0f\x50\xe5\x3e\x7a\x47\x0b\xb2\x97\x15\x9f\xe1\x4a\xcb\xb2\xa9\x39\x84\x03\x37\x23\x6b\xfa\xca\xd1\x0c\x1d\xf7\x0d\x38\x0a\x0c\xd4\xee\x94\x35\xd9\xb4\x20\xca\x99\xbb\x3b\x63\x81\xf3\x6a\xcc\x36\x48\x90\x85\x66\x67\x0d\xdc\x9e\xe3\xfd\x70\x71\x6a\x5c\xad\x70\xa4\x5c\x60\x95\x5e\x79\xe6\x69\xce\x9a\x60\xcc\xc8\xb3\x74\x7a\x22\x10\x22\xc3\x26\x0b\xce\x17\x15\x01\xf9\xd7\xfa\xec\xc7\x84\x2d\x28\x23\xc6\x6f\xbf\xe4\xb7\x63\xc5\x0f\x1d\xb6\xc6\x9e\x18\xa4\x6c\xf1\xf9\x02\xf0\xf0\x36\x9b\xe6\x56\xbb\x9c\xf1\x22\x45\x93\x9d\x0d\x18\x98\x36\x00\xdd\x22\x89\x39\x6b\x02\xeb\xcd\x21\xdd\x20\x39\xcb\xd6\x20\x48\xe2\x15\x71\xd4\x81\x23\xc4\x1f\x2e\x4e\xf7\x11\x36\x46\xd7\x96\x04\xc9\x41\x01\xf8\x6d\x7c\xba\xf6\xa8\xd6\xd2\xec\x9c\x67\x11\x1d\x94\x31\x84\x3f\x58\x5b\xd0\xf9\x97\xdc\x41\xfd\x30\xf5\xbb\x64\x35\xa4\x77\xd4\xf8\xdc\xe0\xcd\x12\xf9\xc3\xe9\x3a\xb3\x86\x32\x1a\x02\x61\x3f\x9c\xb2\xcb\xd4\x51\xc3\x06\x79\x47\x32\xfa\xb6\xf8\xb0\xbb\x63\x60\x36\x61\xf7\x12\x3a\xd1\xe2\xa5\x89\x06\x02\x7d\x36\x3a\xf9\x71\x3a\x3a\x40\x23\x70\xb7\x8e\x42\xee\x64\xff\x19\x3d\xc3\x82\x7c\x4f\x14\xae\xf4\x37\x2f\x4f\x2f\xf4\x7f\xe0\x40\x51\xe1\xe2\x7a\x64\x62\x90\x46\x3f\x4c\xd7\x4b\x22\xc8\x28\x6d\x83\x0d\x93\x79\xac\x37\x23\x43\x2d\xf4\xb8\x07\xda\x34\x83\x1e\x68\xf7\xf2\xf4\x62\xa0\x45\x33\xd5\x81\x76\x16\x03\x03\xad\x5e\x3d\xfb\x3e\x83\xd1\x06\x38\x72\xd8\xf4\x1a\x30\xbb\x32\xd8\xd9\x44\xa2\xe6\x39\x04\xa1\x2d\x1c\x5d\x69\xd1\x64\xa3\x81\xe0\x37\xac\x90\x89\x22\xd8\xe2\xcc\x94\x57\x50\xda\xb8\xca\x72\x82\x2e\x6c\xe0\x60\x87\x7f\x9d\xcb\x7d\x64\x78\xef\x95\x15\x3a\x09\xe6\x4b\x33\xde\x18\xbd\x1a\xd2\xec\xe3\xd4\x01\x86\x79\x06\x49\x97\x26\xdb\xd8\xa0\xec\x3e\x6e\x6a\xc6\x4b\x72\xc1\xc3\x11\x3a\x7d\xef\x89\x6d\x1a\x77\x4f\x9f\xdb\x16\xf1\x73\x0f\x74\x6f\x7f\x7c\x0f\xf6\xbd\x7c\xf2\x6b\x41\x6f\x82\x71\x5e\x5b\x73\xb5\x2d\xe3\x53\xbd\xb0\x0d\xdc\x64\x62\x8e\xf2\x5d\xa6\x68\x61\xde\x6b\x6a\x71\xf5\x11\xf7\xe1\x04\x06\xa7\x4d\xc0\x5a\x92\x89\xb1\x7f\xed\xca\x89\xcc\xad\xf5\xb5\x84\x4e\xca\xae\x18\xb2\x87\x4a\x76\x55\x67\x85\x1e\x20\x38\xf5\x37\x47\xf3\x5e\xa4\xb7\xdf\x01\x72\x1c\x00\x9b\x27\x66\x2c\x91\xce\x2e\x2d\xa6\x96\x62\x01\x5b\x6d\x74\x37\x9c\x96\xdb\xe8\xb6\xf6\x64\x95\xb2\x45\x4c\x3c\x9c\x04\x87\xd6\x8b\x12\xf7\x0f\x79\xdb\xce\x62\x20\xaf\x98\xde\xd0\xe5\x45\xb7\x84\x22\xab\xed\x6f\x87\x9f\x6b\x99\x39\x20\x32\xcd\xf6\xb3\x0d\xb9\x80\xe3\x5f\x2f\x34\xac\x3d\xf4\x6f\x76\x9d\x2e\xc8\x3f\x18\x2e\xa5\x1f\xb3\xb6\xad\xcb\x25\x84\x9d\x87\xb2\x8d\x2a\x60\x78\x45\x26\x7e\x6c\x41\x9c\xd7\x9a\x9e\xcd\xb2\x61\xf0\xd5\x3b\xce\x88\xb4\x01\xd7\x10\xe4\x52\xb2\x5d\x83\x03\x50\x13\x20\x60\x42\xe6\x7f\xe2\xcc\x44\x7a\xd9\x1f\xcd\xa2\xd4\xbf\x9a\xa4\x02\x1f\x37\x66\x48\xab\xb8\x4b\x57\x33\x42\x2d\x04\x61\xaa\xda\x20\x59\xaf\xd7\x5c\x28\x37\x05\x6e\x36\x5e\x27\x3f\x4e\x0f\x8c\x5d\x62\xec\x21\x6d\xe4\xbb\x33\x5e\x99\x60\x92\x2f\xfa\x47\xc4\x43\xcb\x4d\x77\xa8\x65\x78\x94\x6e\x42\x6f\x56\x4c\x44\x48\x18\x00\x95\x96\x7f\x5d\x8c\xc6\x47\x58\x7d\x4b\x2e\x95\xb7\xf0\x0e\xd0\x8c\xd7\x2c\xb6\x13\x57\x1c\x66\x64\xc7\xfe\xcd\x23\x40\xe0\x57\x5f\x3d\x31\x59\x25\xb5\x34\x63\x16\x44\xae\xb9\x4d\x1d\xd0\xf2\xdb\x0d\x37\x6e\x27\x61\xd6\xb2\x68\x77\x3b\x1e\x8e\xd9\x18\x16\x6a\x37\x14\xc3\x07\xed\x70\x6d\x84\x8f\x53\x24\x57\x0c\x3d\xe7\x44\x22\xc6\x55\x66\x54\x08\xea\x44\x86\x24\x08\xb2\xdb\x48\x73\xc4\xe1\x81\x8b\x11\xd3\xa3\x25\x77\xeb\x8a\x16\x54\x05\x03\x1d\x51\xab\x04\x6d\x88\xad\x21\x0b\xc4\x0d\xad\x30\xab\x21\x0c\x31\x8d\xd2\xe4\x22\xe8\xd9\x05\x59\x0b\x01\x34\x4c\x8c\xf4\xbe\xde\x71\xc0\x33\x74\x4e\x20\x34\xdd\x3d\xf7\xd5\x39\xe8\xa4\x19\x40\x04\xf2\x4e\xfa\xc6\x84\x71\x3b\x3f\xe1\xa0\x24\xd0\x22\xb7\xdc\x30\xbc\xb2\xa1\xa2\xb8\xaa\x78\x01\x5d\xcc\x36\x6d\x54\xe8\xef\xd0\x92\xdf\x92\x1b\x22\x0e\x74\xcf\x56\xc2\xc5\xf6\x05\x0a\x2b\x5a\x00\x78\x07\x0d\x82\x92\x0c\x47\x14\x4b\xcc\x16\xa4\xc9\x61\x69\x16\x8a\xf1\x66\x46\x40\xda\xf0\x50\xa7\x1a\xfa\xf4\x32\x5a\x0b\xd2\x38\xc4\x4d\x30\x5e\x05\x25\x2d\xfc\x71\x66\x38\x8f\x6e\x39\x14\x88\x32\x76\x4b\x3d\xf2\x36\xc7\x78\x4e\xee\x13\xe2\x7b\x84\xc8\x96\x2e\x61\x52\x6a\xe3\xe3\x3b\x82\x4b\x22\x9e\xd5\xf3\x79\xe8\xa0\xb5\x1b\xa9\xd3\x6b\xde\xa4\x40\xf5\x2c\xe7\x25\xb4\x41\x33\x68\x14\x98\xa1\xa4\xef\x48\x93\x7c\xf4\xca\x66\x4a\x99\xb4\x2d\xbd\xb3\x33\x6e\x72\xdf\xe5\xe4\x6d\xed\x62\xf9\x0b\x1d\xef\xf8\xd6\x40\x3d\x57\xb9\x71\x7f\x6b\x65\x41\x0a\x45\x6f\x9a\x4e\x02\x30\xdd\x10\xa7\xe6\x38\xa0\x37\xce\x26\xf0\x1b\xc4\xa3\x36\x6c\x56\x2b\xc2\x4a\x52\x22\x2c\x2d\x0a\x02\x30\x0d\x52\xdc\x8c\xc0\xc9\x86\x21\x38\x93\x23\xb9\xc2\x55\x65\x12\xf0\x04\xc1\xd7\x80\x81\x70\x96\x69\xf7\xd1\x42\xba\x83\xf2\x20\xf4\x0a\x8b\x05\x41\x85\xc9\x2d\xc3\xb5\x24\xd9\xf0\xcd\x66\x01\x49\xba\x60\x10\xb6\x0a\x56\x0e\xe4\xd6\xad\xc8\x8a\x8b\x8d\xee\x87\x21\x46\x0a\x22\x25\x16\x9b\x6d\xea\x0c\x44\x8b\x79\x84\x7a\xb6\x51\xb1\x93\x86\x2e\x27\xf6\xbf\xe9\x9d\x1a\xac\xea\x62\xe9\x46\x67\xf2\xe9\x22\x92\x65\x06\x99\x98\x26\x1d\x67\x8f\x32\x34\xd3\xc0\xf6\x81\x51\xb6\xf3\x49\xbd\x28\x7e\x49\xa4\xc9\xb9\x8e\xc0\x3d\xe7\x8a\x78\x2e\x54\x13\xdc\xeb\xa2\x68\xb1\x42\x15\xc1\x52\xa1\xa3\xa7\x4f\xbe\xf9\x4a\xef\x0d\x6d\x7e\x85\xe6\x7e\x93\x62\x11\x01\xeb\xf6\xa5\xdb\x63\xdb\x73\x1b\x09\xc5\x79\x25\x27\x94\xa8\xf9\x84\x8b\xc5\xe1\x52\xad\xaa\x43\x31\x2f\x7e\xf3\xf5\x57\x8f\xa2\xe7\x9f\xa9\x35\xb8\xdd\x15\x48\x5b\x93\x58\x11\x5f\x3b\xc8\xad\x1f\x2d\xbc\x9f\x3c\xfe\xcd\xd3\x6f\x0c\x6e\xc3\x43\x30\x41\x5e\xc7\x88\x32\xf5\xe4\x71\xb0\xc5\x8a\x32\xba\xaa\x57\xc7\x06\x67\x09\xb1\x09\x81\xb0\x41\x3e\xf6\x99\xe6\x7b\x7c\xf7\x86\xdc\x0a\xaa\xc8\x7d\x58\xae\xf7\x75\x9c\xf9\x62\x2a\xd2\xa4\x78\xc6\x98\x4f\xf0\x55\x80\xc3\x35\xed\x35\x9f\x44\x60\x5a\x09\x20\x60\x5c\xe6\xe8\xa3\x44\x78\xbd\x26\xac\x74\x87\xd8\x29\x8e\x8e\x8d\xd4\xf1\xb9\xc7\xd1\x94\x15\x7c\xa5\x61\xea\xd1\xb4\x99\x8e\x6e\xeb\x58\xd1\x15\x55\xa9\xad\xe3\xde\xf6\xdc\xc6\x29\xf4\xee\x1b\xc4\x1c\xc0\xa9\x4b\xdc\xa4\xdb\x86\xea\xd6\xdb\x02\x8c\x26\x61\xe4\x54\xa2\xa3\x7f\xd6\xf2\xf8\xe6\xe8\xb7\x8f\x3f\xd0\xea\xf8\xea\xd1\x6f\x9f\xde\x63\x71\x64\xd9\x08\x81\x55\xd2\xf5\x3a\x79\x4d\x5b\xd3\x80\x57\xb4\xd8\x34\xcc\x6b\xd1\xdf\x9c\x89\x07\xf2\x72\x51\x93\xc3\x9d\x67\x0c\xec\x1a\x9d\x3c\xe7\xe2\x16\x8b\x92\x94\x66\xa8\x17\x30\xc0\x1c\xa7\x5a\xf0\x43\x67\x74\x10\xd8\x54\x33\xa3\x8c\xf9\x6d\x62\x9f\xb0\xcd\x31\x92\x28\xb3\x89\xf9\xd6\xf5\x70\x80\xfe\x34\x6e\xfe\xd0\xff\xea\xfe\xa0\x8d\xd0\xd8\x06\xdc\x6f\xa7\x0d\xcd\xee\x97\x17\x82\x2b\x6e\xf6\x75\x5b\x3f\x8f\x6d\x8a\x53\x04\x70\x97\x7c\x5e\xce\x8a\x2d\x19\xc0\x59\x93\xc7\xd5\xc4\xce\x34\x51\x5a\x27\x20\x88\xae\xa2\x67\x49\xe6\x0c\xa0\xc5\xa5\x55\x9d\xa1\xf5\x65\x64\x9a\xb4\xb1\x3e\x76\x40\x31\xb8\x76\x53\xa0\xa5\x15\xb9\xa3\x12\x04\xa3\xcf\x82\x7a\x6c\x6f\xc8\xba\xc2\x05\xb9\x1a\x1d\xf4\x87\x11\xf5\x71\x44\x07\xd7\x90\xb2\x1d\x19\x12\x00\xdf\x88\xe4\x98\x46\x68\x06\xd7\xd0\x04\x71\xd1\x21\xd1\x17\x5b\xe3\x7e\x35\x3f\xe7\x8c\x7c\x10\x9c\x6e\x0f\x3b\xb6\xc9\x05\x02\x6f\x60\xf5\x69\xb3\x17\x57\x82\xe0\x72\xa3\x01\x34\xe3\x3a\xd7\x1b\xc5\x0f\x82\x4d\x53\x1a\x22\x84\xd3\x96\xae\x51\xdf\xce\x26\x4c\xf1\x67\x1b\x27\x49\x8c\x58\xb1\x02\x8a\x4a\x8f\x4b\xef\xb1\x83\x34\x9f\x46\x5e\x5a\x0e\x8b\xbc\x35\x74\x8c\xed\x17\x35\x0a\x76\xdf\x25\x3a\x54\x9d\xe3\x15\x39\xc5\x92\x9c\x94\x7f\xa9\xa5\x5a\x11\xa6\x72\x6c\x9d\x51\xf4\x63\x8f\x9d\x0a\xac\x75\x5c\xfb\x2a\x45\xde\x02\x33\x2f\x96\x09\x52\x54\x5a\x69\x62\x6a\xeb\x4c\x10\x7a\x81\x8b\xa5\x07\x31\x9c\xa6\x8c\x6c\xcd\x01\x48\x78\x85\xea\x26\x6c\x0b\x58\x1b\xfb\xe0\xf2\x0d\x0a\xbc\xa6\x0a\x57\xf4\x1d\x38\x23\xa2\xae\x26\xc8\x71\x24\x77\x78\xb5\x86\x4a\x24\x6d\x1c\xc9\xd5\xa8\x27\x90\xaf\x46\x9d\xe3\xcc\x68\x98\x98\x1e\xc4\xd5\xe8\x6e\xdc\x28\x0f\xfd\xaf\xab\x51\x67\xc8\xad\x39\x68\x26\x6f\x30\xb4\xc4\x37\x31\x15\xe2\x15\x53\xd8\x9e\x9b\xcd\x2a\xee\x12\x07\x16\x2c\x67\x51\xe7\x9d\x47\x99\xa2\x22\x58\x28\x72\xa7\x0e\x10\x29\x17\x64\xac\x88\x58\x51\x66\xab\xe8\xb0\x12\x09\x32\x26\xac\x10\x9b\xb5\xb2\x79\xe0\x31\xf9\xa3\x1b\x83\x0b\xfc\xb6\x4d\xc5\x84\x8d\xce\x11\x8c\x51\xa3\xda\x1a\x8f\xed\xba\x56\xfd\x81\x27\x4e\x0a\xdc\x98\xa1\x0f\x6d\x60\xd8\xb4\x74\xe0\x38\x8d\x3d\xc0\xd3\x12\xaf\x05\xbf\xdb\x4c\xe0\x65\xb7\xac\xd3\xe1\xf2\x68\x6c\xba\x1a\x6b\x66\xfe\x5f\x4a\xd4\x31\x8c\xb7\x55\xb2\x26\xc8\x8e\x1c\xbc\xcd\x24\x31\x74\x7f\x90\x71\xcf\xb6\xde\xf3\x5b\x43\xda\x40\xec\xd8\x46\x5b\x96\x10\xe3\x0e\x69\x49\x33\xd8\x76\x6e\xd9\x29\x22\xcf\xa8\x22\xab\x68\xac\x5e\x47\x20\x6c\x89\x66\x3d\xe2\xef\x22\x42\x22\xbe\x6e\x0d\xe7\x32\x9b\xf1\xdd\x5b\xb8\x7b\x73\x7f\xed\xf5\xd7\xdb\x28\x54\x5a\xc1\x4e\x83\xa5\x96\x7a\xc7\x52\x71\x1b\x70\x93\xc7\x1b\x85\xb8\x25\x4f\x70\x7b\xfa\x44\x19\x7a\xf3\xed\x29\x7a\xfc\xf4\xe8\x29\x92\xd6\x1b\xf0\xd5\xe4\x71\x4c\xa4\xac\xf0\xdd\x19\x61\x0b\xb5\x3c\x46\x47\x8f\x1e\x87\x37\xae\x60\xbf\xbb\x56\x8f\x62\x96\x0c\x56\x8a\x08\x76\x8c\xfe\xfc\x1f\x7f\xfb\xf3\xcf\xe3\xff\xf1\xf9\x7f\x3c\xf8\x9f\x0f\xbf\xf8\x72\xf2\x68\xfc\xdb\x93\xf1\x4f\x7f\x7e\xfb\x7f\xf0\xf8\xdd\xdf\xfe\xef\x2f\x5f\xfe\x47\x8c\xd5\x86\x82\x0f\x58\x5d\x55\x78\x56\x91\x63\x14\x5d\x07\x06\x06\x16\x02\x87\xe4\x88\x49\x0e\x7e\x15\x89\x5e\xe8\x2a\x18\xd7\xd6\xdb\x3a\x77\x43\x70\x21\xe8\x1a\x15\x50\xc1\x2e\x63\xdb\xdb\x18\x11\x01\x2f\xbc\x15\xaf\x94\x41\xbd\x1f\xca\x20\x31\xc1\x6c\x61\x53\xa6\xae\xdb\xd8\x4e\xd0\xe5\x66\x6d\xbc\xe3\x07\x66\x4d\xda\x3e\xbd\xc3\x81\x41\x89\x8d\x2d\x07\xba\xba\x12\x36\x91\xda\x7a\xc1\xfd\xfe\x2c\xc3\xda\x3e\x0a\x1c\x33\xc7\x67\x66\xfb\x83\x66\x1b\x3f\x9b\x00\x2a\x8c\xd9\xf2\x79\xc0\xab\x36\x64\xb1\xe2\x0b\x69\xaa\x58\x14\xb4\xa2\x2a\x1e\xf7\xa9\x84\x31\x55\xbd\x34\xf3\x1e\x36\xe2\xc2\x29\x02\x92\x71\x24\xeb\x62\xe9\xa1\xcd\x90\x02\x06\xa8\x78\x0b\x3a\x2c\xa5\x86\x43\x90\xed\xfe\x38\xba\x9c\xbb\x05\x27\x4c\xeb\x8e\x5d\x4c\x2c\x08\xaf\xe0\x8b\x19\x60\x14\x64\x47\x46\x3c\x7c\x68\x3d\x7c\xb6\x3e\x88\x41\xcb\x12\x4b\x3d\x75\x32\x9f\x9b\xc2\x5b\x95\xa6\x83\x96\x26\x09\xa0\xb4\x35\xb0\x4a\xab\x68\x80\x3f\x4e\x2e\xb4\x0e\x1b\x9b\x1c\xed\xec\x33\x3e\x80\xa8\xc5\xe9\xca\x15\x20\xb3\x0c\x6c\x67\x0b\x67\x52\x4d\x38\xaa\xdc\x30\x85\xef\x6c\x10\xea\xd0\xc4\x2b\xbe\xb0\x50\x26\xd6\x3f\x42\x86\x37\xed\xe9\x89\x8f\x1e\xfc\xf5\xcb\x3f\xfd\x9d\x5f\x5d\xa1\x07\x05\x3d\x7e\x50\xac\xdf\x3e\x98\xd3\xe3\x07\xf3\xf5\xdb\x07\x97\xf2\xed\x03\xa1\x8e\x1f\xac\x69\x39\xfa\x1d\x92\x36\x43\xa3\xe0\xc2\xe8\xcc\x32\x1d\x9c\x69\xb1\x87\x4a\x5e\xd4\x0d\x26\xcc\x69\xc6\xf1\xe1\x61\x31\xe3\x4c\x91\xc9\x82\xaa\x65\x3d\x03\xa3\xc0\x18\x0c\xe3\xb2\xe0\xec\xe6\xf0\xf1\xe4\xd1\x61\x47\x32\x99\xfc\x8c\x6f\x26\x8f\x27\x4f\xc2\xf5\x3f\x50\xb6\xd4\xcf\x92\xfb\xbe\xe4\xdf\x7b\xb0\xf7\xe0\x6f\x7b\x57\x7f\xfd\x79\xfc\xe5\x2f\xbf\xff\xf9\x7f\xff\xe9\xc5\x2f\x7b\x07\xed\xbf\xf7\xbf\xb8\xfa\xfb\xfe\xef\xf7\x7e\x3e\x19\xff\x84\xc7\xef\x7e\xf9\xf2\x6f\x57\x3f\xff\x6c\xd5\xc3\x5b\xf8\x61\xef\x6a\xef\xe7\x3f\xef\xff\xf2\xe5\xd5\xfe\xfe\xef\xf7\x0e\xe2\xef\xf6\xbf\xb8\xfa\x65\x7f\xff\x6f\x3f\xff\xf9\xc1\xcf\xc7\x05\x53\xa2\x3a\xfe\xe5\x97\xfd\x2f\x62\x8a\x25\x2b\x24\x31\x5e\x0d\x06\x6d\x05\xa0\x01\x33\x76\x56\x27\xf3\x6a\xc4\xf4\x4d\x86\x04\xe1\x5b\x63\xc2\x88\xdb\x31\x2d\x47\xfb\x19\xaa\x22\xc5\xa7\x9e\x12\xe9\xc9\x45\x10\xdb\xb0\x06\x1e\x6e\x39\xfc\x13\x10\x4d\x45\x91\xfb\x58\x1c\x7a\xe1\x25\x00\x87\x96\x24\xe3\x01\x29\x1c\x0f\x8a\xfc\x48\x6c\x7c\x3f\x03\x26\x83\xcf\x92\xd1\x73\x89\x97\x15\x5f\x2c\x28\x5b\x0c\xf8\x37\x6d\xab\xd8\xa9\xe7\xad\xe6\xab\x76\x2b\xa7\x5b\x87\x2b\x77\x2d\x89\x20\x93\xb8\x57\xd9\x54\xa0\x35\xb9\x66\xa0\xb6\xb5\x25\xef\x2a\x6f\xcd\xea\x90\xdd\xef\x2b\x79\x38\xd0\xa7\x12\x9a\xef\x7a\x14\x87\x13\xd9\x3b\xbd\x2c\xf2\x50\xae\x4e\x5b\x15\xb1\x3d\x15\x18\x3a\x7d\x33\x68\x4a\x6e\x79\xda\xd9\x01\xfa\xa9\x6c\xe7\x77\x5f\x8b\xa1\x24\x52\xe9\x3d\xed\x56\xb5\xcf\xe8\x8c\xbd\x2f\xf4\x08\x4c\x00\x95\x8f\xf7\x05\x8f\xaf\xa3\xbc\x2c\xaa\x26\x3a\x64\x87\x04\x81\x36\xa2\x24\x1a\xc3\x7a\xea\x9a\x24\xa1\x22\x8f\xbd\x9b\x99\xc6\x83\x58\x1b\xa0\xe9\x70\xfe\xcc\xac\x08\xb9\x91\x15\x0f\x2c\xbf\xe8\xb4\xcd\x07\xe1\x39\x63\xf7\xd6\x05\xed\x4e\x50\x66\x46\x76\x7f\x92\x53\x80\x93\x9e\x21\x67\xe4\xf5\x7c\x28\x63\x21\x3f\x8b\x0e\x21\x5c\x96\x22\x2b\x85\xce\x3b\x17\x5a\xdf\xc4\x65\xf3\x3f\x6a\x04\xe1\x63\x27\xf7\xe4\xf7\x9f\xdd\x7b\x87\x21\xec\x57\x2e\xe6\xf9\xd5\x45\xf3\x8b\x35\x1b\x0c\x4f\x64\x4c\xc9\xab\xf1\x8a\x21\xac\x83\xd0\x1b\x02\x6b\x1c\xad\x88\x94\x78\x11\x3f\x27\x6c\x9f\xec\xb4\x21\xe4\x76\x64\x91\x13\xa8\xe8\x84\x47\xee\xbb\x9e\xa9\x64\x79\xdf\xbd\xcd\x98\x30\x9f\x77\x27\x97\x12\xc5\xe9\x9d\x41\x7f\x4a\xc6\xa9\x5e\xf1\x02\x57\x47\x51\xa7\xba\xff\xe4\x26\x79\x5d\x13\x31\x9c\x69\x37\x86\x80\xb3\x8c\x66\x2b\x4c\x73\x12\xc6\x4a\x4c\x56\x19\xb5\x22\xc6\x08\xd7\xc1\x12\x8b\xfd\x66\x99\x1c\x39\x46\xd5\x3a\x67\x16\x8c\x64\xe4\x88\x8e\x51\x5d\x17\xeb\x8c\x66\x85\xc8\x9e\x6a\xf8\x44\xba\xdb\x6e\xae\x72\x3a\x65\x59\xad\x70\x5d\xd2\xe1\xd2\x0b\x63\x84\x2b\x92\x51\xa2\xc1\x4c\x35\x67\x0e\xc0\xc7\x71\xf3\xb6\xd7\xf0\x28\xb7\x61\x76\xd7\x4f\x72\x1b\xa6\x75\x81\xd7\xf0\xeb\xdc\x86\x69\xd9\xee\x35\xfc\xcd\x87\x94\x8c\xeb\x68\xc2\x92\xff\x74\x13\x7a\xb8\x50\x4e\x07\xfc\xf1\xf9\x85\xf9\x9b\xd5\xab\x19\x11\xff\x1c\x45\x30\x1c\xba\xe1\x3f\x2b\x7c\x67\xc2\x38\x9e\x7e\xfd\xf5\x93\x61\xea\xb4\x31\x51\x99\x68\x8f\xc7\x46\xb5\x4f\x6e\xd5\x06\xab\x5f\x87\xec\x8e\xa1\x32\x29\x1f\x27\x6f\x36\x58\xc4\xc6\x37\xe1\xb5\xa1\xa8\xcd\xf6\x21\x0a\x5e\xa1\x57\xaa\xd9\xc6\x27\x22\x1c\x1a\x7b\x18\x5d\x0d\xc9\xcd\x4b\xcf\xf5\xe0\x6e\x1b\x69\x1d\xc9\x56\x8b\xd3\x92\x14\x58\xb4\xe6\xfd\x00\x4c\x86\x57\xa4\x04\x5d\xbb\x90\x57\x23\x97\x73\x12\x70\x70\xac\xb9\xa9\xf1\xdc\xf6\x37\x00\x39\x02\x47\x71\x04\x71\x53\x8d\x63\xd9\x1b\xf5\x30\x4e\x2f\x97\xa4\xdd\xac\x42\x79\x68\x7b\x15\x4c\x45\x6c\xb5\x64\x8b\x4c\x20\x11\x8a\x94\xec\xf6\x1f\x72\xb7\x26\x85\x6a\xb6\x67\x8d\x8f\x07\x97\x7a\x91\x40\xde\x5b\x17\xcb\xee\x6c\x21\x73\x53\x24\x79\x55\x9b\xfa\xd1\x46\x18\xe0\xd2\x6e\xfb\xec\xdd\x00\x54\xe6\xcf\xbe\x8d\xa4\x33\x67\xa2\xdd\xe9\xda\xda\x02\xf0\xde\xfc\x1d\x3c\x6c\xf1\x9f\x19\x41\xa5\xe0\xeb\x35\x29\x6d\x7c\x06\x12\x58\x11\x6b\xd8\x49\x44\xee\x0a\x42\x6c\xc0\x4c\x2e\x43\x89\x9a\x29\xba\x22\x0f\xa5\xab\x58\x64\x4f\x62\xfa\xf8\x78\x28\x51\x81\xd7\xb8\xa0\x2a\x10\xf7\xdb\x9b\xb8\x5e\x27\x66\x4b\xa5\xff\x7d\xe6\xe8\x0f\xfb\x4b\x53\x52\x7f\x6b\xdf\x36\x4c\xf8\x2e\x81\x61\xa5\xba\xba\xf8\x98\xf5\x64\xb8\x29\x09\x0e\x72\x7c\x00\xaa\x1d\x49\x6b\x13\x03\xcb\x66\x31\xd9\x00\xe4\x25\xee\x9c\x1a\x35\x47\x5c\xb6\x47\x53\x31\xab\x20\x03\xc6\x72\x4e\x9a\x7c\xde\xbe\x7f\x6c\x49\x92\x21\xa4\xff\x05\x72\xce\x97\x4a\xad\x4f\xf1\x5a\xd5\x82\x9c\x72\x7e\x9d\xdc\x4e\x6e\xa5\x2e\x74\x3f\xf4\xf6\x4d\xe0\x7c\x2d\xec\xcf\x03\x25\x7f\x5a\x07\x5f\x61\xc0\xf5\x4f\xd9\xe2\x9e\xbd\x04\x54\xc6\x9b\xfe\xf5\x92\x70\xa0\xe3\x4b\x2a\x79\x74\xbf\x35\xfb\xad\xe3\x7b\x8b\x0a\x3d\x71\x83\x8e\xd6\x93\x97\x64\x04\x77\x64\x6f\x06\x6b\x56\xc0\x36\x46\x52\x92\x20\xd7\x11\xb0\xc2\xaa\x58\x5e\x66\x94\xaf\xeb\x4c\xb4\xf9\xaa\xb7\x2b\x76\x26\x00\xbc\x8f\x47\x26\xb7\xcf\x8c\xa0\x35\x11\xda\x7a\x33\x45\x91\x8d\xec\x84\x49\x9b\x64\xd6\x40\xd9\x8c\x41\xa0\xa3\x17\x77\xb8\x50\x23\x57\x0a\x8f\xe8\xbf\xdc\x2d\x36\x66\x64\x50\xad\xe0\x42\x90\x39\xbd\x1b\xa1\xf4\xe1\x86\x79\x9a\x5b\x70\xd6\xf0\x91\x01\x63\x58\xd0\xf5\xe6\x9f\x29\x1e\x24\x8f\x22\xcc\x03\xc7\x0f\xce\xe4\x69\xa3\x8c\x6c\x94\x05\xbc\x05\xc6\xb6\xbd\xd8\xd1\x0e\x82\xa5\x4d\xd9\x51\xb8\x8d\xcb\x8d\x37\xd5\x8f\x01\x3d\x6c\x63\xdb\xd1\xc4\x62\xb7\x5a\xa6\xc8\x1e\xac\xa6\x43\x3b\x02\x34\x9a\x73\x3e\x32\x81\xdd\x96\xc7\xe1\x52\x89\x86\x1d\x4a\xd3\x62\x10\x2c\x17\xd0\x70\x86\xc5\x08\xcd\x6a\x05\x11\x94\xda\xa8\xb4\x30\xf4\xef\xcd\x39\x92\x80\xcc\x49\x55\x2c\x87\x37\x4a\xc8\x8d\x85\xca\xac\x35\x88\x32\x5d\x2d\x63\x04\x2c\x34\xd8\x2a\x8b\x4e\xd9\x1b\xbf\xf6\xd0\x69\xb7\x95\x6f\xbf\xf2\x56\x3e\x76\x1b\x2a\x54\x99\x57\x3c\x75\x5e\x66\x87\xa9\xed\x58\xb3\xa4\x40\xba\x35\x59\x0d\x70\x4e\xe1\x62\x5a\x6d\x84\xc5\xd0\x51\xb9\x79\x3c\x46\x39\x70\x7f\x78\xb7\x73\x71\x46\xc6\xc5\x12\x0b\x5c\x28\x48\xa9\x33\xf9\x13\x62\xe8\x78\xaf\x1d\xae\xb1\x99\x94\xd8\x78\x96\x1e\x95\x76\xce\xe6\x18\xde\x1c\x47\xea\xb9\xe4\x48\x3e\x25\x6a\x66\x72\x40\xed\x62\xf4\x6c\xa1\x49\x37\xb7\x69\x28\x73\xd9\xc7\x42\xb3\x79\x80\xeb\xb5\x56\x70\x2f\x1e\x46\x92\xac\x31\x98\xab\x90\x01\xee\x64\xad\xe2\x43\x95\x79\xf4\xd3\x90\xb5\x13\x9c\x0e\x0a\xb9\x09\xa7\x19\x00\xd2\x6c\xb9\x93\x07\x9c\xb6\x6d\xee\x7e\x3b\x7f\xb7\x9d\x3e\x17\x37\x4f\xea\x74\x1c\xf7\xb4\xd2\x2b\x25\x07\x63\x2d\xec\x64\xba\xb1\x70\x1d\xbd\x1e\x3e\x81\x1e\x04\xf9\xf4\xf1\xd3\xaf\xbd\x13\xea\xa3\x0c\xdc\x67\x1d\x2f\xdb\xd6\x39\x87\xcc\xe6\x69\x8f\x9a\xe3\xe7\xcc\x89\x78\x06\xf3\x64\x0b\xac\x56\x51\xec\x4c\x49\xab\x5f\x22\xf4\xb4\x4a\xd2\x90\x75\x10\xfb\xc1\x10\xc7\x14\x59\x87\x55\xb6\x09\x3c\xf8\xff\x92\xac\x39\x6e\xb0\x71\x6b\x5a\x0c\xb4\xb2\x08\x19\x72\x70\x0d\xf9\xc1\x56\xf8\xee\x15\x18\xfe\x09\x09\x94\x11\xc6\x89\x06\x43\x39\x51\x77\xaf\x15\xcd\xff\x72\xcf\x76\x1e\x58\xf7\xcb\x26\x66\xa2\x23\xa7\xff\x59\x5b\x2d\x3f\x44\xba\xb1\x97\xd0\x15\xeb\x67\xed\xf2\xb5\xb9\xa8\x90\x55\x36\xc6\x32\xb9\x3b\xf2\x43\xe7\xdd\xb2\xf3\xae\x61\x65\x10\x22\x2a\x49\xa1\xad\xc7\xfe\xeb\x04\x58\x13\x5a\xe2\x2a\xa4\x85\x5c\x71\x2e\x3e\x5f\x22\x1b\x97\x0f\x55\x25\x07\x90\x4b\xe5\x56\x78\x3f\x82\xb0\x76\x17\xdb\xef\x8d\x6e\x7f\x82\xd0\x77\xc9\xb4\x20\xd4\xb9\x37\xa4\x21\x97\x1e\xfb\xe5\xd9\x14\xad\xb1\x94\x6a\x29\x78\xbd\x58\x76\x2e\x6e\x7b\xdf\xab\x0f\xac\x8e\xdf\xc5\x31\xec\x32\x0e\xfc\xb4\x3d\x8d\x5c\x3f\x98\x6b\x20\x07\xca\x3d\x9a\xe0\x66\xa6\x99\x11\xfb\x99\x70\x3b\x6c\x99\xde\x54\x0c\xba\x01\xb6\x10\x90\x72\x05\x18\x1a\x67\xba\x02\x90\xe7\x0e\xf0\x83\xb0\x77\x73\x07\xa0\x9d\x62\x03\x76\xd8\x1c\x6c\x4d\x3c\x67\x83\x90\x01\xb3\xcd\xc1\xb7\x93\xb6\x81\xbf\xe6\xb6\x45\xff\x37\x67\x8d\x67\x01\x4d\x58\xec\x21\x8b\x3c\x0b\x66\x86\xd5\x9e\x17\x43\xdc\x3e\xb9\x96\xfb\x2e\xf8\x7c\x1f\xeb\x1d\xed\x76\x0a\xb6\x8b\x65\x8e\x32\xad\x73\x34\x68\xa1\x7b\x61\x9d\x99\xa6\x1c\x4a\x9b\x73\xe1\x38\xd1\x2c\xa8\x3b\x66\xaf\xf8\x4f\x8e\xf5\x95\x08\xde\x6c\x9f\x1d\x8e\x80\xf3\x0e\x23\x73\x6d\x2c\xd3\x72\x20\x04\x1f\xed\x72\xc3\x46\xa6\xb1\x85\xb2\x0c\x2e\x64\xae\xb6\x87\x24\xb0\xdd\x54\x9a\x4d\x45\x8b\xe8\xb4\x6e\xa2\xda\x07\x54\x6a\x3b\x01\xfe\xa4\xd5\xe2\xcf\x27\xad\xf6\x49\xab\xf5\xc7\xf4\x49\xab\x7d\xd2\x6a\xff\x1e\x5a\x2d\xf3\x5c\xf7\x8c\x2f\xbe\xdd\x25\x91\x6f\xd4\xf9\x28\x9c\xcf\x67\xa3\x75\xd2\xe7\xdb\x56\x9a\xb8\x63\xb9\x6e\x32\xe6\xce\xd9\x8e\xa8\x2b\xa3\xe0\x12\x58\x23\x9c\x3a\x99\x78\x0f\x65\x93\x1b\xd7\x4f\xa8\x4b\x00\x36\x05\x0a\x6c\x42\x5b\x1c\xc4\x41\x93\x23\x67\x9b\xa6\x0e\x8a\x3f\x74\x56\x5c\x6a\xf8\x5b\x2e\x16\x47\x27\xcf\xc5\xb2\xed\x48\x49\x39\x1d\xb2\x5d\x2c\x5d\x47\x4a\xca\x33\xb2\x93\x8b\x25\xe4\x48\x49\x00\x4f\xb9\x58\x5e\x29\x54\xba\xda\xb0\xd8\x64\x8d\xba\xc3\x17\x83\xa6\x01\x2f\xd1\xfd\x3c\x2d\xef\x5d\x94\xde\x0b\xab\x0b\xb6\xb8\x6f\x52\x16\x54\x05\x59\xe3\x82\x4c\x49\x45\x0a\xc5\x87\xaa\x53\x8e\xb6\x3e\xf0\xaf\x60\x9e\xd3\xca\x94\x00\x23\x48\x12\x10\x0c\x4d\xf3\x90\xe6\x1a\xbe\x51\xdd\xe6\xfa\x9a\x2e\xe0\xae\x78\xdd\xa1\x5b\xe3\x61\x64\xca\x25\x76\x17\x6b\x47\xef\x61\x66\x6e\xac\x94\x2d\x76\xae\x6d\x05\xfe\xe8\x17\x77\x6b\x61\xcb\xb6\x65\xa4\x72\xf5\x3f\x31\x57\xcb\x57\x54\x02\x92\x2a\x3c\x23\x15\x92\x0e\xa1\x96\x17\xa0\xbc\x45\x4c\x4e\x5d\xc2\x45\xfe\x6d\x3b\xb0\xfc\x4f\xce\x9f\xc7\x4c\xe6\xfc\x2a\x14\x27\x89\xe1\x98\x61\x37\x6f\x92\xde\x4f\x1b\x04\x67\x4f\xca\xe4\x01\xc2\xe8\x9a\x6c\xcc\x69\x2c\x66\x6d\x50\xa6\x8d\xf5\xab\x9a\x2b\x2b\xae\x49\x5c\x92\xea\x8f\x6d\xc1\xd0\x48\x9b\x9c\x1d\xc1\x35\x49\x26\x82\x74\xd0\x71\x4d\x36\x2e\xc4\xd5\xe0\x45\xff\xd0\xd8\xc2\x0d\x2a\x86\x3d\xd7\x7a\xd7\x97\xd2\x3a\x59\xa6\x8d\xc3\x5a\xf6\xf0\x1b\x34\x0b\xb2\x36\xe9\x59\xd2\x10\xe2\xa1\x34\x48\xd7\xdc\xb8\xa4\xeb\xa1\x70\x1d\xec\x16\xb4\x2b\xd7\x6a\x2e\x35\x70\xe0\x0d\xff\xbd\x62\x07\x5a\xf5\xe8\xff\xbc\xb8\xa3\x72\xc0\x5a\xd5\xb4\x7c\xce\x89\x3c\xe7\x0a\x5a\xbf\x37\x72\xcc\xd0\xb2\x51\x63\x63\x8a\x28\x14\x37\x02\xe3\x4a\xcf\xcf\x86\x25\x74\x0a\xe7\xa6\xad\xb3\x06\xc5\x54\xa2\x57\x4c\x2b\x1f\x8b\x83\x66\x2f\x26\x2d\x78\x67\x91\x33\xce\xc6\x60\xde\xa4\x6d\x67\x9b\xf1\xef\xc3\x37\x68\xd5\x7d\xf8\x98\xf3\xbb\x4a\xa3\xbc\x33\x0c\x33\x04\x23\x61\xcd\x1b\x28\xf0\x0e\x55\xb4\x4a\x54\x42\x51\x77\x13\xfb\x84\x15\x59\x0c\x5c\x6d\xb8\x22\x62\x41\xb4\xa1\x5f\x2c\x53\xb3\xca\xf0\x3a\x64\xda\xf8\xc3\x46\xf1\xd0\x0e\x60\x9c\x10\x35\xe3\x06\xed\x91\x06\x83\xf6\x76\x7a\x7c\xa0\x10\xce\xb4\x40\x89\x60\xa3\xbd\x0b\xf3\x62\x50\xa2\x0d\x62\x6c\x5b\x17\x99\xae\x8d\x3c\x5f\xe1\xb5\xe6\xfc\xbf\x6a\xf1\x0c\x4c\xf4\x77\xb4\xc6\x54\xc8\x09\x3a\x41\x92\xb2\x45\x15\xe3\x7f\xff\x0b\x1b\xc4\xe2\x03\xd7\x70\xb5\x21\xff\x6b\x4d\x6f\x70\xe5\x02\x90\x19\x22\x55\xea\x9a\x07\x17\x40\xe8\x69\xcb\x03\x74\xbb\xe4\x12\x34\x43\xbb\x3f\x18\x5d\x93\xcd\xe8\xa0\xb3\x42\x22\x10\x75\xe3\x57\xcc\x5e\x91\xb5\xb5\x28\x1b\x3d\x05\xe6\xf1\x08\xde\x8d\x26\x5b\x0a\x36\x02\x7b\x40\xed\xde\xdb\x2c\xe3\x25\xb9\xd0\xeb\x50\xf7\x3d\x68\x92\xf9\x8d\x6d\x12\xbb\x6c\xae\x12\x70\xd6\x14\xe2\x37\xce\x34\x2b\x96\xa4\xac\xab\x30\xb3\xd8\xcd\x5c\xc8\x14\xeb\x18\x54\xcd\x65\xee\x4d\x89\x50\xa8\x0e\x7e\xee\x8f\x25\x00\x5e\xdb\x6f\x50\xd5\xda\x5e\xa6\xb9\xb3\xf1\xa5\x27\x1b\xb7\x55\xc3\xc8\xf1\x4d\xd5\xa6\x1e\x7e\x4f\x75\x97\xe6\x2a\xe5\xbc\x0b\x22\xbc\xab\x00\xd2\x86\xa6\xbd\xbf\x76\x46\x14\x9e\x74\x2f\x9f\xe1\xd1\xd5\x5c\x51\x56\xdf\xd9\x99\x8e\x05\xaf\x48\xef\xcb\x5b\x2e\xae\x89\x38\x46\x0f\x1f\xda\x9e\x9b\x7e\x9b\xf8\xce\x08\x64\xd9\x37\xd9\x4d\xa5\x39\x10\xf8\x9d\xeb\x07\xef\x9d\xf2\x9f\x67\x1a\x6f\x51\x69\x17\xf3\x38\xe9\xd7\xf7\x0c\xe7\x9d\x4d\x64\xb4\x73\xc4\x77\xbe\xa9\x9c\x56\x78\x90\x36\x71\x0f\x73\x79\x00\xaa\x11\x98\xc3\x26\x33\xda\xc1\x91\x3e\x60\x3a\x6f\xa1\x28\xcf\x7c\x1e\x3e\x2d\x68\xbc\x16\x43\xee\xc6\x6c\x0f\x61\x8e\x29\xbd\x35\x9d\x5c\x73\x7a\x70\x42\x26\x15\x67\x17\x93\x7a\x10\xa4\xb5\x0d\x77\x31\xab\xd1\x2e\x08\x1b\x36\xaf\xd1\x3d\x4d\xec\x61\x6c\xf5\xcc\xe0\x61\x33\x7b\x10\x64\xc7\x0c\xdf\xc1\xd4\xce\x1a\x6b\xd0\xea\x4f\x9a\xdb\x83\x60\xb7\xcd\xf1\x5c\x93\x1b\xe5\x1e\xf6\xed\xe4\x5e\xcf\x3d\x69\xcd\x09\xf0\x4b\xed\xf8\x33\x4c\x71\x94\xeb\x76\x1f\x1e\xf3\xa0\x59\x8e\x76\x34\xcd\x51\x2e\x56\xef\x6d\xa2\x27\x3a\x36\xc6\xfb\xce\x66\x7a\x6a\x2a\xbe\x01\xbf\xa3\xa9\x9e\x02\xdb\x5b\x7b\xb9\xe6\x7a\x02\x64\xd4\x90\xcf\x31\x03\x32\x37\x77\xf1\x1b\x24\x79\x65\xcb\x4b\x65\xd5\x79\xf2\x9a\x77\x2d\x1f\xff\x45\x6b\xa6\xc6\xb6\x39\xa9\xab\xb1\xa4\xab\x58\xec\x7b\x41\x35\x29\xb5\x50\x82\xfe\xd2\x77\x28\x66\x5d\xa1\xd8\x39\xac\x38\xd4\x64\x52\x63\xcc\xca\x71\x3b\x8d\xc3\xf7\xad\x91\x7b\x09\xc5\xc4\x4b\x73\xae\x71\xd9\xc0\x85\xd9\x28\x85\xf5\xce\x06\x12\xa5\xcd\x9b\x84\x89\x84\xd9\x06\xc1\x08\x8d\x35\x02\x7c\xec\xf2\xd8\x04\x5d\x57\x04\xfd\x67\xb3\x6c\x0e\x4c\x79\xc9\xff\x4a\x5e\x76\x86\xda\x85\xa5\x05\x75\xc3\xce\xff\xe9\xfe\xf5\x5f\xef\xe3\xb2\x34\x23\xc8\xb6\x4c\x5f\x98\x93\x8d\xee\x5d\xc0\x66\xba\xb6\x54\xa6\xe2\x36\x8d\x2d\x29\xe7\x5f\x00\x7b\x98\x64\x69\x9b\x3c\x57\x55\x1d\x40\x72\x82\x7e\x5c\x12\xd6\xc9\x7e\x33\x49\x7b\x19\xc6\x04\xac\xc5\x73\x3e\x35\x1b\x52\x72\x00\x49\x4e\x44\xb4\xbf\x80\x0c\x38\xe7\x2f\xee\x48\x51\xc7\x6e\x73\x35\x4f\x96\x90\xdd\xc5\xf1\xfb\x87\xd6\x72\x35\xf3\xed\x58\xae\x2d\x4b\xe7\xba\x7e\x93\xb8\xbc\x26\x9b\xc6\xd9\xe8\x6c\xe6\xc1\x03\x50\xcf\xf5\xe8\x6c\x0c\x63\xb4\xfc\xce\x5d\xaa\xb7\x9a\xb9\x52\x0c\x36\xdf\xdd\x12\x3d\xed\x24\xac\xaa\x86\x3c\x7a\xf3\x51\x55\x66\x78\xff\x70\xdf\xf5\xeb\x0f\xe4\xbb\x6e\x74\x48\xd8\xc4\xf6\xec\xe6\x17\xbf\xd6\xb8\x9a\xa0\xe7\xd6\xb7\x31\x40\x52\xd7\xdc\x02\xd8\x72\x75\x35\x57\xbf\xce\xb9\x8d\xeb\x49\x53\x53\x72\x7b\x99\x18\x48\xb8\x02\xb3\x46\x8c\xb5\x9c\x02\xa5\xb6\x30\x5a\x63\xa1\x68\x51\x57\x38\xbd\x75\xd2\x6b\x7f\xc1\x43\xb7\x85\x79\xf3\xc8\xa1\x5d\xcb\xee\x53\x52\x70\x56\xe6\xef\x91\x2f\xfb\x5f\xfa\xd4\x84\xab\x21\x88\xa0\xbc\x1c\xca\x1a\x54\x74\x45\xfa\x0b\x6f\xcf\x1c\x34\x37\x85\x43\xe6\x4e\xb6\x35\x02\x63\x60\xf5\xa8\x25\x11\xb7\x14\x22\x07\xfc\xc8\x03\xba\x60\x5c\x90\x72\xbf\xd5\x22\xad\x14\x48\x8b\x4b\xff\xda\x0b\xaa\xdc\xa5\x9e\xe0\x9f\xb1\x63\xb5\xcb\xd0\x92\xb5\x01\x9b\x84\x3a\xe7\x02\xae\xe8\xd8\x2b\xb9\xb9\x24\xf4\x86\x16\x6a\x7f\x82\x7e\x22\x82\x9b\x24\x5a\xb2\xc0\x70\xcb\x9e\x5d\xb6\x83\x29\x88\x10\x16\x66\xee\xb8\xc4\x12\x3d\x42\x7b\x00\x12\xd1\xd5\x8a\x94\x14\x2b\x52\x6d\xf6\xdd\x99\xac\xdc\x48\x45\x56\xa9\x69\x7b\xd5\x77\x9e\xa6\xf2\x90\xf2\xe2\xa7\x60\x0a\xd9\xdc\xf5\x03\x44\x3a\x75\xc4\xb4\x2b\x01\xde\x61\x15\xab\xde\x07\x65\x74\x74\x1f\xe8\x47\xd6\xb5\x61\x8a\x39\x22\xba\x61\xb2\xbf\x68\x3e\xc5\x48\x90\x85\x5e\xb7\x76\xc5\xbd\xe7\xca\x7c\xaf\x53\x88\xc4\xc7\x7a\x5b\x4a\x0b\x3c\x74\x19\x95\x6b\xe6\x28\xe0\x6e\x07\x68\x8b\x41\x65\x05\x0b\x3a\x30\x93\x90\x7f\x59\x71\x14\x88\x31\x4b\x97\x7c\x4a\xb1\x1a\x5c\x51\x71\x52\xae\x28\x6c\x58\x86\x7c\xeb\xdd\xd6\x4d\x86\x15\xf6\xaf\xdc\x5a\x62\x56\x56\xda\xe6\x63\xe4\xd6\x80\x0f\xcc\xb1\xa8\x30\x5d\xc9\xde\xfd\x0b\xe6\x66\x0a\x7e\x8b\xb8\xb6\xd5\xd9\xc6\xb5\xc2\x85\xe0\xb6\x8e\xb9\x09\x9e\x08\x5e\x2a\x68\xbc\xbf\x36\x56\xb8\xc1\x97\x8b\xfb\xb4\xfb\x85\x49\xf7\xd2\xce\xee\x7c\x42\x0e\xfa\xf6\x12\x4f\xeb\xa2\x47\x78\xc6\x6b\xb0\x7a\xa8\x68\xba\xd9\xdd\x6f\xef\xe6\xf2\xfa\x96\x11\xa1\xd5\x76\x96\xf7\x7e\xeb\xab\x5e\x35\x5c\x73\xc5\x35\x5e\x11\x8b\xba\xd8\x31\x4d\x1f\xa1\xde\x22\x06\xf2\xd9\xdc\xb4\x1f\x3a\x91\x93\xa6\x14\x55\x4c\x18\x5d\x31\x34\x46\x53\x25\x68\xa1\x8e\xd1\x73\x6e\x6f\x6a\xd2\xd4\xb4\x57\xa4\x50\x86\x4a\x3a\x9f\x13\xa1\xed\x01\xaf\xeb\xa8\xb9\x02\x53\x68\x6b\xc5\xeb\xb9\x4d\x4c\x37\xaf\x98\x32\x97\x80\x00\x08\x5b\x15\xe3\xd8\x94\xc7\xb0\xdd\xc5\x24\x04\xb7\x60\xdb\xa1\xac\xb1\x5a\xb6\x25\x3b\x75\x4f\xc8\xc3\xe3\x16\xaa\x12\x1b\xc3\x96\xfd\x7a\xf1\x35\x06\x2d\xf7\xb8\xe1\x29\x38\xd1\x48\x5b\xd3\x49\x42\xec\x45\x45\xa7\xb3\xcc\xf2\xaf\xa5\xeb\x7e\xd1\x63\x42\x4b\x6f\xb8\x0f\xc9\x35\x8c\xed\xf5\xf4\xf7\x34\xc4\x7f\xde\xb5\x08\xdb\x47\x6f\x3f\x76\xba\x4f\x9f\x4f\x99\x60\x48\x3e\x77\xc3\xfa\xf9\xe8\x17\x44\xee\xd6\x5c\xa6\x02\xad\x22\x20\xcd\x5d\x08\x36\x3c\x1b\xe0\x3d\x94\xad\x5d\x6b\x64\x20\xb0\xa8\xee\xc4\xb9\x08\x6c\x3c\x63\xc1\x57\x87\xcd\x45\x40\x87\x78\x4d\x0f\x67\x15\x9f\x1d\xae\xb0\x54\x44\x1c\x02\xb0\xc3\x9b\xa3\x43\x4d\x2a\x39\x59\xc4\xd6\x84\x8d\x66\x3c\x46\x7f\x5c\x97\x18\xee\x19\xeb\xe2\xc2\xd4\x06\x73\xbf\x49\x57\x30\x46\xf1\xf6\xb7\xe7\x54\xa6\xb7\xa4\xb6\xe6\x08\x5c\x27\x59\xae\xa8\xd2\x76\x91\x4f\x53\xdc\x9f\xb2\xc6\xee\xb4\x9e\x95\x7c\x85\x69\xac\x12\x9d\xe2\x48\x2a\xbe\x46\xcd\x0d\xe4\xe6\xba\x28\x0b\xd7\x89\x98\x5a\xcf\xca\x8c\x17\x67\xf1\x0e\xf4\x7d\xae\x25\x93\xe2\xe6\x6e\xd3\x66\xc8\x89\x28\xba\x68\xbd\xbc\x1e\x32\xed\xa5\xe3\x72\x1b\xa1\xda\xce\xcc\xc7\xa8\xf3\xed\x87\x55\x94\xe2\xe8\x6a\x14\x00\x76\xaf\x3b\xe1\xfa\x23\x1d\x6a\x36\x30\xf6\xa4\xe4\x48\x59\x4c\x9a\xae\xb9\x41\x94\x9d\xc6\xe9\x00\xca\x37\x86\x5f\x5c\xa8\x64\x60\xcc\xf7\x0f\x9e\x74\xa1\x92\x51\xdb\xe2\x53\xf0\x24\x3c\x9f\x82\x27\xbd\xe7\x53\xf0\xe4\xa7\xe0\xc9\x4f\xc1\x93\x9f\x82\x27\x3f\x05\x4f\x7e\x0a\x9e\xfc\xd7\x0c\x9e\x54\x95\x9c\x92\xa2\x16\x54\x6d\x2e\x04\x9f\xd3\x2a\xe0\x4f\xec\x1d\xc0\x6e\x7d\xe1\x65\xba\x49\xa2\xb4\xb1\x24\x9b\xf4\x9f\x74\x49\x19\x30\xb2\x8c\x2d\xd6\x9a\x62\x03\xe9\x28\xfe\x36\x2b\x00\x12\xaf\xa9\xb6\xff\x34\x18\x73\xc4\xda\xbd\x60\xb5\xa8\x6a\xbd\xa5\x42\x82\x48\x5e\x8b\x82\xf4\xaa\xec\xdc\x2e\x49\xc8\xfa\x37\x65\x91\xf5\x40\x5e\x57\xe5\x81\xd9\x78\x5b\xf7\xaf\x21\xf6\xf7\xbc\x24\x82\x69\x9b\x00\x10\x02\xfb\x34\x33\x72\xe3\x66\x0f\x17\xf8\x75\xcd\xbb\x17\x4d\x52\x89\x64\x0d\xb4\x02\x87\xc4\x12\xb3\x05\x41\x33\xa2\x6e\x09\x61\x5a\x95\x12\x0c\x57\xb2\x7e\x1b\x64\xc3\xc6\x5d\xb6\xa0\x37\x84\x69\xa1\x6a\xbd\x59\x06\xb6\xe2\x4d\xf6\x9f\x3f\x89\x66\x24\xe6\x10\x3c\x68\x3a\xf3\xa6\x73\xf4\xa7\xc9\x7f\x4f\x7e\xd2\x13\x47\xf5\x7a\x21\x70\x09\xfb\xab\xce\xcb\x2f\x8f\x20\x87\xd9\xee\x13\x11\x23\xb7\xd9\xd3\x37\x5b\x35\x2f\xd0\x34\x6c\xb0\x1f\x68\x12\xd6\x55\x24\xaf\xc9\x24\x37\xf3\xaa\xe2\xb5\xda\x2a\xa4\x44\x5c\x2e\x33\x70\xe8\x8d\xb9\x63\xde\xe7\x45\xaf\x9b\x10\xd7\x52\x89\x8e\x26\x47\xed\x2a\x77\xc9\xed\x3e\x34\x68\xf3\x78\x82\xd0\x09\x83\x6d\x84\x23\x00\x37\xa9\x9b\x41\xc7\xae\x04\x1f\x4d\xbf\x96\xb3\x65\x2d\xc8\xa5\xf3\xd8\xcb\xab\x6e\x64\x6e\xdd\x24\x80\xec\xd0\x70\x95\x93\x2f\x12\xa0\x1c\x4d\x9e\xec\xbc\x13\x31\x35\xa1\x73\x9c\x3f\xb6\x7a\x34\xc8\xfb\x5a\x12\x31\x76\x25\xfb\x74\xd7\xd2\x0a\x0e\x37\x93\x09\x7a\x16\x13\xf9\xe4\x4e\x69\x81\x58\x69\x26\x12\xb0\x23\x33\x8b\xb0\xa9\x4f\xed\x90\x81\x25\xa2\xcc\x64\x6d\x77\x18\x29\x1a\x99\x6c\x6e\xfe\x2e\xb0\xc2\x52\x09\xbe\x5e\xd2\x62\xa2\xa9\x64\x57\x4e\x1f\x7c\xc5\xf9\xb5\x44\x15\xbd\x36\x27\x5f\x09\x07\x27\x42\x05\x5d\x2f\x89\x90\xc7\xf0\xcb\x18\xbd\x38\x7d\xfe\xdd\x8b\xf1\x8b\xd3\xe7\xd3\x93\xf1\xe9\x77\x27\xa7\xdf\x9d\x3c\x7e\x34\xbe\x78\x7d\xf6\xdf\x47\x4f\x1e\x7d\xdd\x69\xf3\x26\xd4\x22\xd6\x53\xff\xc3\x93\x17\xd3\xa3\xc7\xdf\x8c\x5f\x9e\x7e\x3f\x9e\x7e\x77\xf2\xf8\xeb\xa7\x81\xee\xb7\xda\xc4\x81\xaf\x28\xbb\x3c\x9b\xfe\x60\xf8\xf8\x58\x93\xed\xe6\x68\x72\x14\xf6\x35\x64\xe4\x65\x0f\x6f\x93\x1c\xd6\xa2\x26\x58\x8f\xc1\x4c\x73\xdf\x13\xe0\xea\xab\x43\x4d\x64\x78\x8d\x70\xb5\xe0\x82\xaa\x65\xd4\xcb\x8d\x5c\x30\xb1\x56\xac\x8c\x2c\xb8\xa2\xe0\x5c\xb2\xd6\xa8\x06\xa5\x39\x76\x89\x59\x29\x97\xf8\x9a\x4c\x50\x73\xc6\x9e\x02\xa9\xa5\x9e\x20\x2b\x7e\x43\xa0\x02\xaa\xcd\xfe\xa6\xc2\x98\x0e\xac\x94\xc8\x1e\x4c\x5a\xef\x51\xaf\x4a\x70\x6a\xb0\x46\x74\x3f\x7f\x31\x1d\x9f\x3e\x3b\x7d\xa2\xe9\x88\xd0\xde\x06\xaf\xaa\xfd\xe3\x20\xfb\xf9\x2d\xe3\xd9\xb6\x83\x76\x72\xde\x99\xf7\x70\xb4\x60\x87\xad\x32\x69\xdd\xf9\x28\x46\x71\x10\xe6\xc9\xda\xac\x4e\x28\x5b\x37\xbe\x15\xa5\x8a\x17\xbc\x6a\xee\x3f\x0e\xb2\x40\x02\x66\x8f\x39\xbe\xed\x1d\x55\x69\x52\x79\xfa\xc0\x6a\x8c\xa3\x49\xea\xca\x15\xad\x4f\x8e\x26\x4f\xba\x44\x0d\x2f\x47\x50\x69\xaf\x2f\x5f\x1c\xa3\xa2\x16\x82\x30\x95\x8c\xef\x83\x32\x2a\x74\xb1\x24\x52\x75\xe1\xb9\xf0\x23\x8d\x00\xfb\xd3\xe5\xd9\xf4\xe8\x71\x9c\x5d\xd2\x55\x9a\xc7\x3e\x94\x78\xf1\xcc\x4e\xb3\x78\x39\x91\x4e\xb3\x38\xe2\x3a\xcd\xe2\xc9\xfe\xef\x77\x57\x27\x82\x13\x52\x67\x2f\xe5\x28\x42\xbf\xbd\x51\x87\x21\x0d\xd8\x98\xb3\x09\xc5\xe2\xce\x0a\x6e\xe9\x35\x9d\xac\xf8\x3b\x5a\x55\x78\xc2\xc5\xe2\xd0\xd9\xe1\x87\x53\xb0\x78\xdf\x4e\x69\x49\xde\x5e\x9e\x4d\x3f\xf7\x6d\xbb\xb7\x05\x5f\xad\xb1\xa2\x33\xb8\x01\xed\xed\xe4\xf1\x37\x82\x14\x7c\xb5\x22\xac\x24\xe5\xe4\xf1\x6f\xe3\xfd\x6a\x7e\xec\xa9\xbf\xa4\xc0\xb9\x3c\x9b\xbe\x3d\x79\x31\x7d\x7b\xf4\xf8\x9b\xb7\x2f\x4f\xbf\x7f\x3b\xa4\x69\xfc\x6f\x1e\x7f\xfd\xd4\x7d\xf3\xe4\x9b\xaf\x3c\x80\x4e\x2d\xbe\x75\x6a\x31\x0b\x6c\x52\xf7\x21\x34\xa4\x41\x77\x02\xfe\xf8\xeb\xa7\xee\xd3\x76\xe8\x1d\xe0\xdd\x16\xf9\xc0\x3f\xb8\xd1\x30\x64\x32\xdc\x63\xcc\x41\xf9\x14\x11\x20\xd9\x17\xfa\x47\x17\xe1\x0a\x8c\xe1\x9c\xe5\x67\x5a\xe6\x2c\xbc\xfb\x2d\x31\x63\x96\x77\x17\xd7\xbf\xdd\x52\x0a\x12\xf7\x49\xab\x7c\x4e\x9d\xf2\xd1\x7b\x75\x63\xd0\x44\x6b\xa9\xbd\x3f\xf1\x79\x15\xf1\xb0\x75\x29\xcf\x8d\xdb\xe6\xe3\x90\xfd\x75\x55\xbe\x9d\xe1\xe2\xfa\x16\x8b\xf2\xdf\x9c\xf8\x9f\xe4\x68\x14\xf8\x47\x90\xa3\xfe\x67\xe9\xf1\x76\xa8\x91\x8f\xe7\x37\xfd\x8f\x92\x40\x77\x87\x18\x06\xa7\xa7\x9f\x4f\xae\x37\xfd\x8f\x92\x40\x77\x87\xb8\x4d\x9e\x3e\x3a\x22\x30\xb7\x41\xb5\x08\x8c\x31\xc1\x8e\xc4\x0f\xd1\x26\xd1\x5d\x33\x9b\x08\xd4\xed\x49\x77\x36\x8e\x61\xd1\xfe\xe8\x63\x89\xee\xf8\x6d\x89\xe1\x5b\x12\xed\xc5\x86\x01\x6f\xab\x75\x87\x71\x81\x4e\xc1\x51\x13\x3b\x03\x3a\x6d\xdc\x38\x37\xd4\xde\x8b\x82\xb0\x91\xd4\xfe\x06\x92\xb2\x92\xde\xd0\xb2\xc6\x55\x47\x5d\xc4\xcf\x7c\x41\x89\xb4\x17\x7c\x4f\xb6\xc7\xe8\x3b\x84\xb1\x20\x3b\xc0\x95\xef\xab\x9d\xde\xb4\x96\xfd\xdb\x2c\x67\x98\xcd\x73\x6a\xfa\xd7\xe3\xd5\x1b\x17\xa6\xcc\x50\x0e\x4c\xa0\x3d\xd9\x18\x77\xae\xf1\x45\x9b\xe2\x08\x34\x5a\xde\x0f\x4b\x88\xee\x74\x8e\x1a\xb8\xff\x9f\xdc\x90\x8a\xaf\x6d\x6c\x0c\xb9\xa3\x12\x62\x2a\xfc\x26\x73\x5e\xb3\x58\x88\x8c\xf1\x09\x53\x66\x2a\xa9\x4d\x10\x7a\x4e\xd6\x84\x95\x90\x3b\xc4\xd0\x5a\x90\x82\x4a\x52\x6d\x6c\xe0\xb8\x0f\xb5\xb9\xc6\x31\x0e\x19\xeb\xe9\x17\x44\x5a\x87\x3d\xc4\x4a\xe8\xd9\x42\xc0\x50\x59\x17\x81\x52\xfc\xce\x2b\x3b\xc0\x26\x54\xb6\xdb\x73\xdf\xe9\xd3\xba\x6b\xbd\xc8\xf7\x0d\x51\xe8\x96\x44\x83\xd1\x71\xc9\xd7\x36\x70\x49\xd3\x98\x33\x24\xf9\x5c\xdd\xea\x39\x56\x74\x26\xb0\xa0\x24\x56\x54\x2d\x15\x11\xf4\xba\x8a\x05\x01\xf9\x2c\x1d\x69\x92\x40\xc2\xd8\x2e\xc0\x84\xb0\xd8\x35\x6e\x28\xf2\x42\x2a\xac\xea\x9e\x07\xab\x7b\x35\x3f\x34\x70\xb1\x15\x2b\x2e\xcd\xdd\xb9\x40\x14\x3e\x83\xc3\xa2\xd2\x35\xb2\x1e\xa2\xad\xea\xbd\x5d\x29\x13\xf7\x69\x36\xec\xf6\x26\x2f\x28\x7c\xab\x3d\x70\x43\x13\x11\xde\x0c\xaf\xbd\x8d\xd4\xc5\x7f\x87\x8e\xbe\x8a\x82\x0b\x58\x14\xd1\x53\x13\x2f\xcb\xf1\x43\xc6\x89\x17\x9c\x99\x43\xe4\xa1\xf9\x8e\xda\x96\xdd\xc8\x24\xef\x77\x7b\xac\x42\x85\x25\x4a\x24\xe4\xea\xa4\x41\x89\xbb\x9f\x74\x60\xc2\xd0\x61\x42\x1c\xe8\x7e\x4d\xe8\x98\x46\x21\x84\x9d\xc1\x6f\x0e\xa8\x3b\x32\x94\x68\x8f\x4e\xc8\x01\x9a\xd8\xe1\x6d\xd1\x30\x74\x2c\xf7\x6b\x8d\x2b\x89\x26\x5a\xed\x4c\x1c\x09\xf7\xad\xf8\xd5\x62\x4a\xff\xaf\x39\x88\xf7\xb1\x01\x22\x2d\xe8\x8e\x32\xe9\x8a\xf6\x7e\x30\xc7\xbd\x90\x42\x11\xc2\xc3\x9c\x60\x65\xee\x99\x65\x25\xdc\x90\x0a\xba\x90\x86\xe3\x9b\x60\x57\xf2\x05\x3a\xe3\xb8\x7c\x86\x2b\xcc\x0a\x22\xbe\xc7\x0c\x2f\x48\x69\xf6\x13\xa2\x26\xee\x62\xd7\xe6\xde\x61\x6f\xd0\x21\xe4\x0a\x4d\x27\x65\xb6\x38\x5f\x98\xcb\x4b\xdd\x55\xa8\xeb\x7a\x56\x51\x09\x99\xa0\x36\x04\x64\xd3\x9e\x58\x61\x17\xce\x17\x00\x5a\x71\x5c\xa2\x99\x1d\xe0\x04\x86\xf6\x2d\xae\x24\x8c\x0d\xb3\x8d\x59\xcd\x5c\x92\x0e\x77\x09\xa2\x37\xab\x58\x51\x39\xa7\xe1\xd3\xf4\xc0\xec\xdf\x10\x5c\x6e\xb2\xe6\x1e\xb9\x77\xd1\x9b\xfb\x49\x77\xdc\x9a\x2d\x57\x06\xb9\x13\x0f\x3b\xfd\x36\xc1\x13\x43\x5c\x6e\xee\x39\xed\x70\x94\xeb\x95\xee\xfd\xf9\xf9\x74\x17\x62\xf7\x48\x1b\x80\x3a\x48\x6c\xcd\x92\xeb\x0a\x2b\x2d\x80\x9c\x8e\xd4\xc3\x98\x24\x41\x86\x16\x3b\x04\x19\xc3\x09\x3a\x51\x0e\x9b\x25\x4b\x86\x02\x84\x4e\x3b\xdb\x5b\x99\x9f\x9f\x4f\xd1\x3b\xce\xe0\xc6\xdd\x0f\xcb\x5e\xcf\xcf\xa7\xbb\x71\x55\x1a\xc9\x7a\xa0\xdb\x9c\xa4\x7f\x15\x44\xab\x05\x89\x96\xf8\x86\xa0\x19\x21\x0c\xc9\x1a\xae\x2c\x9a\xd7\x55\xb5\x41\x85\x49\x6e\x0b\x8e\xf4\x5e\x53\xde\x36\x42\xa2\x67\x4c\xc1\x14\xd6\x53\x07\x5a\xcf\x07\x12\xc1\xac\x88\x63\x25\x16\x65\xdb\xb3\x4d\xbf\x09\x0d\x7c\xe8\xd0\xb1\xc2\x52\x5d\x0a\xcc\x24\x00\xba\xa4\xf1\xf2\xe3\x4e\x27\x96\x58\x91\x71\xc2\xe6\x1d\x3c\x5d\xb0\xd5\x97\xef\x1d\x59\x25\x08\x96\xf1\x53\x82\xc1\xcf\x43\x56\xd2\x0e\x9f\xa7\x6e\xbb\x1f\xf8\x38\x23\x32\x29\x74\x6e\x68\x96\xf2\x80\x39\xd1\xae\x77\xd8\xde\x15\x4a\xef\xe3\xdc\x8f\x0c\xd5\x32\x90\x06\x9f\x18\xae\x13\x52\x17\x8d\x8c\x9a\x5a\x11\x35\x30\x8e\xf8\x87\xbd\xb1\x35\x22\x2f\x98\x0a\x11\x1c\x6f\x9a\x97\x97\x5c\xaa\x73\xa2\x6e\xb9\xb8\xce\xd8\x5f\x7b\xad\xd1\x92\x57\xa5\xf4\x76\xb2\x4d\x4e\xcd\x77\x6d\xa3\x08\xc5\x53\xc2\x7c\x82\x2e\x4c\xf8\xaf\x09\x73\xd3\x32\xcd\xee\xe9\x3d\xb8\xf7\x88\x61\x33\xda\xde\xe9\xe3\x8c\xb9\xfa\xcd\xe3\x93\xed\x9a\x10\x91\xf9\xc6\x66\xe4\x5b\x08\x53\x63\xa5\x84\x41\x0c\x07\x41\x58\x3f\x85\xb8\x68\x86\x98\x7b\x46\xbe\xfd\xa5\x9d\xad\x4b\x30\xed\x4c\x31\x71\x4a\x4c\x99\x11\x76\x5a\xb4\x36\x39\x90\x76\x27\x51\xb3\x92\x88\x0a\x2e\x2f\xa6\x6c\x2e\xb0\x54\xa2\x2e\xe0\xda\x61\xd7\x7d\xb2\x48\xfc\x3d\x92\x2f\xb7\xa7\x95\xe8\xe0\xfe\x89\x98\x1e\xfe\x33\xaa\x13\xe1\xdb\x81\x90\xe2\x2e\x69\xf0\xad\x6c\x1d\x50\xdd\x28\xb7\x26\x50\x72\xe0\x56\x3c\x64\x6d\x67\x9f\x20\x27\x3f\x4e\xbb\x44\x8d\x25\x0f\x0d\xc0\x4d\x13\x40\x0f\x7e\x1b\xaf\x43\x43\xdd\x0d\xeb\x68\xa7\x6b\x69\x8a\x0a\x4b\x49\x8b\xb3\x41\x39\xe0\x3f\x1d\x8a\x04\x20\x6c\x2d\x9b\x0e\x9d\x06\xc1\xa3\xbe\x50\xc1\x0c\xe8\x63\x7b\xea\x6f\x51\xac\x24\xc9\x00\xdb\x97\x35\xa7\x06\xe0\xf0\x0d\x22\xd9\x97\x6a\x20\xc4\x8c\x34\x7e\x0f\x84\x06\x20\x7c\x24\x84\xda\x9e\x3e\x1c\x42\xcf\xcf\x9e\x7d\x50\x64\xa6\x4c\xa4\xf6\x09\xbb\xbb\xa1\x02\x83\xfe\x37\x9f\x6f\xaf\xee\x8c\xb9\x41\x39\x56\x6d\x21\x43\x04\x93\x43\xdb\x56\x64\xb5\x4b\xdb\xa6\x39\x97\xd8\xb4\x55\x87\xc0\x19\xfd\x05\xba\x1a\x59\x1e\xbc\x1a\x1d\xa3\x13\xc7\x90\xa0\x04\xd1\xb3\x1d\xc6\x6a\x4a\x48\x5d\x13\x09\x3e\x16\xad\x52\x4a\x52\x50\x13\x25\x85\x15\x22\x14\x5c\x18\xc8\x96\x97\xc2\x4c\xea\xed\x60\x06\xe0\x0a\x6f\x88\x40\x7b\x97\xa7\x17\x87\xd3\xe9\xd9\x3e\xb2\x1a\x1e\xa4\x9b\x8d\xbe\xb5\x4d\xbe\xbb\xbc\xbc\x38\xd4\xff\x37\x0d\xd6\x0a\xe8\x3f\x5a\x2c\xa2\xde\xd6\x0c\x50\xdc\x3a\x6c\xac\x74\xb4\xe7\xb9\xa8\x71\xdd\x97\xbc\x90\x13\x7c\x2b\x27\x78\x85\xdf\x71\x06\x79\xbe\x27\xf0\xcf\x17\xa7\xd3\x43\x48\x45\x53\x87\xce\x39\x2e\x16\x35\x2d\xc9\xa1\x26\xfe\xd8\x11\x7f\x6c\x52\x7e\xe1\x32\x93\xa2\x9a\x65\x8c\xd6\xd2\xea\xfc\xec\x99\xa1\x93\xb3\xf7\x3a\x74\xf2\xa8\x90\x01\x32\x48\x27\x8d\x0f\xd4\x12\xa8\x8f\xfe\x5c\xc4\xfe\xf3\xd1\xca\xaa\x59\x5a\x43\xa1\xc1\xb8\x37\xf7\x8c\xdd\xaa\xc8\x68\x79\x7e\xf6\x2c\x53\xfc\x64\xd4\x98\xcc\xbb\xc0\x69\x0c\x00\x93\x4d\x32\x05\xde\xa2\x88\x94\xa4\x70\x4f\x57\xce\x2d\x8a\xf5\xc7\x30\x84\x5e\x9e\x5e\xfc\x03\x0c\x21\x3d\xf8\x7f\x35\x43\x88\x12\xa6\x4e\xc0\x89\xb3\xab\xca\xf1\xbf\xed\x95\x66\x30\xaf\xec\x7d\xd6\x19\xcb\x17\x92\xf8\x4c\xd2\x82\x2d\xc9\x00\x31\x8f\x7a\xe1\x06\xa8\x72\x1f\xbd\xa3\x05\xd9\xcb\x8a\xcf\x70\xa5\x65\xd9\xd4\x9c\xd9\x42\x16\x00\x6b\xfa\xca\xd1\x0c\x1d\x5f\x2a\x94\x29\x30\x50\xbb\x53\x36\xf5\xdc\xf8\x6d\xce\xdc\xcd\x87\xd2\x54\x54\xc0\x6c\x83\x04\x59\x68\x76\xd6\xc0\x6d\x86\xda\x0f\x17\xa7\x90\xc0\xc3\x57\xab\x9a\x81\xaf\x3e\x03\x2e\x0c\xae\xd9\x98\x22\xcf\xd2\xe9\x89\xc0\xa2\xe2\x75\x39\x59\x70\xbe\xa8\x08\xc8\xbf\xb6\xd8\xe4\x98\xb0\x05\x65\xc4\x14\x9c\x5c\xf2\xdb\xb1\xe2\x87\x0e\x5b\x63\x4f\x0c\x52\xb6\xf8\x7c\x01\x78\x78\x9b\x4d\x73\xab\x5d\xce\x78\x91\xa2\xc9\xce\x06\x0c\x4c\x1b\x80\x6e\x91\xc4\x9c\xee\x80\xf5\xe6\x90\x6e\x90\x9c\x65\x6b\xd8\xa2\x2d\x96\x3a\x7b\x98\x95\x9a\x2e\xfb\x08\x1b\xa3\x6b\x4b\x82\xe4\xa0\xc0\xe4\x90\x78\x74\xed\x51\xad\xa5\xd9\x39\xcf\x22\x7a\x7b\xfb\x18\xed\x94\x96\x47\x33\xb2\xc4\x37\x94\x67\x50\xbf\x4b\x56\x43\x7a\x47\x8d\xcf\x0d\xde\x2c\x91\x3f\x9c\xae\x33\x6b\x28\xa3\x21\x10\xf6\xc3\x29\xbb\x4c\x1d\x35\x6c\x90\x77\x24\xa3\x6f\x8b\x0f\xbb\x3b\x06\x66\x13\x76\x2f\x21\x57\x20\xc4\xab\xe8\x39\x3a\xf9\x71\x3a\x3a\x40\xa3\x93\x77\xb5\x20\xc9\xc2\xbf\xfa\x19\x3d\xc3\x82\x7c\x4f\x14\xae\xf4\x37\x2f\x4f\x2f\xf4\x7f\x5e\xaf\x09\x9b\x2a\x5c\x5c\xdb\xcc\xd3\xd1\x0f\xd3\xf5\x92\x08\x32\x4a\xdb\x60\xc3\x64\x1e\xeb\xcd\xc8\x50\x0b\x3d\xee\x81\x36\xcd\xa0\x07\xda\xbd\x3c\x4d\xdd\xac\x07\xe1\x0a\x6e\xaa\x03\xed\x2c\x06\x06\x5a\xbd\x7a\xf6\x7d\x06\xa3\x0d\x70\xe4\xb0\xe9\x35\x60\x76\x65\xb0\xb3\x2c\x78\x8a\x97\xbb\xe1\x0e\xba\x6d\xaf\x9a\xad\xf9\x0d\xf2\x5b\xed\x75\x83\xf9\x5e\x41\xe9\x0a\x22\x4d\xd0\x05\x97\x92\xce\x2a\xd2\xe1\xdf\x17\x77\x46\xca\x8c\x0c\xef\xbd\xb2\x42\x27\xc1\x7c\x43\x39\x24\xaf\x86\x34\xfb\x18\xb9\x4e\x07\x90\xfa\x1e\x97\x08\x02\xca\xee\xe3\xa6\x86\x1b\x66\xb8\x88\xd4\x1f\xee\x7a\x4f\x6c\xd3\xb8\x7b\xfa\xdc\xb6\x98\x46\xcf\xc0\xd1\xbd\xfd\xf1\x3d\xd8\xf7\xf2\xc9\xaf\x05\xbd\xc9\xcb\x87\xb1\x2d\xe3\x53\xbd\xb0\x0d\xdc\x64\x62\x8e\xf2\x5d\xa6\x68\x61\xde\x6b\x6a\xbb\x86\x2c\x42\x7d\xd6\xc0\xe1\xb6\x49\x06\x73\x75\x4c\x92\xb5\x33\x5a\x5f\x4b\xe0\x64\x41\xbf\xb0\xe7\x4b\x24\x16\xed\x12\x81\xeb\x32\x67\xff\xd0\x98\x88\x9d\x0e\x90\xe3\x00\xd8\x3c\x31\x57\x10\xd9\xdb\xa5\xc5\xd4\xd2\x70\xcc\x4d\x2d\xcd\x8e\x4f\x61\xca\x88\x70\x5e\xbc\x44\x31\xcf\x93\xe0\xd0\x20\x94\xce\x56\x61\x55\xdc\xe1\xd9\xda\x4a\xf1\x88\x26\xf3\x98\xaa\xec\xc7\x59\x65\xd9\x6d\xb0\x89\x1c\xb7\x23\x75\xbf\x1d\x7e\xae\x65\xe6\x80\xc8\x34\xdb\xcf\x4e\x1c\xc2\x81\x5f\x13\xad\x3d\x90\x6f\x76\x9d\xf6\xc8\x3e\x5e\x18\xc7\xac\x6d\xeb\x72\x09\x61\xe7\xa1\x96\xd1\xd6\xf2\x36\xd7\x5f\x7b\xe7\xfe\x71\x5e\x6b\x7a\x36\xcb\x86\xb5\xc1\x0e\xee\xae\x6b\x34\xdb\xdc\x23\x7c\x42\x3f\x26\xd2\x09\xe8\x54\xfc\xc4\x99\x89\xa4\xb2\x3f\x9a\x45\xa9\x7f\x05\x8e\xfb\xd1\xc7\x8d\x19\x52\xa2\x6a\x47\x27\xa6\xb2\x8d\xa7\x84\x29\xd8\xda\x7b\x27\x3f\x4e\x0f\x8c\x5d\x62\xec\x21\x6d\xe4\xbb\xf0\x92\x54\x85\xc6\x2f\xfc\x23\xca\x9c\xe5\xa6\x3b\xd4\x32\x3c\x4a\x37\xa1\x37\x2b\x10\xe0\x15\x01\x40\x65\x53\x72\xe1\xa3\xad\x3e\x53\xae\xb2\x61\xe7\x03\x73\x8f\x7c\x0c\x26\x37\x37\x7e\x99\xb1\x7f\xf3\x08\x10\xf8\xd5\x57\x4f\x4c\x9d\x92\x5a\x9a\x31\x0b\x22\xd7\x9c\x19\x5b\x40\xcb\x6f\x37\xdc\xb8\x9d\x84\x59\xcb\xa2\xdd\xed\x78\x6f\x39\x67\x0b\xb5\x1b\x8a\xdb\x0b\xca\x60\xb8\x13\x43\x44\xa7\x48\xae\x18\xd4\x2e\x82\xe0\xda\x40\x0f\x11\xb0\xfd\x4b\xdc\x82\x04\xd9\x6d\xa4\x39\xe2\xd0\x70\xaa\x0d\x05\x76\xd7\xd1\x45\x93\x7a\xed\x74\x34\xd3\x34\x64\x81\x62\x4b\x2b\xcc\x6a\x5c\x55\x9b\x01\x94\x26\x17\x41\xcf\x2e\xc8\x5a\x08\xa9\xcb\x1e\x3a\x7a\xc7\x01\xcf\xd0\x39\x89\x04\xec\xfb\xea\x1c\x74\xd2\x0c\x20\x02\x79\x27\x7d\x03\xc8\x6f\xfc\x84\x83\x92\x00\x02\xe1\x37\x0c\xaf\x68\x01\x34\xc2\x55\xc5\x0b\x6c\x83\xba\x61\x67\xa3\x65\xeb\xef\xd0\x92\xdf\x92\x1b\x22\x20\x8f\xdc\x4a\xb8\xd8\xbe\x40\x61\x45\x0b\x00\xef\xa0\x99\x32\x46\xc0\x11\x26\x5c\x5f\xba\x33\xfc\x66\xa1\x18\x6f\x66\x04\xa4\x8d\x80\x76\xaa\xa1\x4f\x2f\xa3\xb5\xa0\xc2\x9b\xb8\x89\xe6\xfa\xa5\x22\xce\x03\xa6\x4d\xa4\xe5\x50\x20\xca\xd8\x2d\xf5\xc8\xdb\x1c\xe3\x39\xb9\x4f\x88\xef\x11\x22\x5b\xba\x84\x49\xe9\x42\xb9\x5f\x12\x66\x0b\xad\x0f\xc4\x14\x6d\x7f\x10\x08\x61\x47\x8b\xf6\xad\xfb\x20\x19\xd8\x1d\xa8\x3a\x9f\x0a\xec\x96\x79\x45\x3a\xfd\xcb\x12\x71\xaf\xac\xe3\x81\xb6\x2c\x6c\xb1\x3b\x33\x90\x03\xbf\xd6\x4e\x80\x2a\xde\xaa\x5e\x73\x38\x40\x16\x46\xe1\xf8\xb1\xed\xdb\x21\xfa\xb0\x1a\x4d\xec\x7c\x00\xa8\xab\xf6\xa5\x41\x00\x54\x5b\x54\x18\x22\xb3\xbd\x82\xf5\x7c\xbe\x1d\x94\xbf\x53\x10\x99\xaa\x64\x5e\x25\xad\xb6\xa1\x23\x6c\xb7\x60\x56\xbf\x2e\x92\x29\x54\x11\x98\x1a\x65\xb6\xca\xd4\xae\xc1\x63\xc9\xca\x2b\x1f\xa5\xea\xca\x7d\x2b\xae\xa0\x55\xa2\xf8\xde\x87\xae\xb6\xf2\x11\x2a\xad\x24\xab\xac\x64\x56\xa6\x88\x56\xf8\x1b\xae\xac\x72\xff\xaa\x2a\xae\x80\x49\x5a\x5b\xe4\x57\x54\xe9\x91\x38\x02\x36\xbb\x9a\x4a\xa0\x66\x4a\xcc\xb4\xd9\xa1\x94\x4a\xbc\x60\x4a\xcc\xc4\xd9\xa5\x8c\x4a\x4a\x39\x0e\x96\x4f\xc9\x28\x9d\x92\x51\x36\x25\xa3\x64\xca\x07\xcc\xd1\xda\xfa\xd1\xe8\x29\x2f\x9b\x54\x2a\x2e\xf0\xc2\xcf\x2f\x95\xf5\xac\xc9\xb7\x71\xc8\x92\x05\xf6\x85\x2a\xa8\x19\x57\x18\xfa\x02\xab\xe5\x71\x93\x92\xb3\x75\x57\xaa\xe6\x6c\x27\xcd\x5d\x53\x3f\x15\xa7\x6d\x08\x00\xfa\x4d\xd3\x89\x3e\x36\xb6\x1a\xfd\xf5\xef\x9f\xfd\xbf\x00\x00\x00\xff\xff\x66\x93\xf3\xd8\x0b\x11\x01\x00") +var _manifests00CustomResourceDefinitionYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\xf1\x77\x1b\xb7\xb1\x30\xfa\x7b\xff\x0a\x3c\xe6\xe6\xd9\x4a\x44\x32\xb6\x93\xdc\x54\xbd\xef\xf6\xc8\xb2\xe3\xf8\x54\x91\xf5\x4c\x35\x69\x1b\xa5\xfe\xc0\x5d\x90\xc4\xd5\x12\x60\x01\xac\x28\xa6\xed\xf7\xb7\x7f\x07\x03\x60\x17\xbb\x04\xb0\xa0\x6c\xb7\xbd\xf7\xd3\x9e\xd3\xc6\xe2\x62\x07\x83\x19\x60\x66\x30\x98\x19\xe0\x0d\xfd\x81\x08\x49\x39\x3b\x41\x78\x43\xc9\x9d\x22\x4c\xff\x25\x27\x37\xdf\xc8\x09\xe5\xd3\xdb\x27\xbf\xba\xa1\xac\x3c\x41\x67\xb5\x54\x7c\xfd\x96\x48\x5e\x8b\x82\xbc\x20\x0b\xca\xa8\xa2\x9c\xfd\x6a\x4d\x14\x2e\xb1\xc2\x27\xbf\x42\x08\x33\xc6\x15\xd6\x3f\x4b\xfd\x27\x42\x94\x15\x55\x5d\x92\x89\x20\x15\xc1\x92\x4c\xf8\x86\x30\xb9\xa2\x0b\xa5\x61\xd3\xf9\x7a\x5c\x54\xbc\x2e\xc7\x6b\xcc\xf0\x92\x94\x27\x68\xa4\x44\x4d\x46\xc3\x9f\x4a\x52\x2d\xdc\x57\xe3\x15\x5d\xae\xc6\xf8\x16\xd3\x0a\xcf\x69\x45\xd5\xee\x00\x38\x94\x2d\x2b\x32\x66\xbc\x24\xe3\x92\xdc\x92\x8a\x6f\x88\xf0\x3e\x67\x78\x4d\x4e\x10\x65\x4b\x41\xa4\x2c\x38\x53\x82\x57\x15\x11\x52\x43\x11\x58\x71\xd1\x01\xf7\x2b\xb9\x21\x85\x1e\xf8\x52\xf0\x7a\x73\x82\xc2\x8d\x0c\x54\x4b\x20\x43\xdc\xd7\xa6\x83\xb3\xa6\x03\x78\x57\x51\xa9\x7e\x17\x7e\x7f\x4e\xa5\x82\x36\x9b\xaa\x16\xb8\x0a\xa1\x08\xaf\xf5\xf8\xea\x0a\x8b\x40\x83\x5f\x21\x24\x0b\xbe\x21\x27\xe8\x42\xa3\xb3\xc1\x05\x29\x7f\x85\xd0\xad\x99\x0e\x80\xde\xd8\x8e\xff\xf6\x89\x01\x56\xac\xc8\x1a\x1b\xbc\x91\x1e\x1c\x3b\xbd\x7c\xfd\xc3\xb3\x59\xe7\x67\x84\x4a\x22\x0b\x41\x37\x0a\x26\xd5\x68\x0f\x75\xfb\x7e\x4e\x24\xc2\xc8\xb2\xd0\x61\x87\x5a\xf4\xd0\x82\x8b\x06\x24\x42\x6a\x45\x50\x51\xd5\x52\x11\x31\x41\x57\xfa\x8f\xb6\x65\x81\x19\x92\x44\xdc\xd2\x82\xa0\x37\x1b\xc2\x66\x9a\xd2\xe8\x2d\xaf\x15\x41\x98\x95\xe8\x77\xf5\x9c\x08\x46\x14\x91\x8e\x90\x1e\x60\x61\x67\xb4\x9c\xa0\x6b\x86\x7e\x5c\x11\x86\x30\xdb\x27\x38\xa2\x12\x15\x82\x60\x45\xca\x63\x84\x11\x23\xdb\x00\xce\x1e\xd8\x92\x6c\x2a\xbe\x5b\x13\xa6\xbc\x2f\x91\xe2\x08\x57\x15\xdf\x22\xbd\xd0\x04\xc3\x15\x52\x02\x2f\x16\xb4\xd0\x6f\x04\xc1\xc5\x0a\x06\x6a\x07\x23\x91\x5a\x61\xe5\x01\x25\x77\x1b\x2e\x89\x43\x0e\x71\x61\x07\xe9\x8d\xe1\xf7\x9b\x12\x2b\xca\x96\x48\xad\xa8\x6c\x5e\xa0\x35\xde\xa1\x8a\x60\xc0\xa0\xa4\x52\xd4\xc0\x1e\x0f\xf4\x82\x0b\xb4\xa9\xe7\x15\x2d\xd0\x02\x17\x1a\x00\x23\x6a\xcb\xc5\x8d\x1e\x1e\x23\x05\xac\x69\x84\x65\x74\xec\x48\x90\x5b\x2a\xbb\x40\x75\xaf\x73\x82\xa0\x41\x89\x78\xad\x80\xc6\x2b\xa5\x36\xf2\x64\x3a\xbd\x69\xd8\xa2\x57\x62\xc9\x0b\x39\x2d\x38\x2b\xc8\x46\xc9\xa9\xa3\xc0\xd8\x62\x41\xd9\x72\x6a\xfb\x1c\xf7\xe7\xb8\x79\x2c\xf3\xc8\x2d\x11\x68\xc3\xa5\xa4\xf3\x8a\x1c\x23\xa9\xc5\xd9\xbc\x22\xa8\x24\x0b\x5c\x57\x4a\xc2\x40\x35\x8d\x37\x15\x56\x0b\x2e\xd6\x08\x0b\x82\x6a\x49\xca\x09\x9a\x11\x82\x34\x0f\x7c\xb2\x50\x52\x95\xf0\xcd\x9a\x0b\x0d\x45\x61\x5a\xc9\xc9\xa8\x69\xb2\x11\x7a\x91\x2b\xea\xd6\xb3\x79\x3c\xb1\xea\xfd\xda\x5b\x1a\x8f\xf4\xea\x31\xad\x34\x7a\x94\x01\xc3\x89\x5b\x81\xa4\xb4\x0b\x0e\xf1\x85\xe3\xe6\x46\x10\x49\x98\x91\xb0\x1d\xc0\x48\x37\xc2\x0c\xf1\xf9\x7f\x91\x42\xe9\xa1\x08\x0d\x06\xc9\x15\xaf\xab\x52\xb3\xe9\x96\x08\x85\x04\x29\xf8\x92\xd1\x5f\x1a\xd8\x52\x4f\x08\xdd\x69\x85\x15\x91\xaa\x07\x93\x32\x3b\x4b\x6f\x71\x55\x93\x63\x58\x4c\x9a\xa7\x82\xe8\x5e\x50\xcd\x3c\x78\xd0\x44\x4e\xd0\xf7\x9a\x4e\x94\x2d\xf8\x49\xc3\xe8\x25\x55\x4e\x9d\x14\x7c\xbd\xae\x19\x55\xbb\x29\x70\x91\xce\x6b\xc5\x85\x9c\x82\xe8\x9d\x4a\xba\x1c\x63\x51\xac\xa8\x22\x85\xaa\x05\x99\xe2\x0d\x1d\x03\xea\x0c\xa6\xdf\x64\x5d\x7e\xd2\x4c\xf5\x47\x1d\x5c\xd5\x4e\x0b\x32\xa9\x04\x65\x4b\xef\x05\x48\xd7\x04\x07\xb4\x74\xd5\xeb\x13\xdb\x4f\xcd\x28\x5a\x42\x9b\x85\x44\xd0\xdb\x97\xb3\xab\x76\x31\x69\x66\xf4\xa9\x0f\x74\x6f\x3f\x94\x2d\x0b\x34\xc1\x28\x5b\x10\x61\x98\xb8\x10\x7c\x0d\x30\x09\x2b\x37\x9c\x32\x65\x45\x1b\x25\xac\x4f\x7e\x59\xcf\xd7\x54\x69\xbe\xff\xa5\x26\x52\x69\x5e\x4d\xd0\x19\xe8\x58\xbd\xac\x6a\xbd\xd4\xf5\xbc\x7d\xcd\xd0\x19\x5e\x93\xea\x4c\xab\xb7\x8f\xcd\x00\x4d\x69\x39\xd6\x84\xcd\x63\x81\x6f\x1e\xf4\x1b\x1b\xaa\x79\x2f\x9c\xfe\x8c\xf0\x4b\xbf\xd6\xec\x02\x19\xb9\x21\x05\x5d\xd0\x02\xd6\x82\x59\x22\x7a\x7d\x4a\x2a\x48\x89\xe6\x64\x85\x6f\x29\x17\xf6\xf7\x1e\x5d\xf7\x84\xfb\xa4\xd3\x20\xbc\xa4\x0d\x32\x20\x44\xce\xf4\x5b\xe8\x9a\xf4\x5b\xf4\xb5\xdf\xfe\x17\x66\xba\x09\xb2\x20\x82\x30\x3d\x99\xb8\x9e\x7d\xa4\x10\x44\x81\x34\xc5\x94\x75\x09\xd8\x90\x6c\xd5\x48\x31\x54\x78\xf0\xb4\xa8\xd4\x43\xde\x41\x8b\x7d\xc1\x3c\x31\x4a\x0d\x34\x45\x7f\xda\x02\xc2\x9c\x3d\x52\x96\x9c\x00\x83\x0a\xc4\xb7\xcc\xef\xe3\x38\x30\x72\x3d\x0e\x10\x9b\x01\x90\xd7\x0c\x54\xb4\x1d\xd5\xba\x96\xcd\xd0\x00\xc7\x05\xd7\x3a\x50\xaf\xad\x1b\xb2\x93\x20\x55\x60\x86\xe8\xef\x10\x52\x95\x9c\x14\x42\xed\x53\x16\x75\x86\xbd\xa0\x95\x31\x02\xf4\x6a\xb3\x9f\xdd\x90\xdd\x89\x86\xd9\x7b\x79\xcd\xd0\xeb\x05\xaa\x99\x24\xea\x38\x00\x15\xa3\x2d\xad\xca\x02\x8b\xb2\xd3\x81\xe6\x53\xad\xf8\x1a\x2b\x5a\xe0\xaa\xda\xa1\x25\x61\xda\x9c\x23\x25\x60\x6c\x54\xc6\xd5\xde\xe4\xea\xe3\x49\xa5\x16\x2a\xb4\x6c\x14\x4f\x40\x75\x96\x7c\xad\x69\xf3\x58\xc3\x95\xf5\xdc\xfc\x29\x8f\x42\xb8\xb2\x12\x80\xb4\xb8\x78\x7d\x3d\x92\xe8\xec\x54\x0f\xa6\xd2\xe2\xa1\x8b\xbc\x16\xe5\x4b\xf8\x22\x00\x75\x4b\xd5\xca\xb7\xb0\x1e\x49\xa4\x84\xe6\x9a\x54\x5c\x90\x89\x25\x60\x94\x4e\x01\x88\x9a\x3a\x80\xac\x5c\x61\x61\x66\xe7\xba\xae\x14\xdd\x54\x04\x7d\x77\x75\x75\x39\x7d\x8a\x08\xc3\x73\x6d\x16\x08\x98\x98\xe8\xf1\x76\x45\x8b\x15\xa2\xeb\x4d\x45\x83\xf3\xf4\xf4\xfc\xf2\xe2\x48\x63\xc9\xac\xb4\x94\xe8\x31\x9d\x90\xc9\x31\xd2\x7b\x8e\x79\xb5\x43\x73\xc1\xb7\x92\x08\x79\x04\x3a\x1d\x2b\x54\xd1\x39\x11\x6a\x67\x8c\xab\x5a\x86\x58\xa5\xad\x58\xdf\xc4\xd1\x2c\xa5\x12\xad\x09\xd6\xe6\x8e\xed\x09\x2c\x4c\x80\xa0\x7f\x6a\x1a\x23\xc5\x83\x2c\xe2\x6a\xa5\xed\xa1\xc6\xfe\xd4\x56\x9c\x9e\x07\x15\xbd\x21\x15\x60\xb3\xc0\xb4\xb2\x3d\x59\x51\x55\x83\x85\x69\xd8\x5a\x55\xbb\x00\xdc\x1b\xa6\x57\x25\x96\x3e\x02\x05\xc7\x15\x91\xda\x5c\x9b\xb8\x45\x47\xd9\x58\xe3\xe9\x73\xe8\xf1\x76\x45\x34\x4a\x01\xa0\xed\x3c\xe2\x42\x33\x4d\x8c\xad\x5c\x25\xe5\xd1\xe0\x4c\x82\x79\x13\x00\xda\xd8\xe0\x8f\x24\x9a\xd7\xb4\x52\x63\xca\xd0\x9b\xd3\x5a\xad\x8c\xb0\x12\x9e\xfd\xe4\x9e\xb8\xd0\xd5\x0f\x6c\x43\x02\xbf\xf7\xf5\xb9\xde\xc9\x38\x5d\x60\x45\xac\x0a\x6a\xc4\x94\xed\xc9\x6f\xb5\xf1\x49\xb6\x53\x6b\x78\x8e\xf5\x30\xc7\x46\x57\xc9\x29\xec\xdd\xa6\x9f\xc0\x7f\x82\x18\x21\x74\xf5\xe6\xc5\x9b\x13\x74\x5a\x96\xc8\xcc\x84\x5a\x92\x45\x5d\x19\x5b\x52\x4e\x3c\xe3\xf0\x18\x0c\x94\x63\x54\xd3\xf2\xb7\x8f\x82\xc0\x22\x4a\xd5\x7f\xb9\xa7\x44\x81\x2c\x20\x42\x06\xb5\x93\x91\x3b\xa0\x91\x5e\x5c\xcc\x80\xcc\x6e\xf3\x91\xd0\x28\x11\xb9\x64\x15\x82\x9e\xdf\x05\x67\x0b\xba\xac\x05\x69\x57\xfd\x82\x60\x6d\x52\x48\x90\xf2\x9f\xa1\x6f\xad\x34\x3c\xe7\xb8\x7c\x8e\x2b\xcc\x0a\x22\x66\xa6\xe7\x00\xf8\xc6\x56\x82\x2d\x8a\x5c\x69\xdd\x21\x95\x9e\x84\xcb\xdd\x31\x6a\x87\x81\x02\x18\xbc\xb8\x98\x05\x20\x6a\xcb\x55\x94\xd2\x1a\xfd\x16\xfc\x65\x03\x7d\x66\x81\x4f\x0c\xb6\xa0\x41\x6b\xbd\x99\x46\xb8\x5d\x33\x21\x65\xba\xaf\xa0\x8f\x8d\x64\xf5\xd6\xa3\x5b\x57\x46\x2f\x98\xbd\x97\x19\x43\x8c\xb2\x4a\x7a\x7a\xc1\xe0\xbc\xaf\x91\x2d\xae\x5a\x08\x18\x33\x96\x4a\x47\xaf\x20\xae\x8a\x23\xca\x4a\x7a\x4b\xcb\x1a\x57\x76\x27\x29\x15\x56\xb5\x24\x12\x49\x6e\xc4\x16\x61\xa5\x96\x27\x42\x5a\x09\x84\xb6\x2b\x22\xc0\x6a\x51\x58\x2c\x49\x7f\xde\x01\xb3\xdc\xde\x56\x4f\xa9\x86\xce\xd7\xcc\xf1\x09\xec\x01\x6d\xbf\x32\xfa\x97\x9a\x20\xbc\xe6\x9a\xac\x55\xb5\x6f\x97\xc9\xa0\xba\x66\xa5\x96\xc7\x7d\x23\xd8\xe8\x28\xb2\xde\xa8\xdd\x71\xbb\xdb\x83\x31\x02\xd4\x89\x99\x11\x5d\xf7\x8f\xd5\x77\x81\x5e\x26\x5a\x0e\x4e\x0c\xc6\x01\x71\x95\x58\x97\xf1\xc9\x34\xb4\x1c\xe3\x5f\xfa\x6b\xcb\xb2\xd4\x5f\x9b\x21\x13\xa4\xb5\x2e\x1c\x58\xa0\x86\x91\x48\x76\x57\x2d\x8f\xad\x16\x46\x15\xc7\x25\x9a\xdb\x75\xd8\x88\x78\xad\x10\x43\x2c\x20\xaa\x98\x74\xac\xaa\x8e\x71\xaa\x95\x1a\xd6\xc8\x72\xa6\xa5\xae\xc0\x52\x89\x1a\xf6\x13\x07\xf3\x00\x66\xe3\xc4\x6d\xd5\xad\x81\x78\xfa\xe3\xec\xc4\x34\x08\x08\x0f\xf4\x18\x8c\x99\x97\x76\x0e\x06\xa0\x82\xd3\xeb\x48\xc3\xf9\xa5\x16\xe4\x24\x0f\x4e\xfb\xd5\xab\xb3\xcb\x90\x26\xba\xce\x44\xa8\x05\xf4\xfa\xf9\xf7\x67\x15\xaf\xcb\x93\x4c\x19\x18\x83\x73\x4e\xe7\xb7\x54\xa8\x13\x84\xbe\xe3\x52\x5d\x58\xaf\xcd\x35\x43\xa7\x6c\x67\xd9\xed\x08\x18\x12\x02\x7a\x3b\x87\x1e\x1b\x27\xa9\x96\x6f\x17\x9c\x91\xa3\x86\x97\x8a\xfb\x50\x81\xe9\xf1\x59\x1a\x9a\x86\x7b\x0b\xf5\x50\xd5\xbf\x6a\xbb\xcf\xb0\x00\xbc\xd6\x68\xc5\xab\x52\xa2\x0d\x16\x78\x4d\x94\x96\x60\xce\x02\xf7\x46\x14\xd1\xe0\x29\x7d\x33\x41\x97\x66\x8f\x8f\x38\xd3\xe6\xd0\x02\x68\xa8\x67\xbd\x4f\xa9\x20\xe0\xf4\x48\x6d\x0b\xc5\x0b\x5e\xc5\xde\xf7\x45\x86\x6b\xef\xb6\xc3\x44\x22\x6b\xec\xc1\x48\xc3\x7e\xe5\xc8\x98\xef\x36\xda\xc0\x41\x94\x15\x7c\xad\x07\xec\x3b\xfe\x14\xd7\xf2\x47\x4f\x24\xca\xd0\xd5\xd9\xa5\x36\x17\xe3\x56\xa5\x7b\x82\x28\x34\x1d\x5d\xbe\x7d\xf3\x87\x3f\x36\x23\x86\xb9\xd5\xfd\x29\x01\x59\x1b\xe4\x73\xe3\xb7\x33\xbb\x97\x8e\x00\x33\x8e\x53\x24\xeb\xcd\x86\x0b\x85\xa8\x32\x16\x01\x78\x3e\xb4\xa6\x1c\x40\xd9\xba\x79\x70\x59\x6a\xcc\x89\xd4\x16\xa5\xdb\x08\x78\x34\xd9\x6a\xa3\x60\xc1\xc5\x16\x8b\x32\xbc\x65\x6f\x81\x72\x49\xfa\xf4\x0c\x12\x67\x82\xd0\xef\xc1\xcc\x00\x4a\x24\x40\x36\x8c\x37\x02\x5c\x46\x68\x0d\x3b\x1f\x20\x82\xc1\xc1\x0c\x2d\x01\xb7\x1d\x34\x65\x52\x11\x5c\xea\xc1\x1b\x10\xce\x19\xd6\x21\xf5\x23\xe9\x3e\x49\x00\xa5\x0c\x36\x7d\x68\x45\x70\xa9\xb9\xa3\x55\x78\xc5\x97\x72\x82\xd0\x05\x57\xc4\x59\x1a\x78\x5e\x35\x43\xcf\x99\x04\x9c\x45\x46\x0d\x06\x56\x81\xeb\x7d\xa2\xeb\x8d\x57\x0a\xd1\x05\xda\xf1\x1a\xb6\x8f\x5a\x6c\x39\x8b\xaf\xab\x1d\x01\x5b\x30\x92\xb2\x31\xd5\x3d\x9b\x89\x92\x3b\x0b\xb4\x89\xa7\x37\x2b\x27\xd3\xe9\x76\xbb\x9d\xac\xf0\x46\xf0\xbb\xdd\x84\x8b\xe5\xb4\xe4\x5b\xa6\x31\x9a\x3e\x9d\x3c\xd5\x5b\x97\x29\xbc\x1a\x37\x0b\x49\xdd\x85\xac\x32\xf7\x68\x21\xa8\xf7\x42\x62\x6d\x3c\x67\x78\xce\x6b\x15\x5a\x8b\x57\x1d\x4f\x8d\x71\xef\xa6\x26\x8e\x20\x1d\x47\x07\x95\x66\xc3\x73\xd2\x5a\xa5\x60\x9c\x59\xa3\x69\x82\x3e\x43\xd7\xa3\xab\xb3\xcb\xeb\x51\x58\x56\x9a\x47\x37\x02\xdc\xae\x47\x0d\x52\x3e\x18\x4f\xee\x79\x26\x48\xc8\x66\x71\x8f\x75\x33\x48\x90\x62\x5a\x74\x84\x86\xef\x4d\x4b\x0f\x6c\x6a\xe2\x80\x81\x0e\x3e\x60\x2d\x6a\x56\x98\x2d\x49\x40\xd5\xb9\x87\xb0\x7a\x1d\x17\xf1\x63\x34\x8a\x7f\x3a\xd6\x88\x27\xde\xa6\x05\x47\x72\x3f\x89\xd2\x7b\x4a\xfd\x54\x9e\xa9\x92\xa1\x8e\xfd\xe6\x71\x7d\xdc\x59\x5e\xb1\xd9\x10\x53\xba\x01\xe3\xe9\x3d\x94\xef\x2d\x2d\x89\xb8\x6c\x50\x3c\x40\x0d\xf7\xbe\xb4\xa3\x75\x0e\xe9\xce\x10\x93\x92\xb2\x5d\x99\xce\xc3\xed\xc4\x44\xcd\x4a\x22\xaa\x9d\x9e\xf5\x5d\xb3\xba\x41\x3c\xb5\x92\xc2\xfb\xa3\xc6\xc5\xb3\xd9\x54\xd4\x9d\x81\x35\x1d\xef\x0f\x2b\x25\x58\xc0\xbd\x61\x36\xb3\xe6\x98\xcc\xca\x16\xe3\x52\x76\x5d\x26\x56\xc5\x30\x87\xf4\x83\xb7\xc9\xd7\x7d\xd6\xe0\xad\x74\xe3\x90\x8d\x57\xc0\x12\x98\x28\xad\xd4\xf6\x8e\x59\x83\xbd\x0a\xd2\x61\xc8\xe9\x8f\xb3\x9e\xcd\x11\xd9\x82\x0e\xc0\x4d\x33\x40\x23\xbf\x4f\xd7\x21\x54\x0f\xa3\x3a\xca\xa6\xbc\x7e\x8a\x0a\x4b\x49\x8b\xf3\x41\x39\xe0\x3f\x1d\x8e\x04\x20\xec\x2d\x9b\x0e\x9f\x06\xc1\xa3\xbe\x50\xc1\x0c\xf8\x63\x7b\xea\xc9\x17\x27\x49\x32\xc0\xf6\x65\xcd\x99\x01\x98\x5a\x66\xe6\x19\x90\xa2\xfe\x63\xb7\xe2\xef\x41\xd0\x00\x84\x8f\x44\x50\x17\x12\xf0\xc1\x08\x7a\x71\xfe\xfc\x83\x12\x13\x9a\x1e\x46\xbd\x91\xc3\x45\x8b\x58\xf8\x37\x5f\xec\xaf\xee\x8c\xb1\x81\xab\x49\x2a\xcc\x14\x85\xf3\x29\x43\xb6\xbd\xb0\x1b\x10\x13\x3f\x68\x43\x29\x03\xa6\xb1\xba\xb4\xf0\xb1\x66\xd4\xf5\xc8\xce\xc1\xeb\xd1\x09\x3a\x75\x13\x12\x94\x20\x7a\x7e\x00\xae\xda\xb2\x59\xe3\x1b\x22\xe1\x98\x42\xab\x94\x92\x14\x10\xbe\x21\x91\xb6\xc5\x29\x6c\x21\xcd\x76\x48\x09\xcc\xa4\xde\x00\x64\x00\xae\xf0\x8e\x08\xf4\xf8\xea\xec\x72\x3a\x9b\x9d\x1f\x21\xab\xe1\x41\xba\xd9\xa3\x5a\xdb\x04\x4e\x81\xf4\xff\xcd\x8e\x86\xa7\x80\xb1\x87\x51\xef\xf4\x10\x48\x5c\x96\x10\x86\x86\x2b\x27\x1d\xad\x97\x08\x35\xbe\xfe\x92\x17\x72\x82\xb7\x72\x82\xd7\xf8\x17\xce\x26\x05\x5f\x4f\x4f\xe1\x9f\x2f\xcf\x66\x53\x13\xf8\x30\x6d\x82\xbf\x96\x35\x2d\xc9\x54\x33\x7f\xec\x98\x3f\x06\x27\xc9\x64\xa5\xd6\xd5\x27\x45\x35\xcf\xc0\xd6\xf2\xea\xe2\xfc\xb9\xe1\x93\x73\x49\x74\xf8\xe4\x71\x21\x03\x64\x90\x4f\x9a\x1e\xa8\x65\x50\x9f\xfc\xb9\x84\xfd\xe7\x93\x95\x55\xf3\xb4\x86\x42\x83\x56\xb3\x7b\xc6\x6e\x55\x64\xb4\xbc\x38\x7f\x9e\x29\x7e\x12\x26\xb3\x7b\x04\xf9\x4b\xad\x8d\xbd\x34\x8a\x63\x00\x98\x6c\x92\x29\xf0\x96\xc5\xe6\x10\x43\x68\x59\x6c\x3e\x86\x21\xf4\xea\xec\xf2\x1f\x60\x08\x69\xe4\xff\xd5\x0c\x21\x4a\x98\x3a\x2d\x0a\x22\x07\xdb\xf6\x59\xe1\x7f\xeb\x85\x43\xae\xf8\xd6\xf9\x99\x30\xbc\xcb\x58\xbe\x26\xc8\x4f\x09\x5a\x28\x52\xda\xcd\xbd\xf5\x10\x07\xb8\x72\x1f\xbd\xa3\x05\xd9\xab\x8a\xcf\x71\xa5\x65\xd9\xcc\xc4\x89\x80\x5f\x84\x35\x7d\xe5\x68\x86\x8e\x0f\x05\x7c\x76\x06\x6a\x77\xc8\x9a\x6d\x5a\x10\xe5\x8c\xdd\x85\x01\x40\x48\x15\x66\x3b\x24\xc8\x52\x4f\x67\x0d\xdc\x86\x9a\xfc\x70\x79\x96\xef\xfb\x73\x4f\x13\x0e\x01\x38\x23\xcf\xd2\xe9\x89\x40\x08\x5e\x9e\x2c\x39\x5f\x56\x04\xe4\x5f\x7b\xac\x3c\x26\x6c\x49\x19\x31\x47\xcb\x2b\xbe\x1d\x2b\x3e\x75\xd4\x1a\x7b\x62\x90\xb2\xe5\x27\x4b\xa0\xc3\xbb\x6c\x9e\x5b\xed\x72\xce\x8b\x14\x4f\x0e\x36\x60\x60\xd8\x00\x74\x8f\x25\x26\x1c\x02\xac\x37\x47\x74\x43\xe4\x2c\x5b\x83\x20\x89\xd7\xc4\x71\x07\xa2\x5c\x7e\xb8\x3c\x3b\x42\xd8\x18\x5d\x7b\x12\x24\x87\x04\xc6\x05\xec\xf1\xb5\xc7\xb5\x96\x67\x17\x3c\x8b\xe9\xd6\xd9\x43\xa5\xb3\x05\xdd\x11\x88\x8b\x25\x1b\xe6\x7e\x97\xad\x86\xf5\x8e\x1b\x9f\x18\xba\x59\x26\x7f\x38\x5d\x67\xd6\x50\x46\x43\x60\xec\x87\x53\x76\x99\x3a\x6a\xd8\x20\xef\x48\x46\xdf\x16\x1f\x76\x77\x0c\x8c\x26\xec\x5e\x42\xa7\x5a\xbc\x34\x01\xab\xa0\xcf\x46\xa7\x3f\xce\x46\xc7\x68\x04\x27\x82\xa3\x94\xf7\x50\x3f\xa3\xe7\x58\x90\xef\x89\xc2\x95\xfe\xe6\xd5\xd9\xa5\xfe\x0f\xc4\xbc\x28\x5c\xdc\x8c\x4c\x98\xec\xe8\x87\xd9\x66\x45\x04\x49\x7a\x37\x73\xd8\x3c\xd6\x9b\x91\xa1\x16\x1a\xef\x81\x36\x0d\xd2\x03\xed\x5e\x25\xbc\x8b\xa6\x45\x33\xd4\x81\x76\x96\x02\x03\xad\x5e\x3f\xff\x3e\x63\xa2\x0d\xcc\xc8\x61\xd3\x6b\xc0\xec\xca\x98\xce\x26\x59\x22\xcf\x21\x08\x6d\x21\xba\x42\x8b\x26\x1b\xb0\x0a\xbf\x61\x65\x3d\xd0\x7b\x33\x33\xed\x5d\x36\xa1\xff\xe5\x04\x5d\xda\xd8\xf6\xce\xfc\x75\xa7\xc2\x23\x33\xf7\x5e\x5b\xa1\x93\x98\x7c\x43\x1e\xe8\xd7\x43\x9a\x7d\x9c\x3a\x63\x37\xcf\x20\xeb\xd2\x6c\x1b\x1b\x92\xdd\xc7\x4d\xcd\x78\x49\x2e\x79\x38\x88\xb4\xef\x3d\xb1\x4d\xe3\xee\xe9\x0b\xdb\x22\x7e\x34\x8f\xee\x7d\x64\xdc\x83\xfd\x70\x6c\x8c\x1e\x8e\x8d\x3d\xa0\x0f\xc7\xc6\x0f\xc7\xc6\x0f\xc7\xc6\x0f\xc7\xc6\xf6\xf9\x6f\x7b\x6c\xbc\x11\xf4\x36\x98\x2d\x83\xfa\xaa\xc9\xb6\x8c\x6b\xe3\x4b\xdb\xc0\xe9\xdb\x98\x46\x3c\x44\x0b\x5b\x98\xe1\x19\x35\x30\xb4\xf8\x0e\x27\x7e\xcc\x10\x40\xce\xaa\xca\x89\x71\xd1\xa4\xd7\x4d\x7b\x1c\x10\x8a\x37\xd4\xfa\xd0\x46\xfd\xca\xfc\x00\x6e\x04\xb1\xd3\x46\x6e\x79\xf9\xb2\x7e\x07\xc8\x19\x29\xe0\xdf\x63\x66\xb1\x76\x1c\x89\xb1\x05\x14\x4b\x7b\x69\x73\x64\x41\x2e\xda\x1c\xa1\x36\x3e\x55\x2f\xf8\x08\xc8\xd3\x20\x6a\xbd\x5c\x5b\x3f\x54\xb6\xed\x2c\x06\xf2\x9a\x69\xf1\x99\x97\x23\x10\xca\x4f\xb5\xbf\x4d\x3f\xd1\x52\x76\xc0\xaa\x37\x1e\xd2\x36\x70\x1d\x82\x68\xbd\x04\x9b\x36\x74\xba\x71\x8c\xba\x54\xe9\x60\xd2\x89\x7e\x8c\xf9\x69\x65\x4f\x88\x3a\x8f\x64\x1b\x9b\xcd\xf0\x9a\x4c\xfc\x08\xed\xf8\x5c\x6b\x7a\x36\xcb\x86\xc1\x57\xbf\x70\x46\xa4\x4d\x5b\x85\x54\x81\x92\x1d\x1a\x62\x8d\x9a\x30\x6b\x93\x78\xfc\x27\xce\x4c\xbe\x8c\xfd\xd1\x2c\x4a\xfd\xab\x49\xcd\xf6\x69\x63\x50\x5a\xc7\x4f\x1d\xf5\x44\xa8\x85\x20\x4c\x55\x3b\x67\xd1\xb9\x21\x58\x03\xe0\xf4\xc7\xd9\xb1\xd9\x3a\x9b\x2d\xfb\xab\xb3\xcb\x26\x52\x56\x26\x26\xc9\x67\xfd\x40\xdb\xa1\xe5\xa6\x3b\xd4\xdb\x8c\x28\xdf\x84\x92\x2e\xae\x3e\x0c\x80\x4a\x3b\x7f\x5d\xa4\xfb\x47\x58\x7d\x2b\x2e\x95\xb7\xf0\x8e\xd1\x9c\xd7\x2c\xe6\x2c\x56\x1c\x46\x64\x71\xff\xe6\x0b\x20\xe0\x97\x5f\x3e\x33\xb9\xf9\xb5\x34\x38\x0b\x22\x37\xdc\x26\x60\x6b\xf9\xed\xd0\x8d\x9b\xbd\x98\xb5\x53\xb4\x67\x3e\x05\x23\xdf\x87\x85\xda\x2d\xc5\xf0\x41\x8b\xae\xcd\x93\x70\x8a\xe4\x9a\xa1\x17\x9c\x48\xb0\xdc\xf2\x62\xeb\x51\x27\xbe\x3e\xc1\x90\xc3\x30\xcd\x11\x87\xc7\x2e\xd3\x46\x63\x4b\xee\x36\x15\x2d\xa8\x0a\xa6\x8b\xa1\x56\x09\xda\x44\x45\xc3\x16\xc8\xbe\x58\x63\x56\x43\x32\x57\x9a\xa4\xc9\x45\xd0\xdb\xba\x66\x2d\x04\xd0\x30\x31\xd6\xfb\x7a\xc7\x01\xcf\xd0\x39\x81\x04\x5f\xf7\xdc\x57\xe7\xa0\xd3\x06\x81\x08\xe4\x83\xf4\x8d\x49\x86\x75\x47\x59\x83\x92\x40\x8b\xdc\x72\xc7\xf0\xda\x26\xdc\xe1\xaa\xe2\x05\x74\x31\xdf\xb5\xb9\x75\xbf\x41\x2b\xbe\x25\xb7\x44\x1c\xeb\x9e\xad\x84\x8b\xb9\xae\x14\x56\xb4\x00\xf0\x0e\x1a\xa4\x76\x98\x19\x61\xcc\xce\x66\x5b\xd1\x2c\x14\x63\x88\x47\x40\xda\x24\x3b\xa7\x1a\xfa\xfc\x32\x5a\x0b\x92\xe1\xc5\x6d\x30\xea\x1f\x25\xed\xd9\x71\x66\x52\x84\x6e\x39\x14\xce\x3f\x76\x4b\x3d\xf2\x36\xc7\xbf\x93\x34\x80\xe3\x6e\xac\x88\xd7\x31\x61\x52\x6a\xe3\xe3\x3b\xd8\xef\x3e\xaf\x17\x8b\x50\x2c\x50\x37\xdf\xa1\xd7\xbc\x29\x24\xd1\xb3\x9c\xcd\x16\x1a\xcd\xa1\x51\x60\x84\x92\xfe\x42\x9a\x12\x0e\xaf\x17\xde\x46\x0c\x9c\x8f\xe6\x24\xd7\x3f\x15\xf1\xbc\x8f\xb1\x2c\xf0\xce\x01\xee\x1e\xa2\xde\x69\xae\x39\xa1\xd5\xca\x42\xef\x70\x6f\x53\x1b\x27\x87\xe2\xcc\x9c\x58\xf7\xf0\x6c\xd2\x67\x41\x3c\x6a\xc3\x66\xbd\x26\xac\x24\x25\xc2\xd2\x92\x20\x00\xd3\x10\xc5\x8d\x08\x76\x6f\x18\x52\xdc\x38\x92\x6b\x5c\x55\xa6\x8c\x89\x20\xf8\x26\xdb\x39\xa6\x85\x74\x87\xe4\x41\xe8\x15\x16\x4b\x82\x0a\x53\xa1\x03\xdc\x0e\xb9\xf0\xad\x5f\x4d\xd2\x25\x83\xe4\x3f\xb0\x72\xa0\x42\xc9\x9a\xac\xb9\xd8\xe9\x7e\x18\x62\xa4\x20\x52\x62\xb1\xdb\xe7\xce\x40\xce\x8d\xc7\xa8\xe7\x3b\x15\xf3\x3b\x76\x67\x62\xff\x9b\xde\xc1\xf6\xba\x2e\x56\x0e\x3b\x53\x95\x24\x22\x59\xe6\x50\xcf\xc6\x14\x35\x78\x4c\x19\x9a\x6b\x60\x47\x30\x51\xf6\x5d\x36\x5e\x2e\xb4\x24\xd2\x54\xae\x8a\xc0\xf5\xf7\xe6\x26\x29\xbf\x26\x4d\x2e\x22\x56\xa8\x22\x58\x2a\xf4\xe4\xeb\x67\xdf\x7c\xa9\xf7\x86\x36\x4b\x5d\xcf\x7e\x93\xa8\x1e\x01\xeb\xf6\xa5\xfb\xb8\x3d\x76\x1b\x09\xc5\x79\x25\x27\x94\xa8\x05\x38\x62\x56\x6a\x5d\x4d\xc5\xa2\xf8\xf7\xaf\xbe\xfc\x22\x1a\xa2\x93\x5a\x83\x11\xcf\x95\x49\x4f\x4f\x3b\x1d\xcc\xa8\xf9\x02\x3d\x7b\xfa\xef\x5f\x7f\x63\x68\x1b\x46\xc1\xb8\x7a\x4e\x10\x65\xea\xd9\xd3\x60\x8b\x35\x65\x74\x5d\xaf\x4f\x0c\xcd\x12\x62\x13\xd2\x09\x83\xf3\xd8\x9f\x34\xdf\xe3\xbb\xb7\x64\x2b\xa8\x22\xf7\x99\x72\xbd\xaf\xe3\x93\x2f\xa6\x22\x4d\xa1\x9c\xd8\xe4\x13\x7c\x1d\x98\xe1\x9a\xf7\x7a\x9e\x44\x60\x5a\x09\x20\x00\x2f\x73\x3a\x5f\x22\xbc\xd9\x10\x56\xba\x38\xab\xd4\x8c\x8e\x61\xea\xe6\xb9\x37\xa3\x1b\xe7\x3b\xf8\x4b\x9b\x7a\x31\x6e\xeb\x58\xd1\x35\x55\xa9\xad\xe3\xe3\xfd\xb1\x8d\x53\xe4\x3d\x32\x84\x39\x86\xc0\x80\xb8\x49\xb7\x0f\xd5\xad\xb7\x25\x18\x4d\xc2\xc8\xa9\x44\x47\xff\xac\xe5\xf1\xcd\x93\x5f\x3f\xfd\x40\xab\xe3\xcb\x2f\x7e\xfd\xf5\x3d\x16\x47\x96\x8d\x10\x58\x25\x5d\xaf\x93\xd7\xb4\x35\x0d\x78\x45\x8b\x5d\x33\x79\x9d\x7b\xdd\x85\x6d\x05\xaa\x1b\xa1\xa6\x12\x56\x9e\x31\x70\x68\x8e\xa7\x75\x72\x93\xd2\xa0\x7a\x09\x08\xe6\x38\xd5\x82\x1f\x76\x0f\xb5\x98\x51\xc6\x7c\x9b\xd8\x27\xec\xcf\x18\x49\x94\xd9\xc4\x7c\xeb\x7a\x38\x46\x7f\x18\x37\x7f\xe8\x7f\x75\x7f\xd0\x46\x68\x6c\x03\xee\xb7\xd3\x86\x66\xf7\xcb\x4b\xc1\x15\x37\xfb\xba\xbd\x9f\xc7\xb6\x50\x44\x04\x70\x97\x7d\x5e\xe6\xbf\x2d\xbc\xc6\x59\x53\x0d\xa3\x71\xc9\x37\x81\xc4\xa7\x20\x88\xae\xa3\xe1\x0e\xc6\xe3\xed\x3b\xca\xad\x6b\x69\x9f\x5a\x46\xa6\x49\x1b\x8e\x6a\x11\x8a\xc1\xb5\x9b\x02\x2d\xad\xc8\x1d\x95\x20\x18\xfd\x29\xa8\x71\x7b\x4b\x36\x15\x2e\xc8\xf5\xe8\xb8\x8f\x46\xd4\xc7\x11\x45\xae\x61\x65\x8b\x19\x12\x00\xdf\x88\xe4\x98\x46\x68\x90\x6b\x78\x82\xb8\xe8\xb0\xe8\xb3\x3d\xbc\x5f\x2f\x2e\x38\x23\x1f\x84\xa6\xfb\x68\xc7\x36\xb9\xc0\xe0\x5d\x73\xfa\x84\x2b\x41\x70\xb9\xd3\x00\x1a\xbc\x2e\xf4\x46\xf1\x83\x50\xd3\x14\xd8\x0b\xd1\xb4\xe5\x6b\xd4\xb7\xb3\x0b\x73\xfc\xf9\xae\x39\x81\x31\xee\x71\xb3\x8c\xa9\xf4\x66\xe9\x3d\x76\x90\xe6\xd3\xc8\x4b\x3b\xc3\x22\x6f\x0d\x1f\x63\xfb\x45\x4d\x82\xc3\x77\x89\x8e\x54\x17\x78\x4d\xce\xb0\x24\xa7\xe5\x7f\xd5\x52\xad\x09\x53\x39\xb6\xce\x28\xfa\xb1\x37\x9d\x0a\xac\x75\x5c\xfb\x2a\xc5\x5e\x7b\x14\x6e\xc3\x6d\x21\xd1\xbf\x95\x26\xa6\x42\xe9\x04\xa1\x97\xb8\x58\x79\x10\xc3\xc5\x9e\x90\xad\xdc\x06\x65\x83\xa0\x46\x24\xdb\x03\xd6\x86\xe7\xb9\x94\xb8\x02\x6f\xa8\xc2\x15\xfd\x05\x9c\x11\x51\x57\x13\x54\x8a\x21\x77\x78\xbd\x81\x7a\x8e\x6d\xa8\xe3\xf5\xa8\x27\x90\xaf\x47\x9d\x88\x9b\x68\x24\xb3\x46\xe2\x7a\x74\x37\x6e\x94\x87\xfe\xd7\xf5\xa8\x83\x72\x6b\x0e\x9a\xc1\x1b\x0a\xad\xf0\x6d\x4c\x85\x78\x25\xe9\xf6\xc7\x66\x8f\x20\xbb\xcc\x81\x05\xcb\x59\xd4\x79\xe7\x71\xa6\xa8\x08\x16\x8a\xdc\xa9\x63\x44\xca\x25\x19\x2b\x22\xd6\x94\xd9\x5a\xa4\xac\x44\x82\x8c\x09\x2b\xc4\x6e\xa3\x6c\x35\xad\x98\xfc\xd1\x8d\xc1\x05\xbe\x6d\x0b\xda\xc0\x46\xe7\x09\xe0\xa8\x49\x6d\x8d\xc7\x76\x5d\xab\x3e\xe2\x89\x93\x02\x87\x33\xf4\xa1\x0d\x0c\x5b\xdc\x0b\x66\x9c\xa6\x1e\xd0\xc9\x9d\x4a\xc3\xcb\x6e\x71\xdc\xe9\xea\xc9\xd8\x74\x35\xd6\x93\xf9\xff\x53\xa2\x8e\x51\xbc\xad\x35\x3c\x41\x16\x73\xf0\x36\x93\x04\xea\x3e\x92\x71\xcf\xb6\xde\xf3\x5b\x43\xda\x40\xec\xd8\x46\x7b\x96\x10\xe3\x8e\x68\x49\x33\xd8\x76\x6e\xa7\x53\x44\x9e\x51\x45\xd6\xd1\x28\x9f\x8e\x40\xd8\x13\xcd\x1a\xe3\xef\x22\x42\x22\xbe\x6e\xcd\xcc\x65\xb6\x6e\x56\x6f\xe1\x3e\x5e\xf8\x6b\xaf\xbf\xde\x46\xa1\x02\x75\x76\x18\x2c\xb5\xd4\x3b\x96\x8a\xdb\x80\x9b\x28\x80\x28\xc4\x3d\x79\x82\xdb\xd3\x27\xca\xd0\xdb\x6f\xcf\xd0\xd3\xaf\x9f\x7c\x8d\xa4\xf5\x06\x7c\x39\x79\x1a\x13\x29\x6b\x7c\x77\x4e\xd8\x52\xad\x4e\xd0\x93\x2f\x9e\x86\x37\xae\x60\xbf\xbb\x56\x5f\xc4\x2c\x19\xac\x14\x11\xec\x04\xfd\xf9\xdf\xfe\xf6\xe7\x9f\xc6\xff\xcf\x27\xff\xf6\xe9\xff\xfb\xe8\xb3\xcf\x27\x5f\x8c\x7f\x7d\x3a\xfe\xd3\x9f\xdf\xfd\x2f\x3c\xfe\xe5\x6f\xff\xfb\xe7\xcf\xff\x2d\x36\xd5\x86\x4e\xd5\x59\x5d\x55\x78\x5e\x91\x13\x14\x5d\x07\x06\x06\x16\x02\x87\xe4\x88\x29\xb1\xf4\x3a\x12\x60\xd7\x55\x30\xae\xad\xb7\x75\xee\x66\x89\x40\x5e\x10\x2a\xa0\x0e\x78\xc6\xb6\xb7\x31\x22\x02\x5e\x78\x2b\x5e\x29\x83\xd0\x07\xca\x20\x77\xce\x6c\x61\x53\xa6\xae\xdb\xd8\x4e\xd0\xd5\x6e\x63\xbc\xe3\xc7\x66\x4d\xda\x3e\xbd\xc3\x81\x41\x89\x8d\xed\x0c\x74\xd5\xf9\x6c\x39\x2a\xeb\x05\xf7\xfb\xb3\x13\xd6\xf6\x51\xe0\x98\x39\xee\x22\xcb\xe6\x3b\x3f\xe1\x0d\xea\x34\xdb\x22\xe4\x30\x57\x6d\x54\x7d\xc5\x97\x36\xb6\xa8\xa0\x15\x55\xf1\xf8\x32\x25\x8c\xa9\xea\x15\xeb\xea\x51\x23\x2e\x9c\x22\x20\x19\x47\xb2\x2e\x56\x1e\xd9\x0c\x2b\x00\x41\xc5\x5b\xd0\x61\x29\x35\x1c\x90\x68\xf7\xc7\xd1\xe5\xdc\x2d\xdb\x67\x5a\xf7\x82\x72\xec\x8f\x6d\xd9\x4c\x83\x60\x14\x64\x47\x46\x3c\x7a\x64\x3d\x7c\xb6\xca\xa2\x21\xcb\x0a\x4b\x3d\x74\xb2\x58\x98\xf2\xc5\x95\xe6\x83\x96\x26\x09\xa0\xb4\x35\xb0\x4a\xab\x68\x60\x7e\x9c\x5e\x42\xf8\x94\xa9\x74\x95\x7d\xc6\x07\x10\xb5\x38\x5d\xbb\x32\xce\x76\x02\xdb\xd1\xc2\x99\x54\x93\x31\x21\x77\x4c\xe1\x3b\x9b\x27\x31\x34\xf0\x8a\x2f\x2d\x94\x89\xf5\x8f\x90\xe1\x4d\x7b\x7a\xe0\xa3\x4f\xff\xfa\xf9\x1f\xfe\xce\xaf\xaf\xd1\xa7\x05\x3d\xf9\xb4\xd8\xbc\xfb\x74\x41\x4f\x3e\x5d\x6c\xde\x7d\x7a\x25\xdf\x7d\x2a\xd4\xc9\xa7\x1b\x5a\x8e\x7e\x83\xa4\x4d\x22\x2c\xb8\x30\x3a\x73\x20\xb2\xd1\x52\x0f\x95\xbc\xa8\x1b\x4a\x9c\xb8\xc8\xb5\x62\xce\x99\x22\x93\x25\x55\xab\x7a\x0e\x46\x81\x31\x18\xc6\x65\xc1\xd9\xed\xf4\xe9\xe4\x8b\x69\x47\x32\x99\x14\xc2\x6f\x26\x4f\x27\xcf\xc2\x55\x14\x51\xb6\xd4\xcf\x92\xfb\xbe\xe4\x7f\xfc\xe9\xe3\x4f\xff\xf6\xf8\xfa\xaf\x3f\x8d\x3f\xff\xf9\xb7\x3f\xfd\xff\x7f\x78\xf9\xf3\xe3\xe3\xf6\xdf\x47\x9f\x5d\xff\xfd\xe8\xb7\x8f\x7f\x3a\x1d\xff\x09\x8f\x7f\xf9\xf9\xf3\xbf\x5d\xff\xf4\x93\x55\x0f\xef\xe0\x87\xc7\xd7\x8f\x7f\xfa\xf3\xd1\xcf\x9f\x5f\x1f\x1d\xfd\xf6\xf1\x71\xfc\xdd\xd1\x67\xd7\x3f\x1f\x1d\xfd\xed\xa7\x3f\x7f\xfa\xd3\x49\xc1\x94\xa8\x4e\x7e\xfe\xf9\xe8\xb3\x98\x62\xc9\x8a\x9a\x8f\xd7\xd4\x44\x7b\x31\xd2\x30\x19\x3b\xab\x93\x79\x95\x36\xfb\x26\x43\x82\xf1\xad\x31\x61\xc4\xed\x98\x96\xa3\xa3\x0c\x55\x91\x9a\xa7\x9e\x12\xe9\xc9\x45\x13\x8c\xa8\xd7\xc0\xa3\x3d\x87\x7f\x02\xa2\x89\x47\xbc\x8f\xc5\xa1\x17\x5e\x02\x70\x68\x49\x32\x1e\x90\xc2\xf1\xd8\xc6\x8f\x34\x8d\xef\x67\xc0\xbc\x6f\x60\x60\xe2\x65\xc5\x97\x4b\xca\x96\x03\xfe\x4d\xdb\x2a\x76\xea\xb9\x85\x70\xee\x66\x2b\xa7\x5b\x87\xeb\x1f\xaf\x88\x20\x93\xb8\x57\xd9\xdc\xe3\x61\xd2\xa1\x41\x6d\x6b\x4b\xde\xd5\x2f\x9e\xd7\x21\xbb\xdf\x57\xf2\x70\xa0\x4f\x25\x34\x3f\xf4\x28\x0e\x27\x12\x4c\x7b\x85\x4e\x42\xe9\xa4\x6d\x6d\xf9\xf6\x54\x60\xe8\xf4\xcd\x90\x29\xb9\xe5\x69\x47\x07\xe4\xa7\xb2\x1d\xdf\x7d\x2d\x86\x92\x48\xa5\xf7\xb4\x7b\x77\x26\x44\x47\xec\x7d\xa1\x31\x30\x01\x54\x3e\xdd\x97\x3c\xbe\x8e\xf2\x12\x7d\x9b\xe8\x90\x03\x72\xd8\xda\x88\x92\x68\x0c\xeb\x99\x6b\x92\x84\x8a\xbc\xe9\xdd\x8c\x34\x1e\xc4\xda\x00\x4d\x67\x9c\x65\x26\xee\xc9\x9d\xac\x78\x60\xf9\x45\x87\x6d\x3e\x08\x8f\x19\xbb\xb7\x2e\x68\x77\x82\x32\x8b\x86\xf4\x07\x39\x03\x38\xe9\x11\x72\x46\xde\x2c\x86\x92\xea\xf2\x13\xbd\x9b\xe4\x86\xe1\x86\xde\xb9\xd0\xe6\x36\x2e\x9b\xff\x51\x18\x84\x8f\x9d\xdc\x93\xdf\x7f\x76\xef\x9d\x09\x61\xbf\x72\x31\xcf\xaf\x2f\x9b\x5f\xac\xd9\x60\xe6\x44\xc6\x90\xbc\x9b\x32\x30\x84\x75\x10\x7a\x4b\x60\x8d\xa3\x35\x91\x12\x2f\xe3\xe7\x84\xed\x93\x9d\xd9\x8a\xdc\x8e\x2c\x72\x02\x15\x1d\xf0\xc8\x7d\xd7\x33\x95\xec\xdc\x77\x6f\x33\x06\xcc\x17\xdd\xc1\xa5\x44\x71\x7a\x67\xd0\x1f\x92\x71\xaa\x57\xbc\xc0\xd5\x93\xa8\x53\xdd\x7f\x72\xf3\x90\x6f\x88\x18\x4e\x06\x1f\x43\xc0\x59\x46\xb3\x75\x3a\xdf\xc6\x35\x2b\x31\x59\x67\x94\x33\x1a\x23\x5c\x07\x0b\xd5\xf7\x9b\x65\xce\xc8\x31\xaa\x36\x39\xa3\x60\x24\xa3\x8c\xc1\x18\xd5\x75\xb1\xc9\x68\x56\x88\xec\xa1\x86\x4f\xa4\xbb\xed\x16\x2a\xa7\x53\x96\xd5\x0a\xd7\x25\x1d\xae\x0e\x34\x46\xb8\x22\x19\x55\x84\xcc\x50\x73\xc6\x00\xf3\x38\x6e\xde\xf6\x1a\x3e\xc9\x6d\x98\xdd\xf5\xb3\xdc\x86\x69\x5d\xe0\x35\xfc\x2a\xb7\x61\x5a\xb6\x7b\x0d\xff\xfd\x43\x4a\xc6\x4d\x34\xa7\xd6\x7f\xba\x09\x3d\x90\x4a\x69\x24\xe1\xef\x5f\x5c\x9a\xbf\x59\xbd\x9e\x13\xf1\xcf\x51\x04\xc3\xa1\x1b\xfe\xb3\xc6\x77\x26\x8c\xe3\xeb\xaf\xbe\x7a\x36\xcc\x9d\x36\x26\x2a\x93\xec\xf1\xd8\xa8\xf6\xc9\x2d\x2c\x34\x9c\x51\x09\x76\xc7\x50\x25\xaf\x8f\x53\xda\x21\x58\x67\xcd\x37\xe1\xb5\xa1\x08\xd9\x9d\x03\x94\xbb\x46\xaf\x55\xb3\x8d\x4f\x44\x38\x34\xf6\x30\xba\x1e\x92\x9b\x57\x9e\xeb\xc1\xdd\xd9\xd8\x3a\x92\xad\x16\xa7\x25\x29\xb0\x68\xcd\xfb\x01\x98\x0c\xaf\x49\x09\xba\x76\x29\xaf\x47\x2e\xe7\x24\xe0\xe0\xd8\x70\x73\x53\x4e\xdb\xdf\x00\xe4\x08\x1c\xc5\x11\xc4\x4d\x35\x8e\x65\x0f\xeb\x61\x9a\x5e\xad\x48\xbb\x59\x85\x4b\x76\xec\x85\x9a\x15\xb1\x77\xce\x58\x62\xda\x04\xdc\xf0\xc5\x47\xfe\x63\xf2\xb5\x9b\xed\x59\xe3\xe3\xc1\xa5\x5e\x24\x90\xf7\xd6\xa5\xb2\x3b\x5b\xc8\xdc\x14\x49\x5e\xd5\xe6\x16\x1e\x23\x0c\x70\x69\xb7\x7d\xf6\x86\x35\x2a\xf3\x47\xdf\x46\xd2\x99\x33\xd1\xee\x70\x6d\xf9\x1b\x78\x6f\xfe\x0e\x1e\xb6\xf8\xcf\x9c\xa0\x52\xf0\xcd\x86\x94\x36\x3e\x03\x09\xac\x88\x35\xec\x24\x22\x77\x05\x21\x36\x60\x26\x77\x42\x89\x9a\x29\xba\x26\x8f\xa4\x2b\xaa\x67\x4f\x62\xfa\xf4\x78\x24\x51\x81\x37\xb8\xa0\x2a\x10\xf7\xdb\x1b\xb8\x5e\x27\x66\x4b\xa5\xff\x7d\xee\xf8\x0f\xfb\x4b\x73\x31\xd9\xde\xbe\x6d\x98\xf1\x5d\x06\xc3\x4a\x75\xb7\x8b\x61\xd6\x93\xe1\xe6\x62\x25\x90\xe3\x03\x50\x2d\x26\xad\x4d\x6c\x92\x7a\x73\x26\xd9\x00\xe4\x15\xee\x9c\x1a\x35\x47\x5c\xb6\x47\x53\xd4\xb1\x48\xe5\xe5\xa2\xcc\x4a\x2e\x79\xfb\xfe\xb1\x65\x49\x86\x90\xfe\x17\x28\x8b\xb2\x52\x6a\x73\x86\x37\xaa\x16\xe4\x8c\xf3\x9b\xe4\x76\x72\x2f\x75\xa1\xfb\xa1\xb7\x6f\x02\xe7\x6b\x61\x7f\x1e\xa8\x4a\xd7\x3a\xf8\x0a\x03\xae\x7f\xca\x16\xf7\xec\x25\xa0\x32\xde\xf4\xaf\x97\x84\x03\x1d\x5f\x52\xc9\xa3\xfb\xbd\xd1\xef\x1d\xdf\x5b\x52\xe8\x81\x1b\x72\xb4\x9e\xbc\xe4\x44\x70\x47\xf6\x06\x59\x5b\xc1\x62\x8f\x22\x29\x49\x90\xeb\x08\x58\x63\x55\xac\xae\x32\x2a\xac\x76\x06\xda\x7c\xd5\xdb\x15\x3b\x13\x00\xde\xc7\x23\x93\xdb\x67\x4e\xd0\x86\x08\x6d\xbd\x99\xab\x65\x8c\xec\x84\x41\x9b\x64\xd6\x40\x65\xa7\x41\xa0\xa3\x97\x77\xb8\x50\x23\x57\xad\x95\xe8\xbf\x5c\x8d\x00\x83\x19\x14\xd4\xb9\x14\x64\x41\xef\x46\x28\x7d\xb8\x61\x9e\xe6\x2e\xd1\x0d\x7c\x64\xc0\x98\x29\xe8\x7a\xf3\xcf\x14\x8f\x93\x47\x11\xe6\x81\xe3\x07\x67\xf2\xb4\x51\x46\x36\xca\x02\xde\xc2\xc4\xb6\xbd\x58\x6c\x07\xc1\xd2\xa6\x32\x36\xdc\x69\xec\xf0\x4d\xf5\x63\x40\x0f\xdb\xd8\x16\x9b\x58\xec\x56\x3b\x29\xb2\x91\xd5\x7c\x68\x31\x40\xa3\x05\xe7\x23\x57\xb1\x03\xe6\x38\x5c\xcd\xd7\x4c\x87\xd2\xb4\x18\x04\xcb\x05\x34\x9c\x63\x31\x42\xf3\x5a\x41\x04\xa5\x36\x2a\x2d\x0c\xfd\x7b\x73\x8e\x24\x20\x73\x52\x15\xab\xe1\x8d\x12\x72\xb8\x50\x99\xb5\x06\x51\xa6\xab\x65\x8c\x60\x0a\x0d\xb6\xca\xe2\x53\xf6\xc6\xaf\x3d\x74\x3a\x6c\xe5\xdb\xaf\xbc\x95\x8f\xdd\x86\x0a\x55\xe6\x15\x4f\x9d\x97\x59\x34\xb5\x1d\x6b\x96\x14\x48\xb7\x26\xab\x01\xce\x29\x5c\x4c\xab\x8d\xb0\x18\x3a\x2a\x37\x8f\x37\x51\x8e\xdd\x1f\xde\x1d\xc7\x9c\x91\x71\xb1\xc2\x02\x17\x0a\x52\xea\x4c\xfe\x84\x18\x3a\xde\x6b\xd1\x35\x36\x93\x12\x3b\xcf\xd2\xa3\xd2\x8e\xd9\x1c\xc3\x9b\xe3\x48\x3d\x96\x1c\xc9\xa7\x44\xcd\x4c\x0e\xa8\x5d\x8c\x9e\x2d\xb4\x57\x77\x24\x9d\xb9\xec\x53\xa1\xd9\x3c\xc0\x25\xc5\x6b\xb8\x5d\x1c\x23\x49\x36\x18\xcc\x55\xc8\x00\x77\xb2\x56\xf1\xa1\xe2\x71\xfa\x69\xd8\xda\x2d\xdd\xa3\x15\x72\x13\x4e\x33\x00\xa4\xd9\x72\x27\x0f\x38\x6d\xdb\xdc\xfd\x76\xfe\x6e\x3b\x7d\x2e\x6e\x9e\xd4\xe9\x38\xee\x69\xa5\xd7\x4a\x0e\xc6\x5a\xd8\xc1\x74\x63\xe1\x3a\x7a\x3d\x7c\x02\x3d\x08\xf2\xeb\xa7\x5f\x7f\xe5\x9d\x50\x3f\xc9\xa0\x7d\xd6\xf1\xb2\x6d\x9d\x73\xc8\x6c\x9e\xf6\xa8\x39\x7e\xce\x9c\x88\x67\x30\x4f\xb6\xc0\x6a\x15\xc5\xc1\x9c\xb4\xfa\x25\xc2\x4f\xab\x24\x0d\x5b\x07\xa9\x1f\x0c\x71\x4c\xb1\x75\x58\x65\x9b\xc0\x83\xff\x2b\xd9\x9a\xe3\x06\x1b\xb7\xa6\xc5\x40\x2b\x4b\x90\x21\x07\xd7\x90\x1f\x6c\x8d\xef\x5e\x83\xe1\x9f\x90\x40\x19\x61\x9c\x68\x30\x94\x13\x75\xf7\x5a\xd1\xfc\x2f\xf7\xec\xe7\x81\x75\xbf\x6c\x62\x26\x3a\x72\xfa\x9f\xb5\xd5\xf2\x43\xa4\x1b\x7b\x09\x5d\xb3\x7e\xd6\x2e\xdf\x98\xeb\xde\x59\x65\x63\x2c\x93\xbb\x23\x3f\x74\xde\x2d\xbb\xb6\x8c\x1a\x5c\xcd\xcc\xf5\x32\xd2\xd6\x63\xff\x75\x02\xac\x09\x2d\x71\x45\x3c\x43\xae\x38\x17\x9f\x2f\x91\x8d\xcb\x87\xc2\xc7\x03\xc4\xa5\x72\x2f\xbc\x1f\x41\x58\xbb\x8b\xed\xf7\xb0\x3b\x9a\x20\xf4\x5d\x32\x2d\x08\x75\x6e\x5f\x6c\xd8\xa5\x71\xbf\x3a\x9f\xa1\x0d\x96\x52\xad\x04\xaf\x97\xab\xce\xf5\xd7\xef\x7b\x3b\x8f\xd5\xf1\x87\x38\x86\x5d\xc6\x81\x9f\xb6\xa7\x89\xeb\x07\x73\x0d\xe4\x40\xb9\x47\x33\xdc\x8c\x34\x33\x62\x3f\x13\x6e\x67\x5a\xa6\x37\x15\x83\x6e\x80\x3d\x02\xa4\x5c\x01\x86\xc7\x99\xae\x00\xe4\xb9\x03\xfc\x20\xec\xc3\xdc\x01\xe8\xa0\xd8\x80\x03\x36\x07\x7b\x03\xcf\xd9\x20\x64\xc0\x6c\x73\xf0\xed\xa0\x6d\xe0\xaf\xb9\xb3\xde\xff\xcd\x59\xe3\x59\x40\x13\x16\x7b\xc8\x22\xcf\x82\x99\x61\xb5\xe7\xc5\x10\xb7\x4f\xae\xe5\x7e\x08\x3d\xdf\xc7\x7a\x47\x87\x9d\x82\x1d\x62\x99\xa3\x4c\xeb\x1c\x0d\x5a\xe8\x5e\x58\x67\xa6\x29\x87\xd2\xe6\x5c\x38\x4e\x34\x0b\xea\x81\xd9\x2b\xfe\x93\x63\x7d\x25\x82\x37\xdb\xe7\x80\x23\xe0\xbc\xc3\xc8\x5c\x1b\xcb\xb4\x1c\x08\xc1\x47\x87\x5c\x02\x95\x69\x6c\xa1\x2c\x83\x0b\xc1\x80\x4d\x12\xd8\x61\x2a\xcd\xa6\xa2\x45\x74\x5a\x37\x51\xed\x03\x2a\xb5\x83\x00\x3f\x68\xb5\xf8\xf3\xa0\xd5\x1e\xb4\x5a\x1f\xa7\x07\xad\xf6\xa0\xd5\xfe\x67\x68\xb5\xcc\x73\xdd\x73\xbe\xfc\xf6\x90\x44\xbe\x51\xe7\xa3\x70\x3e\x9f\x8d\xd6\x49\x9f\x6f\x5b\x69\xe2\x8e\xe5\xba\xc9\x98\x07\x67\x3b\xa2\xae\x8c\x92\xc8\x95\x5a\xeb\x66\xe2\x3d\x92\x4d\x6e\x5c\x3f\xa1\x2e\x01\xd8\x14\x28\xb0\x09\x6d\x71\x10\xc7\x4d\x8e\x9c\x6d\x9a\x3a\x28\xfe\xd0\x59\x71\x29\xf4\xf7\x5c\x2c\x8e\x4f\x9e\x8b\x65\xdf\x91\x92\x72\x3a\x64\xbb\x58\xba\x8e\x94\x94\x67\xe4\x20\x17\x4b\xc8\x91\x92\x00\x9e\x72\xb1\xbc\x56\xa8\x74\xb5\x61\xb1\xc9\x1a\x75\x87\x2f\x86\x4c\x03\x5e\xa2\xfb\x79\x5a\xde\xfb\xde\x14\x2f\xac\x2e\xd8\xe2\xbe\x49\x59\x50\x15\x64\x83\x0b\x32\x23\x15\x29\x14\x1f\xaa\x4e\x39\xda\xfb\x00\x12\xad\xa5\xc9\xcd\x5e\xd0\x4a\xd9\x0b\x47\x24\x01\xc1\xd0\x34\x0f\x69\x2e\x5b\x5e\x1b\xd2\xab\x23\xe5\x6a\x4d\xae\xaf\xe9\x62\x51\x57\xe6\xd2\x02\xb7\xc6\xc3\xc4\x94\x2b\x2c\xca\x26\xc2\xbe\x66\x50\x88\xdb\x4f\x93\x85\x5a\xbb\x16\x57\xca\x96\x07\xd7\xb6\x02\x7f\xf4\xcb\xbb\x8d\xb0\x65\xdb\x32\x52\xb9\xfa\x9f\x68\x1c\x30\xaa\xa8\x04\x22\x55\x78\x4e\x2a\x24\x1d\x41\xed\x5c\x80\xf2\x16\x31\x39\x75\xb5\x22\x9d\x76\x60\xf9\x9f\x5e\xbc\x88\x99\xcc\xf9\x55\x28\x4e\x13\xe8\x18\xb4\x9b\x37\x49\xef\xa7\x0d\x82\xb3\x27\x65\xf2\x18\x61\x74\x43\x76\xe6\x34\x16\xb3\x36\x28\xd3\xc6\xfa\x55\xcd\xad\x4a\x37\x24\x2e\x49\xf5\xc7\xb6\x60\x68\xa4\x4d\xce\x8e\xe0\x86\x24\x13\x41\x3a\xe4\xb8\x21\x3b\x17\xe2\x6a\xe8\xa2\x7f\x68\x6c\xe1\x86\x14\xc3\x9e\x6b\xbd\xeb\x4b\x69\x9d\x2c\xd3\xc6\x51\x2d\x1b\xfd\x86\xcc\x82\x6c\x4c\x7a\x96\x34\x8c\x78\x24\x0d\xd1\xf5\x6c\x5c\xd1\xcd\x50\xb8\x0e\x76\x0b\xda\x95\x6b\x35\x97\x1a\x38\xf0\x66\xfe\xbd\x66\xc7\x5a\xf5\xe8\xff\xbc\xbc\xa3\x72\xc0\x5a\xd5\xbc\x7c\xc1\x89\xbc\xe0\x0a\x5a\xbf\x37\x71\x0c\x6a\xd9\xa4\xb1\x31\x45\x14\x8a\x1b\x81\x71\xa5\xc7\x67\xc3\x12\x3a\x85\x73\xd3\xd6\x59\x43\x62\x2a\xd1\x6b\xa6\x95\x8f\xa5\x41\xb3\x17\x93\x16\xbc\xb3\xc8\x19\x67\x63\x30\x6f\xd2\xb6\xb3\xcd\xf8\xf7\xe1\x1b\xb2\xea\x3e\x7c\xca\xf9\x5d\xa5\x49\xde\x41\xc3\xa0\x60\x24\xac\x79\x03\x05\xde\xa1\x8a\x56\x89\x4a\x28\xea\x6e\x62\x9f\xb0\x22\xcb\x81\xdb\x77\xd7\x44\x2c\x89\x36\xf4\x8b\x55\x6a\x54\x19\x5e\x87\x4c\x1b\x7f\xd8\x28\x1e\xda\x01\x8c\x13\xa2\x66\xdc\x90\x3d\xd2\x60\xd0\xde\x4e\xe3\x07\x0a\xe1\x5c\x0b\x94\x08\x35\xda\xeb\x9a\x2f\x07\x25\xda\x20\xc5\xf6\x75\x91\xe9\xda\xc8\xf3\x35\xde\xe8\x99\xff\x57\x2d\x9e\x61\x12\xfd\x1d\x6d\x30\x15\x72\x82\x4e\x91\xa4\x6c\x59\xc5\xe6\xbf\xff\x85\x0d\x62\xf1\x81\x6b\xb8\xda\x90\xff\x4b\x4d\x6f\x71\xe5\x02\x90\x19\x22\x55\xea\x9a\x07\x17\x40\xe8\x69\xcb\x63\xb4\x85\x3b\xab\xb4\xe8\x6d\xf6\x07\xa3\x1b\xb2\x1b\x1d\x77\x56\x48\x04\xa2\x6e\xfc\x9a\xd9\x5b\x1c\xf7\x16\x65\xa3\xa7\xc0\x3c\x1e\xc1\xbb\xd1\x64\x4f\xc1\x46\x60\x0f\xa8\xdd\x7b\x9b\x65\xbc\x24\x97\x7a\x1d\xea\xbe\x07\x4d\x32\xbf\x71\x73\x0d\x98\xbb\x4a\xc0\x59\x53\x88\xdf\x3a\xd3\xac\x58\x91\xb2\xae\xc2\x93\xc5\x6e\xe6\x42\xa6\x58\xc7\xa0\x72\xb7\x2f\xb7\x25\x42\xa1\x3a\xf8\x85\x8f\x4b\x00\xbc\xb6\xdf\xa0\xaa\xb5\xbd\xef\xf9\x60\xe3\x4b\x0f\x36\x6e\xab\x86\x89\xe3\x9b\xaa\x4d\x3d\xfc\x9e\xea\x2e\xcd\x6d\xff\x79\x17\x44\x78\x57\x01\xa4\x0d\x4d\x7b\xc5\xfa\x9c\x28\x3c\xe9\x5e\x3e\xc3\xa3\xab\xb9\xa2\xac\xbe\xb3\x23\x1d\x0b\x5e\x91\xde\x97\x5b\x2e\x6e\x88\x38\x41\x8f\x1e\xd9\x9e\x9b\x7e\x9b\xf8\xce\x08\x64\xd9\x37\xd9\x4d\xa5\x39\x10\xf8\x9d\x6b\xb3\xee\x9d\xf2\x9f\x67\x1a\xef\x71\xe9\x10\xf3\x38\xe9\xd7\xf7\x0c\xe7\x83\x4d\x64\x74\x70\xc4\x77\xbe\xa9\x9c\x56\x78\x90\x36\x71\x0f\x73\x79\x00\xaa\x11\x98\xc3\x26\x33\x3a\xc0\x91\x3e\x60\x3a\xef\x91\x28\xcf\x7c\x1e\x3e\x2d\x68\xbc\x16\x43\xee\xc6\x6c\x0f\x61\x8e\x29\xbd\x37\x9c\x5c\x73\x7a\x70\x40\x26\x15\xe7\x10\x93\x7a\x10\xa4\xb5\x0d\x0f\x31\xab\xd1\x21\x04\x1b\x36\xaf\xd1\x3d\x4d\xec\x61\x6a\xf5\xcc\xe0\x61\x33\x7b\x10\x64\xc7\x0c\x3f\xc0\xd4\xce\xc2\x35\x68\xf5\x27\xcd\xed\x41\xb0\xfb\xe6\x78\xae\xc9\x8d\x72\x0f\xfb\x0e\x72\xaf\xe7\x9e\xb4\xe6\x04\xf8\xa5\x76\xfc\x19\xa6\x38\xca\x75\xbb\x0f\xe3\x3c\x68\x96\xa3\x03\x4d\x73\x94\x4b\xd5\x7b\x9b\xe8\x89\x8e\x8d\xf1\x7e\xb0\x99\x9e\x1a\x8a\x6f\xc0\x1f\x68\xaa\xa7\xc0\xf6\xd6\x5e\xae\xb9\x9e\x00\x19\x35\xe4\x73\xcc\x80\xcc\xcd\x5d\xfc\x06\x49\x5e\xd9\xf2\x52\x59\x75\x9e\xbc\xe6\x5d\xcb\xc7\x7f\xd1\x9a\xa9\xb1\x6d\x4e\xea\x6a\x2c\xd9\x5c\x9a\xea\x79\x41\x35\x2b\xe1\x0a\xd5\x2a\xa1\x27\xcc\x1d\x8a\x59\x57\x28\x76\x0e\x2b\xa6\x9a\x4d\x6a\x8c\x59\x39\x6e\x87\x31\x7d\xdf\x1a\xb9\x57\x50\x4c\xbc\x34\xe7\x1a\x57\x0d\x5c\x18\x8d\x52\x58\xef\x6c\x20\x51\xda\xbc\x49\x98\x48\x98\xed\x10\x60\x68\xac\x11\x98\xc7\x2e\x8f\x4d\xd0\x4d\x45\xd0\x7f\x34\xcb\xe6\xd8\x94\x97\xfc\xcf\xe4\x65\x67\xa8\x5d\x58\x5a\x50\x37\xd3\xf9\x3f\xdc\xbf\xfe\xf3\x7d\x5c\x96\x06\x83\x6c\xcb\xf4\xa5\x39\xd9\xe8\x5e\x57\x6f\x86\x6b\x4b\x65\x2a\x6e\xd3\xd8\x92\x72\xfe\x25\x4c\x0f\x93\x2c\x6d\x93\xe7\xaa\xaa\x03\x48\x4e\xd0\x8f\x2b\xc2\x3a\xd9\x6f\x26\x69\x2f\xc3\x98\x80\xb5\x78\xc1\x67\x66\x43\x4a\x8e\x21\xc9\x89\x88\xf6\x17\x90\x01\x17\xfc\xe5\x1d\x29\xea\xd8\x6d\xae\xe6\xc9\x12\xb2\x87\x38\x7e\x7f\xd7\x5a\xae\x66\xbc\x1d\xcb\xb5\x9d\xd2\xb9\xae\xdf\x24\x2d\x6f\xc8\xae\x71\x36\x3a\x9b\x79\xf0\x00\xd4\x73\x3d\x3a\x1b\xc3\x18\x2d\xbf\x71\x97\xea\xad\xe7\xae\x14\x83\xcd\x77\xb7\x4c\x4f\x3b\x09\xab\xaa\x61\x8f\xde\x7c\x54\x95\x41\xef\x1f\xee\xbb\x7e\xf3\x81\x7c\xd7\x8d\x0e\x09\x9b\xd8\x9e\xdd\xfc\xf2\x2f\x35\xae\x26\xe8\x85\xf5\x6d\x0c\xb0\xd4\x35\xb7\x00\xf6\x5c\x5d\xcd\xd5\xaf\x0b\x6e\xe3\x7a\xd2\xdc\x94\xdc\x5e\x26\x06\x12\xae\xc0\xac\x11\x63\xed\x4c\x81\x52\x5b\x18\x6d\xb0\x50\xb4\xa8\x2b\x9c\xde\x3a\xe9\xb5\xbf\xe4\xa1\xdb\xc2\xbc\x71\xe4\xf0\xae\x9d\xee\x33\x52\x70\x56\xe6\xef\x91\xaf\xfa\x5f\xfa\xdc\x84\xab\x21\x88\xa0\xbc\x1c\xca\x1a\x54\x74\x4d\xfa\x0b\xef\xb1\x39\x68\x6e\x0a\x87\x2c\x9c\x6c\x6b\x04\xc6\xc0\xea\x51\x2b\x22\xb6\x14\x22\x07\xfc\xc8\x03\xba\x64\x5c\x90\xf2\xa8\xd5\x22\xad\x14\x48\x8b\x4b\xff\xda\x0b\xaa\xdc\xa5\x9e\xe0\x9f\xb1\xb8\xda\x65\x68\xd9\xda\x80\x4d\x42\x5d\x70\x01\x57\x74\x3c\x2e\xb9\xb9\x24\xf4\x96\x16\xea\x68\x82\xfe\x44\x04\x37\x49\xb4\x64\x89\xe1\x96\x3d\xbb\x6c\x07\x53\x10\x21\x2c\xcc\xdc\x71\x89\x25\xfa\x02\x3d\x06\x90\x88\xae\xd7\xa4\xa4\x58\x91\x6a\x77\xe4\xce\x64\xe5\x4e\x2a\xb2\x4e\x0d\xdb\xab\xbe\xf3\x75\x2a\x0f\x29\x2f\x7e\x0a\x86\x90\x3d\xbb\x7e\x80\x48\xa7\x8e\x98\x76\x25\xc0\x3b\x53\xc5\xaa\xf7\x41\x19\x1d\xdd\x07\xfa\x91\x75\x6d\x98\x62\x8e\x88\x6e\x26\xd9\x7f\xe9\x79\x8a\x91\x20\x4b\xbd\x6e\xdd\xed\xf7\xef\xb7\x32\xdf\xeb\x14\x22\xf1\xb1\xde\x96\xd2\x02\x0f\x5d\x46\xe5\x9a\x39\x0e\xb8\xdb\x01\xda\x62\x50\x59\xc1\x82\x0e\xcc\x24\xe4\x5f\x56\x1c\x05\x62\xcc\xd2\x25\x9f\x52\x53\x0d\xae\xa8\x38\x2d\xd7\x14\x36\x2c\x43\xbe\xf5\x6e\xeb\x26\xc3\x0a\xfb\x57\x6e\xad\x30\x2b\x2b\x6d\xf3\x31\xb2\x35\xe0\x03\x63\x2c\x2a\x4c\xd7\xb2\x77\xff\x82\xb9\x99\x82\x6f\x11\xd7\xb6\x3a\xdb\xb9\x56\xb8\x10\xdc\xd6\x31\x37\xc1\x13\xc1\x4b\x05\x8d\xf7\xd7\xc6\x0a\x37\xf4\x72\x71\x9f\x76\xbf\x30\xe9\x5e\xda\xd9\x1d\x4f\xc8\x41\xdf\x5e\xe2\x69\x5d\xf4\x08\xcf\x79\x0d\x56\x0f\x15\x4d\x37\x87\xfb\xed\xdd\x58\xde\x6c\x19\x11\x5a\x6d\x67\x79\xef\xf7\xbe\xea\x55\xc3\x35\x57\x5c\xe3\x35\xb1\xa4\x8b\x1d\xd3\xf4\x09\xea\x2d\x62\x60\x9f\xcd\x4d\xfb\xa1\x13\x39\x69\x4a\x51\xc5\x84\xd1\x35\x43\x63\x34\x53\x82\x16\xea\x04\xbd\xe0\xf6\xa6\x26\xcd\x4d\x7b\x45\x0a\x65\xa8\xa4\x8b\x05\x11\xda\x1e\xf0\xba\x8e\x9a\x2b\x30\x84\xb6\x56\xbc\x1e\xdb\xc4\x74\xf3\x9a\x29\x73\x09\x08\x80\xb0\x55\x31\x4e\x4c\x79\x0c\xdb\x5d\x4c\x42\x70\x0b\xb6\x45\x65\x83\xd5\xaa\x2d\xd9\xa9\x7b\x42\x1e\x1d\xf7\x48\x95\xd8\x18\xb6\xd3\xaf\x17\x5f\x63\xc8\x72\x8f\x1b\x9e\x82\x03\x8d\xb4\x35\x9d\x24\xc4\x5e\x54\x74\x3a\xcb\x2c\xff\x5a\xba\xee\x17\xbd\x49\x68\xf9\x0d\xf7\x21\xb9\x86\xb1\xbd\x9e\xfe\x9e\x86\xe6\x9f\x77\x2d\xc2\xfe\xd1\xdb\x8f\x9d\xee\xd3\xe7\x53\x26\x18\x92\x2f\x1c\x5a\x3f\x3d\xf9\x19\x91\xbb\x0d\x97\xa9\x40\xab\x08\x48\x73\x17\x82\x0d\xcf\x06\x78\x8f\x64\x6b\xd7\x1a\x19\x08\x53\x54\x77\xe2\x5c\x04\x36\x9e\xb1\xe0\xeb\x69\x73\x11\xd0\x14\x6f\xe8\x74\x5e\xf1\xf9\x74\x8d\xa5\x22\x62\x0a\xc0\xa6\xb7\x4f\xa6\x9a\x55\x72\xb2\x8c\xad\x09\x1b\xcd\x78\x82\x7e\xbf\x29\x31\xdc\x33\xd6\xa5\x85\xa9\x0d\xe6\x7e\x93\xae\x60\x8c\xe2\xed\x6f\x2f\xa8\x4c\x6f\x49\x6d\xcd\x11\xb8\x4e\xb2\x5c\x53\xa5\xed\x22\x9f\xa7\xb8\x3f\x64\x4d\xdd\x59\x3d\x2f\xf9\x1a\xd3\x58\x25\x3a\xc5\x91\x54\x7c\x83\x9a\x1b\xc8\xcd\x75\x51\x16\xae\x13\x31\xb5\x1e\x95\xc1\x17\x67\xcd\x1d\xe8\xfb\x42\x4b\x26\xc5\xcd\xdd\xa6\x0d\xca\x89\x28\xba\x68\xbd\xbc\x1e\x31\xed\xa5\xe3\x72\x9f\xa0\xda\xce\xcc\xa7\xa8\xf3\xed\x87\x55\x94\xe2\xe8\x7a\x14\x00\x76\xaf\x3b\xe1\xfa\x98\x0e\x35\x1b\xc0\x3d\x29\x39\x52\x16\x93\xe6\x6b\x6e\x10\x65\xa7\x71\x3a\x80\xf2\xad\x99\x2f\x2e\x54\x32\x80\xf3\xfd\x83\x27\x5d\xa8\x64\xd4\xb6\x78\x08\x9e\x84\xe7\x21\x78\xd2\x7b\x1e\x82\x27\x1f\x82\x27\x1f\x82\x27\x1f\x82\x27\x1f\x82\x27\x1f\x82\x27\xff\x35\x83\x27\x55\x25\x67\xa4\xa8\x05\x55\xbb\x4b\xc1\x17\xb4\x0a\xf8\x13\x7b\x07\xb0\x7b\x5f\x78\x99\x6e\x92\x28\x6d\x2c\xc9\x26\xfd\x27\x5d\x52\x06\x8c\x2c\x63\x8b\xb5\xa6\xd8\x40\x3a\x8a\xbf\xcd\x0a\x80\xc4\x1b\xaa\xed\x3f\x0d\xc6\x1c\xb1\x76\x2f\x58\x2d\xaa\x5a\x6f\xa9\x90\x20\x92\xd7\xa2\x20\xbd\x2a\x3b\xdb\x15\x09\x59\xff\xa6\x2c\xb2\x46\xe4\x4d\x55\x1e\x9b\x8d\xb7\x75\xff\x1a\x66\x7f\xcf\x4b\x22\x98\xb6\x09\x80\x20\xb0\x4f\x33\x98\x1b\x37\x7b\xb8\xc0\xaf\x6b\xde\xbd\x68\x92\x4a\x24\x6b\xe0\x15\x38\x24\x56\x98\x2d\x09\x9a\x13\xb5\x25\x84\x69\x55\x4a\x30\x5c\xc9\xfa\x6d\x70\x1a\x36\xee\xb2\x25\xbd\x25\x4c\x0b\x55\xeb\xcd\x32\xb0\x15\x6f\xb2\xff\xfc\x41\x34\x98\x98\x43\xf0\xa0\xe9\xcc\x9b\xce\xd1\x1f\x26\x7f\x9c\xfc\x49\x0f\x1c\xd5\x9b\xa5\xc0\x25\xec\xaf\x3a\x2f\x3f\x7f\x02\x39\xcc\x76\x9f\x88\x18\xd9\x66\x0f\xdf\x6c\xd5\xbc\x40\xd3\xb0\xc1\x7e\xac\x59\x58\x57\x91\xbc\x26\x93\xdc\xcc\xab\x8a\xd7\x6a\xaf\x90\x12\x71\xb9\xcc\x30\x43\x6f\xcd\x1d\xf3\xfe\x5c\xf4\xba\x09\xcd\x5a\x2a\xd1\x93\xc9\x93\x76\x95\xbb\xe4\x76\x1f\x1a\xb4\x79\x3a\x41\xe8\x94\xc1\x36\xc2\x31\x80\x9b\xd4\xcd\xa0\x63\x57\x82\x8f\xa6\x5f\xcb\xd9\x4e\x2d\xc8\xa5\xf3\xa6\x97\x57\xdd\xc8\xdc\xba\x49\x80\xd8\x21\x74\x95\x93\x2f\x12\xa0\x3c\x99\x3c\x3b\x78\x27\x62\x6a\x42\xe7\x38\x7f\x6c\xf5\x68\x90\xf7\xb5\x24\x62\xec\x4a\xf6\xe9\xae\xa5\x15\x1c\x6e\x24\x13\xf4\x3c\x26\xf2\xc9\x9d\xd2\x02\xb1\xd2\x93\x48\xc0\x8e\xcc\x2c\xc2\xa6\x3e\xb5\x23\x06\x96\x88\x32\x93\xb5\xdd\x99\x48\xd1\xc8\x64\x73\xf3\x77\x81\x15\x96\x4a\xf0\xcd\x8a\x16\x13\xcd\x25\xbb\x72\xfa\xe0\x2b\xce\x6f\x24\xaa\xe8\x8d\x39\xf9\x4a\x38\x38\x11\x2a\xe8\x66\x45\x84\x3c\x81\x5f\xc6\xe8\xe5\xd9\x8b\xef\x5e\x8e\x5f\x9e\xbd\x98\x9d\x8e\xcf\xbe\x3b\x3d\xfb\xee\xf4\xe9\x17\xe3\xcb\x37\xe7\x7f\x7c\xf2\xec\x8b\xaf\x3a\x6d\xde\x86\x5a\xc4\x7a\xea\x7f\x78\xfa\x72\xf6\xe4\xe9\x37\xe3\x57\x67\xdf\x8f\x67\xdf\x9d\x3e\xfd\xea\xeb\x40\xf7\x7b\x6d\xe2\xc0\xd7\x94\x5d\x9d\xcf\x7e\x30\xf3\xf8\x44\xb3\xed\xf6\xc9\xe4\x49\xd8\xd7\x90\x91\x97\x3d\xbc\x4d\x72\x54\x8b\x9a\x60\xbd\x09\x66\x9a\xfb\x9e\x00\x57\x5f\x1d\x6a\x22\xc3\x6b\x84\xab\x25\x17\x54\xad\xa2\x5e\x6e\xe4\x82\x89\xb5\x62\x65\x64\xc9\x15\x05\xe7\x92\xb5\x46\x35\x28\x3d\x63\x57\x98\x95\x72\x85\x6f\xc8\x04\x35\x67\xec\x29\x90\x5a\xea\x09\xb2\xe6\xb7\x04\x2a\xa0\xda\xec\x6f\x2a\x8c\xe9\xc0\x4a\x89\xec\xc1\xa4\xf5\x1e\xf5\xaa\x04\xa7\x90\x35\xa2\xfb\xc5\xcb\xd9\xf8\xec\xf9\xd9\x33\xcd\x47\x84\x1e\xef\xf0\xba\x3a\x3a\x09\x4e\x3f\xbf\x65\x3c\xdb\x76\xd0\x4e\xce\x3b\xf3\x1e\x8e\x16\xec\x4c\xab\x4c\x5e\x77\x3e\x8a\x71\x1c\x84\x79\xb2\x36\xab\x13\xca\xd6\x8d\x6f\x45\xa9\xe2\x05\xaf\x9a\xfb\x8f\x83\x53\x20\x01\xb3\x37\x39\xbe\xed\x1d\x55\x69\x56\x79\xfa\xc0\x6a\x8c\x27\x93\xd4\x95\x2b\x5a\x9f\x3c\x99\x3c\xeb\x32\x35\xbc\x1c\x41\xa5\xbd\xb9\x7a\x79\x82\x8a\x5a\x08\xc2\x54\x32\xbe\x0f\xca\xa8\xd0\xe5\x8a\x48\xd5\x85\xe7\xc2\x8f\x34\x01\xec\x4f\x57\xe7\xb3\x27\x4f\xe3\xd3\x25\x5d\xa5\x79\xec\x43\x89\x17\xcf\xec\x34\x8b\x97\x13\xe9\x34\x8b\x13\xae\xd3\x2c\x9e\xec\xff\x7e\x77\x75\x22\x38\x21\x75\xf6\x52\x8e\x22\xf4\xdb\x1b\x75\x18\xd2\x80\x8d\x39\x9b\x50\x2c\xee\xac\x60\x4b\x6f\xe8\x64\xcd\x7f\xa1\x55\x85\x27\x5c\x2c\xa7\xce\x0e\x9f\xce\xc0\xe2\x7d\x37\xa3\x25\x79\x77\x75\x3e\xfb\xc4\xb7\xed\xde\x15\x7c\xbd\xc1\x8a\xce\xe1\x06\xb4\x77\x93\xa7\xdf\x08\x52\xf0\xf5\x9a\xb0\x92\x94\x93\xa7\xbf\x8e\xf7\xab\xe7\x63\x4f\xfd\x25\x05\xce\xd5\xf9\xec\xdd\xe9\xcb\xd9\xbb\x27\x4f\xbf\x79\xf7\xea\xec\xfb\x77\x43\x9a\xc6\xff\xe6\xe9\x57\x5f\xbb\x6f\x9e\x7d\xf3\xa5\x07\xd0\xa9\xc5\x77\x4e\x2d\x66\x81\x4d\xea\x3e\x84\x86\x34\xe8\x41\xc0\x9f\x7e\xf5\xb5\xfb\xb4\x45\xbd\x03\xbc\xdb\x22\x1f\xf8\x07\x37\x1a\x86\x4c\x86\x7b\xe0\x1c\x94\x4f\x11\x01\x92\x7d\xa1\x7f\x74\x11\xae\xc1\x18\xce\x59\x7e\xa6\x65\xce\xc2\xbb\xdf\x12\x33\x66\x79\x77\x71\xfd\x8f\x5b\x4a\x41\xe6\x3e\x6b\x95\xcf\x99\x53\x3e\x7a\xaf\x6e\x0c\x9a\x68\x2d\xb5\xf7\x67\x3e\xaf\x22\x1e\xb6\x2e\xe7\xb9\x71\xdb\x7c\x1c\xb6\xbf\xa9\xca\x77\x73\x5c\xdc\x6c\xb1\x28\xff\x87\x33\xff\x41\x8e\x46\x81\x7f\x04\x39\xea\x7f\x96\xc6\xb7\xc3\x8d\x7c\x3a\xbf\xed\x7f\x94\x04\x7a\x38\xc4\x30\x38\x3d\xfc\x7c\x76\xbd\xed\x7f\x94\x04\x7a\x38\xc4\x7d\xf6\xf4\xc9\x11\x81\xb9\x0f\xaa\x25\x60\x6c\x12\x1c\xc8\xfc\x10\x6f\x12\xdd\x35\xa3\x89\x40\xdd\x1f\x74\x67\xe3\x18\x16\xed\x5f\x7c\x2c\xd1\x1d\xbf\x2d\x31\x7c\x4b\xa2\xbd\xd8\x30\xe0\x6d\xb5\xee\x30\x2e\xd0\x19\x38\x6a\x62\x67\x40\x67\x8d\x1b\xe7\x96\xda\x7b\x51\x10\x36\x92\xda\xdf\x40\x52\x56\xd2\x5b\x5a\xd6\xb8\xea\xa8\x8b\xf8\x99\x2f\x28\x91\xf6\x82\xef\xc9\x3e\x8e\xbe\x43\x18\x0b\x72\x00\x5c\xf9\xbe\xda\xe9\x6d\x6b\xd9\xbf\xcb\x72\x86\xd9\x3c\xa7\xa6\x7f\x8d\xaf\xde\xb8\x30\x65\x50\x39\x36\x81\xf6\x64\x67\xdc\xb9\xc6\x17\x6d\x8a\x23\xd0\x68\x79\x3f\x2c\x21\xba\xd3\x39\x6a\xe0\xfe\x7f\x72\x4b\x2a\xbe\xb1\xb1\x31\xe4\x8e\x4a\x88\xa9\xf0\x9b\x2c\x78\xcd\x62\x21\x32\xc6\x27\x4c\x99\xa9\xa4\x36\x41\xe8\x05\xd9\x10\x56\x42\xee\x10\x43\x1b\x41\x0a\x2a\x49\xb5\xb3\x81\xe3\x3e\xd4\xe6\x1a\xc7\x38\x64\xac\x87\x5f\x10\x69\x1d\xf6\x10\x2b\xa1\x47\x0b\x01\x43\x65\x5d\x04\x4a\xf1\x3b\xaf\xec\xc0\x34\xa1\xb2\xdd\x9e\xfb\x4e\x9f\xd6\x5d\xeb\x45\xbe\xef\x88\x42\x5b\x12\x0d\x46\xc7\x25\xdf\xd8\xc0\x25\xcd\x63\xce\x90\xe4\x0b\xb5\xd5\x63\xac\xe8\x5c\x60\x41\x49\xac\xa8\x5a\x2a\x22\xe8\x4d\x15\x0b\x02\xf2\xa7\x74\xa4\x49\x82\x08\x63\xbb\x00\x13\xc2\xe2\xd0\xb8\xa1\xc8\x0b\xa9\xb0\xaa\x7b\x1e\xac\xee\xd5\xfc\xd0\xc0\xc5\x56\xac\xb9\x34\x77\xe7\x02\x53\xf8\x1c\x0e\x8b\x4a\xd7\xc8\x7a\x88\xf6\xaa\xf7\x76\xa5\x4c\xdc\xa7\xd9\x4c\xb7\xb7\x79\x41\xe1\x7b\xed\x61\x36\x34\x11\xe1\x0d\x7a\xed\x6d\xa4\x2e\xfe\x3b\x74\xf4\x55\x14\x5c\xc0\xa2\x88\x9e\x9a\x78\x59\x8e\x1f\x32\x4e\xbc\xe0\xcc\x1c\x22\x0f\x8d\x77\xd4\xb6\xec\x46\x26\x79\xbf\xdb\x63\x15\x2a\x2c\x53\x22\x21\x57\xa7\x0d\x49\xdc\xfd\xa4\x03\x03\x86\x0e\x13\xe2\x40\xf7\x6b\x42\xc7\x34\x09\x21\xec\x0c\x7e\x73\x40\xdd\x91\xa1\x44\x8f\xe9\x84\x1c\xa3\x89\x45\x6f\x8f\x87\xa1\x63\xb9\xbf\xd4\xb8\x92\x68\xa2\xd5\xce\xc4\xb1\xf0\xc8\x8a\x5f\x2d\xa6\xf4\xff\x9a\x83\x78\x9f\x1a\x20\xd2\x82\xee\x28\x93\xae\x68\xef\x07\x73\xb3\x17\x52\x28\x42\x74\x58\x10\xac\xcc\x3d\xb3\xac\x84\x1b\x52\x41\x17\xd2\x70\x7c\x13\xec\x4a\x3e\x43\xe7\x1c\x97\xcf\x71\x85\x59\x41\xc4\xf7\x98\xe1\x25\x29\xcd\x7e\x42\xd4\xc4\x5d\xec\xda\xdc\x3b\xec\x21\x1d\x22\xae\xd0\x7c\x52\x66\x8b\xf3\x99\xb9\xbc\xd4\x5d\x85\xba\xa9\xe7\x15\x95\x90\x09\x6a\x43\x40\x76\xed\x89\x15\x76\xe1\x7c\x01\xa0\x15\xc7\x25\x9a\x5b\x04\x27\x80\xda\xb7\xb8\x92\x80\x1b\x66\x3b\xb3\x9a\xb9\x24\x9d\xd9\x25\x88\xde\xac\x62\x45\xe5\x82\x86\x4f\xd3\x03\xa3\x7f\x4b\x70\xb9\xcb\x1a\x7b\xe4\xde\x45\x6f\xec\xa7\x5d\xbc\xf5\xb4\x5c\x1b\xe2\x4e\x3c\xea\xf4\xdb\x04\x4f\x0c\x71\xb9\xbb\xe7\xb0\xc3\x51\xae\xd7\xba\xf7\x17\x17\xb3\x43\x98\xdd\x63\x6d\x00\xea\x20\xb3\xf5\x94\xdc\x54\x58\x69\x01\xe4\x74\xa4\x46\x63\x92\x04\x19\x5a\xec\x10\x64\x0c\x27\xe8\x44\x39\x6a\x96\x2c\x19\x0a\x10\x3a\xed\x6c\x6f\x65\x7e\x71\x31\x43\xbf\x70\x06\x37\xee\x7e\xd8\xe9\xf5\xe2\x62\x76\xd8\xac\x4a\x13\x59\x23\xba\x3f\x93\xf4\xaf\x82\x68\xb5\x20\xd1\x0a\xdf\x12\x34\x27\x84\x21\x59\xc3\x95\x45\x8b\xba\xaa\x76\xa8\x30\xc9\x6d\x41\x4c\xef\x35\xe4\x7d\x23\x24\x7a\xc6\x14\x4c\x61\x3d\x73\xa0\xf5\x78\x20\x11\xcc\x8a\x38\x56\x62\x51\xb6\x3d\xdb\xf4\x9b\x10\xe2\x43\x87\x8e\x15\x96\xea\x4a\x60\x26\x01\xd0\x15\x8d\x97\x1f\x77\x3a\xb1\xc4\x8a\x8c\x13\x36\xef\xe0\xe9\x82\xad\xbe\x7c\xef\xc8\x2a\x41\xb0\x8c\x9f\x12\x0c\x7e\x1e\xb2\x92\x0e\xf8\x3c\x75\xdb\xfd\xc0\xc7\x19\x91\x49\xa1\x73\x43\xb3\x94\x07\xcc\x89\x76\xbd\xc3\xf6\xae\x50\x7a\x1f\xe7\x7e\x64\xa8\x96\x81\x34\xf8\x04\xba\x4e\x48\x5d\x36\x32\x6a\x66\x45\xd4\x00\x1e\xf1\x0f\x7b\xb8\x35\x22\x2f\x98\x0a\x11\xc4\x37\x3d\x97\x57\x5c\xaa\x0b\xa2\xb6\x5c\xdc\x64\xec\xaf\xbd\xd6\x68\xc5\xab\x52\x7a\x3b\xd9\x26\xa7\xe6\xbb\xb6\x51\x84\xe3\x29\x61\x3e\x41\x97\x26\xfc\xd7\x84\xb9\x69\x99\x66\xf7\xf4\x1e\xdc\xf0\xa6\x7d\x38\x54\xc0\x9d\xda\xe6\x9e\x1f\x37\xa7\xbc\xfe\x45\x24\x04\x4c\xa4\xa0\x99\x9f\x38\x43\x35\x57\xad\x4b\x44\x59\xc1\xd7\x56\x38\x37\x95\xbc\xed\x81\xef\xa6\xd2\x13\xef\xea\xec\x12\x41\x65\x6f\xe8\x68\xe0\x58\x76\x0f\x85\xa6\xa3\xcb\xb7\x6f\xfe\xf0\xc7\x66\xc4\xb0\x05\xed\xfe\x94\x80\x6c\x63\x5c\xe0\xb4\x1c\xb2\x72\x3a\xd6\x84\x0d\x2e\x72\x8a\x96\x9a\x38\x33\xbe\x5e\xd7\x0c\x4c\xca\x01\x94\x8d\x15\xac\xcd\x55\x8d\x39\x01\xb3\xb3\xa8\xa8\x66\xb9\x4f\x93\xed\x8a\x40\x50\xd5\x16\xc3\x9e\x24\x09\xd4\x6a\x14\x9f\x9e\xe1\x6d\x18\x42\xbf\x87\x28\x20\xa0\x44\x02\x64\xc3\x78\x57\xe1\x31\x4c\x6b\x08\x5b\x03\x22\x18\x1c\xcc\xd0\x52\x47\xf4\xcd\xa0\x29\x93\x8a\xe0\x12\x72\xc7\x00\x84\x8b\x1a\xe9\x90\xfa\x91\x74\x9f\x24\x80\x52\xd6\xbd\x99\xc3\x9c\x17\xc0\x6d\x82\xad\xd3\x01\x06\xd2\x0c\x3d\x67\x12\xd8\x4c\xb4\xfd\x51\x7b\x29\x5c\x3d\xa2\x2f\x30\x4d\x41\xa4\x0b\xb4\xe3\xb5\x89\x98\xe1\xaa\x09\xc8\xea\x9a\xaa\x80\x6d\xad\x49\x94\x8d\xa9\xee\xd9\x4c\x94\xdc\x59\xe0\xaa\xec\x9c\x4c\xa7\xdb\xed\x76\x62\xef\x02\x00\xe7\x58\xc9\xb7\x4c\x63\x34\x7d\x3a\x79\x3a\x2d\x79\x31\x35\xd7\x04\x34\x0b\x49\xdd\x0d\x95\xad\xa7\xcc\x68\x7d\x08\x90\x80\x7c\xde\xc0\x5a\xbc\xea\x58\x6a\x83\x21\xf1\x9a\x66\x26\x48\xcd\x88\x59\x57\x43\x01\x1c\x7d\x76\x3f\x04\x35\x4f\x6c\xaa\x3b\xfa\x0c\x5d\x8f\xae\xce\x2e\xaf\x47\xa9\x20\x77\xdd\x08\x70\xbb\x1e\x35\x48\xf9\x60\x7a\x77\x50\xb8\x7a\x0b\x09\x88\xf6\x36\x69\x09\x52\x4c\x8b\x8e\xd0\xf0\x7b\xbe\x30\x0b\x36\x35\x71\x02\x21\xad\x89\x1b\x00\x86\x82\x4c\x46\xf1\x4f\xc7\x1a\xf1\xc4\xdb\xb4\xe0\x78\xdf\x18\x91\xca\xdb\x32\x66\xa8\x63\xbf\x79\x5c\x1f\x77\x77\xb9\x11\xdc\x63\x4a\xd7\xdf\xc4\xce\xcc\x46\xfa\x3d\x94\xef\x2d\x2d\x89\xb8\x6c\x50\x3c\x40\x0d\xf7\xbe\xb4\xa3\x75\x35\x10\x3a\x43\x4c\x4a\xca\x76\x65\x36\x69\xfa\x56\x4c\xd4\xac\x24\xa2\x82\xfb\xf5\x29\x5b\x08\x2c\x95\xa8\x0b\xb8\x19\xdf\x75\x9f\xbc\xc7\xe4\x1e\xf5\x01\xf6\x87\x95\x12\x2c\xf7\xae\x15\xe0\xd1\x3f\xa3\x80\x1e\xde\x0e\x64\xbd\x74\x59\x83\xb7\xb2\x3d\x23\xe9\x06\x62\x37\xb1\xfc\x03\x17\xb7\x22\x2b\xde\x7c\x86\x9c\xfe\x38\xeb\xd9\x1c\x91\xfc\xd6\x01\xb8\x69\x06\x68\xe4\xf7\xe9\x3a\x84\xea\x61\x54\x47\x07\xdd\x9c\x56\x54\x58\x4a\x5a\x9c\x0f\xca\x01\xff\xe9\x70\x24\x00\x61\x6f\xd9\x74\xf8\x34\x08\x1e\xf5\x85\x0a\x66\xc0\x1f\xdb\x53\xdf\x8b\x66\x25\x49\x06\xd8\xbe\xac\x39\x33\x00\x87\x2f\xb9\xca\xbe\xf7\x09\x21\x66\x36\x0c\xef\x41\xd0\x00\x84\x8f\x44\x50\xdb\xd3\x87\x23\xe8\xc5\xf9\xf3\x0f\x4a\xcc\xd4\x2e\xbe\x7d\xc2\x27\xb2\x50\x24\x48\xff\x9b\x2f\xf6\x57\x77\xc6\xd8\xa0\x62\xb8\x54\x98\x41\x90\xad\x23\xdb\x5e\xf2\x8f\xab\x2c\x42\x73\xee\x59\x6b\x0b\xe3\x59\x33\xea\x7a\x64\xe7\xe0\xf5\xe8\x04\x9d\xba\x09\x09\x4a\x10\x3d\x3f\x00\x57\x53\xe5\xf0\x86\x48\x38\x06\xd0\x2a\xa5\x24\x05\x35\x81\xbc\xda\x16\xa7\xb0\x85\x44\xb6\x02\x22\x66\x52\x6f\x00\x32\x00\x57\x78\x47\x04\x7a\x7c\x75\x76\x39\x9d\xcd\xce\x8f\x90\xd5\xf0\x20\xdd\x6c\x82\x88\x6d\xa2\x37\x04\x53\xfd\x7f\xb3\x60\x39\x9b\xfe\xa3\xc5\x22\xea\x79\x0f\x81\xc4\xed\x99\x82\x95\x8e\x36\xe4\x08\x35\xa7\xcb\x25\x2f\xe4\x04\x6f\xe5\x04\xaf\xf1\x2f\x9c\x41\x29\x8a\x53\xf8\xe7\xcb\xb3\xd9\x14\xb2\xa5\xd5\xd4\x9d\xdf\x8a\x65\x4d\x4b\x32\xd5\xcc\x1f\x3b\xe6\x8f\x4d\x55\x0a\xb8\x6f\xab\xa8\xe6\x19\xd8\x5a\x5e\x5d\x9c\x3f\x37\x7c\x72\x2e\x89\x0e\x9f\x3c\x2e\x64\x80\x0c\xf2\x49\xd3\x03\xb5\x0c\xea\x93\x3f\x97\xb0\xff\x7c\xb2\xb2\x6a\x9e\xd6\x50\x68\xd0\x6a\x76\xcf\xd8\xad\x8a\x8c\x96\x17\xe7\xcf\x33\xc5\x4f\x46\x19\xe4\xbc\x3b\x06\xc7\x00\x30\xd9\x24\x53\xe0\x2d\x8b\x48\xd5\x24\xf7\x74\xe5\xdc\xb2\xd8\x7c\x0c\x43\xe8\xd5\xd9\xe5\x3f\xc0\x10\xd2\xc8\xff\xab\x19\x42\x94\x30\x75\x0a\xe7\x0c\x87\xaa\x1c\xff\xdb\x5e\xf5\x20\xeb\x67\xc2\xf0\x2e\x63\xf9\x42\x9e\xb9\xc9\xab\xb3\x55\x83\x20\x2c\x5f\x2f\xdc\x00\x57\xee\xa3\x77\xb4\x20\x7b\x55\xf1\x39\xae\xb4\x2c\x9b\x99\xb0\x22\xf0\x8b\xb0\xa6\xaf\x1c\xcd\xd0\xf1\xa1\x80\xcf\xce\x40\xed\x0e\xd9\x94\x1c\xe5\xdb\x9c\xb1\x9b\x0f\xa5\x29\xfa\x83\xd9\x0e\x09\xb2\xd4\xd3\x59\x03\xb7\x49\xd4\x3f\x5c\x9e\xe5\xfb\xfe\xdc\x03\xc8\x35\x1b\x53\xe4\x59\x3a\x3d\x11\x58\x54\xbc\x2e\x27\x4b\xce\x97\x15\x01\xf9\xd7\xd6\x43\x1e\x13\xb6\xa4\x8c\x98\x9a\xc8\x2b\xbe\x1d\x2b\x3e\x75\xd4\x1a\x7b\x62\x90\xb2\xe5\x27\x4b\xa0\xc3\xbb\x6c\x9e\x5b\xed\x72\xce\x8b\x14\x4f\x0e\x36\x60\x60\xd8\x00\x74\x8f\x25\x26\x00\x01\xac\x37\x47\x74\x43\xe4\x2c\x5b\xc3\xd6\x15\xb3\xdc\x79\x8c\x59\xa9\xf9\x72\x84\xb0\x31\xba\xf6\x24\x48\x0e\x09\x8c\x0b\xd8\xe3\x6b\x8f\x6b\x2d\xcf\x2e\x78\x16\xd3\xdb\x0b\x32\x69\xc7\x97\x84\xe6\x64\x85\x6f\x29\xcf\xe0\x7e\x97\xad\x86\xf5\x8e\x1b\x9f\x18\xba\x59\x26\x7f\x38\x5d\x67\xd6\x50\x46\x43\x60\xec\x87\x53\x76\x99\x3a\x6a\xd8\x20\xef\x48\x46\xdf\x16\x1f\x76\x77\x0c\x8c\x26\xec\x5e\x42\xae\x86\x95\x57\x74\x7a\x74\xfa\xe3\x6c\x74\x8c\x46\xa7\xbf\xd4\x82\x24\x6b\xd3\xeb\x67\xf4\x1c\x0b\xf2\x3d\x51\xb8\xd2\xdf\xbc\x3a\xbb\xd4\xff\x79\xb3\x21\x6c\xa6\x70\x71\x63\x8b\x23\x8c\x7e\x98\x6d\x56\x44\x90\xa4\x77\x33\x87\xcd\x63\xbd\x19\x19\x6a\xa1\xf1\x1e\x68\xd3\x20\x3d\xd0\xee\x55\xc2\xbb\x68\x5a\x34\x43\x1d\x68\x67\x29\x30\xd0\xea\xf5\xf3\xef\x33\x26\xda\xc0\x8c\x1c\x36\xbd\x06\xcc\xae\x8c\xe9\x2c\x0b\x9e\x9a\xcb\xdd\x88\x3c\xdd\xb6\x57\x70\xdd\xfc\x06\x25\x18\xec\x8d\xb8\xf9\x5e\x41\xe9\x6a\xf6\x4d\xd0\x25\x97\x92\xce\x2b\xd2\x99\xbf\x2f\xef\x8c\x94\x19\x99\xb9\xf7\xda\x0a\x9d\xc4\xe4\x1b\xf2\x40\xbf\x1e\xd2\xec\x63\xe4\x3a\xbd\xbf\xb3\x79\xe8\x9e\x5b\x20\xd9\x7d\xdc\xd4\x70\x09\x1a\x17\x91\x12\xf9\x5d\xef\x89\x6d\x1a\x77\x4f\x5f\xd8\x16\xb3\x68\x98\x16\xba\xf7\x91\x71\x0f\xf6\xc3\xb1\x31\x7a\x38\x36\xf6\x80\x3e\x1c\x1b\x3f\x1c\x1b\x3f\x1c\x1b\x3f\x1c\x1b\xdb\xe7\xbf\xed\xb1\xf1\x46\xd0\xdb\xbc\xaa\x02\xb6\x65\x5c\x1b\x5f\xda\x06\x4e\xdf\xc6\x34\xe2\x21\x5a\xd8\xc2\xbc\x47\xe1\xb1\xc3\x13\xbf\xe0\x96\x8b\x40\x88\xb0\x51\x95\xae\x1a\x64\x72\xdd\xb4\xc7\x01\x81\xc3\x6f\xd0\x87\x06\x3e\x89\xe5\x0c\x44\xe0\x3a\xb9\xf5\xbb\xc6\x8b\xd1\xe9\x00\x39\x23\x05\xfc\x7b\xcc\x5d\x2b\xe3\x39\x12\x63\x0b\x68\x38\x73\x01\xe4\xa2\xad\x1f\x47\x84\x3b\x68\x4a\x5c\x89\x70\x1a\x44\x0d\x12\x92\xec\x5d\x16\x8a\x3b\x3a\xdb\xc5\x18\xcf\x0b\x31\x8f\xb9\xdb\xea\x24\xeb\x72\x2b\x1b\xb2\x2f\xc7\x2d\xa6\xee\xb7\xe9\x27\x5a\xca\x0e\x58\xf5\xc6\x43\xda\x89\xe6\x3e\xf6\x2b\x4b\xb7\x61\xcd\x8d\x63\xd4\x06\x3e\xc7\xcb\x8b\x1a\xf3\xd3\xca\x9e\x10\x75\x1e\xe9\x6d\x84\x75\x0e\x31\xbc\x26\x13\x3f\x7a\x3a\x3e\xd7\x9a\x9e\xcd\xb2\x61\x6d\xc8\x38\x72\xa5\xaf\xe6\xbb\x7b\x04\xa1\xeb\xc7\xe4\x8b\x00\x9f\x8a\x3f\x71\x66\xf2\x51\xec\x8f\x66\x51\xea\x5f\x61\xc6\xfd\xe8\xd3\xc6\xa0\x94\xa8\x7d\xd8\xc9\x4c\x6b\xb3\xd2\x60\x08\xd6\x00\x38\xfd\x71\x76\x6c\xb6\xce\x66\xcb\xfe\xea\xec\xb2\x09\xd2\x4f\xd5\xb9\xff\xcc\x0f\xf4\xcc\x59\x6e\xba\x43\xbd\xcd\x88\xf2\x4d\x28\x30\x0b\x05\x89\x01\xa0\xb2\x29\x5c\xf7\xd1\x56\x9f\x29\xfa\xdf\x4c\xe7\x63\x34\x4f\xe7\x2b\xc2\xbd\xc9\x06\xf7\x6f\xbe\x00\x02\x7e\xf9\xe5\x33\x53\xed\xb1\x96\x06\x67\x41\xe4\x86\x33\xb3\x5d\xd5\xf2\xdb\xa1\x1b\x37\x7b\x31\x6b\xa7\x68\xcf\x7c\xea\x2e\xe7\x6c\xa1\x76\x4b\x31\x7c\xd0\xa2\x3b\x31\x4c\x74\x8a\xe4\x9a\x41\x05\x58\xb0\xdc\x02\x3d\x44\xc0\xf6\xaf\xc2\x0e\x32\xe4\x30\x4c\x73\xc4\xa1\x99\xa9\x36\xa1\xd2\x5d\xea\x1d\x2d\x8d\x64\x87\xa3\x27\x4d\xc3\x16\x28\x59\xbb\xc6\xac\xc6\x55\xb5\x1b\x20\x69\x72\x11\xf4\xb6\xae\x59\x0b\x21\x75\x65\x5e\x47\xef\x38\xe0\x19\x3a\x27\x51\xc6\xea\xbe\x3a\x07\x9d\x36\x08\x44\x20\x1f\xa4\x6f\x80\xf8\xcd\x51\xd6\xa0\x24\x80\x74\xe2\x1d\xc3\x6b\x5a\x00\x8f\x70\x55\xf1\x02\xdb\xd4\x58\x70\xbe\x69\xd9\xfa\x1b\xb4\xe2\x5b\x72\x4b\x04\x54\xe3\xb2\x12\x2e\xe6\xba\x52\x58\xd1\x02\xc0\x3b\x68\xa6\x18\x2c\xcc\x08\x63\x76\x36\xdb\x8a\x66\xa1\x18\x43\x3c\x02\xd2\xe6\x91\x3a\xd5\xd0\xe7\x97\xd1\x5a\x50\x27\x5b\xdc\x46\x2b\xa6\xa4\xf2\x76\x03\xa6\x4d\xa4\xe5\x50\x38\xff\xd8\x2d\xf5\xc8\xdb\x1c\xff\x4e\xd2\x00\x8e\xbb\xb1\x22\x5e\xc7\x84\x49\xe9\x12\x62\x5f\x11\x66\xaf\xab\x1a\xc8\xcc\xd8\xff\x20\x90\x08\x8c\x96\xed\x5b\xf7\x41\x32\x3d\x36\x70\x77\x57\x2a\x3d\x56\xe6\x5d\x75\xe0\x5f\x39\x8f\x7b\xc5\xf1\x8f\xb5\x65\x61\x77\x67\x06\x91\x63\xbf\x62\x69\x80\x2b\xde\xaa\xde\x70\x88\x71\x12\x46\xe1\xf8\x19\xc2\x81\x4d\xb2\x5e\x8d\x26\x03\x39\x00\xd4\xd5\x4c\xd6\x20\x00\xaa\xbd\x9a\x05\xf2\x5b\xbd\x6b\xbf\xf8\x62\x3f\xb5\xf9\xa0\x54\x1c\x55\xc9\xbc\x7a\xc4\x6d\x43\xc7\xd8\x6e\xd9\xe1\x7e\x75\x59\x53\xee\x2f\x30\x34\xca\x6c\xad\xde\x43\x53\x70\x92\xf5\x2b\x3f\x4a\xed\xca\xfb\xd6\xad\x44\xeb\x44\x09\xf3\x0f\x5d\xb3\xf2\x23\xd4\xab\x4c\xd6\xaa\xcc\xdc\x84\x47\xeb\xa4\x0f\xd7\xa7\xbc\x7f\x6d\x4a\x57\x06\x32\xad\x2d\xf2\xeb\x52\xf6\x58\x1c\x01\x9b\x5d\x93\x32\x50\x79\x32\x66\xda\x1c\x50\x90\x32\x5e\x76\x32\x66\xe2\x1c\x52\x8c\x32\xa5\x1c\x07\x8b\x50\x66\x14\xa0\xcc\x28\x3e\x99\x51\x78\xf2\x03\x56\xba\xd8\xfb\xd1\xe8\x29\xaf\x26\x8f\x54\x5c\xe0\xa5\x5f\xa5\x47\xd6\xf3\xa6\x6a\x81\x23\x96\x2c\xb0\x2f\x54\x41\xcd\xb8\xeb\x75\x2e\xb1\x5a\x9d\x34\x85\x0d\x9c\xee\x69\xda\xea\x99\xed\xa4\xb9\x6b\xea\x17\x34\x68\x1b\x02\x80\x7e\xd3\x74\xb9\x04\x9b\xa1\x8a\xfe\xfa\xf7\x5f\xfd\x9f\x00\x00\x00\xff\xff\x82\x28\x62\x89\x97\x2b\x01\x00") func manifests00CustomResourceDefinitionYamlBytes() ([]byte, error) { return bindataRead( @@ -456,8 +456,8 @@ func manifests00CustomResourceDefinitionYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "manifests/00-custom-resource-definition.yaml", size: 69899, mode: os.FileMode(420), modTime: time.Unix(1, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfe, 0x2e, 0x6, 0xa2, 0xbc, 0x33, 0xc3, 0xb0, 0xc6, 0xce, 0x9b, 0x41, 0xe0, 0xb5, 0x8f, 0x1f, 0x87, 0xad, 0x96, 0xa9, 0x44, 0x45, 0x8e, 0xca, 0xe2, 0x1e, 0x1d, 0x34, 0xff, 0x7a, 0x5, 0x65}} + info := bindataFileInfo{name: "manifests/00-custom-resource-definition.yaml", size: 76695, mode: os.FileMode(420), modTime: time.Unix(1, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9f, 0x6a, 0x51, 0xdb, 0xb3, 0xf8, 0xdc, 0x5, 0x98, 0x4, 0x10, 0xb5, 0xa5, 0xf3, 0xda, 0xdc, 0x74, 0x33, 0x72, 0xc1, 0xba, 0xb1, 0x69, 0x2b, 0x86, 0x29, 0xe6, 0xbe, 0x5b, 0xf9, 0x4c, 0x70}} return a, nil } diff --git a/pkg/operator/controller/ingress/controller.go b/pkg/operator/controller/ingress/controller.go index c1a5382e76..347cecb9c3 100644 --- a/pkg/operator/controller/ingress/controller.go +++ b/pkg/operator/controller/ingress/controller.go @@ -366,9 +366,19 @@ func setDefaultPublishingStrategy(ic *operatorv1.IngressController, infraConfig } } case operatorv1.NodePortServiceStrategyType: - // No parameters. + if effectiveStrategy.NodePort == nil { + effectiveStrategy.NodePort = &operatorv1.NodePortStrategy{} + } + if effectiveStrategy.NodePort.Protocol == operatorv1.DefaultProtocol { + effectiveStrategy.NodePort.Protocol = operatorv1.TCPProtocol + } case operatorv1.HostNetworkStrategyType: - // No parameters. + if effectiveStrategy.HostNetwork == nil { + effectiveStrategy.HostNetwork = &operatorv1.HostNetworkStrategy{} + } + if effectiveStrategy.HostNetwork.Protocol == operatorv1.DefaultProtocol { + effectiveStrategy.HostNetwork.Protocol = operatorv1.TCPProtocol + } case operatorv1.PrivateStrategyType: // No parameters. } @@ -386,6 +396,20 @@ func setDefaultPublishingStrategy(ic *operatorv1.IngressController, infraConfig return true } + // Update if PROXY protocol is turned on or off. + statusNP := ic.Status.EndpointPublishingStrategy.NodePort + specNP := effectiveStrategy.NodePort + if specNP != nil && statusNP != nil && specNP.Protocol != statusNP.Protocol { + statusNP.Protocol = specNP.Protocol + return true + } + statusHN := ic.Status.EndpointPublishingStrategy.HostNetwork + specHN := effectiveStrategy.HostNetwork + if specHN != nil && statusHN != nil && specHN.Protocol != statusHN.Protocol { + statusHN.Protocol = specHN.Protocol + return true + } + return false } @@ -757,10 +781,11 @@ func IsProxyProtocolNeeded(ic *operatorv1.IngressController, platform *configv1. return false, fmt.Errorf("platform status is missing; failed to determine if proxy protocol is needed for %s/%s", ic.Namespace, ic.Name) } - // For now, check if we are on AWS. This can really be done for for any external - // [cloud] LBs that support the proxy protocol. - if platform.Type == configv1.AWSPlatformType { - if ic.Status.EndpointPublishingStrategy.Type == operatorv1.LoadBalancerServiceStrategyType { + switch ic.Status.EndpointPublishingStrategy.Type { + case operatorv1.LoadBalancerServiceStrategyType: + // For now, check if we are on AWS. This can really be done for for any external + // [cloud] LBs that support the proxy protocol. + if platform.Type == configv1.AWSPlatformType { if ic.Status.EndpointPublishingStrategy.LoadBalancer == nil || ic.Status.EndpointPublishingStrategy.LoadBalancer.ProviderParameters == nil || ic.Status.EndpointPublishingStrategy.LoadBalancer.ProviderParameters.AWS == nil || @@ -769,6 +794,14 @@ func IsProxyProtocolNeeded(ic *operatorv1.IngressController, platform *configv1. return true, nil } } + case operatorv1.HostNetworkStrategyType: + if ic.Status.EndpointPublishingStrategy.HostNetwork != nil { + return ic.Status.EndpointPublishingStrategy.HostNetwork.Protocol == operatorv1.ProxyProtocol, nil + } + case operatorv1.NodePortServiceStrategyType: + if ic.Status.EndpointPublishingStrategy.NodePort != nil { + return ic.Status.EndpointPublishingStrategy.NodePort.Protocol == operatorv1.ProxyProtocol, nil + } } return false, nil } diff --git a/pkg/operator/controller/ingress/controller_test.go b/pkg/operator/controller/ingress/controller_test.go index 2933f50332..6229e05d48 100644 --- a/pkg/operator/controller/ingress/controller_test.go +++ b/pkg/operator/controller/ingress/controller_test.go @@ -374,3 +374,192 @@ func TestValidateHTTPHeaderBufferValues(t *testing.T) { } } } + +// TestIsProxyProtocolNeeded verifies that IsProxyProtocolNeeded returns the +// expected values for various platforms and endpoint publishing strategy +// parameters. +func TestIsProxyProtocolNeeded(t *testing.T) { + var ( + awsPlatform = configv1.PlatformStatus{ + Type: configv1.AWSPlatformType, + } + azurePlatform = configv1.PlatformStatus{ + Type: configv1.AzurePlatformType, + } + gcpPlatform = configv1.PlatformStatus{ + Type: configv1.GCPPlatformType, + } + bareMetalPlatform = configv1.PlatformStatus{ + Type: configv1.BareMetalPlatformType, + } + + hostNetworkStrategy = operatorv1.EndpointPublishingStrategy{ + Type: operatorv1.HostNetworkStrategyType, + } + hostNetworkStrategyWithDefault = operatorv1.EndpointPublishingStrategy{ + Type: operatorv1.HostNetworkStrategyType, + HostNetwork: &operatorv1.HostNetworkStrategy{ + Protocol: operatorv1.DefaultProtocol, + }, + } + hostNetworkStrategyWithTCP = operatorv1.EndpointPublishingStrategy{ + Type: operatorv1.HostNetworkStrategyType, + HostNetwork: &operatorv1.HostNetworkStrategy{ + Protocol: operatorv1.TCPProtocol, + }, + } + hostNetworkStrategyWithPROXY = operatorv1.EndpointPublishingStrategy{ + Type: operatorv1.HostNetworkStrategyType, + HostNetwork: &operatorv1.HostNetworkStrategy{ + Protocol: operatorv1.ProxyProtocol, + }, + } + loadBalancerStrategy = operatorv1.EndpointPublishingStrategy{ + Type: operatorv1.LoadBalancerServiceStrategyType, + } + loadBalancerStrategyWithNLB = operatorv1.EndpointPublishingStrategy{ + Type: operatorv1.LoadBalancerServiceStrategyType, + LoadBalancer: &operatorv1.LoadBalancerStrategy{ + ProviderParameters: &operatorv1.ProviderLoadBalancerParameters{ + Type: operatorv1.AWSLoadBalancerProvider, + AWS: &operatorv1.AWSLoadBalancerParameters{ + Type: operatorv1.AWSNetworkLoadBalancer, + }, + }, + }, + } + nodePortStrategy = operatorv1.EndpointPublishingStrategy{ + Type: operatorv1.NodePortServiceStrategyType, + } + nodePortStrategyWithDefault = operatorv1.EndpointPublishingStrategy{ + Type: operatorv1.NodePortServiceStrategyType, + NodePort: &operatorv1.NodePortStrategy{ + Protocol: operatorv1.DefaultProtocol, + }, + } + nodePortStrategyWithTCP = operatorv1.EndpointPublishingStrategy{ + Type: operatorv1.NodePortServiceStrategyType, + NodePort: &operatorv1.NodePortStrategy{ + Protocol: operatorv1.TCPProtocol, + }, + } + nodePortStrategyWithPROXY = operatorv1.EndpointPublishingStrategy{ + Type: operatorv1.NodePortServiceStrategyType, + NodePort: &operatorv1.NodePortStrategy{ + Protocol: operatorv1.ProxyProtocol, + }, + } + privateStrategy = operatorv1.EndpointPublishingStrategy{ + Type: operatorv1.PrivateStrategyType, + } + ) + testCases := []struct { + description string + strategy *operatorv1.EndpointPublishingStrategy + platform *configv1.PlatformStatus + expect bool + expectError bool + }{ + + { + description: "nil platformStatus should cause an error", + strategy: &loadBalancerStrategy, + platform: nil, + expectError: true, + }, + { + description: "hostnetwork strategy shouldn't use PROXY", + strategy: &hostNetworkStrategy, + platform: &bareMetalPlatform, + expect: false, + }, + { + description: "hostnetwork strategy specifying default shouldn't use PROXY", + strategy: &hostNetworkStrategyWithDefault, + platform: &bareMetalPlatform, + expect: false, + }, + { + description: "hostnetwork strategy specifying TCP shouldn't use PROXY", + strategy: &hostNetworkStrategyWithTCP, + platform: &bareMetalPlatform, + expect: false, + }, + { + description: "hostnetwork strategy specifying PROXY should use PROXY", + strategy: &hostNetworkStrategyWithPROXY, + platform: &bareMetalPlatform, + expect: true, + }, + { + description: "loadbalancer strategy with ELB should use PROXY", + strategy: &loadBalancerStrategy, + platform: &awsPlatform, + expect: true, + }, + { + description: "loadbalancer strategy with NLB shouldn't use PROXY", + strategy: &loadBalancerStrategyWithNLB, + platform: &awsPlatform, + expect: false, + }, + { + description: "loadbalancer strategy shouldn't use PROXY on Azure", + strategy: &loadBalancerStrategy, + platform: &azurePlatform, + expect: false, + }, + { + description: "loadbalancer strategy shouldn't use PROXY on GCP", + strategy: &loadBalancerStrategy, + platform: &gcpPlatform, + expect: false, + }, + { + description: "empty nodeport strategy shouldn't use PROXY", + strategy: &nodePortStrategy, + platform: &awsPlatform, + expect: false, + }, + { + description: "nodeport strategy specifying default shouldn't use PROXY", + strategy: &nodePortStrategyWithDefault, + platform: &awsPlatform, + expect: false, + }, + { + description: "nodeport strategy specifying TCP shouldn't use PROXY", + strategy: &nodePortStrategyWithTCP, + platform: &awsPlatform, + expect: false, + }, + { + description: "nodeport strategy specifying PROXY should use PROXY", + strategy: &nodePortStrategyWithPROXY, + platform: &awsPlatform, + expect: true, + }, + { + description: "private strategy shouldn't use PROXY", + strategy: &privateStrategy, + platform: &awsPlatform, + expect: false, + }, + } + + for _, tc := range testCases { + ic := &operatorv1.IngressController{ + Status: operatorv1.IngressControllerStatus{ + EndpointPublishingStrategy: tc.strategy, + }, + } + switch actual, err := IsProxyProtocolNeeded(ic, tc.platform); { + case tc.expectError && err == nil: + t.Errorf("%q: expected error, got nil", tc.description) + case !tc.expectError && err != nil: + t.Errorf("%q: unexpected error: %v", tc.description, err) + case tc.expect != actual: + t.Errorf("%q: expected %t, got %t", tc.description, tc.expect, actual) + } + } +} diff --git a/test/e2e/operator_test.go b/test/e2e/operator_test.go index 5fafa40748..0054dd4735 100644 --- a/test/e2e/operator_test.go +++ b/test/e2e/operator_test.go @@ -57,7 +57,13 @@ import ( ) var ( - nondefaultAvailableConditions = []operatorv1.OperatorCondition{ + availableConditionsForIngressControllerWithNodePort = []operatorv1.OperatorCondition{ + {Type: operatorv1.IngressControllerAvailableConditionType, Status: operatorv1.ConditionTrue}, + {Type: operatorv1.LoadBalancerManagedIngressConditionType, Status: operatorv1.ConditionFalse}, + {Type: operatorv1.DNSManagedIngressConditionType, Status: operatorv1.ConditionFalse}, + {Type: ingresscontroller.IngressControllerAdmittedConditionType, Status: operatorv1.ConditionTrue}, + } + availableConditionsForIngressControllerWithLoadBalancer = []operatorv1.OperatorCondition{ {Type: operatorv1.IngressControllerAvailableConditionType, Status: operatorv1.ConditionTrue}, {Type: operatorv1.LoadBalancerManagedIngressConditionType, Status: operatorv1.ConditionTrue}, {Type: operatorv1.LoadBalancerReadyIngressConditionType, Status: operatorv1.ConditionTrue}, @@ -66,7 +72,7 @@ var ( {Type: ingresscontroller.IngressControllerAdmittedConditionType, Status: operatorv1.ConditionTrue}, } // The ingress canary check status condition only applies to the default ingress controller. - defaultAvailableConditions = append(nondefaultAvailableConditions, operatorv1.OperatorCondition{Type: ingresscontroller.IngressControllerCanaryCheckSuccessConditionType, Status: operatorv1.ConditionTrue}) + defaultAvailableConditions = append(availableConditionsForIngressControllerWithLoadBalancer, operatorv1.OperatorCondition{Type: ingresscontroller.IngressControllerCanaryCheckSuccessConditionType, Status: operatorv1.ConditionTrue}) ) var kclient client.Client @@ -164,14 +170,14 @@ func TestUserDefinedIngressController(t *testing.T) { } defer assertIngressControllerDeleted(t, kclient, ing) - if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, name, nondefaultAvailableConditions...); err != nil { + if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, name, availableConditionsForIngressControllerWithLoadBalancer...); err != nil { t.Errorf("failed to observe expected conditions: %v", err) } } func TestUniqueDomainRejection(t *testing.T) { def := &operatorv1.IngressController{} - if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, defaultName, nondefaultAvailableConditions...); err != nil { + if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, defaultName, availableConditionsForIngressControllerWithLoadBalancer...); err != nil { t.Fatalf("failed to observe expected conditions: %v", err) } @@ -195,8 +201,11 @@ func TestUniqueDomainRejection(t *testing.T) { } } +// TestProxyProtocolOnAWS verifies that the default ingresscontroller +// uses PROXY protocol on AWS. +// // TODO: should this be a test of source IP preservation in the conformance suite? -func TestClusterProxyProtocol(t *testing.T) { +func TestProxyProtocolOnAWS(t *testing.T) { if infraConfig.Status.Platform != configv1.AWSPlatformType { t.Skip("test skipped on non-aws platform") return @@ -206,7 +215,7 @@ func TestClusterProxyProtocol(t *testing.T) { if err := kclient.Get(context.TODO(), defaultName, ic); err != nil { t.Fatalf("failed to get default ingresscontroller: %v", err) } - if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, defaultName, nondefaultAvailableConditions...); err != nil { + if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, defaultName, availableConditionsForIngressControllerWithLoadBalancer...); err != nil { t.Fatalf("failed to observe expected conditions: %v", err) } @@ -230,6 +239,43 @@ func TestClusterProxyProtocol(t *testing.T) { } } +// TestProxyProtocolAPI verifies that the operator configures router pod +// replicas to use PROXY protocol if it is specified on an ingresscontroller. +func TestProxyProtocolAPI(t *testing.T) { + icName := types.NamespacedName{Namespace: operatorNamespace, Name: "proxy-protocol"} + domain := icName.Name + "." + dnsConfig.Spec.BaseDomain + ic := newNodePortController(icName, domain) + if err := kclient.Create(context.TODO(), ic); err != nil { + t.Fatalf("failed to create ingresscontroller: %v", err) + } + defer assertIngressControllerDeleted(t, kclient, ic) + + if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, icName, availableConditionsForIngressControllerWithNodePort...); err != nil { + t.Errorf("failed to observe expected conditions: %v", err) + } + + if err := kclient.Get(context.TODO(), icName, ic); err != nil { + t.Fatalf("failed to get ingresscontroller: %v", err) + } + deployment := &appsv1.Deployment{} + if err := kclient.Get(context.TODO(), controller.RouterDeploymentName(ic), deployment); err != nil { + t.Fatalf("failed to get ingresscontroller deployment: %v", err) + } + if err := waitForDeploymentEnvVar(t, kclient, deployment, 1*time.Minute, "ROUTER_USE_PROXY_PROTOCOL", ""); err != nil { + t.Fatalf("expected initial deployment not to enable PROXY protocol: %v", err) + } + + ic.Spec.EndpointPublishingStrategy.NodePort = &operatorv1.NodePortStrategy{ + Protocol: operatorv1.ProxyProtocol, + } + if err := kclient.Update(context.TODO(), ic); err != nil { + t.Fatalf("failed to update ingresscontroller: %v", err) + } + if err := waitForDeploymentEnvVar(t, kclient, deployment, 1*time.Minute, "ROUTER_USE_PROXY_PROTOCOL", "true"); err != nil { + t.Fatalf("expected updated deployment to enable PROXY protocol: %v", err) + } +} + // NOTE: This test will mutate the default ingresscontroller. // // TODO: Find a way to do this test without mutating the default ingress? @@ -238,7 +284,7 @@ func TestUpdateDefaultIngressController(t *testing.T) { if err := kclient.Get(context.TODO(), defaultName, ic); err != nil { t.Fatalf("failed to get default ingresscontroller: %v", err) } - if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, defaultName, nondefaultAvailableConditions...); err != nil { + if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, defaultName, availableConditionsForIngressControllerWithLoadBalancer...); err != nil { t.Fatalf("failed to observe expected conditions: %v", err) } @@ -351,7 +397,7 @@ func TestIngressControllerScale(t *testing.T) { if err := kclient.Get(context.TODO(), defaultName, ic); err != nil { t.Fatalf("failed to get default ingresscontroller: %v", err) } - if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, defaultName, nondefaultAvailableConditions...); err != nil { + if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, defaultName, availableConditionsForIngressControllerWithLoadBalancer...); err != nil { t.Fatalf("failed to observe expected conditions: %v", err) } @@ -403,7 +449,7 @@ func TestIngressControllerScale(t *testing.T) { } // Ensure the ingresscontroller remains available - if err := waitForIngressControllerCondition(t, kclient, 2*time.Minute, defaultName, nondefaultAvailableConditions...); err != nil { + if err := waitForIngressControllerCondition(t, kclient, 2*time.Minute, defaultName, availableConditionsForIngressControllerWithLoadBalancer...); err != nil { t.Fatalf("failed to observe expected conditions: %v", err) } @@ -428,7 +474,7 @@ func TestIngressControllerScale(t *testing.T) { // Ensure the ingresscontroller remains available // TODO: assert that the conditions hold steady for some amount of time? - if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, defaultName, nondefaultAvailableConditions...); err != nil { + if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, defaultName, availableConditionsForIngressControllerWithLoadBalancer...); err != nil { t.Fatalf("failed to observe expected conditions: %v", err) } @@ -484,7 +530,7 @@ func TestDefaultIngressCertificate(t *testing.T) { return } - if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, defaultName, nondefaultAvailableConditions...); err != nil { + if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, defaultName, availableConditionsForIngressControllerWithLoadBalancer...); err != nil { t.Fatalf("failed to observe expected conditions: %v", err) } @@ -550,7 +596,7 @@ func TestPodDisruptionBudgetExists(t *testing.T) { t.Fatalf("failed to get default ingresscontroller: %v", err) } - if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, defaultName, nondefaultAvailableConditions...); err != nil { + if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, defaultName, availableConditionsForIngressControllerWithLoadBalancer...); err != nil { t.Fatalf("failed to observe expected conditions: %v", err) } @@ -613,7 +659,7 @@ func TestInternalLoadBalancer(t *testing.T) { defer assertIngressControllerDeleted(t, kclient, ic) // Wait for the load balancer and DNS to be ready. - if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, name, nondefaultAvailableConditions...); err != nil { + if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, name, availableConditionsForIngressControllerWithLoadBalancer...); err != nil { t.Fatalf("failed to observe expected conditions: %v", err) } @@ -662,7 +708,7 @@ func TestInternalLoadBalancerGlobalAccessGCP(t *testing.T) { defer assertIngressControllerDeleted(t, kclient, ic) // Wait for the load balancer and DNS to be ready. - if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, name, nondefaultAvailableConditions...); err != nil { + if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, name, availableConditionsForIngressControllerWithLoadBalancer...); err != nil { t.Fatalf("failed to observe expected conditions: %v", err) } @@ -1287,7 +1333,7 @@ func TestIngressControllerCustomEndpoints(t *testing.T) { t.Skipf("skipping TestIngressControllerCustomEndpoints test due to platform type: %s", platform.Type) } // The default ingresscontroller should surface the expected status conditions. - if err := waitForIngressControllerCondition(t, kclient, 30*time.Second, defaultName, nondefaultAvailableConditions...); err != nil { + if err := waitForIngressControllerCondition(t, kclient, 30*time.Second, defaultName, availableConditionsForIngressControllerWithLoadBalancer...); err != nil { t.Fatalf("did not get expected ingress controller conditions: %v", err) } // Ensure an ingresscontroller can be created with custom endpoints. @@ -1298,7 +1344,7 @@ func TestIngressControllerCustomEndpoints(t *testing.T) { } defer assertIngressControllerDeleted(t, kclient, ic) // Ensure the ingress controller is reporting expected status conditions. - if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, name, nondefaultAvailableConditions...); err != nil { + if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, name, availableConditionsForIngressControllerWithLoadBalancer...); err != nil { t.Errorf("failed to observe expected conditions: %v", err) } } @@ -1598,7 +1644,7 @@ func TestNetworkLoadBalancer(t *testing.T) { defer assertIngressControllerDeleted(t, kclient, ic) // Wait for the load balancer and DNS to be ready. - if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, name, nondefaultAvailableConditions...); err != nil { + if err := waitForIngressControllerCondition(t, kclient, 5*time.Minute, name, availableConditionsForIngressControllerWithLoadBalancer...); err != nil { t.Fatalf("failed to observe expected conditions: %v", err) } @@ -1860,7 +1906,9 @@ func waitForDeploymentComplete(t *testing.T, cl client.Client, deployment *appsv return nil } -// Wait for the provided deployment to have the specified environment variable set. +// Wait for the provided deployment to have the specified environment variable +// set with the provided value, or unset if the provided value is the empty +// string. func waitForDeploymentEnvVar(t *testing.T, cl client.Client, deployment *appsv1.Deployment, timeout time.Duration, name, value string) error { t.Helper() deploymentName := types.NamespacedName{Namespace: deployment.Namespace, Name: deployment.Name} @@ -1877,6 +1925,7 @@ func waitForDeploymentEnvVar(t *testing.T, cl client.Client, deployment *appsv1. return v.Value == value, nil } } + return len(value) == 0, nil } } return false, nil diff --git a/vendor/github.com/openshift/api/config/v1/types_feature.go b/vendor/github.com/openshift/api/config/v1/types_feature.go index 99391ac81f..43da006312 100644 --- a/vendor/github.com/openshift/api/config/v1/types_feature.go +++ b/vendor/github.com/openshift/api/config/v1/types_feature.go @@ -125,6 +125,7 @@ var defaultFeatures = &FeatureGateEnabledDisabled{ "SupportPodPidsLimit", // sig-pod, sjenning "NodeDisruptionExclusion", // sig-scheduling, ccoleman "ServiceNodeExclusion", // sig-scheduling, ccoleman + "DownwardAPIHugePages", // sig-node, rphillips }, Disabled: []string{ "LegacyNodeRoleBehavior", // sig-scheduling, ccoleman diff --git a/vendor/github.com/openshift/api/operator/v1/0000_50_ingress-operator_00-ingresscontroller.crd.yaml b/vendor/github.com/openshift/api/operator/v1/0000_50_ingress-operator_00-ingresscontroller.crd.yaml index 8ecf9c9569..a22523aae1 100644 --- a/vendor/github.com/openshift/api/operator/v1/0000_50_ingress-operator_00-ingresscontroller.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/0000_50_ingress-operator_00-ingresscontroller.crd.yaml @@ -93,6 +93,30 @@ spec: hostNetwork: description: hostNetwork holds parameters for the HostNetwork endpoint publishing strategy. Present only if type is HostNetwork. + properties: + protocol: + description: "protocol specifies whether the IngressController + expects incoming connections to use plain TCP or whether + the IngressController expects PROXY protocol. \n PROXY protocol + can be used with load balancers that support it to communicate + the source addresses of client connections when forwarding + those connections to the IngressController. Using PROXY + protocol enables the IngressController to report those source + addresses instead of reporting the load balancer's address + in HTTP headers and logs. Note that enabling PROXY protocol + on the IngressController will cause connections to fail + if you are not using a load balancer that uses PROXY protocol + to forward connections to the IngressController. See http://www.haproxy.org/download/2.2/doc/proxy-protocol.txt + for information about PROXY protocol. \n The following values + are valid for this field: \n * The empty string. * \"TCP\". + * \"PROXY\". \n The empty string specifies the default, + which is TCP without PROXY protocol. Note that the default + is subject to change." + enum: + - "" + - TCP + - PROXY + type: string type: object loadBalancer: description: loadBalancer holds parameters for the load balancer. @@ -189,6 +213,30 @@ spec: nodePort: description: nodePort holds parameters for the NodePortService endpoint publishing strategy. Present only if type is NodePortService. + properties: + protocol: + description: "protocol specifies whether the IngressController + expects incoming connections to use plain TCP or whether + the IngressController expects PROXY protocol. \n PROXY protocol + can be used with load balancers that support it to communicate + the source addresses of client connections when forwarding + those connections to the IngressController. Using PROXY + protocol enables the IngressController to report those source + addresses instead of reporting the load balancer's address + in HTTP headers and logs. Note that enabling PROXY protocol + on the IngressController will cause connections to fail + if you are not using a load balancer that uses PROXY protocol + to forward connections to the IngressController. See http://www.haproxy.org/download/2.2/doc/proxy-protocol.txt + for information about PROXY protocol. \n The following values + are valid for this field: \n * The empty string. * \"TCP\". + * \"PROXY\". \n The empty string specifies the default, + which is TCP without PROXY protocol. Note that the default + is subject to change." + enum: + - "" + - TCP + - PROXY + type: string type: object private: description: private holds parameters for the Private endpoint @@ -958,6 +1006,30 @@ spec: hostNetwork: description: hostNetwork holds parameters for the HostNetwork endpoint publishing strategy. Present only if type is HostNetwork. + properties: + protocol: + description: "protocol specifies whether the IngressController + expects incoming connections to use plain TCP or whether + the IngressController expects PROXY protocol. \n PROXY protocol + can be used with load balancers that support it to communicate + the source addresses of client connections when forwarding + those connections to the IngressController. Using PROXY + protocol enables the IngressController to report those source + addresses instead of reporting the load balancer's address + in HTTP headers and logs. Note that enabling PROXY protocol + on the IngressController will cause connections to fail + if you are not using a load balancer that uses PROXY protocol + to forward connections to the IngressController. See http://www.haproxy.org/download/2.2/doc/proxy-protocol.txt + for information about PROXY protocol. \n The following values + are valid for this field: \n * The empty string. * \"TCP\". + * \"PROXY\". \n The empty string specifies the default, + which is TCP without PROXY protocol. Note that the default + is subject to change." + enum: + - "" + - TCP + - PROXY + type: string type: object loadBalancer: description: loadBalancer holds parameters for the load balancer. @@ -1054,6 +1126,30 @@ spec: nodePort: description: nodePort holds parameters for the NodePortService endpoint publishing strategy. Present only if type is NodePortService. + properties: + protocol: + description: "protocol specifies whether the IngressController + expects incoming connections to use plain TCP or whether + the IngressController expects PROXY protocol. \n PROXY protocol + can be used with load balancers that support it to communicate + the source addresses of client connections when forwarding + those connections to the IngressController. Using PROXY + protocol enables the IngressController to report those source + addresses instead of reporting the load balancer's address + in HTTP headers and logs. Note that enabling PROXY protocol + on the IngressController will cause connections to fail + if you are not using a load balancer that uses PROXY protocol + to forward connections to the IngressController. See http://www.haproxy.org/download/2.2/doc/proxy-protocol.txt + for information about PROXY protocol. \n The following values + are valid for this field: \n * The empty string. * \"TCP\". + * \"PROXY\". \n The empty string specifies the default, + which is TCP without PROXY protocol. Note that the default + is subject to change." + enum: + - "" + - TCP + - PROXY + type: string type: object private: description: private holds parameters for the Private endpoint diff --git a/vendor/github.com/openshift/api/operator/v1/0000_70_dns-operator_00-custom-resource-definition.yaml b/vendor/github.com/openshift/api/operator/v1/0000_70_dns-operator_00-custom-resource-definition.yaml index d891ca4ed8..7d50cfe76b 100644 --- a/vendor/github.com/openshift/api/operator/v1/0000_70_dns-operator_00-custom-resource-definition.yaml +++ b/vendor/github.com/openshift/api/operator/v1/0000_70_dns-operator_00-custom-resource-definition.yaml @@ -45,6 +45,73 @@ spec: DNS. type: object properties: + nodePlacement: + description: "nodePlacement provides explicit control over the scheduling + of DNS pods. \n Generally, it is useful to run a DNS pod on every + node so that DNS queries are always handled by a local DNS pod instead + of going over the network to a DNS pod on another node. However, + security policies may require restricting the placement of DNS pods + to specific nodes. For example, if a security policy prohibits pods + on arbitrary nodes from communicating with the API, a node selector + can be specified to restrict DNS pods to nodes that are permitted + to communicate with the API. Conversely, if running DNS pods on + nodes with a particular taint is desired, a toleration can be specified + for that taint. \n If unset, defaults are used. See nodePlacement + for more details." + type: object + properties: + nodeSelector: + description: "nodeSelector is the node selector applied to DNS + pods. \n If empty, the default is used, which is currently the + following: \n beta.kubernetes.io/os: linux \n This default + is subject to change. \n If set, the specified selector is used + and replaces the default." + type: object + additionalProperties: + type: string + tolerations: + description: "tolerations is a list of tolerations applied to + DNS pods. \n The default is an empty list. This default is + subject to change. \n See https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/" + type: array + items: + description: The pod this Toleration is attached to tolerates + any taint that matches the triple using + the matching operator . + 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 servers: description: "servers is a list of DNS resolvers that provide name query delegation for one or more subdomains outside the scope of diff --git a/vendor/github.com/openshift/api/operator/v1/types_dns.go b/vendor/github.com/openshift/api/operator/v1/types_dns.go index 5bc3614685..112907c9b3 100644 --- a/vendor/github.com/openshift/api/operator/v1/types_dns.go +++ b/vendor/github.com/openshift/api/operator/v1/types_dns.go @@ -2,6 +2,8 @@ package v1 import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + corev1 "k8s.io/api/core/v1" ) // +genclient @@ -42,6 +44,24 @@ type DNSSpec struct { // // +optional Servers []Server `json:"servers,omitempty"` + + // nodePlacement provides explicit control over the scheduling of DNS + // pods. + // + // Generally, it is useful to run a DNS pod on every node so that DNS + // queries are always handled by a local DNS pod instead of going over + // the network to a DNS pod on another node. However, security policies + // may require restricting the placement of DNS pods to specific nodes. + // For example, if a security policy prohibits pods on arbitrary nodes + // from communicating with the API, a node selector can be specified to + // restrict DNS pods to nodes that are permitted to communicate with the + // API. Conversely, if running DNS pods on nodes with a particular + // taint is desired, a toleration can be specified for that taint. + // + // If unset, defaults are used. See nodePlacement for more details. + // + // +optional + NodePlacement DNSNodePlacement `json:"nodePlacement,omitempty"` } // Server defines the schema for a server that runs per instance of CoreDNS. @@ -73,6 +93,31 @@ type ForwardPlugin struct { Upstreams []string `json:"upstreams"` } +// DNSNodePlacement describes the node scheduling configuration for DNS pods. +type DNSNodePlacement struct { + // nodeSelector is the node selector applied to DNS pods. + // + // If empty, the default is used, which is currently the following: + // + // beta.kubernetes.io/os: linux + // + // This default is subject to change. + // + // If set, the specified selector is used and replaces the default. + // + // +optional + NodeSelector map[string]string `json:"nodeSelector,omitempty"` + + // tolerations is a list of tolerations applied to DNS pods. + // + // The default is an empty list. This default is subject to change. + // + // See https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ + // + // +optional + Tolerations []corev1.Toleration `json:"tolerations,omitempty"` +} + const ( // Available indicates the DNS controller daemonset is available. DNSAvailable = "Available" diff --git a/vendor/github.com/openshift/api/operator/v1/types_ingress.go b/vendor/github.com/openshift/api/operator/v1/types_ingress.go index b5f04c7fcc..8c5ee0b0ad 100644 --- a/vendor/github.com/openshift/api/operator/v1/types_ingress.go +++ b/vendor/github.com/openshift/api/operator/v1/types_ingress.go @@ -410,6 +410,34 @@ type AWSNetworkLoadBalancerParameters struct { // HostNetworkStrategy holds parameters for the HostNetwork endpoint publishing // strategy. type HostNetworkStrategy struct { + // protocol specifies whether the IngressController expects incoming + // connections to use plain TCP or whether the IngressController expects + // PROXY protocol. + // + // PROXY protocol can be used with load balancers that support it to + // communicate the source addresses of client connections when + // forwarding those connections to the IngressController. Using PROXY + // protocol enables the IngressController to report those source + // addresses instead of reporting the load balancer's address in HTTP + // headers and logs. Note that enabling PROXY protocol on the + // IngressController will cause connections to fail if you are not using + // a load balancer that uses PROXY protocol to forward connections to + // the IngressController. See + // http://www.haproxy.org/download/2.2/doc/proxy-protocol.txt for + // information about PROXY protocol. + // + // The following values are valid for this field: + // + // * The empty string. + // * "TCP". + // * "PROXY". + // + // The empty string specifies the default, which is TCP without PROXY + // protocol. Note that the default is subject to change. + // + // +kubebuilder:validation:Optional + // +optional + Protocol IngressControllerProtocol `json:"protocol,omitempty"` } // PrivateStrategy holds parameters for the Private endpoint publishing @@ -419,8 +447,46 @@ type PrivateStrategy struct { // NodePortStrategy holds parameters for the NodePortService endpoint publishing strategy. type NodePortStrategy struct { + // protocol specifies whether the IngressController expects incoming + // connections to use plain TCP or whether the IngressController expects + // PROXY protocol. + // + // PROXY protocol can be used with load balancers that support it to + // communicate the source addresses of client connections when + // forwarding those connections to the IngressController. Using PROXY + // protocol enables the IngressController to report those source + // addresses instead of reporting the load balancer's address in HTTP + // headers and logs. Note that enabling PROXY protocol on the + // IngressController will cause connections to fail if you are not using + // a load balancer that uses PROXY protocol to forward connections to + // the IngressController. See + // http://www.haproxy.org/download/2.2/doc/proxy-protocol.txt for + // information about PROXY protocol. + // + // The following values are valid for this field: + // + // * The empty string. + // * "TCP". + // * "PROXY". + // + // The empty string specifies the default, which is TCP without PROXY + // protocol. Note that the default is subject to change. + // + // +kubebuilder:validation:Optional + // +optional + Protocol IngressControllerProtocol `json:"protocol,omitempty"` } +// IngressControllerProtocol specifies whether PROXY protocol is enabled or not. +// +kubebuilder:validation:Enum="";TCP;PROXY +type IngressControllerProtocol string + +const ( + DefaultProtocol IngressControllerProtocol = "" + TCPProtocol IngressControllerProtocol = "TCP" + ProxyProtocol IngressControllerProtocol = "PROXY" +) + // EndpointPublishingStrategy is a way to publish the endpoints of an // IngressController, and represents the type and any additional configuration // for a specific type. diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go index 51fcf672b4..b2f7224bb7 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go @@ -841,6 +841,36 @@ func (in *DNSList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DNSNodePlacement) DeepCopyInto(out *DNSNodePlacement) { + *out = *in + if in.NodeSelector != nil { + in, out := &in.NodeSelector, &out.NodeSelector + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Tolerations != nil { + in, out := &in.Tolerations, &out.Tolerations + *out = make([]corev1.Toleration, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DNSNodePlacement. +func (in *DNSNodePlacement) DeepCopy() *DNSNodePlacement { + if in == nil { + return nil + } + out := new(DNSNodePlacement) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DNSSpec) DeepCopyInto(out *DNSSpec) { *out = *in @@ -851,6 +881,7 @@ func (in *DNSSpec) DeepCopyInto(out *DNSSpec) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + in.NodePlacement.DeepCopyInto(&out.NodePlacement) return } diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go index f2177afae1..cf70b0b06a 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go @@ -363,9 +363,20 @@ func (DNSList) SwaggerDoc() map[string]string { return map_DNSList } +var map_DNSNodePlacement = map[string]string{ + "": "DNSNodePlacement describes the node scheduling configuration for DNS pods.", + "nodeSelector": "nodeSelector is the node selector applied to DNS pods.\n\nIf empty, the default is used, which is currently the following:\n\n beta.kubernetes.io/os: linux\n\nThis default is subject to change.\n\nIf set, the specified selector is used and replaces the default.", + "tolerations": "tolerations is a list of tolerations applied to DNS pods.\n\nThe default is an empty list. This default is subject to change.\n\nSee https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/", +} + +func (DNSNodePlacement) SwaggerDoc() map[string]string { + return map_DNSNodePlacement +} + var map_DNSSpec = map[string]string{ - "": "DNSSpec is the specification of the desired behavior of the DNS.", - "servers": "servers is a list of DNS resolvers that provide name query delegation for one or more subdomains outside the scope of the cluster domain. If servers consists of more than one Server, longest suffix match will be used to determine the Server.\n\nFor example, if there are two Servers, one for \"foo.com\" and another for \"a.foo.com\", and the name query is for \"www.a.foo.com\", it will be routed to the Server with Zone \"a.foo.com\".\n\nIf this field is nil, no servers are created.", + "": "DNSSpec is the specification of the desired behavior of the DNS.", + "servers": "servers is a list of DNS resolvers that provide name query delegation for one or more subdomains outside the scope of the cluster domain. If servers consists of more than one Server, longest suffix match will be used to determine the Server.\n\nFor example, if there are two Servers, one for \"foo.com\" and another for \"a.foo.com\", and the name query is for \"www.a.foo.com\", it will be routed to the Server with Zone \"a.foo.com\".\n\nIf this field is nil, no servers are created.", + "nodePlacement": "nodePlacement provides explicit control over the scheduling of DNS pods.\n\nGenerally, it is useful to run a DNS pod on every node so that DNS queries are always handled by a local DNS pod instead of going over the network to a DNS pod on another node. However, security policies may require restricting the placement of DNS pods to specific nodes. For example, if a security policy prohibits pods on arbitrary nodes from communicating with the API, a node selector can be specified to restrict DNS pods to nodes that are permitted to communicate with the API. Conversely, if running DNS pods on nodes with a particular taint is desired, a toleration can be specified for that taint.\n\nIf unset, defaults are used. See nodePlacement for more details.", } func (DNSSpec) SwaggerDoc() map[string]string { @@ -490,7 +501,8 @@ func (GCPLoadBalancerParameters) SwaggerDoc() map[string]string { } var map_HostNetworkStrategy = map[string]string{ - "": "HostNetworkStrategy holds parameters for the HostNetwork endpoint publishing strategy.", + "": "HostNetworkStrategy holds parameters for the HostNetwork endpoint publishing strategy.", + "protocol": "protocol specifies whether the IngressController expects incoming connections to use plain TCP or whether the IngressController expects PROXY protocol.\n\nPROXY protocol can be used with load balancers that support it to communicate the source addresses of client connections when forwarding those connections to the IngressController. Using PROXY protocol enables the IngressController to report those source addresses instead of reporting the load balancer's address in HTTP headers and logs. Note that enabling PROXY protocol on the IngressController will cause connections to fail if you are not using a load balancer that uses PROXY protocol to forward connections to the IngressController. See http://www.haproxy.org/download/2.2/doc/proxy-protocol.txt for information about PROXY protocol.\n\nThe following values are valid for this field:\n\n* The empty string. * \"TCP\". * \"PROXY\".\n\nThe empty string specifies the default, which is TCP without PROXY protocol. Note that the default is subject to change.", } func (HostNetworkStrategy) SwaggerDoc() map[string]string { @@ -662,7 +674,8 @@ func (NodePlacement) SwaggerDoc() map[string]string { } var map_NodePortStrategy = map[string]string{ - "": "NodePortStrategy holds parameters for the NodePortService endpoint publishing strategy.", + "": "NodePortStrategy holds parameters for the NodePortService endpoint publishing strategy.", + "protocol": "protocol specifies whether the IngressController expects incoming connections to use plain TCP or whether the IngressController expects PROXY protocol.\n\nPROXY protocol can be used with load balancers that support it to communicate the source addresses of client connections when forwarding those connections to the IngressController. Using PROXY protocol enables the IngressController to report those source addresses instead of reporting the load balancer's address in HTTP headers and logs. Note that enabling PROXY protocol on the IngressController will cause connections to fail if you are not using a load balancer that uses PROXY protocol to forward connections to the IngressController. See http://www.haproxy.org/download/2.2/doc/proxy-protocol.txt for information about PROXY protocol.\n\nThe following values are valid for this field:\n\n* The empty string. * \"TCP\". * \"PROXY\".\n\nThe empty string specifies the default, which is TCP without PROXY protocol. Note that the default is subject to change.", } func (NodePortStrategy) SwaggerDoc() map[string]string { diff --git a/vendor/modules.txt b/vendor/modules.txt index 9f49a7f56b..c640b9ccf5 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -155,7 +155,7 @@ github.com/modern-go/concurrent github.com/modern-go/reflect2 # github.com/onsi/ginkgo v1.14.0 ## explicit -# github.com/openshift/api v0.0.0-20210319173601-ab6d2da2c3ef +# github.com/openshift/api v0.0.0-20210325163602-e37aaed4c278 ## explicit github.com/openshift/api/config/v1 github.com/openshift/api/operator/v1