Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
plugin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
link33
plugin
Commits
36f18d1b
Commit
36f18d1b
authored
Nov 12, 2021
by
harrylee
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix a bug for initbroker
parent
0df097c6
Pipeline
#8235
failed with stages
in 0 seconds
Changes
4
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
100 additions
and
108 deletions
+100
-108
brokerdb.go
plugin/dapp/broker/executor/brokerdb.go
+47
-31
query.go
plugin/dapp/broker/executor/query.go
+1
-1
broker.proto
plugin/dapp/broker/proto/broker.proto
+3
-8
broker.pb.go
plugin/dapp/broker/types/broker.pb.go
+49
-68
No files found.
plugin/dapp/broker/executor/brokerdb.go
View file @
36f18d1b
...
...
@@ -13,7 +13,7 @@ import (
//BrokerDB ...
type
BrokerDB
struct
{
api
client
.
QueueProtocolAPI
db
dbm
.
KV
statedb
dbm
.
KV
localdb
dbm
.
KV
txhash
[]
byte
fromaddr
string
...
...
@@ -24,7 +24,7 @@ type BrokerDB struct {
var
(
// DefaultManagerAddr 默认管理员地址
DefaultManagerAddr
=
"1
2qyocayNF7Lv6C9qW4avxs2E7U41fKSfv
"
DefaultManagerAddr
=
"1
4KEKbYtKKQm4wMthSK9J4La4nAiidGozt
"
)
func
newBrokerDB
(
b
*
broker
,
tx
*
types
.
Transaction
,
index
int
)
*
BrokerDB
{
...
...
@@ -55,24 +55,27 @@ func (b *BrokerDB) GetEventKVSet(event *brokertypes.InterchainEvent) (kvset []*t
//初始化broker
func
(
b
*
BrokerDB
)
initBroker
(
payload
*
brokertypes
.
Init
)
(
*
types
.
Receipt
,
error
)
{
//权限检查且只能初始化一次
if
b
.
fromaddr
!=
getManagerAddr
(
b
.
api
.
GetConfig
(),
b
.
db
,
brokerAdmin
,
DefaultManagerAddr
)
{
if
b
.
fromaddr
!=
getManagerAddr
(
b
.
api
.
GetConfig
(),
b
.
state
db
,
brokerAdmin
,
DefaultManagerAddr
)
{
return
nil
,
fmt
.
Errorf
(
"the addr %s is not admin"
,
b
.
fromaddr
)
}
m
:=
make
(
map
[
string
]
uint64
)
//初始化map,填充一些默认值,防止序列化后为nil
m
[
"broker"
]
=
0
meta
:=
&
brokertypes
.
Meta
{
Meta
:
make
(
map
[
string
]
uint64
),
XXX_NoUnkeyedLiteral
:
struct
{}{},
XXX_unrecognized
:
nil
,
XXX_sizecache
:
0
,
Meta
:
m
,
}
var
kvsets
[]
*
types
.
KeyValue
kvsets
=
append
(
kvsets
,
&
types
.
KeyValue
{
Key
:
calOutterMetaKey
(),
Value
:
types
.
Encode
(
meta
)})
kvsets
=
append
(
kvsets
,
&
types
.
KeyValue
{
Key
:
calInnerMetaKey
(),
Value
:
types
.
Encode
(
meta
)})
kvsets
=
append
(
kvsets
,
&
types
.
KeyValue
{
Key
:
calCallBackMetaKey
(),
Value
:
types
.
Encode
(
meta
)})
kvsets
=
append
(
kvsets
,
&
types
.
KeyValue
{
Key
:
calDstRollBackMetaKey
(),
Value
:
types
.
Encode
(
meta
)})
kvsets
=
append
(
kvsets
,
&
types
.
KeyValue
{
Key
:
calOutterMetaKey
(),
Value
:
types
.
Encode
(
meta
)})
kvsets
=
append
(
kvsets
,
&
types
.
KeyValue
{
Key
:
calInnerMetaKey
(),
Value
:
types
.
Encode
(
meta
)})
kvsets
=
append
(
kvsets
,
&
types
.
KeyValue
{
Key
:
calCallBackMetaKey
(),
Value
:
types
.
Encode
(
meta
)})
kvsets
=
append
(
kvsets
,
&
types
.
KeyValue
{
Key
:
calDstRollBackMetaKey
(),
Value
:
types
.
Encode
(
meta
)})
receipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
}
receipt
.
KV
=
append
(
receipt
.
KV
,
kvsets
...
)
receipt
.
KV
=
append
(
receipt
.
KV
,
kvsets
...
)
receipt
.
KV
=
append
(
receipt
.
KV
,
&
types
.
KeyValue
{
Key
:
BxhIDKey
(),
Value
:
types
.
Encode
(
payload
)})
receipt
.
Ty
=
brokertypes
.
TyInitLog
for
_
,
v
:=
range
receipt
.
KV
{
elog
.
Error
(
"KV"
,
"key:"
,
string
(
v
.
GetKey
()),
"value"
,
string
(
v
.
GetValue
()))
}
return
receipt
,
nil
}
...
...
@@ -92,9 +95,9 @@ func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt
//FIXME 权限检查
receipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
}
if
payload
.
ReqType
==
brokertypes
.
Req_Inner
{
meta
,
err
:=
getMeta
(
b
.
db
,
calInnerMetaKey
())
meta
,
err
:=
getMeta
(
b
.
state
db
,
calInnerMetaKey
())
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"broker not init!"
)
return
nil
,
fmt
.
Errorf
(
"broker not init!"
)
}
idx
:=
meta
.
Meta
[
genServicePair
(
payload
.
SrcServiceID
,
payload
.
DstServiceID
)]
if
payload
.
SequenceNum
!=
idx
+
1
{
...
...
@@ -106,9 +109,9 @@ func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt
receipt
.
KV
=
append
(
receipt
.
KV
,
kvset
...
)
}
else
if
payload
.
ReqType
==
brokertypes
.
Req_Callback
{
meta
,
err
:=
getMeta
(
b
.
db
,
calCallBackMetaKey
())
meta
,
err
:=
getMeta
(
b
.
state
db
,
calCallBackMetaKey
())
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"broker not init!"
)
return
nil
,
fmt
.
Errorf
(
"broker not init!"
)
}
idx
:=
meta
.
Meta
[
genServicePair
(
payload
.
SrcServiceID
,
payload
.
DstServiceID
)]
if
payload
.
SequenceNum
!=
idx
+
1
{
...
...
@@ -116,13 +119,13 @@ func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt
}
meta
.
Meta
[
genServicePair
(
payload
.
SrcServiceID
,
payload
.
DstServiceID
)]
=
idx
+
1
kvset
:=
b
.
GetMetaKVSet
(
payload
.
ReqType
,
meta
)
kvset
=
append
(
kvset
,
&
types
.
KeyValue
{
Key
:
outMsgKey
(
genServicePair
(
payload
.
SrcServiceID
,
payload
.
DstServiceID
),
idx
+
1
),
Value
:
types
.
Encode
(
payload
.
Response
)})
// 跨出交易不需要确认是否成功
receipt
.
KV
=
append
(
receipt
.
KV
,
kvset
...
)
}
else
if
payload
.
ReqType
==
brokertypes
.
Req_DstRollback
{
//todo
meta
,
err
:=
getMeta
(
b
.
db
,
calDstRollBackMetaKey
())
meta
,
err
:=
getMeta
(
b
.
state
db
,
calDstRollBackMetaKey
())
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"broker not init!"
)
return
nil
,
fmt
.
Errorf
(
"broker not init!"
)
}
idx
:=
meta
.
Meta
[
genServicePair
(
payload
.
SrcServiceID
,
payload
.
DstServiceID
)]
if
payload
.
SequenceNum
<
idx
+
1
{
...
...
@@ -137,6 +140,7 @@ func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt
receipt
.
Logs
=
append
(
receipt
.
Logs
,
receiptlog
)
return
receipt
,
nil
}
//TODO 重构跨链事件发布
func
(
b
*
BrokerDB
)
emitInterchainEvent
(
payload
*
brokertypes
.
InterchainEvent
)
(
*
types
.
Receipt
,
error
)
{
//FIXME 权限检查,是否需要设定指定账户拥有跨链的权限
...
...
@@ -149,9 +153,9 @@ func (b *BrokerDB) emitInterchainEvent(payload *brokertypes.InterchainEvent) (*t
if
err
!=
nil
{
return
nil
,
brokertypes
.
ErrBrokerStorageTx
}
meta
,
err
:=
getMeta
(
b
.
db
,
calOutterMetaKey
())
meta
,
err
:=
getMeta
(
b
.
state
db
,
calOutterMetaKey
())
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"broker not init!"
)
return
nil
,
fmt
.
Errorf
(
"broker not init!"
)
}
currServiceID
,
err
:=
b
.
getCurrServiceID
()
if
err
!=
nil
{
...
...
@@ -164,7 +168,7 @@ func (b *BrokerDB) emitInterchainEvent(payload *brokertypes.InterchainEvent) (*t
payload
.
Index
=
meta
.
Meta
[
genServicePair
(
currServiceID
,
payload
.
DstServiceID
)]
receipt
.
KV
=
append
(
receipt
.
KV
,
kvset
)
receipt
.
KV
=
append
(
receipt
.
KV
,
b
.
GetEventKVSet
(
payload
)
...
)
receipt
.
KV
=
append
(
receipt
.
KV
,
&
types
.
KeyValue
{
Key
:
outMsgKey
(
genServicePair
(
payload
.
SrcServiceID
,
payload
.
DstServiceID
),
payload
.
Index
),
Value
:
types
.
Encode
(
payload
)})
log
:=
&
brokertypes
.
ReceiptBrokerLog
{
Value
:
&
brokertypes
.
ReceiptBrokerLog_EmitInterchainEvent
{
payload
},
Ty
:
brokertypes
.
TyEmitInterchainEventAction
}
receiptlog
:=
&
types
.
ReceiptLog
{
Ty
:
brokertypes
.
TyEmitInterchainEventLog
,
Log
:
types
.
Encode
(
log
)}
receipt
.
Logs
=
append
(
receipt
.
Logs
,
receiptlog
)
...
...
@@ -184,7 +188,7 @@ func (b *BrokerDB) getCurrServiceID() (string, error) {
func
(
b
*
BrokerDB
)
genFullServiceID
(
serviceId
string
)
(
string
,
error
)
{
//TODO 需要init方法,用于初始化bixhID和appChainID
data
,
err
:=
b
.
db
.
Get
(
BxhIDKey
())
data
,
err
:=
b
.
state
db
.
Get
(
BxhIDKey
())
if
err
!=
nil
{
return
""
,
err
}
...
...
@@ -238,19 +242,19 @@ func getMeta(statedb dbm.KV, key []byte) (*brokertypes.Meta, error) {
}
//去状态数据库中查询message
func
getMessage
(
statedb
dbm
.
KV
,
key
[]
byte
)
(
*
brokertypes
.
Response
,
error
)
{
func
getMessage
(
statedb
dbm
.
KV
,
key
[]
byte
)
(
*
brokertypes
.
InterchainEvent
,
error
)
{
data
,
err
:=
statedb
.
Get
(
key
)
if
err
!=
nil
{
elog
.
Error
(
"getMessage"
,
"not found"
,
"key:"
,
key
)
return
nil
,
err
}
var
resp
brokertypes
.
Response
err
=
types
.
Decode
(
data
,
&
resp
)
var
event
brokertypes
.
InterchainEvent
err
=
types
.
Decode
(
data
,
&
event
)
if
err
!=
nil
{
elog
.
Error
(
"getMessage"
,
"can't decode"
,
"err:"
,
err
.
Error
())
return
nil
,
err
}
return
&
resp
,
nil
return
&
event
,
nil
}
//监听获取跨出事件列表
...
...
@@ -287,18 +291,30 @@ func getOutterMeta(statedb dbm.KV) (*brokertypes.Meta, error) {
func
getCallBackMeta
(
statedb
dbm
.
KV
)
(
*
brokertypes
.
Meta
,
error
)
{
return
getMeta
(
statedb
,
calCallBackMetaKey
())
}
//获取innerMeta
func
getInnerMeta
(
statedb
dbm
.
KV
)
(
*
brokertypes
.
Meta
,
error
)
{
return
getMeta
(
statedb
,
calInnerMetaKey
())
}
//获取message
//获取message
,用来查询跨入交易执行状态
func
getInMessage
(
statedb
dbm
.
KV
,
query
*
brokertypes
.
QueryInMessage
)
(
*
brokertypes
.
Response
,
error
)
{
return
getMessage
(
statedb
,
inMsgKey
(
query
.
InServicePair
,
query
.
SequenceNum
))
data
,
err
:=
statedb
.
Get
(
inMsgKey
(
query
.
InServicePair
,
query
.
SequenceNum
))
if
err
!=
nil
{
elog
.
Error
(
"getInMessage"
,
"not found"
,
"key:"
,
inMsgKey
(
query
.
InServicePair
,
query
.
SequenceNum
))
return
nil
,
err
}
var
response
brokertypes
.
Response
err
=
types
.
Decode
(
data
,
&
response
)
if
err
!=
nil
{
elog
.
Error
(
"getInMessage"
,
"can't decode"
,
"err:"
,
err
.
Error
())
return
nil
,
err
}
return
&
response
,
nil
}
//获取message
func
getOutMessage
(
statedb
dbm
.
KV
,
query
*
brokertypes
.
QueryOutMessage
)
(
*
brokertypes
.
Response
,
error
)
{
//获取message
,实质用来获取跨出事件
func
getOutMessage
(
statedb
dbm
.
KV
,
query
*
brokertypes
.
QueryOutMessage
)
(
*
brokertypes
.
InterchainEvent
,
error
)
{
return
getMessage
(
statedb
,
outMsgKey
(
query
.
InServicePair
,
query
.
SequenceNum
))
}
...
...
plugin/dapp/broker/executor/query.go
View file @
36f18d1b
...
...
@@ -25,7 +25,7 @@ func (b *broker) Query_QueryInMessage(query *brokertypes.QueryInMessage) (*broke
}
//获取outMessage
func
(
b
*
broker
)
Query_QueryOutMessage
(
query
*
brokertypes
.
QueryOutMessage
)
(
*
brokertypes
.
Response
,
error
)
{
func
(
b
*
broker
)
Query_QueryOutMessage
(
query
*
brokertypes
.
QueryOutMessage
)
(
*
brokertypes
.
InterchainEvent
,
error
)
{
return
getOutMessage
(
b
.
GetStateDB
(),
query
)
}
...
...
plugin/dapp/broker/proto/broker.proto
View file @
36f18d1b
...
...
@@ -49,8 +49,8 @@ message UpdateIndex {
string
srcServiceID
=
3
;
//请求类型 0表示信息流入 1表示信息流出 2表示回滚
uint64
reqType
=
4
;
//
响应信息
Response
response
=
5
;
//
跨入交易执行结果更新
Response
response
=
5
;
}
// 跨链事件
message
InterchainEvent
{
...
...
@@ -133,10 +133,6 @@ message Meta {
message
Response
{
//
A status code that should follow the HTTP status codes.
//
状态 0表示开始处理 1表示跨链成功 2表示跨链失败
int32
status
=
1
;
// A message associated with the response code.
string
message
=
2
;
// A payload that can be used to include metadata with this response.
bytes
payload
=
3
;
}
\ No newline at end of file
plugin/dapp/broker/types/broker.pb.go
View file @
36f18d1b
...
...
@@ -344,7 +344,7 @@ type UpdateIndex struct {
SrcServiceID
string
`protobuf:"bytes,3,opt,name=srcServiceID,proto3" json:"srcServiceID,omitempty"`
//请求类型 0表示信息流入 1表示信息流出 2表示回滚
ReqType
uint64
`protobuf:"varint,4,opt,name=reqType,proto3" json:"reqType,omitempty"`
//
响应信息
//
跨入交易执行结果更新
Response
*
Response
`protobuf:"bytes,5,opt,name=response,proto3" json:"response,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
...
...
@@ -421,7 +421,7 @@ type InterchainEvent struct {
SrcServiceID
string
`protobuf:"bytes,3,opt,name=srcServiceID,proto3" json:"srcServiceID,omitempty"`
//跨链交易类型 0表示storage,1表示coins,2表示token......
Type
uint64
`protobuf:"varint,4,opt,name=type,proto3" json:"type,omitempty"`
//
调用方法
//
方法集合分别表示 当前,回调,回滚方法 用,号分割 比如: "interchainGet,interchainSet,interchainRollback"
Func
string
`protobuf:"bytes,5,opt,name=func,proto3" json:"func,omitempty"`
//参数列表
Args
string
`protobuf:"bytes,6,opt,name=args,proto3" json:"args,omitempty"`
...
...
@@ -1008,12 +1008,8 @@ func (m *Meta) GetMeta() map[string]uint64 {
}
type
Response
struct
{
//
A status code that should follow the HTTP status codes.
//
状态 0表示开始处理 1表示跨链成功 2表示跨链失败
Status
int32
`protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"`
// A message associated with the response code.
Message
string
`protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
// A payload that can be used to include metadata with this response.
Payload
[]
byte
`protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
...
@@ -1051,20 +1047,6 @@ func (m *Response) GetStatus() int32 {
return
0
}
func
(
m
*
Response
)
GetMessage
()
string
{
if
m
!=
nil
{
return
m
.
Message
}
return
""
}
func
(
m
*
Response
)
GetPayload
()
[]
byte
{
if
m
!=
nil
{
return
m
.
Payload
}
return
nil
}
func
init
()
{
proto
.
RegisterType
((
*
BrokerAction
)(
nil
),
"types.BrokerAction"
)
proto
.
RegisterType
((
*
Init
)(
nil
),
"types.Init"
)
...
...
@@ -1092,53 +1074,52 @@ func init() {
}
var
fileDescriptor_f209535e190f2bed
=
[]
byte
{
// 732 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xbc
,
0x55
,
0xdd
,
0x4e
,
0xe3
,
0x46
,
0x14
,
0x8e
,
0x1d
,
0x3b
,
0x24
,
0x27
,
0x81
,
0xd0
,
0x81
,
0x22
,
0xab
,
0x17
,
0x2d
,
0xb5
,
0xb8
,
0xa0
,
0xad
,
0x14
,
0x24
,
0x90
,
0xda
,
0xaa
,
0xea
,
0x4d
,
0x42
,
0x91
,
0x92
,
0x0a
,
0x28
,
0x9d
,
0xfd
,
0xd1
,
0xee
,
0xde
,
0x4d
,
0x9c
,
0x43
,
0x98
,
0x25
,
0xb1
,
0xcd
,
0x78
,
0x8c
,
0xf0
,
0xa3
,
0xec
,
0x9b
,
0xec
,
0xd5
,
0xbe
,
0xc8
,
0xbe
,
0xcc
,
0x6a
,
0x7e
,
0x92
,
0x38
,
0x81
,
0xd5
,
0x6a
,
0x11
,
0xda
,
0x1b
,
0x98
,
0xf3
,
0x9d
,
0x33
,
0x73
,
0xbe
,
0x7c
,
0xe7
,
0xc7
,
0xd0
,
0x1a
,
0x8a
,
0xe4
,
0x1a
,
0x45
,
0x27
,
0x15
,
0x89
,
0x4c
,
0x88
,
0x2f
,
0x8b
,
0x14
,
0xb3
,
0xf0
,
0xbd
,
0x0b
,
0xad
,
0x9e
,
0xc6
,
0xbb
,
0x91
,
0xe4
,
0x49
,
0x4c
,
0x7e
,
0x06
,
0x8f
,
0xc7
,
0x5c
,
0x06
,
0xce
,
0xae
,
0xb3
,
0xdf
,
0x3c
,
0x6c
,
0x76
,
0x74
,
0x58
,
0x67
,
0x10
,
0x73
,
0xd9
,
0xaf
,
0x50
,
0xed
,
0x22
,
0x3d
,
0x68
,
0x0b
,
0x1c
,
0xf3
,
0x4c
,
0xa2
,
0x38
,
0xb9
,
0xc3
,
0x48
,
0x26
,
0x22
,
0x70
,
0x75
,
0xf4
,
0x8e
,
0x8d
,
0xa6
,
0xcb
,
0xde
,
0x7e
,
0x85
,
0xae
,
0x5e
,
0x20
,
0x7b
,
0xe0
,
0xb3
,
0x7c
,
0xc4
,
0x65
,
0x50
,
0xd5
,
0x37
,
0x5b
,
0xf6
,
0x66
,
0x57
,
0x61
,
0xfd
,
0x0a
,
0x35
,
0x4e
,
0xf2
,
0x2f
,
0x6c
,
0xe1
,
0x94
,
0xcb
,
0x41
,
0x2c
,
0x51
,
0x44
,
0x57
,
0x8c
,
0xc7
,
0x27
,
0xb7
,
0x18
,
0xcb
,
0xc0
,
0x5b
,
0xca
,
0xb6
,
0xe2
,
0xed
,
0x57
,
0xe8
,
0x43
,
0x97
,
0xc8
,
0xef
,
0xd0
,
0xcc
,
0xd3
,
0x11
,
0x93
,
0x38
,
0x88
,
0x47
,
0x78
,
0x17
,
0xf8
,
0xfa
,
0x0d
,
0x62
,
0xdf
,
0x78
,
0xb1
,
0xf0
,
0xf4
,
0x2b
,
0xb4
,
0x1c
,
0x48
,
0x36
,
0xc0
,
0x95
,
0x45
,
0x50
,
0xdb
,
0x75
,
0xf6
,
0x7d
,
0xea
,
0xca
,
0xa2
,
0xb7
,
0x06
,
0xfe
,
0x2d
,
0x9b
,
0xe4
,
0x18
,
0xfe
,
0x0d
,
0x9e
,
0x92
,
0x85
,
0x6c
,
0x83
,
0x3f
,
0xbc
,
0xbb
,
0x1a
,
0x8c
,
0xb4
,
0x64
,
0x0d
,
0x6a
,
0x0c
,
0xf2
,
0x23
,
0x00
,
0x4b
,
0xd3
,
0x63
,
0x95
,
0x7f
,
0x30
,
0xd2
,
0xfa
,
0x34
,
0x68
,
0x09
,
0x09
,
0x8f
,
0xa0
,
0xbd
,
0x22
,
0x13
,
0xd9
,
0x85
,
0x26
,
0x9a
,
0xe3
,
0x39
,
0x9b
,
0xa2
,
0x7d
,
0xae
,
0x0c
,
0x85
,
0x5d
,
0xf0
,
0xb5
,
0x42
,
0x5f
,
0x0e
,
0x25
,
0x3b
,
0x50
,
0xcb
,
0x24
,
0x93
,
0x79
,
0x66
,
0x73
,
0x5b
,
0x2b
,
0x3c
,
0x80
,
0xd6
,
0x45
,
0x32
,
0x99
,
0xf0
,
0x78
,
0x6c
,
0x64
,
0xf9
,
0x09
,
0xbc
,
0x29
,
0x4a
,
0xb6
,
0x52
,
0xef
,
0x33
,
0x94
,
0x8c
,
0x6a
,
0x47
,
0xf8
,
0xc1
,
0x81
,
0x66
,
0x49
,
0x1e
,
0x95
,
0x3a
,
0xc3
,
0x9b
,
0x1c
,
0xe3
,
0x08
,
0xcf
,
0xf3
,
0xa9
,
0xbe
,
0xe7
,
0xd1
,
0x32
,
0x44
,
0x42
,
0x68
,
0x8d
,
0x32
,
0xf9
,
0x0c
,
0xc5
,
0x2d
,
0x8f
,
0x70
,
0xf0
,
0x8f
,
0x25
,
0xb0
,
0x84
,
0xa9
,
0x98
,
0x4c
,
0x44
,
0x8b
,
0x98
,
0xaa
,
0x89
,
0x29
,
0x63
,
0x24
,
0x80
,
0x35
,
0x81
,
0x37
,
0xcf
,
0x8b
,
0x14
,
0x75
,
0xc5
,
0x3d
,
0x3a
,
0x33
,
0xc9
,
0x6f
,
0x50
,
0x17
,
0x98
,
0xa5
,
0x49
,
0x9c
,
0xa1
,
0x2d
,
0x64
,
0x7b
,
0xde
,
0x7a
,
0x06
,
0xa6
,
0xf3
,
0x80
,
0xf0
,
0xa3
,
0x03
,
0xed
,
0xd5
,
0x66
,
0xd8
,
0x06
,
0x9f
,
0xeb
,
0x36
,
0x30
,
0xf4
,
0x8d
,
0xf1
,
0x64
,
0xc4
,
0x09
,
0x78
,
0x72
,
0xc1
,
0x5a
,
0x9f
,
0x15
,
0x76
,
0x99
,
0xc7
,
0x91
,
0xa6
,
0xdb
,
0xa0
,
0xfa
,
0xac
,
0x30
,
0x26
,
0xc6
,
0x99
,
0x6e
,
0xae
,
0x06
,
0xd5
,
0x67
,
0x55
,
0x37
,
0xf5
,
0x3f
,
0x1a
,
0x06
,
0x6b
,
0xa6
,
0x6e
,
0xc6
,
0x9a
,
0xe1
,
0x62
,
0x18
,
0xd4
,
0x17
,
0xb8
,
0x18
,
0x86
,
0xef
,
0x5c
,
0xd8
,
0xa4
,
0x18
,
0x21
,
0x4f
,
0xa5
,
0x99
,
0xe3
,
0xd3
,
0x64
,
0xfc
,
0xd0
,
0x84
,
0x3a
,
0x8f
,
0x9e
,
0x50
,
0xf7
,
0x11
,
0x13
,
0x5a
,
0x7d
,
0x82
,
0x09
,
0xf5
,
0xbe
,
0x6e
,
0x42
,
0xfd
,
0xfb
,
0x13
,
0x2a
,
0x61
,
0xfb
,
0xff
,
0x1c
,
0x45
,
0xf1
,
0x4d
,
0xab
,
0x1f
,
0x76
,
0x61
,
0x4b
,
0x27
,
0x3c
,
0x9e
,
0x27
,
0x3c
,
0xe5
,
0x99
,
0x24
,
0xbf
,
0x82
,
0x37
,
0xe1
,
0x99
,
0x5a
,
0xac
,
0xd5
,
0xcf
,
0x4b
,
0x43
,
0x75
,
0x4c
,
0xd8
,
0x86
,
0x75
,
0x4d
,
0xfc
,
0x9c
,
0x4f
,
0x2e
,
0x98
,
0x60
,
0xd3
,
0xf0
,
0x3b
,
0x68
,
0x6b
,
0xe0
,
0xbf
,
0x5c
,
0x4a
,
0x14
,
0x6a
,
0x3a
,
0xc3
,
0x4d
,
0xd8
,
0xb0
,
0x3f
,
0x2e
,
0xb6
,
0xc8
,
0xab
,
0x39
,
0x72
,
0x86
,
0x59
,
0xc6
,
0xc6
,
0x48
,
0xf6
,
0x60
,
0x9d
,
0xc7
,
0x96
,
0xd9
,
0x05
,
0xe3
,
0xc2
,
0x2e
,
0x8a
,
0x65
,
0x70
,
0x75
,
0xa2
,
0xdd
,
0x7b
,
0x13
,
0x1d
,
0xbe
,
0x5e
,
0xa4
,
0x7f
,
0xea
,
0xa7
,
0x7b
,
0x00
,
0xa6
,
0x6f
,
0x07
,
0xf1
,
0x65
,
0xf2
,
0xc8
,
0x5d
,
0xfa
,
0x16
,
0x3c
,
0x25
,
0x00
,
0xf9
,
0x65
,
0xbe
,
0xcb
,
0x94
,
0xc4
,
0xdf
,
0x97
,
0x76
,
0x99
,
0xfe
,
0x73
,
0x12
,
0x4b
,
0x51
,
0x98
,
0xad
,
0xf6
,
0xc3
,
0x1f
,
0xd0
,
0x98
,
0x43
,
0x64
,
0x13
,
0xaa
,
0xd7
,
0x58
,
0xd8
,
0x9c
,
0xea
,
0xa8
,
0x78
,
0xe8
,
0x16
,
0xb2
,
0x8c
,
0x8d
,
0xf1
,
0x97
,
0xfb
,
0xa7
,
0x13
,
0xbe
,
0x84
,
0xfa
,
0x6c
,
0xc7
,
0x94
,
0x76
,
0xac
,
0xa3
,
0x9b
,
0xcf
,
0x5a
,
0x6a
,
0x71
,
0x4d
,
0x8d
,
0x4c
,
0x96
,
0xec
,
0xcc
,
0x54
,
0x9e
,
0x94
,
0x15
,
0x93
,
0x84
,
0x8d
,
0x74
,
0xeb
,
0xb4
,
0xe8
,
0xcc
,
0x3c
,
0xac
,
0x43
,
0xcd
,
0x7c
,
0x9f
,
0x7b
,
0xf0
,
0xa6
,
0xde
,
0xe9
,
0x1c
,
0x68
,
0xee
,
0xc3
,
0x9a
,
0xfe
,
0x58
,
0x1f
,
0x7d
,
0x0a
,
0x00
,
0x00
,
0xff
,
0xff
,
0xb2
,
0x03
,
0x83
,
0x52
,
0xbc
,
0x07
,
0x00
,
0x00
,
// 710 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xbc
,
0x55
,
0xdd
,
0x4e
,
0xdb
,
0x4a
,
0x10
,
0x8e
,
0x1d
,
0x3b
,
0x24
,
0x93
,
0x40
,
0x38
,
0x0b
,
0x07
,
0x59
,
0xe7
,
0xe2
,
0x94
,
0xae
,
0xb8
,
0xa0
,
0xad
,
0x14
,
0x24
,
0x90
,
0xda
,
0xaa
,
0xea
,
0x4d
,
0x42
,
0x91
,
0x92
,
0x0a
,
0x28
,
0xdd
,
0xb6
,
0x52
,
0xdb
,
0x3b
,
0xc7
,
0x19
,
0xc2
,
0x96
,
0xc4
,
0x36
,
0xeb
,
0x35
,
0x22
,
0x8f
,
0xd2
,
0x37
,
0xe9
,
0x55
,
0x5f
,
0xa4
,
0x2f
,
0x53
,
0xed
,
0x0f
,
0x89
,
0x13
,
0xa8
,
0xaa
,
0x22
,
0xd4
,
0x1b
,
0xd8
,
0xf9
,
0x66
,
0x76
,
0x67
,
0xf2
,
0xcd
,
0x7c
,
0x63
,
0x68
,
0xf4
,
0x45
,
0x72
,
0x8e
,
0xa2
,
0x95
,
0x8a
,
0x44
,
0x26
,
0xc4
,
0x97
,
0x93
,
0x14
,
0x33
,
0xfa
,
0xcd
,
0x85
,
0x46
,
0x47
,
0xe3
,
0xed
,
0x48
,
0xf2
,
0x24
,
0x26
,
0x0f
,
0xc1
,
0xe3
,
0x31
,
0x97
,
0x81
,
0xb3
,
0xe9
,
0x6c
,
0xd7
,
0x77
,
0xeb
,
0x2d
,
0x1d
,
0xd6
,
0xea
,
0xc5
,
0x5c
,
0x76
,
0x4b
,
0x4c
,
0xbb
,
0x48
,
0x07
,
0x9a
,
0x02
,
0x87
,
0x3c
,
0x93
,
0x28
,
0x0e
,
0xae
,
0x30
,
0x92
,
0x89
,
0x08
,
0x5c
,
0x1d
,
0xbd
,
0x61
,
0xa3
,
0xd9
,
0xbc
,
0xb7
,
0x5b
,
0x62
,
0x8b
,
0x17
,
0xc8
,
0x16
,
0xf8
,
0x61
,
0x3e
,
0xe0
,
0x32
,
0x28
,
0xeb
,
0x9b
,
0x0d
,
0x7b
,
0xb3
,
0xad
,
0xb0
,
0x6e
,
0x89
,
0x19
,
0x27
,
0x79
,
0x0d
,
0x6b
,
0x38
,
0xe6
,
0xb2
,
0x17
,
0x4b
,
0x14
,
0xd1
,
0x59
,
0xc8
,
0xe3
,
0x83
,
0x4b
,
0x8c
,
0x65
,
0xe0
,
0xcd
,
0x65
,
0x5b
,
0xf0
,
0x76
,
0x4b
,
0xec
,
0xb6
,
0x4b
,
0xe4
,
0x29
,
0xd4
,
0xf3
,
0x74
,
0x10
,
0x4a
,
0xec
,
0xc5
,
0x03
,
0xbc
,
0x0a
,
0x7c
,
0xfd
,
0x06
,
0xb1
,
0x6f
,
0x7c
,
0x98
,
0x79
,
0xba
,
0x25
,
0x56
,
0x0c
,
0x24
,
0x2b
,
0xe0
,
0xca
,
0x49
,
0x50
,
0xd9
,
0x74
,
0xb6
,
0x7d
,
0xe6
,
0xca
,
0x49
,
0x67
,
0x09
,
0xfc
,
0xcb
,
0x70
,
0x94
,
0x23
,
0x7d
,
0x09
,
0x9e
,
0xa2
,
0x85
,
0xac
,
0x83
,
0xdf
,
0xbf
,
0x3a
,
0xeb
,
0x0d
,
0x34
,
0x65
,
0x35
,
0x66
,
0x0c
,
0xf2
,
0x3f
,
0x40
,
0x98
,
0xa6
,
0xfb
,
0x2a
,
0x7f
,
0x6f
,
0xa0
,
0xf9
,
0xa9
,
0xb1
,
0x02
,
0x42
,
0xf7
,
0xa0
,
0xb9
,
0x40
,
0x13
,
0xd9
,
0x84
,
0x3a
,
0x9a
,
0xe3
,
0x71
,
0x38
,
0x46
,
0xfb
,
0x5c
,
0x11
,
0xa2
,
0x6d
,
0xf0
,
0x35
,
0x43
,
0xbf
,
0x0f
,
0x25
,
0x1b
,
0x50
,
0xc9
,
0x64
,
0x28
,
0xf3
,
0xcc
,
0xe6
,
0xb6
,
0x16
,
0xdd
,
0x81
,
0xc6
,
0x49
,
0x32
,
0x1a
,
0xf1
,
0x78
,
0x68
,
0x68
,
0x79
,
0x00
,
0xde
,
0x18
,
0x65
,
0xb8
,
0xd0
,
0xef
,
0x23
,
0x94
,
0x21
,
0xd3
,
0x0e
,
0xfa
,
0xdd
,
0x81
,
0x7a
,
0x81
,
0x1e
,
0x95
,
0x3a
,
0xc3
,
0x8b
,
0x1c
,
0xe3
,
0x08
,
0x8f
,
0xf3
,
0xb1
,
0xbe
,
0xe7
,
0xb1
,
0x22
,
0x44
,
0x28
,
0x34
,
0x06
,
0x99
,
0x7c
,
0x87
,
0xe2
,
0x92
,
0x47
,
0xd8
,
0x7b
,
0x65
,
0x0b
,
0x98
,
0xc3
,
0x54
,
0x4c
,
0x26
,
0xa2
,
0x59
,
0x4c
,
0xd9
,
0xc4
,
0x14
,
0x31
,
0x12
,
0xc0
,
0x92
,
0xc0
,
0x8b
,
0xf7
,
0x93
,
0x14
,
0x75
,
0xc7
,
0x3d
,
0x76
,
0x6d
,
0x92
,
0x27
,
0x50
,
0x15
,
0x98
,
0xa5
,
0x49
,
0x9c
,
0xa1
,
0x6d
,
0x64
,
0x73
,
0x3a
,
0x7a
,
0x06
,
0x66
,
0xd3
,
0x00
,
0xfa
,
0xc3
,
0x81
,
0xe6
,
0xe2
,
0x30
,
0xac
,
0x83
,
0xcf
,
0xf5
,
0x18
,
0x98
,
0xf2
,
0x8d
,
0x71
,
0x6f
,
0x85
,
0x13
,
0xf0
,
0xe4
,
0xac
,
0x6a
,
0x7d
,
0x56
,
0xd8
,
0x69
,
0x1e
,
0x47
,
0xba
,
0xdc
,
0x1a
,
0xd3
,
0x67
,
0x85
,
0x85
,
0x62
,
0x98
,
0xe9
,
0xe1
,
0xaa
,
0x31
,
0x7d
,
0x56
,
0x7d
,
0x53
,
0xff
,
0xa3
,
0x7e
,
0xb0
,
0x64
,
0xfa
,
0x66
,
0xac
,
0x6b
,
0x5c
,
0xf4
,
0x83
,
0xea
,
0x0c
,
0x17
,
0x7d
,
0xfa
,
0xd5
,
0x85
,
0x55
,
0x86
,
0x11
,
0xf2
,
0x54
,
0x1a
,
0x1d
,
0x1f
,
0x26
,
0xc3
,
0xdb
,
0x14
,
0xea
,
0xdc
,
0x59
,
0xa1
,
0xee
,
0x1d
,
0x14
,
0x5a
,
0xbe
,
0x07
,
0x85
,
0x7a
,
0x7f
,
0xa6
,
0x50
,
0xff
,
0xa6
,
0x42
,
0x25
,
0xac
,
0xbf
,
0xcd
,
0x51
,
0x4c
,
0xfe
,
0x6a
,
0xf7
,
0x69
,
0x1b
,
0xd6
,
0x74
,
0xc2
,
0xfd
,
0x69
,
0xc2
,
0x43
,
0x9e
,
0x49
,
0xf2
,
0x18
,
0xbc
,
0x11
,
0xcf
,
0xd4
,
0x62
,
0x2d
,
0xff
,
0x9a
,
0x1a
,
0xa6
,
0x63
,
0x68
,
0x13
,
0x96
,
0x75
,
0xe1
,
0xc7
,
0x7c
,
0x74
,
0x12
,
0x8a
,
0x70
,
0x4c
,
0xff
,
0x81
,
0xa6
,
0x06
,
0xde
,
0xe4
,
0x52
,
0xa2
,
0x50
,
0xea
,
0xa4
,
0xab
,
0xb0
,
0x62
,
0x7f
,
0x5c
,
0x6c
,
0x91
,
0x8f
,
0x53
,
0xe4
,
0x08
,
0xb3
,
0x2c
,
0x1c
,
0x22
,
0xd9
,
0x82
,
0x65
,
0x1e
,
0xdb
,
0xca
,
0x4e
,
0x42
,
0x2e
,
0xec
,
0xa2
,
0x98
,
0x07
,
0x17
,
0x15
,
0xed
,
0xde
,
0x50
,
0x34
,
0xfd
,
0x34
,
0x4b
,
0x7f
,
0xdf
,
0x4f
,
0x77
,
0x00
,
0xcc
,
0xdc
,
0xf6
,
0xe2
,
0xd3
,
0xe4
,
0x8e
,
0xbb
,
0xf4
,
0x0b
,
0x78
,
0x8a
,
0x00
,
0xf2
,
0x68
,
0xba
,
0xcb
,
0x14
,
0xc5
,
0xff
,
0x16
,
0x76
,
0x99
,
0xfe
,
0x73
,
0x10
,
0x4b
,
0x31
,
0x31
,
0x5b
,
0xed
,
0xbf
,
0x67
,
0x50
,
0x9b
,
0x42
,
0x64
,
0x15
,
0xca
,
0xe7
,
0x38
,
0xb1
,
0x39
,
0xd5
,
0x51
,
0xd5
,
0xa1
,
0x47
,
0xc8
,
0x56
,
0x6c
,
0x8c
,
0x17
,
0xee
,
0x73
,
0x87
,
0x52
,
0xa8
,
0x5e
,
0xef
,
0x98
,
0xc2
,
0x8e
,
0x75
,
0xf4
,
0xf0
,
0x59
,
0x6b
,
0xb7
,
0x0a
,
0x15
,
0xf3
,
0xad
,
0xed
,
0xc0
,
0xe7
,
0x6a
,
0xab
,
0xb5
,
0xa3
,
0xeb
,
0xe8
,
0x57
,
0xf4
,
0x87
,
0x77
,
0xef
,
0x67
,
0x00
,
0x00
,
0x00
,
0xff
,
0xff
,
0x2a
,
0x8f
,
0x2d
,
0x0d
,
0x88
,
0x07
,
0x00
,
0x00
,
}
// Reference imports to suppress errors if they are not otherwise used.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment