abci: remove unused fields from CheckTXResponse (part 1) (#8605)

abci: Removed Info, Log, Events and GasUsed from ResponseCheckTx. 
spec: Updated info on ResponseCheckTx to reflect field removal.
This commit is contained in:
Jasmina Malicevic
2022-05-25 23:06:16 +02:00
committed by GitHub
parent f33722b423
commit 4c857a7ed2
14 changed files with 326 additions and 468 deletions
+1
View File
@@ -27,6 +27,7 @@ Special thanks to external contributors on this release:
- [tendermint/spec] \#7804 Migrate spec from [spec repo](https://github.com/tendermint/spec).
- [abci] \#7984 Remove the locks preventing concurrent use of ABCI applications by Tendermint. (@tychoish)
- [abci] \#8605 Remove info, log, events and gasUsed fields from ResponseCheckTx as they are not used by Tendermint. (@jmalicevic)
- P2P Protocol
-2
View File
@@ -546,8 +546,6 @@ func cmdCheckTx(cmd *cobra.Command, args []string) error {
printResponse(cmd, args, response{
Code: res.Code,
Data: res.Data,
Info: res.Info,
Log: res.Log,
})
return nil
}
+3 -3
View File
@@ -72,11 +72,11 @@ func FinalizeBlock(ctx context.Context, client abciclient.Client, txBytes [][]by
func CheckTx(ctx context.Context, client abciclient.Client, txBytes []byte, codeExp uint32, dataExp []byte) error {
res, _ := client.CheckTx(ctx, &types.RequestCheckTx{Tx: txBytes})
code, data, log := res.Code, res.Data, res.Log
code, data := res.Code, res.Data
if code != codeExp {
fmt.Println("Failed test: CheckTx")
fmt.Printf("CheckTx response code was unexpected. Got %v expected %v. Log: %v\n",
code, codeExp, log)
fmt.Printf("CheckTx response code was unexpected. Got %v expected %v.,",
code, codeExp)
return errors.New("checkTx")
}
if !bytes.Equal(data, dataExp) {
-17
View File
@@ -21,14 +21,6 @@ func TestMarshalJSON(t *testing.T) {
Code: 1,
Data: []byte("hello"),
GasWanted: 43,
Events: []Event{
{
Type: "testEvent",
Attributes: []EventAttribute{
{Key: "pho", Value: "bo"},
},
},
},
}
b, err = json.Marshal(&r1)
assert.NoError(t, err)
@@ -86,16 +78,7 @@ func TestWriteReadMessage2(t *testing.T) {
cases := []proto.Message{
&ResponseCheckTx{
Data: []byte(phrase),
Log: phrase,
GasWanted: 10,
Events: []Event{
{
Type: "testEvent",
Attributes: []EventAttribute{
{Key: "abc", Value: "def"},
},
},
},
},
// TODO: add the rest
}
+315 -423
View File
@@ -1645,7 +1645,7 @@ type RequestFinalizeBlock struct {
Txs [][]byte `protobuf:"bytes,1,rep,name=txs,proto3" json:"txs,omitempty"`
DecidedLastCommit CommitInfo `protobuf:"bytes,2,opt,name=decided_last_commit,json=decidedLastCommit,proto3" json:"decided_last_commit"`
ByzantineValidators []Misbehavior `protobuf:"bytes,3,rep,name=byzantine_validators,json=byzantineValidators,proto3" json:"byzantine_validators"`
// hash is the merkle root hash of the fields of the decided block.
// hash is the merkle root hash of the fields of the proposed block.
Hash []byte `protobuf:"bytes,4,opt,name=hash,proto3" json:"hash,omitempty"`
Height int64 `protobuf:"varint,5,opt,name=height,proto3" json:"height,omitempty"`
Time time.Time `protobuf:"bytes,6,opt,name=time,proto3,stdtime" json:"time"`
@@ -2481,16 +2481,12 @@ func (m *ResponseBeginBlock) GetEvents() []Event {
}
type ResponseCheckTx struct {
Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
Log string `protobuf:"bytes,3,opt,name=log,proto3" json:"log,omitempty"`
Info string `protobuf:"bytes,4,opt,name=info,proto3" json:"info,omitempty"`
GasWanted int64 `protobuf:"varint,5,opt,name=gas_wanted,json=gasWanted,proto3" json:"gas_wanted,omitempty"`
GasUsed int64 `protobuf:"varint,6,opt,name=gas_used,json=gasUsed,proto3" json:"gas_used,omitempty"`
Events []Event `protobuf:"bytes,7,rep,name=events,proto3" json:"events,omitempty"`
Codespace string `protobuf:"bytes,8,opt,name=codespace,proto3" json:"codespace,omitempty"`
Sender string `protobuf:"bytes,9,opt,name=sender,proto3" json:"sender,omitempty"`
Priority int64 `protobuf:"varint,10,opt,name=priority,proto3" json:"priority,omitempty"`
Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
GasWanted int64 `protobuf:"varint,5,opt,name=gas_wanted,json=gasWanted,proto3" json:"gas_wanted,omitempty"`
Codespace string `protobuf:"bytes,8,opt,name=codespace,proto3" json:"codespace,omitempty"`
Sender string `protobuf:"bytes,9,opt,name=sender,proto3" json:"sender,omitempty"`
Priority int64 `protobuf:"varint,10,opt,name=priority,proto3" json:"priority,omitempty"`
// ABCI applications creating a ResponseCheckTX should not set mempool_error.
MempoolError string `protobuf:"bytes,11,opt,name=mempool_error,json=mempoolError,proto3" json:"mempool_error,omitempty"`
}
@@ -2542,20 +2538,6 @@ func (m *ResponseCheckTx) GetData() []byte {
return nil
}
func (m *ResponseCheckTx) GetLog() string {
if m != nil {
return m.Log
}
return ""
}
func (m *ResponseCheckTx) GetInfo() string {
if m != nil {
return m.Info
}
return ""
}
func (m *ResponseCheckTx) GetGasWanted() int64 {
if m != nil {
return m.GasWanted
@@ -2563,20 +2545,6 @@ func (m *ResponseCheckTx) GetGasWanted() int64 {
return 0
}
func (m *ResponseCheckTx) GetGasUsed() int64 {
if m != nil {
return m.GasUsed
}
return 0
}
func (m *ResponseCheckTx) GetEvents() []Event {
if m != nil {
return m.Events
}
return nil
}
func (m *ResponseCheckTx) GetCodespace() string {
if m != nil {
return m.Codespace
@@ -3255,6 +3223,8 @@ type ResponseFinalizeBlock struct {
TxResults []*ExecTxResult `protobuf:"bytes,2,rep,name=tx_results,json=txResults,proto3" json:"tx_results,omitempty"`
ValidatorUpdates []ValidatorUpdate `protobuf:"bytes,3,rep,name=validator_updates,json=validatorUpdates,proto3" json:"validator_updates"`
ConsensusParamUpdates *types1.ConsensusParams `protobuf:"bytes,4,opt,name=consensus_param_updates,json=consensusParamUpdates,proto3" json:"consensus_param_updates,omitempty"`
AppHash []byte `protobuf:"bytes,5,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"`
RetainHeight int64 `protobuf:"varint,6,opt,name=retain_height,json=retainHeight,proto3" json:"retain_height,omitempty"`
}
func (m *ResponseFinalizeBlock) Reset() { *m = ResponseFinalizeBlock{} }
@@ -3318,6 +3288,20 @@ func (m *ResponseFinalizeBlock) GetConsensusParamUpdates() *types1.ConsensusPara
return nil
}
func (m *ResponseFinalizeBlock) GetAppHash() []byte {
if m != nil {
return m.AppHash
}
return nil
}
func (m *ResponseFinalizeBlock) GetRetainHeight() int64 {
if m != nil {
return m.RetainHeight
}
return 0
}
type CommitInfo struct {
Round int32 `protobuf:"varint,1,opt,name=round,proto3" json:"round,omitempty"`
Votes []VoteInfo `protobuf:"bytes,2,rep,name=votes,proto3" json:"votes"`
@@ -3429,7 +3413,7 @@ func (m *ExtendedCommitInfo) GetVotes() []ExtendedVoteInfo {
}
// Event allows application developers to attach additional information to
// ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx.
// ResponseBeginBlock, ResponseEndBlock and ResponseDeliverTx.
// Later, transactions may be queried using these events.
type Event struct {
Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
@@ -4219,222 +4203,225 @@ func init() {
func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) }
var fileDescriptor_252557cfdd89a31a = []byte{
// 3439 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcb, 0x73, 0x23, 0xe5,
0xb5, 0x97, 0x5a, 0xef, 0x23, 0xeb, 0xe1, 0xcf, 0x66, 0xd0, 0x88, 0x19, 0x7b, 0xe8, 0xa9, 0x81,
0x99, 0x01, 0x3c, 0x5c, 0xcf, 0x1d, 0x18, 0xee, 0xc0, 0xa5, 0x6c, 0x59, 0x83, 0xcc, 0x78, 0x6c,
0xd3, 0x96, 0x4d, 0x71, 0x6f, 0x32, 0x4d, 0x4b, 0xfd, 0xd9, 0x6a, 0x46, 0x52, 0x37, 0xdd, 0x2d,
0x23, 0xb3, 0x0c, 0xc5, 0x86, 0xca, 0x82, 0x4d, 0x2a, 0x49, 0x55, 0xd8, 0x25, 0x55, 0xc9, 0x7f,
0x90, 0x55, 0x56, 0x59, 0xb0, 0x48, 0x55, 0x58, 0x25, 0xa9, 0x2c, 0x48, 0x0a, 0x76, 0xf9, 0x07,
0xb2, 0x4b, 0x52, 0xdf, 0xa3, 0x5f, 0x52, 0xb7, 0x1e, 0x0c, 0x50, 0x95, 0x0a, 0x3b, 0x7d, 0xa7,
0xcf, 0x39, 0xfd, 0x3d, 0x4e, 0x9f, 0xc7, 0xef, 0x7c, 0x82, 0x27, 0x6c, 0xdc, 0x57, 0xb1, 0xd9,
0xd3, 0xfa, 0xf6, 0x0d, 0xa5, 0xd5, 0xd6, 0x6e, 0xd8, 0x67, 0x06, 0xb6, 0xd6, 0x0c, 0x53, 0xb7,
0x75, 0x54, 0xf2, 0x1e, 0xae, 0x91, 0x87, 0xd5, 0x8b, 0x3e, 0xee, 0xb6, 0x79, 0x66, 0xd8, 0xfa,
0x0d, 0xc3, 0xd4, 0xf5, 0x63, 0xc6, 0x5f, 0xbd, 0xe0, 0x7b, 0x4c, 0xf5, 0xf8, 0xb5, 0x05, 0x9e,
0x72, 0xe1, 0x87, 0xf8, 0xcc, 0x79, 0x7a, 0x71, 0x4c, 0xd6, 0x50, 0x4c, 0xa5, 0xe7, 0x3c, 0x5e,
0x3d, 0xd1, 0xf5, 0x93, 0x2e, 0xbe, 0x41, 0x47, 0xad, 0xc1, 0xf1, 0x0d, 0x5b, 0xeb, 0x61, 0xcb,
0x56, 0x7a, 0x06, 0x67, 0x58, 0x3e, 0xd1, 0x4f, 0x74, 0xfa, 0xf3, 0x06, 0xf9, 0xc5, 0xa8, 0xe2,
0x3f, 0x01, 0x32, 0x12, 0x7e, 0x77, 0x80, 0x2d, 0x1b, 0xad, 0x43, 0x12, 0xb7, 0x3b, 0x7a, 0x25,
0x7e, 0x29, 0x7e, 0x35, 0xbf, 0x7e, 0x61, 0x6d, 0x64, 0x71, 0x6b, 0x9c, 0xaf, 0xde, 0xee, 0xe8,
0x8d, 0x98, 0x44, 0x79, 0xd1, 0x2d, 0x48, 0x1d, 0x77, 0x07, 0x56, 0xa7, 0x22, 0x50, 0xa1, 0x8b,
0x51, 0x42, 0x77, 0x09, 0x53, 0x23, 0x26, 0x31, 0x6e, 0xf2, 0x2a, 0xad, 0x7f, 0xac, 0x57, 0x12,
0x93, 0x5f, 0xb5, 0xdd, 0x3f, 0xa6, 0xaf, 0x22, 0xbc, 0x68, 0x13, 0x40, 0xeb, 0x6b, 0xb6, 0xdc,
0xee, 0x28, 0x5a, 0xbf, 0x92, 0xa4, 0x92, 0x4f, 0x46, 0x4b, 0x6a, 0x76, 0x8d, 0x30, 0x36, 0x62,
0x52, 0x4e, 0x73, 0x06, 0x64, 0xba, 0xef, 0x0e, 0xb0, 0x79, 0x56, 0x49, 0x4d, 0x9e, 0xee, 0x1b,
0x84, 0x89, 0x4c, 0x97, 0x72, 0xa3, 0x6d, 0xc8, 0xb7, 0xf0, 0x89, 0xd6, 0x97, 0x5b, 0x5d, 0xbd,
0xfd, 0xb0, 0x92, 0xa6, 0xc2, 0x62, 0x94, 0xf0, 0x26, 0x61, 0xdd, 0x24, 0x9c, 0x9b, 0x42, 0x25,
0xde, 0x88, 0x49, 0xd0, 0x72, 0x29, 0xe8, 0x65, 0xc8, 0xb6, 0x3b, 0xb8, 0xfd, 0x50, 0xb6, 0x87,
0x95, 0x0c, 0xd5, 0xb3, 0x1a, 0xa5, 0xa7, 0x46, 0xf8, 0x9a, 0xc3, 0x46, 0x4c, 0xca, 0xb4, 0xd9,
0x4f, 0x74, 0x17, 0x40, 0xc5, 0x5d, 0xed, 0x14, 0x9b, 0x44, 0x3e, 0x3b, 0x79, 0x0f, 0xb6, 0x18,
0x67, 0x73, 0xc8, 0xa7, 0x91, 0x53, 0x1d, 0x02, 0xaa, 0x41, 0x0e, 0xf7, 0x55, 0xbe, 0x9c, 0x1c,
0x55, 0x73, 0x29, 0xf2, 0xbc, 0xfb, 0xaa, 0x7f, 0x31, 0x59, 0xcc, 0xc7, 0xe8, 0x36, 0xa4, 0xdb,
0x7a, 0xaf, 0xa7, 0xd9, 0x15, 0xa0, 0x1a, 0x56, 0x22, 0x17, 0x42, 0xb9, 0x1a, 0x31, 0x89, 0xf3,
0xa3, 0x5d, 0x28, 0x76, 0x35, 0xcb, 0x96, 0xad, 0xbe, 0x62, 0x58, 0x1d, 0xdd, 0xb6, 0x2a, 0x79,
0xaa, 0xe1, 0x4a, 0x94, 0x86, 0x1d, 0xcd, 0xb2, 0x0f, 0x1c, 0xe6, 0x46, 0x4c, 0x2a, 0x74, 0xfd,
0x04, 0xa2, 0x4f, 0x3f, 0x3e, 0xc6, 0xa6, 0xab, 0xb0, 0xb2, 0x30, 0x59, 0xdf, 0x1e, 0xe1, 0x76,
0xe4, 0x89, 0x3e, 0xdd, 0x4f, 0x40, 0xff, 0x0f, 0x4b, 0x5d, 0x5d, 0x51, 0x5d, 0x75, 0x72, 0xbb,
0x33, 0xe8, 0x3f, 0xac, 0x14, 0xa8, 0xd2, 0x6b, 0x91, 0x93, 0xd4, 0x15, 0xd5, 0x51, 0x51, 0x23,
0x02, 0x8d, 0x98, 0xb4, 0xd8, 0x1d, 0x25, 0xa2, 0x07, 0xb0, 0xac, 0x18, 0x46, 0xf7, 0x6c, 0x54,
0x7b, 0x91, 0x6a, 0xbf, 0x1e, 0xa5, 0x7d, 0x83, 0xc8, 0x8c, 0xaa, 0x47, 0xca, 0x18, 0x15, 0x35,
0xa1, 0x6c, 0x98, 0xd8, 0x50, 0x4c, 0x2c, 0x1b, 0xa6, 0x6e, 0xe8, 0x96, 0xd2, 0xad, 0x94, 0xa8,
0xee, 0xa7, 0xa3, 0x74, 0xef, 0x33, 0xfe, 0x7d, 0xce, 0xde, 0x88, 0x49, 0x25, 0x23, 0x48, 0x62,
0x5a, 0xf5, 0x36, 0xb6, 0x2c, 0x4f, 0x6b, 0x79, 0x9a, 0x56, 0xca, 0x1f, 0xd4, 0x1a, 0x20, 0xa1,
0x3a, 0xe4, 0xf1, 0x90, 0x88, 0xcb, 0xa7, 0xba, 0x8d, 0x2b, 0x8b, 0x93, 0x3f, 0xac, 0x3a, 0x65,
0x3d, 0xd2, 0x6d, 0x4c, 0x3e, 0x2a, 0xec, 0x8e, 0x90, 0x02, 0x8f, 0x9d, 0x62, 0x53, 0x3b, 0x3e,
0xa3, 0x6a, 0x64, 0xfa, 0xc4, 0xd2, 0xf4, 0x7e, 0x05, 0x51, 0x85, 0xcf, 0x44, 0x29, 0x3c, 0xa2,
0x42, 0x44, 0x45, 0xdd, 0x11, 0x69, 0xc4, 0xa4, 0xa5, 0xd3, 0x71, 0x32, 0x31, 0xb1, 0x63, 0xad,
0xaf, 0x74, 0xb5, 0xf7, 0x31, 0xff, 0x6c, 0x96, 0x26, 0x9b, 0xd8, 0x5d, 0xce, 0x4d, 0xbf, 0x15,
0x62, 0x62, 0xc7, 0x7e, 0xc2, 0x66, 0x06, 0x52, 0xa7, 0x4a, 0x77, 0x80, 0xc5, 0xa7, 0x21, 0xef,
0x73, 0xac, 0xa8, 0x02, 0x99, 0x1e, 0xb6, 0x2c, 0xe5, 0x04, 0x53, 0x3f, 0x9c, 0x93, 0x9c, 0xa1,
0x58, 0x84, 0x05, 0xbf, 0x33, 0x15, 0x3f, 0x8e, 0xbb, 0x92, 0xc4, 0x4f, 0x12, 0xc9, 0x53, 0x6c,
0xd2, 0x65, 0x73, 0x49, 0x3e, 0x44, 0x97, 0xa1, 0x40, 0xa7, 0x2c, 0x3b, 0xcf, 0x89, 0xb3, 0x4e,
0x4a, 0x0b, 0x94, 0x78, 0xc4, 0x99, 0x56, 0x21, 0x6f, 0xac, 0x1b, 0x2e, 0x4b, 0x82, 0xb2, 0x80,
0xb1, 0x6e, 0x38, 0x0c, 0x4f, 0xc2, 0x02, 0x59, 0x9f, 0xcb, 0x91, 0xa4, 0x2f, 0xc9, 0x13, 0x1a,
0x67, 0x11, 0x7f, 0x27, 0x40, 0x79, 0xd4, 0x01, 0xa3, 0xdb, 0x90, 0x24, 0xb1, 0x88, 0x87, 0x95,
0xea, 0x1a, 0x0b, 0x54, 0x6b, 0x4e, 0xa0, 0x5a, 0x6b, 0x3a, 0x81, 0x6a, 0x33, 0xfb, 0xe9, 0xe7,
0xab, 0xb1, 0x8f, 0xff, 0xb2, 0x1a, 0x97, 0xa8, 0x04, 0x3a, 0x4f, 0x7c, 0xa5, 0xa2, 0xf5, 0x65,
0x4d, 0xa5, 0x53, 0xce, 0x11, 0x47, 0xa8, 0x68, 0xfd, 0x6d, 0x15, 0xed, 0x40, 0xb9, 0xad, 0xf7,
0x2d, 0xdc, 0xb7, 0x06, 0x96, 0xcc, 0x02, 0x21, 0x0f, 0x26, 0x01, 0x77, 0xc8, 0xc2, 0x6b, 0xcd,
0xe1, 0xdc, 0xa7, 0x8c, 0x52, 0xa9, 0x1d, 0x24, 0x10, 0xb7, 0x7a, 0xaa, 0x74, 0x35, 0x55, 0xb1,
0x75, 0xd3, 0xaa, 0x24, 0x2f, 0x25, 0x42, 0xfd, 0xe1, 0x91, 0xc3, 0x72, 0x68, 0xa8, 0x8a, 0x8d,
0x37, 0x93, 0x64, 0xba, 0x92, 0x4f, 0x12, 0x3d, 0x05, 0x25, 0xc5, 0x30, 0x64, 0xcb, 0x56, 0x6c,
0x2c, 0xb7, 0xce, 0x6c, 0x6c, 0xd1, 0x40, 0xb3, 0x20, 0x15, 0x14, 0xc3, 0x38, 0x20, 0xd4, 0x4d,
0x42, 0x44, 0x57, 0xa0, 0x48, 0x62, 0x92, 0xa6, 0x74, 0xe5, 0x0e, 0xd6, 0x4e, 0x3a, 0x36, 0x0d,
0x29, 0x09, 0xa9, 0xc0, 0xa9, 0x0d, 0x4a, 0x14, 0x55, 0xf7, 0xc4, 0x69, 0x3c, 0x42, 0x08, 0x92,
0xaa, 0x62, 0x2b, 0x74, 0x27, 0x17, 0x24, 0xfa, 0x9b, 0xd0, 0x0c, 0xc5, 0xee, 0xf0, 0xfd, 0xa1,
0xbf, 0xd1, 0x39, 0x48, 0x73, 0xb5, 0x09, 0xaa, 0x96, 0x8f, 0xd0, 0x32, 0xa4, 0x0c, 0x53, 0x3f,
0xc5, 0xf4, 0xe8, 0xb2, 0x12, 0x1b, 0x88, 0x1f, 0x08, 0xb0, 0x38, 0x16, 0xb9, 0x88, 0xde, 0x8e,
0x62, 0x75, 0x9c, 0x77, 0x91, 0xdf, 0xe8, 0x05, 0xa2, 0x57, 0x51, 0xb1, 0xc9, 0xa3, 0x7d, 0x65,
0x7c, 0xab, 0x1b, 0xf4, 0x39, 0xdf, 0x1a, 0xce, 0x8d, 0xee, 0x41, 0xb9, 0xab, 0x58, 0xb6, 0xcc,
0xbc, 0xbf, 0xec, 0x8b, 0xfc, 0x4f, 0x8c, 0x6d, 0x32, 0x8b, 0x15, 0xc4, 0xa0, 0xb9, 0x92, 0x22,
0x11, 0xf5, 0xa8, 0xe8, 0x10, 0x96, 0x5b, 0x67, 0xef, 0x2b, 0x7d, 0x5b, 0xeb, 0x63, 0x79, 0xec,
0xd4, 0xc6, 0x53, 0x89, 0xfb, 0x9a, 0xd5, 0xc2, 0x1d, 0xe5, 0x54, 0xd3, 0x9d, 0x69, 0x2d, 0xb9,
0xf2, 0xee, 0x89, 0x5a, 0xa2, 0x04, 0xc5, 0x60, 0xd8, 0x45, 0x45, 0x10, 0xec, 0x21, 0x5f, 0xbf,
0x60, 0x0f, 0xd1, 0xf3, 0x90, 0x24, 0x6b, 0xa4, 0x6b, 0x2f, 0x86, 0xbc, 0x88, 0xcb, 0x35, 0xcf,
0x0c, 0x2c, 0x51, 0x4e, 0x51, 0x74, 0xbf, 0x06, 0x37, 0x14, 0x8f, 0x6a, 0x15, 0xaf, 0x41, 0x69,
0x24, 0xce, 0xfa, 0x8e, 0x2f, 0xee, 0x3f, 0x3e, 0xb1, 0x04, 0x85, 0x40, 0x40, 0x15, 0xcf, 0xc1,
0x72, 0x58, 0x7c, 0x14, 0x3b, 0x2e, 0x3d, 0x10, 0xe7, 0xd0, 0x2d, 0xc8, 0xba, 0x01, 0x92, 0x7d,
0x8d, 0xe7, 0xc7, 0x56, 0xe1, 0x30, 0x4b, 0x2e, 0x2b, 0xf9, 0x0c, 0x89, 0x55, 0x53, 0x73, 0x10,
0xe8, 0xc4, 0x33, 0x8a, 0x61, 0x34, 0x14, 0xab, 0x23, 0xbe, 0x0d, 0x95, 0xa8, 0xe0, 0x37, 0xb2,
0x8c, 0xa4, 0x6b, 0x85, 0xe7, 0x20, 0x7d, 0xac, 0x9b, 0x3d, 0xc5, 0xa6, 0xca, 0x0a, 0x12, 0x1f,
0x11, 0xeb, 0x64, 0x81, 0x30, 0x41, 0xc9, 0x6c, 0x20, 0xca, 0x70, 0x3e, 0x32, 0x00, 0x12, 0x11,
0xad, 0xaf, 0x62, 0xb6, 0x9f, 0x05, 0x89, 0x0d, 0x3c, 0x45, 0x6c, 0xb2, 0x6c, 0x40, 0x5e, 0x6b,
0xd1, 0xb5, 0x52, 0xfd, 0x39, 0x89, 0x8f, 0xc4, 0x5f, 0x25, 0xe0, 0x5c, 0x78, 0x18, 0x44, 0x97,
0x60, 0xa1, 0xa7, 0x0c, 0x65, 0x7b, 0xc8, 0xbf, 0x65, 0x76, 0x1c, 0xd0, 0x53, 0x86, 0xcd, 0x21,
0xfb, 0x90, 0xcb, 0x90, 0xb0, 0x87, 0x56, 0x45, 0xb8, 0x94, 0xb8, 0xba, 0x20, 0x91, 0x9f, 0xe8,
0x10, 0x16, 0xbb, 0x7a, 0x5b, 0xe9, 0xca, 0x3e, 0x8b, 0xe7, 0xc6, 0x7e, 0x79, 0x6c, 0xb3, 0x59,
0x40, 0xc3, 0xea, 0x98, 0xd1, 0x97, 0xa8, 0x8e, 0x1d, 0xd7, 0xf2, 0xbf, 0x21, 0xab, 0xf7, 0x9d,
0x51, 0x2a, 0xe0, 0x29, 0x1c, 0x9f, 0x9d, 0x9e, 0xdb, 0x67, 0x3f, 0x0f, 0xcb, 0x7d, 0x3c, 0xb4,
0x7d, 0x73, 0x64, 0x86, 0x93, 0xa1, 0x67, 0x81, 0xc8, 0x33, 0xef, 0xfd, 0xc4, 0x86, 0xd0, 0x35,
0x9a, 0x59, 0x18, 0xba, 0x85, 0x4d, 0x59, 0x51, 0x55, 0x13, 0x5b, 0x16, 0xcd, 0x6c, 0x17, 0x68,
0xba, 0x40, 0xe9, 0x1b, 0x8c, 0x2c, 0xfe, 0xd4, 0x7f, 0x56, 0xc1, 0x4c, 0x82, 0x9f, 0x44, 0xdc,
0x3b, 0x89, 0x03, 0x58, 0xe6, 0xf2, 0x6a, 0xe0, 0x30, 0x84, 0x59, 0x3d, 0x0f, 0x72, 0xc4, 0x67,
0x38, 0x87, 0xc4, 0xa3, 0x9d, 0x83, 0xe3, 0x6d, 0x93, 0x3e, 0x6f, 0xfb, 0x6f, 0x76, 0x36, 0xaf,
0xba, 0x51, 0xc4, 0x4b, 0xd3, 0x42, 0xa3, 0x88, 0xb7, 0x2e, 0x21, 0xe0, 0xde, 0x7e, 0x16, 0x87,
0x6a, 0x74, 0x5e, 0x16, 0xaa, 0xea, 0x19, 0x58, 0x74, 0xd7, 0xe2, 0xce, 0x8f, 0x7d, 0xf5, 0x65,
0xf7, 0x01, 0x9f, 0x60, 0x64, 0x54, 0xbc, 0x02, 0xc5, 0x91, 0xac, 0x91, 0x9d, 0x42, 0xe1, 0xd4,
0xff, 0x7e, 0xf1, 0x47, 0x09, 0xd7, 0xab, 0x06, 0x52, 0xbb, 0x10, 0xcb, 0x7b, 0x03, 0x96, 0x54,
0xdc, 0xd6, 0xd4, 0xaf, 0x6a, 0x78, 0x8b, 0x5c, 0xfa, 0x3b, 0xbb, 0x9b, 0xc1, 0xee, 0xfe, 0x98,
0x87, 0xac, 0x84, 0x2d, 0x83, 0xa4, 0x74, 0x68, 0x13, 0x72, 0x78, 0xd8, 0xc6, 0x86, 0xed, 0x64,
0xc1, 0xe1, 0xd5, 0x04, 0xe3, 0xae, 0x3b, 0x9c, 0xa4, 0x36, 0x76, 0xc5, 0xd0, 0x4d, 0x0e, 0x83,
0x44, 0x23, 0x1a, 0x5c, 0xdc, 0x8f, 0x83, 0xbc, 0xe0, 0xe0, 0x20, 0x89, 0xc8, 0x52, 0x98, 0x49,
0x8d, 0x00, 0x21, 0x37, 0x39, 0x10, 0x92, 0x9c, 0xf2, 0xb2, 0x00, 0x12, 0x52, 0x0b, 0x20, 0x21,
0xa9, 0x29, 0xcb, 0x8c, 0x80, 0x42, 0x5e, 0x70, 0xa0, 0x90, 0xf4, 0x94, 0x19, 0x8f, 0x60, 0x21,
0xaf, 0x07, 0xb1, 0x90, 0x4c, 0x44, 0x68, 0x73, 0xa4, 0x27, 0x82, 0x21, 0xaf, 0xf8, 0xc0, 0x90,
0x6c, 0x24, 0x0a, 0xc1, 0x14, 0x85, 0xa0, 0x21, 0xaf, 0x05, 0xd0, 0x90, 0xdc, 0x94, 0x7d, 0x98,
0x00, 0x87, 0x6c, 0xf9, 0xe1, 0x10, 0x88, 0x44, 0x55, 0xf8, 0xb9, 0x47, 0xe1, 0x21, 0x2f, 0xb9,
0x78, 0x48, 0x3e, 0x12, 0xd8, 0xe1, 0x6b, 0x19, 0x05, 0x44, 0xf6, 0xc6, 0x00, 0x11, 0x06, 0x60,
0x3c, 0x15, 0xa9, 0x62, 0x0a, 0x22, 0xb2, 0x37, 0x86, 0x88, 0x14, 0xa6, 0x28, 0x9c, 0x02, 0x89,
0x7c, 0x2f, 0x1c, 0x12, 0x89, 0x06, 0x2d, 0xf8, 0x34, 0x67, 0xc3, 0x44, 0xe4, 0x08, 0x4c, 0xa4,
0x14, 0x59, 0xbf, 0x33, 0xf5, 0x33, 0x83, 0x22, 0x87, 0x21, 0xa0, 0x08, 0x83, 0x2f, 0xae, 0x46,
0x2a, 0x9f, 0x01, 0x15, 0x39, 0x0c, 0x41, 0x45, 0x16, 0xa7, 0xaa, 0x9d, 0x0a, 0x8b, 0xdc, 0x0d,
0xc2, 0x22, 0x68, 0xca, 0x37, 0x16, 0x89, 0x8b, 0xb4, 0xa2, 0x70, 0x11, 0x86, 0x5d, 0x3c, 0x1b,
0xa9, 0x71, 0x0e, 0x60, 0x64, 0x6f, 0x0c, 0x18, 0x59, 0x9e, 0x62, 0x69, 0xb3, 0x22, 0x23, 0xd7,
0x48, 0x46, 0x31, 0xe2, 0xaa, 0x49, 0x72, 0x8f, 0x4d, 0x53, 0x37, 0x39, 0xc6, 0xc1, 0x06, 0xe2,
0x55, 0x52, 0x29, 0x7b, 0x6e, 0x79, 0x02, 0x8a, 0x42, 0x8b, 0x28, 0x9f, 0x2b, 0x16, 0x7f, 0x1d,
0xf7, 0x64, 0x69, 0x81, 0xe9, 0xaf, 0xb2, 0x73, 0xbc, 0xca, 0xf6, 0x61, 0x2b, 0x42, 0x10, 0x5b,
0x59, 0x85, 0x3c, 0x29, 0x8e, 0x46, 0x60, 0x13, 0xc5, 0x70, 0x61, 0x93, 0xeb, 0xb0, 0x48, 0x93,
0x00, 0x86, 0xc0, 0xf0, 0xc8, 0x9a, 0xa4, 0x91, 0xb5, 0x44, 0x1e, 0xb0, 0x5d, 0x60, 0x21, 0xf6,
0x39, 0x58, 0xf2, 0xf1, 0xba, 0x45, 0x17, 0xc3, 0x10, 0xca, 0x2e, 0xf7, 0x06, 0xaf, 0xbe, 0x7e,
0x1b, 0xf7, 0x76, 0xc8, 0xc3, 0x5b, 0xc2, 0xa0, 0x91, 0xf8, 0xd7, 0x04, 0x8d, 0x08, 0x5f, 0x19,
0x1a, 0xf1, 0x17, 0x91, 0x89, 0x60, 0x11, 0xf9, 0xf7, 0xb8, 0x77, 0x26, 0x2e, 0xd0, 0xd1, 0xd6,
0x55, 0xcc, 0xcb, 0x3a, 0xfa, 0x9b, 0xa4, 0x59, 0x5d, 0xfd, 0x84, 0x17, 0x6f, 0xe4, 0x27, 0xe1,
0x72, 0x63, 0x67, 0x8e, 0x87, 0x46, 0xb7, 0x22, 0x64, 0xb9, 0x0b, 0xaf, 0x08, 0xcb, 0x90, 0x78,
0x88, 0x59, 0xa4, 0x5b, 0x90, 0xc8, 0x4f, 0xc2, 0x47, 0x8d, 0x8c, 0xe7, 0x20, 0x6c, 0x80, 0x6e,
0x43, 0x8e, 0xb6, 0x6b, 0x64, 0xdd, 0xb0, 0x78, 0x40, 0x0a, 0xa4, 0x6b, 0xac, 0x2b, 0xb3, 0xb6,
0x4f, 0x78, 0xf6, 0x0c, 0x4b, 0xca, 0x1a, 0xfc, 0x97, 0x2f, 0x69, 0xca, 0x05, 0x92, 0xa6, 0x0b,
0x90, 0x23, 0xb3, 0xb7, 0x0c, 0xa5, 0x8d, 0x69, 0x64, 0xc9, 0x49, 0x1e, 0x41, 0x7c, 0x00, 0x68,
0x3c, 0x4e, 0xa2, 0x06, 0xa4, 0xf1, 0x29, 0xee, 0xdb, 0x2c, 0xa7, 0xcc, 0xaf, 0x9f, 0x1b, 0xaf,
0x1b, 0xc9, 0xe3, 0xcd, 0x0a, 0xd9, 0xe4, 0xbf, 0x7d, 0xbe, 0x5a, 0x66, 0xdc, 0xcf, 0xea, 0x3d,
0xcd, 0xc6, 0x3d, 0xc3, 0x3e, 0x93, 0xb8, 0xbc, 0xf8, 0x67, 0x01, 0x4a, 0x23, 0xf1, 0x33, 0x74,
0x6f, 0x1d, 0x93, 0x17, 0x7c, 0xc0, 0xd2, 0x6c, 0xfb, 0x7d, 0x11, 0xe0, 0x44, 0xb1, 0xe4, 0xf7,
0x94, 0xbe, 0x8d, 0x55, 0xbe, 0xe9, 0xb9, 0x13, 0xc5, 0x7a, 0x93, 0x12, 0xc8, 0xa9, 0x93, 0xc7,
0x03, 0x0b, 0xab, 0x1c, 0xe2, 0xca, 0x9c, 0x28, 0xd6, 0xa1, 0x85, 0x55, 0xdf, 0x2a, 0x33, 0x8f,
0xb6, 0xca, 0xe0, 0x1e, 0x67, 0x47, 0xf6, 0xd8, 0x57, 0xf7, 0xe7, 0xfc, 0x75, 0x3f, 0xaa, 0x42,
0xd6, 0x30, 0x35, 0xdd, 0xd4, 0xec, 0x33, 0x7a, 0x30, 0x09, 0xc9, 0x1d, 0xa3, 0xcb, 0x50, 0xe8,
0xe1, 0x9e, 0xa1, 0xeb, 0x5d, 0x99, 0x39, 0x9b, 0x3c, 0x15, 0x5d, 0xe0, 0xc4, 0x3a, 0xf5, 0x39,
0x1f, 0x0a, 0xde, 0xd7, 0xe7, 0xe1, 0x3b, 0x5f, 0xef, 0xf6, 0xae, 0x84, 0x6c, 0xaf, 0x8f, 0x42,
0x16, 0x31, 0xb2, 0xbf, 0xee, 0xf8, 0xdb, 0xda, 0x60, 0xf1, 0x87, 0x14, 0xf4, 0x0d, 0xe6, 0x46,
0xe8, 0xc0, 0x5f, 0x99, 0x0d, 0xa8, 0x53, 0x70, 0xcc, 0x79, 0x56, 0xef, 0xe1, 0x55, 0x70, 0x8c,
0x6c, 0xa1, 0xb7, 0xe0, 0xf1, 0x11, 0xcf, 0xe6, 0xaa, 0x16, 0x66, 0x75, 0x70, 0x8f, 0x05, 0x1d,
0x9c, 0xa3, 0xda, 0xdb, 0xac, 0xc4, 0x23, 0x7e, 0x73, 0xdb, 0x50, 0x0c, 0xa6, 0x79, 0xa1, 0xc7,
0x7f, 0x19, 0x0a, 0x26, 0xb6, 0x15, 0xad, 0x2f, 0x07, 0x6a, 0xd2, 0x05, 0x46, 0xe4, 0xf8, 0xef,
0x3e, 0x3c, 0x16, 0x9a, 0xee, 0xa1, 0x17, 0x21, 0xe7, 0x65, 0x8a, 0x6c, 0x57, 0x27, 0x20, 0x79,
0x1e, 0xaf, 0xf8, 0x9b, 0xb8, 0xa7, 0x32, 0x88, 0x0d, 0xd6, 0x21, 0x6d, 0x62, 0x6b, 0xd0, 0x65,
0x68, 0x5d, 0x71, 0xfd, 0xb9, 0xd9, 0x12, 0x45, 0x42, 0x1d, 0x74, 0x6d, 0x89, 0x0b, 0x8b, 0x0f,
0x20, 0xcd, 0x28, 0x28, 0x0f, 0x99, 0xc3, 0xdd, 0x7b, 0xbb, 0x7b, 0x6f, 0xee, 0x96, 0x63, 0x08,
0x20, 0xbd, 0x51, 0xab, 0xd5, 0xf7, 0x9b, 0xe5, 0x38, 0xca, 0x41, 0x6a, 0x63, 0x73, 0x4f, 0x6a,
0x96, 0x05, 0x42, 0x96, 0xea, 0xaf, 0xd7, 0x6b, 0xcd, 0x72, 0x02, 0x2d, 0x42, 0x81, 0xfd, 0x96,
0xef, 0xee, 0x49, 0xf7, 0x37, 0x9a, 0xe5, 0xa4, 0x8f, 0x74, 0x50, 0xdf, 0xdd, 0xaa, 0x4b, 0xe5,
0x94, 0xf8, 0x5f, 0x70, 0x3e, 0x32, 0xb5, 0xf4, 0x80, 0xbf, 0xb8, 0x0f, 0xf8, 0x13, 0x7f, 0x22,
0x40, 0x35, 0x3a, 0x5f, 0x44, 0xaf, 0x8f, 0x2c, 0x7c, 0x7d, 0x8e, 0x64, 0x73, 0x64, 0xf5, 0xe8,
0x0a, 0x14, 0x4d, 0x7c, 0x8c, 0xed, 0x76, 0x87, 0xe5, 0xaf, 0x2c, 0x60, 0x16, 0xa4, 0x02, 0xa7,
0x52, 0x21, 0x8b, 0xb1, 0xbd, 0x83, 0xdb, 0xb6, 0xcc, 0x7c, 0x11, 0x33, 0xba, 0x1c, 0x61, 0x23,
0xd4, 0x03, 0x46, 0x14, 0xdf, 0x9e, 0x6b, 0x2f, 0x73, 0x90, 0x92, 0xea, 0x4d, 0xe9, 0xad, 0x72,
0x02, 0x21, 0x28, 0xd2, 0x9f, 0xf2, 0xc1, 0xee, 0xc6, 0xfe, 0x41, 0x63, 0x8f, 0xec, 0xe5, 0x12,
0x94, 0x9c, 0xbd, 0x74, 0x88, 0x29, 0xf1, 0x0f, 0x02, 0x3c, 0x1e, 0x91, 0xed, 0xa2, 0xdb, 0x00,
0xf6, 0x50, 0x36, 0x71, 0x5b, 0x37, 0xd5, 0x68, 0x23, 0x6b, 0x0e, 0x25, 0xca, 0x21, 0xe5, 0x6c,
0xfe, 0xcb, 0x9a, 0x80, 0x17, 0xa3, 0x97, 0xb9, 0x52, 0xb2, 0x2a, 0xe7, 0x53, 0xbb, 0x18, 0x02,
0x8b, 0xe2, 0x36, 0x51, 0x4c, 0xf7, 0x96, 0x2a, 0xa6, 0xfc, 0xe8, 0x7e, 0x98, 0x53, 0x99, 0xb1,
0x5b, 0x33, 0x9f, 0x3b, 0x49, 0x3d, 0x9a, 0x3b, 0x11, 0x7f, 0x9e, 0xf0, 0x6f, 0x6c, 0x30, 0xb9,
0xdf, 0x83, 0xb4, 0x65, 0x2b, 0xf6, 0xc0, 0xe2, 0x06, 0xf7, 0xe2, 0xac, 0x95, 0xc2, 0x9a, 0xf3,
0xe3, 0x80, 0x8a, 0x4b, 0x5c, 0xcd, 0x77, 0xfb, 0x6d, 0x89, 0xb7, 0xa0, 0x18, 0xdc, 0x9c, 0xe8,
0x4f, 0xc6, 0xf3, 0x39, 0x82, 0x78, 0xc7, 0xcb, 0xbf, 0x7c, 0xa0, 0xe5, 0x38, 0x20, 0x18, 0x0f,
0x03, 0x04, 0x7f, 0x11, 0x87, 0x27, 0x26, 0xd4, 0x4b, 0xe8, 0x8d, 0x91, 0x73, 0x7e, 0x69, 0x9e,
0x6a, 0x6b, 0x8d, 0xd1, 0x82, 0x27, 0x2d, 0xde, 0x84, 0x05, 0x3f, 0x7d, 0xb6, 0x45, 0xfe, 0x5e,
0xf0, 0x7c, 0x7e, 0x10, 0xb9, 0xfc, 0xda, 0x12, 0xcd, 0x11, 0x3b, 0x13, 0xe6, 0xb4, 0xb3, 0xd0,
0x64, 0x21, 0xf1, 0xcd, 0x25, 0x0b, 0xc9, 0x47, 0xb4, 0xb6, 0xb7, 0x00, 0x7c, 0x0d, 0xc9, 0x65,
0x48, 0x99, 0xfa, 0xa0, 0xaf, 0xd2, 0x63, 0x4e, 0x49, 0x6c, 0x80, 0x6e, 0x41, 0x8a, 0x98, 0x8b,
0xb3, 0x19, 0xe3, 0x9e, 0x93, 0x1c, 0xb7, 0x0f, 0xf3, 0x65, 0xdc, 0xa2, 0x06, 0x68, 0xbc, 0x29,
0x14, 0xf1, 0x8a, 0x57, 0x82, 0xaf, 0x78, 0x32, 0xb2, 0xbd, 0x14, 0xfe, 0xaa, 0xf7, 0x21, 0x45,
0x8f, 0x97, 0xe4, 0x27, 0xb4, 0xb1, 0xc9, 0x0b, 0x5e, 0xf2, 0x1b, 0x7d, 0x1f, 0x40, 0xb1, 0x6d,
0x53, 0x6b, 0x0d, 0xbc, 0x17, 0xac, 0x86, 0x9b, 0xc7, 0x86, 0xc3, 0xb7, 0x79, 0x81, 0xdb, 0xc9,
0xb2, 0x27, 0xea, 0xb3, 0x15, 0x9f, 0x42, 0x71, 0x17, 0x8a, 0x41, 0x59, 0xa7, 0x44, 0x63, 0x73,
0x08, 0x96, 0x68, 0xac, 0xe2, 0xe6, 0x25, 0x9a, 0x5b, 0xe0, 0x25, 0x58, 0x0f, 0x9b, 0x0e, 0xc4,
0x7f, 0xc4, 0x61, 0xc1, 0x6f, 0x5d, 0xff, 0x69, 0x55, 0x8e, 0xf8, 0x61, 0x1c, 0xb2, 0xee, 0xe2,
0x23, 0x1a, 0xc8, 0xde, 0xde, 0x09, 0xfe, 0x76, 0x29, 0xeb, 0x48, 0x27, 0xdc, 0x3e, 0xf7, 0x1d,
0x37, 0x21, 0x8a, 0x02, 0xa5, 0xfd, 0x3b, 0xed, 0xb4, 0xfa, 0x79, 0xfe, 0xf7, 0x63, 0x3e, 0x0f,
0x92, 0x09, 0xa0, 0xff, 0x81, 0xb4, 0xd2, 0x76, 0xa1, 0xf8, 0x62, 0x08, 0x36, 0xeb, 0xb0, 0xae,
0x35, 0x87, 0x1b, 0x94, 0x53, 0xe2, 0x12, 0x7c, 0x56, 0x82, 0xdb, 0x27, 0x7f, 0x95, 0xe8, 0x65,
0x3c, 0x41, 0xb7, 0x57, 0x04, 0x38, 0xdc, 0xbd, 0xbf, 0xb7, 0xb5, 0x7d, 0x77, 0xbb, 0xbe, 0xc5,
0x53, 0xa2, 0xad, 0xad, 0xfa, 0x56, 0x59, 0x20, 0x7c, 0x52, 0xfd, 0xfe, 0xde, 0x51, 0x7d, 0xab,
0x9c, 0x10, 0xef, 0x40, 0xce, 0x75, 0x1d, 0xa8, 0x02, 0x19, 0xa7, 0xad, 0x10, 0xe7, 0x11, 0x93,
0x77, 0x89, 0x96, 0x21, 0x65, 0xe8, 0xef, 0xf1, 0x2e, 0x71, 0x42, 0x62, 0x03, 0x51, 0x85, 0xd2,
0x88, 0xdf, 0x41, 0x77, 0x20, 0x63, 0x0c, 0x5a, 0xb2, 0x63, 0xb4, 0x23, 0x4d, 0x18, 0x07, 0x29,
0x18, 0xb4, 0xba, 0x5a, 0xfb, 0x1e, 0x3e, 0x73, 0xb6, 0xc9, 0x18, 0xb4, 0xee, 0x31, 0xdb, 0x66,
0x6f, 0x11, 0xfc, 0x6f, 0x39, 0x85, 0xac, 0xf3, 0xa9, 0xa2, 0xff, 0x85, 0x9c, 0xeb, 0xd2, 0xdc,
0xab, 0x33, 0x91, 0xbe, 0x90, 0xab, 0xf7, 0x44, 0xd0, 0x75, 0x58, 0xb4, 0xb4, 0x93, 0xbe, 0xd3,
0x82, 0x62, 0xc8, 0x9c, 0x40, 0xbf, 0x99, 0x12, 0x7b, 0xb0, 0xe3, 0xc0, 0x49, 0x24, 0x92, 0x95,
0x47, 0x7d, 0xc5, 0xb7, 0x39, 0x81, 0x90, 0x88, 0x9b, 0x08, 0x8b, 0xb8, 0x1f, 0x08, 0x90, 0xf7,
0x35, 0xb6, 0xd0, 0x7f, 0xfb, 0x1c, 0x57, 0x31, 0x24, 0x54, 0xf8, 0x78, 0xbd, 0x5b, 0x19, 0xc1,
0x85, 0x09, 0xf3, 0x2f, 0x2c, 0xaa, 0x8f, 0xe8, 0xf4, 0xc7, 0x92, 0x73, 0xf7, 0xc7, 0x9e, 0x05,
0x64, 0xeb, 0xb6, 0xd2, 0x95, 0x4f, 0x75, 0x5b, 0xeb, 0x9f, 0xc8, 0xcc, 0x34, 0x98, 0x9b, 0x29,
0xd3, 0x27, 0x47, 0xf4, 0xc1, 0x3e, 0xb5, 0x92, 0x1f, 0xc4, 0x21, 0xeb, 0x96, 0x6d, 0xf3, 0x5e,
0xb2, 0x38, 0x07, 0x69, 0x5e, 0x99, 0xb0, 0x5b, 0x16, 0x7c, 0x14, 0xda, 0x08, 0xac, 0x42, 0xb6,
0x87, 0x6d, 0x85, 0xfa, 0x4c, 0x06, 0x41, 0xba, 0xe3, 0xeb, 0x2f, 0x41, 0xde, 0x77, 0xdf, 0x85,
0xb8, 0xd1, 0xdd, 0xfa, 0x9b, 0xe5, 0x58, 0x35, 0xf3, 0xd1, 0x27, 0x97, 0x12, 0xbb, 0xf8, 0x3d,
0xf2, 0x85, 0x49, 0xf5, 0x5a, 0xa3, 0x5e, 0xbb, 0x57, 0x8e, 0x57, 0xf3, 0x1f, 0x7d, 0x72, 0x29,
0x23, 0x61, 0xda, 0xb7, 0xb9, 0x7e, 0x0f, 0x4a, 0x23, 0x07, 0x13, 0xfc, 0xa0, 0x11, 0x14, 0xb7,
0x0e, 0xf7, 0x77, 0xb6, 0x6b, 0x1b, 0xcd, 0xba, 0x7c, 0xb4, 0xd7, 0xac, 0x97, 0xe3, 0xe8, 0x71,
0x58, 0xda, 0xd9, 0x7e, 0xad, 0xd1, 0x94, 0x6b, 0x3b, 0xdb, 0xf5, 0xdd, 0xa6, 0xbc, 0xd1, 0x6c,
0x6e, 0xd4, 0xee, 0x95, 0x85, 0xf5, 0x5f, 0xe6, 0xa1, 0xb4, 0xb1, 0x59, 0xdb, 0x26, 0xb5, 0x99,
0xd6, 0x56, 0xa8, 0x7b, 0xa8, 0x41, 0x92, 0x82, 0xc0, 0x13, 0x6f, 0x30, 0x57, 0x27, 0x37, 0xf6,
0xd0, 0x5d, 0x48, 0x51, 0x7c, 0x18, 0x4d, 0xbe, 0xd2, 0x5c, 0x9d, 0xd2, 0xe9, 0x23, 0x93, 0xa1,
0x9f, 0xd3, 0xc4, 0x3b, 0xce, 0xd5, 0xc9, 0x8d, 0x3f, 0xb4, 0x03, 0x19, 0x07, 0xbe, 0x9b, 0x76,
0x5b, 0xb8, 0x3a, 0xb5, 0x83, 0x46, 0x96, 0xc6, 0x60, 0xd6, 0xc9, 0xd7, 0x9f, 0xab, 0x53, 0x5a,
0x82, 0x68, 0x1b, 0xd2, 0x1c, 0xe1, 0x98, 0x72, 0xf3, 0xb7, 0x3a, 0xad, 0x13, 0x86, 0x24, 0xc8,
0x79, 0x00, 0xf6, 0xf4, 0x4b, 0xdd, 0xd5, 0x19, 0xba, 0x9d, 0xe8, 0x01, 0x14, 0x82, 0xa8, 0xc9,
0x6c, 0xb7, 0x8b, 0xab, 0x33, 0xf6, 0xdc, 0x88, 0xfe, 0x20, 0x84, 0x32, 0xdb, 0x6d, 0xe3, 0xea,
0x8c, 0x2d, 0x38, 0xf4, 0x0e, 0x2c, 0x8e, 0x43, 0x1c, 0xb3, 0x5f, 0x3e, 0xae, 0xce, 0xd1, 0x94,
0x43, 0x3d, 0x40, 0x21, 0xd0, 0xc8, 0x1c, 0x77, 0x91, 0xab, 0xf3, 0xf4, 0xe8, 0x90, 0x0a, 0xa5,
0x51, 0xb8, 0x61, 0xd6, 0xbb, 0xc9, 0xd5, 0x99, 0xfb, 0x75, 0xec, 0x2d, 0xc1, 0xda, 0x7b, 0xd6,
0xbb, 0xca, 0xd5, 0x99, 0xdb, 0x77, 0xe8, 0x10, 0xc0, 0x57, 0x3b, 0xce, 0x70, 0x77, 0xb9, 0x3a,
0x4b, 0x23, 0x0f, 0x19, 0xb0, 0x14, 0x56, 0x54, 0xce, 0x73, 0x95, 0xb9, 0x3a, 0x57, 0x7f, 0x8f,
0xd8, 0x73, 0xb0, 0x3c, 0x9c, 0xed, 0x6a, 0x73, 0x75, 0xc6, 0x46, 0xdf, 0x66, 0xfd, 0xd3, 0x2f,
0x56, 0xe2, 0x9f, 0x7d, 0xb1, 0x12, 0xff, 0xeb, 0x17, 0x2b, 0xf1, 0x8f, 0xbf, 0x5c, 0x89, 0x7d,
0xf6, 0xe5, 0x4a, 0xec, 0x4f, 0x5f, 0xae, 0xc4, 0xfe, 0xef, 0x99, 0x13, 0xcd, 0xee, 0x0c, 0x5a,
0x6b, 0x6d, 0xbd, 0x77, 0xc3, 0xff, 0x2f, 0x97, 0xb0, 0x7f, 0xde, 0xb4, 0xd2, 0x34, 0xa0, 0xde,
0xfc, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1e, 0xe0, 0x41, 0x05, 0x99, 0x33, 0x00, 0x00,
// 3474 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcb, 0x73, 0x23, 0xd5,
0xd5, 0xd7, 0xfb, 0x71, 0x64, 0x49, 0xed, 0x6b, 0x33, 0x68, 0xc4, 0x8c, 0x3d, 0xf4, 0x14, 0x30,
0x33, 0x80, 0x87, 0xcf, 0xf3, 0x0d, 0x0c, 0xdf, 0xc0, 0x47, 0xd9, 0xb2, 0x06, 0x79, 0xc6, 0x63,
0x9b, 0xb6, 0x6c, 0x8a, 0x3c, 0xa6, 0x69, 0x49, 0xd7, 0x56, 0x33, 0x92, 0xba, 0xe9, 0x6e, 0x19,
0x99, 0x65, 0x28, 0x36, 0x54, 0xaa, 0xc2, 0x26, 0x95, 0xa4, 0x2a, 0xec, 0x92, 0xaa, 0xe4, 0x3f,
0xc8, 0x2a, 0xab, 0x2c, 0x58, 0x64, 0xc1, 0x2a, 0xc9, 0x8a, 0xa4, 0x60, 0x91, 0xaa, 0xfc, 0x03,
0xd9, 0x25, 0xa9, 0xfb, 0xe8, 0x97, 0xd4, 0x2d, 0xb5, 0x18, 0xa0, 0x2a, 0x55, 0xec, 0x74, 0x4f,
0x9f, 0x73, 0xfa, 0x3e, 0xce, 0x3d, 0x8f, 0xdf, 0x69, 0xc1, 0x13, 0x16, 0x1e, 0x74, 0xb0, 0xd1,
0x57, 0x07, 0xd6, 0x75, 0xa5, 0xd5, 0x56, 0xaf, 0x5b, 0x67, 0x3a, 0x36, 0xd7, 0x74, 0x43, 0xb3,
0x34, 0x54, 0x76, 0x1f, 0xae, 0x91, 0x87, 0xd5, 0x8b, 0x1e, 0xee, 0xb6, 0x71, 0xa6, 0x5b, 0xda,
0x75, 0xdd, 0xd0, 0xb4, 0x63, 0xc6, 0x5f, 0xbd, 0xe0, 0x79, 0x4c, 0xf5, 0x78, 0xb5, 0xf9, 0x9e,
0x72, 0xe1, 0x87, 0xf8, 0xcc, 0x7e, 0x7a, 0x71, 0x42, 0x56, 0x57, 0x0c, 0xa5, 0x6f, 0x3f, 0x5e,
0x3d, 0xd1, 0xb4, 0x93, 0x1e, 0xbe, 0x4e, 0x47, 0xad, 0xe1, 0xf1, 0x75, 0x4b, 0xed, 0x63, 0xd3,
0x52, 0xfa, 0x3a, 0x67, 0x58, 0x3e, 0xd1, 0x4e, 0x34, 0xfa, 0xf3, 0x3a, 0xf9, 0xc5, 0xa8, 0xe2,
0xbf, 0x01, 0xb2, 0x12, 0x7e, 0x77, 0x88, 0x4d, 0x0b, 0xad, 0x43, 0x0a, 0xb7, 0xbb, 0x5a, 0x25,
0x7e, 0x29, 0x7e, 0xa5, 0xb0, 0x7e, 0x61, 0x6d, 0x6c, 0x71, 0x6b, 0x9c, 0xaf, 0xde, 0xee, 0x6a,
0x8d, 0x98, 0x44, 0x79, 0xd1, 0x4d, 0x48, 0x1f, 0xf7, 0x86, 0x66, 0xb7, 0x92, 0xa0, 0x42, 0x17,
0xc3, 0x84, 0xee, 0x10, 0xa6, 0x46, 0x4c, 0x62, 0xdc, 0xe4, 0x55, 0xea, 0xe0, 0x58, 0xab, 0x24,
0xa7, 0xbf, 0x6a, 0x7b, 0x70, 0x4c, 0x5f, 0x45, 0x78, 0xd1, 0x26, 0x80, 0x3a, 0x50, 0x2d, 0xb9,
0xdd, 0x55, 0xd4, 0x41, 0x25, 0x45, 0x25, 0x9f, 0x0c, 0x97, 0x54, 0xad, 0x1a, 0x61, 0x6c, 0xc4,
0xa4, 0xbc, 0x6a, 0x0f, 0xc8, 0x74, 0xdf, 0x1d, 0x62, 0xe3, 0xac, 0x92, 0x9e, 0x3e, 0xdd, 0x37,
0x08, 0x13, 0x99, 0x2e, 0xe5, 0x46, 0xdb, 0x50, 0x68, 0xe1, 0x13, 0x75, 0x20, 0xb7, 0x7a, 0x5a,
0xfb, 0x61, 0x25, 0x43, 0x85, 0xc5, 0x30, 0xe1, 0x4d, 0xc2, 0xba, 0x49, 0x38, 0x37, 0x13, 0x95,
0x78, 0x23, 0x26, 0x41, 0xcb, 0xa1, 0xa0, 0x57, 0x20, 0xd7, 0xee, 0xe2, 0xf6, 0x43, 0xd9, 0x1a,
0x55, 0xb2, 0x54, 0xcf, 0x6a, 0x98, 0x9e, 0x1a, 0xe1, 0x6b, 0x8e, 0x1a, 0x31, 0x29, 0xdb, 0x66,
0x3f, 0xd1, 0x1d, 0x80, 0x0e, 0xee, 0xa9, 0xa7, 0xd8, 0x20, 0xf2, 0xb9, 0xe9, 0x7b, 0xb0, 0xc5,
0x38, 0x9b, 0x23, 0x3e, 0x8d, 0x7c, 0xc7, 0x26, 0xa0, 0x1a, 0xe4, 0xf1, 0xa0, 0xc3, 0x97, 0x93,
0xa7, 0x6a, 0x2e, 0x85, 0x9e, 0xf7, 0xa0, 0xe3, 0x5d, 0x4c, 0x0e, 0xf3, 0x31, 0xba, 0x05, 0x99,
0xb6, 0xd6, 0xef, 0xab, 0x56, 0x05, 0xa8, 0x86, 0x95, 0xd0, 0x85, 0x50, 0xae, 0x46, 0x4c, 0xe2,
0xfc, 0x68, 0x17, 0x4a, 0x3d, 0xd5, 0xb4, 0x64, 0x73, 0xa0, 0xe8, 0x66, 0x57, 0xb3, 0xcc, 0x4a,
0x81, 0x6a, 0x78, 0x2a, 0x4c, 0xc3, 0x8e, 0x6a, 0x5a, 0x07, 0x36, 0x73, 0x23, 0x26, 0x15, 0x7b,
0x5e, 0x02, 0xd1, 0xa7, 0x1d, 0x1f, 0x63, 0xc3, 0x51, 0x58, 0x59, 0x98, 0xae, 0x6f, 0x8f, 0x70,
0xdb, 0xf2, 0x44, 0x9f, 0xe6, 0x25, 0xa0, 0xef, 0xc3, 0x52, 0x4f, 0x53, 0x3a, 0x8e, 0x3a, 0xb9,
0xdd, 0x1d, 0x0e, 0x1e, 0x56, 0x8a, 0x54, 0xe9, 0xd5, 0xd0, 0x49, 0x6a, 0x4a, 0xc7, 0x56, 0x51,
0x23, 0x02, 0x8d, 0x98, 0xb4, 0xd8, 0x1b, 0x27, 0xa2, 0x07, 0xb0, 0xac, 0xe8, 0x7a, 0xef, 0x6c,
0x5c, 0x7b, 0x89, 0x6a, 0xbf, 0x16, 0xa6, 0x7d, 0x83, 0xc8, 0x8c, 0xab, 0x47, 0xca, 0x04, 0x15,
0x35, 0x41, 0xd0, 0x0d, 0xac, 0x2b, 0x06, 0x96, 0x75, 0x43, 0xd3, 0x35, 0x53, 0xe9, 0x55, 0xca,
0x54, 0xf7, 0x33, 0x61, 0xba, 0xf7, 0x19, 0xff, 0x3e, 0x67, 0x6f, 0xc4, 0xa4, 0xb2, 0xee, 0x27,
0x31, 0xad, 0x5a, 0x1b, 0x9b, 0xa6, 0xab, 0x55, 0x98, 0xa5, 0x95, 0xf2, 0xfb, 0xb5, 0xfa, 0x48,
0xa8, 0x0e, 0x05, 0x3c, 0x22, 0xe2, 0xf2, 0xa9, 0x66, 0xe1, 0xca, 0xe2, 0xf4, 0x8b, 0x55, 0xa7,
0xac, 0x47, 0x9a, 0x85, 0xc9, 0xa5, 0xc2, 0xce, 0x08, 0x29, 0xf0, 0xd8, 0x29, 0x36, 0xd4, 0xe3,
0x33, 0xaa, 0x46, 0xa6, 0x4f, 0x4c, 0x55, 0x1b, 0x54, 0x10, 0x55, 0xf8, 0x6c, 0x98, 0xc2, 0x23,
0x2a, 0x44, 0x54, 0xd4, 0x6d, 0x91, 0x46, 0x4c, 0x5a, 0x3a, 0x9d, 0x24, 0x13, 0x13, 0x3b, 0x56,
0x07, 0x4a, 0x4f, 0x7d, 0x1f, 0xf3, 0x6b, 0xb3, 0x34, 0xdd, 0xc4, 0xee, 0x70, 0x6e, 0x7a, 0x57,
0x88, 0x89, 0x1d, 0x7b, 0x09, 0x9b, 0x59, 0x48, 0x9f, 0x2a, 0xbd, 0x21, 0x16, 0x9f, 0x81, 0x82,
0xc7, 0xb1, 0xa2, 0x0a, 0x64, 0xfb, 0xd8, 0x34, 0x95, 0x13, 0x4c, 0xfd, 0x70, 0x5e, 0xb2, 0x87,
0x62, 0x09, 0x16, 0xbc, 0xce, 0x54, 0xfc, 0x38, 0xee, 0x48, 0x12, 0x3f, 0x49, 0x24, 0x4f, 0xb1,
0x41, 0x97, 0xcd, 0x25, 0xf9, 0x10, 0x5d, 0x86, 0x22, 0x9d, 0xb2, 0x6c, 0x3f, 0x27, 0xce, 0x3a,
0x25, 0x2d, 0x50, 0xe2, 0x11, 0x67, 0x5a, 0x85, 0x82, 0xbe, 0xae, 0x3b, 0x2c, 0x49, 0xca, 0x02,
0xfa, 0xba, 0x6e, 0x33, 0x3c, 0x09, 0x0b, 0x64, 0x7d, 0x0e, 0x47, 0x8a, 0xbe, 0xa4, 0x40, 0x68,
0x9c, 0x45, 0xfc, 0x63, 0x02, 0x84, 0x71, 0x07, 0x8c, 0x6e, 0x41, 0x8a, 0xc4, 0x22, 0x1e, 0x56,
0xaa, 0x6b, 0x2c, 0x50, 0xad, 0xd9, 0x81, 0x6a, 0xad, 0x69, 0x07, 0xaa, 0xcd, 0xdc, 0xa7, 0x9f,
0xaf, 0xc6, 0x3e, 0xfe, 0xeb, 0x6a, 0x5c, 0xa2, 0x12, 0xe8, 0x3c, 0xf1, 0x95, 0x8a, 0x3a, 0x90,
0xd5, 0x0e, 0x9d, 0x72, 0x9e, 0x38, 0x42, 0x45, 0x1d, 0x6c, 0x77, 0xd0, 0x0e, 0x08, 0x6d, 0x6d,
0x60, 0xe2, 0x81, 0x39, 0x34, 0x65, 0x16, 0x08, 0x79, 0x30, 0xf1, 0xb9, 0x43, 0x16, 0x5e, 0x6b,
0x36, 0xe7, 0x3e, 0x65, 0x94, 0xca, 0x6d, 0x3f, 0x81, 0xb8, 0xd5, 0x53, 0xa5, 0xa7, 0x76, 0x14,
0x4b, 0x33, 0xcc, 0x4a, 0xea, 0x52, 0x32, 0xd0, 0x1f, 0x1e, 0xd9, 0x2c, 0x87, 0x7a, 0x47, 0xb1,
0xf0, 0x66, 0x8a, 0x4c, 0x57, 0xf2, 0x48, 0xa2, 0xa7, 0xa1, 0xac, 0xe8, 0xba, 0x6c, 0x5a, 0x8a,
0x85, 0xe5, 0xd6, 0x99, 0x85, 0x4d, 0x1a, 0x68, 0x16, 0xa4, 0xa2, 0xa2, 0xeb, 0x07, 0x84, 0xba,
0x49, 0x88, 0xe8, 0x29, 0x28, 0x91, 0x98, 0xa4, 0x2a, 0x3d, 0xb9, 0x8b, 0xd5, 0x93, 0xae, 0x45,
0x43, 0x4a, 0x52, 0x2a, 0x72, 0x6a, 0x83, 0x12, 0xc5, 0x8e, 0x73, 0xe2, 0x34, 0x1e, 0x21, 0x04,
0xa9, 0x8e, 0x62, 0x29, 0x74, 0x27, 0x17, 0x24, 0xfa, 0x9b, 0xd0, 0x74, 0xc5, 0xea, 0xf2, 0xfd,
0xa1, 0xbf, 0xd1, 0x39, 0xc8, 0x70, 0xb5, 0x49, 0xaa, 0x96, 0x8f, 0xd0, 0x32, 0xa4, 0x75, 0x43,
0x3b, 0xc5, 0xf4, 0xe8, 0x72, 0x12, 0x1b, 0x88, 0x1f, 0x24, 0x60, 0x71, 0x22, 0x72, 0x11, 0xbd,
0x5d, 0xc5, 0xec, 0xda, 0xef, 0x22, 0xbf, 0xd1, 0x8b, 0x44, 0xaf, 0xd2, 0xc1, 0x06, 0x8f, 0xf6,
0x95, 0xc9, 0xad, 0x6e, 0xd0, 0xe7, 0x7c, 0x6b, 0x38, 0x37, 0xba, 0x07, 0x42, 0x4f, 0x31, 0x2d,
0x99, 0x79, 0x7f, 0xd9, 0x13, 0xf9, 0x9f, 0x98, 0xd8, 0x64, 0x16, 0x2b, 0x88, 0x41, 0x73, 0x25,
0x25, 0x22, 0xea, 0x52, 0xd1, 0x21, 0x2c, 0xb7, 0xce, 0xde, 0x57, 0x06, 0x96, 0x3a, 0xc0, 0xf2,
0xc4, 0xa9, 0x4d, 0xa6, 0x12, 0xf7, 0x55, 0xb3, 0x85, 0xbb, 0xca, 0xa9, 0xaa, 0xd9, 0xd3, 0x5a,
0x72, 0xe4, 0x9d, 0x13, 0x35, 0x45, 0x09, 0x4a, 0xfe, 0xb0, 0x8b, 0x4a, 0x90, 0xb0, 0x46, 0x7c,
0xfd, 0x09, 0x6b, 0x84, 0x5e, 0x80, 0x14, 0x59, 0x23, 0x5d, 0x7b, 0x29, 0xe0, 0x45, 0x5c, 0xae,
0x79, 0xa6, 0x63, 0x89, 0x72, 0x8a, 0xa2, 0x73, 0x1b, 0x9c, 0x50, 0x3c, 0xae, 0x55, 0xbc, 0x0a,
0xe5, 0xb1, 0x38, 0xeb, 0x39, 0xbe, 0xb8, 0xf7, 0xf8, 0xc4, 0x32, 0x14, 0x7d, 0x01, 0x55, 0x3c,
0x07, 0xcb, 0x41, 0xf1, 0x51, 0xec, 0x3a, 0x74, 0x5f, 0x9c, 0x43, 0x37, 0x21, 0xe7, 0x04, 0x48,
0x76, 0x1b, 0xcf, 0x4f, 0xac, 0xc2, 0x66, 0x96, 0x1c, 0x56, 0x72, 0x0d, 0x89, 0x55, 0x53, 0x73,
0x48, 0xd0, 0x89, 0x67, 0x15, 0x5d, 0x6f, 0x28, 0x66, 0x57, 0x7c, 0x1b, 0x2a, 0x61, 0xc1, 0x6f,
0x6c, 0x19, 0x29, 0xc7, 0x0a, 0xcf, 0x41, 0xe6, 0x58, 0x33, 0xfa, 0x8a, 0x45, 0x95, 0x15, 0x25,
0x3e, 0x22, 0xd6, 0xc9, 0x02, 0x61, 0x92, 0x92, 0xd9, 0x40, 0x94, 0xe1, 0x7c, 0x68, 0x00, 0x24,
0x22, 0xea, 0xa0, 0x83, 0xd9, 0x7e, 0x16, 0x25, 0x36, 0x70, 0x15, 0xb1, 0xc9, 0xb2, 0x01, 0x79,
0xad, 0x49, 0xd7, 0x4a, 0xf5, 0xe7, 0x25, 0x3e, 0x12, 0x7f, 0x9b, 0x84, 0x73, 0xc1, 0x61, 0x10,
0x5d, 0x82, 0x85, 0xbe, 0x32, 0x92, 0xad, 0x11, 0xbf, 0xcb, 0xec, 0x38, 0xa0, 0xaf, 0x8c, 0x9a,
0x23, 0x76, 0x91, 0x05, 0x48, 0x5a, 0x23, 0xb3, 0x92, 0xb8, 0x94, 0xbc, 0xb2, 0x20, 0x91, 0x9f,
0xe8, 0x10, 0x16, 0x7b, 0x5a, 0x5b, 0xe9, 0xc9, 0x1e, 0x8b, 0xe7, 0xc6, 0x7e, 0x79, 0x62, 0xb3,
0x59, 0x40, 0xc3, 0x9d, 0x09, 0xa3, 0x2f, 0x53, 0x1d, 0x3b, 0x8e, 0xe5, 0x7f, 0x43, 0x56, 0xef,
0x39, 0xa3, 0xb4, 0xcf, 0x53, 0xd8, 0x3e, 0x3b, 0x33, 0xb7, 0xcf, 0x7e, 0x01, 0x96, 0x07, 0x78,
0x64, 0x79, 0xe6, 0xc8, 0x0c, 0x27, 0x4b, 0xcf, 0x02, 0x91, 0x67, 0xee, 0xfb, 0x89, 0x0d, 0xa1,
0xab, 0x34, 0xb3, 0xd0, 0x35, 0x13, 0x1b, 0xb2, 0xd2, 0xe9, 0x18, 0xd8, 0x34, 0x69, 0x66, 0xbb,
0x40, 0xd3, 0x05, 0x4a, 0xdf, 0x60, 0x64, 0xf1, 0x17, 0xde, 0xb3, 0xf2, 0x67, 0x12, 0xfc, 0x24,
0xe2, 0xee, 0x49, 0x1c, 0xc0, 0x32, 0x97, 0xef, 0xf8, 0x0e, 0x23, 0x11, 0xd5, 0xf3, 0x20, 0x5b,
0x3c, 0xc2, 0x39, 0x24, 0x1f, 0xed, 0x1c, 0x6c, 0x6f, 0x9b, 0xf2, 0x78, 0xdb, 0xff, 0xb2, 0xb3,
0x79, 0xcd, 0x89, 0x22, 0x6e, 0x9a, 0x16, 0x18, 0x45, 0xdc, 0x75, 0x25, 0x7c, 0xee, 0xed, 0x97,
0x71, 0xa8, 0x86, 0xe7, 0x65, 0x81, 0xaa, 0x9e, 0x85, 0x45, 0x67, 0x2d, 0xce, 0xfc, 0xd8, 0xad,
0x17, 0x9c, 0x07, 0x7c, 0x82, 0xa1, 0x51, 0xf1, 0x29, 0x28, 0x8d, 0x65, 0x8d, 0xec, 0x14, 0x8a,
0xa7, 0xde, 0xf7, 0x8b, 0x3f, 0x4d, 0x3a, 0x5e, 0xd5, 0x97, 0xda, 0x05, 0x58, 0xde, 0x1b, 0xb0,
0xd4, 0xc1, 0x6d, 0xb5, 0xf3, 0x55, 0x0d, 0x6f, 0x91, 0x4b, 0x7f, 0x67, 0x77, 0x11, 0xec, 0xee,
0xcf, 0x05, 0xc8, 0x49, 0xd8, 0xd4, 0x49, 0x4a, 0x87, 0x36, 0x21, 0x8f, 0x47, 0x6d, 0xac, 0x5b,
0x76, 0x16, 0x1c, 0x5c, 0x4d, 0x30, 0xee, 0xba, 0xcd, 0x49, 0x6a, 0x63, 0x47, 0x0c, 0xdd, 0xe0,
0x30, 0x48, 0x38, 0xa2, 0xc1, 0xc5, 0xbd, 0x38, 0xc8, 0x8b, 0x36, 0x0e, 0x92, 0x0c, 0x2d, 0x85,
0x99, 0xd4, 0x18, 0x10, 0x72, 0x83, 0x03, 0x21, 0xa9, 0x19, 0x2f, 0xf3, 0x21, 0x21, 0x35, 0x1f,
0x12, 0x92, 0x9e, 0xb1, 0xcc, 0x10, 0x28, 0xe4, 0x45, 0x1b, 0x0a, 0xc9, 0xcc, 0x98, 0xf1, 0x18,
0x16, 0x72, 0xd7, 0x8f, 0x85, 0x64, 0x43, 0x42, 0x9b, 0x2d, 0x3d, 0x15, 0x0c, 0x79, 0xd5, 0x03,
0x86, 0xe4, 0x42, 0x51, 0x08, 0xa6, 0x28, 0x00, 0x0d, 0x79, 0xdd, 0x87, 0x86, 0xe4, 0x67, 0xec,
0xc3, 0x14, 0x38, 0x64, 0xcb, 0x0b, 0x87, 0x40, 0x28, 0xaa, 0xc2, 0xcf, 0x3d, 0x0c, 0x0f, 0x79,
0xd9, 0xc1, 0x43, 0x0a, 0xa1, 0xc0, 0x0e, 0x5f, 0xcb, 0x38, 0x20, 0xb2, 0x37, 0x01, 0x88, 0x30,
0x00, 0xe3, 0xe9, 0x50, 0x15, 0x33, 0x10, 0x91, 0xbd, 0x09, 0x44, 0xa4, 0x38, 0x43, 0xe1, 0x0c,
0x48, 0xe4, 0x07, 0xc1, 0x90, 0x48, 0x38, 0x68, 0xc1, 0xa7, 0x19, 0x0d, 0x13, 0x91, 0x43, 0x30,
0x91, 0x72, 0x68, 0xfd, 0xce, 0xd4, 0x47, 0x06, 0x45, 0x0e, 0x03, 0x40, 0x11, 0x06, 0x5f, 0x5c,
0x09, 0x55, 0x1e, 0x01, 0x15, 0x39, 0x0c, 0x40, 0x45, 0x16, 0x67, 0xaa, 0x9d, 0x09, 0x8b, 0xdc,
0xf1, 0xc3, 0x22, 0x68, 0xc6, 0x1d, 0x0b, 0xc5, 0x45, 0x5a, 0x61, 0xb8, 0x08, 0xc3, 0x2e, 0x9e,
0x0b, 0xd5, 0x38, 0x07, 0x30, 0xb2, 0x37, 0x01, 0x8c, 0x2c, 0xcf, 0xb0, 0xb4, 0xa8, 0xc8, 0xc8,
0x55, 0x92, 0x51, 0x8c, 0xb9, 0x6a, 0x92, 0xdc, 0x63, 0xc3, 0xd0, 0x0c, 0x8e, 0x71, 0xb0, 0x81,
0x78, 0x85, 0x54, 0xca, 0xae, 0x5b, 0x9e, 0x82, 0xa2, 0xd0, 0x22, 0xca, 0xe3, 0x8a, 0xc5, 0xdf,
0xc5, 0x5d, 0x59, 0x5a, 0x60, 0x7a, 0xab, 0xec, 0x3c, 0xaf, 0xb2, 0x3d, 0xd8, 0x4a, 0xc2, 0x8f,
0xad, 0xac, 0x42, 0x81, 0x14, 0x47, 0x63, 0xb0, 0x89, 0xa2, 0x3b, 0xb0, 0xc9, 0x35, 0x58, 0xa4,
0x49, 0x00, 0x43, 0x60, 0x78, 0x64, 0x4d, 0xd1, 0xc8, 0x5a, 0x26, 0x0f, 0xd8, 0x2e, 0xb0, 0x10,
0xfb, 0x3c, 0x2c, 0x79, 0x78, 0x9d, 0xa2, 0x8b, 0x61, 0x08, 0x82, 0xc3, 0xbd, 0xc1, 0xab, 0xaf,
0x3f, 0xc4, 0xdd, 0x1d, 0x72, 0xf1, 0x96, 0x20, 0x68, 0x24, 0xfe, 0x35, 0x41, 0x23, 0x89, 0xaf,
0x0c, 0x8d, 0x78, 0x8b, 0xc8, 0xa4, 0xbf, 0x88, 0xfc, 0x67, 0xdc, 0x3d, 0x13, 0x07, 0xe8, 0x68,
0x6b, 0x1d, 0xcc, 0xcb, 0x3a, 0xfa, 0x9b, 0xa4, 0x59, 0x3d, 0xed, 0x84, 0x17, 0x6f, 0xe4, 0x27,
0xe1, 0x72, 0x62, 0x67, 0x9e, 0x87, 0x46, 0xa7, 0x22, 0x64, 0xb9, 0x0b, 0xaf, 0x08, 0x05, 0x48,
0x3e, 0xc4, 0x2c, 0xd2, 0x2d, 0x48, 0xe4, 0x27, 0xe1, 0xa3, 0x46, 0xc6, 0x73, 0x10, 0x36, 0x40,
0xb7, 0x20, 0x4f, 0xdb, 0x35, 0xb2, 0xa6, 0x9b, 0x3c, 0x20, 0xf9, 0xd2, 0x35, 0xd6, 0x95, 0x59,
0xdb, 0x27, 0x3c, 0x7b, 0xba, 0x29, 0xe5, 0x74, 0xfe, 0xcb, 0x93, 0x34, 0xe5, 0x7d, 0x49, 0xd3,
0x05, 0xc8, 0x93, 0xd9, 0x9b, 0xba, 0xd2, 0xc6, 0x34, 0xb2, 0xe4, 0x25, 0x97, 0x20, 0x3e, 0x00,
0x34, 0x19, 0x27, 0x51, 0x03, 0x32, 0xf8, 0x14, 0x0f, 0x2c, 0x96, 0x53, 0x16, 0xd6, 0xcf, 0x4d,
0xd6, 0x8d, 0xe4, 0xf1, 0x66, 0x85, 0x6c, 0xf2, 0x3f, 0x3e, 0x5f, 0x15, 0x18, 0xf7, 0x73, 0x5a,
0x5f, 0xb5, 0x70, 0x5f, 0xb7, 0xce, 0x24, 0x2e, 0x2f, 0xfe, 0x3d, 0x0e, 0xe5, 0xb1, 0xf8, 0x19,
0xb8, 0xb7, 0xb6, 0xc9, 0x27, 0x3c, 0xc0, 0xd2, 0x45, 0x80, 0x13, 0xc5, 0x94, 0xdf, 0x53, 0x06,
0x16, 0xee, 0xf0, 0xed, 0xcc, 0x9f, 0x28, 0xe6, 0x9b, 0x94, 0xe0, 0x5f, 0x58, 0x6e, 0x6c, 0x61,
0x9e, 0x62, 0x3b, 0xef, 0x2d, 0xb6, 0x51, 0x15, 0x72, 0xba, 0xa1, 0x6a, 0x86, 0x6a, 0x9d, 0xd1,
0xdd, 0x48, 0x4a, 0xce, 0x18, 0x5d, 0x86, 0x62, 0x1f, 0xf7, 0x75, 0x4d, 0xeb, 0xc9, 0xec, 0x86,
0x17, 0xa8, 0xe8, 0x02, 0x27, 0xd6, 0x09, 0xed, 0x6e, 0x2a, 0x97, 0x14, 0x52, 0x77, 0x53, 0xb9,
0x94, 0x90, 0xbe, 0x9b, 0xca, 0x65, 0x84, 0xec, 0xdd, 0x54, 0x2e, 0x2b, 0xe4, 0xc4, 0x0f, 0x13,
0xee, 0x55, 0x70, 0xc1, 0x96, 0xa8, 0x6b, 0x8d, 0x66, 0x5b, 0x2b, 0x01, 0x3b, 0xe2, 0xa1, 0x90,
0xc5, 0x91, 0xd1, 0xd0, 0xc4, 0x1d, 0x8e, 0xe7, 0x39, 0x63, 0xcf, 0x99, 0x66, 0x1f, 0xed, 0x4c,
0xa7, 0x6f, 0xbc, 0xf8, 0x63, 0x8a, 0xc0, 0xfa, 0x13, 0x15, 0x74, 0xe0, 0x2d, 0x93, 0x86, 0xf4,
0x86, 0xda, 0xb6, 0x15, 0xf5, 0x2a, 0xbb, 0xe5, 0x14, 0x23, 0x9b, 0xe8, 0x2d, 0x78, 0x7c, 0xcc,
0xcd, 0x38, 0xaa, 0x13, 0x51, 0xbd, 0xcd, 0x63, 0x7e, 0x6f, 0x63, 0xab, 0x76, 0x37, 0x2b, 0xf9,
0x88, 0x17, 0x60, 0x1b, 0x4a, 0xfe, 0x9c, 0x2b, 0xf0, 0xf8, 0x2f, 0x43, 0xd1, 0xc0, 0x96, 0xa2,
0x0e, 0x64, 0x5f, 0x81, 0xb8, 0xc0, 0x88, 0x1c, 0x8c, 0xdd, 0x87, 0xc7, 0x02, 0x73, 0x2f, 0xf4,
0x12, 0xe4, 0xdd, 0xb4, 0x8d, 0xed, 0xea, 0x14, 0x58, 0xcd, 0xe5, 0x15, 0x7f, 0x1f, 0x77, 0x55,
0xfa, 0x81, 0xba, 0x3a, 0x64, 0x0c, 0x6c, 0x0e, 0x7b, 0x0c, 0x3a, 0x2b, 0xad, 0x3f, 0x1f, 0x2d,
0x6b, 0x23, 0xd4, 0x61, 0xcf, 0x92, 0xb8, 0xb0, 0xf8, 0x00, 0x32, 0x8c, 0x82, 0x0a, 0x90, 0x3d,
0xdc, 0xbd, 0xb7, 0xbb, 0xf7, 0xe6, 0xae, 0x10, 0x43, 0x00, 0x99, 0x8d, 0x5a, 0xad, 0xbe, 0xdf,
0x14, 0xe2, 0x28, 0x0f, 0xe9, 0x8d, 0xcd, 0x3d, 0xa9, 0x29, 0x24, 0x08, 0x59, 0xaa, 0xdf, 0xad,
0xd7, 0x9a, 0x42, 0x12, 0x2d, 0x42, 0x91, 0xfd, 0x96, 0xef, 0xec, 0x49, 0xf7, 0x37, 0x9a, 0x42,
0xca, 0x43, 0x3a, 0xa8, 0xef, 0x6e, 0xd5, 0x25, 0x21, 0x2d, 0xfe, 0x0f, 0x9c, 0x0f, 0xcd, 0xf3,
0x5c, 0x14, 0x2e, 0xee, 0x41, 0xe1, 0xc4, 0x9f, 0x27, 0x48, 0x91, 0x1f, 0x96, 0xbc, 0xa1, 0xbb,
0x63, 0x0b, 0x5f, 0x9f, 0x23, 0xf3, 0x1b, 0x5b, 0x3d, 0xa9, 0xeb, 0x0d, 0x7c, 0x8c, 0xad, 0x76,
0x97, 0x25, 0x93, 0x2c, 0x7a, 0x15, 0xa5, 0x22, 0xa7, 0x52, 0x21, 0x93, 0xb1, 0xbd, 0x83, 0xdb,
0x96, 0xcc, 0x7c, 0x14, 0x33, 0xba, 0x3c, 0x61, 0x23, 0xd4, 0x03, 0x46, 0x14, 0xdf, 0x9e, 0x6b,
0x2f, 0xf3, 0x90, 0x96, 0xea, 0x4d, 0xe9, 0x2d, 0x21, 0x89, 0x10, 0x94, 0xe8, 0x4f, 0xf9, 0x60,
0x77, 0x63, 0xff, 0xa0, 0xb1, 0x47, 0xf6, 0x72, 0x09, 0xca, 0xf6, 0x5e, 0xda, 0xc4, 0xb4, 0xf8,
0xa7, 0x04, 0x3c, 0x1e, 0x92, 0x7a, 0xa2, 0x5b, 0x00, 0xd6, 0x48, 0x36, 0x70, 0x5b, 0x33, 0x3a,
0xe1, 0x46, 0xd6, 0x1c, 0x49, 0x94, 0x43, 0xca, 0x5b, 0xfc, 0x97, 0x39, 0x05, 0xbc, 0x45, 0xaf,
0x70, 0xa5, 0x64, 0x55, 0xf6, 0x55, 0xbb, 0x18, 0x80, 0x51, 0xe2, 0x36, 0x51, 0x4c, 0xf7, 0x96,
0x2a, 0xa6, 0xfc, 0xe8, 0x7e, 0x90, 0x53, 0x89, 0xd8, 0x3a, 0x99, 0xcf, 0x9d, 0xa4, 0x1f, 0xcd,
0x9d, 0x88, 0xbf, 0x4a, 0x7a, 0x37, 0xd6, 0x9f, 0x69, 0xef, 0x41, 0xc6, 0xb4, 0x14, 0x6b, 0x68,
0x72, 0x83, 0x7b, 0x29, 0x6a, 0xda, 0xbe, 0x66, 0xff, 0x38, 0xa0, 0xe2, 0x12, 0x57, 0xf3, 0xdd,
0x7e, 0x9b, 0xe2, 0x4d, 0x28, 0xf9, 0x37, 0x27, 0xfc, 0xca, 0xb8, 0x3e, 0x27, 0x21, 0xde, 0x76,
0x93, 0x21, 0x0f, 0x82, 0x38, 0x89, 0xce, 0xc5, 0x83, 0xd0, 0xb9, 0x5f, 0xc7, 0xe1, 0x89, 0x29,
0xc5, 0x0b, 0x7a, 0x63, 0xec, 0x9c, 0x5f, 0x9e, 0xa7, 0xf4, 0x59, 0x63, 0x34, 0xff, 0x49, 0x8b,
0x37, 0x60, 0xc1, 0x4b, 0x8f, 0xb6, 0xc8, 0x9f, 0x24, 0x5d, 0x9f, 0xef, 0x87, 0x11, 0xbf, 0xb6,
0xac, 0x6f, 0xcc, 0xce, 0x12, 0x73, 0xda, 0x59, 0x60, 0xb2, 0x90, 0xfc, 0xe6, 0x92, 0x85, 0xd4,
0x23, 0x26, 0x0b, 0xde, 0x0b, 0x97, 0xf6, 0x5f, 0xb8, 0x89, 0xb8, 0x9e, 0x09, 0x88, 0xeb, 0x6f,
0x01, 0x78, 0xba, 0x8b, 0xcb, 0x90, 0x36, 0xb4, 0xe1, 0xa0, 0x43, 0xcd, 0x24, 0x2d, 0xb1, 0x01,
0xba, 0x09, 0x69, 0x62, 0x6e, 0xf6, 0x66, 0x4e, 0x7a, 0x5e, 0x62, 0x2e, 0x1e, 0x00, 0x97, 0x71,
0x8b, 0x2a, 0xa0, 0xc9, 0x0e, 0x4f, 0xc8, 0x2b, 0x5e, 0xf5, 0xbf, 0xe2, 0xc9, 0xd0, 0x5e, 0x51,
0xf0, 0xab, 0xde, 0x87, 0x34, 0x35, 0x0f, 0x92, 0xdf, 0xd0, 0x2e, 0x25, 0xaf, 0x5e, 0xc9, 0x6f,
0xf4, 0x43, 0x00, 0xc5, 0xb2, 0x0c, 0xb5, 0x35, 0x74, 0x5f, 0xb0, 0x1a, 0x6c, 0x5e, 0x1b, 0x36,
0xdf, 0xe6, 0x05, 0x6e, 0x67, 0xcb, 0xae, 0xa8, 0xc7, 0xd6, 0x3c, 0x0a, 0xc5, 0x5d, 0x28, 0xf9,
0x65, 0xed, 0x7a, 0x8b, 0xcd, 0xc1, 0x5f, 0x6f, 0xb1, 0xf2, 0x99, 0xd7, 0x5b, 0x4e, 0xb5, 0x96,
0x64, 0x0d, 0x69, 0x3a, 0x10, 0xff, 0x15, 0x87, 0x05, 0xaf, 0x75, 0x7e, 0xcd, 0x69, 0xfc, 0x8c,
0xc2, 0xe6, 0xfc, 0x44, 0x16, 0x9f, 0x3d, 0x51, 0xcc, 0xc3, 0x6f, 0x33, 0x89, 0xff, 0x30, 0x0e,
0x39, 0x67, 0xf1, 0x21, 0xdd, 0x60, 0x77, 0xef, 0x12, 0xde, 0xde, 0x27, 0x6b, 0x2f, 0x27, 0x9d,
0xa6, 0xf5, 0x6d, 0x27, 0xa1, 0x0a, 0x43, 0x98, 0xbd, 0x3b, 0x6d, 0xf7, 0xed, 0x79, 0xfe, 0xf8,
0x33, 0x3e, 0x0f, 0x92, 0x49, 0xa0, 0xff, 0x83, 0x8c, 0xd2, 0x76, 0x70, 0xf5, 0x52, 0x00, 0xd0,
0x6a, 0xb3, 0xae, 0x35, 0x47, 0x1b, 0x94, 0x53, 0xe2, 0x12, 0x7c, 0x56, 0x09, 0xa7, 0xe9, 0xfd,
0x1a, 0xd1, 0xcb, 0x78, 0xfc, 0x6e, 0xb3, 0x04, 0x70, 0xb8, 0x7b, 0x7f, 0x6f, 0x6b, 0xfb, 0xce,
0x76, 0x7d, 0x8b, 0xa7, 0x54, 0x5b, 0x5b, 0xf5, 0x2d, 0x21, 0x41, 0xf8, 0xa4, 0xfa, 0xfd, 0xbd,
0xa3, 0xfa, 0x96, 0x90, 0x14, 0x6f, 0x43, 0xde, 0x71, 0x3d, 0xa8, 0x02, 0x59, 0xbb, 0x47, 0x10,
0xe7, 0x0e, 0x80, 0xb7, 0x7c, 0x96, 0x21, 0xad, 0x6b, 0xef, 0xf1, 0x96, 0x6f, 0x52, 0x62, 0x03,
0xb1, 0x03, 0xe5, 0x31, 0xbf, 0x85, 0x6e, 0x43, 0x56, 0x1f, 0xb6, 0x64, 0xdb, 0x68, 0xc7, 0x3a,
0x2a, 0x76, 0xd9, 0x3f, 0x6c, 0xf5, 0xd4, 0xf6, 0x3d, 0x7c, 0x66, 0x6f, 0x93, 0x3e, 0x6c, 0xdd,
0x63, 0xb6, 0xcd, 0xde, 0x92, 0xf0, 0xbe, 0xe5, 0x14, 0x72, 0xf6, 0x55, 0x45, 0xff, 0x0f, 0x79,
0xc7, 0x25, 0x3a, 0xdf, 0xc1, 0x84, 0xfa, 0x52, 0xae, 0xde, 0x15, 0x41, 0xd7, 0x60, 0xd1, 0x54,
0x4f, 0x06, 0x76, 0x3f, 0x89, 0xc1, 0x6c, 0x09, 0x7a, 0x67, 0xca, 0xec, 0xc1, 0x8e, 0x8d, 0x0d,
0x91, 0x48, 0x28, 0x8c, 0xfb, 0x8a, 0x6f, 0x73, 0x02, 0x01, 0x11, 0x3b, 0x19, 0x14, 0xb1, 0x3f,
0x48, 0x40, 0xc1, 0xd3, 0xa5, 0x42, 0xff, 0xeb, 0x71, 0x5c, 0xa5, 0x80, 0x50, 0xe3, 0xe1, 0x75,
0x3f, 0xb1, 0xf0, 0x2f, 0x2c, 0x31, 0xff, 0xc2, 0xc2, 0x9a, 0x82, 0x76, 0xb3, 0x2b, 0x35, 0x77,
0xb3, 0xeb, 0x39, 0x40, 0x96, 0x66, 0x29, 0x3d, 0xf9, 0x54, 0xb3, 0xd4, 0xc1, 0x89, 0xcc, 0x4c,
0x83, 0xb9, 0x19, 0x81, 0x3e, 0x39, 0xa2, 0x0f, 0xf6, 0xa9, 0x95, 0xfc, 0x28, 0x0e, 0x39, 0xa7,
0xec, 0x9b, 0xf7, 0x8b, 0x89, 0x73, 0x90, 0xe1, 0x95, 0x0d, 0xfb, 0x64, 0x82, 0x8f, 0x02, 0xbb,
0x7a, 0x55, 0xc8, 0xf5, 0xb1, 0xa5, 0x50, 0x9f, 0xc9, 0xc2, 0xa4, 0x33, 0xbe, 0xf6, 0x32, 0x14,
0x3c, 0x1f, 0xaf, 0x10, 0x37, 0xba, 0x5b, 0x7f, 0x53, 0x88, 0x55, 0xb3, 0x1f, 0x7d, 0x72, 0x29,
0xb9, 0x8b, 0xdf, 0x23, 0x37, 0x4c, 0xaa, 0xd7, 0x1a, 0xf5, 0xda, 0x3d, 0x21, 0x5e, 0x2d, 0x7c,
0xf4, 0xc9, 0xa5, 0xac, 0x84, 0x69, 0x13, 0xe6, 0xda, 0x3d, 0x28, 0x8f, 0x1d, 0x8c, 0xff, 0x42,
0x23, 0x28, 0x6d, 0x1d, 0xee, 0xef, 0x6c, 0xd7, 0x36, 0x9a, 0x75, 0xf9, 0x68, 0xaf, 0x59, 0x17,
0xe2, 0xe8, 0x71, 0x58, 0xda, 0xd9, 0x7e, 0xbd, 0xd1, 0x94, 0x6b, 0x3b, 0xdb, 0xf5, 0xdd, 0xa6,
0xbc, 0xd1, 0x6c, 0x6e, 0xd4, 0xee, 0x09, 0x89, 0xf5, 0xdf, 0x14, 0xa0, 0xbc, 0xb1, 0x59, 0xdb,
0x26, 0xb5, 0x9d, 0xda, 0x56, 0xa8, 0x7b, 0xa8, 0x41, 0x8a, 0x22, 0xba, 0x53, 0x3f, 0x47, 0xae,
0x4e, 0xef, 0xd2, 0xa1, 0x3b, 0x90, 0xa6, 0x60, 0x2f, 0x9a, 0xfe, 0x7d, 0x72, 0x75, 0x46, 0xdb,
0x8e, 0x4c, 0x86, 0x5e, 0xa7, 0xa9, 0x1f, 0x2c, 0x57, 0xa7, 0x77, 0xf1, 0xd0, 0x0e, 0x64, 0x6d,
0x2c, 0x6e, 0xd6, 0xa7, 0xbf, 0xd5, 0x99, 0xed, 0x30, 0xb2, 0x34, 0x86, 0x99, 0x4e, 0xff, 0x96,
0xb9, 0x3a, 0xa3, 0xbf, 0x87, 0xb6, 0x21, 0xc3, 0x11, 0x92, 0x19, 0x9f, 0xf1, 0x56, 0x67, 0xb5,
0xb5, 0x90, 0x04, 0x79, 0x17, 0x8d, 0x9e, 0xfd, 0x85, 0x76, 0x35, 0x42, 0xeb, 0x12, 0x3d, 0x80,
0xa2, 0x1f, 0x75, 0x89, 0xf6, 0xa9, 0x70, 0x35, 0x62, 0x03, 0x8d, 0xe8, 0xf7, 0x43, 0x30, 0xd1,
0x3e, 0x1d, 0xae, 0x46, 0xec, 0xa7, 0xa1, 0x77, 0x60, 0x71, 0x12, 0x22, 0x89, 0xfe, 0x25, 0x71,
0x75, 0x8e, 0x0e, 0x1b, 0xea, 0x03, 0x0a, 0x80, 0x56, 0xe6, 0xf8, 0xb0, 0xb8, 0x3a, 0x4f, 0xc3,
0x0d, 0x75, 0xa0, 0x3c, 0x0e, 0x57, 0x44, 0xfd, 0xd0, 0xb8, 0x1a, 0xb9, 0xf9, 0xc6, 0xde, 0xe2,
0xaf, 0xdd, 0xa3, 0x7e, 0x78, 0x5c, 0x8d, 0xdc, 0x8b, 0x43, 0x87, 0x00, 0x9e, 0xda, 0x33, 0xc2,
0x87, 0xc8, 0xd5, 0x28, 0x5d, 0x39, 0xa4, 0xc3, 0x52, 0x50, 0x51, 0x3a, 0xcf, 0x77, 0xc9, 0xd5,
0xb9, 0x9a, 0x75, 0xc4, 0x9e, 0xfd, 0xe5, 0x65, 0xb4, 0xef, 0x94, 0xab, 0x11, 0xbb, 0x76, 0x9b,
0xf5, 0x4f, 0xbf, 0x58, 0x89, 0x7f, 0xf6, 0xc5, 0x4a, 0xfc, 0x6f, 0x5f, 0xac, 0xc4, 0x3f, 0xfe,
0x72, 0x25, 0xf6, 0xd9, 0x97, 0x2b, 0xb1, 0xbf, 0x7c, 0xb9, 0x12, 0xfb, 0xde, 0xb3, 0x27, 0xaa,
0xd5, 0x1d, 0xb6, 0xd6, 0xda, 0x5a, 0xff, 0xba, 0xf7, 0x2f, 0x2b, 0x41, 0x7f, 0xa3, 0x69, 0x65,
0x68, 0x40, 0xbd, 0xf1, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xce, 0x0a, 0x41, 0x94, 0x66, 0x33,
0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -7224,44 +7211,11 @@ func (m *ResponseCheckTx) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i--
dAtA[i] = 0x42
}
if len(m.Events) > 0 {
for iNdEx := len(m.Events) - 1; iNdEx >= 0; iNdEx-- {
{
size, err := m.Events[iNdEx].MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintTypes(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x3a
}
}
if m.GasUsed != 0 {
i = encodeVarintTypes(dAtA, i, uint64(m.GasUsed))
i--
dAtA[i] = 0x30
}
if m.GasWanted != 0 {
i = encodeVarintTypes(dAtA, i, uint64(m.GasWanted))
i--
dAtA[i] = 0x28
}
if len(m.Info) > 0 {
i -= len(m.Info)
copy(dAtA[i:], m.Info)
i = encodeVarintTypes(dAtA, i, uint64(len(m.Info)))
i--
dAtA[i] = 0x22
}
if len(m.Log) > 0 {
i -= len(m.Log)
copy(dAtA[i:], m.Log)
i = encodeVarintTypes(dAtA, i, uint64(len(m.Log)))
i--
dAtA[i] = 0x1a
}
if len(m.Data) > 0 {
i -= len(m.Data)
copy(dAtA[i:], m.Data)
@@ -7842,6 +7796,18 @@ func (m *ResponseFinalizeBlock) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if m.RetainHeight != 0 {
i = encodeVarintTypes(dAtA, i, uint64(m.RetainHeight))
i--
dAtA[i] = 0x30
}
if len(m.AppHash) > 0 {
i -= len(m.AppHash)
copy(dAtA[i:], m.AppHash)
i = encodeVarintTypes(dAtA, i, uint64(len(m.AppHash)))
i--
dAtA[i] = 0x2a
}
if m.ConsensusParamUpdates != nil {
{
size, err := m.ConsensusParamUpdates.MarshalToSizedBuffer(dAtA[:i])
@@ -9567,26 +9533,9 @@ func (m *ResponseCheckTx) Size() (n int) {
if l > 0 {
n += 1 + l + sovTypes(uint64(l))
}
l = len(m.Log)
if l > 0 {
n += 1 + l + sovTypes(uint64(l))
}
l = len(m.Info)
if l > 0 {
n += 1 + l + sovTypes(uint64(l))
}
if m.GasWanted != 0 {
n += 1 + sovTypes(uint64(m.GasWanted))
}
if m.GasUsed != 0 {
n += 1 + sovTypes(uint64(m.GasUsed))
}
if len(m.Events) > 0 {
for _, e := range m.Events {
l = e.Size()
n += 1 + l + sovTypes(uint64(l))
}
}
l = len(m.Codespace)
if l > 0 {
n += 1 + l + sovTypes(uint64(l))
@@ -9871,6 +9820,13 @@ func (m *ResponseFinalizeBlock) Size() (n int) {
l = m.ConsensusParamUpdates.Size()
n += 1 + l + sovTypes(uint64(l))
}
l = len(m.AppHash)
if l > 0 {
n += 1 + l + sovTypes(uint64(l))
}
if m.RetainHeight != 0 {
n += 1 + sovTypes(uint64(m.RetainHeight))
}
return n
}
@@ -15381,70 +15337,6 @@ func (m *ResponseCheckTx) Unmarshal(dAtA []byte) error {
m.Data = []byte{}
}
iNdEx = postIndex
case 3:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Log", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
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 ErrInvalidLengthTypes
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthTypes
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Log = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 4:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Info", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
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 ErrInvalidLengthTypes
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthTypes
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Info = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 5:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field GasWanted", wireType)
@@ -15464,59 +15356,6 @@ func (m *ResponseCheckTx) Unmarshal(dAtA []byte) error {
break
}
}
case 6:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field GasUsed", wireType)
}
m.GasUsed = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.GasUsed |= int64(b&0x7F) << shift
if b < 0x80 {
break
}
}
case 7:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Events", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthTypes
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthTypes
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Events = append(m.Events, Event{})
if err := m.Events[len(m.Events)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 8:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Codespace", wireType)
@@ -17344,6 +17183,59 @@ func (m *ResponseFinalizeBlock) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 5:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field AppHash", wireType)
}
var byteLen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
byteLen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if byteLen < 0 {
return ErrInvalidLengthTypes
}
postIndex := iNdEx + byteLen
if postIndex < 0 {
return ErrInvalidLengthTypes
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.AppHash = append(m.AppHash[:0], dAtA[iNdEx:postIndex]...)
if m.AppHash == nil {
m.AppHash = []byte{}
}
iNdEx = postIndex
case 6:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field RetainHeight", wireType)
}
m.RetainHeight = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.RetainHeight |= int64(b&0x7F) << shift
if b < 0x80 {
break
}
}
default:
iNdEx = preIndex
skippy, err := skipTypes(dAtA[iNdEx:])
-1
View File
@@ -295,7 +295,6 @@ func (app *CounterApplication) CheckTx(_ context.Context, req *abci.RequestCheck
if txValue != uint64(app.mempoolTxCount) {
return &abci.ResponseCheckTx{
Code: code.CodeTypeBadNonce,
Log: fmt.Sprintf("Invalid nonce. Expected %v, got %v", app.mempoolTxCount, txValue),
}, nil
}
app.mempoolTxCount++
-1
View File
@@ -56,7 +56,6 @@ func (env *Environment) BroadcastTxSync(ctx context.Context, req *coretypes.Requ
return &coretypes.ResultBroadcastTx{
Code: r.Code,
Data: r.Data,
Log: r.Log,
Codespace: r.Codespace,
MempoolError: r.MempoolError,
Hash: req.Tx.Hash(),
+6 -6
View File
@@ -166,7 +166,7 @@ message RequestFinalizeBlock {
repeated bytes txs = 1;
CommitInfo decided_last_commit = 2 [(gogoproto.nullable) = false];
repeated Misbehavior byzantine_validators = 3 [(gogoproto.nullable) = false];
// hash is the merkle root hash of the fields of the decided block.
// hash is the merkle root hash of the fields of the proposed block.
bytes hash = 4;
int64 height = 5;
google.protobuf.Timestamp time = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
@@ -251,11 +251,7 @@ message ResponseBeginBlock {
message ResponseCheckTx {
uint32 code = 1;
bytes data = 2;
string log = 3; // nondeterministic
string info = 4; // nondeterministic
int64 gas_wanted = 5;
int64 gas_used = 6;
repeated Event events = 7 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"];
string codespace = 8;
string sender = 9;
int64 priority = 10;
@@ -264,6 +260,8 @@ message ResponseCheckTx {
// ABCI applications creating a ResponseCheckTX should not set mempool_error.
string mempool_error = 11;
reserved 3, 4, 6, 7; // see https://github.com/tendermint/tendermint/issues/8543
}
message ResponseDeliverTx {
@@ -368,6 +366,8 @@ message ResponseFinalizeBlock {
repeated ExecTxResult tx_results = 2;
repeated ValidatorUpdate validator_updates = 3 [(gogoproto.nullable) = false];
tendermint.types.ConsensusParams consensus_param_updates = 4;
bytes app_hash = 5;
int64 retain_height = 6;
}
//----------------------------------------
@@ -390,7 +390,7 @@ message ExtendedCommitInfo {
}
// Event allows application developers to attach additional information to
// ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx.
// ResponseBeginBlock, ResponseEndBlock and ResponseDeliverTx.
// Later, transactions may be queried using these events.
message Event {
string type = 1;
-2
View File
@@ -88,7 +88,6 @@ func (a ABCIApp) BroadcastTxAsync(ctx context.Context, tx types.Tx) (*coretypes.
return &coretypes.ResultBroadcastTx{
Code: c.Code,
Data: c.Data,
Log: c.Log,
Codespace: c.Codespace,
Hash: tx.Hash(),
}, nil
@@ -107,7 +106,6 @@ func (a ABCIApp) BroadcastTxSync(ctx context.Context, tx types.Tx) (*coretypes.R
return &coretypes.ResultBroadcastTx{
Code: c.Code,
Data: c.Data,
Log: c.Log,
Codespace: c.Codespace,
Hash: tx.Hash(),
}, nil
-1
View File
@@ -233,7 +233,6 @@ type ResultConsensusState struct {
type ResultBroadcastTx struct {
Code uint32 `json:"code"`
Data bytes.HexBytes `json:"data"`
Log string `json:"log"`
Codespace string `json:"codespace"`
MempoolError string `json:"mempool_error"`
Hash bytes.HexBytes `json:"hash"`
@@ -436,9 +436,6 @@ might have a different *CheckTxState* values when they receive it and check thei
via `CheckTx`.
Tendermint ignores this value in `ResponseCheckTx`.
`Events` include any events for the execution, though since the transaction has not
been committed yet, they are effectively ignored by Tendermint.
From v0.35.x on, there is a `Priority` field in `ResponseCheckTx` that can be
used to explicitly prioritize transactions in the mempool for inclusion in a block
proposal.
-4
View File
@@ -136,11 +136,7 @@ title: Methods
|------------|-------------------------------------------------------------|-----------------------------------------------------------------------|--------------|
| code | uint32 | Response code. | 1 |
| data | bytes | Result bytes, if any. | 2 |
| log | string | The output of the application's logger. **May be non-deterministic.** | 3 |
| info | string | Additional information. **May be non-deterministic.** | 4 |
| gas_wanted | int64 | Amount of gas requested for transaction. | 5 |
| gas_used | int64 | Amount of gas consumed by transaction. | 6 |
| events | repeated [Event](abci++_basic_concepts_002_draft.md#events) | Type & Key-Value events for indexing transactions (eg. by account). | 7 |
| codespace | string | Namespace for the `code`. | 8 |
| sender | string | The transaction's sender (e.g. the signer) | 9 |
| priority | int64 | The transaction's priority (for mempool ordering) | 10 |
+1 -4
View File
@@ -13,7 +13,7 @@ Here we cover the following components of ABCI applications:
and the differences between `CheckTx` and `DeliverTx`.
- [Transaction Results](#transaction-results) - rules around transaction
results and validity
- [Validator Set Updates](#validator-updates) - how validator sets are
- [Validator Set Updates](#updating-the-validator-set) - how validator sets are
changed during `InitChain` and `EndBlock`
- [Query](#query) - standards for using the `Query` method and proofs about the
application state
@@ -204,9 +204,6 @@ not broadcasted to other peers and not included in a proposal block.
`Data` contains the result of the CheckTx transaction execution, if any. It is
semantically meaningless to Tendermint.
`Events` include any events for the execution, though since the transaction has not
been committed yet, they are effectively ignored by Tendermint.
### DeliverTx
DeliverTx is the workhorse of the blockchain. Tendermint sends the
-1
View File
@@ -162,7 +162,6 @@ func (app *Application) CheckTx(_ context.Context, req *abci.RequestCheckTx) (*a
if err != nil {
return &abci.ResponseCheckTx{
Code: code.CodeTypeEncodingError,
Log: err.Error(),
}, nil
}
return &abci.ResponseCheckTx{Code: code.CodeTypeOK, GasWanted: 1}, nil