mirror of
https://github.com/fluencelabs/tendermint
synced 2025-05-15 08:01:19 +00:00
commit
026ff5e89f
@ -17,9 +17,10 @@ BREAKING CHANGES:
|
|||||||
- [abci-cli] codes are printed as their number instead of a message, except for `code == 0`, which is still printed as `OK`
|
- [abci-cli] codes are printed as their number instead of a message, except for `code == 0`, which is still printed as `OK`
|
||||||
|
|
||||||
FEATURES:
|
FEATURES:
|
||||||
- [types] added Tags field to ResponseDeliverTx
|
- [types] ResponseDeliverTx: added `tags` field
|
||||||
- [types] added Gas and Fee fields to ResponseCheckTx
|
- [types] ResponseCheckTx: added `gas` and `fee` fields
|
||||||
- [dummy] DeliverTx returns tags
|
- [types] RequestBeginBlock: added `absent_validators` and `byzantine_validators` fields
|
||||||
|
- [dummy] DeliverTx returns an owner tag and a key tag
|
||||||
- [abci-cli] added `log_level` flag to control the logger
|
- [abci-cli] added `log_level` flag to control the logger
|
||||||
|
|
||||||
## 0.7.1 (November 14, 2017)
|
## 0.7.1 (November 14, 2017)
|
||||||
|
6
Makefile
6
Makefile
@ -26,7 +26,7 @@ protoc:
|
|||||||
## On "error while loading shared libraries: libprotobuf.so.14: cannot open shared object file: No such file or directory"
|
## On "error while loading shared libraries: libprotobuf.so.14: cannot open shared object file: No such file or directory"
|
||||||
## ldconfig (may require sudo)
|
## ldconfig (may require sudo)
|
||||||
## https://stackoverflow.com/a/25518702
|
## https://stackoverflow.com/a/25518702
|
||||||
protoc $(INCLUDE) --gogo_out=plugins=grpc:. types/*.proto
|
protoc $(INCLUDE) --gogo_out=plugins=grpc:. --lint_out=. types/*.proto
|
||||||
|
|
||||||
install:
|
install:
|
||||||
@ go install ./cmd/...
|
@ go install ./cmd/...
|
||||||
@ -38,14 +38,14 @@ dist:
|
|||||||
@ bash scripts/dist.sh
|
@ bash scripts/dist.sh
|
||||||
@ bash scripts/publish.sh
|
@ bash scripts/publish.sh
|
||||||
|
|
||||||
test:
|
test:
|
||||||
@ find . -path ./vendor -prune -o -name "*.sock" -exec rm {} \;
|
@ find . -path ./vendor -prune -o -name "*.sock" -exec rm {} \;
|
||||||
@ echo "==> Running linter"
|
@ echo "==> Running linter"
|
||||||
@ make metalinter_test
|
@ make metalinter_test
|
||||||
@ echo "==> Running go test"
|
@ echo "==> Running go test"
|
||||||
@ go test $(PACKAGES)
|
@ go test $(PACKAGES)
|
||||||
|
|
||||||
test_race:
|
test_race:
|
||||||
@ find . -path ./vendor -prune -o -name "*.sock" -exec rm {} \;
|
@ find . -path ./vendor -prune -o -name "*.sock" -exec rm {} \;
|
||||||
@ echo "==> Running go test --race"
|
@ echo "==> Running go test --race"
|
||||||
@go test -v -race $(PACKAGES)
|
@go test -v -race $(PACKAGES)
|
||||||
|
@ -168,8 +168,10 @@ Here, we describe the requests and responses as function arguments and return va
|
|||||||
* __Arguments__:
|
* __Arguments__:
|
||||||
* `Hash ([]byte)`: The block's hash. This can be derived from the block header.
|
* `Hash ([]byte)`: The block's hash. This can be derived from the block header.
|
||||||
* `Header (struct{})`: The block header
|
* `Header (struct{})`: The block header
|
||||||
|
* `AbsentValidators ([]int32)`: List of indices of validators not included in the LastCommit
|
||||||
|
* `ByzantineValidators ([]Evidence)`: List of evidence of validators that acted maliciously
|
||||||
* __Usage__:<br/>
|
* __Usage__:<br/>
|
||||||
Signals the beginning of a new block. Called prior to any DeliverTxs. The header is expected to at least contain the Height.
|
Signals the beginning of a new block. Called prior to any DeliverTxs. The header is expected to at least contain the Height. The `AbsentValidators` and `ByzantineValidators` can be used to determine rewards and punishments for the validators.
|
||||||
|
|
||||||
#### EndBlock
|
#### EndBlock
|
||||||
* __Arguments__:
|
* __Arguments__:
|
||||||
|
@ -95,7 +95,7 @@ func TestPersistentDummyInfo(t *testing.T) {
|
|||||||
header := &types.Header{
|
header := &types.Header{
|
||||||
Height: int64(height),
|
Height: int64(height),
|
||||||
}
|
}
|
||||||
dummy.BeginBlock(types.RequestBeginBlock{hash, header})
|
dummy.BeginBlock(types.RequestBeginBlock{hash, header, nil, nil})
|
||||||
dummy.EndBlock(types.RequestEndBlock{header.Height})
|
dummy.EndBlock(types.RequestEndBlock{header.Height})
|
||||||
dummy.Commit()
|
dummy.Commit()
|
||||||
|
|
||||||
@ -179,7 +179,7 @@ func makeApplyBlock(t *testing.T, dummy types.Application, heightInt int, diff [
|
|||||||
Height: height,
|
Height: height,
|
||||||
}
|
}
|
||||||
|
|
||||||
dummy.BeginBlock(types.RequestBeginBlock{hash, header})
|
dummy.BeginBlock(types.RequestBeginBlock{hash, header, nil, nil})
|
||||||
for _, tx := range txs {
|
for _, tx := range txs {
|
||||||
if r := dummy.DeliverTx(tx); r.IsErr() {
|
if r := dummy.DeliverTx(tx); r.IsErr() {
|
||||||
t.Fatal(r)
|
t.Fatal(r)
|
||||||
|
@ -25,7 +25,55 @@ type Application interface {
|
|||||||
Commit() ResponseCommit // Commit the state and return the application Merkle root hash
|
Commit() ResponseCommit // Commit the state and return the application Merkle root hash
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------
|
//-------------------------------------------------------
|
||||||
|
// BaseApplication is a base form of Application
|
||||||
|
|
||||||
|
var _ Application = (*BaseApplication)(nil)
|
||||||
|
|
||||||
|
type BaseApplication struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewBaseApplication() *BaseApplication {
|
||||||
|
return &BaseApplication{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (BaseApplication) Info(req RequestInfo) ResponseInfo {
|
||||||
|
return ResponseInfo{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (BaseApplication) SetOption(req RequestSetOption) ResponseSetOption {
|
||||||
|
return ResponseSetOption{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (BaseApplication) DeliverTx(tx []byte) ResponseDeliverTx {
|
||||||
|
return ResponseDeliverTx{Code: CodeTypeOK}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (BaseApplication) CheckTx(tx []byte) ResponseCheckTx {
|
||||||
|
return ResponseCheckTx{Code: CodeTypeOK}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (BaseApplication) Commit() ResponseCommit {
|
||||||
|
return ResponseCommit{Code: CodeTypeOK}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (BaseApplication) Query(req RequestQuery) ResponseQuery {
|
||||||
|
return ResponseQuery{Code: CodeTypeOK}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (BaseApplication) InitChain(req RequestInitChain) ResponseInitChain {
|
||||||
|
return ResponseInitChain{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (BaseApplication) BeginBlock(req RequestBeginBlock) ResponseBeginBlock {
|
||||||
|
return ResponseBeginBlock{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (BaseApplication) EndBlock(req RequestEndBlock) ResponseEndBlock {
|
||||||
|
return ResponseEndBlock{}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------------
|
||||||
|
|
||||||
// GRPCApplication is a GRPC wrapper for Application
|
// GRPCApplication is a GRPC wrapper for Application
|
||||||
type GRPCApplication struct {
|
type GRPCApplication struct {
|
||||||
|
@ -1,44 +0,0 @@
|
|||||||
package types
|
|
||||||
|
|
||||||
type BaseApplication struct {
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewBaseApplication() *BaseApplication {
|
|
||||||
return &BaseApplication{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (BaseApplication) Info(req RequestInfo) ResponseInfo {
|
|
||||||
return ResponseInfo{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (BaseApplication) SetOption(req RequestSetOption) ResponseSetOption {
|
|
||||||
return ResponseSetOption{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (BaseApplication) DeliverTx(tx []byte) ResponseDeliverTx {
|
|
||||||
return ResponseDeliverTx{Code: CodeTypeOK}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (BaseApplication) CheckTx(tx []byte) ResponseCheckTx {
|
|
||||||
return ResponseCheckTx{Code: CodeTypeOK}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (BaseApplication) Commit() ResponseCommit {
|
|
||||||
return ResponseCommit{Code: CodeTypeOK}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (BaseApplication) Query(req RequestQuery) ResponseQuery {
|
|
||||||
return ResponseQuery{Code: CodeTypeOK}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (BaseApplication) InitChain(req RequestInitChain) ResponseInitChain {
|
|
||||||
return ResponseInitChain{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (BaseApplication) BeginBlock(req RequestBeginBlock) ResponseBeginBlock {
|
|
||||||
return ResponseBeginBlock{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (BaseApplication) EndBlock(req RequestEndBlock) ResponseEndBlock {
|
|
||||||
return ResponseEndBlock{}
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
package types
|
|
||||||
|
|
||||||
// KVPairInt is a helper method to build KV pair with an integer value.
|
|
||||||
func KVPairInt(key string, val int64) *KVPair {
|
|
||||||
return &KVPair{
|
|
||||||
Key: key,
|
|
||||||
ValueInt: val,
|
|
||||||
ValueType: KVPair_INT,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// KVPairString is a helper method to build KV pair with a string value.
|
|
||||||
func KVPairString(key, val string) *KVPair {
|
|
||||||
return &KVPair{
|
|
||||||
Key: key,
|
|
||||||
ValueString: val,
|
|
||||||
ValueType: KVPair_STRING,
|
|
||||||
}
|
|
||||||
}
|
|
@ -7,6 +7,31 @@ import (
|
|||||||
wire "github.com/tendermint/go-wire"
|
wire "github.com/tendermint/go-wire"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// WriteMessage writes a length-delimited protobuf message.
|
||||||
|
func WriteMessage(msg proto.Message, w io.Writer) error {
|
||||||
|
bz, err := proto.Marshal(msg)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
var n int
|
||||||
|
wire.WriteByteSlice(bz, w, &n, &err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReadMessage reads a length delimited protobuf message.
|
||||||
|
func ReadMessage(r io.Reader, msg proto.Message) error {
|
||||||
|
var n int
|
||||||
|
var err error
|
||||||
|
bz := wire.ReadByteSlice(r, 0, &n, &err) //XXX: no max
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = proto.Unmarshal(bz, msg)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------
|
||||||
|
|
||||||
func ToRequestEcho(message string) *Request {
|
func ToRequestEcho(message string) *Request {
|
||||||
return &Request{
|
return &Request{
|
||||||
Value: &Request_Echo{&RequestEcho{message}},
|
Value: &Request_Echo{&RequestEcho{message}},
|
||||||
@ -146,28 +171,3 @@ func ToResponseEndBlock(res ResponseEndBlock) *Response {
|
|||||||
Value: &Response_EndBlock{&res},
|
Value: &Response_EndBlock{&res},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------
|
|
||||||
|
|
||||||
// Write proto message, length delimited
|
|
||||||
func WriteMessage(msg proto.Message, w io.Writer) error {
|
|
||||||
bz, err := proto.Marshal(msg)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
var n int
|
|
||||||
wire.WriteByteSlice(bz, w, &n, &err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read proto message, length delimited
|
|
||||||
func ReadMessage(r io.Reader, msg proto.Message) error {
|
|
||||||
var n int
|
|
||||||
var err error
|
|
||||||
bz := wire.ReadByteSlice(r, 0, &n, &err)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
err = proto.Unmarshal(bz, msg)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
28
types/messages_test.go
Normal file
28
types/messages_test.go
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package types
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/gogo/protobuf/proto"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestWriteReadMessage(t *testing.T) {
|
||||||
|
cases := []proto.Message{
|
||||||
|
&RequestEcho{"hello"},
|
||||||
|
// TODO: add the rest
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, c := range cases {
|
||||||
|
buf := new(bytes.Buffer)
|
||||||
|
err := WriteMessage(c, buf)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
msg := new(RequestEcho)
|
||||||
|
err = ReadMessage(buf, msg)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
assert.Equal(t, c, msg)
|
||||||
|
}
|
||||||
|
}
|
@ -37,6 +37,7 @@ It has these top-level messages:
|
|||||||
BlockID
|
BlockID
|
||||||
PartSetHeader
|
PartSetHeader
|
||||||
Validator
|
Validator
|
||||||
|
Evidence
|
||||||
KVPair
|
KVPair
|
||||||
*/
|
*/
|
||||||
package types
|
package types
|
||||||
@ -81,7 +82,7 @@ var KVPair_Type_value = map[string]int32{
|
|||||||
func (x KVPair_Type) String() string {
|
func (x KVPair_Type) String() string {
|
||||||
return proto.EnumName(KVPair_Type_name, int32(x))
|
return proto.EnumName(KVPair_Type_name, int32(x))
|
||||||
}
|
}
|
||||||
func (KVPair_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{29, 0} }
|
func (KVPair_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptorTypes, []int{30, 0} }
|
||||||
|
|
||||||
type Request struct {
|
type Request struct {
|
||||||
// Types that are valid to be assigned to Value:
|
// Types that are valid to be assigned to Value:
|
||||||
@ -644,8 +645,10 @@ func (m *RequestInitChain) GetValidators() []*Validator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type RequestBeginBlock struct {
|
type RequestBeginBlock struct {
|
||||||
Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
|
Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
|
||||||
Header *Header `protobuf:"bytes,2,opt,name=header" json:"header,omitempty"`
|
Header *Header `protobuf:"bytes,2,opt,name=header" json:"header,omitempty"`
|
||||||
|
AbsentValidators []int32 `protobuf:"varint,3,rep,packed,name=absent_validators,json=absentValidators" json:"absent_validators,omitempty"`
|
||||||
|
ByzantineValidators []*Evidence `protobuf:"bytes,4,rep,name=byzantine_validators,json=byzantineValidators" json:"byzantine_validators,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *RequestBeginBlock) Reset() { *m = RequestBeginBlock{} }
|
func (m *RequestBeginBlock) Reset() { *m = RequestBeginBlock{} }
|
||||||
@ -667,6 +670,20 @@ func (m *RequestBeginBlock) GetHeader() *Header {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *RequestBeginBlock) GetAbsentValidators() []int32 {
|
||||||
|
if m != nil {
|
||||||
|
return m.AbsentValidators
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *RequestBeginBlock) GetByzantineValidators() []*Evidence {
|
||||||
|
if m != nil {
|
||||||
|
return m.ByzantineValidators
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type RequestEndBlock struct {
|
type RequestEndBlock struct {
|
||||||
Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"`
|
Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"`
|
||||||
}
|
}
|
||||||
@ -1536,6 +1553,30 @@ func (m *Validator) GetPower() int64 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Evidence struct {
|
||||||
|
PubKey []byte `protobuf:"bytes,1,opt,name=pub_key,json=pubKey,proto3" json:"pub_key,omitempty"`
|
||||||
|
Height int64 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Evidence) Reset() { *m = Evidence{} }
|
||||||
|
func (m *Evidence) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*Evidence) ProtoMessage() {}
|
||||||
|
func (*Evidence) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{29} }
|
||||||
|
|
||||||
|
func (m *Evidence) GetPubKey() []byte {
|
||||||
|
if m != nil {
|
||||||
|
return m.PubKey
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Evidence) GetHeight() int64 {
|
||||||
|
if m != nil {
|
||||||
|
return m.Height
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
type KVPair struct {
|
type KVPair struct {
|
||||||
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
|
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
|
||||||
ValueType KVPair_Type `protobuf:"varint,2,opt,name=value_type,json=valueType,proto3,enum=types.KVPair_Type" json:"value_type,omitempty"`
|
ValueType KVPair_Type `protobuf:"varint,2,opt,name=value_type,json=valueType,proto3,enum=types.KVPair_Type" json:"value_type,omitempty"`
|
||||||
@ -1546,7 +1587,7 @@ type KVPair struct {
|
|||||||
func (m *KVPair) Reset() { *m = KVPair{} }
|
func (m *KVPair) Reset() { *m = KVPair{} }
|
||||||
func (m *KVPair) String() string { return proto.CompactTextString(m) }
|
func (m *KVPair) String() string { return proto.CompactTextString(m) }
|
||||||
func (*KVPair) ProtoMessage() {}
|
func (*KVPair) ProtoMessage() {}
|
||||||
func (*KVPair) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{29} }
|
func (*KVPair) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{30} }
|
||||||
|
|
||||||
func (m *KVPair) GetKey() string {
|
func (m *KVPair) GetKey() string {
|
||||||
if m != nil {
|
if m != nil {
|
||||||
@ -1606,6 +1647,7 @@ func init() {
|
|||||||
proto.RegisterType((*BlockID)(nil), "types.BlockID")
|
proto.RegisterType((*BlockID)(nil), "types.BlockID")
|
||||||
proto.RegisterType((*PartSetHeader)(nil), "types.PartSetHeader")
|
proto.RegisterType((*PartSetHeader)(nil), "types.PartSetHeader")
|
||||||
proto.RegisterType((*Validator)(nil), "types.Validator")
|
proto.RegisterType((*Validator)(nil), "types.Validator")
|
||||||
|
proto.RegisterType((*Evidence)(nil), "types.Evidence")
|
||||||
proto.RegisterType((*KVPair)(nil), "types.KVPair")
|
proto.RegisterType((*KVPair)(nil), "types.KVPair")
|
||||||
proto.RegisterEnum("types.KVPair_Type", KVPair_Type_name, KVPair_Type_value)
|
proto.RegisterEnum("types.KVPair_Type", KVPair_Type_name, KVPair_Type_value)
|
||||||
}
|
}
|
||||||
@ -2015,98 +2057,102 @@ var _ABCIApplication_serviceDesc = grpc.ServiceDesc{
|
|||||||
func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) }
|
func init() { proto.RegisterFile("types/types.proto", fileDescriptorTypes) }
|
||||||
|
|
||||||
var fileDescriptorTypes = []byte{
|
var fileDescriptorTypes = []byte{
|
||||||
// 1488 bytes of a gzipped FileDescriptorProto
|
// 1551 bytes of a gzipped FileDescriptorProto
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x8e, 0x13, 0xc7,
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x98, 0xcb, 0x8e, 0x13, 0x47,
|
||||||
0x13, 0x5f, 0x7f, 0xdb, 0xe5, 0xfd, 0x30, 0xcd, 0xfe, 0x61, 0x30, 0x07, 0x60, 0x24, 0xfe, 0xec,
|
0x17, 0xc7, 0x6d, 0xb7, 0xaf, 0xc7, 0x73, 0xf1, 0xd4, 0xcc, 0x07, 0xc6, 0x2c, 0x18, 0x5a, 0xe2,
|
||||||
0x12, 0x58, 0x93, 0x45, 0x44, 0x2c, 0x44, 0x91, 0xd6, 0x2c, 0xc4, 0x16, 0x12, 0x21, 0xc3, 0x8a,
|
0xc3, 0xc3, 0x65, 0xcc, 0x37, 0x88, 0x4f, 0x0c, 0x44, 0x91, 0xc6, 0x0c, 0xc4, 0x16, 0x12, 0x21,
|
||||||
0xab, 0x35, 0xf6, 0xb4, 0xed, 0x11, 0xf6, 0xcc, 0x30, 0xd3, 0x5e, 0xbc, 0x52, 0x1e, 0x81, 0x7b,
|
0xcd, 0x88, 0xad, 0xd5, 0x76, 0x97, 0xed, 0x12, 0x76, 0x77, 0xd3, 0x5d, 0x1e, 0x3c, 0x51, 0x1e,
|
||||||
0xce, 0xc9, 0x25, 0x52, 0x5e, 0x20, 0x6f, 0x10, 0xe5, 0x19, 0x72, 0xe0, 0x59, 0xa2, 0xaa, 0xee,
|
0x81, 0x7d, 0xd6, 0xc9, 0x26, 0x52, 0x5e, 0x20, 0xcb, 0xec, 0xa2, 0x3c, 0x43, 0x16, 0x3c, 0x4b,
|
||||||
0xf9, 0xdc, 0x19, 0x0e, 0x1c, 0xb8, 0xac, 0xba, 0xba, 0xea, 0xd7, 0xae, 0xea, 0xa9, 0xfe, 0x55,
|
0x54, 0xa7, 0xaa, 0xaf, 0xd3, 0xcd, 0x82, 0x05, 0x9b, 0x51, 0x5d, 0xce, 0xbf, 0x7c, 0xaa, 0xfa,
|
||||||
0xd5, 0xc2, 0x25, 0x71, 0xee, 0xf1, 0xa0, 0x47, 0x7f, 0x0f, 0x3c, 0xdf, 0x15, 0x2e, 0xab, 0x91,
|
0xd4, 0xef, 0x9c, 0x1a, 0xd8, 0xe1, 0x17, 0x2e, 0xf5, 0x7b, 0xf8, 0xf7, 0xd0, 0xf5, 0x1c, 0xee,
|
||||||
0xd0, 0xbd, 0x3f, 0xb3, 0xc5, 0x7c, 0x35, 0x3e, 0x98, 0xb8, 0xcb, 0xde, 0xcc, 0x9d, 0xb9, 0x3d,
|
0x90, 0x0a, 0x76, 0x3a, 0xf7, 0x67, 0x8c, 0xcf, 0x57, 0xe3, 0xc3, 0x89, 0xb3, 0xec, 0xcd, 0x9c,
|
||||||
0xd2, 0x8e, 0x57, 0x53, 0x92, 0x48, 0xa0, 0x95, 0x44, 0xe9, 0x7f, 0x57, 0xa1, 0x61, 0xf0, 0xf7,
|
0x99, 0xd3, 0xc3, 0xd9, 0xf1, 0x6a, 0x8a, 0x3d, 0xec, 0x60, 0x4b, 0xaa, 0xf4, 0xbf, 0xca, 0x50,
|
||||||
0x2b, 0x1e, 0x08, 0xb6, 0x07, 0x55, 0x3e, 0x99, 0xbb, 0x5a, 0xe9, 0x66, 0x69, 0xaf, 0x7d, 0xc8,
|
0x33, 0xe8, 0xfb, 0x15, 0xf5, 0x39, 0xe9, 0x42, 0x99, 0x4e, 0xe6, 0x4e, 0xbb, 0xb8, 0x5f, 0xec,
|
||||||
0x0e, 0xe4, 0xe9, 0x4a, 0xfb, 0x7c, 0x32, 0x77, 0x07, 0x1b, 0x06, 0x59, 0xb0, 0x6f, 0xa0, 0x36,
|
0x36, 0x8f, 0xc8, 0xa1, 0x5c, 0x5d, 0xcd, 0x3e, 0x9f, 0xcc, 0x9d, 0x41, 0xc1, 0x40, 0x0b, 0x72,
|
||||||
0x5d, 0xac, 0x82, 0xb9, 0x56, 0x26, 0xd3, 0xcb, 0x69, 0xd3, 0x17, 0xa8, 0x1a, 0x6c, 0x18, 0xd2,
|
0x17, 0x2a, 0xd3, 0xc5, 0xca, 0x9f, 0xb7, 0x4b, 0x68, 0xba, 0x9b, 0x34, 0x7d, 0x21, 0xa6, 0x06,
|
||||||
0x06, 0x8f, 0xb5, 0x9d, 0xa9, 0xab, 0x55, 0xf2, 0x8e, 0x1d, 0x3a, 0x53, 0x3a, 0x16, 0x2d, 0xd8,
|
0x05, 0x43, 0xda, 0x88, 0x65, 0x99, 0x3d, 0x75, 0xda, 0x5a, 0xd6, 0xb2, 0x43, 0x7b, 0x8a, 0xcb,
|
||||||
0x63, 0x80, 0x80, 0x8b, 0x91, 0xeb, 0x09, 0xdb, 0x75, 0xb4, 0x2a, 0xd9, 0x5f, 0x4d, 0xdb, 0xbf,
|
0x0a, 0x0b, 0xf2, 0x18, 0xc0, 0xa7, 0x7c, 0xe4, 0xb8, 0x9c, 0x39, 0x76, 0xbb, 0x8c, 0xf6, 0x57,
|
||||||
0xe1, 0xe2, 0x27, 0x52, 0x0f, 0x36, 0x8c, 0x56, 0x10, 0x0a, 0x88, 0xb4, 0xf8, 0xc2, 0x3e, 0xe3,
|
0x93, 0xf6, 0x6f, 0x28, 0xff, 0x1e, 0xa7, 0x07, 0x05, 0xa3, 0xe1, 0x07, 0x1d, 0xa1, 0xb4, 0xe8,
|
||||||
0xfe, 0x48, 0xac, 0xb5, 0x5a, 0x1e, 0xf2, 0x44, 0xea, 0x4f, 0xd7, 0x88, 0xb4, 0x42, 0x81, 0x1d,
|
0x82, 0x9d, 0x53, 0x6f, 0xc4, 0xd7, 0xed, 0x4a, 0x96, 0xf2, 0x54, 0xce, 0x9f, 0xad, 0x85, 0xd2,
|
||||||
0x42, 0x73, 0x32, 0xe7, 0x93, 0x77, 0x88, 0xab, 0x13, 0xee, 0x7f, 0x69, 0xdc, 0x33, 0xd4, 0x12,
|
0x0a, 0x3a, 0xe4, 0x08, 0xea, 0x93, 0x39, 0x9d, 0xbc, 0x13, 0xba, 0x2a, 0xea, 0xfe, 0x93, 0xd4,
|
||||||
0xaa, 0x31, 0x91, 0x4b, 0x76, 0x00, 0xf5, 0x89, 0xbb, 0x5c, 0xda, 0x42, 0x6b, 0x10, 0x62, 0x37,
|
0x3d, 0x13, 0xb3, 0xa8, 0xaa, 0x4d, 0x64, 0x93, 0x1c, 0x42, 0x75, 0xe2, 0x2c, 0x97, 0x8c, 0xb7,
|
||||||
0x83, 0x20, 0xdd, 0x60, 0xc3, 0x50, 0x56, 0x78, 0x5d, 0xef, 0x57, 0xdc, 0x3f, 0xd7, 0x9a, 0x79,
|
0x6b, 0xa8, 0xd8, 0x4b, 0x29, 0x70, 0x6e, 0x50, 0x30, 0x94, 0x95, 0x38, 0xae, 0xf7, 0x2b, 0xea,
|
||||||
0xd7, 0xf5, 0x33, 0xaa, 0xf0, 0xba, 0xc8, 0x06, 0x43, 0xb1, 0x1d, 0x5b, 0x8c, 0x26, 0x73, 0xd3,
|
0x5d, 0xb4, 0xeb, 0x59, 0xc7, 0xf5, 0x83, 0x98, 0x12, 0xc7, 0x85, 0x36, 0x62, 0x2b, 0xcc, 0x66,
|
||||||
0x76, 0xb4, 0x56, 0x5e, 0x28, 0x43, 0xc7, 0x16, 0xcf, 0x50, 0x8d, 0xa1, 0xd8, 0xa1, 0xc0, 0x9e,
|
0x7c, 0x34, 0x99, 0x9b, 0xcc, 0x6e, 0x37, 0xb2, 0xb6, 0x32, 0xb4, 0x19, 0x7f, 0x26, 0xa6, 0xc5,
|
||||||
0x42, 0x7b, 0xcc, 0x67, 0xb6, 0x33, 0x1a, 0x2f, 0xdc, 0xc9, 0x3b, 0x0d, 0x08, 0xaa, 0xa5, 0xa1,
|
0x56, 0x58, 0xd0, 0x21, 0x4f, 0xa1, 0x39, 0xa6, 0x33, 0x66, 0x8f, 0xc6, 0x0b, 0x67, 0xf2, 0xae,
|
||||||
0x7d, 0x34, 0xe8, 0xa3, 0x7e, 0xb0, 0x61, 0xc0, 0x38, 0x92, 0xd8, 0x23, 0x68, 0x71, 0xc7, 0x52,
|
0x0d, 0x28, 0x6d, 0x27, 0xa5, 0x7d, 0x61, 0xd0, 0x17, 0xf3, 0x83, 0x82, 0x01, 0xe3, 0xb0, 0x47,
|
||||||
0xd0, 0x36, 0x41, 0xaf, 0x64, 0x32, 0xc0, 0xb1, 0x42, 0x60, 0x93, 0xab, 0x75, 0xbf, 0x01, 0xb5,
|
0x1e, 0x41, 0x83, 0xda, 0x96, 0x92, 0x36, 0x51, 0x7a, 0x25, 0x15, 0x01, 0xb6, 0x15, 0x08, 0xeb,
|
||||||
0x33, 0x73, 0xb1, 0xe2, 0xfa, 0x1d, 0x68, 0x27, 0x32, 0x85, 0x69, 0xd0, 0x58, 0xf2, 0x20, 0x30,
|
0x54, 0xb5, 0xfb, 0x35, 0xa8, 0x9c, 0x9b, 0x8b, 0x15, 0xd5, 0x6f, 0x43, 0x33, 0x16, 0x29, 0xa4,
|
||||||
0x67, 0x9c, 0xd2, 0xa9, 0x65, 0x84, 0xa2, 0xbe, 0x0d, 0x9b, 0xc9, 0x3c, 0x49, 0x00, 0x31, 0x17,
|
0x0d, 0xb5, 0x25, 0xf5, 0x7d, 0x73, 0x46, 0x31, 0x9c, 0x1a, 0x46, 0xd0, 0xd5, 0xb7, 0x60, 0x23,
|
||||||
0x10, 0x78, 0xc6, 0xfd, 0x00, 0x13, 0x40, 0x01, 0x95, 0xa8, 0x3f, 0x81, 0x4e, 0x36, 0x09, 0x58,
|
0x1e, 0x27, 0x31, 0xa1, 0x88, 0x05, 0x21, 0x3c, 0xa7, 0x9e, 0x2f, 0x02, 0x40, 0x09, 0x55, 0x57,
|
||||||
0x07, 0x2a, 0xef, 0xf8, 0xb9, 0xb2, 0xc4, 0x25, 0xdb, 0x55, 0x0e, 0x51, 0x6a, 0xb6, 0x0c, 0xe5,
|
0x7f, 0x02, 0xad, 0x74, 0x10, 0x90, 0x16, 0x68, 0xef, 0xe8, 0x85, 0xb2, 0x14, 0x4d, 0xb2, 0xa7,
|
||||||
0x9d, 0x1e, 0x61, 0xa3, 0x34, 0x60, 0xdb, 0x50, 0x16, 0x6b, 0x82, 0x6e, 0x1a, 0x65, 0xb1, 0xd6,
|
0x1c, 0xc2, 0xd0, 0x6c, 0x18, 0xca, 0x3b, 0x3d, 0xd4, 0x86, 0x61, 0x40, 0xb6, 0xa0, 0xc4, 0xd7,
|
||||||
0x6f, 0xc2, 0x76, 0xfa, 0x93, 0x5f, 0xb0, 0xb0, 0x22, 0xd7, 0xe9, 0x9b, 0x31, 0x06, 0x55, 0xcb,
|
0x28, 0xdd, 0x30, 0x4a, 0x7c, 0xad, 0xef, 0xc3, 0x56, 0xf2, 0x93, 0x5f, 0xb2, 0xb0, 0x42, 0xd7,
|
||||||
0x14, 0xa6, 0xb2, 0xa0, 0x35, 0xee, 0x79, 0xa6, 0x98, 0xab, 0x9f, 0xa7, 0x35, 0xbb, 0x02, 0xf5,
|
0xf1, 0x9b, 0x11, 0x02, 0x65, 0xcb, 0xe4, 0xa6, 0xb2, 0xc0, 0xb6, 0x18, 0x73, 0x4d, 0x3e, 0x57,
|
||||||
0x39, 0xb7, 0x67, 0x73, 0x41, 0x6f, 0xa0, 0x62, 0x28, 0x09, 0x7d, 0xf5, 0x7c, 0xf7, 0x8c, 0x53,
|
0x3f, 0x8f, 0x6d, 0x72, 0x05, 0xaa, 0x73, 0xca, 0x66, 0x73, 0x8e, 0x77, 0x40, 0x33, 0x54, 0x4f,
|
||||||
0xaa, 0x37, 0x0d, 0x29, 0xe8, 0x3b, 0xb0, 0x95, 0x4a, 0x24, 0xfd, 0x24, 0x72, 0x3e, 0xfa, 0xf0,
|
0xf8, 0xea, 0x7a, 0xce, 0x39, 0xc5, 0x50, 0xaf, 0x1b, 0xb2, 0xa3, 0x6f, 0xc3, 0x66, 0x22, 0x90,
|
||||||
0xec, 0x01, 0xc0, 0x99, 0xb9, 0xb0, 0x2d, 0x53, 0xb8, 0x7e, 0xa0, 0x95, 0x6e, 0x56, 0xf6, 0xda,
|
0xf4, 0xd3, 0xd0, 0xf9, 0xf0, 0xc3, 0x93, 0x07, 0x00, 0xe7, 0xe6, 0x82, 0x59, 0x26, 0x77, 0x3c,
|
||||||
0x87, 0x1d, 0xf5, 0xbd, 0xde, 0x86, 0x0a, 0x23, 0x61, 0xa3, 0xbf, 0x82, 0x4b, 0x17, 0x72, 0x00,
|
0xbf, 0x5d, 0xdc, 0xd7, 0xba, 0xcd, 0xa3, 0x96, 0xfa, 0x5e, 0x6f, 0x83, 0x09, 0x23, 0x66, 0xa3,
|
||||||
0xbd, 0x9d, 0x9b, 0xc1, 0x3c, 0x8c, 0x00, 0xd7, 0xec, 0x36, 0x7a, 0x6b, 0x5a, 0xdc, 0x57, 0xaf,
|
0xff, 0x59, 0x84, 0x9d, 0x4b, 0x41, 0x20, 0xdc, 0x9d, 0x9b, 0xfe, 0x3c, 0xd8, 0x82, 0x68, 0x93,
|
||||||
0x7b, 0x4b, 0x1d, 0x3b, 0xa0, 0x4d, 0x43, 0x29, 0xf5, 0x7d, 0xd8, 0xc9, 0x24, 0x46, 0x22, 0xce,
|
0x5b, 0xc2, 0x5d, 0xd3, 0xa2, 0x9e, 0xba, 0xde, 0x9b, 0x6a, 0xdd, 0x01, 0x0e, 0x1a, 0x6a, 0x92,
|
||||||
0x52, 0x32, 0x4e, 0xfd, 0x63, 0x0d, 0x9a, 0x06, 0x0f, 0x3c, 0xd7, 0x09, 0x38, 0x7b, 0x0c, 0x2d,
|
0xdc, 0x85, 0x1d, 0x73, 0xec, 0x53, 0x9b, 0x8f, 0x62, 0x9e, 0x68, 0xfb, 0x5a, 0xb7, 0x62, 0xb4,
|
||||||
0xbe, 0x9e, 0x70, 0xf9, 0xc6, 0x4b, 0x99, 0x1c, 0x95, 0x36, 0xcf, 0x43, 0x3d, 0xe6, 0x77, 0x64,
|
0xe4, 0x44, 0xe8, 0x88, 0x4f, 0xfa, 0xb0, 0x37, 0xbe, 0xf8, 0xd1, 0xb4, 0x39, 0xb3, 0x69, 0xdc,
|
||||||
0xcc, 0xf6, 0x15, 0x3f, 0x65, 0x49, 0x47, 0x81, 0x92, 0x04, 0x75, 0x2f, 0x24, 0xa8, 0x4a, 0xe6,
|
0xbe, 0x8c, 0x9e, 0x6f, 0xab, 0x5f, 0x78, 0x7e, 0xce, 0x2c, 0x6a, 0x4f, 0xa8, 0xb1, 0x1b, 0x1a,
|
||||||
0x81, 0x4a, 0xdb, 0x0c, 0x43, 0xed, 0x2b, 0x86, 0xaa, 0xe6, 0x1e, 0x9c, 0xa2, 0xa8, 0xa3, 0x14,
|
0x47, 0x6b, 0xe8, 0x07, 0xb0, 0x9d, 0x0a, 0xc5, 0xd8, 0xc9, 0x16, 0xe3, 0x27, 0xab, 0x7f, 0xac,
|
||||||
0x45, 0xd5, 0x72, 0xdd, 0x2f, 0xe0, 0xa8, 0xa3, 0x14, 0x47, 0xd5, 0x73, 0xa1, 0x05, 0x24, 0xf5,
|
0x40, 0xdd, 0xa0, 0xbe, 0xeb, 0xd8, 0x3e, 0x25, 0x8f, 0xa1, 0x41, 0xd7, 0x13, 0x2a, 0xa9, 0x52,
|
||||||
0x30, 0x41, 0x52, 0x8d, 0xcc, 0xdb, 0x94, 0xc0, 0x1c, 0x96, 0xea, 0x45, 0x2c, 0xd5, 0xcc, 0xf0,
|
0x4c, 0xdd, 0x0a, 0x69, 0xf3, 0x3c, 0x98, 0x17, 0x37, 0x2a, 0x34, 0x26, 0x07, 0x8a, 0x88, 0x69,
|
||||||
0x9a, 0x82, 0x64, 0x69, 0xea, 0x5e, 0x48, 0x53, 0xad, 0xdc, 0x4b, 0xcb, 0xf0, 0xd4, 0x51, 0x8a,
|
0xcc, 0x29, 0x51, 0x1c, 0x89, 0xf7, 0x02, 0x24, 0x6a, 0x29, 0x24, 0x48, 0xdb, 0x14, 0x13, 0x0f,
|
||||||
0xa7, 0x20, 0x37, 0x9c, 0x02, 0xa2, 0xfa, 0x3e, 0x4d, 0x54, 0x92, 0x6d, 0xae, 0x65, 0xb0, 0x85,
|
0x14, 0x13, 0xcb, 0x99, 0x0b, 0x27, 0xa0, 0x78, 0x9c, 0x80, 0x62, 0x25, 0xd3, 0xfd, 0x1c, 0x2a,
|
||||||
0x4c, 0xf5, 0x5d, 0x92, 0xa9, 0x36, 0x33, 0xfc, 0xa8, 0x72, 0xe1, 0xb3, 0x54, 0xb5, 0x8f, 0x2f,
|
0x1e, 0x27, 0xa8, 0x58, 0xcd, 0x94, 0xe6, 0x60, 0xf1, 0x61, 0x0c, 0x8b, 0xb5, 0x14, 0x0d, 0xa4,
|
||||||
0x21, 0x93, 0x69, 0xf8, 0x16, 0xb9, 0xef, 0xbb, 0xbe, 0xe2, 0x12, 0x29, 0xe8, 0x7b, 0xf8, 0xe2,
|
0x30, 0x83, 0x8b, 0xbd, 0x90, 0x8b, 0xf5, 0x14, 0x49, 0x95, 0x24, 0x0d, 0xc6, 0x7b, 0x01, 0x18,
|
||||||
0xe3, 0xfc, 0xfa, 0x0c, 0xad, 0xd1, 0xab, 0x4d, 0x64, 0x97, 0xfe, 0x6b, 0x29, 0xc6, 0x12, 0xb3,
|
0x1b, 0x99, 0x87, 0x96, 0x22, 0xe3, 0x71, 0x82, 0x8c, 0x90, 0xb9, 0x9d, 0x1c, 0x34, 0x7e, 0x93,
|
||||||
0x25, 0xd9, 0xa2, 0xa5, 0xd8, 0x22, 0xc1, 0x76, 0xe5, 0x14, 0xdb, 0xb1, 0xbb, 0x70, 0x69, 0x61,
|
0x44, 0xa3, 0xe4, 0xdb, 0xb5, 0x94, 0x36, 0x97, 0x8d, 0xff, 0x8f, 0xb3, 0x71, 0x23, 0x45, 0x64,
|
||||||
0x06, 0x42, 0x86, 0x39, 0x4a, 0xd1, 0xc7, 0x0e, 0x2a, 0x64, 0x7c, 0x92, 0x47, 0xee, 0xc3, 0xe5,
|
0x15, 0x0b, 0x9f, 0x85, 0xe3, 0x81, 0xb8, 0x7a, 0xa9, 0x48, 0x13, 0xb7, 0x9f, 0x7a, 0x9e, 0xe3,
|
||||||
0x84, 0xad, 0xe9, 0x79, 0x23, 0x7a, 0xd4, 0x55, 0x7a, 0xd4, 0x9d, 0xc8, 0xfa, 0xd8, 0xf3, 0x06,
|
0x29, 0x7a, 0xc9, 0x8e, 0xde, 0x15, 0x8c, 0x89, 0xe2, 0xeb, 0x33, 0x20, 0x45, 0x4e, 0xc4, 0xa2,
|
||||||
0x66, 0x30, 0xd7, 0x6f, 0xc7, 0xf1, 0xa7, 0x98, 0x74, 0xe1, 0xce, 0x42, 0x26, 0x5d, 0xb8, 0x33,
|
0x4b, 0xff, 0xb9, 0x18, 0x69, 0x91, 0xa5, 0x71, 0x3e, 0x35, 0x14, 0x9f, 0x62, 0x7c, 0x2d, 0x25,
|
||||||
0xfd, 0xf7, 0x52, 0x6c, 0x17, 0xb3, 0x26, 0x83, 0xea, 0xc4, 0xb5, 0x64, 0xf8, 0x5b, 0x06, 0xad,
|
0xf8, 0x4a, 0xee, 0xc0, 0xce, 0xc2, 0xf4, 0xb9, 0xdc, 0xe6, 0x28, 0x01, 0xac, 0x6d, 0x31, 0x21,
|
||||||
0xd9, 0x89, 0x8a, 0x0c, 0x43, 0xd8, 0xec, 0x3f, 0xf8, 0xe7, 0xd3, 0x8d, 0x8d, 0x7f, 0x3f, 0xdd,
|
0xf7, 0x27, 0xc9, 0x75, 0x1f, 0x76, 0x63, 0xb6, 0xa6, 0xeb, 0x8e, 0x90, 0x22, 0x65, 0xa4, 0x48,
|
||||||
0xd8, 0x4b, 0x74, 0x22, 0x82, 0x3b, 0x16, 0xf7, 0x97, 0xb6, 0x23, 0x7a, 0x33, 0xf7, 0xfe, 0x07,
|
0x2b, 0xb4, 0x3e, 0x71, 0xdd, 0x81, 0xe9, 0xcf, 0xf5, 0x5b, 0xd1, 0xfe, 0x13, 0xec, 0x5e, 0x38,
|
||||||
0xdb, 0xe7, 0x3d, 0x44, 0x1c, 0xf4, 0xcf, 0x05, 0x0f, 0xd4, 0x5d, 0x28, 0x0f, 0x2a, 0x91, 0x07,
|
0xb3, 0x80, 0xdd, 0x0b, 0x67, 0xa6, 0xff, 0x5a, 0x8c, 0xec, 0x22, 0x4e, 0x13, 0x28, 0x4f, 0x1c,
|
||||||
0xec, 0x16, 0x54, 0x85, 0x39, 0x0b, 0xb4, 0x2a, 0xd1, 0x5b, 0xc8, 0x43, 0x2f, 0xdf, 0xbe, 0x36,
|
0x4b, 0x6e, 0x7f, 0xd3, 0xc0, 0x36, 0x39, 0x55, 0x3b, 0x13, 0x5b, 0xd8, 0xe8, 0x3f, 0xf8, 0xfb,
|
||||||
0x6d, 0xdf, 0x20, 0x95, 0xfe, 0x5b, 0x09, 0x69, 0x28, 0xf5, 0x06, 0xbe, 0xaa, 0x8b, 0x1d, 0xa8,
|
0xd3, 0x8d, 0xc2, 0x3f, 0x9f, 0x6e, 0x74, 0x63, 0xb5, 0x0f, 0xa7, 0xb6, 0x45, 0xbd, 0x25, 0xb3,
|
||||||
0xcc, 0xcc, 0x80, 0xae, 0xba, 0x62, 0xe0, 0x12, 0x77, 0xa6, 0x9c, 0x13, 0x35, 0x54, 0x0c, 0x5c,
|
0x79, 0x6f, 0xe6, 0xdc, 0xff, 0xc0, 0x3c, 0xda, 0x13, 0x8a, 0xc3, 0xfe, 0x05, 0xa7, 0xbe, 0x3a,
|
||||||
0xea, 0x7f, 0x95, 0xe3, 0xdc, 0x88, 0x0a, 0xc7, 0x05, 0x0f, 0x77, 0xa1, 0x66, 0x3b, 0x16, 0x5f,
|
0x0b, 0xe5, 0x81, 0x16, 0x7a, 0x40, 0x6e, 0x42, 0x99, 0x9b, 0xb3, 0x00, 0x4b, 0x01, 0xf8, 0x5e,
|
||||||
0x93, 0x8b, 0x15, 0x43, 0x0a, 0xac, 0x2f, 0x0b, 0x5c, 0xe5, 0x0b, 0xdd, 0xa6, 0x92, 0xf8, 0x22,
|
0xbe, 0x7d, 0x6d, 0x32, 0xcf, 0xc0, 0x29, 0xfd, 0x97, 0xa2, 0xc0, 0x50, 0xe2, 0x0e, 0x7c, 0x55,
|
||||||
0x2c, 0x89, 0xd5, 0x2f, 0x3c, 0x45, 0xc2, 0xf1, 0x1c, 0xcf, 0x77, 0xdd, 0x29, 0xc5, 0xf6, 0x45,
|
0x17, 0x5b, 0xa0, 0xcd, 0x4c, 0x1f, 0x8f, 0x5a, 0x33, 0x44, 0x53, 0x8c, 0x4c, 0x29, 0x45, 0x34,
|
||||||
0xe7, 0x10, 0x3c, 0x51, 0x26, 0xea, 0xa9, 0x72, 0xa8, 0x6e, 0xb7, 0x11, 0xa7, 0xe0, 0x2f, 0x58,
|
0x68, 0x86, 0x68, 0xea, 0x7f, 0x94, 0xa2, 0xd8, 0x08, 0x53, 0xd5, 0x25, 0x0f, 0xf7, 0xa0, 0xc2,
|
||||||
0x92, 0x93, 0x6c, 0xf5, 0x35, 0xbf, 0xad, 0x7e, 0x39, 0xce, 0xff, 0x88, 0xc8, 0xf4, 0x5d, 0x60,
|
0x6c, 0x8b, 0xae, 0xd1, 0x45, 0xcd, 0x90, 0x1d, 0xd2, 0x97, 0x29, 0x55, 0xfb, 0x42, 0xb7, 0x31,
|
||||||
0x17, 0x19, 0x4a, 0xf6, 0x26, 0x69, 0xee, 0x61, 0xff, 0x87, 0x9a, 0x65, 0x4f, 0xa7, 0xc5, 0xd5,
|
0x09, 0xbf, 0x08, 0x92, 0x70, 0xf9, 0x0b, 0x57, 0x91, 0x72, 0xb1, 0x8e, 0xeb, 0x39, 0xce, 0x14,
|
||||||
0x59, 0xaa, 0xf5, 0x3f, 0xca, 0x50, 0x97, 0xb5, 0x95, 0x5d, 0x43, 0x9e, 0x37, 0x6d, 0x67, 0x64,
|
0xf7, 0xf6, 0x45, 0xeb, 0xa0, 0x3c, 0x96, 0x26, 0xaa, 0x89, 0x04, 0xac, 0x4e, 0xb7, 0x16, 0x85,
|
||||||
0x5b, 0x21, 0xbf, 0x90, 0x3c, 0xb4, 0x12, 0x97, 0x56, 0x4e, 0x5d, 0x1a, 0x83, 0xaa, 0xb0, 0x97,
|
0xe0, 0x4f, 0xa2, 0x08, 0x88, 0xd3, 0xea, 0x6b, 0x7e, 0x5b, 0x7d, 0x37, 0x8a, 0xff, 0x10, 0x64,
|
||||||
0x5c, 0x51, 0x03, 0xad, 0xd9, 0x55, 0x68, 0x38, 0xab, 0xe5, 0x48, 0xac, 0xc3, 0xc4, 0xac, 0x3b,
|
0xfa, 0x1e, 0x90, 0xcb, 0x84, 0x92, 0xd5, 0x50, 0x92, 0x3d, 0xe4, 0xbf, 0x50, 0xb1, 0xd8, 0x74,
|
||||||
0xab, 0xe5, 0xe9, 0x3a, 0x60, 0x87, 0xb0, 0x95, 0x20, 0x0a, 0xdb, 0x52, 0x05, 0x6c, 0x5b, 0xb9,
|
0x9a, 0x5f, 0x0f, 0xc8, 0x69, 0xfd, 0xb7, 0x12, 0x54, 0x65, 0x32, 0x27, 0xd7, 0x04, 0xe7, 0x4d,
|
||||||
0x46, 0x7e, 0x0f, 0x4f, 0x8c, 0x76, 0x44, 0x19, 0x43, 0x8b, 0xed, 0x01, 0x31, 0xc8, 0x48, 0x16,
|
0x66, 0x8f, 0x98, 0x15, 0xf0, 0x05, 0xfb, 0x43, 0x2b, 0x76, 0x68, 0xa5, 0xc4, 0xa1, 0x11, 0x28,
|
||||||
0x09, 0xc9, 0x2c, 0x75, 0x62, 0x96, 0x6d, 0xdc, 0x57, 0x55, 0x04, 0x1b, 0x87, 0xeb, 0xd0, 0xc2,
|
0x73, 0xb6, 0xa4, 0x0a, 0x0d, 0xd8, 0x26, 0x57, 0xa1, 0x66, 0xaf, 0x96, 0x23, 0xbe, 0x0e, 0x02,
|
||||||
0x9b, 0x94, 0x26, 0x0d, 0x32, 0x69, 0xe2, 0x06, 0x29, 0xef, 0xc0, 0x4e, 0xdc, 0x8c, 0x48, 0x93,
|
0xb3, 0x6a, 0xaf, 0x96, 0x67, 0x6b, 0x9f, 0x1c, 0xc1, 0x66, 0x0c, 0x14, 0xcc, 0x52, 0x09, 0x6c,
|
||||||
0xa6, 0x3c, 0x25, 0xde, 0x26, 0xc3, 0x6b, 0xd0, 0x8c, 0x18, 0xac, 0x45, 0x16, 0x0d, 0x53, 0x11,
|
0x4b, 0xb9, 0x86, 0x7e, 0x0f, 0x4f, 0x8d, 0x66, 0x88, 0x8c, 0xa1, 0x45, 0xba, 0x80, 0x04, 0x19,
|
||||||
0xd7, 0x10, 0x1a, 0xca, 0xc5, 0xdc, 0xc6, 0xe5, 0x2e, 0xd4, 0x3c, 0xd3, 0x17, 0x81, 0x6a, 0x10,
|
0xc9, 0x24, 0x21, 0xc9, 0x52, 0x45, 0xb2, 0x6c, 0x89, 0x71, 0x95, 0x45, 0x44, 0xa5, 0x72, 0x1d,
|
||||||
0xc2, 0xfa, 0xf5, 0xda, 0xf4, 0xb1, 0x63, 0x54, 0xed, 0x8b, 0x34, 0xd1, 0x8f, 0x60, 0x2b, 0xb5,
|
0x1a, 0xe2, 0x24, 0xa5, 0x49, 0x0d, 0x4d, 0xea, 0x62, 0x00, 0x27, 0x6f, 0xc3, 0x76, 0x54, 0x68,
|
||||||
0x8f, 0xcf, 0x4f, 0xb8, 0xc2, 0x5c, 0xa8, 0xd6, 0x45, 0x0a, 0xd1, 0xcf, 0x94, 0xe3, 0x9f, 0xd1,
|
0x48, 0x93, 0xba, 0x5c, 0x25, 0x1a, 0x46, 0xc3, 0x6b, 0x50, 0x0f, 0x09, 0xd6, 0x40, 0x8b, 0x9a,
|
||||||
0x9f, 0x40, 0x2b, 0xfa, 0x86, 0x78, 0xd5, 0xde, 0x6a, 0x3c, 0x0a, 0x9b, 0xd0, 0x4d, 0xa3, 0xee,
|
0xa9, 0xc0, 0x35, 0x84, 0x9a, 0x72, 0x31, 0xb3, 0x52, 0xba, 0x03, 0x15, 0xd7, 0xf4, 0xb8, 0xaf,
|
||||||
0xad, 0xc6, 0x2f, 0x65, 0x1f, 0xea, 0xb9, 0x1f, 0x54, 0x13, 0x55, 0x31, 0xa4, 0xa0, 0xff, 0x59,
|
0x0a, 0x84, 0x20, 0x7f, 0xbd, 0x36, 0x3d, 0x51, 0xa3, 0xaa, 0x7a, 0x49, 0x9a, 0xe8, 0xc7, 0xb0,
|
||||||
0x82, 0xba, 0xe4, 0xaf, 0x9c, 0xd6, 0xf5, 0x5b, 0xea, 0xe9, 0x56, 0x7c, 0x84, 0x7e, 0x13, 0x6e,
|
0x99, 0x18, 0x17, 0xd7, 0x8f, 0x3b, 0xdc, 0x5c, 0xa8, 0xd2, 0x45, 0x76, 0xc2, 0x9f, 0x29, 0x45,
|
||||||
0x3b, 0x1a, 0x97, 0x24, 0xe8, 0xe0, 0xf4, 0xdc, 0xe3, 0x46, 0x8b, 0xac, 0x70, 0xc9, 0x6e, 0xc1,
|
0x3f, 0xa3, 0x3f, 0x81, 0x46, 0xf8, 0x0d, 0xc5, 0x51, 0xbb, 0xab, 0xf1, 0x28, 0x28, 0x7b, 0x37,
|
||||||
0xa6, 0x84, 0x04, 0xc2, 0xb7, 0x9d, 0x30, 0x7b, 0xdb, 0xb4, 0xf7, 0x86, 0xb6, 0xf0, 0xab, 0x48,
|
0x8c, 0xaa, 0xbb, 0x1a, 0xbf, 0x94, 0x95, 0xaf, 0xeb, 0x7c, 0x50, 0x55, 0x9b, 0x66, 0xc8, 0x8e,
|
||||||
0x13, 0xdb, 0x11, 0x2a, 0x1d, 0x9a, 0xb4, 0x31, 0x74, 0x84, 0x7e, 0x1d, 0xaa, 0x74, 0x0e, 0x40,
|
0xfe, 0x14, 0xea, 0x41, 0x55, 0x95, 0x2f, 0xcd, 0xf9, 0xd4, 0xfa, 0xef, 0x45, 0xa8, 0x4a, 0xf8,
|
||||||
0xfd, 0xcd, 0xa9, 0x31, 0x7c, 0xf5, 0x63, 0x67, 0x83, 0x35, 0xa0, 0x32, 0x7c, 0x75, 0xda, 0x29,
|
0x65, 0x54, 0xda, 0xff, 0xc3, 0x12, 0x74, 0x45, 0x47, 0x62, 0xd3, 0x28, 0xdc, 0x0a, 0x5f, 0x77,
|
||||||
0x1d, 0x7e, 0xac, 0xc1, 0xce, 0x71, 0xff, 0xd9, 0xf0, 0xd8, 0xf3, 0x16, 0xf6, 0xc4, 0xa4, 0x32,
|
0x52, 0x74, 0x78, 0x76, 0xe1, 0x52, 0xa3, 0x81, 0x56, 0xa2, 0x49, 0x6e, 0xc2, 0x86, 0x94, 0xf8,
|
||||||
0xd1, 0x83, 0x2a, 0x15, 0xc2, 0x9c, 0xe9, 0xb0, 0x9b, 0xd7, 0x91, 0xb1, 0x43, 0xa8, 0x51, 0x3d,
|
0xdc, 0x63, 0x76, 0x10, 0xfa, 0x4d, 0x1c, 0x7b, 0x83, 0x43, 0xe2, 0x93, 0x4a, 0x13, 0x66, 0x73,
|
||||||
0x64, 0x79, 0x43, 0x62, 0x37, 0xb7, 0x31, 0xc3, 0x1f, 0x91, 0x15, 0xf3, 0xe2, 0xac, 0xd8, 0xcd,
|
0x15, 0x4b, 0x75, 0x1c, 0x18, 0xda, 0x5c, 0xbf, 0x0e, 0x65, 0x5c, 0x07, 0xa0, 0xfa, 0xe6, 0xcc,
|
||||||
0xeb, 0xce, 0xd8, 0x0f, 0xd0, 0x8a, 0x2b, 0x59, 0xd1, 0xc4, 0xd8, 0x2d, 0xec, 0xd3, 0x10, 0x1f,
|
0x18, 0xbe, 0xfa, 0xae, 0x55, 0x20, 0x35, 0xd0, 0x86, 0xaf, 0xce, 0x5a, 0xc5, 0xa3, 0x8f, 0x15,
|
||||||
0x57, 0xb8, 0xa2, 0xb9, 0xb1, 0x5b, 0xd8, 0xac, 0xb1, 0xc7, 0xd0, 0x08, 0x8b, 0x4f, 0xfe, 0xf4,
|
0xd8, 0x3e, 0xe9, 0x3f, 0x1b, 0x9e, 0xb8, 0xee, 0x82, 0x4d, 0x4c, 0xcc, 0x31, 0x3d, 0x28, 0x63,
|
||||||
0xd8, 0x2d, 0xe8, 0xd7, 0xf0, 0x7a, 0x64, 0x49, 0xc8, 0x1b, 0x0a, 0xbb, 0xb9, 0x2d, 0x18, 0x7b,
|
0x16, 0xcd, 0x78, 0xcc, 0x76, 0xb2, 0xca, 0x39, 0x72, 0x04, 0x15, 0x4c, 0xa6, 0x24, 0xeb, 0x4d,
|
||||||
0x04, 0x75, 0xc5, 0x86, 0xb9, 0x83, 0x67, 0x37, 0xbf, 0xd1, 0xc3, 0x20, 0xe3, 0xf9, 0xa1, 0x68,
|
0xdb, 0xc9, 0xac, 0xea, 0xc4, 0x8f, 0xc8, 0x74, 0x7b, 0xf9, 0x69, 0xdb, 0xc9, 0x2a, 0xed, 0xc8,
|
||||||
0xa2, 0xec, 0x16, 0xb6, 0x70, 0xec, 0x18, 0x20, 0x31, 0x39, 0x14, 0xce, 0x95, 0xdd, 0xe2, 0x46,
|
0xb7, 0xd0, 0x88, 0xd2, 0x60, 0xde, 0x03, 0xb7, 0x93, 0x5b, 0xe4, 0x09, 0x7d, 0x94, 0x1e, 0xf3,
|
||||||
0x8e, 0x3d, 0x85, 0x66, 0x3c, 0x2c, 0xe4, 0x4f, 0x97, 0xdd, 0xa2, 0x5e, 0x6e, 0x5c, 0xa7, 0xff,
|
0x9e, 0xb9, 0x9d, 0xdc, 0x4a, 0x8f, 0x3c, 0x86, 0x5a, 0x90, 0xb9, 0xb2, 0x1f, 0xbb, 0x9d, 0x9c,
|
||||||
0x58, 0x3c, 0xfc, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x34, 0x61, 0x21, 0x91, 0xfc, 0x10, 0x00, 0x00,
|
0x62, 0x4f, 0x1c, 0x8f, 0xcc, 0x27, 0x59, 0x6f, 0xd8, 0x4e, 0x66, 0xfd, 0x46, 0x1e, 0x41, 0x55,
|
||||||
|
0xa1, 0x34, 0xf3, 0x9d, 0xdc, 0xc9, 0xae, 0x12, 0xc5, 0x26, 0xa3, 0xe7, 0x4e, 0xde, 0x03, 0xb8,
|
||||||
|
0x93, 0x5b, 0xff, 0x91, 0x13, 0x80, 0xd8, 0x3b, 0x27, 0xf7, 0x19, 0xdc, 0xc9, 0xaf, 0x02, 0x89,
|
||||||
|
0xb8, 0x3b, 0xe1, 0x4b, 0x23, 0xfb, 0x31, 0xdc, 0xc9, 0x2b, 0x04, 0xc7, 0x55, 0xfc, 0x07, 0xcb,
|
||||||
|
0xc3, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x39, 0xd6, 0x39, 0x74, 0xab, 0x11, 0x00, 0x00,
|
||||||
}
|
}
|
||||||
|
@ -66,6 +66,8 @@ message RequestInitChain{
|
|||||||
message RequestBeginBlock{
|
message RequestBeginBlock{
|
||||||
bytes hash = 1;
|
bytes hash = 1;
|
||||||
Header header = 2;
|
Header header = 2;
|
||||||
|
repeated int32 absent_validators = 3;
|
||||||
|
repeated Evidence byzantine_validators = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
message RequestEndBlock{
|
message RequestEndBlock{
|
||||||
@ -187,6 +189,11 @@ message Validator {
|
|||||||
int64 power = 2;
|
int64 power = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message Evidence {
|
||||||
|
bytes pub_key = 1;
|
||||||
|
int64 height = 2;
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------
|
//----------------------------------------
|
||||||
// Abstract types
|
// Abstract types
|
||||||
|
|
||||||
|
@ -8,6 +8,8 @@ import (
|
|||||||
cmn "github.com/tendermint/tmlibs/common"
|
cmn "github.com/tendermint/tmlibs/common"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Validators is a list of validators that implements the Sort interface
|
// Validators is a list of validators that implements the Sort interface
|
||||||
type Validators []*Validator
|
type Validators []*Validator
|
||||||
|
|
||||||
@ -26,13 +28,6 @@ func (v Validators) Swap(i, j int) {
|
|||||||
v[j] = v1
|
v[j] = v1
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------------------
|
|
||||||
|
|
||||||
type validatorPretty struct {
|
|
||||||
PubKey data.Bytes `json:"pub_key"`
|
|
||||||
Power int64 `json:"power"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func ValidatorsString(vs Validators) string {
|
func ValidatorsString(vs Validators) string {
|
||||||
s := make([]validatorPretty, len(vs))
|
s := make([]validatorPretty, len(vs))
|
||||||
for i, v := range vs {
|
for i, v := range vs {
|
||||||
@ -44,3 +39,28 @@ func ValidatorsString(vs Validators) string {
|
|||||||
}
|
}
|
||||||
return string(b)
|
return string(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type validatorPretty struct {
|
||||||
|
PubKey data.Bytes `json:"pub_key"`
|
||||||
|
Power int64 `json:"power"`
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// KVPairInt is a helper method to build KV pair with an integer value.
|
||||||
|
func KVPairInt(key string, val int64) *KVPair {
|
||||||
|
return &KVPair{
|
||||||
|
Key: key,
|
||||||
|
ValueInt: val,
|
||||||
|
ValueType: KVPair_INT,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// KVPairString is a helper method to build KV pair with a string value.
|
||||||
|
func KVPairString(key, val string) *KVPair {
|
||||||
|
return &KVPair{
|
||||||
|
Key: key,
|
||||||
|
ValueString: val,
|
||||||
|
ValueType: KVPair_STRING,
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user