Merge pull request #1228 from halseth/fee-estimation-rpc

Fee estimation RPC
This commit is contained in:
Olaoluwa Osuntokun 2019-03-18 16:08:26 -07:00 committed by GitHub
commit 158a32c4e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 1181 additions and 567 deletions

@ -144,6 +144,52 @@ func newAddress(ctx *cli.Context) error {
return nil
}
var estimateFeeCommand = cli.Command{
Name: "estimatefee",
Category: "On-chain",
Usage: "Get fee estimates for sending bitcoin on-chain to multiple addresses.",
ArgsUsage: "send-json-string [--conf_target=N]",
Description: `
Get fee estimates for sending a transaction paying the specified amount(s) to the passed address(es).
The send-json-string' param decodes addresses and the amount to send respectively in the following format:
'{"ExampleAddr": NumCoinsInSatoshis, "SecondAddr": NumCoins}'
`,
Flags: []cli.Flag{
cli.Int64Flag{
Name: "conf_target",
Usage: "(optional) the number of blocks that the transaction *should* " +
"confirm in",
},
},
Action: actionDecorator(estimateFees),
}
func estimateFees(ctx *cli.Context) error {
var amountToAddr map[string]int64
jsonMap := ctx.Args().First()
if err := json.Unmarshal([]byte(jsonMap), &amountToAddr); err != nil {
return err
}
ctxb := context.Background()
client, cleanUp := getClient(ctx)
defer cleanUp()
resp, err := client.EstimateFee(ctxb, &lnrpc.EstimateFeeRequest{
AddrToAmount: amountToAddr,
TargetConf: int32(ctx.Int64("conf_target")),
})
if err != nil {
return err
}
printRespJSON(resp)
return nil
}
var sendCoinsCommand = cli.Command{
Name: "sendcoins",
Category: "On-chain",

@ -257,6 +257,7 @@ func main() {
unlockCommand,
changePasswordCommand,
newAddressCommand,
estimateFeeCommand,
sendManyCommand,
sendCoinsCommand,
listUnspentCommand,

@ -55,7 +55,7 @@ func (x AddressType) String() string {
return proto.EnumName(AddressType_name, int32(x))
}
func (AddressType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{0}
return fileDescriptor_rpc_373041af9a5aff0b, []int{0}
}
type ChannelCloseSummary_ClosureType int32
@ -90,7 +90,7 @@ func (x ChannelCloseSummary_ClosureType) String() string {
return proto.EnumName(ChannelCloseSummary_ClosureType_name, int32(x))
}
func (ChannelCloseSummary_ClosureType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{39, 0}
return fileDescriptor_rpc_373041af9a5aff0b, []int{41, 0}
}
type ChannelEventUpdate_UpdateType int32
@ -119,7 +119,7 @@ func (x ChannelEventUpdate_UpdateType) String() string {
return proto.EnumName(ChannelEventUpdate_UpdateType_name, int32(x))
}
func (ChannelEventUpdate_UpdateType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{60, 0}
return fileDescriptor_rpc_373041af9a5aff0b, []int{62, 0}
}
type Invoice_InvoiceState int32
@ -148,7 +148,7 @@ func (x Invoice_InvoiceState) String() string {
return proto.EnumName(Invoice_InvoiceState_name, int32(x))
}
func (Invoice_InvoiceState) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{90, 0}
return fileDescriptor_rpc_373041af9a5aff0b, []int{92, 0}
}
type GenSeedRequest struct {
@ -169,7 +169,7 @@ func (m *GenSeedRequest) Reset() { *m = GenSeedRequest{} }
func (m *GenSeedRequest) String() string { return proto.CompactTextString(m) }
func (*GenSeedRequest) ProtoMessage() {}
func (*GenSeedRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{0}
return fileDescriptor_rpc_373041af9a5aff0b, []int{0}
}
func (m *GenSeedRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GenSeedRequest.Unmarshal(m, b)
@ -224,7 +224,7 @@ func (m *GenSeedResponse) Reset() { *m = GenSeedResponse{} }
func (m *GenSeedResponse) String() string { return proto.CompactTextString(m) }
func (*GenSeedResponse) ProtoMessage() {}
func (*GenSeedResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{1}
return fileDescriptor_rpc_373041af9a5aff0b, []int{1}
}
func (m *GenSeedResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GenSeedResponse.Unmarshal(m, b)
@ -289,7 +289,7 @@ func (m *InitWalletRequest) Reset() { *m = InitWalletRequest{} }
func (m *InitWalletRequest) String() string { return proto.CompactTextString(m) }
func (*InitWalletRequest) ProtoMessage() {}
func (*InitWalletRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{2}
return fileDescriptor_rpc_373041af9a5aff0b, []int{2}
}
func (m *InitWalletRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InitWalletRequest.Unmarshal(m, b)
@ -347,7 +347,7 @@ func (m *InitWalletResponse) Reset() { *m = InitWalletResponse{} }
func (m *InitWalletResponse) String() string { return proto.CompactTextString(m) }
func (*InitWalletResponse) ProtoMessage() {}
func (*InitWalletResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{3}
return fileDescriptor_rpc_373041af9a5aff0b, []int{3}
}
func (m *InitWalletResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InitWalletResponse.Unmarshal(m, b)
@ -389,7 +389,7 @@ func (m *UnlockWalletRequest) Reset() { *m = UnlockWalletRequest{} }
func (m *UnlockWalletRequest) String() string { return proto.CompactTextString(m) }
func (*UnlockWalletRequest) ProtoMessage() {}
func (*UnlockWalletRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{4}
return fileDescriptor_rpc_373041af9a5aff0b, []int{4}
}
func (m *UnlockWalletRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UnlockWalletRequest.Unmarshal(m, b)
@ -433,7 +433,7 @@ func (m *UnlockWalletResponse) Reset() { *m = UnlockWalletResponse{} }
func (m *UnlockWalletResponse) String() string { return proto.CompactTextString(m) }
func (*UnlockWalletResponse) ProtoMessage() {}
func (*UnlockWalletResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{5}
return fileDescriptor_rpc_373041af9a5aff0b, []int{5}
}
func (m *UnlockWalletResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UnlockWalletResponse.Unmarshal(m, b)
@ -471,7 +471,7 @@ func (m *ChangePasswordRequest) Reset() { *m = ChangePasswordRequest{} }
func (m *ChangePasswordRequest) String() string { return proto.CompactTextString(m) }
func (*ChangePasswordRequest) ProtoMessage() {}
func (*ChangePasswordRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{6}
return fileDescriptor_rpc_373041af9a5aff0b, []int{6}
}
func (m *ChangePasswordRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChangePasswordRequest.Unmarshal(m, b)
@ -515,7 +515,7 @@ func (m *ChangePasswordResponse) Reset() { *m = ChangePasswordResponse{}
func (m *ChangePasswordResponse) String() string { return proto.CompactTextString(m) }
func (*ChangePasswordResponse) ProtoMessage() {}
func (*ChangePasswordResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{7}
return fileDescriptor_rpc_373041af9a5aff0b, []int{7}
}
func (m *ChangePasswordResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChangePasswordResponse.Unmarshal(m, b)
@ -557,7 +557,7 @@ func (m *Utxo) Reset() { *m = Utxo{} }
func (m *Utxo) String() string { return proto.CompactTextString(m) }
func (*Utxo) ProtoMessage() {}
func (*Utxo) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{8}
return fileDescriptor_rpc_373041af9a5aff0b, []int{8}
}
func (m *Utxo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Utxo.Unmarshal(m, b)
@ -645,7 +645,7 @@ func (m *Transaction) Reset() { *m = Transaction{} }
func (m *Transaction) String() string { return proto.CompactTextString(m) }
func (*Transaction) ProtoMessage() {}
func (*Transaction) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{9}
return fileDescriptor_rpc_373041af9a5aff0b, []int{9}
}
func (m *Transaction) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Transaction.Unmarshal(m, b)
@ -731,7 +731,7 @@ func (m *GetTransactionsRequest) Reset() { *m = GetTransactionsRequest{}
func (m *GetTransactionsRequest) String() string { return proto.CompactTextString(m) }
func (*GetTransactionsRequest) ProtoMessage() {}
func (*GetTransactionsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{10}
return fileDescriptor_rpc_373041af9a5aff0b, []int{10}
}
func (m *GetTransactionsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetTransactionsRequest.Unmarshal(m, b)
@ -763,7 +763,7 @@ func (m *TransactionDetails) Reset() { *m = TransactionDetails{} }
func (m *TransactionDetails) String() string { return proto.CompactTextString(m) }
func (*TransactionDetails) ProtoMessage() {}
func (*TransactionDetails) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{11}
return fileDescriptor_rpc_373041af9a5aff0b, []int{11}
}
func (m *TransactionDetails) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TransactionDetails.Unmarshal(m, b)
@ -804,7 +804,7 @@ func (m *FeeLimit) Reset() { *m = FeeLimit{} }
func (m *FeeLimit) String() string { return proto.CompactTextString(m) }
func (*FeeLimit) ProtoMessage() {}
func (*FeeLimit) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{12}
return fileDescriptor_rpc_373041af9a5aff0b, []int{12}
}
func (m *FeeLimit) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FeeLimit.Unmarshal(m, b)
@ -964,7 +964,7 @@ func (m *SendRequest) Reset() { *m = SendRequest{} }
func (m *SendRequest) String() string { return proto.CompactTextString(m) }
func (*SendRequest) ProtoMessage() {}
func (*SendRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{13}
return fileDescriptor_rpc_373041af9a5aff0b, []int{13}
}
func (m *SendRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SendRequest.Unmarshal(m, b)
@ -1061,7 +1061,7 @@ func (m *SendResponse) Reset() { *m = SendResponse{} }
func (m *SendResponse) String() string { return proto.CompactTextString(m) }
func (*SendResponse) ProtoMessage() {}
func (*SendResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{14}
return fileDescriptor_rpc_373041af9a5aff0b, []int{14}
}
func (m *SendResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SendResponse.Unmarshal(m, b)
@ -1131,7 +1131,7 @@ func (m *SendToRouteRequest) Reset() { *m = SendToRouteRequest{} }
func (m *SendToRouteRequest) String() string { return proto.CompactTextString(m) }
func (*SendToRouteRequest) ProtoMessage() {}
func (*SendToRouteRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{15}
return fileDescriptor_rpc_373041af9a5aff0b, []int{15}
}
func (m *SendToRouteRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SendToRouteRequest.Unmarshal(m, b)
@ -1196,7 +1196,7 @@ func (m *ChannelPoint) Reset() { *m = ChannelPoint{} }
func (m *ChannelPoint) String() string { return proto.CompactTextString(m) }
func (*ChannelPoint) ProtoMessage() {}
func (*ChannelPoint) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{16}
return fileDescriptor_rpc_373041af9a5aff0b, []int{16}
}
func (m *ChannelPoint) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChannelPoint.Unmarshal(m, b)
@ -1342,7 +1342,7 @@ func (m *OutPoint) Reset() { *m = OutPoint{} }
func (m *OutPoint) String() string { return proto.CompactTextString(m) }
func (*OutPoint) ProtoMessage() {}
func (*OutPoint) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{17}
return fileDescriptor_rpc_373041af9a5aff0b, []int{17}
}
func (m *OutPoint) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_OutPoint.Unmarshal(m, b)
@ -1397,7 +1397,7 @@ func (m *LightningAddress) Reset() { *m = LightningAddress{} }
func (m *LightningAddress) String() string { return proto.CompactTextString(m) }
func (*LightningAddress) ProtoMessage() {}
func (*LightningAddress) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{18}
return fileDescriptor_rpc_373041af9a5aff0b, []int{18}
}
func (m *LightningAddress) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_LightningAddress.Unmarshal(m, b)
@ -1431,6 +1431,102 @@ func (m *LightningAddress) GetHost() string {
return ""
}
type EstimateFeeRequest struct {
// / The map from addresses to amounts for the transaction.
AddrToAmount map[string]int64 `protobuf:"bytes,1,rep,name=AddrToAmount,proto3" json:"AddrToAmount,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
// / The target number of blocks that this transaction should be confirmed by.
TargetConf int32 `protobuf:"varint,2,opt,name=target_conf,json=targetConf,proto3" json:"target_conf,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *EstimateFeeRequest) Reset() { *m = EstimateFeeRequest{} }
func (m *EstimateFeeRequest) String() string { return proto.CompactTextString(m) }
func (*EstimateFeeRequest) ProtoMessage() {}
func (*EstimateFeeRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_373041af9a5aff0b, []int{19}
}
func (m *EstimateFeeRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_EstimateFeeRequest.Unmarshal(m, b)
}
func (m *EstimateFeeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_EstimateFeeRequest.Marshal(b, m, deterministic)
}
func (dst *EstimateFeeRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_EstimateFeeRequest.Merge(dst, src)
}
func (m *EstimateFeeRequest) XXX_Size() int {
return xxx_messageInfo_EstimateFeeRequest.Size(m)
}
func (m *EstimateFeeRequest) XXX_DiscardUnknown() {
xxx_messageInfo_EstimateFeeRequest.DiscardUnknown(m)
}
var xxx_messageInfo_EstimateFeeRequest proto.InternalMessageInfo
func (m *EstimateFeeRequest) GetAddrToAmount() map[string]int64 {
if m != nil {
return m.AddrToAmount
}
return nil
}
func (m *EstimateFeeRequest) GetTargetConf() int32 {
if m != nil {
return m.TargetConf
}
return 0
}
type EstimateFeeResponse struct {
// / The total fee in satoshis.
FeeSat int64 `protobuf:"varint,1,opt,name=fee_sat,proto3" json:"fee_sat,omitempty"`
// / The fee rate in satoshi/byte.
FeerateSatPerByte int64 `protobuf:"varint,2,opt,name=feerate_sat_per_byte,proto3" json:"feerate_sat_per_byte,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *EstimateFeeResponse) Reset() { *m = EstimateFeeResponse{} }
func (m *EstimateFeeResponse) String() string { return proto.CompactTextString(m) }
func (*EstimateFeeResponse) ProtoMessage() {}
func (*EstimateFeeResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_373041af9a5aff0b, []int{20}
}
func (m *EstimateFeeResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_EstimateFeeResponse.Unmarshal(m, b)
}
func (m *EstimateFeeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_EstimateFeeResponse.Marshal(b, m, deterministic)
}
func (dst *EstimateFeeResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_EstimateFeeResponse.Merge(dst, src)
}
func (m *EstimateFeeResponse) XXX_Size() int {
return xxx_messageInfo_EstimateFeeResponse.Size(m)
}
func (m *EstimateFeeResponse) XXX_DiscardUnknown() {
xxx_messageInfo_EstimateFeeResponse.DiscardUnknown(m)
}
var xxx_messageInfo_EstimateFeeResponse proto.InternalMessageInfo
func (m *EstimateFeeResponse) GetFeeSat() int64 {
if m != nil {
return m.FeeSat
}
return 0
}
func (m *EstimateFeeResponse) GetFeerateSatPerByte() int64 {
if m != nil {
return m.FeerateSatPerByte
}
return 0
}
type SendManyRequest struct {
// / The map from addresses to amounts
AddrToAmount map[string]int64 `protobuf:"bytes,1,rep,name=AddrToAmount,proto3" json:"AddrToAmount,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
@ -1447,7 +1543,7 @@ func (m *SendManyRequest) Reset() { *m = SendManyRequest{} }
func (m *SendManyRequest) String() string { return proto.CompactTextString(m) }
func (*SendManyRequest) ProtoMessage() {}
func (*SendManyRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{19}
return fileDescriptor_rpc_373041af9a5aff0b, []int{21}
}
func (m *SendManyRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SendManyRequest.Unmarshal(m, b)
@ -1500,7 +1596,7 @@ func (m *SendManyResponse) Reset() { *m = SendManyResponse{} }
func (m *SendManyResponse) String() string { return proto.CompactTextString(m) }
func (*SendManyResponse) ProtoMessage() {}
func (*SendManyResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{20}
return fileDescriptor_rpc_373041af9a5aff0b, []int{22}
}
func (m *SendManyResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SendManyResponse.Unmarshal(m, b)
@ -1550,7 +1646,7 @@ func (m *SendCoinsRequest) Reset() { *m = SendCoinsRequest{} }
func (m *SendCoinsRequest) String() string { return proto.CompactTextString(m) }
func (*SendCoinsRequest) ProtoMessage() {}
func (*SendCoinsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{21}
return fileDescriptor_rpc_373041af9a5aff0b, []int{23}
}
func (m *SendCoinsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SendCoinsRequest.Unmarshal(m, b)
@ -1617,7 +1713,7 @@ func (m *SendCoinsResponse) Reset() { *m = SendCoinsResponse{} }
func (m *SendCoinsResponse) String() string { return proto.CompactTextString(m) }
func (*SendCoinsResponse) ProtoMessage() {}
func (*SendCoinsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{22}
return fileDescriptor_rpc_373041af9a5aff0b, []int{24}
}
func (m *SendCoinsResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SendCoinsResponse.Unmarshal(m, b)
@ -1658,7 +1754,7 @@ func (m *ListUnspentRequest) Reset() { *m = ListUnspentRequest{} }
func (m *ListUnspentRequest) String() string { return proto.CompactTextString(m) }
func (*ListUnspentRequest) ProtoMessage() {}
func (*ListUnspentRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{23}
return fileDescriptor_rpc_373041af9a5aff0b, []int{25}
}
func (m *ListUnspentRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListUnspentRequest.Unmarshal(m, b)
@ -1704,7 +1800,7 @@ func (m *ListUnspentResponse) Reset() { *m = ListUnspentResponse{} }
func (m *ListUnspentResponse) String() string { return proto.CompactTextString(m) }
func (*ListUnspentResponse) ProtoMessage() {}
func (*ListUnspentResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{24}
return fileDescriptor_rpc_373041af9a5aff0b, []int{26}
}
func (m *ListUnspentResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListUnspentResponse.Unmarshal(m, b)
@ -1743,7 +1839,7 @@ func (m *NewAddressRequest) Reset() { *m = NewAddressRequest{} }
func (m *NewAddressRequest) String() string { return proto.CompactTextString(m) }
func (*NewAddressRequest) ProtoMessage() {}
func (*NewAddressRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{25}
return fileDescriptor_rpc_373041af9a5aff0b, []int{27}
}
func (m *NewAddressRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NewAddressRequest.Unmarshal(m, b)
@ -1782,7 +1878,7 @@ func (m *NewAddressResponse) Reset() { *m = NewAddressResponse{} }
func (m *NewAddressResponse) String() string { return proto.CompactTextString(m) }
func (*NewAddressResponse) ProtoMessage() {}
func (*NewAddressResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{26}
return fileDescriptor_rpc_373041af9a5aff0b, []int{28}
}
func (m *NewAddressResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NewAddressResponse.Unmarshal(m, b)
@ -1821,7 +1917,7 @@ func (m *SignMessageRequest) Reset() { *m = SignMessageRequest{} }
func (m *SignMessageRequest) String() string { return proto.CompactTextString(m) }
func (*SignMessageRequest) ProtoMessage() {}
func (*SignMessageRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{27}
return fileDescriptor_rpc_373041af9a5aff0b, []int{29}
}
func (m *SignMessageRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SignMessageRequest.Unmarshal(m, b)
@ -1860,7 +1956,7 @@ func (m *SignMessageResponse) Reset() { *m = SignMessageResponse{} }
func (m *SignMessageResponse) String() string { return proto.CompactTextString(m) }
func (*SignMessageResponse) ProtoMessage() {}
func (*SignMessageResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{28}
return fileDescriptor_rpc_373041af9a5aff0b, []int{30}
}
func (m *SignMessageResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SignMessageResponse.Unmarshal(m, b)
@ -1901,7 +1997,7 @@ func (m *VerifyMessageRequest) Reset() { *m = VerifyMessageRequest{} }
func (m *VerifyMessageRequest) String() string { return proto.CompactTextString(m) }
func (*VerifyMessageRequest) ProtoMessage() {}
func (*VerifyMessageRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{29}
return fileDescriptor_rpc_373041af9a5aff0b, []int{31}
}
func (m *VerifyMessageRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_VerifyMessageRequest.Unmarshal(m, b)
@ -1949,7 +2045,7 @@ func (m *VerifyMessageResponse) Reset() { *m = VerifyMessageResponse{} }
func (m *VerifyMessageResponse) String() string { return proto.CompactTextString(m) }
func (*VerifyMessageResponse) ProtoMessage() {}
func (*VerifyMessageResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{30}
return fileDescriptor_rpc_373041af9a5aff0b, []int{32}
}
func (m *VerifyMessageResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_VerifyMessageResponse.Unmarshal(m, b)
@ -1998,7 +2094,7 @@ func (m *ConnectPeerRequest) Reset() { *m = ConnectPeerRequest{} }
func (m *ConnectPeerRequest) String() string { return proto.CompactTextString(m) }
func (*ConnectPeerRequest) ProtoMessage() {}
func (*ConnectPeerRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{31}
return fileDescriptor_rpc_373041af9a5aff0b, []int{33}
}
func (m *ConnectPeerRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ConnectPeerRequest.Unmarshal(m, b)
@ -2042,7 +2138,7 @@ func (m *ConnectPeerResponse) Reset() { *m = ConnectPeerResponse{} }
func (m *ConnectPeerResponse) String() string { return proto.CompactTextString(m) }
func (*ConnectPeerResponse) ProtoMessage() {}
func (*ConnectPeerResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{32}
return fileDescriptor_rpc_373041af9a5aff0b, []int{34}
}
func (m *ConnectPeerResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ConnectPeerResponse.Unmarshal(m, b)
@ -2074,7 +2170,7 @@ func (m *DisconnectPeerRequest) Reset() { *m = DisconnectPeerRequest{} }
func (m *DisconnectPeerRequest) String() string { return proto.CompactTextString(m) }
func (*DisconnectPeerRequest) ProtoMessage() {}
func (*DisconnectPeerRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{33}
return fileDescriptor_rpc_373041af9a5aff0b, []int{35}
}
func (m *DisconnectPeerRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DisconnectPeerRequest.Unmarshal(m, b)
@ -2111,7 +2207,7 @@ func (m *DisconnectPeerResponse) Reset() { *m = DisconnectPeerResponse{}
func (m *DisconnectPeerResponse) String() string { return proto.CompactTextString(m) }
func (*DisconnectPeerResponse) ProtoMessage() {}
func (*DisconnectPeerResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{34}
return fileDescriptor_rpc_373041af9a5aff0b, []int{36}
}
func (m *DisconnectPeerResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DisconnectPeerResponse.Unmarshal(m, b)
@ -2145,7 +2241,7 @@ func (m *HTLC) Reset() { *m = HTLC{} }
func (m *HTLC) String() string { return proto.CompactTextString(m) }
func (*HTLC) ProtoMessage() {}
func (*HTLC) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{35}
return fileDescriptor_rpc_373041af9a5aff0b, []int{37}
}
func (m *HTLC) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_HTLC.Unmarshal(m, b)
@ -2259,7 +2355,7 @@ func (m *Channel) Reset() { *m = Channel{} }
func (m *Channel) String() string { return proto.CompactTextString(m) }
func (*Channel) ProtoMessage() {}
func (*Channel) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{36}
return fileDescriptor_rpc_373041af9a5aff0b, []int{38}
}
func (m *Channel) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Channel.Unmarshal(m, b)
@ -2419,7 +2515,7 @@ func (m *ListChannelsRequest) Reset() { *m = ListChannelsRequest{} }
func (m *ListChannelsRequest) String() string { return proto.CompactTextString(m) }
func (*ListChannelsRequest) ProtoMessage() {}
func (*ListChannelsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{37}
return fileDescriptor_rpc_373041af9a5aff0b, []int{39}
}
func (m *ListChannelsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListChannelsRequest.Unmarshal(m, b)
@ -2479,7 +2575,7 @@ func (m *ListChannelsResponse) Reset() { *m = ListChannelsResponse{} }
func (m *ListChannelsResponse) String() string { return proto.CompactTextString(m) }
func (*ListChannelsResponse) ProtoMessage() {}
func (*ListChannelsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{38}
return fileDescriptor_rpc_373041af9a5aff0b, []int{40}
}
func (m *ListChannelsResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListChannelsResponse.Unmarshal(m, b)
@ -2536,7 +2632,7 @@ func (m *ChannelCloseSummary) Reset() { *m = ChannelCloseSummary{} }
func (m *ChannelCloseSummary) String() string { return proto.CompactTextString(m) }
func (*ChannelCloseSummary) ProtoMessage() {}
func (*ChannelCloseSummary) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{39}
return fileDescriptor_rpc_373041af9a5aff0b, []int{41}
}
func (m *ChannelCloseSummary) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChannelCloseSummary.Unmarshal(m, b)
@ -2642,7 +2738,7 @@ func (m *ClosedChannelsRequest) Reset() { *m = ClosedChannelsRequest{} }
func (m *ClosedChannelsRequest) String() string { return proto.CompactTextString(m) }
func (*ClosedChannelsRequest) ProtoMessage() {}
func (*ClosedChannelsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{40}
return fileDescriptor_rpc_373041af9a5aff0b, []int{42}
}
func (m *ClosedChannelsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ClosedChannelsRequest.Unmarshal(m, b)
@ -2715,7 +2811,7 @@ func (m *ClosedChannelsResponse) Reset() { *m = ClosedChannelsResponse{}
func (m *ClosedChannelsResponse) String() string { return proto.CompactTextString(m) }
func (*ClosedChannelsResponse) ProtoMessage() {}
func (*ClosedChannelsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{41}
return fileDescriptor_rpc_373041af9a5aff0b, []int{43}
}
func (m *ClosedChannelsResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ClosedChannelsResponse.Unmarshal(m, b)
@ -2768,7 +2864,7 @@ func (m *Peer) Reset() { *m = Peer{} }
func (m *Peer) String() string { return proto.CompactTextString(m) }
func (*Peer) ProtoMessage() {}
func (*Peer) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{42}
return fileDescriptor_rpc_373041af9a5aff0b, []int{44}
}
func (m *Peer) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Peer.Unmarshal(m, b)
@ -2854,7 +2950,7 @@ func (m *ListPeersRequest) Reset() { *m = ListPeersRequest{} }
func (m *ListPeersRequest) String() string { return proto.CompactTextString(m) }
func (*ListPeersRequest) ProtoMessage() {}
func (*ListPeersRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{43}
return fileDescriptor_rpc_373041af9a5aff0b, []int{45}
}
func (m *ListPeersRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListPeersRequest.Unmarshal(m, b)
@ -2886,7 +2982,7 @@ func (m *ListPeersResponse) Reset() { *m = ListPeersResponse{} }
func (m *ListPeersResponse) String() string { return proto.CompactTextString(m) }
func (*ListPeersResponse) ProtoMessage() {}
func (*ListPeersResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{44}
return fileDescriptor_rpc_373041af9a5aff0b, []int{46}
}
func (m *ListPeersResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListPeersResponse.Unmarshal(m, b)
@ -2923,7 +3019,7 @@ func (m *GetInfoRequest) Reset() { *m = GetInfoRequest{} }
func (m *GetInfoRequest) String() string { return proto.CompactTextString(m) }
func (*GetInfoRequest) ProtoMessage() {}
func (*GetInfoRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{45}
return fileDescriptor_rpc_373041af9a5aff0b, []int{47}
}
func (m *GetInfoRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetInfoRequest.Unmarshal(m, b)
@ -2983,7 +3079,7 @@ func (m *GetInfoResponse) Reset() { *m = GetInfoResponse{} }
func (m *GetInfoResponse) String() string { return proto.CompactTextString(m) }
func (*GetInfoResponse) ProtoMessage() {}
func (*GetInfoResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{46}
return fileDescriptor_rpc_373041af9a5aff0b, []int{48}
}
func (m *GetInfoResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetInfoResponse.Unmarshal(m, b)
@ -3116,7 +3212,7 @@ func (m *Chain) Reset() { *m = Chain{} }
func (m *Chain) String() string { return proto.CompactTextString(m) }
func (*Chain) ProtoMessage() {}
func (*Chain) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{47}
return fileDescriptor_rpc_373041af9a5aff0b, []int{49}
}
func (m *Chain) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Chain.Unmarshal(m, b)
@ -3163,7 +3259,7 @@ func (m *ConfirmationUpdate) Reset() { *m = ConfirmationUpdate{} }
func (m *ConfirmationUpdate) String() string { return proto.CompactTextString(m) }
func (*ConfirmationUpdate) ProtoMessage() {}
func (*ConfirmationUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{48}
return fileDescriptor_rpc_373041af9a5aff0b, []int{50}
}
func (m *ConfirmationUpdate) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ConfirmationUpdate.Unmarshal(m, b)
@ -3215,7 +3311,7 @@ func (m *ChannelOpenUpdate) Reset() { *m = ChannelOpenUpdate{} }
func (m *ChannelOpenUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelOpenUpdate) ProtoMessage() {}
func (*ChannelOpenUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{49}
return fileDescriptor_rpc_373041af9a5aff0b, []int{51}
}
func (m *ChannelOpenUpdate) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChannelOpenUpdate.Unmarshal(m, b)
@ -3254,7 +3350,7 @@ func (m *ChannelCloseUpdate) Reset() { *m = ChannelCloseUpdate{} }
func (m *ChannelCloseUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelCloseUpdate) ProtoMessage() {}
func (*ChannelCloseUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{50}
return fileDescriptor_rpc_373041af9a5aff0b, []int{52}
}
func (m *ChannelCloseUpdate) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChannelCloseUpdate.Unmarshal(m, b)
@ -3309,7 +3405,7 @@ func (m *CloseChannelRequest) Reset() { *m = CloseChannelRequest{} }
func (m *CloseChannelRequest) String() string { return proto.CompactTextString(m) }
func (*CloseChannelRequest) ProtoMessage() {}
func (*CloseChannelRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{51}
return fileDescriptor_rpc_373041af9a5aff0b, []int{53}
}
func (m *CloseChannelRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CloseChannelRequest.Unmarshal(m, b)
@ -3371,7 +3467,7 @@ func (m *CloseStatusUpdate) Reset() { *m = CloseStatusUpdate{} }
func (m *CloseStatusUpdate) String() string { return proto.CompactTextString(m) }
func (*CloseStatusUpdate) ProtoMessage() {}
func (*CloseStatusUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{52}
return fileDescriptor_rpc_373041af9a5aff0b, []int{54}
}
func (m *CloseStatusUpdate) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CloseStatusUpdate.Unmarshal(m, b)
@ -3514,7 +3610,7 @@ func (m *PendingUpdate) Reset() { *m = PendingUpdate{} }
func (m *PendingUpdate) String() string { return proto.CompactTextString(m) }
func (*PendingUpdate) ProtoMessage() {}
func (*PendingUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{53}
return fileDescriptor_rpc_373041af9a5aff0b, []int{55}
}
func (m *PendingUpdate) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PendingUpdate.Unmarshal(m, b)
@ -3580,7 +3676,7 @@ func (m *OpenChannelRequest) Reset() { *m = OpenChannelRequest{} }
func (m *OpenChannelRequest) String() string { return proto.CompactTextString(m) }
func (*OpenChannelRequest) ProtoMessage() {}
func (*OpenChannelRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{54}
return fileDescriptor_rpc_373041af9a5aff0b, []int{56}
}
func (m *OpenChannelRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_OpenChannelRequest.Unmarshal(m, b)
@ -3691,7 +3787,7 @@ func (m *OpenStatusUpdate) Reset() { *m = OpenStatusUpdate{} }
func (m *OpenStatusUpdate) String() string { return proto.CompactTextString(m) }
func (*OpenStatusUpdate) ProtoMessage() {}
func (*OpenStatusUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{55}
return fileDescriptor_rpc_373041af9a5aff0b, []int{57}
}
func (m *OpenStatusUpdate) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_OpenStatusUpdate.Unmarshal(m, b)
@ -3847,7 +3943,7 @@ func (m *PendingHTLC) Reset() { *m = PendingHTLC{} }
func (m *PendingHTLC) String() string { return proto.CompactTextString(m) }
func (*PendingHTLC) ProtoMessage() {}
func (*PendingHTLC) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{56}
return fileDescriptor_rpc_373041af9a5aff0b, []int{58}
}
func (m *PendingHTLC) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PendingHTLC.Unmarshal(m, b)
@ -3919,7 +4015,7 @@ func (m *PendingChannelsRequest) Reset() { *m = PendingChannelsRequest{}
func (m *PendingChannelsRequest) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsRequest) ProtoMessage() {}
func (*PendingChannelsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{57}
return fileDescriptor_rpc_373041af9a5aff0b, []int{59}
}
func (m *PendingChannelsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PendingChannelsRequest.Unmarshal(m, b)
@ -3959,7 +4055,7 @@ func (m *PendingChannelsResponse) Reset() { *m = PendingChannelsResponse
func (m *PendingChannelsResponse) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsResponse) ProtoMessage() {}
func (*PendingChannelsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{58}
return fileDescriptor_rpc_373041af9a5aff0b, []int{60}
}
func (m *PendingChannelsResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PendingChannelsResponse.Unmarshal(m, b)
@ -4031,7 +4127,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 fileDescriptor_rpc_1d2b968b4af573ab, []int{58, 0}
return fileDescriptor_rpc_373041af9a5aff0b, []int{60, 0}
}
func (m *PendingChannelsResponse_PendingChannel) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PendingChannelsResponse_PendingChannel.Unmarshal(m, b)
@ -4118,7 +4214,7 @@ func (m *PendingChannelsResponse_PendingOpenChannel) String() string {
}
func (*PendingChannelsResponse_PendingOpenChannel) ProtoMessage() {}
func (*PendingChannelsResponse_PendingOpenChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{58, 1}
return fileDescriptor_rpc_373041af9a5aff0b, []int{60, 1}
}
func (m *PendingChannelsResponse_PendingOpenChannel) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PendingChannelsResponse_PendingOpenChannel.Unmarshal(m, b)
@ -4191,7 +4287,7 @@ func (m *PendingChannelsResponse_WaitingCloseChannel) String() string {
}
func (*PendingChannelsResponse_WaitingCloseChannel) ProtoMessage() {}
func (*PendingChannelsResponse_WaitingCloseChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{58, 2}
return fileDescriptor_rpc_373041af9a5aff0b, []int{60, 2}
}
func (m *PendingChannelsResponse_WaitingCloseChannel) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PendingChannelsResponse_WaitingCloseChannel.Unmarshal(m, b)
@ -4239,7 +4335,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 fileDescriptor_rpc_1d2b968b4af573ab, []int{58, 3}
return fileDescriptor_rpc_373041af9a5aff0b, []int{60, 3}
}
func (m *PendingChannelsResponse_ClosedChannel) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PendingChannelsResponse_ClosedChannel.Unmarshal(m, b)
@ -4303,7 +4399,7 @@ func (m *PendingChannelsResponse_ForceClosedChannel) String() string {
}
func (*PendingChannelsResponse_ForceClosedChannel) ProtoMessage() {}
func (*PendingChannelsResponse_ForceClosedChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{58, 4}
return fileDescriptor_rpc_373041af9a5aff0b, []int{60, 4}
}
func (m *PendingChannelsResponse_ForceClosedChannel) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PendingChannelsResponse_ForceClosedChannel.Unmarshal(m, b)
@ -4382,7 +4478,7 @@ func (m *ChannelEventSubscription) Reset() { *m = ChannelEventSubscripti
func (m *ChannelEventSubscription) String() string { return proto.CompactTextString(m) }
func (*ChannelEventSubscription) ProtoMessage() {}
func (*ChannelEventSubscription) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{59}
return fileDescriptor_rpc_373041af9a5aff0b, []int{61}
}
func (m *ChannelEventSubscription) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChannelEventSubscription.Unmarshal(m, b)
@ -4419,7 +4515,7 @@ func (m *ChannelEventUpdate) Reset() { *m = ChannelEventUpdate{} }
func (m *ChannelEventUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelEventUpdate) ProtoMessage() {}
func (*ChannelEventUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{60}
return fileDescriptor_rpc_373041af9a5aff0b, []int{62}
}
func (m *ChannelEventUpdate) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChannelEventUpdate.Unmarshal(m, b)
@ -4631,7 +4727,7 @@ func (m *WalletBalanceRequest) Reset() { *m = WalletBalanceRequest{} }
func (m *WalletBalanceRequest) String() string { return proto.CompactTextString(m) }
func (*WalletBalanceRequest) ProtoMessage() {}
func (*WalletBalanceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{61}
return fileDescriptor_rpc_373041af9a5aff0b, []int{63}
}
func (m *WalletBalanceRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_WalletBalanceRequest.Unmarshal(m, b)
@ -4667,7 +4763,7 @@ func (m *WalletBalanceResponse) Reset() { *m = WalletBalanceResponse{} }
func (m *WalletBalanceResponse) String() string { return proto.CompactTextString(m) }
func (*WalletBalanceResponse) ProtoMessage() {}
func (*WalletBalanceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{62}
return fileDescriptor_rpc_373041af9a5aff0b, []int{64}
}
func (m *WalletBalanceResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_WalletBalanceResponse.Unmarshal(m, b)
@ -4718,7 +4814,7 @@ func (m *ChannelBalanceRequest) Reset() { *m = ChannelBalanceRequest{} }
func (m *ChannelBalanceRequest) String() string { return proto.CompactTextString(m) }
func (*ChannelBalanceRequest) ProtoMessage() {}
func (*ChannelBalanceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{63}
return fileDescriptor_rpc_373041af9a5aff0b, []int{65}
}
func (m *ChannelBalanceRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChannelBalanceRequest.Unmarshal(m, b)
@ -4752,7 +4848,7 @@ func (m *ChannelBalanceResponse) Reset() { *m = ChannelBalanceResponse{}
func (m *ChannelBalanceResponse) String() string { return proto.CompactTextString(m) }
func (*ChannelBalanceResponse) ProtoMessage() {}
func (*ChannelBalanceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{64}
return fileDescriptor_rpc_373041af9a5aff0b, []int{66}
}
func (m *ChannelBalanceResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChannelBalanceResponse.Unmarshal(m, b)
@ -4822,7 +4918,7 @@ func (m *QueryRoutesRequest) Reset() { *m = QueryRoutesRequest{} }
func (m *QueryRoutesRequest) String() string { return proto.CompactTextString(m) }
func (*QueryRoutesRequest) ProtoMessage() {}
func (*QueryRoutesRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{65}
return fileDescriptor_rpc_373041af9a5aff0b, []int{67}
}
func (m *QueryRoutesRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_QueryRoutesRequest.Unmarshal(m, b)
@ -4917,7 +5013,7 @@ func (m *EdgeLocator) Reset() { *m = EdgeLocator{} }
func (m *EdgeLocator) String() string { return proto.CompactTextString(m) }
func (*EdgeLocator) ProtoMessage() {}
func (*EdgeLocator) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{66}
return fileDescriptor_rpc_373041af9a5aff0b, []int{68}
}
func (m *EdgeLocator) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_EdgeLocator.Unmarshal(m, b)
@ -4962,7 +5058,7 @@ func (m *QueryRoutesResponse) Reset() { *m = QueryRoutesResponse{} }
func (m *QueryRoutesResponse) String() string { return proto.CompactTextString(m) }
func (*QueryRoutesResponse) ProtoMessage() {}
func (*QueryRoutesResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{67}
return fileDescriptor_rpc_373041af9a5aff0b, []int{69}
}
func (m *QueryRoutesResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_QueryRoutesResponse.Unmarshal(m, b)
@ -5014,7 +5110,7 @@ func (m *Hop) Reset() { *m = Hop{} }
func (m *Hop) String() string { return proto.CompactTextString(m) }
func (*Hop) ProtoMessage() {}
func (*Hop) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{68}
return fileDescriptor_rpc_373041af9a5aff0b, []int{70}
}
func (m *Hop) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Hop.Unmarshal(m, b)
@ -5135,7 +5231,7 @@ func (m *Route) Reset() { *m = Route{} }
func (m *Route) String() string { return proto.CompactTextString(m) }
func (*Route) ProtoMessage() {}
func (*Route) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{69}
return fileDescriptor_rpc_373041af9a5aff0b, []int{71}
}
func (m *Route) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Route.Unmarshal(m, b)
@ -5211,7 +5307,7 @@ func (m *NodeInfoRequest) Reset() { *m = NodeInfoRequest{} }
func (m *NodeInfoRequest) String() string { return proto.CompactTextString(m) }
func (*NodeInfoRequest) ProtoMessage() {}
func (*NodeInfoRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{70}
return fileDescriptor_rpc_373041af9a5aff0b, []int{72}
}
func (m *NodeInfoRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NodeInfoRequest.Unmarshal(m, b)
@ -5256,7 +5352,7 @@ func (m *NodeInfo) Reset() { *m = NodeInfo{} }
func (m *NodeInfo) String() string { return proto.CompactTextString(m) }
func (*NodeInfo) ProtoMessage() {}
func (*NodeInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{71}
return fileDescriptor_rpc_373041af9a5aff0b, []int{73}
}
func (m *NodeInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NodeInfo.Unmarshal(m, b)
@ -5317,7 +5413,7 @@ func (m *LightningNode) Reset() { *m = LightningNode{} }
func (m *LightningNode) String() string { return proto.CompactTextString(m) }
func (*LightningNode) ProtoMessage() {}
func (*LightningNode) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{72}
return fileDescriptor_rpc_373041af9a5aff0b, []int{74}
}
func (m *LightningNode) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_LightningNode.Unmarshal(m, b)
@ -5384,7 +5480,7 @@ func (m *NodeAddress) Reset() { *m = NodeAddress{} }
func (m *NodeAddress) String() string { return proto.CompactTextString(m) }
func (*NodeAddress) ProtoMessage() {}
func (*NodeAddress) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{73}
return fileDescriptor_rpc_373041af9a5aff0b, []int{75}
}
func (m *NodeAddress) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NodeAddress.Unmarshal(m, b)
@ -5434,7 +5530,7 @@ func (m *RoutingPolicy) Reset() { *m = RoutingPolicy{} }
func (m *RoutingPolicy) String() string { return proto.CompactTextString(m) }
func (*RoutingPolicy) ProtoMessage() {}
func (*RoutingPolicy) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{74}
return fileDescriptor_rpc_373041af9a5aff0b, []int{76}
}
func (m *RoutingPolicy) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RoutingPolicy.Unmarshal(m, b)
@ -5524,7 +5620,7 @@ func (m *ChannelEdge) Reset() { *m = ChannelEdge{} }
func (m *ChannelEdge) String() string { return proto.CompactTextString(m) }
func (*ChannelEdge) ProtoMessage() {}
func (*ChannelEdge) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{75}
return fileDescriptor_rpc_373041af9a5aff0b, []int{77}
}
func (m *ChannelEdge) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChannelEdge.Unmarshal(m, b)
@ -5615,7 +5711,7 @@ func (m *ChannelGraphRequest) Reset() { *m = ChannelGraphRequest{} }
func (m *ChannelGraphRequest) String() string { return proto.CompactTextString(m) }
func (*ChannelGraphRequest) ProtoMessage() {}
func (*ChannelGraphRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{76}
return fileDescriptor_rpc_373041af9a5aff0b, []int{78}
}
func (m *ChannelGraphRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChannelGraphRequest.Unmarshal(m, b)
@ -5657,7 +5753,7 @@ func (m *ChannelGraph) Reset() { *m = ChannelGraph{} }
func (m *ChannelGraph) String() string { return proto.CompactTextString(m) }
func (*ChannelGraph) ProtoMessage() {}
func (*ChannelGraph) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{77}
return fileDescriptor_rpc_373041af9a5aff0b, []int{79}
}
func (m *ChannelGraph) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChannelGraph.Unmarshal(m, b)
@ -5706,7 +5802,7 @@ func (m *ChanInfoRequest) Reset() { *m = ChanInfoRequest{} }
func (m *ChanInfoRequest) String() string { return proto.CompactTextString(m) }
func (*ChanInfoRequest) ProtoMessage() {}
func (*ChanInfoRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{78}
return fileDescriptor_rpc_373041af9a5aff0b, []int{80}
}
func (m *ChanInfoRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChanInfoRequest.Unmarshal(m, b)
@ -5743,7 +5839,7 @@ func (m *NetworkInfoRequest) Reset() { *m = NetworkInfoRequest{} }
func (m *NetworkInfoRequest) String() string { return proto.CompactTextString(m) }
func (*NetworkInfoRequest) ProtoMessage() {}
func (*NetworkInfoRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{79}
return fileDescriptor_rpc_373041af9a5aff0b, []int{81}
}
func (m *NetworkInfoRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NetworkInfoRequest.Unmarshal(m, b)
@ -5782,7 +5878,7 @@ func (m *NetworkInfo) Reset() { *m = NetworkInfo{} }
func (m *NetworkInfo) String() string { return proto.CompactTextString(m) }
func (*NetworkInfo) ProtoMessage() {}
func (*NetworkInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{80}
return fileDescriptor_rpc_373041af9a5aff0b, []int{82}
}
func (m *NetworkInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NetworkInfo.Unmarshal(m, b)
@ -5875,7 +5971,7 @@ func (m *StopRequest) Reset() { *m = StopRequest{} }
func (m *StopRequest) String() string { return proto.CompactTextString(m) }
func (*StopRequest) ProtoMessage() {}
func (*StopRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{81}
return fileDescriptor_rpc_373041af9a5aff0b, []int{83}
}
func (m *StopRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StopRequest.Unmarshal(m, b)
@ -5905,7 +6001,7 @@ func (m *StopResponse) Reset() { *m = StopResponse{} }
func (m *StopResponse) String() string { return proto.CompactTextString(m) }
func (*StopResponse) ProtoMessage() {}
func (*StopResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{82}
return fileDescriptor_rpc_373041af9a5aff0b, []int{84}
}
func (m *StopResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StopResponse.Unmarshal(m, b)
@ -5935,7 +6031,7 @@ func (m *GraphTopologySubscription) Reset() { *m = GraphTopologySubscrip
func (m *GraphTopologySubscription) String() string { return proto.CompactTextString(m) }
func (*GraphTopologySubscription) ProtoMessage() {}
func (*GraphTopologySubscription) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{83}
return fileDescriptor_rpc_373041af9a5aff0b, []int{85}
}
func (m *GraphTopologySubscription) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GraphTopologySubscription.Unmarshal(m, b)
@ -5968,7 +6064,7 @@ func (m *GraphTopologyUpdate) Reset() { *m = GraphTopologyUpdate{} }
func (m *GraphTopologyUpdate) String() string { return proto.CompactTextString(m) }
func (*GraphTopologyUpdate) ProtoMessage() {}
func (*GraphTopologyUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{84}
return fileDescriptor_rpc_373041af9a5aff0b, []int{86}
}
func (m *GraphTopologyUpdate) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GraphTopologyUpdate.Unmarshal(m, b)
@ -6023,7 +6119,7 @@ func (m *NodeUpdate) Reset() { *m = NodeUpdate{} }
func (m *NodeUpdate) String() string { return proto.CompactTextString(m) }
func (*NodeUpdate) ProtoMessage() {}
func (*NodeUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{85}
return fileDescriptor_rpc_373041af9a5aff0b, []int{87}
}
func (m *NodeUpdate) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NodeUpdate.Unmarshal(m, b)
@ -6091,7 +6187,7 @@ func (m *ChannelEdgeUpdate) Reset() { *m = ChannelEdgeUpdate{} }
func (m *ChannelEdgeUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelEdgeUpdate) ProtoMessage() {}
func (*ChannelEdgeUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{86}
return fileDescriptor_rpc_373041af9a5aff0b, []int{88}
}
func (m *ChannelEdgeUpdate) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChannelEdgeUpdate.Unmarshal(m, b)
@ -6171,7 +6267,7 @@ func (m *ClosedChannelUpdate) Reset() { *m = ClosedChannelUpdate{} }
func (m *ClosedChannelUpdate) String() string { return proto.CompactTextString(m) }
func (*ClosedChannelUpdate) ProtoMessage() {}
func (*ClosedChannelUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{87}
return fileDescriptor_rpc_373041af9a5aff0b, []int{89}
}
func (m *ClosedChannelUpdate) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ClosedChannelUpdate.Unmarshal(m, b)
@ -6241,7 +6337,7 @@ func (m *HopHint) Reset() { *m = HopHint{} }
func (m *HopHint) String() string { return proto.CompactTextString(m) }
func (*HopHint) ProtoMessage() {}
func (*HopHint) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{88}
return fileDescriptor_rpc_373041af9a5aff0b, []int{90}
}
func (m *HopHint) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_HopHint.Unmarshal(m, b)
@ -6310,7 +6406,7 @@ func (m *RouteHint) Reset() { *m = RouteHint{} }
func (m *RouteHint) String() string { return proto.CompactTextString(m) }
func (*RouteHint) ProtoMessage() {}
func (*RouteHint) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{89}
return fileDescriptor_rpc_373041af9a5aff0b, []int{91}
}
func (m *RouteHint) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RouteHint.Unmarshal(m, b)
@ -6425,7 +6521,7 @@ func (m *Invoice) Reset() { *m = Invoice{} }
func (m *Invoice) String() string { return proto.CompactTextString(m) }
func (*Invoice) ProtoMessage() {}
func (*Invoice) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{90}
return fileDescriptor_rpc_373041af9a5aff0b, []int{92}
}
func (m *Invoice) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Invoice.Unmarshal(m, b)
@ -6617,7 +6713,7 @@ func (m *AddInvoiceResponse) Reset() { *m = AddInvoiceResponse{} }
func (m *AddInvoiceResponse) String() string { return proto.CompactTextString(m) }
func (*AddInvoiceResponse) ProtoMessage() {}
func (*AddInvoiceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{91}
return fileDescriptor_rpc_373041af9a5aff0b, []int{93}
}
func (m *AddInvoiceResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AddInvoiceResponse.Unmarshal(m, b)
@ -6674,7 +6770,7 @@ func (m *PaymentHash) Reset() { *m = PaymentHash{} }
func (m *PaymentHash) String() string { return proto.CompactTextString(m) }
func (*PaymentHash) ProtoMessage() {}
func (*PaymentHash) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{92}
return fileDescriptor_rpc_373041af9a5aff0b, []int{94}
}
func (m *PaymentHash) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PaymentHash.Unmarshal(m, b)
@ -6730,7 +6826,7 @@ func (m *ListInvoiceRequest) Reset() { *m = ListInvoiceRequest{} }
func (m *ListInvoiceRequest) String() string { return proto.CompactTextString(m) }
func (*ListInvoiceRequest) ProtoMessage() {}
func (*ListInvoiceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{93}
return fileDescriptor_rpc_373041af9a5aff0b, []int{95}
}
func (m *ListInvoiceRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListInvoiceRequest.Unmarshal(m, b)
@ -6800,7 +6896,7 @@ func (m *ListInvoiceResponse) Reset() { *m = ListInvoiceResponse{} }
func (m *ListInvoiceResponse) String() string { return proto.CompactTextString(m) }
func (*ListInvoiceResponse) ProtoMessage() {}
func (*ListInvoiceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{94}
return fileDescriptor_rpc_373041af9a5aff0b, []int{96}
}
func (m *ListInvoiceResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListInvoiceResponse.Unmarshal(m, b)
@ -6863,7 +6959,7 @@ func (m *InvoiceSubscription) Reset() { *m = InvoiceSubscription{} }
func (m *InvoiceSubscription) String() string { return proto.CompactTextString(m) }
func (*InvoiceSubscription) ProtoMessage() {}
func (*InvoiceSubscription) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{95}
return fileDescriptor_rpc_373041af9a5aff0b, []int{97}
}
func (m *InvoiceSubscription) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InvoiceSubscription.Unmarshal(m, b)
@ -6923,7 +7019,7 @@ func (m *Payment) Reset() { *m = Payment{} }
func (m *Payment) String() string { return proto.CompactTextString(m) }
func (*Payment) ProtoMessage() {}
func (*Payment) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{96}
return fileDescriptor_rpc_373041af9a5aff0b, []int{98}
}
func (m *Payment) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Payment.Unmarshal(m, b)
@ -7010,7 +7106,7 @@ func (m *ListPaymentsRequest) Reset() { *m = ListPaymentsRequest{} }
func (m *ListPaymentsRequest) String() string { return proto.CompactTextString(m) }
func (*ListPaymentsRequest) ProtoMessage() {}
func (*ListPaymentsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{97}
return fileDescriptor_rpc_373041af9a5aff0b, []int{99}
}
func (m *ListPaymentsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListPaymentsRequest.Unmarshal(m, b)
@ -7042,7 +7138,7 @@ func (m *ListPaymentsResponse) Reset() { *m = ListPaymentsResponse{} }
func (m *ListPaymentsResponse) String() string { return proto.CompactTextString(m) }
func (*ListPaymentsResponse) ProtoMessage() {}
func (*ListPaymentsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{98}
return fileDescriptor_rpc_373041af9a5aff0b, []int{100}
}
func (m *ListPaymentsResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListPaymentsResponse.Unmarshal(m, b)
@ -7079,7 +7175,7 @@ func (m *DeleteAllPaymentsRequest) Reset() { *m = DeleteAllPaymentsReque
func (m *DeleteAllPaymentsRequest) String() string { return proto.CompactTextString(m) }
func (*DeleteAllPaymentsRequest) ProtoMessage() {}
func (*DeleteAllPaymentsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{99}
return fileDescriptor_rpc_373041af9a5aff0b, []int{101}
}
func (m *DeleteAllPaymentsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DeleteAllPaymentsRequest.Unmarshal(m, b)
@ -7109,7 +7205,7 @@ func (m *DeleteAllPaymentsResponse) Reset() { *m = DeleteAllPaymentsResp
func (m *DeleteAllPaymentsResponse) String() string { return proto.CompactTextString(m) }
func (*DeleteAllPaymentsResponse) ProtoMessage() {}
func (*DeleteAllPaymentsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{100}
return fileDescriptor_rpc_373041af9a5aff0b, []int{102}
}
func (m *DeleteAllPaymentsResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DeleteAllPaymentsResponse.Unmarshal(m, b)
@ -7140,7 +7236,7 @@ func (m *AbandonChannelRequest) Reset() { *m = AbandonChannelRequest{} }
func (m *AbandonChannelRequest) String() string { return proto.CompactTextString(m) }
func (*AbandonChannelRequest) ProtoMessage() {}
func (*AbandonChannelRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{101}
return fileDescriptor_rpc_373041af9a5aff0b, []int{103}
}
func (m *AbandonChannelRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AbandonChannelRequest.Unmarshal(m, b)
@ -7177,7 +7273,7 @@ func (m *AbandonChannelResponse) Reset() { *m = AbandonChannelResponse{}
func (m *AbandonChannelResponse) String() string { return proto.CompactTextString(m) }
func (*AbandonChannelResponse) ProtoMessage() {}
func (*AbandonChannelResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{102}
return fileDescriptor_rpc_373041af9a5aff0b, []int{104}
}
func (m *AbandonChannelResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AbandonChannelResponse.Unmarshal(m, b)
@ -7209,7 +7305,7 @@ func (m *DebugLevelRequest) Reset() { *m = DebugLevelRequest{} }
func (m *DebugLevelRequest) String() string { return proto.CompactTextString(m) }
func (*DebugLevelRequest) ProtoMessage() {}
func (*DebugLevelRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{103}
return fileDescriptor_rpc_373041af9a5aff0b, []int{105}
}
func (m *DebugLevelRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DebugLevelRequest.Unmarshal(m, b)
@ -7254,7 +7350,7 @@ func (m *DebugLevelResponse) Reset() { *m = DebugLevelResponse{} }
func (m *DebugLevelResponse) String() string { return proto.CompactTextString(m) }
func (*DebugLevelResponse) ProtoMessage() {}
func (*DebugLevelResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{104}
return fileDescriptor_rpc_373041af9a5aff0b, []int{106}
}
func (m *DebugLevelResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DebugLevelResponse.Unmarshal(m, b)
@ -7293,7 +7389,7 @@ func (m *PayReqString) Reset() { *m = PayReqString{} }
func (m *PayReqString) String() string { return proto.CompactTextString(m) }
func (*PayReqString) ProtoMessage() {}
func (*PayReqString) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{105}
return fileDescriptor_rpc_373041af9a5aff0b, []int{107}
}
func (m *PayReqString) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PayReqString.Unmarshal(m, b)
@ -7340,7 +7436,7 @@ func (m *PayReq) Reset() { *m = PayReq{} }
func (m *PayReq) String() string { return proto.CompactTextString(m) }
func (*PayReq) ProtoMessage() {}
func (*PayReq) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{106}
return fileDescriptor_rpc_373041af9a5aff0b, []int{108}
}
func (m *PayReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PayReq.Unmarshal(m, b)
@ -7440,7 +7536,7 @@ func (m *FeeReportRequest) Reset() { *m = FeeReportRequest{} }
func (m *FeeReportRequest) String() string { return proto.CompactTextString(m) }
func (*FeeReportRequest) ProtoMessage() {}
func (*FeeReportRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{107}
return fileDescriptor_rpc_373041af9a5aff0b, []int{109}
}
func (m *FeeReportRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FeeReportRequest.Unmarshal(m, b)
@ -7478,7 +7574,7 @@ func (m *ChannelFeeReport) Reset() { *m = ChannelFeeReport{} }
func (m *ChannelFeeReport) String() string { return proto.CompactTextString(m) }
func (*ChannelFeeReport) ProtoMessage() {}
func (*ChannelFeeReport) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{108}
return fileDescriptor_rpc_373041af9a5aff0b, []int{110}
}
func (m *ChannelFeeReport) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChannelFeeReport.Unmarshal(m, b)
@ -7544,7 +7640,7 @@ func (m *FeeReportResponse) Reset() { *m = FeeReportResponse{} }
func (m *FeeReportResponse) String() string { return proto.CompactTextString(m) }
func (*FeeReportResponse) ProtoMessage() {}
func (*FeeReportResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{109}
return fileDescriptor_rpc_373041af9a5aff0b, []int{111}
}
func (m *FeeReportResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FeeReportResponse.Unmarshal(m, b)
@ -7612,7 +7708,7 @@ func (m *PolicyUpdateRequest) Reset() { *m = PolicyUpdateRequest{} }
func (m *PolicyUpdateRequest) String() string { return proto.CompactTextString(m) }
func (*PolicyUpdateRequest) ProtoMessage() {}
func (*PolicyUpdateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{110}
return fileDescriptor_rpc_373041af9a5aff0b, []int{112}
}
func (m *PolicyUpdateRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PolicyUpdateRequest.Unmarshal(m, b)
@ -7773,7 +7869,7 @@ func (m *PolicyUpdateResponse) Reset() { *m = PolicyUpdateResponse{} }
func (m *PolicyUpdateResponse) String() string { return proto.CompactTextString(m) }
func (*PolicyUpdateResponse) ProtoMessage() {}
func (*PolicyUpdateResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{111}
return fileDescriptor_rpc_373041af9a5aff0b, []int{113}
}
func (m *PolicyUpdateResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PolicyUpdateResponse.Unmarshal(m, b)
@ -7811,7 +7907,7 @@ func (m *ForwardingHistoryRequest) Reset() { *m = ForwardingHistoryReque
func (m *ForwardingHistoryRequest) String() string { return proto.CompactTextString(m) }
func (*ForwardingHistoryRequest) ProtoMessage() {}
func (*ForwardingHistoryRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{112}
return fileDescriptor_rpc_373041af9a5aff0b, []int{114}
}
func (m *ForwardingHistoryRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ForwardingHistoryRequest.Unmarshal(m, b)
@ -7883,7 +7979,7 @@ func (m *ForwardingEvent) Reset() { *m = ForwardingEvent{} }
func (m *ForwardingEvent) String() string { return proto.CompactTextString(m) }
func (*ForwardingEvent) ProtoMessage() {}
func (*ForwardingEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{113}
return fileDescriptor_rpc_373041af9a5aff0b, []int{115}
}
func (m *ForwardingEvent) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ForwardingEvent.Unmarshal(m, b)
@ -7966,7 +8062,7 @@ func (m *ForwardingHistoryResponse) Reset() { *m = ForwardingHistoryResp
func (m *ForwardingHistoryResponse) String() string { return proto.CompactTextString(m) }
func (*ForwardingHistoryResponse) ProtoMessage() {}
func (*ForwardingHistoryResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_rpc_1d2b968b4af573ab, []int{114}
return fileDescriptor_rpc_373041af9a5aff0b, []int{116}
}
func (m *ForwardingHistoryResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ForwardingHistoryResponse.Unmarshal(m, b)
@ -8020,6 +8116,9 @@ func init() {
proto.RegisterType((*ChannelPoint)(nil), "lnrpc.ChannelPoint")
proto.RegisterType((*OutPoint)(nil), "lnrpc.OutPoint")
proto.RegisterType((*LightningAddress)(nil), "lnrpc.LightningAddress")
proto.RegisterType((*EstimateFeeRequest)(nil), "lnrpc.EstimateFeeRequest")
proto.RegisterMapType((map[string]int64)(nil), "lnrpc.EstimateFeeRequest.AddrToAmountEntry")
proto.RegisterType((*EstimateFeeResponse)(nil), "lnrpc.EstimateFeeResponse")
proto.RegisterType((*SendManyRequest)(nil), "lnrpc.SendManyRequest")
proto.RegisterMapType((map[string]int64)(nil), "lnrpc.SendManyRequest.AddrToAmountEntry")
proto.RegisterType((*SendManyResponse)(nil), "lnrpc.SendManyResponse")
@ -8372,6 +8471,10 @@ type LightningClient interface {
// GetTransactions returns a list describing all the known transactions
// relevant to the wallet.
GetTransactions(ctx context.Context, in *GetTransactionsRequest, opts ...grpc.CallOption) (*TransactionDetails, error)
// * lncli: `estimatefee`
// EstimateFee asks the chain backend to estimate the fee rate and total fees
// for a transaction that pays to multiple specified outputs.
EstimateFee(ctx context.Context, in *EstimateFeeRequest, opts ...grpc.CallOption) (*EstimateFeeResponse, error)
// * lncli: `sendcoins`
// 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. If
@ -8641,6 +8744,15 @@ func (c *lightningClient) GetTransactions(ctx context.Context, in *GetTransactio
return out, nil
}
func (c *lightningClient) EstimateFee(ctx context.Context, in *EstimateFeeRequest, opts ...grpc.CallOption) (*EstimateFeeResponse, error) {
out := new(EstimateFeeResponse)
err := c.cc.Invoke(ctx, "/lnrpc.Lightning/EstimateFee", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *lightningClient) SendCoins(ctx context.Context, in *SendCoinsRequest, opts ...grpc.CallOption) (*SendCoinsResponse, error) {
out := new(SendCoinsResponse)
err := c.cc.Invoke(ctx, "/lnrpc.Lightning/SendCoins", in, out, opts...)
@ -9207,6 +9319,10 @@ type LightningServer interface {
// GetTransactions returns a list describing all the known transactions
// relevant to the wallet.
GetTransactions(context.Context, *GetTransactionsRequest) (*TransactionDetails, error)
// * lncli: `estimatefee`
// EstimateFee asks the chain backend to estimate the fee rate and total fees
// for a transaction that pays to multiple specified outputs.
EstimateFee(context.Context, *EstimateFeeRequest) (*EstimateFeeResponse, error)
// * lncli: `sendcoins`
// 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. If
@ -9499,6 +9615,24 @@ func _Lightning_GetTransactions_Handler(srv interface{}, ctx context.Context, de
return interceptor(ctx, in, info, handler)
}
func _Lightning_EstimateFee_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(EstimateFeeRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(LightningServer).EstimateFee(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/lnrpc.Lightning/EstimateFee",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(LightningServer).EstimateFee(ctx, req.(*EstimateFeeRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Lightning_SendCoins_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(SendCoinsRequest)
if err := dec(in); err != nil {
@ -10287,6 +10421,10 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{
MethodName: "GetTransactions",
Handler: _Lightning_GetTransactions_Handler,
},
{
MethodName: "EstimateFee",
Handler: _Lightning_EstimateFee_Handler,
},
{
MethodName: "SendCoins",
Handler: _Lightning_SendCoins_Handler,
@ -10467,456 +10605,461 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{
Metadata: "rpc.proto",
}
func init() { proto.RegisterFile("rpc.proto", fileDescriptor_rpc_1d2b968b4af573ab) }
func init() { proto.RegisterFile("rpc.proto", fileDescriptor_rpc_373041af9a5aff0b) }
var fileDescriptor_rpc_1d2b968b4af573ab = []byte{
// 7154 bytes of a gzipped FileDescriptorProto
var fileDescriptor_rpc_373041af9a5aff0b = []byte{
// 7234 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7c, 0x5d, 0x6c, 0x24, 0xd9,
0x5d, 0xef, 0x54, 0x7f, 0xd8, 0xdd, 0xff, 0x6e, 0xb7, 0xdb, 0xc7, 0x5f, 0x3d, 0xbd, 0xb3, 0xb3,
0xde, 0xca, 0xdc, 0x1d, 0xc7, 0xd9, 0x3b, 0x9e, 0x9d, 0x24, 0x9b, 0xcd, 0xee, 0xcd, 0xbd, 0xd7,
0x63, 0x7b, 0xc6, 0x93, 0x78, 0x3d, 0x4e, 0x79, 0x26, 0x73, 0xb3, 0xc9, 0x55, 0xa7, 0xdc, 0x7d,
0xdc, 0xae, 0x9d, 0xea, 0xaa, 0x4e, 0x55, 0xb5, 0x3d, 0xce, 0x32, 0x12, 0x02, 0x04, 0x12, 0x02,
0x21, 0x40, 0x48, 0x04, 0x05, 0x21, 0x05, 0x24, 0xc8, 0x23, 0x0f, 0x41, 0x48, 0x7c, 0x3c, 0x21,
0x1e, 0x90, 0x10, 0x82, 0x3c, 0x22, 0x21, 0x21, 0x78, 0x01, 0x1e, 0x90, 0x90, 0x78, 0x44, 0x42,
0xe7, 0x7f, 0x3e, 0xea, 0x9c, 0xaa, 0xea, 0xf1, 0x6c, 0x12, 0x78, 0xb2, 0xcf, 0xef, 0xfc, 0xeb,
0x7c, 0xfe, 0xbf, 0xce, 0xff, 0xfc, 0x4f, 0x43, 0x3d, 0x1a, 0xf7, 0x6f, 0x8d, 0xa3, 0x30, 0x09,
0x49, 0xd5, 0x0f, 0xa2, 0x71, 0xbf, 0x7b, 0x6d, 0x18, 0x86, 0x43, 0x9f, 0x6e, 0xba, 0x63, 0x6f,
0xd3, 0x0d, 0x82, 0x30, 0x71, 0x13, 0x2f, 0x0c, 0x62, 0x4e, 0x64, 0x7f, 0x03, 0x5a, 0xf7, 0x69,
0x70, 0x44, 0xe9, 0xc0, 0xa1, 0xdf, 0x9c, 0xd0, 0x38, 0x21, 0x9f, 0x82, 0x05, 0x97, 0x7e, 0x8b,
0xd2, 0x41, 0x6f, 0xec, 0xc6, 0xf1, 0xf8, 0x34, 0x72, 0x63, 0xda, 0xb1, 0xd6, 0xac, 0xf5, 0xa6,
0xd3, 0xe6, 0x15, 0x87, 0x0a, 0x27, 0xaf, 0x43, 0x33, 0x66, 0xa4, 0x34, 0x48, 0xa2, 0x70, 0x7c,
0xd1, 0x29, 0x21, 0x5d, 0x83, 0x61, 0xbb, 0x1c, 0xb2, 0x7d, 0x98, 0x57, 0x3d, 0xc4, 0xe3, 0x30,
0x88, 0x29, 0xb9, 0x0d, 0x4b, 0x7d, 0x6f, 0x7c, 0x4a, 0xa3, 0x1e, 0x7e, 0x3c, 0x0a, 0xe8, 0x28,
0x0c, 0xbc, 0x7e, 0xc7, 0x5a, 0x2b, 0xaf, 0xd7, 0x1d, 0xc2, 0xeb, 0xd8, 0x17, 0xef, 0x8b, 0x1a,
0x72, 0x13, 0xe6, 0x69, 0xc0, 0x71, 0x3a, 0xc0, 0xaf, 0x44, 0x57, 0xad, 0x14, 0x66, 0x1f, 0xd8,
0x7f, 0x66, 0xc1, 0xc2, 0x83, 0xc0, 0x4b, 0x9e, 0xb8, 0xbe, 0x4f, 0x13, 0x39, 0xa7, 0x9b, 0x30,
0x7f, 0x8e, 0x00, 0xce, 0xe9, 0x3c, 0x8c, 0x06, 0x62, 0x46, 0x2d, 0x0e, 0x1f, 0x0a, 0x74, 0xea,
0xc8, 0x4a, 0x53, 0x47, 0x56, 0xb8, 0x5c, 0xe5, 0x29, 0xcb, 0x75, 0x13, 0xe6, 0x23, 0xda, 0x0f,
0xcf, 0x68, 0x74, 0xd1, 0x3b, 0xf7, 0x82, 0x41, 0x78, 0xde, 0xa9, 0xac, 0x59, 0xeb, 0x55, 0xa7,
0x59, 0xf6, 0x54, 0xff, 0xd8, 0xdd, 0x6f, 0xb7, 0xdb, 0xed, 0xe3, 0xbf, 0x9e, 0xde, 0xd9, 0xd9,
0xd9, 0xca, 0x7c, 0x3b, 0x8e, 0x77, 0xbf, 0xf1, 0xec, 0x24, 0xd9, 0x6c, 0x76, 0xbe, 0x7c, 0xdf,
0xe7, 0xb1, 0x3d, 0xe3, 0x49, 0xbc, 0x1e, 0xa7, 0x3c, 0x93, 0x21, 0x9b, 0xa0, 0x4e, 0xb9, 0xfb,
0xb8, 0x5d, 0x3b, 0xd5, 0x55, 0x9d, 0xaa, 0x6a, 0x7b, 0x9c, 0x65, 0x24, 0x04, 0x08, 0x24, 0x04,
0x42, 0x80, 0x90, 0x08, 0x0a, 0x42, 0x0a, 0x48, 0x10, 0xee, 0xb8, 0x08, 0x42, 0xe2, 0xe7, 0x0a,
0x09, 0x09, 0x09, 0x21, 0xc8, 0x25, 0x12, 0x12, 0x82, 0x1b, 0xe0, 0x02, 0x09, 0x89, 0x4b, 0x24,
0x74, 0xde, 0xf3, 0x53, 0xe7, 0x54, 0x55, 0x8f, 0x67, 0x93, 0xc0, 0x95, 0x7d, 0x9e, 0xf3, 0xd6,
0xf9, 0x7d, 0xff, 0xce, 0x7b, 0xde, 0xd3, 0x50, 0x8f, 0xc6, 0xfd, 0x9b, 0xe3, 0x28, 0x4c, 0x42,
0x52, 0xf5, 0x83, 0x68, 0xdc, 0xef, 0x5e, 0x19, 0x86, 0xe1, 0xd0, 0xa7, 0x1b, 0xee, 0xd8, 0xdb,
0x70, 0x83, 0x20, 0x4c, 0xdc, 0xc4, 0x0b, 0x83, 0x98, 0x13, 0xd9, 0x5f, 0x87, 0xd6, 0x7d, 0x1a,
0x1c, 0x52, 0x3a, 0x70, 0xe8, 0x37, 0x26, 0x34, 0x4e, 0xc8, 0x9b, 0xb0, 0xe0, 0xd2, 0x6f, 0x52,
0x3a, 0xe8, 0x8d, 0xdd, 0x38, 0x1e, 0x9f, 0x44, 0x6e, 0x4c, 0x3b, 0xd6, 0x35, 0x6b, 0xad, 0xe9,
0xb4, 0x79, 0xc5, 0x81, 0xc2, 0xc9, 0xeb, 0xd0, 0x8c, 0x19, 0x29, 0x0d, 0x92, 0x28, 0x1c, 0x9f,
0x77, 0x4a, 0x48, 0xd7, 0x60, 0xd8, 0x0e, 0x87, 0x6c, 0x1f, 0xe6, 0x55, 0x0f, 0xf1, 0x38, 0x0c,
0x62, 0x4a, 0x6e, 0xc1, 0x52, 0xdf, 0x1b, 0x9f, 0xd0, 0xa8, 0x87, 0x1f, 0x8f, 0x02, 0x3a, 0x0a,
0x03, 0xaf, 0xdf, 0xb1, 0xae, 0x95, 0xd7, 0xea, 0x0e, 0xe1, 0x75, 0xec, 0x8b, 0xf7, 0x45, 0x0d,
0xb9, 0x01, 0xf3, 0x34, 0xe0, 0x38, 0x1d, 0xe0, 0x57, 0xa2, 0xab, 0x56, 0x0a, 0xb3, 0x0f, 0xec,
0x3f, 0xb7, 0x60, 0xe1, 0x41, 0xe0, 0x25, 0x4f, 0x5c, 0xdf, 0xa7, 0x89, 0x9c, 0xd3, 0x0d, 0x98,
0x3f, 0x43, 0x00, 0xe7, 0x74, 0x16, 0x46, 0x03, 0x31, 0xa3, 0x16, 0x87, 0x0f, 0x04, 0x3a, 0x75,
0x64, 0xa5, 0xa9, 0x23, 0x2b, 0x5c, 0xae, 0xf2, 0x94, 0xe5, 0xba, 0x01, 0xf3, 0x11, 0xed, 0x87,
0xa7, 0x34, 0x3a, 0xef, 0x9d, 0x79, 0xc1, 0x20, 0x3c, 0xeb, 0x54, 0xae, 0x59, 0x6b, 0x55, 0xa7,
0x25, 0xe1, 0x27, 0x88, 0xda, 0x4b, 0x40, 0xf4, 0x59, 0xf0, 0x75, 0xb3, 0x87, 0xb0, 0xf8, 0x38,
0xf0, 0xc3, 0xfe, 0xd3, 0x1f, 0x72, 0x76, 0x05, 0xdd, 0x97, 0x0a, 0xbb, 0x5f, 0x81, 0x25, 0xb3,
0x23, 0x31, 0x00, 0x0a, 0xcb, 0xdb, 0xa7, 0x6e, 0x30, 0xa4, 0xb2, 0x49, 0x39, 0x84, 0x4f, 0x42,
0xf0, 0xc3, 0xfe, 0xd3, 0x1f, 0x70, 0x76, 0x05, 0xdd, 0x97, 0x0a, 0xbb, 0x5f, 0x81, 0x25, 0xb3,
0x23, 0x31, 0x00, 0x0a, 0xcb, 0x5b, 0x27, 0x6e, 0x30, 0xa4, 0xb2, 0x49, 0x39, 0x84, 0x4f, 0x42,
0xbb, 0x3f, 0x89, 0x22, 0x1a, 0xe4, 0xc6, 0x30, 0x2f, 0x70, 0x35, 0x88, 0xd7, 0xa1, 0x19, 0xd0,
0xf3, 0x94, 0x4c, 0xb0, 0x4c, 0x40, 0xcf, 0x25, 0x89, 0xdd, 0x81, 0x95, 0x6c, 0x37, 0x62, 0x00,
0x7f, 0x6f, 0x41, 0xe5, 0x71, 0xf2, 0x2c, 0x24, 0xb7, 0xa0, 0x92, 0x5c, 0x8c, 0x39, 0x63, 0xb6,
0xee, 0x90, 0x5b, 0xc8, 0xeb, 0xb7, 0xb6, 0x06, 0x83, 0x88, 0xc6, 0xf1, 0xa3, 0x8b, 0x31, 0x75,
0xb3, 0x94, 0x4c, 0xb0, 0x4c, 0x40, 0xcf, 0x24, 0x89, 0xdd, 0x81, 0x95, 0x6c, 0x37, 0x62, 0x00,
0xff, 0x60, 0x41, 0xe5, 0x71, 0xf2, 0x2c, 0x24, 0x37, 0xa1, 0x92, 0x9c, 0x8f, 0x39, 0x63, 0xb6,
0x6e, 0x93, 0x9b, 0xc8, 0xeb, 0x37, 0x37, 0x07, 0x83, 0x88, 0xc6, 0xf1, 0xa3, 0xf3, 0x31, 0x75,
0x9a, 0x2e, 0x2f, 0xf4, 0x18, 0x1d, 0xe9, 0xc0, 0xac, 0x28, 0x63, 0x87, 0x75, 0x47, 0x16, 0xc9,
0x75, 0x00, 0x77, 0x14, 0x4e, 0x82, 0xa4, 0x17, 0xbb, 0x09, 0xee, 0x5c, 0xd9, 0xd1, 0x10, 0x72,
0x0d, 0xea, 0xe3, 0xa7, 0xbd, 0xb8, 0x1f, 0x79, 0xe3, 0x04, 0x77, 0xab, 0xee, 0xa4, 0x00, 0xf9,
0x14, 0xd4, 0xc2, 0x49, 0x32, 0x0e, 0xbd, 0x20, 0xe9, 0x54, 0xd7, 0xac, 0xf5, 0xc6, 0x9d, 0x79,
0x31, 0x96, 0x87, 0x93, 0xe4, 0x90, 0xc1, 0x8e, 0x22, 0x20, 0x37, 0x60, 0xae, 0x1f, 0x06, 0x27,
0x5e, 0x34, 0xe2, 0x32, 0xd8, 0x99, 0xc1, 0xde, 0x4c, 0xd0, 0xfe, 0x76, 0x09, 0x1a, 0x8f, 0x22,
0x37, 0x88, 0xdd, 0x3e, 0x03, 0xd8, 0xd0, 0x93, 0x67, 0xbd, 0x53, 0x37, 0x3e, 0xc5, 0xd9, 0xd6,
0x1d, 0x59, 0x24, 0x2b, 0x30, 0xc3, 0x07, 0x8a, 0x73, 0x2a, 0x3b, 0xa2, 0x44, 0xde, 0x84, 0x85,
0x60, 0x32, 0xea, 0x99, 0x7d, 0x95, 0x71, 0xa7, 0xf3, 0x15, 0x6c, 0x01, 0x8e, 0xd9, 0x5e, 0xf3,
0x2e, 0xf8, 0x0c, 0x35, 0x84, 0xd8, 0xd0, 0x14, 0x25, 0xea, 0x0d, 0x4f, 0xf9, 0x34, 0xab, 0x8e,
0x55, 0x00, 0x77, 0x14, 0x4e, 0x82, 0xa4, 0x17, 0xbb, 0x09, 0xee, 0x5c, 0xd9, 0xd1, 0x10, 0x72,
0x05, 0xea, 0xe3, 0xa7, 0xbd, 0xb8, 0x1f, 0x79, 0xe3, 0x04, 0x77, 0xab, 0xee, 0xa4, 0x00, 0x79,
0x13, 0x6a, 0xe1, 0x24, 0x19, 0x87, 0x5e, 0x90, 0x74, 0xaa, 0xd7, 0xac, 0xb5, 0xc6, 0xed, 0x79,
0x31, 0x96, 0x87, 0x93, 0xe4, 0x80, 0xc1, 0x8e, 0x22, 0x20, 0xd7, 0x61, 0xae, 0x1f, 0x06, 0xc7,
0x5e, 0x34, 0xe2, 0x32, 0xd8, 0x99, 0xc1, 0xde, 0x4c, 0xd0, 0xfe, 0x56, 0x09, 0x1a, 0x8f, 0x22,
0x37, 0x88, 0xdd, 0x3e, 0x03, 0xd8, 0xd0, 0x93, 0x67, 0xbd, 0x13, 0x37, 0x3e, 0xc1, 0xd9, 0xd6,
0x1d, 0x59, 0x24, 0x2b, 0x30, 0xc3, 0x07, 0x8a, 0x73, 0x2a, 0x3b, 0xa2, 0x44, 0xde, 0x82, 0x85,
0x60, 0x32, 0xea, 0x99, 0x7d, 0x95, 0x71, 0xa7, 0xf3, 0x15, 0x6c, 0x01, 0x8e, 0xd8, 0x5e, 0xf3,
0x2e, 0xf8, 0x0c, 0x35, 0x84, 0xd8, 0xd0, 0x14, 0x25, 0xea, 0x0d, 0x4f, 0xf8, 0x34, 0xab, 0x8e,
0x81, 0xb1, 0x36, 0x12, 0x6f, 0x44, 0x7b, 0x71, 0xe2, 0x8e, 0xc6, 0x62, 0x5a, 0x1a, 0x82, 0xf5,
0x61, 0xe2, 0xfa, 0xbd, 0x13, 0x4a, 0xe3, 0xce, 0xac, 0xa8, 0x57, 0x08, 0x79, 0x03, 0x5a, 0x03,
0x61, 0xe2, 0xfa, 0xbd, 0x63, 0x4a, 0xe3, 0xce, 0xac, 0xa8, 0x57, 0x08, 0x79, 0x03, 0x5a, 0x03,
0x1a, 0x27, 0x3d, 0xb1, 0x29, 0x34, 0xee, 0xd4, 0x50, 0xe2, 0x32, 0x28, 0xe3, 0x8c, 0xfb, 0x34,
0xd1, 0x56, 0x27, 0x16, 0x1c, 0x68, 0xef, 0x03, 0xd1, 0xe0, 0x1d, 0x9a, 0xb8, 0x9e, 0x1f, 0x93,
0xb7, 0xa1, 0x99, 0x68, 0xc4, 0xa8, 0x61, 0x1a, 0x8a, 0x5d, 0xb4, 0x0f, 0x1c, 0x83, 0xce, 0xbe,
0x0f, 0xb5, 0x7b, 0x94, 0xee, 0x7b, 0x23, 0x2f, 0x21, 0x2b, 0x50, 0x3d, 0xf1, 0x9e, 0x51, 0xce,
0xd0, 0xe5, 0xbd, 0x2b, 0x0e, 0x2f, 0x92, 0x2e, 0xcc, 0x8e, 0x69, 0xd4, 0xa7, 0x72, 0xf9, 0xf7,
0xae, 0x38, 0x12, 0xb8, 0x3b, 0x0b, 0x55, 0x9f, 0x7d, 0x6c, 0xff, 0x4d, 0x09, 0x1a, 0x47, 0x34,
0xd1, 0x56, 0x27, 0x16, 0x1c, 0x68, 0xef, 0x01, 0xd1, 0xe0, 0x6d, 0x9a, 0xb8, 0x9e, 0x1f, 0x93,
0x77, 0xa0, 0x99, 0x68, 0xc4, 0xa8, 0x61, 0x1a, 0x8a, 0x5d, 0xb4, 0x0f, 0x1c, 0x83, 0xce, 0xbe,
0x0f, 0xb5, 0x7b, 0x94, 0xee, 0x79, 0x23, 0x2f, 0x21, 0x2b, 0x50, 0x3d, 0xf6, 0x9e, 0x51, 0xce,
0xd0, 0xe5, 0xdd, 0x4b, 0x0e, 0x2f, 0x92, 0x2e, 0xcc, 0x8e, 0x69, 0xd4, 0xa7, 0x72, 0xf9, 0x77,
0x2f, 0x39, 0x12, 0xb8, 0x3b, 0x0b, 0x55, 0x9f, 0x7d, 0x6c, 0xff, 0x6d, 0x09, 0x1a, 0x87, 0x34,
0x50, 0x82, 0x42, 0xa0, 0xc2, 0xa6, 0x24, 0x84, 0x03, 0xff, 0x27, 0xaf, 0x41, 0x03, 0xa7, 0x19,
0x27, 0x91, 0x17, 0x0c, 0x05, 0x7f, 0x02, 0x83, 0x8e, 0x10, 0x21, 0x6d, 0x28, 0xbb, 0x23, 0xc9,
0x9b, 0xec, 0x5f, 0x26, 0x44, 0x63, 0xf7, 0x62, 0xc4, 0xe4, 0x4d, 0xed, 0x5a, 0xd3, 0x69, 0x08,
0x6c, 0x8f, 0x6d, 0xdb, 0x2d, 0x58, 0xd4, 0x49, 0x64, 0xeb, 0x55, 0x6c, 0x7d, 0x41, 0xa3, 0x14,
0x9d, 0xdc, 0x84, 0x79, 0x49, 0x1f, 0xf1, 0xc1, 0xe2, 0x3e, 0xd6, 0x9d, 0x96, 0x80, 0xe5, 0x14,
0xd6, 0xa1, 0x7d, 0xe2, 0x05, 0xae, 0xdf, 0xeb, 0xfb, 0xc9, 0x59, 0x6f, 0x40, 0xfd, 0xc4, 0xc5,
0x1d, 0xad, 0x3a, 0x2d, 0xc4, 0xb7, 0xfd, 0xe4, 0x6c, 0x87, 0xa1, 0xe4, 0x4d, 0xa8, 0x9f, 0x50,
0xda, 0xc3, 0x95, 0xe8, 0xd4, 0x0c, 0xe9, 0x90, 0xab, 0xeb, 0xd4, 0x4e, 0xe4, 0x3a, 0xaf, 0x43,
0x3b, 0x9c, 0x24, 0xc3, 0xd0, 0x0b, 0x86, 0xbd, 0xfe, 0xa9, 0x1b, 0xf4, 0xbc, 0x41, 0xa7, 0xbe,
0x66, 0xad, 0x57, 0x9c, 0x96, 0xc4, 0x99, 0x56, 0x78, 0x30, 0xb0, 0xff, 0xd0, 0x82, 0x26, 0x5f,
0x54, 0x61, 0x50, 0x6e, 0xc0, 0x9c, 0x1c, 0x3b, 0x8d, 0xa2, 0x30, 0x12, 0x82, 0x62, 0x82, 0x64,
0x03, 0xda, 0x12, 0x18, 0x47, 0xd4, 0x1b, 0xb9, 0x43, 0x2a, 0xb4, 0x4f, 0x0e, 0x27, 0x77, 0xd2,
0x16, 0xa3, 0x70, 0x92, 0x70, 0x95, 0xde, 0xb8, 0xd3, 0x14, 0xc3, 0x77, 0x18, 0xe6, 0x98, 0x24,
0x4c, 0x50, 0x0a, 0x36, 0xc5, 0xc0, 0xec, 0xef, 0x5b, 0x40, 0xd8, 0xd0, 0x1f, 0x85, 0xbc, 0x09,
0xb1, 0xa6, 0xd9, 0xfd, 0xb4, 0x5e, 0x7a, 0x3f, 0x4b, 0xd3, 0xf6, 0x73, 0x1d, 0x66, 0x70, 0x58,
0x4c, 0xf2, 0xcb, 0xd9, 0xa1, 0xdf, 0x2d, 0x75, 0x2c, 0x47, 0xd4, 0x13, 0x1b, 0xaa, 0x7c, 0x8e,
0x95, 0x82, 0x39, 0xf2, 0x2a, 0xfb, 0xbb, 0x16, 0x34, 0xd9, 0xea, 0x07, 0xd4, 0x47, 0xad, 0x46,
0x6e, 0x03, 0x39, 0x99, 0x04, 0x03, 0xb6, 0x59, 0xc9, 0x33, 0x6f, 0xd0, 0x3b, 0xbe, 0x60, 0x5d,
0xe1, 0xb8, 0xf7, 0xae, 0x38, 0x05, 0x75, 0xe4, 0x4d, 0x68, 0x1b, 0x68, 0x9c, 0x44, 0x7c, 0xf4,
0x7b, 0x57, 0x9c, 0x5c, 0x0d, 0x5b, 0x4c, 0xa6, 0x37, 0x27, 0x49, 0xcf, 0x0b, 0x06, 0xf4, 0x19,
0xae, 0xff, 0x9c, 0x63, 0x60, 0x77, 0x5b, 0xd0, 0xd4, 0xbf, 0xb3, 0x3f, 0x84, 0x9a, 0xd4, 0xba,
0xa8, 0x71, 0x32, 0xe3, 0x72, 0x34, 0x84, 0x74, 0xa1, 0x66, 0x8e, 0xc2, 0xa9, 0x7d, 0x9c, 0xbe,
0xed, 0xff, 0x0d, 0xed, 0x7d, 0xa6, 0xfa, 0x02, 0x2f, 0x18, 0x0a, 0xb3, 0xc3, 0xf4, 0xf1, 0x78,
0x72, 0xfc, 0x94, 0x5e, 0x08, 0xfe, 0x13, 0x25, 0x26, 0xf4, 0xa7, 0x61, 0x9c, 0x88, 0x7e, 0xf0,
0x7f, 0xfb, 0x1f, 0x2c, 0x98, 0x67, 0x8c, 0xf0, 0xbe, 0x1b, 0x5c, 0x48, 0x2e, 0xd8, 0x87, 0x26,
0x6b, 0xea, 0x51, 0xb8, 0xc5, 0xb5, 0x3a, 0xd7, 0x56, 0xeb, 0x62, 0x3f, 0x32, 0xd4, 0xb7, 0x74,
0x52, 0xe6, 0x6c, 0x5d, 0x38, 0xc6, 0xd7, 0x4c, 0xad, 0x24, 0x6e, 0x34, 0xa4, 0x09, 0xea, 0x7b,
0xa1, 0xff, 0x81, 0x43, 0xdb, 0x61, 0x70, 0x42, 0xd6, 0xa0, 0x19, 0xbb, 0x49, 0x6f, 0x4c, 0x23,
0x5c, 0x13, 0x54, 0x0d, 0x65, 0x07, 0x62, 0x37, 0x39, 0xa4, 0xd1, 0xdd, 0x8b, 0x84, 0x76, 0xff,
0x0f, 0x2c, 0xe4, 0x7a, 0x61, 0xda, 0x28, 0x9d, 0x22, 0xfb, 0x97, 0x2c, 0x41, 0xf5, 0xcc, 0xf5,
0x27, 0x54, 0x98, 0x21, 0x5e, 0x78, 0xb7, 0xf4, 0x8e, 0x65, 0xbf, 0x01, 0xed, 0x74, 0xd8, 0x42,
0x58, 0x09, 0x54, 0xd8, 0x4a, 0x8b, 0x06, 0xf0, 0x7f, 0xfb, 0x3b, 0x16, 0x27, 0xdc, 0x0e, 0x3d,
0xa5, 0xd2, 0x19, 0x21, 0xd3, 0xfc, 0x92, 0x90, 0xfd, 0x3f, 0xd5, 0xe4, 0xfd, 0xe8, 0x93, 0x25,
0x57, 0xa1, 0x16, 0xd3, 0x60, 0xd0, 0x73, 0x7d, 0x1f, 0x35, 0x5f, 0xcd, 0x99, 0x65, 0xe5, 0x2d,
0xdf, 0xb7, 0x6f, 0xc2, 0x82, 0x36, 0xba, 0x17, 0xcc, 0xe3, 0x00, 0xc8, 0xbe, 0x17, 0x27, 0x8f,
0x83, 0x78, 0xac, 0x69, 0xcc, 0x57, 0xa0, 0x3e, 0xf2, 0x02, 0x1c, 0x19, 0x67, 0xc5, 0xaa, 0x53,
0x1b, 0x79, 0x01, 0x1b, 0x57, 0x8c, 0x95, 0xee, 0x33, 0x51, 0x59, 0x12, 0x95, 0xee, 0x33, 0xac,
0xb4, 0xdf, 0x81, 0x45, 0xa3, 0x3d, 0xd1, 0xf5, 0xeb, 0x50, 0x9d, 0x24, 0xcf, 0x42, 0x69, 0xcf,
0x1a, 0x82, 0x43, 0x98, 0x67, 0xe4, 0xf0, 0x1a, 0xfb, 0x3d, 0x58, 0x38, 0xa0, 0xe7, 0x82, 0x33,
0xe5, 0x40, 0xde, 0xb8, 0xd4, 0x6b, 0xc2, 0x7a, 0xfb, 0x16, 0x10, 0xfd, 0x63, 0xd1, 0xab, 0xe6,
0x43, 0x59, 0x86, 0x0f, 0x65, 0xbf, 0x01, 0xe4, 0xc8, 0x1b, 0x06, 0xef, 0xd3, 0x38, 0x76, 0x87,
0x4a, 0xa9, 0xb5, 0xa1, 0x3c, 0x8a, 0x87, 0x42, 0xf6, 0xd8, 0xbf, 0xf6, 0xa7, 0x61, 0xd1, 0xa0,
0x13, 0x0d, 0x5f, 0x83, 0x7a, 0xec, 0x0d, 0x03, 0x37, 0x99, 0x44, 0x54, 0x34, 0x9d, 0x02, 0xf6,
0x3d, 0x58, 0xfa, 0x0a, 0x8d, 0xbc, 0x93, 0x8b, 0xcb, 0x9a, 0x37, 0xdb, 0x29, 0x65, 0xdb, 0xd9,
0x85, 0xe5, 0x4c, 0x3b, 0xa2, 0x7b, 0xce, 0xbe, 0x62, 0x27, 0x6b, 0x0e, 0x2f, 0x68, 0xc2, 0x5c,
0xd2, 0x85, 0xd9, 0x7e, 0x0c, 0x64, 0x3b, 0x0c, 0x02, 0xda, 0x4f, 0x0e, 0x29, 0x8d, 0xd2, 0x53,
0x53, 0xca, 0xab, 0x8d, 0x3b, 0xab, 0x62, 0x65, 0xb3, 0x1a, 0x42, 0x30, 0x31, 0x81, 0xca, 0x98,
0x46, 0x23, 0x6c, 0xb8, 0xe6, 0xe0, 0xff, 0xf6, 0x32, 0x2c, 0x1a, 0xcd, 0x0a, 0x87, 0xf7, 0x2d,
0x58, 0xde, 0xf1, 0xe2, 0x7e, 0xbe, 0xc3, 0x0e, 0xcc, 0x8e, 0x27, 0xc7, 0xbd, 0x54, 0x12, 0x65,
0x91, 0xf9, 0x48, 0xd9, 0x4f, 0x44, 0x63, 0x3f, 0x6b, 0x41, 0x65, 0xef, 0xd1, 0xfe, 0x36, 0x53,
0x7e, 0x5e, 0xd0, 0x0f, 0x47, 0xcc, 0x80, 0xf0, 0x49, 0xab, 0xf2, 0x54, 0x09, 0xbb, 0x06, 0x75,
0xb4, 0x3b, 0xcc, 0xed, 0x13, 0x07, 0x9c, 0x14, 0x60, 0x2e, 0x27, 0x7d, 0x36, 0xf6, 0x22, 0xf4,
0x29, 0xa5, 0xa7, 0x58, 0x41, 0xbd, 0x99, 0xaf, 0xb0, 0xbf, 0x53, 0x85, 0x59, 0x61, 0x4d, 0xb0,
0xbf, 0x7e, 0xe2, 0x9d, 0x51, 0x31, 0x12, 0x51, 0x62, 0x36, 0x3d, 0xa2, 0xa3, 0x30, 0xa1, 0x3d,
0x63, 0x1b, 0x4c, 0x10, 0x5d, 0x6a, 0xde, 0x50, 0x8f, 0x3b, 0xe1, 0x65, 0x4e, 0x65, 0x80, 0x6c,
0xb1, 0xa4, 0x47, 0x51, 0x41, 0x8f, 0x42, 0x16, 0xd9, 0x4a, 0xf4, 0xdd, 0xb1, 0xdb, 0xf7, 0x92,
0x0b, 0xa1, 0x12, 0x54, 0x99, 0xb5, 0xed, 0x87, 0x7d, 0xd7, 0xef, 0x1d, 0xbb, 0xbe, 0x1b, 0xf4,
0xa9, 0x74, 0xd7, 0x0d, 0x90, 0xb9, 0xae, 0x62, 0x48, 0x92, 0x8c, 0xbb, 0xb7, 0x19, 0x94, 0x19,
0xa4, 0x7e, 0x38, 0x1a, 0x79, 0x09, 0xf3, 0x78, 0xd1, 0x1b, 0x2a, 0x3b, 0x1a, 0xc2, 0x0f, 0x07,
0x58, 0x3a, 0xe7, 0xab, 0x57, 0x97, 0x87, 0x03, 0x0d, 0x64, 0xad, 0x30, 0x97, 0x8a, 0xa9, 0xb1,
0xa7, 0xe7, 0x1d, 0xe0, 0xad, 0xa4, 0x08, 0xdb, 0x87, 0x49, 0x10, 0xd3, 0x24, 0xf1, 0xe9, 0x40,
0x0d, 0xa8, 0x81, 0x64, 0xf9, 0x0a, 0x72, 0x1b, 0x16, 0xb9, 0x13, 0x1e, 0xbb, 0x49, 0x18, 0x9f,
0x7a, 0x71, 0x2f, 0x66, 0xee, 0x6c, 0x13, 0xe9, 0x8b, 0xaa, 0xc8, 0x3b, 0xb0, 0x9a, 0x81, 0x23,
0xda, 0xa7, 0xde, 0x19, 0x1d, 0x74, 0xe6, 0xf0, 0xab, 0x69, 0xd5, 0x64, 0x0d, 0x1a, 0xec, 0xec,
0x31, 0x19, 0x0f, 0x5c, 0x66, 0x91, 0x5b, 0xb8, 0x0f, 0x3a, 0x44, 0xde, 0x82, 0xb9, 0x31, 0xe5,
0xe6, 0xfc, 0x34, 0xf1, 0xfb, 0x71, 0x67, 0xde, 0xd0, 0x6e, 0x8c, 0x73, 0x1d, 0x93, 0x82, 0x31,
0x65, 0x3f, 0x46, 0x27, 0xd4, 0xbd, 0xe8, 0xb4, 0x91, 0xdd, 0x52, 0x00, 0x65, 0x24, 0xf2, 0xce,
0xdc, 0x84, 0x76, 0x16, 0xb8, 0x42, 0x17, 0x45, 0xf6, 0x9d, 0x17, 0x78, 0x89, 0xe7, 0x26, 0x61,
0xd4, 0x21, 0x58, 0x97, 0x02, 0xf6, 0x6f, 0x59, 0x5c, 0xed, 0x0a, 0x16, 0x55, 0xea, 0xf3, 0x35,
0x68, 0x70, 0xe6, 0xec, 0x85, 0x81, 0x7f, 0x21, 0xf8, 0x15, 0x38, 0xf4, 0x30, 0xf0, 0x2f, 0xc8,
0x27, 0x60, 0xce, 0x0b, 0x74, 0x12, 0x2e, 0xe1, 0x4d, 0x09, 0x22, 0xd1, 0x6b, 0xd0, 0x18, 0x4f,
0x8e, 0x7d, 0xaf, 0xcf, 0x49, 0xca, 0xbc, 0x15, 0x0e, 0x21, 0x01, 0x73, 0x06, 0xf9, 0x38, 0x39,
0x45, 0x05, 0x29, 0x1a, 0x02, 0x63, 0x24, 0xf6, 0x5d, 0x58, 0x32, 0x07, 0x28, 0x54, 0xd9, 0x06,
0xd4, 0x04, 0xe7, 0xc7, 0x9d, 0x06, 0xae, 0x5e, 0x4b, 0xac, 0x9e, 0x20, 0x75, 0x54, 0xbd, 0xfd,
0x07, 0x15, 0x58, 0x14, 0xe8, 0xb6, 0x1f, 0xc6, 0xf4, 0x68, 0x32, 0x1a, 0xb9, 0x51, 0x81, 0x48,
0x59, 0x97, 0x88, 0x54, 0xc9, 0x14, 0x29, 0xc6, 0xe8, 0xa7, 0xae, 0x17, 0x70, 0x4f, 0x96, 0xcb,
0xa3, 0x86, 0x90, 0x75, 0x98, 0xef, 0xfb, 0x61, 0xcc, 0xbd, 0x36, 0xfd, 0xd0, 0x99, 0x85, 0xf3,
0x2a, 0xa0, 0x5a, 0xa4, 0x02, 0x74, 0x11, 0x9e, 0xc9, 0x88, 0xb0, 0x0d, 0x4d, 0xd6, 0x28, 0x95,
0x1a, 0x69, 0x96, 0x7b, 0x72, 0x3a, 0xc6, 0xc6, 0x93, 0x15, 0x18, 0x2e, 0x9d, 0xf3, 0x45, 0xe2,
0xc2, 0xce, 0xb4, 0x4c, 0xe3, 0x69, 0xd4, 0x75, 0x21, 0x2e, 0xf9, 0x2a, 0x72, 0x0f, 0x80, 0xf7,
0x85, 0x66, 0x17, 0xd0, 0xec, 0xbe, 0x61, 0xee, 0x88, 0xbe, 0xf6, 0xb7, 0x58, 0x61, 0x12, 0x51,
0x34, 0xc5, 0xda, 0x97, 0xf6, 0xcf, 0x5b, 0xd0, 0xd0, 0xea, 0xc8, 0x32, 0x2c, 0x6c, 0x3f, 0x7c,
0x78, 0xb8, 0xeb, 0x6c, 0x3d, 0x7a, 0xf0, 0x95, 0xdd, 0xde, 0xf6, 0xfe, 0xc3, 0xa3, 0xdd, 0xf6,
0x15, 0x06, 0xef, 0x3f, 0xdc, 0xde, 0xda, 0xef, 0xdd, 0x7b, 0xe8, 0x6c, 0x4b, 0xd8, 0x22, 0x2b,
0x40, 0x9c, 0xdd, 0xf7, 0x1f, 0x3e, 0xda, 0x35, 0xf0, 0x12, 0x69, 0x43, 0xf3, 0xae, 0xb3, 0xbb,
0xb5, 0xbd, 0x27, 0x90, 0x32, 0x59, 0x82, 0xf6, 0xbd, 0xc7, 0x07, 0x3b, 0x0f, 0x0e, 0xee, 0xf7,
0xb6, 0xb7, 0x0e, 0xb6, 0x77, 0xf7, 0x77, 0x77, 0xda, 0x15, 0x32, 0x07, 0xf5, 0xad, 0xbb, 0x5b,
0x07, 0x3b, 0x0f, 0x0f, 0x76, 0x77, 0xda, 0x55, 0xfb, 0xef, 0x2c, 0x58, 0xc6, 0x51, 0x0f, 0xb2,
0x02, 0xb2, 0x06, 0x8d, 0x7e, 0x18, 0x8e, 0x29, 0xd3, 0xf6, 0x4a, 0xa1, 0xeb, 0x10, 0x63, 0x7e,
0xae, 0x3e, 0x4f, 0xc2, 0xa8, 0x4f, 0x85, 0x7c, 0x00, 0x42, 0xf7, 0x18, 0xc2, 0x98, 0x5f, 0x6c,
0x2f, 0xa7, 0xe0, 0xe2, 0xd1, 0xe0, 0x18, 0x27, 0x59, 0x81, 0x99, 0xe3, 0x88, 0xba, 0xfd, 0x53,
0x21, 0x19, 0xa2, 0x44, 0x3e, 0x99, 0x1e, 0x30, 0xfa, 0x6c, 0xf5, 0x7d, 0x3a, 0x40, 0x8e, 0xa9,
0x39, 0xf3, 0x02, 0xdf, 0x16, 0x30, 0x93, 0x7f, 0xf7, 0xd8, 0x0d, 0x06, 0x61, 0x40, 0x07, 0xc2,
0xd9, 0x4b, 0x01, 0xfb, 0x10, 0x56, 0xb2, 0xf3, 0x13, 0xf2, 0xf5, 0xb6, 0x26, 0x5f, 0xdc, 0xf7,
0xea, 0x4e, 0xdf, 0x4d, 0x4d, 0xd6, 0xfe, 0xd9, 0x82, 0x0a, 0x33, 0xc5, 0xd3, 0xcd, 0xb6, 0xee,
0x5d, 0x95, 0x73, 0x11, 0x2a, 0x3c, 0xb3, 0x70, 0xe5, 0xcc, 0x0d, 0x98, 0x86, 0xa4, 0xf5, 0x11,
0xed, 0x9f, 0xe1, 0x8c, 0x55, 0x3d, 0x43, 0x98, 0x80, 0x30, 0xd7, 0x17, 0xbf, 0x16, 0x02, 0x22,
0xcb, 0xb2, 0x0e, 0xbf, 0x9c, 0x4d, 0xeb, 0xf0, 0xbb, 0x0e, 0xcc, 0x7a, 0xc1, 0x71, 0x38, 0x09,
0x06, 0x28, 0x10, 0x35, 0x47, 0x16, 0x31, 0x26, 0x86, 0x82, 0xea, 0x8d, 0x24, 0xfb, 0xa7, 0x80,
0x4d, 0xd8, 0xd1, 0x28, 0x46, 0xd7, 0x43, 0x85, 0x67, 0xde, 0x86, 0x05, 0x0d, 0x4b, 0xdd, 0xd8,
0x31, 0x03, 0x32, 0x6e, 0x2c, 0xfa, 0x2c, 0xbc, 0xc6, 0x6e, 0x43, 0xeb, 0x3e, 0x4d, 0x1e, 0x04,
0x27, 0xa1, 0x6c, 0xe9, 0x77, 0x2b, 0x30, 0xaf, 0x20, 0xd1, 0xd0, 0x3a, 0xcc, 0x7b, 0x03, 0x1a,
0x24, 0x5e, 0x72, 0xd1, 0x33, 0x4e, 0x60, 0x59, 0x98, 0xf9, 0x7a, 0xae, 0xef, 0xb9, 0x32, 0x0a,
0xc8, 0x0b, 0xe4, 0x0e, 0x2c, 0x31, 0x43, 0x24, 0x6d, 0x8b, 0xda, 0x62, 0x7e, 0xf0, 0x2b, 0xac,
0x63, 0xca, 0x80, 0xe1, 0x42, 0xdb, 0xab, 0x4f, 0xb8, 0xcf, 0x53, 0x54, 0xc5, 0x56, 0x8d, 0xb7,
0xc4, 0xa6, 0x5c, 0xe5, 0xc6, 0x4a, 0x01, 0xb9, 0x30, 0xdb, 0x0c, 0x57, 0x55, 0xd9, 0x30, 0x9b,
0x16, 0xaa, 0xab, 0xe5, 0x42, 0x75, 0x4c, 0x95, 0x5d, 0x04, 0x7d, 0x3a, 0xe8, 0x25, 0x61, 0x0f,
0x55, 0x2e, 0xee, 0x4e, 0xcd, 0xc9, 0xc2, 0xe4, 0x1a, 0xcc, 0x26, 0x34, 0x4e, 0x02, 0x9a, 0xa0,
0x56, 0xaa, 0x61, 0x40, 0x40, 0x42, 0xcc, 0x41, 0x9d, 0x44, 0x5e, 0xdc, 0x69, 0x62, 0x10, 0x0e,
0xff, 0x27, 0x9f, 0x81, 0xe5, 0x63, 0x1a, 0x27, 0xbd, 0x53, 0xea, 0x0e, 0x68, 0x84, 0x3b, 0xcd,
0xa3, 0x7d, 0xdc, 0xee, 0x17, 0x57, 0x32, 0x1e, 0x3a, 0xa3, 0x51, 0xec, 0x85, 0x01, 0x5a, 0xfc,
0xba, 0x23, 0x8b, 0xac, 0x3d, 0x36, 0x79, 0x65, 0x2f, 0xd5, 0x0a, 0xce, 0xe3, 0xc4, 0x8b, 0x2b,
0xc9, 0x0d, 0x98, 0xc1, 0x09, 0xc4, 0x9d, 0xb6, 0x11, 0xd5, 0xd8, 0x66, 0xa0, 0x23, 0xea, 0xbe,
0x58, 0xa9, 0x35, 0xda, 0x4d, 0xfb, 0x73, 0x50, 0x45, 0x98, 0x6d, 0x3a, 0x5f, 0x0c, 0xce, 0x14,
0xbc, 0xc0, 0x86, 0x16, 0xd0, 0xe4, 0x3c, 0x8c, 0x9e, 0xca, 0x90, 0xb0, 0x28, 0xda, 0xdf, 0x42,
0x17, 0x5f, 0x85, 0x48, 0x1f, 0xa3, 0x7f, 0xc2, 0x0e, 0x6a, 0x7c, 0xa9, 0xe3, 0x53, 0x57, 0x9c,
0x3a, 0x6a, 0x08, 0x1c, 0x9d, 0xba, 0x4c, 0x6d, 0x19, 0xbb, 0xc7, 0x0f, 0x72, 0x0d, 0xc4, 0xf6,
0xf8, 0xe6, 0xdd, 0x80, 0x96, 0x0c, 0xbe, 0xc6, 0x3d, 0x9f, 0x9e, 0x24, 0x32, 0xae, 0x10, 0x4c,
0x46, 0x78, 0xda, 0xdb, 0xa7, 0x27, 0x89, 0x7d, 0x00, 0x0b, 0x42, 0x95, 0x3c, 0x1c, 0x53, 0xd9,
0xf5, 0xe7, 0x8b, 0x4c, 0x72, 0xe3, 0xce, 0xa2, 0xa9, 0x7b, 0x78, 0xb8, 0xd9, 0xa4, 0xb4, 0x1d,
0x20, 0xba, 0x6a, 0x12, 0x0d, 0x0a, 0xbb, 0x28, 0x23, 0x27, 0x62, 0x3a, 0x06, 0xc6, 0xd6, 0x27,
0x9e, 0xf4, 0xfb, 0x32, 0x64, 0xce, 0x8e, 0xc3, 0xbc, 0x68, 0xff, 0x9e, 0x05, 0x8b, 0xd8, 0x9a,
0x74, 0x2a, 0x84, 0xfa, 0x7f, 0xe7, 0x63, 0x0c, 0xb3, 0xd9, 0xd7, 0xa3, 0x49, 0x4b, 0x50, 0xd5,
0x0d, 0x02, 0x2f, 0x7c, 0xfc, 0x43, 0x7d, 0x25, 0x7b, 0xa8, 0xb7, 0x7f, 0xdd, 0x82, 0x05, 0xae,
0x93, 0x13, 0x37, 0x99, 0xc4, 0x62, 0xfa, 0xff, 0x0b, 0xe6, 0xb8, 0x71, 0x15, 0x52, 0x2d, 0x06,
0xba, 0xa4, 0x14, 0x10, 0xa2, 0x9c, 0x78, 0xef, 0x8a, 0x63, 0x12, 0x93, 0xf7, 0xd0, 0xc1, 0x09,
0x7a, 0x88, 0x8a, 0xc0, 0xe0, 0xd5, 0x02, 0x33, 0xa0, 0xbe, 0xd7, 0xc8, 0xef, 0xd6, 0x60, 0x86,
0xfb, 0xbb, 0xf6, 0x7d, 0x98, 0x33, 0x3a, 0x32, 0x02, 0x0a, 0x4d, 0x1e, 0x50, 0xc8, 0x85, 0xa2,
0x4a, 0x05, 0xa1, 0xa8, 0xdf, 0x2f, 0x03, 0x61, 0xcc, 0x92, 0xd9, 0x0d, 0xe6, 0x70, 0x87, 0x03,
0xe3, 0xf8, 0xd4, 0x74, 0x74, 0x88, 0xdc, 0x02, 0xa2, 0x15, 0x65, 0x44, 0x91, 0x5b, 0x9f, 0x82,
0x1a, 0xa6, 0x26, 0x85, 0xf1, 0x16, 0x66, 0x56, 0x1c, 0x14, 0xf9, 0xb2, 0x17, 0xd6, 0x31, 0x03,
0x33, 0x9e, 0xc4, 0xa7, 0x78, 0xb9, 0x22, 0x0e, 0x58, 0xb2, 0x9c, 0xdd, 0xdf, 0x99, 0x4b, 0xf7,
0x77, 0x36, 0x17, 0xb4, 0xd1, 0x5c, 0xfc, 0x9a, 0xe9, 0xe2, 0xdf, 0x80, 0xb9, 0x11, 0x73, 0x39,
0x13, 0xbf, 0xdf, 0x1b, 0xb1, 0xde, 0xc5, 0x79, 0xca, 0x00, 0xc9, 0x06, 0xb4, 0x85, 0xbb, 0x91,
0x9e, 0x23, 0x00, 0xd7, 0x38, 0x87, 0x33, 0xfd, 0x9d, 0x86, 0x71, 0x1a, 0x38, 0xd8, 0x14, 0x60,
0x27, 0xaf, 0x98, 0x71, 0x48, 0x6f, 0x12, 0x88, 0xfb, 0x15, 0x3a, 0xc0, 0x93, 0x54, 0xcd, 0xc9,
0x57, 0xd8, 0xbf, 0x62, 0x41, 0x9b, 0xed, 0x99, 0xc1, 0x96, 0xef, 0x02, 0x4a, 0xc5, 0x4b, 0x72,
0xa5, 0x41, 0x4b, 0xde, 0x81, 0x3a, 0x96, 0xc3, 0x31, 0x0d, 0x04, 0x4f, 0x76, 0x4c, 0x9e, 0x4c,
0xf5, 0xc9, 0xde, 0x15, 0x27, 0x25, 0xd6, 0x38, 0xf2, 0xaf, 0x2c, 0x68, 0x88, 0x5e, 0x7e, 0xe8,
0x30, 0x41, 0x57, 0xbb, 0x10, 0xe3, 0x9c, 0x94, 0xde, 0x7f, 0xad, 0xc3, 0xfc, 0xc8, 0x4d, 0x26,
0x11, 0xb3, 0xc7, 0x46, 0x88, 0x20, 0x0b, 0x33, 0xe3, 0x8a, 0xaa, 0x33, 0xee, 0x25, 0x9e, 0xdf,
0x93, 0xb5, 0xe2, 0xea, 0xa9, 0xa8, 0x8a, 0x69, 0x90, 0x38, 0x71, 0x87, 0x54, 0xd8, 0x4d, 0x5e,
0xb0, 0x3b, 0xb0, 0x22, 0x26, 0x94, 0x71, 0x55, 0xed, 0x3f, 0x69, 0xc2, 0x6a, 0xae, 0x4a, 0xdd,
0x4f, 0x8b, 0xb3, 0xaf, 0xef, 0x8d, 0x8e, 0x43, 0xe5, 0xe7, 0x5b, 0xfa, 0xb1, 0xd8, 0xa8, 0x22,
0x43, 0x58, 0x96, 0x0e, 0x02, 0x5b, 0xd3, 0xd4, 0x98, 0x95, 0xd0, 0x4a, 0xbd, 0x65, 0x6e, 0x61,
0xb6, 0x43, 0x89, 0xeb, 0x42, 0x5c, 0xdc, 0x1e, 0x39, 0x85, 0x8e, 0xf2, 0x44, 0x84, 0xb2, 0xd6,
0xbc, 0x15, 0xd6, 0xd7, 0x9b, 0x97, 0xf4, 0x65, 0x78, 0xb6, 0xce, 0xd4, 0xd6, 0xc8, 0x05, 0x5c,
0x97, 0x75, 0xa8, 0x8d, 0xf3, 0xfd, 0x55, 0x5e, 0x6a, 0x6e, 0xe8, 0xb3, 0x9b, 0x9d, 0x5e, 0xd2,
0x30, 0xf9, 0x10, 0x56, 0xce, 0x5d, 0x2f, 0x91, 0xc3, 0xd2, 0x7c, 0x83, 0x2a, 0x76, 0x79, 0xe7,
0x92, 0x2e, 0x9f, 0xf0, 0x8f, 0x0d, 0x13, 0x35, 0xa5, 0xc5, 0xee, 0x5f, 0x58, 0xd0, 0x32, 0xdb,
0x61, 0x6c, 0x2a, 0x64, 0x5f, 0xea, 0x40, 0xe9, 0x4d, 0x66, 0xe0, 0xfc, 0x51, 0xb9, 0x54, 0x74,
0x54, 0xd6, 0x0f, 0xa8, 0xe5, 0xcb, 0x62, 0x4c, 0x95, 0x97, 0x8b, 0x31, 0x55, 0x8b, 0x62, 0x4c,
0xdd, 0x7f, 0xb7, 0x80, 0xe4, 0x79, 0x89, 0xdc, 0xe7, 0x67, 0xf5, 0x80, 0xfa, 0x42, 0xa5, 0xfc,
0xcf, 0x97, 0xe3, 0x47, 0xb9, 0x76, 0xf2, 0x6b, 0x26, 0x18, 0xfa, 0xdd, 0xb1, 0xee, 0xec, 0xcc,
0x39, 0x45, 0x55, 0x99, 0xa8, 0x57, 0xe5, 0xf2, 0xa8, 0x57, 0xf5, 0xf2, 0xa8, 0xd7, 0x4c, 0x36,
0xea, 0xd5, 0xfd, 0x19, 0x0b, 0x16, 0x0b, 0x36, 0xfd, 0xc7, 0x37, 0x71, 0xb6, 0x4d, 0x86, 0x2e,
0x28, 0x89, 0x6d, 0xd2, 0xc1, 0xee, 0x4f, 0xc0, 0x9c, 0xc1, 0xe8, 0x3f, 0xbe, 0xfe, 0xb3, 0xfe,
0x1a, 0xe7, 0x33, 0x03, 0xeb, 0xfe, 0x4b, 0x09, 0x48, 0x5e, 0xd8, 0xfe, 0x5b, 0xc7, 0x90, 0x5f,
0xa7, 0x72, 0xc1, 0x3a, 0xfd, 0x97, 0xda, 0x81, 0x37, 0x61, 0x41, 0x24, 0xb3, 0x68, 0x11, 0x1a,
0xce, 0x31, 0xf9, 0x0a, 0xe6, 0xb1, 0x9a, 0x21, 0xc7, 0x9a, 0x91, 0x20, 0xa0, 0x19, 0xc3, 0x4c,
0xe4, 0xd1, 0xee, 0x42, 0x47, 0xac, 0xd0, 0xee, 0x19, 0x0d, 0x92, 0xa3, 0xc9, 0x31, 0xcf, 0x08,
0xf1, 0xc2, 0xc0, 0xfe, 0x7e, 0x59, 0x39, 0xdd, 0x58, 0x29, 0xcc, 0xfb, 0x67, 0xa0, 0xa9, 0x2b,
0x73, 0xb1, 0x1d, 0x99, 0x00, 0x1d, 0x33, 0xec, 0x3a, 0x15, 0xd9, 0x81, 0x16, 0xaa, 0xac, 0x81,
0xfa, 0xae, 0x84, 0xdf, 0xbd, 0x20, 0xf0, 0xb0, 0x77, 0xc5, 0xc9, 0x7c, 0x43, 0xbe, 0x00, 0x2d,
0xf3, 0x28, 0x25, 0x7c, 0x84, 0x22, 0xdf, 0x9c, 0x7d, 0x6e, 0x12, 0x93, 0x2d, 0x68, 0x67, 0xcf,
0x62, 0xe2, 0xb6, 0x78, 0x4a, 0x03, 0x39, 0x72, 0xf2, 0x8e, 0xb8, 0x7b, 0xaa, 0x62, 0x10, 0xec,
0x86, 0xf9, 0x99, 0xb6, 0x4c, 0xb7, 0xf8, 0x1f, 0xed, 0x36, 0xea, 0xeb, 0x00, 0x29, 0x46, 0xda,
0xd0, 0x7c, 0x78, 0xb8, 0x7b, 0xd0, 0xdb, 0xde, 0xdb, 0x3a, 0x38, 0xd8, 0xdd, 0x6f, 0x5f, 0x21,
0x04, 0x5a, 0x18, 0xbf, 0xda, 0x51, 0x98, 0xc5, 0xb0, 0xad, 0x6d, 0x1e, 0x1b, 0x13, 0x58, 0x89,
0x2c, 0x41, 0xfb, 0xc1, 0x41, 0x06, 0x2d, 0xdf, 0xad, 0x2b, 0xf9, 0xb0, 0x57, 0x60, 0x89, 0x27,
0x3c, 0xdd, 0xe5, 0xec, 0x21, 0x7d, 0x85, 0xdf, 0xb4, 0x60, 0x39, 0x53, 0x91, 0x26, 0x1e, 0x70,
0x77, 0xc0, 0xf4, 0x11, 0x4c, 0x90, 0xf1, 0xa4, 0xf2, 0xfc, 0x32, 0x1a, 0x24, 0x5f, 0xc1, 0x78,
0x5e, 0xf3, 0x14, 0x33, 0x92, 0x54, 0x54, 0x65, 0xaf, 0xf2, 0xb4, 0xac, 0x80, 0xfa, 0x99, 0x81,
0x9f, 0xf0, 0x44, 0x2a, 0xbd, 0x22, 0xbd, 0xcb, 0x33, 0x87, 0x2c, 0x8b, 0xcc, 0xc9, 0x37, 0x5c,
0x0f, 0x73, 0xbc, 0x85, 0x75, 0xf6, 0x9f, 0x96, 0x80, 0x7c, 0x79, 0x42, 0xa3, 0x0b, 0xcc, 0x19,
0x50, 0xe1, 0xc0, 0xd5, 0x6c, 0xb0, 0x6b, 0x66, 0x3c, 0x39, 0xfe, 0x12, 0xbd, 0x90, 0x09, 0x2d,
0x25, 0x3d, 0xa1, 0x05, 0xd8, 0xe1, 0x58, 0x65, 0x2c, 0x58, 0xeb, 0x55, 0x0c, 0x49, 0xd4, 0x83,
0xc9, 0x88, 0x37, 0x5a, 0x98, 0x77, 0x52, 0xb9, 0x3c, 0xef, 0xa4, 0x7a, 0x59, 0xde, 0xc9, 0x27,
0x60, 0xce, 0x1b, 0x06, 0x21, 0x53, 0x0b, 0xcc, 0xb0, 0xc7, 0x9d, 0x99, 0xb5, 0x32, 0x3b, 0x0c,
0x0b, 0xf0, 0x80, 0x61, 0xe4, 0x73, 0x29, 0x11, 0x1d, 0x0c, 0x31, 0x87, 0x49, 0x57, 0x14, 0xbb,
0x83, 0x21, 0xdd, 0x0f, 0xfb, 0x6e, 0x12, 0x46, 0xea, 0x43, 0x86, 0xc5, 0xec, 0xd4, 0x1f, 0x87,
0x13, 0xe6, 0xe6, 0xc8, 0xa5, 0xe0, 0x61, 0x9b, 0x26, 0x47, 0x0f, 0x71, 0x41, 0xec, 0xaf, 0x42,
0x43, 0x6b, 0x82, 0xbc, 0xca, 0x4f, 0x98, 0xcc, 0x85, 0x10, 0xe7, 0xc1, 0x0a, 0xf7, 0xd8, 0x03,
0xea, 0x3f, 0x18, 0x90, 0x4f, 0xc1, 0xc2, 0xc0, 0x8b, 0x28, 0xe6, 0x2a, 0xf5, 0x22, 0x7a, 0x46,
0xa3, 0x58, 0x9e, 0x9c, 0xdb, 0xaa, 0xc2, 0xe1, 0xb8, 0xfd, 0x1e, 0x2c, 0x1a, 0x5b, 0xa3, 0x38,
0x57, 0xa6, 0x87, 0x58, 0xf9, 0xf4, 0x10, 0x99, 0x1a, 0x62, 0xff, 0x5c, 0x09, 0xca, 0x7b, 0xe1,
0x58, 0x8f, 0xf6, 0x5b, 0x66, 0xb4, 0x5f, 0xb8, 0x40, 0x3d, 0xe5, 0xe1, 0x08, 0xcb, 0x68, 0x80,
0x64, 0x03, 0x5a, 0xee, 0x28, 0xe9, 0x25, 0x21, 0x73, 0xf9, 0xce, 0xdd, 0x68, 0xc0, 0xd9, 0x19,
0xb7, 0x38, 0x53, 0x43, 0x96, 0xa0, 0xac, 0x7c, 0x05, 0x24, 0x60, 0x45, 0x76, 0xde, 0xc0, 0x7b,
0xc4, 0x0b, 0x11, 0x39, 0x13, 0x25, 0x26, 0x2d, 0xe6, 0xf7, 0xfc, 0xb0, 0xc7, 0x35, 0x7e, 0x51,
0x15, 0x73, 0xc7, 0x18, 0x77, 0x20, 0x99, 0x08, 0x79, 0xca, 0xb2, 0x1e, 0x9e, 0xad, 0x99, 0xb7,
0xaa, 0xff, 0x64, 0x41, 0x15, 0xd7, 0x86, 0x59, 0x2f, 0x2e, 0xde, 0x2a, 0xe0, 0x8f, 0x6b, 0x32,
0xe7, 0x64, 0x61, 0x62, 0x1b, 0x59, 0x6f, 0x25, 0x35, 0x21, 0x3d, 0xf3, 0x6d, 0x0d, 0xea, 0xbc,
0xa4, 0x32, 0xbc, 0x38, 0xdf, 0x2b, 0x90, 0x5c, 0x87, 0xca, 0x69, 0x38, 0x96, 0xee, 0x36, 0xc8,
0xdb, 0xb0, 0x70, 0xec, 0x20, 0x9e, 0x8e, 0x87, 0xb5, 0xc7, 0xa7, 0xc5, 0x9d, 0xa8, 0x2c, 0xcc,
0xdc, 0x48, 0xd5, 0xac, 0xbe, 0x4c, 0x19, 0xd4, 0xde, 0x80, 0x79, 0xc6, 0xf5, 0x5a, 0xd4, 0x75,
0xaa, 0x28, 0xdb, 0x3f, 0x69, 0x41, 0x4d, 0x12, 0x93, 0x75, 0xa8, 0x30, 0x11, 0xca, 0x1c, 0x5c,
0xd5, 0x2d, 0x38, 0xa3, 0x73, 0x90, 0x82, 0x39, 0x13, 0x18, 0x0c, 0x4b, 0xcf, 0x49, 0x32, 0x14,
0x96, 0x1e, 0x03, 0xd4, 0x70, 0x33, 0xde, 0x73, 0x06, 0xb5, 0xbf, 0x67, 0xc1, 0x9c, 0xd1, 0x07,
0x59, 0x83, 0x86, 0xef, 0xc6, 0x89, 0xb8, 0x59, 0x14, 0xdb, 0xa3, 0x43, 0xfa, 0x46, 0x97, 0xcc,
0x38, 0xbc, 0x8a, 0x10, 0x97, 0xf5, 0x08, 0xf1, 0x6d, 0xa8, 0xa7, 0xb9, 0x89, 0x15, 0x43, 0xf6,
0x59, 0x8f, 0xf2, 0x7e, 0x3f, 0x25, 0xc2, 0xa0, 0x63, 0xe8, 0x87, 0x91, 0xb8, 0xb4, 0xe2, 0x05,
0xfb, 0x3d, 0x68, 0x68, 0xf4, 0x7a, 0x0c, 0xd2, 0x32, 0x62, 0x90, 0x2a, 0xf9, 0xa5, 0x94, 0x26,
0xbf, 0xd8, 0xff, 0x6a, 0xc1, 0x1c, 0xe3, 0x41, 0x2f, 0x18, 0x1e, 0x86, 0xbe, 0xd7, 0xbf, 0xc0,
0xbd, 0x97, 0xec, 0x26, 0x54, 0xa2, 0xe4, 0x45, 0x13, 0x66, 0x5c, 0x2f, 0x23, 0x1f, 0x42, 0x44,
0x55, 0x99, 0xc9, 0x30, 0x93, 0x80, 0x63, 0x37, 0x16, 0x62, 0x21, 0xbc, 0x36, 0x03, 0x64, 0x92,
0xc6, 0x80, 0xc8, 0x4d, 0x68, 0x6f, 0xe4, 0xf9, 0xbe, 0xc7, 0x69, 0xb9, 0x4f, 0x5f, 0x54, 0xc5,
0xfa, 0x1c, 0x78, 0xb1, 0x7b, 0x9c, 0x5e, 0xc4, 0xa8, 0x32, 0x86, 0x67, 0xdc, 0x67, 0x5a, 0x78,
0x66, 0x06, 0xf5, 0x8a, 0x09, 0xda, 0x7f, 0x54, 0x82, 0x86, 0x74, 0x11, 0x06, 0x43, 0x2a, 0xee,
0x16, 0x4d, 0xc5, 0xa8, 0x21, 0xb2, 0xde, 0x38, 0x8d, 0x69, 0x48, 0x96, 0x31, 0xca, 0x79, 0xc6,
0xb8, 0x06, 0x75, 0xc6, 0xa0, 0x6f, 0xe1, 0xb1, 0x4f, 0xa4, 0xfb, 0x2a, 0x40, 0xd6, 0xde, 0xc1,
0xda, 0x6a, 0x5a, 0x8b, 0xc0, 0x0b, 0x6f, 0x22, 0xdf, 0x81, 0xa6, 0x68, 0x06, 0x77, 0x0e, 0x35,
0x4f, 0x2a, 0x22, 0xc6, 0xae, 0x3a, 0x06, 0xa5, 0xfc, 0xf2, 0x8e, 0xfc, 0xb2, 0x76, 0xd9, 0x97,
0x92, 0xd2, 0xbe, 0xaf, 0x2e, 0x78, 0xef, 0x47, 0xee, 0xf8, 0x54, 0xca, 0xf2, 0x6d, 0x58, 0xf4,
0x82, 0xbe, 0x3f, 0x19, 0xd0, 0xde, 0x24, 0x70, 0x83, 0x20, 0x9c, 0x04, 0x7d, 0x2a, 0xb3, 0x5f,
0x8a, 0xaa, 0xec, 0x81, 0x4a, 0xfe, 0xc3, 0x86, 0xc8, 0x06, 0x54, 0xb9, 0xa9, 0xe4, 0xb6, 0xa3,
0x58, 0xd0, 0x39, 0x09, 0x59, 0x87, 0x2a, 0xb7, 0x98, 0x25, 0x43, 0x6a, 0xb4, 0x5d, 0x75, 0x38,
0x01, 0x53, 0x3b, 0x98, 0xe0, 0x69, 0xaa, 0x1d, 0xd3, 0xee, 0xcc, 0xf4, 0x79, 0x0a, 0xe8, 0x12,
0x90, 0x03, 0x2e, 0x29, 0xfa, 0xdd, 0xd0, 0x4f, 0x97, 0xa1, 0xa1, 0xc1, 0x4c, 0x83, 0x0c, 0xd9,
0x80, 0x7b, 0x03, 0xcf, 0x1d, 0xd1, 0x84, 0x46, 0x42, 0x3a, 0x32, 0x28, 0xa3, 0x73, 0xcf, 0x86,
0xbd, 0x70, 0x92, 0xf4, 0x06, 0x74, 0x18, 0x51, 0x6e, 0x4d, 0x99, 0x69, 0x32, 0x50, 0x46, 0xc7,
0xf8, 0x53, 0xa3, 0xe3, 0x1c, 0x94, 0x41, 0xe5, 0x4d, 0x0f, 0x5f, 0xa3, 0x4a, 0x7a, 0xd3, 0xc3,
0x57, 0x24, 0xab, 0xfb, 0xaa, 0x05, 0xba, 0xef, 0x6d, 0x58, 0xe1, 0x5a, 0x4e, 0xe8, 0x83, 0x5e,
0x86, 0xb1, 0xa6, 0xd4, 0x92, 0x0d, 0x68, 0xb3, 0x31, 0x4b, 0x91, 0x88, 0xbd, 0x6f, 0xf1, 0xa8,
0xa9, 0xe5, 0xe4, 0x70, 0x46, 0x8b, 0xe1, 0x4b, 0x9d, 0x96, 0xdf, 0x7c, 0xe7, 0x70, 0xa4, 0x75,
0x9f, 0x99, 0xb4, 0x75, 0x41, 0x9b, 0xc1, 0xed, 0x39, 0x68, 0x1c, 0x25, 0xe1, 0x58, 0x6e, 0x4a,
0x0b, 0x9a, 0xbc, 0x28, 0xb2, 0x90, 0x5e, 0x81, 0xab, 0xc8, 0x45, 0x8f, 0xc2, 0x71, 0xe8, 0x87,
0xc3, 0x0b, 0xe3, 0xe8, 0xf4, 0x97, 0x16, 0x2c, 0x1a, 0xb5, 0xe9, 0xd9, 0x09, 0xa3, 0x2e, 0x32,
0x7d, 0x84, 0x33, 0xde, 0x82, 0xa6, 0x82, 0x39, 0x21, 0x0f, 0x70, 0x3f, 0x16, 0x19, 0x25, 0x5b,
0x30, 0x2f, 0x47, 0x26, 0x3f, 0xe4, 0x5c, 0xd8, 0xc9, 0x73, 0xa1, 0xf8, 0xbe, 0x25, 0x3e, 0x90,
0x4d, 0x7c, 0x41, 0x64, 0x10, 0xf0, 0xa3, 0x94, 0x0c, 0xb2, 0xa9, 0xc3, 0x97, 0x7e, 0xd4, 0x96,
0x23, 0xe8, 0x2b, 0x30, 0xb6, 0x7f, 0xc1, 0x02, 0x48, 0x47, 0x87, 0xf7, 0xce, 0xca, 0x8c, 0xf0,
0xe7, 0x2e, 0x9a, 0xc9, 0x78, 0x1d, 0x9a, 0xea, 0xbe, 0x32, 0xb5, 0x4c, 0x0d, 0x89, 0x31, 0xcf,
0xf9, 0x26, 0xcc, 0x0f, 0xfd, 0xf0, 0x18, 0xcd, 0x3a, 0xa6, 0xb5, 0xc5, 0x22, 0x17, 0xab, 0xc5,
0xe1, 0x7b, 0x02, 0x4d, 0xcd, 0x58, 0x45, 0x33, 0x63, 0xf6, 0x2f, 0x96, 0xd4, 0xf5, 0x52, 0x3a,
0xe7, 0xa9, 0x52, 0x46, 0xee, 0xe4, 0xd4, 0xe9, 0x94, 0xdb, 0x1c, 0x74, 0x4e, 0x0f, 0x2f, 0x8d,
0x76, 0xbd, 0x07, 0xad, 0x88, 0xeb, 0x2b, 0xa9, 0xcc, 0x2a, 0x2f, 0x50, 0x66, 0x73, 0x91, 0x61,
0xeb, 0x3e, 0x09, 0x6d, 0x77, 0x70, 0x46, 0xa3, 0xc4, 0xc3, 0x78, 0x03, 0x3a, 0x1a, 0x5c, 0x05,
0xcf, 0x6b, 0x38, 0xda, 0xff, 0x9b, 0x30, 0x2f, 0xf2, 0xdf, 0x14, 0xa5, 0xc8, 0x65, 0x4f, 0x61,
0x46, 0x68, 0xff, 0xb6, 0xbc, 0xc9, 0x32, 0xf7, 0x70, 0xfa, 0x8a, 0xe8, 0xb3, 0x2b, 0x65, 0x66,
0xf7, 0x09, 0x71, 0xab, 0x34, 0x90, 0x41, 0x8d, 0xb2, 0x96, 0x6d, 0x32, 0x10, 0xb7, 0x80, 0xe6,
0x92, 0x56, 0x5e, 0x66, 0x49, 0xed, 0x1f, 0x58, 0x30, 0xbb, 0x17, 0x8e, 0xf7, 0x44, 0xde, 0x0d,
0x0a, 0x82, 0x4a, 0x3c, 0x95, 0xc5, 0x17, 0x64, 0xe4, 0x14, 0xda, 0xf7, 0xb9, 0xac, 0x7d, 0xff,
0xbf, 0xf0, 0x0a, 0x86, 0xd4, 0xa2, 0x70, 0x1c, 0x46, 0x4c, 0x18, 0x5d, 0x9f, 0x1b, 0xf3, 0x30,
0x48, 0x4e, 0xa5, 0x1a, 0x7b, 0x11, 0x09, 0x9e, 0x73, 0xd9, 0xd9, 0x8c, 0xbb, 0xe6, 0xc2, 0x1f,
0xe1, 0xda, 0x2d, 0x5f, 0x61, 0x7f, 0x1e, 0xea, 0xe8, 0x50, 0xe3, 0xb4, 0xde, 0x84, 0xfa, 0x69,
0x38, 0xee, 0x9d, 0x7a, 0x41, 0x22, 0x85, 0xbb, 0x95, 0x7a, 0xba, 0x7b, 0xb8, 0x20, 0x8a, 0xc0,
0xfe, 0xb5, 0x19, 0x98, 0x7d, 0x10, 0x9c, 0x85, 0x5e, 0x1f, 0x6f, 0xcd, 0x46, 0x74, 0x14, 0xca,
0x34, 0x5c, 0xf6, 0x3f, 0xb9, 0x06, 0xb3, 0x98, 0x77, 0x36, 0xe6, 0x4c, 0xdb, 0xe4, 0xb7, 0xdb,
0x02, 0x62, 0x4e, 0x42, 0x94, 0xbe, 0x00, 0xe0, 0xe2, 0xa3, 0x21, 0xec, 0xa8, 0x11, 0xe9, 0x19,
0xfc, 0xa2, 0x94, 0xa6, 0x39, 0x57, 0xb5, 0x34, 0x67, 0xd6, 0x97, 0xc8, 0x13, 0xe2, 0x89, 0x24,
0xbc, 0x2f, 0x01, 0xe1, 0xf1, 0x28, 0xa2, 0x3c, 0x24, 0x8a, 0x2e, 0xc7, 0xac, 0x38, 0x1e, 0xe9,
0x20, 0x73, 0x4b, 0xf8, 0x07, 0x9c, 0x86, 0x2b, 0x61, 0x1d, 0x62, 0x8e, 0x5e, 0xf6, 0x75, 0x46,
0x9d, 0xf3, 0x7e, 0x06, 0x66, 0x9a, 0x7a, 0x40, 0x95, 0x42, 0xe5, 0xf3, 0x00, 0xfe, 0xca, 0x21,
0x8b, 0x6b, 0x87, 0x2a, 0x9e, 0x22, 0x28, 0x0f, 0x55, 0x8c, 0x61, 0x5c, 0xdf, 0x3f, 0x76, 0xfb,
0x4f, 0xf1, 0xf1, 0x0d, 0xde, 0x63, 0xd5, 0x1d, 0x13, 0xc4, 0x6c, 0x9f, 0x74, 0x57, 0x31, 0x0f,
0xa0, 0xe2, 0xe8, 0x10, 0xb9, 0x03, 0x0d, 0x3c, 0x48, 0x8a, 0x7d, 0x6d, 0xe1, 0xbe, 0xb6, 0xf5,
0x93, 0x26, 0xee, 0xac, 0x4e, 0xa4, 0xdf, 0xe8, 0xcd, 0xe7, 0x92, 0xf6, 0xdc, 0xc1, 0x40, 0x5c,
0x84, 0xb6, 0xf9, 0xa1, 0x58, 0x01, 0xcc, 0xaa, 0x8a, 0x05, 0xe3, 0x04, 0x0b, 0x48, 0x60, 0x60,
0xe4, 0x3a, 0xd4, 0xd8, 0x21, 0x67, 0xec, 0x7a, 0x03, 0xcc, 0xfa, 0xe3, 0x67, 0x2d, 0x85, 0xb1,
0x36, 0xe4, 0xff, 0x78, 0x61, 0xb9, 0x88, 0xab, 0x62, 0x60, 0x6c, 0x6d, 0x54, 0x19, 0x85, 0x69,
0x89, 0xef, 0xa8, 0x01, 0x92, 0xb7, 0xf0, 0x3a, 0x2a, 0xa1, 0x9d, 0x65, 0x0c, 0x77, 0xbd, 0x22,
0xe6, 0x2c, 0x98, 0x56, 0xfe, 0x3d, 0x62, 0x24, 0x0e, 0xa7, 0xb4, 0xb7, 0xa0, 0xa9, 0xc3, 0xa4,
0x06, 0x95, 0x87, 0x87, 0xbb, 0x07, 0xed, 0x2b, 0xa4, 0x01, 0xb3, 0x47, 0xbb, 0x8f, 0x1e, 0xed,
0xef, 0xee, 0xb4, 0x2d, 0xd2, 0x84, 0x9a, 0x4a, 0xcd, 0x2a, 0xb1, 0xd2, 0xd6, 0xf6, 0xf6, 0xee,
0xe1, 0xa3, 0xdd, 0x9d, 0x76, 0xd9, 0x4e, 0x80, 0x6c, 0x0d, 0x06, 0xa2, 0x15, 0x75, 0xd4, 0x4f,
0xf9, 0xd9, 0x32, 0xf8, 0xb9, 0x80, 0xa7, 0x4a, 0xc5, 0x3c, 0xf5, 0xc2, 0x95, 0xb7, 0x77, 0xa1,
0x71, 0xa8, 0x3d, 0x54, 0x41, 0xf1, 0x92, 0x4f, 0x54, 0x84, 0x58, 0x6a, 0x88, 0x36, 0x9c, 0x92,
0x3e, 0x1c, 0xfb, 0x77, 0x2c, 0x9e, 0x3c, 0xaf, 0x86, 0xcf, 0xfb, 0xb6, 0xa1, 0xa9, 0x62, 0x4e,
0x69, 0xd6, 0xa5, 0x81, 0x31, 0x1a, 0x1c, 0x4a, 0x2f, 0x3c, 0x39, 0x89, 0xa9, 0xcc, 0x91, 0x32,
0x30, 0x26, 0x17, 0xcc, 0xc3, 0x62, 0xde, 0x8a, 0xc7, 0x7b, 0x88, 0x45, 0xae, 0x54, 0x0e, 0x67,
0x5a, 0x5e, 0x84, 0x55, 0x64, 0x76, 0x98, 0x2a, 0xab, 0xe4, 0xd0, 0xec, 0x2a, 0x6f, 0x40, 0x4d,
0xb5, 0x6b, 0x2a, 0x30, 0x49, 0xa9, 0xea, 0x99, 0xa2, 0xc4, 0x33, 0x87, 0x31, 0x68, 0xae, 0xb4,
0xf3, 0x15, 0xe4, 0x16, 0x90, 0x13, 0x2f, 0xca, 0x92, 0x97, 0x91, 0xbc, 0xa0, 0xc6, 0x7e, 0x02,
0x8b, 0x92, 0x91, 0x34, 0xd7, 0xca, 0xdc, 0x44, 0xeb, 0x32, 0xf1, 0x29, 0xe5, 0xc5, 0xc7, 0xfe,
0x0f, 0x0b, 0x66, 0xc5, 0x4e, 0xe7, 0x1e, 0x3b, 0xf1, 0x7d, 0x36, 0x30, 0xd2, 0x31, 0xde, 0x85,
0xa0, 0xac, 0x09, 0xa5, 0x99, 0x53, 0x8b, 0xe5, 0x22, 0xb5, 0x48, 0xa0, 0x32, 0x76, 0x93, 0x53,
0x3c, 0x6f, 0xd7, 0x1d, 0xfc, 0x9f, 0xb4, 0x79, 0x74, 0x88, 0xab, 0x60, 0x8c, 0x0c, 0x15, 0x3d,
0xeb, 0xe2, 0xd6, 0x3e, 0xff, 0xac, 0xeb, 0x1a, 0xd4, 0x71, 0x00, 0xbd, 0x34, 0xf8, 0x93, 0x02,
0x8c, 0x73, 0x79, 0x01, 0xe5, 0x5a, 0xa4, 0x68, 0xa7, 0x88, 0xbd, 0xcc, 0x77, 0x5e, 0x2c, 0x81,
0xba, 0x4a, 0x16, 0xc9, 0xb8, 0x29, 0x9c, 0x72, 0x84, 0x18, 0x40, 0x96, 0x23, 0x04, 0xa9, 0xa3,
0xea, 0xed, 0x2e, 0x74, 0x76, 0xa8, 0x4f, 0x13, 0xba, 0xe5, 0xfb, 0xd9, 0xf6, 0x5f, 0x81, 0xab,
0x05, 0x75, 0xc2, 0x9b, 0xfe, 0x32, 0x2c, 0x6f, 0xf1, 0xc4, 0xc5, 0x1f, 0x57, 0x32, 0x8e, 0xdd,
0x81, 0x95, 0x6c, 0x93, 0xa2, 0xb3, 0x7b, 0xb0, 0xb0, 0x43, 0x8f, 0x27, 0xc3, 0x7d, 0x7a, 0x96,
0x76, 0x44, 0xa0, 0x12, 0x9f, 0x86, 0xe7, 0x42, 0x30, 0xf1, 0x7f, 0xf2, 0x2a, 0x80, 0xcf, 0x68,
0x7a, 0xf1, 0x98, 0xf6, 0xe5, 0x53, 0x0c, 0x44, 0x8e, 0xc6, 0xb4, 0x6f, 0xbf, 0x0d, 0x44, 0x6f,
0x47, 0xac, 0x17, 0xb3, 0x82, 0x93, 0xe3, 0x5e, 0x7c, 0x11, 0x27, 0x74, 0x24, 0xdf, 0x98, 0xe8,
0x90, 0x7d, 0x13, 0x9a, 0x87, 0xee, 0x85, 0x43, 0xbf, 0x29, 0xde, 0xb8, 0xad, 0xc2, 0xec, 0xd8,
0xbd, 0x60, 0x6a, 0x4a, 0x45, 0xa5, 0xb0, 0xda, 0xfe, 0xb7, 0x12, 0xcc, 0x70, 0x4a, 0xd6, 0xea,
0x80, 0xc6, 0x89, 0x17, 0x20, 0x63, 0xc9, 0x56, 0x35, 0x28, 0xc7, 0xca, 0xa5, 0x02, 0x56, 0x16,
0x67, 0x36, 0x99, 0xd6, 0x2e, 0xf8, 0xd5, 0xc0, 0x18, 0x73, 0xa5, 0x59, 0x71, 0x3c, 0x2c, 0x92,
0x02, 0x99, 0x00, 0x66, 0x6a, 0x6b, 0xf9, 0xf8, 0xa4, 0x94, 0x0a, 0xce, 0xd5, 0xa1, 0x42, 0x8b,
0x3e, 0xcb, 0x19, 0x3c, 0x67, 0xd1, 0x73, 0x96, 0xbb, 0xf6, 0x12, 0x96, 0x9b, 0x1f, 0xe4, 0x5e,
0x64, 0xb9, 0xe1, 0x25, 0x2c, 0xb7, 0x4d, 0xa0, 0x7d, 0x8f, 0x52, 0x87, 0x32, 0xdf, 0x50, 0xf2,
0xee, 0xb7, 0x2d, 0x68, 0x0b, 0x2e, 0x52, 0x75, 0xe4, 0x75, 0xc3, 0x07, 0x2e, 0x4c, 0x2f, 0xbf,
0x01, 0x73, 0xe8, 0x99, 0xaa, 0x48, 0xad, 0x08, 0x2b, 0x1b, 0x20, 0x9b, 0x87, 0xbc, 0x05, 0x1e,
0x79, 0xbe, 0xd8, 0x14, 0x1d, 0x92, 0xc1, 0xde, 0xc8, 0x15, 0xd9, 0x61, 0x96, 0xa3, 0xca, 0xf6,
0x1f, 0x5b, 0xb0, 0xa0, 0x0d, 0x58, 0x70, 0xe1, 0x7b, 0x20, 0xa5, 0x81, 0x87, 0x6d, 0xb9, 0xe4,
0xae, 0x9a, 0x62, 0x93, 0x7e, 0x66, 0x10, 0xe3, 0x66, 0xba, 0x17, 0x38, 0xc0, 0x78, 0x32, 0x12,
0x4a, 0x54, 0x87, 0x18, 0x23, 0x9d, 0x53, 0xfa, 0x54, 0x91, 0x70, 0x35, 0x6e, 0x60, 0x18, 0x1b,
0x63, 0x1e, 0xb5, 0x22, 0xaa, 0x88, 0xd8, 0x98, 0x0e, 0xda, 0x7f, 0x6b, 0xc1, 0x22, 0x3f, 0x1a,
0x89, 0x83, 0xa7, 0x7a, 0x19, 0x34, 0xc3, 0xcf, 0x82, 0x5c, 0x22, 0xf7, 0xae, 0x38, 0xa2, 0x4c,
0x3e, 0xfb, 0x92, 0xc7, 0x39, 0x95, 0xb2, 0x36, 0x65, 0x2f, 0xca, 0x45, 0x7b, 0xf1, 0x82, 0x95,
0x2e, 0x0a, 0x53, 0x56, 0x0b, 0xc3, 0x94, 0x77, 0x67, 0xa1, 0x1a, 0xf7, 0xc3, 0x31, 0xb5, 0x57,
0x60, 0xc9, 0x9c, 0x9c, 0x50, 0x41, 0xdf, 0xb5, 0xa0, 0x73, 0x8f, 0x87, 0xf3, 0xbd, 0x60, 0xb8,
0xe7, 0xc5, 0x49, 0x18, 0xa9, 0x07, 0x94, 0xd7, 0x01, 0xe2, 0xc4, 0x8d, 0x12, 0x9e, 0x98, 0x2c,
0xc2, 0x83, 0x29, 0xc2, 0xc6, 0x48, 0x83, 0x01, 0xaf, 0xe5, 0x7b, 0xa3, 0xca, 0x39, 0x1f, 0x42,
0x1c, 0xde, 0x0c, 0x4b, 0xfc, 0x06, 0x4f, 0xe1, 0x64, 0xbe, 0x02, 0x3d, 0x43, 0xbd, 0xce, 0x4f,
0x45, 0x19, 0xd4, 0xfe, 0x6b, 0x0b, 0xe6, 0xd3, 0x41, 0xe2, 0xe5, 0xa6, 0xa9, 0x1d, 0x84, 0xf9,
0x4d, 0xb5, 0x83, 0x0c, 0x5c, 0x7a, 0xcc, 0x1e, 0x8b, 0xb1, 0x69, 0x08, 0x4a, 0xac, 0x28, 0x85,
0x13, 0xe9, 0xe0, 0xe8, 0x10, 0x4f, 0xc8, 0x62, 0x9e, 0x80, 0xf0, 0x6a, 0x44, 0x09, 0xf3, 0xca,
0x47, 0x09, 0x7e, 0xc5, 0x43, 0xac, 0xb2, 0x28, 0x4d, 0xe9, 0x2c, 0xa2, 0x68, 0x4a, 0xf5, 0xab,
0x91, 0x1a, 0x5f, 0x1f, 0x59, 0xb6, 0x7f, 0xc9, 0x82, 0xab, 0x05, 0x0b, 0x2f, 0xa4, 0x66, 0x07,
0x16, 0x4e, 0x54, 0xa5, 0x5c, 0x1c, 0x2e, 0x3a, 0x2b, 0xf2, 0xea, 0xcd, 0x5c, 0x10, 0x27, 0xff,
0x81, 0xf2, 0x8b, 0xf8, 0x72, 0x1b, 0x29, 0x8f, 0xf9, 0x8a, 0x8d, 0xe7, 0xd0, 0xd0, 0x9e, 0x2e,
0x92, 0x55, 0x58, 0x7c, 0xf2, 0xe0, 0xd1, 0xc1, 0xee, 0xd1, 0x51, 0xef, 0xf0, 0xf1, 0xdd, 0x2f,
0xed, 0x7e, 0xb5, 0xb7, 0xb7, 0x75, 0xb4, 0xd7, 0xbe, 0x42, 0x56, 0x80, 0x1c, 0xec, 0x1e, 0x3d,
0xda, 0xdd, 0x31, 0x70, 0x8b, 0x5c, 0x87, 0xee, 0xe3, 0x83, 0xc7, 0x47, 0xbb, 0x3b, 0xbd, 0xa2,
0xef, 0x4a, 0xe4, 0x55, 0xb8, 0x2a, 0xea, 0x0b, 0x3e, 0x2f, 0xdf, 0xf9, 0xe5, 0x32, 0xb4, 0xf8,
0xad, 0x30, 0xff, 0xad, 0x0c, 0x1a, 0x91, 0xf7, 0x61, 0x56, 0xfc, 0xd6, 0x09, 0x59, 0x16, 0xb3,
0x36, 0x7f, 0x5d, 0xa5, 0xbb, 0x92, 0x85, 0x05, 0x5b, 0x2f, 0xfe, 0xd4, 0x0f, 0xfe, 0xf1, 0x57,
0x4b, 0x73, 0xa4, 0xb1, 0x79, 0xf6, 0xd6, 0xe6, 0x90, 0x06, 0x31, 0x6b, 0xe3, 0xeb, 0x00, 0xe9,
0xaf, 0x80, 0x90, 0x8e, 0x72, 0x27, 0x33, 0x3f, 0x6f, 0xd2, 0xbd, 0x5a, 0x50, 0x23, 0xda, 0xbd,
0x8a, 0xed, 0x2e, 0xda, 0x2d, 0xd6, 0xae, 0x17, 0x78, 0x09, 0xff, 0x49, 0x90, 0x77, 0xad, 0x0d,
0x32, 0x80, 0xa6, 0xfe, 0x23, 0x1f, 0x44, 0xc6, 0xb4, 0x0a, 0x7e, 0x62, 0xa4, 0xfb, 0x4a, 0x61,
0x9d, 0x0c, 0xe8, 0x61, 0x1f, 0xcb, 0x76, 0x9b, 0xf5, 0x31, 0x41, 0x8a, 0xb4, 0x17, 0x1f, 0x5a,
0xe6, 0x6f, 0x79, 0x90, 0x6b, 0x9a, 0xc6, 0xc9, 0xfd, 0x92, 0x48, 0xf7, 0xd5, 0x29, 0xb5, 0xa2,
0xaf, 0x57, 0xb1, 0xaf, 0x55, 0x9b, 0xb0, 0xbe, 0xfa, 0x48, 0x23, 0x7f, 0x49, 0xe4, 0x5d, 0x6b,
0xe3, 0xce, 0x9f, 0xaf, 0x41, 0x5d, 0x45, 0xa1, 0xc9, 0x87, 0x30, 0x67, 0x5c, 0xdb, 0x13, 0x39,
0x8d, 0xa2, 0x5b, 0xfe, 0xee, 0xb5, 0xe2, 0x4a, 0xd1, 0xf1, 0x75, 0xec, 0xb8, 0x43, 0x56, 0x58,
0xc7, 0xe2, 0xde, 0x7b, 0x13, 0x13, 0x50, 0x78, 0x36, 0xf9, 0x53, 0x3e, 0xcf, 0xf4, 0xaa, 0xdd,
0x98, 0x67, 0xee, 0x6a, 0xde, 0x98, 0x67, 0xfe, 0x7e, 0xde, 0xbe, 0x86, 0xdd, 0xad, 0x90, 0x25,
0xbd, 0x3b, 0x15, 0x1d, 0xa6, 0xf8, 0x04, 0x42, 0xff, 0x19, 0x0c, 0xf2, 0xaa, 0x62, 0xac, 0xa2,
0x9f, 0xc7, 0x50, 0x2c, 0x92, 0xff, 0x8d, 0x0c, 0xbb, 0x83, 0x5d, 0x11, 0x82, 0xdb, 0xa7, 0xff,
0x0a, 0x06, 0xf9, 0x1a, 0xd4, 0xd5, 0xb3, 0x67, 0xb2, 0xaa, 0x3d, 0x43, 0xd7, 0x9f, 0x69, 0x77,
0x3b, 0xf9, 0x8a, 0x22, 0xc6, 0xd0, 0x5b, 0x66, 0x8c, 0xf1, 0x04, 0x1a, 0xda, 0xd3, 0x66, 0x72,
0x55, 0xdd, 0x21, 0x64, 0x9f, 0x4f, 0x77, 0xbb, 0x45, 0x55, 0xa2, 0x8b, 0x05, 0xec, 0xa2, 0x41,
0xea, 0xc8, 0x7b, 0xc9, 0xb3, 0x30, 0x26, 0xfb, 0xb0, 0x2c, 0xce, 0x3d, 0xc7, 0xf4, 0xe3, 0x2c,
0x51, 0xc1, 0xaf, 0x82, 0xdc, 0xb6, 0xc8, 0x7b, 0x50, 0x93, 0x2f, 0xd8, 0xc9, 0x4a, 0xf1, 0x4b,
0xfc, 0xee, 0x6a, 0x0e, 0x17, 0x5a, 0xf1, 0xab, 0x00, 0xe9, 0x3b, 0x6a, 0x25, 0xc0, 0xb9, 0x77,
0xd9, 0x6a, 0x77, 0xf2, 0x8f, 0xae, 0xed, 0x15, 0x9c, 0x60, 0x9b, 0xa0, 0x00, 0x07, 0xf4, 0x5c,
0x3e, 0x0a, 0xfa, 0x06, 0x34, 0xb4, 0xa7, 0xd4, 0x6a, 0xf9, 0xf2, 0xcf, 0xb0, 0xd5, 0xf2, 0x15,
0xbc, 0xbc, 0xb6, 0xbb, 0xd8, 0xfa, 0x92, 0x3d, 0xcf, 0x5a, 0x8f, 0xbd, 0x61, 0x30, 0xe2, 0x04,
0x6c, 0x83, 0x4e, 0x61, 0xce, 0x78, 0x2f, 0xad, 0xa4, 0xa7, 0xe8, 0x35, 0xb6, 0x92, 0x9e, 0xc2,
0x27, 0xd6, 0x92, 0x9d, 0xed, 0x05, 0xd6, 0xcf, 0x19, 0x92, 0x68, 0x3d, 0x7d, 0x00, 0x0d, 0xed,
0xed, 0xb3, 0x9a, 0x4b, 0xfe, 0x99, 0xb5, 0x9a, 0x4b, 0xd1, 0x53, 0xe9, 0x25, 0xec, 0xa3, 0x65,
0x23, 0x2b, 0xe0, 0x9b, 0x1a, 0xd6, 0xf6, 0x87, 0xd0, 0x32, 0x5f, 0x43, 0x2b, 0xb9, 0x2c, 0x7c,
0x57, 0xad, 0xe4, 0x72, 0xca, 0x13, 0x6a, 0xc1, 0xd2, 0x1b, 0x8b, 0xaa, 0x93, 0xcd, 0x8f, 0xc4,
0xcd, 0xf1, 0x73, 0xf2, 0x65, 0xa6, 0x7c, 0xc4, 0x23, 0x27, 0xb2, 0xaa, 0x71, 0xad, 0xfe, 0x14,
0x4a, 0xc9, 0x4b, 0xee, 0x3d, 0x94, 0xc9, 0xcc, 0xfc, 0x55, 0x10, 0x5a, 0x14, 0x7c, 0xec, 0xa4,
0x59, 0x14, 0xfd, 0x3d, 0x94, 0x66, 0x51, 0x8c, 0x37, 0x51, 0x59, 0x8b, 0x92, 0x78, 0xac, 0x8d,
0x00, 0xe6, 0x33, 0x69, 0x7f, 0x4a, 0x2a, 0x8a, 0xf3, 0xa4, 0xbb, 0xd7, 0x5f, 0x9c, 0x2d, 0x68,
0x2a, 0x2a, 0xa9, 0xa0, 0x36, 0x65, 0x56, 0xfa, 0xff, 0x87, 0xa6, 0xfe, 0x4e, 0x95, 0xe8, 0xa2,
0x9c, 0xed, 0xe9, 0x95, 0xc2, 0x3a, 0x73, 0x73, 0x49, 0x53, 0xef, 0x86, 0x7c, 0x05, 0x56, 0x94,
0xa8, 0xeb, 0x99, 0x64, 0x31, 0x79, 0xad, 0x20, 0xbf, 0x4c, 0x8f, 0x86, 0x74, 0xaf, 0x4e, 0x4d,
0x40, 0xbb, 0x6d, 0x31, 0xa6, 0x31, 0x1f, 0x00, 0xa6, 0xca, 0xbc, 0xe8, 0xdd, 0x63, 0xaa, 0xcc,
0x0b, 0x5f, 0x0d, 0x4a, 0xa6, 0x21, 0x8b, 0xc6, 0x1a, 0xf1, 0x6b, 0x01, 0xf2, 0x01, 0xcc, 0x6b,
0xb9, 0xba, 0x47, 0x17, 0x41, 0x5f, 0x09, 0x40, 0xfe, 0x51, 0x47, 0xb7, 0xc8, 0x5d, 0xb7, 0x57,
0xb1, 0xfd, 0x05, 0xdb, 0x58, 0x1c, 0xc6, 0xfc, 0xdb, 0xd0, 0xd0, 0xf3, 0x80, 0x5f, 0xd0, 0xee,
0xaa, 0x56, 0xa5, 0xbf, 0x49, 0xb8, 0x6d, 0x91, 0xdf, 0xb0, 0xa0, 0x69, 0x64, 0xd5, 0x1a, 0x97,
0x5f, 0x99, 0x76, 0x3a, 0x7a, 0x9d, 0xde, 0x90, 0xed, 0xe0, 0x20, 0xf7, 0x37, 0xbe, 0x68, 0x2c,
0xc2, 0x47, 0xc6, 0xb1, 0xef, 0x56, 0xf6, 0x67, 0x60, 0x9e, 0x67, 0x09, 0xf4, 0x87, 0x2f, 0xcf,
0x6f, 0x5b, 0xe4, 0x7b, 0x16, 0xb4, 0xcc, 0x60, 0x85, 0xda, 0xaa, 0xc2, 0xb0, 0x88, 0xda, 0xaa,
0x29, 0x11, 0x8e, 0x0f, 0x70, 0x94, 0x8f, 0x36, 0x1c, 0x63, 0x94, 0xe2, 0x69, 0xe8, 0x8f, 0x36,
0x5a, 0xf2, 0x2e, 0xff, 0x29, 0x28, 0x19, 0x41, 0x23, 0x9a, 0xd5, 0xc8, 0x6e, 0xaf, 0xfe, 0xeb,
0x46, 0xeb, 0xd6, 0x6d, 0x8b, 0x7c, 0x83, 0xff, 0x5a, 0x8c, 0xf8, 0x16, 0xb9, 0xe4, 0x65, 0xbf,
0xb7, 0x6f, 0xe0, 0x9c, 0xae, 0xdb, 0x57, 0x8d, 0x39, 0x65, 0xed, 0xf1, 0x16, 0x1f, 0x9d, 0xf8,
0x61, 0xa2, 0xd4, 0xa0, 0xe4, 0x7e, 0xac, 0x68, 0xfa, 0x20, 0x47, 0x7c, 0x90, 0x82, 0xdc, 0x60,
0xe5, 0x97, 0x6c, 0xc6, 0xde, 0xc0, 0xb1, 0xde, 0xb0, 0x5f, 0x9b, 0x3a, 0xd6, 0x4d, 0x0c, 0x39,
0xb0, 0x11, 0x1f, 0x02, 0xa4, 0xd1, 0x6e, 0x92, 0x89, 0xb6, 0x2a, 0x01, 0xcf, 0x07, 0xc4, 0x4d,
0x79, 0x91, 0x41, 0x59, 0xd6, 0xe2, 0xd7, 0xb8, 0xba, 0x7a, 0x20, 0xe3, 0xb4, 0xba, 0x53, 0x62,
0x86, 0xa5, 0x0d, 0xa7, 0x24, 0xdb, 0xbe, 0xa1, 0xac, 0x54, 0xd0, 0xf7, 0x31, 0xcc, 0xed, 0x87,
0xe1, 0xd3, 0xc9, 0x58, 0xdd, 0x5c, 0x99, 0xd1, 0xc0, 0x3d, 0x37, 0x3e, 0xed, 0x66, 0x66, 0x61,
0xaf, 0x61, 0x53, 0x5d, 0xd2, 0xd1, 0x9a, 0xda, 0xfc, 0x28, 0x8d, 0xa6, 0x3f, 0x27, 0x2e, 0x2c,
0x28, 0x1d, 0xa8, 0x06, 0xde, 0x35, 0x9b, 0x31, 0x34, 0x5f, 0xb6, 0x0b, 0xc3, 0xb3, 0x95, 0xa3,
0xdd, 0x8c, 0x65, 0x9b, 0xb7, 0x2d, 0x72, 0x08, 0xcd, 0x1d, 0xda, 0x0f, 0x07, 0x54, 0x84, 0xd4,
0x16, 0xd3, 0x81, 0xab, 0x58, 0x5c, 0x77, 0xce, 0x00, 0x4d, 0xbb, 0x30, 0x76, 0x2f, 0x22, 0xfa,
0xcd, 0xcd, 0x8f, 0x44, 0xb0, 0xee, 0xb9, 0xb4, 0x0b, 0x32, 0x9a, 0x69, 0xd8, 0x85, 0x4c, 0xf8,
0xd3, 0xb0, 0x0b, 0xb9, 0xf0, 0xa7, 0xb1, 0xd4, 0x32, 0x9a, 0x4a, 0x7c, 0x58, 0xc8, 0x45, 0x4c,
0x95, 0x49, 0x98, 0x16, 0x67, 0xed, 0xae, 0x4d, 0x27, 0x30, 0x7b, 0xdb, 0x30, 0x7b, 0x3b, 0x82,
0xb9, 0x1d, 0xca, 0x17, 0x8b, 0xa7, 0xc7, 0x64, 0x52, 0xb3, 0xf5, 0xe4, 0x9b, 0xac, 0x02, 0xc7,
0x3a, 0xd3, 0xf0, 0x63, 0x6e, 0x0a, 0xf9, 0x1a, 0x34, 0xee, 0xd3, 0x44, 0xe6, 0xc3, 0x28, 0xd7,
0x33, 0x93, 0x20, 0xd3, 0x2d, 0x48, 0xa7, 0x31, 0x79, 0x06, 0x5b, 0xdb, 0xa4, 0x83, 0x21, 0xe5,
0xca, 0xa9, 0xe7, 0x0d, 0x9e, 0x93, 0xff, 0x87, 0x8d, 0xab, 0xb4, 0xbd, 0x15, 0x2d, 0x8d, 0x42,
0x6f, 0x7c, 0x3e, 0x83, 0x17, 0xb5, 0x1c, 0x84, 0x03, 0xaa, 0xb9, 0x40, 0x01, 0x34, 0xb4, 0x6c,
0x53, 0x25, 0x40, 0xf9, 0xe4, 0x60, 0x25, 0x40, 0x05, 0xc9, 0xa9, 0xf6, 0x3a, 0xf6, 0x63, 0x93,
0xb5, 0xb4, 0x1f, 0x9e, 0x90, 0x9a, 0xf6, 0xb4, 0xf9, 0x91, 0x3b, 0x4a, 0x9e, 0x93, 0x27, 0xf8,
0x3e, 0x5c, 0xcf, 0xf9, 0x49, 0x7d, 0xe9, 0x6c, 0x7a, 0x90, 0x5a, 0x2c, 0xad, 0xca, 0xf4, 0xaf,
0x79, 0x57, 0xe8, 0x29, 0x7d, 0x16, 0xe0, 0x28, 0x09, 0xc7, 0x3b, 0x2e, 0x1d, 0x85, 0x41, 0xaa,
0x6b, 0xd3, 0xbc, 0x96, 0x54, 0x7f, 0x69, 0xc9, 0x2d, 0xe4, 0x89, 0x76, 0xf8, 0x30, 0x52, 0xa6,
0x24, 0x73, 0x4d, 0x4d, 0x7d, 0x51, 0x0b, 0x52, 0x90, 0xfe, 0x72, 0xdb, 0x22, 0x5b, 0x00, 0x69,
0xc8, 0x5c, 0x1d, 0x25, 0x72, 0xd1, 0x78, 0xa5, 0xf6, 0x0a, 0xe2, 0xeb, 0x87, 0x50, 0x4f, 0x63,
0xb0, 0xab, 0x69, 0x42, 0xb4, 0x11, 0xb1, 0x55, 0x16, 0x3c, 0x17, 0x19, 0xb5, 0xdb, 0xb8, 0x54,
0x40, 0x6a, 0x6c, 0xa9, 0x30, 0xdc, 0xe9, 0xc1, 0x22, 0x1f, 0xa0, 0x72, 0x47, 0x30, 0x53, 0x43,
0xce, 0xa4, 0x20, 0x3a, 0xa9, 0xa4, 0xb9, 0x30, 0xb8, 0x67, 0x44, 0x2b, 0x18, 0xb7, 0xf2, 0x2c,
0x11, 0xa6, 0x9a, 0x47, 0xb0, 0x90, 0x8b, 0x3e, 0x29, 0x91, 0x9e, 0x16, 0x10, 0x54, 0x22, 0x3d,
0x35, 0x70, 0x65, 0x2f, 0x63, 0x97, 0xf3, 0x36, 0xe0, 0x09, 0xe8, 0xdc, 0x4b, 0xfa, 0xa7, 0xef,
0x5a, 0x1b, 0x77, 0x6f, 0x7e, 0xf0, 0x3f, 0x86, 0x5e, 0x72, 0x3a, 0x39, 0xbe, 0xd5, 0x0f, 0x47,
0x9b, 0xbe, 0x0c, 0x29, 0x88, 0x7c, 0xab, 0x4d, 0x3f, 0x18, 0x6c, 0x62, 0xcb, 0xc7, 0x33, 0xf8,
0x3b, 0xba, 0x9f, 0xfe, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc0, 0xc6, 0x71, 0x9a, 0x79, 0x57,
0x27, 0x91, 0x17, 0x0c, 0x05, 0x7f, 0x02, 0x83, 0x0e, 0x11, 0x21, 0x6d, 0x28, 0xbb, 0x23, 0xc9,
0x9b, 0xec, 0x5f, 0x26, 0x44, 0x63, 0xf7, 0x7c, 0xc4, 0xe4, 0x4d, 0xed, 0x5a, 0xd3, 0x69, 0x08,
0x6c, 0x97, 0x6d, 0xdb, 0x4d, 0x58, 0xd4, 0x49, 0x64, 0xeb, 0x55, 0x6c, 0x7d, 0x41, 0xa3, 0x14,
0x9d, 0xdc, 0x80, 0x79, 0x49, 0x1f, 0xf1, 0xc1, 0xe2, 0x3e, 0xd6, 0x9d, 0x96, 0x80, 0xe5, 0x14,
0xd6, 0xa0, 0x7d, 0xec, 0x05, 0xae, 0xdf, 0xeb, 0xfb, 0xc9, 0x69, 0x6f, 0x40, 0xfd, 0xc4, 0xc5,
0x1d, 0xad, 0x3a, 0x2d, 0xc4, 0xb7, 0xfc, 0xe4, 0x74, 0x9b, 0xa1, 0xe4, 0x2d, 0xa8, 0x1f, 0x53,
0xda, 0xc3, 0x95, 0xe8, 0xd4, 0x0c, 0xe9, 0x90, 0xab, 0xeb, 0xd4, 0x8e, 0xe5, 0x3a, 0xaf, 0x41,
0x3b, 0x9c, 0x24, 0xc3, 0xd0, 0x0b, 0x86, 0xbd, 0xfe, 0x89, 0x1b, 0xf4, 0xbc, 0x41, 0xa7, 0x7e,
0xcd, 0x5a, 0xab, 0x38, 0x2d, 0x89, 0x33, 0xad, 0xf0, 0x60, 0x60, 0xff, 0x91, 0x05, 0x4d, 0xbe,
0xa8, 0xc2, 0xa0, 0x5c, 0x87, 0x39, 0x39, 0x76, 0x1a, 0x45, 0x61, 0x24, 0x04, 0xc5, 0x04, 0xc9,
0x3a, 0xb4, 0x25, 0x30, 0x8e, 0xa8, 0x37, 0x72, 0x87, 0x54, 0x68, 0x9f, 0x1c, 0x4e, 0x6e, 0xa7,
0x2d, 0x46, 0xe1, 0x24, 0xe1, 0x2a, 0xbd, 0x71, 0xbb, 0x29, 0x86, 0xef, 0x30, 0xcc, 0x31, 0x49,
0x98, 0xa0, 0x14, 0x6c, 0x8a, 0x81, 0xd9, 0xdf, 0xb3, 0x80, 0xb0, 0xa1, 0x3f, 0x0a, 0x79, 0x13,
0x62, 0x4d, 0xb3, 0xfb, 0x69, 0xbd, 0xf4, 0x7e, 0x96, 0xa6, 0xed, 0xe7, 0x1a, 0xcc, 0xe0, 0xb0,
0x98, 0xe4, 0x97, 0xb3, 0x43, 0xbf, 0x5b, 0xea, 0x58, 0x8e, 0xa8, 0x27, 0x36, 0x54, 0xf9, 0x1c,
0x2b, 0x05, 0x73, 0xe4, 0x55, 0xf6, 0x77, 0x2c, 0x68, 0xb2, 0xd5, 0x0f, 0xa8, 0x8f, 0x5a, 0x8d,
0xdc, 0x02, 0x72, 0x3c, 0x09, 0x06, 0x6c, 0xb3, 0x92, 0x67, 0xde, 0xa0, 0x77, 0x74, 0xce, 0xba,
0xc2, 0x71, 0xef, 0x5e, 0x72, 0x0a, 0xea, 0xc8, 0x5b, 0xd0, 0x36, 0xd0, 0x38, 0x89, 0xf8, 0xe8,
0x77, 0x2f, 0x39, 0xb9, 0x1a, 0xb6, 0x98, 0x4c, 0x6f, 0x4e, 0x92, 0x9e, 0x17, 0x0c, 0xe8, 0x33,
0x5c, 0xff, 0x39, 0xc7, 0xc0, 0xee, 0xb6, 0xa0, 0xa9, 0x7f, 0x67, 0x7f, 0x08, 0x35, 0xa9, 0x75,
0x51, 0xe3, 0x64, 0xc6, 0xe5, 0x68, 0x08, 0xe9, 0x42, 0xcd, 0x1c, 0x85, 0x53, 0xfb, 0x38, 0x7d,
0xdb, 0xff, 0x17, 0xda, 0x7b, 0x4c, 0xf5, 0x05, 0x5e, 0x30, 0x14, 0x66, 0x87, 0xe9, 0xe3, 0xf1,
0xe4, 0xe8, 0x29, 0x3d, 0x17, 0xfc, 0x27, 0x4a, 0x4c, 0xe8, 0x4f, 0xc2, 0x38, 0x11, 0xfd, 0xe0,
0xff, 0xf6, 0x5f, 0x58, 0x40, 0x76, 0xe2, 0xc4, 0x1b, 0xb9, 0x09, 0xbd, 0x47, 0x15, 0x23, 0x3c,
0x84, 0x26, 0x6b, 0xed, 0x51, 0xb8, 0xc9, 0x15, 0x3b, 0x57, 0x58, 0x6f, 0x8a, 0x2d, 0xc9, 0x7f,
0x70, 0x53, 0xa7, 0x66, 0x2e, 0xd7, 0xb9, 0x63, 0x34, 0xc0, 0x94, 0x4b, 0xe2, 0x46, 0x43, 0x9a,
0xa0, 0xd6, 0x17, 0xf6, 0x1e, 0x38, 0xb4, 0x15, 0x06, 0xc7, 0xdd, 0xff, 0x07, 0x0b, 0xb9, 0x36,
0x98, 0xc6, 0x49, 0xa7, 0xc1, 0xfe, 0x25, 0x4b, 0x50, 0x3d, 0x75, 0xfd, 0x09, 0x15, 0xa6, 0x86,
0x17, 0xde, 0x2b, 0xbd, 0x6b, 0xd9, 0x7d, 0x58, 0x34, 0xc6, 0x25, 0x64, 0xb2, 0x03, 0xb3, 0x4c,
0xf8, 0x99, 0x51, 0x45, 0xc5, 0xe9, 0xc8, 0x22, 0xb9, 0x0d, 0x4b, 0xc7, 0x94, 0x46, 0x6e, 0x82,
0xc5, 0xde, 0x98, 0x46, 0xb8, 0x27, 0xa2, 0xe5, 0xc2, 0x3a, 0xfb, 0x1f, 0x2d, 0x98, 0x67, 0x72,
0xf3, 0xbe, 0x1b, 0x9c, 0xcb, 0xb5, 0xda, 0x2b, 0x5c, 0xab, 0x35, 0xb1, 0x56, 0x19, 0xea, 0x8f,
0xbb, 0x50, 0xe5, 0xec, 0x42, 0x91, 0x6b, 0xd0, 0x34, 0x86, 0x5b, 0xe5, 0x56, 0x2c, 0x76, 0x93,
0x03, 0x1a, 0xdd, 0x3d, 0x4f, 0xe8, 0x0f, 0xbf, 0x94, 0x6f, 0x40, 0x3b, 0x1d, 0xb6, 0x58, 0x47,
0x02, 0x15, 0xc6, 0x98, 0xa2, 0x01, 0xfc, 0xdf, 0xfe, 0xb6, 0xc5, 0x09, 0xb7, 0x42, 0x4f, 0x59,
0x40, 0x46, 0xc8, 0x0c, 0xa5, 0x24, 0x64, 0xff, 0x4f, 0xf5, 0x10, 0x7e, 0xf8, 0xc9, 0x92, 0xcb,
0x50, 0x8b, 0x69, 0x30, 0xe8, 0xb9, 0xbe, 0x8f, 0x86, 0xa2, 0xe6, 0xcc, 0xb2, 0xf2, 0xa6, 0xef,
0xdb, 0x37, 0x60, 0x41, 0x1b, 0xdd, 0x0b, 0xe6, 0xb1, 0x0f, 0x64, 0xcf, 0x8b, 0x93, 0xc7, 0x41,
0x3c, 0xd6, 0x0c, 0xcc, 0x2b, 0x50, 0x1f, 0x79, 0x01, 0x8e, 0x8c, 0x4b, 0x6e, 0xd5, 0xa9, 0x8d,
0xbc, 0x80, 0x8d, 0x2b, 0xc6, 0x4a, 0xf7, 0x99, 0xa8, 0x2c, 0x89, 0x4a, 0xf7, 0x19, 0x56, 0xda,
0xef, 0xc2, 0xa2, 0xd1, 0x9e, 0xe8, 0xfa, 0x75, 0xa8, 0x4e, 0x92, 0x67, 0xa1, 0x34, 0xff, 0x0d,
0xc1, 0x21, 0xcc, 0x91, 0x74, 0x78, 0x8d, 0x7d, 0x07, 0x16, 0xf6, 0xe9, 0x99, 0x10, 0x64, 0x39,
0x90, 0x37, 0x2e, 0x74, 0x32, 0xb1, 0xde, 0xbe, 0x09, 0x44, 0xff, 0x38, 0x15, 0x00, 0xe9, 0x72,
0x5a, 0x86, 0xcb, 0x69, 0xbf, 0x01, 0xe4, 0xd0, 0x1b, 0x06, 0xef, 0xd3, 0x38, 0x76, 0x87, 0x4a,
0xf4, 0xdb, 0x50, 0x1e, 0xc5, 0x43, 0xa1, 0xaa, 0xd8, 0xbf, 0xf6, 0xa7, 0x60, 0xd1, 0xa0, 0x13,
0x0d, 0x5f, 0x81, 0x7a, 0xec, 0x0d, 0x03, 0x37, 0x99, 0x44, 0x54, 0x34, 0x9d, 0x02, 0xf6, 0x3d,
0x58, 0xfa, 0x32, 0x8d, 0xbc, 0xe3, 0xf3, 0x8b, 0x9a, 0x37, 0xdb, 0x29, 0x65, 0xdb, 0xd9, 0x81,
0xe5, 0x4c, 0x3b, 0xa2, 0x7b, 0xce, 0xbe, 0x62, 0x27, 0x6b, 0x0e, 0x2f, 0x68, 0xba, 0xaf, 0xa4,
0xeb, 0x3e, 0xfb, 0x31, 0x90, 0xad, 0x30, 0x08, 0x68, 0x3f, 0x39, 0xa0, 0x34, 0x4a, 0x0f, 0x99,
0x29, 0xaf, 0x36, 0x6e, 0xaf, 0x8a, 0x95, 0xcd, 0x2a, 0x54, 0xc1, 0xc4, 0x04, 0x2a, 0x63, 0x1a,
0x8d, 0xb0, 0xe1, 0x9a, 0x83, 0xff, 0xdb, 0xcb, 0xb0, 0x68, 0x34, 0x2b, 0xce, 0x07, 0x6f, 0xc3,
0xf2, 0xb6, 0x17, 0xf7, 0xf3, 0x1d, 0x76, 0x60, 0x76, 0x3c, 0x39, 0xea, 0xa5, 0x92, 0x28, 0x8b,
0xcc, 0xa5, 0xcc, 0x7e, 0x22, 0x1a, 0xfb, 0x59, 0x0b, 0x2a, 0xbb, 0x8f, 0xf6, 0xb6, 0x98, 0xad,
0xf0, 0x82, 0x7e, 0x38, 0x62, 0xf6, 0x96, 0x4f, 0x5a, 0x95, 0xa7, 0x4a, 0xd8, 0x15, 0xa8, 0xa3,
0x99, 0x66, 0x5e, 0xb2, 0x38, 0x0f, 0xa6, 0x00, 0xf3, 0xd0, 0xe9, 0xb3, 0xb1, 0x17, 0xa1, 0x0b,
0x2e, 0x1d, 0xeb, 0x0a, 0x9a, 0x99, 0x7c, 0x85, 0xfd, 0xed, 0x2a, 0xcc, 0x0a, 0xe3, 0x8b, 0xfd,
0xf5, 0x13, 0xef, 0x94, 0x8a, 0x91, 0x88, 0x12, 0x73, 0x81, 0x22, 0x3a, 0x0a, 0x13, 0xda, 0x33,
0xb6, 0xc1, 0x04, 0xf1, 0x04, 0xc2, 0x1b, 0xea, 0xf1, 0x33, 0x4b, 0x99, 0x53, 0x19, 0x20, 0x5b,
0x2c, 0xe9, 0x80, 0x55, 0xd0, 0x01, 0x93, 0x45, 0xb6, 0x12, 0x7d, 0x77, 0xec, 0xf6, 0xbd, 0xe4,
0x5c, 0xa8, 0x04, 0x55, 0x66, 0x6d, 0xfb, 0x61, 0xdf, 0xf5, 0x7b, 0x47, 0xae, 0xef, 0x06, 0x7d,
0x2a, 0x4f, 0x37, 0x06, 0xc8, 0x3c, 0x7d, 0x31, 0x24, 0x49, 0xc6, 0x4f, 0x03, 0x19, 0x94, 0xd9,
0xef, 0x7e, 0x38, 0x1a, 0x79, 0x09, 0x3b, 0x20, 0xa0, 0xf3, 0x58, 0x76, 0x34, 0x84, 0x9f, 0xa5,
0xb0, 0x74, 0xc6, 0x57, 0xaf, 0x2e, 0xcf, 0x52, 0x1a, 0xc8, 0x5a, 0x61, 0x56, 0x87, 0xa9, 0xb1,
0xa7, 0x67, 0x1d, 0xe0, 0xad, 0xa4, 0x08, 0xdb, 0x87, 0x49, 0x10, 0xd3, 0x24, 0xf1, 0xe9, 0x40,
0x0d, 0xa8, 0x81, 0x64, 0xf9, 0x0a, 0x72, 0x0b, 0x16, 0xf9, 0x99, 0x25, 0x76, 0x93, 0x30, 0x3e,
0xf1, 0xe2, 0x5e, 0xcc, 0xbc, 0xff, 0x26, 0xd2, 0x17, 0x55, 0x91, 0x77, 0x61, 0x35, 0x03, 0x47,
0xb4, 0x4f, 0xbd, 0x53, 0x3a, 0xe8, 0xcc, 0xe1, 0x57, 0xd3, 0xaa, 0xc9, 0x35, 0x68, 0xb0, 0xa3,
0xda, 0x64, 0x3c, 0x70, 0x99, 0x03, 0xd3, 0xc2, 0x7d, 0xd0, 0x21, 0xf2, 0x36, 0xcc, 0x8d, 0x29,
0xf7, 0x7e, 0x4e, 0x12, 0xbf, 0x1f, 0x77, 0xe6, 0x0d, 0xed, 0xc6, 0x38, 0xd7, 0x31, 0x29, 0x18,
0x53, 0xf6, 0x63, 0xf4, 0xd9, 0xdd, 0xf3, 0x4e, 0x1b, 0xd9, 0x2d, 0x05, 0x50, 0x46, 0x22, 0xef,
0xd4, 0x4d, 0x68, 0x67, 0x81, 0x2b, 0x74, 0x51, 0x64, 0xdf, 0x79, 0x81, 0x97, 0x78, 0x6e, 0x12,
0x46, 0x1d, 0x82, 0x75, 0x29, 0x60, 0xff, 0x96, 0xc5, 0xd5, 0xae, 0x60, 0x51, 0xa5, 0x3e, 0x5f,
0x83, 0x06, 0x67, 0xce, 0x5e, 0x18, 0xf8, 0xe7, 0x82, 0x5f, 0x81, 0x43, 0x0f, 0x03, 0xff, 0x9c,
0x7c, 0x02, 0xe6, 0xbc, 0x40, 0x27, 0xe1, 0x12, 0xde, 0x94, 0x20, 0x12, 0xbd, 0x06, 0x8d, 0xf1,
0xe4, 0xc8, 0xf7, 0xfa, 0x9c, 0xa4, 0xcc, 0x5b, 0xe1, 0x10, 0x12, 0x30, 0xdf, 0x99, 0x8f, 0x93,
0x53, 0x54, 0x90, 0xa2, 0x21, 0x30, 0x46, 0x62, 0xdf, 0x85, 0x25, 0x73, 0x80, 0x42, 0x95, 0xad,
0x43, 0x4d, 0x70, 0x7e, 0xdc, 0x69, 0xe0, 0xea, 0xb5, 0xc4, 0xea, 0x09, 0x52, 0x47, 0xd5, 0xdb,
0x7f, 0x58, 0x81, 0x45, 0x81, 0x6e, 0xf9, 0x61, 0x4c, 0x0f, 0x27, 0xa3, 0x91, 0x1b, 0x15, 0x88,
0x94, 0x75, 0x81, 0x48, 0x95, 0x4c, 0x91, 0x62, 0x8c, 0x7e, 0xe2, 0x7a, 0x01, 0x77, 0xfc, 0xb9,
0x3c, 0x6a, 0x08, 0x59, 0x83, 0xf9, 0xbe, 0x1f, 0xc6, 0xdc, 0xc9, 0xd5, 0xcf, 0xe8, 0x59, 0x38,
0xaf, 0x02, 0xaa, 0x45, 0x2a, 0x40, 0x17, 0xe1, 0x99, 0x8c, 0x08, 0xdb, 0xd0, 0x64, 0x8d, 0x52,
0xa9, 0x91, 0x66, 0xb9, 0xe3, 0xab, 0x63, 0x6c, 0x3c, 0x59, 0x81, 0xe1, 0xd2, 0x39, 0x5f, 0x24,
0x2e, 0xde, 0x88, 0xa2, 0xc6, 0xd3, 0xa8, 0xeb, 0x42, 0x5c, 0xf2, 0x55, 0xe4, 0x1e, 0x00, 0xef,
0x0b, 0xcd, 0x2e, 0xa0, 0xd9, 0x7d, 0xc3, 0xdc, 0x11, 0x7d, 0xed, 0x6f, 0xb2, 0xc2, 0x24, 0xa2,
0x68, 0x8a, 0xb5, 0x2f, 0xed, 0x9f, 0xb7, 0xa0, 0xa1, 0xd5, 0x91, 0x65, 0x58, 0xd8, 0x7a, 0xf8,
0xf0, 0x60, 0xc7, 0xd9, 0x7c, 0xf4, 0xe0, 0xcb, 0x3b, 0xbd, 0xad, 0xbd, 0x87, 0x87, 0x3b, 0xed,
0x4b, 0x0c, 0xde, 0x7b, 0xb8, 0xb5, 0xb9, 0xd7, 0xbb, 0xf7, 0xd0, 0xd9, 0x92, 0xb0, 0x45, 0x56,
0x80, 0x38, 0x3b, 0xef, 0x3f, 0x7c, 0xb4, 0x63, 0xe0, 0x25, 0xd2, 0x86, 0xe6, 0x5d, 0x67, 0x67,
0x73, 0x6b, 0x57, 0x20, 0x65, 0xb2, 0x04, 0xed, 0x7b, 0x8f, 0xf7, 0xb7, 0x1f, 0xec, 0xdf, 0xef,
0x6d, 0x6d, 0xee, 0x6f, 0xed, 0xec, 0xed, 0x6c, 0xb7, 0x2b, 0x64, 0x0e, 0xea, 0x9b, 0x77, 0x37,
0xf7, 0xb7, 0x1f, 0xee, 0xef, 0x6c, 0xb7, 0xab, 0xf6, 0xdf, 0x5b, 0xb0, 0x8c, 0xa3, 0x1e, 0x64,
0x05, 0xe4, 0x1a, 0x34, 0xfa, 0x61, 0x38, 0x66, 0xee, 0x6e, 0xaa, 0xd0, 0x75, 0x88, 0x31, 0x3f,
0x57, 0x9f, 0xc7, 0x61, 0xd4, 0xa7, 0x42, 0x3e, 0x00, 0xa1, 0x7b, 0x0c, 0x61, 0xcc, 0x2f, 0xb6,
0x97, 0x53, 0x70, 0xf1, 0x68, 0x70, 0x8c, 0x93, 0xac, 0xc0, 0xcc, 0x51, 0x44, 0xdd, 0xfe, 0x89,
0x90, 0x0c, 0x51, 0x22, 0x9f, 0x4c, 0xcf, 0x63, 0x7d, 0xb6, 0xfa, 0x3e, 0x1d, 0x20, 0xc7, 0xd4,
0x9c, 0x79, 0x81, 0x6f, 0x09, 0x98, 0xc9, 0xbf, 0x7b, 0xe4, 0x06, 0x83, 0x30, 0xa0, 0x03, 0xe1,
0xec, 0xa5, 0x80, 0x7d, 0x00, 0x2b, 0xd9, 0xf9, 0x09, 0xf9, 0x7a, 0x47, 0x93, 0x2f, 0xee, 0x7b,
0x75, 0xa7, 0xef, 0xa6, 0x26, 0x6b, 0xff, 0x62, 0x41, 0x85, 0x99, 0xe2, 0xe9, 0x66, 0x5b, 0xf7,
0xae, 0xca, 0xb9, 0x80, 0x1e, 0x1e, 0xf1, 0xb8, 0x72, 0xe6, 0x06, 0x4c, 0x43, 0xd2, 0xfa, 0x88,
0xf6, 0x4f, 0x71, 0xc6, 0xaa, 0x9e, 0x21, 0x4c, 0x40, 0x98, 0xeb, 0x8b, 0x5f, 0x0b, 0x01, 0x91,
0x65, 0x59, 0x87, 0x5f, 0xce, 0xa6, 0x75, 0xf8, 0x5d, 0x07, 0x66, 0xbd, 0xe0, 0x28, 0x9c, 0x04,
0x03, 0x14, 0x88, 0x9a, 0x23, 0x8b, 0x18, 0x42, 0x44, 0x41, 0xf5, 0x46, 0x92, 0xfd, 0x53, 0xc0,
0x26, 0xec, 0x24, 0x19, 0xa3, 0xeb, 0xa1, 0xa2, 0x59, 0xef, 0xc0, 0x82, 0x86, 0xa5, 0x6e, 0xec,
0x98, 0x01, 0x19, 0x37, 0x16, 0x7d, 0x16, 0x5e, 0x63, 0xb7, 0xa1, 0x75, 0x9f, 0x26, 0x0f, 0x82,
0xe3, 0x50, 0xb6, 0xf4, 0xbb, 0x15, 0x98, 0x57, 0x90, 0x68, 0x68, 0x0d, 0xe6, 0xbd, 0x01, 0x0d,
0x12, 0x2f, 0x39, 0xef, 0x19, 0x07, 0xd6, 0x2c, 0xcc, 0x7c, 0x3d, 0xd7, 0xf7, 0x5c, 0x19, 0x34,
0xe5, 0x05, 0x76, 0x80, 0x63, 0x86, 0x48, 0xda, 0x16, 0xb5, 0xc5, 0xfc, 0x9c, 0x5c, 0x58, 0xc7,
0x94, 0x01, 0xc3, 0x85, 0xb6, 0x57, 0x9f, 0x70, 0x9f, 0xa7, 0xa8, 0x8a, 0xad, 0x1a, 0x6f, 0x89,
0x4d, 0xb9, 0xca, 0x8d, 0x95, 0x02, 0x72, 0x51, 0xc9, 0x19, 0xae, 0xaa, 0xb2, 0x51, 0x49, 0x2d,
0xb2, 0x59, 0xcb, 0x45, 0x36, 0x99, 0x2a, 0x3b, 0x0f, 0xfa, 0x74, 0xd0, 0x4b, 0xc2, 0x1e, 0xaa,
0x5c, 0xdc, 0x9d, 0x9a, 0x93, 0x85, 0xc9, 0x15, 0x98, 0x4d, 0x68, 0x9c, 0x04, 0x34, 0x41, 0xad,
0x54, 0xc3, 0xf8, 0x89, 0x84, 0x98, 0x83, 0x3a, 0x89, 0xbc, 0xb8, 0xd3, 0xc4, 0x98, 0x25, 0xfe,
0x4f, 0x3e, 0x0d, 0xcb, 0x47, 0x34, 0x4e, 0x7a, 0x27, 0xd4, 0x1d, 0xd0, 0x08, 0x77, 0x9a, 0x07,
0x47, 0xb9, 0xdd, 0x2f, 0xae, 0x64, 0x3c, 0x74, 0x4a, 0xa3, 0xd8, 0x0b, 0x03, 0xb4, 0xf8, 0x75,
0x47, 0x16, 0x59, 0x7b, 0x6c, 0xf2, 0xca, 0x5e, 0xaa, 0x15, 0x9c, 0xc7, 0x89, 0x17, 0x57, 0x92,
0xeb, 0x30, 0x83, 0x13, 0x88, 0x3b, 0x6d, 0x23, 0x08, 0xb4, 0xc5, 0x40, 0x47, 0xd4, 0x7d, 0xa1,
0x52, 0x6b, 0xb4, 0x9b, 0xf6, 0x67, 0xa1, 0x8a, 0x30, 0xdb, 0x74, 0xbe, 0x18, 0x9c, 0x29, 0x78,
0x81, 0x0d, 0x2d, 0xa0, 0xc9, 0x59, 0x18, 0x3d, 0x95, 0x11, 0x74, 0x51, 0xb4, 0xbf, 0x89, 0x2e,
0xbe, 0x8a, 0x28, 0x3f, 0x46, 0xff, 0x84, 0x1d, 0xd4, 0xf8, 0x52, 0xc7, 0x27, 0xae, 0x38, 0x75,
0xd4, 0x10, 0x38, 0x3c, 0x71, 0x99, 0xda, 0x32, 0x76, 0x8f, 0x1f, 0xe4, 0x1a, 0x88, 0xed, 0xf2,
0xcd, 0xbb, 0x0e, 0x2d, 0x19, 0xab, 0x8e, 0x7b, 0x3e, 0x3d, 0x4e, 0x64, 0x18, 0x26, 0x98, 0x8c,
0xf0, 0xb4, 0xb7, 0x47, 0x8f, 0x13, 0x7b, 0x1f, 0x16, 0x84, 0x2a, 0x79, 0x38, 0xa6, 0xb2, 0xeb,
0xcf, 0x15, 0x99, 0xe4, 0xc6, 0xed, 0x45, 0x53, 0xf7, 0xf0, 0xe8, 0xbc, 0x49, 0x69, 0x3b, 0x40,
0x74, 0xd5, 0x24, 0x1a, 0x14, 0x76, 0x51, 0x06, 0x9a, 0xc4, 0x74, 0x0c, 0x8c, 0xad, 0x4f, 0x3c,
0xe9, 0xf7, 0xe5, 0x0d, 0x03, 0x3b, 0x0e, 0xf3, 0xa2, 0xfd, 0x7b, 0x16, 0x2c, 0x62, 0x6b, 0xd2,
0xa9, 0x10, 0xea, 0xff, 0xdd, 0x8f, 0x31, 0xcc, 0x66, 0x5f, 0x0f, 0xbe, 0x2d, 0x41, 0x55, 0x37,
0x08, 0xbc, 0xf0, 0xf1, 0x0f, 0xf5, 0x95, 0xec, 0xa1, 0xde, 0xfe, 0x75, 0x0b, 0x16, 0xb8, 0x4e,
0x4e, 0xdc, 0x64, 0x12, 0x8b, 0xe9, 0xff, 0x1f, 0x98, 0xe3, 0xc6, 0x55, 0x48, 0xb5, 0x18, 0xe8,
0x92, 0x52, 0x40, 0x88, 0x72, 0xe2, 0xdd, 0x4b, 0x8e, 0x49, 0x4c, 0xee, 0xa0, 0x83, 0x13, 0xf4,
0x10, 0x15, 0x71, 0xd4, 0xcb, 0x05, 0x66, 0x40, 0x7d, 0xaf, 0x91, 0xdf, 0xad, 0xc1, 0x0c, 0xf7,
0x77, 0xed, 0xfb, 0x30, 0x67, 0x74, 0x64, 0x04, 0x14, 0x9a, 0x3c, 0xa0, 0x90, 0x8b, 0xdc, 0x95,
0x0a, 0x22, 0x77, 0x7f, 0x50, 0x06, 0xc2, 0x98, 0x25, 0xb3, 0x1b, 0xcc, 0xe1, 0x0e, 0x07, 0xc6,
0xf1, 0xa9, 0xe9, 0xe8, 0x10, 0xb9, 0x09, 0x44, 0x2b, 0xca, 0x00, 0x2c, 0xb7, 0x3e, 0x05, 0x35,
0x4c, 0x4d, 0x0a, 0xe3, 0x2d, 0xcc, 0xac, 0x38, 0x28, 0xf2, 0x65, 0x2f, 0xac, 0x63, 0x06, 0x66,
0x3c, 0x89, 0x4f, 0x30, 0x6c, 0x26, 0x0e, 0x58, 0xb2, 0x9c, 0xdd, 0xdf, 0x99, 0x0b, 0xf7, 0x77,
0x36, 0x17, 0xb4, 0xd1, 0x5c, 0xfc, 0x9a, 0xe9, 0xe2, 0x5f, 0x87, 0xb9, 0x11, 0x73, 0x39, 0x13,
0xbf, 0xdf, 0x1b, 0xb1, 0xde, 0xc5, 0x79, 0xca, 0x00, 0xc9, 0x3a, 0xb4, 0x85, 0xbb, 0x91, 0x9e,
0x23, 0x00, 0xd7, 0x38, 0x87, 0x33, 0xfd, 0x9d, 0x86, 0x71, 0x1a, 0x38, 0xd8, 0x14, 0x60, 0x27,
0xaf, 0x98, 0x71, 0x48, 0x6f, 0x12, 0x88, 0xeb, 0x28, 0x3a, 0xc0, 0x93, 0x54, 0xcd, 0xc9, 0x57,
0xd8, 0xbf, 0x62, 0x41, 0x9b, 0xed, 0x99, 0xc1, 0x96, 0xef, 0x01, 0x4a, 0xc5, 0x4b, 0x72, 0xa5,
0x41, 0x4b, 0xde, 0x85, 0x3a, 0x96, 0xc3, 0x31, 0x0d, 0x04, 0x4f, 0x76, 0x4c, 0x9e, 0x4c, 0xf5,
0xc9, 0xee, 0x25, 0x27, 0x25, 0xd6, 0x38, 0xf2, 0xaf, 0x2d, 0x68, 0x88, 0x5e, 0x7e, 0xe0, 0x30,
0x41, 0x57, 0xbb, 0x3f, 0xe4, 0x9c, 0x94, 0x5e, 0x17, 0xae, 0xc1, 0xfc, 0xc8, 0x4d, 0x26, 0x11,
0xb3, 0xc7, 0x46, 0x88, 0x20, 0x0b, 0x33, 0xe3, 0x8a, 0xaa, 0x33, 0xee, 0x25, 0x9e, 0xdf, 0x93,
0xb5, 0xe2, 0xa6, 0xae, 0xa8, 0x8a, 0x69, 0x90, 0x38, 0x71, 0x87, 0x54, 0xd8, 0x4d, 0x5e, 0xb0,
0x3b, 0xb0, 0x22, 0x26, 0x94, 0x71, 0x55, 0xed, 0x3f, 0x6d, 0xc2, 0x6a, 0xae, 0x4a, 0x5d, 0xe7,
0x8b, 0xb3, 0xaf, 0xef, 0x8d, 0x8e, 0x42, 0xe5, 0xe7, 0x5b, 0xfa, 0xb1, 0xd8, 0xa8, 0x22, 0x43,
0x58, 0x96, 0x0e, 0x02, 0x5b, 0xd3, 0xd4, 0x98, 0x95, 0xd0, 0x4a, 0xbd, 0x6d, 0x6e, 0x61, 0xb6,
0x43, 0x89, 0xeb, 0x42, 0x5c, 0xdc, 0x1e, 0x39, 0x81, 0x8e, 0xf2, 0x44, 0x84, 0xb2, 0xd6, 0xbc,
0x15, 0xd6, 0xd7, 0x5b, 0x17, 0xf4, 0x65, 0x78, 0xb6, 0xce, 0xd4, 0xd6, 0xc8, 0x39, 0x5c, 0x95,
0x75, 0xa8, 0x8d, 0xf3, 0xfd, 0x55, 0x5e, 0x6a, 0x6e, 0xe8, 0xb3, 0x9b, 0x9d, 0x5e, 0xd0, 0x30,
0xf9, 0x10, 0x56, 0xce, 0x5c, 0x2f, 0x91, 0xc3, 0xd2, 0x7c, 0x83, 0x2a, 0x76, 0x79, 0xfb, 0x82,
0x2e, 0x9f, 0xf0, 0x8f, 0x0d, 0x13, 0x35, 0xa5, 0xc5, 0xee, 0x5f, 0x5a, 0xd0, 0x32, 0xdb, 0x61,
0x6c, 0x2a, 0x64, 0x5f, 0xea, 0x40, 0xe9, 0x4d, 0x66, 0xe0, 0xfc, 0x51, 0xb9, 0x54, 0x74, 0x54,
0xd6, 0x0f, 0xa8, 0xe5, 0x8b, 0x62, 0x4c, 0x95, 0x97, 0x8b, 0x31, 0x55, 0x8b, 0x62, 0x4c, 0xdd,
0xff, 0xb0, 0x80, 0xe4, 0x79, 0x89, 0xdc, 0xe7, 0x67, 0xf5, 0x80, 0xfa, 0x42, 0xa5, 0xfc, 0xef,
0x97, 0xe3, 0x47, 0xb9, 0x76, 0xf2, 0x6b, 0x26, 0x18, 0xfa, 0x55, 0xbb, 0xee, 0xec, 0xcc, 0x39,
0x45, 0x55, 0x99, 0xa8, 0x57, 0xe5, 0xe2, 0xa8, 0x57, 0xf5, 0xe2, 0xa8, 0xd7, 0x4c, 0x36, 0xea,
0xd5, 0xfd, 0x19, 0x0b, 0x16, 0x0b, 0x36, 0xfd, 0x47, 0x37, 0x71, 0xb6, 0x4d, 0x86, 0x2e, 0x28,
0x89, 0x6d, 0xd2, 0xc1, 0xee, 0x4f, 0xc0, 0x9c, 0xc1, 0xe8, 0x3f, 0xba, 0xfe, 0xb3, 0xfe, 0x1a,
0xe7, 0x33, 0x03, 0xeb, 0xfe, 0x6b, 0x09, 0x48, 0x5e, 0xd8, 0xfe, 0x47, 0xc7, 0x90, 0x5f, 0xa7,
0x72, 0xc1, 0x3a, 0xfd, 0xb7, 0xda, 0x81, 0xb7, 0x60, 0x41, 0xe4, 0xfe, 0x68, 0x11, 0x1a, 0xce,
0x31, 0xf9, 0x0a, 0xe6, 0xb1, 0x9a, 0x21, 0xc7, 0x9a, 0x91, 0x4f, 0xa1, 0x19, 0xc3, 0x4c, 0xe4,
0xd1, 0xee, 0x42, 0x47, 0xac, 0xd0, 0xce, 0x29, 0x0d, 0x92, 0xc3, 0xc9, 0x11, 0x4f, 0xa0, 0xf1,
0xc2, 0xc0, 0xfe, 0x5e, 0x59, 0x39, 0xdd, 0x58, 0x29, 0xcc, 0xfb, 0xa7, 0xa1, 0xa9, 0x2b, 0x73,
0xb1, 0x1d, 0x99, 0x00, 0x1d, 0x33, 0xec, 0x3a, 0x15, 0xd9, 0x86, 0x16, 0xaa, 0xac, 0x81, 0xfa,
0xae, 0x84, 0xdf, 0xbd, 0x20, 0xf0, 0xb0, 0x7b, 0xc9, 0xc9, 0x7c, 0x43, 0x3e, 0x0f, 0x2d, 0xf3,
0x28, 0x25, 0x7c, 0x84, 0x22, 0xdf, 0x9c, 0x7d, 0x6e, 0x12, 0x93, 0x4d, 0x68, 0x67, 0xcf, 0x62,
0xe2, 0x72, 0x7d, 0x4a, 0x03, 0x39, 0x72, 0xf2, 0xae, 0xb8, 0x7b, 0xaa, 0x62, 0x10, 0xec, 0xba,
0xf9, 0x99, 0xb6, 0x4c, 0x37, 0xf9, 0x1f, 0xed, 0x36, 0xea, 0x6b, 0x00, 0x29, 0x46, 0xda, 0xd0,
0x7c, 0x78, 0xb0, 0xb3, 0xdf, 0xdb, 0xda, 0xdd, 0xdc, 0xdf, 0xdf, 0xd9, 0x6b, 0x5f, 0x22, 0x04,
0x5a, 0x18, 0xbf, 0xda, 0x56, 0x98, 0xc5, 0xb0, 0xcd, 0x2d, 0x1e, 0x1b, 0x13, 0x58, 0x89, 0x2c,
0x41, 0xfb, 0xc1, 0x7e, 0x06, 0x2d, 0xdf, 0xad, 0x2b, 0xf9, 0xb0, 0x57, 0x60, 0x89, 0xe7, 0x87,
0xdd, 0xe5, 0xec, 0x21, 0x7d, 0x85, 0xdf, 0xb4, 0x60, 0x39, 0x53, 0x91, 0xe6, 0x69, 0x70, 0x77,
0xc0, 0xf4, 0x11, 0x4c, 0x90, 0xf1, 0xa4, 0xf2, 0xfc, 0x32, 0x1a, 0x24, 0x5f, 0xc1, 0x78, 0x5e,
0xf3, 0x14, 0x33, 0x92, 0x54, 0x54, 0x65, 0xaf, 0xf2, 0x2c, 0xb6, 0x80, 0xfa, 0x99, 0x81, 0x1f,
0xf3, 0xbc, 0x33, 0xbd, 0x22, 0xbd, 0xcb, 0x33, 0x87, 0x2c, 0x8b, 0xcc, 0xc9, 0x37, 0x5c, 0x0f,
0x73, 0xbc, 0x85, 0x75, 0xf6, 0x9f, 0x95, 0x80, 0x7c, 0x69, 0x42, 0xa3, 0x73, 0x4c, 0xb1, 0x50,
0xe1, 0xc0, 0xd5, 0x6c, 0xb0, 0x6b, 0x66, 0x3c, 0x39, 0xfa, 0x22, 0x3d, 0x97, 0xf9, 0x3f, 0x25,
0x3d, 0xff, 0x07, 0xd8, 0xe1, 0x58, 0x25, 0x78, 0x58, 0x6b, 0x55, 0x0c, 0x49, 0xd4, 0x83, 0xc9,
0x88, 0x37, 0x5a, 0x98, 0xa6, 0x53, 0xb9, 0x38, 0x4d, 0xa7, 0x7a, 0x51, 0x9a, 0xce, 0x27, 0x60,
0xce, 0x1b, 0x06, 0x21, 0x53, 0x0b, 0xcc, 0xb0, 0xc7, 0x9d, 0x99, 0x6b, 0x65, 0x76, 0x18, 0x16,
0xe0, 0x3e, 0xc3, 0xc8, 0x67, 0x53, 0x22, 0x3a, 0x18, 0x62, 0xca, 0x97, 0xae, 0x28, 0x76, 0x06,
0x43, 0xba, 0x17, 0xf6, 0xdd, 0x24, 0x8c, 0xd4, 0x87, 0x0c, 0x8b, 0xd9, 0xa9, 0x3f, 0x0e, 0x27,
0xcc, 0xcd, 0x91, 0x4b, 0xc1, 0xc3, 0x36, 0x4d, 0x8e, 0x1e, 0xe0, 0x82, 0xd8, 0x5f, 0x81, 0x86,
0xd6, 0x04, 0x79, 0x95, 0x9f, 0x30, 0x99, 0x0b, 0x21, 0xce, 0x83, 0x15, 0xee, 0xb1, 0x07, 0xd4,
0x7f, 0x30, 0x20, 0x6f, 0xc2, 0xc2, 0xc0, 0x8b, 0x28, 0xa6, 0x76, 0xf5, 0x22, 0x7a, 0x4a, 0xa3,
0x58, 0x9e, 0x9c, 0xdb, 0xaa, 0xc2, 0xe1, 0xb8, 0x7d, 0x07, 0x16, 0x8d, 0xad, 0x51, 0x9c, 0x2b,
0xb3, 0x69, 0xac, 0x7c, 0x36, 0x8d, 0xcc, 0xa4, 0xb1, 0x7f, 0xae, 0x04, 0xe5, 0xdd, 0x70, 0xac,
0x47, 0xfb, 0x2d, 0x33, 0xda, 0x2f, 0x5c, 0xa0, 0x9e, 0xf2, 0x70, 0x84, 0x65, 0x34, 0x40, 0xb2,
0x0e, 0x2d, 0x77, 0x94, 0xf4, 0x92, 0x90, 0xb9, 0x7c, 0x67, 0x6e, 0x34, 0xe0, 0xec, 0x8c, 0x5b,
0x9c, 0xa9, 0x21, 0x4b, 0x50, 0x56, 0xbe, 0x02, 0x12, 0xb0, 0x22, 0x3b, 0x6f, 0xe0, 0x3d, 0xe2,
0xb9, 0x88, 0x9c, 0x89, 0x12, 0x93, 0x16, 0xf3, 0x7b, 0x7e, 0xd8, 0xe3, 0x1a, 0xbf, 0xa8, 0x8a,
0xb9, 0x63, 0x8c, 0x3b, 0x90, 0x4c, 0x84, 0x3c, 0x65, 0x59, 0x0f, 0xcf, 0xd6, 0xcc, 0x5b, 0xd5,
0x7f, 0xb6, 0xa0, 0x8a, 0x6b, 0xc3, 0xac, 0x17, 0x17, 0x6f, 0x15, 0xf0, 0xc7, 0x35, 0x99, 0x73,
0xb2, 0x30, 0xb1, 0x8d, 0x24, 0xc1, 0x92, 0x9a, 0x90, 0x9e, 0x28, 0x78, 0x0d, 0xea, 0xbc, 0xa4,
0x12, 0xe2, 0x38, 0xdf, 0x2b, 0x90, 0x5c, 0x85, 0xca, 0x49, 0x38, 0x96, 0xee, 0x36, 0xc8, 0xdb,
0xb0, 0x70, 0xec, 0x20, 0x9e, 0x8e, 0x87, 0xb5, 0xc7, 0xa7, 0xc5, 0x9d, 0xa8, 0x2c, 0xcc, 0xdc,
0x48, 0xd5, 0xac, 0xbe, 0x4c, 0x19, 0xd4, 0x5e, 0x87, 0x79, 0xc6, 0xf5, 0x5a, 0xd4, 0x75, 0xaa,
0x28, 0xdb, 0x3f, 0x69, 0x41, 0x4d, 0x12, 0x93, 0x35, 0xa8, 0x30, 0x11, 0xca, 0x1c, 0x5c, 0xd5,
0x2d, 0x38, 0xa3, 0x73, 0x90, 0x82, 0x39, 0x13, 0x18, 0x0c, 0x4b, 0xcf, 0x49, 0x32, 0x14, 0x96,
0x1e, 0x03, 0xd4, 0x70, 0x33, 0xde, 0x73, 0x06, 0xb5, 0xbf, 0x6b, 0xc1, 0x9c, 0xd1, 0x07, 0xb9,
0x06, 0x0d, 0xdf, 0x8d, 0x13, 0x71, 0xb3, 0x28, 0xb6, 0x47, 0x87, 0xf4, 0x8d, 0x2e, 0x99, 0x71,
0x78, 0x15, 0x21, 0x2e, 0xeb, 0x11, 0xe2, 0x5b, 0x50, 0x4f, 0x53, 0x39, 0x2b, 0x86, 0xec, 0xb3,
0x1e, 0xe5, 0xfd, 0x7e, 0x4a, 0x84, 0x41, 0xc7, 0xd0, 0x0f, 0x23, 0x71, 0x69, 0xc5, 0x0b, 0xf6,
0x1d, 0x68, 0x68, 0xf4, 0x7a, 0x0c, 0xd2, 0x32, 0x62, 0x90, 0x2a, 0xf9, 0xa5, 0x94, 0x26, 0xbf,
0xd8, 0xff, 0x66, 0xc1, 0x1c, 0xe3, 0x41, 0x2f, 0x18, 0x1e, 0x84, 0xbe, 0xd7, 0x3f, 0xc7, 0xbd,
0x97, 0xec, 0x26, 0x54, 0xa2, 0xe4, 0x45, 0x13, 0x66, 0x5c, 0x2f, 0x23, 0x1f, 0x42, 0x44, 0x55,
0x99, 0xc9, 0x30, 0x93, 0x80, 0x23, 0x37, 0x16, 0x62, 0x21, 0xbc, 0x36, 0x03, 0x64, 0x92, 0xc6,
0x00, 0x4c, 0x65, 0x1a, 0x79, 0xbe, 0xef, 0x71, 0x5a, 0xee, 0xd3, 0x17, 0x55, 0xb1, 0x3e, 0x07,
0x5e, 0xec, 0x1e, 0xa5, 0x17, 0x31, 0xaa, 0x8c, 0xe1, 0x19, 0xf7, 0x99, 0x16, 0x9e, 0x99, 0x41,
0xbd, 0x62, 0x82, 0xf6, 0x1f, 0x97, 0xa0, 0x21, 0x5d, 0x84, 0xc1, 0x90, 0x8a, 0xbb, 0x45, 0x53,
0x31, 0x6a, 0x88, 0xac, 0x37, 0x4e, 0x63, 0x1a, 0x92, 0x65, 0x8c, 0x72, 0x9e, 0x31, 0xae, 0x40,
0x9d, 0x31, 0xe8, 0xdb, 0x78, 0xec, 0x13, 0xd9, 0xd1, 0x0a, 0x90, 0xb5, 0xb7, 0xb1, 0xb6, 0x9a,
0xd6, 0x22, 0xf0, 0xc2, 0x9b, 0xc8, 0x77, 0xa1, 0x29, 0x9a, 0xc1, 0x9d, 0x43, 0xcd, 0x93, 0x8a,
0x88, 0xb1, 0xab, 0x8e, 0x41, 0x29, 0xbf, 0xbc, 0x2d, 0xbf, 0xac, 0x5d, 0xf4, 0xa5, 0xa4, 0xb4,
0xef, 0xab, 0x0b, 0xde, 0xfb, 0x91, 0x3b, 0x3e, 0x91, 0xb2, 0x7c, 0x0b, 0x16, 0xbd, 0xa0, 0xef,
0x4f, 0x06, 0xb4, 0x37, 0x09, 0xdc, 0x20, 0x08, 0x27, 0x41, 0x9f, 0xca, 0xec, 0x97, 0xa2, 0x2a,
0x7b, 0xa0, 0x72, 0x25, 0xb1, 0x21, 0xb2, 0x0e, 0x55, 0x6e, 0x2a, 0xb9, 0xed, 0x28, 0x16, 0x74,
0x4e, 0x42, 0xd6, 0xa0, 0xca, 0x2d, 0x66, 0xc9, 0x90, 0x1a, 0x6d, 0x57, 0x1d, 0x4e, 0xc0, 0xd4,
0x0e, 0xe6, 0xc3, 0x9a, 0x6a, 0xc7, 0xb4, 0x3b, 0x33, 0x7d, 0x9e, 0x31, 0xbb, 0x04, 0x64, 0x9f,
0x4b, 0x8a, 0x7e, 0x37, 0xf4, 0xd3, 0x65, 0x68, 0x68, 0x30, 0xd3, 0x20, 0x43, 0x36, 0xe0, 0xde,
0xc0, 0x73, 0x47, 0x34, 0xa1, 0x91, 0x90, 0x8e, 0x0c, 0xca, 0xe8, 0xdc, 0xd3, 0x61, 0x2f, 0x9c,
0x24, 0xbd, 0x01, 0x1d, 0x46, 0x94, 0x5b, 0x53, 0x66, 0x9a, 0x0c, 0x94, 0xd1, 0x31, 0xfe, 0xd4,
0xe8, 0x38, 0x07, 0x65, 0x50, 0x79, 0xd3, 0xc3, 0xd7, 0xa8, 0x92, 0xde, 0xf4, 0xf0, 0x15, 0xc9,
0xea, 0xbe, 0x6a, 0x81, 0xee, 0x7b, 0x07, 0x56, 0xb8, 0x96, 0x13, 0xfa, 0xa0, 0x97, 0x61, 0xac,
0x29, 0xb5, 0x64, 0x1d, 0xda, 0x6c, 0xcc, 0x52, 0x24, 0x62, 0xef, 0x9b, 0x3c, 0x6a, 0x6a, 0x39,
0x39, 0x9c, 0xd1, 0x62, 0xf8, 0x52, 0xa7, 0xe5, 0x37, 0xdf, 0x39, 0x1c, 0x69, 0xdd, 0x67, 0x26,
0x6d, 0x5d, 0xd0, 0x66, 0x70, 0x7b, 0x0e, 0x1a, 0x87, 0x49, 0x38, 0x96, 0x9b, 0xd2, 0x82, 0x26,
0x2f, 0x8a, 0x2c, 0xa4, 0x57, 0xe0, 0x32, 0x72, 0xd1, 0xa3, 0x70, 0x1c, 0xfa, 0xe1, 0xf0, 0xdc,
0x38, 0x3a, 0xfd, 0x95, 0x05, 0x8b, 0x46, 0x6d, 0x7a, 0x76, 0xc2, 0xa8, 0x8b, 0x4c, 0x1f, 0xe1,
0x8c, 0xb7, 0xa0, 0xa9, 0x60, 0x4e, 0xc8, 0x03, 0xdc, 0x8f, 0x45, 0x46, 0xc9, 0x26, 0xcc, 0xcb,
0x91, 0xc9, 0x0f, 0x39, 0x17, 0x76, 0xf2, 0x5c, 0x28, 0xbe, 0x6f, 0x89, 0x0f, 0x64, 0x13, 0x9f,
0x17, 0x19, 0x04, 0xfc, 0x28, 0x25, 0x83, 0x6c, 0xea, 0xf0, 0xa5, 0x1f, 0xb5, 0xe5, 0x08, 0xfa,
0x0a, 0x8c, 0xed, 0x5f, 0xb0, 0x00, 0xd2, 0xd1, 0xe1, 0xbd, 0xb3, 0x32, 0x23, 0xfc, 0x75, 0x90,
0x66, 0x32, 0x5e, 0x87, 0xa6, 0xba, 0xaf, 0x4c, 0x2d, 0x53, 0x43, 0x62, 0xcc, 0x73, 0xbe, 0x01,
0xf3, 0x43, 0x3f, 0x3c, 0x42, 0xb3, 0x8e, 0x69, 0x6d, 0xb1, 0xc8, 0xc5, 0x6a, 0x71, 0xf8, 0x9e,
0x40, 0x53, 0x33, 0x56, 0xd1, 0xcc, 0x98, 0xfd, 0x8b, 0x25, 0x75, 0xbd, 0x94, 0xce, 0x79, 0xaa,
0x94, 0x91, 0xdb, 0x39, 0x75, 0x3a, 0xe5, 0x36, 0x07, 0x9d, 0xd3, 0x83, 0x0b, 0xa3, 0x5d, 0x77,
0xa0, 0x15, 0x71, 0x7d, 0x25, 0x95, 0x59, 0xe5, 0x05, 0xca, 0x6c, 0x2e, 0x32, 0x6c, 0xdd, 0x27,
0xa1, 0xed, 0x0e, 0x4e, 0x69, 0x94, 0x78, 0x18, 0x6f, 0x40, 0x47, 0x83, 0xab, 0xe0, 0x79, 0x0d,
0x47, 0xfb, 0x7f, 0x03, 0xe6, 0x45, 0xfe, 0x9b, 0xa2, 0x14, 0xa9, 0xff, 0x29, 0xcc, 0x08, 0xed,
0xdf, 0x96, 0x37, 0x59, 0xe6, 0x1e, 0x4e, 0x5f, 0x11, 0x7d, 0x76, 0xa5, 0xcc, 0xec, 0x3e, 0x21,
0x6e, 0x95, 0x06, 0x32, 0xa8, 0x51, 0xd6, 0xb2, 0x4d, 0x06, 0xe2, 0x16, 0xd0, 0x5c, 0xd2, 0xca,
0xcb, 0x2c, 0xa9, 0xfd, 0x7d, 0x0b, 0x66, 0x77, 0xc3, 0xf1, 0xae, 0xc8, 0xbb, 0x41, 0x41, 0x50,
0x89, 0xa7, 0xb2, 0xf8, 0x82, 0x8c, 0x9c, 0x42, 0xfb, 0x3e, 0x97, 0xb5, 0xef, 0xff, 0x1f, 0x5e,
0xc1, 0x90, 0x5a, 0x14, 0x8e, 0xc3, 0x88, 0x09, 0xa3, 0xeb, 0x73, 0x63, 0x1e, 0x06, 0xc9, 0x89,
0x54, 0x63, 0x2f, 0x22, 0xc1, 0x73, 0x2e, 0x3b, 0x9b, 0x71, 0xd7, 0x5c, 0xf8, 0x23, 0x5c, 0xbb,
0xe5, 0x2b, 0xec, 0xcf, 0x41, 0x1d, 0x1d, 0x6a, 0x9c, 0xd6, 0x5b, 0x50, 0x3f, 0x09, 0xc7, 0xbd,
0x13, 0x2f, 0x48, 0xa4, 0x70, 0xb7, 0x52, 0x4f, 0x77, 0x17, 0x17, 0x44, 0x11, 0xd8, 0xbf, 0x36,
0x03, 0xb3, 0x0f, 0x82, 0xd3, 0xd0, 0xeb, 0xe3, 0xad, 0xd9, 0x88, 0x8e, 0x42, 0x99, 0x86, 0xcb,
0xfe, 0x27, 0x57, 0x60, 0x16, 0xf3, 0xce, 0xc6, 0x9c, 0x69, 0x9b, 0xfc, 0x76, 0x5b, 0x40, 0xcc,
0x49, 0x88, 0xd2, 0x07, 0x13, 0x5c, 0x7c, 0x34, 0x84, 0x1d, 0x35, 0x22, 0xfd, 0xc1, 0x83, 0x28,
0xa5, 0x69, 0xce, 0x55, 0x2d, 0xcd, 0x99, 0xf5, 0x25, 0xf2, 0x84, 0x78, 0x22, 0x09, 0xef, 0x4b,
0x40, 0x78, 0x3c, 0x8a, 0x28, 0x0f, 0x89, 0xa2, 0xcb, 0x31, 0x2b, 0x8e, 0x47, 0x3a, 0xc8, 0xdc,
0x12, 0xfe, 0x01, 0xa7, 0xe1, 0x4a, 0x58, 0x87, 0x98, 0xa3, 0x97, 0x7d, 0xcc, 0x52, 0xe7, 0xbc,
0x9f, 0x81, 0x99, 0xa6, 0x1e, 0x50, 0xa5, 0x50, 0xf9, 0x3c, 0x80, 0x3f, 0x0a, 0xc9, 0xe2, 0xda,
0xa1, 0x8a, 0xa7, 0x08, 0xca, 0x43, 0x15, 0x63, 0x18, 0xd7, 0xf7, 0x8f, 0xdc, 0xfe, 0x53, 0x7c,
0xab, 0x84, 0xf7, 0x58, 0x75, 0xc7, 0x04, 0x31, 0xdb, 0x27, 0xdd, 0x55, 0xcc, 0x03, 0xa8, 0x38,
0x3a, 0x44, 0x6e, 0x43, 0x03, 0x0f, 0x92, 0x62, 0x5f, 0x5b, 0xb8, 0xaf, 0x6d, 0xfd, 0xa4, 0x89,
0x3b, 0xab, 0x13, 0xe9, 0x37, 0x7a, 0xf3, 0xb9, 0xa4, 0x3d, 0x77, 0x30, 0x10, 0x17, 0xa1, 0x6d,
0x7e, 0x28, 0x56, 0x00, 0xb3, 0xaa, 0x62, 0xc1, 0x38, 0xc1, 0x02, 0x12, 0x18, 0x18, 0xb9, 0x0a,
0x35, 0x76, 0xc8, 0x19, 0xbb, 0xde, 0x00, 0xb3, 0xfe, 0xf8, 0x59, 0x4b, 0x61, 0xac, 0x0d, 0xf9,
0x3f, 0x5e, 0x58, 0x2e, 0xe2, 0xaa, 0x18, 0x18, 0x5b, 0x1b, 0x55, 0x46, 0x61, 0x5a, 0xe2, 0x3b,
0x6a, 0x80, 0xe4, 0x6d, 0xbc, 0x8e, 0x4a, 0x68, 0x67, 0x19, 0xc3, 0x5d, 0xaf, 0x88, 0x39, 0x0b,
0xa6, 0x95, 0x7f, 0x0f, 0x19, 0x89, 0xc3, 0x29, 0xed, 0x4d, 0x68, 0xea, 0x30, 0xa9, 0x41, 0xe5,
0xe1, 0xc1, 0xce, 0x7e, 0xfb, 0x12, 0x69, 0xc0, 0xec, 0xe1, 0xce, 0xa3, 0x47, 0x7b, 0x3b, 0xdb,
0x6d, 0x8b, 0x34, 0xa1, 0xa6, 0x52, 0xb3, 0x4a, 0xac, 0xb4, 0xb9, 0xb5, 0xb5, 0x73, 0xf0, 0x68,
0x67, 0xbb, 0x5d, 0xb6, 0x13, 0x20, 0x9b, 0x83, 0x81, 0x68, 0x45, 0x1d, 0xf5, 0x53, 0x7e, 0xb6,
0x0c, 0x7e, 0x2e, 0xe0, 0xa9, 0x52, 0x31, 0x4f, 0xbd, 0x70, 0xe5, 0xed, 0x1d, 0x68, 0x1c, 0x68,
0xef, 0x7a, 0x50, 0xbc, 0xe4, 0x8b, 0x1e, 0x21, 0x96, 0x1a, 0xa2, 0x0d, 0xa7, 0xa4, 0x0f, 0xc7,
0xfe, 0x1d, 0x8b, 0x27, 0xcf, 0xab, 0xe1, 0xf3, 0xbe, 0x6d, 0x68, 0xaa, 0x98, 0x53, 0x9a, 0x75,
0x69, 0x60, 0x8c, 0x06, 0x87, 0xd2, 0x0b, 0x8f, 0x8f, 0x63, 0x2a, 0x73, 0xa4, 0x0c, 0x8c, 0xc9,
0x05, 0xf3, 0xb0, 0x98, 0xb7, 0xe2, 0xf1, 0x1e, 0x62, 0x91, 0x2b, 0x95, 0xc3, 0x99, 0x96, 0x17,
0x61, 0x15, 0x99, 0x1d, 0xa6, 0xca, 0x2a, 0x39, 0x34, 0xbb, 0xca, 0xeb, 0x50, 0x53, 0xed, 0x9a,
0x0a, 0x4c, 0x52, 0xaa, 0x7a, 0xa6, 0x28, 0xf1, 0xcc, 0x61, 0x0c, 0x9a, 0x2b, 0xed, 0x7c, 0x05,
0xb9, 0x09, 0xe4, 0xd8, 0x8b, 0xb2, 0xe4, 0x65, 0x24, 0x2f, 0xa8, 0xb1, 0x9f, 0xc0, 0xa2, 0x64,
0x24, 0xcd, 0xb5, 0x32, 0x37, 0xd1, 0xba, 0x48, 0x7c, 0x4a, 0x79, 0xf1, 0xb1, 0xff, 0xd3, 0x82,
0x59, 0xb1, 0xd3, 0xb9, 0xb7, 0x61, 0x7c, 0x9f, 0x0d, 0x8c, 0x74, 0x8c, 0x77, 0x21, 0x28, 0x6b,
0x42, 0x69, 0xe6, 0xd4, 0x62, 0xb9, 0x48, 0x2d, 0x12, 0xa8, 0x8c, 0xdd, 0xe4, 0x04, 0xcf, 0xdb,
0x75, 0x07, 0xff, 0x27, 0x6d, 0x1e, 0x1d, 0xe2, 0x2a, 0x18, 0x23, 0x43, 0x45, 0xaf, 0xe0, 0xb8,
0xb5, 0xcf, 0xbf, 0x82, 0xbb, 0x02, 0x75, 0x1c, 0x40, 0x2f, 0x0d, 0xfe, 0xa4, 0x00, 0xe3, 0x5c,
0x5e, 0x40, 0xb9, 0x16, 0x29, 0xda, 0x29, 0x62, 0x2f, 0xf3, 0x9d, 0x17, 0x4b, 0xa0, 0xae, 0x92,
0x45, 0x32, 0x6e, 0x0a, 0xa7, 0x1c, 0x21, 0x06, 0x90, 0xe5, 0x08, 0x41, 0xea, 0xa8, 0x7a, 0xbb,
0x0b, 0x9d, 0x6d, 0xea, 0xd3, 0x84, 0x6e, 0xfa, 0x7e, 0xb6, 0xfd, 0x57, 0xe0, 0x72, 0x41, 0x9d,
0xf0, 0xa6, 0xbf, 0x04, 0xcb, 0x9b, 0x3c, 0x71, 0xf1, 0x47, 0x95, 0x8c, 0x63, 0x77, 0x60, 0x25,
0xdb, 0xa4, 0xe8, 0xec, 0x1e, 0x2c, 0x6c, 0xd3, 0xa3, 0xc9, 0x70, 0x8f, 0x9e, 0xa6, 0x1d, 0x11,
0xa8, 0xc4, 0x27, 0xe1, 0x99, 0x10, 0x4c, 0xfc, 0x9f, 0xbc, 0x0a, 0xe0, 0x33, 0x9a, 0x5e, 0x3c,
0xa6, 0x7d, 0xf9, 0x14, 0x03, 0x91, 0xc3, 0x31, 0xed, 0xdb, 0xef, 0x00, 0xd1, 0xdb, 0x11, 0xeb,
0xc5, 0xac, 0xe0, 0xe4, 0xa8, 0x17, 0x9f, 0xc7, 0x09, 0x1d, 0xc9, 0x37, 0x26, 0x3a, 0x64, 0xdf,
0x80, 0xe6, 0x81, 0x7b, 0xee, 0xd0, 0x6f, 0x88, 0x27, 0x81, 0xab, 0x30, 0x3b, 0x76, 0xcf, 0x99,
0x9a, 0x52, 0x51, 0x29, 0xac, 0xb6, 0xff, 0xbd, 0x04, 0x33, 0x9c, 0x92, 0xb5, 0x3a, 0xa0, 0x71,
0xe2, 0x05, 0xc8, 0x58, 0xb2, 0x55, 0x0d, 0xca, 0xb1, 0x72, 0xa9, 0x80, 0x95, 0xc5, 0x99, 0x4d,
0xa6, 0xb5, 0x0b, 0x7e, 0x35, 0x30, 0xc6, 0x5c, 0x69, 0x56, 0x1c, 0x0f, 0x8b, 0xa4, 0x40, 0x26,
0x80, 0x99, 0xda, 0x5a, 0x3e, 0x3e, 0x29, 0xa5, 0x82, 0x73, 0x75, 0xa8, 0xd0, 0xa2, 0xcf, 0x72,
0x06, 0xcf, 0x59, 0xf4, 0x9c, 0xe5, 0xae, 0xbd, 0x84, 0xe5, 0xe6, 0x07, 0xb9, 0x17, 0x59, 0x6e,
0x78, 0x09, 0xcb, 0x6d, 0x13, 0x68, 0xe3, 0x7b, 0x39, 0xe6, 0x1b, 0x4a, 0xde, 0xfd, 0x96, 0x05,
0x6d, 0xc1, 0x45, 0xaa, 0x8e, 0xbc, 0x6e, 0xf8, 0xc0, 0x85, 0xe9, 0xe5, 0xd7, 0x61, 0x0e, 0x3d,
0x53, 0x15, 0xa9, 0x15, 0x61, 0x65, 0x03, 0x64, 0xf3, 0x90, 0xb7, 0xc0, 0x23, 0xcf, 0x17, 0x9b,
0xa2, 0x43, 0x32, 0xd8, 0x1b, 0xb9, 0x22, 0x3b, 0xcc, 0x72, 0x54, 0xd9, 0xfe, 0x13, 0x0b, 0x16,
0xb4, 0x01, 0x0b, 0x2e, 0xbc, 0x03, 0x52, 0x1a, 0x78, 0xd8, 0x96, 0x4b, 0xee, 0xaa, 0x29, 0x36,
0xe9, 0x67, 0x06, 0x31, 0x6e, 0xa6, 0x7b, 0x8e, 0x03, 0x8c, 0x27, 0x23, 0xa1, 0x44, 0x75, 0x88,
0x31, 0xd2, 0x19, 0xa5, 0x4f, 0x15, 0x09, 0x57, 0xe3, 0x06, 0x86, 0xb1, 0x31, 0xe6, 0x51, 0x2b,
0xa2, 0x8a, 0x88, 0x8d, 0xe9, 0xa0, 0xfd, 0x77, 0x16, 0x2c, 0xf2, 0xa3, 0x91, 0x38, 0x78, 0xaa,
0x97, 0x41, 0x33, 0xfc, 0x2c, 0xc8, 0x25, 0x72, 0xf7, 0x92, 0x23, 0xca, 0xe4, 0x33, 0x2f, 0x79,
0x9c, 0x53, 0x29, 0x6b, 0x53, 0xf6, 0xa2, 0x5c, 0xb4, 0x17, 0x2f, 0x58, 0xe9, 0xa2, 0x30, 0x65,
0xb5, 0x30, 0x4c, 0x79, 0x77, 0x16, 0xaa, 0x71, 0x3f, 0x1c, 0x53, 0x7b, 0x05, 0x96, 0xcc, 0xc9,
0x09, 0x15, 0xf4, 0x1d, 0x0b, 0x3a, 0xf7, 0x78, 0x38, 0xdf, 0x0b, 0x86, 0xbb, 0x5e, 0x9c, 0x84,
0x91, 0x7a, 0x40, 0x79, 0x15, 0x20, 0x4e, 0xdc, 0x28, 0xe1, 0x89, 0xc9, 0x22, 0x3c, 0x98, 0x22,
0x6c, 0x8c, 0x34, 0x18, 0xf0, 0x5a, 0xbe, 0x37, 0xaa, 0x9c, 0xf3, 0x21, 0xc4, 0xe1, 0xcd, 0xb0,
0xc4, 0x6f, 0xf0, 0x14, 0x4e, 0xe6, 0x2b, 0xd0, 0x53, 0xd4, 0xeb, 0xfc, 0x54, 0x94, 0x41, 0xed,
0xbf, 0xb1, 0x60, 0x3e, 0x1d, 0x24, 0x5e, 0x6e, 0x9a, 0xda, 0x41, 0x98, 0xdf, 0x54, 0x3b, 0xc8,
0xc0, 0xa5, 0xc7, 0xec, 0xb1, 0x18, 0x9b, 0x86, 0xa0, 0xc4, 0x8a, 0x52, 0x38, 0x91, 0x0e, 0x8e,
0x0e, 0xf1, 0x84, 0x2c, 0xe6, 0x09, 0x08, 0xaf, 0x46, 0x94, 0x30, 0xaf, 0x7c, 0x94, 0xe0, 0x57,
0x3c, 0xc4, 0x2a, 0x8b, 0xd2, 0x94, 0xce, 0x22, 0x8a, 0xa6, 0x54, 0xbf, 0x1a, 0xa9, 0xf1, 0xf5,
0x91, 0x65, 0xfb, 0x97, 0x2c, 0xb8, 0x5c, 0xb0, 0xf0, 0x42, 0x6a, 0xb6, 0x61, 0xe1, 0x58, 0x55,
0xca, 0xc5, 0xe1, 0xa2, 0xb3, 0x22, 0xaf, 0xde, 0xcc, 0x05, 0x71, 0xf2, 0x1f, 0x28, 0xbf, 0x88,
0x2f, 0xb7, 0x91, 0xf2, 0x98, 0xaf, 0x58, 0x7f, 0x0e, 0x0d, 0xed, 0xe9, 0x22, 0x59, 0x85, 0xc5,
0x27, 0x0f, 0x1e, 0xed, 0xef, 0x1c, 0x1e, 0xf6, 0x0e, 0x1e, 0xdf, 0xfd, 0xe2, 0xce, 0x57, 0x7a,
0xbb, 0x9b, 0x87, 0xbb, 0xed, 0x4b, 0x64, 0x05, 0xc8, 0xfe, 0xce, 0xe1, 0xa3, 0x9d, 0x6d, 0x03,
0xb7, 0xc8, 0x55, 0xe8, 0x3e, 0xde, 0x7f, 0x7c, 0xb8, 0xb3, 0xdd, 0x2b, 0xfa, 0xae, 0x44, 0x5e,
0x85, 0xcb, 0xa2, 0xbe, 0xe0, 0xf3, 0xf2, 0xed, 0x5f, 0x2e, 0x43, 0x8b, 0xdf, 0x0a, 0xf3, 0x9f,
0x16, 0xa1, 0x11, 0x79, 0x1f, 0x66, 0xc5, 0x4f, 0xc3, 0x90, 0x65, 0x31, 0x6b, 0xf3, 0xc7, 0x68,
0xba, 0x2b, 0x59, 0x58, 0xb0, 0xf5, 0xe2, 0x4f, 0x7d, 0xff, 0x9f, 0x7e, 0xb5, 0x34, 0x47, 0x1a,
0x1b, 0xa7, 0x6f, 0x6f, 0x0c, 0x69, 0x10, 0xb3, 0x36, 0xbe, 0x06, 0x90, 0xfe, 0x68, 0x0a, 0xe9,
0x28, 0x77, 0x32, 0xf3, 0x6b, 0x30, 0xdd, 0xcb, 0x05, 0x35, 0xa2, 0xdd, 0xcb, 0xd8, 0xee, 0xa2,
0xdd, 0x62, 0xed, 0x7a, 0x81, 0x97, 0xf0, 0x5f, 0x50, 0x79, 0xcf, 0x5a, 0x27, 0x03, 0x68, 0xea,
0xbf, 0x89, 0x42, 0x64, 0x4c, 0xab, 0xe0, 0x17, 0x59, 0xba, 0xaf, 0x14, 0xd6, 0xc9, 0x80, 0x1e,
0xf6, 0xb1, 0x6c, 0xb7, 0x59, 0x1f, 0x13, 0xa4, 0x48, 0x7b, 0xf1, 0xa1, 0x65, 0xfe, 0xf4, 0x09,
0xb9, 0xa2, 0x69, 0x9c, 0xdc, 0x0f, 0xaf, 0x74, 0x5f, 0x9d, 0x52, 0x2b, 0xfa, 0x7a, 0x15, 0xfb,
0x5a, 0xb5, 0x09, 0xeb, 0xab, 0x8f, 0x34, 0xf2, 0x87, 0x57, 0xde, 0xb3, 0xd6, 0x6f, 0xff, 0xfe,
0xeb, 0x50, 0x57, 0x51, 0x68, 0xf2, 0x21, 0xcc, 0x19, 0xd7, 0xf6, 0x44, 0x4e, 0xa3, 0xe8, 0x96,
0xbf, 0x7b, 0xa5, 0xb8, 0x52, 0x74, 0x7c, 0x15, 0x3b, 0xee, 0x90, 0x15, 0xd6, 0xb1, 0xb8, 0xf7,
0xde, 0xc0, 0x04, 0x14, 0x9e, 0x4d, 0xfe, 0x94, 0xcf, 0x33, 0xbd, 0x6a, 0x37, 0xe6, 0x99, 0xbb,
0x9a, 0x37, 0xe6, 0x99, 0xbf, 0x9f, 0xb7, 0xaf, 0x60, 0x77, 0x2b, 0x64, 0x49, 0xef, 0x4e, 0x45,
0x87, 0x29, 0x3e, 0x81, 0xd0, 0x7f, 0x35, 0x84, 0xbc, 0xaa, 0x18, 0xab, 0xe8, 0xd7, 0x44, 0x14,
0x8b, 0xe4, 0x7f, 0x52, 0xc4, 0xee, 0x60, 0x57, 0x84, 0xe0, 0xf6, 0xe9, 0x3f, 0x1a, 0x42, 0x8e,
0xa0, 0xa1, 0x3d, 0x84, 0x27, 0x97, 0xa7, 0x3e, 0xda, 0xef, 0x76, 0x8b, 0xaa, 0x8a, 0xa6, 0xa2,
0xb7, 0xbf, 0xc1, 0x54, 0xce, 0x57, 0xa1, 0xae, 0x9e, 0x56, 0x93, 0x55, 0xed, 0xa9, 0xbb, 0xfe,
0x14, 0xbc, 0xdb, 0xc9, 0x57, 0x14, 0x31, 0x9f, 0xde, 0x3a, 0x63, 0xbe, 0x27, 0xd0, 0xd0, 0x9e,
0x4f, 0xab, 0x09, 0xe4, 0x9f, 0x68, 0xab, 0x09, 0x14, 0xbc, 0xb6, 0xb6, 0x17, 0xb0, 0x8b, 0x06,
0xa9, 0x23, 0x7f, 0x27, 0xcf, 0xc2, 0x98, 0xec, 0xc1, 0xb2, 0x38, 0x5b, 0x1d, 0xd1, 0x8f, 0xb3,
0x0d, 0x05, 0x3f, 0xd4, 0x72, 0xcb, 0x22, 0x77, 0xa0, 0x26, 0x5f, 0xc9, 0x93, 0x95, 0xe2, 0xd7,
0xfe, 0xdd, 0xd5, 0x1c, 0x2e, 0x34, 0xef, 0x57, 0x00, 0xd2, 0xb7, 0xda, 0x4a, 0x49, 0xe4, 0xde,
0x7e, 0x2b, 0x0e, 0xc8, 0x3f, 0xec, 0xb6, 0x57, 0x70, 0x82, 0x6d, 0x82, 0x4a, 0x22, 0xa0, 0x67,
0xf2, 0xe1, 0xd1, 0xd7, 0xa1, 0xa1, 0x3d, 0xd7, 0x56, 0xcb, 0x97, 0x7f, 0xea, 0xad, 0x96, 0xaf,
0xe0, 0x75, 0xb7, 0xdd, 0xc5, 0xd6, 0x97, 0xec, 0x79, 0xd6, 0x7a, 0xec, 0x0d, 0x83, 0x11, 0x27,
0x60, 0x1b, 0x74, 0x02, 0x73, 0xc6, 0x9b, 0x6c, 0x25, 0xa1, 0x45, 0x2f, 0xbe, 0x95, 0x84, 0x16,
0x3e, 0xe3, 0x96, 0x7c, 0x66, 0x2f, 0xb0, 0x7e, 0x4e, 0x91, 0x44, 0xeb, 0xe9, 0x03, 0x68, 0x68,
0xef, 0xab, 0xd5, 0x5c, 0xf2, 0x4f, 0xb9, 0xd5, 0x5c, 0x8a, 0x9e, 0x63, 0x2f, 0x61, 0x1f, 0x2d,
0x1b, 0x59, 0x01, 0xdf, 0xed, 0xb0, 0xb6, 0x3f, 0x84, 0x96, 0xf9, 0xe2, 0x5a, 0xc9, 0x7e, 0xe1,
0xdb, 0x6d, 0x25, 0xfb, 0x53, 0x9e, 0x69, 0x0b, 0x96, 0x5e, 0x5f, 0x54, 0x9d, 0x6c, 0x7c, 0x24,
0x6e, 0xa7, 0x9f, 0x93, 0x2f, 0x31, 0x05, 0x27, 0x1e, 0x52, 0x91, 0x55, 0x8d, 0x6b, 0xf5, 0xe7,
0x56, 0x4a, 0x5e, 0x72, 0x6f, 0xae, 0x4c, 0x66, 0xe6, 0x2f, 0x8f, 0xd0, 0x6a, 0xe1, 0x83, 0x2a,
0xcd, 0x6a, 0xe9, 0x6f, 0xae, 0x34, 0xab, 0x65, 0xbc, 0xbb, 0xca, 0x5a, 0xad, 0xc4, 0x63, 0x6d,
0x04, 0x30, 0x9f, 0x49, 0x2d, 0x54, 0x52, 0x51, 0x9c, 0x8b, 0xdd, 0xbd, 0xfa, 0xe2, 0x8c, 0x44,
0x53, 0x83, 0x48, 0x25, 0xb8, 0x21, 0x33, 0xdf, 0x7f, 0x1c, 0x9a, 0xfa, 0x5b, 0x58, 0xa2, 0x8b,
0x72, 0xb6, 0xa7, 0x57, 0x0a, 0xeb, 0xcc, 0xcd, 0x25, 0x4d, 0xbd, 0x1b, 0xf2, 0x65, 0x58, 0x51,
0xa2, 0xae, 0x67, 0xab, 0xc5, 0xe4, 0xb5, 0x82, 0x1c, 0x36, 0x3d, 0xe2, 0xd2, 0xbd, 0x3c, 0x35,
0xc9, 0xed, 0x96, 0xc5, 0x98, 0xc6, 0x7c, 0x64, 0x98, 0x1a, 0x8c, 0xa2, 0xb7, 0x95, 0xa9, 0xc1,
0x28, 0x7c, 0x99, 0x28, 0x99, 0x86, 0x2c, 0x1a, 0x6b, 0xc4, 0xaf, 0x1e, 0xc8, 0x07, 0x30, 0xaf,
0xe5, 0x03, 0x1f, 0x9e, 0x07, 0x7d, 0x25, 0x00, 0xf9, 0x87, 0x23, 0xdd, 0xa2, 0x23, 0x81, 0xbd,
0x8a, 0xed, 0x2f, 0xd8, 0xc6, 0xe2, 0x30, 0xe6, 0xdf, 0x82, 0x86, 0x9e, 0x6b, 0xfc, 0x82, 0x76,
0x57, 0xb5, 0x2a, 0xfd, 0xdd, 0xc3, 0x2d, 0x8b, 0xfc, 0x86, 0x05, 0x4d, 0x23, 0x73, 0xd7, 0xb8,
0x60, 0xcb, 0xb4, 0xd3, 0xd1, 0xeb, 0xf4, 0x86, 0x6c, 0x07, 0x07, 0xb9, 0xb7, 0xfe, 0x05, 0x63,
0x11, 0x3e, 0x32, 0x8e, 0x96, 0x37, 0xb3, 0xbf, 0xcc, 0xf3, 0x3c, 0x4b, 0xa0, 0x3f, 0xae, 0x79,
0x7e, 0xcb, 0x22, 0xdf, 0xb5, 0xa0, 0x65, 0x06, 0x44, 0xd4, 0x56, 0x15, 0x86, 0x5e, 0xd4, 0x56,
0x4d, 0x89, 0xa2, 0x7c, 0x80, 0xa3, 0x7c, 0xb4, 0xee, 0x18, 0xa3, 0x14, 0xcf, 0x4f, 0x7f, 0xb8,
0xd1, 0x92, 0xf7, 0xf8, 0xaf, 0x73, 0xc9, 0x28, 0x1d, 0xd1, 0xac, 0x46, 0x76, 0x7b, 0xf5, 0x1f,
0x9c, 0x5a, 0xb3, 0x6e, 0x59, 0xe4, 0xeb, 0xfc, 0x17, 0x69, 0xc4, 0xb7, 0xc8, 0x25, 0x2f, 0xfb,
0xbd, 0x7d, 0x1d, 0xe7, 0x74, 0xd5, 0xbe, 0x6c, 0xcc, 0x29, 0x6b, 0x8f, 0x37, 0xf9, 0xe8, 0xc4,
0x6f, 0x45, 0xa5, 0x06, 0x25, 0xf7, 0xfb, 0x51, 0xd3, 0x07, 0x39, 0xe2, 0x83, 0x14, 0xe4, 0x06,
0x2b, 0xbf, 0x64, 0x33, 0xf6, 0x3a, 0x8e, 0xf5, 0xba, 0xfd, 0xda, 0xd4, 0xb1, 0x6e, 0x60, 0x58,
0x83, 0x8d, 0xf8, 0x00, 0x20, 0x8d, 0xa8, 0x93, 0x4c, 0x44, 0x57, 0x09, 0x78, 0x3e, 0xe8, 0x6e,
0xca, 0x8b, 0x0c, 0xfc, 0xb2, 0x16, 0xbf, 0xca, 0xd5, 0xd5, 0x03, 0x19, 0x0b, 0xd6, 0x9d, 0x12,
0x33, 0xf4, 0x6d, 0x38, 0x25, 0xd9, 0xf6, 0x0d, 0x65, 0xa5, 0x02, 0xcb, 0x8f, 0x61, 0x6e, 0x2f,
0x0c, 0x9f, 0x4e, 0xc6, 0xea, 0x76, 0xcc, 0x8c, 0x38, 0xee, 0xba, 0xf1, 0x49, 0x37, 0x33, 0x0b,
0xfb, 0x1a, 0x36, 0xd5, 0x25, 0x1d, 0xad, 0xa9, 0x8d, 0x8f, 0xd2, 0x88, 0xfd, 0x73, 0xe2, 0xc2,
0x82, 0xd2, 0x81, 0x6a, 0xe0, 0x5d, 0xb3, 0x19, 0x43, 0xf3, 0x65, 0xbb, 0x30, 0xbc, 0x67, 0x39,
0xda, 0x8d, 0x58, 0xb6, 0x79, 0xcb, 0x22, 0x07, 0xd0, 0xdc, 0xa6, 0xfd, 0x70, 0x40, 0x45, 0xd8,
0x6e, 0x31, 0x1d, 0xb8, 0x8a, 0xf7, 0x75, 0xe7, 0x0c, 0xd0, 0xb4, 0x0b, 0x63, 0xf7, 0x3c, 0xa2,
0xdf, 0xd8, 0xf8, 0x48, 0x04, 0x04, 0x9f, 0x4b, 0xbb, 0x20, 0x23, 0xa6, 0x86, 0x5d, 0xc8, 0x84,
0x58, 0x0d, 0xbb, 0x90, 0x0b, 0xb1, 0x1a, 0x4b, 0x2d, 0x23, 0xb6, 0xc4, 0x87, 0x85, 0x5c, 0x54,
0x56, 0x99, 0x84, 0x69, 0xb1, 0xdc, 0xee, 0xb5, 0xe9, 0x04, 0x66, 0x6f, 0xeb, 0x66, 0x6f, 0x87,
0x30, 0xb7, 0x4d, 0xf9, 0x62, 0xf1, 0x14, 0x9c, 0x4c, 0xfa, 0xb7, 0x9e, 0xe0, 0x93, 0x55, 0xe0,
0x58, 0x67, 0x1a, 0x7e, 0xcc, 0x7f, 0x21, 0x5f, 0x85, 0xc6, 0x7d, 0x9a, 0xc8, 0x9c, 0x1b, 0xe5,
0x7a, 0x66, 0x92, 0x70, 0xba, 0x05, 0x29, 0x3b, 0x26, 0xcf, 0x60, 0x6b, 0x1b, 0x74, 0x30, 0xa4,
0x5c, 0x39, 0xf5, 0xbc, 0xc1, 0x73, 0xf2, 0x63, 0xd8, 0xb8, 0x4a, 0x0d, 0x5c, 0xd1, 0x52, 0x35,
0xf4, 0xc6, 0xe7, 0x33, 0x78, 0x51, 0xcb, 0x41, 0x38, 0xa0, 0x9a, 0x0b, 0x14, 0x40, 0x43, 0xcb,
0x68, 0x55, 0x02, 0x94, 0x4f, 0x40, 0x56, 0x02, 0x54, 0x90, 0x00, 0x6b, 0xaf, 0x61, 0x3f, 0x36,
0xb9, 0x96, 0xf6, 0xc3, 0x93, 0x5e, 0xd3, 0x9e, 0x36, 0x3e, 0x72, 0x47, 0xc9, 0x73, 0xf2, 0x04,
0xdf, 0xa0, 0xeb, 0x79, 0x45, 0xa9, 0x2f, 0x9d, 0x4d, 0x41, 0x52, 0x8b, 0xa5, 0x55, 0x99, 0xfe,
0x35, 0xef, 0x0a, 0x3d, 0xa5, 0xcf, 0x00, 0x1c, 0x26, 0xe1, 0x78, 0xdb, 0xa5, 0xa3, 0x30, 0x48,
0x75, 0x6d, 0x9a, 0x3b, 0x93, 0xea, 0x2f, 0x2d, 0x81, 0x86, 0x3c, 0xd1, 0x0e, 0x1f, 0x46, 0x5a,
0x96, 0x64, 0xae, 0xa9, 0xe9, 0x35, 0x6a, 0x41, 0x0a, 0x52, 0x6c, 0x6e, 0x59, 0x64, 0x13, 0x20,
0x0d, 0xcb, 0xab, 0xa3, 0x44, 0x2e, 0xe2, 0xaf, 0xd4, 0x5e, 0x41, 0x0c, 0xff, 0x00, 0xea, 0x69,
0x9c, 0x77, 0x35, 0x4d, 0xba, 0x36, 0xa2, 0xc2, 0xca, 0x82, 0xe7, 0xa2, 0xaf, 0x76, 0x1b, 0x97,
0x0a, 0x48, 0x8d, 0x2d, 0x15, 0x86, 0x54, 0x3d, 0x58, 0xe4, 0x03, 0x54, 0xee, 0x08, 0x66, 0x83,
0xc8, 0x99, 0x14, 0x44, 0x40, 0x95, 0x34, 0x17, 0x06, 0x10, 0x8d, 0x88, 0x08, 0xe3, 0x56, 0x9e,
0x89, 0xc2, 0x54, 0xf3, 0x08, 0x16, 0x72, 0x11, 0x2e, 0x25, 0xd2, 0xd3, 0x82, 0x8e, 0x4a, 0xa4,
0xa7, 0x06, 0xc7, 0xec, 0x65, 0xec, 0x72, 0xde, 0x06, 0x3c, 0x01, 0x9d, 0x79, 0x49, 0xff, 0xe4,
0x3d, 0x6b, 0xfd, 0xee, 0x8d, 0x0f, 0xfe, 0xd7, 0xd0, 0x4b, 0x4e, 0x26, 0x47, 0x37, 0xfb, 0xe1,
0x68, 0xc3, 0x97, 0x61, 0x0b, 0x91, 0xd3, 0xb5, 0xe1, 0x07, 0x83, 0x0d, 0x6c, 0xf9, 0x68, 0x06,
0x7f, 0xda, 0xf8, 0x53, 0xff, 0x15, 0x00, 0x00, 0xff, 0xff, 0x8e, 0xf8, 0xad, 0x38, 0x0c, 0x59,
0x00, 0x00,
}

@ -111,6 +111,23 @@ func request_Lightning_GetTransactions_0(ctx context.Context, marshaler runtime.
}
var (
filter_Lightning_EstimateFee_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_Lightning_EstimateFee_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq EstimateFeeRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_EstimateFee_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.EstimateFee(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func request_Lightning_SendCoins_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SendCoinsRequest
var metadata runtime.ServerMetadata
@ -1006,6 +1023,35 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn *
})
mux.Handle("GET", pattern_Lightning_EstimateFee_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_EstimateFee_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_EstimateFee_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_SendCoins_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(ctx)
defer cancel()
@ -1944,6 +1990,8 @@ var (
pattern_Lightning_GetTransactions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "transactions"}, ""))
pattern_Lightning_EstimateFee_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "transactions", "fee"}, ""))
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"}, ""))
@ -2016,6 +2064,8 @@ var (
forward_Lightning_GetTransactions_0 = runtime.ForwardResponseMessage
forward_Lightning_EstimateFee_0 = runtime.ForwardResponseMessage
forward_Lightning_SendCoins_0 = runtime.ForwardResponseMessage
forward_Lightning_ListUnspent_0 = runtime.ForwardResponseMessage

@ -220,6 +220,16 @@ service Lightning {
};
}
/** lncli: `estimatefee`
EstimateFee asks the chain backend to estimate the fee rate and total fees
for a transaction that pays to multiple specified outputs.
*/
rpc EstimateFee (EstimateFeeRequest) returns (EstimateFeeResponse) {
option (google.api.http) = {
get: "/v1/transactions/fee"
};
}
/** lncli: `sendcoins`
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. If
@ -839,6 +849,22 @@ message LightningAddress {
string host = 2 [json_name = "host"];
}
message EstimateFeeRequest {
/// The map from addresses to amounts for the transaction.
map<string, int64> AddrToAmount = 1;
/// The target number of blocks that this transaction should be confirmed by.
int32 target_conf = 2;
}
message EstimateFeeResponse {
/// The total fee in satoshis.
int64 fee_sat = 1 [json_name = "fee_sat"];
/// The fee rate in satoshi/byte.
int64 feerate_sat_per_byte = 2 [json_name = "feerate_sat_per_byte"];
}
message SendManyRequest {
/// The map from addresses to amounts
map<string, int64> AddrToAmount = 1;

@ -1044,6 +1044,33 @@
]
}
},
"/v1/transactions/fee": {
"get": {
"summary": "* lncli: `estimatefee`\nEstimateFee asks the chain backend to estimate the fee rate and total fees\nfor a transaction that pays to multiple specified outputs.",
"operationId": "EstimateFee",
"responses": {
"200": {
"description": "",
"schema": {
"$ref": "#/definitions/lnrpcEstimateFeeResponse"
}
}
},
"parameters": [
{
"name": "target_conf",
"description": "/ The target number of blocks that this transaction should be confirmed by.",
"in": "query",
"required": false,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Lightning"
]
}
},
"/v1/unlockwallet": {
"post": {
"summary": "* lncli: `unlock`\nUnlockWallet is used at startup of lnd to provide a password to unlock\nthe wallet database.",
@ -1747,6 +1774,21 @@
"lnrpcDisconnectPeerResponse": {
"type": "object"
},
"lnrpcEstimateFeeResponse": {
"type": "object",
"properties": {
"fee_sat": {
"type": "string",
"format": "int64",
"description": "/ The total fee in satoshis."
},
"feerate_sat_per_byte": {
"type": "string",
"format": "int64",
"description": "/ The fee rate in satoshi/byte."
}
}
},
"lnrpcFeeLimit": {
"type": "object",
"properties": {

@ -17,6 +17,8 @@ import (
"github.com/btcsuite/btcwallet/chain"
"github.com/btcsuite/btcwallet/waddrmgr"
base "github.com/btcsuite/btcwallet/wallet"
"github.com/btcsuite/btcwallet/wallet/txauthor"
"github.com/btcsuite/btcwallet/wallet/txrules"
"github.com/btcsuite/btcwallet/walletdb"
"github.com/lightningnetwork/lnd/keychain"
"github.com/lightningnetwork/lnd/lnwallet"
@ -297,9 +299,45 @@ func (b *BtcWallet) SendOutputs(outputs []*wire.TxOut,
// SendOutputs.
feeSatPerKB := btcutil.Amount(feeRate.FeePerKVByte())
// Sanity check outputs.
if len(outputs) < 1 {
return nil, lnwallet.ErrNoOutputs
}
return b.wallet.SendOutputs(outputs, defaultAccount, 1, feeSatPerKB)
}
// CreateSimpleTx creates a Bitcoin transaction paying to the specified
// outputs. The transaction is not broadcasted to the network, but a new change
// address might be created in the wallet database. In the case the wallet has
// insufficient funds, or the outputs are non-standard, an error should be
// returned. This method also takes the target fee expressed in sat/kw that
// should be used when crafting the transaction.
//
// NOTE: The dryRun argument can be set true to create a tx that doesn't alter
// the database. A tx created with this set to true SHOULD NOT be broadcasted.
//
// This is a part of the WalletController interface.
func (b *BtcWallet) CreateSimpleTx(outputs []*wire.TxOut,
feeRate lnwallet.SatPerKWeight, dryRun bool) (*txauthor.AuthoredTx, error) {
// The fee rate is passed in using units of sat/kw, so we'll convert
// this to sat/KB as the CreateSimpleTx method requires this unit.
feeSatPerKB := btcutil.Amount(feeRate.FeePerKVByte())
// Sanity check outputs.
if len(outputs) < 1 {
return nil, lnwallet.ErrNoOutputs
}
for _, output := range outputs {
err := txrules.CheckOutput(output, feeSatPerKB)
if err != nil {
return nil, err
}
}
return b.wallet.CreateSimpleTx(defaultAccount, outputs, 1, feeSatPerKB, dryRun)
}
// LockOutpoint marks an outpoint as locked meaning it will no longer be deemed
// as eligible for coin selection. Locking outputs are utilized in order to
// avoid race conditions when selecting inputs for usage when funding a

@ -9,6 +9,7 @@ import (
"github.com/btcsuite/btcd/chaincfg/chainhash"
"github.com/btcsuite/btcd/wire"
"github.com/btcsuite/btcutil"
"github.com/btcsuite/btcwallet/wallet/txauthor"
"github.com/lightningnetwork/lnd/lntypes"
)
@ -48,6 +49,10 @@ var (
ErrNotMine = errors.New("the passed output doesn't belong to the wallet")
)
// ErrNoOutputs is returned if we try to create a transaction with no outputs
// or send coins to a set of outputs that is empty.
var ErrNoOutputs = errors.New("no outputs")
// Utxo is an unspent output denoted by its outpoint, and output value of the
// original output.
type Utxo struct {
@ -169,6 +174,19 @@ type WalletController interface {
SendOutputs(outputs []*wire.TxOut,
feeRate SatPerKWeight) (*wire.MsgTx, error)
// CreateSimpleTx creates a Bitcoin transaction paying to the specified
// outputs. The transaction is not broadcasted to the network. In the
// case the wallet has insufficient funds, or the outputs are
// non-standard, an error should be returned. This method also takes
// the target fee expressed in sat/kw that should be used when crafting
// the transaction.
//
// NOTE: The dryRun argument can be set true to create a tx that
// doesn't alter the database. A tx created with this set to true
// SHOULD NOT be broadcasted.
CreateSimpleTx(outputs []*wire.TxOut, feeRate SatPerKWeight,
dryRun bool) (*txauthor.AuthoredTx, error)
// ListUnspentWitness returns all unspent outputs which are version 0
// witness programs. The 'minconfirms' and 'maxconfirms' parameters
// indicate the minimum and maximum number of confirmations an output

@ -2221,6 +2221,187 @@ func testLastUnusedAddr(miner *rpctest.Harness,
}
}
// testCreateSimpleTx checks that a call to CreateSimpleTx will return a
// transaction that is equal to the one that is being created by SendOutputs in
// a subsequent call.
func testCreateSimpleTx(r *rpctest.Harness, w *lnwallet.LightningWallet,
_ *lnwallet.LightningWallet, t *testing.T) {
// Send some money from the miner to the wallet
err := loadTestCredits(r, w, 20, 4)
if err != nil {
t.Fatalf("unable to send money to lnwallet: %v", err)
}
// The test cases we will run through for all backends.
testCases := []struct {
outVals []int64
feeRate lnwallet.SatPerKWeight
valid bool
}{
{
outVals: []int64{},
feeRate: 2500,
valid: false, // No outputs.
},
{
outVals: []int64{1e3},
feeRate: 2500,
valid: false, // Dust output.
},
{
outVals: []int64{1e8},
feeRate: 2500,
valid: true,
},
{
outVals: []int64{1e8, 2e8, 1e8, 2e7, 3e5},
feeRate: 2500,
valid: true,
},
{
outVals: []int64{1e8, 2e8, 1e8, 2e7, 3e5},
feeRate: 12500,
valid: true,
},
{
outVals: []int64{1e8, 2e8, 1e8, 2e7, 3e5},
feeRate: 50000,
valid: true,
},
{
outVals: []int64{1e8, 2e8, 1e8, 2e7, 3e5, 1e8, 2e8,
1e8, 2e7, 3e5},
feeRate: 44250,
valid: true,
},
}
for _, test := range testCases {
feeRate := test.feeRate
// Grab some fresh addresses from the miner that we will send
// to.
outputs := make([]*wire.TxOut, len(test.outVals))
for i, outVal := range test.outVals {
minerAddr, err := r.NewAddress()
if err != nil {
t.Fatalf("unable to generate address for "+
"miner: %v", err)
}
script, err := txscript.PayToAddrScript(minerAddr)
if err != nil {
t.Fatalf("unable to create pay to addr "+
"script: %v", err)
}
output := &wire.TxOut{
Value: outVal,
PkScript: script,
}
outputs[i] = output
}
// Now try creating a tx spending to these outputs.
createTx, createErr := w.CreateSimpleTx(
outputs, feeRate, true,
)
if test.valid == (createErr != nil) {
fmt.Println(spew.Sdump(createTx.Tx))
t.Fatalf("got unexpected error when creating tx: %v",
createErr)
}
// Also send to these outputs. This should result in a tx
// _very_ similar to the one we just created being sent. The
// only difference is that the dry run tx is not signed, and
// that the change output position might be different.
tx, sendErr := w.SendOutputs(outputs, feeRate)
if test.valid == (sendErr != nil) {
t.Fatalf("got unexpected error when sending tx: %v",
sendErr)
}
// We expected either both to not fail, or both to fail with
// the same error.
if createErr != sendErr {
t.Fatalf("error creating tx (%v) different "+
"from error sending outputs (%v)",
createErr, sendErr)
}
// If we expected the creation to fail, then this test is over.
if !test.valid {
continue
}
txid := tx.TxHash()
err = waitForMempoolTx(r, &txid)
if err != nil {
t.Fatalf("tx not relayed to miner: %v", err)
}
// Helper method to check that the two txs are similar.
assertSimilarTx := func(a, b *wire.MsgTx) error {
if a.Version != b.Version {
return fmt.Errorf("different versions: "+
"%v vs %v", a.Version, b.Version)
}
if a.LockTime != b.LockTime {
return fmt.Errorf("different locktimes: "+
"%v vs %v", a.LockTime, b.LockTime)
}
if len(a.TxIn) != len(b.TxIn) {
return fmt.Errorf("different number of "+
"inputs: %v vs %v", len(a.TxIn),
len(b.TxIn))
}
if len(a.TxOut) != len(b.TxOut) {
return fmt.Errorf("different number of "+
"outputs: %v vs %v", len(a.TxOut),
len(b.TxOut))
}
// They should be spending the same inputs.
for i := range a.TxIn {
prevA := a.TxIn[i].PreviousOutPoint
prevB := b.TxIn[i].PreviousOutPoint
if prevA != prevB {
return fmt.Errorf("different inputs: "+
"%v vs %v", spew.Sdump(prevA),
spew.Sdump(prevB))
}
}
// They should have the same outputs. Since the change
// output position gets randomized, they are not
// guaranteed to be in the same order.
for _, outA := range a.TxOut {
found := false
for _, outB := range b.TxOut {
if reflect.DeepEqual(outA, outB) {
found = true
break
}
}
if !found {
return fmt.Errorf("did not find "+
"output %v", spew.Sdump(outA))
}
}
return nil
}
// Assert that our "template tx" was similar to the one that
// ended up being sent.
if err := assertSimilarTx(createTx.Tx, tx); err != nil {
t.Fatalf("transactions not similar: %v", err)
}
}
}
type walletTestCase struct {
name string
test func(miner *rpctest.Harness, alice, bob *lnwallet.LightningWallet,
@ -2283,6 +2464,10 @@ var walletTests = []walletTestCase{
name: "reorg wallet balance",
test: testReorgWalletBalance,
},
{
name: "create simple tx",
test: testCreateSimpleTx,
},
}
func clearWalletStates(a, b *lnwallet.LightningWallet) error {

@ -11,6 +11,7 @@ import (
"github.com/btcsuite/btcd/txscript"
"github.com/btcsuite/btcd/wire"
"github.com/btcsuite/btcutil"
"github.com/btcsuite/btcwallet/wallet/txauthor"
"github.com/lightningnetwork/lnd/chainntnfs"
"github.com/lightningnetwork/lnd/input"
@ -241,6 +242,12 @@ func (*mockWalletController) SendOutputs(outputs []*wire.TxOut,
return nil, nil
}
func (*mockWalletController) CreateSimpleTx(outputs []*wire.TxOut,
_ lnwallet.SatPerKWeight, _ bool) (*txauthor.AuthoredTx, error) {
return nil, nil
}
// ListUnspentWitness is called by the wallet when doing coin selection. We just
// need one unspent for the funding transaction.
func (m *mockWalletController) ListUnspentWitness(minconfirms,

@ -25,6 +25,7 @@ import (
"github.com/btcsuite/btcd/wire"
"github.com/btcsuite/btcutil"
"github.com/btcsuite/btcwallet/waddrmgr"
"github.com/btcsuite/btcwallet/wallet/txauthor"
"github.com/coreos/bbolt"
"github.com/davecgh/go-spew/spew"
proxy "github.com/grpc-ecosystem/grpc-gateway/runtime"
@ -236,6 +237,10 @@ var (
Entity: "onchain",
Action: "read",
}},
"/lnrpc.Lightning/EstimateFee": {{
Entity: "onchain",
Action: "read",
}},
"/lnrpc.Lightning/ChannelBalance": {{
Entity: "offchain",
Action: "read",
@ -800,6 +805,59 @@ func (r *rpcServer) ListUnspent(ctx context.Context,
return resp, nil
}
// EstimateFee handles a request for estimating the fee for sending a
// transaction spending to multiple specified outputs in parallel.
func (r *rpcServer) EstimateFee(ctx context.Context,
in *lnrpc.EstimateFeeRequest) (*lnrpc.EstimateFeeResponse, error) {
// Create the list of outputs we are spending to.
outputs, err := addrPairsToOutputs(in.AddrToAmount)
if err != nil {
return nil, err
}
// Query the fee estimator for the fee rate for the given confirmation
// target.
target := in.TargetConf
feePerKw, err := sweep.DetermineFeePerKw(
r.server.cc.feeEstimator, sweep.FeePreference{
ConfTarget: uint32(target),
},
)
if err != nil {
return nil, err
}
// We will ask the wallet to create a tx using this fee rate. We set
// dryRun=true to avoid inflating the change addresses in the db.
var tx *txauthor.AuthoredTx
wallet := r.server.cc.wallet
err = wallet.WithCoinSelectLock(func() error {
tx, err = wallet.CreateSimpleTx(outputs, feePerKw, true)
return err
})
if err != nil {
return nil, err
}
// Use the created tx to calculate the total fee.
totalOutput := int64(0)
for _, out := range tx.Tx.TxOut {
totalOutput += out.Value
}
totalFee := int64(tx.TotalInput) - totalOutput
resp := &lnrpc.EstimateFeeResponse{
FeeSat: totalFee,
FeerateSatPerByte: int64(feePerKw.FeePerKVByte() / 1000),
}
rpcsLog.Debugf("[estimatefee] fee estimate for conf target %d: %v",
target, resp)
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,