Merge pull request #41766 from feiskyer/sysctls

Automatic merge from submit-queue (batch tested with PRs 45826, 45747, 45548, 45606, 41766)

CRI: using typed filed for sysctls

**What this PR does / why we need it**:

CRI supports sysctls via annotations [today](https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/api/v1alpha1/runtime/api.proto#L237), we should move them to typed and structured fields instead. (refer [here](https://github.com/kubernetes/kubernetes/issues/30819#issuecomment-253369441))

**Which issue this PR fixes** 

Part of #39130.

**Release note**:

```release-note
NONE
```
This commit is contained in:
Kubernetes Submit Queue 2017-05-15 11:39:29 -07:00 committed by GitHub
commit 1b7dacde4b
10 changed files with 435 additions and 287 deletions

View File

@ -527,6 +527,8 @@ type LinuxPodSandboxConfig struct {
CgroupParent string `protobuf:"bytes,1,opt,name=cgroup_parent,json=cgroupParent,proto3" json:"cgroup_parent,omitempty"` CgroupParent string `protobuf:"bytes,1,opt,name=cgroup_parent,json=cgroupParent,proto3" json:"cgroup_parent,omitempty"`
// LinuxSandboxSecurityContext holds sandbox security attributes. // LinuxSandboxSecurityContext holds sandbox security attributes.
SecurityContext *LinuxSandboxSecurityContext `protobuf:"bytes,2,opt,name=security_context,json=securityContext" json:"security_context,omitempty"` SecurityContext *LinuxSandboxSecurityContext `protobuf:"bytes,2,opt,name=security_context,json=securityContext" json:"security_context,omitempty"`
// Sysctls holds linux sysctls config for the sandbox.
Sysctls map[string]string `protobuf:"bytes,3,rep,name=sysctls" json:"sysctls,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
} }
func (m *LinuxPodSandboxConfig) Reset() { *m = LinuxPodSandboxConfig{} } func (m *LinuxPodSandboxConfig) Reset() { *m = LinuxPodSandboxConfig{} }
@ -547,6 +549,13 @@ func (m *LinuxPodSandboxConfig) GetSecurityContext() *LinuxSandboxSecurityContex
return nil return nil
} }
func (m *LinuxPodSandboxConfig) GetSysctls() map[string]string {
if m != nil {
return m.Sysctls
}
return nil
}
// PodSandboxMetadata holds all necessary information for building the sandbox name. // PodSandboxMetadata holds all necessary information for building the sandbox name.
// The container runtime is encouraged to expose the metadata associated with the // The container runtime is encouraged to expose the metadata associated with the
// PodSandbox in its user interface for better user experience. For example, // PodSandbox in its user interface for better user experience. For example,
@ -662,16 +671,6 @@ type PodSandboxConfig struct {
// local seccomp profile root. Note that profile root is set in // local seccomp profile root. Note that profile root is set in
// kubelet, and it is not passed in CRI yet, see https://issues.k8s.io/36997. // kubelet, and it is not passed in CRI yet, see https://issues.k8s.io/36997.
// //
// 2. Sysctls
//
// key: security.alpha.kubernetes.io/sysctls
// description: list of safe sysctls which are set for the sandbox.
// value: comma separated list of sysctl_name=value key-value pairs.
//
// key: security.alpha.kubernetes.io/unsafe-sysctls
// description: list of unsafe sysctls which are set for the sandbox.
// value: comma separated list of sysctl_name=value key-value pairs.
//
Annotations map[string]string `protobuf:"bytes,7,rep,name=annotations" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Annotations map[string]string `protobuf:"bytes,7,rep,name=annotations" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
// Optional configurations specific to Linux hosts. // Optional configurations specific to Linux hosts.
Linux *LinuxPodSandboxConfig `protobuf:"bytes,8,opt,name=linux" json:"linux,omitempty"` Linux *LinuxPodSandboxConfig `protobuf:"bytes,8,opt,name=linux" json:"linux,omitempty"`
@ -4372,6 +4371,23 @@ func (m *LinuxPodSandboxConfig) MarshalTo(dAtA []byte) (int, error) {
} }
i += n6 i += n6
} }
if len(m.Sysctls) > 0 {
for k := range m.Sysctls {
dAtA[i] = 0x1a
i++
v := m.Sysctls[k]
mapSize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v)))
i = encodeVarintApi(dAtA, i, uint64(mapSize))
dAtA[i] = 0xa
i++
i = encodeVarintApi(dAtA, i, uint64(len(k)))
i += copy(dAtA[i:], k)
dAtA[i] = 0x12
i++
i = encodeVarintApi(dAtA, i, uint64(len(v)))
i += copy(dAtA[i:], v)
}
}
return i, nil return i, nil
} }
@ -7566,6 +7582,14 @@ func (m *LinuxPodSandboxConfig) Size() (n int) {
l = m.SecurityContext.Size() l = m.SecurityContext.Size()
n += 1 + l + sovApi(uint64(l)) n += 1 + l + sovApi(uint64(l))
} }
if len(m.Sysctls) > 0 {
for k, v := range m.Sysctls {
_ = k
_ = v
mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v)))
n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize))
}
}
return n return n
} }
@ -8945,9 +8969,20 @@ func (this *LinuxPodSandboxConfig) String() string {
if this == nil { if this == nil {
return "nil" return "nil"
} }
keysForSysctls := make([]string, 0, len(this.Sysctls))
for k := range this.Sysctls {
keysForSysctls = append(keysForSysctls, k)
}
github_com_gogo_protobuf_sortkeys.Strings(keysForSysctls)
mapStringForSysctls := "map[string]string{"
for _, k := range keysForSysctls {
mapStringForSysctls += fmt.Sprintf("%v: %v,", k, this.Sysctls[k])
}
mapStringForSysctls += "}"
s := strings.Join([]string{`&LinuxPodSandboxConfig{`, s := strings.Join([]string{`&LinuxPodSandboxConfig{`,
`CgroupParent:` + fmt.Sprintf("%v", this.CgroupParent) + `,`, `CgroupParent:` + fmt.Sprintf("%v", this.CgroupParent) + `,`,
`SecurityContext:` + strings.Replace(fmt.Sprintf("%v", this.SecurityContext), "LinuxSandboxSecurityContext", "LinuxSandboxSecurityContext", 1) + `,`, `SecurityContext:` + strings.Replace(fmt.Sprintf("%v", this.SecurityContext), "LinuxSandboxSecurityContext", "LinuxSandboxSecurityContext", 1) + `,`,
`Sysctls:` + mapStringForSysctls + `,`,
`}`, `}`,
}, "") }, "")
return s return s
@ -11157,6 +11192,122 @@ func (m *LinuxPodSandboxConfig) Unmarshal(dAtA []byte) error {
return err return err
} }
iNdEx = postIndex iNdEx = postIndex
case 3:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Sysctls", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowApi
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthApi
}
postIndex := iNdEx + msglen
if postIndex > l {
return io.ErrUnexpectedEOF
}
var keykey uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowApi
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
keykey |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
var stringLenmapkey uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowApi
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLenmapkey |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLenmapkey := int(stringLenmapkey)
if intStringLenmapkey < 0 {
return ErrInvalidLengthApi
}
postStringIndexmapkey := iNdEx + intStringLenmapkey
if postStringIndexmapkey > l {
return io.ErrUnexpectedEOF
}
mapkey := string(dAtA[iNdEx:postStringIndexmapkey])
iNdEx = postStringIndexmapkey
if m.Sysctls == nil {
m.Sysctls = make(map[string]string)
}
if iNdEx < postIndex {
var valuekey uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowApi
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
valuekey |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
var stringLenmapvalue uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowApi
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLenmapvalue |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLenmapvalue := int(stringLenmapvalue)
if intStringLenmapvalue < 0 {
return ErrInvalidLengthApi
}
postStringIndexmapvalue := iNdEx + intStringLenmapvalue
if postStringIndexmapvalue > l {
return io.ErrUnexpectedEOF
}
mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue])
iNdEx = postStringIndexmapvalue
m.Sysctls[mapkey] = mapvalue
} else {
var mapvalue string
m.Sysctls[mapkey] = mapvalue
}
iNdEx = postIndex
default: default:
iNdEx = preIndex iNdEx = preIndex
skippy, err := skipApi(dAtA[iNdEx:]) skippy, err := skipApi(dAtA[iNdEx:])
@ -21646,12 +21797,12 @@ var (
func init() { proto.RegisterFile("api.proto", fileDescriptorApi) } func init() { proto.RegisterFile("api.proto", fileDescriptorApi) }
var fileDescriptorApi = []byte{ var fileDescriptorApi = []byte{
// 3756 bytes of a gzipped FileDescriptorProto // 3782 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x3b, 0x4d, 0x6f, 0x1b, 0x57, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x3b, 0x4d, 0x6f, 0x1b, 0x57,
0x92, 0x22, 0x29, 0x51, 0x64, 0x51, 0xfc, 0xd0, 0xd3, 0x17, 0x45, 0xd9, 0xb2, 0xd4, 0x89, 0x63, 0x92, 0x22, 0x29, 0x51, 0x64, 0x51, 0xfc, 0xd0, 0xd3, 0x17, 0x45, 0xd9, 0xb2, 0xd4, 0x89, 0x63,
0x5b, 0xd9, 0xc8, 0x6b, 0xd9, 0x1b, 0x7b, 0x9d, 0xd8, 0x31, 0x2d, 0xc9, 0x86, 0x62, 0x5b, 0xd6, 0x5b, 0xd9, 0xc8, 0x6b, 0xd9, 0x1b, 0x7b, 0x9d, 0xd8, 0x31, 0x2d, 0xc9, 0x86, 0x62, 0x5b, 0xd6,
0x36, 0xad, 0x6c, 0x76, 0xb3, 0x40, 0x6f, 0x8b, 0xfd, 0x44, 0xb5, 0x4d, 0x76, 0x77, 0xba, 0x9b, 0x36, 0xad, 0x6c, 0x76, 0xb3, 0x40, 0x6f, 0x8b, 0xfd, 0x44, 0xb5, 0x4d, 0x76, 0x77, 0xba, 0x9b,
0x8a, 0xb5, 0xa7, 0xbd, 0x2f, 0x76, 0x11, 0x60, 0x6f, 0x7b, 0x5c, 0x0c, 0x30, 0x40, 0xe6, 0x30, 0x8a, 0xb5, 0xa7, 0xbd, 0x2f, 0x16, 0x08, 0x76, 0x6f, 0x7b, 0x5c, 0x0c, 0x30, 0x40, 0xe6, 0x30,
0x97, 0x39, 0xcf, 0x39, 0xc0, 0x7c, 0x60, 0x6e, 0x33, 0xc7, 0x89, 0x07, 0x98, 0xf3, 0xfc, 0x84, 0x97, 0x39, 0xcf, 0x39, 0xc0, 0x7c, 0x60, 0x6e, 0x33, 0xc7, 0x89, 0x07, 0x98, 0xf3, 0xfc, 0x84,
0xc1, 0xfb, 0xea, 0x7e, 0xfd, 0x45, 0x4b, 0x4e, 0x30, 0xf1, 0x49, 0xfd, 0xea, 0x55, 0xd5, 0xab, 0xc1, 0xfb, 0xea, 0x7e, 0xfd, 0x45, 0x4b, 0x4e, 0x30, 0xf1, 0x49, 0xfd, 0xea, 0x55, 0xd5, 0xab,
0x57, 0x55, 0xaf, 0x5e, 0x55, 0xf1, 0x09, 0xca, 0xba, 0x63, 0xae, 0x3b, 0xae, 0xed, 0xdb, 0xa8, 0x57, 0x55, 0xaf, 0x5e, 0x55, 0xf1, 0x09, 0xca, 0xba, 0x63, 0xae, 0x3b, 0xae, 0xed, 0xdb, 0xa8,
@ -21690,196 +21841,198 @@ var fileDescriptorApi = []byte{
0x85, 0xa2, 0xab, 0x30, 0xe3, 0x0d, 0x1d, 0xa7, 0x8f, 0x07, 0xd8, 0xf2, 0xf5, 0xbe, 0xd6, 0x73, 0x85, 0xa2, 0xab, 0x30, 0xe3, 0x0d, 0x1d, 0xa7, 0x8f, 0x07, 0xd8, 0xf2, 0xf5, 0xbe, 0xd6, 0x73,
0xed, 0xa1, 0xe3, 0x35, 0x27, 0x56, 0x0a, 0x97, 0x0b, 0x2a, 0x92, 0xa7, 0x1e, 0xd2, 0x19, 0xb4, 0xed, 0xa1, 0xe3, 0x35, 0x27, 0x56, 0x0a, 0x97, 0x0b, 0x2a, 0x92, 0xa7, 0x1e, 0xd2, 0x19, 0xb4,
0x0c, 0xe0, 0xb8, 0xe6, 0xb1, 0xd9, 0xc7, 0x3d, 0x6c, 0x34, 0x8b, 0x94, 0xa9, 0x04, 0x51, 0xfe, 0x0c, 0xe0, 0xb8, 0xe6, 0xb1, 0xd9, 0xc7, 0x3d, 0x6c, 0x34, 0x8b, 0x94, 0xa9, 0x04, 0x51, 0xfe,
0x27, 0x07, 0x73, 0x74, 0x3f, 0x7b, 0xb6, 0xc1, 0x95, 0xcb, 0xcf, 0xe0, 0x3b, 0x50, 0xed, 0x52, 0x27, 0x0f, 0x73, 0x74, 0x3f, 0x7b, 0xb6, 0xc1, 0x95, 0xcb, 0xcf, 0xe0, 0x3b, 0x50, 0xed, 0x52,
0xf6, 0x9a, 0xa3, 0xbb, 0xd8, 0xf2, 0xb9, 0x2f, 0x4e, 0x31, 0xe0, 0x1e, 0x85, 0xa1, 0x3d, 0x68, 0xf6, 0x9a, 0xa3, 0xbb, 0xd8, 0xf2, 0xb9, 0x2f, 0x4e, 0x31, 0xe0, 0x1e, 0x85, 0xa1, 0x3d, 0x68,
0x78, 0xdc, 0x16, 0x5a, 0x97, 0x19, 0x83, 0x6b, 0xec, 0x62, 0xb8, 0xe7, 0x11, 0x96, 0x53, 0xeb, 0x78, 0xdc, 0x16, 0x5a, 0x97, 0x19, 0x83, 0x6b, 0xec, 0x62, 0xb8, 0xe7, 0x11, 0x96, 0x53, 0xeb,
0x5e, 0x14, 0xa0, 0xb8, 0x80, 0x42, 0x51, 0x9e, 0x60, 0x5f, 0x37, 0x74, 0x5f, 0x47, 0x08, 0xc6, 0x5e, 0xc2, 0x94, 0x93, 0xde, 0x89, 0xd7, 0xf5, 0xfb, 0xec, 0x10, 0x57, 0x36, 0xfe, 0x2e, 0xc6,
0x69, 0x44, 0x62, 0x32, 0xd0, 0x6f, 0xd4, 0x80, 0xc2, 0x90, 0x7b, 0x5a, 0x59, 0x25, 0x9f, 0xe8, 0x28, 0x2e, 0xe8, 0x7a, 0x87, 0xa1, 0x6f, 0x5b, 0xbe, 0x7b, 0xa2, 0x0a, 0xe2, 0xd6, 0x6d, 0x98,
0x1c, 0x94, 0x03, 0x93, 0xf2, 0xb0, 0x14, 0x02, 0x48, 0x78, 0xd0, 0x7d, 0x1f, 0x0f, 0x1c, 0x9f, 0x92, 0x27, 0x50, 0x03, 0x0a, 0x2f, 0xf0, 0x09, 0xdf, 0x04, 0xf9, 0x0c, 0x5d, 0x8d, 0x1d, 0x21,
0x2a, 0xb7, 0xaa, 0x8a, 0xa1, 0xf2, 0xcb, 0x71, 0x68, 0x24, 0xf6, 0x7f, 0x0b, 0x4a, 0x03, 0xbe, 0x36, 0xb8, 0x9d, 0xbf, 0x95, 0x53, 0x5c, 0x40, 0xe1, 0x2a, 0x4f, 0xb0, 0xaf, 0x1b, 0xba, 0xaf,
0x3c, 0x77, 0xa5, 0x73, 0x52, 0x8c, 0x48, 0x88, 0xa8, 0x06, 0xd8, 0xe4, 0x08, 0x12, 0xe7, 0x96, 0x23, 0x04, 0xe3, 0x34, 0x2a, 0x32, 0x16, 0xf4, 0x9b, 0x70, 0x1d, 0x72, 0x6f, 0x2f, 0xab, 0xe4,
0x42, 0x68, 0x30, 0x26, 0x5a, 0xed, 0xdb, 0x3d, 0xcd, 0x30, 0x5d, 0xdc, 0xf5, 0x6d, 0xf7, 0x84, 0x13, 0x9d, 0x83, 0x72, 0xe0, 0x56, 0x3c, 0x34, 0x86, 0x00, 0x12, 0xa2, 0x74, 0xdf, 0xc7, 0x03,
0x8b, 0x39, 0xd5, 0xb7, 0x7b, 0x5b, 0x02, 0x86, 0x36, 0x00, 0x0c, 0xcb, 0x23, 0x0a, 0x3d, 0x34, 0xc7, 0xa7, 0x06, 0xae, 0xaa, 0x62, 0xa8, 0xfc, 0x72, 0x1c, 0x1a, 0x09, 0x1b, 0xdc, 0x82, 0xd2,
0x7b, 0x54, 0xd8, 0xca, 0xc6, 0x4c, 0xb8, 0x78, 0x10, 0x27, 0xd5, 0xb2, 0x61, 0x79, 0x5c, 0xdc, 0x80, 0x2f, 0xcf, 0xdd, 0xf9, 0x9c, 0x14, 0xa7, 0x12, 0x22, 0xaa, 0x01, 0x36, 0x09, 0x03, 0xe4,
0xdb, 0x50, 0x25, 0x61, 0x47, 0x1b, 0xb0, 0x10, 0xc7, 0x7c, 0xa2, 0xb2, 0x31, 0x27, 0xcb, 0x1c, 0x80, 0x49, 0x61, 0x3c, 0x18, 0x13, 0xcb, 0xf6, 0xed, 0x9e, 0x66, 0x98, 0x2e, 0xee, 0xfa, 0xb6,
0x04, 0x40, 0x75, 0xca, 0x09, 0x07, 0x1e, 0xba, 0x0b, 0x45, 0x7a, 0xee, 0xbd, 0x66, 0x91, 0x12, 0x7b, 0xc2, 0xc5, 0x9c, 0xea, 0xdb, 0xbd, 0x2d, 0x01, 0x43, 0x1b, 0x00, 0x86, 0xe5, 0x11, 0xa3,
0xbd, 0x97, 0xb6, 0x51, 0xb6, 0xce, 0xfa, 0x63, 0x8a, 0xb8, 0x6d, 0xf9, 0xee, 0x89, 0xca, 0xa9, 0x1e, 0x9a, 0x3d, 0x2a, 0x6c, 0x65, 0x63, 0x26, 0x5c, 0x3c, 0x88, 0xd5, 0x6a, 0xd9, 0xb0, 0x3c,
0xd0, 0x13, 0xa8, 0xe8, 0x96, 0x65, 0xfb, 0x3a, 0x3b, 0x32, 0x93, 0x94, 0xc9, 0xfb, 0x23, 0x98, 0x2e, 0xee, 0x6d, 0xa8, 0x92, 0xd0, 0xa7, 0x0d, 0x58, 0x98, 0x65, 0x7e, 0x59, 0xd9, 0x98, 0x93,
0xb4, 0x43, 0x6c, 0xc6, 0x49, 0xa6, 0x47, 0xff, 0x00, 0x13, 0xf4, 0x4c, 0x35, 0x4b, 0x74, 0xe7, 0x65, 0x0e, 0x82, 0xb0, 0x3a, 0xe5, 0x84, 0x03, 0x0f, 0xdd, 0x85, 0x22, 0x8d, 0x3d, 0x5e, 0xb3,
0x17, 0x62, 0x9e, 0x14, 0xe7, 0xa6, 0x32, 0xec, 0xd6, 0x3f, 0x42, 0x45, 0x12, 0x8e, 0xb8, 0xc7, 0x48, 0x89, 0xde, 0x4b, 0xdb, 0x28, 0xb7, 0xf8, 0x63, 0x8a, 0xc8, 0x0c, 0xce, 0xa9, 0xd0, 0x13,
0x0b, 0x7c, 0xc2, 0x3d, 0x86, 0x7c, 0x86, 0xb1, 0x85, 0x19, 0x85, 0x0d, 0x6e, 0xe7, 0x6f, 0xe5, 0xa8, 0xe8, 0x96, 0x65, 0xfb, 0x3a, 0x3b, 0xb6, 0x93, 0x94, 0xc9, 0xfb, 0x23, 0x98, 0xb4, 0x43,
0x5a, 0x77, 0xa1, 0x11, 0x17, 0xe9, 0x2c, 0xf4, 0xca, 0xa7, 0x30, 0xab, 0x0e, 0xad, 0x50, 0x30, 0x6c, 0xc6, 0x49, 0xa6, 0x47, 0xff, 0x00, 0x13, 0xf4, 0x5c, 0x37, 0x4b, 0x74, 0xe7, 0x17, 0x5e,
0x71, 0x31, 0x6f, 0x40, 0x91, 0x1b, 0x91, 0x79, 0x50, 0x2b, 0x5b, 0x27, 0x2a, 0xc7, 0x54, 0xee, 0xe3, 0x84, 0x2a, 0xc3, 0x6e, 0xfd, 0x23, 0x54, 0x24, 0xe1, 0xce, 0xe2, 0x74, 0xad, 0xbb, 0xd0,
0xc0, 0x5c, 0x8c, 0x17, 0xbf, 0xb7, 0xdf, 0x85, 0x9a, 0x63, 0x1b, 0x9a, 0xc7, 0xc0, 0x9a, 0x69, 0x88, 0x8b, 0x74, 0x26, 0xa7, 0xfd, 0x14, 0x66, 0xd5, 0xa1, 0x15, 0x0a, 0x26, 0x92, 0x83, 0x0d,
0x88, 0x13, 0xe9, 0x04, 0xb8, 0x3b, 0x06, 0x21, 0xef, 0xf8, 0xb6, 0x93, 0x94, 0xe5, 0x74, 0xe4, 0x28, 0x72, 0x23, 0x32, 0x0f, 0x6a, 0x65, 0xeb, 0x44, 0xe5, 0x98, 0xca, 0x1d, 0x98, 0x8b, 0xf1,
0x4d, 0x98, 0x8f, 0x93, 0xb3, 0xe5, 0x95, 0x4f, 0x60, 0x41, 0xc5, 0x03, 0xfb, 0x18, 0xbf, 0x29, 0xe2, 0xb9, 0xc3, 0xbb, 0x50, 0x73, 0x6c, 0x43, 0xf3, 0x18, 0x58, 0x33, 0x0d, 0x11, 0x15, 0x9c,
0xeb, 0x16, 0x34, 0x93, 0x0c, 0x42, 0xe6, 0x21, 0xb4, 0xe3, 0xeb, 0xfe, 0xd0, 0x3b, 0x1b, 0xf3, 0x00, 0x77, 0xc7, 0x20, 0xe4, 0x1d, 0xdf, 0x76, 0x92, 0xb2, 0x9c, 0x8e, 0xbc, 0x09, 0xf3, 0x71,
0x2b, 0x32, 0x03, 0x7e, 0x21, 0x31, 0x3e, 0xa8, 0x06, 0x79, 0xd3, 0xe1, 0x44, 0x79, 0xd3, 0x51, 0x72, 0xb6, 0xbc, 0xf2, 0x09, 0x2c, 0xa8, 0x78, 0x60, 0x1f, 0xe3, 0x37, 0x65, 0xdd, 0x82, 0x66,
0xee, 0x41, 0x39, 0xb8, 0x09, 0xd0, 0xf5, 0x30, 0x67, 0xc8, 0xbf, 0xee, 0xbe, 0x08, 0xd2, 0x89, 0x92, 0x41, 0xc8, 0x3c, 0x84, 0x76, 0x7c, 0xdd, 0x1f, 0x7a, 0x67, 0x63, 0x7e, 0x45, 0x66, 0xc0,
0xc7, 0x89, 0x98, 0xc9, 0x97, 0xba, 0x0e, 0x10, 0xc4, 0x1b, 0x71, 0x01, 0xcd, 0xa4, 0x30, 0x54, 0x2f, 0x45, 0xc6, 0x07, 0xd5, 0x20, 0x6f, 0x3a, 0x9c, 0x28, 0x6f, 0x3a, 0xca, 0x3d, 0x28, 0x07,
0x25, 0x34, 0xe5, 0x9b, 0x48, 0xf4, 0x91, 0x84, 0x36, 0x02, 0xa1, 0x8d, 0x48, 0x34, 0xca, 0x9f, 0xb7, 0x11, 0xba, 0x1e, 0xe6, 0x2d, 0xf9, 0xd7, 0xdd, 0x59, 0x41, 0x4a, 0xf3, 0x38, 0x11, 0xb7,
0x29, 0x1a, 0x5d, 0x85, 0x09, 0xcf, 0xd7, 0x7d, 0x16, 0x10, 0x6b, 0xf2, 0xfe, 0xa2, 0x8b, 0x62, 0xf9, 0x52, 0xd7, 0x01, 0x82, 0x78, 0x23, 0x2e, 0xc1, 0x99, 0x14, 0x86, 0xaa, 0x84, 0xa6, 0x7c,
0x95, 0xe1, 0xa1, 0xf3, 0x00, 0x5d, 0x17, 0xeb, 0x3e, 0x36, 0x34, 0x9d, 0x85, 0xca, 0x82, 0x5a, 0x13, 0x89, 0x3e, 0x92, 0xd0, 0x46, 0x20, 0xb4, 0x11, 0x89, 0x46, 0xf9, 0x33, 0x45, 0xa3, 0xab,
0xe6, 0x90, 0xb6, 0x8f, 0x3e, 0x82, 0x49, 0x91, 0x03, 0x4c, 0x50, 0x41, 0x56, 0xd3, 0x38, 0x46, 0x30, 0xe1, 0xf9, 0xba, 0xcf, 0x02, 0x62, 0x4d, 0xde, 0x5f, 0x74, 0x51, 0xac, 0x32, 0x3c, 0x74,
0x4c, 0xa0, 0x0a, 0x8a, 0xf0, 0x68, 0x17, 0x5f, 0x73, 0xb4, 0x39, 0x21, 0xc3, 0x96, 0x02, 0xd4, 0x1e, 0xa0, 0xeb, 0x62, 0xdd, 0xc7, 0x86, 0xa6, 0xb3, 0x50, 0x59, 0x50, 0xcb, 0x1c, 0xd2, 0xf6,
0x64, 0x76, 0x80, 0x62, 0x24, 0xa7, 0x09, 0x50, 0xa5, 0xec, 0x00, 0xc5, 0x99, 0x8c, 0x0c, 0x50, 0xd1, 0x47, 0x30, 0x29, 0xf2, 0x90, 0x09, 0x2a, 0xc8, 0x6a, 0x1a, 0xc7, 0x88, 0x09, 0x54, 0x41,
0x3f, 0x66, 0xa4, 0xd9, 0x85, 0x66, 0xf2, 0xa0, 0xf0, 0x00, 0xb1, 0x01, 0x45, 0x8f, 0x42, 0x46, 0x11, 0x1e, 0xed, 0xe2, 0x6b, 0x8e, 0x36, 0x27, 0x64, 0xd8, 0x52, 0x80, 0x9a, 0xcc, 0x0e, 0x50,
0x45, 0x1b, 0x4e, 0xc3, 0x31, 0x95, 0x87, 0x30, 0x1b, 0x73, 0x03, 0x96, 0x87, 0x05, 0x5e, 0x93, 0x8c, 0xe4, 0x34, 0x01, 0xaa, 0x94, 0x1d, 0xa0, 0x38, 0x93, 0x91, 0x01, 0xea, 0xc7, 0x8c, 0x34,
0x3b, 0x9d, 0xd7, 0x28, 0x7f, 0xc9, 0xc9, 0x5e, 0xfc, 0xc0, 0xec, 0xfb, 0xd8, 0x4d, 0x78, 0xf1, 0xbb, 0xd0, 0x4c, 0x1e, 0x14, 0x1e, 0x20, 0x36, 0xa0, 0xe8, 0x51, 0xc8, 0xa8, 0x68, 0xc3, 0x69,
0x0d, 0xc1, 0x95, 0xb9, 0xf0, 0x72, 0x26, 0x57, 0x96, 0x21, 0x71, 0x87, 0x7c, 0x06, 0x35, 0x6a, 0x38, 0xa6, 0xf2, 0x10, 0x66, 0x63, 0x6e, 0xc0, 0x72, 0xc1, 0xc0, 0x6b, 0x72, 0xa7, 0xf3, 0x1a,
0x47, 0xcd, 0xc3, 0x7d, 0x7a, 0x43, 0xd2, 0xf4, 0xbe, 0xb2, 0xf1, 0x41, 0x1a, 0x39, 0x5b, 0x99, 0xe5, 0x2f, 0x39, 0xd9, 0x8b, 0x1f, 0x98, 0x7d, 0x1f, 0xbb, 0x09, 0x2f, 0xbe, 0x21, 0xb8, 0x32,
0x79, 0x41, 0x87, 0xe3, 0x33, 0x13, 0x56, 0xfb, 0x32, 0xac, 0x75, 0x0f, 0x50, 0x12, 0xe9, 0x4c, 0x17, 0x5e, 0xce, 0xe4, 0xca, 0xb2, 0x34, 0xee, 0x90, 0xcf, 0xa0, 0x46, 0xed, 0xa8, 0x79, 0xb8,
0xb6, 0x78, 0x44, 0xc2, 0x00, 0xc9, 0xee, 0x53, 0xc2, 0xfe, 0x21, 0x15, 0x63, 0x94, 0x21, 0x98, 0x4f, 0x6f, 0x48, 0x9e, 0x9d, 0x7c, 0x90, 0x46, 0xce, 0x56, 0x66, 0x5e, 0xd0, 0xe1, 0xf8, 0xcc,
0xa0, 0x2a, 0xc7, 0x54, 0x7e, 0x52, 0x00, 0x08, 0x27, 0xdf, 0xe2, 0xf3, 0x7f, 0x2b, 0x38, 0x8b, 0x84, 0xd5, 0xbe, 0x0c, 0x6b, 0xdd, 0x03, 0x94, 0x44, 0x3a, 0x93, 0x2d, 0x1e, 0x91, 0x30, 0x40,
0x2c, 0xc3, 0x58, 0x49, 0x63, 0x98, 0x7a, 0x0a, 0x1f, 0x46, 0x4f, 0x21, 0xcb, 0x35, 0x2e, 0xa6, 0x2a, 0x8c, 0x94, 0xb0, 0x7f, 0x48, 0xc5, 0x18, 0x65, 0x08, 0x26, 0xa8, 0xca, 0x31, 0x95, 0x9f,
0x92, 0xbf, 0xb5, 0xe7, 0x6f, 0x0b, 0xe6, 0xe3, 0x36, 0xe7, 0xa7, 0x6f, 0x0d, 0x26, 0x4c, 0x1f, 0x14, 0x00, 0xc2, 0xc9, 0xb7, 0xf8, 0xfc, 0xdf, 0x0a, 0xce, 0x22, 0xcb, 0x30, 0x56, 0xd2, 0x18,
0x0f, 0x58, 0xc5, 0x1a, 0xc9, 0xf9, 0x25, 0x64, 0x86, 0xa2, 0xac, 0x42, 0x79, 0x67, 0xa0, 0xf7, 0xa6, 0x9e, 0xc2, 0x87, 0xd1, 0x53, 0xc8, 0x72, 0x8d, 0x8b, 0xa9, 0xe4, 0x6f, 0xed, 0xf9, 0xdb,
0x70, 0xc7, 0xc1, 0x5d, 0xb2, 0x98, 0x49, 0x06, 0x5c, 0x00, 0x36, 0x50, 0x36, 0xa0, 0xf4, 0x08, 0x82, 0xf9, 0xb8, 0xcd, 0xf9, 0xe9, 0x5b, 0x83, 0x09, 0xd3, 0xc7, 0x03, 0x56, 0x35, 0x47, 0xea,
0x9f, 0xb0, 0xc3, 0x78, 0x4a, 0x01, 0x95, 0x5f, 0xe5, 0x60, 0x81, 0xc6, 0xd1, 0x4d, 0x51, 0x2f, 0x0e, 0x09, 0x99, 0xa1, 0x28, 0xab, 0x50, 0xde, 0x19, 0xe8, 0x3d, 0xdc, 0x71, 0x70, 0x97, 0x2c,
0xaa, 0xd8, 0xb3, 0x87, 0x6e, 0x17, 0x7b, 0xd4, 0xaa, 0xce, 0x50, 0x73, 0xb0, 0x6b, 0xda, 0x06, 0x66, 0x92, 0x01, 0x17, 0x80, 0x0d, 0x94, 0x0d, 0x28, 0x3d, 0xc2, 0x27, 0xec, 0x30, 0x9e, 0x52,
0xaf, 0xae, 0xca, 0x5d, 0x67, 0xb8, 0x47, 0x01, 0xa4, 0xa6, 0x24, 0xd3, 0x5f, 0x0e, 0x6d, 0xee, 0x40, 0xe5, 0x57, 0x39, 0x58, 0xa0, 0x71, 0x74, 0x53, 0xd4, 0xac, 0x2a, 0xf6, 0xec, 0xa1, 0xdb,
0x60, 0x05, 0xb5, 0xd4, 0x75, 0x86, 0xff, 0x44, 0xc6, 0x82, 0xd6, 0x3b, 0xd2, 0x5d, 0xec, 0x51, 0xc5, 0x1e, 0xb5, 0xaa, 0x33, 0xd4, 0x1c, 0xec, 0x9a, 0xb6, 0xc1, 0x2b, 0xbc, 0x72, 0xd7, 0x19,
0x3f, 0x62, 0xb4, 0x1d, 0x0a, 0x40, 0xd7, 0x60, 0x6e, 0x80, 0x07, 0xb6, 0x7b, 0xa2, 0xf5, 0xcd, 0xee, 0x51, 0x00, 0xa9, 0x6b, 0xc9, 0xf4, 0x97, 0x43, 0x9b, 0x3b, 0x58, 0x41, 0x2d, 0x75, 0x9d,
0x81, 0xe9, 0x6b, 0xa6, 0xa5, 0x1d, 0x9c, 0xf8, 0xd8, 0xe3, 0xbe, 0x83, 0xd8, 0xe4, 0x63, 0x32, 0xe1, 0x3f, 0x91, 0xb1, 0xa0, 0xf5, 0x8e, 0x74, 0x17, 0x7b, 0xd4, 0x8f, 0x18, 0x6d, 0x87, 0x02,
0xb7, 0x63, 0xdd, 0x27, 0x33, 0x48, 0x81, 0xaa, 0x6d, 0x0f, 0x34, 0xaf, 0x6b, 0xbb, 0x58, 0xd3, 0xd0, 0x35, 0x98, 0x1b, 0xe0, 0x81, 0xed, 0x9e, 0x68, 0x7d, 0x73, 0x60, 0xfa, 0x9a, 0x69, 0x69,
0x8d, 0xe7, 0xf4, 0x2a, 0x29, 0xa8, 0x15, 0xdb, 0x1e, 0x74, 0x08, 0xac, 0x6d, 0x3c, 0x57, 0x74, 0x07, 0x27, 0x3e, 0xf6, 0xb8, 0xef, 0x20, 0x36, 0xf9, 0x98, 0xcc, 0xed, 0x58, 0xf7, 0xc9, 0x0c,
0xa8, 0x46, 0x6a, 0x2d, 0x52, 0x04, 0xd0, 0xa2, 0x8a, 0x17, 0x01, 0xe4, 0x9b, 0xc0, 0x5c, 0xbb, 0x52, 0xa0, 0x6a, 0xdb, 0x03, 0xcd, 0xeb, 0xda, 0x2e, 0xd6, 0x74, 0xe3, 0x39, 0xbd, 0x4a, 0x0a,
0x2f, 0xf4, 0x40, 0xbf, 0x09, 0xcc, 0x3f, 0x71, 0x44, 0x05, 0x40, 0xbf, 0x89, 0xc2, 0xfa, 0xf8, 0x6a, 0xc5, 0xb6, 0x07, 0x1d, 0x02, 0x6b, 0x1b, 0xcf, 0x15, 0x1d, 0xaa, 0x91, 0x7a, 0x8f, 0x14,
0x98, 0x17, 0xbc, 0x65, 0x95, 0x0d, 0x14, 0x03, 0x60, 0x53, 0x77, 0xf4, 0x03, 0xb3, 0x6f, 0xfa, 0x01, 0xb4, 0xb0, 0xe3, 0x45, 0x00, 0xf9, 0x26, 0x30, 0xd7, 0xee, 0x0b, 0x3d, 0xd0, 0x6f, 0x02,
0x27, 0xe8, 0x0a, 0x34, 0x74, 0xc3, 0xd0, 0xba, 0x02, 0x62, 0x62, 0xd1, 0x7e, 0xa8, 0xeb, 0x86, 0xf3, 0x4f, 0x1c, 0x51, 0x01, 0xd0, 0x6f, 0xa2, 0xb0, 0x3e, 0x3e, 0xe6, 0x45, 0x77, 0x59, 0x65,
0xb1, 0x29, 0x81, 0xd1, 0xfb, 0x30, 0x6d, 0xb8, 0xb6, 0x13, 0xc5, 0x65, 0xfd, 0x88, 0x06, 0x99, 0x03, 0xc5, 0x00, 0xd8, 0xd4, 0x1d, 0xfd, 0xc0, 0xec, 0x9b, 0xfe, 0x09, 0xba, 0x02, 0x0d, 0xdd,
0x90, 0x91, 0x95, 0x3f, 0x17, 0xe0, 0x7c, 0xd4, 0x2c, 0xf1, 0xfa, 0xf5, 0x16, 0x4c, 0xc5, 0x56, 0x30, 0xb4, 0xae, 0x80, 0x98, 0x58, 0xb4, 0x40, 0xea, 0xba, 0x61, 0x6c, 0x4a, 0x60, 0xf4, 0x3e,
0x8d, 0x95, 0x8d, 0xa1, 0x94, 0x6a, 0x04, 0x33, 0x56, 0xdf, 0xe5, 0xe3, 0xf5, 0x5d, 0x7a, 0x65, 0x4c, 0x1b, 0xae, 0xed, 0x44, 0x71, 0x59, 0x4f, 0xa4, 0x41, 0x26, 0x64, 0x64, 0xe5, 0xcf, 0x05,
0x5c, 0xf8, 0x41, 0x2a, 0xe3, 0xf1, 0xef, 0x55, 0x19, 0x4f, 0x9c, 0xae, 0x32, 0x7e, 0x8f, 0xf6, 0x38, 0x1f, 0x35, 0x4b, 0xbc, 0x86, 0xbe, 0x05, 0x53, 0xb1, 0x55, 0x63, 0xa5, 0x6b, 0x28, 0xa5,
0x9b, 0x04, 0x15, 0x2d, 0xa9, 0x8a, 0xac, 0x27, 0x12, 0xe0, 0x58, 0xa2, 0x2f, 0x15, 0xab, 0xa0, 0x1a, 0xc1, 0x8c, 0xd5, 0x98, 0xf9, 0x78, 0x8d, 0x99, 0x5e, 0x9d, 0x17, 0x7e, 0x90, 0xea, 0x7c,
0x27, 0xcf, 0x52, 0x41, 0x97, 0x32, 0x2b, 0x68, 0xe2, 0x15, 0x8e, 0xa3, 0xbb, 0x03, 0xdb, 0xd5, 0xfc, 0x7b, 0x55, 0xe7, 0x13, 0xa7, 0xab, 0xce, 0xdf, 0xa3, 0x3d, 0x2f, 0x41, 0x45, 0x4b, 0xaa,
0x1c, 0xd7, 0x3e, 0x34, 0xfb, 0xb8, 0x59, 0xa6, 0x22, 0xd4, 0x05, 0x7c, 0x8f, 0x81, 0x95, 0x9f, 0x22, 0xeb, 0xcb, 0x04, 0x38, 0x96, 0xe8, 0x8d, 0xc5, 0xaa, 0xf8, 0xc9, 0xb3, 0x54, 0xf1, 0xa5,
0xe5, 0x60, 0x36, 0x6a, 0x68, 0x5e, 0x9c, 0x7d, 0x02, 0x65, 0x57, 0x9c, 0x44, 0x6e, 0xdc, 0xd5, 0xcc, 0x2a, 0x9e, 0x78, 0x85, 0xe3, 0xe8, 0xee, 0xc0, 0x76, 0x35, 0xc7, 0xb5, 0x0f, 0xcd, 0x3e,
0x58, 0xea, 0x93, 0x3c, 0xb2, 0x6a, 0x48, 0x83, 0xd4, 0xcc, 0x3a, 0xfb, 0x52, 0x16, 0x9f, 0xd7, 0x6e, 0x96, 0xa9, 0x08, 0x75, 0x01, 0xdf, 0x63, 0x60, 0xe5, 0x67, 0x39, 0x98, 0x8d, 0x1a, 0x9a,
0x56, 0xda, 0x6d, 0x98, 0x0e, 0x90, 0x47, 0x16, 0xda, 0x52, 0xe1, 0x9c, 0x8f, 0x16, 0xce, 0x16, 0x17, 0x67, 0x9f, 0x40, 0xd9, 0x15, 0x27, 0x91, 0x1b, 0x77, 0x35, 0x96, 0xfa, 0x24, 0x8f, 0xac,
0x14, 0xb7, 0xf0, 0xb1, 0xd9, 0xc5, 0x3f, 0x48, 0xeb, 0x6a, 0x05, 0x2a, 0x0e, 0x76, 0x07, 0xa6, 0x1a, 0xd2, 0x20, 0x35, 0xb3, 0xd6, 0xbf, 0x94, 0xc5, 0xe7, 0x75, 0xd5, 0xbe, 0xd2, 0x86, 0xe9,
0xe7, 0x05, 0x5e, 0x5a, 0x56, 0x65, 0x90, 0xf2, 0xdd, 0x04, 0xd4, 0xe3, 0xba, 0xbd, 0x99, 0xa8, 0x00, 0x79, 0x64, 0xa1, 0x2d, 0x15, 0xce, 0xf9, 0x68, 0xe1, 0x6c, 0x41, 0x71, 0x0b, 0x1f, 0x9b,
0xd3, 0x97, 0xa4, 0x73, 0x13, 0xdf, 0xa0, 0x74, 0x31, 0x5e, 0x11, 0x71, 0x37, 0x1f, 0xcf, 0xd3, 0x5d, 0xfc, 0x83, 0xb4, 0xcf, 0x56, 0xa0, 0xe2, 0x60, 0x77, 0x60, 0x7a, 0x5e, 0xe0, 0xa5, 0x65,
0x83, 0xd8, 0xcc, 0x83, 0x31, 0xd1, 0x40, 0xd7, 0x1e, 0x0c, 0x74, 0xcb, 0x10, 0x9d, 0x45, 0x3e, 0x55, 0x06, 0x29, 0xdf, 0x4d, 0x40, 0x3d, 0xae, 0xdb, 0x9b, 0x89, 0x3a, 0x7d, 0x49, 0x3a, 0x37,
0x24, 0xfa, 0xd2, 0xdd, 0x1e, 0x39, 0x0c, 0x04, 0x4c, 0xbf, 0xd1, 0x05, 0xa8, 0x90, 0x64, 0xd7, 0xf1, 0x0d, 0x4a, 0x17, 0xe3, 0x15, 0x11, 0x77, 0xf3, 0xf1, 0x3c, 0x3d, 0x88, 0xcd, 0x3c, 0x18,
0xb4, 0x68, 0x9d, 0x4f, 0x3d, 0xbd, 0xac, 0x02, 0x07, 0x6d, 0x99, 0xc4, 0xa9, 0xc7, 0xb1, 0x75, 0x13, 0x0d, 0x74, 0xed, 0xc1, 0x40, 0xb7, 0x0c, 0xd1, 0xdd, 0xe4, 0x43, 0xa2, 0x2f, 0xdd, 0xed,
0x2c, 0x6e, 0x40, 0xa9, 0xf5, 0x28, 0x22, 0xbe, 0x4a, 0xe7, 0xd1, 0x25, 0x28, 0x0e, 0xec, 0xa1, 0x91, 0xc3, 0x40, 0xc0, 0xf4, 0x1b, 0x5d, 0x80, 0x0a, 0x49, 0x76, 0x4d, 0x8b, 0xd6, 0xf9, 0xd4,
0xe5, 0x8b, 0xb4, 0xb7, 0x1e, 0x62, 0xd2, 0x86, 0xa1, 0xca, 0xa7, 0xd1, 0x1a, 0x4c, 0x1a, 0xd4, 0xd3, 0xcb, 0x2a, 0x70, 0xd0, 0x96, 0x49, 0x9c, 0x7a, 0x1c, 0x5b, 0xc7, 0xe2, 0x06, 0x94, 0xda,
0x0e, 0x22, 0xb7, 0x6d, 0x48, 0xdd, 0x02, 0x3a, 0xa1, 0x0a, 0x04, 0x74, 0x27, 0xb8, 0xbf, 0xcb, 0x9f, 0x22, 0xe2, 0xab, 0x74, 0x1e, 0x5d, 0x82, 0xe2, 0xc0, 0x1e, 0x5a, 0xbe, 0x48, 0x7b, 0xeb,
0xf1, 0x0b, 0x38, 0xa6, 0xda, 0xd4, 0x4b, 0xfc, 0x71, 0xf4, 0x12, 0x07, 0xca, 0x63, 0x2d, 0x9b, 0x21, 0x26, 0x6d, 0x5a, 0xaa, 0x7c, 0x1a, 0xad, 0xc1, 0xa4, 0x41, 0xed, 0x20, 0x72, 0xdb, 0x86,
0xc7, 0xe8, 0x52, 0x7f, 0x11, 0x4a, 0x7d, 0xbb, 0xc7, 0xdc, 0xa1, 0xc2, 0x9a, 0xd1, 0x7d, 0xbb, 0xd4, 0x2d, 0xa0, 0x13, 0xaa, 0x40, 0x40, 0x77, 0x82, 0xfb, 0xbb, 0x1c, 0xbf, 0x80, 0x63, 0xaa,
0x47, 0xbd, 0x61, 0x96, 0xe4, 0x2d, 0x86, 0x69, 0x35, 0xa7, 0xe8, 0x39, 0x66, 0x03, 0x72, 0x15, 0x4d, 0xbd, 0xc4, 0x1f, 0x47, 0x2f, 0x71, 0xa0, 0x3c, 0xd6, 0xb2, 0x79, 0x8c, 0x2e, 0xf5, 0x17,
0xd1, 0x0f, 0xcd, 0xb6, 0xba, 0xb8, 0x59, 0xa5, 0x53, 0x65, 0x0a, 0x79, 0x6a, 0x75, 0xe9, 0x4d, 0xa1, 0xd4, 0xb7, 0x7b, 0xcc, 0x1d, 0x2a, 0xac, 0x21, 0xde, 0xb7, 0x7b, 0xd4, 0x1b, 0x66, 0x49,
0xe9, 0xfb, 0x27, 0xcd, 0x1a, 0x85, 0x93, 0x4f, 0x92, 0x72, 0xb2, 0x8a, 0xa3, 0x1e, 0x4f, 0x39, 0xde, 0x62, 0x98, 0x56, 0x73, 0x8a, 0x9e, 0x63, 0x36, 0x20, 0x57, 0x11, 0xfd, 0xd0, 0x6c, 0xab,
0xd3, 0x4e, 0xea, 0x5b, 0xd0, 0x4b, 0xf8, 0x45, 0x0e, 0xe6, 0x37, 0x69, 0xb6, 0x25, 0x85, 0x84, 0x8b, 0x9b, 0x55, 0x3a, 0x55, 0xa6, 0x90, 0xa7, 0x56, 0x97, 0xde, 0x94, 0xbe, 0x7f, 0xd2, 0xac,
0x33, 0x94, 0xc2, 0xe8, 0x5a, 0xd0, 0x74, 0x48, 0x54, 0xb4, 0xf1, 0xdd, 0x72, 0x44, 0xd4, 0x86, 0x51, 0x38, 0xf9, 0x24, 0x29, 0x27, 0xab, 0x38, 0xea, 0xf1, 0x94, 0x33, 0xed, 0xa4, 0xbe, 0x05,
0x9a, 0x60, 0xca, 0x49, 0x0b, 0xaf, 0xed, 0x57, 0x54, 0x3d, 0x79, 0xa8, 0x7c, 0x0c, 0x0b, 0x09, 0xbd, 0x84, 0x5f, 0xe4, 0x60, 0x7e, 0x93, 0x66, 0x5b, 0x52, 0x48, 0x38, 0x43, 0x29, 0x8c, 0xae,
0xa9, 0x79, 0x66, 0xb4, 0x0a, 0x53, 0x61, 0x6c, 0x08, 0x84, 0xae, 0x04, 0xb0, 0x1d, 0x43, 0xb9, 0x05, 0x4d, 0x87, 0x44, 0x45, 0x1b, 0xdf, 0x2d, 0x47, 0x44, 0x6d, 0xa8, 0x09, 0xa6, 0x9c, 0xb4,
0x0d, 0x73, 0x1d, 0x5f, 0x77, 0xfd, 0xc4, 0x96, 0x4f, 0x41, 0x4b, 0x5b, 0x16, 0x51, 0x5a, 0xde, 0xf0, 0xda, 0x7e, 0x45, 0xd5, 0x93, 0x87, 0xca, 0xc7, 0xb0, 0x90, 0x90, 0x9a, 0x67, 0x46, 0xab,
0x55, 0xe8, 0xc0, 0x6c, 0xc7, 0xb7, 0x9d, 0x37, 0x60, 0x4a, 0x4e, 0xbc, 0x6f, 0x0e, 0xb0, 0x3d, 0x30, 0x15, 0xc6, 0x86, 0x40, 0xe8, 0x4a, 0x00, 0xdb, 0x31, 0x94, 0xdb, 0x30, 0xd7, 0xf1, 0x75,
0xf4, 0x79, 0x36, 0x24, 0x86, 0xca, 0x02, 0x6b, 0xb0, 0x24, 0x57, 0xfb, 0x08, 0xe6, 0x59, 0x7f, 0xd7, 0x4f, 0x6c, 0xf9, 0x14, 0xb4, 0xb4, 0x65, 0x11, 0xa5, 0xe5, 0x5d, 0x85, 0x0e, 0xcc, 0x76,
0xe3, 0x4d, 0x36, 0xb1, 0x28, 0xba, 0x2b, 0x49, 0xbe, 0xdb, 0x30, 0x13, 0x06, 0xf5, 0xb0, 0x42, 0x7c, 0xdb, 0x79, 0x03, 0xa6, 0xe4, 0xc4, 0xfb, 0xe6, 0x00, 0xdb, 0x43, 0x9f, 0x67, 0x43, 0x62,
0x5b, 0x8f, 0x56, 0x68, 0xcd, 0x14, 0x2b, 0x47, 0x0a, 0xb4, 0xff, 0xcd, 0x4b, 0xb1, 0x33, 0xa3, 0xa8, 0x2c, 0xb0, 0x06, 0x4b, 0x72, 0xb5, 0x8f, 0x60, 0x9e, 0xf5, 0x37, 0xde, 0x64, 0x13, 0x8b,
0x3e, 0xbb, 0x1e, 0xad, 0xcf, 0xce, 0x67, 0xf1, 0x8c, 0x94, 0x67, 0x49, 0xaf, 0x2c, 0xa4, 0x78, 0xa2, 0xbb, 0x92, 0xe4, 0xbb, 0x0d, 0x33, 0x61, 0x50, 0x0f, 0x2b, 0xb4, 0xf5, 0x68, 0x85, 0xd6,
0x65, 0x27, 0x51, 0xc4, 0x8d, 0xd3, 0xd0, 0xf1, 0x77, 0x29, 0x6b, 0xfc, 0x0d, 0x6b, 0xb8, 0x4f, 0x4c, 0xb1, 0x72, 0xa4, 0x40, 0xfb, 0xdf, 0xbc, 0x14, 0x3b, 0x33, 0xea, 0xb3, 0xeb, 0xd1, 0xfa,
0x59, 0x0d, 0x17, 0x2c, 0x1d, 0xb4, 0x9d, 0xae, 0xc5, 0x6a, 0xb8, 0xc5, 0x4c, 0x39, 0x83, 0x12, 0xec, 0x7c, 0x16, 0xcf, 0x48, 0x79, 0x96, 0xf4, 0xca, 0x42, 0x8a, 0x57, 0x76, 0x12, 0x45, 0xdc,
0xee, 0xbf, 0xc7, 0xa1, 0x1c, 0xcc, 0x25, 0x74, 0x9b, 0x54, 0x53, 0x3e, 0x45, 0x4d, 0xf2, 0x6d, 0x78, 0xbc, 0xc5, 0x1c, 0x93, 0xee, 0x6f, 0x52, 0xc3, 0x7d, 0xca, 0x6a, 0xb8, 0x60, 0xe9, 0xa0,
0x56, 0x78, 0xa3, 0xdb, 0x6c, 0xfc, 0xb5, 0xb7, 0xd9, 0x12, 0x94, 0xe9, 0x87, 0xe6, 0xe2, 0x43, 0xed, 0x74, 0x2d, 0x56, 0xc3, 0x2d, 0x66, 0xca, 0x19, 0x94, 0x70, 0xff, 0x3d, 0x0e, 0xe5, 0x60,
0x7e, 0x3b, 0x95, 0x28, 0x40, 0xc5, 0x87, 0xa1, 0x5b, 0x15, 0x4f, 0xe5, 0x56, 0xb1, 0x6a, 0x71, 0x2e, 0xa1, 0xdb, 0xa4, 0x9a, 0xf2, 0x29, 0x6a, 0x92, 0x6f, 0xb3, 0xc2, 0x1b, 0xdd, 0x66, 0xe3,
0x32, 0x5e, 0x2d, 0xde, 0x0c, 0x6e, 0x1b, 0x76, 0x31, 0x5d, 0x48, 0xe1, 0x97, 0x7a, 0xcf, 0x3c, 0xaf, 0xbd, 0xcd, 0x96, 0xa0, 0x4c, 0x3f, 0x34, 0x17, 0x1f, 0xf2, 0xdb, 0xa9, 0x44, 0x01, 0x2a,
0x88, 0xde, 0x33, 0xec, 0xae, 0x7a, 0x37, 0x8d, 0xfa, 0xad, 0xad, 0x15, 0x9f, 0xb0, 0x5a, 0x51, 0x3e, 0x0c, 0xdd, 0xaa, 0x78, 0x2a, 0xb7, 0x8a, 0x55, 0x8b, 0x93, 0xf1, 0x6a, 0xf1, 0x66, 0x70,
0xf6, 0x2d, 0x1e, 0x11, 0xaf, 0x03, 0x04, 0x87, 0x5f, 0x14, 0x8c, 0x33, 0x29, 0x7b, 0x53, 0x25, 0xdb, 0xb0, 0x8b, 0xe9, 0x42, 0x0a, 0xbf, 0xd4, 0x7b, 0xe6, 0x41, 0xf4, 0x9e, 0x61, 0x77, 0xd5,
0x34, 0x12, 0x5f, 0x22, 0x26, 0x08, 0x5b, 0xa4, 0xa7, 0x88, 0x2f, 0xbf, 0x96, 0x33, 0xa7, 0x8c, 0xbb, 0x69, 0xd4, 0x6f, 0x6d, 0xad, 0xf8, 0x84, 0xd5, 0x8a, 0xb2, 0x6f, 0xf1, 0x88, 0x78, 0x1d,
0x1e, 0xe3, 0xcd, 0x44, 0x8f, 0xe1, 0x94, 0xbe, 0xb7, 0x1e, 0x6d, 0x31, 0x9c, 0xd1, 0x67, 0x12, 0x20, 0x38, 0xfc, 0xa2, 0x60, 0x9c, 0x49, 0xd9, 0x9b, 0x2a, 0xa1, 0x91, 0xf8, 0x12, 0x31, 0x41,
0x1d, 0x06, 0x7a, 0xc7, 0xeb, 0x2e, 0x9f, 0x66, 0x95, 0x61, 0x99, 0x43, 0xda, 0x3e, 0x49, 0xaf, 0xd8, 0x22, 0x3d, 0x45, 0x7c, 0xf9, 0xb5, 0x9c, 0x39, 0x65, 0xf4, 0x18, 0x6f, 0x26, 0x7a, 0x0c,
0x0e, 0x4d, 0xcb, 0xf4, 0x8e, 0xd8, 0x7c, 0x91, 0xce, 0x83, 0x00, 0xb5, 0xe9, 0xcf, 0xb0, 0xf8, 0xa7, 0xf4, 0xbd, 0xf5, 0x68, 0x8b, 0xe1, 0x8c, 0x3e, 0x93, 0xe8, 0x30, 0xd0, 0x3b, 0x5e, 0x77,
0xa5, 0xe9, 0x6b, 0x5d, 0xdb, 0xc0, 0xd4, 0x23, 0x27, 0xd4, 0x12, 0x01, 0x6c, 0xda, 0x06, 0x0e, 0xf9, 0x34, 0xab, 0x0c, 0xcb, 0x1c, 0xd2, 0xf6, 0x49, 0x7a, 0x75, 0x68, 0x5a, 0xa6, 0x77, 0xc4,
0xcf, 0x49, 0xe9, 0x6c, 0xe7, 0xa4, 0x1c, 0x3b, 0x27, 0xf3, 0x50, 0x74, 0xb1, 0xee, 0xd9, 0x56, 0xe6, 0x8b, 0x74, 0x1e, 0x04, 0xa8, 0x4d, 0x7f, 0x0a, 0xc6, 0x2f, 0x4d, 0x5f, 0xeb, 0xda, 0x06,
0x13, 0xd8, 0xaf, 0xb9, 0x6c, 0x44, 0x2e, 0x8e, 0x01, 0xf6, 0x3c, 0xb2, 0x02, 0x4f, 0x68, 0xf8, 0xa6, 0x1e, 0x39, 0xa1, 0x96, 0x08, 0x60, 0xd3, 0x36, 0x70, 0x78, 0x4e, 0x4a, 0x67, 0x3b, 0x27,
0x50, 0x4a, 0xbc, 0xa6, 0x32, 0x13, 0xaf, 0x11, 0x3d, 0xcc, 0x58, 0xe2, 0x55, 0xcd, 0x4c, 0xbc, 0xe5, 0xd8, 0x39, 0x99, 0x87, 0xa2, 0x8b, 0x75, 0xcf, 0xb6, 0x9a, 0xc0, 0x7e, 0x51, 0x66, 0x23,
0x4e, 0xd3, 0xc2, 0x94, 0x52, 0xcb, 0xda, 0xe8, 0xd4, 0x52, 0xce, 0xd0, 0xea, 0x91, 0x0c, 0xed, 0x72, 0x71, 0x0c, 0xb0, 0xe7, 0x91, 0x15, 0x78, 0x42, 0xc3, 0x87, 0x52, 0xe2, 0x35, 0x95, 0x99,
0xc7, 0x3c, 0x5a, 0x8f, 0x61, 0x21, 0x71, 0x16, 0xf8, 0xd9, 0xba, 0x16, 0xeb, 0x82, 0x2e, 0x66, 0x78, 0x8d, 0xe8, 0x61, 0xc6, 0x12, 0xaf, 0x6a, 0x66, 0xe2, 0x75, 0x9a, 0x16, 0xa6, 0x94, 0x5a,
0xaa, 0x28, 0x68, 0x82, 0xfe, 0x3b, 0xd4, 0xb7, 0x5f, 0xe2, 0x6e, 0xe7, 0xc4, 0xea, 0x9e, 0x21, 0xd6, 0x46, 0xa7, 0x96, 0x72, 0x86, 0x56, 0x8f, 0x64, 0x68, 0x3f, 0xe6, 0xd1, 0x7a, 0x0c, 0x0b,
0x45, 0x68, 0x40, 0xa1, 0x3b, 0x30, 0x78, 0xd5, 0x4f, 0x3e, 0xe5, 0xa4, 0xa1, 0x10, 0x4d, 0x1a, 0x89, 0xb3, 0xc0, 0xcf, 0xd6, 0xb5, 0x58, 0x17, 0x74, 0x31, 0x53, 0x45, 0x41, 0x13, 0xf4, 0xdf,
0x34, 0x68, 0x84, 0x2b, 0x70, 0x41, 0xe7, 0x89, 0xa0, 0x06, 0x41, 0x26, 0xcc, 0xa7, 0x54, 0x3e, 0xa1, 0xbe, 0xfd, 0x12, 0x77, 0x3b, 0x27, 0x56, 0xf7, 0x0c, 0x29, 0x42, 0x03, 0x0a, 0xdd, 0x81,
0xe2, 0x70, 0xec, 0xba, 0x74, 0xdb, 0x0c, 0x8e, 0x5d, 0x37, 0xea, 0xd6, 0x85, 0xa8, 0x5b, 0x2b, 0xc1, 0xab, 0x7e, 0xf2, 0x29, 0x27, 0x0d, 0x85, 0x68, 0xd2, 0xa0, 0x41, 0x23, 0x5c, 0x81, 0x0b,
0xcf, 0xa1, 0x42, 0x16, 0xf8, 0x5e, 0xe2, 0xf3, 0xe4, 0xb9, 0x10, 0x26, 0xcf, 0x41, 0x0e, 0x3e, 0x3a, 0x4f, 0x04, 0x35, 0x08, 0x32, 0x61, 0x3e, 0xa5, 0xf2, 0x11, 0x87, 0x63, 0xd7, 0xa5, 0xdb,
0x2e, 0xe5, 0xe0, 0xca, 0x0a, 0x4c, 0xb1, 0xb5, 0xf8, 0x46, 0x1a, 0x50, 0x18, 0xba, 0x7d, 0x61, 0x66, 0x70, 0xec, 0xba, 0x51, 0xb7, 0x2e, 0x44, 0xdd, 0x5a, 0x79, 0x0e, 0x15, 0xb2, 0xc0, 0xf7,
0xb8, 0xa1, 0xdb, 0x57, 0xfe, 0x15, 0xaa, 0x6d, 0xdf, 0xd7, 0xbb, 0x47, 0x67, 0x90, 0x27, 0x58, 0x12, 0x9f, 0x27, 0xcf, 0x85, 0x30, 0x79, 0x0e, 0x72, 0xf0, 0x71, 0x29, 0x07, 0x57, 0x56, 0x60,
0x2b, 0x2f, 0xe7, 0xfb, 0x09, 0x99, 0x14, 0x05, 0x6a, 0x82, 0x77, 0xe6, 0xfa, 0xbb, 0x80, 0xf6, 0x8a, 0xad, 0xc5, 0x37, 0xd2, 0x80, 0xc2, 0xd0, 0xed, 0x0b, 0xc3, 0x0d, 0xdd, 0xbe, 0xf2, 0xaf,
0x6c, 0xd7, 0x7f, 0x60, 0xbb, 0x5f, 0xe9, 0xae, 0x71, 0xb6, 0xf4, 0x19, 0xc1, 0x38, 0x7f, 0xe1, 0x50, 0x6d, 0xfb, 0xbe, 0xde, 0x3d, 0x3a, 0x83, 0x3c, 0xc1, 0x5a, 0x79, 0x39, 0xdf, 0x4f, 0xc8,
0x51, 0xb8, 0x3c, 0xa1, 0xd2, 0x6f, 0xe5, 0x12, 0xcc, 0x44, 0xf8, 0x65, 0x2e, 0x7c, 0x0b, 0x2a, 0xa4, 0x28, 0x50, 0x13, 0xbc, 0x33, 0xd7, 0xdf, 0x05, 0xb4, 0x67, 0xbb, 0xfe, 0x03, 0xdb, 0xfd,
0x34, 0x8c, 0xf0, 0xfc, 0xea, 0x8a, 0xdc, 0xda, 0x1b, 0x19, 0x6c, 0x94, 0xfb, 0x30, 0x4d, 0x2e, 0x4a, 0x77, 0x8d, 0xb3, 0xa5, 0xcf, 0x08, 0xc6, 0xf9, 0x2b, 0x93, 0xc2, 0xe5, 0x09, 0x95, 0x7e,
0x0b, 0x0a, 0x0f, 0x02, 0xfb, 0x07, 0xb1, 0x24, 0x64, 0x2e, 0xc6, 0x20, 0x96, 0x80, 0xfc, 0x3c, 0x2b, 0x97, 0x60, 0x26, 0xc2, 0x2f, 0x73, 0xe1, 0x5b, 0x50, 0xa1, 0x61, 0x84, 0xe7, 0x57, 0x57,
0x07, 0x13, 0x14, 0x9e, 0x08, 0xed, 0x4b, 0x50, 0x76, 0xb1, 0x63, 0x6b, 0xbe, 0xde, 0x0b, 0xde, 0xe4, 0xd6, 0xde, 0xc8, 0x60, 0xa3, 0xdc, 0x87, 0x69, 0x72, 0x59, 0x50, 0x78, 0x10, 0xd8, 0x3f,
0xcd, 0x10, 0xc0, 0x33, 0xbd, 0xe7, 0xd1, 0x67, 0x3f, 0x64, 0xd2, 0x30, 0x7b, 0xd8, 0xf3, 0xc5, 0x88, 0x25, 0x21, 0x73, 0x31, 0x06, 0xb1, 0x04, 0xe4, 0xe7, 0x39, 0x98, 0xa0, 0xf0, 0x44, 0x68,
0xe3, 0x99, 0x0a, 0x81, 0x6d, 0x31, 0x10, 0x51, 0x8a, 0x67, 0xfe, 0x07, 0x4b, 0x2e, 0xc6, 0x55, 0x5f, 0x82, 0xb2, 0x8b, 0x1d, 0x5b, 0xf3, 0xf5, 0x5e, 0xf0, 0x76, 0x87, 0x00, 0x9e, 0xe9, 0x3d,
0xfa, 0x8d, 0xde, 0x63, 0xbf, 0xbf, 0x8f, 0x6a, 0xe4, 0xd0, 0x5f, 0xe5, 0x5b, 0x50, 0x8a, 0xf5, 0x8f, 0x3e, 0x3d, 0x22, 0x93, 0x86, 0xd9, 0xc3, 0x9e, 0x2f, 0x1e, 0xf0, 0x54, 0x08, 0x6c, 0x8b,
0x6e, 0x82, 0xb1, 0x72, 0x07, 0x90, 0xbc, 0x6b, 0xae, 0xd7, 0x4b, 0x50, 0xa4, 0x4a, 0x11, 0x57, 0x81, 0x88, 0x52, 0x3c, 0xf3, 0x3f, 0x58, 0x72, 0x31, 0xae, 0xd2, 0x6f, 0xf4, 0x1e, 0xfb, 0xfd,
0x63, 0x3d, 0xb6, 0x6d, 0x95, 0x4f, 0x2b, 0x9f, 0x00, 0x62, 0x8a, 0x8c, 0x5c, 0x87, 0x67, 0xd0, 0x7d, 0x54, 0x23, 0x87, 0xfe, 0x2a, 0xdf, 0x82, 0x52, 0xac, 0x77, 0x13, 0x8c, 0x95, 0x3b, 0x80,
0xfa, 0xc7, 0x30, 0x13, 0x61, 0xc0, 0x05, 0xb8, 0x18, 0xe5, 0x90, 0x58, 0x9f, 0x53, 0xff, 0x26, 0xe4, 0x5d, 0x73, 0xbd, 0x5e, 0x82, 0x22, 0x55, 0x8a, 0xb8, 0x1a, 0xeb, 0xb1, 0x6d, 0xab, 0x7c,
0x07, 0xd0, 0x1e, 0xfa, 0x47, 0xbc, 0x13, 0x21, 0x6f, 0x34, 0x17, 0xdd, 0x28, 0x99, 0x73, 0x74, 0x5a, 0xf9, 0x04, 0x10, 0x53, 0x64, 0xe4, 0x3a, 0x3c, 0x83, 0xd6, 0x3f, 0x86, 0x99, 0x08, 0x03,
0xcf, 0xfb, 0xca, 0x76, 0x45, 0xde, 0x17, 0x8c, 0x69, 0x0f, 0x61, 0xe8, 0x1f, 0x89, 0x7e, 0x25, 0x2e, 0xc0, 0xc5, 0x28, 0x87, 0xc4, 0xfa, 0x9c, 0xfa, 0x37, 0x39, 0x80, 0xf6, 0xd0, 0x3f, 0xe2,
0xf9, 0x46, 0x17, 0xa1, 0xc6, 0x9e, 0x3c, 0x69, 0xba, 0x61, 0xb8, 0xd8, 0xf3, 0x78, 0xe3, 0xb2, 0x9d, 0x08, 0x79, 0xa3, 0xb9, 0xe8, 0x46, 0xc9, 0x9c, 0xa3, 0x7b, 0xde, 0x57, 0xb6, 0x2b, 0xf2,
0xca, 0xa0, 0x6d, 0x06, 0x24, 0x68, 0xa6, 0x81, 0x2d, 0xdf, 0xf4, 0x4f, 0x34, 0xdf, 0x7e, 0x81, 0xbe, 0x60, 0x4c, 0x7b, 0x08, 0x43, 0xff, 0x48, 0xf4, 0x2b, 0xc9, 0x37, 0xba, 0x08, 0x35, 0xf6,
0x2d, 0x9e, 0xcf, 0x55, 0x05, 0xf4, 0x19, 0x01, 0x12, 0x34, 0x17, 0xf7, 0x4c, 0xcf, 0x77, 0x05, 0xec, 0x4a, 0xd3, 0x0d, 0xc3, 0xc5, 0x9e, 0xc7, 0x1b, 0x97, 0x55, 0x06, 0x6d, 0x33, 0x20, 0x41,
0x9a, 0x68, 0xa2, 0x71, 0x28, 0x45, 0x53, 0xbe, 0xc9, 0x41, 0x63, 0x6f, 0xd8, 0xef, 0xb3, 0x4d, 0x33, 0x0d, 0x6c, 0xf9, 0xa6, 0x7f, 0xa2, 0xf9, 0xf6, 0x0b, 0x6c, 0xf1, 0x7c, 0xae, 0x2a, 0xa0,
0x9e, 0x59, 0x9b, 0xe8, 0x32, 0xdf, 0x48, 0x3e, 0xee, 0x12, 0xa1, 0x92, 0xf8, 0xf6, 0x7e, 0x80, 0xcf, 0x08, 0x90, 0xa0, 0xb9, 0xb8, 0x67, 0x7a, 0xbe, 0x2b, 0xd0, 0x44, 0x13, 0x8d, 0x43, 0x29,
0x82, 0xf3, 0xef, 0x61, 0x5a, 0x92, 0x95, 0x1b, 0x2e, 0x72, 0x65, 0xe7, 0xa2, 0x57, 0x36, 0xf1, 0x9a, 0xf2, 0x4d, 0x0e, 0x1a, 0x7b, 0xc3, 0x7e, 0x9f, 0x6d, 0xf2, 0xcc, 0xda, 0x44, 0x97, 0xf9,
0x16, 0x56, 0x63, 0xbd, 0xe1, 0xfe, 0x94, 0x39, 0x98, 0x89, 0x30, 0xe0, 0x05, 0xda, 0x1a, 0x54, 0x46, 0xf2, 0x71, 0x97, 0x08, 0x95, 0xc4, 0xb7, 0xf7, 0x03, 0x14, 0x9c, 0x7f, 0x0f, 0xd3, 0x92,
0xf9, 0xcf, 0x9d, 0xdc, 0x11, 0x16, 0xa1, 0x44, 0x02, 0x4d, 0xd7, 0x34, 0x44, 0xb3, 0x7a, 0xd2, 0xac, 0xdc, 0x70, 0x91, 0x2b, 0x3b, 0x17, 0xbd, 0xb2, 0x89, 0xb7, 0xb0, 0x1a, 0xeb, 0x0d, 0xf7,
0xb1, 0x8d, 0x4d, 0xd3, 0x70, 0x95, 0xa7, 0x50, 0x55, 0xd9, 0xdb, 0x37, 0x8e, 0x7b, 0x17, 0x6a, 0xa7, 0xcc, 0xc1, 0x4c, 0x84, 0x01, 0x2f, 0xd0, 0xd6, 0xa0, 0xca, 0x7f, 0xee, 0xe4, 0x8e, 0xb0,
0xfc, 0xc7, 0x51, 0x2d, 0xf2, 0x54, 0x40, 0xea, 0xab, 0x46, 0x98, 0xab, 0x55, 0x4b, 0x1e, 0x2a, 0x08, 0x25, 0x12, 0x68, 0xba, 0xa6, 0x21, 0x9a, 0xd5, 0x93, 0x8e, 0x6d, 0x6c, 0x9a, 0x86, 0xab,
0xff, 0x06, 0xad, 0x7d, 0xc7, 0x20, 0xc9, 0x95, 0xcc, 0x56, 0x6c, 0xee, 0x2e, 0x88, 0x77, 0x79, 0x3c, 0x85, 0xaa, 0xca, 0xde, 0xdf, 0x71, 0xdc, 0xbb, 0x50, 0xe3, 0x3f, 0x8e, 0x6a, 0x91, 0xa7,
0x99, 0xdc, 0xa3, 0x74, 0x55, 0x57, 0x1e, 0x2a, 0xe7, 0x61, 0x29, 0x95, 0x3b, 0xdf, 0xb9, 0x03, 0x02, 0x52, 0x5f, 0x35, 0xc2, 0x5c, 0xad, 0x5a, 0xf2, 0x50, 0xf9, 0x37, 0x68, 0xed, 0x3b, 0x06,
0x8d, 0x70, 0xc2, 0x30, 0x45, 0x97, 0x9e, 0x76, 0xdf, 0x73, 0x52, 0xf7, 0x7d, 0x3e, 0xb8, 0x93, 0x49, 0xae, 0x64, 0xb6, 0x62, 0x73, 0x77, 0x41, 0xbc, 0x0d, 0xcc, 0xe4, 0x1e, 0xa5, 0xab, 0xba,
0x59, 0x70, 0xe7, 0x23, 0x29, 0x89, 0x2a, 0x64, 0x25, 0x51, 0xe3, 0x91, 0x24, 0x4a, 0x79, 0x14, 0xf2, 0x50, 0x39, 0x0f, 0x4b, 0xa9, 0xdc, 0xf9, 0xce, 0x1d, 0x68, 0x84, 0x13, 0x86, 0x29, 0xba,
0xe8, 0x8f, 0x27, 0xb1, 0xb7, 0x69, 0x2a, 0xcd, 0xd6, 0x16, 0xf1, 0xa2, 0x95, 0xb6, 0x3b, 0x86, 0xf4, 0xb4, 0xfb, 0x9e, 0x93, 0xba, 0xef, 0xf3, 0xc1, 0x9d, 0xcc, 0x82, 0x3b, 0x1f, 0x49, 0x49,
0xa2, 0x4a, 0xd8, 0x4a, 0x1d, 0xaa, 0x91, 0xc8, 0xa1, 0xb4, 0xa1, 0x16, 0x8b, 0x04, 0x57, 0x63, 0x54, 0x21, 0x2b, 0x89, 0x1a, 0x8f, 0x24, 0x51, 0xca, 0xa3, 0x40, 0x7f, 0x3c, 0x89, 0xbd, 0x4d,
0xd9, 0x44, 0x52, 0x71, 0xb1, 0x5c, 0x62, 0x96, 0x87, 0xa4, 0x07, 0xde, 0x8e, 0x75, 0x68, 0x0b, 0x53, 0x69, 0xb6, 0xb6, 0x88, 0x17, 0xad, 0xb4, 0xdd, 0x31, 0x14, 0x55, 0xc2, 0x56, 0xea, 0x50,
0xc6, 0xef, 0x40, 0x65, 0x3f, 0xeb, 0x95, 0xdb, 0xb8, 0xf8, 0xf9, 0xe6, 0xff, 0x0b, 0x50, 0x64, 0x8d, 0x44, 0x0e, 0xa5, 0x0d, 0xb5, 0x58, 0x24, 0xb8, 0x1a, 0xcb, 0x26, 0x92, 0x8a, 0x8b, 0xe5,
0x64, 0x44, 0x31, 0xac, 0x5f, 0xc7, 0xd5, 0xc8, 0x47, 0xf4, 0x72, 0x0a, 0x5b, 0xa7, 0xf4, 0x1b, 0x12, 0xb3, 0x3c, 0x24, 0x3d, 0xf0, 0x76, 0xac, 0x43, 0x5b, 0x30, 0x7e, 0x07, 0x2a, 0xfb, 0x59,
0x7d, 0x0c, 0xb5, 0xae, 0xee, 0xe8, 0x5d, 0x12, 0x03, 0xd8, 0xef, 0x2e, 0x85, 0xf8, 0x65, 0x21, 0x2f, 0xed, 0xc6, 0xc5, 0xcf, 0x37, 0xff, 0x5f, 0x80, 0x22, 0x23, 0x23, 0x8a, 0x61, 0xfd, 0x3a,
0xad, 0xad, 0x56, 0x05, 0x32, 0xfb, 0x25, 0xe6, 0x2e, 0xd4, 0xf5, 0x63, 0xdd, 0xec, 0xeb, 0x07, 0xae, 0x46, 0x3e, 0xa2, 0x97, 0x53, 0xd8, 0x3a, 0xa5, 0xdf, 0xe8, 0x63, 0xa8, 0x75, 0x75, 0x47,
0x7d, 0x2c, 0xfd, 0x6c, 0x93, 0x49, 0x5e, 0x0b, 0xb0, 0x19, 0xfd, 0x0d, 0x80, 0xa1, 0x87, 0x0d, 0xef, 0x92, 0x18, 0xc0, 0x7e, 0x77, 0x29, 0xc4, 0x2f, 0x0b, 0x69, 0x6d, 0xb5, 0x2a, 0x90, 0xd9,
0x4e, 0x3a, 0x31, 0x8a, 0xb4, 0x4c, 0x10, 0x83, 0x55, 0x4d, 0xcb, 0x36, 0xb0, 0xa7, 0x09, 0x69, 0x2f, 0x31, 0x77, 0xa1, 0xae, 0x1f, 0xeb, 0x66, 0x5f, 0x3f, 0xe8, 0x63, 0xe9, 0x67, 0x9b, 0x4c,
0xf8, 0x8b, 0x80, 0xac, 0x55, 0x19, 0xf6, 0x26, 0x47, 0x46, 0xf7, 0xa0, 0xc1, 0xe9, 0x03, 0x71, 0xf2, 0x5a, 0x80, 0xcd, 0xe8, 0x6f, 0x00, 0x0c, 0x3d, 0x6c, 0x70, 0xd2, 0x89, 0x51, 0xa4, 0x65,
0x68, 0xa6, 0x9f, 0xc9, 0x80, 0x2f, 0xd7, 0x16, 0xd8, 0xe8, 0x43, 0xa8, 0x70, 0x0e, 0x44, 0x2a, 0x82, 0x18, 0xac, 0x6a, 0x5a, 0xb6, 0x81, 0x3d, 0x4d, 0x48, 0xc3, 0x5f, 0x04, 0x64, 0xad, 0xca,
0x5e, 0x0d, 0x64, 0x10, 0x03, 0xc3, 0xdc, 0xf7, 0xb0, 0xa1, 0xdc, 0xe3, 0x37, 0x86, 0xb0, 0x2f, 0xb0, 0x37, 0x39, 0x32, 0xba, 0x07, 0x0d, 0x4e, 0x1f, 0x88, 0x43, 0x33, 0xfd, 0x4c, 0x06, 0x7c,
0xf7, 0x93, 0x2b, 0x30, 0x79, 0xe8, 0x69, 0xa6, 0x75, 0x68, 0x73, 0x47, 0x91, 0x3a, 0xb0, 0x1c, 0xb9, 0xb6, 0xc0, 0x46, 0x1f, 0x42, 0x85, 0x73, 0x20, 0x52, 0xf1, 0x6a, 0x20, 0x83, 0x18, 0x18,
0xb5, 0x78, 0x48, 0xff, 0xae, 0x9d, 0x83, 0x92, 0x78, 0x62, 0x8a, 0x26, 0xa1, 0xf0, 0x6c, 0x73, 0xe6, 0xbe, 0x87, 0x0d, 0xe5, 0x1e, 0xbf, 0x31, 0x84, 0x7d, 0xb9, 0x9f, 0x5c, 0x81, 0xc9, 0x43,
0xaf, 0x31, 0x46, 0x3e, 0xf6, 0xb7, 0xf6, 0x1a, 0xb9, 0xb5, 0xdb, 0x50, 0x8f, 0xfd, 0x2e, 0x8b, 0x4f, 0x33, 0xad, 0x43, 0x9b, 0x3b, 0x8a, 0xd4, 0x81, 0xe5, 0xa8, 0xc5, 0x43, 0xfa, 0x77, 0xed,
0xa6, 0xa1, 0xda, 0x69, 0xef, 0x6e, 0xdd, 0x7f, 0xfa, 0xb9, 0xa6, 0x6e, 0xb7, 0xb7, 0xfe, 0xa5, 0x1c, 0x94, 0xc4, 0x33, 0x57, 0x34, 0x09, 0x85, 0x67, 0x9b, 0x7b, 0x8d, 0x31, 0xf2, 0xb1, 0xbf,
0x31, 0x86, 0x66, 0xa1, 0x21, 0x40, 0xbb, 0x4f, 0x9f, 0x31, 0x68, 0x6e, 0xed, 0x05, 0xd4, 0xa2, 0xb5, 0xd7, 0xc8, 0xad, 0xdd, 0x86, 0x7a, 0xec, 0x77, 0x59, 0x34, 0x0d, 0xd5, 0x4e, 0x7b, 0x77,
0x05, 0x17, 0x9a, 0x83, 0xe9, 0xcd, 0xa7, 0xbb, 0xcf, 0xda, 0x3b, 0xbb, 0xdb, 0xaa, 0xb6, 0xa9, 0xeb, 0xfe, 0xd3, 0xcf, 0x35, 0x75, 0xbb, 0xbd, 0xf5, 0x2f, 0x8d, 0x31, 0x34, 0x0b, 0x0d, 0x01,
0x6e, 0xb7, 0x9f, 0x6d, 0x6f, 0x35, 0xc6, 0xa2, 0x60, 0x75, 0x7f, 0x77, 0x77, 0x67, 0xf7, 0x61, 0xda, 0x7d, 0xfa, 0x8c, 0x41, 0x73, 0x6b, 0x2f, 0xa0, 0x16, 0x2d, 0xb8, 0xd0, 0x1c, 0x4c, 0x6f,
0x23, 0x47, 0xb8, 0x86, 0xe0, 0xed, 0xcf, 0x77, 0x08, 0x72, 0x3e, 0x8a, 0xbc, 0xbf, 0xfb, 0x68, 0x3e, 0xdd, 0x7d, 0xd6, 0xde, 0xd9, 0xdd, 0x56, 0xb5, 0x4d, 0x75, 0xbb, 0xfd, 0x6c, 0x7b, 0xab,
0xf7, 0xe9, 0x3f, 0xef, 0x36, 0x0a, 0x1b, 0xbf, 0xad, 0x40, 0x4d, 0x1c, 0x01, 0xec, 0x52, 0xef, 0x31, 0x16, 0x05, 0xab, 0xfb, 0xbb, 0xbb, 0x3b, 0xbb, 0x0f, 0x1b, 0x39, 0xc2, 0x35, 0x04, 0x6f,
0xbc, 0x07, 0x93, 0xe2, 0xf9, 0xaf, 0x54, 0x03, 0x46, 0x1f, 0x2b, 0xb7, 0x16, 0x53, 0x66, 0x78, 0x7f, 0xbe, 0x43, 0x90, 0xf3, 0x51, 0xe4, 0xfd, 0xdd, 0x47, 0xbb, 0x4f, 0xff, 0x79, 0xb7, 0x51,
0x38, 0x19, 0x43, 0x2a, 0x3d, 0xde, 0xd2, 0xef, 0xe0, 0xcb, 0x91, 0xf3, 0x96, 0xf8, 0xa9, 0xbd, 0xd8, 0xf8, 0x6d, 0x05, 0x6a, 0xe2, 0x08, 0x60, 0x97, 0x7a, 0xe7, 0x3d, 0x98, 0x14, 0x4f, 0x90,
0x75, 0x21, 0x73, 0x3e, 0xe0, 0xb9, 0x4f, 0x0e, 0xb5, 0xfc, 0xa4, 0x09, 0x49, 0x44, 0xa9, 0x6f, 0xa5, 0x1a, 0x30, 0xfa, 0x60, 0xba, 0xb5, 0x98, 0x32, 0xc3, 0xc3, 0xc9, 0x18, 0x52, 0xe9, 0xf1,
0xa5, 0x5a, 0x2b, 0xd9, 0x08, 0x01, 0xdb, 0x2f, 0xa0, 0x11, 0x7f, 0xce, 0x84, 0xa4, 0x1f, 0x75, 0x96, 0x7e, 0x07, 0x5f, 0x8e, 0x9c, 0xb7, 0xc4, 0x4f, 0xed, 0xad, 0x0b, 0x99, 0xf3, 0x01, 0xcf,
0x32, 0xde, 0x4a, 0xb5, 0x94, 0x51, 0x28, 0x32, 0xf3, 0xc4, 0x93, 0xa0, 0xd5, 0x11, 0xcf, 0x39, 0x7d, 0x72, 0xa8, 0xe5, 0x27, 0x4d, 0x48, 0x22, 0x4a, 0x7d, 0x2b, 0xd5, 0x5a, 0xc9, 0x46, 0x08,
0x92, 0xcc, 0xb3, 0x5e, 0x89, 0x30, 0x85, 0x44, 0x7f, 0xc3, 0x46, 0x91, 0x77, 0x38, 0x29, 0x2f, 0xd8, 0x7e, 0x01, 0x8d, 0xf8, 0x73, 0x26, 0x24, 0xfd, 0xa8, 0x93, 0xf1, 0x56, 0xaa, 0xa5, 0x8c,
0x1a, 0x64, 0x85, 0xa4, 0xff, 0xfc, 0xad, 0x8c, 0xa1, 0xcf, 0xa1, 0x1e, 0xeb, 0x00, 0x23, 0x89, 0x42, 0x91, 0x99, 0x27, 0x9e, 0x04, 0xad, 0x8e, 0x78, 0xce, 0x91, 0x64, 0x9e, 0xf5, 0x4a, 0x84,
0x2c, 0xbd, 0xa5, 0xdd, 0x5a, 0x1d, 0x81, 0x11, 0xb5, 0xa0, 0xdc, 0xe1, 0x8d, 0x5a, 0x30, 0xa5, 0x29, 0x24, 0xfa, 0x1b, 0x36, 0x8a, 0xbc, 0xc3, 0x49, 0x79, 0xd1, 0x20, 0x2b, 0x24, 0xfd, 0xe7,
0x6f, 0x1c, 0xb5, 0x60, 0x6a, 0x73, 0x98, 0x3a, 0x5b, 0xa4, 0x93, 0x2b, 0x3b, 0x5b, 0x5a, 0xdf, 0x6f, 0x65, 0x0c, 0x7d, 0x0e, 0xf5, 0x58, 0x07, 0x18, 0x49, 0x64, 0xe9, 0x2d, 0xed, 0xd6, 0xea,
0xb8, 0x75, 0x21, 0x73, 0x5e, 0x56, 0x42, 0xac, 0x8f, 0x2b, 0x2b, 0x21, 0xbd, 0x3f, 0xdc, 0x5a, 0x08, 0x8c, 0xa8, 0x05, 0xe5, 0x0e, 0x6f, 0xd4, 0x82, 0x29, 0x7d, 0xe3, 0xa8, 0x05, 0x53, 0x9b,
0x1d, 0x81, 0x11, 0xb7, 0x5a, 0xd8, 0x4d, 0x8a, 0x5b, 0x2d, 0xd1, 0xc3, 0x8c, 0x5b, 0x2d, 0xd9, 0xc3, 0xd4, 0xd9, 0x22, 0x9d, 0x5c, 0xd9, 0xd9, 0xd2, 0xfa, 0xc6, 0xad, 0x0b, 0x99, 0xf3, 0xb2,
0x88, 0xe2, 0x56, 0x8b, 0xf5, 0x85, 0x56, 0xb2, 0x2b, 0xe6, 0x14, 0xab, 0xa5, 0x97, 0xe1, 0xca, 0x12, 0x62, 0x7d, 0x5c, 0x59, 0x09, 0xe9, 0xfd, 0xe1, 0xd6, 0xea, 0x08, 0x8c, 0xb8, 0xd5, 0xc2,
0x18, 0xda, 0x84, 0x92, 0xa8, 0x79, 0x91, 0x74, 0xe8, 0x63, 0x95, 0x76, 0xab, 0x95, 0x36, 0x15, 0x6e, 0x52, 0xdc, 0x6a, 0x89, 0x1e, 0x66, 0xdc, 0x6a, 0xc9, 0x46, 0x14, 0xb7, 0x5a, 0xac, 0x2f,
0x30, 0xb9, 0x09, 0xe3, 0x04, 0x8a, 0xe6, 0xa2, 0x58, 0x82, 0x78, 0x3e, 0x0e, 0x0e, 0x08, 0xef, 0xb4, 0x92, 0x5d, 0x31, 0xa7, 0x58, 0x2d, 0xbd, 0x0c, 0x57, 0xc6, 0xd0, 0x26, 0x94, 0x44, 0xcd,
0x40, 0x91, 0x95, 0x89, 0x48, 0xba, 0xb2, 0x23, 0x45, 0x69, 0xab, 0x99, 0x9c, 0x08, 0xc8, 0x1f, 0x8b, 0xa4, 0x43, 0x1f, 0xab, 0xb4, 0x5b, 0xad, 0xb4, 0xa9, 0x80, 0xc9, 0x4d, 0x18, 0x27, 0x50,
0xb3, 0x7f, 0x18, 0xe0, 0x15, 0x1f, 0x3a, 0x17, 0x7d, 0x46, 0x1b, 0x2d, 0x2c, 0x5b, 0xe7, 0x33, 0x34, 0x17, 0xc5, 0x12, 0xc4, 0xf3, 0x71, 0x70, 0x40, 0x78, 0x07, 0x8a, 0xac, 0x4c, 0x44, 0xd2,
0x66, 0x03, 0x6e, 0x06, 0xcc, 0xa4, 0xa4, 0x51, 0x48, 0x6a, 0x67, 0x66, 0xe7, 0x70, 0xad, 0x8b, 0x95, 0x1d, 0x29, 0x4a, 0x5b, 0xcd, 0xe4, 0x44, 0x40, 0xfe, 0x98, 0xfd, 0xd3, 0x02, 0xaf, 0xf8,
0xaf, 0xc1, 0x92, 0xb7, 0xcc, 0x2d, 0xb8, 0x10, 0xf1, 0x7e, 0xc9, 0x70, 0xcd, 0xe4, 0x84, 0x20, 0xd0, 0xb9, 0xe8, 0x33, 0xda, 0x68, 0x61, 0xd9, 0x3a, 0x9f, 0x31, 0x1b, 0x70, 0x33, 0x60, 0x26,
0xdf, 0xf8, 0xaf, 0x02, 0x4c, 0xb1, 0x94, 0x97, 0x87, 0xf3, 0x1d, 0x80, 0xb0, 0x38, 0x43, 0x4b, 0x25, 0x8d, 0x42, 0x52, 0x3b, 0x33, 0x3b, 0x87, 0x6b, 0x5d, 0x7c, 0x0d, 0x96, 0xbc, 0x65, 0x6e,
0x51, 0x67, 0x8a, 0x14, 0xaa, 0xad, 0x73, 0xe9, 0x93, 0xb2, 0x3a, 0xa5, 0x3a, 0x4b, 0x56, 0x67, 0xc1, 0x85, 0x88, 0xf7, 0x4b, 0x86, 0x6b, 0x26, 0x27, 0x04, 0xf9, 0xc6, 0x7f, 0x15, 0x60, 0x8a,
0xb2, 0x7e, 0x93, 0xd5, 0x99, 0x52, 0x9c, 0x29, 0x63, 0xe8, 0x01, 0x94, 0x83, 0xd4, 0x1f, 0xc9, 0xa5, 0xbc, 0x3c, 0x9c, 0xef, 0x00, 0x84, 0xc5, 0x19, 0x5a, 0x8a, 0x3a, 0x53, 0xa4, 0x50, 0x6d,
0x25, 0x43, 0xac, 0x76, 0x69, 0x2d, 0xa5, 0xce, 0xc9, 0x52, 0x49, 0xf9, 0xbc, 0x2c, 0x55, 0xb2, 0x9d, 0x4b, 0x9f, 0x94, 0xd5, 0x29, 0xd5, 0x59, 0xb2, 0x3a, 0x93, 0xf5, 0x9b, 0xac, 0xce, 0x94,
0x4e, 0x90, 0xa5, 0x4a, 0x2b, 0x02, 0xc2, 0x3d, 0xf2, 0x14, 0x2e, 0xbe, 0xc7, 0x48, 0x42, 0x98, 0xe2, 0x4c, 0x19, 0x43, 0x0f, 0xa0, 0x1c, 0xa4, 0xfe, 0x48, 0x2e, 0x19, 0x62, 0xb5, 0x4b, 0x6b,
0xd8, 0x63, 0x34, 0x9d, 0x50, 0xc6, 0xee, 0x9f, 0xfb, 0xf6, 0xbb, 0xe5, 0xdc, 0x1f, 0xbe, 0x5b, 0x29, 0x75, 0x4e, 0x96, 0x4a, 0xca, 0xe7, 0x65, 0xa9, 0x92, 0x75, 0x82, 0x2c, 0x55, 0x5a, 0x11,
0x1e, 0xfb, 0xcf, 0x57, 0xcb, 0xb9, 0x6f, 0x5f, 0x2d, 0xe7, 0x7e, 0xf7, 0x6a, 0x39, 0xf7, 0xc7, 0x10, 0xee, 0x91, 0xa7, 0x70, 0xf1, 0x3d, 0x46, 0x12, 0xc2, 0xc4, 0x1e, 0xa3, 0xe9, 0x84, 0x32,
0x57, 0xcb, 0xb9, 0xaf, 0xff, 0xb4, 0x3c, 0x76, 0x50, 0xa4, 0xff, 0x9a, 0x72, 0xfd, 0xaf, 0x01, 0x76, 0xff, 0xdc, 0xb7, 0xdf, 0x2d, 0xe7, 0xfe, 0xf0, 0xdd, 0xf2, 0xd8, 0x7f, 0xbe, 0x5a, 0xce,
0x00, 0x00, 0xff, 0xff, 0x1c, 0xf9, 0xa7, 0x78, 0x50, 0x34, 0x00, 0x00, 0x7d, 0xfb, 0x6a, 0x39, 0xf7, 0xbb, 0x57, 0xcb, 0xb9, 0x3f, 0xbe, 0x5a, 0xce, 0x7d, 0xfd, 0xa7,
0xe5, 0xb1, 0x83, 0x22, 0xfd, 0xf7, 0x98, 0xeb, 0x7f, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x28,
0x3f, 0xad, 0xd4, 0x34, 0x00, 0x00,
} }

View File

@ -205,6 +205,8 @@ message LinuxPodSandboxConfig {
string cgroup_parent = 1; string cgroup_parent = 1;
// LinuxSandboxSecurityContext holds sandbox security attributes. // LinuxSandboxSecurityContext holds sandbox security attributes.
LinuxSandboxSecurityContext security_context = 2; LinuxSandboxSecurityContext security_context = 2;
// Sysctls holds linux sysctls config for the sandbox.
map<string, string> sysctls = 3;
} }
// PodSandboxMetadata holds all necessary information for building the sandbox name. // PodSandboxMetadata holds all necessary information for building the sandbox name.
@ -290,16 +292,6 @@ message PodSandboxConfig {
// local seccomp profile root. Note that profile root is set in // local seccomp profile root. Note that profile root is set in
// kubelet, and it is not passed in CRI yet, see https://issues.k8s.io/36997. // kubelet, and it is not passed in CRI yet, see https://issues.k8s.io/36997.
// //
// 2. Sysctls
//
// key: security.alpha.kubernetes.io/sysctls
// description: list of safe sysctls which are set for the sandbox.
// value: comma separated list of sysctl_name=value key-value pairs.
//
// key: security.alpha.kubernetes.io/unsafe-sysctls
// description: list of unsafe sysctls which are set for the sandbox.
// value: comma separated list of sysctl_name=value key-value pairs.
//
map<string, string> annotations = 7; map<string, string> annotations = 7;
// Optional configurations specific to Linux hosts. // Optional configurations specific to Linux hosts.
LinuxPodSandboxConfig linux = 8; LinuxPodSandboxConfig linux = 8;

View File

@ -30,7 +30,6 @@ go_library(
tags = ["automanaged"], tags = ["automanaged"],
deps = [ deps = [
"//pkg/api/v1:go_default_library", "//pkg/api/v1:go_default_library",
"//pkg/api/v1/helper:go_default_library",
"//pkg/apis/componentconfig:go_default_library", "//pkg/apis/componentconfig:go_default_library",
"//pkg/client/unversioned/remotecommand:go_default_library", "//pkg/client/unversioned/remotecommand:go_default_library",
"//pkg/kubelet/apis/cri:go_default_library", "//pkg/kubelet/apis/cri:go_default_library",

View File

@ -477,6 +477,9 @@ func (ds *dockerService) applySandboxLinuxOptions(hc *dockercontainer.HostConfig
return err return err
} }
// Set sysctls.
hc.Sysctls = lc.Sysctls
return nil return nil
} }
@ -508,13 +511,6 @@ func (ds *dockerService) makeSandboxDockerConfig(c *runtimeapi.PodSandboxConfig,
HostConfig: hc, HostConfig: hc,
} }
// Set sysctls if requested
sysctls, err := getSysctlsFromAnnotations(c.Annotations)
if err != nil {
return nil, fmt.Errorf("failed to get sysctls from annotations %v for sandbox %q: %v", c.Annotations, c.Metadata.Name, err)
}
hc.Sysctls = sysctls
// Apply linux-specific options. // Apply linux-specific options.
if lc := c.GetLinux(); lc != nil { if lc := c.GetLinux(); lc != nil {
if err := ds.applySandboxLinuxOptions(hc, lc, createConfig, image, securityOptSep); err != nil { if err := ds.applySandboxLinuxOptions(hc, lc, createConfig, image, securityOptSep); err != nil {

View File

@ -34,7 +34,6 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
"k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/api/v1"
v1helper "k8s.io/kubernetes/pkg/api/v1/helper"
runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1" runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1"
"k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/kubelet/types"
"k8s.io/kubernetes/pkg/security/apparmor" "k8s.io/kubernetes/pkg/security/apparmor"
@ -274,27 +273,6 @@ func getNetworkNamespace(c *dockertypes.ContainerJSON) string {
return fmt.Sprintf(dockerNetNSFmt, c.State.Pid) return fmt.Sprintf(dockerNetNSFmt, c.State.Pid)
} }
// getSysctlsFromAnnotations gets sysctls from annotations.
func getSysctlsFromAnnotations(annotations map[string]string) (map[string]string, error) {
var results map[string]string
sysctls, unsafeSysctls, err := v1helper.SysctlsFromPodAnnotations(annotations)
if err != nil {
return nil, err
}
if len(sysctls)+len(unsafeSysctls) > 0 {
results = make(map[string]string, len(sysctls)+len(unsafeSysctls))
for _, c := range sysctls {
results[c.Name] = c.Value
}
for _, c := range unsafeSysctls {
results[c.Name] = c.Value
}
}
return results, nil
}
// dockerFilter wraps around dockerfilters.Args and provides methods to modify // dockerFilter wraps around dockerfilters.Args and provides methods to modify
// the filter easily. // the filter easily.
type dockerFilter struct { type dockerFilter struct {

View File

@ -175,46 +175,6 @@ func TestGetApparmorSecurityOpts(t *testing.T) {
} }
} }
// TestGetSystclsFromAnnotations tests the logic of getting sysctls from annotations.
func TestGetSystclsFromAnnotations(t *testing.T) {
tests := []struct {
annotations map[string]string
expectedSysctls map[string]string
}{{
annotations: map[string]string{
v1.SysctlsPodAnnotationKey: "kernel.shmmni=32768,kernel.shmmax=1000000000",
v1.UnsafeSysctlsPodAnnotationKey: "knet.ipv4.route.min_pmtu=1000",
},
expectedSysctls: map[string]string{
"kernel.shmmni": "32768",
"kernel.shmmax": "1000000000",
"knet.ipv4.route.min_pmtu": "1000",
},
}, {
annotations: map[string]string{
v1.SysctlsPodAnnotationKey: "kernel.shmmni=32768,kernel.shmmax=1000000000",
},
expectedSysctls: map[string]string{
"kernel.shmmni": "32768",
"kernel.shmmax": "1000000000",
},
}, {
annotations: map[string]string{
v1.UnsafeSysctlsPodAnnotationKey: "knet.ipv4.route.min_pmtu=1000",
},
expectedSysctls: map[string]string{
"knet.ipv4.route.min_pmtu": "1000",
},
}}
for i, test := range tests {
actual, err := getSysctlsFromAnnotations(test.annotations)
assert.NoError(t, err, "TestCase[%d]", i)
assert.Len(t, actual, len(test.expectedSysctls), "TestCase[%d]", i)
assert.Equal(t, test.expectedSysctls, actual, "TestCase[%d]", i)
}
}
// TestGetUserFromImageUser tests the logic of getting image uid or user name of image user. // TestGetUserFromImageUser tests the logic of getting image uid or user name of image user.
func TestGetUserFromImageUser(t *testing.T) { func TestGetUserFromImageUser(t *testing.T) {
newI64 := func(i int64) *int64 { return &i } newI64 := func(i int64) *int64 { return &i }

View File

@ -29,6 +29,7 @@ go_library(
deps = [ deps = [
"//pkg/api:go_default_library", "//pkg/api:go_default_library",
"//pkg/api/v1:go_default_library", "//pkg/api/v1:go_default_library",
"//pkg/api/v1/helper:go_default_library",
"//pkg/api/v1/ref:go_default_library", "//pkg/api/v1/ref:go_default_library",
"//pkg/credentialprovider:go_default_library", "//pkg/credentialprovider:go_default_library",
"//pkg/kubelet/apis/cri:go_default_library", "//pkg/kubelet/apis/cri:go_default_library",

View File

@ -24,6 +24,7 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/api/v1"
v1helper "k8s.io/kubernetes/pkg/api/v1/helper"
runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1" runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
) )
@ -236,3 +237,21 @@ func toKubeRuntimeStatus(status *runtimeapi.RuntimeStatus) *kubecontainer.Runtim
} }
return &kubecontainer.RuntimeStatus{Conditions: conditions} return &kubecontainer.RuntimeStatus{Conditions: conditions}
} }
// getSysctlsFromAnnotations gets sysctls and unsafeSysctls from annotations.
func getSysctlsFromAnnotations(annotations map[string]string) (map[string]string, error) {
apiSysctls, apiUnsafeSysctls, err := v1helper.SysctlsFromPodAnnotations(annotations)
if err != nil {
return nil, err
}
sysctls := make(map[string]string)
for _, c := range apiSysctls {
sysctls[c.Name] = c.Value
}
for _, c := range apiUnsafeSysctls {
sysctls[c.Name] = c.Value
}
return sysctls, nil
}

View File

@ -46,3 +46,43 @@ func TestStableKey(t *testing.T) {
newKey := getStableKey(pod, container) newKey := getStableKey(pod, container)
assert.NotEqual(t, oldKey, newKey) assert.NotEqual(t, oldKey, newKey)
} }
// TestGetSystclsFromAnnotations tests the logic of getting sysctls from annotations.
func TestGetSystclsFromAnnotations(t *testing.T) {
tests := []struct {
annotations map[string]string
expectedSysctls map[string]string
}{{
annotations: map[string]string{
v1.SysctlsPodAnnotationKey: "kernel.shmmni=32768,kernel.shmmax=1000000000",
v1.UnsafeSysctlsPodAnnotationKey: "knet.ipv4.route.min_pmtu=1000",
},
expectedSysctls: map[string]string{
"kernel.shmmni": "32768",
"kernel.shmmax": "1000000000",
"knet.ipv4.route.min_pmtu": "1000",
},
}, {
annotations: map[string]string{
v1.SysctlsPodAnnotationKey: "kernel.shmmni=32768,kernel.shmmax=1000000000",
},
expectedSysctls: map[string]string{
"kernel.shmmni": "32768",
"kernel.shmmax": "1000000000",
},
}, {
annotations: map[string]string{
v1.UnsafeSysctlsPodAnnotationKey: "knet.ipv4.route.min_pmtu=1000",
},
expectedSysctls: map[string]string{
"knet.ipv4.route.min_pmtu": "1000",
},
}}
for i, test := range tests {
actualSysctls, err := getSysctlsFromAnnotations(test.annotations)
assert.NoError(t, err, "TestCase[%d]", i)
assert.Len(t, actualSysctls, len(test.expectedSysctls), "TestCase[%d]", i)
assert.Equal(t, test.expectedSysctls, actualSysctls, "TestCase[%d]", i)
}
}

View File

@ -116,18 +116,22 @@ func (m *kubeGenericRuntimeManager) generatePodSandboxConfig(pod *v1.Pod, attemp
} }
} }
cgroupParent := m.runtimeHelper.GetPodCgroupParent(pod)
podSandboxConfig.Linux = m.generatePodSandboxLinuxConfig(pod, cgroupParent)
if len(portMappings) > 0 { if len(portMappings) > 0 {
podSandboxConfig.PortMappings = portMappings podSandboxConfig.PortMappings = portMappings
} }
lc, err := m.generatePodSandboxLinuxConfig(pod)
if err != nil {
return nil, err
}
podSandboxConfig.Linux = lc
return podSandboxConfig, nil return podSandboxConfig, nil
} }
// generatePodSandboxLinuxConfig generates LinuxPodSandboxConfig from v1.Pod. // generatePodSandboxLinuxConfig generates LinuxPodSandboxConfig from v1.Pod.
func (m *kubeGenericRuntimeManager) generatePodSandboxLinuxConfig(pod *v1.Pod, cgroupParent string) *runtimeapi.LinuxPodSandboxConfig { func (m *kubeGenericRuntimeManager) generatePodSandboxLinuxConfig(pod *v1.Pod) (*runtimeapi.LinuxPodSandboxConfig, error) {
cgroupParent := m.runtimeHelper.GetPodCgroupParent(pod)
lc := &runtimeapi.LinuxPodSandboxConfig{ lc := &runtimeapi.LinuxPodSandboxConfig{
CgroupParent: cgroupParent, CgroupParent: cgroupParent,
SecurityContext: &runtimeapi.LinuxSandboxSecurityContext{ SecurityContext: &runtimeapi.LinuxSandboxSecurityContext{
@ -135,6 +139,12 @@ func (m *kubeGenericRuntimeManager) generatePodSandboxLinuxConfig(pod *v1.Pod, c
}, },
} }
sysctls, err := getSysctlsFromAnnotations(pod.Annotations)
if err != nil {
return nil, fmt.Errorf("failed to get sysctls from annotations %v for pod %q: %v", pod.Annotations, format.Pod(pod), err)
}
lc.Sysctls = sysctls
if pod.Spec.SecurityContext != nil { if pod.Spec.SecurityContext != nil {
sc := pod.Spec.SecurityContext sc := pod.Spec.SecurityContext
if sc.RunAsUser != nil { if sc.RunAsUser != nil {
@ -167,7 +177,7 @@ func (m *kubeGenericRuntimeManager) generatePodSandboxLinuxConfig(pod *v1.Pod, c
} }
} }
return lc return lc, nil
} }
// getKubeletSandboxes lists all (or just the running) sandboxes managed by kubelet. // getKubeletSandboxes lists all (or just the running) sandboxes managed by kubelet.