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
b48db05f
Commit
b48db05f
authored
Nov 06, 2019
by
pengjun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
#627 fix test error
parent
1330dd41
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
389 additions
and
186 deletions
+389
-186
cmd.go
plugin/dapp/collateralize/commands/cmd.go
+29
-3
collateralizedb.go
plugin/dapp/collateralize/executor/collateralizedb.go
+37
-13
exec_local.go
plugin/dapp/collateralize/executor/exec_local.go
+11
-11
query.go
plugin/dapp/collateralize/executor/query.go
+31
-5
collateralize.proto
plugin/dapp/collateralize/proto/collateralize.proto
+13
-0
collateralize.go
plugin/dapp/collateralize/types/collateralize.go
+1
-0
collateralize.pb.go
plugin/dapp/collateralize/types/collateralize.pb.go
+170
-71
tx.go
plugin/dapp/collateralize/types/tx.go
+1
-0
cmd.go
plugin/dapp/issuance/commands/cmd.go
+1
-0
exec_del_local.go
plugin/dapp/issuance/executor/exec_del_local.go
+8
-8
exec_local.go
plugin/dapp/issuance/executor/exec_local.go
+7
-7
issuancedb.go
plugin/dapp/issuance/executor/issuancedb.go
+3
-3
query.go
plugin/dapp/issuance/executor/query.go
+2
-0
issuance.proto
plugin/dapp/issuance/proto/issuance.proto
+1
-0
issuance.pb.go
plugin/dapp/issuance/types/issuance.pb.go
+74
-65
No files found.
plugin/dapp/collateralize/commands/cmd.go
View file @
b48db05f
...
@@ -285,6 +285,7 @@ func addCollateralizeManageFlags(cmd *cobra.Command) {
...
@@ -285,6 +285,7 @@ func addCollateralizeManageFlags(cmd *cobra.Command) {
cmd
.
Flags
()
.
Float32P
(
"liquidationRatio"
,
"l"
,
0
,
"liquidationRatio"
)
cmd
.
Flags
()
.
Float32P
(
"liquidationRatio"
,
"l"
,
0
,
"liquidationRatio"
)
cmd
.
Flags
()
.
Float32P
(
"stabilityFeeRatio"
,
"s"
,
0
,
"stabilityFeeRatio"
)
cmd
.
Flags
()
.
Float32P
(
"stabilityFeeRatio"
,
"s"
,
0
,
"stabilityFeeRatio"
)
cmd
.
Flags
()
.
Uint64P
(
"period"
,
"p"
,
0
,
"period"
)
cmd
.
Flags
()
.
Uint64P
(
"period"
,
"p"
,
0
,
"period"
)
cmd
.
Flags
()
.
Uint64P
(
"totalBalance"
,
"t"
,
0
,
"totalBalance"
)
}
}
func
CollateralizeManage
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
func
CollateralizeManage
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
...
@@ -299,12 +300,13 @@ func CollateralizeManage(cmd *cobra.Command, args []string) {
...
@@ -299,12 +300,13 @@ func CollateralizeManage(cmd *cobra.Command, args []string) {
liquidationRatio
,
_
:=
cmd
.
Flags
()
.
GetFloat32
(
"liquidationRatio"
)
liquidationRatio
,
_
:=
cmd
.
Flags
()
.
GetFloat32
(
"liquidationRatio"
)
stabilityFeeRatio
,
_
:=
cmd
.
Flags
()
.
GetFloat32
(
"stabilityFeeRatio"
)
stabilityFeeRatio
,
_
:=
cmd
.
Flags
()
.
GetFloat32
(
"stabilityFeeRatio"
)
period
,
_
:=
cmd
.
Flags
()
.
GetUint64
(
"period"
)
period
,
_
:=
cmd
.
Flags
()
.
GetUint64
(
"period"
)
totalBalance
,
_
:=
cmd
.
Flags
()
.
GetUint64
(
"totalBalance"
)
params
:=
&
rpctypes
.
CreateTxIn
{
params
:=
&
rpctypes
.
CreateTxIn
{
Execer
:
cfg
.
ExecName
(
pkt
.
CollateralizeX
),
Execer
:
cfg
.
ExecName
(
pkt
.
CollateralizeX
),
ActionName
:
"CollateralizeManage"
,
ActionName
:
"CollateralizeManage"
,
Payload
:
[]
byte
(
fmt
.
Sprintf
(
"{
\"
debtCeiling
\"
:%d,
\"
liquidationRatio
\"
:%f,
\"
stabilityFeeRatio
\"
:%f,
\"
period
\"
:%d}"
,
Payload
:
[]
byte
(
fmt
.
Sprintf
(
"{
\"
debtCeiling
\"
:%d,
\"
liquidationRatio
\"
:%f,
\"
stabilityFeeRatio
\"
:%f,
\"
period
\"
:%d
,
\"
totalBalance
\"
:%d,
}"
,
debtCeiling
,
liquidationRatio
,
stabilityFeeRatio
,
period
)),
debtCeiling
,
liquidationRatio
,
stabilityFeeRatio
,
period
,
totalBalance
)),
}
}
var
res
string
var
res
string
...
@@ -312,6 +314,27 @@ func CollateralizeManage(cmd *cobra.Command, args []string) {
...
@@ -312,6 +314,27 @@ func CollateralizeManage(cmd *cobra.Command, args []string) {
ctx
.
RunWithoutMarshal
()
ctx
.
RunWithoutMarshal
()
}
}
func
CollateralizeQueryCfgCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"config"
,
Short
:
"Query config result"
,
Run
:
CollateralizeQueryConfig
,
}
return
cmd
}
func
CollateralizeQueryConfig
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
var
params
rpctypes
.
Query4Jrpc
params
.
Execer
=
pkt
.
CollateralizeX
params
.
FuncName
=
"CollateralizeConfig"
var
res
pkt
.
RepCollateralizeConfig
ctx
:=
jsonrpc
.
NewRPCCtx
(
rpcLaddr
,
"Chain33.Query"
,
params
,
&
res
)
ctx
.
Run
()
}
// CollateralizeQueryCmd 查询命令行
// CollateralizeQueryCmd 查询命令行
func
CollateralizeQueryCmd
()
*
cobra
.
Command
{
func
CollateralizeQueryCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
...
@@ -320,6 +343,9 @@ func CollateralizeQueryCmd() *cobra.Command {
...
@@ -320,6 +343,9 @@ func CollateralizeQueryCmd() *cobra.Command {
Run
:
CollateralizeQuery
,
Run
:
CollateralizeQuery
,
}
}
addCollateralizeQueryFlags
(
cmd
)
addCollateralizeQueryFlags
(
cmd
)
cmd
.
AddCommand
(
CollateralizeQueryCfgCmd
(),
)
return
cmd
return
cmd
}
}
...
@@ -437,7 +463,7 @@ func CollateralizeQuery(cmd *cobra.Command, args []string) {
...
@@ -437,7 +463,7 @@ func CollateralizeQuery(cmd *cobra.Command, args []string) {
ctx
:=
jsonrpc
.
NewRPCCtx
(
rpcLaddr
,
"Chain33.Query"
,
params
,
&
res
)
ctx
:=
jsonrpc
.
NewRPCCtx
(
rpcLaddr
,
"Chain33.Query"
,
params
,
&
res
)
ctx
.
Run
()
ctx
.
Run
()
}
else
{
}
else
{
fmt
.
Println
(
"Error: requeres at least one of
gameID
, address or status"
)
fmt
.
Println
(
"Error: requeres at least one of
collId
, address or status"
)
cmd
.
Help
()
cmd
.
Help
()
}
}
}
}
plugin/dapp/collateralize/executor/collateralizedb.go
View file @
b48db05f
...
@@ -30,6 +30,7 @@ const (
...
@@ -30,6 +30,7 @@ const (
DefaultLiquidationRatio
=
0.4
// 默认质押比
DefaultLiquidationRatio
=
0.4
// 默认质押比
DefaultStabilityFeeRation
=
0.08
// 默认稳定费
DefaultStabilityFeeRation
=
0.08
// 默认稳定费
DefaultPeriod
=
3600
*
24
*
365
// 默认合约限期
DefaultPeriod
=
3600
*
24
*
365
// 默认合约限期
DefaultCollTotalBalance
=
0
// 默认放贷总额
PriceWarningRate
=
1.3
// 价格提前预警率
PriceWarningRate
=
1.3
// 价格提前预警率
ExpireWarningTime
=
3600
*
24
*
10
// 提前10天超时预警
ExpireWarningTime
=
3600
*
24
*
10
// 提前10天超时预警
)
)
...
@@ -265,29 +266,46 @@ func (action *Action) CollateralizeManage(manage *pty.CollateralizeManage) (*typ
...
@@ -265,29 +266,46 @@ func (action *Action) CollateralizeManage(manage *pty.CollateralizeManage) (*typ
return
nil
,
pty
.
ErrRiskParam
return
nil
,
pty
.
ErrRiskParam
}
}
collConfig
:=
&
pty
.
CollateralizeManage
{}
var
collConfig
*
pty
.
CollateralizeManage
manConfig
,
_
:=
getCollateralizeConfig
(
action
.
db
)
if
manConfig
==
nil
{
manConfig
=
&
pty
.
CollateralizeManage
{
DebtCeiling
:
DefaultDebtCeiling
,
LiquidationRatio
:
DefaultLiquidationRatio
,
StabilityFeeRatio
:
DefaultStabilityFeeRation
,
Period
:
DefaultPeriod
,
CollTotalBalance
:
DefaultCollTotalBalance
,
}
}
if
manage
.
StabilityFeeRatio
!=
0
{
if
manage
.
StabilityFeeRatio
!=
0
{
collConfig
.
StabilityFeeRatio
=
manage
.
StabilityFeeRatio
collConfig
.
StabilityFeeRatio
=
manage
.
StabilityFeeRatio
}
else
{
}
else
{
collConfig
.
StabilityFeeRatio
=
DefaultStabilityFeeRation
collConfig
.
StabilityFeeRatio
=
manConfig
.
StabilityFeeRatio
}
}
if
manage
.
Period
!=
0
{
if
manage
.
Period
!=
0
{
collConfig
.
Period
=
manage
.
Period
collConfig
.
Period
=
manage
.
Period
}
else
{
}
else
{
collConfig
.
Period
=
Default
Period
collConfig
.
Period
=
manConfig
.
Period
}
}
if
manage
.
LiquidationRatio
!=
0
{
if
manage
.
LiquidationRatio
!=
0
{
collConfig
.
LiquidationRatio
=
manage
.
LiquidationRatio
collConfig
.
LiquidationRatio
=
manage
.
LiquidationRatio
}
else
{
}
else
{
collConfig
.
LiquidationRatio
=
Default
LiquidationRatio
collConfig
.
LiquidationRatio
=
manConfig
.
LiquidationRatio
}
}
if
manage
.
DebtCeiling
!=
0
{
if
manage
.
DebtCeiling
!=
0
{
collConfig
.
DebtCeiling
=
manage
.
DebtCeiling
collConfig
.
DebtCeiling
=
manage
.
DebtCeiling
}
else
{
}
else
{
collConfig
.
DebtCeiling
=
DefaultDebtCeiling
collConfig
.
DebtCeiling
=
manConfig
.
DebtCeiling
}
if
manage
.
CollTotalBalance
!=
0
{
collConfig
.
CollTotalBalance
=
manage
.
CollTotalBalance
}
else
{
collConfig
.
CollTotalBalance
=
manConfig
.
CollTotalBalance
}
}
value
:=
types
.
Encode
(
collConfig
)
value
:=
types
.
Encode
(
collConfig
)
...
@@ -298,8 +316,8 @@ func (action *Action) CollateralizeManage(manage *pty.CollateralizeManage) (*typ
...
@@ -298,8 +316,8 @@ func (action *Action) CollateralizeManage(manage *pty.CollateralizeManage) (*typ
return
receipt
,
nil
return
receipt
,
nil
}
}
func
(
action
*
Action
)
getCollateralizeConfig
(
)
(
*
pty
.
CollateralizeManage
,
error
)
{
func
getCollateralizeConfig
(
db
dbm
.
KV
)
(
*
pty
.
CollateralizeManage
,
error
)
{
data
,
err
:=
action
.
db
.
Get
(
ConfigKey
())
data
,
err
:=
db
.
Get
(
ConfigKey
())
if
err
!=
nil
{
if
err
!=
nil
{
clog
.
Debug
(
"getCollateralizeConfig"
,
"error"
,
err
)
clog
.
Debug
(
"getCollateralizeConfig"
,
"error"
,
err
)
return
nil
,
err
return
nil
,
err
...
@@ -375,9 +393,15 @@ func (action *Action) CollateralizeCreate(create *pty.CollateralizeCreate) (*typ
...
@@ -375,9 +393,15 @@ func (action *Action) CollateralizeCreate(create *pty.CollateralizeCreate) (*typ
// 获取借贷配置
// 获取借贷配置
var
collcfg
*
pty
.
CollateralizeManage
var
collcfg
*
pty
.
CollateralizeManage
cfg
,
err
:=
action
.
getCollateralizeConfig
()
cfg
,
err
:=
getCollateralizeConfig
(
action
.
db
)
if
err
!=
nil
{
if
cfg
==
nil
{
collcfg
=
&
pty
.
CollateralizeManage
{
DebtCeiling
:
DefaultDebtCeiling
,
LiquidationRatio
:
DefaultLiquidationRatio
,
StabilityFeeRatio
:
DefaultStabilityFeeRation
,
Period
:
DefaultPeriod
}
collcfg
=
&
pty
.
CollateralizeManage
{
DebtCeiling
:
DefaultDebtCeiling
,
LiquidationRatio
:
DefaultLiquidationRatio
,
StabilityFeeRatio
:
DefaultStabilityFeeRation
,
Period
:
DefaultPeriod
,
CollTotalBalance
:
DefaultCollTotalBalance
,
}
}
else
{
}
else
{
collcfg
=
cfg
collcfg
=
cfg
}
}
...
@@ -835,9 +859,9 @@ func (action *Action) systemLiquidation(coll *pty.Collateralize, price float32)
...
@@ -835,9 +859,9 @@ func (action *Action) systemLiquidation(coll *pty.Collateralize, price float32)
collDB
:=
&
CollateralizeDB
{
*
coll
}
collDB
:=
&
CollateralizeDB
{
*
coll
}
for
index
,
borrowRecord
:=
range
coll
.
BorrowRecords
{
for
index
,
borrowRecord
:=
range
coll
.
BorrowRecords
{
if
borrowRecord
.
LiquidationPrice
*
PriceWarningRate
<
price
{
if
borrowRecord
.
LiquidationPrice
*
PriceWarningRate
<
price
{
if
borrowRecord
.
Status
==
pty
.
CollateralizeUserStatus
SystemLiquidate
{
if
borrowRecord
.
Status
==
pty
.
CollateralizeUserStatus
Warning
{
borrowRecord
.
Status
=
borrowRecord
.
Pre
Status
borrowRecord
.
PreStatus
=
borrowRecord
.
Status
borrowRecord
.
PreStatus
=
pty
.
CollateralizeUserStatusSystemLiquid
ate
borrowRecord
.
Status
=
pty
.
CollateralizeUserStatusCre
ate
}
}
continue
continue
}
}
...
...
plugin/dapp/collateralize/executor/exec_local.go
View file @
b48db05f
...
@@ -37,32 +37,32 @@ func (c *Collateralize) execLocal(tx *types.Transaction, receipt *types.ReceiptD
...
@@ -37,32 +37,32 @@ func (c *Collateralize) execLocal(tx *types.Transaction, receipt *types.ReceiptD
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordStatus
(
collateralizeLog
.
PreStatus
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordStatus
(
collateralizeLog
.
PreStatus
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordStatus
(
collateralizeLog
.
Status
,
collateralizeLog
.
CollateralizeId
,
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordStatus
(
collateralizeLog
.
Status
,
collateralizeLog
.
CollateralizeId
,
collateralizeLog
.
RecordId
,
collateralizeLog
.
Index
)
...
)
collateralizeLog
.
RecordId
,
collateralizeLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordAddr
(
collateralizeLog
.
AccountAddr
,
collateralizeLog
.
PreIndex
)
...
)
//
set.KV = append(set.KV, c.deleteCollateralizeRecordAddr(collateralizeLog.AccountAddr, collateralizeLog.PreIndex)...)
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordAddr
(
collateralizeLog
.
AccountAddr
,
collateralizeLog
.
CollateralizeId
,
//
set.KV = append(set.KV, c.addCollateralizeRecordAddr(collateralizeLog.AccountAddr, collateralizeLog.CollateralizeId,
collateralizeLog
.
RecordId
,
collateralizeLog
.
Index
)
...
)
//
collateralizeLog.RecordId, collateralizeLog.Index)...)
}
}
break
break
case
pty
.
TyLogCollateralizeRepay
:
case
pty
.
TyLogCollateralizeRepay
:
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordStatus
(
collateralizeLog
.
PreStatus
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordStatus
(
collateralizeLog
.
PreStatus
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordStatus
(
collateralizeLog
.
Status
,
collateralizeLog
.
CollateralizeId
,
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordStatus
(
collateralizeLog
.
Status
,
collateralizeLog
.
CollateralizeId
,
collateralizeLog
.
RecordId
,
collateralizeLog
.
Index
)
...
)
collateralizeLog
.
RecordId
,
collateralizeLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordAddr
(
collateralizeLog
.
AccountAddr
,
collateralizeLog
.
PreIndex
)
...
)
//
set.KV = append(set.KV, c.deleteCollateralizeRecordAddr(collateralizeLog.AccountAddr, collateralizeLog.PreIndex)...)
break
break
case
pty
.
TyLogCollateralizeFeed
:
case
pty
.
TyLogCollateralizeFeed
:
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordStatus
(
collateralizeLog
.
PreStatus
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordStatus
(
collateralizeLog
.
PreStatus
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordStatus
(
collateralizeLog
.
Status
,
collateralizeLog
.
CollateralizeId
,
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordStatus
(
collateralizeLog
.
Status
,
collateralizeLog
.
CollateralizeId
,
collateralizeLog
.
RecordId
,
collateralizeLog
.
Index
)
...
)
collateralizeLog
.
RecordId
,
collateralizeLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordAddr
(
collateralizeLog
.
AccountAddr
,
collateralizeLog
.
PreIndex
)
...
)
//
set.KV = append(set.KV, c.deleteCollateralizeRecordAddr(collateralizeLog.AccountAddr, collateralizeLog.PreIndex)...)
// 如果没有被清算,需要把地址索引更新
//
//
如果没有被清算,需要把地址索引更新
if
collateralizeLog
.
Status
==
pty
.
CollateralizeUserStatusWarning
||
collateralizeLog
.
Status
==
pty
.
CollateralizeUserStatusExpire
{
//
if collateralizeLog.Status == pty.CollateralizeUserStatusWarning || collateralizeLog.Status == pty.CollateralizeUserStatusExpire {
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordAddr
(
collateralizeLog
.
AccountAddr
,
collateralizeLog
.
CollateralizeId
,
//
set.KV = append(set.KV, c.addCollateralizeRecordAddr(collateralizeLog.AccountAddr, collateralizeLog.CollateralizeId,
collateralizeLog
.
RecordId
,
collateralizeLog
.
Index
)
...
)
//
collateralizeLog.RecordId, collateralizeLog.Index)...)
}
//
}
break
break
case
pty
.
TyLogCollateralizeClose
:
case
pty
.
TyLogCollateralizeClose
:
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeStatus
(
collateralizeLog
.
Status
,
collateralizeLog
.
CollateralizeId
,
collateralizeLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeStatus
(
collateralizeLog
.
Status
,
collateralizeLog
.
CollateralizeId
,
collateralizeLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeStatus
(
collateralizeLog
.
PreStatus
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeStatus
(
collateralizeLog
.
PreStatus
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeAddr
(
collateralizeLog
.
CreateAddr
,
collateralizeLog
.
PreIndex
)
...
)
//
set.KV = append(set.KV, c.deleteCollateralizeAddr(collateralizeLog.CreateAddr, collateralizeLog.PreIndex)...)
break
break
}
}
}
}
...
...
plugin/dapp/collateralize/executor/query.go
View file @
b48db05f
...
@@ -24,6 +24,7 @@ func (c *Collateralize) Query_CollateralizeInfoByID(req *pty.ReqCollateralizeInf
...
@@ -24,6 +24,7 @@ func (c *Collateralize) Query_CollateralizeInfoByID(req *pty.ReqCollateralizeInf
StabilityFeeRatio
:
coll
.
StabilityFeeRatio
,
StabilityFeeRatio
:
coll
.
StabilityFeeRatio
,
CreateAddr
:
coll
.
CreateAddr
,
CreateAddr
:
coll
.
CreateAddr
,
Balance
:
coll
.
Balance
,
Balance
:
coll
.
Balance
,
Period
:
coll
.
Period
,
},
nil
},
nil
}
}
...
@@ -44,6 +45,7 @@ func (c *Collateralize) Query_CollateralizeInfoByIDs(req *pty.ReqCollateralizeIn
...
@@ -44,6 +45,7 @@ func (c *Collateralize) Query_CollateralizeInfoByIDs(req *pty.ReqCollateralizeIn
StabilityFeeRatio
:
coll
.
StabilityFeeRatio
,
StabilityFeeRatio
:
coll
.
StabilityFeeRatio
,
CreateAddr
:
coll
.
CreateAddr
,
CreateAddr
:
coll
.
CreateAddr
,
Balance
:
coll
.
Balance
,
Balance
:
coll
.
Balance
,
Period
:
coll
.
Period
,
})
})
}
}
...
@@ -98,14 +100,37 @@ func (c *Collateralize) Query_CollateralizeRecordByAddr(req *pty.ReqCollateraliz
...
@@ -98,14 +100,37 @@ func (c *Collateralize) Query_CollateralizeRecordByAddr(req *pty.ReqCollateraliz
return
ret
,
nil
return
ret
,
nil
}
}
func
(
c
*
Collateralize
)
Query_CollateralizeRecordByStatus
(
req
*
pty
.
ReqCollateralizeRecordByStatus
)
(
types
.
Message
,
error
)
{
func
(
c
*
Collateralize
)
Query_CollateralizeConfig
(
req
*
pty
.
ReqCollateralizeRecordByAddr
)
(
types
.
Message
,
error
)
{
ret
:=
&
pty
.
RepCollateralizeRecords
{}
config
,
err
:=
getCollateralizeConfig
(
c
.
GetStateDB
())
records
,
err
:=
queryCollateralizeRecordByStatus
(
c
.
GetStateDB
(),
c
.
GetLocalDB
(),
req
.
Status
,
req
.
Index
)
if
err
!=
nil
{
if
err
!=
nil
{
clog
.
Error
(
"Query_Collateralize
RecordByStatus"
,
"get collateralize record
error"
,
err
)
clog
.
Error
(
"Query_Collateralize
Config"
,
"get collateralize config
error"
,
err
)
return
nil
,
err
return
nil
,
err
}
}
ret
.
Records
=
records
collIDRecords
,
err
:=
queryCollateralizeByStatus
(
c
.
GetLocalDB
(),
pty
.
CollateralizeStatusCreated
,
0
)
if
err
!=
nil
{
clog
.
Error
(
"Query_CollateralizeByStatus"
,
"get collateralize record error"
,
err
)
return
nil
,
err
}
collBalance
:=
config
.
CollTotalBalance
for
_
,
id
:=
range
collIDRecords
{
coll
,
err
:=
queryCollateralizeByID
(
c
.
GetStateDB
(),
id
)
if
err
!=
nil
{
clog
.
Error
(
"Query_CollateralizeInfoByID"
,
"id"
,
id
,
"error"
,
err
)
return
nil
,
err
}
collBalance
-=
coll
.
TotalBalance
}
ret
:=
&
pty
.
RepCollateralizeConfig
{
CollTotalBalance
:
config
.
CollTotalBalance
,
DebtCeiling
:
config
.
DebtCeiling
,
LiquidationRatio
:
config
.
LiquidationRatio
,
StabilityFeeRatio
:
config
.
StabilityFeeRatio
,
Period
:
config
.
Period
,
CollBalance
:
collBalance
,
}
return
ret
,
nil
return
ret
,
nil
}
}
\ No newline at end of file
plugin/dapp/collateralize/proto/collateralize.proto
View file @
b48db05f
...
@@ -65,6 +65,7 @@ message CollateralizeManage {
...
@@ -65,6 +65,7 @@ message CollateralizeManage {
float
liquidationRatio
=
2
;
//清算比例
float
liquidationRatio
=
2
;
//清算比例
float
stabilityFeeRatio
=
3
;
//稳定费
float
stabilityFeeRatio
=
3
;
//稳定费
int64
period
=
4
;
//合约期限
int64
period
=
4
;
//合约期限
int64
collTotalBalance
=
5
;
//放贷总量
}
}
message
CollateralizeAddr
{
message
CollateralizeAddr
{
...
@@ -145,6 +146,7 @@ message RepCollateralizeCurrentInfo {
...
@@ -145,6 +146,7 @@ message RepCollateralizeCurrentInfo {
float
stabilityFeeRatio
=
5
;
//稳定费
float
stabilityFeeRatio
=
5
;
//稳定费
string
createAddr
=
6
;
//创建人地址
string
createAddr
=
6
;
//创建人地址
int64
balance
=
7
;
//剩余可借贷金额(ccny)
int64
balance
=
7
;
//剩余可借贷金额(ccny)
int64
period
=
8
;
//合约期限
}
}
// 根据ID列表查询多期借贷信息
// 根据ID列表查询多期借贷信息
...
@@ -203,3 +205,13 @@ message ReqCollateralizeRecord {
...
@@ -203,3 +205,13 @@ message ReqCollateralizeRecord {
message
RepCollateralizeRecord
{
message
RepCollateralizeRecord
{
BorrowRecord
record
=
1
;
BorrowRecord
record
=
1
;
}
}
// 返回放贷配置
message
RepCollateralizeConfig
{
int64
debtCeiling
=
1
;
//单用户可借出的限额(ccny)
float
liquidationRatio
=
2
;
//清算比例
float
stabilityFeeRatio
=
3
;
//稳定费
int64
period
=
4
;
//合约期限
int64
collTotalBalance
=
5
;
//放贷总量
int64
collBalance
=
6
;
//剩余放贷额度
}
\ No newline at end of file
plugin/dapp/collateralize/types/collateralize.go
View file @
b48db05f
...
@@ -331,6 +331,7 @@ func CreateRawCollateralizeManageTx(cfg *types.Chain33Config, parm *Collateraliz
...
@@ -331,6 +331,7 @@ func CreateRawCollateralizeManageTx(cfg *types.Chain33Config, parm *Collateraliz
LiquidationRatio
:
parm
.
LiquidationRatio
,
LiquidationRatio
:
parm
.
LiquidationRatio
,
StabilityFeeRatio
:
parm
.
StabilityFeeRatio
,
StabilityFeeRatio
:
parm
.
StabilityFeeRatio
,
Period
:
parm
.
Period
,
Period
:
parm
.
Period
,
CollTotalBalance
:
parm
.
TotalBalance
,
}
}
manage
:=
&
CollateralizeAction
{
manage
:=
&
CollateralizeAction
{
...
...
plugin/dapp/collateralize/types/collateralize.pb.go
View file @
b48db05f
...
@@ -541,6 +541,7 @@ type CollateralizeManage struct {
...
@@ -541,6 +541,7 @@ type CollateralizeManage struct {
LiquidationRatio
float32
`protobuf:"fixed32,2,opt,name=liquidationRatio,proto3" json:"liquidationRatio,omitempty"`
LiquidationRatio
float32
`protobuf:"fixed32,2,opt,name=liquidationRatio,proto3" json:"liquidationRatio,omitempty"`
StabilityFeeRatio
float32
`protobuf:"fixed32,3,opt,name=stabilityFeeRatio,proto3" json:"stabilityFeeRatio,omitempty"`
StabilityFeeRatio
float32
`protobuf:"fixed32,3,opt,name=stabilityFeeRatio,proto3" json:"stabilityFeeRatio,omitempty"`
Period
int64
`protobuf:"varint,4,opt,name=period,proto3" json:"period,omitempty"`
Period
int64
`protobuf:"varint,4,opt,name=period,proto3" json:"period,omitempty"`
CollTotalBalance
int64
`protobuf:"varint,5,opt,name=collTotalBalance,proto3" json:"collTotalBalance,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
@@ -599,6 +600,13 @@ func (m *CollateralizeManage) GetPeriod() int64 {
...
@@ -599,6 +600,13 @@ func (m *CollateralizeManage) GetPeriod() int64 {
return
0
return
0
}
}
func
(
m
*
CollateralizeManage
)
GetCollTotalBalance
()
int64
{
if
m
!=
nil
{
return
m
.
CollTotalBalance
}
return
0
}
type
CollateralizeAddr
struct
{
type
CollateralizeAddr
struct
{
SuperAddrs
[]
string
`protobuf:"bytes,1,rep,name=superAddrs,proto3" json:"superAddrs,omitempty"`
SuperAddrs
[]
string
`protobuf:"bytes,1,rep,name=superAddrs,proto3" json:"superAddrs,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
...
@@ -1175,6 +1183,7 @@ type RepCollateralizeCurrentInfo struct {
...
@@ -1175,6 +1183,7 @@ type RepCollateralizeCurrentInfo struct {
StabilityFeeRatio
float32
`protobuf:"fixed32,5,opt,name=stabilityFeeRatio,proto3" json:"stabilityFeeRatio,omitempty"`
StabilityFeeRatio
float32
`protobuf:"fixed32,5,opt,name=stabilityFeeRatio,proto3" json:"stabilityFeeRatio,omitempty"`
CreateAddr
string
`protobuf:"bytes,6,opt,name=createAddr,proto3" json:"createAddr,omitempty"`
CreateAddr
string
`protobuf:"bytes,6,opt,name=createAddr,proto3" json:"createAddr,omitempty"`
Balance
int64
`protobuf:"varint,7,opt,name=balance,proto3" json:"balance,omitempty"`
Balance
int64
`protobuf:"varint,7,opt,name=balance,proto3" json:"balance,omitempty"`
Period
int64
`protobuf:"varint,8,opt,name=period,proto3" json:"period,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
@@ -1254,6 +1263,13 @@ func (m *RepCollateralizeCurrentInfo) GetBalance() int64 {
...
@@ -1254,6 +1263,13 @@ func (m *RepCollateralizeCurrentInfo) GetBalance() int64 {
return
0
return
0
}
}
func
(
m
*
RepCollateralizeCurrentInfo
)
GetPeriod
()
int64
{
if
m
!=
nil
{
return
m
.
Period
}
return
0
}
// 根据ID列表查询多期借贷信息
// 根据ID列表查询多期借贷信息
type
ReqCollateralizeInfos
struct
{
type
ReqCollateralizeInfos
struct
{
CollateralizeIds
[]
string
`protobuf:"bytes,1,rep,name=collateralizeIds,proto3" json:"collateralizeIds,omitempty"`
CollateralizeIds
[]
string
`protobuf:"bytes,1,rep,name=collateralizeIds,proto3" json:"collateralizeIds,omitempty"`
...
@@ -1710,6 +1726,86 @@ func (m *RepCollateralizeRecord) GetRecord() *BorrowRecord {
...
@@ -1710,6 +1726,86 @@ func (m *RepCollateralizeRecord) GetRecord() *BorrowRecord {
return
nil
return
nil
}
}
// 返回放贷配置
type
RepCollateralizeConfig
struct
{
DebtCeiling
int64
`protobuf:"varint,1,opt,name=debtCeiling,proto3" json:"debtCeiling,omitempty"`
LiquidationRatio
float32
`protobuf:"fixed32,2,opt,name=liquidationRatio,proto3" json:"liquidationRatio,omitempty"`
StabilityFeeRatio
float32
`protobuf:"fixed32,3,opt,name=stabilityFeeRatio,proto3" json:"stabilityFeeRatio,omitempty"`
Period
int64
`protobuf:"varint,4,opt,name=period,proto3" json:"period,omitempty"`
CollTotalBalance
int64
`protobuf:"varint,5,opt,name=collTotalBalance,proto3" json:"collTotalBalance,omitempty"`
CollBalance
int64
`protobuf:"varint,6,opt,name=collBalance,proto3" json:"collBalance,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
RepCollateralizeConfig
)
Reset
()
{
*
m
=
RepCollateralizeConfig
{}
}
func
(
m
*
RepCollateralizeConfig
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
RepCollateralizeConfig
)
ProtoMessage
()
{}
func
(
*
RepCollateralizeConfig
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_a988fb4a61381972
,
[]
int
{
27
}
}
func
(
m
*
RepCollateralizeConfig
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_RepCollateralizeConfig
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
RepCollateralizeConfig
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_RepCollateralizeConfig
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
RepCollateralizeConfig
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_RepCollateralizeConfig
.
Merge
(
m
,
src
)
}
func
(
m
*
RepCollateralizeConfig
)
XXX_Size
()
int
{
return
xxx_messageInfo_RepCollateralizeConfig
.
Size
(
m
)
}
func
(
m
*
RepCollateralizeConfig
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_RepCollateralizeConfig
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_RepCollateralizeConfig
proto
.
InternalMessageInfo
func
(
m
*
RepCollateralizeConfig
)
GetDebtCeiling
()
int64
{
if
m
!=
nil
{
return
m
.
DebtCeiling
}
return
0
}
func
(
m
*
RepCollateralizeConfig
)
GetLiquidationRatio
()
float32
{
if
m
!=
nil
{
return
m
.
LiquidationRatio
}
return
0
}
func
(
m
*
RepCollateralizeConfig
)
GetStabilityFeeRatio
()
float32
{
if
m
!=
nil
{
return
m
.
StabilityFeeRatio
}
return
0
}
func
(
m
*
RepCollateralizeConfig
)
GetPeriod
()
int64
{
if
m
!=
nil
{
return
m
.
Period
}
return
0
}
func
(
m
*
RepCollateralizeConfig
)
GetCollTotalBalance
()
int64
{
if
m
!=
nil
{
return
m
.
CollTotalBalance
}
return
0
}
func
(
m
*
RepCollateralizeConfig
)
GetCollBalance
()
int64
{
if
m
!=
nil
{
return
m
.
CollBalance
}
return
0
}
func
init
()
{
func
init
()
{
proto
.
RegisterType
((
*
Collateralize
)(
nil
),
"types.Collateralize"
)
proto
.
RegisterType
((
*
Collateralize
)(
nil
),
"types.Collateralize"
)
proto
.
RegisterType
((
*
BorrowRecord
)(
nil
),
"types.BorrowRecord"
)
proto
.
RegisterType
((
*
BorrowRecord
)(
nil
),
"types.BorrowRecord"
)
...
@@ -1738,82 +1834,85 @@ func init() {
...
@@ -1738,82 +1834,85 @@ func init() {
proto
.
RegisterType
((
*
RepCollateralizeRecords
)(
nil
),
"types.RepCollateralizeRecords"
)
proto
.
RegisterType
((
*
RepCollateralizeRecords
)(
nil
),
"types.RepCollateralizeRecords"
)
proto
.
RegisterType
((
*
ReqCollateralizeRecord
)(
nil
),
"types.ReqCollateralizeRecord"
)
proto
.
RegisterType
((
*
ReqCollateralizeRecord
)(
nil
),
"types.ReqCollateralizeRecord"
)
proto
.
RegisterType
((
*
RepCollateralizeRecord
)(
nil
),
"types.RepCollateralizeRecord"
)
proto
.
RegisterType
((
*
RepCollateralizeRecord
)(
nil
),
"types.RepCollateralizeRecord"
)
proto
.
RegisterType
((
*
RepCollateralizeConfig
)(
nil
),
"types.RepCollateralizeConfig"
)
}
}
func
init
()
{
proto
.
RegisterFile
(
"collateralize.proto"
,
fileDescriptor_a988fb4a61381972
)
}
func
init
()
{
proto
.
RegisterFile
(
"collateralize.proto"
,
fileDescriptor_a988fb4a61381972
)
}
var
fileDescriptor_a988fb4a61381972
=
[]
byte
{
var
fileDescriptor_a988fb4a61381972
=
[]
byte
{
// 11
40
bytes of a gzipped FileDescriptorProto
// 11
81
bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xdc
,
0x5
7
,
0xdd
,
0x6e
,
0xdc
,
0x44
,
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xdc
,
0x5
8
,
0xdd
,
0x6e
,
0xdc
,
0x44
,
0x14
,
0xae
,
0xed
,
0xfd
,
0xc9
,
0x9e
,
0x4d
,
0xda
,
0x74
,
0x12
,
0x82
,
0x09
,
0x51
,
0xb4
,
0xb2
,
0x90
,
0x14
,
0xae
,
0xed
,
0xfd
,
0xc9
,
0x9e
,
0x4d
,
0xda
,
0x74
,
0x12
,
0x82
,
0x09
,
0x51
,
0xb4
,
0xb2
,
0x90
,
0x58
,
0xf1
,
0x13
,
0x89
,
0xb4
,
0x42
,
0x54
,
0x48
,
0x88
,
0x64
,
0xdb
,
0x2a
,
0x2b
,
0x15
,
0xa9
,
0x32
,
0x58
,
0xf1
,
0x13
,
0x89
,
0xb4
,
0x42
,
0x54
,
0x48
,
0x88
,
0x64
,
0xdb
,
0x2a
,
0x2b
,
0x15
,
0xa9
,
0x32
,
0x05
,
0x21
,
0x24
,
0x90
,
0xbc
,
0xf6
,
0xa4
,
0x58
,
0x72
,
0x6c
,
0x67
,
0x3c
,
0x1b
,
0xb2
,
0xdc
,
0xd3
,
0x05
,
0x21
,
0x24
,
0x90
,
0xbc
,
0xf6
,
0x24
,
0x58
,
0x72
,
0x6c
,
0x67
,
0x3c
,
0x1b
,
0xb2
,
0xdc
,
0xd3
,
0x5b
,
0x5e
,
0x80
,
0x17
,
0xe0
,
0x05
,
0x78
,
0x0f
,
0xde
,
0x08
,
0xcd
,
0x99
,
0xf1
,
0xdf
,
0xd8
,
0x8e
,
0xa7
,
0xe0
,
0x9e
,
0x37
,
0xe0
,
0x3d
,
0xb8
,
0xe0
,
0x65
,
0xb8
,
0x42
,
0x73
,
0x66
,
0xfc
,
0x37
,
0xb6
,
0x76
,
0x81
,
0x2b
,
0x6e
,
0x56
,
0x3b
,
0x67
,
0xbe
,
0x33
,
0x73
,
0xe6
,
0x3b
,
0xdf
,
0x9c
,
0x33
,
0x86
,
0xa3
,
0x2c
,
0x70
,
0x03
,
0x37
,
0xd5
,
0xce
,
0x99
,
0x6f
,
0xce
,
0x1c
,
0x7f
,
0xe7
,
0x3b
,
0xe7
,
0x4c
,
0x3d
,
0x3f
,
0x89
,
0x22
,
0x8f
,
0x53
,
0xe6
,
0x45
,
0xe1
,
0x2f
,
0xf4
,
0x24
,
0x65
,
0x09
,
0x4f
,
0x48
,
0x03
,
0x3b
,
0x7e
,
0x12
,
0x45
,
0x1e
,
0xa7
,
0xcc
,
0x8b
,
0xc2
,
0x9f
,
0xe8
,
0x51
,
0xca
,
0x12
,
0x9e
,
0x9f
,
0xaf
,
0x52
,
0x9a
,
0x39
,
0x7f
,
0xf5
,
0x60
,
0x67
,
0x56
,
0x9d
,
0x26
,
0x53
,
0x78
,
0x50
,
0xc3
,
0x90
,
0x3e
,
0x5f
,
0xa5
,
0x34
,
0x73
,
0x7e
,
0xef
,
0xc1
,
0xd6
,
0xac
,
0xba
,
0x4d
,
0xa6
,
0xf0
,
0xa0
,
0xcf
,
0x03
,
0xdb
,
0x98
,
0x18
,
0xd3
,
0x91
,
0xab
,
0x9b
,
0x89
,
0x03
,
0xdb
,
0x3c
,
0xe1
,
0x5e
,
0x74
,
0x86
,
0x9f
,
0x07
,
0xb6
,
0x31
,
0x31
,
0xa6
,
0x23
,
0x57
,
0x37
,
0x13
,
0x07
,
0x36
,
0x79
,
0xc2
,
0xbd
,
0xee
,
0x45
,
0x5e
,
0xec
,
0x53
,
0xdb
,
0x9c
,
0x18
,
0x53
,
0xcb
,
0xad
,
0xd9
,
0xc8
,
0x04
,
0xc6
,
0x01
,
0xe8
,
0xd4
,
0x8b
,
0xbc
,
0xd8
,
0xa7
,
0xb6
,
0x39
,
0x31
,
0xa6
,
0x96
,
0x5b
,
0xb3
,
0x91
,
0x09
,
0x8c
,
0x5d
,
0xf0
,
0x19
,
0x0d
,
0xa3
,
0x30
,
0x7e
,
0x6d
,
0x5b
,
0x08
,
0xa9
,
0x9a
,
0xc8
,
0x07
,
0xb0
,
0x1b
,
0x03
,
0xba
,
0xe0
,
0x33
,
0x1a
,
0x46
,
0x61
,
0x7c
,
0x61
,
0x5b
,
0x08
,
0xa9
,
0x9a
,
0xc8
,
0x7b
,
0xb0
,
0x85
,
0xd7
,
0xcb
,
0x30
,
0xf0
,
0x78
,
0x98
,
0xc4
,
0xae
,
0xf8
,
0xb5
,
0x7b
,
0x13
,
0x63
,
0x6a
,
0xba
,
0x1d
,
0x85
,
0x57
,
0xcb
,
0x30
,
0xf0
,
0x78
,
0x98
,
0xc4
,
0xae
,
0xf8
,
0xd7
,
0xee
,
0x4d
,
0x8c
,
0xa9
,
0x0d
,
0x3b
,
0xf9
,
0x08
,
0x1e
,
0x66
,
0xdc
,
0x5b
,
0x84
,
0x51
,
0xc8
,
0x57
,
0xcf
,
0x29
,
0x95
,
0xe0
,
0xe9
,
0x36
,
0xec
,
0xe4
,
0x03
,
0x78
,
0x98
,
0x71
,
0x6f
,
0x11
,
0x46
,
0x21
,
0x5f
,
0x3d
,
0xa7
,
0x54
,
0x3e
,
0x82
,
0x9b
,
0x13
,
0xe4
,
0x18
,
0xc0
,
0x67
,
0xd4
,
0xe3
,
0xf4
,
0x2c
,
0x08
,
0x98
,
0x3d
,
0xc0
,
0x82
,
0xfb
,
0x08
,
0x6e
,
0x6e
,
0x90
,
0x43
,
0x00
,
0x9f
,
0x51
,
0x8f
,
0xd3
,
0x93
,
0x20
,
0x60
,
0xf6
,
0x43
,
0x54
,
0x2c
,
0xc4
,
0x86
,
0xe1
,
0x42
,
0x85
,
0x3e
,
0xc4
,
0xb8
,
0xf2
,
0x21
,
0x79
,
0x02
,
0x3b
,
0x00
,
0x3f
,
0xa2
,
0x62
,
0x21
,
0x36
,
0x0c
,
0x17
,
0x2a
,
0xf4
,
0x21
,
0xc6
,
0x95
,
0x2f
,
0xc9
,
0x13
,
0x8b
,
0x84
,
0xb1
,
0xe4
,
0x67
,
0x97
,
0xfa
,
0x09
,
0x0b
,
0x32
,
0x7b
,
0x6b
,
0x62
,
0x4d
,
0xc7
,
0xa7
,
0xd8
,
0x5a
,
0x24
,
0x8c
,
0x25
,
0x3f
,
0xba
,
0xd4
,
0x4f
,
0x58
,
0x90
,
0xd9
,
0x1b
,
0x13
,
0x6b
,
0x3a
,
0x7b
,
0x27
,
0x48
,
0xda
,
0xc9
,
0x79
,
0x65
,
0xce
,
0xad
,
0x23
,
0xc9
,
0xe7
,
0x70
,
0x7f
,
0x1e
,
0xdf
,
0x3e
,
0xde
,
0x39
,
0x42
,
0xd2
,
0x8e
,
0x4e
,
0x2b
,
0x7b
,
0x6e
,
0x1d
,
0x49
,
0x3e
,
0x85
,
0xfb
,
0xf3
,
0x78
,
0x51
,
0x18
,
0xe4
,
0xbe
,
0xa3
,
0x6e
,
0x5f
,
0x0d
,
0x4a
,
0x0e
,
0x60
,
0x90
,
0x71
,
0x8f
,
0x2f
,
0xf8
,
0xda
,
0x8b
,
0xc2
,
0x20
,
0x3f
,
0x3b
,
0xea
,
0x3e
,
0xab
,
0x41
,
0xc9
,
0x1e
,
0x0c
,
0x32
,
0xee
,
0x33
,
0x1b
,
0x26
,
0xc6
,
0xb4
,
0xef
,
0xaa
,
0x11
,
0xf9
,
0x14
,
0x0e
,
0x04
,
0xf3
,
0x19
,
0x7f
,
0x51
,
0xf1
,
0x65
,
0x66
,
0xc3
,
0xc4
,
0x98
,
0xf6
,
0x5d
,
0xb5
,
0x22
,
0x1f
,
0xc3
,
0x9e
,
0x60
,
0x3e
,
0xe3
,
0x32
,
0xf2
,
0x92
,
0x85
,
0x3e
,
0xb5
,
0xc7
,
0x78
,
0xf8
,
0x8e
,
0x59
,
0xb1
,
0x5e
,
0x4a
,
0x59
,
0x98
,
0x2f
,
0x4a
,
0x46
,
0x5e
,
0xb2
,
0xd0
,
0xa7
,
0xf6
,
0x18
,
0x3f
,
0xbe
,
0x63
,
0x57
,
0xf8
,
0x4b
,
0x29
,
0x04
,
0xf6
,
0x36
,
0x1e
,
0x50
,
0x8d
,
0x90
,
0x73
,
0xf4
,
0x78
,
0x76
,
0x9b
,
0x86
,
0x8c
,
0xbe
,
0x0a
,
0x0b
,
0x93
,
0xc0
,
0xde
,
0xc4
,
0x0f
,
0x54
,
0x2b
,
0xe4
,
0x1c
,
0x4f
,
0x3c
,
0xbb
,
0x49
,
0x43
,
0x46
,
0xaf
,
0xa8
,
0xbd
,
0x83
,
0x88
,
0x86
,
0x9d
,
0xec
,
0x43
,
0x3f
,
0x8c
,
0x03
,
0x7a
,
0x6b
,
0xdf
,
0x47
,
0x5f
,
0x85
,
0x97
,
0xd4
,
0xde
,
0x42
,
0x44
,
0xc3
,
0x4e
,
0x76
,
0xa1
,
0x1f
,
0xc6
,
0x01
,
0xbd
,
0xb1
,
0x80
,
0x1c
,
0x90
,
0x43
,
0xd8
,
0x4a
,
0x19
,
0x9d
,
0xe3
,
0xc4
,
0x03
,
0x9c
,
0x28
,
0xc6
,
0xce
,
0x9f
,
0xef
,
0x23
,
0x40
,
0x2e
,
0xc8
,
0x3e
,
0x6c
,
0xa4
,
0x8c
,
0xce
,
0x71
,
0xe3
,
0x01
,
0x6e
,
0x14
,
0x6b
,
0x16
,
0x6c
,
0x57
,
0x8f
,
0x29
,
0x44
,
0xe0
,
0xf9
,
0x7e
,
0xb2
,
0x8c
,
0x39
,
0x66
,
0x42
,
0xca
,
0xa9
,
0xe7
,
0x37
,
0x0b
,
0x36
,
0xab
,
0x9f
,
0x29
,
0x44
,
0xe0
,
0xf9
,
0x7e
,
0xb2
,
0x8c
,
0x39
,
0x66
,
0x42
,
0x6a
,
0x22
,
0x47
,
0x30
,
0xca
,
0xb8
,
0xc7
,
0x38
,
0x46
,
0x22
,
0x75
,
0x54
,
0x1a
,
0xea
,
0x92
,
0xfc
,
0xca
,
0xa9
,
0x6a
,
0x22
,
0x07
,
0x30
,
0xca
,
0xb8
,
0xc7
,
0x38
,
0x46
,
0x22
,
0x75
,
0x54
,
0x1a
,
0xea
,
0xd6
,
0x8b
,
0x96
,
0x54
,
0x09
,
0x49
,
0x37
,
0xd7
,
0x91
,
0x92
,
0x21
,
0xa9
,
0x25
,
0xdd
,
0x2c
,
0x76
,
0x92
,
0xfc
,
0xda
,
0x8b
,
0x96
,
0x54
,
0x09
,
0x49
,
0x37
,
0xd7
,
0x91
,
0x92
,
0x21
,
0xa9
,
0x25
,
0xdd
,
0x14
,
0x2a
,
0x94
,
0xab
,
0xf5
,
0xe5
,
0x8e
,
0x85
,
0x41
,
0x13
,
0xa5
,
0x5c
,
0x68
,
0xd0
,
0x10
,
0x65
,
0x2c
,
0x6e
,
0x14
,
0x2a
,
0x94
,
0xde
,
0xfa
,
0xf2
,
0xc6
,
0xc2
,
0xa0
,
0x89
,
0x52
,
0x3a
,
0x1a
,
0x34
,
0x41
,
0xb2
,
0x4a
,
0xda
,
0xb0
,
0x96
,
0xb4
,
0xf7
,
0x60
,
0x27
,
0xc7
,
0x4a
,
0x86
,
0xb7
,
0x70
,
0x97
,
0x44
,
0x59
,
0x90
,
0xac
,
0x92
,
0x36
,
0xac
,
0x25
,
0xed
,
0x1d
,
0xd8
,
0xca
,
0xb1
,
0x92
,
0xe1
,
0x0d
,
0xba
,
0x51
,
0x88
,
0x94
,
0x96
,
0x49
,
0x18
,
0x21
,
0xa4
,
0x62
,
0x11
,
0x71
,
0xa6
,
0x8c
,
0x7e
,
0x5d
,
0xbc
,
0xa5
,
0x6e
,
0x14
,
0x22
,
0xa5
,
0x65
,
0x12
,
0x46
,
0x08
,
0xa9
,
0x58
,
0x44
,
0x9c
,
0x29
,
0xa3
,
0x55
,
0x45
,
0x69
,
0x10
,
0x69
,
0x60
,
0xc8
,
0xf1
,
0x3c
,
0x40
,
0x29
,
0x8c
,
0xdc
,
0x62
,
0x5c
,
0x26
,
0x5f
,
0x56
,
0x55
,
0x51
,
0x1a
,
0x44
,
0x1a
,
0x18
,
0x72
,
0x3c
,
0x0f
,
0x50
,
0x0a
,
0x23
,
0xb7
,
0x58
,
0x6e
,
0xbb
,
0x2b
,
0x71
,
0x3b
,
0x5a
,
0xe2
,
0xde
,
0x18
,
0xb0
,
0x7b
,
0x96
,
0x65
,
0x94
,
0xe3
,
0xc1
,
0x97
,
0x89
,
0xdb
,
0xec
,
0x4a
,
0xdc
,
0x96
,
0x96
,
0xb8
,
0xd7
,
0x06
,
0x6c
,
0x9f
,
0x64
,
0x19
,
0xe5
,
0x54
,
0xf2
,
0x8e
,
0x01
,
0xe4
,
0x92
,
0x18
,
0xa0
,
0x21
,
0x03
,
0x2c
,
0x2d
,
0x62
,
0xc1
,
0x05
,
0x5f
,
0xf8
,
0x61
,
0x2a
,
0x79
,
0x87
,
0x00
,
0xd2
,
0x25
,
0x06
,
0x68
,
0xc8
,
0x00
,
0x4b
,
0x8b
,
0x70
,
0xb8
,
0x49
,
0x8a
,
0x4c
,
0xa4
,
0xa8
,
0x18
,
0xcb
,
0x39
,
0x5f
,
0xce
,
0x59
,
0xf9
,
0x9c
,
0x5f
,
0xcc
,
0x51
,
0xe0
,
0x2b
,
0x49
,
0x91
,
0x89
,
0x14
,
0x15
,
0x6b
,
0xb9
,
0xe7
,
0xcb
,
0x3d
,
0x2b
,
0xdf
,
0xf3
,
0x8b
,
0xfe
,
0x53
,
0x35
,
0x47
,
0xc5
,
0xd8
,
0xf9
,
0xdd
,
0x82
,
0xbd
,
0x5a
,
0x55
,
0x3a
,
0xf3
,
0x05
,
0xdf
,
0x3d
,
0xca
,
0x7f
,
0xa8
,
0xe6
,
0xa8
,
0x58
,
0x3b
,
0xbf
,
0x58
,
0xb0
,
0x53
,
0xeb
,
0x4a
,
0x27
,
0xbe
,
0xe4
,
0x31
,
0x0c
,
0xe4
,
0xfd
,
0xc5
,
0x38
,
0xc6
,
0xa7
,
0x87
,
0xea
,
0x52
,
0xd5
,
0xb0
,
0x33
,
0x44
,
0xe0
,
0x9b
,
0x3c
,
0x86
,
0x81
,
0xac
,
0x5f
,
0x8c
,
0x63
,
0x7c
,
0xbc
,
0xaf
,
0x8a
,
0xaa
,
0x86
,
0x9d
,
0x5c
,
0xdc
,
0x73
,
0x15
,
0x56
,
0x78
,
0xc9
,
0x3b
,
0x8a
,
0xf1
,
0x75
,
0x78
,
0x49
,
0xc1
,
0x0a
,
0x2f
,
0x21
,
0xe2
,
0xec
,
0x9e
,
0xab
,
0xb0
,
0xe2
,
0x94
,
0xac
,
0x51
,
0x8c
,
0xaf
,
0xe3
,
0x94
,
0x14
,
0xac
,
0x89
,
0x25
,
0x9f
,
0x40
,
0x9f
,
0xd1
,
0xd4
,
0x5b
,
0x61
,
0xe0
,
0xe3
,
0xd3
,
0x77
,
0xda
,
0x9c
,
0x5c
,
0x38
,
0x25
,
0xb1
,
0xe4
,
0x23
,
0xe8
,
0x33
,
0x9a
,
0x7a
,
0x2b
,
0x0c
,
0x7c
,
0x7c
,
0xfc
,
0x56
,
0xdb
,
0x01
,
0xb8
,
0xb8
,
0xe7
,
0x4a
,
0xa4
,
0xd8
,
0xc8
,
0x4b
,
0x53
,
0x1a
,
0x07
,
0x78
,
0xa0
,
0x8e
,
0x8d
,
0x21
,
0x57
,
0x00
,
0xce
,
0xee
,
0xb9
,
0x12
,
0x29
,
0x2e
,
0xf2
,
0xd2
,
0x94
,
0xc6
,
0x01
,
0x7e
,
0x50
,
0xce
,
0x10
,
0x21
,
0x36
,
0x92
,
0x58
,
0x72
,
0x02
,
0xbd
,
0x4b
,
0x4a
,
0x03
,
0x14
,
0xe1
,
0xf8
,
0xd4
,
0xc7
,
0x45
,
0x27
,
0x88
,
0x10
,
0x17
,
0x49
,
0x2c
,
0x39
,
0x82
,
0xde
,
0x39
,
0xa5
,
0x01
,
0x8a
,
0x70
,
0x6e
,
0xf3
,
0x79
,
0x4e
,
0xa9
,
0xf0
,
0x40
,
0x9c
,
0x08
,
0xcc
,
0x8f
,
0x92
,
0x4c
,
0x0a
,
0xb2
,
0x23
,
0x7c
,
0x6c
,
0xb7
,
0x9d
,
0x79
,
0x4e
,
0xa9
,
0x38
,
0x81
,
0x38
,
0x11
,
0x98
,
0x1f
,
0x25
,
0x99
,
0x14
,
0xb0
,
0x99
,
0x00
,
0x88
,
0xc0
,
0x10
,
0x29
,
0x02
,
0xbb
,
0xf2
,
0x62
,
0xef
,
0xb5
,
0x2c
,
0x74
,
0x1d
,
0x64
,
0x47
,
0x60
,
0x33
,
0x01
,
0x10
,
0x81
,
0x21
,
0x52
,
0x04
,
0x76
,
0xe9
,
0xc5
,
0xde
,
0x85
,
0x6c
,
0x81
,
0x7d
,
0x85
,
0x08
,
0x11
,
0x98
,
0xc4
,
0x92
,
0xfb
,
0x60
,
0xf2
,
0x95
,
0xd2
,
0x9c
,
0xc9
,
0x57
,
0x74
,
0x1d
,
0x81
,
0x7d
,
0x81
,
0x08
,
0x11
,
0x98
,
0xc4
,
0x92
,
0xfb
,
0x60
,
0xf2
,
0x95
,
0xd2
,
0x9c
,
0xe7
,
0x43
,
0xe8
,
0xdf
,
0x88
,
0xdb
,
0xe1
,
0xfc
,
0x61
,
0x68
,
0xe9
,
0x91
,
0xae
,
0x7a
,
0xb1
,
0x37
,
0xc9
,
0x57
,
0xa7
,
0x43
,
0xe8
,
0x5f
,
0x8b
,
0xea
,
0x70
,
0xfe
,
0x30
,
0xb4
,
0xf4
,
0xc8
,
0xa3
,
0x7a
,
0xd6
,
0x2b
,
0xf6
,
0xe6
,
0x26
,
0xc5
,
0xde
,
0xea
,
0x2a
,
0xf6
,
0x65
,
0xa9
,
0xeb
,
0x55
,
0x4b
,
0x9d
,
0xb3
,
0x37
,
0xee
,
0xd6
,
0xec
,
0xcd
,
0x75
,
0x9a
,
0xbd
,
0xd5
,
0xd5
,
0xec
,
0xcb
,
0x56
,
0xd7
,
0xd3
,
0xf3
,
0x08
,
0x1e
,
0xd6
,
0xe9
,
0x17
,
0xe5
,
0xe6
,
0x18
,
0x20
,
0x5b
,
0xa6
,
0x94
,
0x89
,
0x41
,
0x66
,
0x5b
,
0x9d
,
0x28
,
0xfd
,
0x57
,
0xd5
,
0x41
,
0x25
,
0xcb
,
0xbd
,
0x61
,
0x77
,
0x1e
,
0xc1
,
0xc3
,
0x7a
,
0x1b
,
0x13
,
0x4b
,
0x74
,
0x86
,
0xd2
,
0xe2
,
0x3c
,
0xd1
,
0xce
,
0x27
,
0x25
,
0xd5
,
0x68
,
0x78
,
0x46
,
0xaa
,
0x44
,
0x6b
,
0x3a
,
0x04
,
0xc8
,
0x96
,
0x29
,
0x65
,
0x62
,
0x91
,
0xd9
,
0xc6
,
0xc4
,
0x12
,
0x53
,
0xb3
,
0xe1
,
0x39
,
0xdf
,
0x68
,
0xae
,
0x52
,
0x57
,
0x1b
,
0x74
,
0xd5
,
0x7d
,
0xc5
,
0xb2
,
0x2a
,
0x83
,
0xa4
,
0xb4
,
0x38
,
0x4f
,
0x34
,
0x2e
,
0xa4
,
0xfc
,
0x1a
,
0xc3
,
0xd1
,
0x68
,
0x0e
,
0x47
,
0xe7
,
0x2b
,
0x8a
,
0xf2
,
0xef
,
0x81
,
0x34
,
0x95
,
0xb7
,
0xc1
,
0xaa
,
0xd5
,
0x42
,
0x61
,
0xd6
,
0x0b
,
0x85
,
0xf3
,
0xed
,
0xa8
,
0xd4
,
0xe0
,
0x1a
,
0x13
,
0x78
,
0x57
,
0x65
,
0x44
,
0xb5
,
0x4c
,
0x95
,
0x9e
,
0x6f
,
0x81
,
0xab
,
0x9e
,
0x4e
,
0x29
,
0xd1
,
0xff
,
0x66
,
0xf5
,
0xf5
,
0x8b
,
0xb7
,
0xf3
,
0x83
,
0x96
,
0x2a
,
0xa1
,
0x34
,
0x55
,
0xba
,
0x86
,
0xd7
,
0x6a
,
0x53
,
0x31
,
0xeb
,
0x4d
,
0xc5
,
0xf9
,
0x59
,
0x4f
,
0xbd
,
0x94
,
0x7a
,
0xb1
,
0xb4
,
0xc0
,
0xbd
,
0x5a
,
0xa5
,
0x92
,
0xef
,
0xbe
,
0x5b
,
0x8c
,
0x05
,
0x55
,
0xa9
,
0xaa
,
0xf3
,
0xbf
,
0xe3
,
0xfd
,
0xee
,
0x8d
,
0xde
,
0xf9
,
0x4e
,
0x4b
,
0x95
,
0xa8
,
0x10
,
0xe1
,
0x1a
,
0x73
,
0x3b
,
0xd6
,
0xd4
,
0x74
,
0xe5
,
0x40
,
0x28
,
0xe1
,
0x26
,
0x89
,
0x96
,
0x57
,
0x62
,
0x1f
,
0x4b
,
0x28
,
0xba
,
0x4a
,
0x25
,
0xdf
,
0x7d
,
0xb7
,
0x58
,
0x0b
,
0xaa
,
0x52
,
0xd5
,
0xa3
,
0xac
,
0xa9
,
0xe9
,
0xca
,
0x41
,
0x8e
,
0x9c
,
0x2f
,
0x34
,
0x0a
,
0xf1
,
0x8e
,
0xac
,
0x7f
,
0x48
,
0xe7
,
0x8d
,
0x09
,
0xfb
,
0x2e
,
0x85
,
0x50
,
0xcd
,
0x75
,
0x12
,
0x2d
,
0x2f
,
0xc5
,
0x3d
,
0x96
,
0x50
,
0x8d
,
0x5c
,
0x39
,
0x9f
,
0x69
,
0xf5
,
0x69
,
0x98
,
0xf2
,
0x7f
,
0xfa
,
0x62
,
0xaa
,
0xbf
,
0x48
,
0xcc
,
0xc6
,
0x8b
,
0x44
,
0x6b
,
0x94
,
0x14
,
0x62
,
0x3d
,
0xdd
,
0xfd
,
0x23
,
0x9d
,
0xd7
,
0x26
,
0xec
,
0xba
,
0xd4
,
0xa7
,
0x61
,
0xca
,
0xff
,
0x56
,
0xb3
,
0x51
,
0x56
,
0x99
,
0xee
,
0x69
,
0x4c
,
0x97
,
0x8d
,
0xa8
,
0x5f
,
0x6b
,
0x44
,
0x47
,
0x30
,
0xee
,
0xeb
,
0xaa
,
0xfe
,
0x7a
,
0x31
,
0x1b
,
0xaf
,
0x17
,
0x6d
,
0xa8
,
0x5a
,
0xcd
,
0xa1
,
0x5a
,
0x65
,
0x7a
,
0x59
,
0xb4
,
0x90
,
0x81
,
0x6c
,
0x21
,
0x85
,
0xa1
,
0x6c
,
0x13
,
0xc3
,
0xae
,
0x36
,
0xb1
,
0xa5
,
0xba
,
0xa7
,
0x31
,
0x5d
,
0x0e
,
0xad
,
0x7e
,
0x6d
,
0x68
,
0x1d
,
0xc0
,
0xe8
,
0x65
,
0x31
,
0x6e
,
0x06
,
0xb5
,
0x89
,
0x86
,
0x5e
,
0x54
,
0xa7
,
0x58
,
0x9f
,
0x07
,
0x02
,
0x3d
,
0xaf
,
0x64
,
0x00
,
0xff
,
0xd7
,
0x72
,
0xdc
,
0x14
,
0x86
,
0x72
,
0xa4
,
0x0c
,
0xbb
,
0x46
,
0xca
,
0x86
,
0x36
,
0x52
,
0x1a
,
0x7a
,
0x51
,
0x4e
,
0x66
,
0x75
,
0xb5
,
0xb2
,
0x5e
,
0x25
,
0x46
,
0xe7
,
0x05
,
0xec
,
0xb7
,
0x84
,
0x91
,
0x91
,
0xc7
,
0x53
,
0xe5
,
0xee
,
0x3c
,
0x10
,
0xe8
,
0x79
,
0x25
,
0x03
,
0xf8
,
0xbb
,
0xf6
,
0x65
,
0x56
,
0xd7
,
0xd8
,
0x30
,
0x64
,
0xea
,
0xed
,
0x65
,
0xe0
,
0xdb
,
0xeb
,
0xb0
,
0xbd
,
0x76
,
0xe3
,
0x13
,
0x2c
,
0x87
,
0x3a
,
0xeb
,
0x55
,
0x62
,
0x74
,
0x5e
,
0xc0
,
0x6e
,
0x4b
,
0x18
,
0x19
,
0x79
,
0x0c
,
0x43
,
0xa6
,
0xde
,
0x69
,
0x5f
,
0x8a
,
0xec
,
0x5e
,
0xd7
,
0x20
,
0xf3
,
0xf8
,
0x32
,
0xd9
,
0x40
,
0x20
,
0xbf
,
0x99
,
0xf0
,
0xae
,
0x06
,
0xbe
,
0xd3
,
0xf6
,
0xdb
,
0xfb
,
0x3c
,
0x3e
,
0xd7
,
0x72
,
0xa8
,
0xf3
,
0xb9
,
0xc8
,
0xee
,
0x55
,
0x4b
,
0xd3
,
0xba
,
0xc8
,
0x96
,
0x8c
,
0xd1
,
0x98
,
0xe3
,
0x4a
,
0x65
,
0x7e
,
0x8c
,
0x5a
,
0x7e
,
0xfe
,
0x0d
,
0x32
,
0x8f
,
0xcf
,
0x93
,
0x35
,
0x04
,
0xf2
,
0xab
,
0x09
,
0x6f
,
0xbb
,
0x34
,
0xad
,
0x8b
,
0x6c
,
0xb7
,
0xef
,
0x68
,
0x67
,
0x06
,
0x6f
,
0xb5
,
0x71
,
0x9a
,
0x89
,
0x60
,
0x35
,
0xf6
,
0xf2
,
0x32
,
0xdc
,
0xc9
,
0x18
,
0x8d
,
0x39
,
0x7a
,
0x2a
,
0xf3
,
0x63
,
0xd4
,
0xf2
,
0xf3
,
0xff
,
0x7d
,
0x73
,
0x97
,
0x0d
,
0xb0
,
0x3b
,
0xdf
,
0xc1
,
0xd1
,
0x1d
,
0xac
,
0x66
,
0xe4
,
0x33
,
0x21
,
0x8e
,
0xcb
,
0x24
,
0x4f
,
0xb6
,
0x7c
,
0xa3
,
0xda
,
0xc0
,
0x9d
,
0x19
,
0xbc
,
0xd1
,
0xc6
,
0x75
,
0x96
,
0x77
,
0xf6
,
0x0a
,
0xab
,
0x79
,
0xa3
,
0x92
,
0x7d
,
0x87
,
0x8f
,
0x2b
,
0x1d
,
0x9c
,
0x0b
,
0xb0
,
0xf5
,
0xf0
,
0xce
,
0x57
,
0xea
,
0x5a
,
0x7b
,
0x6e
,
0xd8
,
0x9d
,
0x6f
,
0xe0
,
0xe0
,
0x16
,
0xb6
,
0x33
,
0xf2
,
0x89
,
0x10
,
0xcd
,
0x79
,
0x92
,
0x74
,
0x25
,
0xab
,
0x90
,
0xa2
,
0x59
,
0x95
,
0xe2
,
0x39
,
0x1c
,
0x34
,
0x57
,
0x42
,
0x72
,
0x72
,
0xa9
,
0x8b
,
0xc0
,
0x51
,
0x22
,
0xb8
,
0xe5
,
0x8c
,
0x2b
,
0x0f
,
0x38
,
0x67
,
0x60
,
0xeb
,
0xe1
,
0x9d
,
0xae
,
0x1b
,
0x15
,
0xa9
,
0xb7
,
0xaf
,
0xf1
,
0x3e
,
0xec
,
0xe9
,
0x31
,
0xcf
,
0x9f
,
0x66
,
0x64
,
0x17
,
0xac
,
0x54
,
0xb9
,
0x74
,
0x25
,
0xb1
,
0x90
,
0xa8
,
0x59
,
0x95
,
0xe8
,
0x29
,
0xec
,
0x35
,
0x3d
,
0x21
,
0x69
,
0xf9
,
0xd3
,
0x9c
,
0x1d
,
0xf1
,
0xd7
,
0x61
,
0x82
,
0x90
,
0xeb
,
0x16
,
0x31
,
0xab
,
0x2d
,
0xff
,
0xdd
,
0x79
,
0x09
,
0x18
,
0x95
,
0x12
,
0x68
,
0xf7
,
0xf1
,
0x2e
,
0xec
,
0xe8
,
0x31
,
0xcf
,
0x9f
,
0x66
,
0x64
,
0x3d
,
0x2c
,
0x82
,
0xb3
,
0xaa
,
0xc1
,
0xdd
,
0xc2
,
0x71
,
0xd7
,
0x9e
,
0x8a
,
0xb0
,
0xf5
,
0x77
,
0x2d
,
0x1b
,
0xac
,
0xf9
,
0xd3
,
0x9c
,
0x1d
,
0xf1
,
0xd3
,
0x61
,
0x82
,
0x90
,
0xab
,
0x16
,
0x91
,
0xab
,
0x2b
,
0xa9
,
0x35
,
0xdb
,
0xa9
,
0xad
,
0xed
,
0x7c
,
0x01
,
0x6f
,
0xeb
,
0xb4
,
0xe4
,
0x17
,
0xfd
,
0x63
,
0xfd
,
0xff
,
0x59
,
0x7d
,
0x16
,
0xc1
,
0x59
,
0xd5
,
0xe0
,
0x6e
,
0xe0
,
0xb0
,
0xeb
,
0x4e
,
0x45
,
0xd8
,
0xdd
,
0xa2
,
0xb7
,
0x7e
,
0x64
,
0x15
,
0x37
,
0xfc
,
0xc7
,
0x66
,
0x92
,
0x36
,
0xae
,
0x5c
,
0x77
,
0xf5
,
0xd1
,
0x6f
,
0x2d
,
0xa9
,
0x35
,
0xdb
,
0xa9
,
0xad
,
0xdd
,
0x7c
,
0x06
,
0x6f
,
0xea
,
0xb4
,
0xe4
,
0x0d
,
0xe0
,
0x67
,
0x62
,
0xfd
,
0xb6
,
0x48
,
0xc9
,
0x87
,
0x30
,
0x90
,
0x28
,
0xf5
,
0x6e
,
0x6d
,
0x8d
,
0x53
,
0x41
,
0x43
,
0xbd
,
0x01
,
0xb4
,
0xfe
,
0x47
,
0xad
,
0xa8
,
0xfc
,
0xef
,
0x9b
,
0x49
,
0x5a
,
0xbb
,
0xa3
,
0xdd
,
0x16
,
0x03
,
0xfc
,
0x40
,
0x7f
,
0xf4
,
0x77
,
0x00
,
0x00
,
0x00
,
0xff
,
0xff
,
0x9f
,
0x1f
,
0x4b
,
0x7d
,
0x36
,
0x5f
,
0x9f
,
0x09
,
0xff
,
0x6d
,
0x91
,
0x92
,
0xf7
,
0x61
,
0x20
,
0x51
,
0xea
,
0xed
,
0xdb
,
0x1a
,
0xb7
,
0x0f
,
0x00
,
0x00
,
0xa7
,
0x82
,
0x38
,
0x7f
,
0x1a
,
0x4d
,
0x3f
,
0xb3
,
0x24
,
0x3e
,
0x0f
,
0x2f
,
0xfe
,
0xeb
,
0x8f
,
0x34
,
0x11
,
0xbf
,
0xb0
,
0xe5
,
0xb0
,
0x81
,
0x8c
,
0xbf
,
0x62
,
0x5a
,
0x0c
,
0xf0
,
0x2f
,
0x1c
,
0x8f
,
0xfe
,
0x0a
,
0x00
,
0x00
,
0xff
,
0xff
,
0xdc
,
0x88
,
0x66
,
0x50
,
0xf8
,
0x10
,
0x00
,
0x00
,
}
}
plugin/dapp/collateralize/types/tx.go
View file @
b48db05f
...
@@ -51,5 +51,6 @@ type CollateralizeManageTx struct {
...
@@ -51,5 +51,6 @@ type CollateralizeManageTx struct {
LiquidationRatio
float32
`json:"liquidationRatio"`
LiquidationRatio
float32
`json:"liquidationRatio"`
StabilityFeeRatio
float32
`json:"stabilityFeeRatio"`
StabilityFeeRatio
float32
`json:"stabilityFeeRatio"`
Period
int64
`json:"period"`
Period
int64
`json:"period"`
TotalBalance
int64
`json:"totalBalance"`
Fee
int64
`json:"fee"`
Fee
int64
`json:"fee"`
}
}
plugin/dapp/issuance/commands/cmd.go
View file @
b48db05f
...
@@ -382,6 +382,7 @@ func IssuanceQuery(cmd *cobra.Command, args []string) {
...
@@ -382,6 +382,7 @@ func IssuanceQuery(cmd *cobra.Command, args []string) {
issuanceIDsS
=
append
(
issuanceIDsS
,
issuanceIDs
)
issuanceIDsS
=
append
(
issuanceIDsS
,
issuanceIDs
)
req
:=
&
pkt
.
ReqIssuanceInfos
{
IssuanceIds
:
issuanceIDsS
}
req
:=
&
pkt
.
ReqIssuanceInfos
{
IssuanceIds
:
issuanceIDsS
}
params
.
Payload
=
types
.
MustPBToJSON
(
req
)
params
.
Payload
=
types
.
MustPBToJSON
(
req
)
fmt
.
Println
(
params
.
Payload
)
var
res
pkt
.
RepIssuanceCurrentInfos
var
res
pkt
.
RepIssuanceCurrentInfos
ctx
:=
jsonrpc
.
NewRPCCtx
(
rpcLaddr
,
"Chain33.Query"
,
params
,
&
res
)
ctx
:=
jsonrpc
.
NewRPCCtx
(
rpcLaddr
,
"Chain33.Query"
,
params
,
&
res
)
ctx
.
Run
()
ctx
.
Run
()
...
...
plugin/dapp/issuance/executor/exec_del_local.go
View file @
b48db05f
...
@@ -32,19 +32,19 @@ func (c *Issuance) execDelLocal(tx *types.Transaction, receiptData *types.Receip
...
@@ -32,19 +32,19 @@ func (c *Issuance) execDelLocal(tx *types.Transaction, receiptData *types.Receip
set
.
KV
=
append
(
set
.
KV
,
c
.
addIssuanceRecordStatus
(
issuanceLog
.
PreStatus
,
issuanceLog
.
AccountAddr
,
issuanceLog
.
PreIndex
,
set
.
KV
=
append
(
set
.
KV
,
c
.
addIssuanceRecordStatus
(
issuanceLog
.
PreStatus
,
issuanceLog
.
AccountAddr
,
issuanceLog
.
PreIndex
,
issuanceLog
.
DebtId
,
issuanceLog
.
IssuanceId
)
...
)
issuanceLog
.
DebtId
,
issuanceLog
.
IssuanceId
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteIssuanceRecordStatus
(
issuanceLog
.
Status
,
issuanceLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteIssuanceRecordStatus
(
issuanceLog
.
Status
,
issuanceLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addIssuanceRecordAddr
(
issuanceLog
.
AccountAddr
,
issuanceLog
.
PreIndex
,
issuanceLog
.
DebtId
,
//
set.KV = append(set.KV, c.addIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.PreIndex, issuanceLog.DebtId,
issuanceLog
.
IssuanceId
)
...
)
//
issuanceLog.IssuanceId)...)
break
break
case
pty
.
TyLogIssuanceFeed
:
case
pty
.
TyLogIssuanceFeed
:
set
.
KV
=
append
(
set
.
KV
,
c
.
addIssuanceRecordStatus
(
issuanceLog
.
Status
,
issuanceLog
.
AccountAddr
,
issuanceLog
.
PreIndex
,
set
.
KV
=
append
(
set
.
KV
,
c
.
addIssuanceRecordStatus
(
issuanceLog
.
Status
,
issuanceLog
.
AccountAddr
,
issuanceLog
.
PreIndex
,
issuanceLog
.
DebtId
,
issuanceLog
.
IssuanceId
)
...
)
issuanceLog
.
DebtId
,
issuanceLog
.
IssuanceId
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteIssuanceRecordStatus
(
issuanceLog
.
Status
,
issuanceLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteIssuanceRecordStatus
(
issuanceLog
.
Status
,
issuanceLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addIssuanceRecordAddr
(
issuanceLog
.
AccountAddr
,
issuanceLog
.
PreIndex
,
issuanceLog
.
DebtId
,
//
set.KV = append(set.KV, c.addIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.PreIndex, issuanceLog.DebtId,
issuanceLog
.
IssuanceId
)
...
)
//
issuanceLog.IssuanceId)...)
// 如果没有被清算,需要把地址索引更新
//
//
如果没有被清算,需要把地址索引更新
if
issuanceLog
.
Status
==
pty
.
IssuanceUserStatusWarning
||
issuanceLog
.
Status
==
pty
.
IssuanceUserStatusExpire
{
//
if issuanceLog.Status == pty.IssuanceUserStatusWarning || issuanceLog.Status == pty.IssuanceUserStatusExpire {
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteIssuanceRecordAddr
(
issuanceLog
.
AccountAddr
,
issuanceLog
.
Index
)
...
)
//
set.KV = append(set.KV, c.deleteIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.Index)...)
}
//
}
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteIssuancePriceRecord
(
issuanceLog
.
RecordTime
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteIssuancePriceRecord
(
issuanceLog
.
RecordTime
)
...
)
break
break
case
pty
.
TyLogIssuanceClose
:
case
pty
.
TyLogIssuanceClose
:
...
...
plugin/dapp/issuance/executor/exec_local.go
View file @
b48db05f
...
@@ -35,18 +35,18 @@ func (c *Issuance) execLocal(tx *types.Transaction, receipt *types.ReceiptData)
...
@@ -35,18 +35,18 @@ func (c *Issuance) execLocal(tx *types.Transaction, receipt *types.ReceiptData)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteIssuanceRecordStatus
(
issuanceLog
.
PreStatus
,
issuanceLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteIssuanceRecordStatus
(
issuanceLog
.
PreStatus
,
issuanceLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addIssuanceRecordStatus
(
issuanceLog
.
Status
,
issuanceLog
.
AccountAddr
,
issuanceLog
.
Index
,
set
.
KV
=
append
(
set
.
KV
,
c
.
addIssuanceRecordStatus
(
issuanceLog
.
Status
,
issuanceLog
.
AccountAddr
,
issuanceLog
.
Index
,
issuanceLog
.
DebtId
,
issuanceLog
.
IssuanceId
)
...
)
issuanceLog
.
DebtId
,
issuanceLog
.
IssuanceId
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteIssuanceRecordAddr
(
issuanceLog
.
AccountAddr
,
issuanceLog
.
PreIndex
)
...
)
//
set.KV = append(set.KV, c.deleteIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.PreIndex)...)
break
break
case
pty
.
TyLogIssuanceFeed
:
case
pty
.
TyLogIssuanceFeed
:
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteIssuanceRecordStatus
(
issuanceLog
.
PreStatus
,
issuanceLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteIssuanceRecordStatus
(
issuanceLog
.
PreStatus
,
issuanceLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addIssuanceRecordStatus
(
issuanceLog
.
Status
,
issuanceLog
.
AccountAddr
,
issuanceLog
.
Index
,
set
.
KV
=
append
(
set
.
KV
,
c
.
addIssuanceRecordStatus
(
issuanceLog
.
Status
,
issuanceLog
.
AccountAddr
,
issuanceLog
.
Index
,
issuanceLog
.
DebtId
,
issuanceLog
.
IssuanceId
)
...
)
issuanceLog
.
DebtId
,
issuanceLog
.
IssuanceId
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteIssuanceRecordAddr
(
issuanceLog
.
AccountAddr
,
issuanceLog
.
PreIndex
)
...
)
//
set.KV = append(set.KV, c.deleteIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.PreIndex)...)
// 如果没有被清算,需要把地址索引更新
//
//
如果没有被清算,需要把地址索引更新
if
issuanceLog
.
Status
==
pty
.
IssuanceUserStatusWarning
||
issuanceLog
.
Status
==
pty
.
IssuanceUserStatusExpire
{
//
if issuanceLog.Status == pty.IssuanceUserStatusWarning || issuanceLog.Status == pty.IssuanceUserStatusExpire {
set
.
KV
=
append
(
set
.
KV
,
c
.
addIssuanceRecordAddr
(
issuanceLog
.
AccountAddr
,
issuanceLog
.
Index
,
issuanceLog
.
DebtId
,
//
set.KV = append(set.KV, c.addIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.Index, issuanceLog.DebtId,
issuanceLog
.
IssuanceId
)
...
)
//
issuanceLog.IssuanceId)...)
}
//
}
set
.
KV
=
append
(
set
.
KV
,
c
.
addIssuancePriceRecord
(
issuanceLog
.
RecordTime
,
issuanceLog
.
BtyPrice
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addIssuancePriceRecord
(
issuanceLog
.
RecordTime
,
issuanceLog
.
BtyPrice
)
...
)
break
break
case
pty
.
TyLogIssuanceClose
:
case
pty
.
TyLogIssuanceClose
:
...
...
plugin/dapp/issuance/executor/issuancedb.go
View file @
b48db05f
...
@@ -716,9 +716,9 @@ func (action *Action) systemLiquidation(issu *pty.Issuance, price float32) (*typ
...
@@ -716,9 +716,9 @@ func (action *Action) systemLiquidation(issu *pty.Issuance, price float32) (*typ
collDB
:=
&
IssuanceDB
{
*
issu
}
collDB
:=
&
IssuanceDB
{
*
issu
}
for
index
,
debtRecord
:=
range
issu
.
DebtRecords
{
for
index
,
debtRecord
:=
range
issu
.
DebtRecords
{
if
debtRecord
.
LiquidationPrice
*
PriceWarningRate
<
price
{
if
debtRecord
.
LiquidationPrice
*
PriceWarningRate
<
price
{
if
debtRecord
.
Status
==
pty
.
IssuanceUserStatus
SystemLiquidate
{
if
debtRecord
.
Status
==
pty
.
IssuanceUserStatus
Warning
{
debtRecord
.
Status
=
debtRecord
.
Pre
Status
debtRecord
.
PreStatus
=
debtRecord
.
Status
debtRecord
.
PreStatus
=
pty
.
IssuanceUserStatusSystemLiquid
ate
debtRecord
.
Status
=
pty
.
IssuanceUserStatusCre
ate
}
}
continue
continue
}
}
...
...
plugin/dapp/issuance/executor/query.go
View file @
b48db05f
...
@@ -24,6 +24,7 @@ func (c *Issuance) Query_IssuanceInfoByID(req *pty.ReqIssuanceInfo) (types.Messa
...
@@ -24,6 +24,7 @@ func (c *Issuance) Query_IssuanceInfoByID(req *pty.ReqIssuanceInfo) (types.Messa
Balance
:
issu
.
Balance
,
Balance
:
issu
.
Balance
,
CollateralValue
:
issu
.
CollateralValue
,
CollateralValue
:
issu
.
CollateralValue
,
DebtValue
:
issu
.
DebtValue
,
DebtValue
:
issu
.
DebtValue
,
Period
:
issu
.
Period
,
},
nil
},
nil
}
}
...
@@ -44,6 +45,7 @@ func (c *Issuance) Query_IssuanceInfoByIDs(req *pty.ReqIssuanceInfos) (types.Mes
...
@@ -44,6 +45,7 @@ func (c *Issuance) Query_IssuanceInfoByIDs(req *pty.ReqIssuanceInfos) (types.Mes
Balance
:
issu
.
Balance
,
Balance
:
issu
.
Balance
,
CollateralValue
:
issu
.
CollateralValue
,
CollateralValue
:
issu
.
CollateralValue
,
DebtValue
:
issu
.
DebtValue
,
DebtValue
:
issu
.
DebtValue
,
Period
:
issu
.
Period
,
})
})
}
}
...
...
plugin/dapp/issuance/proto/issuance.proto
View file @
b48db05f
...
@@ -135,6 +135,7 @@ message RepIssuanceCurrentInfo {
...
@@ -135,6 +135,7 @@ message RepIssuanceCurrentInfo {
int64
balance
=
5
;
//剩余可借贷金额(ccny)
int64
balance
=
5
;
//剩余可借贷金额(ccny)
int64
collateralValue
=
6
;
//抵押物总数量(bty)
int64
collateralValue
=
6
;
//抵押物总数量(bty)
int64
debtValue
=
7
;
//产生的ccny数量
int64
debtValue
=
7
;
//产生的ccny数量
int64
period
=
8
;
//借贷最大期限
}
}
// 根据ID列表查询多期借贷信息
// 根据ID列表查询多期借贷信息
...
...
plugin/dapp/issuance/types/issuance.pb.go
View file @
b48db05f
...
@@ -1073,6 +1073,7 @@ type RepIssuanceCurrentInfo struct {
...
@@ -1073,6 +1073,7 @@ type RepIssuanceCurrentInfo struct {
Balance
int64
`protobuf:"varint,5,opt,name=balance,proto3" json:"balance,omitempty"`
Balance
int64
`protobuf:"varint,5,opt,name=balance,proto3" json:"balance,omitempty"`
CollateralValue
int64
`protobuf:"varint,6,opt,name=collateralValue,proto3" json:"collateralValue,omitempty"`
CollateralValue
int64
`protobuf:"varint,6,opt,name=collateralValue,proto3" json:"collateralValue,omitempty"`
DebtValue
int64
`protobuf:"varint,7,opt,name=debtValue,proto3" json:"debtValue,omitempty"`
DebtValue
int64
`protobuf:"varint,7,opt,name=debtValue,proto3" json:"debtValue,omitempty"`
Period
int64
`protobuf:"varint,8,opt,name=period,proto3" json:"period,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
@@ -1152,6 +1153,13 @@ func (m *RepIssuanceCurrentInfo) GetDebtValue() int64 {
...
@@ -1152,6 +1153,13 @@ func (m *RepIssuanceCurrentInfo) GetDebtValue() int64 {
return
0
return
0
}
}
func
(
m
*
RepIssuanceCurrentInfo
)
GetPeriod
()
int64
{
if
m
!=
nil
{
return
m
.
Period
}
return
0
}
// 根据ID列表查询多期借贷信息
// 根据ID列表查询多期借贷信息
type
ReqIssuanceInfos
struct
{
type
ReqIssuanceInfos
struct
{
IssuanceIds
[]
string
`protobuf:"bytes,1,rep,name=issuanceIds,proto3" json:"issuanceIds,omitempty"`
IssuanceIds
[]
string
`protobuf:"bytes,1,rep,name=issuanceIds,proto3" json:"issuanceIds,omitempty"`
...
@@ -1590,72 +1598,73 @@ func init() {
...
@@ -1590,72 +1598,73 @@ func init() {
func
init
()
{
proto
.
RegisterFile
(
"issuance.proto"
,
fileDescriptor_7110f4228953d675
)
}
func
init
()
{
proto
.
RegisterFile
(
"issuance.proto"
,
fileDescriptor_7110f4228953d675
)
}
var
fileDescriptor_7110f4228953d675
=
[]
byte
{
var
fileDescriptor_7110f4228953d675
=
[]
byte
{
// 10
69
bytes of a gzipped FileDescriptorProto
// 10
74
bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xbc
,
0x57
,
0xdd
,
0x6e
,
0xe3
,
0x44
,
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xbc
,
0x57
,
0xdd
,
0x6e
,
0xe3
,
0x44
,
0x14
,
0xae
,
0xed
,
0x38
,
0x3f
,
0x27
,
0x6d
,
0xda
,
0x9d
,
0xed
,
0x16
,
0x6b
,
0x05
,
0xab
,
0xc8
,
0xe2
,
0x14
,
0xae
,
0xed
,
0x38
,
0x3f
,
0x27
,
0x6d
,
0xda
,
0x9d
,
0xed
,
0x16
,
0x6b
,
0x05
,
0xab
,
0xc8
,
0xe2
,
0x22
,
0x0b
,
0xa8
,
0x85
,
0x16
,
0x21
,
0x71
,
0x47
,
0xd3
,
0x02
,
0x8d
,
0xc4
,
0x22
,
0x64
,
0x56
,
0x2b
,
0x22
,
0x0b
,
0xa8
,
0x85
,
0x16
,
0x21
,
0x71
,
0x47
,
0xd3
,
0x02
,
0x8d
,
0xc4
,
0x22
,
0x64
,
0x56
,
0x2b
,
0x6e
,
0x5d
,
0x7b
,
0xba
,
0x32
,
0x72
,
0x63
,
0xaf
,
0x3d
,
0xa9
,
0x36
,
0xf7
,
0xdc
,
0x73
,
0xcf
,
0x53
,
0x6e
,
0x5d
,
0x7b
,
0xba
,
0x32
,
0x72
,
0x63
,
0xaf
,
0x3d
,
0xa9
,
0x36
,
0x4f
,
0xc1
,
0x3d
,
0xe2
,
0x21
,
0xf0
,
0x02
,
0xbc
,
0x15
,
0x0f
,
0x80
,
0xce
,
0x99
,
0xb1
,
0xc7
,
0x7f
,
0x69
,
0x22
,
0x2e
,
0xf6
,
0xa6
,
0x78
,
0x01
,
0xde
,
0x8a
,
0x07
,
0x40
,
0xe7
,
0xcc
,
0xd8
,
0xe3
,
0xbf
,
0x34
,
0x11
,
0x17
,
0x7b
,
0x53
,
0xca
,
0x9c
,
0xf9
,
0xe6
,
0xfc
,
0x7e
,
0xf3
,
0x79
,
0x0a
,
0x93
,
0x28
,
0xcf
,
0x57
,
0xfe
,
0x32
,
0xe0
,
0x65
,
0xce
,
0x7c
,
0x73
,
0x7e
,
0xbf
,
0xf9
,
0x3c
,
0x85
,
0x49
,
0x94
,
0xe7
,
0x2b
,
0x7f
,
0x19
,
0xf0
,
0xa7
,
0x69
,
0x96
,
0x88
,
0x84
,
0xd9
,
0x62
,
0x9d
,
0xf2
,
0xdc
,
0xfd
,
0xb7
,
0x07
,
0xc3
,
0x85
,
0xda
,
0xd3
,
0x34
,
0x4b
,
0x44
,
0xc2
,
0x6c
,
0xb1
,
0x4e
,
0x79
,
0xee
,
0xfe
,
0xdb
,
0x83
,
0xe1
,
0x42
,
0xed
,
0x61
,
0x2f
,
0x00
,
0x0a
,
0xd4
,
0x22
,
0x74
,
0x8c
,
0xa9
,
0x31
,
0x1b
,
0x79
,
0x15
,
0x0b
,
0x73
,
0x61
,
0xb0
,
0x17
,
0x00
,
0x05
,
0x6a
,
0x11
,
0x3a
,
0xc6
,
0xd4
,
0x98
,
0x8d
,
0xbc
,
0x8a
,
0x85
,
0xb9
,
0xb0
,
0x5f
,
0x24
,
0xc2
,
0x8f
,
0xe7
,
0x7e
,
0x8c
,
0x16
,
0xc7
,
0x9c
,
0x1a
,
0x33
,
0xcb
,
0xab
,
0xd9
,
0xd8
,
0x2f
,
0x12
,
0xe1
,
0xc7
,
0x73
,
0x3f
,
0x46
,
0x8b
,
0x63
,
0x4e
,
0x8d
,
0x99
,
0xe5
,
0xd5
,
0x6c
,
0x6c
,
0x14
,
0xc6
,
0x21
,
0xbf
,
0x15
,
0x57
,
0x3c
,
0x8a
,
0xa3
,
0xe5
,
0x5b
,
0xc7
,
0x22
,
0x48
,
0xd5
,
0xc4
,
0x0a
,
0xe3
,
0x90
,
0xdf
,
0x8a
,
0x2b
,
0x1e
,
0xc5
,
0xd1
,
0xf2
,
0xad
,
0x63
,
0x11
,
0xa4
,
0x6a
,
0x62
,
0x3e
,
0x83
,
0xa3
,
0x38
,
0x7a
,
0xb7
,
0x8a
,
0x42
,
0x5f
,
0x44
,
0xc9
,
0xd2
,
0xc3
,
0xbf
,
0x4e
,
0x6f
,
0x9f
,
0xc1
,
0x51
,
0x1c
,
0xbd
,
0x5b
,
0x45
,
0xa1
,
0x2f
,
0xa2
,
0x64
,
0xe9
,
0xe1
,
0x5f
,
0xa7
,
0x37
,
0x6a
,
0xcc
,
0x4c
,
0xaf
,
0x65
,
0x67
,
0x33
,
0x38
,
0x0c
,
0x92
,
0x38
,
0xf6
,
0x05
,
0xcf
,
0xfc
,
0xf8
,
0x35
,
0x66
,
0xa6
,
0xd7
,
0xb2
,
0xb3
,
0x19
,
0x1c
,
0x06
,
0x49
,
0x1c
,
0xfb
,
0x82
,
0x67
,
0x7e
,
0xfc
,
0x8d
,
0x1f
,
0xaf
,
0xb8
,
0x63
,
0x93
,
0xc7
,
0xa6
,
0x99
,
0x7d
,
0x0c
,
0x23
,
0x0c
,
0x22
,
0x31
,
0x7d
,
0xc6
,
0x8f
,
0x57
,
0xdc
,
0xb1
,
0xc9
,
0x63
,
0xd3
,
0xcc
,
0x3e
,
0x86
,
0x11
,
0x06
,
0x91
,
0x98
,
0x3e
,
0xc2
,
0x68
,
0x03
,
0xbb
,
0x90
,
0x59
,
0x79
,
0x3c
,
0x48
,
0xb2
,
0x30
,
0x77
,
0x06
,
0x53
,
0x6b
,
0x36
,
0x61
,
0xb4
,
0x81
,
0x5d
,
0xc8
,
0xac
,
0x3c
,
0x1e
,
0x24
,
0x59
,
0x98
,
0x3b
,
0x83
,
0xa9
,
0x35
,
0x1b
,
0x3e
,
0x7f
,
0x72
,
0x4a
,
0x3d
,
0x38
,
0xbd
,
0x2e
,
0x77
,
0xbc
,
0x2a
,
0x8a
,
0x7d
,
0x0b
,
0x93
,
0x68
,
0x9f
,
0x3f
,
0x39
,
0xa5
,
0x1e
,
0x9c
,
0x5e
,
0x97
,
0x3b
,
0x5e
,
0x15
,
0xc5
,
0xbe
,
0x85
,
0x49
,
0xb4
,
0xf9
,
0xe0
,
0xc7
,
0x51
,
0x58
,
0x9c
,
0x1b
,
0x6e
,
0x3a
,
0xd7
,
0x00
,
0xb2
,
0x13
,
0xe8
,
0xe7
,
0xc2
,
0x7c
,
0xf0
,
0xe3
,
0x28
,
0x2c
,
0xce
,
0x0d
,
0x37
,
0x9d
,
0x6b
,
0x00
,
0xd9
,
0x09
,
0xf4
,
0x73
,
0xe1
,
0x17
,
0xab
,
0xdc
,
0x19
,
0x4d
,
0x8d
,
0x99
,
0xed
,
0xa9
,
0x15
,
0xfb
,
0x06
,
0x4e
,
0x30
,
0xeb
,
0x5c
,
0x8b
,
0x55
,
0xee
,
0x8c
,
0xa6
,
0xc6
,
0xcc
,
0xf6
,
0xd4
,
0x8a
,
0x7d
,
0x03
,
0x27
,
0x98
,
0x75
,
0x2e
,
0xfc
,
0xa4
,
0x2b
,
0xfd
,
0x25
,
0x8b
,
0x02
,
0xee
,
0x00
,
0x75
,
0x60
,
0xc3
,
0x2e
,
0xfa
,
0x4b
,
0x79
,
0x7e
,
0xd2
,
0x95
,
0xfe
,
0x92
,
0x45
,
0x01
,
0x77
,
0x80
,
0x3a
,
0xb0
,
0x61
,
0x17
,
0xfd
,
0xa5
,
0x3c
,
0x16
,
0x25
,
0xa1
,
0x33
,
0xa6
,
0xd2
,
0xd4
,
0x8a
,
0x7a
,
0x49
,
0x27
,
0xbe
,
0x7f
,
0x9f
,
0x46
,
0x19
,
0x8b
,
0x92
,
0xd0
,
0x19
,
0x53
,
0x69
,
0x6a
,
0x45
,
0xbd
,
0xa4
,
0x13
,
0xdf
,
0xbf
,
0x4f
,
0xa3
,
0x8c
,
0x7f
,
0x1d
,
0xdd
,
0x73
,
0x67
,
0x9f
,
0x10
,
0x2d
,
0x3b
,
0x4e
,
0x37
,
0xc8
,
0xb8
,
0x2f
,
0x24
,
0xea
,
0xbf
,
0x8e
,
0xee
,
0xb9
,
0xb3
,
0x4f
,
0x88
,
0x96
,
0x1d
,
0xa7
,
0x1b
,
0x64
,
0xdc
,
0x17
,
0x12
,
0x75
,
0x80
,
0x50
,
0x15
,
0x0b
,
0x73
,
0x60
,
0x70
,
0xab
,
0x06
,
0x3b
,
0xa1
,
0xcd
,
0x62
,
0x59
,
0xf0
,
0x82
,
0x40
,
0xa8
,
0x8a
,
0x85
,
0x39
,
0x30
,
0xb8
,
0x55
,
0x83
,
0x9d
,
0xd0
,
0x66
,
0xb1
,
0x2c
,
0x78
,
0xc1
,
0x67
,
0x97
,
0x61
,
0x98
,
0x39
,
0x87
,
0x9a
,
0x17
,
0xd2
,
0xc2
,
0x8e
,
0xc1
,
0x8e
,
0x96
,
0x21
,
0x7f
,
0xb3
,
0xcb
,
0x30
,
0xcc
,
0x9c
,
0x43
,
0xcd
,
0x0b
,
0x69
,
0x61
,
0xc7
,
0x60
,
0x47
,
0xcb
,
0x90
,
0xbf
,
0xef
,
0x1c
,
0xd1
,
0x39
,
0xb9
,
0x60
,
0xcf
,
0x61
,
0x98
,
0x66
,
0x7c
,
0x41
,
0x1b
,
0x4f
,
0x68
,
0xa3
,
0x77
,
0x8e
,
0xe8
,
0x9c
,
0x5c
,
0xb0
,
0xe7
,
0x30
,
0x4c
,
0x33
,
0xbe
,
0xa0
,
0x8d
,
0x27
,
0xb4
,
0x51
,
0x5c
,
0xbb
,
0x7f
,
0x5b
,
0x00
,
0xba
,
0x7d
,
0x48
,
0x1a
,
0x3f
,
0x08
,
0x92
,
0xd5
,
0x52
,
0x50
,
0x04
,
0xae
,
0xdd
,
0xbf
,
0x2d
,
0x00
,
0xdd
,
0x3e
,
0x24
,
0x8d
,
0x1f
,
0x04
,
0xc9
,
0x6a
,
0x29
,
0x28
,
0x82
,
0xc9
,
0xbc
,
0xaa
,
0x09
,
0xc7
,
0x9b
,
0x0b
,
0x3f
,
0x13
,
0x94
,
0xbb
,
0xe4
,
0x9d
,
0x36
,
0x74
,
0xd1
,
0x64
,
0x5e
,
0xd5
,
0x84
,
0xe3
,
0xcd
,
0x85
,
0x9f
,
0x09
,
0xca
,
0x5d
,
0xf2
,
0x4e
,
0x1b
,
0xba
,
0x68
,
0xc4
,
0xea
,
0xa6
,
0x49
,
0x0d
,
0x29
,
0x3b
,
0x2f
,
0xb9
,
0xd7
,
0x34
,
0xd7
,
0x09
,
0x65
,
0x37
,
0x09
,
0x62
,
0x75
,
0xd3
,
0xa4
,
0x86
,
0x94
,
0x9d
,
0x97
,
0xdc
,
0x6b
,
0x9a
,
0xeb
,
0x84
,
0xb2
,
0x9b
,
0x84
,
0x55
,
0x27
,
0xb1
,
0x74
,
0xd4
,
0x6f
,
0x91
,
0xb8
,
0x1c
,
0x9e
,
0x22
,
0xc3
,
0xa0
,
0x46
,
0x86
,
0x4f
,
0xaa
,
0x93
,
0x58
,
0x3a
,
0xea
,
0xb7
,
0x48
,
0x5c
,
0x0e
,
0x4f
,
0x91
,
0x61
,
0x50
,
0x23
,
0xc3
,
0xa7
,
0xe1
,
0xa0
,
0xc0
,
0xca
,
0x99
,
0x0c
,
0x29
,
0x4a
,
0xdd
,
0x88
,
0xcd
,
0xe7
,
0x7a
,
0xb8
,
0x23
,
0x39
,
0x70
,
0x50
,
0x60
,
0xe5
,
0x4c
,
0x86
,
0x14
,
0xa5
,
0x6e
,
0xc4
,
0xe6
,
0x73
,
0x3d
,
0xdc
,
0x91
,
0x1c
,
0x36
,
0x6d
,
0xc1
,
0x3c
,
0xd3
,
0x8c
,
0xff
,
0x2a
,
0x03
,
0x00
,
0x05
,
0xd0
,
0x06
,
0x8c
,
0x8d
,
0x49
,
0x9b
,
0xb6
,
0x60
,
0x9e
,
0x69
,
0xc6
,
0x7f
,
0x95
,
0x01
,
0x80
,
0x02
,
0x68
,
0x03
,
0xc6
,
0xc6
,
0xa4
,
0x2f
,
0x24
,
0x71
,
0x46
,
0x9e
,
0x5a
,
0xe9
,
0x91
,
0xed
,
0x6f
,
0x1a
,
0xd9
,
0x41
,
0x63
,
0x64
,
0x6f
,
0x17
,
0x92
,
0x38
,
0x23
,
0x4f
,
0xad
,
0xf4
,
0xc8
,
0xf6
,
0x37
,
0x8d
,
0xec
,
0xa0
,
0x31
,
0xb2
,
0x37
,
0xc0
,
0x29
,
0x84
,
0xe2
,
0x32
,
0xcf
,
0xb9
,
0xa0
,
0xda
,
0xd4
,
0xfc
,
0x5e
,
0x00
,
0x64
,
0xf4
,
0x8b
,
0xe0
,
0x14
,
0x42
,
0x71
,
0x99
,
0xe7
,
0x5c
,
0x50
,
0x6d
,
0x6a
,
0x7e
,
0x2f
,
0x00
,
0x32
,
0xfa
,
0x45
,
0x72
,
0x34
,
0x64
,
0x8e
,
0xda
,
0x82
,
0x7e
,
0x6f
,
0xc5
,
0x5a
,
0x76
,
0xc9
,
0xa4
,
0x2e
,
0x95
,
0x6b
,
0x39
,
0x1a
,
0x32
,
0x47
,
0x6d
,
0x41
,
0xbf
,
0xb7
,
0x62
,
0x2d
,
0xbb
,
0x64
,
0x52
,
0x97
,
0xca
,
0xb5
,
0xf7
,
0x1f
,
0x13
,
0x26
,
0xa5
,
0xe3
,
0x00
,
0xbb
,
0xc6
,
0xce
,
0xa0
,
0x2f
,
0x79
,
0x49
,
0xae
,
0xc6
,
0xfb
,
0x8f
,
0x09
,
0x93
,
0xd2
,
0x71
,
0x80
,
0x5d
,
0x63
,
0x67
,
0xd0
,
0x97
,
0xbc
,
0x24
,
0x57
,
0xe3
,
0xe7
,
0xcf
,
0xd4
,
0x85
,
0x2b
,
0x60
,
0x57
,
0xb4
,
0x79
,
0xb3
,
0xe7
,
0x29
,
0x18
,
0x7b
,
0x09
,
0x3d
,
0xf3
,
0x67
,
0xea
,
0xc2
,
0x15
,
0xb0
,
0x2b
,
0xda
,
0xbc
,
0xd9
,
0xf3
,
0x14
,
0x8c
,
0xbd
,
0x84
,
0x1e
,
0xac
,
0x8b
,
0x7c
,
0x8f
,
0xcf
,
0x9f
,
0x36
,
0xe0
,
0x48
,
0xb4
,
0x9b
,
0x3d
,
0x8f
,
0x20
,
0xec
,
0x0b
,
0xd6
,
0x45
,
0xbe
,
0xc7
,
0xe7
,
0x4f
,
0x1b
,
0x70
,
0x24
,
0xda
,
0xcd
,
0x9e
,
0x47
,
0x10
,
0xf6
,
0x05
,
0xb0
,
0x33
,
0x9e
,
0xfa
,
0x6b
,
0x22
,
0xc8
,
0xf8
,
0xfc
,
0xb8
,
0x81
,
0xf5
,
0x70
,
0xef
,
0x66
,
0xcf
,
0xd8
,
0x19
,
0x4f
,
0xfd
,
0x35
,
0x11
,
0x64
,
0x7c
,
0x7e
,
0xdc
,
0xc0
,
0x7a
,
0xb8
,
0x77
,
0xb3
,
0xe7
,
0x93
,
0x20
,
0x74
,
0x7c
,
0xc7
,
0x79
,
0x48
,
0x1c
,
0x69
,
0x3b
,
0xfe
,
0x81
,
0xf3
,
0x10
,
0x1d
,
0x23
,
0x49
,
0x10
,
0x3a
,
0xbe
,
0xe3
,
0x3c
,
0x24
,
0x8e
,
0xb4
,
0x1d
,
0xff
,
0xc0
,
0x79
,
0x88
,
0x8e
,
0x11
,
0x04
,
0x1d
,
0x07
,
0x71
,
0x92
,
0x4b
,
0xae
,
0xb4
,
0x1d
,
0x5f
,
0xe1
,
0x1e
,
0x3a
,
0x26
,
0x10
,
0x96
,
0x82
,
0x8e
,
0x83
,
0x38
,
0xc9
,
0x25
,
0x57
,
0xda
,
0x8e
,
0xaf
,
0x70
,
0x0f
,
0x1d
,
0x13
,
0x08
,
0x4b
,
0x78
,
0xef
,
0x2f
,
0xfd
,
0xb7
,
0x92
,
0x35
,
0xed
,
0x12
,
0x5f
,
0xd1
,
0x26
,
0x96
,
0x28
,
0x61
,
0x6c
,
0xbc
,
0xf7
,
0x97
,
0xfe
,
0x5b
,
0xc9
,
0x9a
,
0x76
,
0x89
,
0xaf
,
0x68
,
0x13
,
0x4b
,
0x94
,
0x30
,
0x36
,
0x02
,
0xa6
,
0x58
,
0xab
,
0xf9
,
0x9a
,
0x62
,
0x3d
,
0x1f
,
0x80
,
0xfd
,
0x80
,
0x4c
,
0x74
,
0xbf
,
0xd4
,
0x01
,
0x53
,
0xac
,
0xd5
,
0x7c
,
0x4d
,
0xb1
,
0x9e
,
0x0f
,
0xc0
,
0x7e
,
0x40
,
0x26
,
0xba
,
0x5f
,
0xea
,
0xed
,
0x93
,
0x87
,
0x70
,
0x1a
,
0xf9
,
0x2a
,
0x95
,
0x77
,
0x33
,
0x77
,
0x8c
,
0xa9
,
0x85
,
0xd7
,
0x55
,
0xf6
,
0xc9
,
0x43
,
0x38
,
0x8d
,
0x7c
,
0x95
,
0xca
,
0xbb
,
0x99
,
0x3b
,
0xc6
,
0xd4
,
0xc2
,
0xeb
,
0xaa
,
0x5b
,
0xdc
,
0xbf
,
0x0c
,
0x7d
,
0x44
,
0xb6
,
0xb2
,
0xa5
,
0xec
,
0xc6
,
0x76
,
0x65
,
0x37
,
0x77
,
0x53
,
0x2d
,
0xee
,
0x9f
,
0x86
,
0x3e
,
0x22
,
0x5b
,
0xd9
,
0x52
,
0x76
,
0x63
,
0xbb
,
0xb2
,
0x9b
,
0xbb
,
0x29
,
0x76
,
0x6b
,
0x83
,
0xb2
,
0x6b
,
0x45
,
0xeb
,
0x55
,
0x15
,
0xcd
,
0xbd
,
0x86
,
0xfd
,
0xea
,
0xdc
,
0xb6
,
0xbb
,
0xb5
,
0x41
,
0xd9
,
0xb5
,
0xa2
,
0xf5
,
0xaa
,
0x8a
,
0xe6
,
0x5e
,
0xc3
,
0x7e
,
0x75
,
0x6e
,
0x5b
,
0x7e
,
0x93
,
0x8e
,
0x55
,
0x1f
,
0x54
,
0x3e
,
0xaa
,
0x29
,
0x3f
,
0xc2
,
0x41
,
0x6d
,
0xa2
,
0x5b
,
0xdd
,
0xbf
,
0x49
,
0xc7
,
0xaa
,
0x0f
,
0x2a
,
0x1f
,
0xd5
,
0x94
,
0x1f
,
0xe1
,
0xa0
,
0x36
,
0xd1
,
0xad
,
0x6e
,
0xe8
,
0x7b
,
0x62
,
0x56
,
0xef
,
0x89
,
0xfb
,
0x9b
,
0x4e
,
0x07
,
0xa7
,
0x8d
,
0x4c
,
0x46
,
0xa1
,
0x78
,
0xf4
,
0x3d
,
0x31
,
0xab
,
0xf7
,
0xc4
,
0xfd
,
0x4d
,
0xa7
,
0x83
,
0xd3
,
0x46
,
0x26
,
0xa3
,
0x50
,
0xbc
,
0xbd
,
0x4e
,
0x65
,
0x93
,
0x6c
,
0xaf
,
0x5c
,
0x63
,
0x2a
,
0xa9
,
0xa2
,
0xb8
,
0x35
,
0x33
,
0x3d
,
0xb9
,
0x5e
,
0xa7
,
0xb2
,
0x49
,
0xb6
,
0x57
,
0xae
,
0x31
,
0x95
,
0x54
,
0x51
,
0xdc
,
0x9a
,
0x99
,
0x9e
,
0x5c
,
0x40
,
0xcf
,
0x0f
,
0x49
,
0xbc
,
0xba
,
0x47
,
0x49
,
0xb2
,
0xb0
,
0x50
,
0xb9
,
0x72
,
0xcf
,
0x74
,
0x8a
,
0xa0
,
0xe7
,
0x87
,
0x24
,
0x5e
,
0xdd
,
0xa3
,
0x24
,
0x59
,
0x58
,
0xa8
,
0x5c
,
0xb9
,
0x67
,
0x3a
,
0x45
,
0xc4
,
0x8d
,
0x6d
,
0x29
,
0xba
,
0x7f
,
0x9a
,
0x70
,
0xe8
,
0xf1
,
0x80
,
0x47
,
0xa9
,
0xd8
,
0xf9
,
0x8b
,
0xe2
,
0xc6
,
0xb6
,
0x14
,
0xdd
,
0x3f
,
0x4c
,
0x38
,
0xf4
,
0x78
,
0xc0
,
0xa3
,
0x54
,
0xec
,
0xfc
,
0xc5
,
0xdd
,
0x10
,
0x56
,
0xb3
,
0x2d
,
0xac
,
0xba
,
0x70
,
0xab
,
0x26
,
0x10
,
0x5a
,
0xb4
,
0x7a
,
0x35
,
0xd1
,
0x6e
,
0x08
,
0xab
,
0xd9
,
0x16
,
0x56
,
0x5d
,
0xb8
,
0x55
,
0x13
,
0x08
,
0x2d
,
0x5a
,
0xbd
,
0x9a
,
0x68
,
0xaa
,
0xc9
,
0x8d
,
0xdd
,
0x94
,
0x9b
,
0x52
,
0x56
,
0xfa
,
0x9b
,
0x64
,
0x65
,
0x50
,
0x97
,
0x95
,
0x86
,
0xd5
,
0xe4
,
0xc6
,
0x6e
,
0xca
,
0x4d
,
0x29
,
0x2b
,
0xfd
,
0x4d
,
0xb2
,
0x32
,
0xa8
,
0xcb
,
0x4a
,
0x43
,
0x74
,
0x0c
,
0x1f
,
0x95
,
0x8e
,
0x51
,
0x43
,
0x3a
,
0x32
,
0xcd
,
0x63
,
0x2d
,
0x44
,
0x8f
,
0xf6
,
0x83
,
0x3a
,
0x86
,
0x8f
,
0x4a
,
0xc7
,
0xa8
,
0x21
,
0x1d
,
0x99
,
0xe6
,
0xb1
,
0x16
,
0xa2
,
0x47
,
0xfb
,
0xc1
,
0x41
,
0xcf
,
0xd7
,
0x8d
,
0xa0
,
0xdf
,
0x1b
,
0x3b
,
0x50
,
0xd6
,
0xd2
,
0xab
,
0xd4
,
0xe2
,
0xce
,
0xe1
,
0xa0
,
0xe7
,
0xeb
,
0x46
,
0xd0
,
0xef
,
0x8d
,
0x1d
,
0x28
,
0x6b
,
0xe9
,
0x55
,
0x6a
,
0x71
,
0xe7
,
0x70
,
0xb0
,
0x1e
,
0x33
,
0x67
,
0x67
,
0x30
,
0xc8
,
0xd4
,
0x03
,
0xc1
,
0xa0
,
0x07
,
0xc2
,
0xb3
,
0x96
,
0xa8
,
0x58
,
0x8f
,
0x99
,
0xb3
,
0x33
,
0x18
,
0x64
,
0xea
,
0x81
,
0x60
,
0xd0
,
0x03
,
0xe1
,
0x59
,
0x4b
,
0x54
,
0xd0
,
0x23
,
0xa1
,
0x40
,
0xb9
,
0x5f
,
0xe1
,
0x20
,
0xdf
,
0x15
,
0xbb
,
0x8b
,
0xe5
,
0x5d
,
0xb2
,
0x75
,
0xe8
,
0x91
,
0x50
,
0xa0
,
0xdc
,
0xaf
,
0x70
,
0x90
,
0xef
,
0x8a
,
0xdd
,
0xc5
,
0xf2
,
0x2e
,
0xd9
,
0x3a
,
0xf8
,
0x7f
,
0x98
,
0x70
,
0xe2
,
0xf1
,
0xb4
,
0x64
,
0xcc
,
0x2a
,
0xcb
,
0xf8
,
0x52
,
0xd0
,
0x51
,
0x3d
,
0xfc
,
0xbf
,
0x4c
,
0x38
,
0xf1
,
0x78
,
0x5a
,
0x32
,
0x66
,
0x95
,
0x65
,
0x7c
,
0x29
,
0xe8
,
0xa8
,
0x9e
,
0x29
,
0xa3
,
0x36
,
0xa9
,
0x0f
,
0xff
,
0x5a
,
0xab
,
0xbc
,
0x20
,
0xec
,
0xfa
,
0x0b
,
0xa2
,
0xe3
,
0x03
,
0x94
,
0x51
,
0x9b
,
0xd4
,
0x87
,
0x7f
,
0xad
,
0x55
,
0x5e
,
0x10
,
0x76
,
0xfd
,
0x05
,
0xd1
,
0xf1
,
0x81
,
0xdd
,
0xdf
,
0xe1
,
0x1d
,
0x37
,
0x68
,
0x7c
,
0x76
,
0xdd
,
0xaf
,
0xe1
,
0xa8
,
0xd1
,
0xb9
,
0x1c
,
0x6b
,
0xee
,
0xef
,
0xf0
,
0x8e
,
0x1b
,
0x34
,
0x3f
,
0xbb
,
0x5a
,
0x35
,
0x86
,
0x35
,
0xd5
,
0xf8
,
0x1a
,
0x8e
,
0xd0
,
0x8d
,
0x2a
,
0xf4
,
0xae
,
0x6a
,
0x72
,
0x7f
,
0x86
,
0x8f
,
0xba
,
0x7b
,
0x97
,
0xb3
,
0x0b
,
0x1c
,
0x1a
,
0x1d
,
0xcd
,
0xb1
,
0x36
,
0xdd
,
0xc0
,
0x42
,
0x07
,
0xab
,
0x26
,
0xf7
,
0x67
,
0xf8
,
0xa8
,
0xbb
,
0xf2
,
0x5d
,
0x52
,
0x4c
,
0xee
,
0x13
,
0x35
,
0xb9
,
0x6e
,
0xb8
,
0x27
,
0xb1
,
0xee
,
0x15
,
0x3c
,
0xad
,
0xa7
,
0x39
,
0xbb
,
0xc0
,
0xe1
,
0xdf
,
0x25
,
0xc5
,
0x44
,
0x3f
,
0x51
,
0x13
,
0xed
,
0x86
,
0x7b
,
0x12
,
0x64
,
0x31
,
0x5f
,
0xeb
,
0x6f
,
0x6d
,
0xe7
,
0x20
,
0x4a
,
0x22
,
0x99
,
0x55
,
0x22
,
0xb9
,
0x30
,
0xa9
,
0xeb
,
0x5e
,
0xc1
,
0xd3
,
0x4a
,
0x16
,
0xf3
,
0xb5
,
0xfe
,
0x06
,
0x77
,
0x0e
,
0xa8
,
0x24
,
0x98
,
0x59
,
0x44
,
0x59
,
0x5c
,
0xe7
,
0xec
,
0x08
,
0xac
,
0xc5
,
0x75
,
0x51
,
0x00
,
0xfe
,
0x74
,
0x43
,
0x70
,
0x2a
,
0x25
,
0x98
,
0x0b
,
0x93
,
0x4a
,
0x94
,
0xc5
,
0x75
,
0xce
,
0x8e
,
0xc0
,
0x5a
,
0x5c
,
0x17
,
0x05
,
0xe0
,
0x81
,
0x14
,
0xdf
,
0xe6
,
0x6b
,
0xba
,
0xb8
,
0xff
,
0x87
,
0xea
,
0x65
,
0x26
,
0x56
,
0x35
,
0x93
,
0xdf
,
0x4f
,
0x37
,
0x04
,
0xa7
,
0x12
,
0x48
,
0xf1
,
0x70
,
0xbe
,
0xa6
,
0x0b
,
0xfd
,
0x7f
,
0xae
,
0x40
,
0x99
,
0xe1
,
0x79
,
0x57
,
0x14
,
0x55
,
0xd5
,
0x0e
,
0xca
,
0xa9
,
0xaa
,
0x36
,
0xbb
,
0xab
,
0xae
,
0xc5
,
0xba
,
0x89
,
0x55
,
0xcd
,
0xe4
,
0x77
,
0x78
,
0xde
,
0x15
,
0x45
,
0x55
,
0xb5
,
0x83
,
0xa2
,
0xaa
,
0xaa
,
0xcd
,
0x04
,
0x56
,
0xa9
,
0xba
,
0xb8
,
0x41
,
0x9f
,
0x37
,
0x6f
,
0x50
,
0xc7
,
0x13
,
0xbb
,
0xbc
,
0x3d
,
0xaf
,
0xee
,
0xaa
,
0x6b
,
0xb1
,
0x2e
,
0x81
,
0x55
,
0xaa
,
0x2e
,
0x6e
,
0xd6
,
0xe7
,
0xcd
,
0x9b
,
0xd5
,
0xf1
,
0x6a
,
0xdd
,
0x47
,
0xc4
,
0x2e
,
0x37
,
0x68
,
0xa3
,
0xc2
,
0x7f
,
0x87
,
0xee
,
0xd2
,
0x96
,
0xbb
,
0x97
,
0xf4
,
0x2e
,
0x6f
,
0xd5
,
0xab
,
0x5a
,
0xf7
,
0x11
,
0xb1
,
0xcb
,
0xcd
,
0xda
,
0xa8
,
0xfc
,
0xdf
,
0xa1
,
0xd0
,
0x97
,
0x01
,
0xd5
,
0x1b
,
0xa4
,
0x23
,
0x23
,
0x05
,
0xb8
,
0xed
,
0xd3
,
0x7f
,
0x54
,
0x17
,
0xff
,
0xbb
,
0xb4
,
0xe5
,
0xee
,
0x25
,
0xf4
,
0x65
,
0x40
,
0xf5
,
0x36
,
0xe9
,
0xc8
,
0x48
,
0x01
,
0x6e
,
0xfb
,
0x05
,
0x00
,
0x00
,
0xff
,
0xff
,
0xc9
,
0x46
,
0x96
,
0x6b
,
0x63
,
0x0d
,
0x00
,
0x00
,
0xf4
,
0x9f
,
0xd6
,
0xc5
,
0x7f
,
0x01
,
0x00
,
0x00
,
0xff
,
0xff
,
0x87
,
0x63
,
0xe3
,
0x4a
,
0x7b
,
0x0d
,
0x00
,
0x00
,
}
}
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