Add listunspent RPC call

Returns a brief json summary of each utxo found by calling
ListUnspentWitness in the wallet. The two arguments are the
minimum and maximum number of conrfirmations (0=include
unconfirmed)
This commit is contained in:
AdamISZ 2018-09-27 15:49:44 +02:00
parent 71444e74ac
commit 9bb2a26948
No known key found for this signature in database
GPG Key ID: 141001A1AF77F20B
12 changed files with 1076 additions and 558 deletions

@ -120,12 +120,12 @@ func newAddress(ctx *cli.Context) error {
// Map the string encoded address type, to the concrete typed address
// type enum. An unrecognized address type will result in an error.
var addrType lnrpc.NewAddressRequest_AddressType
var addrType lnrpc.AddressType
switch stringAddrType { // TODO(roasbeef): make them ints on the cli?
case "p2wkh":
addrType = lnrpc.NewAddressRequest_WITNESS_PUBKEY_HASH
addrType = lnrpc.AddressType_WITNESS_PUBKEY_HASH
case "np2wkh":
addrType = lnrpc.NewAddressRequest_NESTED_PUBKEY_HASH
addrType = lnrpc.AddressType_NESTED_PUBKEY_HASH
default:
return fmt.Errorf("invalid address type %v, support address type "+
"are: p2wkh and np2wkh", stringAddrType)
@ -242,6 +242,101 @@ func sendCoins(ctx *cli.Context) error {
return nil
}
var listUnspentCommand = cli.Command{
Name: "listunspent",
Category: "On-chain",
Usage: "List utxos available for spending.",
ArgsUsage: "min-confs max-confs",
Description: `
For each spendable utxo currently in the wallet, with at least min_confs
confirmations, and at most max_confs confirmations, lists the txid, index,
amount, address, address type, scriptPubkey and number of confirmations.
Use --min_confs=0 to include unconfirmed coins. To list all coins
with at least min_confs confirmations, omit the second argument or flag
'--max_confs'.
`,
Flags: []cli.Flag{
cli.Int64Flag{
Name: "min_confs",
Usage: "the minimum number of confirmations for a utxo",
},
cli.Int64Flag{
Name: "max_confs",
Usage: "the maximum number of confirmations for a utxo",
},
},
Action: actionDecorator(listUnspent),
}
func listUnspent(ctx *cli.Context) error {
var (
minConfirms int64
maxConfirms int64
err error
)
args := ctx.Args()
if ctx.NArg() == 0 && ctx.NumFlags() == 0 {
cli.ShowCommandHelp(ctx, "listunspent")
return nil
}
if ctx.IsSet("max_confs") && !ctx.IsSet("min_confs") {
return fmt.Errorf("max_confs cannot be set without " +
"min_confs being set")
}
switch {
case ctx.IsSet("min_confs"):
minConfirms = ctx.Int64("min_confs")
case args.Present():
minConfirms, err = strconv.ParseInt(args.First(), 10, 64)
if err != nil {
cli.ShowCommandHelp(ctx, "listunspent")
return nil
}
args = args.Tail()
default:
return fmt.Errorf("minimum confirmations argument missing")
}
switch {
case ctx.IsSet("max_confs"):
maxConfirms = ctx.Int64("max_confs")
case args.Present():
maxConfirms, err = strconv.ParseInt(args.First(), 10, 64)
if err != nil {
cli.ShowCommandHelp(ctx, "listunspent")
return nil
}
args = args.Tail()
default:
// No maxconfs was specified; we use max as flag;
// the default for ctx.Int64 (0) is *not* appropriate here.
maxConfirms = math.MaxInt32
}
if minConfirms < 0 || maxConfirms < minConfirms {
return fmt.Errorf("maximum confirmations must be greater or " +
"equal to minimum confirmations")
}
ctxb := context.Background()
client, cleanUp := getClient(ctx)
defer cleanUp()
req := &lnrpc.ListUnspentRequest{
MinConfs: int32(minConfirms),
MaxConfs: int32(maxConfirms),
}
jsonResponse, err := client.ListUnspent(ctxb, req)
if err != nil {
return err
}
printRespJSON(jsonResponse)
return nil
}
var sendManyCommand = cli.Command{
Name: "sendmany",
Category: "On-chain",

@ -256,6 +256,7 @@ func main() {
newAddressCommand,
sendManyCommand,
sendCoinsCommand,
listUnspentCommand,
connectCommand,
disconnectCommand,
openChannelCommand,

@ -599,8 +599,8 @@ func getChanInfo(ctx context.Context, node *lntest.HarnessNode) (
}
const (
AddrTypeWitnessPubkeyHash = lnrpc.NewAddressRequest_WITNESS_PUBKEY_HASH
AddrTypeNestedPubkeyHash = lnrpc.NewAddressRequest_NESTED_PUBKEY_HASH
AddrTypeWitnessPubkeyHash = lnrpc.AddressType_WITNESS_PUBKEY_HASH
AddrTypeNestedPubkeyHash = lnrpc.AddressType_NESTED_PUBKEY_HASH
)
// testOnchainFundRecovery checks lnd's ability to rescan for onchain outputs

@ -29,6 +29,8 @@ description):
`lnd`.
* SendCoins
* Sends an amount of satoshis to a specific address.
* ListUnspent
* Lists available utxos within a range of confirmations.
* SubscribeTransactions
* Returns a stream which sends async notifications each time a transaction
is created or one is received that pays to us.

@ -16,6 +16,7 @@ It has these top-level messages:
UnlockWalletResponse
ChangePasswordRequest
ChangePasswordResponse
Utxo
Transaction
GetTransactionsRequest
TransactionDetails
@ -29,6 +30,8 @@ It has these top-level messages:
SendManyResponse
SendCoinsRequest
SendCoinsResponse
ListUnspentRequest
ListUnspentResponse
NewAddressRequest
NewAddressResponse
SignMessageRequest
@ -139,28 +142,31 @@ var _ = math.Inf
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
type NewAddressRequest_AddressType int32
// *
// `AddressType` has to be one of:
//
// - `p2wkh`: Pay to witness key hash (`WITNESS_PUBKEY_HASH` = 0)
// - `np2wkh`: Pay to nested witness key hash (`NESTED_PUBKEY_HASH` = 1)
type AddressType int32
const (
NewAddressRequest_WITNESS_PUBKEY_HASH NewAddressRequest_AddressType = 0
NewAddressRequest_NESTED_PUBKEY_HASH NewAddressRequest_AddressType = 1
AddressType_WITNESS_PUBKEY_HASH AddressType = 0
AddressType_NESTED_PUBKEY_HASH AddressType = 1
)
var NewAddressRequest_AddressType_name = map[int32]string{
var AddressType_name = map[int32]string{
0: "WITNESS_PUBKEY_HASH",
1: "NESTED_PUBKEY_HASH",
}
var NewAddressRequest_AddressType_value = map[string]int32{
var AddressType_value = map[string]int32{
"WITNESS_PUBKEY_HASH": 0,
"NESTED_PUBKEY_HASH": 1,
}
func (x NewAddressRequest_AddressType) String() string {
return proto.EnumName(NewAddressRequest_AddressType_name, int32(x))
}
func (NewAddressRequest_AddressType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor0, []int{21, 0}
func (x AddressType) String() string {
return proto.EnumName(AddressType_name, int32(x))
}
func (AddressType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
type ChannelCloseSummary_ClosureType int32
@ -194,7 +200,7 @@ func (x ChannelCloseSummary_ClosureType) String() string {
return proto.EnumName(ChannelCloseSummary_ClosureType_name, int32(x))
}
func (ChannelCloseSummary_ClosureType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor0, []int{35, 0}
return fileDescriptor0, []int{38, 0}
}
type GenSeedRequest struct {
@ -405,6 +411,70 @@ func (m *ChangePasswordResponse) String() string { return proto.Compa
func (*ChangePasswordResponse) ProtoMessage() {}
func (*ChangePasswordResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
type Utxo struct {
// / The type of address
Type AddressType `protobuf:"varint,1,opt,name=type,json=address_type,enum=lnrpc.AddressType" json:"type,omitempty"`
// / The address
Address string `protobuf:"bytes,2,opt,name=address" json:"address,omitempty"`
// / The value of the unspent coin in satoshis
AmountSat int64 `protobuf:"varint,3,opt,name=amount_sat" json:"amount_sat,omitempty"`
// / The scriptpubkey in hex
ScriptPubkey string `protobuf:"bytes,4,opt,name=script_pubkey" json:"script_pubkey,omitempty"`
// / The outpoint in format txid:n
// / Note that this reuses the `ChannelPoint` message but
// / is not actually a channel related outpoint, of course
Outpoint *ChannelPoint `protobuf:"bytes,5,opt,name=outpoint" json:"outpoint,omitempty"`
// / The number of confirmations for the Utxo
Confirmations int64 `protobuf:"varint,6,opt,name=confirmations" json:"confirmations,omitempty"`
}
func (m *Utxo) Reset() { *m = Utxo{} }
func (m *Utxo) String() string { return proto.CompactTextString(m) }
func (*Utxo) ProtoMessage() {}
func (*Utxo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
func (m *Utxo) GetType() AddressType {
if m != nil {
return m.Type
}
return AddressType_WITNESS_PUBKEY_HASH
}
func (m *Utxo) GetAddress() string {
if m != nil {
return m.Address
}
return ""
}
func (m *Utxo) GetAmountSat() int64 {
if m != nil {
return m.AmountSat
}
return 0
}
func (m *Utxo) GetScriptPubkey() string {
if m != nil {
return m.ScriptPubkey
}
return ""
}
func (m *Utxo) GetOutpoint() *ChannelPoint {
if m != nil {
return m.Outpoint
}
return nil
}
func (m *Utxo) GetConfirmations() int64 {
if m != nil {
return m.Confirmations
}
return 0
}
type Transaction struct {
// / The transaction hash
TxHash string `protobuf:"bytes,1,opt,name=tx_hash" json:"tx_hash,omitempty"`
@ -427,7 +497,7 @@ type Transaction struct {
func (m *Transaction) Reset() { *m = Transaction{} }
func (m *Transaction) String() string { return proto.CompactTextString(m) }
func (*Transaction) ProtoMessage() {}
func (*Transaction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
func (*Transaction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
func (m *Transaction) GetTxHash() string {
if m != nil {
@ -491,7 +561,7 @@ type GetTransactionsRequest struct {
func (m *GetTransactionsRequest) Reset() { *m = GetTransactionsRequest{} }
func (m *GetTransactionsRequest) String() string { return proto.CompactTextString(m) }
func (*GetTransactionsRequest) ProtoMessage() {}
func (*GetTransactionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
func (*GetTransactionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
type TransactionDetails struct {
// / The list of transactions relevant to the wallet.
@ -501,7 +571,7 @@ type TransactionDetails struct {
func (m *TransactionDetails) Reset() { *m = TransactionDetails{} }
func (m *TransactionDetails) String() string { return proto.CompactTextString(m) }
func (*TransactionDetails) ProtoMessage() {}
func (*TransactionDetails) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
func (*TransactionDetails) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
func (m *TransactionDetails) GetTransactions() []*Transaction {
if m != nil {
@ -520,7 +590,7 @@ type FeeLimit struct {
func (m *FeeLimit) Reset() { *m = FeeLimit{} }
func (m *FeeLimit) String() string { return proto.CompactTextString(m) }
func (*FeeLimit) ProtoMessage() {}
func (*FeeLimit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
func (*FeeLimit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
type isFeeLimit_Limit interface{ isFeeLimit_Limit() }
@ -650,7 +720,7 @@ type SendRequest struct {
func (m *SendRequest) Reset() { *m = SendRequest{} }
func (m *SendRequest) String() string { return proto.CompactTextString(m) }
func (*SendRequest) ProtoMessage() {}
func (*SendRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
func (*SendRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
func (m *SendRequest) GetDest() []byte {
if m != nil {
@ -718,7 +788,7 @@ type SendResponse struct {
func (m *SendResponse) Reset() { *m = SendResponse{} }
func (m *SendResponse) String() string { return proto.CompactTextString(m) }
func (*SendResponse) ProtoMessage() {}
func (*SendResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
func (*SendResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
func (m *SendResponse) GetPaymentError() string {
if m != nil {
@ -760,7 +830,7 @@ type SendToRouteRequest struct {
func (m *SendToRouteRequest) Reset() { *m = SendToRouteRequest{} }
func (m *SendToRouteRequest) String() string { return proto.CompactTextString(m) }
func (*SendToRouteRequest) ProtoMessage() {}
func (*SendToRouteRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
func (*SendToRouteRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
func (m *SendToRouteRequest) GetPaymentHash() []byte {
if m != nil {
@ -795,11 +865,9 @@ type ChannelPoint struct {
func (m *ChannelPoint) Reset() { *m = ChannelPoint{} }
func (m *ChannelPoint) String() string { return proto.CompactTextString(m) }
func (*ChannelPoint) ProtoMessage() {}
func (*ChannelPoint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
func (*ChannelPoint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
type isChannelPoint_FundingTxid interface {
isChannelPoint_FundingTxid()
}
type isChannelPoint_FundingTxid interface{ isChannelPoint_FundingTxid() }
type ChannelPoint_FundingTxidBytes struct {
FundingTxidBytes []byte `protobuf:"bytes,1,opt,name=funding_txid_bytes,proto3,oneof"`
@ -915,7 +983,7 @@ type LightningAddress struct {
func (m *LightningAddress) Reset() { *m = LightningAddress{} }
func (m *LightningAddress) String() string { return proto.CompactTextString(m) }
func (*LightningAddress) ProtoMessage() {}
func (*LightningAddress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
func (*LightningAddress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
func (m *LightningAddress) GetPubkey() string {
if m != nil {
@ -943,7 +1011,7 @@ type SendManyRequest struct {
func (m *SendManyRequest) Reset() { *m = SendManyRequest{} }
func (m *SendManyRequest) String() string { return proto.CompactTextString(m) }
func (*SendManyRequest) ProtoMessage() {}
func (*SendManyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
func (*SendManyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
func (m *SendManyRequest) GetAddrToAmount() map[string]int64 {
if m != nil {
@ -974,7 +1042,7 @@ type SendManyResponse struct {
func (m *SendManyResponse) Reset() { *m = SendManyResponse{} }
func (m *SendManyResponse) String() string { return proto.CompactTextString(m) }
func (*SendManyResponse) ProtoMessage() {}
func (*SendManyResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
func (*SendManyResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
func (m *SendManyResponse) GetTxid() string {
if m != nil {
@ -997,7 +1065,7 @@ type SendCoinsRequest struct {
func (m *SendCoinsRequest) Reset() { *m = SendCoinsRequest{} }
func (m *SendCoinsRequest) String() string { return proto.CompactTextString(m) }
func (*SendCoinsRequest) ProtoMessage() {}
func (*SendCoinsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
func (*SendCoinsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
func (m *SendCoinsRequest) GetAddr() string {
if m != nil {
@ -1035,7 +1103,7 @@ type SendCoinsResponse struct {
func (m *SendCoinsResponse) Reset() { *m = SendCoinsResponse{} }
func (m *SendCoinsResponse) String() string { return proto.CompactTextString(m) }
func (*SendCoinsResponse) ProtoMessage() {}
func (*SendCoinsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
func (*SendCoinsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
func (m *SendCoinsResponse) GetTxid() string {
if m != nil {
@ -1044,26 +1112,64 @@ func (m *SendCoinsResponse) GetTxid() string {
return ""
}
// *
// `AddressType` has to be one of:
//
// - `p2wkh`: Pay to witness key hash (`WITNESS_PUBKEY_HASH` = 0)
// - `np2wkh`: Pay to nested witness key hash (`NESTED_PUBKEY_HASH` = 1)
type ListUnspentRequest struct {
// / The minimum number of confirmations to be included.
MinConfs int32 `protobuf:"varint,1,opt,name=min_confs,json=minConfs" json:"min_confs,omitempty"`
// / The maximum number of confirmations to be included.
MaxConfs int32 `protobuf:"varint,2,opt,name=max_confs,json=maxConfs" json:"max_confs,omitempty"`
}
func (m *ListUnspentRequest) Reset() { *m = ListUnspentRequest{} }
func (m *ListUnspentRequest) String() string { return proto.CompactTextString(m) }
func (*ListUnspentRequest) ProtoMessage() {}
func (*ListUnspentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
func (m *ListUnspentRequest) GetMinConfs() int32 {
if m != nil {
return m.MinConfs
}
return 0
}
func (m *ListUnspentRequest) GetMaxConfs() int32 {
if m != nil {
return m.MaxConfs
}
return 0
}
type ListUnspentResponse struct {
// / A list of utxos
Utxos []*Utxo `protobuf:"bytes,1,rep,name=utxos" json:"utxos,omitempty"`
}
func (m *ListUnspentResponse) Reset() { *m = ListUnspentResponse{} }
func (m *ListUnspentResponse) String() string { return proto.CompactTextString(m) }
func (*ListUnspentResponse) ProtoMessage() {}
func (*ListUnspentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
func (m *ListUnspentResponse) GetUtxos() []*Utxo {
if m != nil {
return m.Utxos
}
return nil
}
type NewAddressRequest struct {
// / The address type
Type NewAddressRequest_AddressType `protobuf:"varint,1,opt,name=type,enum=lnrpc.NewAddressRequest_AddressType" json:"type,omitempty"`
Type AddressType `protobuf:"varint,1,opt,name=type,enum=lnrpc.AddressType" json:"type,omitempty"`
}
func (m *NewAddressRequest) Reset() { *m = NewAddressRequest{} }
func (m *NewAddressRequest) String() string { return proto.CompactTextString(m) }
func (*NewAddressRequest) ProtoMessage() {}
func (*NewAddressRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
func (*NewAddressRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
func (m *NewAddressRequest) GetType() NewAddressRequest_AddressType {
func (m *NewAddressRequest) GetType() AddressType {
if m != nil {
return m.Type
}
return NewAddressRequest_WITNESS_PUBKEY_HASH
return AddressType_WITNESS_PUBKEY_HASH
}
type NewAddressResponse struct {
@ -1074,7 +1180,7 @@ type NewAddressResponse struct {
func (m *NewAddressResponse) Reset() { *m = NewAddressResponse{} }
func (m *NewAddressResponse) String() string { return proto.CompactTextString(m) }
func (*NewAddressResponse) ProtoMessage() {}
func (*NewAddressResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
func (*NewAddressResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
func (m *NewAddressResponse) GetAddress() string {
if m != nil {
@ -1091,7 +1197,7 @@ type SignMessageRequest struct {
func (m *SignMessageRequest) Reset() { *m = SignMessageRequest{} }
func (m *SignMessageRequest) String() string { return proto.CompactTextString(m) }
func (*SignMessageRequest) ProtoMessage() {}
func (*SignMessageRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
func (*SignMessageRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
func (m *SignMessageRequest) GetMsg() []byte {
if m != nil {
@ -1108,7 +1214,7 @@ type SignMessageResponse struct {
func (m *SignMessageResponse) Reset() { *m = SignMessageResponse{} }
func (m *SignMessageResponse) String() string { return proto.CompactTextString(m) }
func (*SignMessageResponse) ProtoMessage() {}
func (*SignMessageResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
func (*SignMessageResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
func (m *SignMessageResponse) GetSignature() string {
if m != nil {
@ -1127,7 +1233,7 @@ type VerifyMessageRequest struct {
func (m *VerifyMessageRequest) Reset() { *m = VerifyMessageRequest{} }
func (m *VerifyMessageRequest) String() string { return proto.CompactTextString(m) }
func (*VerifyMessageRequest) ProtoMessage() {}
func (*VerifyMessageRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
func (*VerifyMessageRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
func (m *VerifyMessageRequest) GetMsg() []byte {
if m != nil {
@ -1153,7 +1259,7 @@ type VerifyMessageResponse struct {
func (m *VerifyMessageResponse) Reset() { *m = VerifyMessageResponse{} }
func (m *VerifyMessageResponse) String() string { return proto.CompactTextString(m) }
func (*VerifyMessageResponse) ProtoMessage() {}
func (*VerifyMessageResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
func (*VerifyMessageResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
func (m *VerifyMessageResponse) GetValid() bool {
if m != nil {
@ -1180,7 +1286,7 @@ type ConnectPeerRequest struct {
func (m *ConnectPeerRequest) Reset() { *m = ConnectPeerRequest{} }
func (m *ConnectPeerRequest) String() string { return proto.CompactTextString(m) }
func (*ConnectPeerRequest) ProtoMessage() {}
func (*ConnectPeerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
func (*ConnectPeerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
func (m *ConnectPeerRequest) GetAddr() *LightningAddress {
if m != nil {
@ -1202,7 +1308,7 @@ type ConnectPeerResponse struct {
func (m *ConnectPeerResponse) Reset() { *m = ConnectPeerResponse{} }
func (m *ConnectPeerResponse) String() string { return proto.CompactTextString(m) }
func (*ConnectPeerResponse) ProtoMessage() {}
func (*ConnectPeerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
func (*ConnectPeerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
type DisconnectPeerRequest struct {
// / The pubkey of the node to disconnect from
@ -1212,7 +1318,7 @@ type DisconnectPeerRequest struct {
func (m *DisconnectPeerRequest) Reset() { *m = DisconnectPeerRequest{} }
func (m *DisconnectPeerRequest) String() string { return proto.CompactTextString(m) }
func (*DisconnectPeerRequest) ProtoMessage() {}
func (*DisconnectPeerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
func (*DisconnectPeerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
func (m *DisconnectPeerRequest) GetPubKey() string {
if m != nil {
@ -1227,7 +1333,7 @@ type DisconnectPeerResponse struct {
func (m *DisconnectPeerResponse) Reset() { *m = DisconnectPeerResponse{} }
func (m *DisconnectPeerResponse) String() string { return proto.CompactTextString(m) }
func (*DisconnectPeerResponse) ProtoMessage() {}
func (*DisconnectPeerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
func (*DisconnectPeerResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} }
type HTLC struct {
Incoming bool `protobuf:"varint,1,opt,name=incoming" json:"incoming,omitempty"`
@ -1239,7 +1345,7 @@ type HTLC struct {
func (m *HTLC) Reset() { *m = HTLC{} }
func (m *HTLC) String() string { return proto.CompactTextString(m) }
func (*HTLC) ProtoMessage() {}
func (*HTLC) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
func (*HTLC) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }
func (m *HTLC) GetIncoming() bool {
if m != nil {
@ -1329,7 +1435,7 @@ type Channel struct {
func (m *Channel) Reset() { *m = Channel{} }
func (m *Channel) String() string { return proto.CompactTextString(m) }
func (*Channel) ProtoMessage() {}
func (*Channel) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
func (*Channel) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
func (m *Channel) GetActive() bool {
if m != nil {
@ -1460,7 +1566,7 @@ type ListChannelsRequest struct {
func (m *ListChannelsRequest) Reset() { *m = ListChannelsRequest{} }
func (m *ListChannelsRequest) String() string { return proto.CompactTextString(m) }
func (*ListChannelsRequest) ProtoMessage() {}
func (*ListChannelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} }
func (*ListChannelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
func (m *ListChannelsRequest) GetActiveOnly() bool {
if m != nil {
@ -1498,7 +1604,7 @@ type ListChannelsResponse struct {
func (m *ListChannelsResponse) Reset() { *m = ListChannelsResponse{} }
func (m *ListChannelsResponse) String() string { return proto.CompactTextString(m) }
func (*ListChannelsResponse) ProtoMessage() {}
func (*ListChannelsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }
func (*ListChannelsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
func (m *ListChannelsResponse) GetChannels() []*Channel {
if m != nil {
@ -1533,7 +1639,7 @@ type ChannelCloseSummary struct {
func (m *ChannelCloseSummary) Reset() { *m = ChannelCloseSummary{} }
func (m *ChannelCloseSummary) String() string { return proto.CompactTextString(m) }
func (*ChannelCloseSummary) ProtoMessage() {}
func (*ChannelCloseSummary) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
func (*ChannelCloseSummary) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} }
func (m *ChannelCloseSummary) GetChannelPoint() string {
if m != nil {
@ -1617,7 +1723,7 @@ type ClosedChannelsRequest struct {
func (m *ClosedChannelsRequest) Reset() { *m = ClosedChannelsRequest{} }
func (m *ClosedChannelsRequest) String() string { return proto.CompactTextString(m) }
func (*ClosedChannelsRequest) ProtoMessage() {}
func (*ClosedChannelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
func (*ClosedChannelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} }
func (m *ClosedChannelsRequest) GetCooperative() bool {
if m != nil {
@ -1668,7 +1774,7 @@ type ClosedChannelsResponse struct {
func (m *ClosedChannelsResponse) Reset() { *m = ClosedChannelsResponse{} }
func (m *ClosedChannelsResponse) String() string { return proto.CompactTextString(m) }
func (*ClosedChannelsResponse) ProtoMessage() {}
func (*ClosedChannelsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
func (*ClosedChannelsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} }
func (m *ClosedChannelsResponse) GetChannels() []*ChannelCloseSummary {
if m != nil {
@ -1699,7 +1805,7 @@ type Peer struct {
func (m *Peer) Reset() { *m = Peer{} }
func (m *Peer) String() string { return proto.CompactTextString(m) }
func (*Peer) ProtoMessage() {}
func (*Peer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} }
func (*Peer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} }
func (m *Peer) GetPubKey() string {
if m != nil {
@ -1763,7 +1869,7 @@ type ListPeersRequest struct {
func (m *ListPeersRequest) Reset() { *m = ListPeersRequest{} }
func (m *ListPeersRequest) String() string { return proto.CompactTextString(m) }
func (*ListPeersRequest) ProtoMessage() {}
func (*ListPeersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} }
func (*ListPeersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} }
type ListPeersResponse struct {
// / The list of currently connected peers
@ -1773,7 +1879,7 @@ type ListPeersResponse struct {
func (m *ListPeersResponse) Reset() { *m = ListPeersResponse{} }
func (m *ListPeersResponse) String() string { return proto.CompactTextString(m) }
func (*ListPeersResponse) ProtoMessage() {}
func (*ListPeersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} }
func (*ListPeersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} }
func (m *ListPeersResponse) GetPeers() []*Peer {
if m != nil {
@ -1788,7 +1894,7 @@ type GetInfoRequest struct {
func (m *GetInfoRequest) Reset() { *m = GetInfoRequest{} }
func (m *GetInfoRequest) String() string { return proto.CompactTextString(m) }
func (*GetInfoRequest) ProtoMessage() {}
func (*GetInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} }
func (*GetInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} }
type GetInfoResponse struct {
// / The identity pubkey of the current node.
@ -1824,7 +1930,7 @@ type GetInfoResponse struct {
func (m *GetInfoResponse) Reset() { *m = GetInfoResponse{} }
func (m *GetInfoResponse) String() string { return proto.CompactTextString(m) }
func (*GetInfoResponse) ProtoMessage() {}
func (*GetInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} }
func (*GetInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} }
func (m *GetInfoResponse) GetIdentityPubkey() string {
if m != nil {
@ -1933,7 +2039,7 @@ type ConfirmationUpdate struct {
func (m *ConfirmationUpdate) Reset() { *m = ConfirmationUpdate{} }
func (m *ConfirmationUpdate) String() string { return proto.CompactTextString(m) }
func (*ConfirmationUpdate) ProtoMessage() {}
func (*ConfirmationUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} }
func (*ConfirmationUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} }
func (m *ConfirmationUpdate) GetBlockSha() []byte {
if m != nil {
@ -1963,7 +2069,7 @@ type ChannelOpenUpdate struct {
func (m *ChannelOpenUpdate) Reset() { *m = ChannelOpenUpdate{} }
func (m *ChannelOpenUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelOpenUpdate) ProtoMessage() {}
func (*ChannelOpenUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} }
func (*ChannelOpenUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} }
func (m *ChannelOpenUpdate) GetChannelPoint() *ChannelPoint {
if m != nil {
@ -1980,7 +2086,7 @@ type ChannelCloseUpdate struct {
func (m *ChannelCloseUpdate) Reset() { *m = ChannelCloseUpdate{} }
func (m *ChannelCloseUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelCloseUpdate) ProtoMessage() {}
func (*ChannelCloseUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} }
func (*ChannelCloseUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} }
func (m *ChannelCloseUpdate) GetClosingTxid() []byte {
if m != nil {
@ -2013,7 +2119,7 @@ type CloseChannelRequest struct {
func (m *CloseChannelRequest) Reset() { *m = CloseChannelRequest{} }
func (m *CloseChannelRequest) String() string { return proto.CompactTextString(m) }
func (*CloseChannelRequest) ProtoMessage() {}
func (*CloseChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} }
func (*CloseChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} }
func (m *CloseChannelRequest) GetChannelPoint() *ChannelPoint {
if m != nil {
@ -2054,11 +2160,9 @@ type CloseStatusUpdate struct {
func (m *CloseStatusUpdate) Reset() { *m = CloseStatusUpdate{} }
func (m *CloseStatusUpdate) String() string { return proto.CompactTextString(m) }
func (*CloseStatusUpdate) ProtoMessage() {}
func (*CloseStatusUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} }
func (*CloseStatusUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{50} }
type isCloseStatusUpdate_Update interface {
isCloseStatusUpdate_Update()
}
type isCloseStatusUpdate_Update interface{ isCloseStatusUpdate_Update() }
type CloseStatusUpdate_ClosePending struct {
ClosePending *PendingUpdate `protobuf:"bytes,1,opt,name=close_pending,oneof"`
@ -2203,7 +2307,7 @@ type PendingUpdate struct {
func (m *PendingUpdate) Reset() { *m = PendingUpdate{} }
func (m *PendingUpdate) String() string { return proto.CompactTextString(m) }
func (*PendingUpdate) ProtoMessage() {}
func (*PendingUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} }
func (*PendingUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{51} }
func (m *PendingUpdate) GetTxid() []byte {
if m != nil {
@ -2247,7 +2351,7 @@ type OpenChannelRequest struct {
func (m *OpenChannelRequest) Reset() { *m = OpenChannelRequest{} }
func (m *OpenChannelRequest) String() string { return proto.CompactTextString(m) }
func (*OpenChannelRequest) ProtoMessage() {}
func (*OpenChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} }
func (*OpenChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{52} }
func (m *OpenChannelRequest) GetNodePubkey() []byte {
if m != nil {
@ -2337,11 +2441,9 @@ type OpenStatusUpdate struct {
func (m *OpenStatusUpdate) Reset() { *m = OpenStatusUpdate{} }
func (m *OpenStatusUpdate) String() string { return proto.CompactTextString(m) }
func (*OpenStatusUpdate) ProtoMessage() {}
func (*OpenStatusUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{50} }
func (*OpenStatusUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{53} }
type isOpenStatusUpdate_Update interface {
isOpenStatusUpdate_Update()
}
type isOpenStatusUpdate_Update interface{ isOpenStatusUpdate_Update() }
type OpenStatusUpdate_ChanPending struct {
ChanPending *PendingUpdate `protobuf:"bytes,1,opt,name=chan_pending,oneof"`
@ -2499,7 +2601,7 @@ type PendingHTLC struct {
func (m *PendingHTLC) Reset() { *m = PendingHTLC{} }
func (m *PendingHTLC) String() string { return proto.CompactTextString(m) }
func (*PendingHTLC) ProtoMessage() {}
func (*PendingHTLC) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{51} }
func (*PendingHTLC) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{54} }
func (m *PendingHTLC) GetIncoming() bool {
if m != nil {
@ -2549,7 +2651,7 @@ type PendingChannelsRequest struct {
func (m *PendingChannelsRequest) Reset() { *m = PendingChannelsRequest{} }
func (m *PendingChannelsRequest) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsRequest) ProtoMessage() {}
func (*PendingChannelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{52} }
func (*PendingChannelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{55} }
type PendingChannelsResponse struct {
// / The balance in satoshis encumbered in pending channels
@ -2567,7 +2669,7 @@ type PendingChannelsResponse struct {
func (m *PendingChannelsResponse) Reset() { *m = PendingChannelsResponse{} }
func (m *PendingChannelsResponse) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsResponse) ProtoMessage() {}
func (*PendingChannelsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{53} }
func (*PendingChannelsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56} }
func (m *PendingChannelsResponse) GetTotalLimboBalance() int64 {
if m != nil {
@ -2618,7 +2720,7 @@ func (m *PendingChannelsResponse_PendingChannel) Reset() {
func (m *PendingChannelsResponse_PendingChannel) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsResponse_PendingChannel) ProtoMessage() {}
func (*PendingChannelsResponse_PendingChannel) Descriptor() ([]byte, []int) {
return fileDescriptor0, []int{53, 0}
return fileDescriptor0, []int{56, 0}
}
func (m *PendingChannelsResponse_PendingChannel) GetRemoteNodePub() string {
@ -2685,7 +2787,7 @@ func (m *PendingChannelsResponse_PendingOpenChannel) String() string {
}
func (*PendingChannelsResponse_PendingOpenChannel) ProtoMessage() {}
func (*PendingChannelsResponse_PendingOpenChannel) Descriptor() ([]byte, []int) {
return fileDescriptor0, []int{53, 1}
return fileDescriptor0, []int{56, 1}
}
func (m *PendingChannelsResponse_PendingOpenChannel) GetChannel() *PendingChannelsResponse_PendingChannel {
@ -2738,7 +2840,7 @@ func (m *PendingChannelsResponse_WaitingCloseChannel) String() string {
}
func (*PendingChannelsResponse_WaitingCloseChannel) ProtoMessage() {}
func (*PendingChannelsResponse_WaitingCloseChannel) Descriptor() ([]byte, []int) {
return fileDescriptor0, []int{53, 2}
return fileDescriptor0, []int{56, 2}
}
func (m *PendingChannelsResponse_WaitingCloseChannel) GetChannel() *PendingChannelsResponse_PendingChannel {
@ -2766,7 +2868,7 @@ func (m *PendingChannelsResponse_ClosedChannel) Reset() { *m = PendingCh
func (m *PendingChannelsResponse_ClosedChannel) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsResponse_ClosedChannel) ProtoMessage() {}
func (*PendingChannelsResponse_ClosedChannel) Descriptor() ([]byte, []int) {
return fileDescriptor0, []int{53, 3}
return fileDescriptor0, []int{56, 3}
}
func (m *PendingChannelsResponse_ClosedChannel) GetChannel() *PendingChannelsResponse_PendingChannel {
@ -2810,7 +2912,7 @@ func (m *PendingChannelsResponse_ForceClosedChannel) String() string {
}
func (*PendingChannelsResponse_ForceClosedChannel) ProtoMessage() {}
func (*PendingChannelsResponse_ForceClosedChannel) Descriptor() ([]byte, []int) {
return fileDescriptor0, []int{53, 4}
return fileDescriptor0, []int{56, 4}
}
func (m *PendingChannelsResponse_ForceClosedChannel) GetChannel() *PendingChannelsResponse_PendingChannel {
@ -2868,7 +2970,7 @@ type WalletBalanceRequest struct {
func (m *WalletBalanceRequest) Reset() { *m = WalletBalanceRequest{} }
func (m *WalletBalanceRequest) String() string { return proto.CompactTextString(m) }
func (*WalletBalanceRequest) ProtoMessage() {}
func (*WalletBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{54} }
func (*WalletBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57} }
type WalletBalanceResponse struct {
// / The balance of the wallet
@ -2882,7 +2984,7 @@ type WalletBalanceResponse struct {
func (m *WalletBalanceResponse) Reset() { *m = WalletBalanceResponse{} }
func (m *WalletBalanceResponse) String() string { return proto.CompactTextString(m) }
func (*WalletBalanceResponse) ProtoMessage() {}
func (*WalletBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{55} }
func (*WalletBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{58} }
func (m *WalletBalanceResponse) GetTotalBalance() int64 {
if m != nil {
@ -2911,7 +3013,7 @@ type ChannelBalanceRequest struct {
func (m *ChannelBalanceRequest) Reset() { *m = ChannelBalanceRequest{} }
func (m *ChannelBalanceRequest) String() string { return proto.CompactTextString(m) }
func (*ChannelBalanceRequest) ProtoMessage() {}
func (*ChannelBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56} }
func (*ChannelBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{59} }
type ChannelBalanceResponse struct {
// / Sum of channels balances denominated in satoshis
@ -2923,7 +3025,7 @@ type ChannelBalanceResponse struct {
func (m *ChannelBalanceResponse) Reset() { *m = ChannelBalanceResponse{} }
func (m *ChannelBalanceResponse) String() string { return proto.CompactTextString(m) }
func (*ChannelBalanceResponse) ProtoMessage() {}
func (*ChannelBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57} }
func (*ChannelBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{60} }
func (m *ChannelBalanceResponse) GetBalance() int64 {
if m != nil {
@ -2959,7 +3061,7 @@ type QueryRoutesRequest struct {
func (m *QueryRoutesRequest) Reset() { *m = QueryRoutesRequest{} }
func (m *QueryRoutesRequest) String() string { return proto.CompactTextString(m) }
func (*QueryRoutesRequest) ProtoMessage() {}
func (*QueryRoutesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{58} }
func (*QueryRoutesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{61} }
func (m *QueryRoutesRequest) GetPubKey() string {
if m != nil {
@ -3003,7 +3105,7 @@ type QueryRoutesResponse struct {
func (m *QueryRoutesResponse) Reset() { *m = QueryRoutesResponse{} }
func (m *QueryRoutesResponse) String() string { return proto.CompactTextString(m) }
func (*QueryRoutesResponse) ProtoMessage() {}
func (*QueryRoutesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{59} }
func (*QueryRoutesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{62} }
func (m *QueryRoutesResponse) GetRoutes() []*Route {
if m != nil {
@ -3033,7 +3135,7 @@ type Hop struct {
func (m *Hop) Reset() { *m = Hop{} }
func (m *Hop) String() string { return proto.CompactTextString(m) }
func (*Hop) ProtoMessage() {}
func (*Hop) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{60} }
func (*Hop) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{63} }
func (m *Hop) GetChanId() uint64 {
if m != nil {
@ -3130,7 +3232,7 @@ type Route struct {
func (m *Route) Reset() { *m = Route{} }
func (m *Route) String() string { return proto.CompactTextString(m) }
func (*Route) ProtoMessage() {}
func (*Route) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{61} }
func (*Route) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{64} }
func (m *Route) GetTotalTimeLock() uint32 {
if m != nil {
@ -3182,7 +3284,7 @@ type NodeInfoRequest struct {
func (m *NodeInfoRequest) Reset() { *m = NodeInfoRequest{} }
func (m *NodeInfoRequest) String() string { return proto.CompactTextString(m) }
func (*NodeInfoRequest) ProtoMessage() {}
func (*NodeInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{62} }
func (*NodeInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{65} }
func (m *NodeInfoRequest) GetPubKey() string {
if m != nil {
@ -3205,7 +3307,7 @@ type NodeInfo struct {
func (m *NodeInfo) Reset() { *m = NodeInfo{} }
func (m *NodeInfo) String() string { return proto.CompactTextString(m) }
func (*NodeInfo) ProtoMessage() {}
func (*NodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{63} }
func (*NodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{66} }
func (m *NodeInfo) GetNode() *LightningNode {
if m != nil {
@ -3244,7 +3346,7 @@ type LightningNode struct {
func (m *LightningNode) Reset() { *m = LightningNode{} }
func (m *LightningNode) String() string { return proto.CompactTextString(m) }
func (*LightningNode) ProtoMessage() {}
func (*LightningNode) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{64} }
func (*LightningNode) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{67} }
func (m *LightningNode) GetLastUpdate() uint32 {
if m != nil {
@ -3289,7 +3391,7 @@ type NodeAddress struct {
func (m *NodeAddress) Reset() { *m = NodeAddress{} }
func (m *NodeAddress) String() string { return proto.CompactTextString(m) }
func (*NodeAddress) ProtoMessage() {}
func (*NodeAddress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{65} }
func (*NodeAddress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{68} }
func (m *NodeAddress) GetNetwork() string {
if m != nil {
@ -3316,7 +3418,7 @@ type RoutingPolicy struct {
func (m *RoutingPolicy) Reset() { *m = RoutingPolicy{} }
func (m *RoutingPolicy) String() string { return proto.CompactTextString(m) }
func (*RoutingPolicy) ProtoMessage() {}
func (*RoutingPolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{66} }
func (*RoutingPolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{69} }
func (m *RoutingPolicy) GetTimeLockDelta() uint32 {
if m != nil {
@ -3377,7 +3479,7 @@ type ChannelEdge struct {
func (m *ChannelEdge) Reset() { *m = ChannelEdge{} }
func (m *ChannelEdge) String() string { return proto.CompactTextString(m) }
func (*ChannelEdge) ProtoMessage() {}
func (*ChannelEdge) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{67} }
func (*ChannelEdge) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{70} }
func (m *ChannelEdge) GetChannelId() uint64 {
if m != nil {
@ -3446,7 +3548,7 @@ type ChannelGraphRequest struct {
func (m *ChannelGraphRequest) Reset() { *m = ChannelGraphRequest{} }
func (m *ChannelGraphRequest) String() string { return proto.CompactTextString(m) }
func (*ChannelGraphRequest) ProtoMessage() {}
func (*ChannelGraphRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{68} }
func (*ChannelGraphRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{71} }
func (m *ChannelGraphRequest) GetIncludeUnannounced() bool {
if m != nil {
@ -3466,7 +3568,7 @@ type ChannelGraph struct {
func (m *ChannelGraph) Reset() { *m = ChannelGraph{} }
func (m *ChannelGraph) String() string { return proto.CompactTextString(m) }
func (*ChannelGraph) ProtoMessage() {}
func (*ChannelGraph) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{69} }
func (*ChannelGraph) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{72} }
func (m *ChannelGraph) GetNodes() []*LightningNode {
if m != nil {
@ -3493,7 +3595,7 @@ type ChanInfoRequest struct {
func (m *ChanInfoRequest) Reset() { *m = ChanInfoRequest{} }
func (m *ChanInfoRequest) String() string { return proto.CompactTextString(m) }
func (*ChanInfoRequest) ProtoMessage() {}
func (*ChanInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{70} }
func (*ChanInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{73} }
func (m *ChanInfoRequest) GetChanId() uint64 {
if m != nil {
@ -3508,7 +3610,7 @@ type NetworkInfoRequest struct {
func (m *NetworkInfoRequest) Reset() { *m = NetworkInfoRequest{} }
func (m *NetworkInfoRequest) String() string { return proto.CompactTextString(m) }
func (*NetworkInfoRequest) ProtoMessage() {}
func (*NetworkInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{71} }
func (*NetworkInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{74} }
type NetworkInfo struct {
GraphDiameter uint32 `protobuf:"varint,1,opt,name=graph_diameter" json:"graph_diameter,omitempty"`
@ -3525,7 +3627,7 @@ type NetworkInfo struct {
func (m *NetworkInfo) Reset() { *m = NetworkInfo{} }
func (m *NetworkInfo) String() string { return proto.CompactTextString(m) }
func (*NetworkInfo) ProtoMessage() {}
func (*NetworkInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{72} }
func (*NetworkInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{75} }
func (m *NetworkInfo) GetGraphDiameter() uint32 {
if m != nil {
@ -3596,7 +3698,7 @@ type StopRequest struct {
func (m *StopRequest) Reset() { *m = StopRequest{} }
func (m *StopRequest) String() string { return proto.CompactTextString(m) }
func (*StopRequest) ProtoMessage() {}
func (*StopRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{73} }
func (*StopRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{76} }
type StopResponse struct {
}
@ -3604,7 +3706,7 @@ type StopResponse struct {
func (m *StopResponse) Reset() { *m = StopResponse{} }
func (m *StopResponse) String() string { return proto.CompactTextString(m) }
func (*StopResponse) ProtoMessage() {}
func (*StopResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{74} }
func (*StopResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{77} }
type GraphTopologySubscription struct {
}
@ -3612,7 +3714,7 @@ type GraphTopologySubscription struct {
func (m *GraphTopologySubscription) Reset() { *m = GraphTopologySubscription{} }
func (m *GraphTopologySubscription) String() string { return proto.CompactTextString(m) }
func (*GraphTopologySubscription) ProtoMessage() {}
func (*GraphTopologySubscription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{75} }
func (*GraphTopologySubscription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{78} }
type GraphTopologyUpdate struct {
NodeUpdates []*NodeUpdate `protobuf:"bytes,1,rep,name=node_updates,json=nodeUpdates" json:"node_updates,omitempty"`
@ -3623,7 +3725,7 @@ type GraphTopologyUpdate struct {
func (m *GraphTopologyUpdate) Reset() { *m = GraphTopologyUpdate{} }
func (m *GraphTopologyUpdate) String() string { return proto.CompactTextString(m) }
func (*GraphTopologyUpdate) ProtoMessage() {}
func (*GraphTopologyUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{76} }
func (*GraphTopologyUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{79} }
func (m *GraphTopologyUpdate) GetNodeUpdates() []*NodeUpdate {
if m != nil {
@ -3656,7 +3758,7 @@ type NodeUpdate struct {
func (m *NodeUpdate) Reset() { *m = NodeUpdate{} }
func (m *NodeUpdate) String() string { return proto.CompactTextString(m) }
func (*NodeUpdate) ProtoMessage() {}
func (*NodeUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{77} }
func (*NodeUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{80} }
func (m *NodeUpdate) GetAddresses() []string {
if m != nil {
@ -3702,7 +3804,7 @@ type ChannelEdgeUpdate struct {
func (m *ChannelEdgeUpdate) Reset() { *m = ChannelEdgeUpdate{} }
func (m *ChannelEdgeUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelEdgeUpdate) ProtoMessage() {}
func (*ChannelEdgeUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{78} }
func (*ChannelEdgeUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{81} }
func (m *ChannelEdgeUpdate) GetChanId() uint64 {
if m != nil {
@ -3760,7 +3862,7 @@ type ClosedChannelUpdate struct {
func (m *ClosedChannelUpdate) Reset() { *m = ClosedChannelUpdate{} }
func (m *ClosedChannelUpdate) String() string { return proto.CompactTextString(m) }
func (*ClosedChannelUpdate) ProtoMessage() {}
func (*ClosedChannelUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{79} }
func (*ClosedChannelUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{82} }
func (m *ClosedChannelUpdate) GetChanId() uint64 {
if m != nil {
@ -3808,7 +3910,7 @@ type HopHint struct {
func (m *HopHint) Reset() { *m = HopHint{} }
func (m *HopHint) String() string { return proto.CompactTextString(m) }
func (*HopHint) ProtoMessage() {}
func (*HopHint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{80} }
func (*HopHint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{83} }
func (m *HopHint) GetNodeId() string {
if m != nil {
@ -3855,7 +3957,7 @@ type RouteHint struct {
func (m *RouteHint) Reset() { *m = RouteHint{} }
func (m *RouteHint) String() string { return proto.CompactTextString(m) }
func (*RouteHint) ProtoMessage() {}
func (*RouteHint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{81} }
func (*RouteHint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{84} }
func (m *RouteHint) GetHopHints() []*HopHint {
if m != nil {
@ -3944,7 +4046,7 @@ type Invoice struct {
func (m *Invoice) Reset() { *m = Invoice{} }
func (m *Invoice) String() string { return proto.CompactTextString(m) }
func (*Invoice) ProtoMessage() {}
func (*Invoice) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{82} }
func (*Invoice) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{85} }
func (m *Invoice) GetMemo() string {
if m != nil {
@ -4104,7 +4206,7 @@ type AddInvoiceResponse struct {
func (m *AddInvoiceResponse) Reset() { *m = AddInvoiceResponse{} }
func (m *AddInvoiceResponse) String() string { return proto.CompactTextString(m) }
func (*AddInvoiceResponse) ProtoMessage() {}
func (*AddInvoiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{83} }
func (*AddInvoiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{86} }
func (m *AddInvoiceResponse) GetRHash() []byte {
if m != nil {
@ -4139,7 +4241,7 @@ type PaymentHash struct {
func (m *PaymentHash) Reset() { *m = PaymentHash{} }
func (m *PaymentHash) String() string { return proto.CompactTextString(m) }
func (*PaymentHash) ProtoMessage() {}
func (*PaymentHash) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{84} }
func (*PaymentHash) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{87} }
func (m *PaymentHash) GetRHashStr() string {
if m != nil {
@ -4173,7 +4275,7 @@ type ListInvoiceRequest struct {
func (m *ListInvoiceRequest) Reset() { *m = ListInvoiceRequest{} }
func (m *ListInvoiceRequest) String() string { return proto.CompactTextString(m) }
func (*ListInvoiceRequest) ProtoMessage() {}
func (*ListInvoiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{85} }
func (*ListInvoiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{88} }
func (m *ListInvoiceRequest) GetPendingOnly() bool {
if m != nil {
@ -4221,7 +4323,7 @@ type ListInvoiceResponse struct {
func (m *ListInvoiceResponse) Reset() { *m = ListInvoiceResponse{} }
func (m *ListInvoiceResponse) String() string { return proto.CompactTextString(m) }
func (*ListInvoiceResponse) ProtoMessage() {}
func (*ListInvoiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{86} }
func (*ListInvoiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{89} }
func (m *ListInvoiceResponse) GetInvoices() []*Invoice {
if m != nil {
@ -4262,7 +4364,7 @@ type InvoiceSubscription struct {
func (m *InvoiceSubscription) Reset() { *m = InvoiceSubscription{} }
func (m *InvoiceSubscription) String() string { return proto.CompactTextString(m) }
func (*InvoiceSubscription) ProtoMessage() {}
func (*InvoiceSubscription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{87} }
func (*InvoiceSubscription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{90} }
func (m *InvoiceSubscription) GetAddIndex() uint64 {
if m != nil {
@ -4300,7 +4402,7 @@ type Payment struct {
func (m *Payment) Reset() { *m = Payment{} }
func (m *Payment) String() string { return proto.CompactTextString(m) }
func (*Payment) ProtoMessage() {}
func (*Payment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{88} }
func (*Payment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{91} }
func (m *Payment) GetPaymentHash() string {
if m != nil {
@ -4364,7 +4466,7 @@ type ListPaymentsRequest struct {
func (m *ListPaymentsRequest) Reset() { *m = ListPaymentsRequest{} }
func (m *ListPaymentsRequest) String() string { return proto.CompactTextString(m) }
func (*ListPaymentsRequest) ProtoMessage() {}
func (*ListPaymentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{89} }
func (*ListPaymentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{92} }
type ListPaymentsResponse struct {
// / The list of payments
@ -4374,7 +4476,7 @@ type ListPaymentsResponse struct {
func (m *ListPaymentsResponse) Reset() { *m = ListPaymentsResponse{} }
func (m *ListPaymentsResponse) String() string { return proto.CompactTextString(m) }
func (*ListPaymentsResponse) ProtoMessage() {}
func (*ListPaymentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{90} }
func (*ListPaymentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{93} }
func (m *ListPaymentsResponse) GetPayments() []*Payment {
if m != nil {
@ -4389,7 +4491,7 @@ type DeleteAllPaymentsRequest struct {
func (m *DeleteAllPaymentsRequest) Reset() { *m = DeleteAllPaymentsRequest{} }
func (m *DeleteAllPaymentsRequest) String() string { return proto.CompactTextString(m) }
func (*DeleteAllPaymentsRequest) ProtoMessage() {}
func (*DeleteAllPaymentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{91} }
func (*DeleteAllPaymentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{94} }
type DeleteAllPaymentsResponse struct {
}
@ -4397,7 +4499,7 @@ type DeleteAllPaymentsResponse struct {
func (m *DeleteAllPaymentsResponse) Reset() { *m = DeleteAllPaymentsResponse{} }
func (m *DeleteAllPaymentsResponse) String() string { return proto.CompactTextString(m) }
func (*DeleteAllPaymentsResponse) ProtoMessage() {}
func (*DeleteAllPaymentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{92} }
func (*DeleteAllPaymentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{95} }
type AbandonChannelRequest struct {
ChannelPoint *ChannelPoint `protobuf:"bytes,1,opt,name=channel_point,json=channelPoint" json:"channel_point,omitempty"`
@ -4406,7 +4508,7 @@ type AbandonChannelRequest struct {
func (m *AbandonChannelRequest) Reset() { *m = AbandonChannelRequest{} }
func (m *AbandonChannelRequest) String() string { return proto.CompactTextString(m) }
func (*AbandonChannelRequest) ProtoMessage() {}
func (*AbandonChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{93} }
func (*AbandonChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{96} }
func (m *AbandonChannelRequest) GetChannelPoint() *ChannelPoint {
if m != nil {
@ -4421,7 +4523,7 @@ type AbandonChannelResponse struct {
func (m *AbandonChannelResponse) Reset() { *m = AbandonChannelResponse{} }
func (m *AbandonChannelResponse) String() string { return proto.CompactTextString(m) }
func (*AbandonChannelResponse) ProtoMessage() {}
func (*AbandonChannelResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{94} }
func (*AbandonChannelResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{97} }
type DebugLevelRequest struct {
Show bool `protobuf:"varint,1,opt,name=show" json:"show,omitempty"`
@ -4431,7 +4533,7 @@ type DebugLevelRequest struct {
func (m *DebugLevelRequest) Reset() { *m = DebugLevelRequest{} }
func (m *DebugLevelRequest) String() string { return proto.CompactTextString(m) }
func (*DebugLevelRequest) ProtoMessage() {}
func (*DebugLevelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{95} }
func (*DebugLevelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{98} }
func (m *DebugLevelRequest) GetShow() bool {
if m != nil {
@ -4454,7 +4556,7 @@ type DebugLevelResponse struct {
func (m *DebugLevelResponse) Reset() { *m = DebugLevelResponse{} }
func (m *DebugLevelResponse) String() string { return proto.CompactTextString(m) }
func (*DebugLevelResponse) ProtoMessage() {}
func (*DebugLevelResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{96} }
func (*DebugLevelResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{99} }
func (m *DebugLevelResponse) GetSubSystems() string {
if m != nil {
@ -4471,7 +4573,7 @@ type PayReqString struct {
func (m *PayReqString) Reset() { *m = PayReqString{} }
func (m *PayReqString) String() string { return proto.CompactTextString(m) }
func (*PayReqString) ProtoMessage() {}
func (*PayReqString) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{97} }
func (*PayReqString) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{100} }
func (m *PayReqString) GetPayReq() string {
if m != nil {
@ -4496,7 +4598,7 @@ type PayReq struct {
func (m *PayReq) Reset() { *m = PayReq{} }
func (m *PayReq) String() string { return proto.CompactTextString(m) }
func (*PayReq) ProtoMessage() {}
func (*PayReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{98} }
func (*PayReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{101} }
func (m *PayReq) GetDestination() string {
if m != nil {
@ -4574,7 +4676,7 @@ type FeeReportRequest struct {
func (m *FeeReportRequest) Reset() { *m = FeeReportRequest{} }
func (m *FeeReportRequest) String() string { return proto.CompactTextString(m) }
func (*FeeReportRequest) ProtoMessage() {}
func (*FeeReportRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{99} }
func (*FeeReportRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{102} }
type ChannelFeeReport struct {
// / The channel that this fee report belongs to.
@ -4590,7 +4692,7 @@ type ChannelFeeReport struct {
func (m *ChannelFeeReport) Reset() { *m = ChannelFeeReport{} }
func (m *ChannelFeeReport) String() string { return proto.CompactTextString(m) }
func (*ChannelFeeReport) ProtoMessage() {}
func (*ChannelFeeReport) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{100} }
func (*ChannelFeeReport) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{103} }
func (m *ChannelFeeReport) GetChanPoint() string {
if m != nil {
@ -4634,7 +4736,7 @@ type FeeReportResponse struct {
func (m *FeeReportResponse) Reset() { *m = FeeReportResponse{} }
func (m *FeeReportResponse) String() string { return proto.CompactTextString(m) }
func (*FeeReportResponse) ProtoMessage() {}
func (*FeeReportResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{101} }
func (*FeeReportResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{104} }
func (m *FeeReportResponse) GetChannelFees() []*ChannelFeeReport {
if m != nil {
@ -4680,11 +4782,9 @@ type PolicyUpdateRequest struct {
func (m *PolicyUpdateRequest) Reset() { *m = PolicyUpdateRequest{} }
func (m *PolicyUpdateRequest) String() string { return proto.CompactTextString(m) }
func (*PolicyUpdateRequest) ProtoMessage() {}
func (*PolicyUpdateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{102} }
func (*PolicyUpdateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{105} }
type isPolicyUpdateRequest_Scope interface {
isPolicyUpdateRequest_Scope()
}
type isPolicyUpdateRequest_Scope interface{ isPolicyUpdateRequest_Scope() }
type PolicyUpdateRequest_Global struct {
Global bool `protobuf:"varint,1,opt,name=global,oneof"`
@ -4817,7 +4917,7 @@ type PolicyUpdateResponse struct {
func (m *PolicyUpdateResponse) Reset() { *m = PolicyUpdateResponse{} }
func (m *PolicyUpdateResponse) String() string { return proto.CompactTextString(m) }
func (*PolicyUpdateResponse) ProtoMessage() {}
func (*PolicyUpdateResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{103} }
func (*PolicyUpdateResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{106} }
type ForwardingHistoryRequest struct {
// / Start time is the starting point of the forwarding history request. All records beyond this point will be included, respecting the end time, and the index offset.
@ -4833,7 +4933,7 @@ type ForwardingHistoryRequest struct {
func (m *ForwardingHistoryRequest) Reset() { *m = ForwardingHistoryRequest{} }
func (m *ForwardingHistoryRequest) String() string { return proto.CompactTextString(m) }
func (*ForwardingHistoryRequest) ProtoMessage() {}
func (*ForwardingHistoryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{104} }
func (*ForwardingHistoryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{107} }
func (m *ForwardingHistoryRequest) GetStartTime() uint64 {
if m != nil {
@ -4881,7 +4981,7 @@ type ForwardingEvent struct {
func (m *ForwardingEvent) Reset() { *m = ForwardingEvent{} }
func (m *ForwardingEvent) String() string { return proto.CompactTextString(m) }
func (*ForwardingEvent) ProtoMessage() {}
func (*ForwardingEvent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{105} }
func (*ForwardingEvent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{108} }
func (m *ForwardingEvent) GetTimestamp() uint64 {
if m != nil {
@ -4935,7 +5035,7 @@ type ForwardingHistoryResponse struct {
func (m *ForwardingHistoryResponse) Reset() { *m = ForwardingHistoryResponse{} }
func (m *ForwardingHistoryResponse) String() string { return proto.CompactTextString(m) }
func (*ForwardingHistoryResponse) ProtoMessage() {}
func (*ForwardingHistoryResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{106} }
func (*ForwardingHistoryResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{109} }
func (m *ForwardingHistoryResponse) GetForwardingEvents() []*ForwardingEvent {
if m != nil {
@ -4960,6 +5060,7 @@ func init() {
proto.RegisterType((*UnlockWalletResponse)(nil), "lnrpc.UnlockWalletResponse")
proto.RegisterType((*ChangePasswordRequest)(nil), "lnrpc.ChangePasswordRequest")
proto.RegisterType((*ChangePasswordResponse)(nil), "lnrpc.ChangePasswordResponse")
proto.RegisterType((*Utxo)(nil), "lnrpc.Utxo")
proto.RegisterType((*Transaction)(nil), "lnrpc.Transaction")
proto.RegisterType((*GetTransactionsRequest)(nil), "lnrpc.GetTransactionsRequest")
proto.RegisterType((*TransactionDetails)(nil), "lnrpc.TransactionDetails")
@ -4973,6 +5074,8 @@ func init() {
proto.RegisterType((*SendManyResponse)(nil), "lnrpc.SendManyResponse")
proto.RegisterType((*SendCoinsRequest)(nil), "lnrpc.SendCoinsRequest")
proto.RegisterType((*SendCoinsResponse)(nil), "lnrpc.SendCoinsResponse")
proto.RegisterType((*ListUnspentRequest)(nil), "lnrpc.ListUnspentRequest")
proto.RegisterType((*ListUnspentResponse)(nil), "lnrpc.ListUnspentResponse")
proto.RegisterType((*NewAddressRequest)(nil), "lnrpc.NewAddressRequest")
proto.RegisterType((*NewAddressResponse)(nil), "lnrpc.NewAddressResponse")
proto.RegisterType((*SignMessageRequest)(nil), "lnrpc.SignMessageRequest")
@ -5064,7 +5167,7 @@ func init() {
proto.RegisterType((*ForwardingHistoryRequest)(nil), "lnrpc.ForwardingHistoryRequest")
proto.RegisterType((*ForwardingEvent)(nil), "lnrpc.ForwardingEvent")
proto.RegisterType((*ForwardingHistoryResponse)(nil), "lnrpc.ForwardingHistoryResponse")
proto.RegisterEnum("lnrpc.NewAddressRequest_AddressType", NewAddressRequest_AddressType_name, NewAddressRequest_AddressType_value)
proto.RegisterEnum("lnrpc.AddressType", AddressType_name, AddressType_value)
proto.RegisterEnum("lnrpc.ChannelCloseSummary_ClosureType", ChannelCloseSummary_ClosureType_name, ChannelCloseSummary_ClosureType_value)
}
@ -5318,6 +5421,10 @@ type LightningClient interface {
// consult its fee model to determine a fee for the default confirmation
// target.
SendCoins(ctx context.Context, in *SendCoinsRequest, opts ...grpc.CallOption) (*SendCoinsResponse, error)
// * lncli: `listunspent`
// ListUnspent returns a list of all utxos spendable by the wallet with a
// number of confirmations between the specified minimum and maximum.
ListUnspent(ctx context.Context, in *ListUnspentRequest, opts ...grpc.CallOption) (*ListUnspentResponse, error)
// *
// SubscribeTransactions creates a uni-directional stream from the server to
// the client in which any newly discovered transactions relevant to the
@ -5581,6 +5688,15 @@ func (c *lightningClient) SendCoins(ctx context.Context, in *SendCoinsRequest, o
return out, nil
}
func (c *lightningClient) ListUnspent(ctx context.Context, in *ListUnspentRequest, opts ...grpc.CallOption) (*ListUnspentResponse, error) {
out := new(ListUnspentResponse)
err := grpc.Invoke(ctx, "/lnrpc.Lightning/ListUnspent", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *lightningClient) SubscribeTransactions(ctx context.Context, in *GetTransactionsRequest, opts ...grpc.CallOption) (Lightning_SubscribeTransactionsClient, error) {
stream, err := grpc.NewClientStream(ctx, &_Lightning_serviceDesc.Streams[0], c.cc, "/lnrpc.Lightning/SubscribeTransactions", opts...)
if err != nil {
@ -6105,6 +6221,10 @@ type LightningServer interface {
// consult its fee model to determine a fee for the default confirmation
// target.
SendCoins(context.Context, *SendCoinsRequest) (*SendCoinsResponse, error)
// * lncli: `listunspent`
// ListUnspent returns a list of all utxos spendable by the wallet with a
// number of confirmations between the specified minimum and maximum.
ListUnspent(context.Context, *ListUnspentRequest) (*ListUnspentResponse, error)
// *
// SubscribeTransactions creates a uni-directional stream from the server to
// the client in which any newly discovered transactions relevant to the
@ -6400,6 +6520,24 @@ func _Lightning_SendCoins_Handler(srv interface{}, ctx context.Context, dec func
return interceptor(ctx, in, info, handler)
}
func _Lightning_ListUnspent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListUnspentRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(LightningServer).ListUnspent(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/lnrpc.Lightning/ListUnspent",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(LightningServer).ListUnspent(ctx, req.(*ListUnspentRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Lightning_SubscribeTransactions_Handler(srv interface{}, stream grpc.ServerStream) error {
m := new(GetTransactionsRequest)
if err := stream.RecvMsg(m); err != nil {
@ -7135,6 +7273,10 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{
MethodName: "SendCoins",
Handler: _Lightning_SendCoins_Handler,
},
{
MethodName: "ListUnspent",
Handler: _Lightning_ListUnspent_Handler,
},
{
MethodName: "SendMany",
Handler: _Lightning_SendMany_Handler,
@ -7305,411 +7447,419 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("rpc.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 6486 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7c, 0x5d, 0x6c, 0x24, 0xd9,
0x55, 0xff, 0x54, 0xbb, 0xdb, 0xee, 0x3e, 0xdd, 0xb6, 0xdb, 0xd7, 0x1f, 0xd3, 0xd3, 0x3b, 0x3b,
0x3b, 0x5b, 0x59, 0xed, 0x4c, 0xfc, 0xdf, 0xff, 0xcc, 0xac, 0x93, 0xac, 0x36, 0xbb, 0xff, 0x7f,
0x82, 0xc7, 0xf6, 0x8c, 0x87, 0x78, 0x67, 0x9c, 0xf2, 0x6c, 0x96, 0x24, 0xa0, 0x4e, 0xb9, 0xfb,
0xba, 0x5d, 0x99, 0xee, 0xaa, 0x4e, 0x55, 0xb5, 0xbd, 0x9d, 0x65, 0x25, 0xbe, 0x04, 0x12, 0x22,
0x8a, 0x10, 0x42, 0x28, 0x48, 0x08, 0x29, 0xf0, 0x90, 0x3c, 0xf2, 0x40, 0x84, 0x04, 0xbc, 0xf1,
0x02, 0x12, 0xe2, 0x21, 0x4f, 0x08, 0x89, 0x17, 0x78, 0x01, 0xde, 0x90, 0x78, 0x04, 0xa1, 0x73,
0xee, 0x47, 0xdd, 0x5b, 0x55, 0x1e, 0x4f, 0x3e, 0xe0, 0xad, 0xef, 0xef, 0x9e, 0xba, 0x9f, 0xe7,
0xeb, 0x9e, 0x7b, 0x6e, 0x43, 0x23, 0x9e, 0xf4, 0xef, 0x4c, 0xe2, 0x28, 0x8d, 0x58, 0x6d, 0x14,
0xc6, 0x93, 0x7e, 0xf7, 0xfa, 0x30, 0x8a, 0x86, 0x23, 0x7e, 0xd7, 0x9f, 0x04, 0x77, 0xfd, 0x30,
0x8c, 0x52, 0x3f, 0x0d, 0xa2, 0x30, 0x11, 0x44, 0xee, 0xd7, 0x60, 0xe9, 0x21, 0x0f, 0x8f, 0x38,
0x1f, 0x78, 0xfc, 0x1b, 0x53, 0x9e, 0xa4, 0xec, 0xff, 0xc0, 0x8a, 0xcf, 0xbf, 0xc9, 0xf9, 0xa0,
0x37, 0xf1, 0x93, 0x64, 0x72, 0x1a, 0xfb, 0x09, 0xef, 0x38, 0x37, 0x9d, 0xdb, 0x2d, 0xaf, 0x2d,
0x2a, 0x0e, 0x35, 0xce, 0x5e, 0x85, 0x56, 0x82, 0xa4, 0x3c, 0x4c, 0xe3, 0x68, 0x32, 0xeb, 0x54,
0x88, 0xae, 0x89, 0xd8, 0x9e, 0x80, 0xdc, 0x11, 0x2c, 0xeb, 0x1e, 0x92, 0x49, 0x14, 0x26, 0x9c,
0xdd, 0x83, 0xb5, 0x7e, 0x30, 0x39, 0xe5, 0x71, 0x8f, 0x3e, 0x1e, 0x87, 0x7c, 0x1c, 0x85, 0x41,
0xbf, 0xe3, 0xdc, 0x9c, 0xbb, 0xdd, 0xf0, 0x98, 0xa8, 0xc3, 0x2f, 0xde, 0x93, 0x35, 0xec, 0x16,
0x2c, 0xf3, 0x50, 0xe0, 0x7c, 0x40, 0x5f, 0xc9, 0xae, 0x96, 0x32, 0x18, 0x3f, 0x70, 0xff, 0xca,
0x81, 0x95, 0x47, 0x61, 0x90, 0x7e, 0xe0, 0x8f, 0x46, 0x3c, 0x55, 0x73, 0xba, 0x05, 0xcb, 0xe7,
0x04, 0xd0, 0x9c, 0xce, 0xa3, 0x78, 0x20, 0x67, 0xb4, 0x24, 0xe0, 0x43, 0x89, 0x5e, 0x38, 0xb2,
0xca, 0x85, 0x23, 0x2b, 0x5d, 0xae, 0xb9, 0x0b, 0x96, 0xeb, 0x16, 0x2c, 0xc7, 0xbc, 0x1f, 0x9d,
0xf1, 0x78, 0xd6, 0x3b, 0x0f, 0xc2, 0x41, 0x74, 0xde, 0xa9, 0xde, 0x74, 0x6e, 0xd7, 0xbc, 0x25,
0x05, 0x7f, 0x40, 0xa8, 0xbb, 0x06, 0xcc, 0x9c, 0x85, 0x58, 0x37, 0x77, 0x08, 0xab, 0xef, 0x87,
0xa3, 0xa8, 0xff, 0xec, 0xc7, 0x9c, 0x5d, 0x49, 0xf7, 0x95, 0xd2, 0xee, 0x37, 0x60, 0xcd, 0xee,
0x48, 0x0e, 0x80, 0xc3, 0xfa, 0xce, 0xa9, 0x1f, 0x0e, 0xb9, 0x6a, 0x52, 0x0d, 0xe1, 0x93, 0xd0,
0xee, 0x4f, 0xe3, 0x98, 0x87, 0x85, 0x31, 0x2c, 0x4b, 0x5c, 0x0f, 0xe2, 0x55, 0x68, 0x85, 0xfc,
0x3c, 0x23, 0x93, 0x2c, 0x13, 0xf2, 0x73, 0x45, 0xe2, 0x76, 0x60, 0x23, 0xdf, 0x8d, 0x1c, 0xc0,
0x77, 0x2a, 0xd0, 0x7c, 0x1a, 0xfb, 0x61, 0xe2, 0xf7, 0x91, 0x8b, 0x59, 0x07, 0x16, 0xd2, 0x0f,
0x7b, 0xa7, 0x7e, 0x72, 0x4a, 0xdd, 0x35, 0x3c, 0x55, 0x64, 0x1b, 0x30, 0xef, 0x8f, 0xa3, 0x69,
0x98, 0x52, 0x07, 0x73, 0x9e, 0x2c, 0xb1, 0x37, 0x60, 0x25, 0x9c, 0x8e, 0x7b, 0xfd, 0x28, 0x3c,
0x09, 0xe2, 0xb1, 0x90, 0x05, 0xda, 0xaf, 0x9a, 0x57, 0xac, 0x60, 0x37, 0x00, 0x8e, 0x71, 0x1d,
0x44, 0x17, 0x55, 0xea, 0xc2, 0x40, 0x98, 0x0b, 0x2d, 0x59, 0xe2, 0xc1, 0xf0, 0x34, 0xed, 0xd4,
0xa8, 0x21, 0x0b, 0xc3, 0x36, 0xd2, 0x60, 0xcc, 0x7b, 0x49, 0xea, 0x8f, 0x27, 0x9d, 0x79, 0x1a,
0x8d, 0x81, 0x50, 0x7d, 0x94, 0xfa, 0xa3, 0xde, 0x09, 0xe7, 0x49, 0x67, 0x41, 0xd6, 0x6b, 0x84,
0xbd, 0x0e, 0x4b, 0x03, 0x9e, 0xa4, 0x3d, 0x7f, 0x30, 0x88, 0x79, 0x92, 0xf0, 0xa4, 0x53, 0x27,
0x6e, 0xcc, 0xa1, 0xb8, 0x6a, 0x0f, 0x79, 0x6a, 0xac, 0x4e, 0x22, 0x77, 0xc7, 0x3d, 0x00, 0x66,
0xc0, 0xbb, 0x3c, 0xf5, 0x83, 0x51, 0xc2, 0xde, 0x82, 0x56, 0x6a, 0x10, 0x93, 0xf4, 0x35, 0xb7,
0xd8, 0x1d, 0x52, 0x1b, 0x77, 0x8c, 0x0f, 0x3c, 0x8b, 0xce, 0x7d, 0x08, 0xf5, 0x07, 0x9c, 0x1f,
0x04, 0xe3, 0x20, 0x65, 0x1b, 0x50, 0x3b, 0x09, 0x3e, 0xe4, 0x62, 0xb3, 0xe7, 0xf6, 0xaf, 0x78,
0xa2, 0xc8, 0xba, 0xb0, 0x30, 0xe1, 0x71, 0x9f, 0xab, 0xe5, 0xdf, 0xbf, 0xe2, 0x29, 0xe0, 0xfe,
0x02, 0xd4, 0x46, 0xf8, 0xb1, 0xfb, 0xbd, 0x0a, 0x34, 0x8f, 0x78, 0xa8, 0x99, 0x88, 0x41, 0x15,
0xa7, 0x24, 0x19, 0x87, 0x7e, 0xb3, 0x57, 0xa0, 0x49, 0xd3, 0x4c, 0xd2, 0x38, 0x08, 0x87, 0xd4,
0x58, 0xc3, 0x03, 0x84, 0x8e, 0x08, 0x61, 0x6d, 0x98, 0xf3, 0xc7, 0x29, 0xed, 0xe0, 0x9c, 0x87,
0x3f, 0x91, 0xc1, 0x26, 0xfe, 0x6c, 0x8c, 0xbc, 0xa8, 0x77, 0xad, 0xe5, 0x35, 0x25, 0xb6, 0x8f,
0xdb, 0x76, 0x07, 0x56, 0x4d, 0x12, 0xd5, 0x7a, 0x8d, 0x5a, 0x5f, 0x31, 0x28, 0x65, 0x27, 0xb7,
0x60, 0x59, 0xd1, 0xc7, 0x62, 0xb0, 0xb4, 0x8f, 0x0d, 0x6f, 0x49, 0xc2, 0x6a, 0x0a, 0xb7, 0xa1,
0x7d, 0x12, 0x84, 0xfe, 0xa8, 0xd7, 0x1f, 0xa5, 0x67, 0xbd, 0x01, 0x1f, 0xa5, 0x3e, 0xed, 0x68,
0xcd, 0x5b, 0x22, 0x7c, 0x67, 0x94, 0x9e, 0xed, 0x22, 0xca, 0xde, 0x80, 0xc6, 0x09, 0xe7, 0x3d,
0x5a, 0x89, 0x4e, 0xfd, 0xa6, 0x73, 0xbb, 0xb9, 0xb5, 0x2c, 0x97, 0x5e, 0xad, 0xae, 0x57, 0x3f,
0x91, 0xbf, 0xdc, 0x3f, 0x73, 0xa0, 0x25, 0x96, 0x4a, 0xaa, 0xd0, 0xd7, 0x60, 0x51, 0x8d, 0x88,
0xc7, 0x71, 0x14, 0x4b, 0xf6, 0xb7, 0x41, 0xb6, 0x09, 0x6d, 0x05, 0x4c, 0x62, 0x1e, 0x8c, 0xfd,
0x21, 0x97, 0xf2, 0x56, 0xc0, 0xd9, 0x56, 0xd6, 0x62, 0x1c, 0x4d, 0x53, 0xa1, 0xc4, 0x9a, 0x5b,
0x2d, 0x39, 0x28, 0x0f, 0x31, 0xcf, 0x26, 0x41, 0xf6, 0x2f, 0x59, 0x6a, 0x0b, 0x73, 0xbf, 0xe5,
0x00, 0xc3, 0xa1, 0x3f, 0x8d, 0x44, 0x13, 0x72, 0xa5, 0xf2, 0xbb, 0xe4, 0xbc, 0xf0, 0x2e, 0x55,
0x2e, 0xda, 0xa5, 0xd7, 0x60, 0x9e, 0x86, 0x85, 0xf2, 0x3c, 0x57, 0x18, 0xba, 0xac, 0x73, 0xbf,
0xeb, 0x40, 0x0b, 0xb5, 0x4b, 0xc8, 0x47, 0x87, 0x51, 0x10, 0xa6, 0xec, 0x1e, 0xb0, 0x93, 0x69,
0x38, 0x08, 0xc2, 0x61, 0x2f, 0xfd, 0x30, 0x18, 0xf4, 0x8e, 0x67, 0xd8, 0x04, 0x8d, 0x67, 0xff,
0x8a, 0x57, 0x52, 0xc7, 0xde, 0x80, 0xb6, 0x85, 0x26, 0x69, 0x2c, 0x46, 0xb5, 0x7f, 0xc5, 0x2b,
0xd4, 0xe0, 0x22, 0x45, 0xd3, 0x74, 0x32, 0x4d, 0x7b, 0x41, 0x38, 0xe0, 0x1f, 0xd2, 0xba, 0x2e,
0x7a, 0x16, 0x76, 0x7f, 0x09, 0x5a, 0xe6, 0x77, 0xee, 0xe7, 0xa0, 0x7d, 0x80, 0xca, 0x23, 0x0c,
0xc2, 0xe1, 0xb6, 0x90, 0x70, 0xd4, 0x68, 0x93, 0xe9, 0xf1, 0x33, 0x3e, 0x93, 0x7b, 0x2d, 0x4b,
0x28, 0x36, 0xa7, 0x51, 0x92, 0xca, 0x75, 0xa1, 0xdf, 0xee, 0x3f, 0x39, 0xb0, 0x8c, 0x8b, 0xfe,
0x9e, 0x1f, 0xce, 0xd4, 0x8a, 0x1f, 0x40, 0x0b, 0x9b, 0x7a, 0x1a, 0x6d, 0x0b, 0xbd, 0x28, 0xe4,
0xfd, 0xb6, 0x5c, 0xa4, 0x1c, 0xf5, 0x1d, 0x93, 0x14, 0x4d, 0xf9, 0xcc, 0xb3, 0xbe, 0x46, 0xc1,
0x4c, 0xfd, 0x78, 0xc8, 0x53, 0xd2, 0x98, 0x52, 0x83, 0x82, 0x80, 0x76, 0xa2, 0xf0, 0x84, 0xdd,
0x84, 0x56, 0xe2, 0xa7, 0xbd, 0x09, 0x8f, 0x69, 0xd5, 0x48, 0xb8, 0xe6, 0x3c, 0x48, 0xfc, 0xf4,
0x90, 0xc7, 0xf7, 0x67, 0x29, 0xef, 0x7e, 0x1e, 0x56, 0x0a, 0xbd, 0xa0, 0x3c, 0x67, 0x53, 0xc4,
0x9f, 0x6c, 0x0d, 0x6a, 0x67, 0xfe, 0x68, 0xca, 0xa5, 0x22, 0x17, 0x85, 0x77, 0x2a, 0x6f, 0x3b,
0xee, 0xeb, 0xd0, 0xce, 0x86, 0x2d, 0x05, 0x83, 0x41, 0x15, 0x57, 0x50, 0x36, 0x40, 0xbf, 0xdd,
0x5f, 0x76, 0x04, 0xe1, 0x4e, 0x14, 0x68, 0xa5, 0x88, 0x84, 0xa8, 0x3b, 0x15, 0x21, 0xfe, 0xbe,
0xd0, 0x68, 0xfc, 0xe4, 0x93, 0x75, 0x6f, 0xc1, 0x8a, 0x31, 0x84, 0xe7, 0x0c, 0xf6, 0x5b, 0x0e,
0xac, 0x3c, 0xe6, 0xe7, 0x72, 0xd7, 0xd5, 0x68, 0xdf, 0x86, 0x6a, 0x3a, 0x9b, 0x08, 0x47, 0x6c,
0x69, 0xeb, 0x35, 0xb9, 0x69, 0x05, 0xba, 0x3b, 0xb2, 0xf8, 0x74, 0x36, 0xe1, 0x1e, 0x7d, 0xe1,
0x7e, 0x0e, 0x9a, 0x06, 0xc8, 0xae, 0xc2, 0xea, 0x07, 0x8f, 0x9e, 0x3e, 0xde, 0x3b, 0x3a, 0xea,
0x1d, 0xbe, 0x7f, 0xff, 0x0b, 0x7b, 0x5f, 0xee, 0xed, 0x6f, 0x1f, 0xed, 0xb7, 0xaf, 0xb0, 0x0d,
0x60, 0x8f, 0xf7, 0x8e, 0x9e, 0xee, 0xed, 0x5a, 0xb8, 0xe3, 0xde, 0x01, 0x66, 0x76, 0x23, 0x47,
0xde, 0x81, 0x05, 0x69, 0x79, 0x94, 0xe1, 0x95, 0x45, 0xf7, 0x75, 0x60, 0x47, 0xc1, 0x30, 0x7c,
0x8f, 0x27, 0x89, 0x3f, 0xd4, 0xe2, 0xde, 0x86, 0xb9, 0x71, 0x32, 0x94, 0x52, 0x8e, 0x3f, 0xdd,
0x4f, 0xc1, 0xaa, 0x45, 0x27, 0x1b, 0xbe, 0x0e, 0x8d, 0x24, 0x18, 0x86, 0x7e, 0x3a, 0x8d, 0xb9,
0x6c, 0x3a, 0x03, 0xdc, 0x07, 0xb0, 0xf6, 0x25, 0x1e, 0x07, 0x27, 0xb3, 0xcb, 0x9a, 0xb7, 0xdb,
0xa9, 0xe4, 0xdb, 0xd9, 0x83, 0xf5, 0x5c, 0x3b, 0xb2, 0x7b, 0xc1, 0x6c, 0x72, 0x4b, 0xea, 0x9e,
0x28, 0x18, 0xa2, 0x57, 0x31, 0x45, 0xcf, 0x7d, 0x1f, 0xd8, 0x4e, 0x14, 0x86, 0xbc, 0x9f, 0x1e,
0x72, 0x1e, 0x67, 0x1e, 0x74, 0xc6, 0x59, 0xcd, 0xad, 0xab, 0x72, 0xaf, 0xf2, 0xf2, 0x2c, 0x59,
0x8e, 0x41, 0x75, 0xc2, 0xe3, 0x31, 0x35, 0x5c, 0xf7, 0xe8, 0xb7, 0xbb, 0x0e, 0xab, 0x56, 0xb3,
0xd2, 0xf9, 0x79, 0x13, 0xd6, 0x77, 0x83, 0xa4, 0x5f, 0xec, 0xb0, 0x03, 0x0b, 0x93, 0xe9, 0x71,
0x2f, 0x93, 0x1b, 0x55, 0x44, 0x9f, 0x20, 0xff, 0x89, 0x6c, 0xec, 0xd7, 0x1d, 0xa8, 0xee, 0x3f,
0x3d, 0xd8, 0x61, 0x5d, 0xa8, 0x07, 0x61, 0x3f, 0x1a, 0xa3, 0x6a, 0x15, 0x93, 0xd6, 0xe5, 0x0b,
0xe5, 0xe1, 0x3a, 0x34, 0x48, 0x23, 0xa3, 0x9b, 0x23, 0x9d, 0xdd, 0x0c, 0x40, 0x17, 0x8b, 0x7f,
0x38, 0x09, 0x62, 0xf2, 0xa1, 0x94, 0x67, 0x54, 0x25, 0xad, 0x57, 0xac, 0x70, 0xff, 0xab, 0x0a,
0x0b, 0x52, 0x1f, 0x53, 0x7f, 0xfd, 0x34, 0x38, 0xe3, 0x72, 0x24, 0xb2, 0x84, 0xd6, 0x2e, 0xe6,
0xe3, 0x28, 0xe5, 0x3d, 0x6b, 0x1b, 0x6c, 0x10, 0xa9, 0xfa, 0xa2, 0xa1, 0xde, 0x04, 0x35, 0x3b,
0x8d, 0xac, 0xe1, 0xd9, 0x20, 0x2e, 0x16, 0x02, 0xbd, 0x60, 0x40, 0x63, 0xaa, 0x7a, 0xaa, 0x88,
0x2b, 0xd1, 0xf7, 0x27, 0x7e, 0x3f, 0x48, 0x67, 0x52, 0x80, 0x75, 0x19, 0xdb, 0x1e, 0x45, 0x7d,
0x7f, 0xd4, 0x3b, 0xf6, 0x47, 0x7e, 0xd8, 0xe7, 0xd2, 0x8f, 0xb3, 0x41, 0x74, 0xd5, 0xe4, 0x90,
0x14, 0x99, 0x70, 0xe7, 0x72, 0x28, 0xba, 0x7c, 0xfd, 0x68, 0x3c, 0x0e, 0x52, 0xf4, 0xf0, 0xc8,
0xfa, 0xcf, 0x79, 0x06, 0x42, 0x33, 0x11, 0xa5, 0x73, 0xb1, 0x7a, 0x0d, 0xd1, 0x9b, 0x05, 0x62,
0x2b, 0xe8, 0x42, 0xa0, 0xd2, 0x79, 0x76, 0xde, 0x01, 0xd1, 0x4a, 0x86, 0xe0, 0x3e, 0x4c, 0xc3,
0x84, 0xa7, 0xe9, 0x88, 0x0f, 0xf4, 0x80, 0x9a, 0x44, 0x56, 0xac, 0x60, 0xf7, 0x60, 0x55, 0x38,
0x9d, 0x89, 0x9f, 0x46, 0xc9, 0x69, 0x90, 0xf4, 0x12, 0x74, 0xdf, 0x5a, 0x44, 0x5f, 0x56, 0xc5,
0xde, 0x86, 0xab, 0x39, 0x38, 0xe6, 0x7d, 0x1e, 0x9c, 0xf1, 0x41, 0x67, 0x91, 0xbe, 0xba, 0xa8,
0x9a, 0xdd, 0x84, 0x26, 0xfa, 0xda, 0xd3, 0xc9, 0xc0, 0x47, 0x5b, 0xbb, 0x44, 0xfb, 0x60, 0x42,
0xec, 0x4d, 0x58, 0x9c, 0x70, 0x61, 0x10, 0x4f, 0xd3, 0x51, 0x3f, 0xe9, 0x2c, 0x93, 0xb5, 0x6a,
0x4a, 0x61, 0x42, 0xce, 0xf5, 0x6c, 0x0a, 0x64, 0xca, 0x7e, 0x42, 0x4e, 0x97, 0x3f, 0xeb, 0xb4,
0x89, 0xdd, 0x32, 0x80, 0x64, 0x24, 0x0e, 0xce, 0xfc, 0x94, 0x77, 0x56, 0x88, 0xb7, 0x54, 0xd1,
0xfd, 0x43, 0x07, 0x56, 0x0f, 0x82, 0x24, 0x95, 0x4c, 0xa8, 0x55, 0xee, 0x2b, 0xd0, 0x14, 0xec,
0xd7, 0x8b, 0xc2, 0xd1, 0x4c, 0x72, 0x24, 0x08, 0xe8, 0x49, 0x38, 0x9a, 0xb1, 0x4f, 0xc0, 0x62,
0x10, 0x9a, 0x24, 0x42, 0x86, 0x5b, 0x0a, 0x24, 0xa2, 0x57, 0xa0, 0x39, 0x99, 0x1e, 0x8f, 0x82,
0xbe, 0x20, 0x99, 0x13, 0xad, 0x08, 0x88, 0x08, 0xd0, 0x11, 0x12, 0x23, 0x11, 0x14, 0x55, 0xa2,
0x68, 0x4a, 0x0c, 0x49, 0xdc, 0xfb, 0xb0, 0x66, 0x0f, 0x50, 0x2a, 0xab, 0x4d, 0xa8, 0x4b, 0xde,
0x4e, 0x3a, 0x4d, 0x5a, 0x9f, 0x25, 0xb9, 0x3e, 0x92, 0xd4, 0xd3, 0xf5, 0xee, 0x0f, 0xaa, 0xb0,
0x2a, 0xd1, 0x9d, 0x51, 0x94, 0xf0, 0xa3, 0xe9, 0x78, 0xec, 0xc7, 0x25, 0x42, 0xe3, 0x5c, 0x22,
0x34, 0x15, 0x5b, 0x68, 0x90, 0x95, 0x4f, 0xfd, 0x20, 0x14, 0x5e, 0x9c, 0x90, 0x38, 0x03, 0x61,
0xb7, 0x61, 0xb9, 0x3f, 0x8a, 0x12, 0xe1, 0xd9, 0x98, 0xc7, 0xa8, 0x3c, 0x5c, 0x14, 0xf2, 0x5a,
0x99, 0x90, 0x9b, 0x42, 0x3a, 0x9f, 0x13, 0x52, 0x17, 0x5a, 0xd8, 0x28, 0x57, 0x3a, 0x67, 0x41,
0x78, 0x5a, 0x26, 0x86, 0xe3, 0xc9, 0x8b, 0x84, 0x90, 0xbf, 0xe5, 0x32, 0x81, 0xc0, 0x53, 0x1a,
0xea, 0x34, 0x83, 0xba, 0x21, 0x05, 0xa2, 0x58, 0xc5, 0x1e, 0x00, 0x88, 0xbe, 0xc8, 0x54, 0x03,
0x99, 0xea, 0xd7, 0xed, 0x1d, 0x31, 0xd7, 0xfe, 0x0e, 0x16, 0xa6, 0x31, 0x27, 0x63, 0x6d, 0x7c,
0xe9, 0xfe, 0xa6, 0x03, 0x4d, 0xa3, 0x8e, 0xad, 0xc3, 0xca, 0xce, 0x93, 0x27, 0x87, 0x7b, 0xde,
0xf6, 0xd3, 0x47, 0x5f, 0xda, 0xeb, 0xed, 0x1c, 0x3c, 0x39, 0xda, 0x6b, 0x5f, 0x41, 0xf8, 0xe0,
0xc9, 0xce, 0xf6, 0x41, 0xef, 0xc1, 0x13, 0x6f, 0x47, 0xc1, 0x0e, 0x1a, 0x72, 0x6f, 0xef, 0xbd,
0x27, 0x4f, 0xf7, 0x2c, 0xbc, 0xc2, 0xda, 0xd0, 0xba, 0xef, 0xed, 0x6d, 0xef, 0xec, 0x4b, 0x64,
0x8e, 0xad, 0x41, 0xfb, 0xc1, 0xfb, 0x8f, 0x77, 0x1f, 0x3d, 0x7e, 0xd8, 0xdb, 0xd9, 0x7e, 0xbc,
0xb3, 0x77, 0xb0, 0xb7, 0xdb, 0xae, 0xb2, 0x45, 0x68, 0x6c, 0xdf, 0xdf, 0x7e, 0xbc, 0xfb, 0xe4,
0xf1, 0xde, 0x6e, 0xbb, 0xe6, 0xfe, 0xa3, 0x03, 0xeb, 0x34, 0xea, 0x41, 0x5e, 0x40, 0x6e, 0x42,
0xb3, 0x1f, 0x45, 0x13, 0x8e, 0xfa, 0x5c, 0xab, 0x6c, 0x13, 0x42, 0xe6, 0x17, 0x0a, 0xf2, 0x24,
0x8a, 0xfb, 0x5c, 0xca, 0x07, 0x10, 0xf4, 0x00, 0x11, 0x64, 0x7e, 0xb9, 0xbd, 0x82, 0x42, 0x88,
0x47, 0x53, 0x60, 0x82, 0x64, 0x03, 0xe6, 0x8f, 0x63, 0xee, 0xf7, 0x4f, 0xa5, 0x64, 0xc8, 0x12,
0xfb, 0x64, 0xe6, 0x84, 0xf7, 0x71, 0xf5, 0x47, 0x7c, 0x40, 0x1c, 0x53, 0xf7, 0x96, 0x25, 0xbe,
0x23, 0x61, 0xd4, 0x0c, 0xfe, 0xb1, 0x1f, 0x0e, 0xa2, 0x90, 0x0f, 0x88, 0x69, 0xea, 0x5e, 0x06,
0xb8, 0x87, 0xb0, 0x91, 0x9f, 0x9f, 0x94, 0xaf, 0xb7, 0x0c, 0xf9, 0x12, 0xde, 0x72, 0xf7, 0xe2,
0xdd, 0x34, 0x64, 0xed, 0x5f, 0x1d, 0xa8, 0xa2, 0xb1, 0xbd, 0xd8, 0x30, 0x9b, 0xfe, 0xd3, 0x9c,
0xe5, 0x3f, 0x51, 0xc8, 0x01, 0x4f, 0x19, 0x42, 0xfd, 0x0a, 0x13, 0x65, 0x20, 0x59, 0x7d, 0xcc,
0xfb, 0x67, 0x34, 0x63, 0x5d, 0x8f, 0x08, 0x0a, 0x08, 0xba, 0xa2, 0xf4, 0xb5, 0x14, 0x10, 0x55,
0x56, 0x75, 0xf4, 0xe5, 0x42, 0x56, 0x47, 0xdf, 0x75, 0x60, 0x21, 0x08, 0x8f, 0xa3, 0x69, 0x38,
0x20, 0x81, 0xa8, 0x7b, 0xaa, 0x88, 0xcb, 0x37, 0x21, 0x41, 0x0d, 0xc6, 0x8a, 0xfd, 0x33, 0xc0,
0x65, 0x78, 0x54, 0x49, 0xc8, 0xb9, 0xd0, 0x01, 0x87, 0xb7, 0x60, 0xc5, 0xc0, 0xe4, 0x6a, 0xbe,
0x0a, 0xb5, 0x09, 0x02, 0x72, 0x29, 0x95, 0x2a, 0x27, 0xaf, 0x44, 0xd4, 0xb8, 0x6d, 0x58, 0x7a,
0xc8, 0xd3, 0x47, 0xe1, 0x49, 0xa4, 0x5a, 0xfa, 0x76, 0x15, 0x96, 0x35, 0x24, 0x1b, 0xba, 0x0d,
0xcb, 0xc1, 0x80, 0x87, 0x69, 0x90, 0xce, 0x7a, 0xd6, 0x89, 0x28, 0x0f, 0xa3, 0x37, 0xe7, 0x8f,
0x02, 0x3f, 0x91, 0xfe, 0x82, 0x28, 0xb0, 0x2d, 0x58, 0x43, 0x53, 0xa3, 0xac, 0x87, 0xde, 0x62,
0x71, 0x30, 0x2b, 0xad, 0x43, 0x65, 0x80, 0xb8, 0xd4, 0xf6, 0xfa, 0x13, 0xe1, 0xd5, 0x94, 0x55,
0xe1, 0xaa, 0x89, 0x96, 0x70, 0xca, 0x35, 0x61, 0x8e, 0x34, 0x50, 0x08, 0x1c, 0xcd, 0x0b, 0x55,
0x95, 0x0f, 0x1c, 0x19, 0xc1, 0xa7, 0x7a, 0x21, 0xf8, 0x84, 0xaa, 0x6c, 0x16, 0xf6, 0xf9, 0xa0,
0x97, 0x46, 0x3d, 0x52, 0xb9, 0xb4, 0x3b, 0x75, 0x2f, 0x0f, 0x53, 0x98, 0x8c, 0x27, 0x69, 0xc8,
0x53, 0xd2, 0x4a, 0x75, 0x4f, 0x15, 0x51, 0xba, 0x88, 0x44, 0x18, 0x90, 0x86, 0x27, 0x4b, 0xe8,
0x96, 0x4e, 0xe3, 0x20, 0xe9, 0xb4, 0x08, 0xa5, 0xdf, 0xec, 0xd3, 0xb0, 0x7e, 0xcc, 0x93, 0xb4,
0x77, 0xca, 0xfd, 0x01, 0x8f, 0x69, 0xf7, 0x45, 0x4c, 0x4b, 0x58, 0xfb, 0xf2, 0x4a, 0xec, 0xfb,
0x8c, 0xc7, 0x49, 0x10, 0x85, 0x64, 0xe7, 0x1b, 0x9e, 0x2a, 0x62, 0x7b, 0xb8, 0x20, 0xda, 0x86,
0xea, 0x55, 0x5d, 0xa6, 0xc5, 0x28, 0xaf, 0x74, 0xbf, 0x49, 0x3e, 0xb7, 0x8e, 0xd1, 0xbd, 0x4f,
0x0e, 0x03, 0x7b, 0x09, 0x1a, 0x62, 0x65, 0x92, 0x53, 0x5f, 0x1e, 0x03, 0xea, 0x04, 0x1c, 0x9d,
0xfa, 0xa8, 0x65, 0xac, 0xc5, 0x16, 0x41, 0xcf, 0x26, 0x61, 0xfb, 0x62, 0xad, 0x5f, 0x83, 0x25,
0x15, 0xfd, 0x4b, 0x7a, 0x23, 0x7e, 0x92, 0xaa, 0x63, 0x7a, 0x38, 0x1d, 0x63, 0x77, 0xc9, 0x01,
0x3f, 0x49, 0xdd, 0xc7, 0xb0, 0x22, 0x25, 0xff, 0xc9, 0x84, 0xab, 0xae, 0x3f, 0x5b, 0x66, 0x41,
0x9b, 0x5b, 0xab, 0xb6, 0xaa, 0xa0, 0x58, 0x43, 0xce, 0xac, 0xba, 0x1e, 0x30, 0x53, 0x93, 0xc8,
0x06, 0xa5, 0x19, 0x53, 0xc1, 0x00, 0x39, 0x1d, 0x0b, 0xc3, 0x55, 0x4d, 0xa6, 0xfd, 0x3e, 0xea,
0x0f, 0xa1, 0x55, 0x55, 0xd1, 0xfd, 0x9e, 0x03, 0xab, 0xd4, 0x9a, 0xf2, 0x01, 0xf4, 0x09, 0xf2,
0xc5, 0x87, 0xd9, 0xea, 0x9b, 0x01, 0x92, 0x35, 0xa8, 0x99, 0xfa, 0x5b, 0x14, 0x7e, 0xf4, 0x33,
0x71, 0xb5, 0x70, 0x26, 0xfe, 0x7b, 0x07, 0x56, 0x84, 0x0a, 0x4d, 0xfd, 0x74, 0x9a, 0xc8, 0xe9,
0xff, 0x3f, 0x58, 0x14, 0xb6, 0x50, 0x0a, 0xa1, 0x1c, 0xe8, 0x9a, 0xd6, 0x17, 0x84, 0x0a, 0xe2,
0xfd, 0x2b, 0x9e, 0x4d, 0xcc, 0x3e, 0x0f, 0x2d, 0x33, 0x84, 0x4b, 0x63, 0x6e, 0x6e, 0x5d, 0x53,
0xb3, 0x2c, 0x70, 0xce, 0xfe, 0x15, 0xcf, 0xfa, 0x80, 0xbd, 0x4b, 0x0e, 0x4d, 0xd8, 0xa3, 0x66,
0x65, 0x10, 0xec, 0x5a, 0x89, 0xda, 0xd7, 0x9f, 0x1b, 0xe4, 0xf7, 0xeb, 0x30, 0x2f, 0x3c, 0x58,
0xf7, 0x21, 0x2c, 0x5a, 0x23, 0xb5, 0xce, 0xfa, 0x2d, 0x71, 0xd6, 0x2f, 0x84, 0x86, 0x2a, 0xc5,
0xd0, 0x90, 0xfb, 0x27, 0x73, 0xc0, 0x90, 0xdb, 0x72, 0xdb, 0x89, 0x2e, 0x74, 0x34, 0xb0, 0x0e,
0x44, 0x2d, 0xcf, 0x84, 0xd8, 0x1d, 0x60, 0x46, 0x51, 0x45, 0xcf, 0x84, 0xb5, 0x29, 0xa9, 0x41,
0xb5, 0x28, 0x8d, 0xb5, 0x34, 0xab, 0xf2, 0xe8, 0x27, 0xf6, 0xad, 0xb4, 0x0e, 0x0d, 0xca, 0x64,
0x9a, 0x9c, 0xa2, 0x8b, 0xaf, 0x8e, 0x4c, 0xaa, 0x9c, 0x67, 0x90, 0xf9, 0x4b, 0x19, 0x64, 0x21,
0xcf, 0x20, 0xa6, 0xd3, 0x5e, 0xb7, 0x9c, 0x76, 0x74, 0x16, 0xc7, 0xe8, 0x62, 0xa6, 0xa3, 0x7e,
0x6f, 0x8c, 0xbd, 0xcb, 0x13, 0x92, 0x05, 0xb2, 0x4d, 0x68, 0x4b, 0xf7, 0x22, 0x3b, 0x19, 0x00,
0xad, 0x71, 0x01, 0x47, 0x7d, 0x8d, 0x1f, 0x93, 0x06, 0xa0, 0x53, 0x52, 0xcd, 0xcb, 0x00, 0x3c,
0x4b, 0x25, 0xc8, 0x62, 0xbd, 0x69, 0x28, 0xb9, 0x85, 0x0f, 0xe8, 0x6c, 0x54, 0xf7, 0x8a, 0x15,
0xee, 0x0f, 0x1d, 0x68, 0xe3, 0x9e, 0x59, 0x7c, 0xfd, 0x0e, 0x90, 0x58, 0xbd, 0x20, 0x5b, 0x5b,
0xb4, 0x3f, 0x39, 0x57, 0xbf, 0x0d, 0x0d, 0x6a, 0x30, 0x9a, 0xf0, 0x50, 0x32, 0x75, 0xc7, 0x66,
0xea, 0x4c, 0xa3, 0xed, 0x5f, 0xf1, 0x32, 0x62, 0x83, 0xa5, 0xff, 0xce, 0x81, 0xa6, 0x1c, 0xe6,
0x8f, 0x1d, 0x39, 0xe8, 0x42, 0x1d, 0xb9, 0xdb, 0x38, 0x9e, 0xeb, 0x32, 0xda, 0xb3, 0xb1, 0x9f,
0x4e, 0x63, 0x34, 0xe0, 0x56, 0xd4, 0x20, 0x0f, 0xa3, 0x35, 0x26, 0xe5, 0x9d, 0xf4, 0xd2, 0x60,
0xd4, 0x53, 0xb5, 0xf2, 0xf6, 0xa5, 0xac, 0x0a, 0x75, 0x58, 0x92, 0xfa, 0x43, 0x2e, 0x0d, 0xad,
0x28, 0xb8, 0x1d, 0xd8, 0x90, 0x13, 0xca, 0xf9, 0xb6, 0xee, 0x5f, 0xb6, 0xe0, 0x6a, 0xa1, 0x4a,
0x5f, 0x5f, 0xca, 0xe3, 0xf0, 0x28, 0x18, 0x1f, 0x47, 0xfa, 0x60, 0xe0, 0x98, 0x27, 0x65, 0xab,
0x8a, 0x0d, 0x61, 0x5d, 0x79, 0x14, 0xb8, 0xa6, 0x99, 0xa5, 0xab, 0x90, 0x2b, 0xf4, 0xa6, 0xcd,
0x03, 0xf9, 0x0e, 0x15, 0x6e, 0x6a, 0x81, 0xf2, 0xf6, 0xd8, 0x29, 0x74, 0xb4, 0xeb, 0x22, 0xcd,
0x85, 0xe1, 0xde, 0x60, 0x5f, 0x6f, 0x5c, 0xd2, 0x97, 0xe5, 0x0a, 0x7b, 0x17, 0xb6, 0xc6, 0x66,
0x70, 0x43, 0xd5, 0x91, 0x3d, 0x28, 0xf6, 0x57, 0x7d, 0xa1, 0xb9, 0x91, 0x93, 0x6f, 0x77, 0x7a,
0x49, 0xc3, 0xec, 0xeb, 0xb0, 0x71, 0xee, 0x07, 0xa9, 0x1a, 0x96, 0xe1, 0x38, 0xd4, 0xa8, 0xcb,
0xad, 0x4b, 0xba, 0xfc, 0x40, 0x7c, 0x6c, 0x19, 0xc9, 0x0b, 0x5a, 0xec, 0xfe, 0x8d, 0x03, 0x4b,
0x76, 0x3b, 0xc8, 0xa6, 0x52, 0x79, 0x28, 0x25, 0xaa, 0xdc, 0xcf, 0x1c, 0x5c, 0x3c, 0x5b, 0x57,
0xca, 0xce, 0xd6, 0xe6, 0x89, 0x76, 0xee, 0xb2, 0xb0, 0x53, 0xf5, 0xc5, 0xc2, 0x4e, 0xb5, 0xb2,
0xb0, 0x53, 0xf7, 0x3f, 0x1c, 0x60, 0x45, 0x5e, 0x62, 0x0f, 0xc5, 0xe1, 0x3e, 0xe4, 0x23, 0xa9,
0x93, 0xfe, 0xef, 0x8b, 0xf1, 0xa3, 0x5a, 0x3b, 0xf5, 0x35, 0x0a, 0x86, 0xa9, 0x74, 0x4c, 0x77,
0x6b, 0xd1, 0x2b, 0xab, 0xca, 0x05, 0xc2, 0xaa, 0x97, 0x07, 0xc2, 0x6a, 0x97, 0x07, 0xc2, 0xe6,
0xf3, 0x81, 0xb0, 0xee, 0xaf, 0x39, 0xb0, 0x5a, 0xb2, 0xe9, 0x3f, 0xbd, 0x89, 0xe3, 0x36, 0x59,
0xba, 0xa0, 0x22, 0xb7, 0xc9, 0x04, 0xbb, 0xbf, 0x08, 0x8b, 0x16, 0xa3, 0xff, 0xf4, 0xfa, 0xcf,
0x7b, 0x8c, 0x82, 0xcf, 0x2c, 0xac, 0xfb, 0x6f, 0x15, 0x60, 0x45, 0x61, 0xfb, 0x5f, 0x1d, 0x43,
0x71, 0x9d, 0xe6, 0x4a, 0xd6, 0xe9, 0x7f, 0xd4, 0x0e, 0xbc, 0x01, 0x2b, 0x32, 0xd7, 0xc1, 0x08,
0xe9, 0x08, 0x8e, 0x29, 0x56, 0xa0, 0xcf, 0x6c, 0x47, 0x21, 0xeb, 0xd6, 0x1d, 0xb9, 0x61, 0x0c,
0x73, 0xc1, 0x48, 0x77, 0x03, 0xd6, 0x44, 0xee, 0xc4, 0x7d, 0xd1, 0x94, 0xb2, 0x2b, 0x7f, 0xe0,
0xc0, 0x7a, 0xae, 0x22, 0xbb, 0xd1, 0x15, 0xa6, 0xc3, 0xb6, 0x27, 0x36, 0x88, 0xe3, 0xd7, 0x6e,
0x46, 0x8e, 0xdb, 0x8a, 0x15, 0xb8, 0x3e, 0x86, 0x5b, 0x92, 0x5b, 0xf5, 0xb2, 0x2a, 0xf7, 0xaa,
0xc8, 0xf0, 0x08, 0xf9, 0x28, 0x37, 0xf0, 0x13, 0x91, 0x93, 0x61, 0x56, 0x64, 0x57, 0x41, 0xf6,
0x90, 0x55, 0x11, 0x3d, 0x4a, 0xcb, 0x4c, 0xd9, 0xe3, 0x2d, 0xad, 0x73, 0x7f, 0xe0, 0x00, 0xfb,
0xe2, 0x94, 0xc7, 0x33, 0xba, 0xb5, 0xd5, 0xb1, 0xa6, 0xab, 0xf9, 0x48, 0xca, 0xfc, 0x64, 0x7a,
0xfc, 0x05, 0x3e, 0x53, 0xf7, 0xff, 0x95, 0xec, 0xfe, 0xff, 0x65, 0x00, 0x3c, 0xca, 0xe9, 0xab,
0x60, 0xf2, 0xe4, 0xc2, 0xe9, 0x58, 0x34, 0x58, 0x7a, 0x45, 0x5f, 0xbd, 0xfc, 0x8a, 0xbe, 0x76,
0xd9, 0x15, 0xfd, 0xbb, 0xb0, 0x6a, 0x8d, 0x5b, 0x6f, 0xab, 0xba, 0x94, 0x76, 0x9e, 0x73, 0x29,
0xfd, 0x1b, 0x15, 0x98, 0xdb, 0x8f, 0x26, 0x66, 0x9c, 0xd5, 0xb1, 0xe3, 0xac, 0xd2, 0x96, 0xf4,
0xb4, 0xa9, 0x90, 0x2a, 0xc6, 0x02, 0xd9, 0x26, 0x2c, 0xf9, 0xe3, 0x14, 0x0f, 0xfe, 0x27, 0x51,
0x7c, 0xee, 0xc7, 0x03, 0xb1, 0xd7, 0xf7, 0x2b, 0x1d, 0xc7, 0xcb, 0xd5, 0xb0, 0x35, 0x98, 0xd3,
0x4a, 0x97, 0x08, 0xb0, 0x88, 0x8e, 0x1b, 0xdd, 0xd1, 0xcc, 0x64, 0xcc, 0x42, 0x96, 0x90, 0x95,
0xec, 0xef, 0x85, 0xdb, 0x2d, 0x44, 0xa7, 0xac, 0x0a, 0xed, 0x1a, 0x2e, 0x1f, 0x91, 0xc9, 0x60,
0x93, 0x2a, 0x9b, 0x81, 0xb1, 0xba, 0x7d, 0x63, 0xf5, 0x2f, 0x0e, 0xd4, 0x68, 0x6d, 0x50, 0x0d,
0x08, 0xde, 0xd7, 0xa1, 0x56, 0x5a, 0x93, 0x45, 0x2f, 0x0f, 0x33, 0xd7, 0xca, 0xa0, 0xa9, 0xe8,
0x09, 0x99, 0x59, 0x34, 0x37, 0xa1, 0x21, 0x4a, 0x3a, 0x5b, 0x84, 0x48, 0x32, 0x90, 0xdd, 0x80,
0xea, 0x69, 0x34, 0x51, 0x7e, 0x0b, 0xa8, 0x9b, 0x86, 0x68, 0xe2, 0x11, 0x9e, 0x8d, 0x07, 0xdb,
0x13, 0xd3, 0x12, 0xd6, 0x28, 0x0f, 0xa3, 0x3d, 0xd6, 0xcd, 0x9a, 0xcb, 0x94, 0x43, 0xdd, 0x4d,
0x58, 0x7e, 0x1c, 0x0d, 0xb8, 0x11, 0xef, 0xba, 0x90, 0xcf, 0xdd, 0x5f, 0x72, 0xa0, 0xae, 0x88,
0xd9, 0x6d, 0xa8, 0xa2, 0x93, 0x91, 0x3b, 0x42, 0xe8, 0x1b, 0x46, 0xa4, 0xf3, 0x88, 0x02, 0xb5,
0x32, 0xc5, 0x35, 0x32, 0x87, 0x53, 0x45, 0x35, 0x32, 0x7f, 0x4a, 0x0f, 0x37, 0xe7, 0x86, 0xe4,
0x50, 0xf7, 0xfb, 0x0e, 0x2c, 0x5a, 0x7d, 0xe0, 0x21, 0x74, 0xe4, 0x27, 0xa9, 0xbc, 0xb5, 0x91,
0xdb, 0x63, 0x42, 0xe6, 0x46, 0x57, 0xec, 0x08, 0xa8, 0x8e, 0xcd, 0xcd, 0x99, 0xb1, 0xb9, 0x7b,
0xd0, 0xc8, 0xf2, 0x9c, 0xaa, 0x96, 0xb6, 0xc5, 0x1e, 0xd5, 0xdd, 0x69, 0x46, 0x84, 0xed, 0xf4,
0xa3, 0x51, 0x14, 0xcb, 0xeb, 0x02, 0x51, 0x70, 0xdf, 0x85, 0xa6, 0x41, 0x8f, 0xc3, 0x08, 0x79,
0x7a, 0x1e, 0xc5, 0xcf, 0x54, 0x20, 0x56, 0x16, 0x75, 0x1a, 0x40, 0x25, 0x4b, 0x03, 0x70, 0xff,
0xda, 0x81, 0x45, 0xe4, 0xc1, 0x20, 0x1c, 0x1e, 0x46, 0xa3, 0xa0, 0x3f, 0xa3, 0xbd, 0x57, 0xec,
0x26, 0x75, 0x86, 0xe2, 0x45, 0x1b, 0x46, 0xae, 0x57, 0x67, 0x50, 0x29, 0xa2, 0xba, 0x8c, 0x32,
0x8c, 0x12, 0x70, 0xec, 0x27, 0x52, 0x2c, 0xa4, 0xf9, 0xb3, 0x40, 0x94, 0x34, 0x04, 0x62, 0x3f,
0xe5, 0xbd, 0x71, 0x30, 0x1a, 0x05, 0x82, 0x56, 0x38, 0x47, 0x65, 0x55, 0xd8, 0xe7, 0x20, 0x48,
0xfc, 0xe3, 0x2c, 0x04, 0xae, 0xcb, 0xee, 0x9f, 0x57, 0xa0, 0x29, 0x15, 0xf7, 0xde, 0x60, 0xc8,
0xe5, 0x7d, 0x0d, 0xb9, 0x9f, 0x5a, 0xc9, 0x18, 0x88, 0xaa, 0xb7, 0x1c, 0x56, 0x03, 0xc9, 0x6f,
0xf9, 0x5c, 0x71, 0xcb, 0xaf, 0x43, 0x03, 0x59, 0xef, 0x4d, 0xf2, 0x8c, 0xc5, 0x5d, 0x4f, 0x06,
0xa8, 0xda, 0x2d, 0xaa, 0xad, 0x65, 0xb5, 0x04, 0x3c, 0xf7, 0x76, 0xe7, 0x6d, 0x68, 0xc9, 0x66,
0x68, 0x4f, 0x48, 0xa7, 0x64, 0xcc, 0x6f, 0xed, 0x97, 0x67, 0x51, 0xaa, 0x2f, 0xb7, 0xd4, 0x97,
0xf5, 0xcb, 0xbe, 0x54, 0x94, 0xee, 0x43, 0x7d, 0x69, 0xf6, 0x30, 0xf6, 0x27, 0xa7, 0x4a, 0x4a,
0xef, 0xc1, 0x6a, 0x10, 0xf6, 0x47, 0xd3, 0x01, 0xef, 0x4d, 0x43, 0x3f, 0x0c, 0xa3, 0x69, 0xd8,
0xe7, 0x2a, 0x67, 0xa0, 0xac, 0xca, 0x1d, 0xe8, 0xa4, 0x23, 0x6a, 0x88, 0x6d, 0x42, 0x0d, 0x3b,
0x52, 0x56, 0xa1, 0x5c, 0x84, 0x05, 0x09, 0xbb, 0x0d, 0x35, 0x3e, 0x18, 0x72, 0x75, 0x5a, 0x64,
0xf6, 0xb9, 0x1d, 0x77, 0xd5, 0x13, 0x04, 0xa8, 0x50, 0x10, 0xcd, 0x29, 0x14, 0xdb, 0xa2, 0xcc,
0x63, 0xf1, 0xd1, 0xc0, 0x5d, 0x03, 0xf6, 0x58, 0xc8, 0x80, 0x19, 0x6f, 0xff, 0xd5, 0x39, 0x68,
0x1a, 0x30, 0xea, 0x86, 0x21, 0x0e, 0xb8, 0x37, 0x08, 0xfc, 0x31, 0x4f, 0x79, 0x2c, 0xf9, 0x3e,
0x87, 0x22, 0x9d, 0x7f, 0x36, 0xec, 0x45, 0xd3, 0xb4, 0x37, 0xe0, 0xc3, 0x98, 0x0b, 0x23, 0x8f,
0x46, 0xc7, 0x42, 0x91, 0x6e, 0xec, 0x7f, 0x68, 0xd2, 0x09, 0x0e, 0xca, 0xa1, 0x2a, 0x7a, 0x2e,
0xd6, 0xa8, 0x9a, 0x45, 0xcf, 0xc5, 0x8a, 0xe4, 0xb5, 0x5a, 0xad, 0x44, 0xab, 0xbd, 0x05, 0x1b,
0x42, 0x7f, 0x49, 0x49, 0xef, 0xe5, 0x18, 0xeb, 0x82, 0x5a, 0xb6, 0x09, 0x6d, 0x1c, 0xb3, 0x12,
0x89, 0x24, 0xf8, 0xa6, 0x88, 0x4c, 0x39, 0x5e, 0x01, 0x47, 0x5a, 0x0a, 0x11, 0x99, 0xb4, 0xe2,
0x36, 0xb1, 0x80, 0x13, 0xad, 0xff, 0xa1, 0x4d, 0xdb, 0x90, 0xb4, 0x39, 0xdc, 0x5d, 0x84, 0xe6,
0x51, 0x1a, 0x4d, 0xd4, 0xa6, 0x2c, 0x41, 0x4b, 0x14, 0x65, 0xee, 0xc6, 0x4b, 0x70, 0x8d, 0xb8,
0xe8, 0x69, 0x34, 0x89, 0x46, 0xd1, 0x70, 0x76, 0x34, 0x3d, 0x4e, 0xfa, 0x71, 0x30, 0xc1, 0x93,
0x95, 0xfb, 0xb7, 0x0e, 0xac, 0x5a, 0xb5, 0x32, 0xfc, 0xf4, 0x69, 0x21, 0x04, 0xfa, 0xd2, 0x5d,
0x30, 0xde, 0x8a, 0xa1, 0x5c, 0x05, 0xa1, 0x08, 0x22, 0xbe, 0x2f, 0xef, 0xe1, 0xb7, 0x61, 0x59,
0x8d, 0x4c, 0x7d, 0x28, 0xb8, 0xb0, 0x53, 0xe4, 0x42, 0xf9, 0xfd, 0x92, 0xfc, 0x40, 0x35, 0xf1,
0xff, 0xe5, 0xad, 0xec, 0x80, 0xe6, 0xa8, 0xe2, 0x10, 0xfa, 0x26, 0xcd, 0x3c, 0x8d, 0xa8, 0x11,
0xf4, 0x35, 0x98, 0xb8, 0xbf, 0xe5, 0x00, 0x64, 0xa3, 0xa3, 0xbb, 0x3c, 0x6d, 0x20, 0x44, 0xc2,
0xb8, 0x61, 0x0c, 0x5e, 0x85, 0x96, 0xbe, 0x03, 0xca, 0x6c, 0x4e, 0x53, 0x61, 0xe8, 0x30, 0xde,
0x82, 0xe5, 0xe1, 0x28, 0x3a, 0x26, 0x83, 0x4d, 0xc9, 0x40, 0x89, 0xcc, 0x60, 0x59, 0x12, 0xf0,
0x03, 0x89, 0x66, 0x06, 0xaa, 0x6a, 0x18, 0x28, 0xf7, 0x5b, 0x15, 0x7d, 0x07, 0x90, 0xcd, 0xf9,
0x42, 0x29, 0x63, 0x5b, 0x05, 0x75, 0x7a, 0x41, 0xc8, 0x9d, 0x22, 0x6e, 0x87, 0x97, 0x06, 0x04,
0xde, 0x85, 0xa5, 0x58, 0xe8, 0x2b, 0xa5, 0xcc, 0xaa, 0xcf, 0x51, 0x66, 0x8b, 0xb1, 0x65, 0xc5,
0x3e, 0x09, 0x6d, 0x7f, 0x70, 0xc6, 0xe3, 0x34, 0xa0, 0x23, 0x19, 0xb9, 0x10, 0x42, 0x05, 0x2f,
0x1b, 0x38, 0x59, 0xf6, 0x5b, 0xb0, 0x2c, 0xb3, 0x86, 0x34, 0xa5, 0xcc, 0x78, 0xcd, 0x60, 0x24,
0x74, 0xff, 0x48, 0x5d, 0x37, 0xd8, 0x7b, 0x78, 0xf1, 0x8a, 0x98, 0xb3, 0xab, 0xe4, 0x66, 0xf7,
0x09, 0x19, 0xfa, 0x1f, 0xa8, 0x73, 0xdf, 0x9c, 0x71, 0x83, 0x3f, 0x90, 0x57, 0x35, 0xf6, 0x92,
0x56, 0x5f, 0x64, 0x49, 0xdd, 0x1f, 0x3a, 0xb0, 0xb0, 0x1f, 0x4d, 0xf6, 0x65, 0x2e, 0x03, 0x09,
0x82, 0xce, 0xbb, 0x53, 0xc5, 0xe7, 0x64, 0x39, 0x94, 0x5a, 0xee, 0xc5, 0xbc, 0xe5, 0xfe, 0x19,
0x78, 0x89, 0xa2, 0x0e, 0x71, 0x34, 0x89, 0x62, 0x14, 0x46, 0x7f, 0x24, 0xcc, 0x74, 0x14, 0xa6,
0xa7, 0x4a, 0x8d, 0x3d, 0x8f, 0x84, 0x8e, 0x77, 0x78, 0x2c, 0x11, 0x4e, 0xb7, 0xf4, 0x34, 0x84,
0x76, 0x2b, 0x56, 0xb8, 0x9f, 0x85, 0x06, 0xb9, 0xca, 0x34, 0xad, 0x37, 0xa0, 0x71, 0x1a, 0x4d,
0x7a, 0xa7, 0x41, 0x98, 0x2a, 0xe1, 0x5e, 0xca, 0x7c, 0xd8, 0x7d, 0x5a, 0x10, 0x4d, 0xe0, 0xfe,
0x5e, 0x0d, 0x16, 0x1e, 0x85, 0x67, 0x51, 0xd0, 0xa7, 0x9b, 0x89, 0x31, 0x1f, 0x47, 0x2a, 0x0b,
0x11, 0x7f, 0xe3, 0x52, 0x50, 0xb6, 0xce, 0x24, 0x95, 0x57, 0x0b, 0xaa, 0x88, 0x0e, 0x42, 0x9c,
0x65, 0x13, 0x0b, 0xd1, 0x31, 0x10, 0x3c, 0x40, 0xc4, 0x66, 0x36, 0xb0, 0x2c, 0x65, 0x69, 0x9c,
0x35, 0x23, 0x8d, 0x93, 0xee, 0xb1, 0x44, 0xde, 0x85, 0xbc, 0x98, 0x57, 0x45, 0x3a, 0xf0, 0xc4,
0x5c, 0x44, 0x8b, 0xc8, 0xd5, 0x58, 0x90, 0x07, 0x1e, 0x13, 0x44, 0x77, 0x44, 0x7c, 0x20, 0x68,
0x84, 0xf2, 0x35, 0x21, 0x74, 0xdd, 0xf2, 0xb9, 0xdb, 0x0d, 0xc1, 0xf3, 0x39, 0x18, 0x35, 0xf4,
0x80, 0x6b, 0x45, 0x2a, 0xe6, 0x00, 0x22, 0x5b, 0x3a, 0x8f, 0x1b, 0xc7, 0x24, 0x91, 0x50, 0xa5,
0x8e, 0x49, 0xc8, 0x28, 0xfe, 0x68, 0x74, 0xec, 0xf7, 0x9f, 0x51, 0x6a, 0x3e, 0xdd, 0x11, 0x34,
0x3c, 0x1b, 0xa4, 0xcc, 0x89, 0x6c, 0x37, 0xe9, 0xfe, 0xb4, 0xea, 0x99, 0x10, 0xdb, 0x82, 0x26,
0x1d, 0x0d, 0xe5, 0x7e, 0x2e, 0xd1, 0x7e, 0xb6, 0xcd, 0xb3, 0x23, 0xed, 0xa8, 0x49, 0x64, 0xde,
0x96, 0x2c, 0xdb, 0xb7, 0x25, 0x42, 0x69, 0xca, 0x4b, 0xa6, 0x36, 0xf5, 0x96, 0x01, 0x68, 0x4d,
0xe5, 0x82, 0x09, 0x82, 0x15, 0x22, 0xb0, 0x30, 0x76, 0x03, 0xea, 0x78, 0x6c, 0x99, 0xf8, 0xc1,
0xa0, 0xc3, 0xf4, 0xe9, 0x49, 0x63, 0xd8, 0x86, 0xfa, 0x4d, 0x97, 0x41, 0xab, 0xb4, 0x2a, 0x16,
0x86, 0x6b, 0xa3, 0xcb, 0x24, 0x44, 0x6b, 0x62, 0x47, 0x2d, 0xd0, 0x4d, 0x81, 0x6d, 0x0f, 0x06,
0x92, 0x37, 0xf5, 0x31, 0x3a, 0xe3, 0x2a, 0xc7, 0xe2, 0xaa, 0x92, 0xdd, 0xad, 0x94, 0xef, 0xee,
0x73, 0xd7, 0xc0, 0xdd, 0x83, 0xe6, 0xa1, 0x91, 0x7a, 0x4e, 0x4c, 0xae, 0x92, 0xce, 0xa5, 0x60,
0x18, 0x88, 0x31, 0x9c, 0x8a, 0x39, 0x1c, 0xf7, 0x8f, 0x1d, 0x60, 0x07, 0x41, 0x92, 0xea, 0xe1,
0x8b, 0xbe, 0x5d, 0x68, 0xe9, 0x60, 0x47, 0x96, 0x4b, 0x66, 0x61, 0x48, 0x43, 0x43, 0xe9, 0x45,
0x27, 0x27, 0x09, 0x57, 0x99, 0x1f, 0x16, 0x86, 0x1c, 0x8a, 0x3e, 0x0e, 0xfa, 0x0b, 0x81, 0xe8,
0x21, 0x91, 0x19, 0x20, 0x05, 0x1c, 0xf5, 0x6c, 0xcc, 0xcf, 0x78, 0x9c, 0x68, 0xd1, 0xd2, 0x65,
0x9d, 0xf2, 0x96, 0x5f, 0xe5, 0x4d, 0xa8, 0xeb, 0x76, 0x6d, 0x15, 0xa2, 0x28, 0x75, 0x3d, 0xaa,
0x2a, 0xf2, 0xfa, 0xad, 0x41, 0x0b, 0xb5, 0x59, 0xac, 0x60, 0x77, 0x80, 0x9d, 0x04, 0x71, 0x9e,
0x7c, 0x8e, 0xc8, 0x4b, 0x6a, 0xdc, 0x0f, 0x60, 0x55, 0x76, 0x69, 0x3a, 0x37, 0xf6, 0x26, 0x3a,
0x97, 0x31, 0x72, 0xa5, 0xc8, 0xc8, 0xee, 0x7f, 0x3a, 0xb0, 0x20, 0x77, 0xba, 0xf0, 0x7c, 0x41,
0xec, 0xb3, 0x85, 0xb1, 0x8e, 0x95, 0x7d, 0x4e, 0x5c, 0x2f, 0x55, 0x57, 0x41, 0x41, 0xcd, 0x95,
0x29, 0x28, 0x06, 0xd5, 0x89, 0x9f, 0x9e, 0xd2, 0x59, 0xb6, 0xe1, 0xd1, 0x6f, 0xd6, 0x16, 0x91,
0x17, 0xa1, 0x08, 0x29, 0xea, 0x52, 0xf6, 0x50, 0x43, 0xd8, 0xdb, 0xe2, 0x43, 0x8d, 0xeb, 0xd0,
0xa0, 0x01, 0xf4, 0xb2, 0xc0, 0x4a, 0x06, 0x20, 0xe7, 0x8a, 0x02, 0x49, 0x98, 0x4c, 0x2d, 0xcd,
0x10, 0x77, 0x5d, 0xec, 0xbc, 0x5c, 0x02, 0x7d, 0xdf, 0x25, 0x53, 0x0c, 0x33, 0x38, 0xe3, 0x08,
0x39, 0x80, 0x3c, 0x47, 0x48, 0x52, 0x4f, 0xd7, 0xbb, 0x5d, 0xe8, 0xec, 0xf2, 0x11, 0x4f, 0xf9,
0xf6, 0x68, 0x94, 0x6f, 0xff, 0x25, 0xb8, 0x56, 0x52, 0x27, 0xfd, 0xd9, 0x2f, 0xc2, 0xfa, 0xb6,
0x48, 0xc7, 0xfa, 0x69, 0xe5, 0x2c, 0xb8, 0x1d, 0xd8, 0xc8, 0x37, 0x29, 0x3b, 0x7b, 0x00, 0x2b,
0xbb, 0xfc, 0x78, 0x3a, 0x3c, 0xe0, 0x67, 0x59, 0x47, 0x0c, 0xaa, 0xc9, 0x69, 0x74, 0x2e, 0x05,
0x93, 0x7e, 0xb3, 0x97, 0x01, 0x46, 0x48, 0xd3, 0x4b, 0x26, 0xbc, 0xaf, 0x52, 0xc8, 0x09, 0x39,
0x9a, 0xf0, 0xbe, 0xfb, 0x16, 0x30, 0xb3, 0x1d, 0xb9, 0x5e, 0x68, 0x8f, 0xa6, 0xc7, 0xbd, 0x64,
0x96, 0xa4, 0x7c, 0xac, 0x72, 0xe3, 0x4d, 0xc8, 0xbd, 0x05, 0xad, 0x43, 0x7f, 0xe6, 0xf1, 0x6f,
0xc8, 0x57, 0x2b, 0x57, 0x61, 0x61, 0xe2, 0xcf, 0x50, 0x4d, 0xe9, 0x88, 0x0f, 0x55, 0xbb, 0xff,
0x5e, 0x81, 0x79, 0x41, 0x89, 0xad, 0x0e, 0x78, 0x92, 0x06, 0xa1, 0xb8, 0xfd, 0x95, 0xad, 0x1a,
0x50, 0x81, 0x95, 0x2b, 0x25, 0xac, 0x2c, 0x4f, 0x4d, 0x2a, 0x1d, 0x57, 0xf2, 0xab, 0x85, 0x21,
0x73, 0x65, 0x79, 0x3d, 0x22, 0xe4, 0x90, 0x01, 0xb9, 0xe0, 0x60, 0x66, 0xf5, 0xc4, 0xf8, 0x94,
0x94, 0x4a, 0xce, 0x35, 0xa1, 0x52, 0xdb, 0xba, 0x20, 0x18, 0xbc, 0x60, 0x5b, 0x0b, 0x36, 0xb4,
0xfe, 0x02, 0x36, 0x54, 0x1c, 0xa5, 0x9e, 0x67, 0x43, 0xe1, 0x05, 0x6c, 0xa8, 0xcb, 0xa0, 0xfd,
0x80, 0x73, 0x8f, 0xa3, 0x77, 0xa6, 0x78, 0xf7, 0x3b, 0x0e, 0xb4, 0x25, 0x17, 0xe9, 0x3a, 0xf6,
0xaa, 0xe5, 0x85, 0x96, 0x26, 0xcd, 0xbe, 0x06, 0x8b, 0xe4, 0x1b, 0xea, 0x28, 0xa8, 0x0c, 0xd9,
0x5a, 0x20, 0xce, 0x43, 0x5d, 0x55, 0x8d, 0x83, 0x91, 0xdc, 0x14, 0x13, 0x52, 0x81, 0xd4, 0xd8,
0x97, 0x49, 0x34, 0x8e, 0xa7, 0xcb, 0xee, 0x5f, 0x38, 0xb0, 0x62, 0x0c, 0x58, 0x72, 0xe1, 0xbb,
0xa0, 0xa4, 0x41, 0x84, 0x44, 0x85, 0xe4, 0x5e, 0xb5, 0xc5, 0x26, 0xfb, 0xcc, 0x22, 0xa6, 0xcd,
0xf4, 0x67, 0x34, 0xc0, 0x64, 0x3a, 0x96, 0x4a, 0xd4, 0x84, 0x90, 0x91, 0xce, 0x39, 0x7f, 0xa6,
0x49, 0x84, 0x1a, 0xb7, 0x30, 0x4a, 0xd0, 0x40, 0x9f, 0x56, 0x13, 0x09, 0x7b, 0x66, 0x83, 0xee,
0x3f, 0x38, 0xb0, 0x2a, 0x0e, 0x27, 0xf2, 0xe8, 0xa7, 0x5f, 0x34, 0xcc, 0x8b, 0xd3, 0x98, 0x90,
0xc8, 0xfd, 0x2b, 0x9e, 0x2c, 0xb3, 0xcf, 0xbc, 0xe0, 0x81, 0x4a, 0x27, 0xe6, 0x5c, 0xb0, 0x17,
0x73, 0x65, 0x7b, 0xf1, 0x9c, 0x95, 0x2e, 0x0b, 0x01, 0xd6, 0x4a, 0x43, 0x80, 0xf7, 0x17, 0xa0,
0x96, 0xf4, 0xa3, 0x09, 0x77, 0x37, 0x60, 0xcd, 0x9e, 0x9c, 0x54, 0x41, 0xdf, 0x75, 0xa0, 0xf3,
0x40, 0x84, 0xca, 0x83, 0x70, 0xb8, 0x1f, 0x24, 0x69, 0x14, 0xeb, 0x67, 0x5a, 0x37, 0x00, 0x92,
0xd4, 0x8f, 0x53, 0x91, 0x6e, 0x29, 0x03, 0x74, 0x19, 0x82, 0x63, 0xe4, 0xe1, 0x40, 0xd4, 0x8a,
0xbd, 0xd1, 0xe5, 0x82, 0x0f, 0x21, 0x8f, 0x4f, 0x96, 0x25, 0x7e, 0x5d, 0x64, 0xba, 0xa1, 0xaf,
0xc0, 0xcf, 0x48, 0xaf, 0x8b, 0x73, 0x49, 0x0e, 0x75, 0xff, 0xd4, 0x81, 0xe5, 0x6c, 0x90, 0x7b,
0x08, 0xda, 0xda, 0x41, 0x9a, 0xdf, 0x4c, 0x3b, 0xa8, 0xd0, 0x61, 0x80, 0xf6, 0x58, 0x8e, 0xcd,
0x40, 0x48, 0x62, 0x65, 0x29, 0x9a, 0x2a, 0x07, 0xc7, 0x84, 0x44, 0xd6, 0x08, 0x7a, 0x02, 0xd2,
0xab, 0x91, 0x25, 0xca, 0x96, 0x1d, 0xa7, 0xf4, 0xd5, 0xbc, 0x38, 0x98, 0xc9, 0xa2, 0x32, 0xa5,
0x0b, 0x84, 0xe2, 0x4f, 0xf7, 0xdb, 0x0e, 0x5c, 0x2b, 0x59, 0x5c, 0x29, 0x19, 0xbb, 0xb0, 0x72,
0xa2, 0x2b, 0xd5, 0x02, 0x08, 0xf1, 0xd8, 0x50, 0x77, 0x3b, 0xf6, 0xa4, 0xbd, 0xe2, 0x07, 0xda,
0xf7, 0x11, 0x4b, 0x6a, 0x25, 0x6f, 0x15, 0x2b, 0xb6, 0x7e, 0x7b, 0x0e, 0x96, 0xc4, 0x9d, 0x9f,
0x78, 0x54, 0xcd, 0x63, 0xf6, 0x1e, 0x2c, 0xc8, 0x47, 0xf1, 0x6c, 0x5d, 0x76, 0x6b, 0x3f, 0xc3,
0xef, 0x6e, 0xe4, 0x61, 0xc9, 0x3b, 0xab, 0xbf, 0xf2, 0xc3, 0x7f, 0xfe, 0x9d, 0xca, 0x22, 0x6b,
0xde, 0x3d, 0x7b, 0xf3, 0xee, 0x90, 0x87, 0x09, 0xb6, 0xf1, 0xf3, 0x00, 0xd9, 0x73, 0x71, 0xd6,
0xd1, 0x3e, 0x5b, 0xee, 0x1d, 0x7c, 0xf7, 0x5a, 0x49, 0x8d, 0x6c, 0xf7, 0x1a, 0xb5, 0xbb, 0xea,
0x2e, 0x61, 0xbb, 0x41, 0x18, 0xa4, 0xe2, 0xed, 0xf8, 0x3b, 0xce, 0x26, 0x1b, 0x40, 0xcb, 0x7c,
0x0d, 0xce, 0x54, 0xe8, 0xa6, 0xe4, 0x2d, 0x7a, 0xf7, 0xa5, 0xd2, 0x3a, 0x15, 0xb7, 0xa2, 0x3e,
0xd6, 0xdd, 0x36, 0xf6, 0x31, 0x25, 0x8a, 0xac, 0x97, 0x11, 0x2c, 0xd9, 0x8f, 0xbe, 0xd9, 0x75,
0x43, 0xac, 0x0b, 0x4f, 0xce, 0xbb, 0x2f, 0x5f, 0x50, 0x2b, 0xfb, 0x7a, 0x99, 0xfa, 0xba, 0xea,
0x32, 0xec, 0xab, 0x4f, 0x34, 0xea, 0xc9, 0xf9, 0x3b, 0xce, 0xe6, 0xd6, 0xef, 0xbe, 0x02, 0x0d,
0x1d, 0x6c, 0x65, 0x5f, 0x87, 0x45, 0xeb, 0x52, 0x96, 0xa9, 0x69, 0x94, 0xdd, 0xe1, 0x76, 0xaf,
0x97, 0x57, 0xca, 0x8e, 0x6f, 0x50, 0xc7, 0x1d, 0xb6, 0x81, 0x1d, 0xcb, 0x5b, 0xcd, 0xbb, 0x74,
0x15, 0x2d, 0x72, 0x71, 0x9f, 0x89, 0x79, 0x66, 0x17, 0xa9, 0xd6, 0x3c, 0x0b, 0x17, 0xaf, 0xd6,
0x3c, 0x8b, 0xb7, 0xaf, 0xee, 0x75, 0xea, 0x6e, 0x83, 0xad, 0x99, 0xdd, 0xe9, 0x20, 0x28, 0xa7,
0xec, 0x69, 0xf3, 0x4d, 0x38, 0x7b, 0x59, 0x33, 0x56, 0xd9, 0x5b, 0x71, 0xcd, 0x22, 0xc5, 0x07,
0xe3, 0x6e, 0x87, 0xba, 0x62, 0x8c, 0xb6, 0xcf, 0x7c, 0x12, 0xce, 0xbe, 0x0a, 0x0d, 0xfd, 0xb8,
0x91, 0x5d, 0x35, 0x5e, 0x94, 0x9a, 0x2f, 0x2e, 0xbb, 0x9d, 0x62, 0x45, 0x19, 0x63, 0x98, 0x2d,
0x23, 0x63, 0x1c, 0xc0, 0xba, 0x3c, 0x03, 0x1c, 0xf3, 0x1f, 0x65, 0x26, 0x25, 0x2f, 0xd9, 0xef,
0x39, 0xec, 0x5d, 0xa8, 0xab, 0x37, 0xa3, 0x6c, 0xa3, 0xfc, 0xed, 0x6b, 0xf7, 0x6a, 0x01, 0x97,
0xda, 0xe3, 0xcb, 0x00, 0xd9, 0x5b, 0x48, 0x2d, 0x67, 0x85, 0x57, 0x98, 0x7a, 0x11, 0x8b, 0x0f,
0x27, 0xdd, 0x0d, 0x9a, 0x6a, 0x9b, 0x91, 0x9c, 0x85, 0xfc, 0x5c, 0xa5, 0xfd, 0x7f, 0x0d, 0x9a,
0xc6, 0x73, 0x48, 0xa6, 0x5a, 0x28, 0x3e, 0xa5, 0xec, 0x76, 0xcb, 0xaa, 0x64, 0xeb, 0x5d, 0x6a,
0x7d, 0xcd, 0x5d, 0xc6, 0xd6, 0x93, 0x60, 0x18, 0x8e, 0x05, 0x01, 0xae, 0xe3, 0x29, 0x2c, 0x5a,
0x6f, 0x1e, 0x35, 0x93, 0x97, 0xbd, 0xa8, 0xd4, 0x4c, 0x5e, 0xfa, 0x4c, 0x52, 0x71, 0x9d, 0xbb,
0x82, 0xfd, 0x9c, 0x11, 0x89, 0xd1, 0xd3, 0x57, 0xa0, 0x69, 0xbc, 0x5f, 0x64, 0x46, 0x9a, 0x62,
0xee, 0xe5, 0xa2, 0x9e, 0x4b, 0xd9, 0x73, 0xc7, 0x35, 0xea, 0x63, 0xc9, 0x6d, 0x60, 0x1f, 0x94,
0x35, 0x8f, 0x6d, 0x7f, 0x1d, 0x96, 0xec, 0x17, 0x8d, 0x5a, 0x7c, 0x4a, 0xdf, 0x46, 0x6a, 0xf1,
0xb9, 0xe0, 0x19, 0xa4, 0xe4, 0xbc, 0xcd, 0x55, 0xdd, 0xc9, 0xdd, 0x8f, 0xe4, 0x0d, 0xe5, 0xc7,
0xec, 0x8b, 0xa8, 0x23, 0xe4, 0x33, 0x06, 0x96, 0xbd, 0xe3, 0xb4, 0x1f, 0x3b, 0x68, 0xb6, 0x2e,
0xbc, 0x78, 0x70, 0x57, 0xa8, 0xf1, 0x26, 0xcb, 0x66, 0x20, 0x14, 0x3f, 0x3d, 0x67, 0x30, 0x14,
0xbf, 0xf9, 0xe2, 0xc1, 0x50, 0xfc, 0xd6, 0xab, 0x87, 0xbc, 0xe2, 0x4f, 0x03, 0x6c, 0x23, 0x84,
0xe5, 0x5c, 0x9e, 0x8e, 0x96, 0x8a, 0xf2, 0xc4, 0xc6, 0xee, 0x8d, 0xe7, 0xa7, 0xf7, 0xd8, 0xfa,
0x44, 0xe9, 0x91, 0xbb, 0x2a, 0x0f, 0xf5, 0x17, 0xa0, 0x65, 0xbe, 0x44, 0xd3, 0xa6, 0xa0, 0xe4,
0xfd, 0x9c, 0x36, 0x05, 0x65, 0x4f, 0xd7, 0xd4, 0xe6, 0xb2, 0x96, 0xd9, 0x0d, 0x6e, 0xae, 0xfd,
0x14, 0x27, 0xd3, 0x8d, 0x65, 0x2f, 0x90, 0x32, 0xdd, 0x58, 0xfa, 0x7e, 0x47, 0x6d, 0x2e, 0x5b,
0xb5, 0xe6, 0x22, 0x82, 0xc9, 0xec, 0x2b, 0xb0, 0x6c, 0x24, 0xc1, 0x1d, 0xcd, 0xc2, 0xbe, 0x66,
0xd4, 0x62, 0xba, 0x75, 0xb7, 0xcc, 0xc5, 0x74, 0xaf, 0x52, 0xfb, 0x2b, 0xae, 0x35, 0x09, 0x64,
0xd2, 0x1d, 0x68, 0x9a, 0x09, 0x76, 0xcf, 0x69, 0xf7, 0xaa, 0x51, 0x65, 0x66, 0x0b, 0xdf, 0x73,
0xd8, 0xef, 0x3b, 0xd0, 0xb2, 0xd2, 0xd5, 0xac, 0x2b, 0x93, 0x5c, 0x3b, 0x1d, 0xb3, 0xce, 0x6c,
0xc8, 0xf5, 0x68, 0x90, 0x07, 0x9b, 0x3f, 0x6b, 0x2d, 0xc2, 0x47, 0xd6, 0x51, 0xe5, 0x4e, 0xfe,
0x4f, 0x0b, 0x3e, 0xce, 0x13, 0x98, 0x29, 0xe9, 0x1f, 0xdf, 0x73, 0xd8, 0xf7, 0x1d, 0x58, 0xb2,
0x0f, 0xd8, 0x7a, 0xab, 0x4a, 0x8f, 0xf2, 0x7a, 0xab, 0x2e, 0x38, 0x95, 0x7f, 0x85, 0x46, 0xf9,
0x74, 0xd3, 0xb3, 0x46, 0x29, 0x1f, 0x69, 0xfd, 0x64, 0xa3, 0x65, 0xef, 0x88, 0xbf, 0x19, 0x51,
0x51, 0x1f, 0x66, 0x68, 0xf7, 0xfc, 0xf6, 0x9a, 0xff, 0xb1, 0x71, 0xdb, 0xb9, 0xe7, 0xb0, 0xaf,
0x89, 0xff, 0x51, 0x90, 0xdf, 0x12, 0x97, 0xbc, 0xe8, 0xf7, 0xee, 0x6b, 0x34, 0xa7, 0x1b, 0xee,
0x35, 0x6b, 0x4e, 0x79, 0xf3, 0xb6, 0x2d, 0x46, 0x27, 0xff, 0x1e, 0x23, 0x53, 0xfc, 0x85, 0xbf,
0xcc, 0xb8, 0x78, 0x90, 0x63, 0x31, 0x48, 0x49, 0x6e, 0xb1, 0xf2, 0x0b, 0x36, 0xe3, 0x6e, 0xd2,
0x58, 0x5f, 0x73, 0x5f, 0xb9, 0x70, 0xac, 0x77, 0xe9, 0x98, 0x8c, 0x23, 0x3e, 0x04, 0xc8, 0x22,
0xb4, 0x2c, 0x17, 0x21, 0xd4, 0xb6, 0xaf, 0x18, 0xc4, 0xb5, 0xe5, 0x45, 0x05, 0x12, 0xb1, 0xc5,
0xaf, 0x0a, 0xb5, 0xf2, 0x48, 0xc5, 0x16, 0xaf, 0x19, 0xaa, 0xc3, 0x0e, 0xa5, 0x76, 0xbb, 0x65,
0x55, 0x65, 0x4a, 0x45, 0x07, 0x2a, 0xdf, 0x87, 0xc5, 0x83, 0x28, 0x7a, 0x36, 0x9d, 0xe8, 0xfb,
0x0e, 0x3b, 0x82, 0xb5, 0xef, 0x27, 0xa7, 0xdd, 0xdc, 0x2c, 0xdc, 0x9b, 0xd4, 0x54, 0x97, 0x75,
0x8c, 0xa6, 0xee, 0x7e, 0x94, 0x45, 0x80, 0x3f, 0x66, 0x3e, 0xac, 0x68, 0xb7, 0x44, 0x0f, 0xbc,
0x6b, 0x37, 0x63, 0xc6, 0x2e, 0x0b, 0x5d, 0x58, 0x8e, 0xa2, 0x1a, 0xed, 0xdd, 0x44, 0xb5, 0x79,
0xcf, 0x61, 0x87, 0xd0, 0xda, 0xe5, 0xfd, 0x68, 0xc0, 0x65, 0x18, 0x68, 0x35, 0x1b, 0xb8, 0x8e,
0x1f, 0x75, 0x17, 0x2d, 0xd0, 0xd6, 0xdf, 0x13, 0x7f, 0x16, 0xf3, 0x6f, 0xdc, 0xfd, 0x48, 0x06,
0x98, 0x3e, 0x56, 0xfa, 0x5b, 0x45, 0xe0, 0x2c, 0xfd, 0x9d, 0x0b, 0xd9, 0x59, 0xfa, 0xbb, 0x10,
0xb2, 0xb3, 0x96, 0x5a, 0x45, 0x00, 0xd9, 0x08, 0x56, 0x0a, 0x51, 0x3e, 0xf6, 0x8a, 0xb2, 0xc0,
0x17, 0xc4, 0x06, 0xbb, 0x37, 0x2f, 0x26, 0xb0, 0x7b, 0xdb, 0xb4, 0x7b, 0x3b, 0x82, 0xc5, 0x5d,
0x2e, 0x16, 0x4b, 0x24, 0x55, 0xe4, 0x5e, 0x67, 0x9a, 0x29, 0x1b, 0x79, 0x05, 0x4e, 0x75, 0xb6,
0x81, 0xa6, 0x8c, 0x06, 0xf6, 0x55, 0x68, 0x3e, 0xe4, 0xa9, 0xca, 0xa2, 0xd0, 0x2e, 0x62, 0x2e,
0xad, 0xa2, 0x5b, 0x92, 0x84, 0x61, 0xf3, 0x0c, 0xb5, 0x76, 0x97, 0x0f, 0x86, 0x5c, 0x28, 0xa7,
0x5e, 0x30, 0xf8, 0x98, 0xfd, 0x1c, 0x35, 0xae, 0xd3, 0xb8, 0x36, 0x8c, 0xcb, 0x77, 0xb3, 0xf1,
0xe5, 0x1c, 0x5e, 0xd6, 0x72, 0x18, 0x0d, 0xb8, 0xe1, 0xaa, 0x84, 0xd0, 0x34, 0xb2, 0x0f, 0xb5,
0x00, 0x15, 0x33, 0x29, 0xb5, 0x00, 0x95, 0x24, 0x2b, 0xba, 0xb7, 0xa9, 0x1f, 0x97, 0xdd, 0xcc,
0xfa, 0x11, 0x09, 0x8a, 0x59, 0x4f, 0x77, 0x3f, 0xf2, 0xc7, 0xe9, 0xc7, 0xec, 0x03, 0x7a, 0xa9,
0x69, 0x66, 0x8a, 0x64, 0x3e, 0x6f, 0x3e, 0xa9, 0x44, 0x2f, 0x96, 0x51, 0x65, 0xfb, 0xc1, 0xa2,
0x2b, 0xf2, 0x68, 0x3e, 0x03, 0x70, 0x94, 0x46, 0x93, 0x5d, 0x9f, 0x8f, 0xa3, 0x30, 0xd3, 0xb5,
0x59, 0x36, 0x44, 0xa6, 0xbf, 0x8c, 0x94, 0x08, 0xf6, 0x81, 0x71, 0x48, 0xb0, 0x12, 0x6d, 0x14,
0x73, 0x5d, 0x98, 0x30, 0xa1, 0x17, 0xa4, 0x24, 0x69, 0xe2, 0x9e, 0xc3, 0xb6, 0x01, 0xb2, 0x30,
0xaf, 0x76, 0xf9, 0x0b, 0x11, 0x64, 0xad, 0xf6, 0x4a, 0x62, 0xc2, 0x87, 0xd0, 0xc8, 0xe2, 0x86,
0x57, 0xb3, 0x0c, 0x52, 0x2b, 0xca, 0xa8, 0x2d, 0x78, 0x21, 0x9a, 0xe7, 0xb6, 0x69, 0xa9, 0x80,
0xd5, 0x71, 0xa9, 0x28, 0x44, 0x17, 0xc0, 0xaa, 0x18, 0xa0, 0x76, 0x47, 0xe8, 0x7e, 0x5f, 0xcd,
0xa4, 0x24, 0xa2, 0xa6, 0xa5, 0xb9, 0x34, 0x20, 0x65, 0x1d, 0xfe, 0x91, 0x5b, 0x45, 0x6e, 0x01,
0xaa, 0xe6, 0x31, 0xac, 0x14, 0xa2, 0x29, 0x5a, 0xa4, 0x2f, 0x0a, 0x62, 0x69, 0x91, 0xbe, 0x30,
0x10, 0xe3, 0xae, 0x53, 0x97, 0xcb, 0x2e, 0xd0, 0x49, 0xe5, 0x3c, 0x48, 0xfb, 0xa7, 0xef, 0x38,
0x9b, 0xc7, 0xf3, 0xf4, 0xb7, 0x84, 0x9f, 0xfa, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0xa9,
0x08, 0x13, 0xc8, 0x50, 0x00, 0x00,
// 6620 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7c, 0x4b, 0x6c, 0x1c, 0xd9,
0x75, 0xb6, 0xaa, 0xd9, 0x24, 0xbb, 0x4f, 0x37, 0xc9, 0xe6, 0xe5, 0xab, 0xd5, 0xa3, 0xd1, 0x68,
0xca, 0x83, 0x91, 0xcc, 0x7f, 0x7e, 0x49, 0x23, 0xdb, 0x83, 0xf1, 0xcc, 0xff, 0xdb, 0x3f, 0x45,
0x52, 0xa2, 0x7e, 0x73, 0x24, 0xba, 0x28, 0x59, 0xb1, 0x9d, 0xa0, 0x5d, 0xec, 0xbe, 0x6c, 0x96,
0xd5, 0x5d, 0xd5, 0xae, 0xaa, 0x26, 0xd5, 0x9e, 0x08, 0xc8, 0x0b, 0x09, 0x10, 0xc4, 0x30, 0x82,
0x2c, 0x02, 0x07, 0x08, 0x02, 0x38, 0x59, 0xd8, 0xcb, 0x2c, 0x62, 0x04, 0x48, 0xb2, 0xcb, 0x26,
0x01, 0x82, 0x2c, 0xbc, 0x0a, 0x02, 0x64, 0x93, 0x6c, 0x92, 0x20, 0x59, 0x04, 0xc8, 0x32, 0x41,
0x70, 0xce, 0x7d, 0xd4, 0xbd, 0x55, 0x45, 0x51, 0x7e, 0x24, 0xbb, 0xbe, 0xdf, 0x3d, 0x75, 0x9f,
0xe7, 0x75, 0xcf, 0x3d, 0xb7, 0xa1, 0x1e, 0x8f, 0x7b, 0x37, 0xc7, 0x71, 0x94, 0x46, 0x6c, 0x76,
0x18, 0xc6, 0xe3, 0x5e, 0xe7, 0xca, 0x20, 0x8a, 0x06, 0x43, 0x7e, 0xcb, 0x1f, 0x07, 0xb7, 0xfc,
0x30, 0x8c, 0x52, 0x3f, 0x0d, 0xa2, 0x30, 0x11, 0x44, 0xee, 0xd7, 0x60, 0xf1, 0x3e, 0x0f, 0x0f,
0x39, 0xef, 0x7b, 0xfc, 0x1b, 0x13, 0x9e, 0xa4, 0xec, 0x7f, 0xc1, 0xb2, 0xcf, 0xbf, 0xc9, 0x79,
0xbf, 0x3b, 0xf6, 0x93, 0x64, 0x7c, 0x12, 0xfb, 0x09, 0x6f, 0x3b, 0xd7, 0x9c, 0x1b, 0x4d, 0xaf,
0x25, 0x2a, 0x0e, 0x34, 0xce, 0xde, 0x84, 0x66, 0x82, 0xa4, 0x3c, 0x4c, 0xe3, 0x68, 0x3c, 0x6d,
0x57, 0x88, 0xae, 0x81, 0xd8, 0xae, 0x80, 0xdc, 0x21, 0x2c, 0xe9, 0x1e, 0x92, 0x71, 0x14, 0x26,
0x9c, 0xdd, 0x86, 0xd5, 0x5e, 0x30, 0x3e, 0xe1, 0x71, 0x97, 0x3e, 0x1e, 0x85, 0x7c, 0x14, 0x85,
0x41, 0xaf, 0xed, 0x5c, 0x9b, 0xb9, 0x51, 0xf7, 0x98, 0xa8, 0xc3, 0x2f, 0x3e, 0x92, 0x35, 0xec,
0x3a, 0x2c, 0xf1, 0x50, 0xe0, 0xbc, 0x4f, 0x5f, 0xc9, 0xae, 0x16, 0x33, 0x18, 0x3f, 0x70, 0xff,
0xdc, 0x81, 0xe5, 0x07, 0x61, 0x90, 0x3e, 0xf5, 0x87, 0x43, 0x9e, 0xaa, 0x39, 0x5d, 0x87, 0xa5,
0x33, 0x02, 0x68, 0x4e, 0x67, 0x51, 0xdc, 0x97, 0x33, 0x5a, 0x14, 0xf0, 0x81, 0x44, 0xcf, 0x1d,
0x59, 0xe5, 0xdc, 0x91, 0x95, 0x2e, 0xd7, 0xcc, 0x39, 0xcb, 0x75, 0x1d, 0x96, 0x62, 0xde, 0x8b,
0x4e, 0x79, 0x3c, 0xed, 0x9e, 0x05, 0x61, 0x3f, 0x3a, 0x6b, 0x57, 0xaf, 0x39, 0x37, 0x66, 0xbd,
0x45, 0x05, 0x3f, 0x25, 0xd4, 0x5d, 0x05, 0x66, 0xce, 0x42, 0xac, 0x9b, 0x3b, 0x80, 0x95, 0x27,
0xe1, 0x30, 0xea, 0x3d, 0xfb, 0x31, 0x67, 0x57, 0xd2, 0x7d, 0xa5, 0xb4, 0xfb, 0x75, 0x58, 0xb5,
0x3b, 0x92, 0x03, 0xe0, 0xb0, 0xb6, 0x7d, 0xe2, 0x87, 0x03, 0xae, 0x9a, 0x54, 0x43, 0xf8, 0x24,
0xb4, 0x7a, 0x93, 0x38, 0xe6, 0x61, 0x61, 0x0c, 0x4b, 0x12, 0xd7, 0x83, 0x78, 0x13, 0x9a, 0x21,
0x3f, 0xcb, 0xc8, 0x24, 0xcb, 0x84, 0xfc, 0x4c, 0x91, 0xb8, 0x6d, 0x58, 0xcf, 0x77, 0x23, 0x07,
0xf0, 0x2f, 0x0e, 0x54, 0x9f, 0xa4, 0xcf, 0x23, 0x76, 0x13, 0xaa, 0xe9, 0x74, 0x2c, 0x18, 0x73,
0xf1, 0x0e, 0xbb, 0x49, 0xbc, 0x7e, 0x73, 0xab, 0xdf, 0x8f, 0x79, 0x92, 0x3c, 0x9e, 0x8e, 0xb9,
0xd7, 0xf4, 0x45, 0xa1, 0x8b, 0x74, 0xac, 0x0d, 0xf3, 0xb2, 0x4c, 0x1d, 0xd6, 0x3d, 0x55, 0x64,
0x57, 0x01, 0xfc, 0x51, 0x34, 0x09, 0xd3, 0x6e, 0xe2, 0xa7, 0xb4, 0x73, 0x33, 0x9e, 0x81, 0xb0,
0xb7, 0x60, 0x21, 0xe9, 0xc5, 0xc1, 0x38, 0xed, 0x8e, 0x27, 0x47, 0xcf, 0xf8, 0x94, 0x76, 0xac,
0xee, 0xd9, 0x20, 0xbb, 0x05, 0xb5, 0x68, 0x92, 0x8e, 0xa3, 0x20, 0x4c, 0xdb, 0xb3, 0xd7, 0x9c,
0x1b, 0x8d, 0x3b, 0x2b, 0x72, 0x4c, 0x38, 0x93, 0x90, 0x0f, 0x0f, 0xb0, 0xca, 0xd3, 0x44, 0xd8,
0x6c, 0x2f, 0x0a, 0x8f, 0x83, 0x78, 0x24, 0xe4, 0xb1, 0x3d, 0x47, 0x3d, 0xdb, 0xa0, 0xfb, 0x9d,
0x0a, 0x34, 0x1e, 0xc7, 0x7e, 0x98, 0xf8, 0x3d, 0x04, 0x70, 0x1a, 0xe9, 0xf3, 0xee, 0x89, 0x9f,
0x9c, 0xd0, 0xcc, 0xeb, 0x9e, 0x2a, 0xb2, 0x75, 0x98, 0x13, 0x83, 0xa6, 0xf9, 0xcd, 0x78, 0xb2,
0xc4, 0xde, 0x81, 0xe5, 0x70, 0x32, 0xea, 0xda, 0x7d, 0xcd, 0xd0, 0xae, 0x17, 0x2b, 0x70, 0x31,
0x8e, 0x70, 0xdf, 0x45, 0x17, 0x62, 0xa6, 0x06, 0xc2, 0x5c, 0x68, 0xca, 0x12, 0x0f, 0x06, 0x27,
0x62, 0xaa, 0xb3, 0x9e, 0x85, 0x61, 0x1b, 0x69, 0x30, 0xe2, 0xdd, 0x24, 0xf5, 0x47, 0x63, 0x39,
0x2d, 0x03, 0xa1, 0xfa, 0x28, 0xf5, 0x87, 0xdd, 0x63, 0xce, 0x93, 0xf6, 0xbc, 0xac, 0xd7, 0x08,
0x7b, 0x1b, 0x16, 0xfb, 0x3c, 0x49, 0xbb, 0x72, 0x83, 0x78, 0xd2, 0xae, 0x91, 0xf4, 0xe5, 0x50,
0xe4, 0x92, 0xfb, 0x3c, 0x35, 0x56, 0x27, 0x91, 0xdc, 0xe8, 0xee, 0x03, 0x33, 0xe0, 0x1d, 0x9e,
0xfa, 0xc1, 0x30, 0x61, 0xef, 0x41, 0x33, 0x35, 0x88, 0x49, 0xdb, 0x34, 0x34, 0xeb, 0x18, 0x1f,
0x78, 0x16, 0x9d, 0x7b, 0x1f, 0x6a, 0xf7, 0x38, 0xdf, 0x0f, 0x46, 0x41, 0xca, 0xd6, 0x61, 0xf6,
0x38, 0x78, 0xce, 0x05, 0x73, 0xcf, 0xec, 0x5d, 0xf2, 0x44, 0x91, 0x75, 0x60, 0x7e, 0xcc, 0xe3,
0x1e, 0x57, 0xcb, 0xbf, 0x77, 0xc9, 0x53, 0xc0, 0xdd, 0x79, 0x98, 0x1d, 0xe2, 0xc7, 0xee, 0xf7,
0x2a, 0xd0, 0x38, 0xe4, 0xa1, 0x16, 0x1a, 0x06, 0x55, 0x9c, 0x92, 0x14, 0x14, 0xfa, 0xcd, 0xde,
0x80, 0x06, 0x4d, 0x33, 0x49, 0xe3, 0x20, 0x1c, 0x48, 0x5e, 0x05, 0x84, 0x0e, 0x09, 0x61, 0x2d,
0x98, 0xf1, 0x47, 0x8a, 0x4f, 0xf1, 0x27, 0x0a, 0xd4, 0xd8, 0x9f, 0x8e, 0x50, 0xf6, 0xf4, 0xae,
0x35, 0xbd, 0x86, 0xc4, 0xf6, 0x70, 0xdb, 0x6e, 0xc2, 0x8a, 0x49, 0xa2, 0x5a, 0x9f, 0xa5, 0xd6,
0x97, 0x0d, 0x4a, 0xd9, 0xc9, 0x75, 0x58, 0x52, 0xf4, 0xb1, 0x18, 0x2c, 0xed, 0x63, 0xdd, 0x5b,
0x94, 0xb0, 0x9a, 0xc2, 0x0d, 0x68, 0x1d, 0x07, 0xa1, 0x3f, 0xec, 0xf6, 0x86, 0xe9, 0x69, 0xb7,
0xcf, 0x87, 0xa9, 0x4f, 0x3b, 0x3a, 0xeb, 0x2d, 0x12, 0xbe, 0x3d, 0x4c, 0x4f, 0x77, 0x10, 0x65,
0xef, 0x40, 0xfd, 0x98, 0xf3, 0x2e, 0xad, 0x44, 0xbb, 0x46, 0x12, 0xb2, 0x24, 0x97, 0x5e, 0xad,
0xae, 0x57, 0x3b, 0x96, 0xbf, 0xdc, 0x3f, 0x76, 0xa0, 0x29, 0x96, 0x4a, 0x9a, 0x8c, 0xb7, 0x60,
0x41, 0x8d, 0x88, 0xc7, 0x71, 0x14, 0x4b, 0xf6, 0xb7, 0x41, 0xb6, 0x09, 0x2d, 0x05, 0x8c, 0x63,
0x1e, 0x8c, 0xfc, 0x01, 0x97, 0xfa, 0xa5, 0x80, 0xb3, 0x3b, 0x59, 0x8b, 0x71, 0x34, 0x49, 0x85,
0xd2, 0x6e, 0xdc, 0x69, 0xca, 0x41, 0x79, 0x88, 0x79, 0x36, 0x09, 0xb2, 0x7f, 0xc9, 0x52, 0x5b,
0x98, 0xfb, 0x2d, 0x07, 0x18, 0x0e, 0xfd, 0x71, 0x24, 0x9a, 0x90, 0x2b, 0x95, 0xdf, 0x25, 0xe7,
0x95, 0x77, 0xa9, 0x72, 0xde, 0x2e, 0xbd, 0x05, 0x73, 0x34, 0x2c, 0x94, 0xe7, 0x99, 0xc2, 0xd0,
0x65, 0x9d, 0xfb, 0x5d, 0x07, 0x9a, 0xa6, 0x0e, 0x62, 0xb7, 0x81, 0x1d, 0x4f, 0xc2, 0x7e, 0x10,
0x0e, 0xba, 0xe9, 0xf3, 0xa0, 0xdf, 0x3d, 0x9a, 0x62, 0x13, 0x34, 0x9e, 0xbd, 0x4b, 0x5e, 0x49,
0x1d, 0x7b, 0x07, 0x5a, 0x16, 0x9a, 0xa4, 0xb1, 0x18, 0xd5, 0xde, 0x25, 0xaf, 0x50, 0x83, 0x8b,
0x84, 0x5a, 0x6e, 0x92, 0x76, 0x83, 0xb0, 0xcf, 0x9f, 0xd3, 0xba, 0x2e, 0x78, 0x16, 0x76, 0x77,
0x11, 0x9a, 0xe6, 0x77, 0xee, 0xe7, 0xa0, 0xb5, 0x8f, 0xca, 0x23, 0x0c, 0xc2, 0x81, 0x54, 0xe2,
0xa8, 0xd1, 0xa4, 0xc6, 0x15, 0x7b, 0x2d, 0x4b, 0x28, 0x36, 0x27, 0x51, 0x92, 0xca, 0x75, 0xa1,
0xdf, 0xee, 0xdf, 0x3b, 0xb0, 0x84, 0x8b, 0xfe, 0x91, 0x1f, 0x4e, 0xd5, 0x8a, 0xef, 0x43, 0x13,
0x9b, 0x7a, 0x1c, 0x6d, 0x09, 0xbd, 0x28, 0xe4, 0xfd, 0x86, 0x5c, 0xa4, 0x1c, 0xf5, 0x4d, 0x93,
0x14, 0x5d, 0x97, 0xa9, 0x67, 0x7d, 0x8d, 0x82, 0x99, 0xfa, 0xf1, 0x80, 0xa7, 0xa4, 0x31, 0xa5,
0x06, 0x05, 0x01, 0x6d, 0x47, 0xe1, 0x31, 0xbb, 0x06, 0xcd, 0xc4, 0x4f, 0xbb, 0x63, 0x1e, 0xd3,
0xaa, 0x91, 0x70, 0xcd, 0x78, 0x90, 0xf8, 0xe9, 0x01, 0x8f, 0xef, 0x4e, 0x53, 0xde, 0xf9, 0x3c,
0x2c, 0x17, 0x7a, 0x41, 0x79, 0xce, 0xa6, 0x88, 0x3f, 0xd9, 0x2a, 0xcc, 0x9e, 0xfa, 0xc3, 0x09,
0x97, 0x8a, 0x5c, 0x14, 0x3e, 0xa8, 0xbc, 0xef, 0xb8, 0x6f, 0x43, 0x2b, 0x1b, 0xb6, 0x14, 0x0c,
0x06, 0x55, 0x5c, 0x41, 0xd9, 0x00, 0xfd, 0x76, 0x7f, 0xd1, 0x11, 0x84, 0xdb, 0x51, 0xa0, 0x95,
0x22, 0x12, 0xa2, 0xee, 0x54, 0x84, 0xf8, 0xfb, 0x5c, 0xa3, 0xf1, 0x93, 0x4f, 0xd6, 0xbd, 0x0e,
0xcb, 0xc6, 0x10, 0x5e, 0x32, 0xd8, 0x87, 0xc0, 0xf6, 0x83, 0x24, 0x7d, 0x12, 0x26, 0x63, 0x43,
0xb1, 0xbc, 0x06, 0xf5, 0x51, 0x10, 0x52, 0xf7, 0x82, 0x37, 0x67, 0xbd, 0xda, 0x28, 0x08, 0xb1,
0xf3, 0x84, 0x2a, 0xfd, 0xe7, 0xb2, 0xb2, 0x22, 0x2b, 0xfd, 0xe7, 0x54, 0xe9, 0xbe, 0x0f, 0x2b,
0x56, 0x7b, 0xb2, 0xeb, 0x37, 0x61, 0x76, 0x92, 0x3e, 0x8f, 0x94, 0xda, 0x6f, 0x48, 0x36, 0x40,
0x67, 0xc2, 0x13, 0x35, 0xee, 0x87, 0xb0, 0xfc, 0x90, 0x9f, 0x49, 0xf6, 0x53, 0x03, 0x79, 0xfb,
0x42, 0x47, 0x83, 0xea, 0xdd, 0x9b, 0xc0, 0xcc, 0x8f, 0x65, 0xaf, 0x86, 0xdb, 0xe1, 0x58, 0x6e,
0x87, 0xfb, 0x36, 0xb0, 0xc3, 0x60, 0x10, 0x7e, 0xc4, 0x93, 0xc4, 0x1f, 0x68, 0x2d, 0xd1, 0x82,
0x99, 0x51, 0x32, 0x90, 0xca, 0x01, 0x7f, 0xba, 0x9f, 0x82, 0x15, 0x8b, 0x4e, 0x36, 0x7c, 0x05,
0xea, 0x49, 0x30, 0x08, 0xfd, 0x74, 0x12, 0x73, 0xd9, 0x74, 0x06, 0xb8, 0xf7, 0x60, 0xf5, 0x4b,
0x3c, 0x0e, 0x8e, 0xa7, 0x17, 0x35, 0x6f, 0xb7, 0x53, 0xc9, 0xb7, 0xb3, 0x0b, 0x6b, 0xb9, 0x76,
0x64, 0xf7, 0x82, 0x47, 0xe5, 0x4e, 0xd6, 0x3c, 0x51, 0x30, 0x24, 0xb6, 0x62, 0x4a, 0xac, 0xfb,
0x04, 0xd8, 0x76, 0x14, 0x86, 0xbc, 0x97, 0x1e, 0x70, 0x1e, 0x67, 0x07, 0x8d, 0x8c, 0x21, 0x1b,
0x77, 0x36, 0xe4, 0xca, 0xe6, 0xd5, 0x80, 0xe4, 0x54, 0x06, 0xd5, 0x31, 0x8f, 0x47, 0xd4, 0x70,
0xcd, 0xa3, 0xdf, 0xee, 0x1a, 0xac, 0x58, 0xcd, 0x4a, 0x1f, 0xf1, 0x5d, 0x58, 0xdb, 0x09, 0x92,
0x5e, 0xb1, 0xc3, 0x36, 0xcc, 0x8f, 0x27, 0x47, 0xdd, 0x4c, 0xdc, 0x54, 0x11, 0x5d, 0x89, 0xfc,
0x27, 0xb2, 0xb1, 0x5f, 0x75, 0xa0, 0xba, 0xf7, 0x78, 0x7f, 0x9b, 0x75, 0xa0, 0x16, 0x84, 0xbd,
0x68, 0x84, 0x1a, 0x59, 0x4c, 0x5a, 0x97, 0xcf, 0x15, 0xa3, 0x2b, 0x50, 0x27, 0x45, 0x8e, 0xde,
0x91, 0x3c, 0x13, 0x64, 0x00, 0x7a, 0x66, 0xfc, 0xf9, 0x38, 0x88, 0xc9, 0xf5, 0x52, 0x0e, 0x55,
0x95, 0x94, 0x65, 0xb1, 0xc2, 0xfd, 0xcf, 0x2a, 0xcc, 0x4b, 0x35, 0x4e, 0xfd, 0xf5, 0xd2, 0xe0,
0x94, 0xcb, 0x91, 0xc8, 0x12, 0x1a, 0xc9, 0x98, 0x8f, 0xa2, 0x94, 0x77, 0xad, 0x6d, 0xb0, 0x41,
0xf2, 0x3c, 0x45, 0x43, 0x5d, 0xe1, 0xaf, 0xce, 0x08, 0x2a, 0x0b, 0xc4, 0xc5, 0x42, 0xa0, 0x1b,
0xf4, 0x69, 0x4c, 0x55, 0x4f, 0x15, 0x71, 0x25, 0x7a, 0xfe, 0xd8, 0xef, 0x05, 0xe9, 0x54, 0xca,
0xbd, 0x2e, 0x63, 0xdb, 0xc3, 0xa8, 0xe7, 0x0f, 0xbb, 0x47, 0xfe, 0xd0, 0x0f, 0x7b, 0x5c, 0x79,
0xb5, 0x16, 0x88, 0x1e, 0x9e, 0x1c, 0x92, 0x22, 0x13, 0x5e, 0x60, 0x0e, 0x45, 0x4f, 0xb1, 0x17,
0x8d, 0x46, 0x41, 0x8a, 0x8e, 0x21, 0x39, 0x0d, 0x33, 0x9e, 0x81, 0x08, 0x1f, 0x9a, 0x4a, 0x67,
0x62, 0xf5, 0xea, 0xca, 0x87, 0x36, 0x40, 0x6c, 0x05, 0x3d, 0x0f, 0xd4, 0x55, 0xcf, 0xce, 0xda,
0x20, 0x5a, 0xc9, 0x10, 0xdc, 0x87, 0x49, 0x98, 0xf0, 0x34, 0x1d, 0xf2, 0xbe, 0x1e, 0x50, 0x83,
0xc8, 0x8a, 0x15, 0xec, 0x36, 0xac, 0x08, 0x5f, 0x35, 0xf1, 0xd3, 0x28, 0x39, 0x09, 0x92, 0x6e,
0x82, 0x5e, 0x5f, 0x93, 0xe8, 0xcb, 0xaa, 0xd8, 0xfb, 0xb0, 0x91, 0x83, 0x63, 0xde, 0xe3, 0xc1,
0x29, 0xef, 0xb7, 0x17, 0xe8, 0xab, 0xf3, 0xaa, 0xd9, 0x35, 0x68, 0xa0, 0x8b, 0x3e, 0x19, 0xf7,
0x7d, 0x34, 0xd1, 0x8b, 0xb4, 0x0f, 0x26, 0xc4, 0xde, 0x85, 0x85, 0x31, 0x17, 0x76, 0xf4, 0x24,
0x1d, 0xf6, 0x92, 0xf6, 0x92, 0xa5, 0xdd, 0x90, 0x73, 0x3d, 0x9b, 0x02, 0x99, 0xb2, 0x97, 0x90,
0xaf, 0xe6, 0x4f, 0xdb, 0x2d, 0x62, 0xb7, 0x0c, 0x20, 0x19, 0x89, 0x83, 0x53, 0x3f, 0xe5, 0xed,
0x65, 0xe2, 0x2d, 0x55, 0x74, 0x7f, 0xcf, 0x11, 0x8a, 0x55, 0x32, 0xa1, 0x56, 0x90, 0x6f, 0x40,
0x43, 0xb0, 0x5f, 0x37, 0x0a, 0x87, 0x53, 0xc9, 0x91, 0x20, 0xa0, 0x47, 0xe1, 0x70, 0xca, 0x3e,
0x01, 0x0b, 0x41, 0x68, 0x92, 0x08, 0x19, 0x6e, 0x2a, 0x90, 0x88, 0xde, 0x80, 0xc6, 0x78, 0x72,
0x34, 0x0c, 0x7a, 0x82, 0x64, 0x46, 0xb4, 0x22, 0x20, 0x22, 0x40, 0xff, 0x49, 0x8c, 0x44, 0x50,
0x54, 0x89, 0xa2, 0x21, 0x31, 0x24, 0x71, 0xef, 0xc2, 0xaa, 0x3d, 0x40, 0xa9, 0xac, 0x36, 0xa1,
0x26, 0x79, 0x3b, 0x69, 0x37, 0x68, 0x7d, 0x16, 0xed, 0xb3, 0x99, 0xa7, 0xeb, 0xdd, 0x1f, 0x54,
0x61, 0x45, 0xa2, 0xdb, 0xc3, 0x28, 0xe1, 0x87, 0x93, 0xd1, 0xc8, 0x8f, 0x4b, 0x84, 0xc6, 0xb9,
0x40, 0x68, 0x2a, 0xb6, 0xd0, 0x20, 0x2b, 0x9f, 0xf8, 0x41, 0x28, 0x9c, 0x3f, 0x21, 0x71, 0x06,
0xc2, 0x6e, 0xc0, 0x52, 0x6f, 0x18, 0x25, 0xc2, 0x21, 0x32, 0x4f, 0x5f, 0x79, 0xb8, 0x28, 0xe4,
0xb3, 0x65, 0x42, 0x6e, 0x0a, 0xe9, 0x5c, 0x4e, 0x48, 0x5d, 0x68, 0x62, 0xa3, 0x5c, 0xe9, 0x9c,
0x79, 0xe1, 0xa0, 0x99, 0x18, 0x8e, 0x27, 0x2f, 0x12, 0x42, 0xfe, 0x96, 0xca, 0x04, 0x02, 0x0f,
0x77, 0xa8, 0xd3, 0x0c, 0xea, 0xba, 0x14, 0x88, 0x62, 0x15, 0xbb, 0x07, 0x20, 0xfa, 0x22, 0xc3,
0x0a, 0x64, 0x58, 0xdf, 0xb6, 0x77, 0xc4, 0x5c, 0xfb, 0x9b, 0x58, 0x98, 0xc4, 0x9c, 0x8c, 0xad,
0xf1, 0xa5, 0xfb, 0xeb, 0x0e, 0x34, 0x8c, 0x3a, 0xb6, 0x06, 0xcb, 0xdb, 0x8f, 0x1e, 0x1d, 0xec,
0x7a, 0x5b, 0x8f, 0x1f, 0x7c, 0x69, 0xb7, 0xbb, 0xbd, 0xff, 0xe8, 0x70, 0xb7, 0x75, 0x09, 0xe1,
0xfd, 0x47, 0xdb, 0x5b, 0xfb, 0xdd, 0x7b, 0x8f, 0xbc, 0x6d, 0x05, 0x3b, 0x6c, 0x1d, 0x98, 0xb7,
0xfb, 0xd1, 0xa3, 0xc7, 0xbb, 0x16, 0x5e, 0x61, 0x2d, 0x68, 0xde, 0xf5, 0x76, 0xb7, 0xb6, 0xf7,
0x24, 0x32, 0xc3, 0x56, 0xa1, 0x75, 0xef, 0xc9, 0xc3, 0x9d, 0x07, 0x0f, 0xef, 0x77, 0xb7, 0xb7,
0x1e, 0x6e, 0xef, 0xee, 0xef, 0xee, 0xb4, 0xaa, 0x6c, 0x01, 0xea, 0x5b, 0x77, 0xb7, 0x1e, 0xee,
0x3c, 0x7a, 0xb8, 0xbb, 0xd3, 0x9a, 0x75, 0xff, 0xce, 0x81, 0x35, 0x1a, 0x75, 0x3f, 0x2f, 0x20,
0xd7, 0xa0, 0xd1, 0x8b, 0xa2, 0x31, 0x47, 0x7d, 0xae, 0x55, 0xb6, 0x09, 0x21, 0xf3, 0x0b, 0x05,
0x79, 0x1c, 0xc5, 0x3d, 0x2e, 0xe5, 0x03, 0x08, 0xba, 0x87, 0x08, 0x32, 0xbf, 0xdc, 0x5e, 0x41,
0x21, 0xc4, 0xa3, 0x21, 0x30, 0x41, 0xb2, 0x0e, 0x73, 0x47, 0x31, 0xf7, 0x7b, 0x27, 0x52, 0x32,
0x64, 0x89, 0x7d, 0x32, 0xf3, 0xdd, 0x7b, 0xb8, 0xfa, 0x43, 0xde, 0x27, 0x8e, 0xa9, 0x79, 0x4b,
0x12, 0xdf, 0x96, 0x30, 0x6a, 0x06, 0xff, 0xc8, 0x0f, 0xfb, 0x51, 0xc8, 0xfb, 0xc4, 0x34, 0x35,
0x2f, 0x03, 0xdc, 0x03, 0x58, 0xcf, 0xcf, 0x4f, 0xca, 0xd7, 0x7b, 0x86, 0x7c, 0x09, 0xef, 0xaa,
0x73, 0xfe, 0x6e, 0x1a, 0xb2, 0xf6, 0x4f, 0x0e, 0x54, 0xd1, 0xd8, 0x9e, 0x6f, 0x98, 0x4d, 0xff,
0x69, 0xa6, 0x10, 0xb6, 0xa1, 0xc3, 0x89, 0x50, 0xbf, 0xc2, 0x44, 0x19, 0x48, 0x56, 0x1f, 0xf3,
0xde, 0x29, 0xcd, 0x58, 0xd7, 0x23, 0x82, 0x02, 0x82, 0x1e, 0x2c, 0x7d, 0x2d, 0x05, 0x44, 0x95,
0x55, 0x1d, 0x7d, 0x39, 0x9f, 0xd5, 0xd1, 0x77, 0x6d, 0x98, 0x0f, 0xc2, 0xa3, 0x68, 0x12, 0xf6,
0x49, 0x20, 0x6a, 0x9e, 0x2a, 0xe2, 0xf2, 0x8d, 0x49, 0x50, 0x83, 0x91, 0x62, 0xff, 0x0c, 0x70,
0x19, 0x9e, 0x70, 0x12, 0x72, 0x2e, 0x74, 0x9c, 0xe2, 0x3d, 0x58, 0x36, 0xb0, 0xcc, 0x51, 0x1d,
0x23, 0x90, 0x73, 0x54, 0xc9, 0x2b, 0x11, 0x35, 0x6e, 0x0b, 0x16, 0xef, 0xf3, 0xf4, 0x41, 0x78,
0x1c, 0xa9, 0x96, 0xbe, 0x5d, 0x85, 0x25, 0x0d, 0xc9, 0x86, 0x6e, 0xc0, 0x52, 0xd0, 0xe7, 0x61,
0x1a, 0xa4, 0xd3, 0xae, 0x75, 0x90, 0xca, 0xc3, 0xe8, 0xcd, 0xf9, 0xc3, 0xc0, 0x57, 0xa1, 0x31,
0x51, 0x60, 0x77, 0x60, 0x15, 0x4d, 0x8d, 0xb2, 0x1e, 0x7a, 0x8b, 0xc5, 0x79, 0xae, 0xb4, 0x0e,
0x95, 0x01, 0xe2, 0x52, 0xdb, 0xeb, 0x4f, 0x84, 0x57, 0x53, 0x56, 0x85, 0xab, 0x26, 0x5a, 0xc2,
0x29, 0xcf, 0x0a, 0x73, 0xa4, 0x81, 0x42, 0xbc, 0x69, 0x4e, 0xa8, 0xaa, 0x7c, 0xbc, 0xc9, 0x88,
0x59, 0xd5, 0x0a, 0x31, 0x2b, 0x54, 0x65, 0xd3, 0xb0, 0xc7, 0xfb, 0xdd, 0x34, 0xea, 0x92, 0xca,
0xa5, 0xdd, 0xa9, 0x79, 0x79, 0x98, 0xa2, 0x6b, 0x3c, 0x49, 0x43, 0x9e, 0x92, 0x56, 0xaa, 0x79,
0xaa, 0x88, 0xd2, 0x45, 0x24, 0xc2, 0x80, 0xd4, 0x3d, 0x59, 0x42, 0xb7, 0x74, 0x12, 0x07, 0x49,
0xbb, 0x49, 0x28, 0xfd, 0x66, 0x9f, 0x86, 0xb5, 0x23, 0x9e, 0xa4, 0xdd, 0x13, 0xee, 0xf7, 0x79,
0x4c, 0xbb, 0x2f, 0x42, 0x61, 0xc2, 0xda, 0x97, 0x57, 0x62, 0xdf, 0xa7, 0x3c, 0x4e, 0x82, 0x28,
0x24, 0x3b, 0x5f, 0xf7, 0x54, 0x11, 0xdb, 0xc3, 0x05, 0xd1, 0x36, 0x54, 0xaf, 0xea, 0x12, 0x2d,
0x46, 0x79, 0xa5, 0xfb, 0x4d, 0xf2, 0xb9, 0x75, 0x68, 0xef, 0x09, 0x39, 0x0c, 0x78, 0x72, 0x12,
0x2b, 0x93, 0x9c, 0xf8, 0xf2, 0x18, 0x50, 0x23, 0xe0, 0xf0, 0xc4, 0x47, 0x2d, 0x63, 0x2d, 0xb6,
0x38, 0x59, 0x35, 0x08, 0xdb, 0x13, 0x6b, 0xfd, 0x16, 0x2c, 0xaa, 0xa0, 0x61, 0xd2, 0x1d, 0xf2,
0xe3, 0x54, 0x9d, 0xee, 0xc3, 0xc9, 0x88, 0x8e, 0x5f, 0xfb, 0xfc, 0x38, 0x75, 0x1f, 0xc2, 0xb2,
0x94, 0xfc, 0x47, 0x63, 0xae, 0xba, 0xfe, 0x6c, 0x99, 0x05, 0x3d, 0x27, 0x4c, 0x6a, 0x53, 0xba,
0x1e, 0x30, 0x53, 0x93, 0xc8, 0x06, 0xa5, 0x19, 0x53, 0x31, 0x04, 0x39, 0x1d, 0x0b, 0xc3, 0x55,
0x4d, 0x26, 0xbd, 0x9e, 0x0a, 0xfb, 0xd6, 0x3c, 0x55, 0x74, 0xbf, 0xe7, 0xc0, 0x0a, 0xb5, 0xa6,
0x7c, 0x00, 0xa9, 0xad, 0xdf, 0xff, 0x11, 0x86, 0xd9, 0xec, 0x99, 0x71, 0x95, 0x55, 0x98, 0x35,
0xf5, 0xb7, 0x28, 0xfc, 0xe8, 0x47, 0xe9, 0x6a, 0xe1, 0x28, 0xfd, 0x37, 0x0e, 0x2c, 0x0b, 0x15,
0x9a, 0xfa, 0xe9, 0x24, 0x91, 0xd3, 0xff, 0x3f, 0xb0, 0x20, 0x6c, 0xa1, 0x14, 0x42, 0x39, 0xd0,
0x55, 0xad, 0x2f, 0x08, 0x15, 0xc4, 0x7b, 0x97, 0x3c, 0x9b, 0x98, 0x7d, 0x1e, 0x9a, 0x66, 0xe4,
0x97, 0xc6, 0xdc, 0xb8, 0x73, 0x59, 0xcd, 0xb2, 0xc0, 0x39, 0x7b, 0x97, 0x3c, 0xeb, 0x03, 0xf6,
0x21, 0x39, 0x34, 0x61, 0x97, 0x9a, 0x95, 0xb1, 0xb3, 0xcb, 0x25, 0x6a, 0x5f, 0x7f, 0x6e, 0x90,
0xdf, 0xad, 0xc1, 0x9c, 0xf0, 0x60, 0xdd, 0xfb, 0xb0, 0x60, 0x8d, 0xd4, 0x0a, 0x11, 0x34, 0x45,
0x88, 0xa0, 0x10, 0x51, 0xaa, 0x14, 0x23, 0x4a, 0xee, 0x1f, 0xce, 0x00, 0x43, 0x6e, 0xcb, 0x6d,
0x27, 0xba, 0xd0, 0x51, 0xdf, 0x3a, 0x10, 0x35, 0x3d, 0x13, 0x62, 0x37, 0x81, 0x19, 0x45, 0x15,
0x74, 0x13, 0xd6, 0xa6, 0xa4, 0x06, 0xd5, 0xa2, 0x34, 0xd6, 0xd2, 0xac, 0xca, 0xa3, 0x9f, 0xd8,
0xb7, 0xd2, 0x3a, 0x34, 0x28, 0xe3, 0x49, 0x72, 0x42, 0x37, 0x0c, 0xf2, 0xc8, 0xa4, 0xca, 0x79,
0x06, 0x99, 0xbb, 0x90, 0x41, 0xe6, 0xf3, 0x0c, 0x62, 0x3a, 0xed, 0x35, 0xcb, 0x69, 0x47, 0x67,
0x71, 0x84, 0x2e, 0x66, 0x3a, 0xec, 0x75, 0x47, 0xd8, 0xbb, 0x3c, 0x21, 0x59, 0x20, 0xdb, 0x84,
0x96, 0x74, 0x2f, 0xb2, 0x93, 0x01, 0xd0, 0x1a, 0x17, 0x70, 0xd4, 0xd7, 0x59, 0x60, 0xa6, 0x41,
0x83, 0xcd, 0x00, 0x3c, 0x4b, 0x25, 0xc8, 0x62, 0xdd, 0x49, 0x28, 0xb9, 0x85, 0xf7, 0xe9, 0x6c,
0x54, 0xf3, 0x8a, 0x15, 0xee, 0x0f, 0x1d, 0x68, 0xe1, 0x9e, 0x59, 0x7c, 0xfd, 0x01, 0x90, 0x58,
0xbd, 0x22, 0x5b, 0x5b, 0xb4, 0x3f, 0x39, 0x57, 0xbf, 0x0f, 0x75, 0x6a, 0x30, 0x1a, 0xf3, 0x50,
0x32, 0x75, 0xdb, 0x66, 0xea, 0x4c, 0xa3, 0xed, 0x5d, 0xf2, 0x32, 0x62, 0x83, 0xa5, 0xff, 0xda,
0x81, 0x86, 0x1c, 0xe6, 0x8f, 0x1d, 0x39, 0xe8, 0x18, 0xd7, 0x49, 0x82, 0x15, 0xb3, 0x9b, 0xa3,
0x1b, 0xb0, 0x34, 0xf2, 0xd3, 0x49, 0x8c, 0x06, 0xdc, 0x8a, 0x1a, 0xe4, 0x61, 0xb4, 0xc6, 0xa4,
0xbc, 0x93, 0x6e, 0x1a, 0x0c, 0xbb, 0xaa, 0x56, 0x5e, 0xda, 0x94, 0x55, 0xa1, 0x0e, 0x4b, 0x52,
0x7f, 0xc0, 0xa5, 0xa1, 0x15, 0x05, 0xb7, 0x0d, 0xeb, 0x72, 0x42, 0x39, 0xdf, 0xd6, 0xfd, 0xb3,
0x26, 0x6c, 0x14, 0xaa, 0xf4, 0x2d, 0xaf, 0x3c, 0x0e, 0x0f, 0x83, 0xd1, 0x51, 0xa4, 0x0f, 0x06,
0x8e, 0x79, 0x52, 0xb6, 0xaa, 0xd8, 0x00, 0xd6, 0x94, 0x47, 0x81, 0x6b, 0x9a, 0x59, 0xba, 0x0a,
0xb9, 0x42, 0xef, 0xda, 0x3c, 0x90, 0xef, 0x50, 0xe1, 0xa6, 0x16, 0x28, 0x6f, 0x8f, 0x9d, 0x40,
0x5b, 0xbb, 0x2e, 0xd2, 0x5c, 0x18, 0xee, 0x0d, 0xf6, 0xf5, 0xce, 0x05, 0x7d, 0x59, 0xae, 0xb0,
0x77, 0x6e, 0x6b, 0x6c, 0x0a, 0x57, 0x55, 0x1d, 0xd9, 0x83, 0x62, 0x7f, 0xd5, 0x57, 0x9a, 0x1b,
0x39, 0xf9, 0x76, 0xa7, 0x17, 0x34, 0xcc, 0xbe, 0x0e, 0xeb, 0x67, 0x7e, 0x90, 0xaa, 0x61, 0x19,
0x8e, 0xc3, 0x2c, 0x75, 0x79, 0xe7, 0x82, 0x2e, 0x9f, 0x8a, 0x8f, 0x2d, 0x23, 0x79, 0x4e, 0x8b,
0x9d, 0xbf, 0x74, 0x60, 0xd1, 0x6e, 0x07, 0xd9, 0x54, 0x2a, 0x0f, 0xa5, 0x44, 0x95, 0xfb, 0x99,
0x83, 0x8b, 0x67, 0xeb, 0x4a, 0xd9, 0xd9, 0xda, 0x3c, 0xd1, 0xce, 0x5c, 0x14, 0x76, 0xaa, 0xbe,
0x5a, 0xd8, 0x69, 0xb6, 0x2c, 0xec, 0xd4, 0xf9, 0x77, 0x07, 0x58, 0x91, 0x97, 0xd8, 0x7d, 0x71,
0xb8, 0x0f, 0xf9, 0x50, 0xea, 0xa4, 0xff, 0xfd, 0x6a, 0xfc, 0xa8, 0xd6, 0x4e, 0x7d, 0x8d, 0x82,
0x61, 0x2a, 0x1d, 0xd3, 0xdd, 0x5a, 0xf0, 0xca, 0xaa, 0x72, 0x81, 0xb0, 0xea, 0xc5, 0x81, 0xb0,
0xd9, 0x8b, 0x03, 0x61, 0x73, 0xf9, 0x40, 0x58, 0xe7, 0x57, 0x1c, 0x58, 0x29, 0xd9, 0xf4, 0x9f,
0xde, 0xc4, 0x71, 0x9b, 0x2c, 0x5d, 0x50, 0x91, 0xdb, 0x64, 0x82, 0x9d, 0x9f, 0x87, 0x05, 0x8b,
0xd1, 0x7f, 0x7a, 0xfd, 0xe7, 0x3d, 0x46, 0xc1, 0x67, 0x16, 0xd6, 0xf9, 0xe7, 0x0a, 0xb0, 0xa2,
0xb0, 0xfd, 0x8f, 0x8e, 0xa1, 0xb8, 0x4e, 0x33, 0x25, 0xeb, 0xf4, 0xdf, 0x6a, 0x07, 0xde, 0x81,
0x65, 0x99, 0x12, 0x62, 0x84, 0x74, 0x04, 0xc7, 0x14, 0x2b, 0xd0, 0x67, 0xb6, 0xa3, 0x90, 0x35,
0xeb, 0x6a, 0xdd, 0x30, 0x86, 0xb9, 0x60, 0xa4, 0xbb, 0x0e, 0xab, 0x22, 0xc5, 0xe4, 0xae, 0x68,
0x4a, 0xd9, 0x95, 0xdf, 0x75, 0x60, 0x2d, 0x57, 0x91, 0x5d, 0x04, 0x0b, 0xd3, 0x61, 0xdb, 0x13,
0x1b, 0xc4, 0xf1, 0x6b, 0x37, 0x23, 0xc7, 0x6d, 0xc5, 0x0a, 0x5c, 0x1f, 0xc3, 0x2d, 0xc9, 0xad,
0x7a, 0x59, 0x95, 0xbb, 0x21, 0x12, 0x61, 0x42, 0x3e, 0xcc, 0x0d, 0xfc, 0x58, 0xa4, 0xae, 0x98,
0x15, 0xd9, 0x55, 0x90, 0x3d, 0x64, 0x55, 0x44, 0x8f, 0xd2, 0x32, 0x53, 0xf6, 0x78, 0x4b, 0xeb,
0xdc, 0x1f, 0x38, 0xc0, 0xbe, 0x38, 0xe1, 0xf1, 0x94, 0x2e, 0x7b, 0x75, 0xac, 0x69, 0x23, 0x1f,
0x49, 0x99, 0x1b, 0x4f, 0x8e, 0xbe, 0xc0, 0xa7, 0x2a, 0x6d, 0xa0, 0x92, 0xa5, 0x0d, 0xbc, 0x0e,
0x80, 0x47, 0x39, 0x7d, 0x83, 0x4c, 0x9e, 0x5c, 0x38, 0x19, 0x89, 0x06, 0x4b, 0x6f, 0xf6, 0xab,
0x17, 0xdf, 0xec, 0xcf, 0x5e, 0x74, 0xb3, 0xff, 0x21, 0xac, 0x58, 0xe3, 0xd6, 0xdb, 0xaa, 0xee,
0xb2, 0x9d, 0x97, 0xdc, 0x65, 0xff, 0x5a, 0x05, 0x66, 0xf6, 0xa2, 0xb1, 0x19, 0x67, 0x75, 0xec,
0x38, 0xab, 0xb4, 0x25, 0x5d, 0x6d, 0x2a, 0xa4, 0x8a, 0xb1, 0x40, 0xb6, 0x09, 0x8b, 0xfe, 0x28,
0xc5, 0x83, 0xff, 0x71, 0x14, 0x9f, 0xf9, 0x71, 0x5f, 0xec, 0xf5, 0xdd, 0x4a, 0xdb, 0xf1, 0x72,
0x35, 0x6c, 0x15, 0x66, 0xb4, 0xd2, 0x25, 0x02, 0x2c, 0xa2, 0xe3, 0x46, 0x77, 0x34, 0x53, 0x19,
0xb3, 0x90, 0x25, 0x64, 0x25, 0xfb, 0x7b, 0xe1, 0x76, 0x0b, 0xd1, 0x29, 0xab, 0x42, 0xbb, 0x86,
0xcb, 0x47, 0x64, 0x32, 0xd8, 0xa4, 0xca, 0x66, 0x60, 0xac, 0x66, 0xdf, 0x58, 0xfd, 0xa3, 0x03,
0xb3, 0xb4, 0x36, 0xa8, 0x06, 0x04, 0xef, 0xeb, 0x50, 0x2b, 0xad, 0xc9, 0x82, 0x97, 0x87, 0x99,
0x6b, 0x25, 0xde, 0x54, 0xf4, 0x84, 0xcc, 0xe4, 0x9b, 0x6b, 0x50, 0x17, 0x25, 0x9d, 0x64, 0x42,
0x24, 0x19, 0xc8, 0xae, 0x42, 0xf5, 0x24, 0x1a, 0x2b, 0xbf, 0x05, 0xd4, 0x4d, 0x43, 0x34, 0xf6,
0x08, 0xcf, 0xc6, 0x83, 0xed, 0x89, 0x69, 0x09, 0x6b, 0x94, 0x87, 0xd1, 0x1e, 0xeb, 0x66, 0xcd,
0x65, 0xca, 0xa1, 0xee, 0x26, 0x2c, 0x3d, 0x8c, 0xfa, 0xdc, 0x88, 0x77, 0x9d, 0xcb, 0xe7, 0xee,
0x2f, 0x38, 0x50, 0x53, 0xc4, 0xec, 0x06, 0x54, 0xd1, 0xc9, 0xc8, 0x1d, 0x21, 0xf4, 0x0d, 0x23,
0xd2, 0x79, 0x44, 0x81, 0x5a, 0x99, 0xe2, 0x1a, 0x99, 0xc3, 0xa9, 0xa2, 0x1a, 0x99, 0x3f, 0xa5,
0x87, 0x9b, 0x73, 0x43, 0x72, 0xa8, 0xfb, 0x7d, 0x07, 0x16, 0xac, 0x3e, 0xf0, 0x10, 0x3a, 0xf4,
0x93, 0x54, 0xde, 0xda, 0xc8, 0xed, 0x31, 0x21, 0x73, 0xa3, 0x2b, 0x76, 0x04, 0x54, 0xc7, 0xe6,
0x66, 0xcc, 0xd8, 0xdc, 0x6d, 0xa8, 0x67, 0xe9, 0x51, 0x55, 0x4b, 0xdb, 0x62, 0x8f, 0xea, 0xee,
0x34, 0x23, 0xc2, 0x76, 0x7a, 0xd1, 0x30, 0x8a, 0xe5, 0x75, 0x81, 0x28, 0xb8, 0x1f, 0x42, 0xc3,
0xa0, 0xc7, 0x61, 0x84, 0x3c, 0x3d, 0x8b, 0xe2, 0x67, 0x2a, 0x10, 0x2b, 0x8b, 0x3a, 0x7b, 0xa0,
0x92, 0x65, 0x0f, 0xb8, 0x7f, 0xe1, 0xc0, 0x02, 0xf2, 0x60, 0x10, 0x0e, 0x0e, 0xa2, 0x61, 0xd0,
0x9b, 0xd2, 0xde, 0x2b, 0x76, 0x93, 0x3a, 0x43, 0xf1, 0xa2, 0x0d, 0x23, 0xd7, 0xab, 0x33, 0xa8,
0x14, 0x51, 0x5d, 0x46, 0x19, 0x46, 0x09, 0x38, 0xf2, 0x13, 0x29, 0x16, 0xd2, 0xfc, 0x59, 0x20,
0x4a, 0x1a, 0x02, 0xb1, 0x9f, 0xf2, 0xee, 0x28, 0x18, 0x0e, 0x03, 0x41, 0x2b, 0x9c, 0xa3, 0xb2,
0x2a, 0xec, 0xb3, 0x1f, 0x24, 0xfe, 0x51, 0x16, 0x02, 0xd7, 0x65, 0xf7, 0x4f, 0x2a, 0xd0, 0x90,
0x8a, 0x7b, 0xb7, 0x3f, 0xe0, 0xf2, 0xbe, 0x86, 0xdc, 0x4f, 0xad, 0x64, 0x0c, 0x44, 0xd5, 0x5b,
0x0e, 0xab, 0x81, 0xe4, 0xb7, 0x7c, 0xa6, 0xb8, 0xe5, 0x57, 0xa0, 0x8e, 0xac, 0xf7, 0x2e, 0x79,
0xc6, 0xe2, 0xae, 0x27, 0x03, 0x54, 0xed, 0x1d, 0xaa, 0x9d, 0xcd, 0x6a, 0x09, 0x78, 0xe9, 0xed,
0xce, 0xfb, 0xd0, 0x94, 0xcd, 0xd0, 0x9e, 0x90, 0x4e, 0xc9, 0x98, 0xdf, 0xda, 0x2f, 0xcf, 0xa2,
0x54, 0x5f, 0xde, 0x51, 0x5f, 0xd6, 0x2e, 0xfa, 0x52, 0x51, 0xba, 0xf7, 0xf5, 0xa5, 0xd9, 0xfd,
0xd8, 0x1f, 0x9f, 0x28, 0x29, 0xbd, 0x0d, 0x2b, 0x41, 0xd8, 0x1b, 0x4e, 0xfa, 0xbc, 0x3b, 0x09,
0xfd, 0x30, 0x8c, 0x26, 0x61, 0x8f, 0xab, 0x9c, 0x81, 0xb2, 0x2a, 0xb7, 0xaf, 0x73, 0x95, 0xa8,
0x21, 0xb6, 0x09, 0xb3, 0xd8, 0x91, 0xb2, 0x0a, 0xe5, 0x22, 0x2c, 0x48, 0xd8, 0x0d, 0x98, 0xe5,
0xfd, 0x01, 0x57, 0xa7, 0x45, 0x66, 0x9f, 0xdb, 0x71, 0x57, 0x3d, 0x41, 0x80, 0x0a, 0x05, 0xd1,
0x9c, 0x42, 0xb1, 0x2d, 0xca, 0x1c, 0x16, 0x1f, 0xf4, 0xdd, 0x55, 0x60, 0x0f, 0x85, 0x0c, 0x98,
0xf1, 0xf6, 0x5f, 0x9e, 0x81, 0x86, 0x01, 0xa3, 0x6e, 0x18, 0xe0, 0x80, 0xbb, 0xfd, 0xc0, 0x1f,
0xf1, 0x94, 0xc7, 0x92, 0xef, 0x73, 0x28, 0xd2, 0xf9, 0xa7, 0x83, 0x6e, 0x34, 0x49, 0xbb, 0x7d,
0x3e, 0x88, 0xb9, 0x30, 0xf2, 0x68, 0x74, 0x2c, 0x14, 0xe9, 0x46, 0xfe, 0x73, 0x93, 0x4e, 0x70,
0x50, 0x0e, 0x55, 0xd1, 0x73, 0xb1, 0x46, 0xd5, 0x2c, 0x7a, 0x2e, 0x56, 0x24, 0xaf, 0xd5, 0x66,
0x4b, 0xb4, 0xda, 0x7b, 0xb0, 0x2e, 0xf4, 0x97, 0x94, 0xf4, 0x6e, 0x8e, 0xb1, 0xce, 0xa9, 0x65,
0x9b, 0xd0, 0xc2, 0x31, 0x2b, 0x91, 0x48, 0x82, 0x6f, 0x8a, 0xc8, 0x94, 0xe3, 0x15, 0x70, 0xa4,
0xa5, 0x10, 0x91, 0x49, 0x2b, 0x6e, 0x13, 0x0b, 0x38, 0xd1, 0xfa, 0xcf, 0x6d, 0xda, 0xba, 0xa4,
0xcd, 0xe1, 0xee, 0x02, 0x34, 0x0e, 0xd3, 0x68, 0xac, 0x36, 0x65, 0x11, 0x9a, 0xa2, 0x28, 0x73,
0x37, 0x5e, 0x83, 0xcb, 0xc4, 0x45, 0x8f, 0xa3, 0x71, 0x34, 0x8c, 0x06, 0xd3, 0xc3, 0xc9, 0x91,
0x48, 0xda, 0x0d, 0xa2, 0xd0, 0xfd, 0x2b, 0x07, 0x56, 0xac, 0x5a, 0x19, 0x7e, 0xfa, 0xb4, 0x10,
0x02, 0x7d, 0xe9, 0x2e, 0x18, 0x6f, 0xd9, 0x50, 0xae, 0x82, 0x50, 0x04, 0x11, 0x9f, 0xc8, 0x7b,
0xf8, 0x2d, 0x58, 0x52, 0x23, 0x53, 0x1f, 0x0a, 0x2e, 0x6c, 0x17, 0xb9, 0x50, 0x7e, 0xbf, 0x28,
0x3f, 0x50, 0x4d, 0xfc, 0x5f, 0x79, 0x2b, 0xdb, 0xa7, 0x39, 0xaa, 0x38, 0x84, 0xbe, 0x49, 0x33,
0x4f, 0x23, 0x6a, 0x04, 0x3d, 0x0d, 0x26, 0xee, 0x6f, 0x38, 0x00, 0xd9, 0xe8, 0xe8, 0x2e, 0x4f,
0x1b, 0x08, 0x91, 0x57, 0x6f, 0x18, 0x83, 0x37, 0xa1, 0xa9, 0xef, 0x80, 0x32, 0x9b, 0xd3, 0x50,
0x18, 0x3a, 0x8c, 0xd7, 0x61, 0x69, 0x30, 0x8c, 0x8e, 0xc8, 0x60, 0x53, 0x32, 0x50, 0x22, 0x33,
0x58, 0x16, 0x05, 0x7c, 0x4f, 0xa2, 0x99, 0x81, 0xaa, 0x1a, 0x06, 0xca, 0xfd, 0x56, 0x45, 0xdf,
0x01, 0x64, 0x73, 0x3e, 0x57, 0xca, 0xd8, 0x9d, 0x82, 0x3a, 0x3d, 0x27, 0xe4, 0x4e, 0x11, 0xb7,
0x83, 0x0b, 0x03, 0x02, 0x1f, 0xc2, 0x62, 0x2c, 0xf4, 0x95, 0x52, 0x66, 0xd5, 0x97, 0x28, 0xb3,
0x85, 0xd8, 0xb2, 0x62, 0x9f, 0x84, 0x96, 0xdf, 0x3f, 0xe5, 0x71, 0x1a, 0xd0, 0x91, 0x8c, 0x5c,
0x08, 0xa1, 0x82, 0x97, 0x0c, 0x9c, 0x2c, 0xfb, 0x75, 0x58, 0x92, 0x59, 0x43, 0x9a, 0x52, 0x26,
0xca, 0x66, 0x30, 0x12, 0xba, 0xbf, 0xaf, 0xae, 0x1b, 0xec, 0x3d, 0x3c, 0x7f, 0x45, 0xcc, 0xd9,
0x55, 0x72, 0xb3, 0xfb, 0x84, 0x0c, 0xfd, 0xf7, 0xd5, 0xb9, 0x6f, 0xc6, 0xb8, 0xc1, 0xef, 0xcb,
0xab, 0x1a, 0x7b, 0x49, 0xab, 0xaf, 0xb2, 0xa4, 0xee, 0x0f, 0x1d, 0x98, 0xdf, 0x8b, 0xc6, 0x7b,
0x32, 0x97, 0x81, 0x04, 0x41, 0xa7, 0xeb, 0xa9, 0xe2, 0x4b, 0xb2, 0x1c, 0x4a, 0x2d, 0xf7, 0x42,
0xde, 0x72, 0xff, 0x3f, 0x78, 0x8d, 0xa2, 0x0e, 0x71, 0x34, 0x8e, 0x62, 0x14, 0x46, 0x7f, 0x28,
0xcc, 0x74, 0x14, 0xa6, 0x27, 0x4a, 0x8d, 0xbd, 0x8c, 0x84, 0x8e, 0x77, 0x78, 0x2c, 0x11, 0x4e,
0xb7, 0xf4, 0x34, 0x84, 0x76, 0x2b, 0x56, 0xb8, 0x9f, 0x85, 0x3a, 0xb9, 0xca, 0x34, 0xad, 0x77,
0xa0, 0x7e, 0x12, 0x8d, 0xbb, 0x27, 0x41, 0x98, 0x2a, 0xe1, 0x5e, 0xcc, 0x7c, 0xd8, 0x3d, 0x5a,
0x10, 0x4d, 0xe0, 0xfe, 0xf6, 0x2c, 0xcc, 0x3f, 0x08, 0x4f, 0xa3, 0xa0, 0x47, 0x37, 0x13, 0x23,
0x3e, 0x8a, 0x54, 0xf2, 0x22, 0xfe, 0xc6, 0xa5, 0xa0, 0x6c, 0x9d, 0x71, 0x2a, 0xaf, 0x16, 0x54,
0x11, 0x1d, 0x84, 0x38, 0x4b, 0x42, 0x16, 0xa2, 0x63, 0x20, 0x78, 0x80, 0x88, 0xcd, 0x24, 0x62,
0x59, 0xca, 0xb2, 0x3f, 0x67, 0x8d, 0xec, 0x4f, 0xba, 0xc7, 0x12, 0x79, 0x17, 0xf2, 0x62, 0x5e,
0x15, 0xe9, 0xc0, 0x13, 0x73, 0x11, 0x2d, 0x22, 0x57, 0x63, 0x5e, 0x1e, 0x78, 0x4c, 0x10, 0xdd,
0x11, 0xf1, 0x81, 0xa0, 0x11, 0xca, 0xd7, 0x84, 0xd0, 0x75, 0xcb, 0xa7, 0x7c, 0xd7, 0x05, 0xcf,
0xe7, 0x60, 0xd4, 0xd0, 0x7d, 0xae, 0x15, 0xa9, 0x98, 0x03, 0x88, 0x24, 0xeb, 0x3c, 0x6e, 0x1c,
0x93, 0x44, 0x42, 0x95, 0x3a, 0x26, 0x21, 0xa3, 0xf8, 0xc3, 0xe1, 0x91, 0xdf, 0x7b, 0x46, 0x19,
0xfd, 0x74, 0x47, 0x50, 0xf7, 0x6c, 0x90, 0x32, 0x27, 0xb2, 0xdd, 0xa4, 0xfb, 0xd3, 0xaa, 0x67,
0x42, 0xec, 0x0e, 0x34, 0xe8, 0x68, 0x28, 0xf7, 0x73, 0x91, 0xf6, 0xb3, 0x65, 0x9e, 0x1d, 0x69,
0x47, 0x4d, 0x22, 0xf3, 0xb6, 0x64, 0xc9, 0xbe, 0x2d, 0x11, 0x4a, 0x53, 0x5e, 0x32, 0xb5, 0xa8,
0xb7, 0x0c, 0x40, 0x6b, 0x2a, 0x17, 0x4c, 0x10, 0x2c, 0x13, 0x81, 0x85, 0xb1, 0xab, 0x50, 0xc3,
0x63, 0xcb, 0xd8, 0x0f, 0xfa, 0x6d, 0xa6, 0x4f, 0x4f, 0x1a, 0xc3, 0x36, 0xd4, 0x6f, 0xba, 0x0c,
0x5a, 0xa1, 0x55, 0xb1, 0x30, 0x5c, 0x1b, 0x5d, 0x26, 0x21, 0x5a, 0x15, 0x3b, 0x6a, 0x81, 0x6e,
0x0a, 0x6c, 0xab, 0xdf, 0x97, 0xbc, 0xa9, 0x8f, 0xd1, 0x19, 0x57, 0x39, 0x16, 0x57, 0x95, 0xec,
0x6e, 0xa5, 0x7c, 0x77, 0x5f, 0xba, 0x06, 0xee, 0x2e, 0x34, 0x0e, 0x8c, 0x8c, 0x75, 0x62, 0x72,
0x95, 0xab, 0x2e, 0x05, 0xc3, 0x40, 0x8c, 0xe1, 0x54, 0xcc, 0xe1, 0xb8, 0x7f, 0xe0, 0x88, 0xa4,
0x5f, 0x3d, 0x7c, 0xd1, 0xb7, 0x0b, 0x4d, 0x1d, 0xec, 0xc8, 0x72, 0xc9, 0x2c, 0x0c, 0x69, 0x68,
0x28, 0xdd, 0xe8, 0xf8, 0x38, 0xe1, 0x2a, 0xf3, 0xc3, 0xc2, 0x90, 0x43, 0xd1, 0xc7, 0x41, 0x7f,
0x21, 0x10, 0x3d, 0x24, 0x32, 0x03, 0xa4, 0x80, 0xa3, 0x9e, 0x8d, 0xf9, 0x29, 0x8f, 0x13, 0x2d,
0x5a, 0xba, 0xac, 0x53, 0xde, 0xf2, 0xab, 0xbc, 0x09, 0x35, 0xdd, 0xae, 0xad, 0x42, 0x14, 0xa5,
0xae, 0x47, 0x55, 0x45, 0x5e, 0xbf, 0x35, 0x68, 0xa1, 0x36, 0x8b, 0x15, 0xec, 0x26, 0xb0, 0xe3,
0x20, 0xce, 0x93, 0xcf, 0x10, 0x79, 0x49, 0x8d, 0xfb, 0x14, 0x56, 0x64, 0x97, 0xa6, 0x73, 0x63,
0x6f, 0xa2, 0x73, 0x11, 0x23, 0x57, 0x8a, 0x8c, 0xec, 0xfe, 0x87, 0x03, 0xf3, 0x72, 0xa7, 0x0b,
0xaf, 0x1e, 0xc4, 0x3e, 0x5b, 0x18, 0x6b, 0x5b, 0x49, 0xeb, 0xc4, 0xf5, 0x52, 0x75, 0x15, 0x14,
0xd4, 0x4c, 0x99, 0x82, 0x62, 0x50, 0x1d, 0xfb, 0xe9, 0x09, 0x9d, 0x65, 0xeb, 0x1e, 0xfd, 0x66,
0x2d, 0x11, 0x79, 0x11, 0x8a, 0x90, 0xa2, 0x2e, 0x65, 0xef, 0x3b, 0x84, 0xbd, 0x2d, 0xbe, 0xef,
0xb8, 0x02, 0x75, 0x1a, 0x40, 0x37, 0x0b, 0xac, 0x64, 0x00, 0x72, 0xae, 0x28, 0x90, 0x84, 0xc9,
0xd4, 0xd2, 0x0c, 0x71, 0xd7, 0xc4, 0xce, 0xcb, 0x25, 0xd0, 0xf7, 0x5d, 0x32, 0xc5, 0x30, 0x83,
0x33, 0x8e, 0x90, 0x03, 0xc8, 0x73, 0x84, 0x24, 0xf5, 0x74, 0xbd, 0xdb, 0x81, 0xf6, 0x0e, 0x1f,
0xf2, 0x94, 0x6f, 0x0d, 0x87, 0xf9, 0xf6, 0x5f, 0x83, 0xcb, 0x25, 0x75, 0xd2, 0x9f, 0xfd, 0x22,
0xac, 0x6d, 0x89, 0x74, 0xac, 0x9f, 0x56, 0xce, 0x82, 0xdb, 0x86, 0xf5, 0x7c, 0x93, 0xb2, 0xb3,
0x7b, 0xb0, 0xbc, 0xc3, 0x8f, 0x26, 0x83, 0x7d, 0x7e, 0x9a, 0x75, 0xc4, 0xa0, 0x9a, 0x9c, 0x44,
0x67, 0x52, 0x30, 0xe9, 0x37, 0x7b, 0x1d, 0x60, 0x88, 0x34, 0xdd, 0x64, 0xcc, 0x7b, 0x2a, 0x85,
0x9c, 0x90, 0xc3, 0x31, 0xef, 0xb9, 0xef, 0x01, 0x33, 0xdb, 0x91, 0xeb, 0x85, 0xf6, 0x68, 0x72,
0xd4, 0x4d, 0xa6, 0x49, 0xca, 0x47, 0x2a, 0x37, 0xde, 0x84, 0xdc, 0xeb, 0xd0, 0x3c, 0xf0, 0xa7,
0x1e, 0xff, 0x86, 0x7c, 0xec, 0xb2, 0x01, 0xf3, 0x63, 0x7f, 0x8a, 0x6a, 0x4a, 0x47, 0x7c, 0xa8,
0xda, 0xfd, 0xb7, 0x0a, 0xcc, 0x09, 0x4a, 0x6c, 0xb5, 0xcf, 0x93, 0x34, 0x08, 0xc5, 0xed, 0xaf,
0x6c, 0xd5, 0x80, 0x0a, 0xac, 0x5c, 0x29, 0x61, 0x65, 0x79, 0x6a, 0x52, 0xe9, 0xb8, 0x92, 0x5f,
0x2d, 0x0c, 0x99, 0x2b, 0xcb, 0xeb, 0x11, 0x21, 0x87, 0x0c, 0xc8, 0x05, 0x07, 0x33, 0xab, 0x27,
0xc6, 0xa7, 0xa4, 0x54, 0x72, 0xae, 0x09, 0x95, 0xda, 0xd6, 0x79, 0xc1, 0xe0, 0x05, 0xdb, 0x5a,
0xb0, 0xa1, 0xb5, 0x57, 0xb0, 0xa1, 0xe2, 0x28, 0xf5, 0x32, 0x1b, 0x0a, 0xaf, 0x60, 0x43, 0x5d,
0x06, 0xad, 0x7b, 0x9c, 0x7b, 0x1c, 0xbd, 0x33, 0xc5, 0xbb, 0xdf, 0x71, 0xa0, 0x25, 0xb9, 0x48,
0xd7, 0xb1, 0x37, 0x2d, 0x2f, 0xb4, 0x34, 0x69, 0xf6, 0x2d, 0x58, 0x20, 0xdf, 0x50, 0x47, 0x41,
0x65, 0xc8, 0xd6, 0x02, 0x71, 0x1e, 0xea, 0xaa, 0x6a, 0x14, 0x0c, 0xe5, 0xa6, 0x98, 0x90, 0x0a,
0xa4, 0xc6, 0xbe, 0x4c, 0xa2, 0x71, 0x3c, 0x5d, 0x76, 0xff, 0xd4, 0x81, 0x65, 0x63, 0xc0, 0x92,
0x0b, 0x3f, 0x04, 0x25, 0x0d, 0x22, 0x24, 0x2a, 0x24, 0x77, 0xc3, 0x16, 0x9b, 0xec, 0x33, 0x8b,
0x98, 0x36, 0xd3, 0x9f, 0xd2, 0x00, 0x93, 0xc9, 0x48, 0x2a, 0x51, 0x13, 0x42, 0x46, 0x3a, 0xe3,
0xfc, 0x99, 0x26, 0x11, 0x6a, 0xdc, 0xc2, 0x28, 0x41, 0x03, 0x7d, 0x5a, 0x4d, 0x24, 0xec, 0x99,
0x0d, 0xba, 0x7f, 0xeb, 0xc0, 0x8a, 0x38, 0x9c, 0xc8, 0xa3, 0x9f, 0x7e, 0xd1, 0x30, 0x27, 0x4e,
0x63, 0x42, 0x22, 0xf7, 0x2e, 0x79, 0xb2, 0xcc, 0x3e, 0xf3, 0x8a, 0x07, 0x2a, 0x9d, 0x98, 0x73,
0xce, 0x5e, 0xcc, 0x94, 0xed, 0xc5, 0x4b, 0x56, 0xba, 0x2c, 0x04, 0x38, 0x5b, 0x1a, 0x02, 0xbc,
0x3b, 0x0f, 0xb3, 0x49, 0x2f, 0x1a, 0x73, 0x77, 0x1d, 0x56, 0xed, 0xc9, 0x49, 0x15, 0xf4, 0x5d,
0x07, 0xda, 0xf7, 0x44, 0xa8, 0x3c, 0x08, 0x07, 0x7b, 0x41, 0x92, 0x46, 0xb1, 0x7e, 0xdd, 0x75,
0x15, 0x20, 0x49, 0xfd, 0x38, 0x15, 0xe9, 0x96, 0x32, 0x40, 0x97, 0x21, 0x38, 0x46, 0x1e, 0xf6,
0x45, 0xad, 0xd8, 0x1b, 0x5d, 0x2e, 0xf8, 0x10, 0xf2, 0xf8, 0x64, 0x59, 0xe2, 0xb7, 0x45, 0xa6,
0x1b, 0xfa, 0x0a, 0xfc, 0x94, 0xf4, 0xba, 0x38, 0x97, 0xe4, 0x50, 0xf7, 0x8f, 0x1c, 0x58, 0xca,
0x06, 0xb9, 0x8b, 0xa0, 0xad, 0x1d, 0xa4, 0xf9, 0xcd, 0xb4, 0x83, 0x0a, 0x1d, 0x06, 0x68, 0x8f,
0xe5, 0xd8, 0x0c, 0x84, 0x24, 0x56, 0x96, 0xa2, 0x89, 0x72, 0x70, 0x4c, 0x48, 0x64, 0x8d, 0xa0,
0x27, 0x20, 0xbd, 0x1a, 0x59, 0xa2, 0x6c, 0xd9, 0x51, 0x4a, 0x5f, 0xcd, 0x89, 0x83, 0x99, 0x2c,
0x2a, 0x53, 0x3a, 0x4f, 0x28, 0xfe, 0x74, 0xbf, 0xed, 0xc0, 0xe5, 0x92, 0xc5, 0x95, 0x92, 0xb1,
0x03, 0xcb, 0xc7, 0xba, 0x52, 0x2d, 0x80, 0x10, 0x8f, 0x75, 0x75, 0xb7, 0x63, 0x4f, 0xda, 0x2b,
0x7e, 0xa0, 0x7d, 0x1f, 0xb1, 0xa4, 0x56, 0xf2, 0x56, 0xb1, 0x62, 0xf3, 0x73, 0xd0, 0x30, 0x9e,
0x55, 0xb1, 0x0d, 0x58, 0x79, 0xfa, 0xe0, 0xf1, 0xc3, 0xdd, 0xc3, 0xc3, 0xee, 0xc1, 0x93, 0xbb,
0x5f, 0xd8, 0xfd, 0x72, 0x77, 0x6f, 0xeb, 0x70, 0xaf, 0x75, 0x89, 0xad, 0x03, 0x7b, 0xb8, 0x7b,
0xf8, 0x78, 0x77, 0xc7, 0xc2, 0x9d, 0x3b, 0xbf, 0x39, 0x03, 0x8b, 0xe2, 0xce, 0x50, 0xbc, 0x5d,
0xe7, 0x31, 0xfb, 0x08, 0xe6, 0xe5, 0x7f, 0x0f, 0xb0, 0x35, 0x39, 0x6c, 0xfb, 0xdf, 0x0e, 0x3a,
0xeb, 0x79, 0x58, 0xf2, 0xde, 0xca, 0x2f, 0xfd, 0xf0, 0x1f, 0x7e, 0xab, 0xb2, 0xc0, 0x1a, 0xb7,
0x4e, 0xdf, 0xbd, 0x35, 0xe0, 0x61, 0x82, 0x6d, 0xfc, 0x2c, 0x40, 0xf6, 0x2a, 0x9f, 0xb5, 0xb5,
0xcf, 0x97, 0xfb, 0xbb, 0x81, 0xce, 0xe5, 0x92, 0x1a, 0xd9, 0xee, 0x65, 0x6a, 0x77, 0xc5, 0x5d,
0xc4, 0x76, 0x83, 0x30, 0x48, 0xc5, 0x13, 0xfd, 0x0f, 0x9c, 0x4d, 0xd6, 0x87, 0xa6, 0xf9, 0xe8,
0x9e, 0xa9, 0xd0, 0x4f, 0xc9, 0x93, 0xff, 0xce, 0x6b, 0xa5, 0x75, 0x2a, 0xee, 0x45, 0x7d, 0xac,
0xb9, 0x2d, 0xec, 0x63, 0x42, 0x14, 0x59, 0x2f, 0x43, 0x58, 0xb4, 0xdf, 0xd6, 0xb3, 0x2b, 0x86,
0x5a, 0x28, 0xbc, 0xec, 0xef, 0xbc, 0x7e, 0x4e, 0xad, 0xec, 0xeb, 0x75, 0xea, 0x6b, 0xc3, 0x65,
0xd8, 0x57, 0x8f, 0x68, 0xd4, 0xcb, 0xfe, 0x0f, 0x9c, 0xcd, 0x3b, 0xff, 0xfa, 0x06, 0xd4, 0x75,
0xb0, 0x96, 0x7d, 0x1d, 0x16, 0xac, 0x4b, 0x5d, 0xa6, 0xa6, 0x51, 0x76, 0x07, 0xdc, 0xb9, 0x52,
0x5e, 0x29, 0x3b, 0xbe, 0x4a, 0x1d, 0xb7, 0xd9, 0x3a, 0x76, 0x2c, 0x6f, 0x45, 0x6f, 0xd1, 0x55,
0xb6, 0xc8, 0xe5, 0x7d, 0x26, 0xe6, 0x99, 0x5d, 0xc4, 0x5a, 0xf3, 0x2c, 0x5c, 0xdc, 0x5a, 0xf3,
0x2c, 0xde, 0xde, 0xba, 0x57, 0xa8, 0xbb, 0x75, 0xb6, 0x6a, 0x76, 0xa7, 0x83, 0xa8, 0x9c, 0xb2,
0xaf, 0xcd, 0xa7, 0xe8, 0xec, 0x75, 0xcd, 0x58, 0x65, 0x4f, 0xd4, 0x35, 0x8b, 0x14, 0xdf, 0xa9,
0xbb, 0x6d, 0xea, 0x8a, 0x31, 0xda, 0x3e, 0xf3, 0x25, 0x3a, 0xfb, 0x2a, 0xd4, 0xf5, 0x9b, 0x4a,
0xb6, 0x61, 0x3c, 0x64, 0x35, 0x1f, 0x7a, 0x76, 0xda, 0xc5, 0x8a, 0x32, 0xc6, 0x30, 0x5b, 0x46,
0xc6, 0x78, 0x0a, 0x0d, 0xe3, 0xdd, 0x24, 0xbb, 0xac, 0x43, 0xed, 0xf9, 0xb7, 0x99, 0x9d, 0x4e,
0x59, 0x95, 0xec, 0x62, 0x99, 0xba, 0x68, 0xb0, 0x3a, 0xf1, 0x5e, 0xfa, 0x3c, 0x4a, 0xd8, 0x3e,
0xac, 0xc9, 0xc3, 0xc9, 0x11, 0xff, 0x51, 0x96, 0xa8, 0xe4, 0x65, 0xfe, 0x6d, 0x87, 0x7d, 0x08,
0x35, 0xf5, 0x06, 0x96, 0xad, 0x97, 0xbf, 0xe5, 0xed, 0x6c, 0x14, 0x70, 0xa9, 0xd6, 0xbe, 0x0c,
0x90, 0x3d, 0xd2, 0xd4, 0x02, 0x5c, 0x78, 0xf4, 0xa9, 0x77, 0xa7, 0xf8, 0xa2, 0xd3, 0x5d, 0xa7,
0x09, 0xb6, 0x18, 0x09, 0x70, 0xc8, 0xcf, 0xd4, 0x7b, 0x84, 0xaf, 0x41, 0xc3, 0x78, 0xa7, 0xa9,
0x97, 0xaf, 0xf8, 0xc6, 0x53, 0x2f, 0x5f, 0xc9, 0xb3, 0x4e, 0xb7, 0x43, 0xad, 0xaf, 0xba, 0x4b,
0xd8, 0x7a, 0x12, 0x0c, 0xc2, 0x91, 0x20, 0xc0, 0x0d, 0x3a, 0x81, 0x05, 0xeb, 0x31, 0xa6, 0x96,
0x9e, 0xb2, 0xa7, 0x9e, 0x5a, 0x7a, 0x4a, 0xdf, 0x6f, 0x2a, 0x76, 0x76, 0x97, 0xb1, 0x9f, 0x53,
0x22, 0x31, 0x7a, 0xfa, 0x0a, 0x34, 0x8c, 0x87, 0x95, 0xcc, 0xc8, 0x9f, 0xcc, 0x3d, 0xa9, 0xd4,
0x73, 0x29, 0x7b, 0x87, 0xb9, 0x4a, 0x7d, 0x2c, 0xba, 0xc4, 0x0a, 0x94, 0xce, 0x8f, 0x6d, 0x7f,
0x1d, 0x16, 0xed, 0xa7, 0x96, 0x5a, 0x2e, 0x4b, 0x1f, 0x6d, 0x6a, 0xb9, 0x3c, 0xe7, 0x7d, 0xa6,
0x64, 0xe9, 0xcd, 0x15, 0xdd, 0xc9, 0xad, 0x8f, 0xe5, 0xd5, 0xe9, 0x0b, 0xf6, 0x45, 0x54, 0x3e,
0xf2, 0x7d, 0x05, 0xdb, 0x30, 0xb8, 0xd6, 0x7c, 0x85, 0xa1, 0xe5, 0xa5, 0xf0, 0x14, 0xc3, 0x66,
0x66, 0xf1, 0x20, 0x81, 0x2c, 0x0a, 0xbd, 0xb3, 0x30, 0x2c, 0x8a, 0xf9, 0x14, 0xc3, 0xb0, 0x28,
0xd6, 0x73, 0x8c, 0xbc, 0x45, 0x49, 0x03, 0x6c, 0x23, 0x84, 0xa5, 0x5c, 0x02, 0x91, 0x96, 0x8a,
0xf2, 0x8c, 0xcb, 0xce, 0xd5, 0x97, 0xe7, 0x1d, 0xd9, 0x8a, 0x4a, 0x29, 0xa8, 0x5b, 0x2a, 0x41,
0xf6, 0xe7, 0xa0, 0x69, 0x3e, 0x91, 0x63, 0xa6, 0x28, 0xe7, 0x7b, 0x7a, 0xad, 0xb4, 0xce, 0xde,
0x5c, 0xd6, 0x34, 0xbb, 0xc1, 0xcd, 0xb5, 0xdf, 0x08, 0x65, 0x4a, 0xb7, 0xec, 0x69, 0x54, 0xa6,
0x74, 0x4b, 0x1f, 0x16, 0xa9, 0xcd, 0x65, 0x2b, 0xd6, 0x5c, 0x44, 0x94, 0x9b, 0x7d, 0x05, 0x96,
0x8c, 0xec, 0xbc, 0xc3, 0x69, 0xd8, 0xd3, 0x8c, 0x5a, 0xcc, 0x03, 0xef, 0x94, 0xf9, 0xbe, 0xee,
0x06, 0xb5, 0xbf, 0xec, 0x5a, 0x93, 0x40, 0x26, 0xdd, 0x86, 0x86, 0x99, 0xf9, 0xf7, 0x92, 0x76,
0x37, 0x8c, 0x2a, 0x33, 0x8d, 0xf9, 0xb6, 0xc3, 0x7e, 0xc7, 0x81, 0xa6, 0x95, 0x47, 0x67, 0xdd,
0xe5, 0xe4, 0xda, 0x69, 0x9b, 0x75, 0x66, 0x43, 0xae, 0x47, 0x83, 0xdc, 0xdf, 0xfc, 0xff, 0xd6,
0x22, 0x7c, 0x6c, 0x9d, 0xa1, 0x6e, 0xe6, 0xff, 0x84, 0xe1, 0x45, 0x9e, 0xc0, 0xcc, 0x95, 0x7f,
0x71, 0xdb, 0x61, 0xdf, 0x77, 0x60, 0xd1, 0x3e, 0xf9, 0xeb, 0xad, 0x2a, 0x8d, 0x31, 0xe8, 0xad,
0x3a, 0x27, 0x5c, 0xf0, 0x15, 0x1a, 0xe5, 0xe3, 0x4d, 0xcf, 0x1a, 0xa5, 0x7c, 0x3d, 0xf6, 0x93,
0x8d, 0x96, 0x7d, 0x20, 0xfe, 0x36, 0x45, 0x85, 0xa3, 0x98, 0xa1, 0xdd, 0xf3, 0xdb, 0x6b, 0xfe,
0x67, 0xc8, 0x0d, 0xe7, 0xb6, 0xc3, 0xbe, 0x26, 0xfe, 0x17, 0x42, 0x7e, 0x4b, 0x5c, 0xf2, 0xaa,
0xdf, 0xbb, 0x6f, 0xd1, 0x9c, 0xae, 0xba, 0x97, 0xad, 0x39, 0xe5, 0xed, 0xe6, 0x96, 0x18, 0x9d,
0xfc, 0xbb, 0x8f, 0x4c, 0xf1, 0x17, 0xfe, 0x02, 0xe4, 0xfc, 0x41, 0x8e, 0xc4, 0x20, 0x25, 0xb9,
0xc5, 0xca, 0xaf, 0xd8, 0x8c, 0xbb, 0x49, 0x63, 0x7d, 0xcb, 0x7d, 0xe3, 0xdc, 0xb1, 0xde, 0xa2,
0xf3, 0x3b, 0x8e, 0xf8, 0x00, 0x20, 0x0b, 0x1d, 0xb3, 0x5c, 0xe8, 0x52, 0xdb, 0xbe, 0x62, 0x74,
0xd9, 0x96, 0x17, 0x15, 0xe1, 0xc4, 0x16, 0xbf, 0x2a, 0xd4, 0xca, 0x03, 0x15, 0xf4, 0x34, 0x9d,
0x07, 0x3b, 0xc6, 0x6b, 0x39, 0x0f, 0xf9, 0xf6, 0x2d, 0xa5, 0xa2, 0x23, 0xa8, 0x4f, 0x60, 0x61,
0x3f, 0x8a, 0x9e, 0x4d, 0xc6, 0xfa, 0x22, 0xc6, 0x0e, 0xad, 0xed, 0xf9, 0xc9, 0x49, 0x27, 0x37,
0x0b, 0xf7, 0x1a, 0x35, 0xd5, 0x61, 0x6d, 0xa3, 0xa9, 0x5b, 0x1f, 0x67, 0xa1, 0xe9, 0x17, 0xcc,
0x87, 0x65, 0xed, 0x96, 0xe8, 0x81, 0x77, 0xec, 0x66, 0xcc, 0xa0, 0x6a, 0xa1, 0x0b, 0xcb, 0x03,
0x55, 0xa3, 0xbd, 0x95, 0xa8, 0x36, 0x6f, 0x3b, 0xec, 0x00, 0x9a, 0x3b, 0xbc, 0x17, 0xf5, 0xb9,
0x8c, 0x4f, 0xad, 0x64, 0x03, 0xd7, 0x81, 0xad, 0xce, 0x82, 0x05, 0xda, 0xfa, 0x7b, 0xec, 0x4f,
0x63, 0xfe, 0x8d, 0x5b, 0x1f, 0xcb, 0xc8, 0xd7, 0x0b, 0xa5, 0xbf, 0x55, 0x68, 0xd0, 0xd2, 0xdf,
0xb9, 0x58, 0xa2, 0xa5, 0xbf, 0x0b, 0xb1, 0x44, 0x6b, 0xa9, 0x55, 0x68, 0x92, 0x0d, 0x61, 0xb9,
0x10, 0x7e, 0x64, 0x6f, 0x28, 0x0b, 0x7c, 0x4e, 0xd0, 0xb2, 0x73, 0xed, 0x7c, 0x02, 0xbb, 0xb7,
0x4d, 0xbb, 0xb7, 0x43, 0x58, 0xd8, 0xe1, 0x62, 0xb1, 0x44, 0xb6, 0x47, 0xee, 0xd9, 0xa8, 0x99,
0x4b, 0x92, 0x57, 0xe0, 0x54, 0x67, 0x1b, 0x68, 0x4a, 0xb5, 0x60, 0x5f, 0x85, 0xc6, 0x7d, 0x9e,
0xaa, 0xf4, 0x0e, 0xed, 0x22, 0xe6, 0xf2, 0x3d, 0x3a, 0x25, 0xd9, 0x21, 0x36, 0xcf, 0x50, 0x6b,
0xb7, 0x78, 0x7f, 0xc0, 0x85, 0x72, 0xea, 0x06, 0xfd, 0x17, 0xec, 0x67, 0xa8, 0x71, 0x9d, 0x5f,
0xb6, 0x6e, 0x64, 0x05, 0x98, 0x8d, 0x2f, 0xe5, 0xf0, 0xb2, 0x96, 0xc3, 0xa8, 0xcf, 0x0d, 0x57,
0x25, 0x84, 0x86, 0x91, 0x16, 0xa9, 0x05, 0xa8, 0x98, 0xe2, 0xa9, 0x05, 0xa8, 0x24, 0x8b, 0xd2,
0xbd, 0x41, 0xfd, 0xb8, 0xec, 0x5a, 0xd6, 0x8f, 0xc8, 0x9c, 0xcc, 0x7a, 0xba, 0xf5, 0xb1, 0x3f,
0x4a, 0x5f, 0xb0, 0xa7, 0xf4, 0x84, 0xd4, 0x4c, 0x61, 0xc9, 0x7c, 0xde, 0x7c, 0xb6, 0x8b, 0x5e,
0x2c, 0xa3, 0xca, 0xf6, 0x83, 0x45, 0x57, 0xe4, 0xd1, 0x7c, 0x06, 0xe0, 0x30, 0x8d, 0xc6, 0x3b,
0x3e, 0x1f, 0x45, 0x61, 0xa6, 0x6b, 0xb3, 0x34, 0x8d, 0x4c, 0x7f, 0x19, 0xb9, 0x1a, 0xec, 0xa9,
0x71, 0x48, 0xb0, 0x32, 0x80, 0x14, 0x73, 0x9d, 0x9b, 0xc9, 0xa1, 0x17, 0xa4, 0x24, 0x9b, 0xe3,
0xb6, 0xc3, 0xb6, 0x00, 0xb2, 0xf8, 0xb3, 0x76, 0xf9, 0x0b, 0xa1, 0x6d, 0xad, 0xf6, 0x4a, 0x82,
0xd5, 0x07, 0x50, 0xcf, 0x02, 0x9a, 0x1b, 0x59, 0x6a, 0xab, 0x15, 0xfe, 0xd4, 0x16, 0xbc, 0x10,
0x66, 0x74, 0x5b, 0xb4, 0x54, 0xc0, 0x6a, 0xb8, 0x54, 0x14, 0x3b, 0x0c, 0x60, 0x45, 0x0c, 0x50,
0xbb, 0x23, 0x94, 0x78, 0xa0, 0x66, 0x52, 0x12, 0xea, 0xd3, 0xd2, 0x5c, 0x1a, 0x29, 0xb3, 0xa2,
0x0a, 0xc8, 0xad, 0x22, 0xe9, 0x01, 0x55, 0xf3, 0x08, 0x96, 0x0b, 0x61, 0x1e, 0x2d, 0xd2, 0xe7,
0x45, 0xd7, 0xb4, 0x48, 0x9f, 0x1b, 0x21, 0x72, 0xd7, 0xa8, 0xcb, 0x25, 0x17, 0xe8, 0xa4, 0x72,
0x16, 0xa4, 0xbd, 0x93, 0x0f, 0x9c, 0xcd, 0xa3, 0x39, 0xfa, 0x5b, 0xc9, 0x4f, 0xfd, 0x57, 0x00,
0x00, 0x00, 0xff, 0xff, 0x4f, 0xaa, 0x41, 0x44, 0x88, 0x52, 0x00, 0x00,
}

@ -124,6 +124,23 @@ func request_Lightning_SendCoins_0(ctx context.Context, marshaler runtime.Marsha
}
var (
filter_Lightning_ListUnspent_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_Lightning_ListUnspent_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListUnspentRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_ListUnspent_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ListUnspent(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
var (
filter_Lightning_NewAddress_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
@ -1018,6 +1035,35 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
})
mux.Handle("GET", pattern_Lightning_ListUnspent_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx)
defer cancel()
if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) {
select {
case <-done:
case <-closed:
cancel()
}
}(ctx.Done(), cn.CloseNotify())
}
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_ListUnspent_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ListUnspent_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_NewAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx)
defer cancel()
@ -1900,6 +1946,8 @@ var (
pattern_Lightning_SendCoins_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "transactions"}, ""))
pattern_Lightning_ListUnspent_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "utxos"}, ""))
pattern_Lightning_NewAddress_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "newaddress"}, ""))
pattern_Lightning_SignMessage_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "signmessage"}, ""))
@ -1970,6 +2018,8 @@ var (
forward_Lightning_SendCoins_0 = runtime.ForwardResponseMessage
forward_Lightning_ListUnspent_0 = runtime.ForwardResponseMessage
forward_Lightning_NewAddress_0 = runtime.ForwardResponseMessage
forward_Lightning_SignMessage_0 = runtime.ForwardResponseMessage

@ -231,6 +231,16 @@ service Lightning {
};
}
/** lncli: `listunspent`
ListUnspent returns a list of all utxos spendable by the wallet with a
number of confirmations between the specified minimum and maximum.
*/
rpc ListUnspent (ListUnspentRequest) returns (ListUnspentResponse) {
option (google.api.http) = {
get: "/v1/utxos"
};
}
/**
SubscribeTransactions creates a uni-directional stream from the server to
the client in which any newly discovered transactions relevant to the
@ -657,6 +667,28 @@ service Lightning {
};
}
message Utxo {
/// The type of address
AddressType type = 1 [json_name = "address_type"];
/// The address
string address = 2 [json_name = "address"];
/// The value of the unspent coin in satoshis
int64 amount_sat = 3 [json_name = "amount_sat"];
/// The scriptpubkey in hex
string script_pubkey = 4 [json_name = "script_pubkey"];
/// The outpoint in format txid:n
/// Note that this reuses the `ChannelPoint` message but
/// is not actually a channel related outpoint, of course
ChannelPoint outpoint = 5 [json_name = "outpoint"];
/// The number of confirmations for the Utxo
int64 confirmations = 6 [json_name = "confirmations"];
}
message Transaction {
/// The transaction hash
string tx_hash = 1 [ json_name = "tx_hash" ];
@ -808,18 +840,31 @@ message SendCoinsResponse {
string txid = 1 [json_name = "txid"];
}
message ListUnspentRequest {
/// The minimum number of confirmations to be included.
int32 min_confs = 1;
/// The maximum number of confirmations to be included.
int32 max_confs = 2;
}
message ListUnspentResponse {
/// A list of utxos
repeated Utxo utxos = 1 [json_name = "utxos"];
}
/**
`AddressType` has to be one of:
- `p2wkh`: Pay to witness key hash (`WITNESS_PUBKEY_HASH` = 0)
- `np2wkh`: Pay to nested witness key hash (`NESTED_PUBKEY_HASH` = 1)
*/
message NewAddressRequest {
enum AddressType {
enum AddressType {
WITNESS_PUBKEY_HASH = 0;
NESTED_PUBKEY_HASH = 1;
}
}
message NewAddressRequest {
/// The address type
AddressType type = 1;
}

@ -1051,6 +1051,41 @@
]
}
},
"/v1/utxos": {
"get": {
"summary": "* lncli: `listunspent`\nListUnspent returns a list of all utxos spendable by the wallet with a\nnumber of confirmations between the specified minimum and maximum.",
"operationId": "ListUnspent",
"responses": {
"200": {
"description": "",
"schema": {
"$ref": "#/definitions/lnrpcListUnspentResponse"
}
}
},
"parameters": [
{
"name": "min_confs",
"description": "/ The minimum number of confirmations to be included.",
"in": "query",
"required": false,
"type": "integer",
"format": "int32"
},
{
"name": "max_confs",
"description": "/ The maximum number of confirmations to be included.",
"in": "query",
"required": false,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Lightning"
]
}
},
"/v1/verifymessage": {
"post": {
"summary": "* lncli: `verifymessage`\nVerifyMessage verifies a signature over a msg. The signature must be\nzbase32 encoded and signed by an active node in the resident node's\nchannel database. In addition to returning the validity of the signature,\nVerifyMessage also returns the recovered pubkey from the signature.",
@ -1231,6 +1266,16 @@
}
}
},
"lnrpcAddressType": {
"type": "string",
"enum": [
"WITNESS_PUBKEY_HASH",
"NESTED_PUBKEY_HASH"
],
"default": "WITNESS_PUBKEY_HASH",
"description": "- `p2wkh`: Pay to witness key hash (`WITNESS_PUBKEY_HASH` = 0)\n- `np2wkh`: Pay to nested witness key hash (`NESTED_PUBKEY_HASH` = 1)",
"title": "* \n`AddressType` has to be one of:"
},
"lnrpcChangePasswordRequest": {
"type": "object",
"properties": {
@ -2194,6 +2239,18 @@
}
}
},
"lnrpcListUnspentResponse": {
"type": "object",
"properties": {
"utxos": {
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcUtxo"
},
"title": "/ A list of utxos"
}
}
},
"lnrpcNetworkInfo": {
"type": "object",
"properties": {
@ -2919,6 +2976,37 @@
"lnrpcUnlockWalletResponse": {
"type": "object"
},
"lnrpcUtxo": {
"type": "object",
"properties": {
"type": {
"$ref": "#/definitions/lnrpcAddressType",
"title": "/ The type of address"
},
"address": {
"type": "string",
"title": "/ The address"
},
"amount_sat": {
"type": "string",
"format": "int64",
"title": "/ The value of the unspent coin in satoshis"
},
"script_pubkey": {
"type": "string",
"title": "/ The scriptpubkey in hex"
},
"outpoint": {
"$ref": "#/definitions/lnrpcChannelPoint",
"title": "/ The outpoint in format txid:n\n/ Note that this reuses the `ChannelPoint` message but\n/ is not actually a channel related outpoint, of course"
},
"confirmations": {
"type": "string",
"format": "int64",
"title": "/ The number of confirmations for the Utxo"
}
}
},
"lnrpcVerifyMessageRequest": {
"type": "object",
"properties": {

@ -173,7 +173,7 @@ func (n *NetworkHarness) SetUp(lndArgs []string) error {
// each.
ctxb := context.Background()
addrReq := &lnrpc.NewAddressRequest{
Type: lnrpc.NewAddressRequest_WITNESS_PUBKEY_HASH,
Type: lnrpc.AddressType_WITNESS_PUBKEY_HASH,
}
clients := []lnrpc.LightningClient{n.Alice, n.Bob}
for _, client := range clients {
@ -1200,7 +1200,7 @@ func (n *NetworkHarness) SendCoins(ctx context.Context, amt btcutil.Amount,
target *HarnessNode) error {
return n.sendCoins(
ctx, amt, target, lnrpc.NewAddressRequest_WITNESS_PUBKEY_HASH,
ctx, amt, target, lnrpc.AddressType_WITNESS_PUBKEY_HASH,
true,
)
}
@ -1212,7 +1212,7 @@ func (n *NetworkHarness) SendCoinsUnconfirmed(ctx context.Context,
amt btcutil.Amount, target *HarnessNode) error {
return n.sendCoins(
ctx, amt, target, lnrpc.NewAddressRequest_WITNESS_PUBKEY_HASH,
ctx, amt, target, lnrpc.AddressType_WITNESS_PUBKEY_HASH,
false,
)
}
@ -1223,7 +1223,7 @@ func (n *NetworkHarness) SendCoinsNP2WKH(ctx context.Context,
amt btcutil.Amount, target *HarnessNode) error {
return n.sendCoins(
ctx, amt, target, lnrpc.NewAddressRequest_NESTED_PUBKEY_HASH,
ctx, amt, target, lnrpc.AddressType_NESTED_PUBKEY_HASH,
true,
)
}
@ -1232,7 +1232,7 @@ func (n *NetworkHarness) SendCoinsNP2WKH(ctx context.Context,
// targeted lightning node. The confirmed boolean indicates whether the
// transaction that pays to the target should confirm.
func (n *NetworkHarness) sendCoins(ctx context.Context, amt btcutil.Amount,
target *HarnessNode, addrType lnrpc.NewAddressRequest_AddressType,
target *HarnessNode, addrType lnrpc.AddressType,
confirmed bool) error {
balReq := &lnrpc.WalletBalanceRequest{}

@ -349,6 +349,7 @@ func (b *BtcWallet) ListUnspentWitness(minConfs, maxConfs int32) (
Hash: *txid,
Index: output.Vout,
},
Confirmations: output.Confirmations,
}
witnessOutputs = append(witnessOutputs, utxo)
}

@ -52,6 +52,7 @@ var (
type Utxo struct {
AddressType AddressType
Value btcutil.Amount
Confirmations int64
PkScript []byte
RedeemScript []byte
WitnessScript []byte

@ -163,6 +163,10 @@ var (
Entity: "onchain",
Action: "write",
}},
"/lnrpc.Lightning/ListUnspent": {{
Entity: "onchain",
Action: "read",
}},
"/lnrpc.Lightning/SendMany": {{
Entity: "onchain",
Action: "write",
@ -680,6 +684,87 @@ func determineFeePerKw(feeEstimator lnwallet.FeeEstimator, targetConf int32,
}
}
// ListUnspent returns useful information about each unspent output
// owned by the wallet, as reported by the underlying `ListUnspentWitness`;
// the information returned is: outpoint, amount in satoshis, address,
// address type, scriptPubKey in hex and number of confirmations.
// The result is filtered to contain outputs whose number of confirmations
// is between a minimum and maximum number of confirmations specified by the
// user, with 0 meaning unconfirmed.
func (r *rpcServer) ListUnspent(ctx context.Context,
in *lnrpc.ListUnspentRequest) (*lnrpc.ListUnspentResponse, error) {
minConfs := in.MinConfs
maxConfs := in.MaxConfs
if minConfs < 0 {
return nil, fmt.Errorf("min confirmations must be >= 0")
}
if minConfs > maxConfs {
return nil, fmt.Errorf("max confirmations must be >= min " +
"confirmations")
}
utxos, err := r.server.cc.wallet.ListUnspentWitness(minConfs, maxConfs)
if err != nil {
return nil, err
}
resp := &lnrpc.ListUnspentResponse{Utxos: []*lnrpc.Utxo{}}
for _, utxo := range utxos {
// Translate lnwallet address type to gRPC proto address type:
var addrType lnrpc.AddressType
switch utxo.AddressType {
case lnwallet.WitnessPubKey:
addrType = lnrpc.AddressType_WITNESS_PUBKEY_HASH
case lnwallet.NestedWitnessPubKey:
addrType = lnrpc.AddressType_NESTED_PUBKEY_HASH
case lnwallet.UnknownAddressType:
rpcsLog.Warnf("[listunspent] utxo with address of unknown "+
"type ignored: %v", utxo.OutPoint.String())
continue
default:
return nil, fmt.Errorf("invalid utxo address type")
}
outpoint := &lnrpc.ChannelPoint{
FundingTxid: &lnrpc.ChannelPoint_FundingTxidStr{
FundingTxidStr: utxo.OutPoint.Hash.String(),
},
OutputIndex: utxo.OutPoint.Index,
}
utxoResp := lnrpc.Utxo{
Type: addrType,
AmountSat: int64(utxo.Value),
ScriptPubkey: hex.EncodeToString(utxo.PkScript),
Outpoint: outpoint,
Confirmations: utxo.Confirmations,
}
_, outAddresses, _, err := txscript.ExtractPkScriptAddrs(
utxo.PkScript, activeNetParams.Params)
if err != nil {
return nil, err
}
if len(outAddresses) != 1 {
return nil, fmt.Errorf("an output was unexpectedly multisig")
}
utxoResp.Address = outAddresses[0].String()
resp.Utxos = append(resp.Utxos, &utxoResp)
}
maxStr := ""
if maxConfs != math.MaxInt32 {
maxStr = " max=" + fmt.Sprintf("%d", maxConfs)
}
rpcsLog.Debugf("[listunspent] min=%v%v, generated utxos: %v",
minConfs, maxStr, utxos)
return resp, nil
}
// SendCoins executes a request to send coins to a particular address. Unlike
// SendMany, this RPC call only allows creating a single output at a time.
func (r *rpcServer) SendCoins(ctx context.Context,
@ -743,9 +828,9 @@ func (r *rpcServer) NewAddress(ctx context.Context,
// available address types.
var addrType lnwallet.AddressType
switch in.Type {
case lnrpc.NewAddressRequest_WITNESS_PUBKEY_HASH:
case lnrpc.AddressType_WITNESS_PUBKEY_HASH:
addrType = lnwallet.WitnessPubKey
case lnrpc.NewAddressRequest_NESTED_PUBKEY_HASH:
case lnrpc.AddressType_NESTED_PUBKEY_HASH:
addrType = lnwallet.NestedWitnessPubKey
}