validator signed status bool -> enum

This commit is contained in:
William Banfield
2022-03-18 15:42:51 -04:00
parent c6fd149b70
commit 5be77cf245
8 changed files with 408 additions and 326 deletions

View File

@@ -84,6 +84,26 @@ func (r ResponseVerifyVoteExtension) IsErr() bool {
return r.Status != ResponseVerifyVoteExtension_ACCEPT
}
// Signed returns true if the validator this vote corresponds to signed the last block.
func (v VoteInfo) Signed() bool {
return v.SignedLastBlock == SignedStatus_SIGNED
}
// Unknown returns true if sign status for this VoteInfo is unknown.
func (v VoteInfo) UnknownSignStatus() bool {
return v.SignedLastBlock == SignedStatus_UNKNOWN_SIGN_STATUS
}
// Signed returns true if the validator this vote corresponds to signed the last block.
func (v ExtendedVoteInfo) Signed() bool {
return v.SignedLastBlock == SignedStatus_SIGNED
}
// Unknown returns true if sign status for this ExtendedVoteInfo is unknown.
func (v ExtendedVoteInfo) UnknownSignStatus() bool {
return v.SignedLastBlock == SignedStatus_UNKNOWN_SIGN_STATUS
}
//---------------------------------------------------------------------------
// override JSON marshaling so we emit defaults (ie. disable omitempty)

View File

@@ -58,6 +58,34 @@ func (CheckTxType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_252557cfdd89a31a, []int{0}
}
type SignedStatus int32
const (
SignedStatus_UNKNOWN_SIGN_STATUS SignedStatus = 0
SignedStatus_SIGNED SignedStatus = 1
SignedStatus_DID_NOT_SIGN SignedStatus = 2
)
var SignedStatus_name = map[int32]string{
0: "UNKNOWN_SIGN_STATUS",
1: "SIGNED",
2: "DID_NOT_SIGN",
}
var SignedStatus_value = map[string]int32{
"UNKNOWN_SIGN_STATUS": 0,
"SIGNED": 1,
"DID_NOT_SIGN": 2,
}
func (x SignedStatus) String() string {
return proto.EnumName(SignedStatus_name, int32(x))
}
func (SignedStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_252557cfdd89a31a, []int{1}
}
type EvidenceType int32
const (
@@ -83,7 +111,7 @@ func (x EvidenceType) String() string {
}
func (EvidenceType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_252557cfdd89a31a, []int{1}
return fileDescriptor_252557cfdd89a31a, []int{2}
}
type ResponseOfferSnapshot_Result int32
@@ -3824,8 +3852,8 @@ func (m *ValidatorUpdate) GetPower() int64 {
// VoteInfo
type VoteInfo struct {
Validator Validator `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator"`
SignedLastBlock bool `protobuf:"varint,2,opt,name=signed_last_block,json=signedLastBlock,proto3" json:"signed_last_block,omitempty"`
Validator Validator `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator"`
SignedLastBlock SignedStatus `protobuf:"varint,2,opt,name=signed_last_block,json=signedLastBlock,proto3,enum=tendermint.abci.SignedStatus" json:"signed_last_block,omitempty"`
}
func (m *VoteInfo) Reset() { *m = VoteInfo{} }
@@ -3868,17 +3896,17 @@ func (m *VoteInfo) GetValidator() Validator {
return Validator{}
}
func (m *VoteInfo) GetSignedLastBlock() bool {
func (m *VoteInfo) GetSignedLastBlock() SignedStatus {
if m != nil {
return m.SignedLastBlock
}
return false
return SignedStatus_UNKNOWN_SIGN_STATUS
}
type ExtendedVoteInfo struct {
Validator Validator `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator"`
SignedLastBlock bool `protobuf:"varint,2,opt,name=signed_last_block,json=signedLastBlock,proto3" json:"signed_last_block,omitempty"`
VoteExtension []byte `protobuf:"bytes,3,opt,name=vote_extension,json=voteExtension,proto3" json:"vote_extension,omitempty"`
Validator Validator `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator"`
SignedLastBlock SignedStatus `protobuf:"varint,2,opt,name=signed_last_block,json=signedLastBlock,proto3,enum=tendermint.abci.SignedStatus" json:"signed_last_block,omitempty"`
VoteExtension []byte `protobuf:"bytes,3,opt,name=vote_extension,json=voteExtension,proto3" json:"vote_extension,omitempty"`
}
func (m *ExtendedVoteInfo) Reset() { *m = ExtendedVoteInfo{} }
@@ -3921,11 +3949,11 @@ func (m *ExtendedVoteInfo) GetValidator() Validator {
return Validator{}
}
func (m *ExtendedVoteInfo) GetSignedLastBlock() bool {
func (m *ExtendedVoteInfo) GetSignedLastBlock() SignedStatus {
if m != nil {
return m.SignedLastBlock
}
return false
return SignedStatus_UNKNOWN_SIGN_STATUS
}
func (m *ExtendedVoteInfo) GetVoteExtension() []byte {
@@ -4095,6 +4123,7 @@ func (m *Snapshot) GetMetadata() []byte {
func init() {
proto.RegisterEnum("tendermint.abci.CheckTxType", CheckTxType_name, CheckTxType_value)
proto.RegisterEnum("tendermint.abci.SignedStatus", SignedStatus_name, SignedStatus_value)
proto.RegisterEnum("tendermint.abci.EvidenceType", EvidenceType_name, EvidenceType_value)
proto.RegisterEnum("tendermint.abci.ResponseOfferSnapshot_Result", ResponseOfferSnapshot_Result_name, ResponseOfferSnapshot_Result_value)
proto.RegisterEnum("tendermint.abci.ResponseApplySnapshotChunk_Result", ResponseApplySnapshotChunk_Result_name, ResponseApplySnapshotChunk_Result_value)
@@ -4161,223 +4190,226 @@ func init() {
func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) }
var fileDescriptor_252557cfdd89a31a = []byte{
// 3443 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5b, 0xcb, 0x73, 0x1b, 0xc7,
0xd1, 0xc7, 0xfb, 0xd1, 0x78, 0x2d, 0x87, 0xb4, 0x0c, 0xc1, 0x12, 0x29, 0xaf, 0xca, 0xb6, 0x2c,
0xdb, 0xd4, 0x67, 0xa9, 0x64, 0xcb, 0x9f, 0xed, 0xcf, 0x45, 0x82, 0xa0, 0x41, 0x89, 0x22, 0xe9,
0x25, 0x28, 0x97, 0xbf, 0xcf, 0x9f, 0xd6, 0x4b, 0xec, 0x10, 0x58, 0x0b, 0xc0, 0xae, 0x77, 0x17,
0x34, 0xe8, 0x53, 0x2a, 0x55, 0xbe, 0xb8, 0x52, 0x15, 0xdf, 0x92, 0xaa, 0x94, 0x2b, 0x97, 0xa4,
0x2a, 0x7f, 0x42, 0x4e, 0xb9, 0x24, 0x07, 0x1f, 0x72, 0xf0, 0x2d, 0xa9, 0x1c, 0x9c, 0x94, 0x7d,
0xcb, 0x3f, 0x90, 0x53, 0x9c, 0xd4, 0x3c, 0xf6, 0x09, 0x2c, 0x1e, 0x96, 0xe4, 0x4b, 0x6e, 0x33,
0x8d, 0xee, 0xde, 0x99, 0x9e, 0x99, 0xee, 0xfe, 0xf5, 0x0c, 0xe0, 0x29, 0x1b, 0x0f, 0x54, 0x6c,
0xf6, 0xb5, 0x81, 0x7d, 0x4d, 0x39, 0x6e, 0x6b, 0xd7, 0xec, 0x33, 0x03, 0x5b, 0xeb, 0x86, 0xa9,
0xdb, 0x3a, 0xaa, 0x78, 0x3f, 0xae, 0x93, 0x1f, 0x6b, 0x17, 0x7d, 0xdc, 0x6d, 0xf3, 0xcc, 0xb0,
0xf5, 0x6b, 0x86, 0xa9, 0xeb, 0x27, 0x8c, 0xbf, 0x76, 0xc1, 0xf7, 0x33, 0xd5, 0xe3, 0xd7, 0x16,
0xf8, 0x95, 0x0b, 0x3f, 0xc0, 0x67, 0xce, 0xaf, 0x17, 0xc7, 0x64, 0x0d, 0xc5, 0x54, 0xfa, 0xce,
0xcf, 0x6b, 0x1d, 0x5d, 0xef, 0xf4, 0xf0, 0x35, 0xda, 0x3b, 0x1e, 0x9e, 0x5c, 0xb3, 0xb5, 0x3e,
0xb6, 0x6c, 0xa5, 0x6f, 0x70, 0x86, 0x95, 0x8e, 0xde, 0xd1, 0x69, 0xf3, 0x1a, 0x69, 0x31, 0xaa,
0xf8, 0x2f, 0x80, 0xac, 0x84, 0x3f, 0x1a, 0x62, 0xcb, 0x46, 0xd7, 0x21, 0x85, 0xdb, 0x5d, 0xbd,
0x1a, 0xbf, 0x14, 0xbf, 0x52, 0xb8, 0x7e, 0x61, 0x3d, 0x34, 0xb9, 0x75, 0xce, 0xd7, 0x68, 0x77,
0xf5, 0x66, 0x4c, 0xa2, 0xbc, 0xe8, 0x26, 0xa4, 0x4f, 0x7a, 0x43, 0xab, 0x5b, 0x4d, 0x50, 0xa1,
0x8b, 0x51, 0x42, 0xdb, 0x84, 0xa9, 0x19, 0x93, 0x18, 0x37, 0xf9, 0x94, 0x36, 0x38, 0xd1, 0xab,
0xc9, 0xe9, 0x9f, 0xda, 0x19, 0x9c, 0xd0, 0x4f, 0x11, 0x5e, 0xb4, 0x09, 0xa0, 0x0d, 0x34, 0x5b,
0x6e, 0x77, 0x15, 0x6d, 0x50, 0x4d, 0x51, 0xc9, 0xa7, 0xa3, 0x25, 0x35, 0xbb, 0x4e, 0x18, 0x9b,
0x31, 0x29, 0xaf, 0x39, 0x1d, 0x32, 0xdc, 0x8f, 0x86, 0xd8, 0x3c, 0xab, 0xa6, 0xa7, 0x0f, 0xf7,
0x1d, 0xc2, 0x44, 0x86, 0x4b, 0xb9, 0xd1, 0x0e, 0x14, 0x8e, 0x71, 0x47, 0x1b, 0xc8, 0xc7, 0x3d,
0xbd, 0xfd, 0xa0, 0x9a, 0xa1, 0xc2, 0x62, 0x94, 0xf0, 0x26, 0x61, 0xdd, 0x24, 0x9c, 0x9b, 0x89,
0x6a, 0xbc, 0x19, 0x93, 0xe0, 0xd8, 0xa5, 0xa0, 0x37, 0x20, 0xd7, 0xee, 0xe2, 0xf6, 0x03, 0xd9,
0x1e, 0x55, 0xb3, 0x54, 0xcf, 0x5a, 0x94, 0x9e, 0x3a, 0xe1, 0x6b, 0x8d, 0x9a, 0x31, 0x29, 0xdb,
0x66, 0x4d, 0xb4, 0x0d, 0xa0, 0xe2, 0x9e, 0x76, 0x8a, 0x4d, 0x22, 0x9f, 0x9b, 0x6e, 0x83, 0x2d,
0xc6, 0xd9, 0x1a, 0xf1, 0x61, 0xe4, 0x55, 0x87, 0x80, 0xea, 0x90, 0xc7, 0x03, 0x95, 0x4f, 0x27,
0x4f, 0xd5, 0x5c, 0x8a, 0x5c, 0xef, 0x81, 0xea, 0x9f, 0x4c, 0x0e, 0xf3, 0x3e, 0xba, 0x05, 0x99,
0xb6, 0xde, 0xef, 0x6b, 0x76, 0x15, 0xa8, 0x86, 0xd5, 0xc8, 0x89, 0x50, 0xae, 0x66, 0x4c, 0xe2,
0xfc, 0x68, 0x0f, 0xca, 0x3d, 0xcd, 0xb2, 0x65, 0x6b, 0xa0, 0x18, 0x56, 0x57, 0xb7, 0xad, 0x6a,
0x81, 0x6a, 0x78, 0x26, 0x4a, 0xc3, 0xae, 0x66, 0xd9, 0x87, 0x0e, 0x73, 0x33, 0x26, 0x95, 0x7a,
0x7e, 0x02, 0xd1, 0xa7, 0x9f, 0x9c, 0x60, 0xd3, 0x55, 0x58, 0x2d, 0x4e, 0xd7, 0xb7, 0x4f, 0xb8,
0x1d, 0x79, 0xa2, 0x4f, 0xf7, 0x13, 0xd0, 0xff, 0xc1, 0x72, 0x4f, 0x57, 0x54, 0x57, 0x9d, 0xdc,
0xee, 0x0e, 0x07, 0x0f, 0xaa, 0x25, 0xaa, 0xf4, 0xf9, 0xc8, 0x41, 0xea, 0x8a, 0xea, 0xa8, 0xa8,
0x13, 0x81, 0x66, 0x4c, 0x5a, 0xea, 0x85, 0x89, 0xe8, 0x3e, 0xac, 0x28, 0x86, 0xd1, 0x3b, 0x0b,
0x6b, 0x2f, 0x53, 0xed, 0x57, 0xa3, 0xb4, 0x6f, 0x10, 0x99, 0xb0, 0x7a, 0xa4, 0x8c, 0x51, 0x51,
0x0b, 0x04, 0xc3, 0xc4, 0x86, 0x62, 0x62, 0xd9, 0x30, 0x75, 0x43, 0xb7, 0x94, 0x5e, 0xb5, 0x42,
0x75, 0x3f, 0x17, 0xa5, 0xfb, 0x80, 0xf1, 0x1f, 0x70, 0xf6, 0x66, 0x4c, 0xaa, 0x18, 0x41, 0x12,
0xd3, 0xaa, 0xb7, 0xb1, 0x65, 0x79, 0x5a, 0x85, 0x59, 0x5a, 0x29, 0x7f, 0x50, 0x6b, 0x80, 0x84,
0x1a, 0x50, 0xc0, 0x23, 0x22, 0x2e, 0x9f, 0xea, 0x36, 0xae, 0x2e, 0x4d, 0x3f, 0x58, 0x0d, 0xca,
0x7a, 0x4f, 0xb7, 0x31, 0x39, 0x54, 0xd8, 0xed, 0x21, 0x05, 0x9e, 0x38, 0xc5, 0xa6, 0x76, 0x72,
0x46, 0xd5, 0xc8, 0xf4, 0x17, 0x4b, 0xd3, 0x07, 0x55, 0x44, 0x15, 0xbe, 0x10, 0xa5, 0xf0, 0x1e,
0x15, 0x22, 0x2a, 0x1a, 0x8e, 0x48, 0x33, 0x26, 0x2d, 0x9f, 0x8e, 0x93, 0xc9, 0x16, 0x3b, 0xd1,
0x06, 0x4a, 0x4f, 0xfb, 0x04, 0xf3, 0x63, 0xb3, 0x3c, 0x7d, 0x8b, 0x6d, 0x73, 0x6e, 0x7a, 0x56,
0xc8, 0x16, 0x3b, 0xf1, 0x13, 0x36, 0xb3, 0x90, 0x3e, 0x55, 0x7a, 0x43, 0x2c, 0x3e, 0x07, 0x05,
0x9f, 0x63, 0x45, 0x55, 0xc8, 0xf6, 0xb1, 0x65, 0x29, 0x1d, 0x4c, 0xfd, 0x70, 0x5e, 0x72, 0xba,
0x62, 0x19, 0x8a, 0x7e, 0x67, 0x2a, 0x7e, 0x1e, 0x77, 0x25, 0x89, 0x9f, 0x24, 0x92, 0xa7, 0xd8,
0xa4, 0xd3, 0xe6, 0x92, 0xbc, 0x8b, 0x2e, 0x43, 0x89, 0x0e, 0x59, 0x76, 0x7e, 0x27, 0xce, 0x3a,
0x25, 0x15, 0x29, 0xf1, 0x1e, 0x67, 0x5a, 0x83, 0x82, 0x71, 0xdd, 0x70, 0x59, 0x92, 0x94, 0x05,
0x8c, 0xeb, 0x86, 0xc3, 0xf0, 0x34, 0x14, 0xc9, 0xfc, 0x5c, 0x8e, 0x14, 0xfd, 0x48, 0x81, 0xd0,
0x38, 0x8b, 0xf8, 0xc7, 0x04, 0x08, 0x61, 0x07, 0x8c, 0x6e, 0x41, 0x8a, 0xc4, 0x22, 0x1e, 0x56,
0x6a, 0xeb, 0x2c, 0x50, 0xad, 0x3b, 0x81, 0x6a, 0xbd, 0xe5, 0x04, 0xaa, 0xcd, 0xdc, 0x97, 0x5f,
0xaf, 0xc5, 0x3e, 0xff, 0xeb, 0x5a, 0x5c, 0xa2, 0x12, 0xe8, 0x3c, 0xf1, 0x95, 0x8a, 0x36, 0x90,
0x35, 0x95, 0x0e, 0x39, 0x4f, 0x1c, 0xa1, 0xa2, 0x0d, 0x76, 0x54, 0xb4, 0x0b, 0x42, 0x5b, 0x1f,
0x58, 0x78, 0x60, 0x0d, 0x2d, 0x99, 0x05, 0x42, 0x1e, 0x4c, 0x02, 0xee, 0x90, 0x85, 0xd7, 0xba,
0xc3, 0x79, 0x40, 0x19, 0xa5, 0x4a, 0x3b, 0x48, 0x20, 0x6e, 0xf5, 0x54, 0xe9, 0x69, 0xaa, 0x62,
0xeb, 0xa6, 0x55, 0x4d, 0x5d, 0x4a, 0x4e, 0xf4, 0x87, 0xf7, 0x1c, 0x96, 0x23, 0x43, 0x55, 0x6c,
0xbc, 0x99, 0x22, 0xc3, 0x95, 0x7c, 0x92, 0xe8, 0x59, 0xa8, 0x28, 0x86, 0x21, 0x5b, 0xb6, 0x62,
0x63, 0xf9, 0xf8, 0xcc, 0xc6, 0x16, 0x0d, 0x34, 0x45, 0xa9, 0xa4, 0x18, 0xc6, 0x21, 0xa1, 0x6e,
0x12, 0x22, 0x7a, 0x06, 0xca, 0x24, 0x26, 0x69, 0x4a, 0x4f, 0xee, 0x62, 0xad, 0xd3, 0xb5, 0x69,
0x48, 0x49, 0x4a, 0x25, 0x4e, 0x6d, 0x52, 0xa2, 0xa8, 0xba, 0x2b, 0x4e, 0xe3, 0x11, 0x42, 0x90,
0x52, 0x15, 0x5b, 0xa1, 0x96, 0x2c, 0x4a, 0xb4, 0x4d, 0x68, 0x86, 0x62, 0x77, 0xb9, 0x7d, 0x68,
0x1b, 0x9d, 0x83, 0x0c, 0x57, 0x9b, 0xa4, 0x6a, 0x79, 0x0f, 0xad, 0x40, 0xda, 0x30, 0xf5, 0x53,
0x4c, 0x97, 0x2e, 0x27, 0xb1, 0x8e, 0xf8, 0xa3, 0x04, 0x2c, 0x8d, 0x45, 0x2e, 0xa2, 0xb7, 0xab,
0x58, 0x5d, 0xe7, 0x5b, 0xa4, 0x8d, 0x5e, 0x21, 0x7a, 0x15, 0x15, 0x9b, 0x3c, 0xda, 0x57, 0xc7,
0x4d, 0xdd, 0xa4, 0xbf, 0x73, 0xd3, 0x70, 0x6e, 0x74, 0x07, 0x84, 0x9e, 0x62, 0xd9, 0x32, 0xf3,
0xfe, 0xb2, 0x2f, 0xf2, 0x3f, 0x35, 0x66, 0x64, 0x16, 0x2b, 0xc8, 0x86, 0xe6, 0x4a, 0xca, 0x44,
0xd4, 0xa3, 0x22, 0x09, 0x56, 0x8e, 0xcf, 0x3e, 0x51, 0x06, 0xb6, 0x36, 0xc0, 0xf2, 0xd8, 0xaa,
0x9d, 0x1f, 0x53, 0xd8, 0x38, 0xd5, 0x54, 0x3c, 0x68, 0x3b, 0xcb, 0xb5, 0xec, 0x0a, 0xbb, 0xcb,
0x69, 0x89, 0x12, 0x94, 0x83, 0x31, 0x17, 0x95, 0x21, 0x61, 0x8f, 0xf8, 0xe4, 0x13, 0xf6, 0x08,
0xfd, 0x17, 0xa4, 0xc8, 0x04, 0xe9, 0xc4, 0xcb, 0x13, 0x12, 0x16, 0x2e, 0xd7, 0x3a, 0x33, 0xb0,
0x44, 0x39, 0x45, 0xd1, 0x3d, 0x0a, 0x6e, 0x1c, 0x0e, 0x6b, 0x15, 0x9f, 0x87, 0x4a, 0x28, 0xc8,
0xfa, 0xd6, 0x2e, 0xee, 0x5f, 0x3b, 0xb1, 0x02, 0xa5, 0x40, 0x34, 0x15, 0xcf, 0xc1, 0xca, 0xa4,
0xe0, 0x28, 0x76, 0x5d, 0x7a, 0x20, 0xc8, 0xa1, 0x9b, 0x90, 0x73, 0xa3, 0x23, 0x3b, 0x8a, 0xe3,
0xb6, 0x72, 0x98, 0x25, 0x97, 0x95, 0x9c, 0x41, 0xb2, 0xa5, 0xe9, 0x5e, 0x48, 0xd0, 0x81, 0x67,
0x15, 0xc3, 0x68, 0x2a, 0x56, 0x57, 0xfc, 0x00, 0xaa, 0x51, 0x91, 0x2f, 0x34, 0x8d, 0x94, 0xbb,
0x05, 0xcf, 0x41, 0xe6, 0x44, 0x37, 0xfb, 0x8a, 0x4d, 0x95, 0x95, 0x24, 0xde, 0x23, 0x5b, 0x93,
0x45, 0xc1, 0x24, 0x25, 0xb3, 0x8e, 0x28, 0xc3, 0xf9, 0xc8, 0xe8, 0x47, 0x44, 0xb4, 0x81, 0x8a,
0x99, 0x3d, 0x4b, 0x12, 0xeb, 0x78, 0x8a, 0xd8, 0x60, 0x59, 0x87, 0x7c, 0xd6, 0xa2, 0x73, 0xa5,
0xfa, 0xf3, 0x12, 0xef, 0x89, 0x6f, 0xb9, 0x5b, 0xdf, 0x8b, 0x2d, 0xe8, 0x2a, 0xa4, 0x68, 0x34,
0x62, 0x56, 0x3a, 0x37, 0xbe, 0xc9, 0x09, 0x97, 0x44, 0x79, 0xc4, 0x26, 0xd4, 0xa2, 0x63, 0xc9,
0x42, 0x9a, 0x7e, 0x9f, 0x80, 0x73, 0x93, 0xc3, 0xf1, 0x23, 0x3d, 0x8b, 0x02, 0x24, 0xed, 0x11,
0xf1, 0x95, 0xc9, 0x2b, 0x45, 0x89, 0x34, 0xd1, 0x11, 0x2c, 0xf5, 0xf4, 0xb6, 0xd2, 0x93, 0x7d,
0x67, 0x94, 0xa7, 0xd7, 0x97, 0xc7, 0x4f, 0x13, 0x35, 0x13, 0x56, 0xc7, 0x8e, 0x69, 0x85, 0xea,
0xd8, 0x75, 0xcf, 0x6a, 0xe4, 0x39, 0x4d, 0x7f, 0xff, 0x73, 0x8a, 0x2e, 0x41, 0xb1, 0xaf, 0x8c,
0x64, 0x7b, 0xc4, 0x9d, 0x2b, 0xf3, 0x9a, 0xd0, 0x57, 0x46, 0xad, 0x11, 0xf5, 0xac, 0xe2, 0x2f,
0xfd, 0x56, 0x0c, 0xe6, 0x1a, 0x8f, 0xd7, 0x8a, 0x87, 0xb0, 0xc2, 0xf2, 0x22, 0xac, 0x4e, 0x30,
0xe4, 0x1c, 0x7e, 0x0e, 0x39, 0xe2, 0x8f, 0xd7, 0x86, 0xe2, 0x2f, 0x12, 0xae, 0x83, 0x08, 0xa4,
0x28, 0x8f, 0xd9, 0x3e, 0xef, 0xc0, 0xb2, 0x8a, 0xdb, 0x9a, 0xfa, 0x7d, 0xcd, 0xb3, 0xc4, 0xa5,
0x1f, 0xb3, 0x75, 0xfe, 0x54, 0x80, 0x9c, 0x84, 0x2d, 0x83, 0x24, 0x08, 0x68, 0x13, 0xf2, 0x78,
0xd4, 0xc6, 0x86, 0xed, 0xe4, 0x54, 0x93, 0x73, 0x53, 0xc6, 0xdd, 0x70, 0x38, 0x09, 0xd2, 0x72,
0xc5, 0xd0, 0x0d, 0x0e, 0xaa, 0xa3, 0xf1, 0x31, 0x17, 0xf7, 0xa3, 0xea, 0x57, 0x1c, 0x54, 0x9d,
0x8c, 0x04, 0x56, 0x4c, 0x2a, 0x04, 0xab, 0x6f, 0x70, 0x58, 0x9d, 0x9a, 0xf1, 0xb1, 0x00, 0xae,
0xae, 0x07, 0x70, 0x75, 0x7a, 0xc6, 0x34, 0x23, 0x80, 0xf5, 0x2b, 0x0e, 0xb0, 0xce, 0xcc, 0x18,
0x71, 0x08, 0x59, 0xdf, 0x0e, 0x22, 0xeb, 0x6c, 0x84, 0xdb, 0x71, 0xa4, 0xa7, 0x42, 0xeb, 0x37,
0x7d, 0xd0, 0x3a, 0x17, 0x89, 0x69, 0x99, 0xa2, 0x09, 0xd8, 0xfa, 0xed, 0x00, 0xb6, 0xce, 0xcf,
0xb0, 0xc3, 0x14, 0x70, 0xbd, 0xe5, 0x07, 0xd7, 0x10, 0x89, 0xd1, 0xf9, 0xba, 0x47, 0xa1, 0xeb,
0xd7, 0x5c, 0x74, 0x5d, 0x88, 0x2c, 0x13, 0xf0, 0xb9, 0x84, 0xe1, 0xf5, 0xfe, 0x18, 0xbc, 0x66,
0x70, 0xf8, 0xd9, 0x48, 0x15, 0x33, 0xf0, 0xf5, 0xfe, 0x18, 0xbe, 0x2e, 0xcd, 0x50, 0x38, 0x03,
0x60, 0xbf, 0x3f, 0x19, 0x60, 0x47, 0x43, 0x60, 0x3e, 0xcc, 0xf9, 0x10, 0xb6, 0x1c, 0x81, 0xb0,
0x2b, 0x91, 0x68, 0x90, 0xa9, 0x9f, 0x1b, 0x62, 0x1f, 0x4d, 0x80, 0xd8, 0x0c, 0x0c, 0x5f, 0x89,
0x54, 0x3e, 0x07, 0xc6, 0x3e, 0x9a, 0x80, 0xb1, 0x97, 0x66, 0xaa, 0x9d, 0x09, 0xb2, 0xb7, 0x83,
0x20, 0x1b, 0xcd, 0x38, 0x63, 0x91, 0x28, 0xfb, 0x38, 0x0a, 0x65, 0x33, 0x24, 0xfc, 0x62, 0xa4,
0xc6, 0x05, 0x60, 0xf6, 0xfe, 0x18, 0xcc, 0x5e, 0x99, 0xb1, 0xd3, 0xe6, 0xc5, 0xd9, 0xcf, 0x93,
0x54, 0x2f, 0xe4, 0xaa, 0x49, 0xb6, 0x88, 0x4d, 0x53, 0x37, 0x39, 0x62, 0x66, 0x1d, 0xf1, 0x0a,
0xc1, 0x5d, 0x9e, 0x5b, 0x9e, 0x82, 0xc9, 0x69, 0x56, 0xee, 0x73, 0xc5, 0xe2, 0x6f, 0xe3, 0x9e,
0x2c, 0x85, 0x2b, 0x7e, 0xcc, 0x96, 0xe7, 0x98, 0xcd, 0x87, 0xd4, 0x13, 0x41, 0xa4, 0xbe, 0x06,
0x05, 0x92, 0x6d, 0x87, 0x40, 0xb8, 0x62, 0xb8, 0x20, 0xfc, 0x2a, 0x2c, 0xd1, 0xf0, 0xc9, 0xf0,
0x3c, 0x4f, 0xb1, 0x53, 0x34, 0x0d, 0xaa, 0x90, 0x1f, 0x98, 0x15, 0x58, 0xae, 0xfd, 0x12, 0x2c,
0xfb, 0x78, 0xdd, 0x2c, 0x9e, 0x21, 0x52, 0xc1, 0xe5, 0xde, 0xe0, 0xe9, 0xfc, 0x1f, 0xe2, 0x9e,
0x85, 0x3c, 0xf4, 0x3e, 0x09, 0x68, 0xc7, 0x1f, 0x11, 0xd0, 0x4e, 0x7c, 0x6f, 0xa0, 0xed, 0x47,
0x25, 0xc9, 0x20, 0x2a, 0xf9, 0x47, 0xdc, 0x5b, 0x13, 0x17, 0x36, 0xb7, 0x75, 0x15, 0x73, 0x9c,
0x40, 0xdb, 0x24, 0x41, 0xe9, 0xe9, 0x1d, 0x8e, 0x06, 0x48, 0x93, 0x70, 0xb9, 0xb1, 0x33, 0xcf,
0x43, 0xa3, 0x0b, 0x31, 0xd2, 0xd4, 0xc2, 0x1c, 0x62, 0x08, 0x90, 0x7c, 0x80, 0x59, 0xa4, 0x2b,
0x4a, 0xa4, 0x49, 0xf8, 0xe8, 0x26, 0xa3, 0xf1, 0xab, 0x28, 0xb1, 0x0e, 0xba, 0x05, 0x79, 0x5a,
0xfc, 0x97, 0x75, 0xc3, 0xe2, 0x01, 0x29, 0x90, 0xe8, 0xb0, 0x1a, 0xff, 0xfa, 0x01, 0xe1, 0xd9,
0x37, 0x2c, 0x29, 0x67, 0xf0, 0x96, 0x0f, 0x3d, 0xe5, 0x03, 0x00, 0xfe, 0x02, 0xe4, 0xc9, 0xe8,
0x2d, 0x43, 0x69, 0x63, 0x1a, 0x59, 0xf2, 0x92, 0x47, 0x10, 0xef, 0x03, 0x1a, 0x8f, 0x93, 0xa8,
0x09, 0x19, 0x7c, 0x8a, 0x07, 0x36, 0x59, 0xb6, 0x64, 0x18, 0x85, 0xf0, 0xbc, 0x08, 0x0f, 0xec,
0xcd, 0x2a, 0x31, 0xf2, 0xdf, 0xbf, 0x5e, 0x13, 0x18, 0xf7, 0x8b, 0x7a, 0x5f, 0xb3, 0x71, 0xdf,
0xb0, 0xcf, 0x24, 0x2e, 0x2f, 0xfe, 0x25, 0x41, 0xe0, 0x6a, 0x20, 0x7e, 0x4e, 0xb4, 0xad, 0xb3,
0xe5, 0x13, 0xbe, 0x32, 0xc5, 0x7c, 0xf6, 0xbe, 0x08, 0xd0, 0x51, 0x2c, 0xf9, 0x63, 0x65, 0x60,
0x63, 0x95, 0x1b, 0x3d, 0xdf, 0x51, 0xac, 0x77, 0x29, 0x81, 0xac, 0x3a, 0xf9, 0x79, 0x68, 0x61,
0x95, 0xa7, 0xfe, 0xd9, 0x8e, 0x62, 0x1d, 0x59, 0x58, 0xf5, 0xcd, 0x32, 0xfb, 0x70, 0xb3, 0x0c,
0xda, 0x38, 0x17, 0xb2, 0xb1, 0x0f, 0x48, 0xe6, 0xfd, 0x40, 0x12, 0xd5, 0x20, 0x67, 0x98, 0x9a,
0x6e, 0x6a, 0xf6, 0x19, 0x5d, 0x98, 0xa4, 0xe4, 0xf6, 0xd1, 0x65, 0x28, 0xf5, 0x71, 0xdf, 0xd0,
0xf5, 0x9e, 0xcc, 0x9c, 0x4d, 0x81, 0x8a, 0x16, 0x39, 0xb1, 0x41, 0x7d, 0xce, 0xa7, 0x09, 0xef,
0xf4, 0x79, 0x05, 0x83, 0x47, 0x6b, 0xde, 0xd5, 0x09, 0xe6, 0xf5, 0x51, 0xc8, 0x24, 0x42, 0xf6,
0x75, 0xfb, 0x3f, 0x94, 0x81, 0xc5, 0x9f, 0xd0, 0x12, 0x62, 0x30, 0x37, 0x42, 0x87, 0xb0, 0xe4,
0x1e, 0x7e, 0x79, 0x48, 0x9d, 0x82, 0xb3, 0x9d, 0xe7, 0xf5, 0x1e, 0xc2, 0x69, 0x90, 0x6c, 0xa1,
0xf7, 0xe0, 0xc9, 0x90, 0x67, 0x73, 0x55, 0x27, 0xe6, 0x75, 0x70, 0x4f, 0x04, 0x1d, 0x9c, 0xa3,
0xda, 0x33, 0x56, 0xf2, 0x21, 0xcf, 0xdc, 0x0e, 0x94, 0x83, 0x69, 0xde, 0xc4, 0xe5, 0xbf, 0x0c,
0x25, 0x13, 0xdb, 0x8a, 0x36, 0x90, 0x03, 0x75, 0xbf, 0x22, 0x23, 0xf2, 0x6a, 0xe2, 0x01, 0x3c,
0x31, 0x31, 0xdd, 0x43, 0xaf, 0x42, 0xde, 0xcb, 0x14, 0xe3, 0x11, 0xe0, 0xc9, 0x2d, 0x0d, 0x79,
0xbc, 0xe2, 0xef, 0xe2, 0x9e, 0xca, 0x60, 0xb1, 0xa9, 0x01, 0x19, 0x13, 0x5b, 0xc3, 0x1e, 0x2b,
0xff, 0x94, 0xaf, 0xbf, 0x34, 0x5f, 0xa2, 0x48, 0xa8, 0xc3, 0x9e, 0x2d, 0x71, 0x61, 0xf1, 0x3e,
0x64, 0x18, 0x05, 0x15, 0x20, 0x7b, 0xb4, 0x77, 0x67, 0x6f, 0xff, 0xdd, 0x3d, 0x21, 0x86, 0x00,
0x32, 0x1b, 0xf5, 0x7a, 0xe3, 0xa0, 0x25, 0xc4, 0x51, 0x1e, 0xd2, 0x1b, 0x9b, 0xfb, 0x52, 0x4b,
0x48, 0x10, 0xb2, 0xd4, 0xb8, 0xdd, 0xa8, 0xb7, 0x84, 0x24, 0x5a, 0x82, 0x12, 0x6b, 0xcb, 0xdb,
0xfb, 0xd2, 0xdd, 0x8d, 0x96, 0x90, 0xf2, 0x91, 0x0e, 0x1b, 0x7b, 0x5b, 0x0d, 0x49, 0x48, 0x8b,
0x2f, 0xc3, 0xf9, 0xc8, 0xd4, 0xd2, 0xab, 0x24, 0xc5, 0x7d, 0x95, 0x24, 0xf1, 0xe7, 0x09, 0xa8,
0x45, 0xe7, 0x8b, 0xe8, 0x76, 0x68, 0xe2, 0xd7, 0x17, 0x48, 0x36, 0x43, 0xb3, 0x47, 0xcf, 0x40,
0xd9, 0xc4, 0x27, 0xd8, 0x6e, 0x77, 0x59, 0xfe, 0xca, 0x02, 0x66, 0x49, 0x2a, 0x71, 0x2a, 0x15,
0xb2, 0x18, 0xdb, 0x87, 0xb8, 0x6d, 0xcb, 0xcc, 0x17, 0xb1, 0x4d, 0x97, 0x27, 0x6c, 0x84, 0x7a,
0xc8, 0x88, 0xe2, 0x07, 0x0b, 0xd9, 0x32, 0x0f, 0x69, 0xa9, 0xd1, 0x92, 0xde, 0x13, 0x92, 0x08,
0x41, 0x99, 0x36, 0xe5, 0xc3, 0xbd, 0x8d, 0x83, 0xc3, 0xe6, 0x3e, 0xb1, 0xe5, 0x32, 0x54, 0x1c,
0x5b, 0x3a, 0xc4, 0xb4, 0xf8, 0xbe, 0x17, 0x7f, 0x7c, 0xd5, 0xb4, 0x6d, 0x28, 0x87, 0xd2, 0xc5,
0xf8, 0x38, 0x9e, 0xf1, 0xaa, 0x61, 0x6e, 0x2a, 0x28, 0x95, 0x4e, 0xfd, 0x5d, 0xf1, 0xd7, 0x71,
0x78, 0x6a, 0x4a, 0x42, 0x89, 0xde, 0x81, 0x8c, 0x65, 0x2b, 0xf6, 0xd0, 0xe2, 0x96, 0x7f, 0x6d,
0x91, 0x74, 0x74, 0x9d, 0xd1, 0x0e, 0xa9, 0x02, 0x89, 0x2b, 0x12, 0x6f, 0x40, 0xd1, 0x4f, 0x8f,
0x36, 0x9c, 0xb7, 0xf3, 0x12, 0xe2, 0x77, 0x49, 0x78, 0x32, 0x22, 0xe7, 0x47, 0x1d, 0x40, 0x7d,
0x5d, 0xd5, 0x4e, 0x34, 0xac, 0xca, 0xf6, 0x48, 0x9e, 0x73, 0xbc, 0x21, 0x2d, 0xeb, 0x77, 0xb9,
0x8a, 0xd6, 0x88, 0x8f, 0x57, 0xe8, 0x87, 0x28, 0xe8, 0x16, 0x80, 0x3d, 0x92, 0x4d, 0xdc, 0xd6,
0x4d, 0xd5, 0xc9, 0xb3, 0xc6, 0xcf, 0x74, 0x6b, 0x24, 0x51, 0x0e, 0x29, 0x6f, 0xf3, 0xd6, 0xb4,
0xcc, 0x0a, 0xbd, 0xc1, 0x95, 0x92, 0x4d, 0xe4, 0xd4, 0xdb, 0x2f, 0x4e, 0xa8, 0x10, 0xe2, 0x36,
0x51, 0x4c, 0xb7, 0x32, 0x55, 0x4c, 0xf9, 0xd1, 0xdd, 0x49, 0x3e, 0x3c, 0x3d, 0x9f, 0x0f, 0x5f,
0xcc, 0x7b, 0x67, 0x1e, 0xce, 0x7b, 0x8b, 0x6f, 0x82, 0x10, 0x36, 0x71, 0x70, 0xe9, 0xcb, 0x00,
0x47, 0x7b, 0x77, 0xf7, 0xb7, 0x76, 0xb6, 0x77, 0x1a, 0x5b, 0x42, 0x1c, 0x15, 0x21, 0xe7, 0xf6,
0x12, 0xe2, 0xaf, 0x02, 0x1b, 0x20, 0x08, 0xc5, 0xf6, 0x43, 0x9b, 0xf4, 0xd5, 0x79, 0x71, 0xdd,
0xba, 0xd3, 0x08, 0x6e, 0xd1, 0x29, 0xe5, 0xf9, 0xd0, 0x72, 0x25, 0x1f, 0xc5, 0x72, 0xa5, 0x1e,
0xc7, 0x72, 0xa5, 0x1f, 0x72, 0xb9, 0x6e, 0x42, 0x39, 0x68, 0x9c, 0xf9, 0xce, 0xe9, 0x4f, 0x93,
0x5e, 0xf0, 0x0a, 0x16, 0x42, 0x1f, 0x59, 0xc6, 0x1c, 0x5a, 0x82, 0xc4, 0x82, 0x4b, 0x30, 0x31,
0xeb, 0x49, 0x3e, 0xbe, 0xac, 0x27, 0xf5, 0x90, 0x59, 0x8f, 0x7f, 0x2f, 0xa6, 0x83, 0x7b, 0x71,
0x2c, 0x41, 0xc9, 0x4c, 0x48, 0x50, 0xde, 0x03, 0xf0, 0xdd, 0xf3, 0xad, 0x40, 0xda, 0xd4, 0x87,
0x03, 0x95, 0x9e, 0x94, 0xb4, 0xc4, 0x3a, 0xe8, 0x26, 0xa4, 0x49, 0x58, 0x88, 0xf6, 0x69, 0xc4,
0xad, 0xfb, 0xca, 0xc6, 0x8c, 0x5b, 0xd4, 0x00, 0x8d, 0xdf, 0x5c, 0x44, 0x7c, 0xe2, 0xcd, 0xe0,
0x27, 0x9e, 0x8e, 0xbc, 0x03, 0x99, 0xfc, 0xa9, 0x4f, 0x20, 0x4d, 0xb7, 0x07, 0x49, 0xd4, 0xe8,
0x95, 0x21, 0x47, 0xfe, 0xa4, 0x8d, 0xfe, 0x1f, 0x40, 0xb1, 0x6d, 0x53, 0x3b, 0x1e, 0x7a, 0x1f,
0x58, 0x9b, 0xbc, 0xbd, 0x36, 0x1c, 0xbe, 0xcd, 0x0b, 0x7c, 0x9f, 0xad, 0x78, 0xa2, 0xbe, 0xbd,
0xe6, 0x53, 0x28, 0xee, 0x41, 0x39, 0x28, 0xeb, 0x60, 0x55, 0x36, 0x86, 0x20, 0x56, 0x65, 0xa5,
0x07, 0x8e, 0x55, 0x5d, 0xa4, 0x9b, 0x64, 0x57, 0xc3, 0xb4, 0x23, 0x7e, 0x17, 0x87, 0xa2, 0x7f,
0x77, 0xfe, 0xa7, 0xc1, 0x3d, 0xf1, 0xd3, 0x38, 0xe4, 0xdc, 0xc9, 0x47, 0x5c, 0xcd, 0x7a, 0xb6,
0x4b, 0xf8, 0x2f, 0x22, 0xd9, 0x5d, 0x6f, 0xd2, 0xbd, 0x41, 0x7e, 0xdd, 0xcd, 0x0c, 0xa3, 0xaa,
0xf3, 0x7e, 0x4b, 0x3b, 0xf7, 0x29, 0x3c, 0x11, 0xfe, 0x19, 0x1f, 0x07, 0x89, 0xd1, 0xe8, 0xbf,
0x21, 0xa3, 0xb4, 0xdd, 0x3b, 0x89, 0xf2, 0x84, 0x22, 0xb5, 0xc3, 0xba, 0xde, 0x1a, 0x6d, 0x50,
0x4e, 0x89, 0x4b, 0xf0, 0x51, 0x25, 0xdc, 0x1b, 0xe8, 0xb7, 0x88, 0x5e, 0xc6, 0x33, 0x3d, 0xc6,
0x91, 0xdc, 0x70, 0x6b, 0x8b, 0x04, 0x38, 0xc2, 0x27, 0x35, 0xee, 0xee, 0xdf, 0x6b, 0x6c, 0x09,
0x49, 0xf1, 0x75, 0xc8, 0xbb, 0xae, 0x07, 0x55, 0x21, 0xab, 0xa8, 0xaa, 0x89, 0x2d, 0x8b, 0x27,
0xcd, 0x4e, 0x97, 0x3e, 0x3d, 0xd0, 0x3f, 0xe6, 0xf7, 0xaf, 0x49, 0x89, 0x75, 0x44, 0x15, 0x2a,
0x21, 0xbf, 0x85, 0x5e, 0x87, 0xac, 0x31, 0x3c, 0x96, 0x9d, 0x4d, 0x1b, 0x7a, 0x1c, 0xe8, 0x94,
0x4c, 0x86, 0xc7, 0x3d, 0xad, 0x7d, 0x07, 0x9f, 0x39, 0x66, 0x32, 0x86, 0xc7, 0x77, 0xd8, 0xde,
0x66, 0x5f, 0x49, 0xf8, 0xbf, 0xf2, 0xe3, 0x38, 0xe4, 0x9c, 0xb3, 0x8a, 0xfe, 0x07, 0xf2, 0xae,
0x4f, 0x74, 0x9f, 0xa4, 0x44, 0x3a, 0x53, 0xae, 0xdf, 0x13, 0x41, 0x57, 0x61, 0xc9, 0xd2, 0x3a,
0x03, 0xe7, 0x1a, 0x8b, 0xd5, 0x28, 0x13, 0xf4, 0xd0, 0x54, 0xd8, 0x0f, 0xbb, 0x4e, 0x61, 0xed,
0x76, 0x2a, 0x97, 0x14, 0x52, 0xb7, 0x53, 0xb9, 0x94, 0x90, 0x26, 0xe9, 0xab, 0x10, 0x76, 0x1c,
0x3f, 0xe4, 0x60, 0x08, 0x4c, 0x08, 0xe5, 0xe1, 0x6c, 0x6f, 0x86, 0xd2, 0xec, 0x7f, 0xc6, 0x21,
0xe7, 0x5c, 0x94, 0xa1, 0x97, 0x7d, 0x2e, 0xac, 0x3c, 0x69, 0xc7, 0x72, 0x46, 0xef, 0xd9, 0x43,
0x70, 0x4a, 0x89, 0xc5, 0xa7, 0x14, 0xf5, 0x76, 0xc5, 0x79, 0x45, 0x94, 0x5a, 0xf8, 0x15, 0xd1,
0x8b, 0x80, 0x6c, 0xdd, 0x56, 0x7a, 0xf2, 0xa9, 0x6e, 0x6b, 0x83, 0x8e, 0xcc, 0x76, 0x08, 0xf3,
0x36, 0x02, 0xfd, 0xe5, 0x1e, 0xfd, 0xe1, 0xc0, 0xdd, 0x2c, 0x2e, 0x8c, 0x5d, 0xf4, 0x15, 0xc3,
0x39, 0xc8, 0x70, 0xa4, 0xc6, 0x9e, 0x31, 0xf0, 0x9e, 0x7b, 0xb5, 0x9a, 0xf2, 0x5d, 0xad, 0xd6,
0x20, 0xd7, 0xc7, 0xb6, 0x42, 0x5d, 0x27, 0x8b, 0x96, 0x6e, 0xff, 0xea, 0x6b, 0x50, 0xf0, 0x3d,
0x28, 0x21, 0xde, 0x74, 0xaf, 0xf1, 0xae, 0x10, 0xab, 0x65, 0x3f, 0xfb, 0xe2, 0x52, 0x72, 0x0f,
0x7f, 0x4c, 0x0e, 0x9a, 0xd4, 0xa8, 0x37, 0x1b, 0xf5, 0x3b, 0x42, 0xbc, 0x56, 0xf8, 0xec, 0x8b,
0x4b, 0x59, 0x09, 0xd3, 0x7b, 0xac, 0xab, 0x4d, 0x28, 0xfa, 0x57, 0x25, 0x78, 0xa8, 0x11, 0x94,
0xb7, 0x8e, 0x0e, 0x76, 0x77, 0xea, 0x1b, 0xad, 0x86, 0x7c, 0x6f, 0xbf, 0xd5, 0x10, 0xe2, 0xe8,
0x49, 0x58, 0xde, 0xdd, 0x79, 0xbb, 0xd9, 0x92, 0xeb, 0xbb, 0x3b, 0x8d, 0xbd, 0x96, 0xbc, 0xd1,
0x6a, 0x6d, 0xd4, 0xef, 0x08, 0x89, 0xeb, 0xbf, 0x29, 0x40, 0x65, 0x63, 0xb3, 0xbe, 0x43, 0x80,
0xaa, 0xd6, 0x56, 0xa8, 0x8b, 0xa8, 0x43, 0x8a, 0x56, 0xc4, 0xa7, 0x3e, 0x0e, 0xae, 0x4d, 0xbf,
0xe5, 0x44, 0xdb, 0x90, 0xa6, 0xc5, 0x72, 0x34, 0xfd, 0xb5, 0x70, 0x6d, 0xc6, 0xb5, 0x27, 0x19,
0x0c, 0x3d, 0x45, 0x53, 0x9f, 0x0f, 0xd7, 0xa6, 0xdf, 0x82, 0xa2, 0x5d, 0xc8, 0x3a, 0xb5, 0xcc,
0x59, 0x0f, 0x71, 0x6b, 0x33, 0xaf, 0x13, 0xc9, 0xd4, 0x58, 0xcd, 0x79, 0xfa, 0xcb, 0xe2, 0xda,
0x8c, 0xfb, 0x51, 0xb4, 0x03, 0x19, 0x5e, 0xee, 0x99, 0xf1, 0xa8, 0xb6, 0x36, 0xeb, 0x5a, 0x10,
0x49, 0x90, 0xf7, 0xaa, 0xf9, 0xb3, 0xdf, 0x4b, 0xd7, 0xe6, 0xb8, 0xfa, 0x45, 0xf7, 0xa1, 0x14,
0x2c, 0x21, 0xcd, 0xf7, 0x70, 0xb7, 0x36, 0xe7, 0x05, 0x24, 0xd1, 0x1f, 0xac, 0x27, 0xcd, 0xf7,
0x90, 0xb7, 0x36, 0xe7, 0x7d, 0x24, 0xfa, 0x10, 0x96, 0xc6, 0xeb, 0x3d, 0xf3, 0xbf, 0xeb, 0xad,
0x2d, 0x70, 0x43, 0x89, 0xfa, 0x80, 0x26, 0xd4, 0x89, 0x16, 0x78, 0xe6, 0x5b, 0x5b, 0xe4, 0xc2,
0x12, 0xa9, 0x50, 0x09, 0x57, 0x1d, 0xe6, 0x7d, 0xf6, 0x5b, 0x9b, 0xfb, 0xf2, 0x92, 0x7d, 0x25,
0x08, 0x6d, 0xe7, 0x7d, 0x06, 0x5c, 0x9b, 0xfb, 0x2e, 0x13, 0x1d, 0x01, 0xf8, 0x0a, 0x49, 0x73,
0x3c, 0x0b, 0xae, 0xcd, 0x73, 0xab, 0x89, 0x0c, 0x58, 0x9e, 0x54, 0x40, 0x5a, 0xe4, 0x95, 0x70,
0x6d, 0xa1, 0xcb, 0x4e, 0xb2, 0x9f, 0x83, 0x10, 0x73, 0xbe, 0x57, 0xc3, 0xb5, 0x39, 0x6f, 0x3d,
0x37, 0x1b, 0x5f, 0x7e, 0xb3, 0x1a, 0xff, 0xea, 0x9b, 0xd5, 0xf8, 0xdf, 0xbe, 0x59, 0x8d, 0x7f,
0xfe, 0xed, 0x6a, 0xec, 0xab, 0x6f, 0x57, 0x63, 0x7f, 0xfe, 0x76, 0x35, 0xf6, 0xbf, 0x2f, 0x74,
0x34, 0xbb, 0x3b, 0x3c, 0x5e, 0x6f, 0xeb, 0xfd, 0x6b, 0xfe, 0x3f, 0x90, 0x4c, 0xfa, 0x53, 0xcb,
0x71, 0x86, 0x46, 0xd3, 0x1b, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xb5, 0xc1, 0x14, 0x70, 0xf4,
0x32, 0x00, 0x00,
// 3495 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5b, 0x4b, 0x8f, 0x1b, 0xc7,
0xf1, 0xe7, 0xfb, 0x51, 0x7c, 0xcd, 0xf6, 0xae, 0x65, 0x8a, 0x96, 0x76, 0xe5, 0x11, 0x6c, 0xcb,
0xb2, 0xbd, 0xfa, 0x5b, 0x82, 0x6c, 0xf9, 0x6f, 0x3b, 0xc6, 0x2e, 0x97, 0x6b, 0xae, 0xb4, 0xda,
0x5d, 0xcf, 0x72, 0xd7, 0x70, 0xe2, 0x68, 0x3c, 0xe4, 0xf4, 0x92, 0x63, 0x91, 0x9c, 0xf1, 0xcc,
0x70, 0xcd, 0xf5, 0x29, 0x08, 0xe0, 0x8b, 0x11, 0x20, 0xbe, 0x25, 0x40, 0x60, 0x04, 0x01, 0x12,
0x20, 0x1f, 0x21, 0xa7, 0x5c, 0xe2, 0x83, 0x0f, 0x39, 0xf8, 0x96, 0x20, 0x07, 0x27, 0xb0, 0x6f,
0xf9, 0x02, 0x39, 0xc5, 0x09, 0xfa, 0x31, 0xc3, 0x99, 0x21, 0x87, 0x0f, 0x4b, 0x0a, 0x02, 0xe4,
0x36, 0x5d, 0xac, 0xaa, 0xee, 0xae, 0xee, 0xae, 0xaa, 0x5f, 0x75, 0x13, 0x9e, 0xb0, 0x71, 0x5f,
0xc5, 0x66, 0x4f, 0xeb, 0xdb, 0xd7, 0x94, 0x66, 0x4b, 0xbb, 0x66, 0x9f, 0x19, 0xd8, 0x5a, 0x37,
0x4c, 0xdd, 0xd6, 0x51, 0x69, 0xf4, 0xe3, 0x3a, 0xf9, 0xb1, 0x72, 0xd1, 0xc3, 0xdd, 0x32, 0xcf,
0x0c, 0x5b, 0xbf, 0x66, 0x98, 0xba, 0x7e, 0xc2, 0xf8, 0x2b, 0x17, 0x3c, 0x3f, 0x53, 0x3d, 0x5e,
0x6d, 0xbe, 0x5f, 0xb9, 0xf0, 0x7d, 0x7c, 0xe6, 0xfc, 0x7a, 0x71, 0x4c, 0xd6, 0x50, 0x4c, 0xa5,
0xe7, 0xfc, 0xbc, 0xd6, 0xd6, 0xf5, 0x76, 0x17, 0x5f, 0xa3, 0xad, 0xe6, 0xe0, 0xe4, 0x9a, 0xad,
0xf5, 0xb0, 0x65, 0x2b, 0x3d, 0x83, 0x33, 0xac, 0xb4, 0xf5, 0xb6, 0x4e, 0x3f, 0xaf, 0x91, 0x2f,
0x46, 0x15, 0xff, 0x05, 0x90, 0x96, 0xf0, 0x07, 0x03, 0x6c, 0xd9, 0xe8, 0x3a, 0x24, 0x70, 0xab,
0xa3, 0x97, 0xa3, 0x97, 0xa2, 0x57, 0x72, 0xd7, 0x2f, 0xac, 0x07, 0x26, 0xb7, 0xce, 0xf9, 0x6a,
0xad, 0x8e, 0x5e, 0x8f, 0x48, 0x94, 0x17, 0xdd, 0x84, 0xe4, 0x49, 0x77, 0x60, 0x75, 0xca, 0x31,
0x2a, 0x74, 0x31, 0x4c, 0x68, 0x9b, 0x30, 0xd5, 0x23, 0x12, 0xe3, 0x26, 0x5d, 0x69, 0xfd, 0x13,
0xbd, 0x1c, 0x9f, 0xde, 0xd5, 0x4e, 0xff, 0x84, 0x76, 0x45, 0x78, 0xd1, 0x26, 0x80, 0xd6, 0xd7,
0x6c, 0xb9, 0xd5, 0x51, 0xb4, 0x7e, 0x39, 0x41, 0x25, 0x9f, 0x0c, 0x97, 0xd4, 0xec, 0x2a, 0x61,
0xac, 0x47, 0xa4, 0xac, 0xe6, 0x34, 0xc8, 0x70, 0x3f, 0x18, 0x60, 0xf3, 0xac, 0x9c, 0x9c, 0x3e,
0xdc, 0xb7, 0x08, 0x13, 0x19, 0x2e, 0xe5, 0x46, 0x3b, 0x90, 0x6b, 0xe2, 0xb6, 0xd6, 0x97, 0x9b,
0x5d, 0xbd, 0x75, 0xbf, 0x9c, 0xa2, 0xc2, 0x62, 0x98, 0xf0, 0x26, 0x61, 0xdd, 0x24, 0x9c, 0x9b,
0xb1, 0x72, 0xb4, 0x1e, 0x91, 0xa0, 0xe9, 0x52, 0xd0, 0x6b, 0x90, 0x69, 0x75, 0x70, 0xeb, 0xbe,
0x6c, 0x0f, 0xcb, 0x69, 0xaa, 0x67, 0x2d, 0x4c, 0x4f, 0x95, 0xf0, 0x35, 0x86, 0xf5, 0x88, 0x94,
0x6e, 0xb1, 0x4f, 0xb4, 0x0d, 0xa0, 0xe2, 0xae, 0x76, 0x8a, 0x4d, 0x22, 0x9f, 0x99, 0x6e, 0x83,
0x2d, 0xc6, 0xd9, 0x18, 0xf2, 0x61, 0x64, 0x55, 0x87, 0x80, 0xaa, 0x90, 0xc5, 0x7d, 0x95, 0x4f,
0x27, 0x4b, 0xd5, 0x5c, 0x0a, 0x5d, 0xef, 0xbe, 0xea, 0x9d, 0x4c, 0x06, 0xf3, 0x36, 0xba, 0x05,
0xa9, 0x96, 0xde, 0xeb, 0x69, 0x76, 0x19, 0xa8, 0x86, 0xd5, 0xd0, 0x89, 0x50, 0xae, 0x7a, 0x44,
0xe2, 0xfc, 0x68, 0x0f, 0x8a, 0x5d, 0xcd, 0xb2, 0x65, 0xab, 0xaf, 0x18, 0x56, 0x47, 0xb7, 0xad,
0x72, 0x8e, 0x6a, 0x78, 0x2a, 0x4c, 0xc3, 0xae, 0x66, 0xd9, 0x87, 0x0e, 0x73, 0x3d, 0x22, 0x15,
0xba, 0x5e, 0x02, 0xd1, 0xa7, 0x9f, 0x9c, 0x60, 0xd3, 0x55, 0x58, 0xce, 0x4f, 0xd7, 0xb7, 0x4f,
0xb8, 0x1d, 0x79, 0xa2, 0x4f, 0xf7, 0x12, 0xd0, 0x0f, 0x60, 0xb9, 0xab, 0x2b, 0xaa, 0xab, 0x4e,
0x6e, 0x75, 0x06, 0xfd, 0xfb, 0xe5, 0x02, 0x55, 0xfa, 0x6c, 0xe8, 0x20, 0x75, 0x45, 0x75, 0x54,
0x54, 0x89, 0x40, 0x3d, 0x22, 0x2d, 0x75, 0x83, 0x44, 0x74, 0x0f, 0x56, 0x14, 0xc3, 0xe8, 0x9e,
0x05, 0xb5, 0x17, 0xa9, 0xf6, 0xab, 0x61, 0xda, 0x37, 0x88, 0x4c, 0x50, 0x3d, 0x52, 0xc6, 0xa8,
0xa8, 0x01, 0x82, 0x61, 0x62, 0x43, 0x31, 0xb1, 0x6c, 0x98, 0xba, 0xa1, 0x5b, 0x4a, 0xb7, 0x5c,
0xa2, 0xba, 0x9f, 0x09, 0xd3, 0x7d, 0xc0, 0xf8, 0x0f, 0x38, 0x7b, 0x3d, 0x22, 0x95, 0x0c, 0x3f,
0x89, 0x69, 0xd5, 0x5b, 0xd8, 0xb2, 0x46, 0x5a, 0x85, 0x59, 0x5a, 0x29, 0xbf, 0x5f, 0xab, 0x8f,
0x84, 0x6a, 0x90, 0xc3, 0x43, 0x22, 0x2e, 0x9f, 0xea, 0x36, 0x2e, 0x2f, 0x4d, 0x3f, 0x58, 0x35,
0xca, 0x7a, 0xac, 0xdb, 0x98, 0x1c, 0x2a, 0xec, 0xb6, 0x90, 0x02, 0x8f, 0x9d, 0x62, 0x53, 0x3b,
0x39, 0xa3, 0x6a, 0x64, 0xfa, 0x8b, 0xa5, 0xe9, 0xfd, 0x32, 0xa2, 0x0a, 0x9f, 0x0b, 0x53, 0x78,
0x4c, 0x85, 0x88, 0x8a, 0x9a, 0x23, 0x52, 0x8f, 0x48, 0xcb, 0xa7, 0xe3, 0x64, 0xb2, 0xc5, 0x4e,
0xb4, 0xbe, 0xd2, 0xd5, 0x3e, 0xc2, 0xfc, 0xd8, 0x2c, 0x4f, 0xdf, 0x62, 0xdb, 0x9c, 0x9b, 0x9e,
0x15, 0xb2, 0xc5, 0x4e, 0xbc, 0x84, 0xcd, 0x34, 0x24, 0x4f, 0x95, 0xee, 0x00, 0x8b, 0xcf, 0x40,
0xce, 0xe3, 0x58, 0x51, 0x19, 0xd2, 0x3d, 0x6c, 0x59, 0x4a, 0x1b, 0x53, 0x3f, 0x9c, 0x95, 0x9c,
0xa6, 0x58, 0x84, 0xbc, 0xd7, 0x99, 0x8a, 0x9f, 0x46, 0x5d, 0x49, 0xe2, 0x27, 0x89, 0xe4, 0x29,
0x36, 0xe9, 0xb4, 0xb9, 0x24, 0x6f, 0xa2, 0xcb, 0x50, 0xa0, 0x43, 0x96, 0x9d, 0xdf, 0x89, 0xb3,
0x4e, 0x48, 0x79, 0x4a, 0x3c, 0xe6, 0x4c, 0x6b, 0x90, 0x33, 0xae, 0x1b, 0x2e, 0x4b, 0x9c, 0xb2,
0x80, 0x71, 0xdd, 0x70, 0x18, 0x9e, 0x84, 0x3c, 0x99, 0x9f, 0xcb, 0x91, 0xa0, 0x9d, 0xe4, 0x08,
0x8d, 0xb3, 0x88, 0x7f, 0x8c, 0x81, 0x10, 0x74, 0xc0, 0xe8, 0x16, 0x24, 0x48, 0x2c, 0xe2, 0x61,
0xa5, 0xb2, 0xce, 0x02, 0xd5, 0xba, 0x13, 0xa8, 0xd6, 0x1b, 0x4e, 0xa0, 0xda, 0xcc, 0x7c, 0xf1,
0xd5, 0x5a, 0xe4, 0xd3, 0xbf, 0xae, 0x45, 0x25, 0x2a, 0x81, 0xce, 0x13, 0x5f, 0xa9, 0x68, 0x7d,
0x59, 0x53, 0xe9, 0x90, 0xb3, 0xc4, 0x11, 0x2a, 0x5a, 0x7f, 0x47, 0x45, 0xbb, 0x20, 0xb4, 0xf4,
0xbe, 0x85, 0xfb, 0xd6, 0xc0, 0x92, 0x59, 0x20, 0xe4, 0xc1, 0xc4, 0xe7, 0x0e, 0x59, 0x78, 0xad,
0x3a, 0x9c, 0x07, 0x94, 0x51, 0x2a, 0xb5, 0xfc, 0x04, 0xe2, 0x56, 0x4f, 0x95, 0xae, 0xa6, 0x2a,
0xb6, 0x6e, 0x5a, 0xe5, 0xc4, 0xa5, 0xf8, 0x44, 0x7f, 0x78, 0xec, 0xb0, 0x1c, 0x19, 0xaa, 0x62,
0xe3, 0xcd, 0x04, 0x19, 0xae, 0xe4, 0x91, 0x44, 0x4f, 0x43, 0x49, 0x31, 0x0c, 0xd9, 0xb2, 0x15,
0x1b, 0xcb, 0xcd, 0x33, 0x1b, 0x5b, 0x34, 0xd0, 0xe4, 0xa5, 0x82, 0x62, 0x18, 0x87, 0x84, 0xba,
0x49, 0x88, 0xe8, 0x29, 0x28, 0x92, 0x98, 0xa4, 0x29, 0x5d, 0xb9, 0x83, 0xb5, 0x76, 0xc7, 0xa6,
0x21, 0x25, 0x2e, 0x15, 0x38, 0xb5, 0x4e, 0x89, 0xa2, 0xea, 0xae, 0x38, 0x8d, 0x47, 0x08, 0x41,
0x42, 0x55, 0x6c, 0x85, 0x5a, 0x32, 0x2f, 0xd1, 0x6f, 0x42, 0x33, 0x14, 0xbb, 0xc3, 0xed, 0x43,
0xbf, 0xd1, 0x39, 0x48, 0x71, 0xb5, 0x71, 0xaa, 0x96, 0xb7, 0xd0, 0x0a, 0x24, 0x0d, 0x53, 0x3f,
0xc5, 0x74, 0xe9, 0x32, 0x12, 0x6b, 0x88, 0x3f, 0x8a, 0xc1, 0xd2, 0x58, 0xe4, 0x22, 0x7a, 0x3b,
0x8a, 0xd5, 0x71, 0xfa, 0x22, 0xdf, 0xe8, 0x25, 0xa2, 0x57, 0x51, 0xb1, 0xc9, 0xa3, 0x7d, 0x79,
0xdc, 0xd4, 0x75, 0xfa, 0x3b, 0x37, 0x0d, 0xe7, 0x46, 0x77, 0x40, 0xe8, 0x2a, 0x96, 0x2d, 0x33,
0xef, 0x2f, 0x7b, 0x22, 0xff, 0x13, 0x63, 0x46, 0x66, 0xb1, 0x82, 0x6c, 0x68, 0xae, 0xa4, 0x48,
0x44, 0x47, 0x54, 0x24, 0xc1, 0x4a, 0xf3, 0xec, 0x23, 0xa5, 0x6f, 0x6b, 0x7d, 0x2c, 0x8f, 0xad,
0xda, 0xf9, 0x31, 0x85, 0xb5, 0x53, 0x4d, 0xc5, 0xfd, 0x96, 0xb3, 0x5c, 0xcb, 0xae, 0xb0, 0xbb,
0x9c, 0x96, 0x28, 0x41, 0xd1, 0x1f, 0x73, 0x51, 0x11, 0x62, 0xf6, 0x90, 0x4f, 0x3e, 0x66, 0x0f,
0xd1, 0xff, 0x41, 0x82, 0x4c, 0x90, 0x4e, 0xbc, 0x38, 0x21, 0x61, 0xe1, 0x72, 0x8d, 0x33, 0x03,
0x4b, 0x94, 0x53, 0x14, 0xdd, 0xa3, 0xe0, 0xc6, 0xe1, 0xa0, 0x56, 0xf1, 0x59, 0x28, 0x05, 0x82,
0xac, 0x67, 0xed, 0xa2, 0xde, 0xb5, 0x13, 0x4b, 0x50, 0xf0, 0x45, 0x53, 0xf1, 0x1c, 0xac, 0x4c,
0x0a, 0x8e, 0x62, 0xc7, 0xa5, 0xfb, 0x82, 0x1c, 0xba, 0x09, 0x19, 0x37, 0x3a, 0xb2, 0xa3, 0x38,
0x6e, 0x2b, 0x87, 0x59, 0x72, 0x59, 0xc9, 0x19, 0x24, 0x5b, 0x9a, 0xee, 0x85, 0x18, 0x1d, 0x78,
0x5a, 0x31, 0x8c, 0xba, 0x62, 0x75, 0xc4, 0xf7, 0xa0, 0x1c, 0x16, 0xf9, 0x02, 0xd3, 0x48, 0xb8,
0x5b, 0xf0, 0x1c, 0xa4, 0x4e, 0x74, 0xb3, 0xa7, 0xd8, 0x54, 0x59, 0x41, 0xe2, 0x2d, 0xb2, 0x35,
0x59, 0x14, 0x8c, 0x53, 0x32, 0x6b, 0x88, 0x32, 0x9c, 0x0f, 0x8d, 0x7e, 0x44, 0x44, 0xeb, 0xab,
0x98, 0xd9, 0xb3, 0x20, 0xb1, 0xc6, 0x48, 0x11, 0x1b, 0x2c, 0x6b, 0x90, 0x6e, 0x2d, 0x3a, 0x57,
0xaa, 0x3f, 0x2b, 0xf1, 0x96, 0xf8, 0x86, 0xbb, 0xf5, 0x47, 0xb1, 0x05, 0x5d, 0x85, 0x04, 0x8d,
0x46, 0xcc, 0x4a, 0xe7, 0xc6, 0x37, 0x39, 0xe1, 0x92, 0x28, 0x8f, 0x58, 0x87, 0x4a, 0x78, 0x2c,
0x59, 0x48, 0xd3, 0x1f, 0x62, 0x70, 0x6e, 0x72, 0x38, 0x7e, 0xa8, 0x67, 0x51, 0x80, 0xb8, 0x3d,
0x24, 0xbe, 0x32, 0x7e, 0x25, 0x2f, 0x91, 0x4f, 0x74, 0x04, 0x4b, 0x5d, 0xbd, 0xa5, 0x74, 0x65,
0xcf, 0x19, 0xe5, 0xe9, 0xf5, 0xe5, 0xf1, 0xd3, 0x44, 0xcd, 0x84, 0xd5, 0xb1, 0x63, 0x5a, 0xa2,
0x3a, 0x76, 0xdd, 0xb3, 0x1a, 0x7a, 0x4e, 0x93, 0xdf, 0xfd, 0x9c, 0xa2, 0x4b, 0x90, 0xef, 0x29,
0x43, 0xd9, 0x1e, 0x72, 0xe7, 0xca, 0xbc, 0x26, 0xf4, 0x94, 0x61, 0x63, 0x48, 0x3d, 0xab, 0xf8,
0x4b, 0xaf, 0x15, 0xfd, 0xb9, 0xc6, 0xa3, 0xb5, 0xe2, 0x21, 0xac, 0xb0, 0xbc, 0x08, 0xab, 0x13,
0x0c, 0x39, 0x87, 0x9f, 0x43, 0x8e, 0xf8, 0xa3, 0xb5, 0xa1, 0xf8, 0x8b, 0x98, 0xeb, 0x20, 0x7c,
0x29, 0xca, 0x23, 0xb6, 0xcf, 0x5b, 0xb0, 0xac, 0xe2, 0x96, 0xa6, 0x7e, 0x57, 0xf3, 0x2c, 0x71,
0xe9, 0x47, 0x6c, 0x9d, 0x3f, 0xe5, 0x20, 0x23, 0x61, 0xcb, 0x20, 0x09, 0x02, 0xda, 0x84, 0x2c,
0x1e, 0xb6, 0xb0, 0x61, 0x3b, 0x39, 0xd5, 0xe4, 0xdc, 0x94, 0x71, 0xd7, 0x1c, 0x4e, 0x82, 0xb4,
0x5c, 0x31, 0x74, 0x83, 0x83, 0xea, 0x70, 0x7c, 0xcc, 0xc5, 0xbd, 0xa8, 0xfa, 0x25, 0x07, 0x55,
0xc7, 0x43, 0x81, 0x15, 0x93, 0x0a, 0xc0, 0xea, 0x1b, 0x1c, 0x56, 0x27, 0x66, 0x74, 0xe6, 0xc3,
0xd5, 0x55, 0x1f, 0xae, 0x4e, 0xce, 0x98, 0x66, 0x08, 0xb0, 0x7e, 0xc9, 0x01, 0xd6, 0xa9, 0x19,
0x23, 0x0e, 0x20, 0xeb, 0xdb, 0x7e, 0x64, 0x9d, 0x0e, 0x71, 0x3b, 0x8e, 0xf4, 0x54, 0x68, 0xfd,
0xba, 0x07, 0x5a, 0x67, 0x42, 0x31, 0x2d, 0x53, 0x34, 0x01, 0x5b, 0xbf, 0xe9, 0xc3, 0xd6, 0xd9,
0x19, 0x76, 0x98, 0x02, 0xae, 0xb7, 0xbc, 0xe0, 0x1a, 0x42, 0x31, 0x3a, 0x5f, 0xf7, 0x30, 0x74,
0xfd, 0x8a, 0x8b, 0xae, 0x73, 0xa1, 0x65, 0x02, 0x3e, 0x97, 0x20, 0xbc, 0xde, 0x1f, 0x83, 0xd7,
0x0c, 0x0e, 0x3f, 0x1d, 0xaa, 0x62, 0x06, 0xbe, 0xde, 0x1f, 0xc3, 0xd7, 0x85, 0x19, 0x0a, 0x67,
0x00, 0xec, 0x77, 0x27, 0x03, 0xec, 0x70, 0x08, 0xcc, 0x87, 0x39, 0x1f, 0xc2, 0x96, 0x43, 0x10,
0x76, 0x29, 0x14, 0x0d, 0x32, 0xf5, 0x73, 0x43, 0xec, 0xa3, 0x09, 0x10, 0x9b, 0x81, 0xe1, 0x2b,
0xa1, 0xca, 0xe7, 0xc0, 0xd8, 0x47, 0x13, 0x30, 0xf6, 0xd2, 0x4c, 0xb5, 0x33, 0x41, 0xf6, 0xb6,
0x1f, 0x64, 0xa3, 0x19, 0x67, 0x2c, 0x14, 0x65, 0x37, 0xc3, 0x50, 0x36, 0x43, 0xc2, 0xcf, 0x87,
0x6a, 0x5c, 0x00, 0x66, 0xef, 0x8f, 0xc1, 0xec, 0x95, 0x19, 0x3b, 0x6d, 0x5e, 0x9c, 0xfd, 0x2c,
0x49, 0xf5, 0x02, 0xae, 0x9a, 0x64, 0x8b, 0xd8, 0x34, 0x75, 0x93, 0x23, 0x66, 0xd6, 0x10, 0xaf,
0x10, 0xdc, 0x35, 0x72, 0xcb, 0x53, 0x30, 0x39, 0xcd, 0xca, 0x3d, 0xae, 0x58, 0xfc, 0x5d, 0x74,
0x24, 0x4b, 0xe1, 0x8a, 0x17, 0xb3, 0x65, 0x39, 0x66, 0xf3, 0x20, 0xf5, 0x98, 0x1f, 0xa9, 0xaf,
0x41, 0x8e, 0x64, 0xdb, 0x01, 0x10, 0xae, 0x18, 0x2e, 0x08, 0xbf, 0x0a, 0x4b, 0x34, 0x7c, 0x32,
0x3c, 0xcf, 0x53, 0xec, 0x04, 0x4d, 0x83, 0x4a, 0xe4, 0x07, 0x66, 0x05, 0x96, 0x6b, 0xbf, 0x00,
0xcb, 0x1e, 0x5e, 0x37, 0x8b, 0x67, 0x88, 0x54, 0x70, 0xb9, 0x37, 0x78, 0x3a, 0xff, 0x79, 0x74,
0x64, 0xa1, 0x11, 0x7a, 0x9f, 0x04, 0xb4, 0xa3, 0x0f, 0x09, 0x68, 0xc7, 0xbe, 0x33, 0xd0, 0xf6,
0xa2, 0x92, 0xb8, 0x1f, 0x95, 0xfc, 0x23, 0x3a, 0x5a, 0x13, 0x17, 0x36, 0xb7, 0x74, 0x15, 0x73,
0x9c, 0x40, 0xbf, 0x49, 0x82, 0xd2, 0xd5, 0xdb, 0x1c, 0x0d, 0x90, 0x4f, 0xc2, 0xe5, 0xc6, 0xce,
0x2c, 0x0f, 0x8d, 0x2e, 0xc4, 0x48, 0x52, 0x0b, 0x73, 0x88, 0x21, 0x40, 0xfc, 0x3e, 0x66, 0x91,
0x2e, 0x2f, 0x91, 0x4f, 0xc2, 0x47, 0x37, 0x19, 0x8d, 0x5f, 0x79, 0x89, 0x35, 0xd0, 0x2d, 0xc8,
0xd2, 0xe2, 0xbf, 0xac, 0x1b, 0x16, 0x0f, 0x48, 0xbe, 0x44, 0x87, 0xd5, 0xf8, 0xd7, 0x0f, 0x08,
0xcf, 0xbe, 0x61, 0x49, 0x19, 0x83, 0x7f, 0x79, 0xd0, 0x53, 0xd6, 0x07, 0xe0, 0x2f, 0x40, 0x96,
0x8c, 0xde, 0x32, 0x94, 0x16, 0xa6, 0x91, 0x25, 0x2b, 0x8d, 0x08, 0xe2, 0x3d, 0x40, 0xe3, 0x71,
0x12, 0xd5, 0x21, 0x85, 0x4f, 0x71, 0xdf, 0x26, 0xcb, 0x16, 0x0f, 0xa2, 0x10, 0x9e, 0x17, 0xe1,
0xbe, 0xbd, 0x59, 0x26, 0x46, 0xfe, 0xfb, 0x57, 0x6b, 0x02, 0xe3, 0x7e, 0x5e, 0xef, 0x69, 0x36,
0xee, 0x19, 0xf6, 0x99, 0xc4, 0xe5, 0xc5, 0xbf, 0xc4, 0x08, 0x5c, 0xf5, 0xc5, 0xcf, 0x89, 0xb6,
0x75, 0xb6, 0x7c, 0xcc, 0x53, 0xa6, 0x98, 0xcf, 0xde, 0x17, 0x01, 0xda, 0x8a, 0x25, 0x7f, 0xa8,
0xf4, 0x6d, 0xac, 0x72, 0xa3, 0x67, 0xdb, 0x8a, 0xf5, 0x36, 0x25, 0x90, 0x55, 0x27, 0x3f, 0x0f,
0x2c, 0xac, 0xf2, 0xd4, 0x3f, 0xdd, 0x56, 0xac, 0x23, 0x0b, 0xab, 0x9e, 0x59, 0xa6, 0x1f, 0x6c,
0x96, 0x7e, 0x1b, 0x67, 0x02, 0x36, 0xf6, 0x00, 0xc9, 0xac, 0x17, 0x48, 0xa2, 0x0a, 0x64, 0x0c,
0x53, 0xd3, 0x4d, 0xcd, 0x3e, 0xa3, 0x0b, 0x13, 0x97, 0xdc, 0x36, 0xba, 0x0c, 0x85, 0x1e, 0xee,
0x19, 0xba, 0xde, 0x95, 0x99, 0xb3, 0xc9, 0x51, 0xd1, 0x3c, 0x27, 0xd6, 0xa8, 0xcf, 0xf9, 0x38,
0x36, 0x3a, 0x7d, 0xa3, 0x82, 0xc1, 0xc3, 0x35, 0xef, 0xea, 0x04, 0xf3, 0x7a, 0x28, 0x64, 0x12,
0x01, 0xfb, 0xba, 0xed, 0xff, 0x94, 0x81, 0xc5, 0x9f, 0xd0, 0x12, 0xa2, 0x3f, 0x37, 0x42, 0x87,
0xb0, 0xe4, 0x1e, 0x7e, 0x79, 0x40, 0x9d, 0x82, 0xb3, 0x9d, 0xe7, 0xf5, 0x1e, 0xc2, 0xa9, 0x9f,
0x6c, 0xa1, 0x77, 0xe0, 0xf1, 0x80, 0x67, 0x73, 0x55, 0xc7, 0xe6, 0x75, 0x70, 0x8f, 0xf9, 0x1d,
0x9c, 0xa3, 0x7a, 0x64, 0xac, 0xf8, 0x03, 0x9e, 0xb9, 0x1d, 0x28, 0xfa, 0xd3, 0xbc, 0x89, 0xcb,
0x7f, 0x19, 0x0a, 0x26, 0xb6, 0x15, 0xad, 0x2f, 0xfb, 0xea, 0x7e, 0x79, 0x46, 0xe4, 0xd5, 0xc4,
0x03, 0x78, 0x6c, 0x62, 0xba, 0x87, 0x5e, 0x86, 0xec, 0x28, 0x53, 0x8c, 0x86, 0x80, 0x27, 0xb7,
0x34, 0x34, 0xe2, 0x15, 0x7f, 0x1f, 0x1d, 0xa9, 0xf4, 0x17, 0x9b, 0x6a, 0x90, 0x32, 0xb1, 0x35,
0xe8, 0xb2, 0xf2, 0x4f, 0xf1, 0xfa, 0x0b, 0xf3, 0x25, 0x8a, 0x84, 0x3a, 0xe8, 0xda, 0x12, 0x17,
0x16, 0xef, 0x41, 0x8a, 0x51, 0x50, 0x0e, 0xd2, 0x47, 0x7b, 0x77, 0xf6, 0xf6, 0xdf, 0xde, 0x13,
0x22, 0x08, 0x20, 0xb5, 0x51, 0xad, 0xd6, 0x0e, 0x1a, 0x42, 0x14, 0x65, 0x21, 0xb9, 0xb1, 0xb9,
0x2f, 0x35, 0x84, 0x18, 0x21, 0x4b, 0xb5, 0xdb, 0xb5, 0x6a, 0x43, 0x88, 0xa3, 0x25, 0x28, 0xb0,
0x6f, 0x79, 0x7b, 0x5f, 0xba, 0xbb, 0xd1, 0x10, 0x12, 0x1e, 0xd2, 0x61, 0x6d, 0x6f, 0xab, 0x26,
0x09, 0x49, 0xf1, 0x45, 0x38, 0x1f, 0x9a, 0x5a, 0x8e, 0x2a, 0x49, 0x51, 0x4f, 0x25, 0x49, 0xfc,
0x79, 0x0c, 0x2a, 0xe1, 0xf9, 0x22, 0xba, 0x1d, 0x98, 0xf8, 0xf5, 0x05, 0x92, 0xcd, 0xc0, 0xec,
0xd1, 0x53, 0x50, 0x34, 0xf1, 0x09, 0xb6, 0x5b, 0x1d, 0x96, 0xbf, 0xb2, 0x80, 0x59, 0x90, 0x0a,
0x9c, 0x4a, 0x85, 0x2c, 0xc6, 0xf6, 0x3e, 0x6e, 0xd9, 0x32, 0xf3, 0x45, 0x6c, 0xd3, 0x65, 0x09,
0x1b, 0xa1, 0x1e, 0x32, 0xa2, 0xf8, 0xde, 0x42, 0xb6, 0xcc, 0x42, 0x52, 0xaa, 0x35, 0xa4, 0x77,
0x84, 0x38, 0x42, 0x50, 0xa4, 0x9f, 0xf2, 0xe1, 0xde, 0xc6, 0xc1, 0x61, 0x7d, 0x9f, 0xd8, 0x72,
0x19, 0x4a, 0x8e, 0x2d, 0x1d, 0x62, 0x52, 0x7c, 0x77, 0x14, 0x7f, 0x3c, 0xd5, 0xb4, 0x6d, 0x28,
0x06, 0xd2, 0xc5, 0xe8, 0x38, 0x9e, 0x19, 0x55, 0xc3, 0xdc, 0x54, 0x50, 0x2a, 0x9c, 0x7a, 0x9b,
0xe2, 0x6f, 0xa2, 0xf0, 0xc4, 0x94, 0x84, 0x12, 0xbd, 0x05, 0x29, 0xcb, 0x56, 0xec, 0x81, 0xc5,
0x2d, 0xff, 0xca, 0x22, 0xe9, 0xe8, 0x3a, 0xa3, 0x1d, 0x52, 0x05, 0x12, 0x57, 0x24, 0xde, 0x80,
0xbc, 0x97, 0x1e, 0x6e, 0xb8, 0xd1, 0xce, 0x8b, 0x89, 0xdf, 0xc6, 0xe1, 0xf1, 0x90, 0x9c, 0x1f,
0xb5, 0x01, 0xf5, 0x74, 0x55, 0x3b, 0xd1, 0xb0, 0x2a, 0xdb, 0x43, 0x79, 0xce, 0xf1, 0x06, 0xb4,
0xac, 0xdf, 0xe5, 0x2a, 0x1a, 0x43, 0x3e, 0x5e, 0xa1, 0x17, 0xa0, 0xa0, 0x5b, 0x00, 0xf6, 0x50,
0x36, 0x71, 0x4b, 0x37, 0x55, 0x27, 0xcf, 0x1a, 0x3f, 0xd3, 0x8d, 0xa1, 0x44, 0x39, 0xa4, 0xac,
0xcd, 0xbf, 0xa6, 0x65, 0x56, 0xe8, 0x35, 0xae, 0x94, 0x6c, 0x22, 0xa7, 0xde, 0x7e, 0x71, 0x42,
0x85, 0x10, 0xb7, 0x88, 0x62, 0xba, 0x95, 0xa9, 0x62, 0xca, 0x8f, 0xee, 0x4e, 0xf2, 0xe1, 0xc9,
0xf9, 0x7c, 0xf8, 0x62, 0xde, 0x3b, 0xf5, 0x60, 0xde, 0x5b, 0x7c, 0x1d, 0x84, 0xa0, 0x89, 0xfd,
0x4b, 0x5f, 0x04, 0x38, 0xda, 0xbb, 0xbb, 0xbf, 0xb5, 0xb3, 0xbd, 0x53, 0xdb, 0x12, 0xa2, 0x28,
0x0f, 0x19, 0xb7, 0x15, 0x13, 0x7f, 0xed, 0xdb, 0x00, 0x7e, 0x28, 0xb6, 0x1f, 0xd8, 0xa4, 0x2f,
0xcf, 0x8b, 0xeb, 0xd6, 0x9d, 0x0f, 0xff, 0x16, 0x9d, 0x52, 0x9e, 0x0f, 0x2c, 0x57, 0xfc, 0x61,
0x2c, 0x57, 0xe2, 0x51, 0x2c, 0x57, 0xf2, 0x01, 0x97, 0xeb, 0x26, 0x14, 0xfd, 0xc6, 0x99, 0xef,
0x9c, 0xfe, 0x34, 0x3e, 0x0a, 0x5e, 0xfe, 0x42, 0xe8, 0x43, 0xcb, 0x98, 0x03, 0x4b, 0x10, 0x5b,
0x70, 0x09, 0x26, 0x66, 0x3d, 0xf1, 0x47, 0x97, 0xf5, 0x24, 0x1e, 0x30, 0xeb, 0xf1, 0xee, 0xc5,
0xa4, 0x7f, 0x2f, 0x8e, 0x25, 0x28, 0xa9, 0x09, 0x09, 0xca, 0x3b, 0x00, 0x9e, 0x7b, 0xbe, 0x15,
0x48, 0x9a, 0xfa, 0xa0, 0xaf, 0xd2, 0x93, 0x92, 0x94, 0x58, 0x03, 0xdd, 0x84, 0x24, 0x09, 0x0b,
0xe1, 0x3e, 0x8d, 0xb8, 0x75, 0x4f, 0xd9, 0x98, 0x71, 0x8b, 0x1a, 0xa0, 0xf1, 0x9b, 0x8b, 0x90,
0x2e, 0x5e, 0xf7, 0x77, 0xf1, 0x64, 0xe8, 0x1d, 0xc8, 0xe4, 0xae, 0x3e, 0x82, 0x24, 0xdd, 0x1e,
0x24, 0x51, 0xa3, 0x57, 0x86, 0x1c, 0xf9, 0x93, 0x6f, 0xf4, 0x43, 0x00, 0xc5, 0xb6, 0x4d, 0xad,
0x39, 0x18, 0x75, 0xb0, 0x36, 0x79, 0x7b, 0x6d, 0x38, 0x7c, 0x9b, 0x17, 0xf8, 0x3e, 0x5b, 0x19,
0x89, 0x7a, 0xf6, 0x9a, 0x47, 0xa1, 0xb8, 0x07, 0x45, 0xbf, 0xac, 0x83, 0x55, 0xd9, 0x18, 0xfc,
0x58, 0x95, 0x95, 0x1e, 0x38, 0x56, 0x75, 0x91, 0x6e, 0x9c, 0x5d, 0x0d, 0xd3, 0x86, 0xf8, 0x6d,
0x14, 0xf2, 0xde, 0xdd, 0xf9, 0xbf, 0x06, 0xf7, 0xc4, 0x8f, 0xa3, 0x90, 0x71, 0x27, 0x1f, 0x72,
0x35, 0x3b, 0xb2, 0x5d, 0xcc, 0x7b, 0x11, 0xc9, 0xee, 0x7a, 0xe3, 0xee, 0x0d, 0xf2, 0xab, 0x6e,
0x66, 0x18, 0x56, 0x9d, 0xf7, 0x5a, 0xda, 0xb9, 0x4f, 0xe1, 0x89, 0xf0, 0xcf, 0xf8, 0x38, 0x48,
0x8c, 0x46, 0xff, 0x0f, 0x29, 0xa5, 0xe5, 0xde, 0x49, 0x14, 0x27, 0x14, 0xa9, 0x1d, 0xd6, 0xf5,
0xc6, 0x70, 0x83, 0x72, 0x4a, 0x5c, 0x82, 0x8f, 0x2a, 0xe6, 0xde, 0x40, 0xbf, 0x41, 0xf4, 0x32,
0x9e, 0xe9, 0x31, 0x8e, 0xe4, 0x86, 0x5b, 0x5b, 0x24, 0xc0, 0x11, 0x3e, 0xa9, 0x76, 0x77, 0xff,
0xb8, 0xb6, 0x25, 0xc4, 0xc5, 0x57, 0x21, 0xeb, 0xba, 0x1e, 0x54, 0x86, 0xb4, 0xa2, 0xaa, 0x26,
0xb6, 0x2c, 0x9e, 0x34, 0x3b, 0x4d, 0xfa, 0xf4, 0x40, 0xff, 0x90, 0xdf, 0xbf, 0xc6, 0x25, 0xd6,
0x10, 0x55, 0x28, 0x05, 0xfc, 0x16, 0x7a, 0x15, 0xd2, 0xc6, 0xa0, 0x29, 0x3b, 0x9b, 0x36, 0xf0,
0x38, 0xd0, 0x29, 0x99, 0x0c, 0x9a, 0x5d, 0xad, 0x75, 0x07, 0x9f, 0x39, 0x66, 0x32, 0x06, 0xcd,
0x3b, 0x6c, 0x6f, 0xb3, 0x5e, 0x62, 0xde, 0x5e, 0x7e, 0x15, 0x85, 0x8c, 0x73, 0x56, 0xd1, 0xf7,
0x20, 0xeb, 0xfa, 0x44, 0xf7, 0x49, 0x4a, 0xa8, 0x33, 0xe5, 0xfa, 0x47, 0x22, 0x68, 0x07, 0x96,
0x2c, 0xad, 0xdd, 0x77, 0xae, 0xb1, 0x58, 0x8d, 0x92, 0xbd, 0x0a, 0x18, 0x5f, 0xd1, 0x43, 0xca,
0xc9, 0x43, 0x76, 0x89, 0xc9, 0xed, 0x3a, 0x75, 0xb7, 0xdb, 0x89, 0x4c, 0x5c, 0x48, 0xdc, 0x4e,
0x64, 0x12, 0x42, 0x52, 0xfc, 0x3c, 0x0a, 0x42, 0xd0, 0xaf, 0xfc, 0x17, 0x8d, 0x95, 0x80, 0x8c,
0x40, 0x16, 0xcf, 0x76, 0x76, 0x20, 0x49, 0xff, 0x67, 0x14, 0x32, 0xce, 0x35, 0x1b, 0x7a, 0xd1,
0xe3, 0x00, 0x27, 0xf5, 0xe8, 0x30, 0x8e, 0x1e, 0x4d, 0xf8, 0x67, 0x1c, 0x5b, 0x7c, 0xc6, 0x61,
0x2f, 0x5f, 0x9c, 0x37, 0x48, 0x89, 0x85, 0xdf, 0x20, 0x3d, 0x0f, 0xc8, 0xd6, 0x6d, 0xa5, 0x2b,
0x9f, 0xea, 0xb6, 0xd6, 0x6f, 0xcb, 0x6c, 0x7f, 0x31, 0x5f, 0x25, 0xd0, 0x5f, 0x8e, 0xe9, 0x0f,
0x07, 0x74, 0xab, 0xfd, 0x38, 0x0a, 0x19, 0x17, 0x04, 0x2f, 0xfa, 0x06, 0xe2, 0x1c, 0xa4, 0x38,
0xce, 0x63, 0x8f, 0x20, 0x78, 0xcb, 0xbd, 0x98, 0x4d, 0x78, 0x2e, 0x66, 0x2b, 0x90, 0xe9, 0x61,
0x5b, 0xa1, 0x8e, 0x97, 0xc5, 0x5a, 0xb7, 0x7d, 0xf5, 0x15, 0xc8, 0x79, 0x9e, 0xa3, 0x10, 0x5f,
0xbc, 0x57, 0x7b, 0x5b, 0x88, 0x54, 0xd2, 0x9f, 0x7c, 0x76, 0x29, 0xbe, 0x87, 0x3f, 0x24, 0xc7,
0x54, 0xaa, 0x55, 0xeb, 0xb5, 0xea, 0x1d, 0x21, 0x5a, 0xc9, 0x7d, 0xf2, 0xd9, 0xa5, 0xb4, 0x84,
0xe9, 0x2d, 0xd8, 0xd5, 0x1a, 0xe4, 0xbd, 0xfb, 0x00, 0x3d, 0x0e, 0xcb, 0xdc, 0x25, 0xc8, 0x87,
0x3b, 0x6f, 0xee, 0xc9, 0x87, 0x8d, 0x8d, 0xc6, 0xd1, 0x21, 0xcb, 0xaa, 0x08, 0x81, 0xba, 0x06,
0x01, 0xf2, 0x5b, 0x3b, 0x5b, 0xf2, 0xde, 0x7e, 0x83, 0x32, 0x09, 0xb1, 0xab, 0x75, 0xc8, 0x7b,
0x17, 0xd7, 0xef, 0x59, 0x10, 0x14, 0xb7, 0x8e, 0x0e, 0x76, 0x77, 0xaa, 0x1b, 0x8d, 0x9a, 0x7c,
0xbc, 0xdf, 0xa8, 0x09, 0x51, 0xd2, 0xcf, 0xee, 0xce, 0x9b, 0xf5, 0x86, 0x5c, 0xdd, 0xdd, 0xa9,
0xed, 0x35, 0xe4, 0x8d, 0x46, 0x63, 0xa3, 0x7a, 0x47, 0x88, 0x5d, 0xff, 0x6d, 0x0e, 0x4a, 0x1b,
0x9b, 0xd5, 0x1d, 0x82, 0x96, 0xb5, 0x96, 0x42, 0xfd, 0x54, 0x15, 0x12, 0xb4, 0x2c, 0x3f, 0xf5,
0x85, 0x72, 0x65, 0xfa, 0x55, 0x2b, 0xda, 0x86, 0x24, 0xad, 0xd8, 0xa3, 0xe9, 0x4f, 0x96, 0x2b,
0x33, 0xee, 0x5e, 0xc9, 0x60, 0xe8, 0x59, 0x9d, 0xfa, 0x86, 0xb9, 0x32, 0xfd, 0x2a, 0x16, 0xed,
0x42, 0xda, 0x29, 0xa8, 0xce, 0x7a, 0x0d, 0x5c, 0x99, 0x79, 0xa7, 0x49, 0xa6, 0xc6, 0x0a, 0xdf,
0xd3, 0x9f, 0x37, 0x57, 0x66, 0x5c, 0xd2, 0xa2, 0x1d, 0x48, 0xf1, 0x9a, 0xd3, 0x8c, 0x97, 0xbd,
0x95, 0x59, 0x77, 0x93, 0x48, 0x82, 0xec, 0xe8, 0x4a, 0x61, 0xf6, 0xa3, 0xed, 0xca, 0x1c, 0xf7,
0xcf, 0xe8, 0x1e, 0x14, 0xfc, 0x75, 0xac, 0xf9, 0x5e, 0x0f, 0x57, 0xe6, 0xbc, 0x05, 0x25, 0xfa,
0xfd, 0x45, 0xad, 0xf9, 0x5e, 0x13, 0x57, 0xe6, 0xbc, 0x14, 0x45, 0xef, 0xc3, 0xd2, 0x78, 0xd1,
0x69, 0xfe, 0xc7, 0xc5, 0x95, 0x05, 0xae, 0x49, 0x51, 0x0f, 0xd0, 0x84, 0x62, 0xd5, 0x02, 0x6f,
0x8d, 0x2b, 0x8b, 0xdc, 0x9a, 0x22, 0x15, 0x4a, 0xc1, 0xd2, 0xc7, 0xbc, 0x6f, 0x8f, 0x2b, 0x73,
0xdf, 0xa0, 0xb2, 0x5e, 0xfc, 0xf8, 0x7a, 0xde, 0xb7, 0xc8, 0x95, 0xb9, 0x2f, 0x54, 0xd1, 0x11,
0x80, 0xa7, 0x9a, 0x35, 0xc7, 0xdb, 0xe4, 0xca, 0x3c, 0x57, 0xab, 0xc8, 0x80, 0xe5, 0x49, 0x55,
0xac, 0x45, 0x9e, 0x2a, 0x57, 0x16, 0xba, 0x71, 0x25, 0xfb, 0xd9, 0x8f, 0x73, 0xe7, 0x7b, 0xba,
0x5c, 0x99, 0xf3, 0xea, 0x75, 0xb3, 0xf6, 0xc5, 0xd7, 0xab, 0xd1, 0x2f, 0xbf, 0x5e, 0x8d, 0xfe,
0xed, 0xeb, 0xd5, 0xe8, 0xa7, 0xdf, 0xac, 0x46, 0xbe, 0xfc, 0x66, 0x35, 0xf2, 0xe7, 0x6f, 0x56,
0x23, 0xdf, 0x7f, 0xae, 0xad, 0xd9, 0x9d, 0x41, 0x73, 0xbd, 0xa5, 0xf7, 0xae, 0x79, 0xff, 0xc5,
0x32, 0xe9, 0x9f, 0x35, 0xcd, 0x14, 0x0d, 0xca, 0x37, 0xfe, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x66,
0x46, 0x9b, 0x69, 0x79, 0x33, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -8239,13 +8271,8 @@ func (m *VoteInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if m.SignedLastBlock {
i--
if m.SignedLastBlock {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
if m.SignedLastBlock != 0 {
i = encodeVarintTypes(dAtA, i, uint64(m.SignedLastBlock))
i--
dAtA[i] = 0x10
}
@@ -8289,13 +8316,8 @@ func (m *ExtendedVoteInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i--
dAtA[i] = 0x1a
}
if m.SignedLastBlock {
i--
if m.SignedLastBlock {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
if m.SignedLastBlock != 0 {
i = encodeVarintTypes(dAtA, i, uint64(m.SignedLastBlock))
i--
dAtA[i] = 0x10
}
@@ -9938,8 +9960,8 @@ func (m *VoteInfo) Size() (n int) {
_ = l
l = m.Validator.Size()
n += 1 + l + sovTypes(uint64(l))
if m.SignedLastBlock {
n += 2
if m.SignedLastBlock != 0 {
n += 1 + sovTypes(uint64(m.SignedLastBlock))
}
return n
}
@@ -9952,8 +9974,8 @@ func (m *ExtendedVoteInfo) Size() (n int) {
_ = l
l = m.Validator.Size()
n += 1 + l + sovTypes(uint64(l))
if m.SignedLastBlock {
n += 2
if m.SignedLastBlock != 0 {
n += 1 + sovTypes(uint64(m.SignedLastBlock))
}
l = len(m.VoteExtension)
if l > 0 {
@@ -18240,7 +18262,7 @@ func (m *VoteInfo) Unmarshal(dAtA []byte) error {
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field SignedLastBlock", wireType)
}
var v int
m.SignedLastBlock = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
@@ -18250,12 +18272,11 @@ func (m *VoteInfo) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
v |= int(b&0x7F) << shift
m.SignedLastBlock |= SignedStatus(b&0x7F) << shift
if b < 0x80 {
break
}
}
m.SignedLastBlock = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipTypes(dAtA[iNdEx:])
@@ -18343,7 +18364,7 @@ func (m *ExtendedVoteInfo) Unmarshal(dAtA []byte) error {
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field SignedLastBlock", wireType)
}
var v int
m.SignedLastBlock = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
@@ -18353,12 +18374,11 @@ func (m *ExtendedVoteInfo) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
v |= int(b&0x7F) << shift
m.SignedLastBlock |= SignedStatus(b&0x7F) << shift
if b < 0x80 {
break
}
}
m.SignedLastBlock = bool(v != 0)
case 3:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field VoteExtension", wireType)

View File

@@ -425,9 +425,13 @@ func buildLastCommitInfo(block *types.Block, store Store, initialHeight int64) a
votes := make([]abci.VoteInfo, block.LastCommit.Size())
for i, val := range lastValSet.Validators {
commitSig := block.LastCommit.Signatures[i]
status := abci.SignedStatus_DID_NOT_SIGN
if !commitSig.Absent() {
status = abci.SignedStatus_SIGNED
}
votes[i] = abci.VoteInfo{
Validator: types.TM2PB.Validator(val),
SignedLastBlock: !commitSig.Absent(),
SignedLastBlock: status,
}
}

View File

@@ -148,7 +148,7 @@ func TestFinalizeBlockDecidedLastCommit(t *testing.T) {
// -> app receives a list of validators with a bool indicating if they signed
for i, v := range app.CommitVotes {
_, absent := tc.absentCommitSigs[i]
assert.Equal(t, !absent, v.SignedLastBlock)
assert.Equal(t, !absent, v.Signed())
}
})
}
@@ -314,7 +314,7 @@ func TestProcessProposal(t *testing.T) {
addr := pk.Address()
voteInfos = append(voteInfos,
abci.VoteInfo{
SignedLastBlock: true,
SignedLastBlock: abci.SignedStatus_SIGNED,
Validator: abci.Validator{
Address: addr,
Power: 1000,

View File

@@ -3,8 +3,6 @@ package tendermint.abci;
option go_package = "github.com/tendermint/tendermint/abci/types";
// For more information on gogo.proto, see:
// https://github.com/gogo/protobuf/blob/master/extensions.md
import "tendermint/crypto/proof.proto";
import "tendermint/types/types.proto";
import "tendermint/crypto/keys.proto";
@@ -12,9 +10,14 @@ import "tendermint/types/params.proto";
import "google/protobuf/timestamp.proto";
import "gogoproto/gogo.proto";
// This file is copied from http://github.com/tendermint/abci
// NOTE: When using custom types, mind the warnings.
// https://github.com/gogo/protobuf/blob/master/custom_types.md#warnings-and-issues
// This file is a temporary workaround to enable development during the ABCI++
// project. This file should be deleted and any references to it removed when
// the ongoing work on ABCI++ is completed.
//
// For the duration of ABCI++, this file should be able to build the `abci/types/types.pb.go`
// file. Any changes that update that file must come as a result of a change in
// this .proto file.
// For more information, see https://github.com/tendermint/tendermint/issues/8066
//----------------------------------------
// Request types
@@ -122,6 +125,16 @@ message RequestApplySnapshotChunk {
string sender = 3;
}
// Extends a vote with application-side injection
message RequestExtendVote {
types.Vote vote = 1;
}
// Verify the vote extension
message RequestVerifyVoteExtension {
types.Vote vote = 1;
}
message RequestPrepareProposal {
bytes hash = 1;
tendermint.types.Header header = 2 [(gogoproto.nullable) = false];
@@ -142,20 +155,6 @@ message RequestProcessProposal {
repeated Evidence byzantine_validators = 5 [(gogoproto.nullable) = false];
}
// Extends a vote with application-side injection
message RequestExtendVote {
bytes hash = 1;
int64 height = 2;
}
// Verify the vote extension
message RequestVerifyVoteExtension {
bytes hash = 1;
bytes validator_address = 2;
int64 height = 3;
bytes vote_extension = 4;
}
message RequestFinalizeBlock {
bytes hash = 1;
tendermint.types.Header header = 2 [(gogoproto.nullable) = false];
@@ -315,8 +314,22 @@ message ResponseApplySnapshotChunk {
}
}
message ResponseExtendVote {
tendermint.types.VoteExtension vote_extension = 1;
}
message ResponseVerifyVoteExtension {
VerifyStatus status = 1;
enum VerifyStatus {
UNKNOWN = 0;
ACCEPT = 1;
REJECT = 2;
}
}
message ResponsePrepareProposal {
TxModifiedStatus modified_tx_status = 1;
ModifiedTxStatus modified_tx_status = 1;
repeated TxRecord tx_records = 2;
bytes app_hash = 3;
repeated ExecTxResult tx_results = 4;
@@ -344,25 +357,11 @@ message ResponseProcessProposal {
}
}
message ResponseExtendVote {
bytes vote_extension = 1;
}
message ResponseVerifyVoteExtension {
VerifyStatus status = 1;
enum VerifyStatus {
UNKNOWN = 0;
ACCEPT = 1;
REJECT = 2;
}
}
message ResponseFinalizeBlock {
repeated Event events = 1
[(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"];
repeated ExecTxResult tx_results = 2;
repeated ValidatorUpdate validator_updates = 3;
repeated ValidatorUpdate validator_updates = 3 [(gogoproto.nullable) = false];
tendermint.types.ConsensusParams consensus_param_updates = 4;
bytes app_hash = 5;
int64 retain_height = 6;
@@ -415,10 +414,10 @@ message ExecTxResult {
//
// One usage is indexing transaction results.
message TxResult {
int64 height = 1;
uint32 index = 2;
bytes tx = 3;
ResponseDeliverTx result = 4 [(gogoproto.nullable) = false];
int64 height = 1;
uint32 index = 2;
bytes tx = 3;
ExecTxResult result = 4 [(gogoproto.nullable) = false];
}
message TxRecord {
@@ -452,25 +451,22 @@ message ValidatorUpdate {
// VoteInfo
message VoteInfo {
Validator validator = 1 [(gogoproto.nullable) = false];
bool signed_last_block = 2;
Validator validator = 1 [(gogoproto.nullable) = false];
SignedStatus signed_last_block = 2;
reserved 3; // Placeholder for tendermint_signed_extension in v0.37
reserved 4; // Placeholder for app_signed_extension in v0.37
}
// ExtendedVoteInfo
message ExtendedVoteInfo {
Validator validator = 1 [(gogoproto.nullable) = false];
bool signed_last_block = 2;
bytes vote_extension = 3;
Validator validator = 1 [(gogoproto.nullable) = false];
SignedStatus signed_last_block = 2;
bytes vote_extension = 3;
}
// CanonicalVoteExtension
// TODO: move this to core Tendermint data structures
message CanonicalVoteExtension {
bytes extension = 1;
int64 height = 2;
int32 round = 3;
string chain_id = 4;
bytes address = 5;
enum SignedStatus {
UNKNOWN_SIGN_STATUS = 0; // Unknown status.
SIGNED = 1; // Validator signed the last block.
DID_NOT_SIGN = 2; // Validator did not sign the last block.
}
enum EvidenceType {

View File

@@ -449,16 +449,22 @@ message ValidatorUpdate {
// VoteInfo
message VoteInfo {
Validator validator = 1 [(gogoproto.nullable) = false];
bool signed_last_block = 2;
Validator validator = 1 [(gogoproto.nullable) = false];
SignedStatus signed_last_block = 2;
reserved 3; // Placeholder for tendermint_signed_extension in v0.37
reserved 4; // Placeholder for app_signed_extension in v0.37
}
message ExtendedVoteInfo {
Validator validator = 1 [(gogoproto.nullable) = false];
bool signed_last_block = 2;
bytes vote_extension = 3;
Validator validator = 1 [(gogoproto.nullable) = false];
SignedStatus signed_last_block = 2;
bytes vote_extension = 3;
}
enum SignedStatus {
UNKNOWN_SIGN_STATUS = 0; // Unknown status.
SIGNED = 1; // Validator signed the last block.
DID_NOT_SIGN = 2; // Validator did not sign the last block.
}
enum EvidenceType {

View File

@@ -9,7 +9,14 @@ import "tendermint/crypto/proof.proto";
import "tendermint/version/types.proto";
import "tendermint/types/validator.proto";
// BlockIdFlag indicates which BlcokID the signature is for
// This file is a temporary workaround to enable development during the ABCI++
// project. This file should be deleted and any references to it removed when
// the ongoing work on ABCI++ is completed.
//
// This file supports building of the `tendermint.abci` proto package.
// For more information, see https://github.com/tendermint/tendermint/issues/8066
// BlockIdFlag indicates which BlockID the signature is for
enum BlockIDFlag {
option (gogoproto.goproto_enum_stringer) = true;
option (gogoproto.goproto_enum_prefix) = false;
@@ -110,9 +117,22 @@ message Vote {
]; // zero if vote is nil.
google.protobuf.Timestamp timestamp = 5
[(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
bytes validator_address = 6;
int32 validator_index = 7;
bytes signature = 8;
bytes validator_address = 6;
int32 validator_index = 7;
bytes signature = 8;
VoteExtension vote_extension = 9;
}
// VoteExtension is app-defined additional information to the validator votes.
message VoteExtension {
bytes app_data_to_sign = 1;
bytes app_data_self_authenticating = 2;
}
// VoteExtensionToSign is a subset of VoteExtension that is signed by the validators private key.
// VoteExtensionToSign is extracted from an existing VoteExtension.
message VoteExtensionToSign {
bytes app_data_to_sign = 1;
}
// Commit contains the evidence that a block was committed by a set of
@@ -131,7 +151,8 @@ message CommitSig {
bytes validator_address = 2;
google.protobuf.Timestamp timestamp = 3
[(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
bytes signature = 4;
bytes signature = 4;
VoteExtensionToSign vote_extension = 5;
}
message Proposal {

View File

@@ -769,10 +769,10 @@ Most of the data structures used in ABCI are shared [common data structures](../
* **Fields**:
| Name | Type | Description | Field Number |
|-----------------------------|-------------------------|----------------------------------------------------------------|--------------|
| validator | [Validator](#validator) | The validator that sent the vote. | 1 |
| signed_last_block | bool | Indicates whether or not the validator signed the last block. | 2 |
| Name | Type | Description | Field Number |
|-----------------------|-------------------------------|----------------------------------------------------------------|--------------|
| validator | [Validator](#validator) | The validator that sent the vote. | 1 |
| signed_last_block | [SignedStatus](#SignedStatus) | Indicates whether or not the validator signed the last block. | 2 |
* **Usage**:
* Indicates whether a validator signed the last block, allowing for rewards based on validator availability.
@@ -782,11 +782,11 @@ Most of the data structures used in ABCI are shared [common data structures](../
* **Fields**:
| Name | Type | Description | Field Number |
|-------------------|-------------------------|------------------------------------------------------------------------------|--------------|
| validator | [Validator](#validator) | The validator that sent the vote. | 1 |
| signed_last_block | bool | Indicates whether or not the validator signed the last block. | 2 |
| vote_extension | bytes | Non-deterministic extension provided by the sending validator's Application. | 3 |
| Name | Type | Description | Field Number |
|-------------------|-------------------------------|------------------------------------------------------------------------------|--------------|
| validator | [Validator](#validator) | The validator that sent the vote. | 1 |
| signed_last_block | [SignedStatus](#SignedStatus) | Indicates whether or not the validator signed the last block. | 2 |
| vote_extension | bytes | Non-deterministic extension provided by the sending validator's Application. | 3 |
* **Usage**:
* Indicates whether a validator signed the last block, allowing for rewards based on validator availability.
@@ -900,6 +900,21 @@ enum VerifyStatus {
* If `Status` is `ACCEPT`, Tendermint will accept the vote as valid.
* If `Status` is `REJECT`, Tendermint will reject the vote as invalid.
### SignedStatus
```proto
enum SignedStatus {
UNKNOWN_SIGN_STATUS = 0; // Unknown status.
SIGNED = 1; // Validator signed the last block.
DID_NOT_SIGN = 2; // Validator did not sign the last block.
}
```
* **Usage**:
* Used within the [VoteInfo](#VoteInfo) and [ExtendedVoteInfo](#ExtendedVoteInfo).
* If `SignedLastBlock` is `SIGNED`, the associated validator signed the last block.
* If `SignedLastBlock` is `DID_NOT_SIGN`, the associated validator did not sign the last block.
* If `SignedLastBlock` should never be set to `UNKNOWN_SIGNED_STATUS`.
### CanonicalVoteExtension