diff --git a/vendor.conf b/vendor.conf index f607b93f4..1cd135577 100644 --- a/vendor.conf +++ b/vendor.conf @@ -74,14 +74,14 @@ golang.org/x/oauth2 0f29369cfe4552d0e4bcddc57cc7 golang.org/x/time 9d24e82272b4f38b78bc8cff74fa936d31ccd8ef gopkg.in/inf.v0 d2d2541c53f18d2a059457998ce2876cc8e67cbf # v0.9.1 gopkg.in/yaml.v2 53403b58ad1b561927d19068c655246f2db79d48 # v2.2.8 -k8s.io/api e6bc7324d7efd1c8ab0e68dd8162a2b500b0ce3b # v0.18.0-beta.1 -k8s.io/apimachinery 2373d029717c4d169463414a6127cd1d0d12680e # v0.18.0-beta.1 -k8s.io/apiserver 9af6eefd238b73bb688c429c32d113d04eeea3a8 # v0.18.0-beta.1 -k8s.io/client-go 33a99c0dca04e5e335442262f93df4c3faab201b # v0.18.0-beta.1 -k8s.io/cri-api 3d1680d8d202aa12c5dc5689170c3c03a488d35b # v0.18.0-beta.1 +k8s.io/api d2dce8e1788e4be2be3a62b6439b3eaa087df0df # v0.18.0 +k8s.io/apimachinery 105e0c6d63f10531ed07f3b5a2195771a0fa444b # v0.18.0 +k8s.io/apiserver 5c8e895629a454efd75a453d1dea5b8142db0013 # v0.18.0 +k8s.io/client-go 0b19784585bd0a0ee5509855829ead81feaa2bdc # v0.18.0 +k8s.io/cri-api 3d1680d8d202aa12c5dc5689170c3c03a488d35b # v0.18.0 k8s.io/klog 2ca9ad30301bf30a8a6e0fa2110db6b8df699a91 # v1.0.0 -k8s.io/kubernetes f2d7577e31829664899f1b8e3d3a73de8c5f4029 # v1.18.0-beta.1 -k8s.io/utils 5f6fbceb4c31d35291b2de756aeaae2ddeee3e92 +k8s.io/kubernetes 9e991415386e4cf155a24b1da15becaa390438d8 # v1.18.0 +k8s.io/utils a9aa75ae1b89e1b992c33383f48e942d97e52dae sigs.k8s.io/structured-merge-diff/v3 877aee05330847a873a1a8998b40e12a1e0fde25 # v3.0.0 sigs.k8s.io/yaml 9fc95527decd95bb9d28cc2eab08179b2d0f6971 # v1.2.0 diff --git a/vendor/k8s.io/api/core/v1/generated.pb.go b/vendor/k8s.io/api/core/v1/generated.pb.go index 83d567f77..8e5875206 100644 --- a/vendor/k8s.io/api/core/v1/generated.pb.go +++ b/vendor/k8s.io/api/core/v1/generated.pb.go @@ -6000,863 +6000,865 @@ func init() { } var fileDescriptor_83c10c24ec417dc9 = []byte{ - // 13690 bytes of a gzipped FileDescriptorProto + // 13727 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7b, 0x70, 0x24, 0x49, 0x5a, 0x18, 0x7e, 0xd5, 0xad, 0x47, 0xf7, 0xa7, 0x77, 0xce, 0x63, 0x35, 0xda, 0x99, 0xd1, 0x6c, 0xed, 0xdd, 0xec, 0xec, 0xed, 0xae, 0xe6, 0xf6, 0x75, 0xbb, 0xdc, 0xde, 0x2d, 0x48, 0x6a, 0x69, 0xa6, 0x77, 0x46, 0x9a, 0xde, 0x6c, 0xcd, 0xcc, 0xdd, 0xb1, 0x77, 0xbf, 0x2b, 0x75, 0xa5, 0xa4, 0x3a, 0x75, 0x57, 0xf5, 0x56, 0x55, 0x6b, 0x46, 0xfb, 0x83, 0x30, 0x3e, 0x9e, 0x67, 0xc0, 0x71, - 0xe1, 0x20, 0xfc, 0x00, 0x82, 0x70, 0x60, 0x1c, 0x80, 0xc1, 0x0e, 0x63, 0x30, 0x60, 0x0e, 0x1b, + 0x76, 0x10, 0x7e, 0x00, 0x41, 0x38, 0x30, 0x0e, 0xc0, 0xd8, 0x0e, 0x63, 0x30, 0x60, 0x0e, 0x1b, 0x0c, 0xb6, 0x03, 0xfb, 0x0f, 0x8c, 0x09, 0xdb, 0x47, 0x04, 0x61, 0x19, 0x06, 0x87, 0x89, 0xfb, 0xc3, 0x40, 0x18, 0xfc, 0x87, 0x65, 0xc2, 0x38, 0xf2, 0x59, 0x99, 0xd5, 0x55, 0xdd, 0xad, 0x59, - 0x8d, 0x6e, 0xb9, 0xd8, 0xff, 0xba, 0xf3, 0xfb, 0xf2, 0xcb, 0xac, 0x7c, 0x7e, 0xf9, 0x3d, 0xe1, - 0xb5, 0xdd, 0x57, 0xa3, 0x05, 0x2f, 0xb8, 0xba, 0xdb, 0xd9, 0x24, 0xa1, 0x4f, 0x62, 0x12, 0x5d, - 0xdd, 0x23, 0xbe, 0x1b, 0x84, 0x57, 0x05, 0xc0, 0x69, 0x7b, 0x57, 0x1b, 0x41, 0x48, 0xae, 0xee, - 0x3d, 0x7f, 0x75, 0x9b, 0xf8, 0x24, 0x74, 0x62, 0xe2, 0x2e, 0xb4, 0xc3, 0x20, 0x0e, 0x10, 0xe2, - 0x38, 0x0b, 0x4e, 0xdb, 0x5b, 0xa0, 0x38, 0x0b, 0x7b, 0xcf, 0xcf, 0x3d, 0xb7, 0xed, 0xc5, 0x3b, - 0x9d, 0xcd, 0x85, 0x46, 0xd0, 0xba, 0xba, 0x1d, 0x6c, 0x07, 0x57, 0x19, 0xea, 0x66, 0x67, 0x8b, - 0xfd, 0x63, 0x7f, 0xd8, 0x2f, 0x4e, 0x62, 0xee, 0xa5, 0xa4, 0x99, 0x96, 0xd3, 0xd8, 0xf1, 0x7c, - 0x12, 0xee, 0x5f, 0x6d, 0xef, 0x6e, 0xb3, 0x76, 0x43, 0x12, 0x05, 0x9d, 0xb0, 0x41, 0xd2, 0x0d, - 0xf7, 0xac, 0x15, 0x5d, 0x6d, 0x91, 0xd8, 0xc9, 0xe8, 0xee, 0xdc, 0xd5, 0xbc, 0x5a, 0x61, 0xc7, - 0x8f, 0xbd, 0x56, 0x77, 0x33, 0x1f, 0xed, 0x57, 0x21, 0x6a, 0xec, 0x90, 0x96, 0xd3, 0x55, 0xef, - 0xc5, 0xbc, 0x7a, 0x9d, 0xd8, 0x6b, 0x5e, 0xf5, 0xfc, 0x38, 0x8a, 0xc3, 0x74, 0x25, 0xfb, 0x2b, - 0x16, 0x5c, 0x5a, 0xbc, 0x5b, 0x5f, 0x69, 0x3a, 0x51, 0xec, 0x35, 0x96, 0x9a, 0x41, 0x63, 0xb7, - 0x1e, 0x07, 0x21, 0xb9, 0x13, 0x34, 0x3b, 0x2d, 0x52, 0x67, 0x03, 0x81, 0x9e, 0x85, 0xd2, 0x1e, - 0xfb, 0x5f, 0xad, 0xcc, 0x5a, 0x97, 0xac, 0x2b, 0xe5, 0xa5, 0xe9, 0xdf, 0x38, 0x98, 0xff, 0xc0, - 0x83, 0x83, 0xf9, 0xd2, 0x1d, 0x51, 0x8e, 0x15, 0x06, 0xba, 0x0c, 0x23, 0x5b, 0xd1, 0xc6, 0x7e, - 0x9b, 0xcc, 0x16, 0x18, 0xee, 0xa4, 0xc0, 0x1d, 0x59, 0xad, 0xd3, 0x52, 0x2c, 0xa0, 0xe8, 0x2a, - 0x94, 0xdb, 0x4e, 0x18, 0x7b, 0xb1, 0x17, 0xf8, 0xb3, 0xc5, 0x4b, 0xd6, 0x95, 0xe1, 0xa5, 0x19, - 0x81, 0x5a, 0xae, 0x49, 0x00, 0x4e, 0x70, 0x68, 0x37, 0x42, 0xe2, 0xb8, 0xb7, 0xfc, 0xe6, 0xfe, - 0xec, 0xd0, 0x25, 0xeb, 0x4a, 0x29, 0xe9, 0x06, 0x16, 0xe5, 0x58, 0x61, 0xd8, 0x3f, 0x58, 0x80, - 0xd2, 0xe2, 0xd6, 0x96, 0xe7, 0x7b, 0xf1, 0x3e, 0xba, 0x03, 0xe3, 0x7e, 0xe0, 0x12, 0xf9, 0x9f, - 0x7d, 0xc5, 0xd8, 0x0b, 0x97, 0x16, 0xba, 0x97, 0xd2, 0xc2, 0xba, 0x86, 0xb7, 0x34, 0xfd, 0xe0, - 0x60, 0x7e, 0x5c, 0x2f, 0xc1, 0x06, 0x1d, 0x84, 0x61, 0xac, 0x1d, 0xb8, 0x8a, 0x6c, 0x81, 0x91, - 0x9d, 0xcf, 0x22, 0x5b, 0x4b, 0xd0, 0x96, 0xa6, 0x1e, 0x1c, 0xcc, 0x8f, 0x69, 0x05, 0x58, 0x27, - 0x82, 0x36, 0x61, 0x8a, 0xfe, 0xf5, 0x63, 0x4f, 0xd1, 0x2d, 0x32, 0xba, 0x4f, 0xe6, 0xd1, 0xd5, - 0x50, 0x97, 0x4e, 0x3d, 0x38, 0x98, 0x9f, 0x4a, 0x15, 0xe2, 0x34, 0x41, 0xfb, 0x1d, 0x98, 0x5c, - 0x8c, 0x63, 0xa7, 0xb1, 0x43, 0x5c, 0x3e, 0x83, 0xe8, 0x25, 0x18, 0xf2, 0x9d, 0x16, 0x11, 0xf3, - 0x7b, 0x49, 0x0c, 0xec, 0xd0, 0xba, 0xd3, 0x22, 0x87, 0x07, 0xf3, 0xd3, 0xb7, 0x7d, 0xef, 0xed, - 0x8e, 0x58, 0x15, 0xb4, 0x0c, 0x33, 0x6c, 0xf4, 0x02, 0x80, 0x4b, 0xf6, 0xbc, 0x06, 0xa9, 0x39, - 0xf1, 0x8e, 0x98, 0x6f, 0x24, 0xea, 0x42, 0x45, 0x41, 0xb0, 0x86, 0x65, 0xdf, 0x87, 0xf2, 0xe2, - 0x5e, 0xe0, 0xb9, 0xb5, 0xc0, 0x8d, 0xd0, 0x2e, 0x4c, 0xb5, 0x43, 0xb2, 0x45, 0x42, 0x55, 0x34, - 0x6b, 0x5d, 0x2a, 0x5e, 0x19, 0x7b, 0xe1, 0x4a, 0xe6, 0xc7, 0x9a, 0xa8, 0x2b, 0x7e, 0x1c, 0xee, - 0x2f, 0x3d, 0x26, 0xda, 0x9b, 0x4a, 0x41, 0x71, 0x9a, 0xb2, 0xfd, 0xaf, 0x0a, 0x70, 0x66, 0xf1, - 0x9d, 0x4e, 0x48, 0x2a, 0x5e, 0xb4, 0x9b, 0x5e, 0xe1, 0xae, 0x17, 0xed, 0xae, 0x27, 0x23, 0xa0, - 0x96, 0x56, 0x45, 0x94, 0x63, 0x85, 0x81, 0x9e, 0x83, 0x51, 0xfa, 0xfb, 0x36, 0xae, 0x8a, 0x4f, - 0x3e, 0x25, 0x90, 0xc7, 0x2a, 0x4e, 0xec, 0x54, 0x38, 0x08, 0x4b, 0x1c, 0xb4, 0x06, 0x63, 0x0d, - 0xb6, 0x21, 0xb7, 0xd7, 0x02, 0x97, 0xb0, 0xc9, 0x2c, 0x2f, 0x3d, 0x43, 0xd1, 0x97, 0x93, 0xe2, - 0xc3, 0x83, 0xf9, 0x59, 0xde, 0x37, 0x41, 0x42, 0x83, 0x61, 0xbd, 0x3e, 0xb2, 0xd5, 0xfe, 0x1a, - 0x62, 0x94, 0x20, 0x63, 0x6f, 0x5d, 0xd1, 0xb6, 0xca, 0x30, 0xdb, 0x2a, 0xe3, 0xd9, 0xdb, 0x04, - 0x3d, 0x0f, 0x43, 0xbb, 0x9e, 0xef, 0xce, 0x8e, 0x30, 0x5a, 0x17, 0xe8, 0x9c, 0xdf, 0xf0, 0x7c, - 0xf7, 0xf0, 0x60, 0x7e, 0xc6, 0xe8, 0x0e, 0x2d, 0xc4, 0x0c, 0xd5, 0xfe, 0x53, 0x0b, 0xe6, 0x19, - 0x6c, 0xd5, 0x6b, 0x92, 0x1a, 0x09, 0x23, 0x2f, 0x8a, 0x89, 0x1f, 0x1b, 0x03, 0xfa, 0x02, 0x40, - 0x44, 0x1a, 0x21, 0x89, 0xb5, 0x21, 0x55, 0x0b, 0xa3, 0xae, 0x20, 0x58, 0xc3, 0xa2, 0x07, 0x42, - 0xb4, 0xe3, 0x84, 0x6c, 0x7d, 0x89, 0x81, 0x55, 0x07, 0x42, 0x5d, 0x02, 0x70, 0x82, 0x63, 0x1c, - 0x08, 0xc5, 0x7e, 0x07, 0x02, 0xfa, 0x04, 0x4c, 0x25, 0x8d, 0x45, 0x6d, 0xa7, 0x21, 0x07, 0x90, - 0x6d, 0x99, 0xba, 0x09, 0xc2, 0x69, 0x5c, 0xfb, 0x1f, 0x58, 0x62, 0xf1, 0xd0, 0xaf, 0x7e, 0x8f, - 0x7f, 0xab, 0xfd, 0x8b, 0x16, 0x8c, 0x2e, 0x79, 0xbe, 0xeb, 0xf9, 0xdb, 0xe8, 0x73, 0x50, 0xa2, - 0x77, 0x93, 0xeb, 0xc4, 0x8e, 0x38, 0xf7, 0x3e, 0xa2, 0xed, 0x2d, 0x75, 0x55, 0x2c, 0xb4, 0x77, - 0xb7, 0x69, 0x41, 0xb4, 0x40, 0xb1, 0xe9, 0x6e, 0xbb, 0xb5, 0xf9, 0x79, 0xd2, 0x88, 0xd7, 0x48, - 0xec, 0x24, 0x9f, 0x93, 0x94, 0x61, 0x45, 0x15, 0xdd, 0x80, 0x91, 0xd8, 0x09, 0xb7, 0x49, 0x2c, - 0x0e, 0xc0, 0xcc, 0x83, 0x8a, 0xd7, 0xc4, 0x74, 0x47, 0x12, 0xbf, 0x41, 0x92, 0x6b, 0x61, 0x83, - 0x55, 0xc5, 0x82, 0x84, 0xfd, 0xfd, 0xa3, 0x70, 0x6e, 0xb9, 0x5e, 0xcd, 0x59, 0x57, 0x97, 0x61, - 0xc4, 0x0d, 0xbd, 0x3d, 0x12, 0x8a, 0x71, 0x56, 0x54, 0x2a, 0xac, 0x14, 0x0b, 0x28, 0x7a, 0x15, - 0xc6, 0xf9, 0x85, 0x74, 0xdd, 0xf1, 0xdd, 0xa6, 0x1c, 0xe2, 0xd3, 0x02, 0x7b, 0xfc, 0x8e, 0x06, - 0xc3, 0x06, 0xe6, 0x11, 0x17, 0xd5, 0xe5, 0xd4, 0x66, 0xcc, 0xbb, 0xec, 0xbe, 0x68, 0xc1, 0x34, - 0x6f, 0x66, 0x31, 0x8e, 0x43, 0x6f, 0xb3, 0x13, 0x93, 0x68, 0x76, 0x98, 0x9d, 0x74, 0xcb, 0x59, - 0xa3, 0x95, 0x3b, 0x02, 0x0b, 0x77, 0x52, 0x54, 0xf8, 0x21, 0x38, 0x2b, 0xda, 0x9d, 0x4e, 0x83, - 0x71, 0x57, 0xb3, 0xe8, 0xdb, 0x2d, 0x98, 0x6b, 0x04, 0x7e, 0x1c, 0x06, 0xcd, 0x26, 0x09, 0x6b, - 0x9d, 0xcd, 0xa6, 0x17, 0xed, 0xf0, 0x75, 0x8a, 0xc9, 0x16, 0x3b, 0x09, 0x72, 0xe6, 0x50, 0x21, - 0x89, 0x39, 0xbc, 0xf8, 0xe0, 0x60, 0x7e, 0x6e, 0x39, 0x97, 0x14, 0xee, 0xd1, 0x0c, 0xda, 0x05, - 0x44, 0xaf, 0xd2, 0x7a, 0xec, 0x6c, 0x93, 0xa4, 0xf1, 0xd1, 0xc1, 0x1b, 0x3f, 0xfb, 0xe0, 0x60, - 0x1e, 0xad, 0x77, 0x91, 0xc0, 0x19, 0x64, 0xd1, 0xdb, 0x70, 0x9a, 0x96, 0x76, 0x7d, 0x6b, 0x69, - 0xf0, 0xe6, 0x66, 0x1f, 0x1c, 0xcc, 0x9f, 0x5e, 0xcf, 0x20, 0x82, 0x33, 0x49, 0xa3, 0x6f, 0xb3, - 0xe0, 0x5c, 0xf2, 0xf9, 0x2b, 0xf7, 0xdb, 0x8e, 0xef, 0x26, 0x0d, 0x97, 0x07, 0x6f, 0x98, 0x9e, - 0xc9, 0xe7, 0x96, 0xf3, 0x28, 0xe1, 0xfc, 0x46, 0xe6, 0x96, 0xe1, 0x4c, 0xe6, 0x6a, 0x41, 0xd3, - 0x50, 0xdc, 0x25, 0x9c, 0x0b, 0x2a, 0x63, 0xfa, 0x13, 0x9d, 0x86, 0xe1, 0x3d, 0xa7, 0xd9, 0x11, - 0x1b, 0x05, 0xf3, 0x3f, 0x1f, 0x2b, 0xbc, 0x6a, 0xd9, 0xff, 0xba, 0x08, 0x53, 0xcb, 0xf5, 0xea, - 0x43, 0xed, 0x42, 0xfd, 0x1a, 0x2a, 0xf4, 0xbc, 0x86, 0x92, 0x4b, 0xad, 0x98, 0x7b, 0xa9, 0xfd, - 0x95, 0x8c, 0x2d, 0x34, 0xc4, 0xb6, 0xd0, 0x37, 0xe4, 0x6c, 0xa1, 0x63, 0xde, 0x38, 0x7b, 0x39, - 0xab, 0x68, 0x98, 0x4d, 0x66, 0x26, 0xc7, 0x72, 0x33, 0x68, 0x38, 0xcd, 0xf4, 0xd1, 0x77, 0xc4, - 0xa5, 0x74, 0x3c, 0xf3, 0xd8, 0x80, 0xf1, 0x65, 0xa7, 0xed, 0x6c, 0x7a, 0x4d, 0x2f, 0xf6, 0x48, - 0x84, 0x9e, 0x82, 0xa2, 0xe3, 0xba, 0x8c, 0xdb, 0x2a, 0x2f, 0x9d, 0x79, 0x70, 0x30, 0x5f, 0x5c, - 0x74, 0xe9, 0xb5, 0x0f, 0x0a, 0x6b, 0x1f, 0x53, 0x0c, 0xf4, 0x61, 0x18, 0x72, 0xc3, 0xa0, 0x3d, - 0x5b, 0x60, 0x98, 0x74, 0xd7, 0x0d, 0x55, 0xc2, 0xa0, 0x9d, 0x42, 0x65, 0x38, 0xf6, 0xaf, 0x16, - 0xe0, 0xfc, 0x32, 0x69, 0xef, 0xac, 0xd6, 0x73, 0xce, 0xef, 0x2b, 0x50, 0x6a, 0x05, 0xbe, 0x17, - 0x07, 0x61, 0x24, 0x9a, 0x66, 0x2b, 0x62, 0x4d, 0x94, 0x61, 0x05, 0x45, 0x97, 0x60, 0xa8, 0x9d, - 0x30, 0x95, 0xe3, 0x92, 0x21, 0x65, 0xec, 0x24, 0x83, 0x50, 0x8c, 0x4e, 0x44, 0x42, 0xb1, 0x62, - 0x14, 0xc6, 0xed, 0x88, 0x84, 0x98, 0x41, 0x92, 0x9b, 0x99, 0xde, 0xd9, 0xe2, 0x84, 0x4e, 0xdd, - 0xcc, 0x14, 0x82, 0x35, 0x2c, 0x54, 0x83, 0x72, 0x94, 0x9a, 0xd9, 0x81, 0xb6, 0xe9, 0x04, 0xbb, - 0xba, 0xd5, 0x4c, 0x26, 0x44, 0x8c, 0x1b, 0x65, 0xa4, 0xef, 0xd5, 0xfd, 0xe5, 0x02, 0x20, 0x3e, - 0x84, 0x7f, 0xc9, 0x06, 0xee, 0x76, 0xf7, 0xc0, 0x0d, 0xbe, 0x25, 0x8e, 0x6b, 0xf4, 0xfe, 0xcc, - 0x82, 0xf3, 0xcb, 0x9e, 0xef, 0x92, 0x30, 0x67, 0x01, 0x3e, 0x9a, 0xb7, 0xec, 0xd1, 0x98, 0x06, - 0x63, 0x89, 0x0d, 0x1d, 0xc3, 0x12, 0xb3, 0xff, 0xd8, 0x02, 0xc4, 0x3f, 0xfb, 0x3d, 0xf7, 0xb1, - 0xb7, 0xbb, 0x3f, 0xf6, 0x18, 0x96, 0x85, 0x7d, 0x13, 0x26, 0x97, 0x9b, 0x1e, 0xf1, 0xe3, 0x6a, - 0x6d, 0x39, 0xf0, 0xb7, 0xbc, 0x6d, 0xf4, 0x31, 0x98, 0x8c, 0xbd, 0x16, 0x09, 0x3a, 0x71, 0x9d, - 0x34, 0x02, 0x9f, 0xbd, 0x24, 0xad, 0x2b, 0xc3, 0x4b, 0xe8, 0xc1, 0xc1, 0xfc, 0xe4, 0x86, 0x01, - 0xc1, 0x29, 0x4c, 0xfb, 0x77, 0xe9, 0xf8, 0x05, 0xad, 0x76, 0xe0, 0x13, 0x3f, 0x5e, 0x0e, 0x7c, - 0x97, 0x4b, 0x1c, 0x3e, 0x06, 0x43, 0x31, 0x1d, 0x0f, 0x3e, 0x76, 0x97, 0xe5, 0x46, 0xa1, 0xa3, - 0x70, 0x78, 0x30, 0x7f, 0xb6, 0xbb, 0x06, 0x1b, 0x27, 0x56, 0x07, 0x7d, 0x03, 0x8c, 0x44, 0xb1, - 0x13, 0x77, 0x22, 0x31, 0x9a, 0x4f, 0xc8, 0xd1, 0xac, 0xb3, 0xd2, 0xc3, 0x83, 0xf9, 0x29, 0x55, - 0x8d, 0x17, 0x61, 0x51, 0x01, 0x3d, 0x0d, 0xa3, 0x2d, 0x12, 0x45, 0xce, 0xb6, 0xbc, 0x0d, 0xa7, - 0x44, 0xdd, 0xd1, 0x35, 0x5e, 0x8c, 0x25, 0x1c, 0x3d, 0x09, 0xc3, 0x24, 0x0c, 0x83, 0x50, 0xec, - 0xd1, 0x09, 0x81, 0x38, 0xbc, 0x42, 0x0b, 0x31, 0x87, 0xd9, 0xff, 0xde, 0x82, 0x29, 0xd5, 0x57, - 0xde, 0xd6, 0x09, 0xbc, 0x0a, 0x3e, 0x0d, 0xd0, 0x90, 0x1f, 0x18, 0xb1, 0xdb, 0x63, 0xec, 0x85, - 0xcb, 0x99, 0x17, 0x75, 0xd7, 0x30, 0x26, 0x94, 0x55, 0x51, 0x84, 0x35, 0x6a, 0xf6, 0x3f, 0xb7, - 0xe0, 0x54, 0xea, 0x8b, 0x6e, 0x7a, 0x51, 0x8c, 0xde, 0xea, 0xfa, 0xaa, 0x85, 0xc1, 0xbe, 0x8a, - 0xd6, 0x66, 0xdf, 0xa4, 0x96, 0xb2, 0x2c, 0xd1, 0xbe, 0xe8, 0x3a, 0x0c, 0x7b, 0x31, 0x69, 0xc9, - 0x8f, 0x79, 0xb2, 0xe7, 0xc7, 0xf0, 0x5e, 0x25, 0x33, 0x52, 0xa5, 0x35, 0x31, 0x27, 0x60, 0xff, - 0x6a, 0x11, 0xca, 0x7c, 0xd9, 0xae, 0x39, 0xed, 0x13, 0x98, 0x8b, 0x67, 0xa0, 0xec, 0xb5, 0x5a, - 0x9d, 0xd8, 0xd9, 0x14, 0xc7, 0x79, 0x89, 0x6f, 0xad, 0xaa, 0x2c, 0xc4, 0x09, 0x1c, 0x55, 0x61, - 0x88, 0x75, 0x85, 0x7f, 0xe5, 0x53, 0xd9, 0x5f, 0x29, 0xfa, 0xbe, 0x50, 0x71, 0x62, 0x87, 0x73, - 0x52, 0xea, 0x1e, 0xa1, 0x45, 0x98, 0x91, 0x40, 0x0e, 0xc0, 0xa6, 0xe7, 0x3b, 0xe1, 0x3e, 0x2d, - 0x9b, 0x2d, 0x32, 0x82, 0xcf, 0xf5, 0x26, 0xb8, 0xa4, 0xf0, 0x39, 0x59, 0xf5, 0x61, 0x09, 0x00, - 0x6b, 0x44, 0xe7, 0x5e, 0x81, 0xb2, 0x42, 0x3e, 0x0a, 0x43, 0x34, 0xf7, 0x09, 0x98, 0x4a, 0xb5, - 0xd5, 0xaf, 0xfa, 0xb8, 0xce, 0x4f, 0xfd, 0x12, 0x3b, 0x32, 0x44, 0xaf, 0x57, 0xfc, 0x3d, 0x71, - 0xe4, 0xbe, 0x03, 0xa7, 0x9b, 0x19, 0x27, 0x99, 0x98, 0xd7, 0xc1, 0x4f, 0xbe, 0xf3, 0xe2, 0xb3, - 0x4f, 0x67, 0x41, 0x71, 0x66, 0x1b, 0x94, 0x47, 0x08, 0xda, 0x74, 0x83, 0x38, 0x4d, 0x9d, 0xdd, - 0xbe, 0x25, 0xca, 0xb0, 0x82, 0xd2, 0xf3, 0xee, 0xb4, 0xea, 0xfc, 0x0d, 0xb2, 0x5f, 0x27, 0x4d, - 0xd2, 0x88, 0x83, 0xf0, 0x6b, 0xda, 0xfd, 0x0b, 0x7c, 0xf4, 0xf9, 0x71, 0x39, 0x26, 0x08, 0x14, - 0x6f, 0x90, 0x7d, 0x3e, 0x15, 0xfa, 0xd7, 0x15, 0x7b, 0x7e, 0xdd, 0xcf, 0x58, 0x30, 0xa1, 0xbe, - 0xee, 0x04, 0xce, 0x85, 0x25, 0xf3, 0x5c, 0xb8, 0xd0, 0x73, 0x81, 0xe7, 0x9c, 0x08, 0x5f, 0x2e, - 0xc0, 0x39, 0x85, 0x43, 0xdf, 0x06, 0xfc, 0x8f, 0x58, 0x55, 0x57, 0xa1, 0xec, 0x2b, 0xa9, 0x95, - 0x65, 0x8a, 0x8b, 0x12, 0x99, 0x55, 0x82, 0x43, 0x59, 0x3c, 0x3f, 0x11, 0x2d, 0x8d, 0xeb, 0xe2, - 0x5c, 0x21, 0xba, 0x5d, 0x82, 0x62, 0xc7, 0x73, 0xc5, 0x05, 0xf3, 0x11, 0x39, 0xda, 0xb7, 0xab, - 0x95, 0xc3, 0x83, 0xf9, 0x27, 0xf2, 0x54, 0x09, 0xf4, 0x66, 0x8b, 0x16, 0x6e, 0x57, 0x2b, 0x98, - 0x56, 0x46, 0x8b, 0x30, 0x25, 0xb5, 0x25, 0x77, 0x28, 0xbb, 0x15, 0xf8, 0xe2, 0x1e, 0x52, 0x32, - 0x59, 0x6c, 0x82, 0x71, 0x1a, 0x1f, 0x55, 0x60, 0x7a, 0xb7, 0xb3, 0x49, 0x9a, 0x24, 0xe6, 0x1f, - 0x7c, 0x83, 0x70, 0x89, 0x65, 0x39, 0x79, 0x99, 0xdd, 0x48, 0xc1, 0x71, 0x57, 0x0d, 0xfb, 0x2f, - 0xd8, 0x7d, 0x20, 0x46, 0xaf, 0x16, 0x06, 0x74, 0x61, 0x51, 0xea, 0x5f, 0xcb, 0xe5, 0x3c, 0xc8, - 0xaa, 0xb8, 0x41, 0xf6, 0x37, 0x02, 0xca, 0x99, 0x67, 0xaf, 0x0a, 0x63, 0xcd, 0x0f, 0xf5, 0x5c, - 0xf3, 0x3f, 0x57, 0x80, 0x33, 0x6a, 0x04, 0x0c, 0x26, 0xf0, 0x2f, 0xfb, 0x18, 0x3c, 0x0f, 0x63, - 0x2e, 0xd9, 0x72, 0x3a, 0xcd, 0x58, 0x89, 0xcf, 0x87, 0xb9, 0x0a, 0xa5, 0x92, 0x14, 0x63, 0x1d, - 0xe7, 0x08, 0xc3, 0xf6, 0xbf, 0xc6, 0xd8, 0x45, 0x1c, 0x3b, 0x74, 0x8d, 0xab, 0x5d, 0x63, 0xe5, - 0xee, 0x9a, 0x27, 0x61, 0xd8, 0x6b, 0x51, 0xc6, 0xac, 0x60, 0xf2, 0x5b, 0x55, 0x5a, 0x88, 0x39, - 0x0c, 0x7d, 0x08, 0x46, 0x1b, 0x41, 0xab, 0xe5, 0xf8, 0x2e, 0xbb, 0xf2, 0xca, 0x4b, 0x63, 0x94, - 0x77, 0x5b, 0xe6, 0x45, 0x58, 0xc2, 0xd0, 0x79, 0x18, 0x72, 0xc2, 0x6d, 0x2e, 0xc3, 0x28, 0x2f, - 0x95, 0x68, 0x4b, 0x8b, 0xe1, 0x76, 0x84, 0x59, 0x29, 0x7d, 0x82, 0xdd, 0x0b, 0xc2, 0x5d, 0xcf, - 0xdf, 0xae, 0x78, 0xa1, 0xd8, 0x12, 0xea, 0x2e, 0xbc, 0xab, 0x20, 0x58, 0xc3, 0x42, 0xab, 0x30, - 0xdc, 0x0e, 0xc2, 0x38, 0x9a, 0x1d, 0x61, 0xc3, 0xfd, 0x44, 0xce, 0x41, 0xc4, 0xbf, 0xb6, 0x16, - 0x84, 0x71, 0xf2, 0x01, 0xf4, 0x5f, 0x84, 0x79, 0x75, 0x74, 0x13, 0x46, 0x89, 0xbf, 0xb7, 0x1a, - 0x06, 0xad, 0xd9, 0x53, 0xf9, 0x94, 0x56, 0x38, 0x0a, 0x5f, 0x66, 0x09, 0x8f, 0x2a, 0x8a, 0xb1, - 0x24, 0x81, 0xbe, 0x01, 0x8a, 0xc4, 0xdf, 0x9b, 0x1d, 0x65, 0x94, 0xe6, 0x72, 0x28, 0xdd, 0x71, - 0xc2, 0xe4, 0xcc, 0x5f, 0xf1, 0xf7, 0x30, 0xad, 0x83, 0x3e, 0x05, 0x65, 0x79, 0x60, 0x44, 0x42, - 0x58, 0x97, 0xb9, 0x60, 0xe5, 0x31, 0x83, 0xc9, 0xdb, 0x1d, 0x2f, 0x24, 0x2d, 0xe2, 0xc7, 0x51, - 0x72, 0x42, 0x4a, 0x68, 0x84, 0x13, 0x6a, 0xe8, 0x53, 0x52, 0x42, 0xbc, 0x16, 0x74, 0xfc, 0x38, - 0x9a, 0x2d, 0xb3, 0xee, 0x65, 0xea, 0xee, 0xee, 0x24, 0x78, 0x69, 0x11, 0x32, 0xaf, 0x8c, 0x0d, - 0x52, 0xe8, 0x33, 0x30, 0xc1, 0xff, 0x73, 0x0d, 0x58, 0x34, 0x7b, 0x86, 0xd1, 0xbe, 0x94, 0x4f, - 0x9b, 0x23, 0x2e, 0x9d, 0x11, 0xc4, 0x27, 0xf4, 0xd2, 0x08, 0x9b, 0xd4, 0x10, 0x86, 0x89, 0xa6, - 0xb7, 0x47, 0x7c, 0x12, 0x45, 0xb5, 0x30, 0xd8, 0x24, 0xb3, 0xc0, 0x06, 0xe6, 0x5c, 0xb6, 0xc6, - 0x2c, 0xd8, 0x24, 0x4b, 0x33, 0x94, 0xe6, 0x4d, 0xbd, 0x0e, 0x36, 0x49, 0xa0, 0xdb, 0x30, 0x49, - 0x5f, 0x6c, 0x5e, 0x42, 0x74, 0xac, 0x1f, 0x51, 0xf6, 0xae, 0xc2, 0x46, 0x25, 0x9c, 0x22, 0x82, - 0x6e, 0xc1, 0x78, 0x14, 0x3b, 0x61, 0xdc, 0x69, 0x73, 0xa2, 0x67, 0xfb, 0x11, 0x65, 0x0a, 0xd7, - 0xba, 0x56, 0x05, 0x1b, 0x04, 0xd0, 0x1b, 0x50, 0x6e, 0x7a, 0x5b, 0xa4, 0xb1, 0xdf, 0x68, 0x92, - 0xd9, 0x71, 0x46, 0x2d, 0xf3, 0x50, 0xb9, 0x29, 0x91, 0x38, 0x9f, 0xab, 0xfe, 0xe2, 0xa4, 0x3a, - 0xba, 0x03, 0x67, 0x63, 0x12, 0xb6, 0x3c, 0xdf, 0xa1, 0x87, 0x81, 0x78, 0x5a, 0x31, 0x45, 0xe6, - 0x04, 0xdb, 0x6d, 0x17, 0xc5, 0x6c, 0x9c, 0xdd, 0xc8, 0xc4, 0xc2, 0x39, 0xb5, 0xd1, 0x7d, 0x98, - 0xcd, 0x80, 0x04, 0x4d, 0xaf, 0xb1, 0x3f, 0x7b, 0x9a, 0x51, 0xfe, 0xb8, 0xa0, 0x3c, 0xbb, 0x91, - 0x83, 0x77, 0xd8, 0x03, 0x86, 0x73, 0xa9, 0xa3, 0x5b, 0x30, 0xc5, 0x4e, 0xa0, 0x5a, 0xa7, 0xd9, - 0x14, 0x0d, 0x4e, 0xb2, 0x06, 0x3f, 0x24, 0xef, 0xe3, 0xaa, 0x09, 0x3e, 0x3c, 0x98, 0x87, 0xe4, - 0x1f, 0x4e, 0xd7, 0x46, 0x9b, 0x4c, 0x67, 0xd6, 0x09, 0xbd, 0x78, 0x9f, 0x9e, 0x1b, 0xe4, 0x7e, - 0x3c, 0x3b, 0xd5, 0x53, 0x5e, 0xa1, 0xa3, 0x2a, 0xc5, 0x9a, 0x5e, 0x88, 0xd3, 0x04, 0xe9, 0x91, - 0x1a, 0xc5, 0xae, 0xe7, 0xcf, 0x4e, 0xf3, 0x77, 0x89, 0x3c, 0x91, 0xea, 0xb4, 0x10, 0x73, 0x18, - 0xd3, 0x97, 0xd1, 0x1f, 0xb7, 0xe8, 0xcd, 0x35, 0xc3, 0x10, 0x13, 0x7d, 0x99, 0x04, 0xe0, 0x04, - 0x87, 0x32, 0x93, 0x71, 0xbc, 0x3f, 0x8b, 0x18, 0xaa, 0x3a, 0x58, 0x36, 0x36, 0x3e, 0x85, 0x69, - 0xb9, 0xbd, 0x09, 0x93, 0xea, 0x20, 0x64, 0x63, 0x82, 0xe6, 0x61, 0x98, 0xb1, 0x4f, 0x42, 0xba, - 0x56, 0xa6, 0x5d, 0x60, 0xac, 0x15, 0xe6, 0xe5, 0xac, 0x0b, 0xde, 0x3b, 0x64, 0x69, 0x3f, 0x26, - 0xfc, 0x4d, 0x5f, 0xd4, 0xba, 0x20, 0x01, 0x38, 0xc1, 0xb1, 0xff, 0x2f, 0x67, 0x43, 0x93, 0xd3, - 0x76, 0x80, 0xfb, 0xe5, 0x59, 0x28, 0xed, 0x04, 0x51, 0x4c, 0xb1, 0x59, 0x1b, 0xc3, 0x09, 0xe3, - 0x79, 0x5d, 0x94, 0x63, 0x85, 0x81, 0x5e, 0x83, 0x89, 0x86, 0xde, 0x80, 0xb8, 0x1c, 0xd5, 0x31, - 0x62, 0xb4, 0x8e, 0x4d, 0x5c, 0xf4, 0x2a, 0x94, 0x98, 0x0d, 0x48, 0x23, 0x68, 0x0a, 0xae, 0x4d, - 0xde, 0xf0, 0xa5, 0x9a, 0x28, 0x3f, 0xd4, 0x7e, 0x63, 0x85, 0x8d, 0x2e, 0xc3, 0x08, 0xed, 0x42, - 0xb5, 0x26, 0xae, 0x25, 0x25, 0x28, 0xba, 0xce, 0x4a, 0xb1, 0x80, 0xda, 0x7f, 0xa3, 0xa0, 0x8d, - 0x32, 0x7d, 0x0f, 0x13, 0x54, 0x83, 0xd1, 0x7b, 0x8e, 0x17, 0x7b, 0xfe, 0xb6, 0xe0, 0x3f, 0x9e, - 0xee, 0x79, 0x47, 0xb1, 0x4a, 0x77, 0x79, 0x05, 0x7e, 0x8b, 0x8a, 0x3f, 0x58, 0x92, 0xa1, 0x14, - 0xc3, 0x8e, 0xef, 0x53, 0x8a, 0x85, 0x41, 0x29, 0x62, 0x5e, 0x81, 0x53, 0x14, 0x7f, 0xb0, 0x24, - 0x83, 0xde, 0x02, 0x90, 0x3b, 0x8c, 0xb8, 0xc2, 0xf6, 0xe2, 0xd9, 0xfe, 0x44, 0x37, 0x54, 0x9d, - 0xa5, 0x49, 0x7a, 0x47, 0x27, 0xff, 0xb1, 0x46, 0xcf, 0x8e, 0x19, 0x9f, 0xd6, 0xdd, 0x19, 0xf4, - 0xcd, 0x74, 0x89, 0x3b, 0x61, 0x4c, 0xdc, 0xc5, 0x58, 0x0c, 0xce, 0x87, 0x07, 0x7b, 0xa4, 0x6c, - 0x78, 0x2d, 0xa2, 0x6f, 0x07, 0x41, 0x04, 0x27, 0xf4, 0xec, 0x5f, 0x28, 0xc2, 0x6c, 0x5e, 0x77, - 0xe9, 0xa2, 0x23, 0xf7, 0xbd, 0x78, 0x99, 0xb2, 0x57, 0x96, 0xb9, 0xe8, 0x56, 0x44, 0x39, 0x56, - 0x18, 0x74, 0xf6, 0x23, 0x6f, 0x5b, 0xbe, 0x31, 0x87, 0x93, 0xd9, 0xaf, 0xb3, 0x52, 0x2c, 0xa0, - 0x14, 0x2f, 0x24, 0x4e, 0x24, 0x8c, 0x7b, 0xb4, 0x55, 0x82, 0x59, 0x29, 0x16, 0x50, 0x5d, 0xda, - 0x35, 0xd4, 0x47, 0xda, 0x65, 0x0c, 0xd1, 0xf0, 0xf1, 0x0e, 0x11, 0xfa, 0x2c, 0xc0, 0x96, 0xe7, - 0x7b, 0xd1, 0x0e, 0xa3, 0x3e, 0x72, 0x64, 0xea, 0x8a, 0x39, 0x5b, 0x55, 0x54, 0xb0, 0x46, 0x11, - 0xbd, 0x0c, 0x63, 0x6a, 0x03, 0x56, 0x2b, 0x4c, 0xd3, 0xa9, 0x59, 0x8e, 0x24, 0xa7, 0x51, 0x05, - 0xeb, 0x78, 0xf6, 0xe7, 0xd3, 0xeb, 0x45, 0xec, 0x00, 0x6d, 0x7c, 0xad, 0x41, 0xc7, 0xb7, 0xd0, - 0x7b, 0x7c, 0xed, 0xaf, 0x16, 0x61, 0xca, 0x68, 0xac, 0x13, 0x0d, 0x70, 0x66, 0x5d, 0xa3, 0x07, - 0xb8, 0x13, 0x13, 0xb1, 0xff, 0xec, 0xfe, 0x5b, 0x45, 0x3f, 0xe4, 0xe9, 0x0e, 0xe0, 0xf5, 0xd1, - 0x67, 0xa1, 0xdc, 0x74, 0x22, 0x26, 0x39, 0x23, 0x62, 0xdf, 0x0d, 0x42, 0x2c, 0x79, 0x98, 0x38, - 0x51, 0xac, 0xdd, 0x9a, 0x9c, 0x76, 0x42, 0x92, 0xde, 0x34, 0x94, 0x3f, 0x91, 0xd6, 0x63, 0xaa, - 0x13, 0x94, 0x89, 0xd9, 0xc7, 0x1c, 0x86, 0x5e, 0x85, 0xf1, 0x90, 0xb0, 0x55, 0xb1, 0x4c, 0xb9, - 0x39, 0xb6, 0xcc, 0x86, 0x13, 0xb6, 0x0f, 0x6b, 0x30, 0x6c, 0x60, 0x26, 0x6f, 0x83, 0x91, 0x1e, - 0x6f, 0x83, 0xa7, 0x61, 0x94, 0xfd, 0x50, 0x2b, 0x40, 0xcd, 0x46, 0x95, 0x17, 0x63, 0x09, 0x4f, - 0x2f, 0x98, 0xd2, 0x60, 0x0b, 0x86, 0xbe, 0x3e, 0xc4, 0xa2, 0x66, 0x5a, 0xe6, 0x12, 0x3f, 0xe5, - 0xc4, 0x92, 0xc7, 0x12, 0x66, 0x7f, 0x18, 0x26, 0x2b, 0x0e, 0x69, 0x05, 0xfe, 0x8a, 0xef, 0xb6, - 0x03, 0xcf, 0x8f, 0xd1, 0x2c, 0x0c, 0xb1, 0x4b, 0x84, 0x1f, 0x01, 0x43, 0xb4, 0x21, 0x3c, 0x44, - 0x1f, 0x04, 0xf6, 0x36, 0x9c, 0xa9, 0x04, 0xf7, 0xfc, 0x7b, 0x4e, 0xe8, 0x2e, 0xd6, 0xaa, 0xda, - 0xfb, 0x7a, 0x5d, 0xbe, 0xef, 0xb8, 0xd1, 0x56, 0xe6, 0xd1, 0xab, 0xd5, 0xe4, 0x6c, 0xed, 0xaa, - 0xd7, 0x24, 0x39, 0x52, 0x90, 0xbf, 0x55, 0x30, 0x5a, 0x4a, 0xf0, 0x95, 0x56, 0xcb, 0xca, 0xd5, - 0x6a, 0xbd, 0x09, 0xa5, 0x2d, 0x8f, 0x34, 0x5d, 0x4c, 0xb6, 0xc4, 0x4a, 0x7c, 0x2a, 0xdf, 0x0e, - 0x65, 0x95, 0x62, 0x4a, 0xa9, 0x17, 0x7f, 0x1d, 0xae, 0x8a, 0xca, 0x58, 0x91, 0x41, 0xbb, 0x30, - 0x2d, 0x1f, 0x0c, 0x12, 0x2a, 0xd6, 0xe5, 0xd3, 0xbd, 0x5e, 0x21, 0x26, 0xf1, 0xd3, 0x0f, 0x0e, - 0xe6, 0xa7, 0x71, 0x8a, 0x0c, 0xee, 0x22, 0x4c, 0x9f, 0x83, 0x2d, 0x7a, 0x02, 0x0f, 0xb1, 0xe1, - 0x67, 0xcf, 0x41, 0xf6, 0xb2, 0x65, 0xa5, 0xf6, 0x0f, 0x5b, 0xf0, 0x58, 0xd7, 0xc8, 0x88, 0x17, - 0xfe, 0x31, 0xcf, 0x42, 0xfa, 0xc5, 0x5d, 0xe8, 0xff, 0xe2, 0xb6, 0x7f, 0xda, 0x82, 0xd3, 0x2b, - 0xad, 0x76, 0xbc, 0x5f, 0xf1, 0x4c, 0x15, 0xd4, 0x2b, 0x30, 0xd2, 0x22, 0xae, 0xd7, 0x69, 0x89, - 0x99, 0x9b, 0x97, 0xa7, 0xd4, 0x1a, 0x2b, 0x3d, 0x3c, 0x98, 0x9f, 0xa8, 0xc7, 0x41, 0xe8, 0x6c, - 0x13, 0x5e, 0x80, 0x05, 0x3a, 0x3b, 0xeb, 0xbd, 0x77, 0xc8, 0x4d, 0xaf, 0xe5, 0x49, 0xbb, 0xa2, - 0x9e, 0x32, 0xbb, 0x05, 0x39, 0xa0, 0x0b, 0x6f, 0x76, 0x1c, 0x3f, 0xf6, 0xe2, 0x7d, 0xa1, 0x3d, - 0x92, 0x44, 0x70, 0x42, 0xcf, 0xfe, 0x8a, 0x05, 0x53, 0x72, 0xdd, 0x2f, 0xba, 0x6e, 0x48, 0xa2, - 0x08, 0xcd, 0x41, 0xc1, 0x6b, 0x8b, 0x5e, 0x82, 0xe8, 0x65, 0xa1, 0x5a, 0xc3, 0x05, 0xaf, 0x2d, - 0xd9, 0x32, 0x76, 0x10, 0x16, 0x4d, 0x45, 0xda, 0x75, 0x51, 0x8e, 0x15, 0x06, 0xba, 0x02, 0x25, - 0x3f, 0x70, 0xb9, 0x6d, 0x17, 0xbf, 0xd2, 0xd8, 0x02, 0x5b, 0x17, 0x65, 0x58, 0x41, 0x51, 0x0d, - 0xca, 0xdc, 0xec, 0x29, 0x59, 0xb4, 0x03, 0x19, 0x4f, 0xb1, 0x2f, 0xdb, 0x90, 0x35, 0x71, 0x42, - 0xc4, 0xfe, 0x15, 0x0b, 0xc6, 0xe5, 0x97, 0x0d, 0xc8, 0x73, 0xd2, 0xad, 0x95, 0xf0, 0x9b, 0xc9, - 0xd6, 0xa2, 0x3c, 0x23, 0x83, 0x18, 0xac, 0x62, 0xf1, 0x48, 0xac, 0xe2, 0xf3, 0x30, 0xe6, 0xb4, - 0xdb, 0x35, 0x93, 0xcf, 0x64, 0x4b, 0x69, 0x31, 0x29, 0xc6, 0x3a, 0x8e, 0xfd, 0x43, 0x05, 0x98, - 0x94, 0x5f, 0x50, 0xef, 0x6c, 0x46, 0x24, 0x46, 0x1b, 0x50, 0x76, 0xf8, 0x2c, 0x11, 0xb9, 0xc8, - 0x9f, 0xcc, 0x96, 0x23, 0x18, 0x53, 0x9a, 0x5c, 0xf8, 0x8b, 0xb2, 0x36, 0x4e, 0x08, 0xa1, 0x26, - 0xcc, 0xf8, 0x41, 0xcc, 0x0e, 0x7f, 0x05, 0xef, 0xa5, 0xda, 0x49, 0x53, 0x3f, 0x27, 0xa8, 0xcf, - 0xac, 0xa7, 0xa9, 0xe0, 0x6e, 0xc2, 0x68, 0x45, 0xca, 0x66, 0x8a, 0xf9, 0xc2, 0x00, 0x7d, 0xe2, - 0xb2, 0x45, 0x33, 0xf6, 0x2f, 0x5b, 0x50, 0x96, 0x68, 0x27, 0xa1, 0xc5, 0x5b, 0x83, 0xd1, 0x88, - 0x4d, 0x82, 0x1c, 0x1a, 0xbb, 0x57, 0xc7, 0xf9, 0x7c, 0x25, 0x77, 0x1a, 0xff, 0x1f, 0x61, 0x49, - 0x83, 0x89, 0xe6, 0x55, 0xf7, 0xdf, 0x23, 0xa2, 0x79, 0xd5, 0x9f, 0x9c, 0x4b, 0xe9, 0x0f, 0x59, - 0x9f, 0x35, 0x59, 0x17, 0x65, 0xbd, 0xda, 0x21, 0xd9, 0xf2, 0xee, 0xa7, 0x59, 0xaf, 0x1a, 0x2b, - 0xc5, 0x02, 0x8a, 0xde, 0x82, 0xf1, 0x86, 0x94, 0xc9, 0x26, 0x3b, 0xfc, 0x72, 0x4f, 0xfd, 0x80, - 0x52, 0x25, 0x71, 0x59, 0xc8, 0xb2, 0x56, 0x1f, 0x1b, 0xd4, 0x4c, 0x33, 0x82, 0x62, 0x3f, 0x33, - 0x82, 0x84, 0x6e, 0xbe, 0x52, 0xfd, 0x47, 0x2c, 0x18, 0xe1, 0xb2, 0xb8, 0xc1, 0x44, 0xa1, 0x9a, - 0x66, 0x2d, 0x19, 0xbb, 0x3b, 0xb4, 0x50, 0x68, 0xca, 0xd0, 0x1a, 0x94, 0xd9, 0x0f, 0x26, 0x4b, - 0x2c, 0xe6, 0x5b, 0xdd, 0xf3, 0x56, 0xf5, 0x0e, 0xde, 0x91, 0xd5, 0x70, 0x42, 0xc1, 0xfe, 0x81, - 0x22, 0x3d, 0xdd, 0x12, 0x54, 0xe3, 0xd2, 0xb7, 0x1e, 0xdd, 0xa5, 0x5f, 0x78, 0x54, 0x97, 0xfe, - 0x36, 0x4c, 0x35, 0x34, 0x3d, 0x5c, 0x32, 0x93, 0x57, 0x7a, 0x2e, 0x12, 0x4d, 0x65, 0xc7, 0xa5, - 0x2c, 0xcb, 0x26, 0x11, 0x9c, 0xa6, 0x8a, 0xbe, 0x19, 0xc6, 0xf9, 0x3c, 0x8b, 0x56, 0xb8, 0x25, - 0xc6, 0x87, 0xf2, 0xd7, 0x8b, 0xde, 0x04, 0x97, 0xca, 0x69, 0xd5, 0xb1, 0x41, 0xcc, 0xfe, 0x13, - 0x0b, 0xd0, 0x4a, 0x7b, 0x87, 0xb4, 0x48, 0xe8, 0x34, 0x13, 0x71, 0xfa, 0x5f, 0xb3, 0x60, 0x96, - 0x74, 0x15, 0x2f, 0x07, 0xad, 0x96, 0x78, 0xb4, 0xe4, 0xbc, 0xab, 0x57, 0x72, 0xea, 0x28, 0xb7, - 0x84, 0xd9, 0x3c, 0x0c, 0x9c, 0xdb, 0x1e, 0x5a, 0x83, 0x53, 0xfc, 0x96, 0x54, 0x00, 0xcd, 0xf6, - 0xfa, 0x71, 0x41, 0xf8, 0xd4, 0x46, 0x37, 0x0a, 0xce, 0xaa, 0x67, 0x7f, 0xc7, 0x38, 0xe4, 0xf6, - 0xe2, 0x7d, 0x3d, 0xc2, 0xfb, 0x7a, 0x84, 0xf7, 0xf5, 0x08, 0xef, 0xeb, 0x11, 0xde, 0xd7, 0x23, - 0x7c, 0xdd, 0xeb, 0x11, 0xfe, 0xc8, 0x82, 0x53, 0xdd, 0xd7, 0xc0, 0x49, 0x30, 0xe6, 0x1d, 0x38, - 0xd5, 0x7d, 0xd7, 0xf5, 0xb4, 0xb3, 0xeb, 0xee, 0x67, 0x72, 0xef, 0x65, 0x7c, 0x03, 0xce, 0xa2, - 0x6f, 0xff, 0x42, 0x09, 0x86, 0x57, 0xf6, 0x88, 0x1f, 0x9f, 0xc0, 0x27, 0x36, 0x60, 0xd2, 0xf3, - 0xf7, 0x82, 0xe6, 0x1e, 0x71, 0x39, 0xfc, 0x28, 0x4f, 0xe4, 0xb3, 0x82, 0xf4, 0x64, 0xd5, 0x20, - 0x81, 0x53, 0x24, 0x1f, 0x85, 0x98, 0xfa, 0x1a, 0x8c, 0xf0, 0xdb, 0x41, 0xc8, 0xa8, 0x33, 0x2f, - 0x03, 0x36, 0x88, 0xe2, 0xce, 0x4b, 0x44, 0xe8, 0xfc, 0xf6, 0x11, 0xd5, 0xd1, 0xe7, 0x61, 0x72, - 0xcb, 0x0b, 0xa3, 0x78, 0xc3, 0x6b, 0x91, 0x28, 0x76, 0x5a, 0xed, 0x87, 0x10, 0x4b, 0xab, 0x71, - 0x58, 0x35, 0x28, 0xe1, 0x14, 0x65, 0xb4, 0x0d, 0x13, 0x4d, 0x47, 0x6f, 0x6a, 0xf4, 0xc8, 0x4d, - 0xa9, 0x6b, 0xe7, 0xa6, 0x4e, 0x08, 0x9b, 0x74, 0xe9, 0x3e, 0x6d, 0x30, 0xc9, 0x6a, 0x89, 0xc9, - 0x1b, 0xd4, 0x3e, 0xe5, 0x22, 0x55, 0x0e, 0xa3, 0x1c, 0x14, 0xb3, 0xbc, 0x2d, 0x9b, 0x1c, 0x94, - 0x66, 0x5f, 0xfb, 0x39, 0x28, 0x13, 0x3a, 0x84, 0x94, 0xb0, 0xb8, 0xb9, 0xae, 0x0e, 0xd6, 0xd7, - 0x35, 0xaf, 0x11, 0x06, 0xa6, 0x42, 0x60, 0x45, 0x52, 0xc2, 0x09, 0x51, 0xb4, 0x0c, 0x23, 0x11, - 0x09, 0x3d, 0x12, 0x89, 0x3b, 0xac, 0xc7, 0x34, 0x32, 0x34, 0xee, 0xb4, 0xc2, 0x7f, 0x63, 0x51, - 0x95, 0x2e, 0x2f, 0x87, 0xc9, 0x4a, 0xd9, 0x2d, 0xa3, 0x2d, 0xaf, 0x45, 0x56, 0x8a, 0x05, 0x14, - 0xbd, 0x01, 0xa3, 0x21, 0x69, 0x32, 0x8d, 0xd3, 0xc4, 0xe0, 0x8b, 0x9c, 0x2b, 0xb0, 0x78, 0x3d, - 0x2c, 0x09, 0xa0, 0x1b, 0x80, 0x42, 0x42, 0x39, 0x30, 0xcf, 0xdf, 0x56, 0xf6, 0xa8, 0xe2, 0x04, - 0x57, 0x3b, 0x1e, 0x27, 0x18, 0xd2, 0x7f, 0x08, 0x67, 0x54, 0x43, 0xd7, 0x60, 0x46, 0x95, 0x56, - 0xfd, 0x28, 0x76, 0xe8, 0xc9, 0x39, 0xc5, 0x68, 0x29, 0x01, 0x08, 0x4e, 0x23, 0xe0, 0xee, 0x3a, - 0xf6, 0x4f, 0x5a, 0xc0, 0xc7, 0xf9, 0x04, 0x9e, 0xfd, 0xaf, 0x9b, 0xcf, 0xfe, 0x73, 0xb9, 0x33, - 0x97, 0xf3, 0xe4, 0x7f, 0x60, 0xc1, 0x98, 0x36, 0xb3, 0xc9, 0x9a, 0xb5, 0x7a, 0xac, 0xd9, 0x0e, - 0x4c, 0xd3, 0x95, 0x7e, 0x6b, 0x33, 0x22, 0xe1, 0x1e, 0x71, 0xd9, 0xc2, 0x2c, 0x3c, 0xdc, 0xc2, - 0x54, 0xb6, 0x6f, 0x37, 0x53, 0x04, 0x71, 0x57, 0x13, 0xe8, 0x15, 0xa9, 0x7e, 0x29, 0x1a, 0x76, - 0xe6, 0x5c, 0xb5, 0x72, 0x78, 0x30, 0x3f, 0xad, 0x7d, 0x88, 0xae, 0x6e, 0xb1, 0x3f, 0x27, 0xbf, - 0x51, 0xd9, 0x18, 0x36, 0xd4, 0x62, 0x49, 0xd9, 0x18, 0xaa, 0xe5, 0x80, 0x13, 0x1c, 0xba, 0x47, - 0x77, 0x82, 0x28, 0x4e, 0xdb, 0x18, 0x5e, 0x0f, 0xa2, 0x18, 0x33, 0x88, 0xfd, 0x22, 0xc0, 0xca, - 0x7d, 0xd2, 0xe0, 0x4b, 0x5d, 0x7f, 0xce, 0x58, 0xf9, 0xcf, 0x19, 0xfb, 0xb7, 0x2d, 0x98, 0x5c, - 0x5d, 0x36, 0x84, 0xc8, 0x0b, 0x00, 0xfc, 0x0d, 0x76, 0xf7, 0xee, 0xba, 0x54, 0xd0, 0x73, 0x1d, - 0xab, 0x2a, 0xc5, 0x1a, 0x06, 0x3a, 0x07, 0xc5, 0x66, 0xc7, 0x17, 0x02, 0xcd, 0x51, 0x7a, 0x61, - 0xdf, 0xec, 0xf8, 0x98, 0x96, 0x69, 0x4e, 0x0e, 0xc5, 0x81, 0x9d, 0x1c, 0xfa, 0x06, 0x1b, 0x40, - 0xf3, 0x30, 0x7c, 0xef, 0x9e, 0xe7, 0x72, 0x97, 0x4e, 0x61, 0x3c, 0x70, 0xf7, 0x6e, 0xb5, 0x12, - 0x61, 0x5e, 0x6e, 0x7f, 0xa9, 0x08, 0x73, 0xab, 0x4d, 0x72, 0xff, 0x5d, 0xba, 0xb5, 0x0e, 0xea, - 0xa2, 0x71, 0x34, 0xd1, 0xd0, 0x51, 0xdd, 0x70, 0xfa, 0x8f, 0xc7, 0x16, 0x8c, 0x72, 0x13, 0x3b, - 0xe9, 0xe4, 0xfa, 0x5a, 0x56, 0xeb, 0xf9, 0x03, 0xb2, 0xc0, 0x4d, 0xf5, 0x84, 0x8f, 0x9e, 0xba, - 0x69, 0x45, 0x29, 0x96, 0xc4, 0xe7, 0x3e, 0x06, 0xe3, 0x3a, 0xe6, 0x91, 0x1c, 0xe2, 0xfe, 0x6a, - 0x11, 0xa6, 0x69, 0x0f, 0x1e, 0xe9, 0x44, 0xdc, 0xee, 0x9e, 0x88, 0xe3, 0x76, 0x8a, 0xea, 0x3f, - 0x1b, 0x6f, 0xa5, 0x67, 0xe3, 0xf9, 0xbc, 0xd9, 0x38, 0xe9, 0x39, 0xf8, 0x76, 0x0b, 0x4e, 0xad, - 0x36, 0x83, 0xc6, 0x6e, 0xca, 0x71, 0xe9, 0x65, 0x18, 0xa3, 0xe7, 0x78, 0x64, 0xf8, 0xd4, 0x1b, - 0x51, 0x16, 0x04, 0x08, 0xeb, 0x78, 0x5a, 0xb5, 0xdb, 0xb7, 0xab, 0x95, 0xac, 0xe0, 0x0c, 0x02, - 0x84, 0x75, 0x3c, 0xfb, 0x37, 0x2d, 0xb8, 0x70, 0x6d, 0x79, 0x25, 0x59, 0x8a, 0x5d, 0xf1, 0x21, - 0x2e, 0xc3, 0x48, 0xdb, 0xd5, 0xba, 0x92, 0x08, 0x7c, 0x2b, 0xac, 0x17, 0x02, 0xfa, 0x5e, 0x89, - 0x7d, 0xf2, 0x13, 0x16, 0x9c, 0xba, 0xe6, 0xc5, 0xf4, 0x5a, 0x4e, 0x47, 0x2a, 0xa0, 0xf7, 0x72, - 0xe4, 0xc5, 0x41, 0xb8, 0x9f, 0x8e, 0x54, 0x80, 0x15, 0x04, 0x6b, 0x58, 0xbc, 0xe5, 0x3d, 0x8f, - 0x19, 0x77, 0x17, 0x4c, 0xd5, 0x17, 0x16, 0xe5, 0x58, 0x61, 0xd0, 0x0f, 0x73, 0xbd, 0x90, 0x49, - 0x0d, 0xf7, 0xc5, 0x09, 0xab, 0x3e, 0xac, 0x22, 0x01, 0x38, 0xc1, 0xa1, 0x0f, 0xa8, 0xf9, 0x6b, - 0xcd, 0x4e, 0x14, 0x93, 0x70, 0x2b, 0xca, 0x39, 0x1d, 0x5f, 0x84, 0x32, 0x91, 0x32, 0x7a, 0xd1, - 0x6b, 0xc5, 0x6a, 0x2a, 0xe1, 0x3d, 0x0f, 0x98, 0xa0, 0xf0, 0x06, 0x70, 0x83, 0x3c, 0x9a, 0x1f, - 0xdb, 0x2a, 0x20, 0xa2, 0xb7, 0xa5, 0x47, 0x90, 0x60, 0xae, 0xe8, 0x2b, 0x5d, 0x50, 0x9c, 0x51, - 0xc3, 0xfe, 0x61, 0x0b, 0xce, 0xa8, 0x0f, 0x7e, 0xcf, 0x7d, 0xa6, 0xfd, 0xb3, 0x05, 0x98, 0xb8, - 0xbe, 0xb1, 0x51, 0xbb, 0x46, 0x62, 0x71, 0x6d, 0xf7, 0xd7, 0xbc, 0x63, 0x4d, 0x81, 0xd8, 0xeb, - 0x15, 0xd8, 0x89, 0xbd, 0xe6, 0x02, 0x0f, 0x44, 0xb4, 0x50, 0xf5, 0xe3, 0x5b, 0x61, 0x3d, 0x0e, - 0x3d, 0x7f, 0x3b, 0x53, 0xe5, 0x28, 0x99, 0x8b, 0x62, 0x1e, 0x73, 0x81, 0x5e, 0x84, 0x11, 0x16, - 0x09, 0x49, 0x4e, 0xc2, 0xe3, 0xea, 0x11, 0xc5, 0x4a, 0x0f, 0x0f, 0xe6, 0xcb, 0xb7, 0x71, 0x95, - 0xff, 0xc1, 0x02, 0x15, 0xdd, 0x86, 0xb1, 0x9d, 0x38, 0x6e, 0x5f, 0x27, 0x8e, 0x4b, 0x5f, 0xcb, - 0xfc, 0x38, 0xbc, 0x98, 0x75, 0x1c, 0xd2, 0x41, 0xe0, 0x68, 0xc9, 0x09, 0x92, 0x94, 0x45, 0x58, - 0xa7, 0x63, 0xd7, 0x01, 0x12, 0xd8, 0x31, 0xe9, 0x4e, 0xec, 0x3f, 0xb0, 0x60, 0x94, 0x07, 0xa5, - 0x08, 0xd1, 0xc7, 0x61, 0x88, 0xdc, 0x27, 0x0d, 0xc1, 0x2a, 0x67, 0x76, 0x38, 0xe1, 0xb4, 0xb8, - 0x0c, 0x98, 0xfe, 0xc7, 0xac, 0x16, 0xba, 0x0e, 0xa3, 0xb4, 0xb7, 0xd7, 0x54, 0x84, 0x8e, 0x27, - 0xf2, 0xbe, 0x58, 0x4d, 0x3b, 0x67, 0xce, 0x44, 0x11, 0x96, 0xd5, 0x99, 0xc2, 0xba, 0xd1, 0xae, - 0xd3, 0x13, 0x3b, 0xee, 0xc5, 0x58, 0x6c, 0x2c, 0xd7, 0x38, 0x92, 0xa0, 0xc6, 0x15, 0xd6, 0xb2, - 0x10, 0x27, 0x44, 0xec, 0x0d, 0x28, 0xd3, 0x49, 0x5d, 0x6c, 0x7a, 0x4e, 0x6f, 0x1d, 0xfc, 0x33, - 0x50, 0x96, 0x1a, 0xf6, 0x48, 0x38, 0xa3, 0x33, 0xaa, 0x52, 0x01, 0x1f, 0xe1, 0x04, 0x6e, 0x6f, - 0xc1, 0x69, 0x66, 0x2f, 0xe9, 0xc4, 0x3b, 0xc6, 0x1e, 0xeb, 0xbf, 0x98, 0x9f, 0x15, 0x2f, 0x4f, - 0x3e, 0x33, 0xb3, 0x9a, 0xbf, 0xe7, 0xb8, 0xa4, 0x98, 0xbc, 0x42, 0xed, 0xaf, 0x0e, 0xc1, 0xe3, - 0xd5, 0x7a, 0x7e, 0xbc, 0x92, 0x57, 0x61, 0x9c, 0xf3, 0xa5, 0x74, 0x69, 0x3b, 0x4d, 0xd1, 0xae, - 0x12, 0xfe, 0x6e, 0x68, 0x30, 0x6c, 0x60, 0xa2, 0x0b, 0x50, 0xf4, 0xde, 0xf6, 0xd3, 0xde, 0x50, - 0xd5, 0x37, 0xd7, 0x31, 0x2d, 0xa7, 0x60, 0xca, 0xe2, 0xf2, 0xbb, 0x43, 0x81, 0x15, 0x9b, 0xfb, - 0x3a, 0x4c, 0x7a, 0x51, 0x23, 0xf2, 0xaa, 0x3e, 0x3d, 0x67, 0xb4, 0x93, 0x4a, 0x49, 0x45, 0x68, - 0xa7, 0x15, 0x14, 0xa7, 0xb0, 0xb5, 0x8b, 0x6c, 0x78, 0x60, 0x36, 0xb9, 0xaf, 0x77, 0x36, 0x7d, - 0x01, 0xb4, 0xd9, 0xd7, 0x45, 0x4c, 0x8a, 0x2f, 0x5e, 0x00, 0xfc, 0x83, 0x23, 0x2c, 0x61, 0xf4, - 0xc9, 0xd9, 0xd8, 0x71, 0xda, 0x8b, 0x9d, 0x78, 0xa7, 0xe2, 0x45, 0x8d, 0x60, 0x8f, 0x84, 0xfb, - 0x4c, 0x5a, 0x50, 0x4a, 0x9e, 0x9c, 0x0a, 0xb0, 0x7c, 0x7d, 0xb1, 0x46, 0x31, 0x71, 0x77, 0x1d, - 0xb4, 0x08, 0x53, 0xb2, 0xb0, 0x4e, 0x22, 0x76, 0x85, 0x8d, 0x31, 0x32, 0xca, 0x3f, 0x49, 0x14, - 0x2b, 0x22, 0x69, 0x7c, 0x93, 0x93, 0x86, 0xe3, 0xe0, 0xa4, 0x5f, 0x81, 0x09, 0xcf, 0xf7, 0x62, - 0xcf, 0x89, 0x03, 0xae, 0x82, 0xe2, 0x82, 0x01, 0x26, 0x5b, 0xaf, 0xea, 0x00, 0x6c, 0xe2, 0xd9, - 0xff, 0x6d, 0x08, 0x66, 0xd8, 0xb4, 0xbd, 0xbf, 0xc2, 0xbe, 0x9e, 0x56, 0xd8, 0xed, 0xee, 0x15, - 0x76, 0x1c, 0x4f, 0x84, 0x87, 0x5e, 0x66, 0x9f, 0x87, 0xb2, 0x72, 0xc9, 0x92, 0x3e, 0x99, 0x56, - 0x8e, 0x4f, 0x66, 0x7f, 0xee, 0x43, 0x5a, 0xb5, 0x15, 0x33, 0xad, 0xda, 0xfe, 0x8e, 0x05, 0x89, - 0x4e, 0x05, 0x5d, 0x87, 0x72, 0x3b, 0x60, 0xc6, 0x9a, 0xa1, 0xb4, 0x80, 0x7e, 0x3c, 0xf3, 0xa2, - 0xe2, 0x97, 0x22, 0xff, 0xf8, 0x9a, 0xac, 0x81, 0x93, 0xca, 0x68, 0x09, 0x46, 0xdb, 0x21, 0xa9, - 0xc7, 0x2c, 0x6c, 0x49, 0x5f, 0x3a, 0x7c, 0x8d, 0x70, 0x7c, 0x2c, 0x2b, 0xda, 0x3f, 0x67, 0x01, - 0x70, 0xc3, 0x31, 0xc7, 0xdf, 0x26, 0x27, 0x20, 0xee, 0xae, 0xc0, 0x50, 0xd4, 0x26, 0x8d, 0x5e, - 0x66, 0xb4, 0x49, 0x7f, 0xea, 0x6d, 0xd2, 0x48, 0x06, 0x9c, 0xfe, 0xc3, 0xac, 0xb6, 0xfd, 0x9d, - 0x00, 0x93, 0x09, 0x5a, 0x35, 0x26, 0x2d, 0xf4, 0x9c, 0x11, 0xc6, 0xe0, 0x5c, 0x2a, 0x8c, 0x41, - 0x99, 0x61, 0x6b, 0x92, 0xd5, 0xcf, 0x43, 0xb1, 0xe5, 0xdc, 0x17, 0xa2, 0xb3, 0x67, 0x7a, 0x77, - 0x83, 0xd2, 0x5f, 0x58, 0x73, 0xee, 0xf3, 0x47, 0xe2, 0x33, 0x72, 0x81, 0xac, 0x39, 0xf7, 0x0f, - 0xb9, 0xb1, 0x2c, 0x3b, 0xa4, 0x6e, 0x7a, 0x51, 0xfc, 0x85, 0xff, 0x9a, 0xfc, 0x67, 0xcb, 0x8e, - 0x36, 0xc2, 0xda, 0xf2, 0x7c, 0x61, 0x13, 0x35, 0x50, 0x5b, 0x9e, 0x9f, 0x6e, 0xcb, 0xf3, 0x07, - 0x68, 0xcb, 0xf3, 0xd1, 0x3b, 0x30, 0x2a, 0x4c, 0x16, 0x45, 0xd8, 0xa0, 0xab, 0x03, 0xb4, 0x27, - 0x2c, 0x1e, 0x79, 0x9b, 0x57, 0xe5, 0x23, 0x58, 0x94, 0xf6, 0x6d, 0x57, 0x36, 0x88, 0xfe, 0xa6, - 0x05, 0x93, 0xe2, 0x37, 0x26, 0x6f, 0x77, 0x48, 0x14, 0x0b, 0xde, 0xf3, 0xa3, 0x83, 0xf7, 0x41, - 0x54, 0xe4, 0x5d, 0xf9, 0xa8, 0x3c, 0x66, 0x4d, 0x60, 0xdf, 0x1e, 0xa5, 0x7a, 0x81, 0xfe, 0x91, - 0x05, 0xa7, 0x5b, 0xce, 0x7d, 0xde, 0x22, 0x2f, 0xc3, 0x4e, 0xec, 0x05, 0x42, 0xf5, 0xff, 0xf1, - 0xc1, 0xa6, 0xbf, 0xab, 0x3a, 0xef, 0xa4, 0xd4, 0x4f, 0x9e, 0xce, 0x42, 0xe9, 0xdb, 0xd5, 0xcc, - 0x7e, 0xcd, 0x6d, 0x41, 0x49, 0xae, 0xb7, 0x0c, 0x51, 0x43, 0x45, 0x67, 0xac, 0x8f, 0x6c, 0x31, - 0xaa, 0x87, 0x07, 0xa0, 0xed, 0x88, 0xb5, 0xf6, 0x48, 0xdb, 0xf9, 0x3c, 0x8c, 0xeb, 0x6b, 0xec, - 0x91, 0xb6, 0xf5, 0x36, 0x9c, 0xca, 0x58, 0x4b, 0x8f, 0xb4, 0xc9, 0x7b, 0x70, 0x2e, 0x77, 0x7d, - 0x3c, 0xca, 0x86, 0xed, 0x9f, 0xb5, 0xf4, 0x73, 0xf0, 0x04, 0x74, 0x0e, 0xcb, 0xa6, 0xce, 0xe1, - 0x62, 0xef, 0x9d, 0x93, 0xa3, 0x78, 0x78, 0x4b, 0xef, 0x34, 0x3d, 0xd5, 0xd1, 0x1b, 0x30, 0xd2, - 0xa4, 0x25, 0xd2, 0xf0, 0xd5, 0xee, 0xbf, 0x23, 0x13, 0x5e, 0x8a, 0x95, 0x47, 0x58, 0x50, 0xb0, - 0x7f, 0xd1, 0x82, 0xa1, 0x13, 0x18, 0x09, 0x6c, 0x8e, 0xc4, 0x73, 0xb9, 0xa4, 0x45, 0x44, 0xe3, - 0x05, 0xec, 0xdc, 0x5b, 0xb9, 0x1f, 0x13, 0x3f, 0x62, 0x4f, 0xc5, 0xcc, 0x81, 0xf9, 0xff, 0xe0, - 0xd4, 0xcd, 0xc0, 0x71, 0x97, 0x9c, 0xa6, 0xe3, 0x37, 0x48, 0x58, 0xf5, 0xb7, 0x8f, 0x64, 0xb4, - 0x5d, 0xe8, 0x67, 0xb4, 0x6d, 0xef, 0x00, 0xd2, 0x1b, 0x10, 0xde, 0x2f, 0x18, 0x46, 0x3d, 0xde, - 0x94, 0x18, 0xfe, 0xa7, 0xb2, 0x59, 0xb3, 0xae, 0x9e, 0x69, 0x7e, 0x1d, 0xbc, 0x00, 0x4b, 0x42, - 0xf6, 0xab, 0x90, 0xe9, 0x42, 0xdf, 0x5f, 0x6c, 0x60, 0x7f, 0x0a, 0x66, 0x58, 0xcd, 0x23, 0x3e, - 0x69, 0xed, 0x94, 0x54, 0x32, 0x23, 0xb8, 0x9e, 0xfd, 0x45, 0x0b, 0xa6, 0xd6, 0x53, 0x31, 0xc7, - 0x2e, 0x33, 0x05, 0x68, 0x86, 0x30, 0xbc, 0xce, 0x4a, 0xb1, 0x80, 0x1e, 0xbb, 0x0c, 0xea, 0x2f, - 0x2c, 0x48, 0xa2, 0x5a, 0x9c, 0x00, 0xe3, 0xb5, 0x6c, 0x30, 0x5e, 0x99, 0xb2, 0x11, 0xd5, 0x9d, - 0x3c, 0xbe, 0x0b, 0xdd, 0x50, 0xf1, 0x9e, 0x7a, 0x88, 0x45, 0x12, 0x32, 0x3c, 0x3a, 0xd0, 0xa4, - 0x19, 0x14, 0x4a, 0x46, 0x80, 0xb2, 0xff, 0x73, 0x01, 0x90, 0xc2, 0x1d, 0x38, 0x1e, 0x55, 0x77, - 0x8d, 0xe3, 0x89, 0x47, 0xb5, 0x07, 0x88, 0xa9, 0xf0, 0x43, 0xc7, 0x8f, 0x38, 0x59, 0x4f, 0x48, - 0xdd, 0x8e, 0x66, 0x1f, 0x30, 0x27, 0x9a, 0x44, 0x37, 0xbb, 0xa8, 0xe1, 0x8c, 0x16, 0x34, 0xd3, - 0x8c, 0xe1, 0x41, 0x4d, 0x33, 0x46, 0xfa, 0x78, 0xb8, 0xfd, 0x8c, 0x05, 0x13, 0x6a, 0x98, 0xde, - 0x23, 0xf6, 0xe7, 0xaa, 0x3f, 0x39, 0x47, 0x5f, 0x4d, 0xeb, 0x32, 0xbb, 0x12, 0xbe, 0x91, 0x79, - 0x2a, 0x3a, 0x4d, 0xef, 0x1d, 0xa2, 0xa2, 0x01, 0xce, 0x0b, 0xcf, 0x43, 0x51, 0x7a, 0x78, 0x30, - 0x3f, 0xa1, 0xfe, 0xf1, 0xe8, 0xc3, 0x49, 0x15, 0xfb, 0xc7, 0xe8, 0x66, 0x37, 0x97, 0x22, 0x7a, - 0x19, 0x86, 0xdb, 0x3b, 0x4e, 0x44, 0x52, 0x7e, 0x3a, 0xc3, 0x35, 0x5a, 0x78, 0x78, 0x30, 0x3f, - 0xa9, 0x2a, 0xb0, 0x12, 0xcc, 0xb1, 0x07, 0x8f, 0xf2, 0xd5, 0xbd, 0x38, 0xfb, 0x46, 0xf9, 0xfa, - 0x13, 0x0b, 0x86, 0xd6, 0x03, 0xf7, 0x24, 0x8e, 0x80, 0xd7, 0x8d, 0x23, 0xe0, 0x7c, 0x5e, 0x60, - 0xf8, 0xdc, 0xdd, 0xbf, 0x9a, 0xda, 0xfd, 0x17, 0x73, 0x29, 0xf4, 0xde, 0xf8, 0x2d, 0x18, 0x63, - 0xe1, 0xe6, 0x85, 0x4f, 0xd2, 0x8b, 0xc6, 0x86, 0x9f, 0x4f, 0x6d, 0xf8, 0x29, 0x0d, 0x55, 0xdb, - 0xe9, 0x4f, 0xc3, 0xa8, 0x70, 0x72, 0x49, 0x3b, 0x7c, 0x0a, 0x5c, 0x2c, 0xe1, 0xf6, 0x8f, 0x14, - 0xc1, 0x08, 0x6f, 0x8f, 0x7e, 0xd9, 0x82, 0x85, 0x90, 0x1b, 0xbf, 0xba, 0x95, 0x4e, 0xe8, 0xf9, - 0xdb, 0xf5, 0xc6, 0x0e, 0x71, 0x3b, 0x4d, 0xcf, 0xdf, 0xae, 0x6e, 0xfb, 0x81, 0x2a, 0x5e, 0xb9, - 0x4f, 0x1a, 0x1d, 0xa6, 0xbe, 0xea, 0x13, 0x4b, 0x5f, 0x19, 0x91, 0xbf, 0xf0, 0xe0, 0x60, 0x7e, - 0x01, 0x1f, 0x89, 0x36, 0x3e, 0x62, 0x5f, 0xd0, 0x6f, 0x5a, 0x70, 0x95, 0x47, 0x7d, 0x1f, 0xbc, - 0xff, 0x3d, 0xde, 0xb9, 0x35, 0x49, 0x2a, 0x21, 0xb2, 0x41, 0xc2, 0xd6, 0xd2, 0x2b, 0x62, 0x40, - 0xaf, 0xd6, 0x8e, 0xd6, 0x16, 0x3e, 0x6a, 0xe7, 0xec, 0x7f, 0x59, 0x84, 0x09, 0x11, 0x0d, 0x4a, - 0xdc, 0x01, 0x2f, 0x1b, 0x4b, 0xe2, 0x89, 0xd4, 0x92, 0x98, 0x31, 0x90, 0x8f, 0xe7, 0xf8, 0x8f, - 0x60, 0x86, 0x1e, 0xce, 0xd7, 0x89, 0x13, 0xc6, 0x9b, 0xc4, 0xe1, 0x16, 0x57, 0xc5, 0x23, 0x9f, - 0xfe, 0x4a, 0xb0, 0x76, 0x33, 0x4d, 0x0c, 0x77, 0xd3, 0xff, 0x7a, 0xba, 0x73, 0x7c, 0x98, 0xee, - 0x0a, 0xe8, 0xf5, 0x69, 0x28, 0x2b, 0x0f, 0x0d, 0x71, 0xe8, 0xf4, 0x8e, 0x8b, 0x97, 0xa6, 0xc0, - 0x85, 0x5f, 0x89, 0x77, 0x50, 0x42, 0xce, 0xfe, 0xc7, 0x05, 0xa3, 0x41, 0x3e, 0x89, 0xeb, 0x50, - 0x72, 0xa2, 0xc8, 0xdb, 0xf6, 0x89, 0x2b, 0x76, 0xec, 0x07, 0xf3, 0x76, 0xac, 0xd1, 0x0c, 0xf3, - 0x92, 0x59, 0x14, 0x35, 0xb1, 0xa2, 0x81, 0xae, 0x73, 0xbb, 0xb6, 0x3d, 0xf9, 0x52, 0x1b, 0x8c, - 0x1a, 0x48, 0xcb, 0xb7, 0x3d, 0x82, 0x45, 0x7d, 0xf4, 0x19, 0x6e, 0x78, 0x78, 0xc3, 0x0f, 0xee, - 0xf9, 0xd7, 0x82, 0x40, 0x46, 0x5c, 0x18, 0x8c, 0xe0, 0x8c, 0x34, 0x37, 0x54, 0xd5, 0xb1, 0x49, - 0x6d, 0xb0, 0x08, 0x99, 0xdf, 0x02, 0xa7, 0x28, 0x69, 0xd3, 0x21, 0x3a, 0x42, 0x04, 0xa6, 0x44, - 0xa8, 0x31, 0x59, 0x26, 0xc6, 0x2e, 0xf3, 0x11, 0x66, 0xd6, 0x4e, 0x24, 0xc0, 0x37, 0x4c, 0x12, - 0x38, 0x4d, 0xd3, 0xfe, 0x71, 0x0b, 0x98, 0x73, 0xe8, 0x09, 0xf0, 0x23, 0x9f, 0x30, 0xf9, 0x91, - 0xd9, 0xbc, 0x41, 0xce, 0x61, 0x45, 0x5e, 0xe2, 0x2b, 0xab, 0x16, 0x06, 0xf7, 0xf7, 0x85, 0xd1, - 0x47, 0xff, 0xf7, 0x87, 0xfd, 0x7f, 0x2c, 0x7e, 0x88, 0x29, 0xff, 0x09, 0xf4, 0xad, 0x50, 0x6a, - 0x38, 0x6d, 0xa7, 0xc1, 0x73, 0xb1, 0xe4, 0xca, 0xe2, 0x8c, 0x4a, 0x0b, 0xcb, 0xa2, 0x06, 0x97, - 0x2d, 0xc9, 0x90, 0x75, 0x25, 0x59, 0xdc, 0x57, 0x9e, 0xa4, 0x9a, 0x9c, 0xdb, 0x85, 0x09, 0x83, - 0xd8, 0x23, 0x15, 0x44, 0x7c, 0x2b, 0xbf, 0x62, 0x55, 0x88, 0xc5, 0x16, 0xcc, 0xf8, 0xda, 0x7f, - 0x7a, 0xa1, 0xc8, 0xc7, 0xe5, 0x07, 0xfb, 0x5d, 0xa2, 0xec, 0xf6, 0xd1, 0xfc, 0x4e, 0x53, 0x64, - 0x70, 0x37, 0x65, 0xfb, 0x47, 0x2d, 0x78, 0x4c, 0x47, 0xd4, 0x5c, 0x5b, 0xfa, 0x49, 0xf7, 0x2b, - 0x50, 0x0a, 0xda, 0x24, 0x74, 0xe2, 0x20, 0x14, 0xb7, 0xc6, 0x15, 0x39, 0xe8, 0xb7, 0x44, 0xf9, - 0xa1, 0x88, 0x64, 0x2e, 0xa9, 0xcb, 0x72, 0xac, 0x6a, 0xd2, 0xd7, 0x27, 0x1b, 0x8c, 0x48, 0x38, - 0x31, 0xb1, 0x33, 0x80, 0x29, 0xba, 0x23, 0x2c, 0x20, 0xf6, 0x57, 0x2d, 0xbe, 0xb0, 0xf4, 0xae, - 0xa3, 0xb7, 0x61, 0xba, 0xe5, 0xc4, 0x8d, 0x9d, 0x95, 0xfb, 0xed, 0x90, 0xeb, 0x4a, 0xe4, 0x38, - 0x3d, 0xd3, 0x6f, 0x9c, 0xb4, 0x8f, 0x4c, 0x6c, 0x29, 0xd7, 0x52, 0xc4, 0x70, 0x17, 0x79, 0xb4, - 0x09, 0x63, 0xac, 0x8c, 0xf9, 0xe7, 0x45, 0xbd, 0x58, 0x83, 0xbc, 0xd6, 0x94, 0xad, 0xc0, 0x5a, - 0x42, 0x07, 0xeb, 0x44, 0xed, 0x9f, 0x2a, 0xf2, 0xdd, 0xce, 0x58, 0xf9, 0xa7, 0x61, 0xb4, 0x1d, - 0xb8, 0xcb, 0xd5, 0x0a, 0x16, 0xb3, 0xa0, 0xae, 0x91, 0x1a, 0x2f, 0xc6, 0x12, 0x8e, 0xae, 0x40, - 0x49, 0xfc, 0x94, 0xba, 0x2d, 0x76, 0x36, 0x0b, 0xbc, 0x08, 0x2b, 0x28, 0x7a, 0x01, 0xa0, 0x1d, - 0x06, 0x7b, 0x9e, 0xcb, 0xe2, 0x46, 0x14, 0x4d, 0x33, 0x9f, 0x9a, 0x82, 0x60, 0x0d, 0x0b, 0xbd, - 0x06, 0x13, 0x1d, 0x3f, 0xe2, 0xec, 0x88, 0x16, 0x25, 0x56, 0x19, 0xa0, 0xdc, 0xd6, 0x81, 0xd8, - 0xc4, 0x45, 0x8b, 0x30, 0x12, 0x3b, 0xcc, 0x6c, 0x65, 0x38, 0xdf, 0xde, 0x76, 0x83, 0x62, 0xe8, - 0x69, 0x3f, 0x68, 0x05, 0x2c, 0x2a, 0xa2, 0x4f, 0x4b, 0x57, 0x59, 0x7e, 0xb0, 0x0b, 0x43, 0xf7, - 0xc1, 0x2e, 0x01, 0xcd, 0x51, 0x56, 0x18, 0xd0, 0x1b, 0xb4, 0xd0, 0xc7, 0x00, 0xc8, 0xfd, 0x98, - 0x84, 0xbe, 0xd3, 0x54, 0x56, 0x61, 0x8a, 0x2f, 0xa8, 0x04, 0xeb, 0x41, 0x7c, 0x3b, 0x22, 0x2b, - 0x0a, 0x03, 0x6b, 0xd8, 0xf6, 0x6f, 0x96, 0x01, 0x12, 0xbe, 0x1d, 0xbd, 0xd3, 0x75, 0x70, 0x3d, - 0xdb, 0x9b, 0xd3, 0x3f, 0xbe, 0x53, 0x0b, 0x7d, 0x97, 0x05, 0x63, 0x4e, 0xb3, 0x19, 0x34, 0x1c, - 0x1e, 0xc7, 0xb7, 0xd0, 0xfb, 0xe0, 0x14, 0xed, 0x2f, 0x26, 0x35, 0x78, 0x17, 0x5e, 0x94, 0x2b, - 0x54, 0x83, 0xf4, 0xed, 0x85, 0xde, 0x30, 0xfa, 0x88, 0x7c, 0x2a, 0x16, 0x8d, 0xa1, 0x54, 0x4f, - 0xc5, 0x32, 0xbb, 0x23, 0xf4, 0x57, 0xe2, 0x6d, 0xe3, 0x95, 0x38, 0x94, 0xef, 0x0b, 0x68, 0xb0, - 0xaf, 0xfd, 0x1e, 0x88, 0xa8, 0xa6, 0xc7, 0x05, 0x18, 0xce, 0x77, 0xbc, 0xd3, 0xde, 0x49, 0x7d, - 0x62, 0x02, 0x7c, 0x1e, 0xa6, 0x5c, 0x93, 0x09, 0x10, 0x2b, 0xf1, 0xa9, 0x3c, 0xba, 0x29, 0x9e, - 0x21, 0xb9, 0xf6, 0x53, 0x00, 0x9c, 0x26, 0x8c, 0x6a, 0x3c, 0x4c, 0x44, 0xd5, 0xdf, 0x0a, 0x84, - 0xb3, 0x85, 0x9d, 0x3b, 0x97, 0xfb, 0x51, 0x4c, 0x5a, 0x14, 0x33, 0xb9, 0xdd, 0xd7, 0x45, 0x5d, - 0xac, 0xa8, 0xa0, 0x37, 0x60, 0x84, 0x79, 0x5e, 0x45, 0xb3, 0xa5, 0x7c, 0x59, 0xb1, 0x19, 0xf7, - 0x2c, 0xd9, 0x90, 0xec, 0x6f, 0x84, 0x05, 0x05, 0x74, 0x5d, 0xfa, 0x35, 0x46, 0x55, 0xff, 0x76, - 0x44, 0x98, 0x5f, 0x63, 0x79, 0xe9, 0x83, 0x89, 0xcb, 0x22, 0x2f, 0xcf, 0x4c, 0x0e, 0x66, 0xd4, - 0xa4, 0x5c, 0x94, 0xf8, 0x2f, 0x73, 0x8e, 0xcd, 0x42, 0x7e, 0xf7, 0xcc, 0xbc, 0x64, 0xc9, 0x70, - 0xde, 0x31, 0x49, 0xe0, 0x34, 0x4d, 0xca, 0x91, 0xf2, 0x5d, 0x2f, 0xdc, 0x35, 0xfa, 0x9d, 0x1d, - 0xfc, 0x21, 0xce, 0x6e, 0x23, 0x5e, 0x82, 0x45, 0xfd, 0x13, 0x65, 0x0f, 0xe6, 0x7c, 0x98, 0x4e, - 0x6f, 0xd1, 0x47, 0xca, 0x8e, 0xfc, 0xc1, 0x10, 0x4c, 0x9a, 0x4b, 0x0a, 0x5d, 0x85, 0xb2, 0x20, - 0xa2, 0xf2, 0x04, 0xa8, 0x5d, 0xb2, 0x26, 0x01, 0x38, 0xc1, 0x61, 0xe9, 0x21, 0x58, 0x75, 0xcd, - 0xcc, 0x36, 0x49, 0x0f, 0xa1, 0x20, 0x58, 0xc3, 0xa2, 0x0f, 0xab, 0xcd, 0x20, 0x88, 0xd5, 0x85, - 0xa4, 0xd6, 0xdd, 0x12, 0x2b, 0xc5, 0x02, 0x4a, 0x2f, 0xa2, 0x5d, 0x12, 0xfa, 0xa4, 0x69, 0x46, - 0x14, 0x56, 0x17, 0xd1, 0x0d, 0x1d, 0x88, 0x4d, 0x5c, 0x7a, 0x9d, 0x06, 0x11, 0x5b, 0xc8, 0xe2, - 0xf9, 0x96, 0x98, 0x2d, 0xd7, 0xb9, 0x6b, 0xb5, 0x84, 0xa3, 0x4f, 0xc1, 0x63, 0x2a, 0x6a, 0x12, - 0xe6, 0x7a, 0x08, 0xd9, 0xe2, 0x88, 0x21, 0x6d, 0x79, 0x6c, 0x39, 0x1b, 0x0d, 0xe7, 0xd5, 0x47, - 0xaf, 0xc3, 0xa4, 0x60, 0xf1, 0x25, 0xc5, 0x51, 0xd3, 0x34, 0xe6, 0x86, 0x01, 0xc5, 0x29, 0x6c, - 0x19, 0x13, 0x99, 0x71, 0xd9, 0x92, 0x42, 0xa9, 0x3b, 0x26, 0xb2, 0x0e, 0xc7, 0x5d, 0x35, 0xd0, - 0x22, 0x4c, 0x71, 0x1e, 0xcc, 0xf3, 0xb7, 0xf9, 0x9c, 0x08, 0x6f, 0x2a, 0xb5, 0xa5, 0x6e, 0x99, - 0x60, 0x9c, 0xc6, 0x47, 0xaf, 0xc2, 0xb8, 0x13, 0x36, 0x76, 0xbc, 0x98, 0x34, 0xe2, 0x4e, 0xc8, - 0xdd, 0xac, 0x34, 0xdb, 0xa2, 0x45, 0x0d, 0x86, 0x0d, 0x4c, 0xfb, 0x1d, 0x38, 0x95, 0x11, 0x73, - 0x81, 0x2e, 0x1c, 0xa7, 0xed, 0xc9, 0x6f, 0x4a, 0x19, 0x20, 0x2f, 0xd6, 0xaa, 0xf2, 0x6b, 0x34, - 0x2c, 0xba, 0x3a, 0x59, 0x6c, 0x06, 0x2d, 0xc5, 0xa0, 0x5a, 0x9d, 0xab, 0x12, 0x80, 0x13, 0x1c, - 0xfb, 0x7f, 0x16, 0x60, 0x2a, 0x43, 0xb7, 0xc2, 0xd2, 0xdc, 0xa5, 0x1e, 0x29, 0x49, 0x56, 0x3b, - 0x33, 0xc4, 0x76, 0xe1, 0x08, 0x21, 0xb6, 0x8b, 0xfd, 0x42, 0x6c, 0x0f, 0xbd, 0x9b, 0x10, 0xdb, - 0xe6, 0x88, 0x0d, 0x0f, 0x34, 0x62, 0x19, 0x61, 0xb9, 0x47, 0x8e, 0x18, 0x96, 0xdb, 0x18, 0xf4, - 0xd1, 0x01, 0x06, 0xfd, 0x07, 0x0a, 0x30, 0x9d, 0xb6, 0x81, 0x3c, 0x01, 0xb9, 0xed, 0x1b, 0x86, - 0xdc, 0x36, 0x3b, 0x69, 0x64, 0xda, 0x32, 0x33, 0x4f, 0x86, 0x8b, 0x53, 0x32, 0xdc, 0x0f, 0x0f, - 0x44, 0xad, 0xb7, 0x3c, 0xf7, 0xef, 0x15, 0xe0, 0x4c, 0xba, 0xca, 0x72, 0xd3, 0xf1, 0x5a, 0x27, - 0x30, 0x36, 0xb7, 0x8c, 0xb1, 0x79, 0x6e, 0x90, 0xaf, 0x61, 0x5d, 0xcb, 0x1d, 0xa0, 0xbb, 0xa9, - 0x01, 0xba, 0x3a, 0x38, 0xc9, 0xde, 0xa3, 0xf4, 0x95, 0x22, 0x5c, 0xcc, 0xac, 0x97, 0x88, 0x3d, - 0x57, 0x0d, 0xb1, 0xe7, 0x0b, 0x29, 0xb1, 0xa7, 0xdd, 0xbb, 0xf6, 0xf1, 0xc8, 0x41, 0x85, 0x87, - 0x2c, 0x0b, 0x20, 0xf0, 0x90, 0x32, 0x50, 0xc3, 0x43, 0x56, 0x11, 0xc2, 0x26, 0xdd, 0xaf, 0x27, - 0xd9, 0xe7, 0xbf, 0xb5, 0xe0, 0x5c, 0xe6, 0xdc, 0x9c, 0x80, 0xac, 0x6b, 0xdd, 0x94, 0x75, 0x3d, - 0x3d, 0xf0, 0x6a, 0xcd, 0x11, 0x7e, 0xfd, 0xfa, 0x50, 0xce, 0xb7, 0xb0, 0x97, 0xfc, 0x2d, 0x18, - 0x73, 0x1a, 0x0d, 0x12, 0x45, 0x6b, 0x81, 0xab, 0xa2, 0x08, 0x3f, 0xc7, 0xde, 0x59, 0x49, 0xf1, - 0xe1, 0xc1, 0xfc, 0x5c, 0x9a, 0x44, 0x02, 0xc6, 0x3a, 0x05, 0xf4, 0x19, 0x28, 0x45, 0xe2, 0xde, - 0x14, 0x73, 0xff, 0xe2, 0x80, 0x83, 0xe3, 0x6c, 0x92, 0xa6, 0x19, 0xe6, 0x48, 0x49, 0x2a, 0x14, - 0x49, 0x33, 0x24, 0x4a, 0xe1, 0x58, 0x43, 0xa2, 0xbc, 0x00, 0xb0, 0xa7, 0x1e, 0x03, 0x69, 0xf9, - 0x83, 0xf6, 0x4c, 0xd0, 0xb0, 0xd0, 0x37, 0xc1, 0x74, 0xc4, 0xe3, 0x00, 0x2e, 0x37, 0x9d, 0x88, - 0xb9, 0xb9, 0x88, 0x55, 0xc8, 0x42, 0x29, 0xd5, 0x53, 0x30, 0xdc, 0x85, 0x8d, 0x56, 0x65, 0xab, - 0x2c, 0x68, 0x21, 0x5f, 0x98, 0x97, 0x93, 0x16, 0x45, 0x92, 0xdd, 0xd3, 0xe9, 0xe1, 0x67, 0x03, - 0xaf, 0xd5, 0x44, 0x9f, 0x01, 0xa0, 0xcb, 0x47, 0xc8, 0x21, 0x46, 0xf3, 0x0f, 0x4f, 0x7a, 0xaa, - 0xb8, 0x99, 0x56, 0xb9, 0xcc, 0x37, 0xb5, 0xa2, 0x88, 0x60, 0x8d, 0xa0, 0xfd, 0x03, 0x43, 0xf0, - 0x78, 0x8f, 0x33, 0x12, 0x2d, 0x9a, 0x7a, 0xd8, 0x67, 0xd2, 0x8f, 0xeb, 0xb9, 0xcc, 0xca, 0xc6, - 0x6b, 0x3b, 0xb5, 0x14, 0x0b, 0xef, 0x7a, 0x29, 0x7e, 0xaf, 0xa5, 0x89, 0x3d, 0xb8, 0xad, 0xe6, - 0x27, 0x8e, 0x78, 0xf6, 0x1f, 0xa3, 0x1c, 0x64, 0x2b, 0x43, 0x98, 0xf0, 0xc2, 0xc0, 0xdd, 0x19, - 0x58, 0xba, 0x70, 0xb2, 0x52, 0xe2, 0x2f, 0x58, 0xf0, 0x44, 0x66, 0x7f, 0x0d, 0x8b, 0x9c, 0xab, - 0x50, 0x6e, 0xd0, 0x42, 0xcd, 0x15, 0x31, 0xf1, 0xd1, 0x96, 0x00, 0x9c, 0xe0, 0x18, 0x86, 0x37, - 0x85, 0xbe, 0x86, 0x37, 0xbf, 0x62, 0x41, 0xd7, 0xfe, 0x38, 0x81, 0x83, 0xba, 0x6a, 0x1e, 0xd4, - 0x1f, 0x1c, 0x64, 0x2e, 0x73, 0xce, 0xe8, 0x3f, 0x9e, 0x82, 0xb3, 0x39, 0xae, 0x38, 0x7b, 0x30, + 0x8d, 0x6e, 0xb9, 0xd8, 0xff, 0xba, 0xf3, 0xfb, 0xf2, 0xcb, 0xac, 0x7c, 0x7c, 0xf9, 0xe5, 0x97, + 0xdf, 0x03, 0x5e, 0xdb, 0x7d, 0x35, 0x5a, 0xf0, 0x82, 0xab, 0xbb, 0x9d, 0x4d, 0x12, 0xfa, 0x24, + 0x26, 0xd1, 0xd5, 0x3d, 0xe2, 0xbb, 0x41, 0x78, 0x55, 0x00, 0x9c, 0xb6, 0x77, 0xb5, 0x11, 0x84, + 0xe4, 0xea, 0xde, 0xf3, 0x57, 0xb7, 0x89, 0x4f, 0x42, 0x27, 0x26, 0xee, 0x42, 0x3b, 0x0c, 0xe2, + 0x00, 0x21, 0x8e, 0xb3, 0xe0, 0xb4, 0xbd, 0x05, 0x8a, 0xb3, 0xb0, 0xf7, 0xfc, 0xdc, 0x73, 0xdb, + 0x5e, 0xbc, 0xd3, 0xd9, 0x5c, 0x68, 0x04, 0xad, 0xab, 0xdb, 0xc1, 0x76, 0x70, 0x95, 0xa1, 0x6e, + 0x76, 0xb6, 0xd8, 0x3f, 0xf6, 0x87, 0xfd, 0xe2, 0x24, 0xe6, 0x5e, 0x4a, 0x9a, 0x69, 0x39, 0x8d, + 0x1d, 0xcf, 0x27, 0xe1, 0xfe, 0xd5, 0xf6, 0xee, 0x36, 0x6b, 0x37, 0x24, 0x51, 0xd0, 0x09, 0x1b, + 0x24, 0xdd, 0x70, 0xcf, 0x5a, 0xd1, 0xd5, 0x16, 0x89, 0x9d, 0x8c, 0xee, 0xce, 0x5d, 0xcd, 0xab, + 0x15, 0x76, 0xfc, 0xd8, 0x6b, 0x75, 0x37, 0xf3, 0xd1, 0x7e, 0x15, 0xa2, 0xc6, 0x0e, 0x69, 0x39, + 0x5d, 0xf5, 0x5e, 0xcc, 0xab, 0xd7, 0x89, 0xbd, 0xe6, 0x55, 0xcf, 0x8f, 0xa3, 0x38, 0x4c, 0x57, + 0xb2, 0xbf, 0x62, 0xc1, 0xa5, 0xc5, 0xbb, 0xf5, 0x95, 0xa6, 0x13, 0xc5, 0x5e, 0x63, 0xa9, 0x19, + 0x34, 0x76, 0xeb, 0x71, 0x10, 0x92, 0x3b, 0x41, 0xb3, 0xd3, 0x22, 0x75, 0x36, 0x10, 0xe8, 0x59, + 0x28, 0xed, 0xb1, 0xff, 0xd5, 0xca, 0xac, 0x75, 0xc9, 0xba, 0x52, 0x5e, 0x9a, 0xfe, 0xf5, 0x83, + 0xf9, 0x0f, 0x3c, 0x38, 0x98, 0x2f, 0xdd, 0x11, 0xe5, 0x58, 0x61, 0xa0, 0xcb, 0x30, 0xb2, 0x15, + 0x6d, 0xec, 0xb7, 0xc9, 0x6c, 0x81, 0xe1, 0x4e, 0x0a, 0xdc, 0x91, 0xd5, 0x3a, 0x2d, 0xc5, 0x02, + 0x8a, 0xae, 0x42, 0xb9, 0xed, 0x84, 0xb1, 0x17, 0x7b, 0x81, 0x3f, 0x5b, 0xbc, 0x64, 0x5d, 0x19, + 0x5e, 0x9a, 0x11, 0xa8, 0xe5, 0x9a, 0x04, 0xe0, 0x04, 0x87, 0x76, 0x23, 0x24, 0x8e, 0x7b, 0xcb, + 0x6f, 0xee, 0xcf, 0x0e, 0x5d, 0xb2, 0xae, 0x94, 0x92, 0x6e, 0x60, 0x51, 0x8e, 0x15, 0x86, 0xfd, + 0x83, 0x05, 0x28, 0x2d, 0x6e, 0x6d, 0x79, 0xbe, 0x17, 0xef, 0xa3, 0x3b, 0x30, 0xee, 0x07, 0x2e, + 0x91, 0xff, 0xd9, 0x57, 0x8c, 0xbd, 0x70, 0x69, 0xa1, 0x7b, 0x29, 0x2d, 0xac, 0x6b, 0x78, 0x4b, + 0xd3, 0x0f, 0x0e, 0xe6, 0xc7, 0xf5, 0x12, 0x6c, 0xd0, 0x41, 0x18, 0xc6, 0xda, 0x81, 0xab, 0xc8, + 0x16, 0x18, 0xd9, 0xf9, 0x2c, 0xb2, 0xb5, 0x04, 0x6d, 0x69, 0xea, 0xc1, 0xc1, 0xfc, 0x98, 0x56, + 0x80, 0x75, 0x22, 0x68, 0x13, 0xa6, 0xe8, 0x5f, 0x3f, 0xf6, 0x14, 0xdd, 0x22, 0xa3, 0xfb, 0x64, + 0x1e, 0x5d, 0x0d, 0x75, 0xe9, 0xd4, 0x83, 0x83, 0xf9, 0xa9, 0x54, 0x21, 0x4e, 0x13, 0xb4, 0xdf, + 0x81, 0xc9, 0xc5, 0x38, 0x76, 0x1a, 0x3b, 0xc4, 0xe5, 0x33, 0x88, 0x5e, 0x82, 0x21, 0xdf, 0x69, + 0x11, 0x31, 0xbf, 0x97, 0xc4, 0xc0, 0x0e, 0xad, 0x3b, 0x2d, 0x72, 0x78, 0x30, 0x3f, 0x7d, 0xdb, + 0xf7, 0xde, 0xee, 0x88, 0x55, 0x41, 0xcb, 0x30, 0xc3, 0x46, 0x2f, 0x00, 0xb8, 0x64, 0xcf, 0x6b, + 0x90, 0x9a, 0x13, 0xef, 0x88, 0xf9, 0x46, 0xa2, 0x2e, 0x54, 0x14, 0x04, 0x6b, 0x58, 0xf6, 0x7d, + 0x28, 0x2f, 0xee, 0x05, 0x9e, 0x5b, 0x0b, 0xdc, 0x08, 0xed, 0xc2, 0x54, 0x3b, 0x24, 0x5b, 0x24, + 0x54, 0x45, 0xb3, 0xd6, 0xa5, 0xe2, 0x95, 0xb1, 0x17, 0xae, 0x64, 0x7e, 0xac, 0x89, 0xba, 0xe2, + 0xc7, 0xe1, 0xfe, 0xd2, 0x63, 0xa2, 0xbd, 0xa9, 0x14, 0x14, 0xa7, 0x29, 0xdb, 0xff, 0xaa, 0x00, + 0x67, 0x16, 0xdf, 0xe9, 0x84, 0xa4, 0xe2, 0x45, 0xbb, 0xe9, 0x15, 0xee, 0x7a, 0xd1, 0xee, 0x7a, + 0x32, 0x02, 0x6a, 0x69, 0x55, 0x44, 0x39, 0x56, 0x18, 0xe8, 0x39, 0x18, 0xa5, 0xbf, 0x6f, 0xe3, + 0xaa, 0xf8, 0xe4, 0x53, 0x02, 0x79, 0xac, 0xe2, 0xc4, 0x4e, 0x85, 0x83, 0xb0, 0xc4, 0x41, 0x6b, + 0x30, 0xd6, 0x60, 0x1b, 0x72, 0x7b, 0x2d, 0x70, 0x09, 0x9b, 0xcc, 0xf2, 0xd2, 0x33, 0x14, 0x7d, + 0x39, 0x29, 0x3e, 0x3c, 0x98, 0x9f, 0xe5, 0x7d, 0x13, 0x24, 0x34, 0x18, 0xd6, 0xeb, 0x23, 0x5b, + 0xed, 0xaf, 0x21, 0x46, 0x09, 0x32, 0xf6, 0xd6, 0x15, 0x6d, 0xab, 0x0c, 0xb3, 0xad, 0x32, 0x9e, + 0xbd, 0x4d, 0xd0, 0xf3, 0x30, 0xb4, 0xeb, 0xf9, 0xee, 0xec, 0x08, 0xa3, 0x75, 0x81, 0xce, 0xf9, + 0x0d, 0xcf, 0x77, 0x0f, 0x0f, 0xe6, 0x67, 0x8c, 0xee, 0xd0, 0x42, 0xcc, 0x50, 0xed, 0x3f, 0xb1, + 0x60, 0x9e, 0xc1, 0x56, 0xbd, 0x26, 0xa9, 0x91, 0x30, 0xf2, 0xa2, 0x98, 0xf8, 0xb1, 0x31, 0xa0, + 0x2f, 0x00, 0x44, 0xa4, 0x11, 0x92, 0x58, 0x1b, 0x52, 0xb5, 0x30, 0xea, 0x0a, 0x82, 0x35, 0x2c, + 0xca, 0x10, 0xa2, 0x1d, 0x27, 0x64, 0xeb, 0x4b, 0x0c, 0xac, 0x62, 0x08, 0x75, 0x09, 0xc0, 0x09, + 0x8e, 0xc1, 0x10, 0x8a, 0xfd, 0x18, 0x02, 0xfa, 0x04, 0x4c, 0x25, 0x8d, 0x45, 0x6d, 0xa7, 0x21, + 0x07, 0x90, 0x6d, 0x99, 0xba, 0x09, 0xc2, 0x69, 0x5c, 0xfb, 0xef, 0x5b, 0x62, 0xf1, 0xd0, 0xaf, + 0x7e, 0x8f, 0x7f, 0xab, 0xfd, 0x0b, 0x16, 0x8c, 0x2e, 0x79, 0xbe, 0xeb, 0xf9, 0xdb, 0xe8, 0x73, + 0x50, 0xa2, 0x67, 0x93, 0xeb, 0xc4, 0x8e, 0xe0, 0x7b, 0x1f, 0xd1, 0xf6, 0x96, 0x3a, 0x2a, 0x16, + 0xda, 0xbb, 0xdb, 0xb4, 0x20, 0x5a, 0xa0, 0xd8, 0x74, 0xb7, 0xdd, 0xda, 0xfc, 0x3c, 0x69, 0xc4, + 0x6b, 0x24, 0x76, 0x92, 0xcf, 0x49, 0xca, 0xb0, 0xa2, 0x8a, 0x6e, 0xc0, 0x48, 0xec, 0x84, 0xdb, + 0x24, 0x16, 0x0c, 0x30, 0x93, 0x51, 0xf1, 0x9a, 0x98, 0xee, 0x48, 0xe2, 0x37, 0x48, 0x72, 0x2c, + 0x6c, 0xb0, 0xaa, 0x58, 0x90, 0xb0, 0xbf, 0x7f, 0x14, 0xce, 0x2d, 0xd7, 0xab, 0x39, 0xeb, 0xea, + 0x32, 0x8c, 0xb8, 0xa1, 0xb7, 0x47, 0x42, 0x31, 0xce, 0x8a, 0x4a, 0x85, 0x95, 0x62, 0x01, 0x45, + 0xaf, 0xc2, 0x38, 0x3f, 0x90, 0xae, 0x3b, 0xbe, 0xdb, 0x94, 0x43, 0x7c, 0x5a, 0x60, 0x8f, 0xdf, + 0xd1, 0x60, 0xd8, 0xc0, 0x3c, 0xe2, 0xa2, 0xba, 0x9c, 0xda, 0x8c, 0x79, 0x87, 0xdd, 0x17, 0x2d, + 0x98, 0xe6, 0xcd, 0x2c, 0xc6, 0x71, 0xe8, 0x6d, 0x76, 0x62, 0x12, 0xcd, 0x0e, 0x33, 0x4e, 0xb7, + 0x9c, 0x35, 0x5a, 0xb9, 0x23, 0xb0, 0x70, 0x27, 0x45, 0x85, 0x33, 0xc1, 0x59, 0xd1, 0xee, 0x74, + 0x1a, 0x8c, 0xbb, 0x9a, 0x45, 0xdf, 0x6e, 0xc1, 0x5c, 0x23, 0xf0, 0xe3, 0x30, 0x68, 0x36, 0x49, + 0x58, 0xeb, 0x6c, 0x36, 0xbd, 0x68, 0x87, 0xaf, 0x53, 0x4c, 0xb6, 0x18, 0x27, 0xc8, 0x99, 0x43, + 0x85, 0x24, 0xe6, 0xf0, 0xe2, 0x83, 0x83, 0xf9, 0xb9, 0xe5, 0x5c, 0x52, 0xb8, 0x47, 0x33, 0x68, + 0x17, 0x10, 0x3d, 0x4a, 0xeb, 0xb1, 0xb3, 0x4d, 0x92, 0xc6, 0x47, 0x07, 0x6f, 0xfc, 0xec, 0x83, + 0x83, 0x79, 0xb4, 0xde, 0x45, 0x02, 0x67, 0x90, 0x45, 0x6f, 0xc3, 0x69, 0x5a, 0xda, 0xf5, 0xad, + 0xa5, 0xc1, 0x9b, 0x9b, 0x7d, 0x70, 0x30, 0x7f, 0x7a, 0x3d, 0x83, 0x08, 0xce, 0x24, 0x8d, 0xbe, + 0xcd, 0x82, 0x73, 0xc9, 0xe7, 0xaf, 0xdc, 0x6f, 0x3b, 0xbe, 0x9b, 0x34, 0x5c, 0x1e, 0xbc, 0x61, + 0xca, 0x93, 0xcf, 0x2d, 0xe7, 0x51, 0xc2, 0xf9, 0x8d, 0xcc, 0x2d, 0xc3, 0x99, 0xcc, 0xd5, 0x82, + 0xa6, 0xa1, 0xb8, 0x4b, 0xb8, 0x14, 0x54, 0xc6, 0xf4, 0x27, 0x3a, 0x0d, 0xc3, 0x7b, 0x4e, 0xb3, + 0x23, 0x36, 0x0a, 0xe6, 0x7f, 0x3e, 0x56, 0x78, 0xd5, 0xb2, 0xff, 0x75, 0x11, 0xa6, 0x96, 0xeb, + 0xd5, 0x87, 0xda, 0x85, 0xfa, 0x31, 0x54, 0xe8, 0x79, 0x0c, 0x25, 0x87, 0x5a, 0x31, 0xf7, 0x50, + 0xfb, 0x4b, 0x19, 0x5b, 0x68, 0x88, 0x6d, 0xa1, 0x6f, 0xc8, 0xd9, 0x42, 0xc7, 0xbc, 0x71, 0xf6, + 0x72, 0x56, 0xd1, 0x30, 0x9b, 0xcc, 0x4c, 0x89, 0xe5, 0x66, 0xd0, 0x70, 0x9a, 0x69, 0xd6, 0x77, + 0xc4, 0xa5, 0x74, 0x3c, 0xf3, 0xd8, 0x80, 0xf1, 0x65, 0xa7, 0xed, 0x6c, 0x7a, 0x4d, 0x2f, 0xf6, + 0x48, 0x84, 0x9e, 0x82, 0xa2, 0xe3, 0xba, 0x4c, 0xda, 0x2a, 0x2f, 0x9d, 0x79, 0x70, 0x30, 0x5f, + 0x5c, 0x74, 0xe9, 0xb1, 0x0f, 0x0a, 0x6b, 0x1f, 0x53, 0x0c, 0xf4, 0x61, 0x18, 0x72, 0xc3, 0xa0, + 0x3d, 0x5b, 0x60, 0x98, 0x74, 0xd7, 0x0d, 0x55, 0xc2, 0xa0, 0x9d, 0x42, 0x65, 0x38, 0xf6, 0xaf, + 0x14, 0xe0, 0xfc, 0x32, 0x69, 0xef, 0xac, 0xd6, 0x73, 0xf8, 0xf7, 0x15, 0x28, 0xb5, 0x02, 0xdf, + 0x8b, 0x83, 0x30, 0x12, 0x4d, 0xb3, 0x15, 0xb1, 0x26, 0xca, 0xb0, 0x82, 0xa2, 0x4b, 0x30, 0xd4, + 0x4e, 0x84, 0xca, 0x71, 0x29, 0x90, 0x32, 0x71, 0x92, 0x41, 0x28, 0x46, 0x27, 0x22, 0xa1, 0x58, + 0x31, 0x0a, 0xe3, 0x76, 0x44, 0x42, 0xcc, 0x20, 0xc9, 0xc9, 0x4c, 0xcf, 0x6c, 0xc1, 0xa1, 0x53, + 0x27, 0x33, 0x85, 0x60, 0x0d, 0x0b, 0xd5, 0xa0, 0x1c, 0xa5, 0x66, 0x76, 0xa0, 0x6d, 0x3a, 0xc1, + 0x8e, 0x6e, 0x35, 0x93, 0x09, 0x11, 0xe3, 0x44, 0x19, 0xe9, 0x7b, 0x74, 0x7f, 0xb9, 0x00, 0x88, + 0x0f, 0xe1, 0x5f, 0xb0, 0x81, 0xbb, 0xdd, 0x3d, 0x70, 0x83, 0x6f, 0x89, 0xe3, 0x1a, 0xbd, 0x3f, + 0xb5, 0xe0, 0xfc, 0xb2, 0xe7, 0xbb, 0x24, 0xcc, 0x59, 0x80, 0x8f, 0xe6, 0x2e, 0x7b, 0x34, 0xa1, + 0xc1, 0x58, 0x62, 0x43, 0xc7, 0xb0, 0xc4, 0xec, 0x3f, 0xb2, 0x00, 0xf1, 0xcf, 0x7e, 0xcf, 0x7d, + 0xec, 0xed, 0xee, 0x8f, 0x3d, 0x86, 0x65, 0x61, 0xdf, 0x84, 0xc9, 0xe5, 0xa6, 0x47, 0xfc, 0xb8, + 0x5a, 0x5b, 0x0e, 0xfc, 0x2d, 0x6f, 0x1b, 0x7d, 0x0c, 0x26, 0x63, 0xaf, 0x45, 0x82, 0x4e, 0x5c, + 0x27, 0x8d, 0xc0, 0x67, 0x37, 0x49, 0xeb, 0xca, 0xf0, 0x12, 0x7a, 0x70, 0x30, 0x3f, 0xb9, 0x61, + 0x40, 0x70, 0x0a, 0xd3, 0xfe, 0x1d, 0x3a, 0x7e, 0x41, 0xab, 0x1d, 0xf8, 0xc4, 0x8f, 0x97, 0x03, + 0xdf, 0xe5, 0x1a, 0x87, 0x8f, 0xc1, 0x50, 0x4c, 0xc7, 0x83, 0x8f, 0xdd, 0x65, 0xb9, 0x51, 0xe8, + 0x28, 0x1c, 0x1e, 0xcc, 0x9f, 0xed, 0xae, 0xc1, 0xc6, 0x89, 0xd5, 0x41, 0xdf, 0x00, 0x23, 0x51, + 0xec, 0xc4, 0x9d, 0x48, 0x8c, 0xe6, 0x13, 0x72, 0x34, 0xeb, 0xac, 0xf4, 0xf0, 0x60, 0x7e, 0x4a, + 0x55, 0xe3, 0x45, 0x58, 0x54, 0x40, 0x4f, 0xc3, 0x68, 0x8b, 0x44, 0x91, 0xb3, 0x2d, 0x4f, 0xc3, + 0x29, 0x51, 0x77, 0x74, 0x8d, 0x17, 0x63, 0x09, 0x47, 0x4f, 0xc2, 0x30, 0x09, 0xc3, 0x20, 0x14, + 0x7b, 0x74, 0x42, 0x20, 0x0e, 0xaf, 0xd0, 0x42, 0xcc, 0x61, 0xf6, 0xbf, 0xb7, 0x60, 0x4a, 0xf5, + 0x95, 0xb7, 0x75, 0x02, 0xb7, 0x82, 0x4f, 0x03, 0x34, 0xe4, 0x07, 0x46, 0xec, 0xf4, 0x18, 0x7b, + 0xe1, 0x72, 0xe6, 0x41, 0xdd, 0x35, 0x8c, 0x09, 0x65, 0x55, 0x14, 0x61, 0x8d, 0x9a, 0xfd, 0xcf, + 0x2d, 0x38, 0x95, 0xfa, 0xa2, 0x9b, 0x5e, 0x14, 0xa3, 0xb7, 0xba, 0xbe, 0x6a, 0x61, 0xb0, 0xaf, + 0xa2, 0xb5, 0xd9, 0x37, 0xa9, 0xa5, 0x2c, 0x4b, 0xb4, 0x2f, 0xba, 0x0e, 0xc3, 0x5e, 0x4c, 0x5a, + 0xf2, 0x63, 0x9e, 0xec, 0xf9, 0x31, 0xbc, 0x57, 0xc9, 0x8c, 0x54, 0x69, 0x4d, 0xcc, 0x09, 0xd8, + 0xbf, 0x52, 0x84, 0x32, 0x5f, 0xb6, 0x6b, 0x4e, 0xfb, 0x04, 0xe6, 0xe2, 0x19, 0x28, 0x7b, 0xad, + 0x56, 0x27, 0x76, 0x36, 0x05, 0x3b, 0x2f, 0xf1, 0xad, 0x55, 0x95, 0x85, 0x38, 0x81, 0xa3, 0x2a, + 0x0c, 0xb1, 0xae, 0xf0, 0xaf, 0x7c, 0x2a, 0xfb, 0x2b, 0x45, 0xdf, 0x17, 0x2a, 0x4e, 0xec, 0x70, + 0x49, 0x4a, 0x9d, 0x23, 0xb4, 0x08, 0x33, 0x12, 0xc8, 0x01, 0xd8, 0xf4, 0x7c, 0x27, 0xdc, 0xa7, + 0x65, 0xb3, 0x45, 0x46, 0xf0, 0xb9, 0xde, 0x04, 0x97, 0x14, 0x3e, 0x27, 0xab, 0x3e, 0x2c, 0x01, + 0x60, 0x8d, 0xe8, 0xdc, 0x2b, 0x50, 0x56, 0xc8, 0x47, 0x11, 0x88, 0xe6, 0x3e, 0x01, 0x53, 0xa9, + 0xb6, 0xfa, 0x55, 0x1f, 0xd7, 0xe5, 0xa9, 0x5f, 0x64, 0x2c, 0x43, 0xf4, 0x7a, 0xc5, 0xdf, 0x13, + 0x2c, 0xf7, 0x1d, 0x38, 0xdd, 0xcc, 0xe0, 0x64, 0x62, 0x5e, 0x07, 0xe7, 0x7c, 0xe7, 0xc5, 0x67, + 0x9f, 0xce, 0x82, 0xe2, 0xcc, 0x36, 0xa8, 0x8c, 0x10, 0xb4, 0xe9, 0x06, 0x71, 0x9a, 0xba, 0xb8, + 0x7d, 0x4b, 0x94, 0x61, 0x05, 0xa5, 0xfc, 0xee, 0xb4, 0xea, 0xfc, 0x0d, 0xb2, 0x5f, 0x27, 0x4d, + 0xd2, 0x88, 0x83, 0xf0, 0x6b, 0xda, 0xfd, 0x0b, 0x7c, 0xf4, 0x39, 0xbb, 0x1c, 0x13, 0x04, 0x8a, + 0x37, 0xc8, 0x3e, 0x9f, 0x0a, 0xfd, 0xeb, 0x8a, 0x3d, 0xbf, 0xee, 0xa7, 0x2d, 0x98, 0x50, 0x5f, + 0x77, 0x02, 0x7c, 0x61, 0xc9, 0xe4, 0x0b, 0x17, 0x7a, 0x2e, 0xf0, 0x1c, 0x8e, 0xf0, 0xe5, 0x02, + 0x9c, 0x53, 0x38, 0xf4, 0x6e, 0xc0, 0xff, 0x88, 0x55, 0x75, 0x15, 0xca, 0xbe, 0xd2, 0x5a, 0x59, + 0xa6, 0xba, 0x28, 0xd1, 0x59, 0x25, 0x38, 0x54, 0xc4, 0xf3, 0x13, 0xd5, 0xd2, 0xb8, 0xae, 0xce, + 0x15, 0xaa, 0xdb, 0x25, 0x28, 0x76, 0x3c, 0x57, 0x1c, 0x30, 0x1f, 0x91, 0xa3, 0x7d, 0xbb, 0x5a, + 0x39, 0x3c, 0x98, 0x7f, 0x22, 0xef, 0x29, 0x81, 0x9e, 0x6c, 0xd1, 0xc2, 0xed, 0x6a, 0x05, 0xd3, + 0xca, 0x68, 0x11, 0xa6, 0xe4, 0x6b, 0xc9, 0x1d, 0x2a, 0x6e, 0x05, 0xbe, 0x38, 0x87, 0x94, 0x4e, + 0x16, 0x9b, 0x60, 0x9c, 0xc6, 0x47, 0x15, 0x98, 0xde, 0xed, 0x6c, 0x92, 0x26, 0x89, 0xf9, 0x07, + 0xdf, 0x20, 0x5c, 0x63, 0x59, 0x4e, 0x6e, 0x66, 0x37, 0x52, 0x70, 0xdc, 0x55, 0xc3, 0xfe, 0x73, + 0x76, 0x1e, 0x88, 0xd1, 0xab, 0x85, 0x01, 0x5d, 0x58, 0x94, 0xfa, 0xd7, 0x72, 0x39, 0x0f, 0xb2, + 0x2a, 0x6e, 0x90, 0xfd, 0x8d, 0x80, 0x4a, 0xe6, 0xd9, 0xab, 0xc2, 0x58, 0xf3, 0x43, 0x3d, 0xd7, + 0xfc, 0xcf, 0x16, 0xe0, 0x8c, 0x1a, 0x01, 0x43, 0x08, 0xfc, 0x8b, 0x3e, 0x06, 0xcf, 0xc3, 0x98, + 0x4b, 0xb6, 0x9c, 0x4e, 0x33, 0x56, 0xea, 0xf3, 0x61, 0xfe, 0x84, 0x52, 0x49, 0x8a, 0xb1, 0x8e, + 0x73, 0x84, 0x61, 0xfb, 0x5f, 0x63, 0xec, 0x20, 0x8e, 0x1d, 0xba, 0xc6, 0xd5, 0xae, 0xb1, 0x72, + 0x77, 0xcd, 0x93, 0x30, 0xec, 0xb5, 0xa8, 0x60, 0x56, 0x30, 0xe5, 0xad, 0x2a, 0x2d, 0xc4, 0x1c, + 0x86, 0x3e, 0x04, 0xa3, 0x8d, 0xa0, 0xd5, 0x72, 0x7c, 0x97, 0x1d, 0x79, 0xe5, 0xa5, 0x31, 0x2a, + 0xbb, 0x2d, 0xf3, 0x22, 0x2c, 0x61, 0xe8, 0x3c, 0x0c, 0x39, 0xe1, 0x36, 0xd7, 0x61, 0x94, 0x97, + 0x4a, 0xb4, 0xa5, 0xc5, 0x70, 0x3b, 0xc2, 0xac, 0x94, 0x5e, 0xc1, 0xee, 0x05, 0xe1, 0xae, 0xe7, + 0x6f, 0x57, 0xbc, 0x50, 0x6c, 0x09, 0x75, 0x16, 0xde, 0x55, 0x10, 0xac, 0x61, 0xa1, 0x55, 0x18, + 0x6e, 0x07, 0x61, 0x1c, 0xcd, 0x8e, 0xb0, 0xe1, 0x7e, 0x22, 0x87, 0x11, 0xf1, 0xaf, 0xad, 0x05, + 0x61, 0x9c, 0x7c, 0x00, 0xfd, 0x17, 0x61, 0x5e, 0x1d, 0xdd, 0x84, 0x51, 0xe2, 0xef, 0xad, 0x86, + 0x41, 0x6b, 0xf6, 0x54, 0x3e, 0xa5, 0x15, 0x8e, 0xc2, 0x97, 0x59, 0x22, 0xa3, 0x8a, 0x62, 0x2c, + 0x49, 0xa0, 0x6f, 0x80, 0x22, 0xf1, 0xf7, 0x66, 0x47, 0x19, 0xa5, 0xb9, 0x1c, 0x4a, 0x77, 0x9c, + 0x30, 0xe1, 0xf9, 0x2b, 0xfe, 0x1e, 0xa6, 0x75, 0xd0, 0xa7, 0xa0, 0x2c, 0x19, 0x46, 0x24, 0x94, + 0x75, 0x99, 0x0b, 0x56, 0xb2, 0x19, 0x4c, 0xde, 0xee, 0x78, 0x21, 0x69, 0x11, 0x3f, 0x8e, 0x12, + 0x0e, 0x29, 0xa1, 0x11, 0x4e, 0xa8, 0xa1, 0x4f, 0x49, 0x0d, 0xf1, 0x5a, 0xd0, 0xf1, 0xe3, 0x68, + 0xb6, 0xcc, 0xba, 0x97, 0xf9, 0x76, 0x77, 0x27, 0xc1, 0x4b, 0xab, 0x90, 0x79, 0x65, 0x6c, 0x90, + 0x42, 0x9f, 0x81, 0x09, 0xfe, 0x9f, 0xbf, 0x80, 0x45, 0xb3, 0x67, 0x18, 0xed, 0x4b, 0xf9, 0xb4, + 0x39, 0xe2, 0xd2, 0x19, 0x41, 0x7c, 0x42, 0x2f, 0x8d, 0xb0, 0x49, 0x0d, 0x61, 0x98, 0x68, 0x7a, + 0x7b, 0xc4, 0x27, 0x51, 0x54, 0x0b, 0x83, 0x4d, 0x32, 0x0b, 0x6c, 0x60, 0xce, 0x65, 0xbf, 0x98, + 0x05, 0x9b, 0x64, 0x69, 0x86, 0xd2, 0xbc, 0xa9, 0xd7, 0xc1, 0x26, 0x09, 0x74, 0x1b, 0x26, 0xe9, + 0x8d, 0xcd, 0x4b, 0x88, 0x8e, 0xf5, 0x23, 0xca, 0xee, 0x55, 0xd8, 0xa8, 0x84, 0x53, 0x44, 0xd0, + 0x2d, 0x18, 0x8f, 0x62, 0x27, 0x8c, 0x3b, 0x6d, 0x4e, 0xf4, 0x6c, 0x3f, 0xa2, 0xec, 0xc1, 0xb5, + 0xae, 0x55, 0xc1, 0x06, 0x01, 0xf4, 0x06, 0x94, 0x9b, 0xde, 0x16, 0x69, 0xec, 0x37, 0x9a, 0x64, + 0x76, 0x9c, 0x51, 0xcb, 0x64, 0x2a, 0x37, 0x25, 0x12, 0x97, 0x73, 0xd5, 0x5f, 0x9c, 0x54, 0x47, + 0x77, 0xe0, 0x6c, 0x4c, 0xc2, 0x96, 0xe7, 0x3b, 0x94, 0x19, 0x88, 0xab, 0x15, 0x7b, 0xc8, 0x9c, + 0x60, 0xbb, 0xed, 0xa2, 0x98, 0x8d, 0xb3, 0x1b, 0x99, 0x58, 0x38, 0xa7, 0x36, 0xba, 0x0f, 0xb3, + 0x19, 0x90, 0xa0, 0xe9, 0x35, 0xf6, 0x67, 0x4f, 0x33, 0xca, 0x1f, 0x17, 0x94, 0x67, 0x37, 0x72, + 0xf0, 0x0e, 0x7b, 0xc0, 0x70, 0x2e, 0x75, 0x74, 0x0b, 0xa6, 0x18, 0x07, 0xaa, 0x75, 0x9a, 0x4d, + 0xd1, 0xe0, 0x24, 0x6b, 0xf0, 0x43, 0xf2, 0x3c, 0xae, 0x9a, 0xe0, 0xc3, 0x83, 0x79, 0x48, 0xfe, + 0xe1, 0x74, 0x6d, 0xb4, 0xc9, 0xde, 0xcc, 0x3a, 0xa1, 0x17, 0xef, 0x53, 0xbe, 0x41, 0xee, 0xc7, + 0xb3, 0x53, 0x3d, 0xf5, 0x15, 0x3a, 0xaa, 0x7a, 0x58, 0xd3, 0x0b, 0x71, 0x9a, 0x20, 0x65, 0xa9, + 0x51, 0xec, 0x7a, 0xfe, 0xec, 0x34, 0xbf, 0x97, 0x48, 0x8e, 0x54, 0xa7, 0x85, 0x98, 0xc3, 0xd8, + 0x7b, 0x19, 0xfd, 0x71, 0x8b, 0x9e, 0x5c, 0x33, 0x0c, 0x31, 0x79, 0x2f, 0x93, 0x00, 0x9c, 0xe0, + 0x50, 0x61, 0x32, 0x8e, 0xf7, 0x67, 0x11, 0x43, 0x55, 0x8c, 0x65, 0x63, 0xe3, 0x53, 0x98, 0x96, + 0xdb, 0x9b, 0x30, 0xa9, 0x18, 0x21, 0x1b, 0x13, 0x34, 0x0f, 0xc3, 0x4c, 0x7c, 0x12, 0xda, 0xb5, + 0x32, 0xed, 0x02, 0x13, 0xad, 0x30, 0x2f, 0x67, 0x5d, 0xf0, 0xde, 0x21, 0x4b, 0xfb, 0x31, 0xe1, + 0x77, 0xfa, 0xa2, 0xd6, 0x05, 0x09, 0xc0, 0x09, 0x8e, 0xfd, 0x7f, 0xb9, 0x18, 0x9a, 0x70, 0xdb, + 0x01, 0xce, 0x97, 0x67, 0xa1, 0xb4, 0x13, 0x44, 0x31, 0xc5, 0x66, 0x6d, 0x0c, 0x27, 0x82, 0xe7, + 0x75, 0x51, 0x8e, 0x15, 0x06, 0x7a, 0x0d, 0x26, 0x1a, 0x7a, 0x03, 0xe2, 0x70, 0x54, 0x6c, 0xc4, + 0x68, 0x1d, 0x9b, 0xb8, 0xe8, 0x55, 0x28, 0x31, 0x1b, 0x90, 0x46, 0xd0, 0x14, 0x52, 0x9b, 0x3c, + 0xe1, 0x4b, 0x35, 0x51, 0x7e, 0xa8, 0xfd, 0xc6, 0x0a, 0x1b, 0x5d, 0x86, 0x11, 0xda, 0x85, 0x6a, + 0x4d, 0x1c, 0x4b, 0x4a, 0x51, 0x74, 0x9d, 0x95, 0x62, 0x01, 0xb5, 0xff, 0x7a, 0x41, 0x1b, 0x65, + 0x7a, 0x1f, 0x26, 0xa8, 0x06, 0xa3, 0xf7, 0x1c, 0x2f, 0xf6, 0xfc, 0x6d, 0x21, 0x7f, 0x3c, 0xdd, + 0xf3, 0x8c, 0x62, 0x95, 0xee, 0xf2, 0x0a, 0xfc, 0x14, 0x15, 0x7f, 0xb0, 0x24, 0x43, 0x29, 0x86, + 0x1d, 0xdf, 0xa7, 0x14, 0x0b, 0x83, 0x52, 0xc4, 0xbc, 0x02, 0xa7, 0x28, 0xfe, 0x60, 0x49, 0x06, + 0xbd, 0x05, 0x20, 0x77, 0x18, 0x71, 0x85, 0xed, 0xc5, 0xb3, 0xfd, 0x89, 0x6e, 0xa8, 0x3a, 0x4b, + 0x93, 0xf4, 0x8c, 0x4e, 0xfe, 0x63, 0x8d, 0x9e, 0x1d, 0x33, 0x39, 0xad, 0xbb, 0x33, 0xe8, 0x9b, + 0xe9, 0x12, 0x77, 0xc2, 0x98, 0xb8, 0x8b, 0xb1, 0x18, 0x9c, 0x0f, 0x0f, 0x76, 0x49, 0xd9, 0xf0, + 0x5a, 0x44, 0xdf, 0x0e, 0x82, 0x08, 0x4e, 0xe8, 0xd9, 0x3f, 0x5f, 0x84, 0xd9, 0xbc, 0xee, 0xd2, + 0x45, 0x47, 0xee, 0x7b, 0xf1, 0x32, 0x15, 0xaf, 0x2c, 0x73, 0xd1, 0xad, 0x88, 0x72, 0xac, 0x30, + 0xe8, 0xec, 0x47, 0xde, 0xb6, 0xbc, 0x63, 0x0e, 0x27, 0xb3, 0x5f, 0x67, 0xa5, 0x58, 0x40, 0x29, + 0x5e, 0x48, 0x9c, 0x48, 0x18, 0xf7, 0x68, 0xab, 0x04, 0xb3, 0x52, 0x2c, 0xa0, 0xba, 0xb6, 0x6b, + 0xa8, 0x8f, 0xb6, 0xcb, 0x18, 0xa2, 0xe1, 0xe3, 0x1d, 0x22, 0xf4, 0x59, 0x80, 0x2d, 0xcf, 0xf7, + 0xa2, 0x1d, 0x46, 0x7d, 0xe4, 0xc8, 0xd4, 0x95, 0x70, 0xb6, 0xaa, 0xa8, 0x60, 0x8d, 0x22, 0x7a, + 0x19, 0xc6, 0xd4, 0x06, 0xac, 0x56, 0xd8, 0x4b, 0xa7, 0x66, 0x39, 0x92, 0x70, 0xa3, 0x0a, 0xd6, + 0xf1, 0xec, 0xcf, 0xa7, 0xd7, 0x8b, 0xd8, 0x01, 0xda, 0xf8, 0x5a, 0x83, 0x8e, 0x6f, 0xa1, 0xf7, + 0xf8, 0xda, 0x5f, 0x2d, 0xc2, 0x94, 0xd1, 0x58, 0x27, 0x1a, 0x80, 0x67, 0x5d, 0xa3, 0x0c, 0xdc, + 0x89, 0x89, 0xd8, 0x7f, 0x76, 0xff, 0xad, 0xa2, 0x33, 0x79, 0xba, 0x03, 0x78, 0x7d, 0xf4, 0x59, + 0x28, 0x37, 0x9d, 0x88, 0x69, 0xce, 0x88, 0xd8, 0x77, 0x83, 0x10, 0x4b, 0x2e, 0x26, 0x4e, 0x14, + 0x6b, 0xa7, 0x26, 0xa7, 0x9d, 0x90, 0xa4, 0x27, 0x0d, 0x95, 0x4f, 0xa4, 0xf5, 0x98, 0xea, 0x04, + 0x15, 0x62, 0xf6, 0x31, 0x87, 0xa1, 0x57, 0x61, 0x3c, 0x24, 0x6c, 0x55, 0x2c, 0x53, 0x69, 0x8e, + 0x2d, 0xb3, 0xe1, 0x44, 0xec, 0xc3, 0x1a, 0x0c, 0x1b, 0x98, 0xc9, 0xdd, 0x60, 0xa4, 0xc7, 0xdd, + 0xe0, 0x69, 0x18, 0x65, 0x3f, 0xd4, 0x0a, 0x50, 0xb3, 0x51, 0xe5, 0xc5, 0x58, 0xc2, 0xd3, 0x0b, + 0xa6, 0x34, 0xd8, 0x82, 0xa1, 0xb7, 0x0f, 0xb1, 0xa8, 0xd9, 0x2b, 0x73, 0x89, 0x73, 0x39, 0xb1, + 0xe4, 0xb1, 0x84, 0xd9, 0x1f, 0x86, 0xc9, 0x8a, 0x43, 0x5a, 0x81, 0xbf, 0xe2, 0xbb, 0xed, 0xc0, + 0xf3, 0x63, 0x34, 0x0b, 0x43, 0xec, 0x10, 0xe1, 0x2c, 0x60, 0x88, 0x36, 0x84, 0x87, 0xe8, 0x85, + 0xc0, 0xde, 0x86, 0x33, 0x95, 0xe0, 0x9e, 0x7f, 0xcf, 0x09, 0xdd, 0xc5, 0x5a, 0x55, 0xbb, 0x5f, + 0xaf, 0xcb, 0xfb, 0x1d, 0x37, 0xda, 0xca, 0x64, 0xbd, 0x5a, 0x4d, 0x2e, 0xd6, 0xae, 0x7a, 0x4d, + 0x92, 0xa3, 0x05, 0xf9, 0x9b, 0x05, 0xa3, 0xa5, 0x04, 0x5f, 0xbd, 0x6a, 0x59, 0xb9, 0xaf, 0x5a, + 0x6f, 0x42, 0x69, 0xcb, 0x23, 0x4d, 0x17, 0x93, 0x2d, 0xb1, 0x12, 0x9f, 0xca, 0xb7, 0x43, 0x59, + 0xa5, 0x98, 0x52, 0xeb, 0xc5, 0x6f, 0x87, 0xab, 0xa2, 0x32, 0x56, 0x64, 0xd0, 0x2e, 0x4c, 0xcb, + 0x0b, 0x83, 0x84, 0x8a, 0x75, 0xf9, 0x74, 0xaf, 0x5b, 0x88, 0x49, 0xfc, 0xf4, 0x83, 0x83, 0xf9, + 0x69, 0x9c, 0x22, 0x83, 0xbb, 0x08, 0xd3, 0xeb, 0x60, 0x8b, 0x72, 0xe0, 0x21, 0x36, 0xfc, 0xec, + 0x3a, 0xc8, 0x6e, 0xb6, 0xac, 0xd4, 0xfe, 0x61, 0x0b, 0x1e, 0xeb, 0x1a, 0x19, 0x71, 0xc3, 0x3f, + 0xe6, 0x59, 0x48, 0xdf, 0xb8, 0x0b, 0xfd, 0x6f, 0xdc, 0xf6, 0x3f, 0xb0, 0xe0, 0xf4, 0x4a, 0xab, + 0x1d, 0xef, 0x57, 0x3c, 0xf3, 0x09, 0xea, 0x15, 0x18, 0x69, 0x11, 0xd7, 0xeb, 0xb4, 0xc4, 0xcc, + 0xcd, 0x4b, 0x2e, 0xb5, 0xc6, 0x4a, 0x0f, 0x0f, 0xe6, 0x27, 0xea, 0x71, 0x10, 0x3a, 0xdb, 0x84, + 0x17, 0x60, 0x81, 0xce, 0x78, 0xbd, 0xf7, 0x0e, 0xb9, 0xe9, 0xb5, 0x3c, 0x69, 0x57, 0xd4, 0x53, + 0x67, 0xb7, 0x20, 0x07, 0x74, 0xe1, 0xcd, 0x8e, 0xe3, 0xc7, 0x5e, 0xbc, 0x2f, 0x5e, 0x8f, 0x24, + 0x11, 0x9c, 0xd0, 0xb3, 0xbf, 0x62, 0xc1, 0x94, 0x5c, 0xf7, 0x8b, 0xae, 0x1b, 0x92, 0x28, 0x42, + 0x73, 0x50, 0xf0, 0xda, 0xa2, 0x97, 0x20, 0x7a, 0x59, 0xa8, 0xd6, 0x70, 0xc1, 0x6b, 0x4b, 0xb1, + 0x8c, 0x31, 0xc2, 0xa2, 0xf9, 0x90, 0x76, 0x5d, 0x94, 0x63, 0x85, 0x81, 0xae, 0x40, 0xc9, 0x0f, + 0x5c, 0x6e, 0xdb, 0xc5, 0x8f, 0x34, 0xb6, 0xc0, 0xd6, 0x45, 0x19, 0x56, 0x50, 0x54, 0x83, 0x32, + 0x37, 0x7b, 0x4a, 0x16, 0xed, 0x40, 0xc6, 0x53, 0xec, 0xcb, 0x36, 0x64, 0x4d, 0x9c, 0x10, 0xb1, + 0x7f, 0xd9, 0x82, 0x71, 0xf9, 0x65, 0x03, 0xca, 0x9c, 0x74, 0x6b, 0x25, 0xf2, 0x66, 0xb2, 0xb5, + 0xa8, 0xcc, 0xc8, 0x20, 0x86, 0xa8, 0x58, 0x3c, 0x92, 0xa8, 0xf8, 0x3c, 0x8c, 0x39, 0xed, 0x76, + 0xcd, 0x94, 0x33, 0xd9, 0x52, 0x5a, 0x4c, 0x8a, 0xb1, 0x8e, 0x63, 0xff, 0x50, 0x01, 0x26, 0xe5, + 0x17, 0xd4, 0x3b, 0x9b, 0x11, 0x89, 0xd1, 0x06, 0x94, 0x1d, 0x3e, 0x4b, 0x44, 0x2e, 0xf2, 0x27, + 0xb3, 0xf5, 0x08, 0xc6, 0x94, 0x26, 0x07, 0xfe, 0xa2, 0xac, 0x8d, 0x13, 0x42, 0xa8, 0x09, 0x33, + 0x7e, 0x10, 0x33, 0xe6, 0xaf, 0xe0, 0xbd, 0x9e, 0x76, 0xd2, 0xd4, 0xcf, 0x09, 0xea, 0x33, 0xeb, + 0x69, 0x2a, 0xb8, 0x9b, 0x30, 0x5a, 0x91, 0xba, 0x99, 0x62, 0xbe, 0x32, 0x40, 0x9f, 0xb8, 0x6c, + 0xd5, 0x8c, 0xfd, 0x4b, 0x16, 0x94, 0x25, 0xda, 0x49, 0xbc, 0xe2, 0xad, 0xc1, 0x68, 0xc4, 0x26, + 0x41, 0x0e, 0x8d, 0xdd, 0xab, 0xe3, 0x7c, 0xbe, 0x92, 0x33, 0x8d, 0xff, 0x8f, 0xb0, 0xa4, 0xc1, + 0x54, 0xf3, 0xaa, 0xfb, 0xef, 0x11, 0xd5, 0xbc, 0xea, 0x4f, 0xce, 0xa1, 0xf4, 0x07, 0xac, 0xcf, + 0x9a, 0xae, 0x8b, 0x8a, 0x5e, 0xed, 0x90, 0x6c, 0x79, 0xf7, 0xd3, 0xa2, 0x57, 0x8d, 0x95, 0x62, + 0x01, 0x45, 0x6f, 0xc1, 0x78, 0x43, 0xea, 0x64, 0x93, 0x1d, 0x7e, 0xb9, 0xe7, 0xfb, 0x80, 0x7a, + 0x4a, 0xe2, 0xba, 0x90, 0x65, 0xad, 0x3e, 0x36, 0xa8, 0x99, 0x66, 0x04, 0xc5, 0x7e, 0x66, 0x04, + 0x09, 0xdd, 0xfc, 0x47, 0xf5, 0x1f, 0xb1, 0x60, 0x84, 0xeb, 0xe2, 0x06, 0x53, 0x85, 0x6a, 0x2f, + 0x6b, 0xc9, 0xd8, 0xdd, 0xa1, 0x85, 0xe2, 0xa5, 0x0c, 0xad, 0x41, 0x99, 0xfd, 0x60, 0xba, 0xc4, + 0x62, 0xbe, 0xd5, 0x3d, 0x6f, 0x55, 0xef, 0xe0, 0x1d, 0x59, 0x0d, 0x27, 0x14, 0xec, 0x1f, 0x28, + 0x52, 0xee, 0x96, 0xa0, 0x1a, 0x87, 0xbe, 0xf5, 0xe8, 0x0e, 0xfd, 0xc2, 0xa3, 0x3a, 0xf4, 0xb7, + 0x61, 0xaa, 0xa1, 0xbd, 0xc3, 0x25, 0x33, 0x79, 0xa5, 0xe7, 0x22, 0xd1, 0x9e, 0xec, 0xb8, 0x96, + 0x65, 0xd9, 0x24, 0x82, 0xd3, 0x54, 0xd1, 0x37, 0xc3, 0x38, 0x9f, 0x67, 0xd1, 0x0a, 0xb7, 0xc4, + 0xf8, 0x50, 0xfe, 0x7a, 0xd1, 0x9b, 0xe0, 0x5a, 0x39, 0xad, 0x3a, 0x36, 0x88, 0xd9, 0x7f, 0x6c, + 0x01, 0x5a, 0x69, 0xef, 0x90, 0x16, 0x09, 0x9d, 0x66, 0xa2, 0x4e, 0xff, 0x2b, 0x16, 0xcc, 0x92, + 0xae, 0xe2, 0xe5, 0xa0, 0xd5, 0x12, 0x97, 0x96, 0x9c, 0x7b, 0xf5, 0x4a, 0x4e, 0x1d, 0xe5, 0x96, + 0x30, 0x9b, 0x87, 0x81, 0x73, 0xdb, 0x43, 0x6b, 0x70, 0x8a, 0x9f, 0x92, 0x0a, 0xa0, 0xd9, 0x5e, + 0x3f, 0x2e, 0x08, 0x9f, 0xda, 0xe8, 0x46, 0xc1, 0x59, 0xf5, 0xec, 0xef, 0x18, 0x87, 0xdc, 0x5e, + 0xbc, 0xff, 0x8e, 0xf0, 0xfe, 0x3b, 0xc2, 0xfb, 0xef, 0x08, 0xef, 0xbf, 0x23, 0xbc, 0xff, 0x8e, + 0xf0, 0x75, 0xff, 0x8e, 0xf0, 0x87, 0x16, 0x9c, 0xea, 0x3e, 0x06, 0x4e, 0x42, 0x30, 0xef, 0xc0, + 0xa9, 0xee, 0xb3, 0xae, 0xa7, 0x9d, 0x5d, 0x77, 0x3f, 0x93, 0x73, 0x2f, 0xe3, 0x1b, 0x70, 0x16, + 0x7d, 0xfb, 0xe7, 0x4b, 0x30, 0xbc, 0xb2, 0x47, 0xfc, 0xf8, 0x04, 0x3e, 0xb1, 0x01, 0x93, 0x9e, + 0xbf, 0x17, 0x34, 0xf7, 0x88, 0xcb, 0xe1, 0x47, 0xb9, 0x22, 0x9f, 0x15, 0xa4, 0x27, 0xab, 0x06, + 0x09, 0x9c, 0x22, 0xf9, 0x28, 0xd4, 0xd4, 0xd7, 0x60, 0x84, 0x9f, 0x0e, 0x42, 0x47, 0x9d, 0x79, + 0x18, 0xb0, 0x41, 0x14, 0x67, 0x5e, 0xa2, 0x42, 0xe7, 0xa7, 0x8f, 0xa8, 0x8e, 0x3e, 0x0f, 0x93, + 0x5b, 0x5e, 0x18, 0xc5, 0x1b, 0x5e, 0x8b, 0x44, 0xb1, 0xd3, 0x6a, 0x3f, 0x84, 0x5a, 0x5a, 0x8d, + 0xc3, 0xaa, 0x41, 0x09, 0xa7, 0x28, 0xa3, 0x6d, 0x98, 0x68, 0x3a, 0x7a, 0x53, 0xa3, 0x47, 0x6e, + 0x4a, 0x1d, 0x3b, 0x37, 0x75, 0x42, 0xd8, 0xa4, 0x4b, 0xf7, 0x69, 0x83, 0x69, 0x56, 0x4b, 0x4c, + 0xdf, 0xa0, 0xf6, 0x29, 0x57, 0xa9, 0x72, 0x18, 0x95, 0xa0, 0x98, 0xe5, 0x6d, 0xd9, 0x94, 0xa0, + 0x34, 0xfb, 0xda, 0xcf, 0x41, 0x99, 0xd0, 0x21, 0xa4, 0x84, 0xc5, 0xc9, 0x75, 0x75, 0xb0, 0xbe, + 0xae, 0x79, 0x8d, 0x30, 0x30, 0x1f, 0x04, 0x56, 0x24, 0x25, 0x9c, 0x10, 0x45, 0xcb, 0x30, 0x12, + 0x91, 0xd0, 0x23, 0x91, 0x38, 0xc3, 0x7a, 0x4c, 0x23, 0x43, 0xe3, 0x4e, 0x2b, 0xfc, 0x37, 0x16, + 0x55, 0xe9, 0xf2, 0x72, 0x98, 0xae, 0x94, 0x9d, 0x32, 0xda, 0xf2, 0x5a, 0x64, 0xa5, 0x58, 0x40, + 0xd1, 0x1b, 0x30, 0x1a, 0x92, 0x26, 0x7b, 0x71, 0x9a, 0x18, 0x7c, 0x91, 0xf3, 0x07, 0x2c, 0x5e, + 0x0f, 0x4b, 0x02, 0xe8, 0x06, 0xa0, 0x90, 0x50, 0x09, 0xcc, 0xf3, 0xb7, 0x95, 0x3d, 0xaa, 0xe0, + 0xe0, 0x6a, 0xc7, 0xe3, 0x04, 0x43, 0xfa, 0x0f, 0xe1, 0x8c, 0x6a, 0xe8, 0x1a, 0xcc, 0xa8, 0xd2, + 0xaa, 0x1f, 0xc5, 0x0e, 0xe5, 0x9c, 0x53, 0x8c, 0x96, 0x52, 0x80, 0xe0, 0x34, 0x02, 0xee, 0xae, + 0x63, 0xff, 0xa4, 0x05, 0x7c, 0x9c, 0x4f, 0xe0, 0xda, 0xff, 0xba, 0x79, 0xed, 0x3f, 0x97, 0x3b, + 0x73, 0x39, 0x57, 0xfe, 0x07, 0x16, 0x8c, 0x69, 0x33, 0x9b, 0xac, 0x59, 0xab, 0xc7, 0x9a, 0xed, + 0xc0, 0x34, 0x5d, 0xe9, 0xb7, 0x36, 0x23, 0x12, 0xee, 0x11, 0x97, 0x2d, 0xcc, 0xc2, 0xc3, 0x2d, + 0x4c, 0x65, 0xfb, 0x76, 0x33, 0x45, 0x10, 0x77, 0x35, 0x81, 0x5e, 0x91, 0xcf, 0x2f, 0x45, 0xc3, + 0xce, 0x9c, 0x3f, 0xad, 0x1c, 0x1e, 0xcc, 0x4f, 0x6b, 0x1f, 0xa2, 0x3f, 0xb7, 0xd8, 0x9f, 0x93, + 0xdf, 0xa8, 0x6c, 0x0c, 0x1b, 0x6a, 0xb1, 0xa4, 0x6c, 0x0c, 0xd5, 0x72, 0xc0, 0x09, 0x0e, 0xdd, + 0xa3, 0x3b, 0x41, 0x14, 0xa7, 0x6d, 0x0c, 0xaf, 0x07, 0x51, 0x8c, 0x19, 0xc4, 0x7e, 0x11, 0x60, + 0xe5, 0x3e, 0x69, 0xf0, 0xa5, 0xae, 0x5f, 0x67, 0xac, 0xfc, 0xeb, 0x8c, 0xfd, 0x5b, 0x16, 0x4c, + 0xae, 0x2e, 0x1b, 0x4a, 0xe4, 0x05, 0x00, 0x7e, 0x07, 0xbb, 0x7b, 0x77, 0x5d, 0x3e, 0xd0, 0xf3, + 0x37, 0x56, 0x55, 0x8a, 0x35, 0x0c, 0x74, 0x0e, 0x8a, 0xcd, 0x8e, 0x2f, 0x14, 0x9a, 0xa3, 0xf4, + 0xc0, 0xbe, 0xd9, 0xf1, 0x31, 0x2d, 0xd3, 0x9c, 0x1c, 0x8a, 0x03, 0x3b, 0x39, 0xf4, 0x0d, 0x36, + 0x80, 0xe6, 0x61, 0xf8, 0xde, 0x3d, 0xcf, 0xe5, 0x2e, 0x9d, 0xc2, 0x78, 0xe0, 0xee, 0xdd, 0x6a, + 0x25, 0xc2, 0xbc, 0xdc, 0xfe, 0x52, 0x11, 0xe6, 0x56, 0x9b, 0xe4, 0xfe, 0xbb, 0x74, 0x6b, 0x1d, + 0xd4, 0x45, 0xe3, 0x68, 0xaa, 0xa1, 0xa3, 0xba, 0xe1, 0xf4, 0x1f, 0x8f, 0x2d, 0x18, 0xe5, 0x26, + 0x76, 0xd2, 0xc9, 0xf5, 0xb5, 0xac, 0xd6, 0xf3, 0x07, 0x64, 0x81, 0x9b, 0xea, 0x09, 0x1f, 0x3d, + 0x75, 0xd2, 0x8a, 0x52, 0x2c, 0x89, 0xcf, 0x7d, 0x0c, 0xc6, 0x75, 0xcc, 0x23, 0x39, 0xc4, 0xfd, + 0xe5, 0x22, 0x4c, 0xd3, 0x1e, 0x3c, 0xd2, 0x89, 0xb8, 0xdd, 0x3d, 0x11, 0xc7, 0xed, 0x14, 0xd5, + 0x7f, 0x36, 0xde, 0x4a, 0xcf, 0xc6, 0xf3, 0x79, 0xb3, 0x71, 0xd2, 0x73, 0xf0, 0xed, 0x16, 0x9c, + 0x5a, 0x6d, 0x06, 0x8d, 0xdd, 0x94, 0xe3, 0xd2, 0xcb, 0x30, 0x46, 0xf9, 0x78, 0x64, 0xf8, 0xd4, + 0x1b, 0x51, 0x16, 0x04, 0x08, 0xeb, 0x78, 0x5a, 0xb5, 0xdb, 0xb7, 0xab, 0x95, 0xac, 0xe0, 0x0c, + 0x02, 0x84, 0x75, 0x3c, 0xfb, 0x37, 0x2c, 0xb8, 0x70, 0x6d, 0x79, 0x25, 0x59, 0x8a, 0x5d, 0xf1, + 0x21, 0x2e, 0xc3, 0x48, 0xdb, 0xd5, 0xba, 0x92, 0x28, 0x7c, 0x2b, 0xac, 0x17, 0x02, 0xfa, 0x5e, + 0x89, 0x7d, 0xf2, 0x13, 0x16, 0x9c, 0xba, 0xe6, 0xc5, 0xf4, 0x58, 0x4e, 0x47, 0x2a, 0xa0, 0xe7, + 0x72, 0xe4, 0xc5, 0x41, 0xb8, 0x9f, 0x8e, 0x54, 0x80, 0x15, 0x04, 0x6b, 0x58, 0xbc, 0xe5, 0x3d, + 0x8f, 0x19, 0x77, 0x17, 0xcc, 0xa7, 0x2f, 0x2c, 0xca, 0xb1, 0xc2, 0xa0, 0x1f, 0xe6, 0x7a, 0x21, + 0xd3, 0x1a, 0xee, 0x0b, 0x0e, 0xab, 0x3e, 0xac, 0x22, 0x01, 0x38, 0xc1, 0xa1, 0x17, 0xa8, 0xf9, + 0x6b, 0xcd, 0x4e, 0x14, 0x93, 0x70, 0x2b, 0xca, 0xe1, 0x8e, 0x2f, 0x42, 0x99, 0x48, 0x1d, 0xbd, + 0xe8, 0xb5, 0x12, 0x35, 0x95, 0xf2, 0x9e, 0x07, 0x4c, 0x50, 0x78, 0x03, 0xb8, 0x41, 0x1e, 0xcd, + 0x8f, 0x6d, 0x15, 0x10, 0xd1, 0xdb, 0xd2, 0x23, 0x48, 0x30, 0x57, 0xf4, 0x95, 0x2e, 0x28, 0xce, + 0xa8, 0x61, 0xff, 0xb0, 0x05, 0x67, 0xd4, 0x07, 0xbf, 0xe7, 0x3e, 0xd3, 0xfe, 0x99, 0x02, 0x4c, + 0x5c, 0xdf, 0xd8, 0xa8, 0x5d, 0x23, 0xb1, 0x38, 0xb6, 0xfb, 0xbf, 0xbc, 0x63, 0xed, 0x01, 0xb1, + 0xd7, 0x2d, 0xb0, 0x13, 0x7b, 0xcd, 0x05, 0x1e, 0x88, 0x68, 0xa1, 0xea, 0xc7, 0xb7, 0xc2, 0x7a, + 0x1c, 0x7a, 0xfe, 0x76, 0xe6, 0x93, 0xa3, 0x14, 0x2e, 0x8a, 0x79, 0xc2, 0x05, 0x7a, 0x11, 0x46, + 0x58, 0x24, 0x24, 0x39, 0x09, 0x8f, 0xab, 0x4b, 0x14, 0x2b, 0x3d, 0x3c, 0x98, 0x2f, 0xdf, 0xc6, + 0x55, 0xfe, 0x07, 0x0b, 0x54, 0x74, 0x1b, 0xc6, 0x76, 0xe2, 0xb8, 0x7d, 0x9d, 0x38, 0x2e, 0xbd, + 0x2d, 0x73, 0x76, 0x78, 0x31, 0x8b, 0x1d, 0xd2, 0x41, 0xe0, 0x68, 0x09, 0x07, 0x49, 0xca, 0x22, + 0xac, 0xd3, 0xb1, 0xeb, 0x00, 0x09, 0xec, 0x98, 0xde, 0x4e, 0xec, 0xdf, 0xb7, 0x60, 0x94, 0x07, + 0xa5, 0x08, 0xd1, 0xc7, 0x61, 0x88, 0xdc, 0x27, 0x0d, 0x21, 0x2a, 0x67, 0x76, 0x38, 0x91, 0xb4, + 0xb8, 0x0e, 0x98, 0xfe, 0xc7, 0xac, 0x16, 0xba, 0x0e, 0xa3, 0xb4, 0xb7, 0xd7, 0x54, 0x84, 0x8e, + 0x27, 0xf2, 0xbe, 0x58, 0x4d, 0x3b, 0x17, 0xce, 0x44, 0x11, 0x96, 0xd5, 0xd9, 0x83, 0x75, 0xa3, + 0x5d, 0xa7, 0x1c, 0x3b, 0xee, 0x25, 0x58, 0x6c, 0x2c, 0xd7, 0x38, 0x92, 0xa0, 0xc6, 0x1f, 0xac, + 0x65, 0x21, 0x4e, 0x88, 0xd8, 0x1b, 0x50, 0xa6, 0x93, 0xba, 0xd8, 0xf4, 0x9c, 0xde, 0x6f, 0xf0, + 0xcf, 0x40, 0x59, 0xbe, 0xb0, 0x47, 0xc2, 0x19, 0x9d, 0x51, 0x95, 0x0f, 0xf0, 0x11, 0x4e, 0xe0, + 0xf6, 0x16, 0x9c, 0x66, 0xf6, 0x92, 0x4e, 0xbc, 0x63, 0xec, 0xb1, 0xfe, 0x8b, 0xf9, 0x59, 0x71, + 0xf3, 0xe4, 0x33, 0x33, 0xab, 0xf9, 0x7b, 0x8e, 0x4b, 0x8a, 0xc9, 0x2d, 0xd4, 0xfe, 0xea, 0x10, + 0x3c, 0x5e, 0xad, 0xe7, 0xc7, 0x2b, 0x79, 0x15, 0xc6, 0xb9, 0x5c, 0x4a, 0x97, 0xb6, 0xd3, 0x14, + 0xed, 0x2a, 0xe5, 0xef, 0x86, 0x06, 0xc3, 0x06, 0x26, 0xba, 0x00, 0x45, 0xef, 0x6d, 0x3f, 0xed, + 0x0d, 0x55, 0x7d, 0x73, 0x1d, 0xd3, 0x72, 0x0a, 0xa6, 0x22, 0x2e, 0x3f, 0x3b, 0x14, 0x58, 0x89, + 0xb9, 0xaf, 0xc3, 0xa4, 0x17, 0x35, 0x22, 0xaf, 0xea, 0x53, 0x3e, 0xa3, 0x71, 0x2a, 0xa5, 0x15, + 0xa1, 0x9d, 0x56, 0x50, 0x9c, 0xc2, 0xd6, 0x0e, 0xb2, 0xe1, 0x81, 0xc5, 0xe4, 0xbe, 0xde, 0xd9, + 0xf4, 0x06, 0xd0, 0x66, 0x5f, 0x17, 0x31, 0x2d, 0xbe, 0xb8, 0x01, 0xf0, 0x0f, 0x8e, 0xb0, 0x84, + 0xd1, 0x2b, 0x67, 0x63, 0xc7, 0x69, 0x2f, 0x76, 0xe2, 0x9d, 0x8a, 0x17, 0x35, 0x82, 0x3d, 0x12, + 0xee, 0x33, 0x6d, 0x41, 0x29, 0xb9, 0x72, 0x2a, 0xc0, 0xf2, 0xf5, 0xc5, 0x1a, 0xc5, 0xc4, 0xdd, + 0x75, 0xd0, 0x22, 0x4c, 0xc9, 0xc2, 0x3a, 0x89, 0xd8, 0x11, 0x36, 0xc6, 0xc8, 0x28, 0xff, 0x24, + 0x51, 0xac, 0x88, 0xa4, 0xf1, 0x4d, 0x49, 0x1a, 0x8e, 0x43, 0x92, 0x7e, 0x05, 0x26, 0x3c, 0xdf, + 0x8b, 0x3d, 0x27, 0x0e, 0xf8, 0x13, 0x14, 0x57, 0x0c, 0x30, 0xdd, 0x7a, 0x55, 0x07, 0x60, 0x13, + 0xcf, 0xfe, 0x6f, 0x43, 0x30, 0xc3, 0xa6, 0xed, 0xfd, 0x15, 0xf6, 0xf5, 0xb4, 0xc2, 0x6e, 0x77, + 0xaf, 0xb0, 0xe3, 0xb8, 0x22, 0x3c, 0xf4, 0x32, 0xfb, 0x3c, 0x94, 0x95, 0x4b, 0x96, 0xf4, 0xc9, + 0xb4, 0x72, 0x7c, 0x32, 0xfb, 0x4b, 0x1f, 0xd2, 0xaa, 0xad, 0x98, 0x69, 0xd5, 0xf6, 0xb7, 0x2d, + 0x48, 0xde, 0x54, 0xd0, 0x75, 0x28, 0xb7, 0x03, 0x66, 0xac, 0x19, 0x4a, 0x0b, 0xe8, 0xc7, 0x33, + 0x0f, 0x2a, 0x7e, 0x28, 0xf2, 0x8f, 0xaf, 0xc9, 0x1a, 0x38, 0xa9, 0x8c, 0x96, 0x60, 0xb4, 0x1d, + 0x92, 0x7a, 0xcc, 0xc2, 0x96, 0xf4, 0xa5, 0xc3, 0xd7, 0x08, 0xc7, 0xc7, 0xb2, 0xa2, 0xfd, 0xb3, + 0x16, 0x00, 0x37, 0x1c, 0x73, 0xfc, 0x6d, 0x72, 0x02, 0xea, 0xee, 0x0a, 0x0c, 0x45, 0x6d, 0xd2, + 0xe8, 0x65, 0x46, 0x9b, 0xf4, 0xa7, 0xde, 0x26, 0x8d, 0x64, 0xc0, 0xe9, 0x3f, 0xcc, 0x6a, 0xdb, + 0xdf, 0x09, 0x30, 0x99, 0xa0, 0x55, 0x63, 0xd2, 0x42, 0xcf, 0x19, 0x61, 0x0c, 0xce, 0xa5, 0xc2, + 0x18, 0x94, 0x19, 0xb6, 0xa6, 0x59, 0xfd, 0x3c, 0x14, 0x5b, 0xce, 0x7d, 0xa1, 0x3a, 0x7b, 0xa6, + 0x77, 0x37, 0x28, 0xfd, 0x85, 0x35, 0xe7, 0x3e, 0xbf, 0x24, 0x3e, 0x23, 0x17, 0xc8, 0x9a, 0x73, + 0xff, 0x90, 0x1b, 0xcb, 0x32, 0x26, 0x75, 0xd3, 0x8b, 0xe2, 0x2f, 0xfc, 0xd7, 0xe4, 0x3f, 0x5b, + 0x76, 0xb4, 0x11, 0xd6, 0x96, 0xe7, 0x0b, 0x9b, 0xa8, 0x81, 0xda, 0xf2, 0xfc, 0x74, 0x5b, 0x9e, + 0x3f, 0x40, 0x5b, 0x9e, 0x8f, 0xde, 0x81, 0x51, 0x61, 0xb2, 0x28, 0xc2, 0x06, 0x5d, 0x1d, 0xa0, + 0x3d, 0x61, 0xf1, 0xc8, 0xdb, 0xbc, 0x2a, 0x2f, 0xc1, 0xa2, 0xb4, 0x6f, 0xbb, 0xb2, 0x41, 0xf4, + 0x37, 0x2c, 0x98, 0x14, 0xbf, 0x31, 0x79, 0xbb, 0x43, 0xa2, 0x58, 0xc8, 0x9e, 0x1f, 0x1d, 0xbc, + 0x0f, 0xa2, 0x22, 0xef, 0xca, 0x47, 0x25, 0x9b, 0x35, 0x81, 0x7d, 0x7b, 0x94, 0xea, 0x05, 0xfa, + 0x47, 0x16, 0x9c, 0x6e, 0x39, 0xf7, 0x79, 0x8b, 0xbc, 0x0c, 0x3b, 0xb1, 0x17, 0x88, 0xa7, 0xff, + 0x8f, 0x0f, 0x36, 0xfd, 0x5d, 0xd5, 0x79, 0x27, 0xe5, 0xfb, 0xe4, 0xe9, 0x2c, 0x94, 0xbe, 0x5d, + 0xcd, 0xec, 0xd7, 0xdc, 0x16, 0x94, 0xe4, 0x7a, 0xcb, 0x50, 0x35, 0x54, 0x74, 0xc1, 0xfa, 0xc8, + 0x16, 0xa3, 0x7a, 0x78, 0x00, 0xda, 0x8e, 0x58, 0x6b, 0x8f, 0xb4, 0x9d, 0xcf, 0xc3, 0xb8, 0xbe, + 0xc6, 0x1e, 0x69, 0x5b, 0x6f, 0xc3, 0xa9, 0x8c, 0xb5, 0xf4, 0x48, 0x9b, 0xbc, 0x07, 0xe7, 0x72, + 0xd7, 0xc7, 0xa3, 0x6c, 0xd8, 0xfe, 0x19, 0x4b, 0xe7, 0x83, 0x27, 0xf0, 0xe6, 0xb0, 0x6c, 0xbe, + 0x39, 0x5c, 0xec, 0xbd, 0x73, 0x72, 0x1e, 0x1e, 0xde, 0xd2, 0x3b, 0x4d, 0xb9, 0x3a, 0x7a, 0x03, + 0x46, 0x9a, 0xb4, 0x44, 0x1a, 0xbe, 0xda, 0xfd, 0x77, 0x64, 0x22, 0x4b, 0xb1, 0xf2, 0x08, 0x0b, + 0x0a, 0xf6, 0x2f, 0x58, 0x30, 0x74, 0x02, 0x23, 0x81, 0xcd, 0x91, 0x78, 0x2e, 0x97, 0xb4, 0x88, + 0x68, 0xbc, 0x80, 0x9d, 0x7b, 0x2b, 0xf7, 0x63, 0xe2, 0x47, 0xec, 0xaa, 0x98, 0x39, 0x30, 0xff, + 0x1f, 0x9c, 0xba, 0x19, 0x38, 0xee, 0x92, 0xd3, 0x74, 0xfc, 0x06, 0x09, 0xab, 0xfe, 0xf6, 0x91, + 0x8c, 0xb6, 0x0b, 0xfd, 0x8c, 0xb6, 0xed, 0x1d, 0x40, 0x7a, 0x03, 0xc2, 0xfb, 0x05, 0xc3, 0xa8, + 0xc7, 0x9b, 0x12, 0xc3, 0xff, 0x54, 0xb6, 0x68, 0xd6, 0xd5, 0x33, 0xcd, 0xaf, 0x83, 0x17, 0x60, + 0x49, 0xc8, 0x7e, 0x15, 0x32, 0x5d, 0xe8, 0xfb, 0xab, 0x0d, 0xec, 0x4f, 0xc1, 0x0c, 0xab, 0x79, + 0xc4, 0x2b, 0xad, 0x9d, 0xd2, 0x4a, 0x66, 0x04, 0xd7, 0xb3, 0xbf, 0x68, 0xc1, 0xd4, 0x7a, 0x2a, + 0xe6, 0xd8, 0x65, 0xf6, 0x00, 0x9a, 0xa1, 0x0c, 0xaf, 0xb3, 0x52, 0x2c, 0xa0, 0xc7, 0xae, 0x83, + 0xfa, 0x73, 0x0b, 0x92, 0xa8, 0x16, 0x27, 0x20, 0x78, 0x2d, 0x1b, 0x82, 0x57, 0xa6, 0x6e, 0x44, + 0x75, 0x27, 0x4f, 0xee, 0x42, 0x37, 0x54, 0xbc, 0xa7, 0x1e, 0x6a, 0x91, 0x84, 0x0c, 0x8f, 0x0e, + 0x34, 0x69, 0x06, 0x85, 0x92, 0x11, 0xa0, 0xec, 0xff, 0x5c, 0x00, 0xa4, 0x70, 0x07, 0x8e, 0x47, + 0xd5, 0x5d, 0xe3, 0x78, 0xe2, 0x51, 0xed, 0x01, 0x62, 0x4f, 0xf8, 0xa1, 0xe3, 0x47, 0x9c, 0xac, + 0x27, 0xb4, 0x6e, 0x47, 0xb3, 0x0f, 0x98, 0x13, 0x4d, 0xa2, 0x9b, 0x5d, 0xd4, 0x70, 0x46, 0x0b, + 0x9a, 0x69, 0xc6, 0xf0, 0xa0, 0xa6, 0x19, 0x23, 0x7d, 0x3c, 0xdc, 0x7e, 0xda, 0x82, 0x09, 0x35, + 0x4c, 0xef, 0x11, 0xfb, 0x73, 0xd5, 0x9f, 0x1c, 0xd6, 0x57, 0xd3, 0xba, 0xcc, 0x8e, 0x84, 0x6f, + 0x64, 0x9e, 0x8a, 0x4e, 0xd3, 0x7b, 0x87, 0xa8, 0x68, 0x80, 0xf3, 0xc2, 0xf3, 0x50, 0x94, 0x1e, + 0x1e, 0xcc, 0x4f, 0xa8, 0x7f, 0x3c, 0xfa, 0x70, 0x52, 0xc5, 0xfe, 0x31, 0xba, 0xd9, 0xcd, 0xa5, + 0x88, 0x5e, 0x86, 0xe1, 0xf6, 0x8e, 0x13, 0x91, 0x94, 0x9f, 0xce, 0x70, 0x8d, 0x16, 0x1e, 0x1e, + 0xcc, 0x4f, 0xaa, 0x0a, 0xac, 0x04, 0x73, 0xec, 0xc1, 0xa3, 0x7c, 0x75, 0x2f, 0xce, 0xbe, 0x51, + 0xbe, 0xfe, 0xd8, 0x82, 0xa1, 0xf5, 0xc0, 0x3d, 0x09, 0x16, 0xf0, 0xba, 0xc1, 0x02, 0xce, 0xe7, + 0x05, 0x86, 0xcf, 0xdd, 0xfd, 0xab, 0xa9, 0xdd, 0x7f, 0x31, 0x97, 0x42, 0xef, 0x8d, 0xdf, 0x82, + 0x31, 0x16, 0x6e, 0x5e, 0xf8, 0x24, 0xbd, 0x68, 0x6c, 0xf8, 0xf9, 0xd4, 0x86, 0x9f, 0xd2, 0x50, + 0xb5, 0x9d, 0xfe, 0x34, 0x8c, 0x0a, 0x27, 0x97, 0xb4, 0xc3, 0xa7, 0xc0, 0xc5, 0x12, 0x6e, 0xff, + 0x48, 0x11, 0x8c, 0xf0, 0xf6, 0xe8, 0x97, 0x2c, 0x58, 0x08, 0xb9, 0xf1, 0xab, 0x5b, 0xe9, 0x84, + 0x9e, 0xbf, 0x5d, 0x6f, 0xec, 0x10, 0xb7, 0xd3, 0xf4, 0xfc, 0xed, 0xea, 0xb6, 0x1f, 0xa8, 0xe2, + 0x95, 0xfb, 0xa4, 0xd1, 0x61, 0xcf, 0x57, 0x7d, 0x62, 0xe9, 0x2b, 0x23, 0xf2, 0x17, 0x1e, 0x1c, + 0xcc, 0x2f, 0xe0, 0x23, 0xd1, 0xc6, 0x47, 0xec, 0x0b, 0xfa, 0x0d, 0x0b, 0xae, 0xf2, 0xa8, 0xef, + 0x83, 0xf7, 0xbf, 0xc7, 0x3d, 0xb7, 0x26, 0x49, 0x25, 0x44, 0x36, 0x48, 0xd8, 0x5a, 0x7a, 0x45, + 0x0c, 0xe8, 0xd5, 0xda, 0xd1, 0xda, 0xc2, 0x47, 0xed, 0x9c, 0xfd, 0x2f, 0x8b, 0x30, 0x21, 0xa2, + 0x41, 0x89, 0x33, 0xe0, 0x65, 0x63, 0x49, 0x3c, 0x91, 0x5a, 0x12, 0x33, 0x06, 0xf2, 0xf1, 0xb0, + 0xff, 0x08, 0x66, 0x28, 0x73, 0xbe, 0x4e, 0x9c, 0x30, 0xde, 0x24, 0x0e, 0xb7, 0xb8, 0x2a, 0x1e, + 0x99, 0xfb, 0x2b, 0xc5, 0xda, 0xcd, 0x34, 0x31, 0xdc, 0x4d, 0xff, 0xeb, 0xe9, 0xcc, 0xf1, 0x61, + 0xba, 0x2b, 0xa0, 0xd7, 0xa7, 0xa1, 0xac, 0x3c, 0x34, 0x04, 0xd3, 0xe9, 0x1d, 0x17, 0x2f, 0x4d, + 0x81, 0x2b, 0xbf, 0x12, 0xef, 0xa0, 0x84, 0x9c, 0xfd, 0x8f, 0x0b, 0x46, 0x83, 0x7c, 0x12, 0xd7, + 0xa1, 0xe4, 0x44, 0x91, 0xb7, 0xed, 0x13, 0x57, 0xec, 0xd8, 0x0f, 0xe6, 0xed, 0x58, 0xa3, 0x19, + 0xe6, 0x25, 0xb3, 0x28, 0x6a, 0x62, 0x45, 0x03, 0x5d, 0xe7, 0x76, 0x6d, 0x7b, 0xf2, 0xa6, 0x36, + 0x18, 0x35, 0x90, 0x96, 0x6f, 0x7b, 0x04, 0x8b, 0xfa, 0xe8, 0x33, 0xdc, 0xf0, 0xf0, 0x86, 0x1f, + 0xdc, 0xf3, 0xaf, 0x05, 0x81, 0x8c, 0xb8, 0x30, 0x18, 0xc1, 0x19, 0x69, 0x6e, 0xa8, 0xaa, 0x63, + 0x93, 0xda, 0x60, 0x11, 0x32, 0xbf, 0x05, 0x4e, 0x51, 0xd2, 0xa6, 0x43, 0x74, 0x84, 0x08, 0x4c, + 0x89, 0x50, 0x63, 0xb2, 0x4c, 0x8c, 0x5d, 0xe6, 0x25, 0xcc, 0xac, 0x9d, 0x68, 0x80, 0x6f, 0x98, + 0x24, 0x70, 0x9a, 0xa6, 0xfd, 0xe3, 0x16, 0x30, 0xe7, 0xd0, 0x13, 0x90, 0x47, 0x3e, 0x61, 0xca, + 0x23, 0xb3, 0x79, 0x83, 0x9c, 0x23, 0x8a, 0xbc, 0xc4, 0x57, 0x56, 0x2d, 0x0c, 0xee, 0xef, 0x0b, + 0xa3, 0x8f, 0xfe, 0xf7, 0x0f, 0xfb, 0xff, 0x58, 0x9c, 0x89, 0x29, 0xff, 0x09, 0xf4, 0xad, 0x50, + 0x6a, 0x38, 0x6d, 0xa7, 0xc1, 0x73, 0xb1, 0xe4, 0xea, 0xe2, 0x8c, 0x4a, 0x0b, 0xcb, 0xa2, 0x06, + 0xd7, 0x2d, 0xc9, 0x90, 0x75, 0x25, 0x59, 0xdc, 0x57, 0x9f, 0xa4, 0x9a, 0x9c, 0xdb, 0x85, 0x09, + 0x83, 0xd8, 0x23, 0x55, 0x44, 0x7c, 0x2b, 0x3f, 0x62, 0x55, 0x88, 0xc5, 0x16, 0xcc, 0xf8, 0xda, + 0x7f, 0x7a, 0xa0, 0xc8, 0xcb, 0xe5, 0x07, 0xfb, 0x1d, 0xa2, 0xec, 0xf4, 0xd1, 0xfc, 0x4e, 0x53, + 0x64, 0x70, 0x37, 0x65, 0xfb, 0x47, 0x2d, 0x78, 0x4c, 0x47, 0xd4, 0x5c, 0x5b, 0xfa, 0x69, 0xf7, + 0x2b, 0x50, 0x0a, 0xda, 0x24, 0x74, 0xe2, 0x20, 0x14, 0xa7, 0xc6, 0x15, 0x39, 0xe8, 0xb7, 0x44, + 0xf9, 0xa1, 0x88, 0x64, 0x2e, 0xa9, 0xcb, 0x72, 0xac, 0x6a, 0xd2, 0xdb, 0x27, 0x1b, 0x8c, 0x48, + 0x38, 0x31, 0x31, 0x1e, 0xc0, 0x1e, 0xba, 0x23, 0x2c, 0x20, 0xf6, 0x57, 0x2d, 0xbe, 0xb0, 0xf4, + 0xae, 0xa3, 0xb7, 0x61, 0xba, 0xe5, 0xc4, 0x8d, 0x9d, 0x95, 0xfb, 0xed, 0x90, 0xbf, 0x95, 0xc8, + 0x71, 0x7a, 0xa6, 0xdf, 0x38, 0x69, 0x1f, 0x99, 0xd8, 0x52, 0xae, 0xa5, 0x88, 0xe1, 0x2e, 0xf2, + 0x68, 0x13, 0xc6, 0x58, 0x19, 0xf3, 0xcf, 0x8b, 0x7a, 0x89, 0x06, 0x79, 0xad, 0x29, 0x5b, 0x81, + 0xb5, 0x84, 0x0e, 0xd6, 0x89, 0xda, 0x3f, 0x55, 0xe4, 0xbb, 0x9d, 0x89, 0xf2, 0x4f, 0xc3, 0x68, + 0x3b, 0x70, 0x97, 0xab, 0x15, 0x2c, 0x66, 0x41, 0x1d, 0x23, 0x35, 0x5e, 0x8c, 0x25, 0x1c, 0x5d, + 0x81, 0x92, 0xf8, 0x29, 0xdf, 0xb6, 0x18, 0x6f, 0x16, 0x78, 0x11, 0x56, 0x50, 0xf4, 0x02, 0x40, + 0x3b, 0x0c, 0xf6, 0x3c, 0x97, 0xc5, 0x8d, 0x28, 0x9a, 0x66, 0x3e, 0x35, 0x05, 0xc1, 0x1a, 0x16, + 0x7a, 0x0d, 0x26, 0x3a, 0x7e, 0xc4, 0xc5, 0x11, 0x2d, 0x4a, 0xac, 0x32, 0x40, 0xb9, 0xad, 0x03, + 0xb1, 0x89, 0x8b, 0x16, 0x61, 0x24, 0x76, 0x98, 0xd9, 0xca, 0x70, 0xbe, 0xbd, 0xed, 0x06, 0xc5, + 0xd0, 0xd3, 0x7e, 0xd0, 0x0a, 0x58, 0x54, 0x44, 0x9f, 0x96, 0xae, 0xb2, 0x9c, 0xb1, 0x0b, 0x43, + 0xf7, 0xc1, 0x0e, 0x01, 0xcd, 0x51, 0x56, 0x18, 0xd0, 0x1b, 0xb4, 0xd0, 0xc7, 0x00, 0xc8, 0xfd, + 0x98, 0x84, 0xbe, 0xd3, 0x54, 0x56, 0x61, 0x4a, 0x2e, 0xa8, 0x04, 0xeb, 0x41, 0x7c, 0x3b, 0x22, + 0x2b, 0x0a, 0x03, 0x6b, 0xd8, 0xf6, 0x6f, 0x94, 0x01, 0x12, 0xb9, 0x1d, 0xbd, 0xd3, 0xc5, 0xb8, + 0x9e, 0xed, 0x2d, 0xe9, 0x1f, 0x1f, 0xd7, 0x42, 0xdf, 0x65, 0xc1, 0x98, 0xd3, 0x6c, 0x06, 0x0d, + 0x87, 0xc7, 0xf1, 0x2d, 0xf4, 0x66, 0x9c, 0xa2, 0xfd, 0xc5, 0xa4, 0x06, 0xef, 0xc2, 0x8b, 0x72, + 0x85, 0x6a, 0x90, 0xbe, 0xbd, 0xd0, 0x1b, 0x46, 0x1f, 0x91, 0x57, 0xc5, 0xa2, 0x31, 0x94, 0xea, + 0xaa, 0x58, 0x66, 0x67, 0x84, 0x7e, 0x4b, 0xbc, 0x6d, 0xdc, 0x12, 0x87, 0xf2, 0x7d, 0x01, 0x0d, + 0xf1, 0xb5, 0xdf, 0x05, 0x11, 0xd5, 0xf4, 0xb8, 0x00, 0xc3, 0xf9, 0x8e, 0x77, 0xda, 0x3d, 0xa9, + 0x4f, 0x4c, 0x80, 0xcf, 0xc3, 0x94, 0x6b, 0x0a, 0x01, 0x62, 0x25, 0x3e, 0x95, 0x47, 0x37, 0x25, + 0x33, 0x24, 0xc7, 0x7e, 0x0a, 0x80, 0xd3, 0x84, 0x51, 0x8d, 0x87, 0x89, 0xa8, 0xfa, 0x5b, 0x81, + 0x70, 0xb6, 0xb0, 0x73, 0xe7, 0x72, 0x3f, 0x8a, 0x49, 0x8b, 0x62, 0x26, 0xa7, 0xfb, 0xba, 0xa8, + 0x8b, 0x15, 0x15, 0xf4, 0x06, 0x8c, 0x30, 0xcf, 0xab, 0x68, 0xb6, 0x94, 0xaf, 0x2b, 0x36, 0xe3, + 0x9e, 0x25, 0x1b, 0x92, 0xfd, 0x8d, 0xb0, 0xa0, 0x80, 0xae, 0x4b, 0xbf, 0xc6, 0xa8, 0xea, 0xdf, + 0x8e, 0x08, 0xf3, 0x6b, 0x2c, 0x2f, 0x7d, 0x30, 0x71, 0x59, 0xe4, 0xe5, 0x99, 0xc9, 0xc1, 0x8c, + 0x9a, 0x54, 0x8a, 0x12, 0xff, 0x65, 0xce, 0xb1, 0x59, 0xc8, 0xef, 0x9e, 0x99, 0x97, 0x2c, 0x19, + 0xce, 0x3b, 0x26, 0x09, 0x9c, 0xa6, 0x49, 0x25, 0x52, 0xbe, 0xeb, 0x85, 0xbb, 0x46, 0x3f, 0xde, + 0xc1, 0x2f, 0xe2, 0xec, 0x34, 0xe2, 0x25, 0x58, 0xd4, 0x3f, 0x51, 0xf1, 0x60, 0xce, 0x87, 0xe9, + 0xf4, 0x16, 0x7d, 0xa4, 0xe2, 0xc8, 0xef, 0x0f, 0xc1, 0xa4, 0xb9, 0xa4, 0xd0, 0x55, 0x28, 0x0b, + 0x22, 0x2a, 0x4f, 0x80, 0xda, 0x25, 0x6b, 0x12, 0x80, 0x13, 0x1c, 0x96, 0x1e, 0x82, 0x55, 0xd7, + 0xcc, 0x6c, 0x93, 0xf4, 0x10, 0x0a, 0x82, 0x35, 0x2c, 0x7a, 0xb1, 0xda, 0x0c, 0x82, 0x58, 0x1d, + 0x48, 0x6a, 0xdd, 0x2d, 0xb1, 0x52, 0x2c, 0xa0, 0xf4, 0x20, 0xda, 0x25, 0xa1, 0x4f, 0x9a, 0x66, + 0x44, 0x61, 0x75, 0x10, 0xdd, 0xd0, 0x81, 0xd8, 0xc4, 0xa5, 0xc7, 0x69, 0x10, 0xb1, 0x85, 0x2c, + 0xae, 0x6f, 0x89, 0xd9, 0x72, 0x9d, 0xbb, 0x56, 0x4b, 0x38, 0xfa, 0x14, 0x3c, 0xa6, 0xa2, 0x26, + 0x61, 0xfe, 0x0e, 0x21, 0x5b, 0x1c, 0x31, 0xb4, 0x2d, 0x8f, 0x2d, 0x67, 0xa3, 0xe1, 0xbc, 0xfa, + 0xe8, 0x75, 0x98, 0x14, 0x22, 0xbe, 0xa4, 0x38, 0x6a, 0x9a, 0xc6, 0xdc, 0x30, 0xa0, 0x38, 0x85, + 0x2d, 0x63, 0x22, 0x33, 0x29, 0x5b, 0x52, 0x28, 0x75, 0xc7, 0x44, 0xd6, 0xe1, 0xb8, 0xab, 0x06, + 0x5a, 0x84, 0x29, 0x2e, 0x83, 0x79, 0xfe, 0x36, 0x9f, 0x13, 0xe1, 0x4d, 0xa5, 0xb6, 0xd4, 0x2d, + 0x13, 0x8c, 0xd3, 0xf8, 0xe8, 0x55, 0x18, 0x77, 0xc2, 0xc6, 0x8e, 0x17, 0x93, 0x46, 0xdc, 0x09, + 0xb9, 0x9b, 0x95, 0x66, 0x5b, 0xb4, 0xa8, 0xc1, 0xb0, 0x81, 0x69, 0xbf, 0x03, 0xa7, 0x32, 0x62, + 0x2e, 0xd0, 0x85, 0xe3, 0xb4, 0x3d, 0xf9, 0x4d, 0x29, 0x03, 0xe4, 0xc5, 0x5a, 0x55, 0x7e, 0x8d, + 0x86, 0x45, 0x57, 0x27, 0x8b, 0xcd, 0xa0, 0xa5, 0x18, 0x54, 0xab, 0x73, 0x55, 0x02, 0x70, 0x82, + 0x63, 0xff, 0xcf, 0x02, 0x4c, 0x65, 0xbc, 0xad, 0xb0, 0x34, 0x77, 0xa9, 0x4b, 0x4a, 0x92, 0xd5, + 0xce, 0x0c, 0xb1, 0x5d, 0x38, 0x42, 0x88, 0xed, 0x62, 0xbf, 0x10, 0xdb, 0x43, 0xef, 0x26, 0xc4, + 0xb6, 0x39, 0x62, 0xc3, 0x03, 0x8d, 0x58, 0x46, 0x58, 0xee, 0x91, 0x23, 0x86, 0xe5, 0x36, 0x06, + 0x7d, 0x74, 0x80, 0x41, 0xff, 0x81, 0x02, 0x4c, 0xa7, 0x6d, 0x20, 0x4f, 0x40, 0x6f, 0xfb, 0x86, + 0xa1, 0xb7, 0xcd, 0x4e, 0x1a, 0x99, 0xb6, 0xcc, 0xcc, 0xd3, 0xe1, 0xe2, 0x94, 0x0e, 0xf7, 0xc3, + 0x03, 0x51, 0xeb, 0xad, 0xcf, 0xfd, 0xbb, 0x05, 0x38, 0x93, 0xae, 0xb2, 0xdc, 0x74, 0xbc, 0xd6, + 0x09, 0x8c, 0xcd, 0x2d, 0x63, 0x6c, 0x9e, 0x1b, 0xe4, 0x6b, 0x58, 0xd7, 0x72, 0x07, 0xe8, 0x6e, + 0x6a, 0x80, 0xae, 0x0e, 0x4e, 0xb2, 0xf7, 0x28, 0x7d, 0xa5, 0x08, 0x17, 0x33, 0xeb, 0x25, 0x6a, + 0xcf, 0x55, 0x43, 0xed, 0xf9, 0x42, 0x4a, 0xed, 0x69, 0xf7, 0xae, 0x7d, 0x3c, 0x7a, 0x50, 0xe1, + 0x21, 0xcb, 0x02, 0x08, 0x3c, 0xa4, 0x0e, 0xd4, 0xf0, 0x90, 0x55, 0x84, 0xb0, 0x49, 0xf7, 0xeb, + 0x49, 0xf7, 0xf9, 0x6f, 0x2d, 0x38, 0x97, 0x39, 0x37, 0x27, 0xa0, 0xeb, 0x5a, 0x37, 0x75, 0x5d, + 0x4f, 0x0f, 0xbc, 0x5a, 0x73, 0x94, 0x5f, 0xbf, 0x36, 0x94, 0xf3, 0x2d, 0xec, 0x26, 0x7f, 0x0b, + 0xc6, 0x9c, 0x46, 0x83, 0x44, 0xd1, 0x5a, 0xe0, 0xaa, 0x28, 0xc2, 0xcf, 0xb1, 0x7b, 0x56, 0x52, + 0x7c, 0x78, 0x30, 0x3f, 0x97, 0x26, 0x91, 0x80, 0xb1, 0x4e, 0x01, 0x7d, 0x06, 0x4a, 0x91, 0x38, + 0x37, 0xc5, 0xdc, 0xbf, 0x38, 0xe0, 0xe0, 0x38, 0x9b, 0xa4, 0x69, 0x86, 0x39, 0x52, 0x9a, 0x0a, + 0x45, 0xd2, 0x0c, 0x89, 0x52, 0x38, 0xd6, 0x90, 0x28, 0x2f, 0x00, 0xec, 0xa9, 0xcb, 0x40, 0x5a, + 0xff, 0xa0, 0x5d, 0x13, 0x34, 0x2c, 0xf4, 0x4d, 0x30, 0x1d, 0xf1, 0x38, 0x80, 0xcb, 0x4d, 0x27, + 0x62, 0x6e, 0x2e, 0x62, 0x15, 0xb2, 0x50, 0x4a, 0xf5, 0x14, 0x0c, 0x77, 0x61, 0xa3, 0x55, 0xd9, + 0x2a, 0x0b, 0x5a, 0xc8, 0x17, 0xe6, 0xe5, 0xa4, 0x45, 0x91, 0x64, 0xf7, 0x74, 0x7a, 0xf8, 0xd9, + 0xc0, 0x6b, 0x35, 0xd1, 0x67, 0x00, 0xe8, 0xf2, 0x11, 0x7a, 0x88, 0xd1, 0x7c, 0xe6, 0x49, 0xb9, + 0x8a, 0x9b, 0x69, 0x95, 0xcb, 0x7c, 0x53, 0x2b, 0x8a, 0x08, 0xd6, 0x08, 0xda, 0x3f, 0x30, 0x04, + 0x8f, 0xf7, 0xe0, 0x91, 0x68, 0xd1, 0x7c, 0x87, 0x7d, 0x26, 0x7d, 0xb9, 0x9e, 0xcb, 0xac, 0x6c, + 0xdc, 0xb6, 0x53, 0x4b, 0xb1, 0xf0, 0xae, 0x97, 0xe2, 0xf7, 0x5a, 0x9a, 0xda, 0x83, 0xdb, 0x6a, + 0x7e, 0xe2, 0x88, 0xbc, 0xff, 0x18, 0xf5, 0x20, 0x5b, 0x19, 0xca, 0x84, 0x17, 0x06, 0xee, 0xce, + 0xc0, 0xda, 0x85, 0x93, 0xd5, 0x12, 0x7f, 0xc1, 0x82, 0x27, 0x32, 0xfb, 0x6b, 0x58, 0xe4, 0x5c, + 0x85, 0x72, 0x83, 0x16, 0x6a, 0xae, 0x88, 0x89, 0x8f, 0xb6, 0x04, 0xe0, 0x04, 0xc7, 0x30, 0xbc, + 0x29, 0xf4, 0x35, 0xbc, 0xf9, 0x65, 0x0b, 0xba, 0xf6, 0xc7, 0x09, 0x30, 0xea, 0xaa, 0xc9, 0xa8, + 0x3f, 0x38, 0xc8, 0x5c, 0xe6, 0xf0, 0xe8, 0x3f, 0x9a, 0x82, 0xb3, 0x39, 0xae, 0x38, 0x7b, 0x30, 0xb3, 0xdd, 0x20, 0xa6, 0x93, 0xa7, 0xf8, 0x98, 0x4c, 0x7f, 0xd8, 0x9e, 0x1e, 0xa1, 0x2c, 0x63, 0xe6, 0x4c, 0x17, 0x0a, 0xee, 0x6e, 0x02, 0x7d, 0xc1, 0x82, 0xd3, 0xce, 0xbd, 0xa8, 0x2b, 0xc5, - 0xbe, 0x58, 0x33, 0x2f, 0x65, 0x0a, 0x41, 0xfa, 0xa4, 0xe4, 0xe7, 0x29, 0x44, 0xb3, 0xb0, 0x70, - 0x66, 0x5b, 0x08, 0x8b, 0xb8, 0xf2, 0x94, 0x9d, 0xef, 0xe1, 0x86, 0x9c, 0xe5, 0x33, 0xc5, 0x6f, - 0x10, 0x09, 0xc1, 0x8a, 0x0e, 0xfa, 0x1c, 0x94, 0xb7, 0xa5, 0x23, 0x63, 0xc6, 0x0d, 0x95, 0x0c, - 0x64, 0x6f, 0xf7, 0x4e, 0xae, 0xc9, 0x54, 0x48, 0x38, 0x21, 0x8a, 0x5e, 0x87, 0xa2, 0xbf, 0x15, - 0xf5, 0xca, 0xc2, 0x99, 0x32, 0x59, 0xe3, 0xce, 0xfe, 0xeb, 0xab, 0x75, 0x4c, 0x2b, 0xa2, 0xeb, - 0x50, 0x0c, 0x37, 0x5d, 0x21, 0xc1, 0xcb, 0x3c, 0xc3, 0xf1, 0x52, 0x25, 0xa7, 0x57, 0x8c, 0x12, - 0x5e, 0xaa, 0x60, 0x4a, 0x02, 0xd5, 0x60, 0x98, 0xf9, 0xaf, 0x88, 0xfb, 0x20, 0x93, 0xf3, 0xed, + 0xbe, 0x58, 0x33, 0x2f, 0x65, 0x2a, 0x41, 0xfa, 0xa4, 0xe4, 0xe7, 0x29, 0x44, 0xb3, 0xb0, 0x70, + 0x66, 0x5b, 0x08, 0x8b, 0xb8, 0xf2, 0x54, 0x9c, 0xef, 0xe1, 0x86, 0x9c, 0xe5, 0x33, 0xc5, 0x4f, + 0x10, 0x09, 0xc1, 0x8a, 0x0e, 0xfa, 0x1c, 0x94, 0xb7, 0xa5, 0x23, 0x63, 0xc6, 0x09, 0x95, 0x0c, + 0x64, 0x6f, 0xf7, 0x4e, 0xfe, 0x92, 0xa9, 0x90, 0x70, 0x42, 0x14, 0xbd, 0x0e, 0x45, 0x7f, 0x2b, + 0xea, 0x95, 0x85, 0x33, 0x65, 0xb2, 0xc6, 0x9d, 0xfd, 0xd7, 0x57, 0xeb, 0x98, 0x56, 0x44, 0xd7, + 0xa1, 0x18, 0x6e, 0xba, 0x42, 0x83, 0x97, 0xc9, 0xc3, 0xf1, 0x52, 0x25, 0xa7, 0x57, 0x8c, 0x12, + 0x5e, 0xaa, 0x60, 0x4a, 0x02, 0xd5, 0x60, 0x98, 0xf9, 0xaf, 0x88, 0xf3, 0x20, 0x53, 0xf2, 0xed, 0xe1, 0x07, 0xc6, 0x23, 0x02, 0x30, 0x04, 0xcc, 0x09, 0xa1, 0x0d, 0x18, 0x69, 0xb0, 0x8c, 0x8d, - 0x22, 0x1e, 0xd9, 0x47, 0x32, 0x65, 0x75, 0x3d, 0x52, 0x59, 0x0a, 0xd1, 0x15, 0xc3, 0xc0, 0x82, + 0x22, 0x1e, 0xd9, 0x47, 0x32, 0x75, 0x75, 0x3d, 0x52, 0x59, 0x0a, 0xd5, 0x15, 0xc3, 0xc0, 0x82, 0x16, 0xa3, 0x4a, 0xda, 0x3b, 0x5b, 0x91, 0xc8, 0x30, 0x9c, 0x4d, 0xb5, 0x47, 0x86, 0x56, 0x41, - 0x95, 0x61, 0x60, 0x41, 0x0b, 0x7d, 0x0c, 0x0a, 0x5b, 0x0d, 0xe1, 0x9b, 0x92, 0x29, 0xb4, 0x33, + 0x95, 0x61, 0x60, 0x41, 0x0b, 0x7d, 0x0c, 0x0a, 0x5b, 0x0d, 0xe1, 0x9b, 0x92, 0xa9, 0xb4, 0x33, 0xe3, 0x35, 0x2c, 0x8d, 0x3c, 0x38, 0x98, 0x2f, 0xac, 0x2e, 0xe3, 0xc2, 0x56, 0x03, 0xad, 0xc3, - 0xe8, 0x16, 0xf7, 0xf0, 0x16, 0x72, 0xb9, 0xa7, 0xb2, 0x9d, 0xcf, 0xbb, 0x9c, 0xc0, 0xb9, 0x5b, + 0xe8, 0x16, 0xf7, 0xf0, 0x16, 0x7a, 0xb9, 0xa7, 0xb2, 0x9d, 0xcf, 0xbb, 0x9c, 0xc0, 0xb9, 0x5b, 0x86, 0x00, 0x60, 0x49, 0x84, 0x85, 0x69, 0x57, 0x9e, 0xea, 0x22, 0x74, 0xd7, 0xc2, 0xd1, 0xa2, - 0x0b, 0xf0, 0xfb, 0x39, 0xf1, 0x77, 0xc7, 0x1a, 0x45, 0xba, 0xaa, 0x1d, 0x99, 0xe6, 0x5d, 0x84, + 0x0b, 0xf0, 0xf3, 0x39, 0xf1, 0x77, 0xc7, 0x1a, 0x45, 0xba, 0xaa, 0x1d, 0x99, 0xe6, 0x5d, 0x84, 0x62, 0xc9, 0x5c, 0xd5, 0x7d, 0x32, 0xe0, 0xf3, 0x55, 0xad, 0x90, 0x70, 0x42, 0x14, 0xed, 0xc2, - 0xc4, 0x5e, 0xd4, 0xde, 0x21, 0x72, 0x4b, 0xb3, 0xc8, 0x2c, 0x39, 0x57, 0xd8, 0x1d, 0x81, 0xe8, - 0x85, 0x71, 0xc7, 0x69, 0x76, 0x9d, 0x42, 0x4c, 0xfd, 0x7d, 0x47, 0x27, 0x86, 0x4d, 0xda, 0x74, + 0xc4, 0x5e, 0xd4, 0xde, 0x21, 0x72, 0x4b, 0xb3, 0xc8, 0x2c, 0x39, 0x47, 0xd8, 0x1d, 0x81, 0xe8, + 0x85, 0x71, 0xc7, 0x69, 0x76, 0x71, 0x21, 0xf6, 0xfc, 0x7d, 0x47, 0x27, 0x86, 0x4d, 0xda, 0x74, 0xf8, 0xdf, 0xee, 0x04, 0x9b, 0xfb, 0x31, 0x11, 0x11, 0xb7, 0x32, 0x87, 0xff, 0x4d, 0x8e, 0xd2, - 0x3d, 0xfc, 0x02, 0x80, 0x25, 0x11, 0x74, 0x47, 0x0c, 0x0f, 0x3b, 0x3d, 0xa7, 0xf3, 0xc3, 0x62, - 0x2e, 0x4a, 0xa4, 0x9c, 0x41, 0x61, 0xa7, 0x65, 0x42, 0x8a, 0x9d, 0x92, 0xed, 0x9d, 0x20, 0x0e, - 0xfc, 0xd4, 0x09, 0x3d, 0x93, 0x7f, 0x4a, 0xd6, 0x32, 0xf0, 0xbb, 0x4f, 0xc9, 0x2c, 0x2c, 0x9c, - 0xd9, 0x16, 0x72, 0x61, 0xb2, 0x1d, 0x84, 0xf1, 0xbd, 0x20, 0x94, 0xeb, 0x0b, 0xf5, 0x90, 0x2b, - 0x18, 0x98, 0xa2, 0x45, 0x16, 0xcc, 0xce, 0x84, 0xe0, 0x14, 0x4d, 0xf4, 0x49, 0x18, 0x8d, 0x1a, - 0x4e, 0x93, 0x54, 0x6f, 0xcd, 0x9e, 0xca, 0xbf, 0x7e, 0xea, 0x1c, 0x25, 0x67, 0x75, 0xf1, 0x98, - 0xee, 0x1c, 0x05, 0x4b, 0x72, 0x68, 0x15, 0x86, 0x59, 0x1a, 0x2e, 0x16, 0x1e, 0x2e, 0x27, 0xba, - 0x67, 0x97, 0x01, 0x31, 0x3f, 0x9b, 0x58, 0x31, 0xe6, 0xd5, 0xe9, 0x1e, 0x10, 0xec, 0x75, 0x10, - 0xcd, 0x9e, 0xc9, 0xdf, 0x03, 0x82, 0x2b, 0xbf, 0x55, 0xef, 0xb5, 0x07, 0x14, 0x12, 0x4e, 0x88, - 0xd2, 0x93, 0x99, 0x9e, 0xa6, 0x67, 0x7b, 0x58, 0xbe, 0xe4, 0x9e, 0xa5, 0xec, 0x64, 0xa6, 0x27, - 0x29, 0x25, 0x61, 0xff, 0xde, 0x68, 0x37, 0xcf, 0xc2, 0x1e, 0x64, 0xdf, 0x61, 0x75, 0xe9, 0xea, - 0x3e, 0x3a, 0xa8, 0x7c, 0xe8, 0x18, 0xb9, 0xd5, 0x2f, 0x58, 0x70, 0xb6, 0x9d, 0xf9, 0x21, 0x82, - 0x01, 0x18, 0x4c, 0xcc, 0xc4, 0x3f, 0x5d, 0x85, 0x12, 0xcc, 0x86, 0xe3, 0x9c, 0x96, 0xd2, 0x2f, - 0x82, 0xe2, 0xbb, 0x7e, 0x11, 0xac, 0x41, 0x89, 0x31, 0x99, 0x7d, 0x32, 0x18, 0xa7, 0x1f, 0x46, - 0x8c, 0x95, 0x58, 0x16, 0x15, 0xb1, 0x22, 0x81, 0xbe, 0xcf, 0x82, 0x0b, 0xe9, 0xae, 0x63, 0xc2, - 0xc0, 0x22, 0xfe, 0x20, 0x7f, 0x0b, 0xae, 0x8a, 0xef, 0xbf, 0x50, 0xeb, 0x85, 0x7c, 0xd8, 0x0f, - 0x01, 0xf7, 0x6e, 0x0c, 0x55, 0x32, 0x1e, 0xa3, 0x23, 0xa6, 0x00, 0x7e, 0x80, 0x07, 0xe9, 0x4b, - 0x30, 0xde, 0x0a, 0x3a, 0x7e, 0x2c, 0x0c, 0x65, 0x84, 0xd2, 0x9e, 0x29, 0xab, 0xd7, 0xb4, 0x72, - 0x6c, 0x60, 0xa5, 0x9e, 0xb1, 0xa5, 0x87, 0x7e, 0xc6, 0xbe, 0x05, 0xe3, 0xbe, 0x66, 0xd9, 0x29, - 0xf8, 0x81, 0xcb, 0xf9, 0xb1, 0x43, 0x75, 0x3b, 0x50, 0xde, 0x4b, 0xbd, 0x04, 0x1b, 0xd4, 0x4e, - 0xf6, 0x6d, 0xf4, 0x93, 0x56, 0x06, 0x53, 0xcf, 0x5f, 0xcb, 0x1f, 0x37, 0x5f, 0xcb, 0x97, 0xd3, - 0xaf, 0xe5, 0x2e, 0xe1, 0xab, 0xf1, 0x50, 0x1e, 0x3c, 0x35, 0xca, 0xa0, 0x61, 0x02, 0xed, 0x26, - 0x5c, 0xea, 0x77, 0x2d, 0x31, 0x8b, 0x29, 0x57, 0xa9, 0xda, 0x12, 0x8b, 0x29, 0xb7, 0x5a, 0xc1, - 0x0c, 0x32, 0x68, 0x1c, 0x19, 0xfb, 0x7f, 0x58, 0x50, 0xac, 0x05, 0xee, 0x09, 0x08, 0x93, 0x3f, - 0x61, 0x08, 0x93, 0x1f, 0xcf, 0xbe, 0x10, 0xdd, 0x5c, 0xd1, 0xf1, 0x4a, 0x4a, 0x74, 0x7c, 0x21, - 0x8f, 0x40, 0x6f, 0x41, 0xf1, 0x8f, 0x15, 0x61, 0xac, 0x16, 0xb8, 0xca, 0x5c, 0xf9, 0xd7, 0x1f, - 0xc6, 0x5c, 0x39, 0x37, 0xc0, 0xbf, 0x46, 0x99, 0x19, 0x5a, 0x49, 0x1f, 0xcb, 0xbf, 0x64, 0x56, - 0xcb, 0x77, 0x89, 0xb7, 0xbd, 0x13, 0x13, 0x37, 0xfd, 0x39, 0x27, 0x67, 0xb5, 0xfc, 0xdf, 0x2d, - 0x98, 0x4a, 0xb5, 0x8e, 0x9a, 0x30, 0xd1, 0xd4, 0x05, 0x93, 0x62, 0x9d, 0x3e, 0x94, 0x4c, 0x53, - 0x58, 0x7d, 0x6a, 0x45, 0xd8, 0x24, 0x8e, 0x16, 0x00, 0x94, 0xa6, 0x4e, 0x4a, 0xc0, 0x18, 0xd7, - 0xaf, 0x54, 0x79, 0x11, 0xd6, 0x30, 0xd0, 0xcb, 0x30, 0x16, 0x07, 0xed, 0xa0, 0x19, 0x6c, 0xef, - 0xdf, 0x20, 0x32, 0x72, 0x91, 0xb2, 0xe5, 0xda, 0x48, 0x40, 0x58, 0xc7, 0xb3, 0x7f, 0xa2, 0xc8, - 0x3f, 0xd4, 0x8f, 0xbd, 0xf7, 0xd7, 0xe4, 0x7b, 0x7b, 0x4d, 0x7e, 0xc5, 0x82, 0x69, 0xda, 0x3a, - 0x33, 0x17, 0x91, 0x97, 0xad, 0x8a, 0x19, 0x6c, 0xf5, 0x88, 0x19, 0x7c, 0x99, 0x9e, 0x5d, 0x6e, - 0xd0, 0x89, 0x85, 0x04, 0x4d, 0x3b, 0x9c, 0x68, 0x29, 0x16, 0x50, 0x81, 0x47, 0xc2, 0x50, 0xb8, - 0xb8, 0xe9, 0x78, 0x24, 0x0c, 0xb1, 0x80, 0xca, 0x90, 0xc2, 0x43, 0xd9, 0x21, 0x85, 0x79, 0x1c, - 0x46, 0x61, 0x58, 0x20, 0xd8, 0x1e, 0x2d, 0x0e, 0xa3, 0xb4, 0x38, 0x48, 0x70, 0xec, 0x9f, 0x2d, - 0xc2, 0x78, 0x2d, 0x70, 0x13, 0x5d, 0xd9, 0x4b, 0x86, 0xae, 0xec, 0x52, 0x4a, 0x57, 0x36, 0xad, - 0xe3, 0xbe, 0xaf, 0x19, 0xfb, 0x5a, 0x69, 0xc6, 0xfe, 0x85, 0xc5, 0x66, 0xad, 0xb2, 0x5e, 0xe7, - 0xd6, 0x47, 0xe8, 0x79, 0x18, 0x63, 0x07, 0x12, 0xf3, 0xa9, 0x94, 0x0a, 0x24, 0x96, 0x2a, 0x67, - 0x3d, 0x29, 0xc6, 0x3a, 0x0e, 0xba, 0x02, 0xa5, 0x88, 0x38, 0x61, 0x63, 0x47, 0x9d, 0x71, 0x42, - 0xdb, 0xc3, 0xcb, 0xb0, 0x82, 0xa2, 0x37, 0x93, 0x10, 0x80, 0xc5, 0x7c, 0x1f, 0x2d, 0xbd, 0x3f, - 0x7c, 0x8b, 0xe4, 0xc7, 0xfd, 0xb3, 0xef, 0x02, 0xea, 0xc6, 0x1f, 0x20, 0xf6, 0xd5, 0xbc, 0x19, - 0xfb, 0xaa, 0xdc, 0x15, 0xf7, 0xea, 0xcf, 0x2d, 0x98, 0xac, 0x05, 0x2e, 0xdd, 0xba, 0x5f, 0x4f, - 0xfb, 0x54, 0x8f, 0x7f, 0x3a, 0xd2, 0x23, 0xfe, 0xe9, 0x93, 0x30, 0x5c, 0x0b, 0xdc, 0x6a, 0xad, - 0x97, 0x6f, 0xb3, 0xfd, 0xf7, 0x2d, 0x18, 0xad, 0x05, 0xee, 0x09, 0x08, 0xe7, 0x3f, 0x6e, 0x0a, - 0xe7, 0x1f, 0xcb, 0x59, 0x37, 0x39, 0xf2, 0xf8, 0xbf, 0x3b, 0x04, 0x13, 0xb4, 0x9f, 0xc1, 0xb6, - 0x9c, 0x4a, 0x63, 0xd8, 0xac, 0x01, 0x86, 0x8d, 0xf2, 0xc2, 0x41, 0xb3, 0x19, 0xdc, 0x4b, 0x4f, - 0xeb, 0x2a, 0x2b, 0xc5, 0x02, 0x8a, 0x9e, 0x85, 0x52, 0x3b, 0x24, 0x7b, 0x5e, 0x20, 0x98, 0x4c, - 0x4d, 0xd5, 0x51, 0x13, 0xe5, 0x58, 0x61, 0xd0, 0xc7, 0x59, 0xe4, 0xf9, 0x0d, 0x52, 0x27, 0x8d, - 0xc0, 0x77, 0xb9, 0xfc, 0xba, 0x28, 0xd2, 0x06, 0x68, 0xe5, 0xd8, 0xc0, 0x42, 0x77, 0xa1, 0xcc, - 0xfe, 0xb3, 0x63, 0xe7, 0xe8, 0x09, 0x28, 0x45, 0x42, 0x32, 0x41, 0x00, 0x27, 0xb4, 0xd0, 0x0b, - 0x00, 0xb1, 0x8c, 0x90, 0x1d, 0x89, 0x38, 0x47, 0x8a, 0x21, 0x57, 0xb1, 0xb3, 0x23, 0xac, 0x61, - 0xa1, 0x67, 0xa0, 0x1c, 0x3b, 0x5e, 0xf3, 0xa6, 0xe7, 0x93, 0x88, 0xc9, 0xa5, 0x8b, 0x32, 0x2f, - 0x98, 0x28, 0xc4, 0x09, 0x9c, 0x32, 0x44, 0x2c, 0x08, 0x00, 0x4f, 0x5f, 0x5b, 0x62, 0xd8, 0x8c, - 0x21, 0xba, 0xa9, 0x4a, 0xb1, 0x86, 0x81, 0x76, 0xe0, 0xbc, 0xe7, 0xb3, 0x10, 0xfb, 0xa4, 0xbe, - 0xeb, 0xb5, 0x37, 0x6e, 0xd6, 0xef, 0x90, 0xd0, 0xdb, 0xda, 0x5f, 0x72, 0x1a, 0xbb, 0xc4, 0x97, - 0xa9, 0x05, 0x3f, 0x28, 0xba, 0x78, 0xbe, 0xda, 0x03, 0x17, 0xf7, 0xa4, 0x64, 0xbf, 0x0a, 0x67, - 0x6a, 0x81, 0x5b, 0x0b, 0xc2, 0x78, 0x35, 0x08, 0xef, 0x39, 0xa1, 0x2b, 0x57, 0xca, 0xbc, 0xcc, - 0x42, 0x42, 0x8f, 0xc2, 0x61, 0x7e, 0x50, 0x18, 0xb9, 0xb0, 0x5e, 0x64, 0xcc, 0xd7, 0x11, 0x9d, - 0x51, 0x1a, 0x8c, 0x0d, 0x50, 0xf9, 0x26, 0xae, 0x39, 0x31, 0x41, 0xb7, 0x58, 0x1e, 0xdd, 0xe4, - 0x46, 0x14, 0xd5, 0x9f, 0xd6, 0xf2, 0xe8, 0x26, 0xc0, 0xcc, 0x2b, 0xd4, 0xac, 0x6f, 0xff, 0xf4, - 0x10, 0x3b, 0x1c, 0x53, 0x39, 0x0b, 0xd0, 0x67, 0x61, 0x32, 0x22, 0x37, 0x3d, 0xbf, 0x73, 0x5f, - 0xca, 0x04, 0x7a, 0xb8, 0x13, 0xd5, 0x57, 0x74, 0x4c, 0x2e, 0x59, 0x34, 0xcb, 0x70, 0x8a, 0x1a, - 0x6a, 0xc1, 0xe4, 0x3d, 0xcf, 0x77, 0x83, 0x7b, 0x91, 0xa4, 0x5f, 0xca, 0x17, 0x30, 0xde, 0xe5, - 0x98, 0xa9, 0x3e, 0x1a, 0xcd, 0xdd, 0x35, 0x88, 0xe1, 0x14, 0x71, 0xba, 0x00, 0xc3, 0x8e, 0xbf, - 0x18, 0xdd, 0x8e, 0x48, 0x28, 0x32, 0x22, 0xb3, 0x05, 0x88, 0x65, 0x21, 0x4e, 0xe0, 0x74, 0x01, - 0xb2, 0x3f, 0xd7, 0xc2, 0xa0, 0xc3, 0xe3, 0xd8, 0x8b, 0x05, 0x88, 0x55, 0x29, 0xd6, 0x30, 0xe8, - 0x06, 0x65, 0xff, 0xd6, 0x03, 0x1f, 0x07, 0x41, 0x2c, 0xb7, 0x34, 0xcb, 0xc1, 0xa9, 0x95, 0x63, - 0x03, 0x0b, 0xad, 0x02, 0x8a, 0x3a, 0xed, 0x76, 0x93, 0xd9, 0x29, 0x38, 0x4d, 0x46, 0x8a, 0xeb, - 0x88, 0x8b, 0x3c, 0x4a, 0x67, 0xbd, 0x0b, 0x8a, 0x33, 0x6a, 0xd0, 0xb3, 0x7a, 0x4b, 0x74, 0x75, - 0x98, 0x75, 0x95, 0x2b, 0x23, 0xea, 0xbc, 0x9f, 0x12, 0x86, 0x56, 0x60, 0x34, 0xda, 0x8f, 0x1a, - 0xb1, 0x08, 0x37, 0x96, 0x93, 0x96, 0xa6, 0xce, 0x50, 0xb4, 0xac, 0x68, 0xbc, 0x0a, 0x96, 0x75, - 0xed, 0x6f, 0x65, 0xac, 0x00, 0xcb, 0x9f, 0x1b, 0x77, 0x42, 0x82, 0x5a, 0x30, 0xd1, 0x66, 0x2b, - 0x4c, 0x04, 0x66, 0x17, 0xcb, 0xe4, 0xa5, 0x01, 0xdf, 0xf4, 0xf7, 0xe8, 0x09, 0xaa, 0x64, 0x6e, - 0xec, 0xb1, 0x54, 0xd3, 0xc9, 0x61, 0x93, 0xba, 0xfd, 0x95, 0xb3, 0xec, 0x32, 0xa9, 0xf3, 0x87, - 0xfa, 0xa8, 0x30, 0xac, 0x16, 0xaf, 0x92, 0xb9, 0x7c, 0x89, 0x51, 0xf2, 0x45, 0xc2, 0x38, 0x1b, - 0xcb, 0xba, 0xe8, 0x33, 0x30, 0x49, 0x99, 0x7c, 0x2d, 0x31, 0xc5, 0xe9, 0x7c, 0x07, 0xf8, 0x24, - 0x1f, 0x85, 0x96, 0xb4, 0x41, 0xaf, 0x8c, 0x53, 0xc4, 0xd0, 0x9b, 0xcc, 0x04, 0xc0, 0xcc, 0x79, - 0xd1, 0x87, 0xb4, 0xae, 0xed, 0x97, 0x64, 0x35, 0x22, 0x79, 0xf9, 0x34, 0xec, 0x47, 0x9b, 0x4f, - 0x03, 0xdd, 0x84, 0x09, 0x91, 0x44, 0x56, 0x08, 0x3a, 0x8b, 0x86, 0x20, 0x6b, 0x02, 0xeb, 0xc0, - 0xc3, 0x74, 0x01, 0x36, 0x2b, 0xa3, 0x6d, 0xb8, 0xa0, 0x25, 0x75, 0xb9, 0x16, 0x3a, 0x4c, 0x1b, - 0xed, 0xb1, 0x93, 0x48, 0xbb, 0xe6, 0x9e, 0x78, 0x70, 0x30, 0x7f, 0x61, 0xa3, 0x17, 0x22, 0xee, - 0x4d, 0x07, 0xdd, 0x82, 0x33, 0xdc, 0x7d, 0xb3, 0x42, 0x1c, 0xb7, 0xe9, 0xf9, 0xea, 0x1e, 0xe5, - 0xbb, 0xe5, 0xdc, 0x83, 0x83, 0xf9, 0x33, 0x8b, 0x59, 0x08, 0x38, 0xbb, 0x1e, 0xfa, 0x38, 0x94, - 0x5d, 0x3f, 0x12, 0x63, 0x30, 0x62, 0xe4, 0xcd, 0x29, 0x57, 0xd6, 0xeb, 0xea, 0xfb, 0x93, 0x3f, - 0x38, 0xa9, 0x80, 0xb6, 0xb9, 0xb0, 0x53, 0xc9, 0x16, 0x46, 0xbb, 0x02, 0xcf, 0xa4, 0xa5, 0x54, - 0x86, 0x03, 0x17, 0x97, 0xf2, 0x2b, 0xbb, 0x66, 0xc3, 0xb7, 0xcb, 0x20, 0x8c, 0xde, 0x00, 0x44, - 0x99, 0x6f, 0xaf, 0x41, 0x16, 0x1b, 0x2c, 0xea, 0x3f, 0x93, 0x0d, 0x97, 0x4c, 0x97, 0xa2, 0x7a, - 0x17, 0x06, 0xce, 0xa8, 0x85, 0xae, 0xd3, 0xdb, 0x40, 0x2f, 0x15, 0xf6, 0xd9, 0x2a, 0xcb, 0x59, - 0x85, 0xb4, 0x43, 0xd2, 0x70, 0x62, 0xe2, 0x9a, 0x14, 0x71, 0xaa, 0x1e, 0x72, 0xe1, 0xbc, 0xd3, - 0x89, 0x03, 0x26, 0x47, 0x36, 0x51, 0x37, 0x82, 0x5d, 0xe2, 0x33, 0x15, 0x4e, 0x69, 0xe9, 0x12, - 0xbd, 0xa8, 0x17, 0x7b, 0xe0, 0xe1, 0x9e, 0x54, 0x28, 0x83, 0xa5, 0xd2, 0x9a, 0x82, 0x19, 0x4f, - 0x27, 0x23, 0xb5, 0xe9, 0xcb, 0x30, 0xb6, 0x13, 0x44, 0xf1, 0x3a, 0x89, 0xef, 0x05, 0xe1, 0xae, - 0x88, 0x8a, 0x98, 0x44, 0xd2, 0x4d, 0x40, 0x58, 0xc7, 0xa3, 0x2f, 0x28, 0x66, 0x60, 0x50, 0xad, - 0x30, 0xdd, 0x6e, 0x29, 0x39, 0x63, 0xae, 0xf3, 0x62, 0x2c, 0xe1, 0x12, 0xb5, 0x5a, 0x5b, 0x66, - 0x7a, 0xda, 0x14, 0x6a, 0xb5, 0xb6, 0x8c, 0x25, 0x9c, 0x2e, 0xd7, 0x68, 0xc7, 0x09, 0x49, 0x2d, - 0x0c, 0x1a, 0x24, 0xd2, 0xe2, 0x37, 0x3f, 0xce, 0x63, 0x3e, 0xd2, 0xe5, 0x5a, 0xcf, 0x42, 0xc0, - 0xd9, 0xf5, 0x10, 0xe9, 0x4e, 0x68, 0x34, 0x99, 0x2f, 0x60, 0xef, 0x66, 0x05, 0x06, 0xcc, 0x69, - 0xe4, 0xc3, 0xb4, 0x4a, 0xa5, 0xc4, 0xa3, 0x3c, 0x46, 0xb3, 0x53, 0x6c, 0x6d, 0x0f, 0x1e, 0x22, - 0x52, 0xa9, 0x2c, 0xaa, 0x29, 0x4a, 0xb8, 0x8b, 0xb6, 0x11, 0x32, 0x69, 0xba, 0x6f, 0x9e, 0xdb, - 0xab, 0x50, 0x8e, 0x3a, 0x9b, 0x6e, 0xd0, 0x72, 0x3c, 0x9f, 0xe9, 0x69, 0x35, 0x56, 0xbe, 0x2e, - 0x01, 0x38, 0xc1, 0x41, 0xab, 0x50, 0x72, 0xa4, 0x3e, 0x02, 0xe5, 0x47, 0xda, 0x50, 0x5a, 0x08, - 0xee, 0x7c, 0x2e, 0x35, 0x10, 0xaa, 0x2e, 0x7a, 0x0d, 0x26, 0x84, 0xfb, 0xa1, 0xc8, 0xe2, 0x77, - 0xca, 0xf4, 0x11, 0xa9, 0xeb, 0x40, 0x6c, 0xe2, 0xa2, 0xdb, 0x30, 0x16, 0x07, 0x4d, 0xe6, 0xe8, - 0x40, 0x39, 0xa4, 0xb3, 0xf9, 0xd1, 0xba, 0x36, 0x14, 0x9a, 0x2e, 0x0a, 0x54, 0x55, 0xb1, 0x4e, - 0x07, 0x6d, 0xf0, 0xf5, 0xce, 0xe2, 0x18, 0x93, 0x68, 0xf6, 0xb1, 0xfc, 0x3b, 0x49, 0x85, 0x3b, - 0x36, 0xb7, 0x83, 0xa8, 0x89, 0x75, 0x32, 0xe8, 0x1a, 0xcc, 0xb4, 0x43, 0x2f, 0x60, 0x6b, 0x42, - 0xa9, 0xa2, 0x66, 0xcd, 0xec, 0x2b, 0xb5, 0x34, 0x02, 0xee, 0xae, 0xc3, 0xbc, 0x47, 0x45, 0xe1, - 0xec, 0x39, 0x9e, 0xe8, 0x97, 0xbf, 0x8c, 0x78, 0x19, 0x56, 0x50, 0xb4, 0xc6, 0x4e, 0x62, 0xfe, - 0xa8, 0x9f, 0x9d, 0xcb, 0x0f, 0xee, 0xa1, 0x3f, 0xfe, 0x39, 0xdf, 0xa7, 0xfe, 0xe2, 0x84, 0x02, - 0x72, 0xb5, 0x8c, 0x70, 0x94, 0xd9, 0x8e, 0x66, 0xcf, 0xf7, 0xb0, 0xf2, 0x4a, 0x71, 0xe6, 0x09, - 0x43, 0x60, 0x14, 0x47, 0x38, 0x45, 0x13, 0x7d, 0x13, 0x4c, 0x8b, 0x60, 0x62, 0xc9, 0x30, 0x5d, - 0x48, 0xcc, 0x47, 0x71, 0x0a, 0x86, 0xbb, 0xb0, 0x79, 0x7c, 0x77, 0x67, 0xb3, 0x49, 0xc4, 0xd1, - 0x77, 0xd3, 0xf3, 0x77, 0xa3, 0xd9, 0x8b, 0xec, 0x7c, 0x10, 0xf1, 0xdd, 0xd3, 0x50, 0x9c, 0x51, - 0x03, 0x6d, 0xc0, 0x74, 0x3b, 0x24, 0xa4, 0xc5, 0x78, 0x64, 0x71, 0x9f, 0xcd, 0x73, 0xe7, 0x69, - 0xda, 0x93, 0x5a, 0x0a, 0x76, 0x98, 0x51, 0x86, 0xbb, 0x28, 0xa0, 0x7b, 0x50, 0x0a, 0xf6, 0x48, - 0xb8, 0x43, 0x1c, 0x77, 0xf6, 0x52, 0x0f, 0x73, 0x66, 0x71, 0xb9, 0xdd, 0x12, 0xb8, 0x29, 0xf5, - 0xb5, 0x2c, 0xee, 0xaf, 0xbe, 0x96, 0x8d, 0xa1, 0xef, 0xb7, 0xe0, 0x9c, 0x94, 0x78, 0xd7, 0xdb, - 0x74, 0xd4, 0x97, 0x03, 0x3f, 0x8a, 0x43, 0xee, 0xee, 0xfb, 0x44, 0xbe, 0x0b, 0xec, 0x46, 0x4e, - 0x25, 0x25, 0x57, 0x3c, 0x97, 0x87, 0x11, 0xe1, 0xfc, 0x16, 0xe7, 0xbe, 0x11, 0x66, 0xba, 0x6e, - 0xee, 0xa3, 0xa4, 0x9c, 0x98, 0xdb, 0x85, 0x09, 0x63, 0x74, 0x1e, 0xa9, 0xe6, 0xf2, 0xdf, 0x8c, - 0x42, 0x59, 0x69, 0xb5, 0xd0, 0x55, 0x53, 0x59, 0x79, 0x2e, 0xad, 0xac, 0x2c, 0xd1, 0xd7, 0xac, - 0xae, 0x9f, 0xdc, 0xc8, 0x08, 0xae, 0x94, 0xb7, 0x17, 0x07, 0xf7, 0x9a, 0xd5, 0x84, 0x94, 0xc5, - 0x81, 0xb5, 0x9e, 0x43, 0x3d, 0xe5, 0x9e, 0xd7, 0x60, 0xc6, 0x0f, 0x18, 0xbb, 0x48, 0x5c, 0xc9, - 0x0b, 0xb0, 0x2b, 0xbf, 0xac, 0x47, 0x2b, 0x48, 0x21, 0xe0, 0xee, 0x3a, 0xb4, 0x41, 0x7e, 0x67, - 0xa7, 0x05, 0xad, 0xfc, 0x4a, 0xc7, 0x02, 0x8a, 0x9e, 0x84, 0xe1, 0x76, 0xe0, 0x56, 0x6b, 0x82, - 0x55, 0xd4, 0xd2, 0x8f, 0xba, 0xd5, 0x1a, 0xe6, 0x30, 0xb4, 0x08, 0x23, 0xec, 0x47, 0x34, 0x3b, - 0x9e, 0xef, 0x96, 0xce, 0x6a, 0x68, 0x09, 0x3d, 0x58, 0x05, 0x2c, 0x2a, 0x32, 0x81, 0x0f, 0xe5, - 0xaf, 0x99, 0xc0, 0x67, 0xf4, 0x21, 0x05, 0x3e, 0x92, 0x00, 0x4e, 0x68, 0xa1, 0xfb, 0x70, 0xc6, - 0x78, 0xd3, 0xf0, 0x25, 0x42, 0x22, 0xe1, 0x1a, 0xfb, 0x64, 0xcf, 0xc7, 0x8c, 0xd0, 0x92, 0x5e, - 0x10, 0x9d, 0x3e, 0x53, 0xcd, 0xa2, 0x84, 0xb3, 0x1b, 0x40, 0x4d, 0x98, 0x69, 0x74, 0xb5, 0x5a, - 0x1a, 0xbc, 0x55, 0x35, 0xa1, 0xdd, 0x2d, 0x76, 0x13, 0x46, 0xaf, 0x41, 0xe9, 0xed, 0x20, 0x62, - 0xc7, 0xac, 0x60, 0x6f, 0xa5, 0x5f, 0x65, 0xe9, 0xcd, 0x5b, 0x75, 0x56, 0x7e, 0x78, 0x30, 0x3f, - 0x56, 0x0b, 0x5c, 0xf9, 0x17, 0xab, 0x0a, 0xe8, 0xbb, 0x2d, 0x98, 0xeb, 0x7e, 0x34, 0xa9, 0x4e, - 0x4f, 0x0c, 0xde, 0x69, 0x5b, 0x34, 0x3a, 0xb7, 0x92, 0x4b, 0x0e, 0xf7, 0x68, 0xca, 0xfe, 0x25, - 0xae, 0xd1, 0x14, 0x7a, 0x0f, 0x12, 0x75, 0x9a, 0x27, 0x91, 0x00, 0x71, 0xc5, 0x50, 0xc9, 0x3c, - 0xb4, 0xd6, 0xfc, 0xd7, 0x2c, 0xa6, 0x35, 0xdf, 0x20, 0xad, 0x76, 0xd3, 0x89, 0x4f, 0xc2, 0x2d, - 0xef, 0x4d, 0x28, 0xc5, 0xa2, 0xb5, 0x5e, 0x39, 0x1b, 0xb5, 0x4e, 0x31, 0xcb, 0x01, 0xc5, 0x6c, - 0xca, 0x52, 0xac, 0xc8, 0xd8, 0xff, 0x94, 0xcf, 0x80, 0x84, 0x9c, 0x80, 0xe4, 0xbb, 0x62, 0x4a, - 0xbe, 0xe7, 0xfb, 0x7c, 0x41, 0x8e, 0x04, 0xfc, 0x9f, 0x98, 0xfd, 0x66, 0x42, 0x96, 0xf7, 0xba, - 0xb9, 0x86, 0xfd, 0x83, 0x16, 0x9c, 0xce, 0xb2, 0x6f, 0xa4, 0x0f, 0x04, 0x2e, 0xe2, 0x51, 0xe6, - 0x2b, 0x6a, 0x04, 0xef, 0x88, 0x72, 0xac, 0x30, 0x06, 0x4e, 0x87, 0x74, 0xb4, 0xf0, 0xa0, 0xb7, - 0x60, 0xa2, 0x16, 0x12, 0xed, 0x42, 0x7b, 0x9d, 0xfb, 0xd9, 0xf2, 0xfe, 0x3c, 0x7b, 0x64, 0x1f, - 0x5b, 0xfb, 0xa7, 0x0a, 0x70, 0x9a, 0xeb, 0x9f, 0x17, 0xf7, 0x02, 0xcf, 0xad, 0x05, 0xae, 0x48, - 0x65, 0xf5, 0x69, 0x18, 0x6f, 0x6b, 0x72, 0xb9, 0x5e, 0xa1, 0xee, 0x74, 0xf9, 0x5d, 0x22, 0x49, - 0xd0, 0x4b, 0xb1, 0x41, 0x0b, 0xb9, 0x30, 0x4e, 0xf6, 0xbc, 0x86, 0x52, 0x62, 0x16, 0x8e, 0x7c, - 0xb9, 0xa8, 0x56, 0x56, 0x34, 0x3a, 0xd8, 0xa0, 0xfa, 0x08, 0xb2, 0x9b, 0xda, 0x3f, 0x64, 0xc1, - 0x63, 0x39, 0x81, 0xf1, 0x68, 0x73, 0xf7, 0x98, 0xa6, 0x5f, 0x24, 0x4a, 0x54, 0xcd, 0x71, 0xfd, - 0x3f, 0x16, 0x50, 0xf4, 0x49, 0x00, 0xae, 0xbf, 0xa7, 0x2f, 0xd4, 0x7e, 0x11, 0xc4, 0x8c, 0xe0, - 0x47, 0x5a, 0x1c, 0x1b, 0x59, 0x1f, 0x6b, 0xb4, 0xec, 0x1f, 0x2f, 0xc2, 0x30, 0x4f, 0xf1, 0xbc, - 0x0a, 0xa3, 0x3b, 0x3c, 0xc0, 0xff, 0x20, 0xb9, 0x04, 0x12, 0xd9, 0x01, 0x2f, 0xc0, 0xb2, 0x32, - 0x5a, 0x83, 0x53, 0x3c, 0x41, 0x42, 0xb3, 0x42, 0x9a, 0xce, 0xbe, 0x14, 0x74, 0xf1, 0xe4, 0x82, - 0x4a, 0xe0, 0x57, 0xed, 0x46, 0xc1, 0x59, 0xf5, 0xd0, 0xeb, 0x30, 0x49, 0x1f, 0x1e, 0x41, 0x27, - 0x96, 0x94, 0x78, 0x6a, 0x04, 0xf5, 0xd2, 0xd9, 0x30, 0xa0, 0x38, 0x85, 0x4d, 0xdf, 0xbe, 0xed, - 0x2e, 0x91, 0xde, 0x70, 0xf2, 0xf6, 0x35, 0xc5, 0x78, 0x26, 0x2e, 0x33, 0x6c, 0xec, 0x30, 0x33, - 0xce, 0x8d, 0x9d, 0x90, 0x44, 0x3b, 0x41, 0xd3, 0x65, 0x8c, 0xd6, 0xb0, 0x66, 0xd8, 0x98, 0x82, - 0xe3, 0xae, 0x1a, 0x94, 0xca, 0x96, 0xe3, 0x35, 0x3b, 0x21, 0x49, 0xa8, 0x8c, 0x98, 0x54, 0x56, - 0x53, 0x70, 0xdc, 0x55, 0x83, 0xae, 0xa3, 0x33, 0xb5, 0x30, 0xa0, 0x87, 0x97, 0x8c, 0xf6, 0xa1, - 0xac, 0x55, 0x47, 0xa5, 0x63, 0x62, 0x8f, 0xb8, 0x58, 0xc2, 0x9e, 0x8f, 0x53, 0x30, 0x54, 0xd5, - 0x75, 0xe1, 0x92, 0x28, 0xa9, 0xa0, 0xe7, 0x61, 0x4c, 0x84, 0xbd, 0x67, 0x46, 0x95, 0x7c, 0xea, - 0x98, 0x6a, 0xbd, 0x92, 0x14, 0x63, 0x1d, 0xc7, 0xfe, 0x9e, 0x02, 0x9c, 0xca, 0xb0, 0x8a, 0xe7, - 0x47, 0xd5, 0xb6, 0x17, 0xc5, 0x2a, 0x81, 0x9a, 0x76, 0x54, 0xf1, 0x72, 0xac, 0x30, 0xe8, 0x7e, - 0xe0, 0x87, 0x61, 0xfa, 0x00, 0x14, 0x56, 0xa7, 0x02, 0x7a, 0xc4, 0x54, 0x64, 0x97, 0x60, 0xa8, - 0x13, 0x11, 0x19, 0xd1, 0x4e, 0x9d, 0xdf, 0x4c, 0xe3, 0xc2, 0x20, 0x94, 0x3d, 0xde, 0x56, 0xca, - 0x0b, 0x8d, 0x3d, 0xe6, 0xea, 0x0b, 0x0e, 0xa3, 0x9d, 0x8b, 0x89, 0xef, 0xf8, 0xb1, 0x60, 0xa2, - 0x93, 0xd0, 0x4c, 0xac, 0x14, 0x0b, 0xa8, 0xfd, 0xa5, 0x22, 0x9c, 0xcb, 0xf5, 0x93, 0xa1, 0x5d, - 0x6f, 0x05, 0xbe, 0x17, 0x07, 0xca, 0x66, 0x81, 0x87, 0x63, 0x22, 0xed, 0x9d, 0x35, 0x51, 0x8e, - 0x15, 0x06, 0xba, 0x0c, 0xc3, 0x4c, 0xe8, 0xd4, 0x95, 0x4a, 0x6e, 0xa9, 0xc2, 0xe3, 0x73, 0x70, - 0xf0, 0xc0, 0x69, 0x3a, 0x9f, 0x84, 0xa1, 0x76, 0x10, 0x34, 0xd3, 0x87, 0x16, 0xed, 0x6e, 0x10, - 0x34, 0x31, 0x03, 0xa2, 0x0f, 0x89, 0xf1, 0x4a, 0x29, 0xe9, 0xb1, 0xe3, 0x06, 0x91, 0x36, 0x68, - 0x4f, 0xc3, 0xe8, 0x2e, 0xd9, 0x0f, 0x3d, 0x7f, 0x3b, 0x6d, 0xbc, 0x71, 0x83, 0x17, 0x63, 0x09, - 0x37, 0xb3, 0x02, 0x8d, 0x1e, 0x77, 0x7e, 0xcd, 0x52, 0xdf, 0x2b, 0xf0, 0x7b, 0x8b, 0x30, 0x85, - 0x97, 0x2a, 0xef, 0x4f, 0xc4, 0xed, 0xee, 0x89, 0x38, 0xee, 0xfc, 0x9a, 0xfd, 0x67, 0xe3, 0xe7, - 0x2d, 0x98, 0x62, 0xc1, 0xf7, 0x45, 0x20, 0x1f, 0x2f, 0xf0, 0x4f, 0x80, 0xc5, 0x7b, 0x12, 0x86, - 0x43, 0xda, 0x68, 0x3a, 0x87, 0x1c, 0xeb, 0x09, 0xe6, 0x30, 0x74, 0x1e, 0x86, 0x58, 0x17, 0xe8, - 0xe4, 0x8d, 0xf3, 0xf4, 0x3b, 0x15, 0x27, 0x76, 0x30, 0x2b, 0x65, 0xd1, 0x29, 0x30, 0x69, 0x37, - 0x3d, 0xde, 0xe9, 0x44, 0x25, 0xf8, 0xde, 0x88, 0x4e, 0x91, 0xd9, 0xb5, 0x77, 0x17, 0x9d, 0x22, - 0x9b, 0x64, 0xef, 0xe7, 0xd3, 0x1f, 0x15, 0xe0, 0x62, 0x66, 0xbd, 0x81, 0xa3, 0x53, 0xf4, 0xae, - 0xfd, 0x28, 0x83, 0xb4, 0x17, 0x4f, 0xd0, 0x34, 0x6e, 0x68, 0x50, 0x0e, 0x73, 0x78, 0x80, 0xa0, - 0x11, 0x99, 0x43, 0xf6, 0x1e, 0x09, 0x1a, 0x91, 0xd9, 0xb7, 0x9c, 0xe7, 0xdf, 0x5f, 0x14, 0x72, - 0xbe, 0x85, 0x3d, 0x04, 0xaf, 0xd0, 0x73, 0x86, 0x01, 0x23, 0xc1, 0x31, 0x8f, 0xf3, 0x33, 0x86, - 0x97, 0x61, 0x05, 0x45, 0x8b, 0x30, 0xd5, 0xf2, 0x7c, 0x7a, 0xf8, 0xec, 0x9b, 0x8c, 0x9f, 0x8a, - 0xe9, 0xb3, 0x66, 0x82, 0x71, 0x1a, 0x1f, 0x79, 0x5a, 0x40, 0x89, 0x42, 0x7e, 0x56, 0xe6, 0xdc, - 0xde, 0x2e, 0x98, 0xea, 0x52, 0x35, 0x8a, 0x19, 0xc1, 0x25, 0xd6, 0xb4, 0xf7, 0x7f, 0x71, 0xf0, - 0xf7, 0xff, 0x78, 0xf6, 0xdb, 0x7f, 0xee, 0x35, 0x98, 0x78, 0x68, 0x81, 0xaf, 0xfd, 0x95, 0x22, - 0x3c, 0xde, 0x63, 0xdb, 0xf3, 0xb3, 0xde, 0x98, 0x03, 0xed, 0xac, 0xef, 0x9a, 0x87, 0x1a, 0x9c, - 0xde, 0xea, 0x34, 0x9b, 0xfb, 0xcc, 0xfa, 0x9c, 0xb8, 0x12, 0x43, 0xf0, 0x94, 0xe7, 0x65, 0xc2, - 0xa3, 0xd5, 0x0c, 0x1c, 0x9c, 0x59, 0x93, 0x32, 0xf4, 0xf4, 0x26, 0xd9, 0x57, 0xa4, 0x52, 0x0c, - 0x3d, 0xd6, 0x81, 0xd8, 0xc4, 0x45, 0xd7, 0x60, 0xc6, 0xd9, 0x73, 0x3c, 0x1e, 0x95, 0x53, 0x12, - 0xe0, 0x1c, 0xbd, 0x92, 0xd3, 0x2d, 0xa6, 0x11, 0x70, 0x77, 0x1d, 0xf4, 0x06, 0xa0, 0x40, 0x64, - 0x95, 0xbf, 0x46, 0x7c, 0xa1, 0xd5, 0x62, 0x73, 0x57, 0x4c, 0x8e, 0x84, 0x5b, 0x5d, 0x18, 0x38, - 0xa3, 0x56, 0x2a, 0x40, 0xc3, 0x48, 0x7e, 0x80, 0x86, 0xde, 0xe7, 0x62, 0xdf, 0xfc, 0x00, 0xff, - 0xc5, 0xa2, 0xd7, 0x17, 0x67, 0xf2, 0xcd, 0x38, 0x63, 0xaf, 0x31, 0x83, 0x2e, 0x2e, 0xc3, 0xd3, - 0x62, 0x25, 0x9c, 0xd1, 0x0c, 0xba, 0x12, 0x20, 0x36, 0x71, 0xf9, 0x82, 0x88, 0x12, 0x17, 0x3d, - 0x83, 0xc5, 0x17, 0xc1, 0x50, 0x14, 0x06, 0xfa, 0x14, 0x8c, 0xba, 0xde, 0x9e, 0x17, 0x05, 0xa1, - 0x58, 0xe9, 0x47, 0x54, 0x17, 0x24, 0xe7, 0x60, 0x85, 0x93, 0xc1, 0x92, 0x9e, 0xfd, 0xbd, 0x05, - 0x98, 0x90, 0x2d, 0xbe, 0xd9, 0x09, 0x62, 0xe7, 0x04, 0xae, 0xe5, 0x6b, 0xc6, 0xb5, 0xfc, 0xa1, - 0x5e, 0x11, 0x61, 0x58, 0x97, 0x72, 0xaf, 0xe3, 0x5b, 0xa9, 0xeb, 0xf8, 0xa9, 0xfe, 0xa4, 0x7a, - 0x5f, 0xc3, 0xff, 0xcc, 0x82, 0x19, 0x03, 0xff, 0x04, 0x6e, 0x83, 0x55, 0xf3, 0x36, 0x78, 0xa2, - 0xef, 0x37, 0xe4, 0xdc, 0x02, 0xdf, 0x59, 0x4c, 0xf5, 0x9d, 0x9d, 0xfe, 0x6f, 0xc3, 0xd0, 0x8e, - 0x13, 0xba, 0xbd, 0x22, 0x60, 0x77, 0x55, 0x5a, 0xb8, 0xee, 0x84, 0x42, 0xad, 0xf7, 0xac, 0x4a, - 0x8a, 0xec, 0x84, 0xfd, 0x55, 0x7a, 0xac, 0x29, 0xf4, 0x2a, 0x8c, 0x44, 0x8d, 0xa0, 0xad, 0xec, - 0xc5, 0x2f, 0xf1, 0x84, 0xc9, 0xb4, 0xe4, 0xf0, 0x60, 0x1e, 0x99, 0xcd, 0xd1, 0x62, 0x2c, 0xf0, - 0xd1, 0xa7, 0x61, 0x82, 0xfd, 0x52, 0x36, 0x36, 0xc5, 0xfc, 0x6c, 0x39, 0x75, 0x1d, 0x91, 0x1b, - 0xa0, 0x19, 0x45, 0xd8, 0x24, 0x35, 0xb7, 0x0d, 0x65, 0xf5, 0x59, 0x8f, 0x54, 0x1f, 0xf7, 0x1f, - 0x8a, 0x70, 0x2a, 0x63, 0xcd, 0xa1, 0xc8, 0x98, 0x89, 0xe7, 0x07, 0x5c, 0xaa, 0xef, 0x72, 0x2e, - 0x22, 0xf6, 0x1a, 0x72, 0xc5, 0xda, 0x1a, 0xb8, 0xd1, 0xdb, 0x11, 0x49, 0x37, 0x4a, 0x8b, 0xfa, - 0x37, 0x4a, 0x1b, 0x3b, 0xb1, 0xa1, 0xa6, 0x0d, 0xa9, 0x9e, 0x3e, 0xd2, 0x39, 0xfd, 0xd3, 0x22, - 0x9c, 0xce, 0x0a, 0x52, 0x85, 0xbe, 0x25, 0x95, 0x39, 0xed, 0xa5, 0x41, 0xc3, 0x5b, 0xf1, 0x74, - 0x6a, 0x5c, 0x06, 0xbc, 0xb4, 0x60, 0xe6, 0x52, 0xeb, 0x3b, 0xcc, 0xa2, 0x4d, 0xe6, 0x7e, 0x1e, - 0xf2, 0x8c, 0x77, 0xf2, 0xf8, 0xf8, 0xe8, 0xc0, 0x1d, 0x10, 0xa9, 0xf2, 0xa2, 0x94, 0xfe, 0x5e, - 0x16, 0xf7, 0xd7, 0xdf, 0xcb, 0x96, 0xe7, 0x3c, 0x18, 0xd3, 0xbe, 0xe6, 0x91, 0xce, 0xf8, 0x2e, - 0xbd, 0xad, 0xb4, 0x7e, 0x3f, 0xd2, 0x59, 0xff, 0x21, 0x0b, 0x52, 0xd6, 0xd0, 0x4a, 0x2c, 0x66, - 0xe5, 0x8a, 0xc5, 0x2e, 0xc1, 0x50, 0x18, 0x34, 0x49, 0x3a, 0x51, 0x19, 0x0e, 0x9a, 0x04, 0x33, - 0x08, 0xc5, 0x88, 0x13, 0x61, 0xc7, 0xb8, 0xfe, 0x90, 0x13, 0x4f, 0xb4, 0x27, 0x61, 0xb8, 0x49, - 0xf6, 0x48, 0x33, 0x9d, 0x4f, 0xe2, 0x26, 0x2d, 0xc4, 0x1c, 0x66, 0xff, 0xfc, 0x10, 0x5c, 0xe8, - 0x19, 0xc0, 0x81, 0x3e, 0x87, 0xb6, 0x9d, 0x98, 0xdc, 0x73, 0xf6, 0xd3, 0x81, 0xdf, 0xaf, 0xf1, - 0x62, 0x2c, 0xe1, 0xcc, 0x5f, 0x85, 0xc7, 0x6f, 0x4d, 0x09, 0x11, 0x45, 0xd8, 0x56, 0x01, 0x35, - 0x85, 0x52, 0xc5, 0xe3, 0x10, 0x4a, 0xbd, 0x00, 0x10, 0x45, 0x4d, 0x6e, 0xf8, 0xe2, 0x0a, 0x47, - 0x98, 0x24, 0xce, 0x6f, 0xfd, 0xa6, 0x80, 0x60, 0x0d, 0x0b, 0x55, 0x60, 0xba, 0x1d, 0x06, 0x31, - 0x97, 0xc9, 0x56, 0xb8, 0x6d, 0xd8, 0xb0, 0xe9, 0x3b, 0x5f, 0x4b, 0xc1, 0x71, 0x57, 0x0d, 0xf4, - 0x32, 0x8c, 0x09, 0x7f, 0xfa, 0x5a, 0x10, 0x34, 0x85, 0x18, 0x48, 0x99, 0x4b, 0xd5, 0x13, 0x10, - 0xd6, 0xf1, 0xb4, 0x6a, 0x4c, 0xd0, 0x3b, 0x9a, 0x59, 0x8d, 0x0b, 0x7b, 0x35, 0xbc, 0x54, 0xc0, - 0xba, 0xd2, 0x40, 0x01, 0xeb, 0x12, 0xc1, 0x58, 0x79, 0x60, 0xdd, 0x16, 0xf4, 0x15, 0x25, 0xfd, - 0xcc, 0x10, 0x9c, 0x12, 0x0b, 0xe7, 0x51, 0x2f, 0x97, 0xdb, 0xdd, 0xcb, 0xe5, 0x38, 0x44, 0x67, - 0xef, 0xaf, 0x99, 0x93, 0x5e, 0x33, 0xdf, 0x67, 0x81, 0xc9, 0x5e, 0xa1, 0xff, 0x3f, 0x37, 0x73, - 0xc6, 0xcb, 0xb9, 0xec, 0x9a, 0x2b, 0x2f, 0x90, 0x77, 0x99, 0x43, 0xc3, 0xfe, 0x4f, 0x16, 0x3c, - 0xd1, 0x97, 0x22, 0x5a, 0x81, 0x32, 0xe3, 0x01, 0xb5, 0xd7, 0xd9, 0x53, 0xca, 0x76, 0x54, 0x02, - 0x72, 0x58, 0xd2, 0xa4, 0x26, 0x5a, 0xe9, 0x4a, 0x51, 0xf2, 0x74, 0x46, 0x8a, 0x92, 0x33, 0xc6, - 0xf0, 0x3c, 0x64, 0x8e, 0x92, 0x3f, 0x2c, 0xc2, 0x08, 0x5f, 0xf1, 0x27, 0xf0, 0x0c, 0x7b, 0x06, - 0xca, 0x5e, 0xab, 0xd5, 0xe1, 0x89, 0x1e, 0x86, 0xb9, 0xd3, 0x23, 0x1d, 0x9a, 0xaa, 0x2c, 0xc4, - 0x09, 0x1c, 0xad, 0x0a, 0x21, 0x6f, 0x8f, 0xf0, 0x79, 0xbc, 0xe3, 0x0b, 0x15, 0x27, 0x76, 0x38, - 0x4f, 0xa1, 0xae, 0xb6, 0x44, 0x1c, 0x8c, 0x3e, 0x0b, 0x10, 0xc5, 0xa1, 0xe7, 0x6f, 0xd3, 0x32, - 0x11, 0x58, 0xf1, 0xc3, 0x3d, 0xa8, 0xd5, 0x15, 0x32, 0xa7, 0x99, 0x6c, 0x73, 0x05, 0xc0, 0x1a, - 0x45, 0xb4, 0x60, 0x5c, 0xae, 0x73, 0x29, 0x29, 0x29, 0x70, 0xaa, 0xc9, 0x55, 0x3b, 0xf7, 0x0a, - 0x94, 0x15, 0xf1, 0x7e, 0x22, 0x9f, 0x71, 0x9d, 0x13, 0xf9, 0x04, 0x4c, 0xa5, 0xfa, 0x76, 0x24, - 0x89, 0xd1, 0x2f, 0x58, 0x30, 0xc5, 0x3b, 0xb3, 0xe2, 0xef, 0x89, 0x03, 0xf8, 0x1d, 0x38, 0xdd, - 0xcc, 0x38, 0x08, 0xc5, 0xf4, 0x0f, 0x7e, 0x70, 0x2a, 0x09, 0x51, 0x16, 0x14, 0x67, 0xb6, 0x81, - 0xae, 0xd0, 0x45, 0x4e, 0x0f, 0x3a, 0xa7, 0x29, 0x7c, 0x20, 0xc7, 0xf9, 0x02, 0xe7, 0x65, 0x58, - 0x41, 0xed, 0xdf, 0xb1, 0x60, 0x86, 0xf7, 0xfc, 0x06, 0xd9, 0x57, 0xc7, 0xc1, 0xd7, 0xb2, 0xef, - 0x22, 0xc5, 0x50, 0x21, 0x27, 0xc5, 0x90, 0xfe, 0x69, 0xc5, 0x9e, 0x9f, 0xf6, 0x53, 0x16, 0x88, - 0x15, 0x72, 0x02, 0xef, 0xfe, 0x6f, 0x34, 0xdf, 0xfd, 0x73, 0xf9, 0x9b, 0x20, 0xe7, 0xc1, 0xff, - 0xe7, 0x16, 0x4c, 0x73, 0x84, 0x44, 0x41, 0xfd, 0x35, 0x9d, 0x87, 0x41, 0x12, 0x91, 0xde, 0x20, - 0xfb, 0x1b, 0x41, 0xcd, 0x89, 0x77, 0xb2, 0x3f, 0xca, 0x98, 0xac, 0xa1, 0x9e, 0x93, 0xe5, 0xca, - 0x0d, 0x74, 0x84, 0xec, 0xc6, 0x47, 0x8e, 0xc0, 0x6f, 0x7f, 0xd5, 0x02, 0xc4, 0x9b, 0x31, 0x78, - 0x25, 0xca, 0x81, 0xb0, 0x52, 0xed, 0x6e, 0x49, 0x8e, 0x26, 0x05, 0xc1, 0x1a, 0xd6, 0xb1, 0x0c, - 0x4f, 0xca, 0xca, 0xa0, 0xd8, 0xdf, 0xca, 0xe0, 0x08, 0x23, 0xfa, 0x87, 0xc3, 0x90, 0x76, 0x17, - 0x41, 0x77, 0x60, 0xbc, 0xe1, 0xb4, 0x9d, 0x4d, 0xaf, 0xe9, 0xc5, 0x1e, 0x89, 0x7a, 0x99, 0x27, - 0x2d, 0x6b, 0x78, 0x42, 0x2f, 0xac, 0x95, 0x60, 0x83, 0x0e, 0x5a, 0x00, 0x68, 0x87, 0xde, 0x9e, - 0xd7, 0x24, 0xdb, 0x4c, 0x3c, 0xc1, 0xbc, 0xae, 0xb9, 0xcd, 0x8d, 0x2c, 0xc5, 0x1a, 0x46, 0x86, - 0x5b, 0x6b, 0xf1, 0x11, 0xbb, 0xb5, 0xc2, 0x89, 0xb9, 0xb5, 0x0e, 0x1d, 0xc9, 0xad, 0xb5, 0x74, - 0x64, 0xb7, 0xd6, 0xe1, 0x81, 0xdc, 0x5a, 0x31, 0x9c, 0x95, 0xec, 0x1e, 0xfd, 0xbf, 0xea, 0x35, - 0x89, 0xe0, 0xf1, 0xb9, 0xab, 0xf8, 0xdc, 0x83, 0x83, 0xf9, 0xb3, 0x38, 0x13, 0x03, 0xe7, 0xd4, - 0x44, 0x9f, 0x84, 0x59, 0xa7, 0xd9, 0x0c, 0xee, 0xa9, 0x49, 0x5d, 0x89, 0x1a, 0x4e, 0x93, 0xcb, - 0xfd, 0x47, 0x19, 0xd5, 0xf3, 0x0f, 0x0e, 0xe6, 0x67, 0x17, 0x73, 0x70, 0x70, 0x6e, 0x6d, 0xf4, - 0x71, 0x28, 0xb7, 0xc3, 0xa0, 0xb1, 0xa6, 0xf9, 0xb4, 0x5d, 0xa4, 0x03, 0x58, 0x93, 0x85, 0x87, - 0x07, 0xf3, 0x13, 0xea, 0x0f, 0xbb, 0xf0, 0x93, 0x0a, 0xf6, 0x2e, 0x9c, 0xaa, 0x93, 0xd0, 0x63, - 0xb9, 0x8a, 0xdd, 0xe4, 0xfc, 0xd8, 0x80, 0x72, 0x98, 0x3a, 0x31, 0x07, 0x0a, 0x39, 0xa7, 0x85, - 0x2a, 0x97, 0x27, 0x64, 0x42, 0xc8, 0xfe, 0xdf, 0x16, 0x8c, 0x0a, 0xf7, 0x8d, 0x13, 0xe0, 0xea, - 0x16, 0x0d, 0xe1, 0xfa, 0x7c, 0xf6, 0xad, 0xc2, 0x3a, 0x93, 0x2b, 0x56, 0xaf, 0xa6, 0xc4, 0xea, - 0x4f, 0xf4, 0x22, 0xd2, 0x5b, 0xa0, 0xfe, 0xb7, 0x8b, 0x30, 0x69, 0xfa, 0xf9, 0x9d, 0xc0, 0x10, - 0xac, 0xc3, 0x68, 0x24, 0x1c, 0xd9, 0x0a, 0xf9, 0xe6, 0xdb, 0xe9, 0x49, 0x4c, 0x4c, 0xbb, 0x84, - 0xeb, 0x9a, 0x24, 0x92, 0xe9, 0x21, 0x57, 0x7c, 0x84, 0x1e, 0x72, 0xfd, 0x5c, 0x2d, 0x87, 0x8e, - 0xc3, 0xd5, 0xd2, 0xfe, 0x32, 0xbb, 0xd9, 0xf4, 0xf2, 0x13, 0x60, 0x7a, 0xae, 0x99, 0x77, 0xa0, - 0xdd, 0x63, 0x65, 0x89, 0x4e, 0xe5, 0x30, 0x3f, 0x3f, 0x67, 0xc1, 0x85, 0x8c, 0xaf, 0xd2, 0x38, - 0xa1, 0x67, 0xa1, 0xe4, 0x74, 0x5c, 0x4f, 0xed, 0x65, 0x4d, 0xc5, 0xb6, 0x28, 0xca, 0xb1, 0xc2, - 0x40, 0xcb, 0x30, 0x43, 0xee, 0xb7, 0x3d, 0xae, 0x5d, 0xd4, 0xed, 0x2f, 0x8b, 0x3c, 0x0c, 0xf7, - 0x4a, 0x1a, 0x88, 0xbb, 0xf1, 0x55, 0x64, 0x88, 0x62, 0x6e, 0x64, 0x88, 0x7f, 0x68, 0xc1, 0x98, - 0x72, 0xe5, 0x7a, 0xe4, 0xa3, 0xfd, 0x4d, 0xe6, 0x68, 0x3f, 0xde, 0x63, 0xb4, 0x73, 0x86, 0xf9, - 0xb7, 0x0b, 0xaa, 0xbf, 0xb5, 0x20, 0x8c, 0x07, 0xe0, 0xb0, 0x5e, 0x85, 0x52, 0x3b, 0x0c, 0xe2, - 0xa0, 0x11, 0x34, 0x05, 0x83, 0x75, 0x3e, 0x09, 0x91, 0xc2, 0xcb, 0x0f, 0xb5, 0xdf, 0x58, 0x61, - 0x53, 0xde, 0xc6, 0x69, 0xb7, 0x25, 0x40, 0x9a, 0x65, 0xb1, 0x00, 0xa2, 0x49, 0x31, 0xd6, 0x71, - 0xd8, 0x80, 0x07, 0x61, 0x2c, 0xf8, 0xa0, 0x64, 0xc0, 0x83, 0x30, 0xc6, 0x0c, 0x82, 0x5c, 0x80, - 0xd8, 0x09, 0xb7, 0x49, 0x4c, 0xcb, 0x44, 0x14, 0xa7, 0xfc, 0xf3, 0xa6, 0x13, 0x7b, 0xcd, 0x05, - 0xcf, 0x8f, 0xa3, 0x38, 0x5c, 0xa8, 0xfa, 0xf1, 0xad, 0x90, 0x3f, 0xf1, 0xb4, 0x30, 0x29, 0x8a, - 0x16, 0xd6, 0xe8, 0x4a, 0xb7, 0x65, 0xd6, 0xc6, 0xb0, 0xa9, 0xdf, 0x5f, 0x17, 0xe5, 0x58, 0x61, - 0xd8, 0xaf, 0xb0, 0xdb, 0x87, 0x8d, 0xe9, 0xd1, 0xe2, 0x8a, 0xfc, 0x52, 0x59, 0xcd, 0x06, 0x53, - 0xee, 0x55, 0xf4, 0xe8, 0x25, 0xbd, 0x0f, 0x7b, 0xda, 0xb0, 0xee, 0xc2, 0x94, 0x84, 0x38, 0x41, - 0xdf, 0xdc, 0x65, 0xb3, 0xf1, 0x5c, 0x9f, 0x5b, 0xe3, 0x08, 0x56, 0x1a, 0x2c, 0x9b, 0x00, 0x8b, - 0xb5, 0x5e, 0xad, 0x89, 0x7d, 0xa1, 0x65, 0x13, 0x10, 0x00, 0x9c, 0xe0, 0xa0, 0xab, 0xe2, 0x01, - 0xcf, 0x45, 0xdf, 0x8f, 0xa7, 0x1e, 0xf0, 0xf2, 0xf3, 0x35, 0x61, 0xf9, 0xf3, 0x30, 0xa6, 0x72, - 0x69, 0xd6, 0x78, 0x8a, 0x46, 0xb1, 0x6c, 0x56, 0x92, 0x62, 0xac, 0xe3, 0xa0, 0x0d, 0x98, 0x8a, - 0xb8, 0x28, 0x49, 0x85, 0x2e, 0xe5, 0x22, 0xb9, 0x0f, 0x4b, 0x43, 0x97, 0xba, 0x09, 0x3e, 0x64, - 0x45, 0xfc, 0xb4, 0x91, 0xae, 0xc2, 0x69, 0x12, 0xe8, 0x75, 0x98, 0x6c, 0x06, 0x8e, 0xbb, 0xe4, - 0x34, 0x1d, 0xbf, 0xc1, 0xbe, 0xb7, 0x64, 0xa6, 0x64, 0xbb, 0x69, 0x40, 0x71, 0x0a, 0x9b, 0x32, - 0x4b, 0x7a, 0x89, 0x08, 0xb7, 0xeb, 0xf8, 0xdb, 0x24, 0x12, 0x99, 0x11, 0x19, 0xb3, 0x74, 0x33, - 0x07, 0x07, 0xe7, 0xd6, 0x46, 0xaf, 0xc2, 0xb8, 0xfc, 0x7c, 0xcd, 0xb3, 0x3e, 0xb1, 0xed, 0xd7, - 0x60, 0xd8, 0xc0, 0x44, 0xf7, 0xe0, 0x8c, 0xfc, 0xbf, 0x11, 0x3a, 0x5b, 0x5b, 0x5e, 0x43, 0xb8, - 0x9b, 0x72, 0xc7, 0xbb, 0x45, 0xe9, 0x1d, 0xb6, 0x92, 0x85, 0x74, 0x78, 0x30, 0x7f, 0x49, 0x8c, - 0x5a, 0x26, 0x9c, 0x4d, 0x62, 0x36, 0x7d, 0xb4, 0x06, 0xa7, 0x76, 0x88, 0xd3, 0x8c, 0x77, 0x96, - 0x77, 0x48, 0x63, 0x57, 0x6e, 0x22, 0xe6, 0xaf, 0xaf, 0x59, 0xc4, 0x5f, 0xef, 0x46, 0xc1, 0x59, - 0xf5, 0xd0, 0x5b, 0x30, 0xdb, 0xee, 0x6c, 0x36, 0xbd, 0x68, 0x67, 0x3d, 0x88, 0x99, 0xb5, 0x8b, - 0x4a, 0xcd, 0x29, 0x1c, 0xfb, 0x55, 0x44, 0x84, 0x5a, 0x0e, 0x1e, 0xce, 0xa5, 0x80, 0xde, 0x81, - 0x33, 0xa9, 0xc5, 0x20, 0x5c, 0x9b, 0x27, 0xf3, 0x83, 0x97, 0xd7, 0xb3, 0x2a, 0x88, 0x28, 0x01, - 0x59, 0x20, 0x9c, 0xdd, 0x04, 0x7a, 0x09, 0x4a, 0x5e, 0x7b, 0xd5, 0x69, 0x79, 0xcd, 0x7d, 0x16, - 0x7d, 0xbd, 0xcc, 0x22, 0x92, 0x97, 0xaa, 0x35, 0x5e, 0x76, 0xa8, 0xfd, 0xc6, 0x0a, 0x93, 0x3e, - 0x11, 0xb4, 0x18, 0x93, 0xd1, 0xec, 0x74, 0x62, 0xcc, 0xab, 0x05, 0xa2, 0x8c, 0xb0, 0x81, 0xf5, - 0xee, 0x6c, 0xa4, 0xde, 0xa6, 0x95, 0x35, 0x9e, 0x11, 0x7d, 0x0e, 0xc6, 0xf5, 0x15, 0x2b, 0xee, - 0xbf, 0xcb, 0xd9, 0x2c, 0x95, 0xb6, 0xb2, 0x39, 0xc7, 0xa9, 0x56, 0xaf, 0x0e, 0xc3, 0x06, 0x45, - 0x9b, 0x40, 0xf6, 0x58, 0xa2, 0x9b, 0x50, 0x6a, 0x34, 0x3d, 0xe2, 0xc7, 0xd5, 0x5a, 0xaf, 0xf0, - 0x48, 0xcb, 0x02, 0x47, 0x4c, 0x8e, 0x88, 0x2c, 0xcd, 0xcb, 0xb0, 0xa2, 0x60, 0xff, 0x6a, 0x01, - 0xe6, 0xfb, 0x84, 0x29, 0x4f, 0x89, 0xf2, 0xad, 0x81, 0x44, 0xf9, 0x8b, 0x32, 0xa9, 0xe9, 0x7a, - 0x4a, 0x64, 0x91, 0x4a, 0x58, 0x9a, 0x08, 0x2e, 0xd2, 0xf8, 0x03, 0x9b, 0x56, 0xeb, 0xda, 0x80, - 0xa1, 0xbe, 0xce, 0x01, 0x86, 0x16, 0x70, 0x78, 0xf0, 0x77, 0x52, 0xae, 0x46, 0xc7, 0xfe, 0x72, - 0x01, 0xce, 0xa8, 0x21, 0xfc, 0xfa, 0x1d, 0xb8, 0xdb, 0xdd, 0x03, 0x77, 0x0c, 0xfa, 0x30, 0xfb, - 0x16, 0x8c, 0xf0, 0x78, 0x4f, 0x03, 0xf0, 0x67, 0x4f, 0x9a, 0xa1, 0x11, 0x15, 0x4b, 0x60, 0x84, - 0x47, 0xfc, 0x6e, 0x0b, 0xa6, 0x36, 0x96, 0x6b, 0xf5, 0xa0, 0xb1, 0x4b, 0xe2, 0x45, 0xce, 0x4f, - 0x63, 0xc1, 0x6b, 0x59, 0x0f, 0xc9, 0x43, 0x65, 0x71, 0x67, 0x97, 0x60, 0x68, 0x27, 0x88, 0xe2, - 0xb4, 0xb2, 0xfc, 0x7a, 0x10, 0xc5, 0x98, 0x41, 0xec, 0xdf, 0xb5, 0x60, 0x98, 0xa5, 0xf1, 0xee, - 0x97, 0x48, 0x7e, 0x90, 0xef, 0x42, 0x2f, 0xc3, 0x08, 0xd9, 0xda, 0x22, 0x8d, 0x58, 0xcc, 0xaa, - 0xf4, 0x6e, 0x1e, 0x59, 0x61, 0xa5, 0x94, 0xc1, 0x60, 0x8d, 0xf1, 0xbf, 0x58, 0x20, 0xa3, 0xbb, - 0x50, 0x8e, 0xbd, 0x16, 0x59, 0x74, 0x5d, 0xa1, 0x6e, 0x7c, 0x08, 0x0f, 0xed, 0x0d, 0x49, 0x00, - 0x27, 0xb4, 0xec, 0x2f, 0x15, 0x00, 0x92, 0x68, 0x1f, 0xfd, 0x3e, 0x71, 0xa9, 0x4b, 0x11, 0x75, - 0x39, 0x43, 0x11, 0x85, 0x12, 0x82, 0x19, 0x5a, 0x28, 0x35, 0x4c, 0xc5, 0x81, 0x86, 0x69, 0xe8, - 0x28, 0xc3, 0xb4, 0x0c, 0x33, 0x49, 0xb4, 0x12, 0x33, 0x58, 0x13, 0x7b, 0x43, 0x6d, 0xa4, 0x81, - 0xb8, 0x1b, 0xdf, 0x26, 0x70, 0x49, 0x05, 0x6d, 0x10, 0x77, 0x0d, 0xb3, 0x66, 0xd5, 0x15, 0x7b, - 0x7d, 0xc6, 0x29, 0xd1, 0xb4, 0x15, 0x72, 0x35, 0x6d, 0x3f, 0x6a, 0xc1, 0xe9, 0x74, 0x3b, 0xcc, - 0xbd, 0xf0, 0x8b, 0x16, 0x9c, 0x61, 0xfa, 0x46, 0xd6, 0x6a, 0xb7, 0x76, 0xf3, 0xa5, 0x9e, 0x81, - 0x28, 0x72, 0x7a, 0x9c, 0xb8, 0xd1, 0xaf, 0x65, 0x91, 0xc6, 0xd9, 0x2d, 0xda, 0xff, 0xb1, 0x00, - 0xb3, 0x79, 0x11, 0x2c, 0x98, 0xb1, 0xbb, 0x73, 0xbf, 0xbe, 0x4b, 0xee, 0x09, 0x93, 0xe2, 0xc4, - 0xd8, 0x9d, 0x17, 0x63, 0x09, 0x4f, 0x47, 0x9e, 0x2e, 0x0c, 0x16, 0x79, 0x1a, 0xed, 0xc0, 0xcc, - 0xbd, 0x1d, 0xe2, 0xdf, 0xf6, 0x23, 0x27, 0xf6, 0xa2, 0x2d, 0x8f, 0x29, 0x0a, 0xf9, 0xba, 0xf9, - 0x98, 0x34, 0xfc, 0xbd, 0x9b, 0x46, 0x38, 0x3c, 0x98, 0xbf, 0x60, 0x14, 0x24, 0x5d, 0xe6, 0x07, - 0x09, 0xee, 0x26, 0xda, 0x1d, 0xb8, 0x7b, 0xe8, 0x11, 0x06, 0xee, 0xb6, 0xbf, 0x68, 0xc1, 0xb9, - 0xdc, 0xc4, 0x7a, 0xe8, 0x0a, 0x94, 0x9c, 0xb6, 0xc7, 0x65, 0xad, 0xe2, 0x18, 0x65, 0x32, 0x83, - 0x5a, 0x95, 0x4b, 0x5a, 0x15, 0x54, 0x25, 0xfc, 0x2d, 0xe4, 0x26, 0xfc, 0xed, 0x9b, 0xbf, 0xd7, - 0xfe, 0x2e, 0x0b, 0x84, 0xa3, 0xde, 0x00, 0x67, 0xf7, 0xa7, 0x65, 0xbe, 0x74, 0x23, 0xb9, 0xc7, - 0xa5, 0x7c, 0xcf, 0x45, 0x91, 0xd2, 0x43, 0xf1, 0x4a, 0x46, 0x22, 0x0f, 0x83, 0x96, 0xed, 0x82, - 0x80, 0x56, 0x08, 0x93, 0x54, 0xf6, 0xef, 0xcd, 0x0b, 0x00, 0x2e, 0xc3, 0xd5, 0xb2, 0x26, 0xab, - 0x9b, 0xb9, 0xa2, 0x20, 0x58, 0xc3, 0xb2, 0xff, 0x5d, 0x01, 0xc6, 0x64, 0x32, 0x89, 0x8e, 0x3f, - 0x88, 0x3c, 0xe1, 0x48, 0xd9, 0xe5, 0x58, 0x9a, 0x71, 0x4a, 0xb8, 0x96, 0x88, 0x61, 0x92, 0x34, - 0xe3, 0x12, 0x80, 0x13, 0x1c, 0xba, 0x8b, 0xa2, 0xce, 0x26, 0x43, 0x4f, 0xb9, 0x95, 0xd5, 0x79, - 0x31, 0x96, 0x70, 0xf4, 0x49, 0x98, 0xe6, 0xf5, 0xc2, 0xa0, 0xed, 0x6c, 0x73, 0x21, 0xf6, 0xb0, - 0xf2, 0x07, 0x9f, 0x5e, 0x4b, 0xc1, 0x0e, 0x0f, 0xe6, 0x4f, 0xa7, 0xcb, 0x98, 0x76, 0xa6, 0x8b, - 0x0a, 0x33, 0x0f, 0xe1, 0x8d, 0xd0, 0xdd, 0xdf, 0x65, 0x55, 0x92, 0x80, 0xb0, 0x8e, 0x67, 0x7f, - 0x0e, 0x50, 0x77, 0x5a, 0x0d, 0xf4, 0x06, 0xb7, 0x09, 0xf4, 0x42, 0xe2, 0xf6, 0xd2, 0xd6, 0xe8, - 0x5e, 0xcf, 0xd2, 0x23, 0x84, 0xd7, 0xc2, 0xaa, 0xbe, 0xfd, 0xd7, 0x8b, 0x30, 0x9d, 0xf6, 0x81, - 0x45, 0xd7, 0x61, 0x84, 0xb3, 0x1e, 0x82, 0x7c, 0x0f, 0x63, 0x00, 0xcd, 0x73, 0x96, 0x1d, 0xc2, - 0x82, 0x7b, 0x11, 0xf5, 0xd1, 0x5b, 0x30, 0xe6, 0x06, 0xf7, 0xfc, 0x7b, 0x4e, 0xe8, 0x2e, 0xd6, - 0xaa, 0x62, 0x39, 0x67, 0xbe, 0x96, 0x2a, 0x09, 0x9a, 0xee, 0x8d, 0xcb, 0x14, 0x5f, 0x09, 0x08, - 0xeb, 0xe4, 0xd0, 0x06, 0x8b, 0x02, 0xbc, 0xe5, 0x6d, 0xaf, 0x39, 0xed, 0x5e, 0x06, 0xe2, 0xcb, - 0x12, 0x49, 0xa3, 0x3c, 0x21, 0x42, 0x05, 0x73, 0x00, 0x4e, 0x08, 0xa1, 0x6f, 0x81, 0x53, 0x51, - 0x8e, 0x4c, 0x36, 0x2f, 0xcb, 0x52, 0x2f, 0x31, 0xe5, 0xd2, 0x63, 0xf4, 0x1d, 0x9b, 0x25, 0xbd, - 0xcd, 0x6a, 0xc6, 0xfe, 0xb5, 0x53, 0x60, 0x6c, 0x62, 0x23, 0xe9, 0x9e, 0x75, 0x4c, 0x49, 0xf7, - 0x30, 0x94, 0x48, 0xab, 0x1d, 0xef, 0x57, 0xbc, 0xb0, 0x57, 0xd6, 0xd6, 0x15, 0x81, 0xd3, 0x4d, - 0x53, 0x42, 0xb0, 0xa2, 0x93, 0x9d, 0x19, 0xb1, 0xf8, 0x35, 0xcc, 0x8c, 0x38, 0x74, 0x82, 0x99, - 0x11, 0xd7, 0x61, 0x74, 0xdb, 0x8b, 0x31, 0x69, 0x07, 0x82, 0xe9, 0xcf, 0x5c, 0x87, 0xd7, 0x38, - 0x4a, 0x77, 0x0e, 0x2e, 0x01, 0xc0, 0x92, 0x08, 0x7a, 0x43, 0xed, 0xc0, 0x91, 0xfc, 0x37, 0x73, - 0xb7, 0xd6, 0x3a, 0x73, 0x0f, 0x8a, 0xfc, 0x87, 0xa3, 0x0f, 0x9b, 0xff, 0x70, 0x55, 0x66, 0x2d, - 0x2c, 0xe5, 0x7b, 0x73, 0xb0, 0xa4, 0x84, 0x7d, 0x72, 0x15, 0xde, 0xd1, 0x33, 0x3d, 0x96, 0xf3, - 0x4f, 0x02, 0x95, 0xc4, 0x71, 0xc0, 0xfc, 0x8e, 0xdf, 0x65, 0xc1, 0x99, 0x76, 0x56, 0xd2, 0x53, - 0xa1, 0xe0, 0x7d, 0x79, 0xe0, 0xac, 0xae, 0x46, 0x83, 0x4c, 0x50, 0x93, 0x89, 0x86, 0xb3, 0x9b, - 0xa3, 0x03, 0x1d, 0x6e, 0xba, 0x22, 0x41, 0xe1, 0x93, 0x39, 0x89, 0x22, 0x7b, 0xa4, 0x87, 0xdc, - 0xc8, 0x48, 0x4a, 0xf8, 0xc1, 0xbc, 0xa4, 0x84, 0x03, 0xa7, 0x22, 0x7c, 0x43, 0xa5, 0x88, 0x9c, - 0xc8, 0x5f, 0x4a, 0x3c, 0x01, 0x64, 0xdf, 0xc4, 0x90, 0x6f, 0xa8, 0xc4, 0x90, 0x3d, 0xe2, 0x54, - 0xf2, 0xb4, 0x8f, 0x7d, 0xd3, 0x41, 0x6a, 0x29, 0x1d, 0xa7, 0x8e, 0x27, 0xa5, 0xa3, 0x71, 0xd5, - 0xf0, 0xac, 0x82, 0xcf, 0xf4, 0xb9, 0x6a, 0x0c, 0xba, 0xbd, 0x2f, 0x1b, 0x9e, 0xbe, 0x72, 0xe6, - 0xa1, 0xd2, 0x57, 0xde, 0xd1, 0xd3, 0x41, 0xa2, 0x3e, 0xf9, 0x0e, 0x29, 0xd2, 0x80, 0x49, 0x20, - 0xef, 0xe8, 0x17, 0xe0, 0xa9, 0x7c, 0xba, 0xea, 0x9e, 0xeb, 0xa6, 0x9b, 0x79, 0x05, 0x76, 0x25, - 0x97, 0x3c, 0x7d, 0x32, 0xc9, 0x25, 0xcf, 0x1c, 0x7b, 0x72, 0xc9, 0xb3, 0x27, 0x90, 0x5c, 0xf2, - 0xb1, 0x13, 0x4c, 0x2e, 0x79, 0x87, 0x59, 0x45, 0xf0, 0x70, 0x27, 0x22, 0xae, 0x66, 0x76, 0x0c, - 0xc7, 0xac, 0x98, 0x28, 0xfc, 0xe3, 0x14, 0x08, 0x27, 0xa4, 0x32, 0x92, 0x56, 0xce, 0x3e, 0x82, - 0xa4, 0x95, 0xeb, 0x49, 0xd2, 0xca, 0x73, 0xf9, 0x53, 0x9d, 0x61, 0xba, 0x9e, 0x93, 0xaa, 0xf2, - 0x8e, 0x9e, 0x62, 0xf2, 0xf1, 0x1e, 0xa2, 0xf8, 0x2c, 0xc1, 0x63, 0x8f, 0xc4, 0x92, 0xaf, 0xf3, - 0xc4, 0x92, 0xe7, 0xf3, 0x4f, 0xf2, 0xf4, 0x75, 0x67, 0xa6, 0x93, 0xfc, 0x9e, 0x02, 0x5c, 0xec, - 0xbd, 0x2f, 0x12, 0xa9, 0x67, 0x2d, 0xd1, 0x08, 0xa6, 0xa4, 0x9e, 0xfc, 0x6d, 0x95, 0x60, 0x0d, - 0x1c, 0x09, 0xeb, 0x1a, 0xcc, 0x28, 0xdb, 0xf4, 0xa6, 0xd7, 0xd8, 0xd7, 0x32, 0xe8, 0x2b, 0x7f, - 0xde, 0x7a, 0x1a, 0x01, 0x77, 0xd7, 0x41, 0x8b, 0x30, 0x65, 0x14, 0x56, 0x2b, 0xe2, 0x0d, 0xa5, - 0xc4, 0xac, 0x75, 0x13, 0x8c, 0xd3, 0xf8, 0xf6, 0x4f, 0x5a, 0xf0, 0x58, 0x4e, 0xde, 0xa6, 0x81, - 0x03, 0x3d, 0x6d, 0xc1, 0x54, 0xdb, 0xac, 0xda, 0x27, 0x1e, 0x9c, 0x91, 0x1d, 0x4a, 0xf5, 0x35, - 0x05, 0xc0, 0x69, 0xa2, 0xf6, 0x9f, 0x59, 0x70, 0xa1, 0xa7, 0xe5, 0x17, 0xc2, 0x70, 0x76, 0xbb, - 0x15, 0x39, 0xcb, 0x21, 0x71, 0x89, 0x1f, 0x7b, 0x4e, 0xb3, 0xde, 0x26, 0x0d, 0x4d, 0x6e, 0xcd, - 0x4c, 0xa8, 0xae, 0xad, 0xd5, 0x17, 0xbb, 0x31, 0x70, 0x4e, 0x4d, 0xb4, 0x0a, 0xa8, 0x1b, 0x22, - 0x66, 0x98, 0xc5, 0x8c, 0xed, 0xa6, 0x87, 0x33, 0x6a, 0xa0, 0x57, 0x60, 0x42, 0x59, 0x94, 0x69, - 0x33, 0xce, 0x0e, 0x60, 0xac, 0x03, 0xb0, 0x89, 0xb7, 0x74, 0xe5, 0x37, 0x7e, 0xff, 0xe2, 0x07, - 0x7e, 0xeb, 0xf7, 0x2f, 0x7e, 0xe0, 0x77, 0x7e, 0xff, 0xe2, 0x07, 0xbe, 0xed, 0xc1, 0x45, 0xeb, - 0x37, 0x1e, 0x5c, 0xb4, 0x7e, 0xeb, 0xc1, 0x45, 0xeb, 0x77, 0x1e, 0x5c, 0xb4, 0x7e, 0xef, 0xc1, - 0x45, 0xeb, 0x4b, 0x7f, 0x70, 0xf1, 0x03, 0x9f, 0x2e, 0xec, 0x3d, 0xff, 0xff, 0x02, 0x00, 0x00, - 0xff, 0xff, 0x71, 0x0b, 0xba, 0x44, 0x73, 0xfd, 0x00, 0x00, + 0x3d, 0xfc, 0x02, 0x80, 0x25, 0x11, 0x74, 0x47, 0x0c, 0x0f, 0xe3, 0x9e, 0xd3, 0xf9, 0x61, 0x31, + 0x17, 0x25, 0x52, 0xce, 0xa0, 0x30, 0x6e, 0x99, 0x90, 0x62, 0x5c, 0xb2, 0xbd, 0x13, 0xc4, 0x81, + 0x9f, 0xe2, 0xd0, 0x33, 0xf9, 0x5c, 0xb2, 0x96, 0x81, 0xdf, 0xcd, 0x25, 0xb3, 0xb0, 0x70, 0x66, + 0x5b, 0xc8, 0x85, 0xc9, 0x76, 0x10, 0xc6, 0xf7, 0x82, 0x50, 0xae, 0x2f, 0xd4, 0x43, 0xaf, 0x60, + 0x60, 0x8a, 0x16, 0x59, 0x30, 0x3b, 0x13, 0x82, 0x53, 0x34, 0xd1, 0x27, 0x61, 0x34, 0x6a, 0x38, + 0x4d, 0x52, 0xbd, 0x35, 0x7b, 0x2a, 0xff, 0xf8, 0xa9, 0x73, 0x94, 0x9c, 0xd5, 0xc5, 0x63, 0xba, + 0x73, 0x14, 0x2c, 0xc9, 0xa1, 0x55, 0x18, 0x66, 0x69, 0xb8, 0x58, 0x78, 0xb8, 0x9c, 0xe8, 0x9e, + 0x5d, 0x06, 0xc4, 0x9c, 0x37, 0xb1, 0x62, 0xcc, 0xab, 0xd3, 0x3d, 0x20, 0xc4, 0xeb, 0x20, 0x9a, + 0x3d, 0x93, 0xbf, 0x07, 0x84, 0x54, 0x7e, 0xab, 0xde, 0x6b, 0x0f, 0x28, 0x24, 0x9c, 0x10, 0xa5, + 0x9c, 0x99, 0x72, 0xd3, 0xb3, 0x3d, 0x2c, 0x5f, 0x72, 0x79, 0x29, 0xe3, 0xcc, 0x94, 0x93, 0x52, + 0x12, 0xf6, 0xef, 0x8e, 0x76, 0xcb, 0x2c, 0xec, 0x42, 0xf6, 0x1d, 0x56, 0xd7, 0x5b, 0xdd, 0x47, + 0x07, 0xd5, 0x0f, 0x1d, 0xa3, 0xb4, 0xfa, 0x05, 0x0b, 0xce, 0xb6, 0x33, 0x3f, 0x44, 0x08, 0x00, + 0x83, 0xa9, 0x99, 0xf8, 0xa7, 0xab, 0x50, 0x82, 0xd9, 0x70, 0x9c, 0xd3, 0x52, 0xfa, 0x46, 0x50, + 0x7c, 0xd7, 0x37, 0x82, 0x35, 0x28, 0x31, 0x21, 0xb3, 0x4f, 0x06, 0xe3, 0xf4, 0xc5, 0x88, 0x89, + 0x12, 0xcb, 0xa2, 0x22, 0x56, 0x24, 0xd0, 0xf7, 0x59, 0x70, 0x21, 0xdd, 0x75, 0x4c, 0x18, 0x58, + 0xc4, 0x1f, 0xe4, 0x77, 0xc1, 0x55, 0xf1, 0xfd, 0x17, 0x6a, 0xbd, 0x90, 0x0f, 0xfb, 0x21, 0xe0, + 0xde, 0x8d, 0xa1, 0x4a, 0xc6, 0x65, 0x74, 0xc4, 0x54, 0xc0, 0x0f, 0x70, 0x21, 0x7d, 0x09, 0xc6, + 0x5b, 0x41, 0xc7, 0x8f, 0x85, 0xa1, 0x8c, 0x78, 0xb4, 0x67, 0x8f, 0xd5, 0x6b, 0x5a, 0x39, 0x36, + 0xb0, 0x52, 0xd7, 0xd8, 0xd2, 0x43, 0x5f, 0x63, 0xdf, 0x82, 0x71, 0x5f, 0xb3, 0xec, 0x14, 0xf2, + 0xc0, 0xe5, 0xfc, 0xd8, 0xa1, 0xba, 0x1d, 0x28, 0xef, 0xa5, 0x5e, 0x82, 0x0d, 0x6a, 0x27, 0x7b, + 0x37, 0xfa, 0x49, 0x2b, 0x43, 0xa8, 0xe7, 0xb7, 0xe5, 0x8f, 0x9b, 0xb7, 0xe5, 0xcb, 0xe9, 0xdb, + 0x72, 0x97, 0xf2, 0xd5, 0xb8, 0x28, 0x0f, 0x9e, 0x1a, 0x65, 0xd0, 0x30, 0x81, 0x76, 0x13, 0x2e, + 0xf5, 0x3b, 0x96, 0x98, 0xc5, 0x94, 0xab, 0x9e, 0xda, 0x12, 0x8b, 0x29, 0xb7, 0x5a, 0xc1, 0x0c, + 0x32, 0x68, 0x1c, 0x19, 0xfb, 0x7f, 0x58, 0x50, 0xac, 0x05, 0xee, 0x09, 0x28, 0x93, 0x3f, 0x61, + 0x28, 0x93, 0x1f, 0xcf, 0x3e, 0x10, 0xdd, 0x5c, 0xd5, 0xf1, 0x4a, 0x4a, 0x75, 0x7c, 0x21, 0x8f, + 0x40, 0x6f, 0x45, 0xf1, 0x8f, 0x15, 0x61, 0xac, 0x16, 0xb8, 0xca, 0x5c, 0xf9, 0xd7, 0x1e, 0xc6, + 0x5c, 0x39, 0x37, 0xc0, 0xbf, 0x46, 0x99, 0x19, 0x5a, 0x49, 0x1f, 0xcb, 0xbf, 0x60, 0x56, 0xcb, + 0x77, 0x89, 0xb7, 0xbd, 0x13, 0x13, 0x37, 0xfd, 0x39, 0x27, 0x67, 0xb5, 0xfc, 0xdf, 0x2d, 0x98, + 0x4a, 0xb5, 0x8e, 0x9a, 0x30, 0xd1, 0xd4, 0x15, 0x93, 0x62, 0x9d, 0x3e, 0x94, 0x4e, 0x53, 0x58, + 0x7d, 0x6a, 0x45, 0xd8, 0x24, 0x8e, 0x16, 0x00, 0xd4, 0x4b, 0x9d, 0xd4, 0x80, 0x31, 0xa9, 0x5f, + 0x3d, 0xe5, 0x45, 0x58, 0xc3, 0x40, 0x2f, 0xc3, 0x58, 0x1c, 0xb4, 0x83, 0x66, 0xb0, 0xbd, 0x7f, + 0x83, 0xc8, 0xc8, 0x45, 0xca, 0x96, 0x6b, 0x23, 0x01, 0x61, 0x1d, 0xcf, 0xfe, 0x89, 0x22, 0xff, + 0x50, 0x3f, 0xf6, 0xde, 0x5f, 0x93, 0xef, 0xed, 0x35, 0xf9, 0x15, 0x0b, 0xa6, 0x69, 0xeb, 0xcc, + 0x5c, 0x44, 0x1e, 0xb6, 0x2a, 0x66, 0xb0, 0xd5, 0x23, 0x66, 0xf0, 0x65, 0xca, 0xbb, 0xdc, 0xa0, + 0x13, 0x0b, 0x0d, 0x9a, 0xc6, 0x9c, 0x68, 0x29, 0x16, 0x50, 0x81, 0x47, 0xc2, 0x50, 0xb8, 0xb8, + 0xe9, 0x78, 0x24, 0x0c, 0xb1, 0x80, 0xca, 0x90, 0xc2, 0x43, 0xd9, 0x21, 0x85, 0x79, 0x1c, 0x46, + 0x61, 0x58, 0x20, 0xc4, 0x1e, 0x2d, 0x0e, 0xa3, 0xb4, 0x38, 0x48, 0x70, 0xec, 0x9f, 0x29, 0xc2, + 0x78, 0x2d, 0x70, 0x93, 0xb7, 0xb2, 0x97, 0x8c, 0xb7, 0xb2, 0x4b, 0xa9, 0xb7, 0xb2, 0x69, 0x1d, + 0xf7, 0xfd, 0x97, 0xb1, 0xaf, 0xd5, 0xcb, 0xd8, 0xbf, 0xb0, 0xd8, 0xac, 0x55, 0xd6, 0xeb, 0xdc, + 0xfa, 0x08, 0x3d, 0x0f, 0x63, 0x8c, 0x21, 0x31, 0x9f, 0x4a, 0xf9, 0x80, 0xc4, 0x52, 0xe5, 0xac, + 0x27, 0xc5, 0x58, 0xc7, 0x41, 0x57, 0xa0, 0x14, 0x11, 0x27, 0x6c, 0xec, 0x28, 0x1e, 0x27, 0x5e, + 0x7b, 0x78, 0x19, 0x56, 0x50, 0xf4, 0x66, 0x12, 0x02, 0xb0, 0x98, 0xef, 0xa3, 0xa5, 0xf7, 0x87, + 0x6f, 0x91, 0xfc, 0xb8, 0x7f, 0xf6, 0x5d, 0x40, 0xdd, 0xf8, 0x03, 0xc4, 0xbe, 0x9a, 0x37, 0x63, + 0x5f, 0x95, 0xbb, 0xe2, 0x5e, 0xfd, 0x99, 0x05, 0x93, 0xb5, 0xc0, 0xa5, 0x5b, 0xf7, 0xeb, 0x69, + 0x9f, 0xea, 0xf1, 0x4f, 0x47, 0x7a, 0xc4, 0x3f, 0x7d, 0x12, 0x86, 0x6b, 0x81, 0x5b, 0xad, 0xf5, + 0xf2, 0x6d, 0xb6, 0xff, 0x9e, 0x05, 0xa3, 0xb5, 0xc0, 0x3d, 0x01, 0xe5, 0xfc, 0xc7, 0x4d, 0xe5, + 0xfc, 0x63, 0x39, 0xeb, 0x26, 0x47, 0x1f, 0xff, 0x77, 0x86, 0x60, 0x82, 0xf6, 0x33, 0xd8, 0x96, + 0x53, 0x69, 0x0c, 0x9b, 0x35, 0xc0, 0xb0, 0x51, 0x59, 0x38, 0x68, 0x36, 0x83, 0x7b, 0xe9, 0x69, + 0x5d, 0x65, 0xa5, 0x58, 0x40, 0xd1, 0xb3, 0x50, 0x6a, 0x87, 0x64, 0xcf, 0x0b, 0x84, 0x90, 0xa9, + 0x3d, 0x75, 0xd4, 0x44, 0x39, 0x56, 0x18, 0xf4, 0x72, 0x16, 0x79, 0x7e, 0x83, 0xd4, 0x49, 0x23, + 0xf0, 0x5d, 0xae, 0xbf, 0x2e, 0x8a, 0xb4, 0x01, 0x5a, 0x39, 0x36, 0xb0, 0xd0, 0x5d, 0x28, 0xb3, + 0xff, 0x8c, 0xed, 0x1c, 0x3d, 0x01, 0xa5, 0x48, 0x48, 0x26, 0x08, 0xe0, 0x84, 0x16, 0x7a, 0x01, + 0x20, 0x96, 0x11, 0xb2, 0x23, 0x11, 0xe7, 0x48, 0x09, 0xe4, 0x2a, 0x76, 0x76, 0x84, 0x35, 0x2c, + 0xf4, 0x0c, 0x94, 0x63, 0xc7, 0x6b, 0xde, 0xf4, 0x7c, 0x12, 0x31, 0xbd, 0x74, 0x51, 0xe6, 0x05, + 0x13, 0x85, 0x38, 0x81, 0x53, 0x81, 0x88, 0x05, 0x01, 0xe0, 0xe9, 0x6b, 0x4b, 0x0c, 0x9b, 0x09, + 0x44, 0x37, 0x55, 0x29, 0xd6, 0x30, 0xd0, 0x0e, 0x9c, 0xf7, 0x7c, 0x16, 0x62, 0x9f, 0xd4, 0x77, + 0xbd, 0xf6, 0xc6, 0xcd, 0xfa, 0x1d, 0x12, 0x7a, 0x5b, 0xfb, 0x4b, 0x4e, 0x63, 0x97, 0xf8, 0x32, + 0xb5, 0xe0, 0x07, 0x45, 0x17, 0xcf, 0x57, 0x7b, 0xe0, 0xe2, 0x9e, 0x94, 0xec, 0x57, 0xe1, 0x4c, + 0x2d, 0x70, 0x6b, 0x41, 0x18, 0xaf, 0x06, 0xe1, 0x3d, 0x27, 0x74, 0xe5, 0x4a, 0x99, 0x97, 0x59, + 0x48, 0x28, 0x2b, 0x1c, 0xe6, 0x8c, 0xc2, 0xc8, 0x85, 0xf5, 0x22, 0x13, 0xbe, 0x8e, 0xe8, 0x8c, + 0xd2, 0x60, 0x62, 0x80, 0xca, 0x37, 0x71, 0xcd, 0x89, 0x09, 0xba, 0xc5, 0xf2, 0xe8, 0x26, 0x27, + 0xa2, 0xa8, 0xfe, 0xb4, 0x96, 0x47, 0x37, 0x01, 0x66, 0x1e, 0xa1, 0x66, 0x7d, 0xfb, 0xaf, 0x0d, + 0x33, 0xe6, 0x98, 0xca, 0x59, 0x80, 0x3e, 0x0b, 0x93, 0x11, 0xb9, 0xe9, 0xf9, 0x9d, 0xfb, 0x52, + 0x27, 0xd0, 0xc3, 0x9d, 0xa8, 0xbe, 0xa2, 0x63, 0x72, 0xcd, 0xa2, 0x59, 0x86, 0x53, 0xd4, 0x50, + 0x0b, 0x26, 0xef, 0x79, 0xbe, 0x1b, 0xdc, 0x8b, 0x24, 0xfd, 0x52, 0xbe, 0x82, 0xf1, 0x2e, 0xc7, + 0x4c, 0xf5, 0xd1, 0x68, 0xee, 0xae, 0x41, 0x0c, 0xa7, 0x88, 0xd3, 0x05, 0x18, 0x76, 0xfc, 0xc5, + 0xe8, 0x76, 0x44, 0x42, 0x91, 0x11, 0x99, 0x2d, 0x40, 0x2c, 0x0b, 0x71, 0x02, 0xa7, 0x0b, 0x90, + 0xfd, 0xb9, 0x16, 0x06, 0x1d, 0x1e, 0xc7, 0x5e, 0x2c, 0x40, 0xac, 0x4a, 0xb1, 0x86, 0x41, 0x37, + 0x28, 0xfb, 0xb7, 0x1e, 0xf8, 0x38, 0x08, 0x62, 0xb9, 0xa5, 0x59, 0x0e, 0x4e, 0xad, 0x1c, 0x1b, + 0x58, 0x68, 0x15, 0x50, 0xd4, 0x69, 0xb7, 0x9b, 0xcc, 0x4e, 0xc1, 0x69, 0x32, 0x52, 0xfc, 0x8d, + 0xb8, 0xc8, 0xa3, 0x74, 0xd6, 0xbb, 0xa0, 0x38, 0xa3, 0x06, 0xe5, 0xd5, 0x5b, 0xa2, 0xab, 0xc3, + 0xac, 0xab, 0xfc, 0x31, 0xa2, 0xce, 0xfb, 0x29, 0x61, 0x68, 0x05, 0x46, 0xa3, 0xfd, 0xa8, 0x11, + 0x8b, 0x70, 0x63, 0x39, 0x69, 0x69, 0xea, 0x0c, 0x45, 0xcb, 0x8a, 0xc6, 0xab, 0x60, 0x59, 0x17, + 0x35, 0xe0, 0x94, 0xa0, 0xb8, 0xbc, 0xe3, 0xf8, 0x2a, 0xc9, 0x07, 0x37, 0xd7, 0x7c, 0xfe, 0xc1, + 0xc1, 0xfc, 0x29, 0xd1, 0xb2, 0x0e, 0x3e, 0x3c, 0x98, 0x3f, 0x5b, 0x0b, 0xdc, 0x0c, 0x08, 0xce, + 0xa2, 0x66, 0x7f, 0x2b, 0x93, 0x37, 0x58, 0x92, 0xde, 0xb8, 0x13, 0x12, 0xd4, 0x82, 0x89, 0x36, + 0x5b, 0xc6, 0x22, 0xfa, 0xbb, 0x58, 0x8b, 0x2f, 0x0d, 0xa8, 0x38, 0xb8, 0x47, 0xd9, 0xb4, 0x52, + 0xec, 0xb1, 0x1b, 0x59, 0x4d, 0x27, 0x87, 0x4d, 0xea, 0xf6, 0x57, 0xce, 0xb2, 0x13, 0xab, 0xce, + 0xb5, 0x01, 0xa3, 0xc2, 0x7a, 0x5b, 0x5c, 0x7d, 0xe6, 0xf2, 0xd5, 0x52, 0xc9, 0xb0, 0x09, 0x0b, + 0x70, 0x2c, 0xeb, 0xa2, 0xcf, 0xc0, 0x24, 0xbd, 0x49, 0x68, 0xd9, 0x2f, 0x4e, 0xe7, 0x7b, 0xd9, + 0x27, 0x49, 0x2f, 0xb4, 0xcc, 0x10, 0x7a, 0x65, 0x9c, 0x22, 0x86, 0xde, 0x64, 0x76, 0x06, 0x66, + 0x62, 0x8d, 0x3e, 0xa4, 0x75, 0x93, 0x02, 0x49, 0x56, 0x23, 0x92, 0x97, 0xb4, 0xc3, 0x7e, 0xb4, + 0x49, 0x3b, 0xd0, 0x4d, 0x98, 0x10, 0x99, 0x6a, 0xc5, 0xca, 0x2a, 0x1a, 0xda, 0xb2, 0x09, 0xac, + 0x03, 0x0f, 0xd3, 0x05, 0xd8, 0xac, 0x8c, 0xb6, 0xe1, 0x82, 0x96, 0x39, 0xe6, 0x5a, 0xe8, 0xb0, + 0x27, 0x6f, 0x8f, 0xb1, 0x3b, 0xed, 0x2c, 0x7d, 0xe2, 0xc1, 0xc1, 0xfc, 0x85, 0x8d, 0x5e, 0x88, + 0xb8, 0x37, 0x1d, 0x74, 0x0b, 0xce, 0x70, 0x1f, 0xd1, 0x0a, 0x71, 0xdc, 0xa6, 0xe7, 0xab, 0xc3, + 0x9a, 0x6f, 0xc9, 0x73, 0x0f, 0x0e, 0xe6, 0xcf, 0x2c, 0x66, 0x21, 0xe0, 0xec, 0x7a, 0xe8, 0xe3, + 0x50, 0x76, 0xfd, 0x48, 0x8c, 0xc1, 0x88, 0x91, 0x9c, 0xa7, 0x5c, 0x59, 0xaf, 0xab, 0xef, 0x4f, + 0xfe, 0xe0, 0xa4, 0x02, 0xda, 0xe6, 0x1a, 0x55, 0xa5, 0xc0, 0x18, 0xed, 0x8a, 0x6e, 0x93, 0x56, + 0x85, 0x19, 0x5e, 0x62, 0xfc, 0x29, 0x41, 0x19, 0x4f, 0x1b, 0x0e, 0x64, 0x06, 0x61, 0xf4, 0x06, + 0x20, 0x2a, 0xe1, 0x7b, 0x0d, 0xb2, 0xd8, 0x60, 0xa9, 0x05, 0x98, 0x02, 0xba, 0x64, 0xfa, 0x2d, + 0xd5, 0xbb, 0x30, 0x70, 0x46, 0x2d, 0x74, 0x9d, 0x1e, 0x39, 0x7a, 0xa9, 0xe0, 0x2a, 0x2a, 0x95, + 0x5a, 0x85, 0xb4, 0x43, 0xd2, 0x70, 0x62, 0xe2, 0x9a, 0x14, 0x71, 0xaa, 0x1e, 0x72, 0xe1, 0xbc, + 0xd3, 0x89, 0x03, 0xa6, 0xac, 0x36, 0x51, 0x37, 0x82, 0x5d, 0xe2, 0xb3, 0x77, 0xa2, 0xd2, 0xd2, + 0x25, 0x2a, 0x0d, 0x2c, 0xf6, 0xc0, 0xc3, 0x3d, 0xa9, 0x50, 0x29, 0x4e, 0xe5, 0x4e, 0x05, 0x33, + 0x68, 0x4f, 0x46, 0xfe, 0xd4, 0x97, 0x61, 0x6c, 0x27, 0x88, 0xe2, 0x75, 0x12, 0xdf, 0x0b, 0xc2, + 0x5d, 0x11, 0x7a, 0x31, 0x09, 0xd7, 0x9b, 0x80, 0xb0, 0x8e, 0x47, 0xaf, 0x69, 0xcc, 0x8a, 0xa1, + 0x5a, 0x61, 0x0f, 0xc8, 0xa5, 0x84, 0xc7, 0x5c, 0xe7, 0xc5, 0x58, 0xc2, 0x25, 0x6a, 0xb5, 0xb6, + 0xcc, 0x1e, 0x83, 0x53, 0xa8, 0xd5, 0xda, 0x32, 0x96, 0x70, 0xba, 0x5c, 0xa3, 0x1d, 0x27, 0x24, + 0xb5, 0x30, 0x68, 0x90, 0x48, 0x0b, 0x12, 0xfd, 0x38, 0x0f, 0x2c, 0x49, 0x97, 0x6b, 0x3d, 0x0b, + 0x01, 0x67, 0xd7, 0x43, 0xa4, 0x3b, 0x6b, 0xd2, 0x64, 0xbe, 0x16, 0xbf, 0x5b, 0xde, 0x18, 0x30, + 0x71, 0x92, 0x0f, 0xd3, 0x2a, 0x5f, 0x13, 0x0f, 0x25, 0x19, 0xcd, 0x4e, 0xb1, 0xb5, 0x3d, 0x78, + 0x1c, 0x4a, 0xf5, 0x2e, 0x52, 0x4d, 0x51, 0xc2, 0x5d, 0xb4, 0x8d, 0xb8, 0x4c, 0xd3, 0x7d, 0x93, + 0xe9, 0x5e, 0x85, 0x72, 0xd4, 0xd9, 0x74, 0x83, 0x96, 0xe3, 0xf9, 0xec, 0x31, 0x58, 0xbb, 0x2f, + 0xd4, 0x25, 0x00, 0x27, 0x38, 0x68, 0x15, 0x4a, 0x8e, 0x7c, 0xf4, 0x40, 0xf9, 0xe1, 0x3c, 0xd4, + 0x53, 0x07, 0xf7, 0x70, 0x97, 0xcf, 0x1c, 0xaa, 0x2e, 0x7a, 0x0d, 0x26, 0x84, 0x8f, 0xa3, 0x48, + 0x15, 0x78, 0xca, 0x74, 0x44, 0xa9, 0xeb, 0x40, 0x6c, 0xe2, 0xa2, 0xdb, 0x30, 0x16, 0x07, 0x4d, + 0xe6, 0x4d, 0x41, 0xc5, 0xb0, 0xb3, 0xf9, 0x21, 0xc1, 0x36, 0x14, 0x9a, 0xae, 0x6f, 0x54, 0x55, + 0xb1, 0x4e, 0x07, 0x6d, 0xf0, 0xf5, 0xce, 0x82, 0x25, 0x93, 0x68, 0xf6, 0xb1, 0xfc, 0x33, 0x49, + 0xc5, 0x54, 0x36, 0xb7, 0x83, 0xa8, 0x89, 0x75, 0x32, 0xe8, 0x1a, 0xcc, 0xb4, 0x43, 0x2f, 0x60, + 0x6b, 0x42, 0xbd, 0x77, 0xcd, 0x9a, 0x29, 0x5e, 0x6a, 0x69, 0x04, 0xdc, 0x5d, 0x87, 0xb9, 0xa8, + 0x8a, 0xc2, 0xd9, 0x73, 0x3c, 0x9b, 0x30, 0xbf, 0x7e, 0xf1, 0x32, 0xac, 0xa0, 0x68, 0x8d, 0x71, + 0x62, 0xae, 0x39, 0x98, 0x9d, 0xcb, 0x8f, 0x20, 0xa2, 0x6b, 0x18, 0xb8, 0x70, 0xa9, 0xfe, 0xe2, + 0x84, 0x02, 0x72, 0xb5, 0xb4, 0x73, 0x54, 0xa2, 0x8f, 0x66, 0xcf, 0xf7, 0x30, 0x25, 0x4b, 0x89, + 0xff, 0x89, 0x40, 0x60, 0x14, 0x47, 0x38, 0x45, 0x13, 0x7d, 0x13, 0x4c, 0x8b, 0x88, 0x65, 0xc9, + 0x30, 0x5d, 0x48, 0x6c, 0x54, 0x71, 0x0a, 0x86, 0xbb, 0xb0, 0x79, 0x10, 0x79, 0x67, 0xb3, 0x49, + 0x04, 0xeb, 0xbb, 0xe9, 0xf9, 0xbb, 0xd1, 0xec, 0x45, 0xc6, 0x1f, 0x44, 0x10, 0xf9, 0x34, 0x14, + 0x67, 0xd4, 0x40, 0x1b, 0x30, 0xdd, 0x0e, 0x09, 0x69, 0x31, 0x41, 0x5c, 0x9c, 0x67, 0xf3, 0xdc, + 0x43, 0x9b, 0xf6, 0xa4, 0x96, 0x82, 0x1d, 0x66, 0x94, 0xe1, 0x2e, 0x0a, 0xe8, 0x1e, 0x94, 0x82, + 0x3d, 0x12, 0xee, 0x10, 0xc7, 0x9d, 0xbd, 0xd4, 0xc3, 0x66, 0x5a, 0x1c, 0x6e, 0xb7, 0x04, 0x6e, + 0xea, 0x8d, 0x5c, 0x16, 0xf7, 0x7f, 0x23, 0x97, 0x8d, 0xa1, 0xef, 0xb7, 0xe0, 0x9c, 0x54, 0xab, + 0xd7, 0xdb, 0x74, 0xd4, 0x97, 0x03, 0x3f, 0x8a, 0x43, 0xee, 0x53, 0xfc, 0x44, 0xbe, 0x9f, 0xed, + 0x46, 0x4e, 0x25, 0xa5, 0xbc, 0x3c, 0x97, 0x87, 0x11, 0xe1, 0xfc, 0x16, 0xe7, 0xbe, 0x11, 0x66, + 0xba, 0x4e, 0xee, 0xa3, 0xe4, 0xb5, 0x98, 0xdb, 0x85, 0x09, 0x63, 0x74, 0x1e, 0xe9, 0xf3, 0xe8, + 0xbf, 0x19, 0x85, 0xb2, 0x7a, 0x3a, 0x43, 0x57, 0xcd, 0x17, 0xd1, 0x73, 0xe9, 0x17, 0xd1, 0x12, + 0xbd, 0x32, 0xeb, 0x8f, 0xa0, 0x1b, 0x19, 0x11, 0x9c, 0xf2, 0xf6, 0xe2, 0xe0, 0xae, 0xb9, 0x9a, + 0x26, 0xb4, 0x38, 0xf0, 0xd3, 0xea, 0x50, 0x4f, 0xe5, 0xea, 0x35, 0x98, 0xf1, 0x03, 0x26, 0x2e, + 0x12, 0x57, 0xca, 0x02, 0xec, 0xc8, 0x2f, 0xeb, 0x21, 0x11, 0x52, 0x08, 0xb8, 0xbb, 0x0e, 0x6d, + 0x90, 0x9f, 0xd9, 0x69, 0x6d, 0x2e, 0x3f, 0xd2, 0xb1, 0x80, 0xa2, 0x27, 0x61, 0xb8, 0x1d, 0xb8, + 0xd5, 0x9a, 0x10, 0x15, 0xb5, 0x1c, 0xa7, 0x6e, 0xb5, 0x86, 0x39, 0x0c, 0x2d, 0xc2, 0x08, 0xfb, + 0x11, 0xcd, 0x8e, 0xe7, 0xfb, 0xbe, 0xb3, 0x1a, 0x5a, 0xd6, 0x10, 0x56, 0x01, 0x8b, 0x8a, 0x4c, + 0xab, 0x44, 0xe5, 0x6b, 0xa6, 0x55, 0x1a, 0x7d, 0x48, 0xad, 0x92, 0x24, 0x80, 0x13, 0x5a, 0xe8, + 0x3e, 0x9c, 0x31, 0xee, 0x34, 0x7c, 0x89, 0x90, 0x48, 0xf8, 0xdf, 0x3e, 0xd9, 0xf3, 0x32, 0x23, + 0x9e, 0x62, 0x2f, 0x88, 0x4e, 0x9f, 0xa9, 0x66, 0x51, 0xc2, 0xd9, 0x0d, 0xa0, 0x26, 0xcc, 0x34, + 0xba, 0x5a, 0x2d, 0x0d, 0xde, 0xaa, 0x9a, 0xd0, 0xee, 0x16, 0xbb, 0x09, 0xa3, 0xd7, 0xa0, 0xf4, + 0x76, 0x10, 0x31, 0x36, 0x2b, 0xc4, 0x5b, 0xe9, 0xbc, 0x59, 0x7a, 0xf3, 0x56, 0x9d, 0x95, 0x1f, + 0x1e, 0xcc, 0x8f, 0xd5, 0x02, 0x57, 0xfe, 0xc5, 0xaa, 0x02, 0xfa, 0x6e, 0x0b, 0xe6, 0xba, 0x2f, + 0x4d, 0xaa, 0xd3, 0x13, 0x83, 0x77, 0xda, 0x16, 0x8d, 0xce, 0xad, 0xe4, 0x92, 0xc3, 0x3d, 0x9a, + 0xb2, 0x7f, 0x91, 0x3f, 0x9b, 0x8a, 0xc7, 0x15, 0x12, 0x75, 0x9a, 0x27, 0x91, 0x65, 0x71, 0xc5, + 0x78, 0xf7, 0x79, 0xe8, 0xa7, 0xf9, 0x5f, 0xb5, 0xd8, 0xd3, 0xfc, 0x06, 0x69, 0xb5, 0x9b, 0x4e, + 0x7c, 0x12, 0xbe, 0x7f, 0x6f, 0x42, 0x29, 0x16, 0xad, 0xf5, 0x4a, 0x0c, 0xa9, 0x75, 0x8a, 0x99, + 0x27, 0x28, 0x61, 0x53, 0x96, 0x62, 0x45, 0xc6, 0xfe, 0xa7, 0x7c, 0x06, 0x24, 0xe4, 0x04, 0xd4, + 0xeb, 0x15, 0x53, 0xbd, 0x3e, 0xdf, 0xe7, 0x0b, 0x72, 0xd4, 0xec, 0xff, 0xc4, 0xec, 0x37, 0x53, + 0xb2, 0xbc, 0xd7, 0x6d, 0x42, 0xec, 0x1f, 0xb4, 0xe0, 0x74, 0x96, 0x11, 0x25, 0xbd, 0x20, 0x70, + 0x15, 0x8f, 0xb2, 0x91, 0x51, 0x23, 0x78, 0x47, 0x94, 0x63, 0x85, 0x31, 0x70, 0xce, 0xa5, 0xa3, + 0xc5, 0x20, 0xbd, 0x05, 0x13, 0xb5, 0x90, 0x68, 0x07, 0xda, 0xeb, 0xdc, 0x99, 0x97, 0xf7, 0xe7, + 0xd9, 0x23, 0x3b, 0xf2, 0xda, 0x3f, 0x55, 0x80, 0xd3, 0xfc, 0x91, 0x7b, 0x71, 0x2f, 0xf0, 0xdc, + 0x5a, 0xe0, 0x8a, 0x7c, 0x59, 0x9f, 0x86, 0xf1, 0xb6, 0xa6, 0x97, 0xeb, 0x15, 0x4f, 0x4f, 0xd7, + 0xdf, 0x25, 0x9a, 0x04, 0xbd, 0x14, 0x1b, 0xb4, 0x90, 0x0b, 0xe3, 0x64, 0xcf, 0x6b, 0xa8, 0x97, + 0xd2, 0xc2, 0x91, 0x0f, 0x17, 0xd5, 0xca, 0x8a, 0x46, 0x07, 0x1b, 0x54, 0x1f, 0x41, 0x0a, 0x55, + 0xfb, 0x87, 0x2c, 0x78, 0x2c, 0x27, 0xfa, 0x1e, 0x6d, 0xee, 0x1e, 0x33, 0x27, 0x10, 0xd9, 0x18, + 0x55, 0x73, 0xdc, 0xc8, 0x00, 0x0b, 0x28, 0xfa, 0x24, 0x00, 0x37, 0x12, 0xa0, 0x37, 0xd4, 0x7e, + 0x61, 0xca, 0x8c, 0x08, 0x4b, 0x5a, 0xb0, 0x1c, 0x59, 0x1f, 0x6b, 0xb4, 0xec, 0x1f, 0x2f, 0xc2, + 0x30, 0xcf, 0x23, 0xbd, 0x0a, 0xa3, 0x3b, 0x3c, 0x8b, 0xc0, 0x20, 0x09, 0x0b, 0x12, 0xdd, 0x01, + 0x2f, 0xc0, 0xb2, 0x32, 0x5a, 0x83, 0x53, 0x3c, 0x0b, 0x43, 0xb3, 0x42, 0x9a, 0xce, 0xbe, 0x54, + 0x74, 0xf1, 0x0c, 0x86, 0x4a, 0xe1, 0x57, 0xed, 0x46, 0xc1, 0x59, 0xf5, 0xd0, 0xeb, 0x30, 0x49, + 0x2f, 0x1e, 0x41, 0x27, 0x96, 0x94, 0x78, 0xfe, 0x05, 0x75, 0xd3, 0xd9, 0x30, 0xa0, 0x38, 0x85, + 0x4d, 0xef, 0xbe, 0xed, 0x2e, 0x95, 0xde, 0x70, 0x72, 0xf7, 0x35, 0xd5, 0x78, 0x26, 0x2e, 0xb3, + 0x9e, 0xec, 0x30, 0x5b, 0xd1, 0x8d, 0x9d, 0x90, 0x44, 0x3b, 0x41, 0xd3, 0x65, 0x82, 0xd6, 0xb0, + 0x66, 0x3d, 0x99, 0x82, 0xe3, 0xae, 0x1a, 0x94, 0xca, 0x96, 0xe3, 0x35, 0x3b, 0x21, 0x49, 0xa8, + 0x8c, 0x98, 0x54, 0x56, 0x53, 0x70, 0xdc, 0x55, 0x83, 0xae, 0xa3, 0x33, 0xb5, 0x30, 0xa0, 0xcc, + 0x4b, 0x86, 0x14, 0x51, 0x26, 0xb1, 0xa3, 0xd2, 0xfb, 0xb1, 0x47, 0xf0, 0x2d, 0x61, 0x34, 0xc8, + 0x29, 0x18, 0xef, 0xe1, 0x75, 0xe1, 0xf7, 0x28, 0xa9, 0xa0, 0xe7, 0x61, 0x4c, 0xc4, 0xd6, 0x67, + 0x96, 0x9b, 0x7c, 0xea, 0xd8, 0xfb, 0x7d, 0x25, 0x29, 0xc6, 0x3a, 0x8e, 0xfd, 0x3d, 0x05, 0x38, + 0x95, 0x61, 0x7a, 0xcf, 0x59, 0xd5, 0xb6, 0x17, 0xc5, 0x2a, 0x4b, 0x9b, 0xc6, 0xaa, 0x78, 0x39, + 0x56, 0x18, 0x74, 0x3f, 0x70, 0x66, 0x98, 0x66, 0x80, 0xc2, 0xb4, 0x55, 0x40, 0x8f, 0x98, 0xef, + 0xec, 0x12, 0x0c, 0x75, 0x22, 0x22, 0xc3, 0xe6, 0x29, 0xfe, 0xcd, 0x9e, 0x75, 0x18, 0x84, 0x8a, + 0xc7, 0xdb, 0xea, 0x85, 0x44, 0x13, 0x8f, 0xf9, 0x1b, 0x09, 0x87, 0xd1, 0xce, 0xc5, 0xc4, 0x77, + 0xfc, 0x58, 0x08, 0xd1, 0x49, 0xfc, 0x27, 0x56, 0x8a, 0x05, 0xd4, 0xfe, 0x52, 0x11, 0xce, 0xe5, + 0x3a, 0xe3, 0xd0, 0xae, 0xb7, 0x02, 0xdf, 0x8b, 0x03, 0x65, 0x18, 0xc1, 0x63, 0x3e, 0x91, 0xf6, + 0xce, 0x9a, 0x28, 0xc7, 0x0a, 0x03, 0x5d, 0x86, 0x61, 0xa6, 0x74, 0xea, 0xca, 0x57, 0xb7, 0x54, + 0xe1, 0x41, 0x40, 0x38, 0x78, 0xe0, 0x5c, 0xa0, 0x4f, 0xc2, 0x50, 0x3b, 0x08, 0x9a, 0x69, 0xa6, + 0x45, 0xbb, 0x1b, 0x04, 0x4d, 0xcc, 0x80, 0xe8, 0x43, 0x62, 0xbc, 0x52, 0x96, 0x00, 0xd8, 0x71, + 0x83, 0x48, 0x1b, 0xb4, 0xa7, 0x61, 0x74, 0x97, 0xec, 0x87, 0x9e, 0xbf, 0x9d, 0xb6, 0x10, 0xb9, + 0xc1, 0x8b, 0xb1, 0x84, 0x9b, 0xa9, 0x87, 0x46, 0x8f, 0x3b, 0x89, 0x67, 0xa9, 0xef, 0x11, 0xf8, + 0xbd, 0x45, 0x98, 0xc2, 0x4b, 0x95, 0xf7, 0x27, 0xe2, 0x76, 0xf7, 0x44, 0x1c, 0x77, 0x12, 0xcf, + 0xfe, 0xb3, 0xf1, 0x73, 0x16, 0x4c, 0xb1, 0x08, 0xff, 0x22, 0x5a, 0x90, 0x17, 0xf8, 0x27, 0x20, + 0xe2, 0x3d, 0x09, 0xc3, 0x21, 0x6d, 0x34, 0x9d, 0xa8, 0x8e, 0xf5, 0x04, 0x73, 0x18, 0x3a, 0x0f, + 0x43, 0xac, 0x0b, 0x74, 0xf2, 0xc6, 0x79, 0x8e, 0x9f, 0x8a, 0x13, 0x3b, 0x98, 0x95, 0xb2, 0x10, + 0x18, 0x98, 0xb4, 0x9b, 0x1e, 0xef, 0x74, 0xf2, 0x24, 0xf8, 0xde, 0x08, 0x81, 0x91, 0xd9, 0xb5, + 0x77, 0x17, 0x02, 0x23, 0x9b, 0x64, 0xef, 0xeb, 0xd3, 0x1f, 0x16, 0xe0, 0x62, 0x66, 0xbd, 0x81, + 0x43, 0x60, 0xf4, 0xae, 0xfd, 0x28, 0x23, 0xc1, 0x17, 0x4f, 0xd0, 0xfe, 0x6e, 0x68, 0x50, 0x09, + 0x73, 0x78, 0x80, 0xc8, 0x14, 0x99, 0x43, 0xf6, 0x1e, 0x89, 0x4c, 0x91, 0xd9, 0xb7, 0x9c, 0xeb, + 0xdf, 0x9f, 0x17, 0x72, 0xbe, 0x85, 0x5d, 0x04, 0xaf, 0x50, 0x3e, 0xc3, 0x80, 0x91, 0x90, 0x98, + 0xc7, 0x39, 0x8f, 0xe1, 0x65, 0x58, 0x41, 0xd1, 0x22, 0x4c, 0xb5, 0x3c, 0x9f, 0x32, 0x9f, 0x7d, + 0x53, 0xf0, 0x53, 0x81, 0x83, 0xd6, 0x4c, 0x30, 0x4e, 0xe3, 0x23, 0x4f, 0x8b, 0x5a, 0x51, 0xc8, + 0x4f, 0xfd, 0x9c, 0xdb, 0xdb, 0x05, 0xf3, 0xb9, 0x54, 0x8d, 0x62, 0x46, 0x04, 0x8b, 0x35, 0xed, + 0xfe, 0x5f, 0x1c, 0xfc, 0xfe, 0x3f, 0x9e, 0x7d, 0xf7, 0x9f, 0x7b, 0x0d, 0x26, 0x1e, 0x5a, 0xe1, + 0x6b, 0x7f, 0xa5, 0x08, 0x8f, 0xf7, 0xd8, 0xf6, 0x9c, 0xd7, 0x1b, 0x73, 0xa0, 0xf1, 0xfa, 0xae, + 0x79, 0xa8, 0xc1, 0xe9, 0xad, 0x4e, 0xb3, 0xb9, 0xcf, 0x4c, 0xdc, 0x89, 0x2b, 0x31, 0x84, 0x4c, + 0x79, 0x5e, 0x66, 0x55, 0x5a, 0xcd, 0xc0, 0xc1, 0x99, 0x35, 0xa9, 0x40, 0x4f, 0x4f, 0x92, 0x7d, + 0x45, 0x2a, 0x25, 0xd0, 0x63, 0x1d, 0x88, 0x4d, 0x5c, 0x74, 0x0d, 0x66, 0x9c, 0x3d, 0xc7, 0xe3, + 0xa1, 0x3f, 0x25, 0x01, 0x2e, 0xd1, 0x2b, 0x3d, 0xdd, 0x62, 0x1a, 0x01, 0x77, 0xd7, 0x41, 0x6f, + 0x00, 0x0a, 0x44, 0xea, 0xfa, 0x6b, 0xc4, 0x17, 0xaf, 0x5a, 0x6c, 0xee, 0x8a, 0x09, 0x4b, 0xb8, + 0xd5, 0x85, 0x81, 0x33, 0x6a, 0xa5, 0xa2, 0x40, 0x8c, 0xe4, 0x47, 0x81, 0xe8, 0xcd, 0x17, 0xfb, + 0x26, 0x21, 0xf8, 0x2f, 0x16, 0x3d, 0xbe, 0xb8, 0x90, 0x6f, 0x06, 0x33, 0x7b, 0x8d, 0x59, 0x8d, + 0x71, 0x1d, 0x9e, 0x16, 0x90, 0xe1, 0x8c, 0x66, 0x35, 0x96, 0x00, 0xb1, 0x89, 0xcb, 0x17, 0x44, + 0x94, 0xf8, 0x01, 0x1a, 0x22, 0xbe, 0x88, 0xb8, 0xa2, 0x30, 0xd0, 0xa7, 0x60, 0xd4, 0xf5, 0xf6, + 0xbc, 0x28, 0x08, 0xc5, 0x4a, 0x3f, 0xe2, 0x73, 0x41, 0xc2, 0x07, 0x2b, 0x9c, 0x0c, 0x96, 0xf4, + 0xec, 0xef, 0x2d, 0xc0, 0x84, 0x6c, 0xf1, 0xcd, 0x4e, 0x10, 0x3b, 0x27, 0x70, 0x2c, 0x5f, 0x33, + 0x8e, 0xe5, 0x0f, 0xf5, 0x0a, 0x3b, 0xc3, 0xba, 0x94, 0x7b, 0x1c, 0xdf, 0x4a, 0x1d, 0xc7, 0x4f, + 0xf5, 0x27, 0xd5, 0xfb, 0x18, 0xfe, 0x67, 0x16, 0xcc, 0x18, 0xf8, 0x27, 0x70, 0x1a, 0xac, 0x9a, + 0xa7, 0xc1, 0x13, 0x7d, 0xbf, 0x21, 0xe7, 0x14, 0xf8, 0xce, 0x62, 0xaa, 0xef, 0x8c, 0xfb, 0xbf, + 0x0d, 0x43, 0x3b, 0x4e, 0xe8, 0xf6, 0x0a, 0xb3, 0xdd, 0x55, 0x69, 0xe1, 0xba, 0x13, 0x8a, 0x67, + 0xbd, 0x67, 0x55, 0xe6, 0x65, 0x27, 0xec, 0xff, 0xa4, 0xc7, 0x9a, 0x42, 0xaf, 0xc2, 0x48, 0xd4, + 0x08, 0xda, 0xca, 0x28, 0xfd, 0x12, 0xcf, 0xca, 0x4c, 0x4b, 0x0e, 0x0f, 0xe6, 0x91, 0xd9, 0x1c, + 0x2d, 0xc6, 0x02, 0x1f, 0x7d, 0x1a, 0x26, 0xd8, 0x2f, 0x65, 0x63, 0x53, 0xcc, 0x4f, 0xc9, 0x53, + 0xd7, 0x11, 0xb9, 0x01, 0x9a, 0x51, 0x84, 0x4d, 0x52, 0x73, 0xdb, 0x50, 0x56, 0x9f, 0xf5, 0x48, + 0xdf, 0xe3, 0xfe, 0x43, 0x11, 0x4e, 0x65, 0xac, 0x39, 0x14, 0x19, 0x33, 0xf1, 0xfc, 0x80, 0x4b, + 0xf5, 0x5d, 0xce, 0x45, 0xc4, 0x6e, 0x43, 0xae, 0x58, 0x5b, 0x03, 0x37, 0x7a, 0x3b, 0x22, 0xe9, + 0x46, 0x69, 0x51, 0xff, 0x46, 0x69, 0x63, 0x27, 0x36, 0xd4, 0xb4, 0x21, 0xd5, 0xd3, 0x47, 0x3a, + 0xa7, 0x7f, 0x52, 0x84, 0xd3, 0x59, 0x91, 0xb0, 0xd0, 0xb7, 0xa4, 0xd2, 0xb3, 0xbd, 0x34, 0x68, + 0x0c, 0x2d, 0x9e, 0xb3, 0x8d, 0xeb, 0x80, 0x97, 0x16, 0xcc, 0x84, 0x6d, 0x7d, 0x87, 0x59, 0xb4, + 0xc9, 0x7c, 0xdc, 0x43, 0x9e, 0x56, 0x4f, 0xb2, 0x8f, 0x8f, 0x0e, 0xdc, 0x01, 0x91, 0x8f, 0x2f, + 0x4a, 0xbd, 0xdf, 0xcb, 0xe2, 0xfe, 0xef, 0xf7, 0xb2, 0xe5, 0x39, 0x0f, 0xc6, 0xb4, 0xaf, 0x79, + 0xa4, 0x33, 0xbe, 0x4b, 0x4f, 0x2b, 0xad, 0xdf, 0x8f, 0x74, 0xd6, 0x7f, 0xc8, 0x82, 0x94, 0xc9, + 0xb5, 0x52, 0x8b, 0x59, 0xb9, 0x6a, 0xb1, 0x4b, 0x30, 0x14, 0x06, 0x4d, 0x92, 0xce, 0x86, 0x86, + 0x83, 0x26, 0xc1, 0x0c, 0x42, 0x31, 0xe2, 0x44, 0xd9, 0x31, 0xae, 0x5f, 0xe4, 0xc4, 0x15, 0xed, + 0x49, 0x18, 0x6e, 0x92, 0x3d, 0xd2, 0x4c, 0x27, 0xad, 0xb8, 0x49, 0x0b, 0x31, 0x87, 0xd9, 0x3f, + 0x37, 0x04, 0x17, 0x7a, 0x46, 0x89, 0xa0, 0xd7, 0xa1, 0x6d, 0x27, 0x26, 0xf7, 0x9c, 0xfd, 0x74, + 0x74, 0xf9, 0x6b, 0xbc, 0x18, 0x4b, 0x38, 0x73, 0x8a, 0xe1, 0x41, 0x62, 0x53, 0x4a, 0x44, 0x11, + 0x1b, 0x56, 0x40, 0x4d, 0xa5, 0x54, 0xf1, 0x38, 0x94, 0x52, 0x2f, 0x00, 0x44, 0x51, 0x93, 0x1b, + 0xbe, 0xb8, 0xc2, 0xdb, 0x26, 0x09, 0x26, 0x5c, 0xbf, 0x29, 0x20, 0x58, 0xc3, 0x42, 0x15, 0x98, + 0x6e, 0x87, 0x41, 0xcc, 0x75, 0xb2, 0x15, 0x6e, 0x1b, 0x36, 0x6c, 0x3a, 0xe8, 0xd7, 0x52, 0x70, + 0xdc, 0x55, 0x03, 0xbd, 0x0c, 0x63, 0xc2, 0x69, 0xbf, 0x16, 0x04, 0x4d, 0xa1, 0x06, 0x52, 0xe6, + 0x52, 0xf5, 0x04, 0x84, 0x75, 0x3c, 0xad, 0x1a, 0x53, 0xf4, 0x8e, 0x66, 0x56, 0xe3, 0xca, 0x5e, + 0x0d, 0x2f, 0x15, 0x15, 0xaf, 0x34, 0x50, 0x54, 0xbc, 0x44, 0x31, 0x56, 0x1e, 0xf8, 0x6d, 0x0b, + 0xfa, 0xaa, 0x92, 0x7e, 0x7a, 0x08, 0x4e, 0x89, 0x85, 0xf3, 0xa8, 0x97, 0xcb, 0xed, 0xee, 0xe5, + 0x72, 0x1c, 0xaa, 0xb3, 0xf7, 0xd7, 0xcc, 0x49, 0xaf, 0x99, 0xef, 0xb3, 0xc0, 0x14, 0xaf, 0xd0, + 0xff, 0x9f, 0x9b, 0x9e, 0xe3, 0xe5, 0x5c, 0x71, 0xcd, 0x95, 0x07, 0xc8, 0xbb, 0x4c, 0xd4, 0x61, + 0xff, 0x27, 0x0b, 0x9e, 0xe8, 0x4b, 0x11, 0xad, 0x40, 0x99, 0xc9, 0x80, 0xda, 0xed, 0xec, 0x29, + 0x65, 0x3b, 0x2a, 0x01, 0x39, 0x22, 0x69, 0x52, 0x13, 0xad, 0x74, 0xe5, 0x41, 0x79, 0x3a, 0x23, + 0x0f, 0xca, 0x19, 0x63, 0x78, 0x1e, 0x32, 0x11, 0xca, 0x1f, 0x14, 0x61, 0x84, 0xaf, 0xf8, 0x13, + 0xb8, 0x86, 0x3d, 0x03, 0x65, 0xaf, 0xd5, 0xea, 0xf0, 0x6c, 0x12, 0xc3, 0xdc, 0xb3, 0x92, 0x0e, + 0x4d, 0x55, 0x16, 0xe2, 0x04, 0x8e, 0x56, 0x85, 0x92, 0xb7, 0x47, 0x8c, 0x3e, 0xde, 0xf1, 0x85, + 0x8a, 0x13, 0x3b, 0x5c, 0xa6, 0x50, 0x47, 0x5b, 0xa2, 0x0e, 0x46, 0x9f, 0x05, 0x88, 0xe2, 0xd0, + 0xf3, 0xb7, 0x69, 0x99, 0x88, 0xde, 0xf8, 0xe1, 0x1e, 0xd4, 0xea, 0x0a, 0x99, 0xd3, 0x4c, 0xb6, + 0xb9, 0x02, 0x60, 0x8d, 0x22, 0x5a, 0x30, 0x0e, 0xd7, 0xb9, 0x94, 0x96, 0x14, 0x38, 0xd5, 0xe4, + 0xa8, 0x9d, 0x7b, 0x05, 0xca, 0x8a, 0x78, 0x3f, 0x95, 0xcf, 0xb8, 0x2e, 0x89, 0x7c, 0x02, 0xa6, + 0x52, 0x7d, 0x3b, 0x92, 0xc6, 0xe8, 0xe7, 0x2d, 0x98, 0xe2, 0x9d, 0x59, 0xf1, 0xf7, 0x04, 0x03, + 0x7e, 0x07, 0x4e, 0x37, 0x33, 0x18, 0xa1, 0x98, 0xfe, 0xc1, 0x19, 0xa7, 0xd2, 0x10, 0x65, 0x41, + 0x71, 0x66, 0x1b, 0xe8, 0x0a, 0x5d, 0xe4, 0x94, 0xd1, 0x39, 0x4d, 0xe1, 0x68, 0x39, 0xce, 0x17, + 0x38, 0x2f, 0xc3, 0x0a, 0x6a, 0xff, 0xb6, 0x05, 0x33, 0xbc, 0xe7, 0x37, 0xc8, 0xbe, 0x62, 0x07, + 0x5f, 0xcb, 0xbe, 0x8b, 0x3c, 0x46, 0x85, 0x9c, 0x3c, 0x46, 0xfa, 0xa7, 0x15, 0x7b, 0x7e, 0xda, + 0x4f, 0x59, 0x20, 0x56, 0xc8, 0x09, 0xdc, 0xfb, 0xbf, 0xd1, 0xbc, 0xf7, 0xcf, 0xe5, 0x6f, 0x82, + 0x9c, 0x0b, 0xff, 0x9f, 0x59, 0x30, 0xcd, 0x11, 0x92, 0x07, 0xea, 0xaf, 0xe9, 0x3c, 0x0c, 0x92, + 0xed, 0xf4, 0x06, 0xd9, 0xdf, 0x08, 0x6a, 0x4e, 0xbc, 0x93, 0xfd, 0x51, 0xc6, 0x64, 0x0d, 0xf5, + 0x9c, 0x2c, 0x57, 0x6e, 0xa0, 0x23, 0xa4, 0x50, 0x3e, 0x72, 0x98, 0x7f, 0xfb, 0xab, 0x16, 0x20, + 0xde, 0x8c, 0x21, 0x2b, 0x51, 0x09, 0x84, 0x95, 0x6a, 0x67, 0x4b, 0xc2, 0x9a, 0x14, 0x04, 0x6b, + 0x58, 0xc7, 0x32, 0x3c, 0x29, 0x2b, 0x83, 0x62, 0x7f, 0x2b, 0x83, 0x23, 0x8c, 0xe8, 0x1f, 0x0c, + 0x43, 0xda, 0x5d, 0x04, 0xdd, 0x81, 0xf1, 0x86, 0xd3, 0x76, 0x36, 0xbd, 0xa6, 0x17, 0x7b, 0x24, + 0xea, 0x65, 0x9e, 0xb4, 0xac, 0xe1, 0x89, 0x77, 0x61, 0xad, 0x04, 0x1b, 0x74, 0xd0, 0x02, 0x40, + 0x3b, 0xf4, 0xf6, 0xbc, 0x26, 0xd9, 0x66, 0xea, 0x09, 0xe6, 0xda, 0xcd, 0x6d, 0x6e, 0x64, 0x29, + 0xd6, 0x30, 0x32, 0x7c, 0x67, 0x8b, 0x8f, 0xd8, 0x77, 0x16, 0x4e, 0xcc, 0x77, 0x76, 0xe8, 0x48, + 0xbe, 0xb3, 0xa5, 0x23, 0xfb, 0xce, 0x0e, 0x0f, 0xe4, 0x3b, 0x8b, 0xe1, 0xac, 0x14, 0xf7, 0xe8, + 0xff, 0x55, 0xaf, 0x49, 0x84, 0x8c, 0xcf, 0xfd, 0xd1, 0xe7, 0x1e, 0x1c, 0xcc, 0x9f, 0xc5, 0x99, + 0x18, 0x38, 0xa7, 0x26, 0xfa, 0x24, 0xcc, 0x3a, 0xcd, 0x66, 0x70, 0x4f, 0x4d, 0xea, 0x4a, 0xd4, + 0x70, 0x9a, 0x5c, 0xef, 0x3f, 0xca, 0xa8, 0x9e, 0x7f, 0x70, 0x30, 0x3f, 0xbb, 0x98, 0x83, 0x83, + 0x73, 0x6b, 0xa3, 0x8f, 0x43, 0xb9, 0x1d, 0x06, 0x8d, 0x35, 0xcd, 0xa7, 0xed, 0x22, 0x1d, 0xc0, + 0x9a, 0x2c, 0x3c, 0x3c, 0x98, 0x9f, 0x50, 0x7f, 0xd8, 0x81, 0x9f, 0x54, 0xb0, 0x77, 0xe1, 0x54, + 0x9d, 0x84, 0x1e, 0x4b, 0x88, 0xec, 0x26, 0xfc, 0x63, 0x03, 0xca, 0x61, 0x8a, 0x63, 0x0e, 0x14, + 0xd7, 0x4e, 0x8b, 0x87, 0x2e, 0x39, 0x64, 0x42, 0xc8, 0xfe, 0xdf, 0x16, 0x8c, 0x0a, 0xf7, 0x8d, + 0x13, 0x90, 0xea, 0x16, 0x0d, 0xe5, 0xfa, 0x7c, 0xf6, 0xa9, 0xc2, 0x3a, 0x93, 0xab, 0x56, 0xaf, + 0xa6, 0xd4, 0xea, 0x4f, 0xf4, 0x22, 0xd2, 0x5b, 0xa1, 0xfe, 0xb7, 0x8a, 0x30, 0x69, 0xfa, 0xf9, + 0x9d, 0xc0, 0x10, 0xac, 0xc3, 0x68, 0x24, 0x1c, 0xd9, 0x0a, 0xf9, 0xe6, 0xdb, 0xe9, 0x49, 0x4c, + 0x4c, 0xbb, 0x84, 0xeb, 0x9a, 0x24, 0x92, 0xe9, 0x21, 0x57, 0x7c, 0x84, 0x1e, 0x72, 0xfd, 0x5c, + 0x2d, 0x87, 0x8e, 0xc3, 0xd5, 0xd2, 0xfe, 0x32, 0x3b, 0xd9, 0xf4, 0xf2, 0x13, 0x10, 0x7a, 0xae, + 0x99, 0x67, 0xa0, 0xdd, 0x63, 0x65, 0x89, 0x4e, 0xe5, 0x08, 0x3f, 0x3f, 0x6b, 0xc1, 0x85, 0x8c, + 0xaf, 0xd2, 0x24, 0xa1, 0x67, 0xa1, 0xe4, 0x74, 0x5c, 0x4f, 0xed, 0x65, 0xed, 0x89, 0x6d, 0x51, + 0x94, 0x63, 0x85, 0x81, 0x96, 0x61, 0x86, 0xdc, 0x6f, 0x7b, 0xfc, 0x75, 0x51, 0xb7, 0xbf, 0x2c, + 0xf2, 0x58, 0xdf, 0x2b, 0x69, 0x20, 0xee, 0xc6, 0x57, 0xe1, 0x27, 0x8a, 0xb9, 0xe1, 0x27, 0xfe, + 0xa1, 0x05, 0x63, 0xca, 0x95, 0xeb, 0x91, 0x8f, 0xf6, 0x37, 0x99, 0xa3, 0xfd, 0x78, 0x8f, 0xd1, + 0xce, 0x19, 0xe6, 0xdf, 0x2a, 0xa8, 0xfe, 0xd6, 0x82, 0x30, 0x1e, 0x40, 0xc2, 0x7a, 0x15, 0x4a, + 0xed, 0x30, 0x88, 0x83, 0x46, 0xd0, 0x14, 0x02, 0xd6, 0xf9, 0x24, 0x0e, 0x0b, 0x2f, 0x3f, 0xd4, + 0x7e, 0x63, 0x85, 0x4d, 0x65, 0x1b, 0xa7, 0xdd, 0x96, 0x00, 0x69, 0x96, 0xc5, 0xa2, 0x94, 0x26, + 0xc5, 0x58, 0xc7, 0x61, 0x03, 0x1e, 0x84, 0xb1, 0x90, 0x83, 0x92, 0x01, 0x0f, 0xc2, 0x18, 0x33, + 0x08, 0x72, 0x01, 0x62, 0x27, 0xdc, 0x26, 0x31, 0x2d, 0x13, 0xa1, 0xa2, 0xf2, 0xf9, 0x4d, 0x27, + 0xf6, 0x9a, 0x0b, 0x9e, 0x1f, 0x47, 0x71, 0xb8, 0x50, 0xf5, 0xe3, 0x5b, 0x21, 0xbf, 0xe2, 0x69, + 0xb1, 0x58, 0x14, 0x2d, 0xac, 0xd1, 0x95, 0x6e, 0xcb, 0xac, 0x8d, 0x61, 0xf3, 0x7d, 0x7f, 0x5d, + 0x94, 0x63, 0x85, 0x61, 0xbf, 0xc2, 0x4e, 0x1f, 0x36, 0xa6, 0x47, 0x0b, 0x5e, 0xf2, 0x8b, 0x65, + 0x35, 0x1b, 0xec, 0x71, 0xaf, 0xa2, 0x87, 0x48, 0xe9, 0xcd, 0xec, 0x69, 0xc3, 0xba, 0x0b, 0x53, + 0x12, 0x47, 0x05, 0x7d, 0x73, 0x97, 0xcd, 0xc6, 0x73, 0x7d, 0x4e, 0x8d, 0x23, 0x58, 0x69, 0xb0, + 0x94, 0x05, 0x2c, 0xa0, 0x7b, 0xb5, 0x26, 0xf6, 0x85, 0x96, 0xb2, 0x40, 0x00, 0x70, 0x82, 0x83, + 0xae, 0x8a, 0x0b, 0x3c, 0x57, 0x7d, 0x3f, 0x9e, 0xba, 0xc0, 0xcb, 0xcf, 0xd7, 0x94, 0xe5, 0xcf, + 0xc3, 0x98, 0x4a, 0xd8, 0x59, 0xe3, 0x79, 0x20, 0xc5, 0xb2, 0x59, 0x49, 0x8a, 0xb1, 0x8e, 0x83, + 0x36, 0x60, 0x2a, 0xe2, 0xaa, 0x24, 0x15, 0x1f, 0x95, 0xab, 0xe4, 0x3e, 0x2c, 0x0d, 0x5d, 0xea, + 0x26, 0xf8, 0x90, 0x15, 0x71, 0x6e, 0x23, 0x5d, 0x85, 0xd3, 0x24, 0xd0, 0xeb, 0x30, 0xd9, 0x0c, + 0x1c, 0x77, 0xc9, 0x69, 0x3a, 0x7e, 0x83, 0x7d, 0x6f, 0xc9, 0xcc, 0xfb, 0x76, 0xd3, 0x80, 0xe2, + 0x14, 0x36, 0x15, 0x96, 0xf4, 0x12, 0x11, 0xd3, 0xd7, 0xf1, 0xb7, 0x49, 0x24, 0xd2, 0x2f, 0x32, + 0x61, 0xe9, 0x66, 0x0e, 0x0e, 0xce, 0xad, 0x8d, 0x5e, 0x85, 0x71, 0xf9, 0xf9, 0x9a, 0x67, 0x7d, + 0x62, 0xdb, 0xaf, 0xc1, 0xb0, 0x81, 0x89, 0xee, 0xc1, 0x19, 0xf9, 0x7f, 0x23, 0x74, 0xb6, 0xb6, + 0xbc, 0x86, 0x70, 0x37, 0xe5, 0x8e, 0x77, 0x8b, 0xd2, 0x3b, 0x6c, 0x25, 0x0b, 0xe9, 0xf0, 0x60, + 0xfe, 0x92, 0x18, 0xb5, 0x4c, 0x38, 0x9b, 0xc4, 0x6c, 0xfa, 0x68, 0x0d, 0x4e, 0xed, 0x10, 0xa7, + 0x19, 0xef, 0x2c, 0xef, 0x90, 0xc6, 0xae, 0xdc, 0x44, 0xcc, 0x5f, 0x5f, 0xb3, 0x88, 0xbf, 0xde, + 0x8d, 0x82, 0xb3, 0xea, 0xa1, 0xb7, 0x60, 0xb6, 0xdd, 0xd9, 0x6c, 0x7a, 0xd1, 0xce, 0x7a, 0x10, + 0x33, 0x6b, 0x17, 0x95, 0xff, 0x53, 0x38, 0xf6, 0xab, 0x88, 0x08, 0xb5, 0x1c, 0x3c, 0x9c, 0x4b, + 0x01, 0xbd, 0x03, 0x67, 0x52, 0x8b, 0x41, 0xb8, 0x36, 0x4f, 0xe6, 0x47, 0x48, 0xaf, 0x67, 0x55, + 0x10, 0x51, 0x02, 0xb2, 0x40, 0x38, 0xbb, 0x09, 0xf4, 0x12, 0x94, 0xbc, 0xf6, 0xaa, 0xd3, 0xf2, + 0x9a, 0xfb, 0x2c, 0xc4, 0x7b, 0x99, 0x85, 0x3d, 0x2f, 0x55, 0x6b, 0xbc, 0xec, 0x50, 0xfb, 0x8d, + 0x15, 0x26, 0xbd, 0x22, 0x68, 0x81, 0x2c, 0xa3, 0xd9, 0xe9, 0xc4, 0x98, 0x57, 0x8b, 0x76, 0x19, + 0x61, 0x03, 0xeb, 0xdd, 0xd9, 0x48, 0xbd, 0x4d, 0x2b, 0x6b, 0x32, 0x23, 0xfa, 0x1c, 0x8c, 0xeb, + 0x2b, 0x56, 0x9c, 0x7f, 0x97, 0xb3, 0x45, 0x2a, 0x6d, 0x65, 0x73, 0x89, 0x53, 0xad, 0x5e, 0x1d, + 0x86, 0x0d, 0x8a, 0x36, 0x81, 0xec, 0xb1, 0x44, 0x37, 0xa1, 0xd4, 0x68, 0x7a, 0xc4, 0x8f, 0xab, + 0xb5, 0x5e, 0x31, 0x98, 0x96, 0x05, 0x8e, 0x98, 0x1c, 0x11, 0xbe, 0x9a, 0x97, 0x61, 0x45, 0xc1, + 0xfe, 0x95, 0x02, 0xcc, 0xf7, 0x89, 0x85, 0x9e, 0x52, 0xe5, 0x5b, 0x03, 0xa9, 0xf2, 0x17, 0x65, + 0xe6, 0xd4, 0xf5, 0x94, 0xca, 0x22, 0x95, 0x15, 0x35, 0x51, 0x5c, 0xa4, 0xf1, 0x07, 0x36, 0xad, + 0xd6, 0x5f, 0x03, 0x86, 0xfa, 0x3a, 0x07, 0x18, 0xaf, 0x80, 0xc3, 0x83, 0xdf, 0x93, 0x72, 0x5f, + 0x74, 0xec, 0x2f, 0x17, 0xe0, 0x8c, 0x1a, 0xc2, 0xaf, 0xdf, 0x81, 0xbb, 0xdd, 0x3d, 0x70, 0xc7, + 0xf0, 0x1e, 0x66, 0xdf, 0x82, 0x11, 0x1e, 0x54, 0x6a, 0x00, 0xf9, 0xec, 0x49, 0x33, 0xfe, 0xa2, + 0x12, 0x09, 0x8c, 0x18, 0x8c, 0xdf, 0x6d, 0xc1, 0xd4, 0xc6, 0x72, 0xad, 0x1e, 0x34, 0x76, 0x49, + 0xbc, 0xc8, 0xe5, 0x69, 0x2c, 0x64, 0x2d, 0xeb, 0x21, 0x65, 0xa8, 0x2c, 0xe9, 0xec, 0x12, 0x0c, + 0xed, 0x04, 0x51, 0x9c, 0x7e, 0x2c, 0xbf, 0x1e, 0x44, 0x31, 0x66, 0x10, 0xfb, 0x77, 0x2c, 0x18, + 0x66, 0xb9, 0xc2, 0xfb, 0x65, 0xab, 0x1f, 0xe4, 0xbb, 0xd0, 0xcb, 0x30, 0x42, 0xb6, 0xb6, 0x48, + 0x23, 0x16, 0xb3, 0x2a, 0xbd, 0x9b, 0x47, 0x56, 0x58, 0x29, 0x15, 0x30, 0x58, 0x63, 0xfc, 0x2f, + 0x16, 0xc8, 0xe8, 0x2e, 0x94, 0x63, 0xaf, 0x45, 0x16, 0x5d, 0x57, 0x3c, 0x37, 0x3e, 0x84, 0x87, + 0xf6, 0x86, 0x24, 0x80, 0x13, 0x5a, 0xf6, 0x97, 0x0a, 0x00, 0x49, 0xb4, 0x8f, 0x7e, 0x9f, 0xb8, + 0xd4, 0xf5, 0x10, 0x75, 0x39, 0xe3, 0x21, 0x0a, 0x25, 0x04, 0x33, 0x5e, 0xa1, 0xd4, 0x30, 0x15, + 0x07, 0x1a, 0xa6, 0xa1, 0xa3, 0x0c, 0xd3, 0x32, 0xcc, 0x24, 0xd1, 0x4a, 0xcc, 0x60, 0x4d, 0xec, + 0x0e, 0xb5, 0x91, 0x06, 0xe2, 0x6e, 0x7c, 0x9b, 0xc0, 0x25, 0x15, 0xb4, 0x41, 0x9c, 0x35, 0xcc, + 0x9a, 0x55, 0x7f, 0xd8, 0xeb, 0x33, 0x4e, 0xc9, 0x4b, 0x5b, 0x21, 0xf7, 0xa5, 0xed, 0x47, 0x2d, + 0x38, 0x9d, 0x6e, 0x87, 0xb9, 0x17, 0x7e, 0xd1, 0x82, 0x33, 0xec, 0xbd, 0x91, 0xb5, 0xda, 0xfd, + 0xba, 0xf9, 0x52, 0xcf, 0x40, 0x14, 0x39, 0x3d, 0x4e, 0xdc, 0xe8, 0xd7, 0xb2, 0x48, 0xe3, 0xec, + 0x16, 0xed, 0xff, 0x58, 0x80, 0xd9, 0xbc, 0x08, 0x16, 0xcc, 0xd8, 0xdd, 0xb9, 0x5f, 0xdf, 0x25, + 0xf7, 0x84, 0x49, 0x71, 0x62, 0xec, 0xce, 0x8b, 0xb1, 0x84, 0xa7, 0xc3, 0x5b, 0x17, 0x06, 0x0b, + 0x6f, 0x8d, 0x76, 0x60, 0xe6, 0xde, 0x0e, 0xf1, 0x6f, 0xfb, 0x91, 0x13, 0x7b, 0xd1, 0x96, 0xc7, + 0x1e, 0x0a, 0xf9, 0xba, 0xf9, 0x98, 0x34, 0xfc, 0xbd, 0x9b, 0x46, 0x38, 0x3c, 0x98, 0xbf, 0x60, + 0x14, 0x24, 0x5d, 0xe6, 0x8c, 0x04, 0x77, 0x13, 0xed, 0x8e, 0x0e, 0x3e, 0xf4, 0x08, 0xa3, 0x83, + 0xdb, 0x5f, 0xb4, 0xe0, 0x5c, 0x6e, 0xf6, 0x3e, 0x74, 0x05, 0x4a, 0x4e, 0xdb, 0xe3, 0xba, 0x56, + 0xc1, 0x46, 0x99, 0xce, 0xa0, 0x56, 0xe5, 0x9a, 0x56, 0x05, 0x55, 0x59, 0x85, 0x0b, 0xb9, 0x59, + 0x85, 0xfb, 0x26, 0x09, 0xb6, 0xbf, 0xcb, 0x02, 0xe1, 0xa8, 0x37, 0x00, 0xef, 0xfe, 0xb4, 0x4c, + 0xca, 0x6e, 0x64, 0x10, 0xb9, 0x94, 0xef, 0xb9, 0x28, 0xf2, 0x86, 0x28, 0x59, 0xc9, 0xc8, 0x16, + 0x62, 0xd0, 0xb2, 0x5d, 0x10, 0xd0, 0x0a, 0x61, 0x9a, 0xca, 0xfe, 0xbd, 0x79, 0x01, 0xc0, 0x65, + 0xb8, 0x5a, 0x6a, 0x66, 0x75, 0x32, 0x57, 0x14, 0x04, 0x6b, 0x58, 0xf6, 0xbf, 0x2b, 0xc0, 0x98, + 0xcc, 0x58, 0xd1, 0xf1, 0x07, 0xd1, 0x27, 0x1c, 0x29, 0x85, 0x1d, 0xcb, 0x65, 0x4e, 0x09, 0xd7, + 0x12, 0x35, 0x4c, 0x92, 0xcb, 0x5c, 0x02, 0x70, 0x82, 0x43, 0x77, 0x51, 0xd4, 0xd9, 0x64, 0xe8, + 0x29, 0xb7, 0xb2, 0x3a, 0x2f, 0xc6, 0x12, 0x8e, 0x3e, 0x09, 0xd3, 0xbc, 0x5e, 0x18, 0xb4, 0x9d, + 0x6d, 0xae, 0xc4, 0x1e, 0x56, 0xfe, 0xe0, 0xd3, 0x6b, 0x29, 0xd8, 0xe1, 0xc1, 0xfc, 0xe9, 0x74, + 0x19, 0x7b, 0x9d, 0xe9, 0xa2, 0xc2, 0xcc, 0x43, 0x78, 0x23, 0x74, 0xf7, 0x77, 0x59, 0x95, 0x24, + 0x20, 0xac, 0xe3, 0xd9, 0x9f, 0x03, 0xd4, 0x9d, 0xbb, 0x03, 0xbd, 0xc1, 0x6d, 0x02, 0xbd, 0x90, + 0xb8, 0xbd, 0x5e, 0x6b, 0x74, 0xaf, 0x67, 0xe9, 0x11, 0xc2, 0x6b, 0x61, 0x55, 0xdf, 0xfe, 0xab, + 0x45, 0x98, 0x4e, 0xfb, 0xc0, 0xa2, 0xeb, 0x30, 0xc2, 0x45, 0x0f, 0x41, 0xbe, 0x87, 0x31, 0x80, + 0xe6, 0x39, 0xcb, 0x98, 0xb0, 0x90, 0x5e, 0x44, 0x7d, 0xf4, 0x16, 0x8c, 0xb9, 0xc1, 0x3d, 0xff, + 0x9e, 0x13, 0xba, 0x8b, 0xb5, 0xaa, 0x58, 0xce, 0x99, 0xb7, 0xa5, 0x4a, 0x82, 0xa6, 0x7b, 0xe3, + 0xb2, 0x87, 0xaf, 0x04, 0x84, 0x75, 0x72, 0x68, 0x83, 0x85, 0x1a, 0xde, 0xf2, 0xb6, 0xd7, 0x9c, + 0x76, 0x2f, 0x03, 0xf1, 0x65, 0x89, 0xa4, 0x51, 0x9e, 0x10, 0xf1, 0x88, 0x39, 0x00, 0x27, 0x84, + 0xd0, 0xb7, 0xc0, 0xa9, 0x28, 0x47, 0x27, 0x9b, 0x97, 0xca, 0xa9, 0x97, 0x9a, 0x72, 0xe9, 0x31, + 0x7a, 0x8f, 0xcd, 0xd2, 0xde, 0x66, 0x35, 0x63, 0xff, 0xea, 0x29, 0x30, 0x36, 0xb1, 0x91, 0xd9, + 0xcf, 0x3a, 0xa6, 0xcc, 0x7e, 0x18, 0x4a, 0xa4, 0xd5, 0x8e, 0xf7, 0x2b, 0x5e, 0xd8, 0x2b, 0x35, + 0xec, 0x8a, 0xc0, 0xe9, 0xa6, 0x29, 0x21, 0x58, 0xd1, 0xc9, 0x4e, 0xbf, 0x58, 0xfc, 0x1a, 0xa6, + 0x5f, 0x1c, 0x3a, 0xc1, 0xf4, 0x8b, 0xeb, 0x30, 0xba, 0xed, 0xc5, 0x98, 0xb4, 0x03, 0x21, 0xf4, + 0x67, 0xae, 0xc3, 0x6b, 0x1c, 0xa5, 0x3b, 0xd1, 0x97, 0x00, 0x60, 0x49, 0x04, 0xbd, 0xa1, 0x76, + 0xe0, 0x48, 0xfe, 0x9d, 0xb9, 0xfb, 0xd5, 0x3a, 0x73, 0x0f, 0x8a, 0x24, 0x8b, 0xa3, 0x0f, 0x9b, + 0x64, 0x71, 0x55, 0xa6, 0x46, 0x2c, 0xe5, 0x7b, 0x73, 0xb0, 0xcc, 0x87, 0x7d, 0x12, 0x22, 0xde, + 0xd1, 0xd3, 0x49, 0x96, 0xf3, 0x39, 0x81, 0xca, 0x14, 0x39, 0x60, 0x12, 0xc9, 0xef, 0xb2, 0xe0, + 0x4c, 0x3b, 0x2b, 0xb3, 0xaa, 0x78, 0xe0, 0x7d, 0x79, 0xe0, 0xd4, 0xb1, 0x46, 0x83, 0x4c, 0x51, + 0x93, 0x89, 0x86, 0xb3, 0x9b, 0xa3, 0x03, 0x1d, 0x6e, 0xba, 0x22, 0x0b, 0xe2, 0x93, 0x39, 0xd9, + 0x28, 0x7b, 0xe4, 0xa0, 0xdc, 0xc8, 0xc8, 0x7c, 0xf8, 0xc1, 0xbc, 0xcc, 0x87, 0x03, 0xe7, 0x3b, + 0x7c, 0x43, 0xe5, 0xa1, 0x9c, 0xc8, 0x5f, 0x4a, 0x3c, 0xcb, 0x64, 0xdf, 0xec, 0x93, 0x6f, 0xa8, + 0xec, 0x93, 0x3d, 0xe2, 0x54, 0xf2, 0xdc, 0x92, 0x7d, 0x73, 0x4e, 0x6a, 0x79, 0x23, 0xa7, 0x8e, + 0x27, 0x6f, 0xa4, 0x71, 0xd4, 0xf0, 0xd4, 0x85, 0xcf, 0xf4, 0x39, 0x6a, 0x0c, 0xba, 0xbd, 0x0f, + 0x1b, 0x9e, 0x23, 0x73, 0xe6, 0xa1, 0x72, 0x64, 0xde, 0xd1, 0x73, 0x4e, 0xa2, 0x3e, 0x49, 0x15, + 0x29, 0xd2, 0x80, 0x99, 0x26, 0xef, 0xe8, 0x07, 0xe0, 0xa9, 0x7c, 0xba, 0xea, 0x9c, 0xeb, 0xa6, + 0x9b, 0x79, 0x04, 0x76, 0x65, 0xb0, 0x3c, 0x7d, 0x32, 0x19, 0x2c, 0xcf, 0x1c, 0x7b, 0x06, 0xcb, + 0xb3, 0x27, 0x90, 0xc1, 0xf2, 0xb1, 0x13, 0xcc, 0x60, 0x79, 0x87, 0x59, 0x45, 0xf0, 0x70, 0x27, + 0x22, 0xae, 0x66, 0x76, 0x0c, 0xc7, 0xac, 0x98, 0x28, 0xfc, 0xe3, 0x14, 0x08, 0x27, 0xa4, 0x32, + 0x32, 0x63, 0xce, 0x3e, 0x82, 0xcc, 0x98, 0xeb, 0x49, 0x66, 0xcc, 0x73, 0xf9, 0x53, 0x9d, 0x61, + 0xba, 0x9e, 0x93, 0x0f, 0xf3, 0x8e, 0x9e, 0xc7, 0xf2, 0xf1, 0x1e, 0xaa, 0xf8, 0x2c, 0xc5, 0x63, + 0x8f, 0xec, 0x95, 0xaf, 0xf3, 0xec, 0x95, 0xe7, 0xf3, 0x39, 0x79, 0xfa, 0xb8, 0x33, 0x73, 0x56, + 0x7e, 0x4f, 0x01, 0x2e, 0xf6, 0xde, 0x17, 0x89, 0xd6, 0xb3, 0x96, 0xbc, 0x08, 0xa6, 0xb4, 0x9e, + 0xfc, 0x6e, 0x95, 0x60, 0x0d, 0x1c, 0x09, 0xeb, 0x1a, 0xcc, 0x28, 0xdb, 0xf4, 0xa6, 0xd7, 0xd8, + 0xd7, 0xd2, 0xf4, 0x2b, 0x7f, 0xde, 0x7a, 0x1a, 0x01, 0x77, 0xd7, 0x41, 0x8b, 0x30, 0x65, 0x14, + 0x56, 0x2b, 0xe2, 0x0e, 0xa5, 0xd4, 0xac, 0x75, 0x13, 0x8c, 0xd3, 0xf8, 0xf6, 0x4f, 0x5a, 0xf0, + 0x58, 0x4e, 0x72, 0xa8, 0x81, 0x03, 0x3d, 0x6d, 0xc1, 0x54, 0xdb, 0xac, 0xda, 0x27, 0x1e, 0x9c, + 0x91, 0x82, 0x4a, 0xf5, 0x35, 0x05, 0xc0, 0x69, 0xa2, 0xf6, 0x9f, 0x5a, 0x70, 0xa1, 0xa7, 0xe5, + 0x17, 0xc2, 0x70, 0x76, 0xbb, 0x15, 0x39, 0xcb, 0x21, 0x71, 0x89, 0x1f, 0x7b, 0x4e, 0xb3, 0xde, + 0x26, 0x0d, 0x4d, 0x6f, 0xcd, 0x4c, 0xa8, 0xae, 0xad, 0xd5, 0x17, 0xbb, 0x31, 0x70, 0x4e, 0x4d, + 0xb4, 0x0a, 0xa8, 0x1b, 0x22, 0x66, 0x98, 0xc5, 0x8c, 0xed, 0xa6, 0x87, 0x33, 0x6a, 0xa0, 0x57, + 0x60, 0x42, 0x59, 0x94, 0x69, 0x33, 0xce, 0x18, 0x30, 0xd6, 0x01, 0xd8, 0xc4, 0x5b, 0xba, 0xf2, + 0xeb, 0xbf, 0x77, 0xf1, 0x03, 0xbf, 0xf9, 0x7b, 0x17, 0x3f, 0xf0, 0xdb, 0xbf, 0x77, 0xf1, 0x03, + 0xdf, 0xf6, 0xe0, 0xa2, 0xf5, 0xeb, 0x0f, 0x2e, 0x5a, 0xbf, 0xf9, 0xe0, 0xa2, 0xf5, 0xdb, 0x0f, + 0x2e, 0x5a, 0xbf, 0xfb, 0xe0, 0xa2, 0xf5, 0xa5, 0xdf, 0xbf, 0xf8, 0x81, 0x4f, 0x17, 0xf6, 0x9e, + 0xff, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x5c, 0x2b, 0xc8, 0x61, 0xd8, 0xfd, 0x00, 0x00, } func (m *AWSElasticBlockStoreVolumeSource) Marshal() (dAtA []byte, err error) { @@ -14521,6 +14523,13 @@ func (m *PodSecurityContext) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.FSGroupChangePolicy != nil { + i -= len(*m.FSGroupChangePolicy) + copy(dAtA[i:], *m.FSGroupChangePolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.FSGroupChangePolicy))) + i-- + dAtA[i] = 0x4a + } if m.WindowsOptions != nil { { size, err := m.WindowsOptions.MarshalToSizedBuffer(dAtA[:i]) @@ -21922,6 +21931,10 @@ func (m *PodSecurityContext) Size() (n int) { l = m.WindowsOptions.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.FSGroupChangePolicy != nil { + l = len(*m.FSGroupChangePolicy) + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -25683,6 +25696,7 @@ func (this *PodSecurityContext) String() string { `RunAsGroup:` + valueToStringGenerated(this.RunAsGroup) + `,`, `Sysctls:` + repeatedStringForSysctls + `,`, `WindowsOptions:` + strings.Replace(this.WindowsOptions.String(), "WindowsSecurityContextOptions", "WindowsSecurityContextOptions", 1) + `,`, + `FSGroupChangePolicy:` + valueToStringGenerated(this.FSGroupChangePolicy) + `,`, `}`, }, "") return s @@ -51825,6 +51839,39 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSGroupChangePolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := PodFSGroupChangePolicy(dAtA[iNdEx:postIndex]) + m.FSGroupChangePolicy = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/vendor/k8s.io/api/core/v1/generated.proto b/vendor/k8s.io/api/core/v1/generated.proto index 16c21d180..d1cd8ebb4 100644 --- a/vendor/k8s.io/api/core/v1/generated.proto +++ b/vendor/k8s.io/api/core/v1/generated.proto @@ -689,7 +689,6 @@ message Container { repeated VolumeMount volumeMounts = 9; // volumeDevices is the list of block devices to be used by the container. - // This is a beta feature. // +patchMergeKey=devicePath // +patchStrategy=merge // +optional @@ -1276,7 +1275,6 @@ message EphemeralContainerCommon { repeated VolumeMount volumeMounts = 9; // volumeDevices is the list of block devices to be used by the container. - // This is a beta feature. // +patchMergeKey=devicePath // +patchStrategy=merge // +optional @@ -2636,15 +2634,18 @@ message PersistentVolumeClaimSpec { // volumeMode defines what type of volume is required by the claim. // Value of Filesystem is implied when not included in claim spec. - // This is a beta feature. // +optional optional string volumeMode = 6; - // This field requires the VolumeSnapshotDataSource alpha feature gate to be - // enabled and currently VolumeSnapshot is the only supported data source. - // If the provisioner can support VolumeSnapshot data source, it will create - // a new volume and data will be restored to the volume at the same time. - // If the provisioner does not support VolumeSnapshot data source, volume will + // This field can be used to specify either: + // * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot - Beta) + // * An existing PVC (PersistentVolumeClaim) + // * An existing custom resource/object that implements data population (Alpha) + // In order to use VolumeSnapshot object types, the appropriate feature gate + // must be enabled (VolumeSnapshotDataSource or AnyVolumeDataSource) + // If the provisioner or an external controller can support the specified data source, + // it will create a new volume based on the contents of the specified data source. + // If the specified data source is not supported, the volume will // not be created and the failure will be reported as an event. // In the future, we plan to support more data source types and the behavior // of the provisioner may change. @@ -2852,7 +2853,6 @@ message PersistentVolumeSpec { // volumeMode defines if a volume is intended to be used with a formatted filesystem // or to remain in raw block state. Value of Filesystem is implied when not included in spec. - // This is a beta feature. // +optional optional string volumeMode = 8; @@ -3278,6 +3278,15 @@ message PodSecurityContext { // sysctls (by the container runtime) might fail to launch. // +optional repeated Sysctl sysctls = 7; + + // fsGroupChangePolicy defines behavior of changing ownership and permission of the volume + // before being exposed inside Pod. This field will only apply to + // volume types which support fsGroup based ownership(and permissions). + // It will have no effect on ephemeral volume types such as: secret, configmaps + // and emptydir. + // Valid values are "OnRootMismatch" and "Always". If not specified defaults to "Always". + // +optional + optional string fsGroupChangePolicy = 9; } // Describes the class of pods that should avoid this node. @@ -4912,7 +4921,7 @@ message Taint { // Required. The taint key to be applied to a node. optional string key = 1; - // Required. The taint value corresponding to the taint key. + // The taint value corresponding to the taint key. // +optional optional string value = 2; @@ -5304,14 +5313,12 @@ message WeightedPodAffinityTerm { // WindowsSecurityContextOptions contain Windows-specific options and credentials. message WindowsSecurityContextOptions { // GMSACredentialSpecName is the name of the GMSA credential spec to use. - // This field is alpha-level and is only honored by servers that enable the WindowsGMSA feature flag. // +optional optional string gmsaCredentialSpecName = 1; // GMSACredentialSpec is where the GMSA admission webhook // (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the // GMSA credential spec named by the GMSACredentialSpecName field. - // This field is alpha-level and is only honored by servers that enable the WindowsGMSA feature flag. // +optional optional string gmsaCredentialSpec = 2; diff --git a/vendor/k8s.io/api/core/v1/types.go b/vendor/k8s.io/api/core/v1/types.go index ff9f94a0b..b61a86aba 100644 --- a/vendor/k8s.io/api/core/v1/types.go +++ b/vendor/k8s.io/api/core/v1/types.go @@ -331,7 +331,6 @@ type PersistentVolumeSpec struct { MountOptions []string `json:"mountOptions,omitempty" protobuf:"bytes,7,opt,name=mountOptions"` // volumeMode defines if a volume is intended to be used with a formatted filesystem // or to remain in raw block state. Value of Filesystem is implied when not included in spec. - // This is a beta feature. // +optional VolumeMode *PersistentVolumeMode `json:"volumeMode,omitempty" protobuf:"bytes,8,opt,name=volumeMode,casttype=PersistentVolumeMode"` // NodeAffinity defines constraints that limit what nodes this volume can be accessed from. @@ -460,14 +459,17 @@ type PersistentVolumeClaimSpec struct { StorageClassName *string `json:"storageClassName,omitempty" protobuf:"bytes,5,opt,name=storageClassName"` // volumeMode defines what type of volume is required by the claim. // Value of Filesystem is implied when not included in claim spec. - // This is a beta feature. // +optional VolumeMode *PersistentVolumeMode `json:"volumeMode,omitempty" protobuf:"bytes,6,opt,name=volumeMode,casttype=PersistentVolumeMode"` - // This field requires the VolumeSnapshotDataSource alpha feature gate to be - // enabled and currently VolumeSnapshot is the only supported data source. - // If the provisioner can support VolumeSnapshot data source, it will create - // a new volume and data will be restored to the volume at the same time. - // If the provisioner does not support VolumeSnapshot data source, volume will + // This field can be used to specify either: + // * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot - Beta) + // * An existing PVC (PersistentVolumeClaim) + // * An existing custom resource/object that implements data population (Alpha) + // In order to use VolumeSnapshot object types, the appropriate feature gate + // must be enabled (VolumeSnapshotDataSource or AnyVolumeDataSource) + // If the provisioner or an external controller can support the specified data source, + // it will create a new volume based on the contents of the specified data source. + // If the specified data source is not supported, the volume will // not be created and the failure will be reported as an event. // In the future, we plan to support more data source types and the behavior // of the provisioner may change. @@ -2181,7 +2183,6 @@ type Container struct { // +patchStrategy=merge VolumeMounts []VolumeMount `json:"volumeMounts,omitempty" patchStrategy:"merge" patchMergeKey:"mountPath" protobuf:"bytes,9,rep,name=volumeMounts"` // volumeDevices is the list of block devices to be used by the container. - // This is a beta feature. // +patchMergeKey=devicePath // +patchStrategy=merge // +optional @@ -2751,7 +2752,7 @@ type PreferredSchedulingTerm struct { type Taint struct { // Required. The taint key to be applied to a node. Key string `json:"key" protobuf:"bytes,1,opt,name=key"` - // Required. The taint value corresponding to the taint key. + // The taint value corresponding to the taint key. // +optional Value string `json:"value,omitempty" protobuf:"bytes,2,opt,name=value"` // Required. The effect of the taint on pods @@ -3125,6 +3126,22 @@ type HostAlias struct { Hostnames []string `json:"hostnames,omitempty" protobuf:"bytes,2,rep,name=hostnames"` } +// PodFSGroupChangePolicy holds policies that will be used for applying fsGroup to a volume +// when volume is mounted. +type PodFSGroupChangePolicy string + +const ( + // FSGroupChangeOnRootMismatch indicates that volume's ownership and permissions will be changed + // only when permission and ownership of root directory does not match with expected + // permissions on the volume. This can help shorten the time it takes to change + // ownership and permissions of a volume. + FSGroupChangeOnRootMismatch PodFSGroupChangePolicy = "OnRootMismatch" + // FSGroupChangeAlways indicates that volume's ownership and permissions + // should always be changed whenever volume is mounted inside a Pod. This the default + // behavior. + FSGroupChangeAlways PodFSGroupChangePolicy = "Always" +) + // PodSecurityContext holds pod-level security attributes and common container settings. // Some fields are also present in container.securityContext. Field values of // container.securityContext take precedence over field values of PodSecurityContext. @@ -3183,6 +3200,14 @@ type PodSecurityContext struct { // sysctls (by the container runtime) might fail to launch. // +optional Sysctls []Sysctl `json:"sysctls,omitempty" protobuf:"bytes,7,rep,name=sysctls"` + // fsGroupChangePolicy defines behavior of changing ownership and permission of the volume + // before being exposed inside Pod. This field will only apply to + // volume types which support fsGroup based ownership(and permissions). + // It will have no effect on ephemeral volume types such as: secret, configmaps + // and emptydir. + // Valid values are "OnRootMismatch" and "Always". If not specified defaults to "Always". + // +optional + FSGroupChangePolicy *PodFSGroupChangePolicy `json:"fsGroupChangePolicy,omitempty" protobuf:"bytes,9,opt,name=fsGroupChangePolicy"` } // PodQOSClass defines the supported qos classes of Pods. @@ -3298,7 +3323,6 @@ type EphemeralContainerCommon struct { // +patchStrategy=merge VolumeMounts []VolumeMount `json:"volumeMounts,omitempty" patchStrategy:"merge" patchMergeKey:"mountPath" protobuf:"bytes,9,rep,name=volumeMounts"` // volumeDevices is the list of block devices to be used by the container. - // This is a beta feature. // +patchMergeKey=devicePath // +patchStrategy=merge // +optional @@ -5843,14 +5867,12 @@ type SELinuxOptions struct { // WindowsSecurityContextOptions contain Windows-specific options and credentials. type WindowsSecurityContextOptions struct { // GMSACredentialSpecName is the name of the GMSA credential spec to use. - // This field is alpha-level and is only honored by servers that enable the WindowsGMSA feature flag. // +optional GMSACredentialSpecName *string `json:"gmsaCredentialSpecName,omitempty" protobuf:"bytes,1,opt,name=gmsaCredentialSpecName"` // GMSACredentialSpec is where the GMSA admission webhook // (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the // GMSA credential spec named by the GMSACredentialSpecName field. - // This field is alpha-level and is only honored by servers that enable the WindowsGMSA feature flag. // +optional GMSACredentialSpec *string `json:"gmsaCredentialSpec,omitempty" protobuf:"bytes,2,opt,name=gmsaCredentialSpec"` diff --git a/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go index 010c4b88b..331451fe2 100644 --- a/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go @@ -336,7 +336,7 @@ var map_Container = map[string]string{ "env": "List of environment variables to set in the container. Cannot be updated.", "resources": "Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", "volumeMounts": "Pod volumes to mount into the container's filesystem. Cannot be updated.", - "volumeDevices": "volumeDevices is the list of block devices to be used by the container. This is a beta feature.", + "volumeDevices": "volumeDevices is the list of block devices to be used by the container.", "livenessProbe": "Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", "readinessProbe": "Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", "startupProbe": "StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. If this probe fails, the Pod will be restarted, just as if the livenessProbe failed. This can be used to provide different probe parameters at the beginning of a Pod's lifecycle, when it might take a long time to load data or warm a cache, than during steady-state operation. This cannot be updated. This is a beta feature enabled by the StartupProbe feature flag. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", @@ -599,7 +599,7 @@ var map_EphemeralContainerCommon = map[string]string{ "env": "List of environment variables to set in the container. Cannot be updated.", "resources": "Resources are not allowed for ephemeral containers. Ephemeral containers use spare resources already allocated to the pod.", "volumeMounts": "Pod volumes to mount into the container's filesystem. Cannot be updated.", - "volumeDevices": "volumeDevices is the list of block devices to be used by the container. This is a beta feature.", + "volumeDevices": "volumeDevices is the list of block devices to be used by the container.", "livenessProbe": "Probes are not allowed for ephemeral containers.", "readinessProbe": "Probes are not allowed for ephemeral containers.", "startupProbe": "Probes are not allowed for ephemeral containers.", @@ -1300,8 +1300,8 @@ var map_PersistentVolumeClaimSpec = map[string]string{ "resources": "Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources", "volumeName": "VolumeName is the binding reference to the PersistentVolume backing this claim.", "storageClassName": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", - "volumeMode": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec. This is a beta feature.", - "dataSource": "This field requires the VolumeSnapshotDataSource alpha feature gate to be enabled and currently VolumeSnapshot is the only supported data source. If the provisioner can support VolumeSnapshot data source, it will create a new volume and data will be restored to the volume at the same time. If the provisioner does not support VolumeSnapshot data source, volume will not be created and the failure will be reported as an event. In the future, we plan to support more data source types and the behavior of the provisioner may change.", + "volumeMode": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "dataSource": "This field can be used to specify either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot - Beta) * An existing PVC (PersistentVolumeClaim) * An existing custom resource/object that implements data population (Alpha) In order to use VolumeSnapshot object types, the appropriate feature gate must be enabled (VolumeSnapshotDataSource or AnyVolumeDataSource) If the provisioner or an external controller can support the specified data source, it will create a new volume based on the contents of the specified data source. If the specified data source is not supported, the volume will not be created and the failure will be reported as an event. In the future, we plan to support more data source types and the behavior of the provisioner may change.", } func (PersistentVolumeClaimSpec) SwaggerDoc() map[string]string { @@ -1378,7 +1378,7 @@ var map_PersistentVolumeSpec = map[string]string{ "persistentVolumeReclaimPolicy": "What happens to a persistent volume when released from its claim. Valid options are Retain (default for manually created PersistentVolumes), Delete (default for dynamically provisioned PersistentVolumes), and Recycle (deprecated). Recycle must be supported by the volume plugin underlying this PersistentVolume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming", "storageClassName": "Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.", "mountOptions": "A list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options", - "volumeMode": "volumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec. This is a beta feature.", + "volumeMode": "volumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec.", "nodeAffinity": "NodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume.", } @@ -1574,15 +1574,16 @@ func (PodReadinessGate) SwaggerDoc() map[string]string { } var map_PodSecurityContext = map[string]string{ - "": "PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.", - "seLinuxOptions": "The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", - "windowsOptions": "The Windows specific settings applied to all containers. If unspecified, the options within a container's SecurityContext will be used. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", - "runAsUser": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", - "runAsGroup": "The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", - "runAsNonRoot": "Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", - "supplementalGroups": "A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container.", - "fsGroup": "A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n\n1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw ", - "sysctls": "Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.", + "": "PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.", + "seLinuxOptions": "The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", + "windowsOptions": "The Windows specific settings applied to all containers. If unspecified, the options within a container's SecurityContext will be used. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", + "runAsUser": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", + "runAsGroup": "The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", + "runAsNonRoot": "Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", + "supplementalGroups": "A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container.", + "fsGroup": "A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n\n1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw ", + "sysctls": "Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.", + "fsGroupChangePolicy": "fsGroupChangePolicy defines behavior of changing ownership and permission of the volume before being exposed inside Pod. This field will only apply to volume types which support fsGroup based ownership(and permissions). It will have no effect on ephemeral volume types such as: secret, configmaps and emptydir. Valid values are \"OnRootMismatch\" and \"Always\". If not specified defaults to \"Always\".", } func (PodSecurityContext) SwaggerDoc() map[string]string { @@ -2282,7 +2283,7 @@ func (TCPSocketAction) SwaggerDoc() map[string]string { var map_Taint = map[string]string{ "": "The node this Taint is attached to has the \"effect\" on any pod that does not tolerate the Taint.", "key": "Required. The taint key to be applied to a node.", - "value": "Required. The taint value corresponding to the taint key.", + "value": "The taint value corresponding to the taint key.", "effect": "Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute.", "timeAdded": "TimeAdded represents the time at which the taint was added. It is only written for NoExecute taints.", } @@ -2460,8 +2461,8 @@ func (WeightedPodAffinityTerm) SwaggerDoc() map[string]string { var map_WindowsSecurityContextOptions = map[string]string{ "": "WindowsSecurityContextOptions contain Windows-specific options and credentials.", - "gmsaCredentialSpecName": "GMSACredentialSpecName is the name of the GMSA credential spec to use. This field is alpha-level and is only honored by servers that enable the WindowsGMSA feature flag.", - "gmsaCredentialSpec": "GMSACredentialSpec is where the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the GMSA credential spec named by the GMSACredentialSpecName field. This field is alpha-level and is only honored by servers that enable the WindowsGMSA feature flag.", + "gmsaCredentialSpecName": "GMSACredentialSpecName is the name of the GMSA credential spec to use.", + "gmsaCredentialSpec": "GMSACredentialSpec is where the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the GMSA credential spec named by the GMSACredentialSpecName field.", "runAsUserName": "The UserName in Windows to run the entrypoint of the container process. Defaults to the user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", } diff --git a/vendor/k8s.io/api/core/v1/well_known_taints.go b/vendor/k8s.io/api/core/v1/well_known_taints.go index e39051928..e1a8f6291 100644 --- a/vendor/k8s.io/api/core/v1/well_known_taints.go +++ b/vendor/k8s.io/api/core/v1/well_known_taints.go @@ -18,38 +18,31 @@ package v1 const ( // TaintNodeNotReady will be added when node is not ready - // and feature-gate for TaintBasedEvictions flag is enabled, // and removed when node becomes ready. TaintNodeNotReady = "node.kubernetes.io/not-ready" // TaintNodeUnreachable will be added when node becomes unreachable // (corresponding to NodeReady status ConditionUnknown) - // and feature-gate for TaintBasedEvictions flag is enabled, // and removed when node becomes reachable (NodeReady status ConditionTrue). TaintNodeUnreachable = "node.kubernetes.io/unreachable" // TaintNodeUnschedulable will be added when node becomes unschedulable - // and feature-gate for TaintNodesByCondition flag is enabled, // and removed when node becomes scheduable. TaintNodeUnschedulable = "node.kubernetes.io/unschedulable" // TaintNodeMemoryPressure will be added when node has memory pressure - // and feature-gate for TaintNodesByCondition flag is enabled, // and removed when node has enough memory. TaintNodeMemoryPressure = "node.kubernetes.io/memory-pressure" // TaintNodeDiskPressure will be added when node has disk pressure - // and feature-gate for TaintNodesByCondition flag is enabled, // and removed when node has enough disk. TaintNodeDiskPressure = "node.kubernetes.io/disk-pressure" // TaintNodeNetworkUnavailable will be added when node's network is unavailable - // and feature-gate for TaintNodesByCondition flag is enabled, // and removed when network becomes ready. TaintNodeNetworkUnavailable = "node.kubernetes.io/network-unavailable" // TaintNodePIDPressure will be added when node has pid pressure - // and feature-gate for TaintNodesByCondition flag is enabled, // and removed when node has enough disk. TaintNodePIDPressure = "node.kubernetes.io/pid-pressure" ) diff --git a/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go index 58d5124ca..23d964447 100644 --- a/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go @@ -3689,6 +3689,11 @@ func (in *PodSecurityContext) DeepCopyInto(out *PodSecurityContext) { *out = make([]Sysctl, len(*in)) copy(*out, *in) } + if in.FSGroupChangePolicy != nil { + in, out := &in.FSGroupChangePolicy, &out.FSGroupChangePolicy + *out = new(PodFSGroupChangePolicy) + **out = **in + } return } diff --git a/vendor/k8s.io/api/go.mod b/vendor/k8s.io/api/go.mod index 9960247da..563613173 100644 --- a/vendor/k8s.io/api/go.mod +++ b/vendor/k8s.io/api/go.mod @@ -7,11 +7,11 @@ go 1.13 require ( github.com/gogo/protobuf v1.3.1 github.com/stretchr/testify v1.4.0 - k8s.io/apimachinery v0.18.0-beta.1 + k8s.io/apimachinery v0.18.0 ) replace ( golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13 golang.org/x/tools => golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 // pinned to release-branch.go1.13 - k8s.io/apimachinery => k8s.io/apimachinery v0.18.0-beta.1 + k8s.io/apimachinery => k8s.io/apimachinery v0.18.0 ) diff --git a/vendor/k8s.io/apimachinery/go.mod b/vendor/k8s.io/apimachinery/go.mod index c0380357f..99c25891b 100644 --- a/vendor/k8s.io/apimachinery/go.mod +++ b/vendor/k8s.io/apimachinery/go.mod @@ -33,7 +33,7 @@ require ( gopkg.in/yaml.v2 v2.2.8 k8s.io/klog v1.0.0 k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c - sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200207200219-5e70324e7c1c + sigs.k8s.io/structured-merge-diff/v3 v3.0.0 sigs.k8s.io/yaml v1.2.0 ) diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go index ec016fd3c..ad989ad75 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/helpers.go @@ -252,7 +252,9 @@ func ResetObjectMetaForStatus(meta, existingMeta Object) { meta.SetAnnotations(existingMeta.GetAnnotations()) meta.SetFinalizers(existingMeta.GetFinalizers()) meta.SetOwnerReferences(existingMeta.GetOwnerReferences()) - meta.SetManagedFields(existingMeta.GetManagedFields()) + // managedFields must be preserved since it's been modified to + // track changed fields in the status update. + //meta.SetManagedFields(existingMeta.GetManagedFields()) } // MarshalJSON implements json.Marshaler diff --git a/vendor/k8s.io/apimachinery/pkg/util/errors/errors.go b/vendor/k8s.io/apimachinery/pkg/util/errors/errors.go index 62a73f34e..5bafc218e 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/errors/errors.go +++ b/vendor/k8s.io/apimachinery/pkg/util/errors/errors.go @@ -28,9 +28,14 @@ type MessageCountMap map[string]int // Aggregate represents an object that contains multiple errors, but does not // necessarily have singular semantic meaning. +// The aggregate can be used with `errors.Is()` to check for the occurrence of +// a specific error type. +// Errors.As() is not supported, because the caller presumably cares about a +// specific error of potentially multiple that match the given type. type Aggregate interface { error Errors() []error + Is(error) bool } // NewAggregate converts a slice of errors into an Aggregate interface, which @@ -71,16 +76,17 @@ func (agg aggregate) Error() string { } seenerrs := sets.NewString() result := "" - agg.visit(func(err error) { + agg.visit(func(err error) bool { msg := err.Error() if seenerrs.Has(msg) { - return + return false } seenerrs.Insert(msg) if len(seenerrs) > 1 { result += ", " } result += msg + return false }) if len(seenerrs) == 1 { return result @@ -88,19 +94,33 @@ func (agg aggregate) Error() string { return "[" + result + "]" } -func (agg aggregate) visit(f func(err error)) { +func (agg aggregate) Is(target error) bool { + return agg.visit(func(err error) bool { + return errors.Is(err, target) + }) +} + +func (agg aggregate) visit(f func(err error) bool) bool { for _, err := range agg { switch err := err.(type) { case aggregate: - err.visit(f) + if match := err.visit(f); match { + return match + } case Aggregate: for _, nestedErr := range err.Errors() { - f(nestedErr) + if match := f(nestedErr); match { + return match + } } default: - f(err) + if match := f(err); match { + return match + } } } + + return false } // Errors is part of the Aggregate interface. diff --git a/vendor/k8s.io/apimachinery/pkg/util/net/http.go b/vendor/k8s.io/apimachinery/pkg/util/net/http.go index f9540c63b..0ba586bfe 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/net/http.go +++ b/vendor/k8s.io/apimachinery/pkg/util/net/http.go @@ -206,13 +206,17 @@ func GetHTTPClient(req *http.Request) string { return "unknown" } -// SourceIPs splits the comma separated X-Forwarded-For header or returns the X-Real-Ip header or req.RemoteAddr, -// in that order, ignoring invalid IPs. It returns nil if all of these are empty or invalid. +// SourceIPs splits the comma separated X-Forwarded-For header and joins it with +// the X-Real-Ip header and/or req.RemoteAddr, ignoring invalid IPs. +// The X-Real-Ip is omitted if it's already present in the X-Forwarded-For chain. +// The req.RemoteAddr is always the last IP in the returned list. +// It returns nil if all of these are empty or invalid. func SourceIPs(req *http.Request) []net.IP { + var srcIPs []net.IP + hdr := req.Header // First check the X-Forwarded-For header for requests via proxy. hdrForwardedFor := hdr.Get("X-Forwarded-For") - forwardedForIPs := []net.IP{} if hdrForwardedFor != "" { // X-Forwarded-For can be a csv of IPs in case of multiple proxies. // Use the first valid one. @@ -220,38 +224,49 @@ func SourceIPs(req *http.Request) []net.IP { for _, part := range parts { ip := net.ParseIP(strings.TrimSpace(part)) if ip != nil { - forwardedForIPs = append(forwardedForIPs, ip) + srcIPs = append(srcIPs, ip) } } } - if len(forwardedForIPs) > 0 { - return forwardedForIPs - } // Try the X-Real-Ip header. hdrRealIp := hdr.Get("X-Real-Ip") if hdrRealIp != "" { ip := net.ParseIP(hdrRealIp) - if ip != nil { - return []net.IP{ip} + // Only append the X-Real-Ip if it's not already contained in the X-Forwarded-For chain. + if ip != nil && !containsIP(srcIPs, ip) { + srcIPs = append(srcIPs, ip) } } - // Fallback to Remote Address in request, which will give the correct client IP when there is no proxy. + // Always include the request Remote Address as it cannot be easily spoofed. + var remoteIP net.IP // Remote Address in Go's HTTP server is in the form host:port so we need to split that first. host, _, err := net.SplitHostPort(req.RemoteAddr) if err == nil { - if remoteIP := net.ParseIP(host); remoteIP != nil { - return []net.IP{remoteIP} + remoteIP = net.ParseIP(host) + } + // Fallback if Remote Address was just IP. + if remoteIP == nil { + remoteIP = net.ParseIP(req.RemoteAddr) + } + + // Don't duplicate remote IP if it's already the last address in the chain. + if remoteIP != nil && (len(srcIPs) == 0 || !remoteIP.Equal(srcIPs[len(srcIPs)-1])) { + srcIPs = append(srcIPs, remoteIP) + } + + return srcIPs +} + +// Checks whether the given IP address is contained in the list of IPs. +func containsIP(ips []net.IP, ip net.IP) bool { + for _, v := range ips { + if v.Equal(ip) { + return true } } - - // Fallback if Remote Address was just IP. - if remoteIP := net.ParseIP(req.RemoteAddr); remoteIP != nil { - return []net.IP{remoteIP} - } - - return nil + return false } // Extracts and returns the clients IP from the given request. diff --git a/vendor/k8s.io/apimachinery/pkg/util/validation/validation.go b/vendor/k8s.io/apimachinery/pkg/util/validation/validation.go index 8e1907c2a..915231f2e 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/validation/validation.go +++ b/vendor/k8s.io/apimachinery/pkg/util/validation/validation.go @@ -109,6 +109,44 @@ func IsFullyQualifiedDomainName(fldPath *field.Path, name string) field.ErrorLis return allErrors } +// Allowed characters in an HTTP Path as defined by RFC 3986. A HTTP path may +// contain: +// * unreserved characters (alphanumeric, '-', '.', '_', '~') +// * percent-encoded octets +// * sub-delims ("!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "=") +// * a colon character (":") +const httpPathFmt string = `[A-Za-z0-9/\-._~%!$&'()*+,;=:]+` + +var httpPathRegexp = regexp.MustCompile("^" + httpPathFmt + "$") + +// IsDomainPrefixedPath checks if the given string is a domain-prefixed path +// (e.g. acme.io/foo). All characters before the first "/" must be a valid +// subdomain as defined by RFC 1123. All characters trailing the first "/" must +// be valid HTTP Path characters as defined by RFC 3986. +func IsDomainPrefixedPath(fldPath *field.Path, dpPath string) field.ErrorList { + var allErrs field.ErrorList + if len(dpPath) == 0 { + return append(allErrs, field.Required(fldPath, "")) + } + + segments := strings.SplitN(dpPath, "/", 2) + if len(segments) != 2 || len(segments[0]) == 0 || len(segments[1]) == 0 { + return append(allErrs, field.Invalid(fldPath, dpPath, "must be a domain-prefixed path (such as \"acme.io/foo\")")) + } + + host := segments[0] + for _, err := range IsDNS1123Subdomain(host) { + allErrs = append(allErrs, field.Invalid(fldPath, host, err)) + } + + path := segments[1] + if !httpPathRegexp.MatchString(path) { + return append(allErrs, field.Invalid(fldPath, path, RegexError("Invalid path", httpPathFmt))) + } + + return allErrs +} + const labelValueFmt string = "(" + qualifiedNameFmt + ")?" const labelValueErrMsg string = "a valid label must be an empty string or consist of alphanumeric characters, '-', '_' or '.', and must start and end with an alphanumeric character" diff --git a/vendor/k8s.io/apimachinery/pkg/util/wait/doc.go b/vendor/k8s.io/apimachinery/pkg/util/wait/doc.go new file mode 100644 index 000000000..3f0c968ec --- /dev/null +++ b/vendor/k8s.io/apimachinery/pkg/util/wait/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package wait provides tools for polling or listening for changes +// to a condition. +package wait // import "k8s.io/apimachinery/pkg/util/wait" diff --git a/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go b/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go new file mode 100644 index 000000000..4cb0c122c --- /dev/null +++ b/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go @@ -0,0 +1,593 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package wait + +import ( + "context" + "errors" + "math" + "math/rand" + "sync" + "time" + + "k8s.io/apimachinery/pkg/util/clock" + "k8s.io/apimachinery/pkg/util/runtime" +) + +// For any test of the style: +// ... +// <- time.After(timeout): +// t.Errorf("Timed out") +// The value for timeout should effectively be "forever." Obviously we don't want our tests to truly lock up forever, but 30s +// is long enough that it is effectively forever for the things that can slow down a run on a heavily contended machine +// (GC, seeks, etc), but not so long as to make a developer ctrl-c a test run if they do happen to break that test. +var ForeverTestTimeout = time.Second * 30 + +// NeverStop may be passed to Until to make it never stop. +var NeverStop <-chan struct{} = make(chan struct{}) + +// Group allows to start a group of goroutines and wait for their completion. +type Group struct { + wg sync.WaitGroup +} + +func (g *Group) Wait() { + g.wg.Wait() +} + +// StartWithChannel starts f in a new goroutine in the group. +// stopCh is passed to f as an argument. f should stop when stopCh is available. +func (g *Group) StartWithChannel(stopCh <-chan struct{}, f func(stopCh <-chan struct{})) { + g.Start(func() { + f(stopCh) + }) +} + +// StartWithContext starts f in a new goroutine in the group. +// ctx is passed to f as an argument. f should stop when ctx.Done() is available. +func (g *Group) StartWithContext(ctx context.Context, f func(context.Context)) { + g.Start(func() { + f(ctx) + }) +} + +// Start starts f in a new goroutine in the group. +func (g *Group) Start(f func()) { + g.wg.Add(1) + go func() { + defer g.wg.Done() + f() + }() +} + +// Forever calls f every period for ever. +// +// Forever is syntactic sugar on top of Until. +func Forever(f func(), period time.Duration) { + Until(f, period, NeverStop) +} + +// Until loops until stop channel is closed, running f every period. +// +// Until is syntactic sugar on top of JitterUntil with zero jitter factor and +// with sliding = true (which means the timer for period starts after the f +// completes). +func Until(f func(), period time.Duration, stopCh <-chan struct{}) { + JitterUntil(f, period, 0.0, true, stopCh) +} + +// UntilWithContext loops until context is done, running f every period. +// +// UntilWithContext is syntactic sugar on top of JitterUntilWithContext +// with zero jitter factor and with sliding = true (which means the timer +// for period starts after the f completes). +func UntilWithContext(ctx context.Context, f func(context.Context), period time.Duration) { + JitterUntilWithContext(ctx, f, period, 0.0, true) +} + +// NonSlidingUntil loops until stop channel is closed, running f every +// period. +// +// NonSlidingUntil is syntactic sugar on top of JitterUntil with zero jitter +// factor, with sliding = false (meaning the timer for period starts at the same +// time as the function starts). +func NonSlidingUntil(f func(), period time.Duration, stopCh <-chan struct{}) { + JitterUntil(f, period, 0.0, false, stopCh) +} + +// NonSlidingUntilWithContext loops until context is done, running f every +// period. +// +// NonSlidingUntilWithContext is syntactic sugar on top of JitterUntilWithContext +// with zero jitter factor, with sliding = false (meaning the timer for period +// starts at the same time as the function starts). +func NonSlidingUntilWithContext(ctx context.Context, f func(context.Context), period time.Duration) { + JitterUntilWithContext(ctx, f, period, 0.0, false) +} + +// JitterUntil loops until stop channel is closed, running f every period. +// +// If jitterFactor is positive, the period is jittered before every run of f. +// If jitterFactor is not positive, the period is unchanged and not jittered. +// +// If sliding is true, the period is computed after f runs. If it is false then +// period includes the runtime for f. +// +// Close stopCh to stop. f may not be invoked if stop channel is already +// closed. Pass NeverStop to if you don't want it stop. +func JitterUntil(f func(), period time.Duration, jitterFactor float64, sliding bool, stopCh <-chan struct{}) { + BackoffUntil(f, NewJitteredBackoffManager(period, jitterFactor, &clock.RealClock{}), sliding, stopCh) +} + +// BackoffUntil loops until stop channel is closed, run f every duration given by BackoffManager. +// +// If sliding is true, the period is computed after f runs. If it is false then +// period includes the runtime for f. +func BackoffUntil(f func(), backoff BackoffManager, sliding bool, stopCh <-chan struct{}) { + var t clock.Timer + for { + select { + case <-stopCh: + return + default: + } + + if !sliding { + t = backoff.Backoff() + } + + func() { + defer runtime.HandleCrash() + f() + }() + + if sliding { + t = backoff.Backoff() + } + + // NOTE: b/c there is no priority selection in golang + // it is possible for this to race, meaning we could + // trigger t.C and stopCh, and t.C select falls through. + // In order to mitigate we re-check stopCh at the beginning + // of every loop to prevent extra executions of f(). + select { + case <-stopCh: + return + case <-t.C(): + } + } +} + +// JitterUntilWithContext loops until context is done, running f every period. +// +// If jitterFactor is positive, the period is jittered before every run of f. +// If jitterFactor is not positive, the period is unchanged and not jittered. +// +// If sliding is true, the period is computed after f runs. If it is false then +// period includes the runtime for f. +// +// Cancel context to stop. f may not be invoked if context is already expired. +func JitterUntilWithContext(ctx context.Context, f func(context.Context), period time.Duration, jitterFactor float64, sliding bool) { + JitterUntil(func() { f(ctx) }, period, jitterFactor, sliding, ctx.Done()) +} + +// Jitter returns a time.Duration between duration and duration + maxFactor * +// duration. +// +// This allows clients to avoid converging on periodic behavior. If maxFactor +// is 0.0, a suggested default value will be chosen. +func Jitter(duration time.Duration, maxFactor float64) time.Duration { + if maxFactor <= 0.0 { + maxFactor = 1.0 + } + wait := duration + time.Duration(rand.Float64()*maxFactor*float64(duration)) + return wait +} + +// ErrWaitTimeout is returned when the condition exited without success. +var ErrWaitTimeout = errors.New("timed out waiting for the condition") + +// ConditionFunc returns true if the condition is satisfied, or an error +// if the loop should be aborted. +type ConditionFunc func() (done bool, err error) + +// runConditionWithCrashProtection runs a ConditionFunc with crash protection +func runConditionWithCrashProtection(condition ConditionFunc) (bool, error) { + defer runtime.HandleCrash() + return condition() +} + +// Backoff holds parameters applied to a Backoff function. +type Backoff struct { + // The initial duration. + Duration time.Duration + // Duration is multiplied by factor each iteration, if factor is not zero + // and the limits imposed by Steps and Cap have not been reached. + // Should not be negative. + // The jitter does not contribute to the updates to the duration parameter. + Factor float64 + // The sleep at each iteration is the duration plus an additional + // amount chosen uniformly at random from the interval between + // zero and `jitter*duration`. + Jitter float64 + // The remaining number of iterations in which the duration + // parameter may change (but progress can be stopped earlier by + // hitting the cap). If not positive, the duration is not + // changed. Used for exponential backoff in combination with + // Factor and Cap. + Steps int + // A limit on revised values of the duration parameter. If a + // multiplication by the factor parameter would make the duration + // exceed the cap then the duration is set to the cap and the + // steps parameter is set to zero. + Cap time.Duration +} + +// Step (1) returns an amount of time to sleep determined by the +// original Duration and Jitter and (2) mutates the provided Backoff +// to update its Steps and Duration. +func (b *Backoff) Step() time.Duration { + if b.Steps < 1 { + if b.Jitter > 0 { + return Jitter(b.Duration, b.Jitter) + } + return b.Duration + } + b.Steps-- + + duration := b.Duration + + // calculate the next step + if b.Factor != 0 { + b.Duration = time.Duration(float64(b.Duration) * b.Factor) + if b.Cap > 0 && b.Duration > b.Cap { + b.Duration = b.Cap + b.Steps = 0 + } + } + + if b.Jitter > 0 { + duration = Jitter(duration, b.Jitter) + } + return duration +} + +// contextForChannel derives a child context from a parent channel. +// +// The derived context's Done channel is closed when the returned cancel function +// is called or when the parent channel is closed, whichever happens first. +// +// Note the caller must *always* call the CancelFunc, otherwise resources may be leaked. +func contextForChannel(parentCh <-chan struct{}) (context.Context, context.CancelFunc) { + ctx, cancel := context.WithCancel(context.Background()) + + go func() { + select { + case <-parentCh: + cancel() + case <-ctx.Done(): + } + }() + return ctx, cancel +} + +// BackoffManager manages backoff with a particular scheme based on its underlying implementation. It provides +// an interface to return a timer for backoff, and caller shall backoff until Timer.C returns. If the second Backoff() +// is called before the timer from the first Backoff() call finishes, the first timer will NOT be drained. +// The BackoffManager is supposed to be called in a single-threaded environment. +type BackoffManager interface { + Backoff() clock.Timer +} + +type exponentialBackoffManagerImpl struct { + backoff *Backoff + backoffTimer clock.Timer + lastBackoffStart time.Time + initialBackoff time.Duration + backoffResetDuration time.Duration + clock clock.Clock +} + +// NewExponentialBackoffManager returns a manager for managing exponential backoff. Each backoff is jittered and +// backoff will not exceed the given max. If the backoff is not called within resetDuration, the backoff is reset. +// This backoff manager is used to reduce load during upstream unhealthiness. +func NewExponentialBackoffManager(initBackoff, maxBackoff, resetDuration time.Duration, backoffFactor, jitter float64, c clock.Clock) BackoffManager { + return &exponentialBackoffManagerImpl{ + backoff: &Backoff{ + Duration: initBackoff, + Factor: backoffFactor, + Jitter: jitter, + + // the current impl of wait.Backoff returns Backoff.Duration once steps are used up, which is not + // what we ideally need here, we set it to max int and assume we will never use up the steps + Steps: math.MaxInt32, + Cap: maxBackoff, + }, + backoffTimer: c.NewTimer(0), + initialBackoff: initBackoff, + lastBackoffStart: c.Now(), + backoffResetDuration: resetDuration, + clock: c, + } +} + +func (b *exponentialBackoffManagerImpl) getNextBackoff() time.Duration { + if b.clock.Now().Sub(b.lastBackoffStart) > b.backoffResetDuration { + b.backoff.Steps = math.MaxInt32 + b.backoff.Duration = b.initialBackoff + } + b.lastBackoffStart = b.clock.Now() + return b.backoff.Step() +} + +// Backoff implements BackoffManager.Backoff, it returns a timer so caller can block on the timer for backoff. +func (b *exponentialBackoffManagerImpl) Backoff() clock.Timer { + b.backoffTimer.Reset(b.getNextBackoff()) + return b.backoffTimer +} + +type jitteredBackoffManagerImpl struct { + clock clock.Clock + duration time.Duration + jitter float64 + backoffTimer clock.Timer +} + +// NewJitteredBackoffManager returns a BackoffManager that backoffs with given duration plus given jitter. If the jitter +// is negative, backoff will not be jittered. +func NewJitteredBackoffManager(duration time.Duration, jitter float64, c clock.Clock) BackoffManager { + return &jitteredBackoffManagerImpl{ + clock: c, + duration: duration, + jitter: jitter, + backoffTimer: c.NewTimer(0), + } +} + +func (j *jitteredBackoffManagerImpl) getNextBackoff() time.Duration { + jitteredPeriod := j.duration + if j.jitter > 0.0 { + jitteredPeriod = Jitter(j.duration, j.jitter) + } + return jitteredPeriod +} + +func (j *jitteredBackoffManagerImpl) Backoff() clock.Timer { + j.backoffTimer.Reset(j.getNextBackoff()) + return j.backoffTimer +} + +// ExponentialBackoff repeats a condition check with exponential backoff. +// +// It repeatedly checks the condition and then sleeps, using `backoff.Step()` +// to determine the length of the sleep and adjust Duration and Steps. +// Stops and returns as soon as: +// 1. the condition check returns true or an error, +// 2. `backoff.Steps` checks of the condition have been done, or +// 3. a sleep truncated by the cap on duration has been completed. +// In case (1) the returned error is what the condition function returned. +// In all other cases, ErrWaitTimeout is returned. +func ExponentialBackoff(backoff Backoff, condition ConditionFunc) error { + for backoff.Steps > 0 { + if ok, err := runConditionWithCrashProtection(condition); err != nil || ok { + return err + } + if backoff.Steps == 1 { + break + } + time.Sleep(backoff.Step()) + } + return ErrWaitTimeout +} + +// Poll tries a condition func until it returns true, an error, or the timeout +// is reached. +// +// Poll always waits the interval before the run of 'condition'. +// 'condition' will always be invoked at least once. +// +// Some intervals may be missed if the condition takes too long or the time +// window is too short. +// +// If you want to Poll something forever, see PollInfinite. +func Poll(interval, timeout time.Duration, condition ConditionFunc) error { + return pollInternal(poller(interval, timeout), condition) +} + +func pollInternal(wait WaitFunc, condition ConditionFunc) error { + done := make(chan struct{}) + defer close(done) + return WaitFor(wait, condition, done) +} + +// PollImmediate tries a condition func until it returns true, an error, or the timeout +// is reached. +// +// PollImmediate always checks 'condition' before waiting for the interval. 'condition' +// will always be invoked at least once. +// +// Some intervals may be missed if the condition takes too long or the time +// window is too short. +// +// If you want to immediately Poll something forever, see PollImmediateInfinite. +func PollImmediate(interval, timeout time.Duration, condition ConditionFunc) error { + return pollImmediateInternal(poller(interval, timeout), condition) +} + +func pollImmediateInternal(wait WaitFunc, condition ConditionFunc) error { + done, err := runConditionWithCrashProtection(condition) + if err != nil { + return err + } + if done { + return nil + } + return pollInternal(wait, condition) +} + +// PollInfinite tries a condition func until it returns true or an error +// +// PollInfinite always waits the interval before the run of 'condition'. +// +// Some intervals may be missed if the condition takes too long or the time +// window is too short. +func PollInfinite(interval time.Duration, condition ConditionFunc) error { + done := make(chan struct{}) + defer close(done) + return PollUntil(interval, condition, done) +} + +// PollImmediateInfinite tries a condition func until it returns true or an error +// +// PollImmediateInfinite runs the 'condition' before waiting for the interval. +// +// Some intervals may be missed if the condition takes too long or the time +// window is too short. +func PollImmediateInfinite(interval time.Duration, condition ConditionFunc) error { + done, err := runConditionWithCrashProtection(condition) + if err != nil { + return err + } + if done { + return nil + } + return PollInfinite(interval, condition) +} + +// PollUntil tries a condition func until it returns true, an error or stopCh is +// closed. +// +// PollUntil always waits interval before the first run of 'condition'. +// 'condition' will always be invoked at least once. +func PollUntil(interval time.Duration, condition ConditionFunc, stopCh <-chan struct{}) error { + ctx, cancel := contextForChannel(stopCh) + defer cancel() + return WaitFor(poller(interval, 0), condition, ctx.Done()) +} + +// PollImmediateUntil tries a condition func until it returns true, an error or stopCh is closed. +// +// PollImmediateUntil runs the 'condition' before waiting for the interval. +// 'condition' will always be invoked at least once. +func PollImmediateUntil(interval time.Duration, condition ConditionFunc, stopCh <-chan struct{}) error { + done, err := condition() + if err != nil { + return err + } + if done { + return nil + } + select { + case <-stopCh: + return ErrWaitTimeout + default: + return PollUntil(interval, condition, stopCh) + } +} + +// WaitFunc creates a channel that receives an item every time a test +// should be executed and is closed when the last test should be invoked. +type WaitFunc func(done <-chan struct{}) <-chan struct{} + +// WaitFor continually checks 'fn' as driven by 'wait'. +// +// WaitFor gets a channel from 'wait()'', and then invokes 'fn' once for every value +// placed on the channel and once more when the channel is closed. If the channel is closed +// and 'fn' returns false without error, WaitFor returns ErrWaitTimeout. +// +// If 'fn' returns an error the loop ends and that error is returned. If +// 'fn' returns true the loop ends and nil is returned. +// +// ErrWaitTimeout will be returned if the 'done' channel is closed without fn ever +// returning true. +// +// When the done channel is closed, because the golang `select` statement is +// "uniform pseudo-random", the `fn` might still run one or multiple time, +// though eventually `WaitFor` will return. +func WaitFor(wait WaitFunc, fn ConditionFunc, done <-chan struct{}) error { + stopCh := make(chan struct{}) + defer close(stopCh) + c := wait(stopCh) + for { + select { + case _, open := <-c: + ok, err := runConditionWithCrashProtection(fn) + if err != nil { + return err + } + if ok { + return nil + } + if !open { + return ErrWaitTimeout + } + case <-done: + return ErrWaitTimeout + } + } +} + +// poller returns a WaitFunc that will send to the channel every interval until +// timeout has elapsed and then closes the channel. +// +// Over very short intervals you may receive no ticks before the channel is +// closed. A timeout of 0 is interpreted as an infinity, and in such a case +// it would be the caller's responsibility to close the done channel. +// Failure to do so would result in a leaked goroutine. +// +// Output ticks are not buffered. If the channel is not ready to receive an +// item, the tick is skipped. +func poller(interval, timeout time.Duration) WaitFunc { + return WaitFunc(func(done <-chan struct{}) <-chan struct{} { + ch := make(chan struct{}) + + go func() { + defer close(ch) + + tick := time.NewTicker(interval) + defer tick.Stop() + + var after <-chan time.Time + if timeout != 0 { + // time.After is more convenient, but it + // potentially leaves timers around much longer + // than necessary if we exit early. + timer := time.NewTimer(timeout) + after = timer.C + defer timer.Stop() + } + + for { + select { + case <-tick.C: + // If the consumer isn't ready for this signal drop it and + // check the other channels. + select { + case ch <- struct{}{}: + default: + } + case <-after: + return + case <-done: + return + } + } + }() + + return ch + }) +} diff --git a/vendor/k8s.io/apiserver/go.mod b/vendor/k8s.io/apiserver/go.mod index f5493010a..3d473aa23 100644 --- a/vendor/k8s.io/apiserver/go.mod +++ b/vendor/k8s.io/apiserver/go.mod @@ -29,7 +29,6 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 github.com/pkg/errors v0.8.1 github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021 // indirect - github.com/prometheus/client_golang v1.0.0 github.com/prometheus/client_model v0.2.0 github.com/sirupsen/logrus v1.4.2 // indirect github.com/spf13/pflag v1.0.5 @@ -44,23 +43,23 @@ require ( gopkg.in/square/go-jose.v2 v2.2.2 gopkg.in/yaml.v2 v2.2.8 gotest.tools v2.2.0+incompatible // indirect - k8s.io/api v0.18.0-beta.1 - k8s.io/apimachinery v0.18.0-beta.1 - k8s.io/client-go v0.18.0-beta.1 - k8s.io/component-base v0.18.0-beta.1 + k8s.io/api v0.18.0 + k8s.io/apimachinery v0.18.0 + k8s.io/client-go v0.18.0 + k8s.io/component-base v0.18.0 k8s.io/klog v1.0.0 k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c - k8s.io/utils v0.0.0-20200117235808-5f6fbceb4c31 - sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.5 - sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200207200219-5e70324e7c1c + k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89 + sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7 + sigs.k8s.io/structured-merge-diff/v3 v3.0.0 sigs.k8s.io/yaml v1.2.0 ) replace ( golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13 golang.org/x/tools => golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 // pinned to release-branch.go1.13 - k8s.io/api => k8s.io/api v0.18.0-beta.1 - k8s.io/apimachinery => k8s.io/apimachinery v0.18.0-beta.1 - k8s.io/client-go => k8s.io/client-go v0.18.0-beta.1 - k8s.io/component-base => k8s.io/component-base v0.18.0-beta.1 + k8s.io/api => k8s.io/api v0.18.0 + k8s.io/apimachinery => k8s.io/apimachinery v0.18.0 + k8s.io/client-go => k8s.io/client-go v0.18.0 + k8s.io/component-base => k8s.io/component-base v0.18.0 ) diff --git a/vendor/k8s.io/client-go/go.mod b/vendor/k8s.io/client-go/go.mod index a39b0fdbf..444e47cfa 100644 --- a/vendor/k8s.io/client-go/go.mod +++ b/vendor/k8s.io/client-go/go.mod @@ -28,16 +28,16 @@ require ( golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 google.golang.org/appengine v1.5.0 // indirect - k8s.io/api v0.18.0-beta.1 - k8s.io/apimachinery v0.18.0-beta.1 + k8s.io/api v0.18.0 + k8s.io/apimachinery v0.18.0 k8s.io/klog v1.0.0 - k8s.io/utils v0.0.0-20200117235808-5f6fbceb4c31 + k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89 sigs.k8s.io/yaml v1.2.0 ) replace ( golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13 golang.org/x/tools => golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 // pinned to release-branch.go1.13 - k8s.io/api => k8s.io/api v0.18.0-beta.1 - k8s.io/apimachinery => k8s.io/apimachinery v0.18.0-beta.1 + k8s.io/api => k8s.io/api v0.18.0 + k8s.io/apimachinery => k8s.io/apimachinery v0.18.0 ) diff --git a/vendor/k8s.io/client-go/rest/request.go b/vendor/k8s.io/client-go/rest/request.go index 956d924d3..1acd189ea 100644 --- a/vendor/k8s.io/client-go/rest/request.go +++ b/vendor/k8s.io/client-go/rest/request.go @@ -39,6 +39,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer/streaming" + utilclock "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/net" "k8s.io/apimachinery/pkg/watch" restclientwatch "k8s.io/client-go/rest/watch" @@ -556,37 +557,69 @@ func (r *Request) tryThrottle(ctx context.Context) error { klog.V(3).Infof("Throttling request took %v, request: %s:%s", latency, r.verb, r.URL().String()) } if latency > extraLongThrottleLatency { - globalThrottledLogger.Log(2, fmt.Sprintf("Throttling request took %v, request: %s:%s", latency, r.verb, r.URL().String())) + // If the rate limiter latency is very high, the log message should be printed at a higher log level, + // but we use a throttled logger to prevent spamming. + globalThrottledLogger.Infof("Throttling request took %v, request: %s:%s", latency, r.verb, r.URL().String()) } + metrics.RateLimiterLatency.Observe(r.verb, r.finalURLTemplate(), latency) return err } -type throttledLogger struct { - logTimeLock sync.RWMutex - lastLogTime time.Time +type throttleSettings struct { + logLevel klog.Level minLogInterval time.Duration + + lastLogTime time.Time + lock sync.RWMutex +} + +type throttledLogger struct { + clock utilclock.PassiveClock + settings []*throttleSettings } var globalThrottledLogger = &throttledLogger{ - minLogInterval: 1 * time.Second, + clock: utilclock.RealClock{}, + settings: []*throttleSettings{ + { + logLevel: 2, + minLogInterval: 1 * time.Second, + }, { + logLevel: 0, + minLogInterval: 10 * time.Second, + }, + }, } -func (b *throttledLogger) Log(level klog.Level, message string) { - if bool(klog.V(level)) { - if func() bool { - b.logTimeLock.RLock() - defer b.logTimeLock.RUnlock() - return time.Since(b.lastLogTime) > b.minLogInterval - }() { - b.logTimeLock.Lock() - defer b.logTimeLock.Unlock() - if time.Since(b.lastLogTime) > b.minLogInterval { - klog.V(level).Info(message) - b.lastLogTime = time.Now() +func (b *throttledLogger) attemptToLog() (klog.Level, bool) { + for _, setting := range b.settings { + if bool(klog.V(setting.logLevel)) { + // Return early without write locking if possible. + if func() bool { + setting.lock.RLock() + defer setting.lock.RUnlock() + return b.clock.Since(setting.lastLogTime) >= setting.minLogInterval + }() { + setting.lock.Lock() + defer setting.lock.Unlock() + if b.clock.Since(setting.lastLogTime) >= setting.minLogInterval { + setting.lastLogTime = b.clock.Now() + return setting.logLevel, true + } } + return -1, false } } + return -1, false +} + +// Infof will write a log message at each logLevel specified by the reciever's throttleSettings +// as long as it hasn't written a log message more recently than minLogInterval. +func (b *throttledLogger) Infof(message string, args ...interface{}) { + if logLevel, ok := b.attemptToLog(); ok { + klog.V(logLevel).Infof(message, args...) + } } // Watch attempts to begin watching the requested location. @@ -835,7 +868,7 @@ func (r *Request) request(ctx context.Context, fn func(*http.Request, *http.Resp return err } // For connection errors and apiserver shutdown errors retry. - if net.IsConnectionReset(err) { + if net.IsConnectionReset(err) || net.IsProbableEOF(err) { // For the purpose of retry, we set the artificial "retry-after" response. // TODO: Should we clean the original response if it exists? resp = &http.Response{ diff --git a/vendor/k8s.io/client-go/tools/clientcmd/api/types.go b/vendor/k8s.io/client-go/tools/clientcmd/api/types.go index 1f1209f8d..44317dd01 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/api/types.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/api/types.go @@ -70,6 +70,9 @@ type Cluster struct { LocationOfOrigin string // Server is the address of the kubernetes cluster (https://hostname:port). Server string `json:"server"` + // TLSServerName is used to check server certificate. If TLSServerName is empty, the hostname used to contact the server is used. + // +optional + TLSServerName string `json:"tls-server-name,omitempty"` // InsecureSkipTLSVerify skips the validity check for the server's certificate. This will make your HTTPS connections insecure. // +optional InsecureSkipTLSVerify bool `json:"insecure-skip-tls-verify,omitempty"` diff --git a/vendor/k8s.io/client-go/tools/metrics/metrics.go b/vendor/k8s.io/client-go/tools/metrics/metrics.go index 6a8f25a94..5194026bd 100644 --- a/vendor/k8s.io/client-go/tools/metrics/metrics.go +++ b/vendor/k8s.io/client-go/tools/metrics/metrics.go @@ -53,6 +53,8 @@ var ( ClientCertRotationAge DurationMetric = noopDuration{} // RequestLatency is the latency metric that rest clients will update. RequestLatency LatencyMetric = noopLatency{} + // RateLimiterLatency is the client side rate limiter latency metric. + RateLimiterLatency LatencyMetric = noopLatency{} // RequestResult is the result metric that rest clients will update. RequestResult ResultMetric = noopResult{} ) @@ -62,6 +64,7 @@ type RegisterOpts struct { ClientCertExpiry ExpiryMetric ClientCertRotationAge DurationMetric RequestLatency LatencyMetric + RateLimiterLatency LatencyMetric RequestResult ResultMetric } @@ -78,6 +81,9 @@ func Register(opts RegisterOpts) { if opts.RequestLatency != nil { RequestLatency = opts.RequestLatency } + if opts.RateLimiterLatency != nil { + RateLimiterLatency = opts.RateLimiterLatency + } if opts.RequestResult != nil { RequestResult = opts.RequestResult } diff --git a/vendor/k8s.io/client-go/transport/cache.go b/vendor/k8s.io/client-go/transport/cache.go index 980d36ae1..36d6500f5 100644 --- a/vendor/k8s.io/client-go/transport/cache.go +++ b/vendor/k8s.io/client-go/transport/cache.go @@ -25,6 +25,7 @@ import ( "time" utilnet "k8s.io/apimachinery/pkg/util/net" + "k8s.io/apimachinery/pkg/util/wait" ) // TlsTransportCache caches TLS http.RoundTrippers different configurations. The @@ -44,6 +45,8 @@ type tlsCacheKey struct { caData string certData string keyData string + certFile string + keyFile string getCert string serverName string nextProtos string @@ -91,6 +94,16 @@ func (c *tlsTransportCache) get(config *Config) (http.RoundTripper, error) { KeepAlive: 30 * time.Second, }).DialContext } + + // If we use are reloading files, we need to handle certificate rotation properly + // TODO(jackkleeman): We can also add rotation here when config.HasCertCallback() is true + if config.TLS.ReloadTLSFiles { + dynamicCertDialer := certRotatingDialer(tlsConfig.GetClientCertificate, dial) + tlsConfig.GetClientCertificate = dynamicCertDialer.GetClientCertificate + dial = dynamicCertDialer.connDialer.DialContext + go dynamicCertDialer.Run(wait.NeverStop) + } + // Cache a single transport for these options c.transports[key] = utilnet.SetTransportDefaults(&http.Transport{ Proxy: http.ProxyFromEnvironment, @@ -109,15 +122,23 @@ func tlsConfigKey(c *Config) (tlsCacheKey, error) { if err := loadTLSFiles(c); err != nil { return tlsCacheKey{}, err } - return tlsCacheKey{ + k := tlsCacheKey{ insecure: c.TLS.Insecure, caData: string(c.TLS.CAData), - certData: string(c.TLS.CertData), - keyData: string(c.TLS.KeyData), getCert: fmt.Sprintf("%p", c.TLS.GetCert), serverName: c.TLS.ServerName, nextProtos: strings.Join(c.TLS.NextProtos, ","), dial: fmt.Sprintf("%p", c.Dial), disableCompression: c.DisableCompression, - }, nil + } + + if c.TLS.ReloadTLSFiles { + k.certFile = c.TLS.CertFile + k.keyFile = c.TLS.KeyFile + } else { + k.certData = string(c.TLS.CertData) + k.keyData = string(c.TLS.KeyData) + } + + return k, nil } diff --git a/vendor/k8s.io/client-go/transport/cert_rotation.go b/vendor/k8s.io/client-go/transport/cert_rotation.go new file mode 100644 index 000000000..918e77f9a --- /dev/null +++ b/vendor/k8s.io/client-go/transport/cert_rotation.go @@ -0,0 +1,176 @@ +/* +Copyright 2020 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package transport + +import ( + "bytes" + "crypto/tls" + "fmt" + "reflect" + "sync" + "time" + + utilnet "k8s.io/apimachinery/pkg/util/net" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/util/connrotation" + "k8s.io/client-go/util/workqueue" + "k8s.io/klog" +) + +const workItemKey = "key" + +// CertCallbackRefreshDuration is exposed so that integration tests can crank up the reload speed. +var CertCallbackRefreshDuration = 5 * time.Minute + +type reloadFunc func(*tls.CertificateRequestInfo) (*tls.Certificate, error) + +type dynamicClientCert struct { + clientCert *tls.Certificate + certMtx sync.RWMutex + + reload reloadFunc + connDialer *connrotation.Dialer + + // queue only ever has one item, but it has nice error handling backoff/retry semantics + queue workqueue.RateLimitingInterface +} + +func certRotatingDialer(reload reloadFunc, dial utilnet.DialFunc) *dynamicClientCert { + d := &dynamicClientCert{ + reload: reload, + connDialer: connrotation.NewDialer(connrotation.DialFunc(dial)), + queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "DynamicClientCertificate"), + } + + return d +} + +// loadClientCert calls the callback and rotates connections if needed +func (c *dynamicClientCert) loadClientCert() (*tls.Certificate, error) { + cert, err := c.reload(nil) + if err != nil { + return nil, err + } + + // check to see if we have a change. If the values are the same, do nothing. + c.certMtx.RLock() + haveCert := c.clientCert != nil + if certsEqual(c.clientCert, cert) { + c.certMtx.RUnlock() + return c.clientCert, nil + } + c.certMtx.RUnlock() + + c.certMtx.Lock() + c.clientCert = cert + c.certMtx.Unlock() + + // The first certificate requested is not a rotation that is worth closing connections for + if !haveCert { + return cert, nil + } + + klog.V(1).Infof("certificate rotation detected, shutting down client connections to start using new credentials") + c.connDialer.CloseAll() + + return cert, nil +} + +// certsEqual compares tls Certificates, ignoring the Leaf which may get filled in dynamically +func certsEqual(left, right *tls.Certificate) bool { + if left == nil || right == nil { + return left == right + } + + if !byteMatrixEqual(left.Certificate, right.Certificate) { + return false + } + + if !reflect.DeepEqual(left.PrivateKey, right.PrivateKey) { + return false + } + + if !byteMatrixEqual(left.SignedCertificateTimestamps, right.SignedCertificateTimestamps) { + return false + } + + if !bytes.Equal(left.OCSPStaple, right.OCSPStaple) { + return false + } + + return true +} + +func byteMatrixEqual(left, right [][]byte) bool { + if len(left) != len(right) { + return false + } + + for i := range left { + if !bytes.Equal(left[i], right[i]) { + return false + } + } + return true +} + +// run starts the controller and blocks until stopCh is closed. +func (c *dynamicClientCert) Run(stopCh <-chan struct{}) { + defer utilruntime.HandleCrash() + defer c.queue.ShutDown() + + klog.V(3).Infof("Starting client certificate rotation controller") + defer klog.V(3).Infof("Shutting down client certificate rotation controller") + + go wait.Until(c.runWorker, time.Second, stopCh) + + go wait.PollImmediateUntil(CertCallbackRefreshDuration, func() (bool, error) { + c.queue.Add(workItemKey) + return false, nil + }, stopCh) + + <-stopCh +} + +func (c *dynamicClientCert) runWorker() { + for c.processNextWorkItem() { + } +} + +func (c *dynamicClientCert) processNextWorkItem() bool { + dsKey, quit := c.queue.Get() + if quit { + return false + } + defer c.queue.Done(dsKey) + + _, err := c.loadClientCert() + if err == nil { + c.queue.Forget(dsKey) + return true + } + + utilruntime.HandleError(fmt.Errorf("%v failed with : %v", dsKey, err)) + c.queue.AddRateLimited(dsKey) + + return true +} + +func (c *dynamicClientCert) GetClientCertificate(*tls.CertificateRequestInfo) (*tls.Certificate, error) { + return c.loadClientCert() +} diff --git a/vendor/k8s.io/client-go/transport/config.go b/vendor/k8s.io/client-go/transport/config.go index 9e18d11d3..c20a4a8fc 100644 --- a/vendor/k8s.io/client-go/transport/config.go +++ b/vendor/k8s.io/client-go/transport/config.go @@ -115,9 +115,10 @@ func (c *Config) Wrap(fn WrapperFunc) { // TLSConfig holds the information needed to set up a TLS transport. type TLSConfig struct { - CAFile string // Path of the PEM-encoded server trusted root certificates. - CertFile string // Path of the PEM-encoded client certificate. - KeyFile string // Path of the PEM-encoded client key. + CAFile string // Path of the PEM-encoded server trusted root certificates. + CertFile string // Path of the PEM-encoded client certificate. + KeyFile string // Path of the PEM-encoded client key. + ReloadTLSFiles bool // Set to indicate that the original config provided files, and that they should be reloaded Insecure bool // Server should be accessed without verifying the certificate. For testing only. ServerName string // Override for the server name passed to the server for SNI and used to verify certificates. diff --git a/vendor/k8s.io/client-go/transport/transport.go b/vendor/k8s.io/client-go/transport/transport.go index cd8de9828..143ebfa5c 100644 --- a/vendor/k8s.io/client-go/transport/transport.go +++ b/vendor/k8s.io/client-go/transport/transport.go @@ -23,6 +23,8 @@ import ( "fmt" "io/ioutil" "net/http" + "sync" + "time" utilnet "k8s.io/apimachinery/pkg/util/net" "k8s.io/klog" @@ -81,7 +83,8 @@ func TLSConfigFor(c *Config) (*tls.Config, error) { } var staticCert *tls.Certificate - if c.HasCertAuth() { + // Treat cert as static if either key or cert was data, not a file + if c.HasCertAuth() && !c.TLS.ReloadTLSFiles { // If key/cert were provided, verify them before setting up // tlsConfig.GetClientCertificate. cert, err := tls.X509KeyPair(c.TLS.CertData, c.TLS.KeyData) @@ -91,6 +94,11 @@ func TLSConfigFor(c *Config) (*tls.Config, error) { staticCert = &cert } + var dynamicCertLoader func() (*tls.Certificate, error) + if c.TLS.ReloadTLSFiles { + dynamicCertLoader = cachingCertificateLoader(c.TLS.CertFile, c.TLS.KeyFile) + } + if c.HasCertAuth() || c.HasCertCallback() { tlsConfig.GetClientCertificate = func(*tls.CertificateRequestInfo) (*tls.Certificate, error) { // Note: static key/cert data always take precedence over cert @@ -98,6 +106,10 @@ func TLSConfigFor(c *Config) (*tls.Config, error) { if staticCert != nil { return staticCert, nil } + // key/cert files lead to ReloadTLSFiles being set - takes precedence over cert callback + if dynamicCertLoader != nil { + return dynamicCertLoader() + } if c.HasCertCallback() { cert, err := c.TLS.GetCert() if err != nil { @@ -129,6 +141,11 @@ func loadTLSFiles(c *Config) error { return err } + // Check that we are purely loading from files + if len(c.TLS.CertFile) > 0 && len(c.TLS.CertData) == 0 && len(c.TLS.KeyFile) > 0 && len(c.TLS.KeyData) == 0 { + c.TLS.ReloadTLSFiles = true + } + c.TLS.CertData, err = dataFromSliceOrFile(c.TLS.CertData, c.TLS.CertFile) if err != nil { return err @@ -243,3 +260,44 @@ func tryCancelRequest(rt http.RoundTripper, req *http.Request) { klog.Warningf("Unable to cancel request for %T", rt) } } + +type certificateCacheEntry struct { + cert *tls.Certificate + err error + birth time.Time +} + +// isStale returns true when this cache entry is too old to be usable +func (c *certificateCacheEntry) isStale() bool { + return time.Now().Sub(c.birth) > time.Second +} + +func newCertificateCacheEntry(certFile, keyFile string) certificateCacheEntry { + cert, err := tls.LoadX509KeyPair(certFile, keyFile) + return certificateCacheEntry{cert: &cert, err: err, birth: time.Now()} +} + +// cachingCertificateLoader ensures that we don't hammer the filesystem when opening many connections +// the underlying cert files are read at most once every second +func cachingCertificateLoader(certFile, keyFile string) func() (*tls.Certificate, error) { + current := newCertificateCacheEntry(certFile, keyFile) + var currentMtx sync.RWMutex + + return func() (*tls.Certificate, error) { + currentMtx.RLock() + if current.isStale() { + currentMtx.RUnlock() + + currentMtx.Lock() + defer currentMtx.Unlock() + + if current.isStale() { + current = newCertificateCacheEntry(certFile, keyFile) + } + } else { + defer currentMtx.RUnlock() + } + + return current.cert, current.err + } +} diff --git a/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go b/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go new file mode 100644 index 000000000..6dc8ec5f2 --- /dev/null +++ b/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go @@ -0,0 +1,259 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package workqueue + +import ( + "math" + "sync" + "time" + + "golang.org/x/time/rate" +) + +type RateLimiter interface { + // When gets an item and gets to decide how long that item should wait + When(item interface{}) time.Duration + // Forget indicates that an item is finished being retried. Doesn't matter whether its for perm failing + // or for success, we'll stop tracking it + Forget(item interface{}) + // NumRequeues returns back how many failures the item has had + NumRequeues(item interface{}) int +} + +// DefaultControllerRateLimiter is a no-arg constructor for a default rate limiter for a workqueue. It has +// both overall and per-item rate limiting. The overall is a token bucket and the per-item is exponential +func DefaultControllerRateLimiter() RateLimiter { + return NewMaxOfRateLimiter( + NewItemExponentialFailureRateLimiter(5*time.Millisecond, 1000*time.Second), + // 10 qps, 100 bucket size. This is only for retry speed and its only the overall factor (not per item) + &BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(10), 100)}, + ) +} + +// BucketRateLimiter adapts a standard bucket to the workqueue ratelimiter API +type BucketRateLimiter struct { + *rate.Limiter +} + +var _ RateLimiter = &BucketRateLimiter{} + +func (r *BucketRateLimiter) When(item interface{}) time.Duration { + return r.Limiter.Reserve().Delay() +} + +func (r *BucketRateLimiter) NumRequeues(item interface{}) int { + return 0 +} + +func (r *BucketRateLimiter) Forget(item interface{}) { +} + +// ItemBucketRateLimiter implements a workqueue ratelimiter API using standard rate.Limiter. +// Each key is using a separate limiter. +type ItemBucketRateLimiter struct { + r rate.Limit + burst int + + limitersLock sync.Mutex + limiters map[interface{}]*rate.Limiter +} + +var _ RateLimiter = &ItemBucketRateLimiter{} + +// NewItemBucketRateLimiter creates new ItemBucketRateLimiter instance. +func NewItemBucketRateLimiter(r rate.Limit, burst int) *ItemBucketRateLimiter { + return &ItemBucketRateLimiter{ + r: r, + burst: burst, + limiters: make(map[interface{}]*rate.Limiter), + } +} + +// When returns a time.Duration which we need to wait before item is processed. +func (r *ItemBucketRateLimiter) When(item interface{}) time.Duration { + r.limitersLock.Lock() + defer r.limitersLock.Unlock() + + limiter, ok := r.limiters[item] + if !ok { + limiter = rate.NewLimiter(r.r, r.burst) + r.limiters[item] = limiter + } + + return limiter.Reserve().Delay() +} + +// NumRequeues returns always 0 (doesn't apply to ItemBucketRateLimiter). +func (r *ItemBucketRateLimiter) NumRequeues(item interface{}) int { + return 0 +} + +// Forget removes item from the internal state. +func (r *ItemBucketRateLimiter) Forget(item interface{}) { + r.limitersLock.Lock() + defer r.limitersLock.Unlock() + + delete(r.limiters, item) +} + +// ItemExponentialFailureRateLimiter does a simple baseDelay*2^ limit +// dealing with max failures and expiration are up to the caller +type ItemExponentialFailureRateLimiter struct { + failuresLock sync.Mutex + failures map[interface{}]int + + baseDelay time.Duration + maxDelay time.Duration +} + +var _ RateLimiter = &ItemExponentialFailureRateLimiter{} + +func NewItemExponentialFailureRateLimiter(baseDelay time.Duration, maxDelay time.Duration) RateLimiter { + return &ItemExponentialFailureRateLimiter{ + failures: map[interface{}]int{}, + baseDelay: baseDelay, + maxDelay: maxDelay, + } +} + +func DefaultItemBasedRateLimiter() RateLimiter { + return NewItemExponentialFailureRateLimiter(time.Millisecond, 1000*time.Second) +} + +func (r *ItemExponentialFailureRateLimiter) When(item interface{}) time.Duration { + r.failuresLock.Lock() + defer r.failuresLock.Unlock() + + exp := r.failures[item] + r.failures[item] = r.failures[item] + 1 + + // The backoff is capped such that 'calculated' value never overflows. + backoff := float64(r.baseDelay.Nanoseconds()) * math.Pow(2, float64(exp)) + if backoff > math.MaxInt64 { + return r.maxDelay + } + + calculated := time.Duration(backoff) + if calculated > r.maxDelay { + return r.maxDelay + } + + return calculated +} + +func (r *ItemExponentialFailureRateLimiter) NumRequeues(item interface{}) int { + r.failuresLock.Lock() + defer r.failuresLock.Unlock() + + return r.failures[item] +} + +func (r *ItemExponentialFailureRateLimiter) Forget(item interface{}) { + r.failuresLock.Lock() + defer r.failuresLock.Unlock() + + delete(r.failures, item) +} + +// ItemFastSlowRateLimiter does a quick retry for a certain number of attempts, then a slow retry after that +type ItemFastSlowRateLimiter struct { + failuresLock sync.Mutex + failures map[interface{}]int + + maxFastAttempts int + fastDelay time.Duration + slowDelay time.Duration +} + +var _ RateLimiter = &ItemFastSlowRateLimiter{} + +func NewItemFastSlowRateLimiter(fastDelay, slowDelay time.Duration, maxFastAttempts int) RateLimiter { + return &ItemFastSlowRateLimiter{ + failures: map[interface{}]int{}, + fastDelay: fastDelay, + slowDelay: slowDelay, + maxFastAttempts: maxFastAttempts, + } +} + +func (r *ItemFastSlowRateLimiter) When(item interface{}) time.Duration { + r.failuresLock.Lock() + defer r.failuresLock.Unlock() + + r.failures[item] = r.failures[item] + 1 + + if r.failures[item] <= r.maxFastAttempts { + return r.fastDelay + } + + return r.slowDelay +} + +func (r *ItemFastSlowRateLimiter) NumRequeues(item interface{}) int { + r.failuresLock.Lock() + defer r.failuresLock.Unlock() + + return r.failures[item] +} + +func (r *ItemFastSlowRateLimiter) Forget(item interface{}) { + r.failuresLock.Lock() + defer r.failuresLock.Unlock() + + delete(r.failures, item) +} + +// MaxOfRateLimiter calls every RateLimiter and returns the worst case response +// When used with a token bucket limiter, the burst could be apparently exceeded in cases where particular items +// were separately delayed a longer time. +type MaxOfRateLimiter struct { + limiters []RateLimiter +} + +func (r *MaxOfRateLimiter) When(item interface{}) time.Duration { + ret := time.Duration(0) + for _, limiter := range r.limiters { + curr := limiter.When(item) + if curr > ret { + ret = curr + } + } + + return ret +} + +func NewMaxOfRateLimiter(limiters ...RateLimiter) RateLimiter { + return &MaxOfRateLimiter{limiters: limiters} +} + +func (r *MaxOfRateLimiter) NumRequeues(item interface{}) int { + ret := 0 + for _, limiter := range r.limiters { + curr := limiter.NumRequeues(item) + if curr > ret { + ret = curr + } + } + + return ret +} + +func (r *MaxOfRateLimiter) Forget(item interface{}) { + for _, limiter := range r.limiters { + limiter.Forget(item) + } +} diff --git a/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go b/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go new file mode 100644 index 000000000..e1ab76ea2 --- /dev/null +++ b/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go @@ -0,0 +1,271 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package workqueue + +import ( + "container/heap" + "sync" + "time" + + "k8s.io/apimachinery/pkg/util/clock" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +// DelayingInterface is an Interface that can Add an item at a later time. This makes it easier to +// requeue items after failures without ending up in a hot-loop. +type DelayingInterface interface { + Interface + // AddAfter adds an item to the workqueue after the indicated duration has passed + AddAfter(item interface{}, duration time.Duration) +} + +// NewDelayingQueue constructs a new workqueue with delayed queuing ability +func NewDelayingQueue() DelayingInterface { + return NewDelayingQueueWithCustomClock(clock.RealClock{}, "") +} + +// NewNamedDelayingQueue constructs a new named workqueue with delayed queuing ability +func NewNamedDelayingQueue(name string) DelayingInterface { + return NewDelayingQueueWithCustomClock(clock.RealClock{}, name) +} + +// NewDelayingQueueWithCustomClock constructs a new named workqueue +// with ability to inject real or fake clock for testing purposes +func NewDelayingQueueWithCustomClock(clock clock.Clock, name string) DelayingInterface { + ret := &delayingType{ + Interface: NewNamed(name), + clock: clock, + heartbeat: clock.NewTicker(maxWait), + stopCh: make(chan struct{}), + waitingForAddCh: make(chan *waitFor, 1000), + metrics: newRetryMetrics(name), + } + + go ret.waitingLoop() + + return ret +} + +// delayingType wraps an Interface and provides delayed re-enquing +type delayingType struct { + Interface + + // clock tracks time for delayed firing + clock clock.Clock + + // stopCh lets us signal a shutdown to the waiting loop + stopCh chan struct{} + // stopOnce guarantees we only signal shutdown a single time + stopOnce sync.Once + + // heartbeat ensures we wait no more than maxWait before firing + heartbeat clock.Ticker + + // waitingForAddCh is a buffered channel that feeds waitingForAdd + waitingForAddCh chan *waitFor + + // metrics counts the number of retries + metrics retryMetrics +} + +// waitFor holds the data to add and the time it should be added +type waitFor struct { + data t + readyAt time.Time + // index in the priority queue (heap) + index int +} + +// waitForPriorityQueue implements a priority queue for waitFor items. +// +// waitForPriorityQueue implements heap.Interface. The item occurring next in +// time (i.e., the item with the smallest readyAt) is at the root (index 0). +// Peek returns this minimum item at index 0. Pop returns the minimum item after +// it has been removed from the queue and placed at index Len()-1 by +// container/heap. Push adds an item at index Len(), and container/heap +// percolates it into the correct location. +type waitForPriorityQueue []*waitFor + +func (pq waitForPriorityQueue) Len() int { + return len(pq) +} +func (pq waitForPriorityQueue) Less(i, j int) bool { + return pq[i].readyAt.Before(pq[j].readyAt) +} +func (pq waitForPriorityQueue) Swap(i, j int) { + pq[i], pq[j] = pq[j], pq[i] + pq[i].index = i + pq[j].index = j +} + +// Push adds an item to the queue. Push should not be called directly; instead, +// use `heap.Push`. +func (pq *waitForPriorityQueue) Push(x interface{}) { + n := len(*pq) + item := x.(*waitFor) + item.index = n + *pq = append(*pq, item) +} + +// Pop removes an item from the queue. Pop should not be called directly; +// instead, use `heap.Pop`. +func (pq *waitForPriorityQueue) Pop() interface{} { + n := len(*pq) + item := (*pq)[n-1] + item.index = -1 + *pq = (*pq)[0:(n - 1)] + return item +} + +// Peek returns the item at the beginning of the queue, without removing the +// item or otherwise mutating the queue. It is safe to call directly. +func (pq waitForPriorityQueue) Peek() interface{} { + return pq[0] +} + +// ShutDown stops the queue. After the queue drains, the returned shutdown bool +// on Get() will be true. This method may be invoked more than once. +func (q *delayingType) ShutDown() { + q.stopOnce.Do(func() { + q.Interface.ShutDown() + close(q.stopCh) + q.heartbeat.Stop() + }) +} + +// AddAfter adds the given item to the work queue after the given delay +func (q *delayingType) AddAfter(item interface{}, duration time.Duration) { + // don't add if we're already shutting down + if q.ShuttingDown() { + return + } + + q.metrics.retry() + + // immediately add things with no delay + if duration <= 0 { + q.Add(item) + return + } + + select { + case <-q.stopCh: + // unblock if ShutDown() is called + case q.waitingForAddCh <- &waitFor{data: item, readyAt: q.clock.Now().Add(duration)}: + } +} + +// maxWait keeps a max bound on the wait time. It's just insurance against weird things happening. +// Checking the queue every 10 seconds isn't expensive and we know that we'll never end up with an +// expired item sitting for more than 10 seconds. +const maxWait = 10 * time.Second + +// waitingLoop runs until the workqueue is shutdown and keeps a check on the list of items to be added. +func (q *delayingType) waitingLoop() { + defer utilruntime.HandleCrash() + + // Make a placeholder channel to use when there are no items in our list + never := make(<-chan time.Time) + + // Make a timer that expires when the item at the head of the waiting queue is ready + var nextReadyAtTimer clock.Timer + + waitingForQueue := &waitForPriorityQueue{} + heap.Init(waitingForQueue) + + waitingEntryByData := map[t]*waitFor{} + + for { + if q.Interface.ShuttingDown() { + return + } + + now := q.clock.Now() + + // Add ready entries + for waitingForQueue.Len() > 0 { + entry := waitingForQueue.Peek().(*waitFor) + if entry.readyAt.After(now) { + break + } + + entry = heap.Pop(waitingForQueue).(*waitFor) + q.Add(entry.data) + delete(waitingEntryByData, entry.data) + } + + // Set up a wait for the first item's readyAt (if one exists) + nextReadyAt := never + if waitingForQueue.Len() > 0 { + if nextReadyAtTimer != nil { + nextReadyAtTimer.Stop() + } + entry := waitingForQueue.Peek().(*waitFor) + nextReadyAtTimer = q.clock.NewTimer(entry.readyAt.Sub(now)) + nextReadyAt = nextReadyAtTimer.C() + } + + select { + case <-q.stopCh: + return + + case <-q.heartbeat.C(): + // continue the loop, which will add ready items + + case <-nextReadyAt: + // continue the loop, which will add ready items + + case waitEntry := <-q.waitingForAddCh: + if waitEntry.readyAt.After(q.clock.Now()) { + insert(waitingForQueue, waitingEntryByData, waitEntry) + } else { + q.Add(waitEntry.data) + } + + drained := false + for !drained { + select { + case waitEntry := <-q.waitingForAddCh: + if waitEntry.readyAt.After(q.clock.Now()) { + insert(waitingForQueue, waitingEntryByData, waitEntry) + } else { + q.Add(waitEntry.data) + } + default: + drained = true + } + } + } + } +} + +// insert adds the entry to the priority queue, or updates the readyAt if it already exists in the queue +func insert(q *waitForPriorityQueue, knownEntries map[t]*waitFor, entry *waitFor) { + // if the entry already exists, update the time only if it would cause the item to be queued sooner + existing, exists := knownEntries[entry.data] + if exists { + if existing.readyAt.After(entry.readyAt) { + existing.readyAt = entry.readyAt + heap.Fix(q, existing.index) + } + + return + } + + heap.Push(q, entry) + knownEntries[entry.data] = entry +} diff --git a/vendor/k8s.io/client-go/util/workqueue/doc.go b/vendor/k8s.io/client-go/util/workqueue/doc.go new file mode 100644 index 000000000..a5c976e0f --- /dev/null +++ b/vendor/k8s.io/client-go/util/workqueue/doc.go @@ -0,0 +1,26 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package workqueue provides a simple queue that supports the following +// features: +// * Fair: items processed in the order in which they are added. +// * Stingy: a single item will not be processed multiple times concurrently, +// and if an item is added multiple times before it can be processed, it +// will only be processed once. +// * Multiple consumers and producers. In particular, it is allowed for an +// item to be reenqueued while it is being processed. +// * Shutdown notifications. +package workqueue // import "k8s.io/client-go/util/workqueue" diff --git a/vendor/k8s.io/client-go/util/workqueue/metrics.go b/vendor/k8s.io/client-go/util/workqueue/metrics.go new file mode 100644 index 000000000..556e6432e --- /dev/null +++ b/vendor/k8s.io/client-go/util/workqueue/metrics.go @@ -0,0 +1,261 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package workqueue + +import ( + "sync" + "time" + + "k8s.io/apimachinery/pkg/util/clock" +) + +// This file provides abstractions for setting the provider (e.g., prometheus) +// of metrics. + +type queueMetrics interface { + add(item t) + get(item t) + done(item t) + updateUnfinishedWork() +} + +// GaugeMetric represents a single numerical value that can arbitrarily go up +// and down. +type GaugeMetric interface { + Inc() + Dec() +} + +// SettableGaugeMetric represents a single numerical value that can arbitrarily go up +// and down. (Separate from GaugeMetric to preserve backwards compatibility.) +type SettableGaugeMetric interface { + Set(float64) +} + +// CounterMetric represents a single numerical value that only ever +// goes up. +type CounterMetric interface { + Inc() +} + +// SummaryMetric captures individual observations. +type SummaryMetric interface { + Observe(float64) +} + +// HistogramMetric counts individual observations. +type HistogramMetric interface { + Observe(float64) +} + +type noopMetric struct{} + +func (noopMetric) Inc() {} +func (noopMetric) Dec() {} +func (noopMetric) Set(float64) {} +func (noopMetric) Observe(float64) {} + +// defaultQueueMetrics expects the caller to lock before setting any metrics. +type defaultQueueMetrics struct { + clock clock.Clock + + // current depth of a workqueue + depth GaugeMetric + // total number of adds handled by a workqueue + adds CounterMetric + // how long an item stays in a workqueue + latency HistogramMetric + // how long processing an item from a workqueue takes + workDuration HistogramMetric + addTimes map[t]time.Time + processingStartTimes map[t]time.Time + + // how long have current threads been working? + unfinishedWorkSeconds SettableGaugeMetric + longestRunningProcessor SettableGaugeMetric +} + +func (m *defaultQueueMetrics) add(item t) { + if m == nil { + return + } + + m.adds.Inc() + m.depth.Inc() + if _, exists := m.addTimes[item]; !exists { + m.addTimes[item] = m.clock.Now() + } +} + +func (m *defaultQueueMetrics) get(item t) { + if m == nil { + return + } + + m.depth.Dec() + m.processingStartTimes[item] = m.clock.Now() + if startTime, exists := m.addTimes[item]; exists { + m.latency.Observe(m.sinceInSeconds(startTime)) + delete(m.addTimes, item) + } +} + +func (m *defaultQueueMetrics) done(item t) { + if m == nil { + return + } + + if startTime, exists := m.processingStartTimes[item]; exists { + m.workDuration.Observe(m.sinceInSeconds(startTime)) + delete(m.processingStartTimes, item) + } +} + +func (m *defaultQueueMetrics) updateUnfinishedWork() { + // Note that a summary metric would be better for this, but prometheus + // doesn't seem to have non-hacky ways to reset the summary metrics. + var total float64 + var oldest float64 + for _, t := range m.processingStartTimes { + age := m.sinceInSeconds(t) + total += age + if age > oldest { + oldest = age + } + } + m.unfinishedWorkSeconds.Set(total) + m.longestRunningProcessor.Set(oldest) +} + +type noMetrics struct{} + +func (noMetrics) add(item t) {} +func (noMetrics) get(item t) {} +func (noMetrics) done(item t) {} +func (noMetrics) updateUnfinishedWork() {} + +// Gets the time since the specified start in seconds. +func (m *defaultQueueMetrics) sinceInSeconds(start time.Time) float64 { + return m.clock.Since(start).Seconds() +} + +type retryMetrics interface { + retry() +} + +type defaultRetryMetrics struct { + retries CounterMetric +} + +func (m *defaultRetryMetrics) retry() { + if m == nil { + return + } + + m.retries.Inc() +} + +// MetricsProvider generates various metrics used by the queue. +type MetricsProvider interface { + NewDepthMetric(name string) GaugeMetric + NewAddsMetric(name string) CounterMetric + NewLatencyMetric(name string) HistogramMetric + NewWorkDurationMetric(name string) HistogramMetric + NewUnfinishedWorkSecondsMetric(name string) SettableGaugeMetric + NewLongestRunningProcessorSecondsMetric(name string) SettableGaugeMetric + NewRetriesMetric(name string) CounterMetric +} + +type noopMetricsProvider struct{} + +func (_ noopMetricsProvider) NewDepthMetric(name string) GaugeMetric { + return noopMetric{} +} + +func (_ noopMetricsProvider) NewAddsMetric(name string) CounterMetric { + return noopMetric{} +} + +func (_ noopMetricsProvider) NewLatencyMetric(name string) HistogramMetric { + return noopMetric{} +} + +func (_ noopMetricsProvider) NewWorkDurationMetric(name string) HistogramMetric { + return noopMetric{} +} + +func (_ noopMetricsProvider) NewUnfinishedWorkSecondsMetric(name string) SettableGaugeMetric { + return noopMetric{} +} + +func (_ noopMetricsProvider) NewLongestRunningProcessorSecondsMetric(name string) SettableGaugeMetric { + return noopMetric{} +} + +func (_ noopMetricsProvider) NewRetriesMetric(name string) CounterMetric { + return noopMetric{} +} + +var globalMetricsFactory = queueMetricsFactory{ + metricsProvider: noopMetricsProvider{}, +} + +type queueMetricsFactory struct { + metricsProvider MetricsProvider + + onlyOnce sync.Once +} + +func (f *queueMetricsFactory) setProvider(mp MetricsProvider) { + f.onlyOnce.Do(func() { + f.metricsProvider = mp + }) +} + +func (f *queueMetricsFactory) newQueueMetrics(name string, clock clock.Clock) queueMetrics { + mp := f.metricsProvider + if len(name) == 0 || mp == (noopMetricsProvider{}) { + return noMetrics{} + } + return &defaultQueueMetrics{ + clock: clock, + depth: mp.NewDepthMetric(name), + adds: mp.NewAddsMetric(name), + latency: mp.NewLatencyMetric(name), + workDuration: mp.NewWorkDurationMetric(name), + unfinishedWorkSeconds: mp.NewUnfinishedWorkSecondsMetric(name), + longestRunningProcessor: mp.NewLongestRunningProcessorSecondsMetric(name), + addTimes: map[t]time.Time{}, + processingStartTimes: map[t]time.Time{}, + } +} + +func newRetryMetrics(name string) retryMetrics { + var ret *defaultRetryMetrics + if len(name) == 0 { + return ret + } + return &defaultRetryMetrics{ + retries: globalMetricsFactory.metricsProvider.NewRetriesMetric(name), + } +} + +// SetProvider sets the metrics provider for all subsequently created work +// queues. Only the first call has an effect. +func SetProvider(metricsProvider MetricsProvider) { + globalMetricsFactory.setProvider(metricsProvider) +} diff --git a/vendor/k8s.io/client-go/util/workqueue/parallelizer.go b/vendor/k8s.io/client-go/util/workqueue/parallelizer.go new file mode 100644 index 000000000..5928a0c5b --- /dev/null +++ b/vendor/k8s.io/client-go/util/workqueue/parallelizer.go @@ -0,0 +1,63 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package workqueue + +import ( + "context" + "sync" + + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +type DoWorkPieceFunc func(piece int) + +// ParallelizeUntil is a framework that allows for parallelizing N +// independent pieces of work until done or the context is canceled. +func ParallelizeUntil(ctx context.Context, workers, pieces int, doWorkPiece DoWorkPieceFunc) { + var stop <-chan struct{} + if ctx != nil { + stop = ctx.Done() + } + + toProcess := make(chan int, pieces) + for i := 0; i < pieces; i++ { + toProcess <- i + } + close(toProcess) + + if pieces < workers { + workers = pieces + } + + wg := sync.WaitGroup{} + wg.Add(workers) + for i := 0; i < workers; i++ { + go func() { + defer utilruntime.HandleCrash() + defer wg.Done() + for piece := range toProcess { + select { + case <-stop: + return + default: + doWorkPiece(piece) + } + } + }() + } + wg.Wait() +} diff --git a/vendor/k8s.io/client-go/util/workqueue/queue.go b/vendor/k8s.io/client-go/util/workqueue/queue.go new file mode 100644 index 000000000..39009b8e7 --- /dev/null +++ b/vendor/k8s.io/client-go/util/workqueue/queue.go @@ -0,0 +1,212 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package workqueue + +import ( + "sync" + "time" + + "k8s.io/apimachinery/pkg/util/clock" +) + +type Interface interface { + Add(item interface{}) + Len() int + Get() (item interface{}, shutdown bool) + Done(item interface{}) + ShutDown() + ShuttingDown() bool +} + +// New constructs a new work queue (see the package comment). +func New() *Type { + return NewNamed("") +} + +func NewNamed(name string) *Type { + rc := clock.RealClock{} + return newQueue( + rc, + globalMetricsFactory.newQueueMetrics(name, rc), + defaultUnfinishedWorkUpdatePeriod, + ) +} + +func newQueue(c clock.Clock, metrics queueMetrics, updatePeriod time.Duration) *Type { + t := &Type{ + clock: c, + dirty: set{}, + processing: set{}, + cond: sync.NewCond(&sync.Mutex{}), + metrics: metrics, + unfinishedWorkUpdatePeriod: updatePeriod, + } + go t.updateUnfinishedWorkLoop() + return t +} + +const defaultUnfinishedWorkUpdatePeriod = 500 * time.Millisecond + +// Type is a work queue (see the package comment). +type Type struct { + // queue defines the order in which we will work on items. Every + // element of queue should be in the dirty set and not in the + // processing set. + queue []t + + // dirty defines all of the items that need to be processed. + dirty set + + // Things that are currently being processed are in the processing set. + // These things may be simultaneously in the dirty set. When we finish + // processing something and remove it from this set, we'll check if + // it's in the dirty set, and if so, add it to the queue. + processing set + + cond *sync.Cond + + shuttingDown bool + + metrics queueMetrics + + unfinishedWorkUpdatePeriod time.Duration + clock clock.Clock +} + +type empty struct{} +type t interface{} +type set map[t]empty + +func (s set) has(item t) bool { + _, exists := s[item] + return exists +} + +func (s set) insert(item t) { + s[item] = empty{} +} + +func (s set) delete(item t) { + delete(s, item) +} + +// Add marks item as needing processing. +func (q *Type) Add(item interface{}) { + q.cond.L.Lock() + defer q.cond.L.Unlock() + if q.shuttingDown { + return + } + if q.dirty.has(item) { + return + } + + q.metrics.add(item) + + q.dirty.insert(item) + if q.processing.has(item) { + return + } + + q.queue = append(q.queue, item) + q.cond.Signal() +} + +// Len returns the current queue length, for informational purposes only. You +// shouldn't e.g. gate a call to Add() or Get() on Len() being a particular +// value, that can't be synchronized properly. +func (q *Type) Len() int { + q.cond.L.Lock() + defer q.cond.L.Unlock() + return len(q.queue) +} + +// Get blocks until it can return an item to be processed. If shutdown = true, +// the caller should end their goroutine. You must call Done with item when you +// have finished processing it. +func (q *Type) Get() (item interface{}, shutdown bool) { + q.cond.L.Lock() + defer q.cond.L.Unlock() + for len(q.queue) == 0 && !q.shuttingDown { + q.cond.Wait() + } + if len(q.queue) == 0 { + // We must be shutting down. + return nil, true + } + + item, q.queue = q.queue[0], q.queue[1:] + + q.metrics.get(item) + + q.processing.insert(item) + q.dirty.delete(item) + + return item, false +} + +// Done marks item as done processing, and if it has been marked as dirty again +// while it was being processed, it will be re-added to the queue for +// re-processing. +func (q *Type) Done(item interface{}) { + q.cond.L.Lock() + defer q.cond.L.Unlock() + + q.metrics.done(item) + + q.processing.delete(item) + if q.dirty.has(item) { + q.queue = append(q.queue, item) + q.cond.Signal() + } +} + +// ShutDown will cause q to ignore all new items added to it. As soon as the +// worker goroutines have drained the existing items in the queue, they will be +// instructed to exit. +func (q *Type) ShutDown() { + q.cond.L.Lock() + defer q.cond.L.Unlock() + q.shuttingDown = true + q.cond.Broadcast() +} + +func (q *Type) ShuttingDown() bool { + q.cond.L.Lock() + defer q.cond.L.Unlock() + + return q.shuttingDown +} + +func (q *Type) updateUnfinishedWorkLoop() { + t := q.clock.NewTicker(q.unfinishedWorkUpdatePeriod) + defer t.Stop() + for range t.C() { + if !func() bool { + q.cond.L.Lock() + defer q.cond.L.Unlock() + if !q.shuttingDown { + q.metrics.updateUnfinishedWork() + return true + } + return false + + }() { + return + } + } +} diff --git a/vendor/k8s.io/client-go/util/workqueue/rate_limiting_queue.go b/vendor/k8s.io/client-go/util/workqueue/rate_limiting_queue.go new file mode 100644 index 000000000..8321876ac --- /dev/null +++ b/vendor/k8s.io/client-go/util/workqueue/rate_limiting_queue.go @@ -0,0 +1,69 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package workqueue + +// RateLimitingInterface is an interface that rate limits items being added to the queue. +type RateLimitingInterface interface { + DelayingInterface + + // AddRateLimited adds an item to the workqueue after the rate limiter says it's ok + AddRateLimited(item interface{}) + + // Forget indicates that an item is finished being retried. Doesn't matter whether it's for perm failing + // or for success, we'll stop the rate limiter from tracking it. This only clears the `rateLimiter`, you + // still have to call `Done` on the queue. + Forget(item interface{}) + + // NumRequeues returns back how many times the item was requeued + NumRequeues(item interface{}) int +} + +// NewRateLimitingQueue constructs a new workqueue with rateLimited queuing ability +// Remember to call Forget! If you don't, you may end up tracking failures forever. +func NewRateLimitingQueue(rateLimiter RateLimiter) RateLimitingInterface { + return &rateLimitingType{ + DelayingInterface: NewDelayingQueue(), + rateLimiter: rateLimiter, + } +} + +func NewNamedRateLimitingQueue(rateLimiter RateLimiter, name string) RateLimitingInterface { + return &rateLimitingType{ + DelayingInterface: NewNamedDelayingQueue(name), + rateLimiter: rateLimiter, + } +} + +// rateLimitingType wraps an Interface and provides rateLimited re-enquing +type rateLimitingType struct { + DelayingInterface + + rateLimiter RateLimiter +} + +// AddRateLimited AddAfter's the item based on the time when the rate limiter says it's ok +func (q *rateLimitingType) AddRateLimited(item interface{}) { + q.DelayingInterface.AddAfter(item, q.rateLimiter.When(item)) +} + +func (q *rateLimitingType) NumRequeues(item interface{}) int { + return q.rateLimiter.NumRequeues(item) +} + +func (q *rateLimitingType) Forget(item interface{}) { + q.rateLimiter.Forget(item) +} diff --git a/vendor/k8s.io/kubernetes/go.mod b/vendor/k8s.io/kubernetes/go.mod index f6dceaf7a..8cb8719ab 100644 --- a/vendor/k8s.io/kubernetes/go.mod +++ b/vendor/k8s.io/kubernetes/go.mod @@ -38,6 +38,7 @@ require ( github.com/containerd/typeurl v0.0.0-20190228175220-2a93cfde8c20 // indirect github.com/containernetworking/cni v0.7.1 github.com/coredns/corefile-migration v1.0.6 + github.com/coreos/go-oidc v2.1.0+incompatible github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea github.com/cpuguy83/go-md2man v1.0.10 @@ -164,7 +165,7 @@ require ( k8s.io/repo-infra v0.0.1-alpha.1 k8s.io/sample-apiserver v0.0.0 k8s.io/system-validators v1.0.4 - k8s.io/utils v0.0.0-20200117235808-5f6fbceb4c31 + k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89 sigs.k8s.io/kustomize v2.0.3+incompatible sigs.k8s.io/yaml v1.2.0 ) @@ -563,7 +564,7 @@ replace ( k8s.io/sample-cli-plugin => ./staging/src/k8s.io/sample-cli-plugin k8s.io/sample-controller => ./staging/src/k8s.io/sample-controller k8s.io/system-validators => k8s.io/system-validators v1.0.4 - k8s.io/utils => k8s.io/utils v0.0.0-20200117235808-5f6fbceb4c31 + k8s.io/utils => k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89 modernc.org/cc => modernc.org/cc v1.0.0 modernc.org/golex => modernc.org/golex v1.0.0 modernc.org/mathutil => modernc.org/mathutil v1.0.0 @@ -573,9 +574,9 @@ replace ( mvdan.cc/lint => mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b mvdan.cc/unparam => mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34 rsc.io/pdf => rsc.io/pdf v0.1.1 - sigs.k8s.io/apiserver-network-proxy/konnectivity-client => sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.5 + sigs.k8s.io/apiserver-network-proxy/konnectivity-client => sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7 sigs.k8s.io/kustomize => sigs.k8s.io/kustomize v2.0.3+incompatible - sigs.k8s.io/structured-merge-diff/v3 => sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200207200219-5e70324e7c1c + sigs.k8s.io/structured-merge-diff/v3 => sigs.k8s.io/structured-merge-diff/v3 v3.0.0 sigs.k8s.io/yaml => sigs.k8s.io/yaml v1.2.0 sourcegraph.com/sqs/pbtypes => sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4 vbom.ml/util => vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/types.go b/vendor/k8s.io/kubernetes/pkg/apis/core/types.go index 46db55933..f000cdbea 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/types.go @@ -302,7 +302,6 @@ type PersistentVolumeSpec struct { MountOptions []string // volumeMode defines if a volume is intended to be used with a formatted filesystem // or to remain in raw block state. Value of Filesystem is implied when not included in spec. - // This is a beta feature. // +optional VolumeMode *PersistentVolumeMode // NodeAffinity defines constraints that limit what nodes this volume can be accessed from. @@ -416,17 +415,17 @@ type PersistentVolumeClaimSpec struct { StorageClassName *string // volumeMode defines what type of volume is required by the claim. // Value of Filesystem is implied when not included in claim spec. - // This is a beta feature. // +optional VolumeMode *PersistentVolumeMode // This field can be used to specify either: - // * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + // * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot - Beta) // * An existing PVC (PersistentVolumeClaim) - // In order to use either of these DataSource types, the appropriate feature gate - // must be enabled (VolumeSnapshotDataSource, VolumePVCDataSource) - // If the provisioner can support the specified data source, it will create - // a new volume based on the contents of the specified PVC or Snapshot. - // If the provisioner does not support the specified data source, the volume will + // * An existing custom resource/object that implements data population (Alpha) + // In order to use VolumeSnapshot object types, the appropriate feature gate + // must be enabled (VolumeSnapshotDataSource or AnyVolumeDataSource) + // If the provisioner or an external controller can support the specified data source, + // it will create a new volume based on the contents of the specified data source. + // If the specified data source is not supported, the volume will // not be created and the failure will be reported as an event. // In the future, we plan to support more data source types and the behavior // of the provisioner may change. @@ -2057,7 +2056,6 @@ type Container struct { // +optional VolumeMounts []VolumeMount // volumeDevices is the list of block devices to be used by the container. - // This is a beta feature. // +optional VolumeDevices []VolumeDevice // +optional @@ -2787,6 +2785,22 @@ type Sysctl struct { Value string } +// PodFSGroupChangePolicy holds policies that will be used for applying fsGroup to a volume +// when volume is mounted. +type PodFSGroupChangePolicy string + +const ( + // FSGroupChangeOnRootMismatch indicates that volume's ownership and permissions will be changed + // only when permission and ownership of root directory does not match with expected + // permissions on the volume. This can help shorten the time it takes to change + // ownership and permissions of a volume. + FSGroupChangeOnRootMismatch PodFSGroupChangePolicy = "OnRootMismatch" + // FSGroupChangeAlways indicates that volume's ownership and permissions + // should always be changed whenever volume is mounted inside a Pod. This the default + // behavior. + FSGroupChangeAlways PodFSGroupChangePolicy = "Always" +) + // PodSecurityContext holds pod-level security attributes and common container settings. // Some fields are also present in container.securityContext. Field values of // container.securityContext take precedence over field values of PodSecurityContext. @@ -2866,6 +2880,14 @@ type PodSecurityContext struct { // If unset, the Kubelet will not modify the ownership and permissions of any volume. // +optional FSGroup *int64 + // fsGroupChangePolicy defines behavior of changing ownership and permission of the volume + // before being exposed inside Pod. This field will only apply to + // volume types which support fsGroup based ownership(and permissions). + // It will have no effect on ephemeral volume types such as: secret, configmaps + // and emptydir. + // Valid values are "OnRootMismatch" and "Always". If not specified defaults to "Always". + // +optional + FSGroupChangePolicy *PodFSGroupChangePolicy // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported // sysctls (by the container runtime) might fail to launch. // +optional @@ -2969,7 +2991,6 @@ type EphemeralContainerCommon struct { // +optional VolumeMounts []VolumeMount // volumeDevices is the list of block devices to be used by the container. - // This is a beta feature. // +optional VolumeDevices []VolumeDevice // Probes are not allowed for ephemeral containers. @@ -5096,14 +5117,12 @@ type SELinuxOptions struct { // WindowsSecurityContextOptions contain Windows-specific options and credentials. type WindowsSecurityContextOptions struct { // GMSACredentialSpecName is the name of the GMSA credential spec to use. - // This field is alpha-level and is only honored by servers that enable the WindowsGMSA feature flag. // +optional GMSACredentialSpecName *string // GMSACredentialSpec is where the GMSA admission webhook // (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the // GMSA credential spec named by the GMSACredentialSpecName field. - // This field is alpha-level and is only honored by servers that enable the WindowsGMSA feature flag. // +optional GMSACredentialSpec *string diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go index 6dd33e5aa..1951d5e27 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go @@ -3691,6 +3691,11 @@ func (in *PodSecurityContext) DeepCopyInto(out *PodSecurityContext) { *out = new(int64) **out = **in } + if in.FSGroupChangePolicy != nil { + in, out := &in.FSGroupChangePolicy, &out.FSGroupChangePolicy + *out = new(PodFSGroupChangePolicy) + **out = **in + } if in.Sysctls != nil { in, out := &in.Sysctls, &out.Sysctls *out = make([]Sysctl, len(*in)) diff --git a/vendor/k8s.io/kubernetes/pkg/util/bandwidth/linux.go b/vendor/k8s.io/kubernetes/pkg/util/bandwidth/linux.go index f01e7cc02..d841f305a 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/bandwidth/linux.go +++ b/vendor/k8s.io/kubernetes/pkg/util/bandwidth/linux.go @@ -24,6 +24,7 @@ import ( "encoding/hex" "fmt" "net" + "regexp" "strings" "k8s.io/apimachinery/pkg/api/resource" @@ -33,6 +34,11 @@ import ( "k8s.io/klog" ) +var ( + classShowMatcher = regexp.MustCompile(`class htb (1:\d+)`) + classAndHandleMatcher = regexp.MustCompile(`filter parent 1:.*fh (\d+::\d+).*flowid (\d+:\d+)`) +) + // tcShaper provides an implementation of the Shaper interface on Linux using the 'tc' tool. // In general, using this requires that the caller posses the NET_CAP_ADMIN capability, though if you // do this within an container, it only requires the NS_CAPABLE capability for manipulations to that @@ -75,13 +81,13 @@ func (t *tcShaper) nextClassID() (int, error) { if len(line) == 0 { continue } - parts := strings.Split(line, " ") // expected tc line: // class htb 1:1 root prio 0 rate 1000Kbit ceil 1000Kbit burst 1600b cburst 1600b - if len(parts) != 14 { - return -1, fmt.Errorf("unexpected output from tc: %s (%v)", scanner.Text(), parts) + matches := classShowMatcher.FindStringSubmatch(line) + if len(matches) != 2 { + return -1, fmt.Errorf("unexpected output from tc: %s (%v)", scanner.Text(), matches) } - classes.Insert(parts[2]) + classes.Insert(matches[1]) } // Make sure it doesn't go forever @@ -153,13 +159,14 @@ func (t *tcShaper) findCIDRClass(cidr string) (classAndHandleList [][]string, fo continue } if strings.Contains(line, spec) { - parts := strings.Split(filter, " ") // expected tc line: - // filter parent 1: protocol ip pref 1 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:1 - if len(parts) != 19 { - return classAndHandleList, false, fmt.Errorf("unexpected output from tc: %s %d (%v)", filter, len(parts), parts) + // `filter parent 1: protocol ip pref 1 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:1` (old version) or + // `filter parent 1: protocol ip pref 1 u32 chain 0 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:1 not_in_hw` (new version) + matches := classAndHandleMatcher.FindStringSubmatch(filter) + if len(matches) != 3 { + return classAndHandleList, false, fmt.Errorf("unexpected output from tc: %s %d (%v)", filter, len(matches), matches) } - resultTmp := []string{parts[18], parts[9]} + resultTmp := []string{matches[2], matches[1]} classAndHandleList = append(classAndHandleList, resultTmp) } } @@ -301,7 +308,6 @@ func (t *tcShaper) Reset(cidr string) error { } } return nil - } func (t *tcShaper) deleteInterface(class string) error {