multi: add a rpc endpoint to track the recovery process

This commit is contained in:
yyforyongyu 2020-06-09 14:47:17 +08:00
parent c1ef5bb908
commit 987edc9d81
17 changed files with 1182 additions and 613 deletions

@ -1729,6 +1729,27 @@ func getInfo(ctx *cli.Context) error {
return nil return nil
} }
var getRecoveryInfoCommand = cli.Command{
Name: "getrecoveryinfo",
Usage: "Display information about an ongoing recovery attempt.",
Action: actionDecorator(getRecoveryInfo),
}
func getRecoveryInfo(ctx *cli.Context) error {
ctxb := context.Background()
client, cleanUp := getClient(ctx)
defer cleanUp()
req := &lnrpc.GetRecoveryInfoRequest{}
resp, err := client.GetRecoveryInfo(ctxb, req)
if err != nil {
return err
}
printRespJSON(resp)
return nil
}
var pendingChannelsCommand = cli.Command{ var pendingChannelsCommand = cli.Command{
Name: "pendingchannels", Name: "pendingchannels",
Category: "Channels", Category: "Channels",

@ -271,6 +271,7 @@ func main() {
walletBalanceCommand, walletBalanceCommand,
channelBalanceCommand, channelBalanceCommand,
getInfoCommand, getInfoCommand,
getRecoveryInfoCommand,
pendingChannelsCommand, pendingChannelsCommand,
sendPaymentCommand, sendPaymentCommand,
payInvoiceCommand, payInvoiceCommand,

@ -164,7 +164,15 @@ That final line indicates the rescan is complete! If not all funds have
appeared, then the user may need to _repeat_ the process with a higher recovery appeared, then the user may need to _repeat_ the process with a higher recovery
window. Depending on how old the wallet is (the cipher seed stores the wallet's window. Depending on how old the wallet is (the cipher seed stores the wallet's
birthday!) and how many addresses were used, the rescan may take anywhere from birthday!) and how many addresses were used, the rescan may take anywhere from
a few minutes to a few hours. a few minutes to a few hours. To track the recovery progress, one can use the
command `lncli getrecoveryinfo`. When finished, the following is returned,
```
{
"recovery_mode": true,
"recovery_finished": true,
"progress": 1
}
```
If the rescan wasn't able to complete fully (`lnd` was shutdown for example), If the rescan wasn't able to complete fully (`lnd` was shutdown for example),
then from `lncli unlock`, it's possible to _restart_ the rescan from where it then from `lncli unlock`, it's possible to _restart_ the rescan from where it

@ -55,6 +55,8 @@ description):
* Lists all available connected peers. * Lists all available connected peers.
* GetInfo * GetInfo
* Returns basic data concerning the daemon. * Returns basic data concerning the daemon.
* GetRecoveryInfo
* Returns information about recovery process.
* PendingChannels * PendingChannels
* List the number of pending (not fully confirmed) channels. * List the number of pending (not fully confirmed) channels.
* ListChannels * ListChannels

@ -41,6 +41,8 @@ http:
get: "/v1/peers/subscribe" get: "/v1/peers/subscribe"
- selector: lnrpc.Lightning.GetInfo - selector: lnrpc.Lightning.GetInfo
get: "/v1/getinfo" get: "/v1/getinfo"
- selector: lnrpc.Lightning.GetRecoveryInfo
get: "/v1/getrecoveryinfo"
- selector: lnrpc.Lightning.PendingChannels - selector: lnrpc.Lightning.PendingChannels
get: "/v1/channels/pending" get: "/v1/channels/pending"
- selector: lnrpc.Lightning.ListChannels - selector: lnrpc.Lightning.ListChannels

@ -1876,8 +1876,8 @@ func (m *ForwardHtlcInterceptRequest) GetExpiry() uint32 {
} }
//* //*
//ForwardHtlcInterceptResponse enables the caller to resolve a previously hold forward. //ForwardHtlcInterceptResponse enables the caller to resolve a previously hold
//The caller can choose either to: //forward. The caller can choose either to:
//- `Resume`: Execute the default behavior (usually forward). //- `Resume`: Execute the default behavior (usually forward).
//- `Reject`: Fail the htlc backwards. //- `Reject`: Fail the htlc backwards.
//- `Settle`: Settle this htlc with a given preimage. //- `Settle`: Settle this htlc with a given preimage.

@ -98,7 +98,7 @@ service Router {
rpc TrackPayment (TrackPaymentRequest) returns (stream PaymentStatus) { rpc TrackPayment (TrackPaymentRequest) returns (stream PaymentStatus) {
option deprecated = true; option deprecated = true;
} }
/** /**
HtlcInterceptor dispatches a bi-directional streaming RPC in which HtlcInterceptor dispatches a bi-directional streaming RPC in which
Forwarded HTLC requests are sent to the client and the client responds with Forwarded HTLC requests are sent to the client and the client responds with
@ -106,7 +106,8 @@ service Router {
In case of interception, the htlc can be either settled, cancelled or In case of interception, the htlc can be either settled, cancelled or
resumed later by using the ResolveHoldForward endpoint. resumed later by using the ResolveHoldForward endpoint.
*/ */
rpc HtlcInterceptor (stream ForwardHtlcInterceptResponse) returns (stream ForwardHtlcInterceptRequest); rpc HtlcInterceptor (stream ForwardHtlcInterceptResponse)
returns (stream ForwardHtlcInterceptRequest);
} }
message SendPaymentRequest { message SendPaymentRequest {
@ -589,7 +590,7 @@ message PaymentStatus {
repeated lnrpc.HTLCAttempt htlcs = 4; repeated lnrpc.HTLCAttempt htlcs = 4;
} }
message CircuitKey { message CircuitKey {
/// The id of the channel that the is part of this circuit. /// The id of the channel that the is part of this circuit.
uint64 chan_id = 1; uint64 chan_id = 1;
@ -618,14 +619,14 @@ message ForwardHtlcInterceptRequest {
} }
/** /**
ForwardHtlcInterceptResponse enables the caller to resolve a previously hold forward. ForwardHtlcInterceptResponse enables the caller to resolve a previously hold
The caller can choose either to: forward. The caller can choose either to:
- `Resume`: Execute the default behavior (usually forward). - `Resume`: Execute the default behavior (usually forward).
- `Reject`: Fail the htlc backwards. - `Reject`: Fail the htlc backwards.
- `Settle`: Settle this htlc with a given preimage. - `Settle`: Settle this htlc with a given preimage.
*/ */
message ForwardHtlcInterceptResponse { message ForwardHtlcInterceptResponse {
/** /**
The key of this forwarded htlc. It defines the incoming channel id and The key of this forwarded htlc. It defines the incoming channel id and
the index in this channel. the index in this channel.
*/ */
@ -638,9 +639,8 @@ message ForwardHtlcInterceptResponse {
bytes preimage = 3; bytes preimage = 3;
} }
enum ResolveHoldForwardAction { enum ResolveHoldForwardAction {
SETTLE = 0; SETTLE = 0;
FAIL = 1; FAIL = 1;
RESUME = 2; RESUME = 2;
} }

@ -431,7 +431,7 @@ func (x PendingChannelsResponse_ForceClosedChannel_AnchorState) String() string
} }
func (PendingChannelsResponse_ForceClosedChannel_AnchorState) EnumDescriptor() ([]byte, []int) { func (PendingChannelsResponse_ForceClosedChannel_AnchorState) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{68, 5, 0} return fileDescriptor_77a6da22d6a3feb1, []int{70, 5, 0}
} }
type ChannelEventUpdate_UpdateType int32 type ChannelEventUpdate_UpdateType int32
@ -465,7 +465,7 @@ func (x ChannelEventUpdate_UpdateType) String() string {
} }
func (ChannelEventUpdate_UpdateType) EnumDescriptor() ([]byte, []int) { func (ChannelEventUpdate_UpdateType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{70, 0} return fileDescriptor_77a6da22d6a3feb1, []int{72, 0}
} }
type Invoice_InvoiceState int32 type Invoice_InvoiceState int32
@ -496,7 +496,7 @@ func (x Invoice_InvoiceState) String() string {
} }
func (Invoice_InvoiceState) EnumDescriptor() ([]byte, []int) { func (Invoice_InvoiceState) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{105, 0} return fileDescriptor_77a6da22d6a3feb1, []int{107, 0}
} }
type Payment_PaymentStatus int32 type Payment_PaymentStatus int32
@ -527,7 +527,7 @@ func (x Payment_PaymentStatus) String() string {
} }
func (Payment_PaymentStatus) EnumDescriptor() ([]byte, []int) { func (Payment_PaymentStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{112, 0} return fileDescriptor_77a6da22d6a3feb1, []int{114, 0}
} }
type HTLCAttempt_HTLCStatus int32 type HTLCAttempt_HTLCStatus int32
@ -555,7 +555,7 @@ func (x HTLCAttempt_HTLCStatus) String() string {
} }
func (HTLCAttempt_HTLCStatus) EnumDescriptor() ([]byte, []int) { func (HTLCAttempt_HTLCStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{113, 0} return fileDescriptor_77a6da22d6a3feb1, []int{115, 0}
} }
type Failure_FailureCode int32 type Failure_FailureCode int32
@ -666,7 +666,7 @@ func (x Failure_FailureCode) String() string {
} }
func (Failure_FailureCode) EnumDescriptor() ([]byte, []int) { func (Failure_FailureCode) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{146, 0} return fileDescriptor_77a6da22d6a3feb1, []int{148, 0}
} }
type Utxo struct { type Utxo struct {
@ -3983,6 +3983,95 @@ func (m *GetInfoResponse) GetFeatures() map[uint32]*Feature {
return nil return nil
} }
type GetRecoveryInfoRequest struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetRecoveryInfoRequest) Reset() { *m = GetRecoveryInfoRequest{} }
func (m *GetRecoveryInfoRequest) String() string { return proto.CompactTextString(m) }
func (*GetRecoveryInfoRequest) ProtoMessage() {}
func (*GetRecoveryInfoRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{46}
}
func (m *GetRecoveryInfoRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetRecoveryInfoRequest.Unmarshal(m, b)
}
func (m *GetRecoveryInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetRecoveryInfoRequest.Marshal(b, m, deterministic)
}
func (m *GetRecoveryInfoRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetRecoveryInfoRequest.Merge(m, src)
}
func (m *GetRecoveryInfoRequest) XXX_Size() int {
return xxx_messageInfo_GetRecoveryInfoRequest.Size(m)
}
func (m *GetRecoveryInfoRequest) XXX_DiscardUnknown() {
xxx_messageInfo_GetRecoveryInfoRequest.DiscardUnknown(m)
}
var xxx_messageInfo_GetRecoveryInfoRequest proto.InternalMessageInfo
type GetRecoveryInfoResponse struct {
// Whether the wallet is in recovery mode
RecoveryMode bool `protobuf:"varint,1,opt,name=recovery_mode,json=recoveryMode,proto3" json:"recovery_mode,omitempty"`
// Whether the wallet recovery progress is finished
RecoveryFinished bool `protobuf:"varint,2,opt,name=recovery_finished,json=recoveryFinished,proto3" json:"recovery_finished,omitempty"`
// The recovery progress, ranging from 0 to 1.
Progress float64 `protobuf:"fixed64,3,opt,name=progress,proto3" json:"progress,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetRecoveryInfoResponse) Reset() { *m = GetRecoveryInfoResponse{} }
func (m *GetRecoveryInfoResponse) String() string { return proto.CompactTextString(m) }
func (*GetRecoveryInfoResponse) ProtoMessage() {}
func (*GetRecoveryInfoResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{47}
}
func (m *GetRecoveryInfoResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetRecoveryInfoResponse.Unmarshal(m, b)
}
func (m *GetRecoveryInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetRecoveryInfoResponse.Marshal(b, m, deterministic)
}
func (m *GetRecoveryInfoResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetRecoveryInfoResponse.Merge(m, src)
}
func (m *GetRecoveryInfoResponse) XXX_Size() int {
return xxx_messageInfo_GetRecoveryInfoResponse.Size(m)
}
func (m *GetRecoveryInfoResponse) XXX_DiscardUnknown() {
xxx_messageInfo_GetRecoveryInfoResponse.DiscardUnknown(m)
}
var xxx_messageInfo_GetRecoveryInfoResponse proto.InternalMessageInfo
func (m *GetRecoveryInfoResponse) GetRecoveryMode() bool {
if m != nil {
return m.RecoveryMode
}
return false
}
func (m *GetRecoveryInfoResponse) GetRecoveryFinished() bool {
if m != nil {
return m.RecoveryFinished
}
return false
}
func (m *GetRecoveryInfoResponse) GetProgress() float64 {
if m != nil {
return m.Progress
}
return 0
}
type Chain struct { type Chain struct {
// The blockchain the node is on (eg bitcoin, litecoin) // The blockchain the node is on (eg bitcoin, litecoin)
Chain string `protobuf:"bytes,1,opt,name=chain,proto3" json:"chain,omitempty"` Chain string `protobuf:"bytes,1,opt,name=chain,proto3" json:"chain,omitempty"`
@ -3997,7 +4086,7 @@ func (m *Chain) Reset() { *m = Chain{} }
func (m *Chain) String() string { return proto.CompactTextString(m) } func (m *Chain) String() string { return proto.CompactTextString(m) }
func (*Chain) ProtoMessage() {} func (*Chain) ProtoMessage() {}
func (*Chain) Descriptor() ([]byte, []int) { func (*Chain) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{46} return fileDescriptor_77a6da22d6a3feb1, []int{48}
} }
func (m *Chain) XXX_Unmarshal(b []byte) error { func (m *Chain) XXX_Unmarshal(b []byte) error {
@ -4045,7 +4134,7 @@ func (m *ConfirmationUpdate) Reset() { *m = ConfirmationUpdate{} }
func (m *ConfirmationUpdate) String() string { return proto.CompactTextString(m) } func (m *ConfirmationUpdate) String() string { return proto.CompactTextString(m) }
func (*ConfirmationUpdate) ProtoMessage() {} func (*ConfirmationUpdate) ProtoMessage() {}
func (*ConfirmationUpdate) Descriptor() ([]byte, []int) { func (*ConfirmationUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{47} return fileDescriptor_77a6da22d6a3feb1, []int{49}
} }
func (m *ConfirmationUpdate) XXX_Unmarshal(b []byte) error { func (m *ConfirmationUpdate) XXX_Unmarshal(b []byte) error {
@ -4098,7 +4187,7 @@ func (m *ChannelOpenUpdate) Reset() { *m = ChannelOpenUpdate{} }
func (m *ChannelOpenUpdate) String() string { return proto.CompactTextString(m) } func (m *ChannelOpenUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelOpenUpdate) ProtoMessage() {} func (*ChannelOpenUpdate) ProtoMessage() {}
func (*ChannelOpenUpdate) Descriptor() ([]byte, []int) { func (*ChannelOpenUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{48} return fileDescriptor_77a6da22d6a3feb1, []int{50}
} }
func (m *ChannelOpenUpdate) XXX_Unmarshal(b []byte) error { func (m *ChannelOpenUpdate) XXX_Unmarshal(b []byte) error {
@ -4138,7 +4227,7 @@ func (m *ChannelCloseUpdate) Reset() { *m = ChannelCloseUpdate{} }
func (m *ChannelCloseUpdate) String() string { return proto.CompactTextString(m) } func (m *ChannelCloseUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelCloseUpdate) ProtoMessage() {} func (*ChannelCloseUpdate) ProtoMessage() {}
func (*ChannelCloseUpdate) Descriptor() ([]byte, []int) { func (*ChannelCloseUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{49} return fileDescriptor_77a6da22d6a3feb1, []int{51}
} }
func (m *ChannelCloseUpdate) XXX_Unmarshal(b []byte) error { func (m *ChannelCloseUpdate) XXX_Unmarshal(b []byte) error {
@ -4203,7 +4292,7 @@ func (m *CloseChannelRequest) Reset() { *m = CloseChannelRequest{} }
func (m *CloseChannelRequest) String() string { return proto.CompactTextString(m) } func (m *CloseChannelRequest) String() string { return proto.CompactTextString(m) }
func (*CloseChannelRequest) ProtoMessage() {} func (*CloseChannelRequest) ProtoMessage() {}
func (*CloseChannelRequest) Descriptor() ([]byte, []int) { func (*CloseChannelRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{50} return fileDescriptor_77a6da22d6a3feb1, []int{52}
} }
func (m *CloseChannelRequest) XXX_Unmarshal(b []byte) error { func (m *CloseChannelRequest) XXX_Unmarshal(b []byte) error {
@ -4273,7 +4362,7 @@ func (m *CloseStatusUpdate) Reset() { *m = CloseStatusUpdate{} }
func (m *CloseStatusUpdate) String() string { return proto.CompactTextString(m) } func (m *CloseStatusUpdate) String() string { return proto.CompactTextString(m) }
func (*CloseStatusUpdate) ProtoMessage() {} func (*CloseStatusUpdate) ProtoMessage() {}
func (*CloseStatusUpdate) Descriptor() ([]byte, []int) { func (*CloseStatusUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{51} return fileDescriptor_77a6da22d6a3feb1, []int{53}
} }
func (m *CloseStatusUpdate) XXX_Unmarshal(b []byte) error { func (m *CloseStatusUpdate) XXX_Unmarshal(b []byte) error {
@ -4351,7 +4440,7 @@ func (m *PendingUpdate) Reset() { *m = PendingUpdate{} }
func (m *PendingUpdate) String() string { return proto.CompactTextString(m) } func (m *PendingUpdate) String() string { return proto.CompactTextString(m) }
func (*PendingUpdate) ProtoMessage() {} func (*PendingUpdate) ProtoMessage() {}
func (*PendingUpdate) Descriptor() ([]byte, []int) { func (*PendingUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{52} return fileDescriptor_77a6da22d6a3feb1, []int{54}
} }
func (m *PendingUpdate) XXX_Unmarshal(b []byte) error { func (m *PendingUpdate) XXX_Unmarshal(b []byte) error {
@ -4410,7 +4499,7 @@ func (m *ReadyForPsbtFunding) Reset() { *m = ReadyForPsbtFunding{} }
func (m *ReadyForPsbtFunding) String() string { return proto.CompactTextString(m) } func (m *ReadyForPsbtFunding) String() string { return proto.CompactTextString(m) }
func (*ReadyForPsbtFunding) ProtoMessage() {} func (*ReadyForPsbtFunding) ProtoMessage() {}
func (*ReadyForPsbtFunding) Descriptor() ([]byte, []int) { func (*ReadyForPsbtFunding) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{53} return fileDescriptor_77a6da22d6a3feb1, []int{55}
} }
func (m *ReadyForPsbtFunding) XXX_Unmarshal(b []byte) error { func (m *ReadyForPsbtFunding) XXX_Unmarshal(b []byte) error {
@ -4513,7 +4602,7 @@ func (m *OpenChannelRequest) Reset() { *m = OpenChannelRequest{} }
func (m *OpenChannelRequest) String() string { return proto.CompactTextString(m) } func (m *OpenChannelRequest) String() string { return proto.CompactTextString(m) }
func (*OpenChannelRequest) ProtoMessage() {} func (*OpenChannelRequest) ProtoMessage() {}
func (*OpenChannelRequest) Descriptor() ([]byte, []int) { func (*OpenChannelRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{54} return fileDescriptor_77a6da22d6a3feb1, []int{56}
} }
func (m *OpenChannelRequest) XXX_Unmarshal(b []byte) error { func (m *OpenChannelRequest) XXX_Unmarshal(b []byte) error {
@ -4645,7 +4734,7 @@ func (m *OpenStatusUpdate) Reset() { *m = OpenStatusUpdate{} }
func (m *OpenStatusUpdate) String() string { return proto.CompactTextString(m) } func (m *OpenStatusUpdate) String() string { return proto.CompactTextString(m) }
func (*OpenStatusUpdate) ProtoMessage() {} func (*OpenStatusUpdate) ProtoMessage() {}
func (*OpenStatusUpdate) Descriptor() ([]byte, []int) { func (*OpenStatusUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{55} return fileDescriptor_77a6da22d6a3feb1, []int{57}
} }
func (m *OpenStatusUpdate) XXX_Unmarshal(b []byte) error { func (m *OpenStatusUpdate) XXX_Unmarshal(b []byte) error {
@ -4746,7 +4835,7 @@ func (m *KeyLocator) Reset() { *m = KeyLocator{} }
func (m *KeyLocator) String() string { return proto.CompactTextString(m) } func (m *KeyLocator) String() string { return proto.CompactTextString(m) }
func (*KeyLocator) ProtoMessage() {} func (*KeyLocator) ProtoMessage() {}
func (*KeyLocator) Descriptor() ([]byte, []int) { func (*KeyLocator) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{56} return fileDescriptor_77a6da22d6a3feb1, []int{58}
} }
func (m *KeyLocator) XXX_Unmarshal(b []byte) error { func (m *KeyLocator) XXX_Unmarshal(b []byte) error {
@ -4797,7 +4886,7 @@ func (m *KeyDescriptor) Reset() { *m = KeyDescriptor{} }
func (m *KeyDescriptor) String() string { return proto.CompactTextString(m) } func (m *KeyDescriptor) String() string { return proto.CompactTextString(m) }
func (*KeyDescriptor) ProtoMessage() {} func (*KeyDescriptor) ProtoMessage() {}
func (*KeyDescriptor) Descriptor() ([]byte, []int) { func (*KeyDescriptor) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{57} return fileDescriptor_77a6da22d6a3feb1, []int{59}
} }
func (m *KeyDescriptor) XXX_Unmarshal(b []byte) error { func (m *KeyDescriptor) XXX_Unmarshal(b []byte) error {
@ -4864,7 +4953,7 @@ func (m *ChanPointShim) Reset() { *m = ChanPointShim{} }
func (m *ChanPointShim) String() string { return proto.CompactTextString(m) } func (m *ChanPointShim) String() string { return proto.CompactTextString(m) }
func (*ChanPointShim) ProtoMessage() {} func (*ChanPointShim) ProtoMessage() {}
func (*ChanPointShim) Descriptor() ([]byte, []int) { func (*ChanPointShim) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{58} return fileDescriptor_77a6da22d6a3feb1, []int{60}
} }
func (m *ChanPointShim) XXX_Unmarshal(b []byte) error { func (m *ChanPointShim) XXX_Unmarshal(b []byte) error {
@ -4946,7 +5035,7 @@ func (m *PsbtShim) Reset() { *m = PsbtShim{} }
func (m *PsbtShim) String() string { return proto.CompactTextString(m) } func (m *PsbtShim) String() string { return proto.CompactTextString(m) }
func (*PsbtShim) ProtoMessage() {} func (*PsbtShim) ProtoMessage() {}
func (*PsbtShim) Descriptor() ([]byte, []int) { func (*PsbtShim) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{59} return fileDescriptor_77a6da22d6a3feb1, []int{61}
} }
func (m *PsbtShim) XXX_Unmarshal(b []byte) error { func (m *PsbtShim) XXX_Unmarshal(b []byte) error {
@ -4995,7 +5084,7 @@ func (m *FundingShim) Reset() { *m = FundingShim{} }
func (m *FundingShim) String() string { return proto.CompactTextString(m) } func (m *FundingShim) String() string { return proto.CompactTextString(m) }
func (*FundingShim) ProtoMessage() {} func (*FundingShim) ProtoMessage() {}
func (*FundingShim) Descriptor() ([]byte, []int) { func (*FundingShim) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{60} return fileDescriptor_77a6da22d6a3feb1, []int{62}
} }
func (m *FundingShim) XXX_Unmarshal(b []byte) error { func (m *FundingShim) XXX_Unmarshal(b []byte) error {
@ -5073,7 +5162,7 @@ func (m *FundingShimCancel) Reset() { *m = FundingShimCancel{} }
func (m *FundingShimCancel) String() string { return proto.CompactTextString(m) } func (m *FundingShimCancel) String() string { return proto.CompactTextString(m) }
func (*FundingShimCancel) ProtoMessage() {} func (*FundingShimCancel) ProtoMessage() {}
func (*FundingShimCancel) Descriptor() ([]byte, []int) { func (*FundingShimCancel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{61} return fileDescriptor_77a6da22d6a3feb1, []int{63}
} }
func (m *FundingShimCancel) XXX_Unmarshal(b []byte) error { func (m *FundingShimCancel) XXX_Unmarshal(b []byte) error {
@ -5118,7 +5207,7 @@ func (m *FundingPsbtVerify) Reset() { *m = FundingPsbtVerify{} }
func (m *FundingPsbtVerify) String() string { return proto.CompactTextString(m) } func (m *FundingPsbtVerify) String() string { return proto.CompactTextString(m) }
func (*FundingPsbtVerify) ProtoMessage() {} func (*FundingPsbtVerify) ProtoMessage() {}
func (*FundingPsbtVerify) Descriptor() ([]byte, []int) { func (*FundingPsbtVerify) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{62} return fileDescriptor_77a6da22d6a3feb1, []int{64}
} }
func (m *FundingPsbtVerify) XXX_Unmarshal(b []byte) error { func (m *FundingPsbtVerify) XXX_Unmarshal(b []byte) error {
@ -5170,7 +5259,7 @@ func (m *FundingPsbtFinalize) Reset() { *m = FundingPsbtFinalize{} }
func (m *FundingPsbtFinalize) String() string { return proto.CompactTextString(m) } func (m *FundingPsbtFinalize) String() string { return proto.CompactTextString(m) }
func (*FundingPsbtFinalize) ProtoMessage() {} func (*FundingPsbtFinalize) ProtoMessage() {}
func (*FundingPsbtFinalize) Descriptor() ([]byte, []int) { func (*FundingPsbtFinalize) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{63} return fileDescriptor_77a6da22d6a3feb1, []int{65}
} }
func (m *FundingPsbtFinalize) XXX_Unmarshal(b []byte) error { func (m *FundingPsbtFinalize) XXX_Unmarshal(b []byte) error {
@ -5221,7 +5310,7 @@ func (m *FundingTransitionMsg) Reset() { *m = FundingTransitionMsg{} }
func (m *FundingTransitionMsg) String() string { return proto.CompactTextString(m) } func (m *FundingTransitionMsg) String() string { return proto.CompactTextString(m) }
func (*FundingTransitionMsg) ProtoMessage() {} func (*FundingTransitionMsg) ProtoMessage() {}
func (*FundingTransitionMsg) Descriptor() ([]byte, []int) { func (*FundingTransitionMsg) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{64} return fileDescriptor_77a6da22d6a3feb1, []int{66}
} }
func (m *FundingTransitionMsg) XXX_Unmarshal(b []byte) error { func (m *FundingTransitionMsg) XXX_Unmarshal(b []byte) error {
@ -5325,7 +5414,7 @@ func (m *FundingStateStepResp) Reset() { *m = FundingStateStepResp{} }
func (m *FundingStateStepResp) String() string { return proto.CompactTextString(m) } func (m *FundingStateStepResp) String() string { return proto.CompactTextString(m) }
func (*FundingStateStepResp) ProtoMessage() {} func (*FundingStateStepResp) ProtoMessage() {}
func (*FundingStateStepResp) Descriptor() ([]byte, []int) { func (*FundingStateStepResp) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{65} return fileDescriptor_77a6da22d6a3feb1, []int{67}
} }
func (m *FundingStateStepResp) XXX_Unmarshal(b []byte) error { func (m *FundingStateStepResp) XXX_Unmarshal(b []byte) error {
@ -5371,7 +5460,7 @@ func (m *PendingHTLC) Reset() { *m = PendingHTLC{} }
func (m *PendingHTLC) String() string { return proto.CompactTextString(m) } func (m *PendingHTLC) String() string { return proto.CompactTextString(m) }
func (*PendingHTLC) ProtoMessage() {} func (*PendingHTLC) ProtoMessage() {}
func (*PendingHTLC) Descriptor() ([]byte, []int) { func (*PendingHTLC) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{66} return fileDescriptor_77a6da22d6a3feb1, []int{68}
} }
func (m *PendingHTLC) XXX_Unmarshal(b []byte) error { func (m *PendingHTLC) XXX_Unmarshal(b []byte) error {
@ -5444,7 +5533,7 @@ func (m *PendingChannelsRequest) Reset() { *m = PendingChannelsRequest{}
func (m *PendingChannelsRequest) String() string { return proto.CompactTextString(m) } func (m *PendingChannelsRequest) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsRequest) ProtoMessage() {} func (*PendingChannelsRequest) ProtoMessage() {}
func (*PendingChannelsRequest) Descriptor() ([]byte, []int) { func (*PendingChannelsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{67} return fileDescriptor_77a6da22d6a3feb1, []int{69}
} }
func (m *PendingChannelsRequest) XXX_Unmarshal(b []byte) error { func (m *PendingChannelsRequest) XXX_Unmarshal(b []byte) error {
@ -5488,7 +5577,7 @@ func (m *PendingChannelsResponse) Reset() { *m = PendingChannelsResponse
func (m *PendingChannelsResponse) String() string { return proto.CompactTextString(m) } func (m *PendingChannelsResponse) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsResponse) ProtoMessage() {} func (*PendingChannelsResponse) ProtoMessage() {}
func (*PendingChannelsResponse) Descriptor() ([]byte, []int) { func (*PendingChannelsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{68} return fileDescriptor_77a6da22d6a3feb1, []int{70}
} }
func (m *PendingChannelsResponse) XXX_Unmarshal(b []byte) error { func (m *PendingChannelsResponse) XXX_Unmarshal(b []byte) error {
@ -5573,7 +5662,7 @@ func (m *PendingChannelsResponse_PendingChannel) Reset() {
func (m *PendingChannelsResponse_PendingChannel) String() string { return proto.CompactTextString(m) } func (m *PendingChannelsResponse_PendingChannel) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsResponse_PendingChannel) ProtoMessage() {} func (*PendingChannelsResponse_PendingChannel) ProtoMessage() {}
func (*PendingChannelsResponse_PendingChannel) Descriptor() ([]byte, []int) { func (*PendingChannelsResponse_PendingChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{68, 0} return fileDescriptor_77a6da22d6a3feb1, []int{70, 0}
} }
func (m *PendingChannelsResponse_PendingChannel) XXX_Unmarshal(b []byte) error { func (m *PendingChannelsResponse_PendingChannel) XXX_Unmarshal(b []byte) error {
@ -5689,7 +5778,7 @@ func (m *PendingChannelsResponse_PendingOpenChannel) String() string {
} }
func (*PendingChannelsResponse_PendingOpenChannel) ProtoMessage() {} func (*PendingChannelsResponse_PendingOpenChannel) ProtoMessage() {}
func (*PendingChannelsResponse_PendingOpenChannel) Descriptor() ([]byte, []int) { func (*PendingChannelsResponse_PendingOpenChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{68, 1} return fileDescriptor_77a6da22d6a3feb1, []int{70, 1}
} }
func (m *PendingChannelsResponse_PendingOpenChannel) XXX_Unmarshal(b []byte) error { func (m *PendingChannelsResponse_PendingOpenChannel) XXX_Unmarshal(b []byte) error {
@ -5767,7 +5856,7 @@ func (m *PendingChannelsResponse_WaitingCloseChannel) String() string {
} }
func (*PendingChannelsResponse_WaitingCloseChannel) ProtoMessage() {} func (*PendingChannelsResponse_WaitingCloseChannel) ProtoMessage() {}
func (*PendingChannelsResponse_WaitingCloseChannel) Descriptor() ([]byte, []int) { func (*PendingChannelsResponse_WaitingCloseChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{68, 2} return fileDescriptor_77a6da22d6a3feb1, []int{70, 2}
} }
func (m *PendingChannelsResponse_WaitingCloseChannel) XXX_Unmarshal(b []byte) error { func (m *PendingChannelsResponse_WaitingCloseChannel) XXX_Unmarshal(b []byte) error {
@ -5837,7 +5926,7 @@ func (m *PendingChannelsResponse_Commitments) Reset() { *m = PendingChan
func (m *PendingChannelsResponse_Commitments) String() string { return proto.CompactTextString(m) } func (m *PendingChannelsResponse_Commitments) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsResponse_Commitments) ProtoMessage() {} func (*PendingChannelsResponse_Commitments) ProtoMessage() {}
func (*PendingChannelsResponse_Commitments) Descriptor() ([]byte, []int) { func (*PendingChannelsResponse_Commitments) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{68, 3} return fileDescriptor_77a6da22d6a3feb1, []int{70, 3}
} }
func (m *PendingChannelsResponse_Commitments) XXX_Unmarshal(b []byte) error { func (m *PendingChannelsResponse_Commitments) XXX_Unmarshal(b []byte) error {
@ -5914,7 +6003,7 @@ func (m *PendingChannelsResponse_ClosedChannel) Reset() { *m = PendingCh
func (m *PendingChannelsResponse_ClosedChannel) String() string { return proto.CompactTextString(m) } func (m *PendingChannelsResponse_ClosedChannel) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsResponse_ClosedChannel) ProtoMessage() {} func (*PendingChannelsResponse_ClosedChannel) ProtoMessage() {}
func (*PendingChannelsResponse_ClosedChannel) Descriptor() ([]byte, []int) { func (*PendingChannelsResponse_ClosedChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{68, 4} return fileDescriptor_77a6da22d6a3feb1, []int{70, 4}
} }
func (m *PendingChannelsResponse_ClosedChannel) XXX_Unmarshal(b []byte) error { func (m *PendingChannelsResponse_ClosedChannel) XXX_Unmarshal(b []byte) error {
@ -5980,7 +6069,7 @@ func (m *PendingChannelsResponse_ForceClosedChannel) String() string {
} }
func (*PendingChannelsResponse_ForceClosedChannel) ProtoMessage() {} func (*PendingChannelsResponse_ForceClosedChannel) ProtoMessage() {}
func (*PendingChannelsResponse_ForceClosedChannel) Descriptor() ([]byte, []int) { func (*PendingChannelsResponse_ForceClosedChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{68, 5} return fileDescriptor_77a6da22d6a3feb1, []int{70, 5}
} }
func (m *PendingChannelsResponse_ForceClosedChannel) XXX_Unmarshal(b []byte) error { func (m *PendingChannelsResponse_ForceClosedChannel) XXX_Unmarshal(b []byte) error {
@ -6067,7 +6156,7 @@ func (m *ChannelEventSubscription) Reset() { *m = ChannelEventSubscripti
func (m *ChannelEventSubscription) String() string { return proto.CompactTextString(m) } func (m *ChannelEventSubscription) String() string { return proto.CompactTextString(m) }
func (*ChannelEventSubscription) ProtoMessage() {} func (*ChannelEventSubscription) ProtoMessage() {}
func (*ChannelEventSubscription) Descriptor() ([]byte, []int) { func (*ChannelEventSubscription) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{69} return fileDescriptor_77a6da22d6a3feb1, []int{71}
} }
func (m *ChannelEventSubscription) XXX_Unmarshal(b []byte) error { func (m *ChannelEventSubscription) XXX_Unmarshal(b []byte) error {
@ -6106,7 +6195,7 @@ func (m *ChannelEventUpdate) Reset() { *m = ChannelEventUpdate{} }
func (m *ChannelEventUpdate) String() string { return proto.CompactTextString(m) } func (m *ChannelEventUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelEventUpdate) ProtoMessage() {} func (*ChannelEventUpdate) ProtoMessage() {}
func (*ChannelEventUpdate) Descriptor() ([]byte, []int) { func (*ChannelEventUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{70} return fileDescriptor_77a6da22d6a3feb1, []int{72}
} }
func (m *ChannelEventUpdate) XXX_Unmarshal(b []byte) error { func (m *ChannelEventUpdate) XXX_Unmarshal(b []byte) error {
@ -6231,7 +6320,7 @@ func (m *WalletBalanceRequest) Reset() { *m = WalletBalanceRequest{} }
func (m *WalletBalanceRequest) String() string { return proto.CompactTextString(m) } func (m *WalletBalanceRequest) String() string { return proto.CompactTextString(m) }
func (*WalletBalanceRequest) ProtoMessage() {} func (*WalletBalanceRequest) ProtoMessage() {}
func (*WalletBalanceRequest) Descriptor() ([]byte, []int) { func (*WalletBalanceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{71} return fileDescriptor_77a6da22d6a3feb1, []int{73}
} }
func (m *WalletBalanceRequest) XXX_Unmarshal(b []byte) error { func (m *WalletBalanceRequest) XXX_Unmarshal(b []byte) error {
@ -6268,7 +6357,7 @@ func (m *WalletBalanceResponse) Reset() { *m = WalletBalanceResponse{} }
func (m *WalletBalanceResponse) String() string { return proto.CompactTextString(m) } func (m *WalletBalanceResponse) String() string { return proto.CompactTextString(m) }
func (*WalletBalanceResponse) ProtoMessage() {} func (*WalletBalanceResponse) ProtoMessage() {}
func (*WalletBalanceResponse) Descriptor() ([]byte, []int) { func (*WalletBalanceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{72} return fileDescriptor_77a6da22d6a3feb1, []int{74}
} }
func (m *WalletBalanceResponse) XXX_Unmarshal(b []byte) error { func (m *WalletBalanceResponse) XXX_Unmarshal(b []byte) error {
@ -6320,7 +6409,7 @@ func (m *ChannelBalanceRequest) Reset() { *m = ChannelBalanceRequest{} }
func (m *ChannelBalanceRequest) String() string { return proto.CompactTextString(m) } func (m *ChannelBalanceRequest) String() string { return proto.CompactTextString(m) }
func (*ChannelBalanceRequest) ProtoMessage() {} func (*ChannelBalanceRequest) ProtoMessage() {}
func (*ChannelBalanceRequest) Descriptor() ([]byte, []int) { func (*ChannelBalanceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{73} return fileDescriptor_77a6da22d6a3feb1, []int{75}
} }
func (m *ChannelBalanceRequest) XXX_Unmarshal(b []byte) error { func (m *ChannelBalanceRequest) XXX_Unmarshal(b []byte) error {
@ -6355,7 +6444,7 @@ func (m *ChannelBalanceResponse) Reset() { *m = ChannelBalanceResponse{}
func (m *ChannelBalanceResponse) String() string { return proto.CompactTextString(m) } func (m *ChannelBalanceResponse) String() string { return proto.CompactTextString(m) }
func (*ChannelBalanceResponse) ProtoMessage() {} func (*ChannelBalanceResponse) ProtoMessage() {}
func (*ChannelBalanceResponse) Descriptor() ([]byte, []int) { func (*ChannelBalanceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{74} return fileDescriptor_77a6da22d6a3feb1, []int{76}
} }
func (m *ChannelBalanceResponse) XXX_Unmarshal(b []byte) error { func (m *ChannelBalanceResponse) XXX_Unmarshal(b []byte) error {
@ -6473,7 +6562,7 @@ func (m *QueryRoutesRequest) Reset() { *m = QueryRoutesRequest{} }
func (m *QueryRoutesRequest) String() string { return proto.CompactTextString(m) } func (m *QueryRoutesRequest) String() string { return proto.CompactTextString(m) }
func (*QueryRoutesRequest) ProtoMessage() {} func (*QueryRoutesRequest) ProtoMessage() {}
func (*QueryRoutesRequest) Descriptor() ([]byte, []int) { func (*QueryRoutesRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{75} return fileDescriptor_77a6da22d6a3feb1, []int{77}
} }
func (m *QueryRoutesRequest) XXX_Unmarshal(b []byte) error { func (m *QueryRoutesRequest) XXX_Unmarshal(b []byte) error {
@ -6625,7 +6714,7 @@ func (m *NodePair) Reset() { *m = NodePair{} }
func (m *NodePair) String() string { return proto.CompactTextString(m) } func (m *NodePair) String() string { return proto.CompactTextString(m) }
func (*NodePair) ProtoMessage() {} func (*NodePair) ProtoMessage() {}
func (*NodePair) Descriptor() ([]byte, []int) { func (*NodePair) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{76} return fileDescriptor_77a6da22d6a3feb1, []int{78}
} }
func (m *NodePair) XXX_Unmarshal(b []byte) error { func (m *NodePair) XXX_Unmarshal(b []byte) error {
@ -6678,7 +6767,7 @@ func (m *EdgeLocator) Reset() { *m = EdgeLocator{} }
func (m *EdgeLocator) String() string { return proto.CompactTextString(m) } func (m *EdgeLocator) String() string { return proto.CompactTextString(m) }
func (*EdgeLocator) ProtoMessage() {} func (*EdgeLocator) ProtoMessage() {}
func (*EdgeLocator) Descriptor() ([]byte, []int) { func (*EdgeLocator) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{77} return fileDescriptor_77a6da22d6a3feb1, []int{79}
} }
func (m *EdgeLocator) XXX_Unmarshal(b []byte) error { func (m *EdgeLocator) XXX_Unmarshal(b []byte) error {
@ -6731,7 +6820,7 @@ func (m *QueryRoutesResponse) Reset() { *m = QueryRoutesResponse{} }
func (m *QueryRoutesResponse) String() string { return proto.CompactTextString(m) } func (m *QueryRoutesResponse) String() string { return proto.CompactTextString(m) }
func (*QueryRoutesResponse) ProtoMessage() {} func (*QueryRoutesResponse) ProtoMessage() {}
func (*QueryRoutesResponse) Descriptor() ([]byte, []int) { func (*QueryRoutesResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{78} return fileDescriptor_77a6da22d6a3feb1, []int{80}
} }
func (m *QueryRoutesResponse) XXX_Unmarshal(b []byte) error { func (m *QueryRoutesResponse) XXX_Unmarshal(b []byte) error {
@ -6807,7 +6896,7 @@ func (m *Hop) Reset() { *m = Hop{} }
func (m *Hop) String() string { return proto.CompactTextString(m) } func (m *Hop) String() string { return proto.CompactTextString(m) }
func (*Hop) ProtoMessage() {} func (*Hop) ProtoMessage() {}
func (*Hop) Descriptor() ([]byte, []int) { func (*Hop) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{79} return fileDescriptor_77a6da22d6a3feb1, []int{81}
} }
func (m *Hop) XXX_Unmarshal(b []byte) error { func (m *Hop) XXX_Unmarshal(b []byte) error {
@ -6929,7 +7018,7 @@ func (m *MPPRecord) Reset() { *m = MPPRecord{} }
func (m *MPPRecord) String() string { return proto.CompactTextString(m) } func (m *MPPRecord) String() string { return proto.CompactTextString(m) }
func (*MPPRecord) ProtoMessage() {} func (*MPPRecord) ProtoMessage() {}
func (*MPPRecord) Descriptor() ([]byte, []int) { func (*MPPRecord) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{80} return fileDescriptor_77a6da22d6a3feb1, []int{82}
} }
func (m *MPPRecord) XXX_Unmarshal(b []byte) error { func (m *MPPRecord) XXX_Unmarshal(b []byte) error {
@ -7007,7 +7096,7 @@ func (m *Route) Reset() { *m = Route{} }
func (m *Route) String() string { return proto.CompactTextString(m) } func (m *Route) String() string { return proto.CompactTextString(m) }
func (*Route) ProtoMessage() {} func (*Route) ProtoMessage() {}
func (*Route) Descriptor() ([]byte, []int) { func (*Route) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{81} return fileDescriptor_77a6da22d6a3feb1, []int{83}
} }
func (m *Route) XXX_Unmarshal(b []byte) error { func (m *Route) XXX_Unmarshal(b []byte) error {
@ -7086,7 +7175,7 @@ func (m *NodeInfoRequest) Reset() { *m = NodeInfoRequest{} }
func (m *NodeInfoRequest) String() string { return proto.CompactTextString(m) } func (m *NodeInfoRequest) String() string { return proto.CompactTextString(m) }
func (*NodeInfoRequest) ProtoMessage() {} func (*NodeInfoRequest) ProtoMessage() {}
func (*NodeInfoRequest) Descriptor() ([]byte, []int) { func (*NodeInfoRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{82} return fileDescriptor_77a6da22d6a3feb1, []int{84}
} }
func (m *NodeInfoRequest) XXX_Unmarshal(b []byte) error { func (m *NodeInfoRequest) XXX_Unmarshal(b []byte) error {
@ -7143,7 +7232,7 @@ func (m *NodeInfo) Reset() { *m = NodeInfo{} }
func (m *NodeInfo) String() string { return proto.CompactTextString(m) } func (m *NodeInfo) String() string { return proto.CompactTextString(m) }
func (*NodeInfo) ProtoMessage() {} func (*NodeInfo) ProtoMessage() {}
func (*NodeInfo) Descriptor() ([]byte, []int) { func (*NodeInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{83} return fileDescriptor_77a6da22d6a3feb1, []int{85}
} }
func (m *NodeInfo) XXX_Unmarshal(b []byte) error { func (m *NodeInfo) XXX_Unmarshal(b []byte) error {
@ -7213,7 +7302,7 @@ func (m *LightningNode) Reset() { *m = LightningNode{} }
func (m *LightningNode) String() string { return proto.CompactTextString(m) } func (m *LightningNode) String() string { return proto.CompactTextString(m) }
func (*LightningNode) ProtoMessage() {} func (*LightningNode) ProtoMessage() {}
func (*LightningNode) Descriptor() ([]byte, []int) { func (*LightningNode) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{84} return fileDescriptor_77a6da22d6a3feb1, []int{86}
} }
func (m *LightningNode) XXX_Unmarshal(b []byte) error { func (m *LightningNode) XXX_Unmarshal(b []byte) error {
@ -7288,7 +7377,7 @@ func (m *NodeAddress) Reset() { *m = NodeAddress{} }
func (m *NodeAddress) String() string { return proto.CompactTextString(m) } func (m *NodeAddress) String() string { return proto.CompactTextString(m) }
func (*NodeAddress) ProtoMessage() {} func (*NodeAddress) ProtoMessage() {}
func (*NodeAddress) Descriptor() ([]byte, []int) { func (*NodeAddress) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{85} return fileDescriptor_77a6da22d6a3feb1, []int{87}
} }
func (m *NodeAddress) XXX_Unmarshal(b []byte) error { func (m *NodeAddress) XXX_Unmarshal(b []byte) error {
@ -7340,7 +7429,7 @@ func (m *RoutingPolicy) Reset() { *m = RoutingPolicy{} }
func (m *RoutingPolicy) String() string { return proto.CompactTextString(m) } func (m *RoutingPolicy) String() string { return proto.CompactTextString(m) }
func (*RoutingPolicy) ProtoMessage() {} func (*RoutingPolicy) ProtoMessage() {}
func (*RoutingPolicy) Descriptor() ([]byte, []int) { func (*RoutingPolicy) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{86} return fileDescriptor_77a6da22d6a3feb1, []int{88}
} }
func (m *RoutingPolicy) XXX_Unmarshal(b []byte) error { func (m *RoutingPolicy) XXX_Unmarshal(b []byte) error {
@ -7438,7 +7527,7 @@ func (m *ChannelEdge) Reset() { *m = ChannelEdge{} }
func (m *ChannelEdge) String() string { return proto.CompactTextString(m) } func (m *ChannelEdge) String() string { return proto.CompactTextString(m) }
func (*ChannelEdge) ProtoMessage() {} func (*ChannelEdge) ProtoMessage() {}
func (*ChannelEdge) Descriptor() ([]byte, []int) { func (*ChannelEdge) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{87} return fileDescriptor_77a6da22d6a3feb1, []int{89}
} }
func (m *ChannelEdge) XXX_Unmarshal(b []byte) error { func (m *ChannelEdge) XXX_Unmarshal(b []byte) error {
@ -7531,7 +7620,7 @@ func (m *ChannelGraphRequest) Reset() { *m = ChannelGraphRequest{} }
func (m *ChannelGraphRequest) String() string { return proto.CompactTextString(m) } func (m *ChannelGraphRequest) String() string { return proto.CompactTextString(m) }
func (*ChannelGraphRequest) ProtoMessage() {} func (*ChannelGraphRequest) ProtoMessage() {}
func (*ChannelGraphRequest) Descriptor() ([]byte, []int) { func (*ChannelGraphRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{88} return fileDescriptor_77a6da22d6a3feb1, []int{90}
} }
func (m *ChannelGraphRequest) XXX_Unmarshal(b []byte) error { func (m *ChannelGraphRequest) XXX_Unmarshal(b []byte) error {
@ -7574,7 +7663,7 @@ func (m *ChannelGraph) Reset() { *m = ChannelGraph{} }
func (m *ChannelGraph) String() string { return proto.CompactTextString(m) } func (m *ChannelGraph) String() string { return proto.CompactTextString(m) }
func (*ChannelGraph) ProtoMessage() {} func (*ChannelGraph) ProtoMessage() {}
func (*ChannelGraph) Descriptor() ([]byte, []int) { func (*ChannelGraph) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{89} return fileDescriptor_77a6da22d6a3feb1, []int{91}
} }
func (m *ChannelGraph) XXX_Unmarshal(b []byte) error { func (m *ChannelGraph) XXX_Unmarshal(b []byte) error {
@ -7621,7 +7710,7 @@ func (m *NodeMetricsRequest) Reset() { *m = NodeMetricsRequest{} }
func (m *NodeMetricsRequest) String() string { return proto.CompactTextString(m) } func (m *NodeMetricsRequest) String() string { return proto.CompactTextString(m) }
func (*NodeMetricsRequest) ProtoMessage() {} func (*NodeMetricsRequest) ProtoMessage() {}
func (*NodeMetricsRequest) Descriptor() ([]byte, []int) { func (*NodeMetricsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{90} return fileDescriptor_77a6da22d6a3feb1, []int{92}
} }
func (m *NodeMetricsRequest) XXX_Unmarshal(b []byte) error { func (m *NodeMetricsRequest) XXX_Unmarshal(b []byte) error {
@ -7666,7 +7755,7 @@ func (m *NodeMetricsResponse) Reset() { *m = NodeMetricsResponse{} }
func (m *NodeMetricsResponse) String() string { return proto.CompactTextString(m) } func (m *NodeMetricsResponse) String() string { return proto.CompactTextString(m) }
func (*NodeMetricsResponse) ProtoMessage() {} func (*NodeMetricsResponse) ProtoMessage() {}
func (*NodeMetricsResponse) Descriptor() ([]byte, []int) { func (*NodeMetricsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{91} return fileDescriptor_77a6da22d6a3feb1, []int{93}
} }
func (m *NodeMetricsResponse) XXX_Unmarshal(b []byte) error { func (m *NodeMetricsResponse) XXX_Unmarshal(b []byte) error {
@ -7708,7 +7797,7 @@ func (m *FloatMetric) Reset() { *m = FloatMetric{} }
func (m *FloatMetric) String() string { return proto.CompactTextString(m) } func (m *FloatMetric) String() string { return proto.CompactTextString(m) }
func (*FloatMetric) ProtoMessage() {} func (*FloatMetric) ProtoMessage() {}
func (*FloatMetric) Descriptor() ([]byte, []int) { func (*FloatMetric) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{92} return fileDescriptor_77a6da22d6a3feb1, []int{94}
} }
func (m *FloatMetric) XXX_Unmarshal(b []byte) error { func (m *FloatMetric) XXX_Unmarshal(b []byte) error {
@ -7758,7 +7847,7 @@ func (m *ChanInfoRequest) Reset() { *m = ChanInfoRequest{} }
func (m *ChanInfoRequest) String() string { return proto.CompactTextString(m) } func (m *ChanInfoRequest) String() string { return proto.CompactTextString(m) }
func (*ChanInfoRequest) ProtoMessage() {} func (*ChanInfoRequest) ProtoMessage() {}
func (*ChanInfoRequest) Descriptor() ([]byte, []int) { func (*ChanInfoRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{93} return fileDescriptor_77a6da22d6a3feb1, []int{95}
} }
func (m *ChanInfoRequest) XXX_Unmarshal(b []byte) error { func (m *ChanInfoRequest) XXX_Unmarshal(b []byte) error {
@ -7796,7 +7885,7 @@ func (m *NetworkInfoRequest) Reset() { *m = NetworkInfoRequest{} }
func (m *NetworkInfoRequest) String() string { return proto.CompactTextString(m) } func (m *NetworkInfoRequest) String() string { return proto.CompactTextString(m) }
func (*NetworkInfoRequest) ProtoMessage() {} func (*NetworkInfoRequest) ProtoMessage() {}
func (*NetworkInfoRequest) Descriptor() ([]byte, []int) { func (*NetworkInfoRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{94} return fileDescriptor_77a6da22d6a3feb1, []int{96}
} }
func (m *NetworkInfoRequest) XXX_Unmarshal(b []byte) error { func (m *NetworkInfoRequest) XXX_Unmarshal(b []byte) error {
@ -7839,7 +7928,7 @@ func (m *NetworkInfo) Reset() { *m = NetworkInfo{} }
func (m *NetworkInfo) String() string { return proto.CompactTextString(m) } func (m *NetworkInfo) String() string { return proto.CompactTextString(m) }
func (*NetworkInfo) ProtoMessage() {} func (*NetworkInfo) ProtoMessage() {}
func (*NetworkInfo) Descriptor() ([]byte, []int) { func (*NetworkInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{95} return fileDescriptor_77a6da22d6a3feb1, []int{97}
} }
func (m *NetworkInfo) XXX_Unmarshal(b []byte) error { func (m *NetworkInfo) XXX_Unmarshal(b []byte) error {
@ -7947,7 +8036,7 @@ func (m *StopRequest) Reset() { *m = StopRequest{} }
func (m *StopRequest) String() string { return proto.CompactTextString(m) } func (m *StopRequest) String() string { return proto.CompactTextString(m) }
func (*StopRequest) ProtoMessage() {} func (*StopRequest) ProtoMessage() {}
func (*StopRequest) Descriptor() ([]byte, []int) { func (*StopRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{96} return fileDescriptor_77a6da22d6a3feb1, []int{98}
} }
func (m *StopRequest) XXX_Unmarshal(b []byte) error { func (m *StopRequest) XXX_Unmarshal(b []byte) error {
@ -7978,7 +8067,7 @@ func (m *StopResponse) Reset() { *m = StopResponse{} }
func (m *StopResponse) String() string { return proto.CompactTextString(m) } func (m *StopResponse) String() string { return proto.CompactTextString(m) }
func (*StopResponse) ProtoMessage() {} func (*StopResponse) ProtoMessage() {}
func (*StopResponse) Descriptor() ([]byte, []int) { func (*StopResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{97} return fileDescriptor_77a6da22d6a3feb1, []int{99}
} }
func (m *StopResponse) XXX_Unmarshal(b []byte) error { func (m *StopResponse) XXX_Unmarshal(b []byte) error {
@ -8009,7 +8098,7 @@ func (m *GraphTopologySubscription) Reset() { *m = GraphTopologySubscrip
func (m *GraphTopologySubscription) String() string { return proto.CompactTextString(m) } func (m *GraphTopologySubscription) String() string { return proto.CompactTextString(m) }
func (*GraphTopologySubscription) ProtoMessage() {} func (*GraphTopologySubscription) ProtoMessage() {}
func (*GraphTopologySubscription) Descriptor() ([]byte, []int) { func (*GraphTopologySubscription) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{98} return fileDescriptor_77a6da22d6a3feb1, []int{100}
} }
func (m *GraphTopologySubscription) XXX_Unmarshal(b []byte) error { func (m *GraphTopologySubscription) XXX_Unmarshal(b []byte) error {
@ -8043,7 +8132,7 @@ func (m *GraphTopologyUpdate) Reset() { *m = GraphTopologyUpdate{} }
func (m *GraphTopologyUpdate) String() string { return proto.CompactTextString(m) } func (m *GraphTopologyUpdate) String() string { return proto.CompactTextString(m) }
func (*GraphTopologyUpdate) ProtoMessage() {} func (*GraphTopologyUpdate) ProtoMessage() {}
func (*GraphTopologyUpdate) Descriptor() ([]byte, []int) { func (*GraphTopologyUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{99} return fileDescriptor_77a6da22d6a3feb1, []int{101}
} }
func (m *GraphTopologyUpdate) XXX_Unmarshal(b []byte) error { func (m *GraphTopologyUpdate) XXX_Unmarshal(b []byte) error {
@ -8100,7 +8189,7 @@ func (m *NodeUpdate) Reset() { *m = NodeUpdate{} }
func (m *NodeUpdate) String() string { return proto.CompactTextString(m) } func (m *NodeUpdate) String() string { return proto.CompactTextString(m) }
func (*NodeUpdate) ProtoMessage() {} func (*NodeUpdate) ProtoMessage() {}
func (*NodeUpdate) Descriptor() ([]byte, []int) { func (*NodeUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{100} return fileDescriptor_77a6da22d6a3feb1, []int{102}
} }
func (m *NodeUpdate) XXX_Unmarshal(b []byte) error { func (m *NodeUpdate) XXX_Unmarshal(b []byte) error {
@ -8176,7 +8265,7 @@ func (m *ChannelEdgeUpdate) Reset() { *m = ChannelEdgeUpdate{} }
func (m *ChannelEdgeUpdate) String() string { return proto.CompactTextString(m) } func (m *ChannelEdgeUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelEdgeUpdate) ProtoMessage() {} func (*ChannelEdgeUpdate) ProtoMessage() {}
func (*ChannelEdgeUpdate) Descriptor() ([]byte, []int) { func (*ChannelEdgeUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{101} return fileDescriptor_77a6da22d6a3feb1, []int{103}
} }
func (m *ChannelEdgeUpdate) XXX_Unmarshal(b []byte) error { func (m *ChannelEdgeUpdate) XXX_Unmarshal(b []byte) error {
@ -8257,7 +8346,7 @@ func (m *ClosedChannelUpdate) Reset() { *m = ClosedChannelUpdate{} }
func (m *ClosedChannelUpdate) String() string { return proto.CompactTextString(m) } func (m *ClosedChannelUpdate) String() string { return proto.CompactTextString(m) }
func (*ClosedChannelUpdate) ProtoMessage() {} func (*ClosedChannelUpdate) ProtoMessage() {}
func (*ClosedChannelUpdate) Descriptor() ([]byte, []int) { func (*ClosedChannelUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{102} return fileDescriptor_77a6da22d6a3feb1, []int{104}
} }
func (m *ClosedChannelUpdate) XXX_Unmarshal(b []byte) error { func (m *ClosedChannelUpdate) XXX_Unmarshal(b []byte) error {
@ -8328,7 +8417,7 @@ func (m *HopHint) Reset() { *m = HopHint{} }
func (m *HopHint) String() string { return proto.CompactTextString(m) } func (m *HopHint) String() string { return proto.CompactTextString(m) }
func (*HopHint) ProtoMessage() {} func (*HopHint) ProtoMessage() {}
func (*HopHint) Descriptor() ([]byte, []int) { func (*HopHint) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{103} return fileDescriptor_77a6da22d6a3feb1, []int{105}
} }
func (m *HopHint) XXX_Unmarshal(b []byte) error { func (m *HopHint) XXX_Unmarshal(b []byte) error {
@ -8398,7 +8487,7 @@ func (m *RouteHint) Reset() { *m = RouteHint{} }
func (m *RouteHint) String() string { return proto.CompactTextString(m) } func (m *RouteHint) String() string { return proto.CompactTextString(m) }
func (*RouteHint) ProtoMessage() {} func (*RouteHint) ProtoMessage() {}
func (*RouteHint) Descriptor() ([]byte, []int) { func (*RouteHint) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{104} return fileDescriptor_77a6da22d6a3feb1, []int{106}
} }
func (m *RouteHint) XXX_Unmarshal(b []byte) error { func (m *RouteHint) XXX_Unmarshal(b []byte) error {
@ -8531,7 +8620,7 @@ func (m *Invoice) Reset() { *m = Invoice{} }
func (m *Invoice) String() string { return proto.CompactTextString(m) } func (m *Invoice) String() string { return proto.CompactTextString(m) }
func (*Invoice) ProtoMessage() {} func (*Invoice) ProtoMessage() {}
func (*Invoice) Descriptor() ([]byte, []int) { func (*Invoice) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{105} return fileDescriptor_77a6da22d6a3feb1, []int{107}
} }
func (m *Invoice) XXX_Unmarshal(b []byte) error { func (m *Invoice) XXX_Unmarshal(b []byte) error {
@ -8753,7 +8842,7 @@ func (m *InvoiceHTLC) Reset() { *m = InvoiceHTLC{} }
func (m *InvoiceHTLC) String() string { return proto.CompactTextString(m) } func (m *InvoiceHTLC) String() string { return proto.CompactTextString(m) }
func (*InvoiceHTLC) ProtoMessage() {} func (*InvoiceHTLC) ProtoMessage() {}
func (*InvoiceHTLC) Descriptor() ([]byte, []int) { func (*InvoiceHTLC) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{106} return fileDescriptor_77a6da22d6a3feb1, []int{108}
} }
func (m *InvoiceHTLC) XXX_Unmarshal(b []byte) error { func (m *InvoiceHTLC) XXX_Unmarshal(b []byte) error {
@ -8866,7 +8955,7 @@ func (m *AddInvoiceResponse) Reset() { *m = AddInvoiceResponse{} }
func (m *AddInvoiceResponse) String() string { return proto.CompactTextString(m) } func (m *AddInvoiceResponse) String() string { return proto.CompactTextString(m) }
func (*AddInvoiceResponse) ProtoMessage() {} func (*AddInvoiceResponse) ProtoMessage() {}
func (*AddInvoiceResponse) Descriptor() ([]byte, []int) { func (*AddInvoiceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{107} return fileDescriptor_77a6da22d6a3feb1, []int{109}
} }
func (m *AddInvoiceResponse) XXX_Unmarshal(b []byte) error { func (m *AddInvoiceResponse) XXX_Unmarshal(b []byte) error {
@ -8928,7 +9017,7 @@ func (m *PaymentHash) Reset() { *m = PaymentHash{} }
func (m *PaymentHash) String() string { return proto.CompactTextString(m) } func (m *PaymentHash) String() string { return proto.CompactTextString(m) }
func (*PaymentHash) ProtoMessage() {} func (*PaymentHash) ProtoMessage() {}
func (*PaymentHash) Descriptor() ([]byte, []int) { func (*PaymentHash) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{108} return fileDescriptor_77a6da22d6a3feb1, []int{110}
} }
func (m *PaymentHash) XXX_Unmarshal(b []byte) error { func (m *PaymentHash) XXX_Unmarshal(b []byte) error {
@ -8988,7 +9077,7 @@ func (m *ListInvoiceRequest) Reset() { *m = ListInvoiceRequest{} }
func (m *ListInvoiceRequest) String() string { return proto.CompactTextString(m) } func (m *ListInvoiceRequest) String() string { return proto.CompactTextString(m) }
func (*ListInvoiceRequest) ProtoMessage() {} func (*ListInvoiceRequest) ProtoMessage() {}
func (*ListInvoiceRequest) Descriptor() ([]byte, []int) { func (*ListInvoiceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{109} return fileDescriptor_77a6da22d6a3feb1, []int{111}
} }
func (m *ListInvoiceRequest) XXX_Unmarshal(b []byte) error { func (m *ListInvoiceRequest) XXX_Unmarshal(b []byte) error {
@ -9059,7 +9148,7 @@ func (m *ListInvoiceResponse) Reset() { *m = ListInvoiceResponse{} }
func (m *ListInvoiceResponse) String() string { return proto.CompactTextString(m) } func (m *ListInvoiceResponse) String() string { return proto.CompactTextString(m) }
func (*ListInvoiceResponse) ProtoMessage() {} func (*ListInvoiceResponse) ProtoMessage() {}
func (*ListInvoiceResponse) Descriptor() ([]byte, []int) { func (*ListInvoiceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{110} return fileDescriptor_77a6da22d6a3feb1, []int{112}
} }
func (m *ListInvoiceResponse) XXX_Unmarshal(b []byte) error { func (m *ListInvoiceResponse) XXX_Unmarshal(b []byte) error {
@ -9123,7 +9212,7 @@ func (m *InvoiceSubscription) Reset() { *m = InvoiceSubscription{} }
func (m *InvoiceSubscription) String() string { return proto.CompactTextString(m) } func (m *InvoiceSubscription) String() string { return proto.CompactTextString(m) }
func (*InvoiceSubscription) ProtoMessage() {} func (*InvoiceSubscription) ProtoMessage() {}
func (*InvoiceSubscription) Descriptor() ([]byte, []int) { func (*InvoiceSubscription) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{111} return fileDescriptor_77a6da22d6a3feb1, []int{113}
} }
func (m *InvoiceSubscription) XXX_Unmarshal(b []byte) error { func (m *InvoiceSubscription) XXX_Unmarshal(b []byte) error {
@ -9200,7 +9289,7 @@ func (m *Payment) Reset() { *m = Payment{} }
func (m *Payment) String() string { return proto.CompactTextString(m) } func (m *Payment) String() string { return proto.CompactTextString(m) }
func (*Payment) ProtoMessage() {} func (*Payment) ProtoMessage() {}
func (*Payment) Descriptor() ([]byte, []int) { func (*Payment) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{112} return fileDescriptor_77a6da22d6a3feb1, []int{114}
} }
func (m *Payment) XXX_Unmarshal(b []byte) error { func (m *Payment) XXX_Unmarshal(b []byte) error {
@ -9353,7 +9442,7 @@ func (m *HTLCAttempt) Reset() { *m = HTLCAttempt{} }
func (m *HTLCAttempt) String() string { return proto.CompactTextString(m) } func (m *HTLCAttempt) String() string { return proto.CompactTextString(m) }
func (*HTLCAttempt) ProtoMessage() {} func (*HTLCAttempt) ProtoMessage() {}
func (*HTLCAttempt) Descriptor() ([]byte, []int) { func (*HTLCAttempt) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{113} return fileDescriptor_77a6da22d6a3feb1, []int{115}
} }
func (m *HTLCAttempt) XXX_Unmarshal(b []byte) error { func (m *HTLCAttempt) XXX_Unmarshal(b []byte) error {
@ -9446,7 +9535,7 @@ func (m *ListPaymentsRequest) Reset() { *m = ListPaymentsRequest{} }
func (m *ListPaymentsRequest) String() string { return proto.CompactTextString(m) } func (m *ListPaymentsRequest) String() string { return proto.CompactTextString(m) }
func (*ListPaymentsRequest) ProtoMessage() {} func (*ListPaymentsRequest) ProtoMessage() {}
func (*ListPaymentsRequest) Descriptor() ([]byte, []int) { func (*ListPaymentsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{114} return fileDescriptor_77a6da22d6a3feb1, []int{116}
} }
func (m *ListPaymentsRequest) XXX_Unmarshal(b []byte) error { func (m *ListPaymentsRequest) XXX_Unmarshal(b []byte) error {
@ -9515,7 +9604,7 @@ func (m *ListPaymentsResponse) Reset() { *m = ListPaymentsResponse{} }
func (m *ListPaymentsResponse) String() string { return proto.CompactTextString(m) } func (m *ListPaymentsResponse) String() string { return proto.CompactTextString(m) }
func (*ListPaymentsResponse) ProtoMessage() {} func (*ListPaymentsResponse) ProtoMessage() {}
func (*ListPaymentsResponse) Descriptor() ([]byte, []int) { func (*ListPaymentsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{115} return fileDescriptor_77a6da22d6a3feb1, []int{117}
} }
func (m *ListPaymentsResponse) XXX_Unmarshal(b []byte) error { func (m *ListPaymentsResponse) XXX_Unmarshal(b []byte) error {
@ -9567,7 +9656,7 @@ func (m *DeleteAllPaymentsRequest) Reset() { *m = DeleteAllPaymentsReque
func (m *DeleteAllPaymentsRequest) String() string { return proto.CompactTextString(m) } func (m *DeleteAllPaymentsRequest) String() string { return proto.CompactTextString(m) }
func (*DeleteAllPaymentsRequest) ProtoMessage() {} func (*DeleteAllPaymentsRequest) ProtoMessage() {}
func (*DeleteAllPaymentsRequest) Descriptor() ([]byte, []int) { func (*DeleteAllPaymentsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{116} return fileDescriptor_77a6da22d6a3feb1, []int{118}
} }
func (m *DeleteAllPaymentsRequest) XXX_Unmarshal(b []byte) error { func (m *DeleteAllPaymentsRequest) XXX_Unmarshal(b []byte) error {
@ -9598,7 +9687,7 @@ func (m *DeleteAllPaymentsResponse) Reset() { *m = DeleteAllPaymentsResp
func (m *DeleteAllPaymentsResponse) String() string { return proto.CompactTextString(m) } func (m *DeleteAllPaymentsResponse) String() string { return proto.CompactTextString(m) }
func (*DeleteAllPaymentsResponse) ProtoMessage() {} func (*DeleteAllPaymentsResponse) ProtoMessage() {}
func (*DeleteAllPaymentsResponse) Descriptor() ([]byte, []int) { func (*DeleteAllPaymentsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{117} return fileDescriptor_77a6da22d6a3feb1, []int{119}
} }
func (m *DeleteAllPaymentsResponse) XXX_Unmarshal(b []byte) error { func (m *DeleteAllPaymentsResponse) XXX_Unmarshal(b []byte) error {
@ -9630,7 +9719,7 @@ func (m *AbandonChannelRequest) Reset() { *m = AbandonChannelRequest{} }
func (m *AbandonChannelRequest) String() string { return proto.CompactTextString(m) } func (m *AbandonChannelRequest) String() string { return proto.CompactTextString(m) }
func (*AbandonChannelRequest) ProtoMessage() {} func (*AbandonChannelRequest) ProtoMessage() {}
func (*AbandonChannelRequest) Descriptor() ([]byte, []int) { func (*AbandonChannelRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{118} return fileDescriptor_77a6da22d6a3feb1, []int{120}
} }
func (m *AbandonChannelRequest) XXX_Unmarshal(b []byte) error { func (m *AbandonChannelRequest) XXX_Unmarshal(b []byte) error {
@ -9668,7 +9757,7 @@ func (m *AbandonChannelResponse) Reset() { *m = AbandonChannelResponse{}
func (m *AbandonChannelResponse) String() string { return proto.CompactTextString(m) } func (m *AbandonChannelResponse) String() string { return proto.CompactTextString(m) }
func (*AbandonChannelResponse) ProtoMessage() {} func (*AbandonChannelResponse) ProtoMessage() {}
func (*AbandonChannelResponse) Descriptor() ([]byte, []int) { func (*AbandonChannelResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{119} return fileDescriptor_77a6da22d6a3feb1, []int{121}
} }
func (m *AbandonChannelResponse) XXX_Unmarshal(b []byte) error { func (m *AbandonChannelResponse) XXX_Unmarshal(b []byte) error {
@ -9701,7 +9790,7 @@ func (m *DebugLevelRequest) Reset() { *m = DebugLevelRequest{} }
func (m *DebugLevelRequest) String() string { return proto.CompactTextString(m) } func (m *DebugLevelRequest) String() string { return proto.CompactTextString(m) }
func (*DebugLevelRequest) ProtoMessage() {} func (*DebugLevelRequest) ProtoMessage() {}
func (*DebugLevelRequest) Descriptor() ([]byte, []int) { func (*DebugLevelRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{120} return fileDescriptor_77a6da22d6a3feb1, []int{122}
} }
func (m *DebugLevelRequest) XXX_Unmarshal(b []byte) error { func (m *DebugLevelRequest) XXX_Unmarshal(b []byte) error {
@ -9747,7 +9836,7 @@ func (m *DebugLevelResponse) Reset() { *m = DebugLevelResponse{} }
func (m *DebugLevelResponse) String() string { return proto.CompactTextString(m) } func (m *DebugLevelResponse) String() string { return proto.CompactTextString(m) }
func (*DebugLevelResponse) ProtoMessage() {} func (*DebugLevelResponse) ProtoMessage() {}
func (*DebugLevelResponse) Descriptor() ([]byte, []int) { func (*DebugLevelResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{121} return fileDescriptor_77a6da22d6a3feb1, []int{123}
} }
func (m *DebugLevelResponse) XXX_Unmarshal(b []byte) error { func (m *DebugLevelResponse) XXX_Unmarshal(b []byte) error {
@ -9787,7 +9876,7 @@ func (m *PayReqString) Reset() { *m = PayReqString{} }
func (m *PayReqString) String() string { return proto.CompactTextString(m) } func (m *PayReqString) String() string { return proto.CompactTextString(m) }
func (*PayReqString) ProtoMessage() {} func (*PayReqString) ProtoMessage() {}
func (*PayReqString) Descriptor() ([]byte, []int) { func (*PayReqString) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{122} return fileDescriptor_77a6da22d6a3feb1, []int{124}
} }
func (m *PayReqString) XXX_Unmarshal(b []byte) error { func (m *PayReqString) XXX_Unmarshal(b []byte) error {
@ -9838,7 +9927,7 @@ func (m *PayReq) Reset() { *m = PayReq{} }
func (m *PayReq) String() string { return proto.CompactTextString(m) } func (m *PayReq) String() string { return proto.CompactTextString(m) }
func (*PayReq) ProtoMessage() {} func (*PayReq) ProtoMessage() {}
func (*PayReq) Descriptor() ([]byte, []int) { func (*PayReq) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{123} return fileDescriptor_77a6da22d6a3feb1, []int{125}
} }
func (m *PayReq) XXX_Unmarshal(b []byte) error { func (m *PayReq) XXX_Unmarshal(b []byte) error {
@ -9963,7 +10052,7 @@ func (m *Feature) Reset() { *m = Feature{} }
func (m *Feature) String() string { return proto.CompactTextString(m) } func (m *Feature) String() string { return proto.CompactTextString(m) }
func (*Feature) ProtoMessage() {} func (*Feature) ProtoMessage() {}
func (*Feature) Descriptor() ([]byte, []int) { func (*Feature) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{124} return fileDescriptor_77a6da22d6a3feb1, []int{126}
} }
func (m *Feature) XXX_Unmarshal(b []byte) error { func (m *Feature) XXX_Unmarshal(b []byte) error {
@ -10015,7 +10104,7 @@ func (m *FeeReportRequest) Reset() { *m = FeeReportRequest{} }
func (m *FeeReportRequest) String() string { return proto.CompactTextString(m) } func (m *FeeReportRequest) String() string { return proto.CompactTextString(m) }
func (*FeeReportRequest) ProtoMessage() {} func (*FeeReportRequest) ProtoMessage() {}
func (*FeeReportRequest) Descriptor() ([]byte, []int) { func (*FeeReportRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{125} return fileDescriptor_77a6da22d6a3feb1, []int{127}
} }
func (m *FeeReportRequest) XXX_Unmarshal(b []byte) error { func (m *FeeReportRequest) XXX_Unmarshal(b []byte) error {
@ -10058,7 +10147,7 @@ func (m *ChannelFeeReport) Reset() { *m = ChannelFeeReport{} }
func (m *ChannelFeeReport) String() string { return proto.CompactTextString(m) } func (m *ChannelFeeReport) String() string { return proto.CompactTextString(m) }
func (*ChannelFeeReport) ProtoMessage() {} func (*ChannelFeeReport) ProtoMessage() {}
func (*ChannelFeeReport) Descriptor() ([]byte, []int) { func (*ChannelFeeReport) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{126} return fileDescriptor_77a6da22d6a3feb1, []int{128}
} }
func (m *ChannelFeeReport) XXX_Unmarshal(b []byte) error { func (m *ChannelFeeReport) XXX_Unmarshal(b []byte) error {
@ -10136,7 +10225,7 @@ func (m *FeeReportResponse) Reset() { *m = FeeReportResponse{} }
func (m *FeeReportResponse) String() string { return proto.CompactTextString(m) } func (m *FeeReportResponse) String() string { return proto.CompactTextString(m) }
func (*FeeReportResponse) ProtoMessage() {} func (*FeeReportResponse) ProtoMessage() {}
func (*FeeReportResponse) Descriptor() ([]byte, []int) { func (*FeeReportResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{127} return fileDescriptor_77a6da22d6a3feb1, []int{129}
} }
func (m *FeeReportResponse) XXX_Unmarshal(b []byte) error { func (m *FeeReportResponse) XXX_Unmarshal(b []byte) error {
@ -10214,7 +10303,7 @@ func (m *PolicyUpdateRequest) Reset() { *m = PolicyUpdateRequest{} }
func (m *PolicyUpdateRequest) String() string { return proto.CompactTextString(m) } func (m *PolicyUpdateRequest) String() string { return proto.CompactTextString(m) }
func (*PolicyUpdateRequest) ProtoMessage() {} func (*PolicyUpdateRequest) ProtoMessage() {}
func (*PolicyUpdateRequest) Descriptor() ([]byte, []int) { func (*PolicyUpdateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{128} return fileDescriptor_77a6da22d6a3feb1, []int{130}
} }
func (m *PolicyUpdateRequest) XXX_Unmarshal(b []byte) error { func (m *PolicyUpdateRequest) XXX_Unmarshal(b []byte) error {
@ -10332,7 +10421,7 @@ func (m *PolicyUpdateResponse) Reset() { *m = PolicyUpdateResponse{} }
func (m *PolicyUpdateResponse) String() string { return proto.CompactTextString(m) } func (m *PolicyUpdateResponse) String() string { return proto.CompactTextString(m) }
func (*PolicyUpdateResponse) ProtoMessage() {} func (*PolicyUpdateResponse) ProtoMessage() {}
func (*PolicyUpdateResponse) Descriptor() ([]byte, []int) { func (*PolicyUpdateResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{129} return fileDescriptor_77a6da22d6a3feb1, []int{131}
} }
func (m *PolicyUpdateResponse) XXX_Unmarshal(b []byte) error { func (m *PolicyUpdateResponse) XXX_Unmarshal(b []byte) error {
@ -10377,7 +10466,7 @@ func (m *ForwardingHistoryRequest) Reset() { *m = ForwardingHistoryReque
func (m *ForwardingHistoryRequest) String() string { return proto.CompactTextString(m) } func (m *ForwardingHistoryRequest) String() string { return proto.CompactTextString(m) }
func (*ForwardingHistoryRequest) ProtoMessage() {} func (*ForwardingHistoryRequest) ProtoMessage() {}
func (*ForwardingHistoryRequest) Descriptor() ([]byte, []int) { func (*ForwardingHistoryRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{130} return fileDescriptor_77a6da22d6a3feb1, []int{132}
} }
func (m *ForwardingHistoryRequest) XXX_Unmarshal(b []byte) error { func (m *ForwardingHistoryRequest) XXX_Unmarshal(b []byte) error {
@ -10460,7 +10549,7 @@ func (m *ForwardingEvent) Reset() { *m = ForwardingEvent{} }
func (m *ForwardingEvent) String() string { return proto.CompactTextString(m) } func (m *ForwardingEvent) String() string { return proto.CompactTextString(m) }
func (*ForwardingEvent) ProtoMessage() {} func (*ForwardingEvent) ProtoMessage() {}
func (*ForwardingEvent) Descriptor() ([]byte, []int) { func (*ForwardingEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{131} return fileDescriptor_77a6da22d6a3feb1, []int{133}
} }
func (m *ForwardingEvent) XXX_Unmarshal(b []byte) error { func (m *ForwardingEvent) XXX_Unmarshal(b []byte) error {
@ -10560,7 +10649,7 @@ func (m *ForwardingHistoryResponse) Reset() { *m = ForwardingHistoryResp
func (m *ForwardingHistoryResponse) String() string { return proto.CompactTextString(m) } func (m *ForwardingHistoryResponse) String() string { return proto.CompactTextString(m) }
func (*ForwardingHistoryResponse) ProtoMessage() {} func (*ForwardingHistoryResponse) ProtoMessage() {}
func (*ForwardingHistoryResponse) Descriptor() ([]byte, []int) { func (*ForwardingHistoryResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{132} return fileDescriptor_77a6da22d6a3feb1, []int{134}
} }
func (m *ForwardingHistoryResponse) XXX_Unmarshal(b []byte) error { func (m *ForwardingHistoryResponse) XXX_Unmarshal(b []byte) error {
@ -10607,7 +10696,7 @@ func (m *ExportChannelBackupRequest) Reset() { *m = ExportChannelBackupR
func (m *ExportChannelBackupRequest) String() string { return proto.CompactTextString(m) } func (m *ExportChannelBackupRequest) String() string { return proto.CompactTextString(m) }
func (*ExportChannelBackupRequest) ProtoMessage() {} func (*ExportChannelBackupRequest) ProtoMessage() {}
func (*ExportChannelBackupRequest) Descriptor() ([]byte, []int) { func (*ExportChannelBackupRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{133} return fileDescriptor_77a6da22d6a3feb1, []int{135}
} }
func (m *ExportChannelBackupRequest) XXX_Unmarshal(b []byte) error { func (m *ExportChannelBackupRequest) XXX_Unmarshal(b []byte) error {
@ -10654,7 +10743,7 @@ func (m *ChannelBackup) Reset() { *m = ChannelBackup{} }
func (m *ChannelBackup) String() string { return proto.CompactTextString(m) } func (m *ChannelBackup) String() string { return proto.CompactTextString(m) }
func (*ChannelBackup) ProtoMessage() {} func (*ChannelBackup) ProtoMessage() {}
func (*ChannelBackup) Descriptor() ([]byte, []int) { func (*ChannelBackup) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{134} return fileDescriptor_77a6da22d6a3feb1, []int{136}
} }
func (m *ChannelBackup) XXX_Unmarshal(b []byte) error { func (m *ChannelBackup) XXX_Unmarshal(b []byte) error {
@ -10708,7 +10797,7 @@ func (m *MultiChanBackup) Reset() { *m = MultiChanBackup{} }
func (m *MultiChanBackup) String() string { return proto.CompactTextString(m) } func (m *MultiChanBackup) String() string { return proto.CompactTextString(m) }
func (*MultiChanBackup) ProtoMessage() {} func (*MultiChanBackup) ProtoMessage() {}
func (*MultiChanBackup) Descriptor() ([]byte, []int) { func (*MultiChanBackup) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{135} return fileDescriptor_77a6da22d6a3feb1, []int{137}
} }
func (m *MultiChanBackup) XXX_Unmarshal(b []byte) error { func (m *MultiChanBackup) XXX_Unmarshal(b []byte) error {
@ -10753,7 +10842,7 @@ func (m *ChanBackupExportRequest) Reset() { *m = ChanBackupExportRequest
func (m *ChanBackupExportRequest) String() string { return proto.CompactTextString(m) } func (m *ChanBackupExportRequest) String() string { return proto.CompactTextString(m) }
func (*ChanBackupExportRequest) ProtoMessage() {} func (*ChanBackupExportRequest) ProtoMessage() {}
func (*ChanBackupExportRequest) Descriptor() ([]byte, []int) { func (*ChanBackupExportRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{136} return fileDescriptor_77a6da22d6a3feb1, []int{138}
} }
func (m *ChanBackupExportRequest) XXX_Unmarshal(b []byte) error { func (m *ChanBackupExportRequest) XXX_Unmarshal(b []byte) error {
@ -10792,7 +10881,7 @@ func (m *ChanBackupSnapshot) Reset() { *m = ChanBackupSnapshot{} }
func (m *ChanBackupSnapshot) String() string { return proto.CompactTextString(m) } func (m *ChanBackupSnapshot) String() string { return proto.CompactTextString(m) }
func (*ChanBackupSnapshot) ProtoMessage() {} func (*ChanBackupSnapshot) ProtoMessage() {}
func (*ChanBackupSnapshot) Descriptor() ([]byte, []int) { func (*ChanBackupSnapshot) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{137} return fileDescriptor_77a6da22d6a3feb1, []int{139}
} }
func (m *ChanBackupSnapshot) XXX_Unmarshal(b []byte) error { func (m *ChanBackupSnapshot) XXX_Unmarshal(b []byte) error {
@ -10840,7 +10929,7 @@ func (m *ChannelBackups) Reset() { *m = ChannelBackups{} }
func (m *ChannelBackups) String() string { return proto.CompactTextString(m) } func (m *ChannelBackups) String() string { return proto.CompactTextString(m) }
func (*ChannelBackups) ProtoMessage() {} func (*ChannelBackups) ProtoMessage() {}
func (*ChannelBackups) Descriptor() ([]byte, []int) { func (*ChannelBackups) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{138} return fileDescriptor_77a6da22d6a3feb1, []int{140}
} }
func (m *ChannelBackups) XXX_Unmarshal(b []byte) error { func (m *ChannelBackups) XXX_Unmarshal(b []byte) error {
@ -10882,7 +10971,7 @@ func (m *RestoreChanBackupRequest) Reset() { *m = RestoreChanBackupReque
func (m *RestoreChanBackupRequest) String() string { return proto.CompactTextString(m) } func (m *RestoreChanBackupRequest) String() string { return proto.CompactTextString(m) }
func (*RestoreChanBackupRequest) ProtoMessage() {} func (*RestoreChanBackupRequest) ProtoMessage() {}
func (*RestoreChanBackupRequest) Descriptor() ([]byte, []int) { func (*RestoreChanBackupRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{139} return fileDescriptor_77a6da22d6a3feb1, []int{141}
} }
func (m *RestoreChanBackupRequest) XXX_Unmarshal(b []byte) error { func (m *RestoreChanBackupRequest) XXX_Unmarshal(b []byte) error {
@ -10958,7 +11047,7 @@ func (m *RestoreBackupResponse) Reset() { *m = RestoreBackupResponse{} }
func (m *RestoreBackupResponse) String() string { return proto.CompactTextString(m) } func (m *RestoreBackupResponse) String() string { return proto.CompactTextString(m) }
func (*RestoreBackupResponse) ProtoMessage() {} func (*RestoreBackupResponse) ProtoMessage() {}
func (*RestoreBackupResponse) Descriptor() ([]byte, []int) { func (*RestoreBackupResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{140} return fileDescriptor_77a6da22d6a3feb1, []int{142}
} }
func (m *RestoreBackupResponse) XXX_Unmarshal(b []byte) error { func (m *RestoreBackupResponse) XXX_Unmarshal(b []byte) error {
@ -10989,7 +11078,7 @@ func (m *ChannelBackupSubscription) Reset() { *m = ChannelBackupSubscrip
func (m *ChannelBackupSubscription) String() string { return proto.CompactTextString(m) } func (m *ChannelBackupSubscription) String() string { return proto.CompactTextString(m) }
func (*ChannelBackupSubscription) ProtoMessage() {} func (*ChannelBackupSubscription) ProtoMessage() {}
func (*ChannelBackupSubscription) Descriptor() ([]byte, []int) { func (*ChannelBackupSubscription) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{141} return fileDescriptor_77a6da22d6a3feb1, []int{143}
} }
func (m *ChannelBackupSubscription) XXX_Unmarshal(b []byte) error { func (m *ChannelBackupSubscription) XXX_Unmarshal(b []byte) error {
@ -11020,7 +11109,7 @@ func (m *VerifyChanBackupResponse) Reset() { *m = VerifyChanBackupRespon
func (m *VerifyChanBackupResponse) String() string { return proto.CompactTextString(m) } func (m *VerifyChanBackupResponse) String() string { return proto.CompactTextString(m) }
func (*VerifyChanBackupResponse) ProtoMessage() {} func (*VerifyChanBackupResponse) ProtoMessage() {}
func (*VerifyChanBackupResponse) Descriptor() ([]byte, []int) { func (*VerifyChanBackupResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{142} return fileDescriptor_77a6da22d6a3feb1, []int{144}
} }
func (m *VerifyChanBackupResponse) XXX_Unmarshal(b []byte) error { func (m *VerifyChanBackupResponse) XXX_Unmarshal(b []byte) error {
@ -11055,7 +11144,7 @@ func (m *MacaroonPermission) Reset() { *m = MacaroonPermission{} }
func (m *MacaroonPermission) String() string { return proto.CompactTextString(m) } func (m *MacaroonPermission) String() string { return proto.CompactTextString(m) }
func (*MacaroonPermission) ProtoMessage() {} func (*MacaroonPermission) ProtoMessage() {}
func (*MacaroonPermission) Descriptor() ([]byte, []int) { func (*MacaroonPermission) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{143} return fileDescriptor_77a6da22d6a3feb1, []int{145}
} }
func (m *MacaroonPermission) XXX_Unmarshal(b []byte) error { func (m *MacaroonPermission) XXX_Unmarshal(b []byte) error {
@ -11102,7 +11191,7 @@ func (m *BakeMacaroonRequest) Reset() { *m = BakeMacaroonRequest{} }
func (m *BakeMacaroonRequest) String() string { return proto.CompactTextString(m) } func (m *BakeMacaroonRequest) String() string { return proto.CompactTextString(m) }
func (*BakeMacaroonRequest) ProtoMessage() {} func (*BakeMacaroonRequest) ProtoMessage() {}
func (*BakeMacaroonRequest) Descriptor() ([]byte, []int) { func (*BakeMacaroonRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{144} return fileDescriptor_77a6da22d6a3feb1, []int{146}
} }
func (m *BakeMacaroonRequest) XXX_Unmarshal(b []byte) error { func (m *BakeMacaroonRequest) XXX_Unmarshal(b []byte) error {
@ -11142,7 +11231,7 @@ func (m *BakeMacaroonResponse) Reset() { *m = BakeMacaroonResponse{} }
func (m *BakeMacaroonResponse) String() string { return proto.CompactTextString(m) } func (m *BakeMacaroonResponse) String() string { return proto.CompactTextString(m) }
func (*BakeMacaroonResponse) ProtoMessage() {} func (*BakeMacaroonResponse) ProtoMessage() {}
func (*BakeMacaroonResponse) Descriptor() ([]byte, []int) { func (*BakeMacaroonResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{145} return fileDescriptor_77a6da22d6a3feb1, []int{147}
} }
func (m *BakeMacaroonResponse) XXX_Unmarshal(b []byte) error { func (m *BakeMacaroonResponse) XXX_Unmarshal(b []byte) error {
@ -11198,7 +11287,7 @@ func (m *Failure) Reset() { *m = Failure{} }
func (m *Failure) String() string { return proto.CompactTextString(m) } func (m *Failure) String() string { return proto.CompactTextString(m) }
func (*Failure) ProtoMessage() {} func (*Failure) ProtoMessage() {}
func (*Failure) Descriptor() ([]byte, []int) { func (*Failure) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{146} return fileDescriptor_77a6da22d6a3feb1, []int{148}
} }
func (m *Failure) XXX_Unmarshal(b []byte) error { func (m *Failure) XXX_Unmarshal(b []byte) error {
@ -11342,7 +11431,7 @@ func (m *ChannelUpdate) Reset() { *m = ChannelUpdate{} }
func (m *ChannelUpdate) String() string { return proto.CompactTextString(m) } func (m *ChannelUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelUpdate) ProtoMessage() {} func (*ChannelUpdate) ProtoMessage() {}
func (*ChannelUpdate) Descriptor() ([]byte, []int) { func (*ChannelUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{147} return fileDescriptor_77a6da22d6a3feb1, []int{149}
} }
func (m *ChannelUpdate) XXX_Unmarshal(b []byte) error { func (m *ChannelUpdate) XXX_Unmarshal(b []byte) error {
@ -11515,6 +11604,8 @@ func init() {
proto.RegisterType((*GetInfoRequest)(nil), "lnrpc.GetInfoRequest") proto.RegisterType((*GetInfoRequest)(nil), "lnrpc.GetInfoRequest")
proto.RegisterType((*GetInfoResponse)(nil), "lnrpc.GetInfoResponse") proto.RegisterType((*GetInfoResponse)(nil), "lnrpc.GetInfoResponse")
proto.RegisterMapType((map[uint32]*Feature)(nil), "lnrpc.GetInfoResponse.FeaturesEntry") proto.RegisterMapType((map[uint32]*Feature)(nil), "lnrpc.GetInfoResponse.FeaturesEntry")
proto.RegisterType((*GetRecoveryInfoRequest)(nil), "lnrpc.GetRecoveryInfoRequest")
proto.RegisterType((*GetRecoveryInfoResponse)(nil), "lnrpc.GetRecoveryInfoResponse")
proto.RegisterType((*Chain)(nil), "lnrpc.Chain") proto.RegisterType((*Chain)(nil), "lnrpc.Chain")
proto.RegisterType((*ConfirmationUpdate)(nil), "lnrpc.ConfirmationUpdate") proto.RegisterType((*ConfirmationUpdate)(nil), "lnrpc.ConfirmationUpdate")
proto.RegisterType((*ChannelOpenUpdate)(nil), "lnrpc.ChannelOpenUpdate") proto.RegisterType((*ChannelOpenUpdate)(nil), "lnrpc.ChannelOpenUpdate")
@ -11635,15 +11726,15 @@ func init() {
func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) } func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) }
var fileDescriptor_77a6da22d6a3feb1 = []byte{ var fileDescriptor_77a6da22d6a3feb1 = []byte{
// 11204 bytes of a gzipped FileDescriptorProto // 11276 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0xbd, 0x4d, 0x6c, 0x23, 0x49, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0xbd, 0x4d, 0x6c, 0x23, 0x49,
0x96, 0x18, 0x5c, 0xfc, 0x13, 0xc9, 0x47, 0x52, 0xa2, 0x42, 0x7f, 0x2c, 0x55, 0x57, 0x57, 0x75, 0x96, 0x18, 0x5c, 0xfc, 0x13, 0xc9, 0x47, 0x52, 0xa2, 0x42, 0x7f, 0x2c, 0x55, 0x57, 0x57, 0x75,
0x76, 0x4f, 0x77, 0x4d, 0x75, 0x8f, 0xba, 0xba, 0xa6, 0xab, 0x7f, 0xa6, 0xbe, 0xed, 0x19, 0x4a, 0x76, 0x4f, 0x77, 0x4d, 0x75, 0x8f, 0xba, 0xba, 0xa6, 0xab, 0x7f, 0xa6, 0xbe, 0xed, 0x19, 0x4a,
0xa2, 0x4a, 0x9c, 0x92, 0x48, 0x75, 0x92, 0xaa, 0xde, 0x5e, 0xec, 0xb7, 0xe9, 0x14, 0x19, 0x92, 0xa2, 0x4a, 0x9c, 0x92, 0x48, 0x75, 0x92, 0xaa, 0xde, 0x5e, 0xec, 0xb7, 0xe9, 0x14, 0x19, 0x92,
0xd2, 0x45, 0x66, 0xb2, 0x33, 0x93, 0x2a, 0x69, 0x0c, 0xdf, 0xfc, 0x87, 0x85, 0x6d, 0xc0, 0x80, 0xd2, 0x45, 0x66, 0xb2, 0x33, 0x93, 0x2a, 0x69, 0x0c, 0xdf, 0xfc, 0x87, 0x85, 0x6d, 0xc0, 0x80,
0xd7, 0x80, 0x7f, 0x16, 0xfe, 0x59, 0xd8, 0xbe, 0x2d, 0x0c, 0xcf, 0xda, 0x80, 0x01, 0x9f, 0xbd, 0xd7, 0x80, 0x7f, 0x16, 0xfe, 0x59, 0xd8, 0xbe, 0x2d, 0x0c, 0xcf, 0xda, 0x80, 0x01, 0x9f, 0xbd,
0x17, 0x1b, 0x86, 0xe1, 0xf5, 0xc1, 0xc6, 0x62, 0x01, 0x1f, 0xbc, 0xbe, 0x19, 0x0b, 0xf8, 0xe4, 0x17, 0x1b, 0xb6, 0xe1, 0xf5, 0xc1, 0xc6, 0x62, 0x01, 0x1f, 0xbc, 0xbe, 0x19, 0x0b, 0xf8, 0xe4,
0x83, 0x0d, 0x23, 0xde, 0x8b, 0xc8, 0x8c, 0x24, 0x53, 0x55, 0xd5, 0xb3, 0xed, 0xb9, 0x48, 0xcc, 0x83, 0x01, 0x23, 0xde, 0x8b, 0xc8, 0x8c, 0x24, 0x53, 0x55, 0xd5, 0xb3, 0xed, 0xb9, 0x48, 0xcc,
0xf7, 0x5e, 0xfc, 0x64, 0xc4, 0x8b, 0x17, 0xef, 0x2f, 0x22, 0xa1, 0xec, 0x4f, 0x06, 0x5b, 0x13, 0xf7, 0x5e, 0xfc, 0x64, 0xc4, 0x8b, 0x17, 0xef, 0x2f, 0x22, 0xa1, 0xec, 0x4f, 0x06, 0x5b, 0x13,
0xdf, 0x0b, 0x3d, 0x56, 0x18, 0xb9, 0xfe, 0x64, 0x60, 0xfc, 0x71, 0x06, 0xf2, 0xc7, 0xe1, 0xa5, 0xdf, 0x0b, 0x3d, 0x56, 0x18, 0xb9, 0xfe, 0x64, 0x60, 0xfc, 0x71, 0x06, 0xf2, 0xc7, 0xe1, 0xa5,
0xc7, 0x1e, 0x41, 0xd5, 0x1e, 0x0e, 0x7d, 0x1e, 0x04, 0x56, 0x78, 0x35, 0xe1, 0x8d, 0xcc, 0xdd, 0xc7, 0x1e, 0x41, 0xd5, 0x1e, 0x0e, 0x7d, 0x1e, 0x04, 0x56, 0x78, 0x35, 0xe1, 0x8d, 0xcc, 0xdd,
@ -11702,7 +11793,7 @@ var fileDescriptor_77a6da22d6a3feb1 = []byte{
0x37, 0x0d, 0x39, 0xf2, 0x7a, 0xe5, 0x61, 0x55, 0xbe, 0x9e, 0x29, 0x60, 0x51, 0xed, 0xf8, 0xf4, 0x37, 0x0d, 0x39, 0xf2, 0x7a, 0xe5, 0x61, 0x55, 0xbe, 0x9e, 0x29, 0x60, 0x51, 0xed, 0xf8, 0xf4,
0x1a, 0x7c, 0x6e, 0xfc, 0x56, 0x06, 0x98, 0xe8, 0x76, 0xdf, 0xa3, 0x0a, 0x62, 0x89, 0x94, 0x28, 0x1a, 0x7c, 0x6e, 0xfc, 0x56, 0x06, 0x98, 0xe8, 0x76, 0xdf, 0xa3, 0x0a, 0x62, 0x89, 0x94, 0x28,
0x99, 0x79, 0xed, 0x15, 0x92, 0x7d, 0xd9, 0x0a, 0x31, 0xa0, 0x40, 0x7d, 0xcf, 0xa7, 0xf4, 0x9d, 0x99, 0x79, 0xed, 0x15, 0x92, 0x7d, 0xd9, 0x0a, 0x31, 0xa0, 0x40, 0x7d, 0xcf, 0xa7, 0xf4, 0x9d,
0x50, 0x3f, 0xcd, 0x97, 0x72, 0xf5, 0xbc, 0xf1, 0x5f, 0x72, 0xb0, 0x2a, 0xf8, 0xd4, 0xe5, 0xa3, 0x50, 0x3f, 0xcd, 0x97, 0x72, 0xf5, 0xbc, 0xf1, 0x5f, 0x73, 0xb0, 0x2a, 0xf8, 0xd4, 0xe5, 0xa3,
0xe6, 0x60, 0xc0, 0x27, 0xd1, 0xda, 0xb9, 0x03, 0x15, 0xd7, 0x1b, 0x72, 0xc5, 0xb1, 0xd4, 0x31, 0xe6, 0x60, 0xc0, 0x27, 0xd1, 0xda, 0xb9, 0x03, 0x15, 0xd7, 0x1b, 0x72, 0xc5, 0xb1, 0xd4, 0x31,
0x10, 0x20, 0x8d, 0x5d, 0xcf, 0x6d, 0xc7, 0xa5, 0x8e, 0xd3, 0x60, 0x96, 0x11, 0x82, 0xdd, 0x7e, 0x10, 0x20, 0x8d, 0x5d, 0xcf, 0x6d, 0xc7, 0xa5, 0x8e, 0xd3, 0x60, 0x96, 0x11, 0x82, 0xdd, 0x7e,
0x17, 0x96, 0x26, 0xdc, 0x1d, 0xea, 0x4b, 0x24, 0x47, 0x5c, 0x2f, 0xc1, 0x72, 0x75, 0xdc, 0x81, 0x17, 0x96, 0x26, 0xdc, 0x1d, 0xea, 0x4b, 0x24, 0x47, 0x5c, 0x2f, 0xc1, 0x72, 0x75, 0xdc, 0x81,
@ -11734,7 +11825,7 @@ var fileDescriptor_77a6da22d6a3feb1 = []byte{
0xe9, 0x72, 0xd9, 0x82, 0x95, 0x44, 0xbf, 0x24, 0xa7, 0x6d, 0x40, 0x51, 0x2c, 0x08, 0xa1, 0x1c, 0xe9, 0x72, 0xd9, 0x82, 0x95, 0x44, 0xbf, 0x24, 0xa7, 0x6d, 0x40, 0x51, 0x2c, 0x08, 0xa1, 0x1c,
0x64, 0x48, 0x5b, 0x3d, 0xe5, 0x5c, 0xa8, 0xd7, 0x1f, 0xc2, 0xea, 0x29, 0xe7, 0xbe, 0x1d, 0x22, 0x64, 0x48, 0x5b, 0x3d, 0xe5, 0x5c, 0xa8, 0xd7, 0x1f, 0xc2, 0xea, 0x29, 0xe7, 0xbe, 0x1d, 0x22,
0x12, 0x57, 0x8c, 0x98, 0x21, 0x59, 0xf1, 0xb2, 0xc4, 0xf5, 0xec, 0xf0, 0x88, 0xfb, 0x62, 0xa6, 0x12, 0x57, 0x8c, 0x98, 0x21, 0x59, 0xf1, 0xb2, 0xc4, 0xf5, 0xec, 0xf0, 0x88, 0xfb, 0x62, 0xa6,
0x8c, 0xff, 0x95, 0x81, 0x25, 0x21, 0x41, 0x0f, 0x6d, 0xf7, 0x4a, 0x8d, 0xd3, 0x41, 0xea, 0x38, 0x8c, 0xff, 0x9d, 0x81, 0x25, 0x21, 0x41, 0x0f, 0x6d, 0xf7, 0x4a, 0x8d, 0xd3, 0x41, 0xea, 0x38,
0xdd, 0xd3, 0x36, 0x43, 0x8d, 0xfa, 0xdb, 0x0e, 0x52, 0x6e, 0x76, 0x90, 0xd8, 0x5d, 0xa8, 0x26, 0xdd, 0xd3, 0x36, 0x43, 0x8d, 0xfa, 0xdb, 0x0e, 0x52, 0x6e, 0x76, 0x90, 0xd8, 0x5d, 0xa8, 0x26,
0xfa, 0x5a, 0xc0, 0xbe, 0x42, 0x10, 0x75, 0x32, 0xd6, 0x48, 0x17, 0x34, 0x8d, 0xf4, 0x4f, 0x3f, 0xfa, 0x5a, 0xc0, 0xbe, 0x42, 0x10, 0x75, 0x32, 0xd6, 0x48, 0x17, 0x34, 0x8d, 0xf4, 0x4f, 0x3f,
0xb8, 0xef, 0x42, 0x3d, 0x7e, 0x19, 0x39, 0xb2, 0x0c, 0xf2, 0x82, 0x51, 0x65, 0x05, 0xf8, 0xdb, 0xb8, 0xef, 0x42, 0x3d, 0x7e, 0x19, 0x39, 0xb2, 0x0c, 0xf2, 0x82, 0x51, 0x65, 0x05, 0xf8, 0xdb,
@ -11855,488 +11946,492 @@ var fileDescriptor_77a6da22d6a3feb1 = []byte{
0x3b, 0xb0, 0x80, 0x6d, 0x04, 0x8d, 0x3a, 0x2e, 0x88, 0x6a, 0x2c, 0xe9, 0x1d, 0xd7, 0x94, 0x38, 0x3b, 0xb0, 0x80, 0x6d, 0x04, 0x8d, 0x3a, 0x2e, 0x88, 0x6a, 0x2c, 0xe9, 0x1d, 0xd7, 0x94, 0x38,
0xa1, 0x0a, 0x4e, 0x7d, 0x87, 0xc4, 0x50, 0xd9, 0xc4, 0xdf, 0xec, 0x27, 0x9a, 0x4c, 0x5b, 0xc1, 0xa1, 0x0a, 0x4e, 0x7d, 0x87, 0xc4, 0x50, 0xd9, 0xc4, 0xdf, 0xec, 0x27, 0x9a, 0x4c, 0x5b, 0xc1,
0xb2, 0xef, 0xc8, 0xb2, 0x33, 0xac, 0x78, 0x9d, 0x78, 0xfb, 0x4e, 0xa5, 0xd5, 0x4f, 0xf3, 0xa5, 0xb2, 0xef, 0xc8, 0xb2, 0x33, 0xac, 0x78, 0x9d, 0x78, 0xfb, 0x4e, 0xa5, 0xd5, 0x4f, 0xf3, 0xa5,
0x4a, 0xbd, 0x6a, 0x7c, 0x0a, 0x05, 0x1a, 0x1d, 0xc1, 0x84, 0x38, 0x76, 0x19, 0xc9, 0x84, 0x08, 0x4a, 0xbd, 0x6a, 0x34, 0x30, 0x1c, 0x6d, 0xf2, 0x81, 0x77, 0xc1, 0xfd, 0xab, 0xc4, 0x1a, 0xc9,
0x6d, 0x40, 0xd1, 0xe5, 0xe1, 0x0b, 0xcf, 0x7f, 0xae, 0xdc, 0xcf, 0xf2, 0xd1, 0xf8, 0x19, 0xfa, 0xc0, 0xc6, 0x1c, 0x2a, 0x8e, 0x6a, 0xf9, 0x12, 0x6e, 0x8d, 0xbd, 0xa1, 0xda, 0xd3, 0xab, 0x0a,
0x42, 0xa2, 0x98, 0x3d, 0x99, 0x75, 0x82, 0x3d, 0x68, 0x7a, 0x83, 0x73, 0x5b, 0xba, 0x67, 0x4a, 0x78, 0xe8, 0x0d, 0xb9, 0xb0, 0x4b, 0x23, 0xa2, 0x53, 0xc7, 0x75, 0x82, 0x73, 0x3e, 0x94, 0x5b,
0x08, 0xe8, 0x9d, 0xdb, 0x73, 0xec, 0x91, 0x9d, 0x0f, 0xdb, 0xbf, 0x03, 0x8b, 0x2a, 0x4b, 0x20, 0x7b, 0x5d, 0x21, 0xf6, 0x24, 0x5c, 0x68, 0x87, 0x13, 0xdf, 0x3b, 0x8b, 0x76, 0xba, 0x8c, 0x19,
0xb0, 0x46, 0xfc, 0x34, 0x94, 0xec, 0x5e, 0x95, 0x29, 0x02, 0xc1, 0x01, 0x3f, 0x0d, 0x8d, 0x43, 0x3d, 0x1b, 0x9f, 0x42, 0x81, 0x66, 0x50, 0x2c, 0x14, 0x9c, 0xdf, 0x8c, 0x5c, 0x28, 0x08, 0x6d,
0x58, 0x96, 0x0c, 0xd9, 0x9d, 0x70, 0xd5, 0xf4, 0x67, 0x69, 0xda, 0x70, 0xe5, 0xe1, 0x4a, 0x72, 0x40, 0xd1, 0xe5, 0xe1, 0x0b, 0xcf, 0x7f, 0xae, 0x5c, 0xe4, 0xf2, 0xd1, 0xf8, 0x19, 0xfa, 0x6b,
0x27, 0xa6, 0xec, 0x87, 0x84, 0x8a, 0x6c, 0x7c, 0x09, 0x4c, 0xdf, 0xa7, 0x65, 0x7d, 0x52, 0x27, 0xa2, 0xbc, 0x02, 0x32, 0x3d, 0x05, 0x0b, 0x13, 0x0b, 0x06, 0xe7, 0xb6, 0x74, 0x21, 0x95, 0x10,
0x55, 0x5e, 0x7b, 0x15, 0xfc, 0x8a, 0x34, 0x5f, 0x67, 0x28, 0x46, 0x27, 0x98, 0x0e, 0x06, 0x2a, 0xd0, 0x3b, 0xb7, 0xe7, 0x58, 0x38, 0x3b, 0x9f, 0x5a, 0xf0, 0x0e, 0x2c, 0xaa, 0x4c, 0x86, 0xc0,
0x7b, 0xa3, 0x64, 0xaa, 0x47, 0xe3, 0x3f, 0x66, 0x60, 0x05, 0x2b, 0x53, 0xda, 0xbc, 0x94, 0xc2, 0x1a, 0xf1, 0xd3, 0x50, 0x2e, 0xc9, 0xaa, 0x4c, 0x63, 0x08, 0x0e, 0xf8, 0x69, 0x68, 0x1c, 0xc2,
0xbf, 0x70, 0x27, 0xc5, 0xfc, 0xe8, 0xca, 0x11, 0x3d, 0x7c, 0x7b, 0x8f, 0x68, 0x7e, 0xce, 0x23, 0xb2, 0x5c, 0x34, 0xdd, 0x09, 0x57, 0x4d, 0x7f, 0x96, 0xa6, 0xb1, 0x57, 0x1e, 0xae, 0x24, 0xb5,
0xfa, 0x7d, 0xa8, 0x0f, 0xf9, 0xc8, 0xb9, 0xe0, 0xfe, 0x55, 0x64, 0xc8, 0x91, 0xfe, 0xbe, 0xa4, 0x05, 0xca, 0xd0, 0x48, 0xa8, 0xf1, 0xc6, 0x97, 0xc0, 0x74, 0x5d, 0x42, 0xd6, 0x27, 0xf5, 0x66,
0xe0, 0xd2, 0x96, 0x33, 0xfe, 0x56, 0x06, 0x96, 0x49, 0x95, 0x41, 0xab, 0x58, 0x0e, 0xd4, 0x63, 0x15, 0x59, 0x50, 0x01, 0xba, 0x48, 0x3b, 0x77, 0x86, 0x62, 0x74, 0x82, 0xe9, 0x60, 0xa0, 0x32,
0x65, 0x06, 0x4a, 0x51, 0x25, 0xdf, 0x29, 0xde, 0xe2, 0x11, 0x4a, 0xc4, 0xfb, 0x37, 0xa4, 0x79, 0x4c, 0x4a, 0xa6, 0x7a, 0x34, 0xfe, 0x53, 0x06, 0x56, 0xb0, 0x32, 0x65, 0x71, 0xc8, 0x9d, 0xe2,
0x28, 0xa1, 0xec, 0x47, 0x68, 0x81, 0xb8, 0x16, 0x02, 0x65, 0x30, 0xf3, 0x66, 0x8a, 0xf2, 0x14, 0x17, 0xee, 0xa4, 0x98, 0x1f, 0x5d, 0x81, 0xa3, 0x87, 0x6f, 0xef, 0xb5, 0xcd, 0xcf, 0x79, 0x6d,
0x15, 0x17, 0xe6, 0x89, 0x8b, 0xa0, 0xed, 0x92, 0xb0, 0x4b, 0x05, 0xd8, 0xd8, 0x83, 0x5a, 0xa2, 0xbf, 0x0f, 0xf5, 0x21, 0x1f, 0x39, 0xc8, 0x4a, 0x4a, 0x1f, 0x22, 0x1b, 0x63, 0x49, 0xc1, 0xa5,
0x99, 0x84, 0x83, 0xb6, 0x4a, 0x0e, 0xda, 0xb9, 0x80, 0x49, 0x76, 0x3e, 0x60, 0x72, 0x05, 0x2b, 0xbd, 0x69, 0xfc, 0xad, 0x0c, 0x2c, 0x93, 0xba, 0x85, 0x96, 0xbb, 0x1c, 0xa8, 0xc7, 0xca, 0x54,
0x26, 0xb7, 0x87, 0x57, 0x7b, 0x9e, 0x7f, 0x14, 0x9c, 0x84, 0x7b, 0xa4, 0x1f, 0x0a, 0xf9, 0x1e, 0x95, 0xe2, 0x54, 0xbe, 0x53, 0xac, 0x86, 0x20, 0x94, 0x88, 0xf7, 0x6f, 0x48, 0x13, 0x56, 0x42,
0x45, 0x01, 0x13, 0x5e, 0x50, 0x15, 0x0c, 0x52, 0xc6, 0xee, 0xf7, 0x60, 0x31, 0x0e, 0x17, 0x6a, 0xd9, 0x8f, 0xd0, 0x4a, 0x72, 0x2d, 0x04, 0xca, 0x80, 0xeb, 0xcd, 0x14, 0x05, 0x2f, 0x2a, 0x2e,
0x9e, 0xb4, 0x5a, 0x14, 0x31, 0x44, 0x87, 0x9a, 0x30, 0x14, 0x83, 0x93, 0x50, 0xfa, 0xd2, 0xf0, 0x4c, 0x28, 0x17, 0x41, 0xdb, 0x25, 0x61, 0x3b, 0x0b, 0xb0, 0xb1, 0x07, 0xb5, 0x44, 0x33, 0x09,
0xb7, 0xf1, 0x17, 0xf3, 0xc0, 0x04, 0x37, 0xcf, 0x30, 0xcc, 0x4c, 0xa0, 0x33, 0x3b, 0x17, 0xe8, 0x27, 0x72, 0x95, 0x9c, 0xc8, 0x73, 0x41, 0x9d, 0xec, 0x7c, 0x50, 0xe7, 0x0a, 0x56, 0x4c, 0x6e,
0x7c, 0x00, 0x4c, 0x23, 0x50, 0xf1, 0xd7, 0x5c, 0x14, 0x7f, 0xad, 0xc7, 0xb4, 0x32, 0xfc, 0xfa, 0x0f, 0xaf, 0xf6, 0x3c, 0xff, 0x28, 0x38, 0x09, 0xf7, 0x48, 0x87, 0x15, 0x7b, 0x50, 0x14, 0xa9,
0x00, 0x56, 0xa5, 0xb2, 0x9d, 0xec, 0x2a, 0xb1, 0x06, 0x23, 0xad, 0x3b, 0xd1, 0x5f, 0x15, 0xe4, 0x4c, 0x78, 0x6a, 0x55, 0xc0, 0x4a, 0x19, 0xe4, 0xdf, 0x83, 0xc5, 0x38, 0xa4, 0xa9, 0x79, 0xfb,
0x14, 0xc6, 0x3b, 0xf9, 0xca, 0x30, 0xc8, 0xa9, 0xcc, 0x76, 0x8d, 0x01, 0x17, 0x5e, 0xc9, 0x80, 0x6a, 0x51, 0x54, 0x13, 0x9d, 0x7e, 0xc2, 0x98, 0x0d, 0x4e, 0x42, 0xe9, 0xef, 0xc3, 0xdf, 0xc6,
0xc5, 0x39, 0x06, 0xd4, 0x5c, 0x37, 0xa5, 0xa4, 0xeb, 0xc6, 0x80, 0x9a, 0x0a, 0x65, 0x52, 0x06, 0x5f, 0xcc, 0x03, 0x13, 0xdc, 0x3c, 0xc3, 0x30, 0x33, 0xc1, 0xd8, 0xec, 0x5c, 0x30, 0xf6, 0x01,
0x07, 0x69, 0x96, 0x15, 0x19, 0xcf, 0xc4, 0x2c, 0x8e, 0x7b, 0x50, 0x57, 0xfe, 0x95, 0xc8, 0x39, 0x30, 0x8d, 0x40, 0xc5, 0x88, 0x73, 0x51, 0x8c, 0xb8, 0x1e, 0xd3, 0xca, 0x10, 0xf1, 0x03, 0x58,
0x44, 0xd9, 0x09, 0xd2, 0x3d, 0xb7, 0xa3, 0x5c, 0x44, 0x09, 0x57, 0x7c, 0x65, 0xc6, 0x15, 0xff, 0x95, 0x06, 0x41, 0xb2, 0xab, 0xc4, 0x1a, 0x8c, 0x2c, 0x83, 0x44, 0x7f, 0x55, 0x20, 0x36, 0xb0,
0x3e, 0x2c, 0x07, 0x82, 0x7f, 0xad, 0xa9, 0x2b, 0x53, 0x94, 0xf8, 0x10, 0xed, 0xb0, 0x92, 0x59, 0x43, 0xe9, 0xcf, 0xc3, 0x40, 0xac, 0x72, 0x2d, 0x68, 0x0c, 0xb8, 0xf0, 0x4a, 0x06, 0x2c, 0xce,
0x47, 0xc4, 0x71, 0x0c, 0x9f, 0x77, 0x7c, 0xd4, 0x52, 0x1c, 0x1f, 0x8f, 0xe2, 0xa8, 0x5f, 0x70, 0x31, 0xa0, 0xe6, 0x5e, 0x2a, 0x25, 0xdd, 0x4b, 0x06, 0xd4, 0x54, 0xb8, 0x95, 0xb2, 0x4c, 0x48,
0xee, 0x8c, 0x51, 0xa9, 0x88, 0xd3, 0x6e, 0xe4, 0x00, 0xf7, 0xce, 0x9d, 0xb1, 0xa9, 0x42, 0xcc, 0xfb, 0xad, 0xc8, 0x98, 0x2b, 0x66, 0x9a, 0xdc, 0x83, 0xba, 0xf2, 0x01, 0x45, 0x0e, 0x2c, 0xca,
0xe2, 0xc1, 0xf8, 0x9f, 0x19, 0xa8, 0x0b, 0x3e, 0x48, 0x2c, 0xb1, 0xcf, 0x01, 0x85, 0xc1, 0x6b, 0xa0, 0x90, 0x2e, 0xc4, 0x1d, 0xe5, 0xc6, 0x4a, 0x84, 0x0b, 0x2a, 0x33, 0xe1, 0x82, 0xf7, 0x61,
0xae, 0xb0, 0x8a, 0xa0, 0x55, 0x0b, 0xec, 0x53, 0xc0, 0x15, 0x63, 0x09, 0xa3, 0x53, 0xae, 0xaf, 0x39, 0x10, 0xfc, 0x6b, 0x4d, 0x5d, 0x99, 0x46, 0xc5, 0x87, 0x68, 0x2b, 0x96, 0xcc, 0x3a, 0x22,
0x46, 0x72, 0x7d, 0xc5, 0x32, 0x74, 0xff, 0x06, 0x19, 0x27, 0x02, 0xc2, 0x3e, 0x87, 0xb2, 0x60, 0x8e, 0x63, 0xf8, 0xbc, 0x73, 0xa6, 0x96, 0xe2, 0x9c, 0x79, 0x14, 0x47, 0x26, 0x83, 0x73, 0x67,
0x4c, 0xe4, 0x12, 0x99, 0x45, 0xa6, 0x54, 0xb3, 0x94, 0x35, 0x22, 0x8a, 0x4e, 0xe4, 0x63, 0x5a, 0x8c, 0x8a, 0x4f, 0x9c, 0x1a, 0x24, 0x07, 0xb8, 0x77, 0xee, 0x8c, 0x4d, 0x15, 0x06, 0x17, 0x0f,
0xa0, 0x36, 0x9f, 0x12, 0xa8, 0xd5, 0x16, 0xf0, 0x3e, 0xc0, 0x53, 0x7e, 0x75, 0xe0, 0x0d, 0xd0, 0xc6, 0xff, 0xca, 0x40, 0x5d, 0xf0, 0x41, 0x62, 0x89, 0x7d, 0x0e, 0x28, 0x0c, 0x5e, 0x73, 0x85,
0x24, 0xbe, 0x0d, 0x20, 0x78, 0xf9, 0xd4, 0x1e, 0x3b, 0xd2, 0xa3, 0x53, 0x30, 0xcb, 0xcf, 0xf9, 0x55, 0x04, 0xad, 0x5a, 0x60, 0x9f, 0x02, 0xae, 0x18, 0x4b, 0x18, 0xc6, 0x72, 0x7d, 0x35, 0x92,
0xd5, 0x1e, 0x02, 0xc4, 0x44, 0x0a, 0x74, 0xbc, 0x8a, 0x0b, 0x66, 0xe9, 0x39, 0xbf, 0xa2, 0x25, 0xeb, 0x2b, 0x96, 0xa1, 0xfb, 0x37, 0xc8, 0x80, 0x12, 0x10, 0xf6, 0x39, 0x94, 0x05, 0x63, 0x22,
0x6c, 0x41, 0xed, 0x29, 0xbf, 0xda, 0xe5, 0xa4, 0x85, 0x7a, 0xbe, 0x60, 0x22, 0xdf, 0x7e, 0x21, 0x97, 0xc8, 0x4c, 0x37, 0xa5, 0x3e, 0xa6, 0xac, 0x11, 0x51, 0x74, 0x22, 0x1f, 0xd3, 0x82, 0xc9,
0xd4, 0xce, 0x44, 0x90, 0xb5, 0xe2, 0xdb, 0x2f, 0x9e, 0xf2, 0x2b, 0x15, 0xf0, 0x2d, 0x0a, 0xfc, 0xf9, 0x94, 0x60, 0xb2, 0xb6, 0x80, 0xf7, 0x01, 0x9e, 0xf2, 0xab, 0x03, 0x6f, 0x80, 0x66, 0xfb,
0xc8, 0x1b, 0xc8, 0x7d, 0x53, 0xa5, 0x8b, 0xc4, 0x9d, 0x32, 0x17, 0x9e, 0xe3, 0x6f, 0xe3, 0x4f, 0x6d, 0x00, 0xc1, 0xcb, 0xa7, 0xf6, 0xd8, 0x91, 0x5e, 0xa7, 0x82, 0x59, 0x7e, 0xce, 0xaf, 0xf6,
0x32, 0x50, 0x13, 0xfd, 0x47, 0xb1, 0x2c, 0xa6, 0x4c, 0x65, 0x1d, 0x65, 0xe2, 0xac, 0xa3, 0x87, 0x10, 0x20, 0x26, 0x52, 0xa0, 0xe3, 0x55, 0x5c, 0x30, 0x4b, 0xcf, 0xf9, 0x15, 0x2d, 0x61, 0x0b,
0x52, 0xaa, 0x91, 0x8c, 0xcf, 0x5e, 0x2f, 0xe3, 0x71, 0x6e, 0x48, 0xc0, 0x7f, 0x04, 0x65, 0x5a, 0x6a, 0x4f, 0xf9, 0xd5, 0x2e, 0x27, 0x4d, 0xd9, 0xf3, 0x05, 0x13, 0xf9, 0xf6, 0x0b, 0xa1, 0x1a,
0x96, 0x62, 0x9d, 0xe7, 0x12, 0x13, 0x9c, 0x78, 0x21, 0xb3, 0x84, 0x64, 0x4f, 0x29, 0xc9, 0x41, 0x27, 0x02, 0xc1, 0x15, 0xdf, 0x7e, 0xf1, 0x94, 0x5f, 0xa9, 0xa0, 0x74, 0x51, 0xe0, 0x47, 0xde,
0xf3, 0x0e, 0xd2, 0x10, 0x97, 0xfd, 0xc8, 0x27, 0x98, 0x32, 0x0d, 0x85, 0x6b, 0x92, 0x1c, 0x74, 0x40, 0xee, 0xed, 0x2a, 0xa5, 0x25, 0xee, 0x94, 0xb9, 0xf0, 0x1c, 0x7f, 0x1b, 0x7f, 0x92, 0x81,
0xd7, 0xdb, 0xc2, 0x9c, 0xeb, 0xad, 0x0b, 0x25, 0x31, 0xd5, 0xf8, 0xb2, 0x29, 0x95, 0x66, 0xd2, 0x9a, 0xe8, 0x3f, 0x8a, 0x65, 0x31, 0x65, 0x2a, 0x33, 0x2a, 0x13, 0x67, 0x46, 0x3d, 0x94, 0x52,
0x2a, 0x15, 0x9a, 0x80, 0x2d, 0x36, 0x05, 0x21, 0xe8, 0xb2, 0x52, 0x13, 0xb0, 0x03, 0x7e, 0x84, 0x8d, 0x64, 0x7c, 0xf6, 0x7a, 0x19, 0x8f, 0x73, 0x43, 0x02, 0xfe, 0x23, 0x28, 0xd3, 0xb2, 0x14,
0xc2, 0x2e, 0x03, 0x15, 0x6d, 0x05, 0xa0, 0xf7, 0x32, 0x1a, 0x2f, 0x5a, 0x2e, 0x49, 0x16, 0x4f, 0xeb, 0x3c, 0x97, 0x98, 0xe0, 0xc4, 0x0b, 0x99, 0x25, 0x24, 0x7b, 0x4a, 0x89, 0x18, 0x9a, 0x07,
0x0c, 0xf8, 0xfe, 0x0d, 0xb3, 0x36, 0x48, 0xcc, 0xc0, 0x96, 0xe4, 0x55, 0x2c, 0x99, 0x4d, 0x24, 0x93, 0x86, 0xb8, 0xec, 0x47, 0x7e, 0xcb, 0x94, 0x69, 0x28, 0x5c, 0x93, 0x88, 0xa1, 0xbb, 0x07,
0x48, 0xa9, 0x8e, 0x2b, 0x06, 0x15, 0xbf, 0xb7, 0x17, 0x20, 0x2f, 0x48, 0x8d, 0xc7, 0xb0, 0xac, 0x17, 0xe6, 0xdc, 0x83, 0x5d, 0x28, 0x89, 0xa9, 0xc6, 0x97, 0x4d, 0xa9, 0x34, 0x93, 0x56, 0xa9,
0x75, 0x83, 0xfc, 0x00, 0xaf, 0xfb, 0x86, 0xc6, 0xaf, 0x47, 0x85, 0x45, 0x1b, 0x14, 0x5f, 0x52, 0xd0, 0x04, 0x6c, 0xb1, 0x29, 0x08, 0x41, 0x97, 0x95, 0x9a, 0x80, 0x1d, 0xf0, 0x23, 0x14, 0x76,
0x09, 0x23, 0x7c, 0x48, 0x2f, 0x2e, 0x13, 0x53, 0x08, 0x24, 0xc8, 0x5e, 0x3b, 0x89, 0xe1, 0x37, 0x19, 0xa8, 0x68, 0x2b, 0x00, 0x3d, 0xac, 0xd1, 0x78, 0xd1, 0x72, 0x49, 0xb2, 0x78, 0x62, 0xc0,
0x60, 0x45, 0xab, 0x7d, 0xcf, 0x71, 0xed, 0x91, 0xf3, 0x33, 0xdc, 0xf0, 0x03, 0xe7, 0xcc, 0x9d, 0xf7, 0x6f, 0x98, 0xb5, 0x41, 0x62, 0x06, 0xb6, 0x24, 0xaf, 0x62, 0xc9, 0x6c, 0x22, 0x89, 0x4b,
0xa9, 0x9f, 0x40, 0xdf, 0xaa, 0xfe, 0xbf, 0x9d, 0x85, 0x55, 0xd9, 0x00, 0xa6, 0x00, 0x3a, 0x42, 0x75, 0x5c, 0x31, 0xa8, 0xf8, 0xbd, 0xbd, 0x00, 0x79, 0x41, 0x6a, 0x3c, 0x86, 0x65, 0xad, 0x1b,
0x8b, 0x3b, 0x0c, 0xce, 0xd8, 0xe7, 0x50, 0x13, 0x63, 0x63, 0xf9, 0xfc, 0xcc, 0x09, 0x42, 0xae, 0xe4, 0xab, 0x78, 0xdd, 0x37, 0x34, 0x7e, 0x3d, 0x2a, 0x2c, 0xda, 0xa0, 0x18, 0x98, 0x4a, 0x6a,
0xe2, 0x5a, 0x29, 0x82, 0x4b, 0x6c, 0xe6, 0x82, 0xd4, 0x94, 0x94, 0xec, 0x31, 0x54, 0xb0, 0x28, 0xe1, 0x43, 0x7a, 0x71, 0x99, 0x3c, 0x43, 0x20, 0x41, 0xf6, 0xda, 0x89, 0x16, 0xbf, 0x01, 0x2b,
0xf9, 0x59, 0xe4, 0x44, 0x34, 0xe6, 0x0b, 0xd2, 0x40, 0xef, 0xdf, 0x30, 0x21, 0x88, 0x87, 0xfd, 0x5a, 0xed, 0x7b, 0x8e, 0x6b, 0x8f, 0x9c, 0x9f, 0xe1, 0x86, 0x1f, 0x38, 0x67, 0xee, 0x4c, 0xfd,
0x31, 0x54, 0x70, 0x0e, 0x2f, 0x70, 0x20, 0x67, 0x44, 0xd5, 0xdc, 0x40, 0x8b, 0xc2, 0x93, 0x78, 0x04, 0xfa, 0x56, 0xf5, 0xff, 0xed, 0x2c, 0xac, 0xca, 0x06, 0x30, 0x4d, 0xd1, 0x11, 0x5a, 0xdc,
0xd8, 0x9b, 0x50, 0x23, 0x61, 0x25, 0xc7, 0x49, 0xa6, 0x16, 0x6d, 0xce, 0x17, 0x57, 0x23, 0x29, 0x61, 0x70, 0xc6, 0x3e, 0x87, 0x9a, 0x18, 0x1b, 0xcb, 0xe7, 0x67, 0x4e, 0x10, 0x72, 0x15, 0x7b,
0x3a, 0x3f, 0xd1, 0x9e, 0xb7, 0xcb, 0x50, 0x0c, 0x7d, 0xe7, 0xec, 0x8c, 0xfb, 0xc6, 0x7a, 0x34, 0x4b, 0x11, 0x5c, 0x62, 0x33, 0x17, 0xa4, 0xa6, 0xa4, 0x64, 0x8f, 0xa1, 0x82, 0x45, 0xc9, 0x17,
0x34, 0x42, 0x0a, 0xf3, 0x5e, 0xc8, 0x27, 0x42, 0x37, 0x37, 0xfe, 0x6d, 0x06, 0x2a, 0x52, 0xae, 0x24, 0x27, 0xa2, 0x31, 0x5f, 0x90, 0x06, 0x7a, 0xff, 0x86, 0x09, 0x41, 0x3c, 0xec, 0x8f, 0xa1,
0xfe, 0xc2, 0xc1, 0xb4, 0x4d, 0x2d, 0x37, 0x97, 0x5c, 0x3a, 0x71, 0x2a, 0xee, 0x7b, 0xb0, 0x34, 0x82, 0x73, 0x78, 0x81, 0x03, 0x39, 0x23, 0xaa, 0xe6, 0x06, 0x5a, 0x14, 0x9e, 0xc4, 0xc3, 0xde,
0x16, 0x7a, 0xba, 0xb0, 0x23, 0x13, 0x91, 0xb4, 0x45, 0x05, 0x96, 0x6a, 0xf2, 0x16, 0xac, 0xa0, 0x84, 0x1a, 0x09, 0x2b, 0x39, 0x4e, 0x32, 0xfd, 0x69, 0x73, 0xbe, 0xb8, 0x1a, 0x49, 0xd1, 0xf9,
0xd6, 0x1c, 0x58, 0xa1, 0x33, 0xb2, 0x14, 0x52, 0xe6, 0xc1, 0x2e, 0x13, 0xaa, 0xef, 0x8c, 0x0e, 0x89, 0xf6, 0xbc, 0x5d, 0x86, 0x62, 0xe8, 0x3b, 0x67, 0x67, 0xdc, 0x37, 0xd6, 0xa3, 0xa1, 0x11,
0x25, 0x42, 0x28, 0x8f, 0x41, 0x68, 0x9f, 0x71, 0xb9, 0xb6, 0xe9, 0xc1, 0x68, 0xc0, 0xfa, 0x8c, 0x52, 0x98, 0xf7, 0x42, 0x3e, 0x11, 0xea, 0xb9, 0xf1, 0x6f, 0x33, 0x50, 0x91, 0x72, 0xf5, 0x17,
0x09, 0xa9, 0xec, 0xe3, 0xff, 0xbd, 0x0c, 0x1b, 0x73, 0x28, 0x69, 0x27, 0x47, 0x11, 0xa4, 0x91, 0x0e, 0xf8, 0x6d, 0x6a, 0xf9, 0xc3, 0xe4, 0x76, 0x8a, 0xd3, 0x85, 0xdf, 0x83, 0xa5, 0xb1, 0xb0,
0x33, 0x3e, 0xf1, 0x22, 0xff, 0x6a, 0x46, 0x8b, 0x20, 0x1d, 0x08, 0x8c, 0xf2, 0xaf, 0x72, 0x58, 0x25, 0x84, 0xad, 0x9b, 0x88, 0xf6, 0x2d, 0x2a, 0xb0, 0x54, 0x93, 0xb7, 0x60, 0x05, 0xb5, 0xe6,
0x53, 0x0c, 0x89, 0x0e, 0xd2, 0xc8, 0xca, 0xcc, 0xa2, 0x0d, 0xf4, 0x51, 0x72, 0x13, 0x9b, 0x6d, 0xc0, 0x0a, 0x9d, 0x91, 0xa5, 0x90, 0x32, 0x57, 0x77, 0x99, 0x50, 0x7d, 0x67, 0x74, 0x28, 0x11,
0x4e, 0xc1, 0x75, 0xd5, 0x68, 0x65, 0x32, 0x07, 0x0b, 0xd8, 0x9f, 0x85, 0x46, 0xc4, 0xf7, 0x52, 0x42, 0x79, 0x0c, 0x42, 0xfb, 0x8c, 0xcb, 0xb5, 0x4d, 0x0f, 0xc2, 0x3e, 0x99, 0x31, 0x73, 0x95,
0x6d, 0xd7, 0x4c, 0x66, 0xd1, 0xd2, 0x07, 0xaf, 0x68, 0x29, 0xe1, 0xdc, 0x43, 0xdd, 0x69, 0x5d, 0x7d, 0xf2, 0x7f, 0x96, 0x61, 0x63, 0x0e, 0x25, 0xed, 0x93, 0x28, 0xca, 0x35, 0x72, 0xc6, 0x27,
0x2d, 0x19, 0xaa, 0x30, 0x6a, 0xeb, 0x02, 0xde, 0x54, 0x6d, 0xa1, 0x1a, 0x3e, 0xdf, 0x62, 0xfe, 0x5e, 0xe4, 0x03, 0xce, 0x68, 0x51, 0xae, 0x03, 0x81, 0x51, 0x3e, 0x60, 0x0e, 0x6b, 0x8a, 0x21,
0xb5, 0xde, 0x0d, 0x1d, 0x97, 0x89, 0x66, 0xcd, 0x5b, 0xb2, 0xe2, 0x08, 0xa5, 0xb7, 0x7b, 0x0e, 0xd1, 0x89, 0x1b, 0x59, 0xc2, 0x59, 0xb4, 0xd3, 0x3e, 0x4a, 0x6e, 0x62, 0xb3, 0xcd, 0x29, 0xb8,
0xeb, 0x2f, 0x6c, 0x27, 0x54, 0xef, 0xa8, 0x59, 0xec, 0x05, 0x6c, 0xef, 0xe1, 0x2b, 0xda, 0xfb, 0xae, 0x1a, 0xad, 0x4c, 0xe6, 0x60, 0x01, 0xfb, 0xb3, 0xd0, 0x88, 0xf8, 0x5e, 0xaa, 0xed, 0x9a,
0x8a, 0x0a, 0x27, 0x0c, 0x93, 0xd5, 0x17, 0xf3, 0xc0, 0x60, 0xf3, 0x1f, 0xe6, 0x60, 0x31, 0x59, 0x59, 0x2f, 0x5a, 0xfa, 0xe0, 0x15, 0x2d, 0x25, 0x1c, 0x90, 0xa8, 0x3b, 0xad, 0xab, 0x25, 0x43,
0x8b, 0x10, 0x2c, 0x72, 0xb3, 0x51, 0xfa, 0xa6, 0x54, 0x82, 0xa5, 0xef, 0xbf, 0x43, 0x7a, 0xe6, 0x15, 0x46, 0x6d, 0x5d, 0xc0, 0x9b, 0xaa, 0x2d, 0x54, 0xc3, 0xe7, 0x5b, 0xcc, 0xbf, 0xd6, 0xbb,
0x7c, 0x54, 0x22, 0x9b, 0x12, 0x95, 0xd0, 0x83, 0x01, 0xb9, 0x57, 0x45, 0x5f, 0xf3, 0xaf, 0x15, 0xa1, 0x73, 0x35, 0xd1, 0xac, 0x79, 0x4b, 0x56, 0x1c, 0xa1, 0xf4, 0x76, 0xcf, 0x61, 0xfd, 0x85,
0x7d, 0x2d, 0xa4, 0x45, 0x5f, 0xaf, 0x0f, 0xd9, 0x2d, 0xfc, 0x42, 0x21, 0xbb, 0xe2, 0x4b, 0x43, 0xed, 0x84, 0xea, 0x1d, 0x35, 0xaf, 0x42, 0x01, 0xdb, 0x7b, 0xf8, 0x8a, 0xf6, 0xbe, 0xa2, 0xc2,
0x76, 0x5a, 0xa0, 0xb1, 0x74, 0x8d, 0x0b, 0x5f, 0x0b, 0x3d, 0xa6, 0x84, 0xec, 0xca, 0xdf, 0x22, 0x09, 0xc3, 0x64, 0xf5, 0xc5, 0x3c, 0x30, 0xd8, 0xfc, 0x87, 0x39, 0x58, 0x4c, 0xd6, 0x22, 0x04,
0x64, 0xb7, 0xf9, 0x27, 0x19, 0x60, 0xf3, 0xab, 0x83, 0x3d, 0xa1, 0x80, 0x8f, 0xcb, 0x47, 0x52, 0x8b, 0xdc, 0x6c, 0x94, 0xbe, 0x29, 0x95, 0x60, 0x19, 0x9f, 0xe8, 0x90, 0x9e, 0x39, 0x1f, 0x39,
0x72, 0xff, 0xe0, 0xf5, 0x56, 0x98, 0x62, 0x08, 0x55, 0x9a, 0x7d, 0x08, 0x2b, 0x7a, 0xb6, 0xbe, 0xc9, 0xa6, 0x44, 0x4e, 0xf4, 0x80, 0x45, 0xee, 0x55, 0x11, 0xe2, 0xfc, 0x6b, 0x45, 0x88, 0x0b,
0x6e, 0xb5, 0xd7, 0x4c, 0xa6, 0xa3, 0x62, 0xdf, 0x8e, 0x16, 0xea, 0xce, 0xbf, 0x32, 0xd4, 0x5d, 0x69, 0x11, 0xe2, 0xeb, 0xc3, 0x8a, 0x0b, 0xbf, 0x50, 0x58, 0xb1, 0xf8, 0xd2, 0xb0, 0xa2, 0x16,
0x78, 0x65, 0xa8, 0x7b, 0x21, 0x19, 0xea, 0xde, 0xfc, 0x0f, 0x19, 0x58, 0x49, 0x61, 0xe2, 0xef, 0x0c, 0x2d, 0x5d, 0x13, 0x66, 0xd0, 0xc2, 0xa3, 0x29, 0x61, 0xc5, 0xf2, 0xb7, 0x08, 0x2b, 0x6e,
0xee, 0x9d, 0x05, 0xef, 0x25, 0xc4, 0x5a, 0x56, 0xf2, 0x9e, 0x2e, 0xd1, 0x0e, 0x94, 0x3f, 0x50, 0xfe, 0x49, 0x06, 0xd8, 0xfc, 0xea, 0x60, 0x4f, 0x28, 0x28, 0xe5, 0xf2, 0x91, 0x94, 0xdc, 0x3f,
0x4c, 0x45, 0x20, 0x77, 0xaa, 0xfb, 0xaf, 0x92, 0x2e, 0x71, 0x09, 0x53, 0x2f, 0xbe, 0xf9, 0x3b, 0x78, 0xbd, 0x15, 0xa6, 0x18, 0x42, 0x95, 0x66, 0x1f, 0xc2, 0x8a, 0x7e, 0xa2, 0x40, 0xb7, 0xda,
0x59, 0xa8, 0x68, 0x48, 0x31, 0x8a, 0xc4, 0xb2, 0x5a, 0x86, 0x11, 0x69, 0x86, 0xe8, 0x73, 0xb8, 0x6b, 0x26, 0xd3, 0x51, 0xb1, 0xff, 0x49, 0x0b, 0xc7, 0xe7, 0x5f, 0x19, 0x8e, 0x2f, 0xbc, 0x32,
0x03, 0x32, 0xea, 0x41, 0x78, 0x5a, 0x5c, 0x52, 0x0d, 0x44, 0x82, 0x2d, 0x58, 0x51, 0xc1, 0x38, 0x1c, 0xbf, 0x90, 0x0c, 0xc7, 0x6f, 0xfe, 0xc7, 0x0c, 0xac, 0xa4, 0x30, 0xf1, 0x77, 0xf7, 0xce,
0x1e, 0x27, 0x1d, 0xca, 0xbd, 0x66, 0x59, 0x86, 0xe4, 0x78, 0x94, 0xc3, 0xc8, 0x3e, 0x54, 0xe6, 0x82, 0xf7, 0x12, 0x62, 0x2d, 0x2b, 0x79, 0x4f, 0x97, 0x68, 0x07, 0xca, 0x67, 0x29, 0xa6, 0x22,
0x60, 0x3c, 0x77, 0xc8, 0xea, 0x14, 0x52, 0x58, 0xa6, 0x05, 0xa2, 0x26, 0x51, 0xf0, 0xf9, 0x47, 0x90, 0x3b, 0xd5, 0xfd, 0x57, 0x49, 0x97, 0xb8, 0x84, 0xa9, 0x17, 0xdf, 0xfc, 0x9d, 0x2c, 0x54,
0xb0, 0xa6, 0x96, 0x47, 0xb2, 0x04, 0x45, 0x19, 0x98, 0x5c, 0x1c, 0x7a, 0x91, 0x9f, 0xc0, 0xed, 0x34, 0xa4, 0x18, 0x45, 0x62, 0x59, 0x2d, 0x0b, 0x8a, 0x34, 0x43, 0xf4, 0x39, 0xdc, 0x01, 0x19,
0x99, 0x3e, 0xcd, 0x14, 0xa5, 0xec, 0xd8, 0x9b, 0x89, 0xde, 0xe9, 0x35, 0x6c, 0xfe, 0x39, 0xa8, 0x99, 0x21, 0x3c, 0x2d, 0x2e, 0xa9, 0x06, 0x22, 0xc1, 0x16, 0xac, 0xa8, 0x80, 0x21, 0x8f, 0x13,
0x25, 0x04, 0xe5, 0x77, 0x37, 0xe5, 0xb3, 0x7e, 0x1e, 0x1a, 0x51, 0xdd, 0xcf, 0xb3, 0xf9, 0x3f, 0x23, 0xe5, 0x5e, 0xb3, 0x2c, 0xc3, 0x86, 0x3c, 0xca, 0xb3, 0x64, 0x1f, 0x2a, 0x73, 0x30, 0x9e,
0x72, 0xc0, 0xe6, 0x65, 0xf5, 0x2f, 0xb3, 0x0b, 0xf3, 0x8c, 0x99, 0x4b, 0x61, 0xcc, 0xff, 0x67, 0x3b, 0x64, 0x75, 0x0a, 0x7b, 0x2c, 0xd3, 0x02, 0x51, 0x93, 0x28, 0xf8, 0xfc, 0x23, 0x58, 0x53,
0xfa, 0xc3, 0xfb, 0xb0, 0xec, 0xf3, 0x81, 0x77, 0xc1, 0x7d, 0x2d, 0xa2, 0x4a, 0x8b, 0xb3, 0x1e, 0xcb, 0x23, 0x59, 0x82, 0x22, 0x21, 0x4c, 0x2e, 0x0e, 0xbd, 0xc8, 0x4f, 0xe0, 0xf6, 0x4c, 0x9f,
0x21, 0x54, 0x2f, 0x3e, 0x9d, 0xcd, 0xec, 0x28, 0x25, 0x0e, 0x9c, 0x68, 0x0a, 0xd4, 0x4c, 0x82, 0x66, 0x8a, 0x52, 0x06, 0xef, 0xcd, 0x44, 0xef, 0xf4, 0x1a, 0x36, 0xff, 0x1c, 0xd4, 0x12, 0x82,
0xc7, 0x31, 0x2c, 0xd8, 0xee, 0xe0, 0xdc, 0xf3, 0xa5, 0x1c, 0xfc, 0x95, 0x6f, 0xbd, 0x7d, 0x6e, 0xf2, 0xbb, 0x9b, 0xf2, 0x59, 0x3f, 0x0f, 0x8d, 0xa8, 0xee, 0xe7, 0xd9, 0xfc, 0x9f, 0x39, 0x60,
0x35, 0xb1, 0x3c, 0x6a, 0x6d, 0xa6, 0xac, 0xcc, 0xf8, 0x08, 0x2a, 0x1a, 0x98, 0x95, 0xa1, 0x70, 0xf3, 0xb2, 0xfa, 0x97, 0xd9, 0x85, 0x79, 0xc6, 0xcc, 0xa5, 0x30, 0xe6, 0xff, 0x33, 0xfd, 0x21,
0xd0, 0x3e, 0xdc, 0xee, 0xd6, 0x6f, 0xb0, 0x1a, 0x94, 0xcd, 0xd6, 0x4e, 0xf7, 0x59, 0xcb, 0x6c, 0x76, 0x37, 0x6a, 0x51, 0x5f, 0x5a, 0x9c, 0xf5, 0x08, 0xa1, 0x7a, 0xf1, 0xe9, 0x6c, 0xf6, 0x49,
0xed, 0xd6, 0x33, 0xac, 0x04, 0xf9, 0x83, 0x6e, 0xaf, 0x5f, 0xcf, 0x1a, 0x9b, 0xd0, 0x90, 0x35, 0x29, 0x71, 0x28, 0x46, 0x53, 0xa0, 0x66, 0x92, 0x50, 0x8e, 0x61, 0xc1, 0x76, 0x07, 0xe7, 0x9e,
0xce, 0x07, 0x35, 0x7e, 0x2b, 0x1f, 0xb9, 0x0b, 0x11, 0x29, 0x4d, 0xf4, 0x1f, 0x42, 0x55, 0x57, 0x2f, 0xe5, 0xe0, 0xaf, 0x7c, 0xeb, 0xed, 0x73, 0xab, 0x89, 0xe5, 0x51, 0x6b, 0x33, 0x65, 0x65,
0x6f, 0x24, 0x47, 0xcc, 0x04, 0xf5, 0x85, 0x71, 0xee, 0x69, 0xb2, 0x7a, 0x07, 0x28, 0xa4, 0x3b, 0xc6, 0x47, 0x50, 0xd1, 0xc0, 0xac, 0x0c, 0x85, 0x83, 0xf6, 0xe1, 0x76, 0xb7, 0x7e, 0x83, 0xd5,
0x8c, 0x8a, 0x65, 0x13, 0x7a, 0x6b, 0x4a, 0xf8, 0x10, 0x8d, 0x9f, 0x04, 0x1b, 0xfe, 0x7f, 0xb0, 0xa0, 0x6c, 0xb6, 0x76, 0xba, 0xcf, 0x5a, 0x66, 0x6b, 0xb7, 0x9e, 0x61, 0x25, 0xc8, 0x1f, 0x74,
0x98, 0x74, 0xe0, 0x4b, 0x89, 0x94, 0x66, 0x70, 0x8a, 0xd2, 0x09, 0x8f, 0x3e, 0xfb, 0x09, 0xd4, 0x7b, 0xfd, 0x7a, 0xd6, 0xd8, 0x84, 0x86, 0xac, 0x71, 0x3e, 0xf0, 0xf2, 0x5b, 0xf9, 0xc8, 0x5d,
0x67, 0x03, 0x00, 0x52, 0x79, 0xbe, 0xa6, 0xfc, 0x92, 0x93, 0x8c, 0x09, 0xb0, 0x7d, 0x58, 0x4d, 0x88, 0x48, 0x69, 0xa2, 0xff, 0x10, 0xaa, 0xba, 0x7a, 0x23, 0x39, 0x62, 0x26, 0xf1, 0x40, 0x18,
0x53, 0xf0, 0x90, 0x3f, 0xae, 0x77, 0x52, 0xb0, 0x79, 0x25, 0x8e, 0x7d, 0x26, 0x03, 0x41, 0x05, 0xe7, 0x9e, 0x26, 0xab, 0x77, 0x80, 0xc2, 0xce, 0xc3, 0xa8, 0x58, 0x36, 0xa1, 0xb7, 0xa6, 0x84,
0x9c, 0xfe, 0x77, 0x92, 0xed, 0x6b, 0x83, 0xbd, 0x45, 0xff, 0xb4, 0x90, 0xd0, 0x05, 0x40, 0x0c, 0x38, 0xd1, 0xf8, 0x49, 0xb0, 0xe1, 0xff, 0x07, 0x8b, 0xc9, 0x20, 0x83, 0x94, 0x48, 0x69, 0x06,
0x63, 0x75, 0xa8, 0x76, 0x8f, 0x5a, 0x1d, 0x6b, 0x67, 0xbf, 0xd9, 0xe9, 0xb4, 0x0e, 0xea, 0x37, 0xa7, 0x28, 0x9d, 0x88, 0x3a, 0xb0, 0x9f, 0x40, 0x7d, 0x36, 0x48, 0x21, 0x95, 0xe7, 0x6b, 0xca,
0x18, 0x83, 0x45, 0x0c, 0x66, 0xef, 0x46, 0xb0, 0x8c, 0x80, 0xc9, 0x80, 0x9c, 0x82, 0x65, 0xd9, 0x2f, 0x39, 0xc9, 0xb8, 0x05, 0xdb, 0x87, 0xd5, 0x34, 0x05, 0x0f, 0xf9, 0xe3, 0x7a, 0x27, 0x05,
0x2a, 0xd4, 0xdb, 0x9d, 0x19, 0x68, 0x8e, 0x35, 0x60, 0xf5, 0xa8, 0x45, 0xf1, 0xef, 0x44, 0xbd, 0x9b, 0x57, 0xe2, 0xd8, 0x67, 0x32, 0x58, 0x55, 0xc0, 0xe9, 0x7f, 0x27, 0xd9, 0xbe, 0x36, 0xd8,
0x79, 0x61, 0x34, 0xc8, 0xd7, 0x15, 0x46, 0xc3, 0x57, 0xf6, 0x68, 0xc4, 0x43, 0xb9, 0x0e, 0x94, 0x5b, 0xf4, 0x4f, 0x0b, 0x5b, 0x5d, 0x00, 0xc4, 0x30, 0x56, 0x87, 0x6a, 0xf7, 0xa8, 0xd5, 0xb1,
0x2e, 0xfd, 0x77, 0x32, 0xb0, 0x36, 0x83, 0x88, 0xcf, 0x86, 0x90, 0x26, 0x9d, 0xd4, 0xa1, 0xab, 0x76, 0xf6, 0x9b, 0x9d, 0x4e, 0xeb, 0xa0, 0x7e, 0x83, 0x31, 0x58, 0xc4, 0x80, 0xfb, 0x6e, 0x04,
0x08, 0x54, 0xab, 0xe9, 0x7d, 0x58, 0x8e, 0x1c, 0x4f, 0x33, 0xbb, 0x52, 0x3d, 0x42, 0x28, 0xe2, 0xcb, 0x08, 0x98, 0x0c, 0x1a, 0x2a, 0x58, 0x96, 0xad, 0x42, 0xbd, 0xdd, 0x99, 0x81, 0xe6, 0x58,
0x0f, 0x61, 0x45, 0xf3, 0x5f, 0xcd, 0xc8, 0x0a, 0xa6, 0xa1, 0x64, 0x01, 0x63, 0x23, 0xca, 0xc1, 0x03, 0x56, 0x8f, 0x5a, 0x14, 0xa3, 0x4f, 0xd4, 0x9b, 0x17, 0x46, 0x83, 0x7c, 0x5d, 0x61, 0x34,
0x9f, 0xe9, 0xf5, 0x10, 0xd6, 0x67, 0x11, 0x71, 0x9c, 0x2c, 0xd9, 0x5f, 0xf5, 0xc8, 0x1e, 0xcc, 0x7c, 0x65, 0x8f, 0x46, 0x3c, 0x94, 0xeb, 0x40, 0xe9, 0xd2, 0x7f, 0x27, 0x03, 0x6b, 0x33, 0x88,
0x30, 0x42, 0xb2, 0xb7, 0xfa, 0x84, 0xab, 0xe6, 0x7f, 0x77, 0x01, 0xd8, 0x97, 0x53, 0xee, 0x5f, 0xd8, 0xd3, 0x4f, 0x9a, 0x74, 0x52, 0x87, 0xae, 0x22, 0x50, 0xad, 0xa6, 0xf7, 0x61, 0x39, 0x72,
0xe1, 0xd9, 0x8f, 0xe0, 0x55, 0x09, 0x8e, 0xca, 0xd3, 0x92, 0x7d, 0xad, 0xf3, 0x5d, 0x69, 0xe7, 0x3c, 0xcd, 0xec, 0x4a, 0xf5, 0x08, 0xa1, 0x88, 0x3f, 0x84, 0x15, 0xcd, 0x7f, 0x35, 0x23, 0x2b,
0xab, 0xf2, 0xaf, 0x3e, 0x5f, 0x55, 0x78, 0xd5, 0xf9, 0xaa, 0xb7, 0xa1, 0xe6, 0x9c, 0xb9, 0x9e, 0x98, 0x86, 0x92, 0x05, 0x8c, 0x8d, 0xe8, 0x9c, 0xc0, 0x4c, 0xaf, 0x87, 0xb0, 0x3e, 0x8b, 0x88,
0x10, 0x85, 0x42, 0x13, 0x0e, 0x1a, 0x0b, 0x77, 0x73, 0xf7, 0xaa, 0x66, 0x55, 0x02, 0x85, 0x1e, 0x63, 0x79, 0xc9, 0xfe, 0xaa, 0x47, 0xf6, 0x60, 0x86, 0x11, 0x92, 0xbd, 0xd5, 0x27, 0x5c, 0x35,
0x1c, 0xb0, 0xc7, 0x31, 0x11, 0x1f, 0x9e, 0xe1, 0x19, 0x43, 0x5d, 0x08, 0xb6, 0x86, 0x67, 0x5c, 0xff, 0xbb, 0x0b, 0xc0, 0xbe, 0x9c, 0x72, 0xff, 0x0a, 0xcf, 0xa7, 0x04, 0xaf, 0x4a, 0xc2, 0x54,
0x3a, 0x96, 0xd0, 0xd2, 0x50, 0x85, 0x05, 0x3c, 0x60, 0xef, 0xc0, 0x62, 0xe0, 0x4d, 0x85, 0x61, 0x9e, 0x96, 0xec, 0x6b, 0x9d, 0x41, 0x4b, 0x3b, 0x03, 0x96, 0x7f, 0xf5, 0x19, 0xb0, 0xc2, 0xab,
0xa1, 0x86, 0x81, 0x02, 0x65, 0x55, 0x82, 0x1e, 0xa9, 0xb0, 0xe9, 0xca, 0x34, 0xe0, 0xd6, 0xd8, 0xce, 0x80, 0xbd, 0x0d, 0x35, 0xe7, 0xcc, 0xf5, 0x84, 0x28, 0x14, 0x9a, 0x70, 0xd0, 0x58, 0xb8,
0x09, 0x02, 0xa1, 0x9e, 0x0d, 0x3c, 0x37, 0xf4, 0xbd, 0x91, 0x8c, 0x7d, 0x2d, 0x4f, 0x03, 0x7e, 0x9b, 0xbb, 0x57, 0x35, 0xab, 0x12, 0x28, 0xf4, 0xe0, 0x80, 0x3d, 0x8e, 0x89, 0xf8, 0xf0, 0x0c,
0x48, 0x98, 0x1d, 0x42, 0xb0, 0x8f, 0xe3, 0x2e, 0x4d, 0x6c, 0xc7, 0x0f, 0x1a, 0x80, 0x5d, 0x52, 0xcf, 0x41, 0xea, 0x42, 0xb0, 0x35, 0x3c, 0xe3, 0xd2, 0xb1, 0x84, 0x96, 0x86, 0x2a, 0x2c, 0xe0,
0x6f, 0x8a, 0xfa, 0xbb, 0xed, 0xf8, 0x51, 0x5f, 0xc4, 0x43, 0x30, 0x73, 0xee, 0xab, 0x32, 0x7b, 0x01, 0x7b, 0x07, 0x16, 0x03, 0x6f, 0x2a, 0x0c, 0x0b, 0x35, 0x0c, 0x14, 0xcc, 0xab, 0x12, 0xf4,
0xee, 0xeb, 0xcf, 0xa4, 0x9f, 0xfb, 0xaa, 0x61, 0xd5, 0x0f, 0x64, 0xd5, 0xf3, 0x53, 0xfc, 0xad, 0x48, 0x85, 0x76, 0x57, 0xa6, 0x01, 0xb7, 0xc6, 0x4e, 0x10, 0x08, 0xf5, 0x6c, 0xe0, 0xb9, 0xa1,
0x8e, 0x7f, 0xcd, 0x1f, 0x67, 0x5b, 0xfc, 0x36, 0xc7, 0xd9, 0x96, 0xd2, 0x8e, 0xb3, 0x7d, 0x04, 0xef, 0x8d, 0x64, 0x7c, 0x6e, 0x79, 0x1a, 0xf0, 0x43, 0xc2, 0xec, 0x10, 0x82, 0x7d, 0x1c, 0x77,
0x15, 0x3c, 0x68, 0x64, 0x9d, 0x3b, 0x42, 0x87, 0xa3, 0x58, 0x5e, 0x5d, 0x3f, 0x89, 0xb4, 0xef, 0x69, 0x62, 0x3b, 0x7e, 0xd0, 0x00, 0xec, 0x92, 0x7a, 0x53, 0xd4, 0xdf, 0x6d, 0xc7, 0x8f, 0xfa,
0xb8, 0xa1, 0x09, 0xbe, 0xfa, 0x19, 0xcc, 0x9f, 0x2c, 0x5b, 0xfe, 0x25, 0x9e, 0x2c, 0x93, 0x07, 0x22, 0x1e, 0x82, 0x99, 0xb3, 0x69, 0x95, 0xd9, 0xb3, 0x69, 0x7f, 0x26, 0xfd, 0x6c, 0x5a, 0x0d,
0xa2, 0xb6, 0xa0, 0xa4, 0xe6, 0x89, 0x31, 0xc8, 0x9f, 0xfa, 0xde, 0x58, 0xc5, 0x38, 0xc4, 0x6f, 0xab, 0x7e, 0x20, 0xab, 0x9e, 0x9f, 0xe2, 0x6f, 0x75, 0x44, 0x6d, 0xfe, 0xc8, 0xdd, 0xe2, 0xb7,
0xb6, 0x08, 0xd9, 0xd0, 0x93, 0x85, 0xb3, 0xa1, 0x67, 0xfc, 0xff, 0x50, 0xd1, 0x58, 0x8d, 0xbd, 0x39, 0x72, 0xb7, 0x94, 0x76, 0xe4, 0xee, 0x23, 0xa8, 0xe0, 0x61, 0x28, 0xeb, 0xdc, 0x11, 0x3a,
0x45, 0x7e, 0x49, 0x61, 0x9b, 0x49, 0xdd, 0x92, 0x46, 0xb1, 0x2c, 0xa1, 0xed, 0xa1, 0x90, 0x37, 0x1c, 0xc5, 0x1b, 0xeb, 0xfa, 0x69, 0xa9, 0x7d, 0xc7, 0x0d, 0x4d, 0xf0, 0xd5, 0xcf, 0x60, 0xfe,
0x43, 0xc7, 0xe7, 0x78, 0x06, 0xd4, 0xf2, 0xf9, 0x05, 0xf7, 0x03, 0x15, 0x73, 0xaa, 0x47, 0x08, 0xf4, 0xdb, 0xf2, 0x2f, 0xf1, 0xf4, 0x9b, 0x3c, 0xb4, 0xb5, 0x05, 0x25, 0x35, 0x4f, 0x8c, 0x41,
0x93, 0xe0, 0xc6, 0x6f, 0xc0, 0x4a, 0x62, 0x6e, 0xa5, 0x88, 0x78, 0x07, 0x16, 0x70, 0xdc, 0x54, 0xfe, 0xd4, 0xf7, 0xc6, 0x2a, 0xc6, 0x21, 0x7e, 0xb3, 0x45, 0xc8, 0x86, 0x9e, 0x2c, 0x9c, 0x0d,
0xd2, 0x40, 0xf2, 0x84, 0x97, 0xc4, 0xe1, 0x79, 0x57, 0x0a, 0x97, 0x59, 0x13, 0xdf, 0x3b, 0xc1, 0x3d, 0xe3, 0xff, 0x87, 0x8a, 0xc6, 0x6a, 0xec, 0x2d, 0xf2, 0x4b, 0x0a, 0xdb, 0x4c, 0xea, 0x96,
0x46, 0x32, 0x66, 0x45, 0xc2, 0x8e, 0x7c, 0xef, 0xc4, 0xf8, 0xc3, 0x1c, 0xe4, 0xf6, 0xbd, 0x89, 0x34, 0x8a, 0x65, 0x09, 0x6d, 0x0f, 0x85, 0xbc, 0x19, 0x3a, 0x3e, 0xc7, 0x73, 0xaa, 0x96, 0xcf,
0x9e, 0xc4, 0x96, 0x99, 0x4b, 0x62, 0x93, 0x06, 0xa7, 0x15, 0x19, 0x94, 0x52, 0x67, 0xc7, 0x40, 0x2f, 0xb8, 0x1f, 0xa8, 0x98, 0x53, 0x3d, 0x42, 0x98, 0x04, 0x37, 0x7e, 0x03, 0x56, 0x12, 0x73,
0x91, 0x32, 0x2a, 0xef, 0xc1, 0xa2, 0x90, 0x13, 0xa1, 0x27, 0x2c, 0xf6, 0x17, 0xb6, 0x4f, 0x0a, 0x2b, 0x45, 0xc4, 0x3b, 0xb0, 0x80, 0xe3, 0xa6, 0x12, 0x1b, 0x92, 0xa7, 0xd0, 0x24, 0x0e, 0xcf,
0x71, 0x8e, 0x16, 0x9f, 0x3d, 0x0e, 0xfb, 0xde, 0x1e, 0xc1, 0xd9, 0x2a, 0xe4, 0x22, 0xf3, 0x05, 0xe4, 0x52, 0xb8, 0xcc, 0x9a, 0xf8, 0xde, 0x09, 0x36, 0x92, 0x31, 0x2b, 0x12, 0x76, 0xe4, 0x7b,
0xd1, 0xe2, 0x91, 0xad, 0xc3, 0x02, 0x66, 0x33, 0x5f, 0xc9, 0xa0, 0xb7, 0x7c, 0x62, 0x3f, 0x80, 0x27, 0xc6, 0x1f, 0xe6, 0x20, 0xb7, 0xef, 0x4d, 0xf4, 0x44, 0xbb, 0xcc, 0x5c, 0xa2, 0x9d, 0x34,
0x95, 0x64, 0xbd, 0x24, 0x8a, 0xa4, 0x6e, 0xa4, 0x57, 0x8c, 0x32, 0xe9, 0x26, 0x08, 0x39, 0x42, 0x38, 0xad, 0xc8, 0xa0, 0x94, 0x3a, 0x3b, 0x06, 0x8a, 0x94, 0x51, 0x79, 0x0f, 0x16, 0x85, 0x9c,
0x34, 0x32, 0xb9, 0xe6, 0x94, 0x73, 0x44, 0x69, 0x42, 0xaf, 0x94, 0x10, 0x7a, 0x77, 0xa0, 0x12, 0x08, 0x3d, 0x61, 0xb1, 0xbf, 0xb0, 0x7d, 0x52, 0x88, 0x73, 0xb4, 0xf8, 0xec, 0x71, 0xd8, 0xf7,
0x8e, 0x2e, 0xac, 0x89, 0x7d, 0x35, 0xf2, 0xec, 0xa1, 0x5c, 0xdf, 0x10, 0x8e, 0x2e, 0x8e, 0x08, 0xf6, 0x08, 0xce, 0x56, 0x21, 0x17, 0x99, 0x2f, 0x88, 0x16, 0x8f, 0x6c, 0x1d, 0x16, 0x30, 0xe3,
0xc2, 0x3e, 0x04, 0x18, 0x4f, 0x26, 0x72, 0xed, 0x61, 0xf0, 0x23, 0x66, 0xe5, 0xc3, 0xa3, 0x23, 0xfa, 0x4a, 0x06, 0xe6, 0xe5, 0x13, 0xfb, 0x01, 0xac, 0x24, 0xeb, 0x25, 0x51, 0x24, 0x75, 0x23,
0x62, 0x39, 0xb3, 0x3c, 0x9e, 0x4c, 0xe8, 0x27, 0xdb, 0x85, 0xc5, 0xd4, 0x73, 0x9a, 0xb7, 0x55, 0xbd, 0x62, 0x94, 0x49, 0x37, 0x41, 0xc8, 0x11, 0xa2, 0x91, 0x09, 0x40, 0xa7, 0x9c, 0x23, 0x4a,
0xf2, 0xad, 0x37, 0xd9, 0x4a, 0x59, 0x9c, 0xb5, 0x81, 0x0e, 0xdb, 0xfc, 0x09, 0xb0, 0x3f, 0xe5, 0x13, 0x7a, 0xa5, 0x84, 0xd0, 0xbb, 0x03, 0x95, 0x70, 0x74, 0x61, 0x4d, 0xec, 0xab, 0x91, 0x67,
0x69, 0xc9, 0x3e, 0x94, 0xa3, 0xfe, 0xe9, 0x87, 0x0d, 0x31, 0x9d, 0xbe, 0x92, 0x38, 0x6c, 0xd8, 0x0f, 0xe5, 0xfa, 0x86, 0x70, 0x74, 0x71, 0x44, 0x10, 0xf6, 0x21, 0xc0, 0x78, 0x32, 0x91, 0x6b,
0x1c, 0x0e, 0x7d, 0x21, 0x17, 0x69, 0xc3, 0x8c, 0x44, 0x3e, 0x68, 0x3b, 0x66, 0x93, 0xe4, 0xbe, 0x0f, 0x83, 0x1f, 0x31, 0x2b, 0x1f, 0x1e, 0x1d, 0x11, 0xcb, 0x99, 0xe5, 0xf1, 0x64, 0x42, 0x3f,
0xf1, 0x5f, 0x33, 0x50, 0xa0, 0x93, 0x8f, 0xef, 0xc2, 0x12, 0xd1, 0x47, 0x09, 0x81, 0x32, 0x54, 0xd9, 0x2e, 0x2c, 0xa6, 0x9e, 0x25, 0xbd, 0xad, 0x12, 0x84, 0xbd, 0xc9, 0x56, 0xca, 0xe2, 0xac,
0x4e, 0xfb, 0x6e, 0x5f, 0xe6, 0x02, 0x8a, 0x65, 0xa1, 0x9d, 0x06, 0xcf, 0x46, 0x33, 0xaf, 0x9d, 0x0d, 0x74, 0xd8, 0xe6, 0x4f, 0x80, 0xfd, 0x29, 0x4f, 0x74, 0xf6, 0xa1, 0x1c, 0xf5, 0x4f, 0x3f,
0x08, 0xbf, 0x03, 0xe5, 0xa8, 0x69, 0x8d, 0x75, 0x4a, 0xaa, 0x65, 0xf6, 0x26, 0xe4, 0xcf, 0xbd, 0x10, 0x89, 0x29, 0xff, 0x95, 0xc4, 0x81, 0xc8, 0xe6, 0x70, 0xe8, 0x0b, 0xb9, 0x48, 0x1b, 0x66,
0x89, 0xf2, 0xfc, 0x40, 0x3c, 0x92, 0x26, 0xc2, 0xe3, 0xbe, 0x88, 0x36, 0xa8, 0xf3, 0xd2, 0x63, 0x24, 0xf2, 0x41, 0xdb, 0x31, 0x9b, 0x24, 0xf7, 0x8d, 0xff, 0x96, 0x81, 0x02, 0x9d, 0xce, 0x7c,
0x11, 0x35, 0x82, 0x6c, 0x30, 0xff, 0x8e, 0x0b, 0x29, 0xef, 0x78, 0x0c, 0x4b, 0x42, 0x0e, 0x68, 0x17, 0x96, 0x88, 0x3e, 0x4a, 0x5a, 0x94, 0xe1, 0x7c, 0xda, 0x77, 0xfb, 0x32, 0x5f, 0x51, 0x2c,
0x39, 0x2d, 0xd7, 0x6f, 0x9a, 0xdf, 0x17, 0x1a, 0xde, 0x60, 0x34, 0x1d, 0x72, 0xdd, 0xf7, 0x86, 0x0b, 0xed, 0xc4, 0x7a, 0x36, 0x9a, 0x79, 0xed, 0xd4, 0xfa, 0x1d, 0x28, 0x47, 0x4d, 0x6b, 0xac,
0x09, 0x70, 0x12, 0xae, 0x34, 0x6b, 0xe3, 0x77, 0x33, 0x24, 0x5f, 0x44, 0xbd, 0xec, 0x1e, 0xe4, 0x53, 0x52, 0x2d, 0xb3, 0x37, 0x21, 0x7f, 0xee, 0x4d, 0x94, 0xe7, 0x07, 0xe2, 0x91, 0x34, 0x11,
0xc5, 0xfe, 0x36, 0xe3, 0x89, 0x8f, 0xce, 0x35, 0x08, 0x3a, 0x13, 0x29, 0xc4, 0xd4, 0x61, 0xd4, 0x1e, 0xf7, 0x45, 0xb4, 0x41, 0x9d, 0x97, 0x1e, 0x8b, 0xa8, 0x11, 0x64, 0x83, 0xf9, 0x77, 0x5c,
0x5e, 0xaf, 0xbd, 0x66, 0x56, 0xdc, 0xe9, 0x38, 0x72, 0x5d, 0x7d, 0x4f, 0xbd, 0xd6, 0x8c, 0xdb, 0x48, 0x79, 0xc7, 0x63, 0x58, 0x12, 0x72, 0x40, 0xcb, 0x29, 0xb8, 0x7e, 0xd3, 0xfc, 0xbe, 0xd0,
0x87, 0xde, 0x3e, 0x5a, 0xa6, 0x5b, 0x5a, 0x26, 0x5d, 0x3e, 0xb1, 0x63, 0x2a, 0x2d, 0x70, 0x78, 0xf0, 0x06, 0xa3, 0xe9, 0x90, 0xeb, 0xbe, 0x37, 0x4c, 0xd2, 0x93, 0x70, 0xa5, 0x59, 0x1b, 0xbf,
0xc6, 0xb5, 0x0c, 0xba, 0xdf, 0xcb, 0x42, 0x2d, 0xd1, 0x23, 0x4c, 0x25, 0x14, 0x1b, 0x00, 0x05, 0x9b, 0x21, 0xf9, 0x22, 0xea, 0x65, 0xf7, 0x20, 0xef, 0xaa, 0xfc, 0x83, 0x58, 0x8f, 0x8b, 0xce,
0x96, 0xe4, 0x7c, 0x83, 0x00, 0x49, 0x45, 0x5d, 0x1b, 0xa7, 0x6c, 0x62, 0x9c, 0xa2, 0xe4, 0x9c, 0x5e, 0x08, 0x3a, 0x13, 0x29, 0xc4, 0xd4, 0x61, 0xd4, 0x5e, 0xaf, 0xbd, 0x66, 0x56, 0xdc, 0xe9,
0x9c, 0x9e, 0x9c, 0xf3, 0x00, 0xca, 0xf1, 0x2d, 0x00, 0xc9, 0x2e, 0x89, 0xf6, 0xd4, 0xe9, 0x8e, 0x38, 0x72, 0x5d, 0x7d, 0x4f, 0xbd, 0xd6, 0x8c, 0xdb, 0x87, 0xde, 0x3e, 0x5a, 0xa6, 0x5b, 0x5a,
0x98, 0x28, 0x4e, 0xe7, 0x29, 0xe8, 0xe9, 0x3c, 0x5f, 0x68, 0xd9, 0x1f, 0x0b, 0x58, 0x8d, 0x91, 0xb6, 0x5f, 0x3e, 0xb1, 0x63, 0x2a, 0x2d, 0x70, 0x78, 0xc6, 0xb5, 0x2c, 0xbf, 0xdf, 0xcb, 0x42,
0x36, 0xa2, 0xbf, 0x94, 0xdc, 0x0f, 0xe3, 0x31, 0x54, 0xb4, 0xce, 0xeb, 0x59, 0x1e, 0x99, 0x44, 0x2d, 0xd1, 0x23, 0x4c, 0x77, 0x14, 0x1b, 0x00, 0x05, 0x96, 0xe4, 0x7c, 0x83, 0x00, 0x49, 0x45,
0x96, 0x47, 0x74, 0x3a, 0x2b, 0x1b, 0x9f, 0xce, 0x32, 0xfe, 0x52, 0x16, 0x6a, 0x62, 0x7d, 0x39, 0x5d, 0x1b, 0xa7, 0x6c, 0x62, 0x9c, 0xa2, 0x04, 0xa2, 0x9c, 0x9e, 0x40, 0xf4, 0x00, 0xca, 0xf1,
0xee, 0xd9, 0x91, 0x37, 0x72, 0x06, 0x18, 0x68, 0x8a, 0x56, 0x98, 0x54, 0xb4, 0xd4, 0x3a, 0x93, 0x4d, 0x05, 0xc9, 0x2e, 0x89, 0xf6, 0xd4, 0x09, 0x94, 0x98, 0x28, 0x4e, 0x39, 0x2a, 0xe8, 0x29,
0x4b, 0x8c, 0xf4, 0x2c, 0xfd, 0x68, 0x2a, 0x09, 0xe9, 0xe8, 0x68, 0xaa, 0x01, 0x35, 0x21, 0x18, 0x47, 0x5f, 0x68, 0x19, 0x2a, 0x0b, 0x58, 0x8d, 0x91, 0x36, 0xa2, 0xbf, 0x94, 0xfc, 0x14, 0xe3,
0x31, 0x64, 0x14, 0xdf, 0x25, 0x60, 0x56, 0x4e, 0x39, 0xdf, 0xb6, 0x03, 0x92, 0x90, 0x3f, 0x80, 0x31, 0x54, 0xb4, 0xce, 0xeb, 0x59, 0x1e, 0x99, 0x44, 0x96, 0x47, 0x74, 0x82, 0x2c, 0x1b, 0x9f,
0x15, 0x41, 0x83, 0xa7, 0xf2, 0xc6, 0xce, 0x68, 0xe4, 0x10, 0x25, 0x39, 0x9a, 0xea, 0xa7, 0x9c, 0x20, 0x33, 0xfe, 0x52, 0x16, 0x6a, 0x62, 0x7d, 0x39, 0xee, 0xd9, 0x91, 0x37, 0x72, 0x06, 0x18,
0x9b, 0x76, 0xc8, 0x0f, 0x05, 0x42, 0x5e, 0x3d, 0x50, 0x1a, 0x3a, 0x81, 0x7d, 0x12, 0x27, 0x7c, 0x68, 0x8a, 0x56, 0x98, 0x54, 0xb4, 0xd4, 0x3a, 0x93, 0x4b, 0x8c, 0xf4, 0x2c, 0xfd, 0xf8, 0x2c,
0x46, 0xcf, 0x18, 0x59, 0xb6, 0x2f, 0xb5, 0xc8, 0x32, 0x39, 0x20, 0x2a, 0x63, 0xfb, 0x32, 0x8a, 0x09, 0xe9, 0xe8, 0xf8, 0xac, 0x01, 0x35, 0x21, 0x18, 0x31, 0x64, 0x14, 0xdf, 0x77, 0x60, 0x56,
0x2c, 0xcf, 0x70, 0x52, 0x71, 0x96, 0x93, 0x8c, 0x7f, 0x9d, 0x85, 0x8a, 0xc6, 0x96, 0xaf, 0xb3, 0x4e, 0x39, 0xdf, 0xb6, 0x03, 0x92, 0x90, 0x3f, 0x80, 0x15, 0x41, 0x83, 0x27, 0x07, 0xc7, 0xce,
0xbb, 0xde, 0x9e, 0x0b, 0x0c, 0x96, 0xf5, 0x18, 0xe0, 0xdb, 0xc9, 0x26, 0x31, 0xf7, 0x85, 0x2e, 0x68, 0xe4, 0x10, 0x25, 0x39, 0x9a, 0xea, 0xa7, 0x9c, 0x9b, 0x76, 0xc8, 0x0f, 0x05, 0x42, 0x5e,
0x39, 0xd0, 0x18, 0xf8, 0x16, 0x94, 0xc5, 0xaa, 0xfb, 0x08, 0x5d, 0xb0, 0xf2, 0xea, 0x0f, 0x04, 0x8f, 0x50, 0x1a, 0x3a, 0x81, 0x7d, 0x12, 0x27, 0xa5, 0x46, 0xcf, 0x18, 0x59, 0xb6, 0x2f, 0xb5,
0x1c, 0x4d, 0x4f, 0x14, 0xf2, 0x21, 0x22, 0x0b, 0x31, 0xf2, 0xa1, 0x40, 0xbe, 0x2c, 0x05, 0xfb, 0xc8, 0x32, 0x39, 0x20, 0x2a, 0x63, 0xfb, 0x32, 0x8a, 0x2c, 0xcf, 0x70, 0x52, 0x71, 0x96, 0x93,
0x53, 0xa8, 0xca, 0x5a, 0x71, 0x4e, 0xf1, 0x75, 0xe3, 0x55, 0x9f, 0x98, 0x6f, 0xb3, 0x42, 0xcd, 0x8c, 0x7f, 0x9d, 0x85, 0x8a, 0xc6, 0x96, 0xaf, 0xb3, 0xbb, 0xde, 0x9e, 0x0b, 0x0c, 0x96, 0xf5,
0xd1, 0xe4, 0xcb, 0x82, 0x0f, 0x55, 0xc1, 0xd2, 0xab, 0x0a, 0x3e, 0xa4, 0x07, 0x63, 0x2f, 0xca, 0x18, 0xe0, 0xdb, 0xc9, 0x26, 0x31, 0xf7, 0x85, 0x2e, 0x62, 0xd0, 0x18, 0xf8, 0x16, 0x94, 0xc5,
0x6a, 0xc7, 0xbc, 0x2b, 0x25, 0xc7, 0x3e, 0x84, 0x15, 0x25, 0xae, 0xa6, 0xae, 0xed, 0xba, 0xde, 0xaa, 0xfb, 0x08, 0x5d, 0xb0, 0xf2, 0x7a, 0x12, 0x04, 0x1c, 0x4d, 0x4f, 0x14, 0xf2, 0x21, 0x22,
0xd4, 0x1d, 0x70, 0x75, 0x40, 0x8b, 0x49, 0xd4, 0x71, 0x8c, 0x31, 0x86, 0xd1, 0x69, 0x5f, 0xca, 0x0b, 0x31, 0xf2, 0xa1, 0x40, 0xbe, 0x2c, 0x4d, 0xfc, 0x53, 0xa8, 0xca, 0x5a, 0x71, 0x4e, 0xf1,
0xdf, 0xba, 0x0f, 0x05, 0xd2, 0xcb, 0x49, 0xf9, 0x48, 0x17, 0x5c, 0x44, 0xc2, 0xee, 0x41, 0x81, 0x75, 0xe3, 0x55, 0x9f, 0x98, 0x6f, 0xb3, 0x42, 0xcd, 0xd1, 0xe4, 0xcb, 0x82, 0x0f, 0x55, 0xc1,
0xd4, 0xf3, 0xec, 0xb5, 0xc2, 0x86, 0x08, 0x8c, 0x26, 0x30, 0x51, 0xf0, 0x90, 0x87, 0xbe, 0x33, 0xd2, 0xab, 0x0a, 0x3e, 0xa4, 0x07, 0x63, 0x2f, 0xca, 0xbc, 0xc7, 0xdc, 0x30, 0x25, 0xc7, 0x3e,
0x08, 0xe2, 0xb3, 0x5f, 0x05, 0x61, 0x7f, 0x52, 0x5b, 0xb1, 0xe7, 0x36, 0xa6, 0x44, 0x1b, 0x95, 0x84, 0x15, 0x25, 0xae, 0xa6, 0xae, 0xed, 0xba, 0xde, 0xd4, 0x1d, 0x70, 0x75, 0x88, 0x8c, 0x49,
0x68, 0xc4, 0xc6, 0xb4, 0x92, 0xa8, 0x43, 0xaa, 0x4b, 0x23, 0x58, 0x3f, 0xe1, 0xe1, 0x0b, 0xce, 0xd4, 0x71, 0x8c, 0x31, 0x86, 0xd1, 0x89, 0x64, 0xca, 0x31, 0xbb, 0x0f, 0x05, 0xd2, 0xcb, 0x49,
0x5d, 0x57, 0x28, 0x43, 0x03, 0xee, 0x86, 0xbe, 0x3d, 0x12, 0x93, 0x44, 0x6f, 0xf0, 0x68, 0xae, 0xf9, 0x48, 0x17, 0x5c, 0x44, 0xc2, 0xee, 0x41, 0x81, 0xd4, 0xf3, 0xec, 0xb5, 0xc2, 0x86, 0x08,
0xd6, 0xd8, 0x07, 0xb2, 0x1d, 0x17, 0xdc, 0x89, 0xca, 0x91, 0xec, 0x58, 0x3b, 0x49, 0xc3, 0x6d, 0x8c, 0x26, 0x30, 0x51, 0xf0, 0x90, 0x87, 0xbe, 0x33, 0x08, 0xe2, 0xf3, 0x69, 0x05, 0x61, 0x7f,
0xfe, 0x3a, 0x6c, 0x5e, 0x5f, 0x28, 0xe5, 0xdc, 0xe7, 0xbd, 0xa4, 0x54, 0x89, 0xe2, 0x80, 0x23, 0x52, 0x5b, 0xb1, 0xe7, 0x36, 0xa6, 0x44, 0x1b, 0x95, 0x68, 0xc4, 0xc6, 0xb4, 0x92, 0xa8, 0x43,
0xcf, 0x0e, 0xa9, 0x37, 0xba, 0x64, 0xe9, 0x40, 0x45, 0xc3, 0xc4, 0x7b, 0x7f, 0x06, 0x95, 0x3b, 0xaa, 0x4b, 0x23, 0x58, 0x3f, 0xe1, 0xe1, 0x0b, 0xce, 0x5d, 0x57, 0x28, 0x43, 0x03, 0xee, 0x86,
0x7a, 0x10, 0x3b, 0x92, 0xeb, 0xf9, 0x63, 0x8c, 0xbb, 0x0d, 0xad, 0xb8, 0xf6, 0x8c, 0xb9, 0x14, 0xbe, 0x3d, 0x12, 0x93, 0x44, 0x6f, 0xf0, 0x68, 0xae, 0xd6, 0xd8, 0x07, 0xb2, 0x1d, 0x17, 0xdc,
0xc3, 0xf1, 0xf8, 0xbb, 0xb1, 0x05, 0x4b, 0xa8, 0xd9, 0x6b, 0x1b, 0xdd, 0xcb, 0x94, 0x41, 0x63, 0x89, 0xca, 0x91, 0xec, 0x58, 0x3b, 0x49, 0xc3, 0x6d, 0xfe, 0x3a, 0x6c, 0x5e, 0x5f, 0x28, 0xe5,
0x15, 0x58, 0x87, 0x64, 0x97, 0x9e, 0xef, 0xf9, 0x9f, 0x72, 0x50, 0xd1, 0xc0, 0x62, 0x37, 0xc2, 0x6c, 0xea, 0xbd, 0xa4, 0x54, 0x89, 0xe2, 0x80, 0x23, 0xcf, 0x0e, 0xa9, 0x37, 0xba, 0x64, 0xe9,
0x04, 0x40, 0x6b, 0xe8, 0xd8, 0x63, 0xae, 0x82, 0x9c, 0x35, 0xb3, 0x86, 0xd0, 0x5d, 0x09, 0x14, 0x40, 0x45, 0xc3, 0xc4, 0x7b, 0x7f, 0x06, 0x95, 0x3b, 0x7a, 0x10, 0x3b, 0x92, 0xeb, 0xf9, 0x63,
0x7b, 0xb1, 0x7d, 0x71, 0x66, 0x79, 0xd3, 0xd0, 0x1a, 0xf2, 0x33, 0x9f, 0xab, 0x5e, 0x56, 0xed, 0x8c, 0xbb, 0x0d, 0xad, 0xb8, 0xf6, 0x8c, 0xb9, 0x14, 0xc3, 0xf1, 0x88, 0xbe, 0xb1, 0x05, 0x4b,
0x8b, 0xb3, 0xee, 0x34, 0xdc, 0x45, 0x98, 0xa0, 0x12, 0xb2, 0x44, 0xa3, 0x92, 0x39, 0x6b, 0x63, 0xa8, 0xd9, 0x6b, 0x1b, 0xdd, 0xcb, 0x94, 0x41, 0x63, 0x15, 0x58, 0x87, 0x64, 0x97, 0x9e, 0x6f,
0xfb, 0x32, 0xa6, 0x92, 0x89, 0x93, 0xc4, 0x99, 0xf9, 0x28, 0x71, 0x92, 0xac, 0xc5, 0xd9, 0x0d, 0xf7, 0x9f, 0x73, 0x50, 0xd1, 0xc0, 0x62, 0x37, 0xc2, 0x24, 0x45, 0x6b, 0xe8, 0xd8, 0x63, 0xae,
0xb4, 0x30, 0xbf, 0x81, 0x7e, 0x0c, 0xeb, 0xb4, 0x81, 0x4a, 0xd1, 0x6c, 0xcd, 0xac, 0xe4, 0x55, 0x82, 0x9c, 0x35, 0xb3, 0x86, 0xd0, 0x5d, 0x09, 0x14, 0x7b, 0xb1, 0x7d, 0x71, 0x66, 0x79, 0xd3,
0xc4, 0xca, 0x97, 0xd4, 0xd4, 0xde, 0xba, 0x78, 0x03, 0x25, 0x96, 0x02, 0xe7, 0x67, 0x24, 0xc8, 0xd0, 0x1a, 0xf2, 0x33, 0x9f, 0xab, 0x5e, 0x56, 0xed, 0x8b, 0xb3, 0xee, 0x34, 0xdc, 0x45, 0x98,
0x32, 0xa6, 0x78, 0x33, 0x59, 0x79, 0xcf, 0xf9, 0x19, 0x17, 0x94, 0x98, 0x1d, 0xa3, 0x53, 0xca, 0xa0, 0x12, 0xb2, 0x44, 0xa3, 0x92, 0x39, 0x6b, 0x63, 0xfb, 0x32, 0xa6, 0x92, 0xc9, 0x9d, 0xc4,
0x03, 0x16, 0x63, 0xc7, 0x9d, 0xa5, 0xb4, 0x2f, 0x93, 0x94, 0x65, 0x49, 0x69, 0x5f, 0xea, 0x94, 0x99, 0xf9, 0x28, 0xb9, 0x93, 0xac, 0xc5, 0xd9, 0x0d, 0xb4, 0x30, 0xbf, 0x81, 0x7e, 0x0c, 0xeb,
0x8f, 0x60, 0x63, 0xcc, 0x87, 0x8e, 0x9d, 0xac, 0xd6, 0x8a, 0x15, 0xb7, 0x55, 0x42, 0x6b, 0x65, 0xb4, 0x81, 0x4a, 0xd1, 0x6c, 0xcd, 0xac, 0xe4, 0x55, 0xc4, 0xca, 0x97, 0xd4, 0xd4, 0xde, 0xba,
0x7a, 0x64, 0xb8, 0x8b, 0xd1, 0xf8, 0x99, 0x37, 0x3e, 0x71, 0x48, 0x67, 0xa1, 0x7c, 0x9d, 0xbc, 0x78, 0x03, 0x25, 0x96, 0x02, 0xe7, 0x67, 0x24, 0xc8, 0x32, 0xa6, 0x78, 0x33, 0x59, 0x79, 0xcf,
0xb9, 0xe8, 0x4e, 0xc7, 0xbf, 0x86, 0x60, 0x51, 0x24, 0x30, 0x6a, 0x50, 0xe9, 0x85, 0xde, 0x44, 0xf9, 0x19, 0x17, 0x94, 0x98, 0x1d, 0xa3, 0x53, 0xca, 0x43, 0x20, 0x63, 0xc7, 0x9d, 0xa5, 0xb4,
0x4d, 0xf3, 0x22, 0x54, 0xe9, 0x51, 0x9e, 0x7a, 0xbc, 0x05, 0x37, 0x51, 0x24, 0xf4, 0xbd, 0x89, 0x2f, 0x93, 0x94, 0x65, 0x49, 0x69, 0x5f, 0xea, 0x94, 0x8f, 0x60, 0x63, 0xcc, 0x87, 0x8e, 0x9d,
0x37, 0xf2, 0xce, 0xae, 0x12, 0x7e, 0xbc, 0x7f, 0x97, 0x81, 0x95, 0x04, 0x56, 0x8a, 0xd7, 0x8f, 0xac, 0xd6, 0x8a, 0x15, 0xb7, 0x55, 0x42, 0x6b, 0x65, 0x7a, 0x64, 0xb8, 0x8b, 0xd1, 0xf8, 0x99,
0x49, 0x9e, 0x45, 0x47, 0xd7, 0x68, 0x0d, 0x2e, 0x6b, 0x6b, 0x90, 0x08, 0x49, 0x98, 0xa9, 0xe3, 0x37, 0x3e, 0x71, 0x48, 0x67, 0xa1, 0x7c, 0x9d, 0xbc, 0xb9, 0xe8, 0x4e, 0xc7, 0xbf, 0x86, 0x60,
0x6c, 0xcd, 0xf8, 0x7a, 0x06, 0x55, 0x90, 0x44, 0x4a, 0x63, 0x5e, 0xa4, 0xc8, 0xf2, 0xea, 0xe2, 0x51, 0x24, 0x30, 0x6a, 0x50, 0xe9, 0x85, 0xde, 0x44, 0x4d, 0xf3, 0x22, 0x54, 0xe9, 0x51, 0x9e,
0x06, 0x55, 0xc5, 0xaf, 0xc8, 0x43, 0x30, 0x43, 0xf9, 0xca, 0xb9, 0xe4, 0x49, 0x02, 0xdd, 0xe7, 0xcc, 0xbc, 0x05, 0x37, 0x51, 0x24, 0xf4, 0xbd, 0x89, 0x37, 0xf2, 0xce, 0xae, 0x12, 0x7e, 0xbc,
0xa7, 0x7a, 0x10, 0x3b, 0x02, 0x03, 0xe3, 0x1f, 0x65, 0x00, 0xe2, 0xde, 0xe1, 0x59, 0x86, 0x48, 0x7f, 0x97, 0x81, 0x95, 0x04, 0x56, 0x8a, 0xd7, 0x8f, 0x49, 0x9e, 0x45, 0xc7, 0xeb, 0x68, 0x0d,
0x6f, 0xc9, 0x60, 0x1a, 0xaa, 0xa6, 0xa3, 0xbc, 0x05, 0xd5, 0x28, 0x63, 0x39, 0xd6, 0x84, 0x2a, 0x2e, 0x6b, 0x6b, 0x90, 0x08, 0x49, 0x98, 0xa9, 0x23, 0x77, 0xcd, 0xf8, 0x0a, 0x09, 0x55, 0x90,
0x0a, 0x26, 0xd4, 0xa1, 0xf7, 0x60, 0xe9, 0x6c, 0xe4, 0x9d, 0xa0, 0xc6, 0x2a, 0xf5, 0x16, 0xca, 0x44, 0x4a, 0x63, 0x5e, 0xa4, 0xc8, 0xf2, 0xea, 0x72, 0x09, 0x55, 0xc5, 0xaf, 0xc8, 0x83, 0x3a,
0x57, 0x5b, 0x24, 0xb0, 0xd2, 0x46, 0x62, 0xbd, 0x29, 0x9f, 0x9a, 0xd4, 0xac, 0x6b, 0x41, 0xc6, 0x43, 0xf9, 0xca, 0xb9, 0xe4, 0x69, 0x07, 0xdd, 0xe7, 0xa7, 0x7a, 0x10, 0x3b, 0x02, 0x03, 0xe3,
0xdf, 0xc8, 0x46, 0xa9, 0x9b, 0xf1, 0x48, 0xbc, 0xdc, 0xbc, 0xfb, 0x45, 0x72, 0x69, 0x5e, 0x16, 0x1f, 0x65, 0x00, 0xe2, 0xde, 0xe1, 0x79, 0x8b, 0x48, 0x6f, 0xc9, 0x60, 0xaa, 0xac, 0xa6, 0xa3,
0x5e, 0x7c, 0x0c, 0x8b, 0x3e, 0x6d, 0x4a, 0x6a, 0xc7, 0xca, 0xbf, 0x64, 0xc7, 0xaa, 0xf9, 0x09, 0xbc, 0x05, 0xd5, 0x28, 0xab, 0x3a, 0xd6, 0x84, 0x2a, 0x0a, 0x26, 0xd4, 0xa1, 0xf7, 0x60, 0xe9,
0x4d, 0xe7, 0xfb, 0x50, 0xb7, 0x87, 0x17, 0xdc, 0x0f, 0x1d, 0xf4, 0xd6, 0xa3, 0x7e, 0x2c, 0x93, 0x6c, 0xe4, 0x9d, 0xa0, 0xc6, 0x2a, 0xf5, 0x16, 0xca, 0x57, 0x5b, 0x24, 0xb0, 0xd2, 0x46, 0x62,
0x25, 0x35, 0x38, 0x2a, 0xa2, 0xef, 0xc1, 0x92, 0x3c, 0x89, 0x1b, 0x51, 0xca, 0x7b, 0x80, 0x62, 0xbd, 0x29, 0x9f, 0x9a, 0x78, 0xad, 0x6b, 0x41, 0xc6, 0xdf, 0xc8, 0x46, 0xa9, 0x9b, 0xf1, 0x48,
0xb0, 0x20, 0x34, 0xfe, 0xa9, 0xca, 0x15, 0x4d, 0xce, 0xee, 0xcb, 0x47, 0x45, 0x7f, 0xc3, 0xec, 0xbc, 0xdc, 0xbc, 0xfb, 0x45, 0x72, 0x69, 0x5e, 0x16, 0x5e, 0x7c, 0x0c, 0x8b, 0x3e, 0x6d, 0x4a,
0x7c, 0x00, 0x55, 0x32, 0x92, 0x0c, 0x02, 0x48, 0x79, 0x44, 0x40, 0x19, 0x02, 0x48, 0x0e, 0x6b, 0x6a, 0xc7, 0xca, 0xbf, 0x64, 0xc7, 0xaa, 0xf9, 0x09, 0x4d, 0xe7, 0xfb, 0x50, 0xb7, 0x87, 0x17,
0xfe, 0x75, 0x86, 0xd5, 0xf8, 0xf7, 0x19, 0x28, 0xee, 0x7b, 0x93, 0x7d, 0x87, 0xb2, 0xf9, 0x71, 0xdc, 0x0f, 0x1d, 0xf4, 0xd6, 0xa3, 0x7e, 0x2c, 0x93, 0x25, 0x35, 0x38, 0x2a, 0xa2, 0xef, 0xc1,
0x99, 0x44, 0x31, 0xaa, 0x05, 0xf1, 0x88, 0x89, 0x3f, 0x2f, 0x39, 0x70, 0x96, 0xaa, 0xe6, 0xd5, 0x92, 0x3c, 0x2d, 0x1c, 0x51, 0xca, 0xbb, 0x8a, 0x62, 0xb0, 0x20, 0x34, 0xfe, 0xa9, 0xca, 0x15,
0x92, 0x6a, 0xde, 0x17, 0x70, 0x0b, 0x43, 0x80, 0xbe, 0x37, 0xf1, 0x7c, 0xb1, 0x54, 0xed, 0x11, 0x4d, 0xce, 0xee, 0xcb, 0x47, 0x45, 0x7f, 0xc3, 0xec, 0x7c, 0x00, 0x55, 0x32, 0x92, 0x0c, 0x02,
0xa9, 0x7b, 0x9e, 0x1b, 0x9e, 0x2b, 0xd9, 0x79, 0xf3, 0x94, 0xf3, 0x23, 0x8d, 0xe2, 0x30, 0x22, 0x48, 0x79, 0x44, 0x40, 0x19, 0x02, 0x48, 0x0e, 0x6b, 0xfe, 0x75, 0x86, 0xd5, 0xf8, 0xf7, 0x19,
0xc0, 0x23, 0x9d, 0xa3, 0xf0, 0xc2, 0x22, 0x0b, 0x5d, 0xea, 0xa3, 0x24, 0x51, 0x97, 0x04, 0xa2, 0x28, 0xee, 0x7b, 0x93, 0x7d, 0x87, 0x4e, 0x1c, 0xe0, 0x32, 0x89, 0x62, 0x54, 0x0b, 0xe2, 0x11,
0x85, 0x70, 0xd4, 0x48, 0x8d, 0xcf, 0xa0, 0x1c, 0x39, 0x7b, 0xd8, 0xfb, 0x50, 0x3e, 0xf7, 0x26, 0x13, 0x7f, 0x5e, 0x72, 0x28, 0x2e, 0x55, 0xcd, 0xab, 0x25, 0xd5, 0xbc, 0x2f, 0xe0, 0x16, 0x86,
0xd2, 0x23, 0x94, 0x49, 0x1c, 0xca, 0x93, 0x6f, 0x6d, 0x96, 0xce, 0xe9, 0x47, 0x60, 0xfc, 0x61, 0x00, 0x7d, 0x6f, 0xe2, 0xf9, 0x62, 0xa9, 0xda, 0x23, 0x52, 0xf7, 0x3c, 0x37, 0x3c, 0x57, 0xb2,
0x11, 0x8a, 0x6d, 0xf7, 0xc2, 0x73, 0x06, 0x98, 0x6d, 0x3a, 0xe6, 0x63, 0x4f, 0x5d, 0x07, 0x20, 0xf3, 0xe6, 0x29, 0xe7, 0x47, 0x1a, 0xc5, 0x61, 0x44, 0x80, 0xc7, 0x4e, 0x47, 0xe1, 0x85, 0x45,
0x7e, 0x63, 0x6e, 0x56, 0x7c, 0x9b, 0x4f, 0x4e, 0xe6, 0x66, 0x45, 0xf7, 0xf8, 0xac, 0xc1, 0x82, 0x16, 0xba, 0xd4, 0x47, 0x49, 0xa2, 0x2e, 0x09, 0x44, 0x0b, 0xe1, 0xa8, 0x91, 0x1a, 0x9f, 0x41,
0xaf, 0x5f, 0xc7, 0x53, 0xf0, 0x31, 0xff, 0x3d, 0xda, 0x2f, 0x0b, 0xda, 0x25, 0x0b, 0xa2, 0x2e, 0x39, 0x72, 0xf6, 0xb0, 0xf7, 0xa1, 0x7c, 0xee, 0x4d, 0xa4, 0x47, 0x28, 0x93, 0x38, 0x38, 0x28,
0xba, 0x26, 0x06, 0x87, 0x8c, 0x8e, 0x67, 0x96, 0x11, 0x82, 0x03, 0xf6, 0x06, 0x14, 0xe5, 0x19, 0xdf, 0xda, 0x2c, 0x9d, 0xd3, 0x8f, 0xc0, 0xf8, 0xc3, 0x22, 0x14, 0xdb, 0xee, 0x85, 0xe7, 0x0c,
0x38, 0x3a, 0xb4, 0x44, 0x09, 0xeb, 0x12, 0x84, 0xdc, 0xe0, 0x73, 0x0a, 0xe1, 0x46, 0x8a, 0x6c, 0x30, 0xdb, 0x74, 0xcc, 0xc7, 0x9e, 0xba, 0xb2, 0x40, 0xfc, 0xc6, 0xdc, 0xac, 0xf8, 0xc6, 0xa1,
0xce, 0xac, 0x2a, 0xe0, 0xae, 0xe0, 0xb5, 0x3b, 0x50, 0x21, 0x7a, 0x22, 0x29, 0xc9, 0x24, 0x4d, 0x9c, 0xcc, 0xcd, 0x8a, 0xee, 0x1a, 0x5a, 0x83, 0x05, 0x5f, 0xbf, 0x32, 0xa8, 0xe0, 0x63, 0x8e,
0x04, 0x21, 0x41, 0xca, 0xad, 0x56, 0xe5, 0xd4, 0x5b, 0xad, 0x30, 0x9d, 0x38, 0x92, 0xb2, 0xf4, 0x7e, 0xb4, 0x5f, 0x16, 0xb4, 0x8b, 0x20, 0x44, 0x5d, 0x74, 0x95, 0x0d, 0x0e, 0x19, 0x1d, 0x21,
0x8a, 0x40, 0x77, 0x19, 0x69, 0x70, 0x75, 0x55, 0x9c, 0xf4, 0xa9, 0xd0, 0x69, 0x65, 0xe5, 0x53, 0x2d, 0x23, 0x04, 0x07, 0xec, 0x0d, 0x28, 0xca, 0x73, 0x7a, 0x74, 0xb0, 0x8a, 0x92, 0xea, 0x25,
0x79, 0x1b, 0x6a, 0xa7, 0xf6, 0x68, 0x74, 0x62, 0x0f, 0x9e, 0x93, 0x2b, 0xa0, 0x4a, 0xde, 0x4f, 0x08, 0xb9, 0xc1, 0xe7, 0x14, 0xc2, 0x8d, 0x14, 0xd9, 0x9c, 0x59, 0x55, 0xc0, 0x5d, 0xc1, 0x6b,
0x05, 0x44, 0x5f, 0xc0, 0x1d, 0xa8, 0x68, 0xb3, 0x8c, 0x19, 0x98, 0x79, 0x13, 0xe2, 0xf9, 0x9d, 0x77, 0xa0, 0x42, 0xf4, 0x44, 0x52, 0x92, 0x49, 0x9a, 0x08, 0x42, 0x82, 0x94, 0x9b, 0xb7, 0xca,
0xf5, 0xf0, 0x2d, 0xbe, 0x86, 0x87, 0x4f, 0xcb, 0x44, 0x5d, 0x4a, 0x66, 0xa2, 0xde, 0x42, 0x69, 0xa9, 0x37, 0x6f, 0x61, 0x3a, 0x71, 0x24, 0x65, 0xe9, 0x15, 0x81, 0xee, 0x5b, 0xd2, 0xe0, 0xea,
0x2a, 0x53, 0x0e, 0xeb, 0x74, 0x71, 0x8e, 0x3d, 0x1c, 0x62, 0xca, 0x21, 0x3a, 0xb2, 0x68, 0xf0, 0x3a, 0x3b, 0xe9, 0x53, 0xa1, 0x13, 0xd5, 0xca, 0xa7, 0xf2, 0x36, 0xd4, 0x4e, 0xed, 0xd1, 0xe8,
0x08, 0xbf, 0x4c, 0xb6, 0x04, 0xc1, 0x88, 0xe4, 0x36, 0xb9, 0xa9, 0x27, 0xb6, 0x33, 0xc4, 0x43, 0xc4, 0x1e, 0x3c, 0x27, 0x57, 0x40, 0x95, 0xbc, 0x9f, 0x0a, 0x88, 0xbe, 0x80, 0x3b, 0x50, 0xd1,
0x07, 0xe4, 0x3d, 0x28, 0xda, 0xe3, 0xf0, 0xc8, 0x76, 0x86, 0xec, 0x2e, 0x54, 0x15, 0x1a, 0x77, 0x66, 0x19, 0x33, 0x30, 0xf3, 0x26, 0xc4, 0xf3, 0x3b, 0xeb, 0xe1, 0x5b, 0x7c, 0x0d, 0x0f, 0x9f,
0xc7, 0x15, 0x1a, 0x7f, 0x89, 0x16, 0x7b, 0xa2, 0x01, 0xb5, 0x88, 0x62, 0x1c, 0x1f, 0x39, 0xae, 0x96, 0x89, 0xba, 0x94, 0xcc, 0x44, 0xbd, 0x85, 0xd2, 0x54, 0xa6, 0x1c, 0xd6, 0xe9, 0x72, 0x1f,
0x48, 0x12, 0xe4, 0x83, 0x8f, 0x30, 0xcb, 0x27, 0xe4, 0x78, 0xb0, 0x78, 0xf1, 0xe1, 0xad, 0x28, 0x7b, 0x38, 0xc4, 0x94, 0x43, 0x74, 0x64, 0xd1, 0xe0, 0x11, 0x7e, 0x99, 0x6c, 0x09, 0x82, 0x11,
0xf9, 0x00, 0xb9, 0x54, 0xfd, 0xa7, 0xe0, 0x18, 0x51, 0x0a, 0xe5, 0x8e, 0x62, 0x74, 0xeb, 0x09, 0xc9, 0x6d, 0x72, 0x53, 0x4f, 0x6c, 0x67, 0x88, 0x07, 0x23, 0xc8, 0x7b, 0x50, 0xb4, 0xc7, 0xe1,
0xfd, 0x57, 0x92, 0x62, 0x8c, 0x8e, 0x08, 0xd8, 0x67, 0x9a, 0xfd, 0xda, 0x40, 0xe2, 0x37, 0x66, 0x91, 0xed, 0x0c, 0xd9, 0x5d, 0xa8, 0x2a, 0x34, 0xee, 0x8e, 0x2b, 0x34, 0xfe, 0x12, 0x2d, 0xf6,
0xea, 0xbf, 0xee, 0x50, 0xd6, 0x6d, 0x00, 0x27, 0x10, 0xbb, 0x4c, 0xc0, 0xdd, 0x21, 0x9e, 0x11, 0x44, 0x03, 0x6a, 0x11, 0xc5, 0x38, 0x3e, 0x16, 0x5d, 0x91, 0x24, 0xc8, 0x07, 0x1f, 0x61, 0x96,
0x2e, 0x99, 0x65, 0x27, 0x78, 0x4a, 0x80, 0xef, 0xd6, 0xb0, 0x6d, 0x42, 0x55, 0x7f, 0x4d, 0x56, 0x4f, 0xc8, 0xf1, 0xf0, 0xf3, 0xe2, 0xc3, 0x5b, 0x51, 0xf2, 0x01, 0x72, 0xa9, 0xfa, 0x4f, 0xc1,
0x82, 0x7c, 0xf7, 0xa8, 0xd5, 0xa9, 0xdf, 0x60, 0x15, 0x28, 0xf6, 0x5a, 0xfd, 0xfe, 0x01, 0x46, 0x31, 0xa2, 0x14, 0xca, 0x1d, 0xc5, 0xe8, 0xd6, 0x13, 0xfa, 0xaf, 0x24, 0xc5, 0x18, 0x1d, 0x11,
0xfa, 0xaa, 0x50, 0x8a, 0x0e, 0x32, 0x66, 0xc5, 0x53, 0x73, 0x67, 0xa7, 0x75, 0xd4, 0x6f, 0xed, 0xb0, 0xcf, 0x34, 0xfb, 0xb5, 0x81, 0xc4, 0x6f, 0xcc, 0xd4, 0x7f, 0xdd, 0xc1, 0xb1, 0xdb, 0x00,
0xd6, 0x73, 0x3f, 0xcd, 0x97, 0xb2, 0xf5, 0x9c, 0xf1, 0x47, 0x39, 0xa8, 0x68, 0xa3, 0xf0, 0x72, 0x4e, 0x20, 0x76, 0x99, 0x80, 0xbb, 0x43, 0x3c, 0xc7, 0x5c, 0x32, 0xcb, 0x4e, 0xf0, 0x94, 0x00,
0x61, 0x7c, 0x1b, 0x00, 0x2d, 0xc9, 0x38, 0x23, 0x35, 0x6f, 0x96, 0x05, 0x84, 0x26, 0x5f, 0x8f, 0xdf, 0xad, 0x61, 0xdb, 0x84, 0xaa, 0xfe, 0x9a, 0xac, 0x04, 0xf9, 0xee, 0x51, 0xab, 0x53, 0xbf,
0x51, 0xe4, 0xe8, 0x46, 0x26, 0x15, 0xa3, 0x78, 0x1b, 0x6a, 0x74, 0xb9, 0x91, 0x1e, 0xaf, 0x2d, 0xc1, 0x2a, 0x50, 0xec, 0xb5, 0xfa, 0xfd, 0x03, 0x8c, 0xf4, 0x55, 0xa1, 0x14, 0x1d, 0xb6, 0xcc,
0x98, 0x55, 0x02, 0x4a, 0x51, 0x8d, 0x27, 0x9c, 0x91, 0x08, 0x8f, 0xd7, 0xc9, 0x4b, 0x4d, 0x08, 0x8a, 0xa7, 0xe6, 0xce, 0x4e, 0xeb, 0xa8, 0xdf, 0xda, 0xad, 0xe7, 0x7e, 0x9a, 0x2f, 0x65, 0xeb,
0x84, 0x07, 0xec, 0xf0, 0x74, 0x64, 0xe0, 0x8d, 0x2e, 0x38, 0x51, 0x90, 0x46, 0x58, 0x91, 0xb0, 0x39, 0xe3, 0x8f, 0x72, 0x50, 0xd1, 0x46, 0xe1, 0xe5, 0xc2, 0xf8, 0x36, 0x00, 0x5a, 0x92, 0x71,
0xbe, 0x3c, 0xab, 0x2d, 0xe5, 0xa1, 0x76, 0xc4, 0xb6, 0x60, 0x56, 0x09, 0x28, 0x1b, 0xfa, 0x81, 0x46, 0x6a, 0xde, 0x2c, 0x0b, 0x08, 0x4d, 0xbe, 0x1e, 0xa3, 0xc8, 0xd1, 0xad, 0x51, 0x2a, 0x46,
0x62, 0x20, 0xca, 0x5e, 0xd9, 0x98, 0xe7, 0x86, 0x04, 0xf3, 0x1c, 0xcc, 0xb9, 0x11, 0xcb, 0xc8, 0xf1, 0x36, 0xd4, 0xe8, 0x02, 0x26, 0x3d, 0x5e, 0x5b, 0x30, 0xab, 0x04, 0x94, 0xa2, 0x1a, 0x4f,
0x18, 0xdf, 0x9b, 0x2f, 0xf7, 0x6a, 0x77, 0x22, 0x7b, 0x1f, 0xd8, 0x78, 0x32, 0xb1, 0x52, 0x1c, 0x61, 0x23, 0x11, 0x1e, 0x01, 0x94, 0x17, 0xaf, 0x10, 0x08, 0x0f, 0x01, 0xe2, 0x09, 0xce, 0xc0,
0x7c, 0x79, 0x73, 0x69, 0x3c, 0x99, 0xf4, 0x35, 0xff, 0xd7, 0x77, 0xe0, 0x7b, 0xfc, 0x06, 0x58, 0x1b, 0x5d, 0x70, 0xa2, 0x20, 0x8d, 0xb0, 0x22, 0x61, 0x7d, 0x79, 0x9e, 0x5c, 0xca, 0x43, 0xed,
0x53, 0x2c, 0x60, 0xec, 0x62, 0x64, 0x8a, 0xc5, 0x62, 0x39, 0xa3, 0x8b, 0xe5, 0x14, 0xe9, 0x97, 0x18, 0x70, 0xc1, 0xac, 0x12, 0x50, 0x36, 0xf4, 0x03, 0xc5, 0x40, 0x94, 0xbd, 0xb2, 0x31, 0xcf,
0x4d, 0x95, 0x7e, 0x2f, 0x93, 0x13, 0xc6, 0x1e, 0x54, 0x8e, 0xb4, 0xab, 0xd3, 0xee, 0x8a, 0x1d, 0x0d, 0x09, 0xe6, 0x39, 0x98, 0x73, 0x23, 0x96, 0x91, 0x31, 0xbe, 0x37, 0x5f, 0xee, 0xd5, 0xee,
0x42, 0x5d, 0x9a, 0x46, 0x7b, 0x07, 0xf9, 0x14, 0x7d, 0x79, 0x57, 0x9a, 0xd6, 0x9b, 0xac, 0xd6, 0x44, 0xf6, 0x3e, 0xb0, 0xf1, 0x64, 0x62, 0xa5, 0x38, 0xf8, 0xf2, 0xe6, 0xd2, 0x78, 0x32, 0xe9,
0x1b, 0xe3, 0x1f, 0x64, 0xe8, 0xaa, 0x99, 0xa8, 0xf3, 0xf1, 0x6d, 0x6d, 0x2a, 0xfc, 0x16, 0x9f, 0x6b, 0xfe, 0xaf, 0xef, 0xc0, 0xf7, 0xf8, 0x0d, 0xb0, 0xa6, 0x58, 0xc0, 0xd8, 0xc5, 0xc8, 0x14,
0x84, 0xaf, 0xa8, 0xb0, 0x9b, 0x3c, 0xc4, 0x8e, 0x5d, 0xb3, 0xbc, 0xd3, 0xd3, 0x80, 0xab, 0x1c, 0x8b, 0xc5, 0x72, 0x46, 0x17, 0xcb, 0x29, 0xd2, 0x2f, 0x9b, 0x2a, 0xfd, 0x5e, 0x26, 0x27, 0x8c,
0x8f, 0x0a, 0xc2, 0xba, 0x08, 0x52, 0xca, 0xb7, 0xd0, 0xf0, 0x1d, 0xaa, 0x3f, 0x90, 0x89, 0x1d, 0x3d, 0xa8, 0x1c, 0x69, 0xd7, 0xbb, 0xdd, 0x15, 0x3b, 0x84, 0xba, 0xd8, 0x8d, 0xf6, 0x0e, 0xf2,
0x42, 0xf9, 0x3e, 0xb4, 0x2f, 0x65, 0xab, 0x81, 0x50, 0x41, 0x64, 0x7c, 0x40, 0x1d, 0x96, 0x8d, 0x29, 0xfa, 0xf2, 0x3e, 0x37, 0xad, 0x37, 0x59, 0xad, 0x37, 0xc6, 0x3f, 0xc8, 0xd0, 0x75, 0x38,
0x9e, 0x8d, 0xbf, 0x2b, 0x0f, 0xeb, 0xcf, 0x8e, 0xef, 0x7d, 0x28, 0x45, 0xb5, 0x26, 0x77, 0x58, 0x51, 0xe7, 0xe3, 0x1b, 0xe5, 0x54, 0xf8, 0x2d, 0x3e, 0xad, 0x5f, 0x51, 0x61, 0x37, 0x79, 0xd0,
0x45, 0x19, 0xe1, 0xc5, 0x3e, 0x8e, 0xce, 0x90, 0x44, 0x8f, 0x69, 0x71, 0x61, 0x8c, 0xa7, 0xad, 0x1e, 0xbb, 0x66, 0x79, 0xa7, 0xa7, 0x01, 0x57, 0x39, 0x1e, 0x15, 0x84, 0x75, 0x11, 0xa4, 0x94,
0xf5, 0xfa, 0x03, 0x60, 0xa7, 0x8e, 0x3f, 0x4b, 0x4c, 0x8b, 0xad, 0x8e, 0x18, 0x8d, 0xda, 0x38, 0x6f, 0xa1, 0xe1, 0x3b, 0x54, 0x7f, 0x20, 0x13, 0x3b, 0x84, 0xf2, 0x7d, 0x68, 0x5f, 0xca, 0x56,
0x86, 0x15, 0x25, 0x25, 0x34, 0x8b, 0x20, 0x39, 0x79, 0x99, 0x57, 0x08, 0xf9, 0xec, 0x9c, 0x90, 0x03, 0xa1, 0x82, 0xc8, 0xf8, 0x80, 0x3a, 0xd0, 0x1b, 0x3d, 0x1b, 0x7f, 0x57, 0x5e, 0x28, 0x30,
0x37, 0x7e, 0xb3, 0x00, 0x45, 0x75, 0x0d, 0x61, 0xda, 0xd5, 0x79, 0xe5, 0xe4, 0xd5, 0x79, 0x8d, 0x3b, 0xbe, 0xf7, 0xa1, 0x14, 0xd5, 0x9a, 0xdc, 0x61, 0x15, 0x65, 0x84, 0x17, 0xfb, 0x38, 0x3a,
0xc4, 0x85, 0x4a, 0x38, 0xf5, 0x72, 0xbf, 0x7f, 0x6f, 0x76, 0xcb, 0xd6, 0x62, 0x15, 0x89, 0x6d, 0x43, 0x12, 0x3d, 0xa6, 0xc5, 0x85, 0x31, 0x9e, 0xb6, 0xd6, 0xeb, 0x0f, 0x80, 0x9d, 0x3a, 0xfe,
0x5b, 0xc6, 0x2a, 0x0a, 0xc9, 0x58, 0x45, 0xda, 0x75, 0x82, 0xa4, 0x7a, 0xce, 0x5d, 0x27, 0x78, 0x2c, 0x31, 0x2d, 0xb6, 0x3a, 0x62, 0x34, 0x6a, 0xe3, 0x18, 0x56, 0x94, 0x94, 0xd0, 0x2c, 0x82,
0x0b, 0x48, 0x8f, 0xd0, 0x92, 0xdb, 0x4a, 0x08, 0x10, 0x7b, 0x4e, 0x52, 0xed, 0x28, 0xcd, 0xaa, 0xe4, 0xe4, 0x65, 0x5e, 0x21, 0xe4, 0xb3, 0x73, 0x42, 0xde, 0xf8, 0xcd, 0x02, 0x14, 0xd5, 0x55,
0x1d, 0xaf, 0xad, 0x12, 0x7c, 0x0c, 0x0b, 0x74, 0xbd, 0x86, 0x3c, 0xfc, 0xab, 0x36, 0x0e, 0x39, 0x89, 0x69, 0xd7, 0xfb, 0x95, 0x93, 0xd7, 0xfb, 0x35, 0x12, 0x97, 0x3e, 0xe1, 0xd4, 0xcb, 0xfd,
0x56, 0xea, 0x3f, 0x9d, 0x78, 0x30, 0x25, 0xad, 0x7e, 0x37, 0x57, 0x25, 0x71, 0x37, 0x97, 0x1e, 0xfe, 0xbd, 0xd9, 0x2d, 0x5b, 0x8b, 0x55, 0x24, 0xb6, 0x6d, 0x19, 0xab, 0x28, 0x24, 0x63, 0x15,
0x43, 0xa9, 0x26, 0x63, 0x28, 0xf7, 0xa0, 0x1e, 0x0d, 0x1c, 0x7a, 0x24, 0xdd, 0x40, 0x9e, 0x1c, 0x69, 0x57, 0x1e, 0x92, 0xea, 0x39, 0x77, 0xe5, 0xe1, 0x2d, 0x20, 0x3d, 0x42, 0x4b, 0x6e, 0x2b,
0x5c, 0x54, 0x70, 0x21, 0x0d, 0x3b, 0x41, 0xbc, 0xf1, 0x2d, 0x26, 0x36, 0x3e, 0x21, 0xab, 0x9a, 0x21, 0x40, 0xec, 0x39, 0x49, 0xb5, 0xa3, 0x34, 0xab, 0x76, 0xbc, 0xb6, 0x4a, 0xf0, 0x31, 0x2c,
0x61, 0xc8, 0xc7, 0x93, 0x50, 0x6d, 0x7c, 0xda, 0x0d, 0x8e, 0x34, 0xf3, 0x4b, 0x38, 0xf3, 0x6a, 0xd0, 0x15, 0x20, 0xf2, 0x80, 0xb2, 0xda, 0x38, 0xe4, 0x58, 0xa9, 0xff, 0x74, 0xe2, 0xc1, 0x94,
0x7a, 0x89, 0x3b, 0xb6, 0x61, 0xf1, 0xd4, 0x76, 0x46, 0x53, 0x9f, 0x5b, 0x3e, 0xb7, 0x03, 0xcf, 0xb4, 0xfa, 0xfd, 0x61, 0x95, 0xc4, 0xfd, 0x61, 0x7a, 0x0c, 0xa5, 0x9a, 0x8c, 0xa1, 0xdc, 0x83,
0xc5, 0xc5, 0x1f, 0xef, 0xc1, 0xf2, 0x15, 0xf7, 0x88, 0xc6, 0x44, 0x12, 0xb3, 0x76, 0xaa, 0x3f, 0x7a, 0x34, 0x70, 0xe8, 0x91, 0x74, 0x03, 0x79, 0xba, 0x71, 0x51, 0xc1, 0x85, 0x34, 0xec, 0x04,
0xe2, 0x21, 0x26, 0x7d, 0x24, 0xc4, 0x96, 0x25, 0xcf, 0x10, 0x53, 0xae, 0x4a, 0xbb, 0x63, 0xed, 0xf1, 0xc6, 0xb7, 0x98, 0xd8, 0xf8, 0x84, 0xac, 0x6a, 0x86, 0x21, 0x1f, 0x4f, 0x42, 0xb5, 0xf1,
0x1d, 0xb4, 0x9f, 0xec, 0xf7, 0xeb, 0x19, 0xf1, 0xd8, 0x3b, 0xde, 0xd9, 0x69, 0xb5, 0x76, 0x71, 0x69, 0xb7, 0x4c, 0xd2, 0xcc, 0x2f, 0xe1, 0xcc, 0xab, 0xe9, 0x25, 0xee, 0xd8, 0x86, 0xc5, 0x53,
0x0b, 0x03, 0x58, 0xd8, 0x6b, 0xb6, 0x0f, 0xe4, 0x06, 0x96, 0xaf, 0x17, 0x8c, 0x7f, 0x99, 0x85, 0xdb, 0x19, 0x4d, 0x7d, 0x6e, 0xf9, 0xdc, 0x0e, 0x3c, 0x17, 0x17, 0x7f, 0xbc, 0x07, 0xcb, 0x57,
0x8a, 0xf6, 0x36, 0xec, 0x51, 0x34, 0x09, 0x74, 0x03, 0xd4, 0xed, 0xf9, 0x37, 0xde, 0x52, 0x12, 0xdc, 0x23, 0x1a, 0x13, 0x49, 0xcc, 0xda, 0xa9, 0xfe, 0x88, 0x87, 0x98, 0xf4, 0x91, 0x10, 0x5b,
0x5e, 0x9b, 0x85, 0xe8, 0xae, 0xc6, 0xec, 0xb5, 0x77, 0x35, 0xb2, 0x77, 0x61, 0xc9, 0xa6, 0x1a, 0x96, 0x3c, 0xe7, 0x4c, 0xb9, 0x2a, 0xed, 0x8e, 0xb5, 0x77, 0xd0, 0x7e, 0xb2, 0xdf, 0xaf, 0x67,
0xa2, 0x41, 0x97, 0xce, 0x7d, 0x09, 0x96, 0x63, 0x8e, 0x19, 0xa4, 0xf1, 0x36, 0x25, 0xe8, 0xf2, 0xc4, 0x63, 0xef, 0x78, 0x67, 0xa7, 0xd5, 0xda, 0xc5, 0x2d, 0x0c, 0x60, 0x61, 0xaf, 0xd9, 0x3e,
0x2a, 0x69, 0x33, 0xda, 0xa9, 0x70, 0x6e, 0x8a, 0x72, 0x64, 0x64, 0x30, 0x3e, 0xda, 0xf0, 0xe5, 0x90, 0x1b, 0x58, 0xbe, 0x5e, 0x30, 0xfe, 0x65, 0x16, 0x2a, 0xda, 0xdb, 0xb0, 0x47, 0xd1, 0x24,
0x78, 0x29, 0xb4, 0x10, 0x41, 0x09, 0x0e, 0xaf, 0x9a, 0xd1, 0xb3, 0xf1, 0x09, 0x40, 0xfc, 0x3e, 0xd0, 0x2d, 0x55, 0xb7, 0xe7, 0xdf, 0x78, 0x4b, 0x49, 0x78, 0x6d, 0x16, 0xa2, 0xfb, 0x24, 0xb3,
0xc9, 0xe1, 0xbb, 0x91, 0x1c, 0xbe, 0x8c, 0x36, 0x7c, 0x59, 0xe3, 0x9f, 0x48, 0xd1, 0x25, 0xe7, 0xd7, 0xde, 0x27, 0xc9, 0xde, 0x85, 0x25, 0x9b, 0x6a, 0x88, 0x06, 0x5d, 0x3a, 0xf7, 0x25, 0x58,
0x22, 0x72, 0xf5, 0xfd, 0x00, 0x94, 0xf3, 0xd1, 0xc2, 0x24, 0xef, 0xc9, 0x88, 0x87, 0xea, 0x32, 0x8e, 0x39, 0x66, 0x90, 0xc6, 0xdb, 0x94, 0xa0, 0xcb, 0xab, 0xa4, 0xcd, 0x68, 0xa7, 0xc2, 0xb9,
0x83, 0x65, 0x89, 0x69, 0x47, 0x88, 0x39, 0x51, 0x9b, 0x9d, 0x17, 0xb5, 0x6f, 0x41, 0x55, 0x88, 0x29, 0xca, 0x91, 0x91, 0xc1, 0xf8, 0x68, 0xc3, 0x97, 0xe3, 0xa5, 0xd0, 0x74, 0xb2, 0x51, 0xe3,
0x59, 0xc9, 0x48, 0x81, 0x14, 0x57, 0x95, 0xb1, 0x7d, 0xa9, 0xda, 0x4e, 0xc8, 0xd8, 0xfc, 0x8c, 0xf0, 0xaa, 0x19, 0x3d, 0x1b, 0x9f, 0x00, 0xc4, 0xef, 0x93, 0x1c, 0xbe, 0x1b, 0xc9, 0xe1, 0xcb,
0x8c, 0xfd, 0x7b, 0x19, 0xba, 0x5b, 0x24, 0xee, 0x68, 0x2c, 0x64, 0xa3, 0x3a, 0x93, 0x42, 0x56, 0x68, 0xc3, 0x97, 0x35, 0xfe, 0x89, 0x14, 0x5d, 0x72, 0x2e, 0x22, 0x57, 0xdf, 0x0f, 0x40, 0x39,
0x92, 0x9a, 0x11, 0xfe, 0x1a, 0xc1, 0x99, 0x4d, 0x17, 0x9c, 0xe9, 0x22, 0x39, 0x97, 0x2a, 0x92, 0x1f, 0x2d, 0x4c, 0xf2, 0x9e, 0x8c, 0x78, 0xa8, 0x0e, 0x67, 0x2e, 0x4b, 0x4c, 0x3b, 0x42, 0xcc,
0x8d, 0x4d, 0x68, 0xec, 0x72, 0x31, 0x14, 0xcd, 0xd1, 0x68, 0x66, 0x2c, 0x8d, 0x5b, 0x70, 0x33, 0x89, 0xda, 0xec, 0xbc, 0xa8, 0x7d, 0x0b, 0xaa, 0x42, 0xcc, 0x4a, 0x46, 0x0a, 0xa4, 0xb8, 0xaa,
0x05, 0x27, 0xbd, 0x36, 0x5f, 0xc2, 0x5a, 0x93, 0x2e, 0x5d, 0xf8, 0xae, 0x0e, 0x4f, 0x1a, 0x0d, 0x8c, 0xed, 0x4b, 0xd5, 0x76, 0x42, 0xc6, 0xe6, 0x67, 0x64, 0xec, 0xdf, 0xcb, 0xd0, 0xfd, 0x27,
0x58, 0x9f, 0xad, 0x52, 0x36, 0xb6, 0x07, 0xcb, 0xbb, 0xfc, 0x64, 0x7a, 0x76, 0xc0, 0x2f, 0xe2, 0x71, 0x47, 0x63, 0x21, 0x1b, 0xd5, 0x99, 0x14, 0xb2, 0x92, 0xd4, 0x8c, 0xf0, 0xd7, 0x08, 0xce,
0x86, 0x18, 0xe4, 0x83, 0x73, 0xef, 0x85, 0x9c, 0x5c, 0xfc, 0x8d, 0x69, 0x99, 0x82, 0xc6, 0x0a, 0x6c, 0xba, 0xe0, 0x4c, 0x17, 0xc9, 0xb9, 0x54, 0x91, 0x6c, 0x6c, 0x42, 0x63, 0x97, 0x8b, 0xa1,
0x26, 0x7c, 0xa0, 0x3c, 0xf7, 0x08, 0xe9, 0x4d, 0xf8, 0xc0, 0x78, 0x04, 0x4c, 0xaf, 0x47, 0xce, 0x68, 0x8e, 0x46, 0x33, 0x63, 0x69, 0xdc, 0x82, 0x9b, 0x29, 0x38, 0xe9, 0xb5, 0xf9, 0x12, 0xd6,
0x84, 0x30, 0xab, 0xa6, 0x27, 0x56, 0x70, 0x15, 0x84, 0x7c, 0xac, 0x0e, 0x0d, 0x42, 0x30, 0x3d, 0x9a, 0x74, 0x31, 0xc4, 0x77, 0x75, 0x78, 0xd2, 0x68, 0xc0, 0xfa, 0x6c, 0x95, 0xb2, 0xb1, 0x3d,
0xe9, 0x11, 0xc4, 0x78, 0x0f, 0xaa, 0x47, 0xf6, 0x95, 0xc9, 0xbf, 0x91, 0x67, 0xf3, 0x36, 0xa0, 0x58, 0xde, 0xe5, 0x27, 0xd3, 0xb3, 0x03, 0x7e, 0x11, 0x37, 0xc4, 0x20, 0x1f, 0x9c, 0x7b, 0x2f,
0x38, 0xb1, 0xaf, 0x84, 0x3c, 0x8d, 0x82, 0x78, 0x88, 0x36, 0xfe, 0x59, 0x1e, 0x16, 0x88, 0x92, 0xe4, 0xe4, 0xe2, 0x6f, 0x4c, 0xcb, 0x14, 0x34, 0x56, 0x30, 0xe1, 0x03, 0xe5, 0xb9, 0x47, 0x48,
0xdd, 0xa5, 0x9b, 0x90, 0x1d, 0x17, 0xe5, 0x99, 0xda, 0x59, 0x34, 0xd0, 0xdc, 0xe6, 0x93, 0x9d, 0x6f, 0xc2, 0x07, 0xc6, 0x23, 0x60, 0x7a, 0x3d, 0x72, 0x26, 0x84, 0x59, 0x35, 0x3d, 0xb1, 0x82,
0xdf, 0x7c, 0xa4, 0xc7, 0x51, 0xdd, 0xea, 0xa4, 0xc2, 0x2d, 0xee, 0x74, 0xac, 0xae, 0x72, 0x4a, 0xab, 0x20, 0xe4, 0x63, 0x75, 0x68, 0x10, 0x82, 0xe9, 0x49, 0x8f, 0x20, 0xc6, 0x7b, 0x50, 0x3d,
0xde, 0x3c, 0x90, 0x8f, 0x6f, 0xd0, 0xa6, 0x53, 0xd7, 0xc9, 0x80, 0x78, 0x6c, 0xbc, 0x51, 0xef, 0xb2, 0xaf, 0x4c, 0xfe, 0x8d, 0x3c, 0x9b, 0xb7, 0x01, 0xc5, 0x89, 0x7d, 0x25, 0xe4, 0x69, 0x14,
0xd4, 0x9e, 0x2a, 0xf7, 0x1d, 0x1d, 0x94, 0x6a, 0x21, 0x16, 0xd5, 0x81, 0xd3, 0xa4, 0x85, 0x38, 0xc4, 0x43, 0xb4, 0xf1, 0xcf, 0xf2, 0xb0, 0x40, 0x94, 0xec, 0x2e, 0xdd, 0xd6, 0xec, 0xb8, 0x28,
0x67, 0x09, 0x96, 0x5e, 0x6d, 0x09, 0x92, 0x2b, 0xf2, 0x25, 0x96, 0x20, 0xbc, 0x86, 0x25, 0xf8, 0xcf, 0xd4, 0xce, 0xa2, 0x81, 0xe6, 0x36, 0x9f, 0xec, 0xfc, 0xe6, 0x23, 0x3d, 0x8e, 0xea, 0xe6,
0x1a, 0xc1, 0xe8, 0x9b, 0x50, 0x42, 0x45, 0x49, 0xdb, 0x86, 0x84, 0x82, 0x24, 0xb6, 0xa1, 0x4f, 0x29, 0x15, 0x6e, 0x71, 0xa7, 0x63, 0x75, 0xdd, 0x54, 0xf2, 0x76, 0x84, 0x7c, 0x7c, 0xcb, 0x37,
0x35, 0x5b, 0x89, 0x32, 0x61, 0xb4, 0x7d, 0xc0, 0xe4, 0xdf, 0xfc, 0x72, 0x82, 0x7c, 0x5f, 0x43, 0x9d, 0x0c, 0x4f, 0x06, 0xc4, 0x63, 0xe3, 0x8d, 0x7a, 0xa7, 0xf6, 0x54, 0xb9, 0xef, 0xe8, 0xa0,
0x51, 0x42, 0x05, 0x43, 0xbb, 0xf6, 0x58, 0x5d, 0x8c, 0x87, 0xbf, 0xc5, 0xb0, 0xe1, 0x6d, 0x5e, 0x54, 0x0b, 0xb1, 0xa8, 0x0e, 0x9c, 0x26, 0x2d, 0xc4, 0x39, 0x4b, 0xb0, 0xf4, 0x6a, 0x4b, 0x90,
0xdf, 0x4c, 0x1d, 0x9f, 0x0f, 0xd5, 0x8d, 0x47, 0x0e, 0xae, 0x51, 0x01, 0x11, 0x2f, 0x28, 0xec, 0x5c, 0x91, 0x2f, 0xb1, 0x04, 0xe1, 0x35, 0x2c, 0xc1, 0xd7, 0x08, 0x46, 0xdf, 0x84, 0x12, 0x2a,
0x36, 0xd7, 0x7b, 0xe1, 0x4a, 0xd9, 0x53, 0x74, 0x82, 0xa7, 0xe2, 0xd1, 0x60, 0x50, 0xc7, 0x6b, 0x4a, 0xda, 0x36, 0x24, 0x14, 0x24, 0xb1, 0x0d, 0x7d, 0xaa, 0xd9, 0x4a, 0x94, 0x09, 0xa3, 0xed,
0x34, 0x27, 0x9e, 0xaf, 0x76, 0x79, 0xe3, 0xe7, 0x19, 0xa8, 0xcb, 0xd5, 0x15, 0xe1, 0x74, 0xb3, 0x03, 0x26, 0xff, 0xe6, 0x97, 0x13, 0xe4, 0xfb, 0x1a, 0x8a, 0x12, 0x2a, 0x18, 0xda, 0xb5, 0xc7,
0xa9, 0x70, 0x5d, 0xe2, 0xc6, 0xcb, 0xef, 0x2f, 0x32, 0xa0, 0x86, 0xde, 0xa2, 0x68, 0xcb, 0x27, 0xea, 0xf2, 0x3e, 0xfc, 0x2d, 0x86, 0x0d, 0x6f, 0x1c, 0xfb, 0x66, 0xea, 0xf8, 0x7c, 0xa8, 0x6e,
0x6f, 0x57, 0x45, 0x00, 0xf7, 0xe4, 0xb6, 0xff, 0x26, 0x54, 0x54, 0xd2, 0xf8, 0xd8, 0x19, 0xa9, 0x65, 0x72, 0x70, 0x8d, 0x0a, 0x88, 0x78, 0x41, 0x61, 0xb7, 0xb9, 0xde, 0x0b, 0x57, 0xca, 0x9e,
0xcb, 0xf2, 0x29, 0x6b, 0xfc, 0xd0, 0x19, 0x29, 0x8d, 0xc1, 0xb7, 0xe5, 0x01, 0xe8, 0x0c, 0x6a, 0xa2, 0x13, 0x3c, 0x15, 0x8f, 0x06, 0x83, 0x3a, 0x5e, 0xf5, 0x39, 0xf1, 0x7c, 0xb5, 0xcb, 0x1b,
0x0c, 0xa6, 0x1d, 0x72, 0xe3, 0x5f, 0x64, 0x60, 0x59, 0x7b, 0x15, 0xb9, 0x6e, 0x7f, 0x04, 0xd5, 0x3f, 0xcf, 0x40, 0x5d, 0xae, 0xae, 0x08, 0xa7, 0x9b, 0x4d, 0x85, 0xeb, 0x12, 0x37, 0x5e, 0x7e,
0xe8, 0xfe, 0x5a, 0x1e, 0xa9, 0xaa, 0x1b, 0x49, 0x41, 0x13, 0x17, 0xab, 0x0c, 0x22, 0x48, 0x20, 0xc7, 0x92, 0x01, 0x35, 0xf4, 0x16, 0x45, 0x5b, 0x3e, 0x79, 0xbb, 0x2a, 0x02, 0xb8, 0x27, 0xb7,
0x3a, 0x33, 0xb4, 0xaf, 0x28, 0xb3, 0x79, 0x3a, 0x56, 0xd6, 0xe0, 0xd0, 0xbe, 0xda, 0xe3, 0xbc, 0xfd, 0x37, 0xa1, 0xa2, 0x92, 0xc6, 0xc7, 0xce, 0x48, 0x5d, 0xe8, 0x4f, 0x59, 0xe3, 0x87, 0xce,
0x37, 0x1d, 0x0b, 0x5b, 0xff, 0x05, 0xe7, 0xcf, 0x23, 0x02, 0x12, 0x9f, 0x20, 0x60, 0x92, 0xc2, 0x48, 0x69, 0x0c, 0xbe, 0x2d, 0x0f, 0x40, 0x67, 0x50, 0x63, 0x30, 0xed, 0x90, 0x1b, 0xff, 0x22,
0x80, 0xda, 0xd8, 0x73, 0xc3, 0xf3, 0x88, 0x44, 0xaa, 0xe9, 0x08, 0x24, 0x1a, 0xe3, 0x0f, 0xb2, 0x03, 0xcb, 0xda, 0xab, 0xc8, 0x75, 0xfb, 0x23, 0xa8, 0x46, 0x77, 0xec, 0xf2, 0x48, 0x55, 0xdd,
0xb0, 0x42, 0x3e, 0x49, 0xe9, 0x0b, 0x96, 0xa2, 0xab, 0x01, 0x0b, 0xe4, 0x9e, 0x25, 0xe1, 0xb5, 0x48, 0x0a, 0x9a, 0xb8, 0x58, 0x65, 0x10, 0x41, 0x02, 0xd1, 0x99, 0xa1, 0x7d, 0x45, 0x99, 0xcd,
0x7f, 0xc3, 0x94, 0xcf, 0xec, 0xe3, 0xd7, 0xf4, 0xa3, 0xaa, 0x33, 0xd6, 0xd7, 0x0c, 0x7f, 0x6e, 0xd3, 0xb1, 0xb2, 0x06, 0x87, 0xf6, 0xd5, 0x1e, 0xe7, 0xbd, 0xe9, 0x58, 0xd8, 0xfa, 0x2f, 0x38,
0x7e, 0xf8, 0xaf, 0x1f, 0xde, 0xb4, 0xc8, 0x70, 0x21, 0x2d, 0x32, 0xfc, 0x3a, 0xf1, 0xd8, 0xb9, 0x7f, 0x1e, 0x11, 0x90, 0xf8, 0x04, 0x01, 0x93, 0x14, 0x06, 0xd4, 0xc6, 0x9e, 0x1b, 0x9e, 0x47,
0xd3, 0xc0, 0x45, 0x49, 0xa3, 0x9d, 0x06, 0x7e, 0x04, 0x1b, 0x09, 0x1a, 0x94, 0xd6, 0xce, 0xa9, 0x24, 0x52, 0x4d, 0x47, 0x20, 0xd1, 0x18, 0x7f, 0x90, 0x85, 0x15, 0xf2, 0x49, 0x4a, 0x5f, 0xb0,
0xc3, 0xd5, 0x8d, 0x35, 0xab, 0x1a, 0x75, 0x4f, 0xe1, 0xb6, 0x8b, 0x50, 0x08, 0x06, 0xde, 0x84, 0x14, 0x5d, 0x0d, 0x58, 0x20, 0xf7, 0x2c, 0x09, 0xaf, 0xfd, 0x1b, 0xa6, 0x7c, 0x66, 0x1f, 0xbf,
0x1b, 0xeb, 0xb0, 0x9a, 0x1c, 0x55, 0xb9, 0x4d, 0xfc, 0x76, 0x06, 0x1a, 0x32, 0x8f, 0xc7, 0x71, 0xa6, 0x1f, 0x55, 0x9d, 0xb1, 0xbe, 0x66, 0xf8, 0x73, 0xf3, 0xc3, 0x7f, 0xfd, 0xf0, 0xa6, 0x45,
0xcf, 0xf6, 0x9d, 0x20, 0xf4, 0xfc, 0xe8, 0x9e, 0xd7, 0xdb, 0x00, 0x74, 0x71, 0x3f, 0x1a, 0xdf, 0x86, 0x0b, 0x69, 0x91, 0xe1, 0xd7, 0x89, 0xc7, 0xce, 0x9d, 0x06, 0x2e, 0x4a, 0x1a, 0xed, 0x34,
0xf2, 0x8e, 0x16, 0x84, 0xa0, 0xe9, 0x7d, 0x13, 0x4a, 0xdc, 0x1d, 0x12, 0x92, 0xb8, 0xa1, 0xc8, 0xf0, 0x23, 0xd8, 0x48, 0xd0, 0xa0, 0xb4, 0x76, 0x4e, 0x1d, 0xae, 0x6e, 0xd5, 0x59, 0xd5, 0xa8,
0xdd, 0xa1, 0x32, 0xdc, 0xe7, 0xb6, 0xd2, 0x5a, 0x52, 0x49, 0x90, 0x37, 0x22, 0x88, 0xd1, 0xe1, 0x7b, 0x0a, 0xb7, 0x5d, 0x84, 0x42, 0x30, 0xf0, 0x26, 0xdc, 0x58, 0x87, 0xd5, 0xe4, 0xa8, 0xca,
0x17, 0xb8, 0xa5, 0xe7, 0xa3, 0x1b, 0x11, 0x0e, 0xed, 0x4b, 0xcc, 0x8a, 0x0d, 0x8c, 0xbf, 0x99, 0x6d, 0xe2, 0xb7, 0x33, 0xd0, 0x90, 0x79, 0x3c, 0x8e, 0x7b, 0xb6, 0xef, 0x04, 0xa1, 0xe7, 0x47,
0x85, 0xa5, 0xb8, 0x7f, 0x74, 0xdf, 0xca, 0xcb, 0x6f, 0x8e, 0xb9, 0x2b, 0xd9, 0xc1, 0x11, 0x06, 0x77, 0xd1, 0xde, 0x06, 0xa0, 0x8f, 0x0b, 0xa0, 0xf1, 0x2d, 0xef, 0x91, 0x41, 0x08, 0x9a, 0xde,
0x8f, 0xe6, 0xa9, 0x2d, 0xd1, 0xe2, 0x6c, 0xbb, 0xcc, 0x80, 0x8a, 0xa2, 0xf0, 0xa6, 0xa1, 0x76, 0x37, 0xa1, 0xc4, 0xdd, 0x21, 0x21, 0x89, 0x1b, 0x8a, 0xdc, 0x1d, 0x2a, 0xc3, 0x7d, 0x6e, 0x2b,
0x85, 0x62, 0x99, 0x48, 0xba, 0xd3, 0x50, 0x58, 0xa8, 0xc2, 0x54, 0x77, 0x5c, 0x69, 0x23, 0x16, 0xad, 0x25, 0x95, 0x04, 0x79, 0x23, 0x82, 0x18, 0x1d, 0x7e, 0x81, 0x5b, 0x7a, 0x3e, 0xba, 0x11,
0xec, 0x71, 0xd8, 0xc6, 0xaf, 0x43, 0x08, 0xb0, 0x28, 0x46, 0x13, 0x29, 0xa8, 0x04, 0x7d, 0x9d, 0xe1, 0xd0, 0xbe, 0xc4, 0xac, 0xd8, 0xc0, 0xf8, 0x9b, 0x59, 0x58, 0x8a, 0xfb, 0x47, 0x77, 0xc2,
0x0c, 0x16, 0x9a, 0x39, 0x34, 0x56, 0x74, 0x6d, 0x9e, 0x2e, 0xb4, 0x8e, 0xb4, 0xf9, 0x37, 0xa1, 0xbc, 0xfc, 0x76, 0x9b, 0xbb, 0x92, 0x1d, 0x1c, 0x61, 0xf0, 0x68, 0x9e, 0xda, 0x12, 0x2d, 0xce,
0x42, 0x95, 0xc7, 0x87, 0xbf, 0xf3, 0x66, 0x19, 0x5b, 0x40, 0xbc, 0xf4, 0x9a, 0x79, 0xd3, 0x84, 0xb6, 0xcb, 0x0c, 0xa8, 0x28, 0x0a, 0x6f, 0x1a, 0x6a, 0xd7, 0x3c, 0x96, 0x89, 0xa4, 0x3b, 0x0d,
0xaf, 0x00, 0xa8, 0x29, 0x4c, 0x93, 0xf9, 0xab, 0x19, 0xb8, 0x99, 0x32, 0x6d, 0x72, 0x95, 0xef, 0x85, 0x85, 0x2a, 0x4c, 0x75, 0xc7, 0x95, 0x36, 0x62, 0xc1, 0x1e, 0x87, 0x6d, 0xfc, 0x82, 0x85,
0xc0, 0xf2, 0x69, 0x84, 0x54, 0xa3, 0x4b, 0x4b, 0x7d, 0x5d, 0x89, 0xd5, 0xe4, 0x98, 0x9a, 0xf5, 0x00, 0x8b, 0x62, 0x34, 0x91, 0x82, 0x4a, 0xd0, 0xd7, 0xc9, 0x60, 0xa1, 0x99, 0x43, 0x63, 0x45,
0xd3, 0x24, 0x20, 0xb6, 0x52, 0x69, 0x06, 0x13, 0x57, 0x0b, 0xa0, 0x4a, 0x44, 0xd3, 0x48, 0x06, 0xd7, 0xe6, 0xe9, 0xd2, 0xed, 0x48, 0x9b, 0x7f, 0x13, 0x2a, 0x54, 0x79, 0x7c, 0xf8, 0x3b, 0x6f,
0xe2, 0x11, 0x6c, 0xb6, 0x2e, 0x85, 0xc4, 0x88, 0x52, 0x6b, 0x07, 0xcf, 0xa7, 0x2a, 0x7a, 0x35, 0x96, 0xb1, 0x05, 0xc4, 0x4b, 0xaf, 0x99, 0x37, 0x4d, 0xf8, 0x0a, 0x80, 0x9a, 0xc2, 0x34, 0x99,
0xe3, 0x91, 0xcf, 0xbc, 0x96, 0x47, 0x7e, 0x48, 0x67, 0x91, 0xa3, 0xba, 0x7e, 0x91, 0x4a, 0x70, 0xbf, 0x9a, 0x81, 0x9b, 0x29, 0xd3, 0x26, 0x57, 0xf9, 0x0e, 0x2c, 0x9f, 0x46, 0x48, 0x35, 0xba,
0x03, 0x15, 0x65, 0x4e, 0xb0, 0x0a, 0x75, 0xc7, 0x80, 0x00, 0x51, 0xa5, 0x46, 0x00, 0x4b, 0x87, 0xb4, 0xd4, 0xd7, 0x95, 0x58, 0x4d, 0x8e, 0xa9, 0x59, 0x3f, 0x4d, 0x02, 0x62, 0x2b, 0x95, 0x66,
0xd3, 0x51, 0xe8, 0xec, 0x44, 0x20, 0xf6, 0xb1, 0x2c, 0x83, 0xed, 0xa8, 0x51, 0x4b, 0x6d, 0x08, 0x30, 0x71, 0xb5, 0x00, 0xaa, 0x44, 0x34, 0x8d, 0x64, 0x20, 0x1e, 0xc1, 0x66, 0xeb, 0x52, 0x48,
0xa2, 0x86, 0x70, 0xb0, 0xc6, 0xa2, 0x22, 0x6b, 0xbe, 0xbd, 0xa5, 0x71, 0xb2, 0x05, 0xe3, 0x26, 0x8c, 0x28, 0xb5, 0x76, 0xf0, 0x7c, 0xaa, 0xa2, 0x57, 0x33, 0x1e, 0xf9, 0xcc, 0x6b, 0x79, 0xe4,
0x6c, 0xc4, 0x4f, 0x34, 0x6c, 0x6a, 0xab, 0xf9, 0xfb, 0x19, 0x4a, 0xc1, 0x27, 0x5c, 0xcf, 0xb5, 0x87, 0x74, 0x16, 0x39, 0xaa, 0xeb, 0x17, 0xa9, 0x04, 0x37, 0x50, 0x51, 0xe6, 0x04, 0xab, 0x50,
0x27, 0xc1, 0xb9, 0x17, 0xb2, 0x16, 0xac, 0x04, 0x8e, 0x7b, 0x36, 0xe2, 0x7a, 0xf5, 0x81, 0x1c, 0x77, 0x0c, 0x08, 0x10, 0x55, 0x6a, 0x04, 0xb0, 0x74, 0x38, 0x1d, 0x85, 0xce, 0x4e, 0x04, 0x62,
0x84, 0xb5, 0x64, 0xdf, 0xa8, 0x68, 0x60, 0x2e, 0x53, 0x89, 0xb8, 0xb6, 0x80, 0x6d, 0x5f, 0xd7, 0x1f, 0xcb, 0x32, 0xd8, 0x8e, 0x1a, 0xb5, 0xd4, 0x86, 0x20, 0x6a, 0x08, 0x07, 0x6b, 0x2c, 0x2a,
0xc9, 0x98, 0x2d, 0x66, 0x46, 0x63, 0xbe, 0xf3, 0x6d, 0x58, 0x4c, 0x36, 0xc4, 0x3e, 0x95, 0x47, 0xb2, 0xe6, 0xdb, 0x5b, 0x1a, 0x27, 0x5b, 0x30, 0x6e, 0xc2, 0x46, 0xfc, 0x44, 0xc3, 0xa6, 0xb6,
0xf8, 0xe3, 0x5e, 0xe5, 0x66, 0xce, 0x37, 0xc7, 0x0c, 0x51, 0x89, 0xc7, 0x3e, 0x30, 0xfe, 0x7a, 0x9a, 0xbf, 0x9f, 0xa1, 0x14, 0x7c, 0xc2, 0xf5, 0x5c, 0x7b, 0x12, 0x9c, 0x7b, 0x21, 0x6b, 0xc1,
0x06, 0x1a, 0x26, 0x17, 0x9c, 0xab, 0xf5, 0x52, 0xf1, 0xcc, 0x8f, 0xe6, 0x6a, 0xbd, 0xfe, 0x5d, 0x4a, 0xe0, 0xb8, 0x67, 0x23, 0xae, 0x57, 0x1f, 0xc8, 0x41, 0x58, 0x4b, 0xf6, 0x8d, 0x8a, 0x06,
0xd5, 0xcd, 0x00, 0xaa, 0x47, 0x1f, 0x5c, 0x3b, 0x19, 0xfb, 0x37, 0xe6, 0xde, 0x68, 0xbb, 0x04, 0xe6, 0x32, 0x95, 0x88, 0x6b, 0x0b, 0xd8, 0xf6, 0x75, 0x9d, 0x8c, 0xd9, 0x62, 0x66, 0x34, 0xe6,
0x0b, 0x44, 0x62, 0x6c, 0xc0, 0x9a, 0xec, 0x8f, 0xea, 0x4b, 0x1c, 0x6e, 0x4d, 0xb4, 0x98, 0x08, 0x3b, 0xdf, 0x86, 0xc5, 0x64, 0x43, 0xec, 0x53, 0x79, 0x84, 0x3f, 0xee, 0x55, 0x6e, 0xe6, 0x7c,
0xb7, 0x6e, 0x42, 0x83, 0xce, 0xea, 0xea, 0x2f, 0x21, 0x0b, 0xee, 0x02, 0x3b, 0xb4, 0x07, 0xb6, 0x73, 0xcc, 0x10, 0x95, 0x78, 0xec, 0x03, 0xe3, 0xaf, 0x67, 0xa0, 0x61, 0x72, 0xc1, 0xb9, 0x5a,
0xef, 0x79, 0xee, 0x11, 0xf7, 0x65, 0x42, 0x33, 0x6a, 0x98, 0x18, 0x8d, 0x54, 0xaa, 0x30, 0x3d, 0x2f, 0x15, 0xcf, 0xfc, 0x68, 0xae, 0xd6, 0xeb, 0xdf, 0x55, 0xdd, 0x0c, 0xa0, 0x7a, 0xf4, 0xc1,
0xa9, 0x8b, 0x63, 0x3d, 0x57, 0xe5, 0x6f, 0xd1, 0x93, 0x61, 0xc2, 0xca, 0xb6, 0xfd, 0x9c, 0xab, 0xb5, 0x93, 0xb1, 0x7f, 0x63, 0xee, 0x8d, 0xb6, 0x4b, 0xb0, 0x40, 0x24, 0xc6, 0x06, 0xac, 0xc9,
0x9a, 0xd4, 0x10, 0x3d, 0x86, 0xca, 0x24, 0xaa, 0x54, 0x8d, 0xbb, 0xba, 0x62, 0x64, 0xbe, 0x59, 0xfe, 0xa8, 0xbe, 0xc4, 0xe1, 0xd6, 0x44, 0x8b, 0x89, 0x70, 0xeb, 0x26, 0x34, 0xe8, 0xac, 0xae,
0x53, 0xa7, 0x36, 0x1e, 0xc2, 0x6a, 0xb2, 0x4e, 0x29, 0x3a, 0x36, 0xa1, 0x34, 0x96, 0x30, 0xd9, 0xfe, 0x12, 0xb2, 0xe0, 0x2e, 0xb0, 0x43, 0x7b, 0x60, 0xfb, 0x9e, 0xe7, 0x1e, 0x71, 0x5f, 0x26,
0xbb, 0xe8, 0xd9, 0xf8, 0xad, 0x12, 0x14, 0xa5, 0xa5, 0xca, 0xb6, 0x20, 0x3f, 0x50, 0x39, 0x74, 0x34, 0xa3, 0x86, 0x89, 0xd1, 0x48, 0xa5, 0x0a, 0xd3, 0x93, 0xba, 0xdc, 0xd6, 0x73, 0x55, 0xfe,
0xf1, 0xd5, 0x56, 0x12, 0xab, 0xfe, 0xef, 0x60, 0x26, 0x9d, 0xa0, 0x63, 0x8f, 0x61, 0x31, 0x19, 0x16, 0x3d, 0x19, 0x26, 0xac, 0x6c, 0xdb, 0xcf, 0xb9, 0xaa, 0x49, 0x0d, 0xd1, 0x63, 0xa8, 0x4c,
0x46, 0x9e, 0xb9, 0x09, 0x20, 0x19, 0xff, 0xad, 0x0d, 0x66, 0x02, 0x86, 0xe5, 0x78, 0x73, 0x24, 0xa2, 0x4a, 0xd5, 0xb8, 0xab, 0x2b, 0x46, 0xe6, 0x9b, 0x35, 0x75, 0x6a, 0xe3, 0x21, 0xac, 0x26,
0x9d, 0xa1, 0x74, 0xae, 0xed, 0x9e, 0x9e, 0x2b, 0xf4, 0xed, 0xe0, 0xdc, 0xb6, 0x1e, 0x3e, 0xfa, 0xeb, 0x94, 0xa2, 0x63, 0x13, 0x4a, 0x63, 0x09, 0x93, 0xbd, 0x8b, 0x9e, 0x8d, 0xdf, 0x2a, 0x41,
0x44, 0x5e, 0x05, 0x50, 0x41, 0x60, 0xef, 0xdc, 0x7e, 0xf8, 0xe8, 0x93, 0x59, 0x4d, 0x5a, 0x5e, 0x51, 0x5a, 0xaa, 0x6c, 0x0b, 0xf2, 0x03, 0x95, 0x43, 0x17, 0x5f, 0xbf, 0x25, 0xb1, 0xea, 0xff,
0x04, 0xa0, 0x69, 0xd2, 0xab, 0x50, 0xa0, 0x1b, 0x52, 0x29, 0x19, 0x8a, 0x1e, 0xd8, 0x03, 0x58, 0x0e, 0x66, 0xd2, 0x09, 0x3a, 0xf6, 0x18, 0x16, 0x93, 0x61, 0xe4, 0x99, 0x9b, 0x00, 0x92, 0xf1,
0x55, 0xce, 0x0f, 0x99, 0xb6, 0x4e, 0x52, 0xb0, 0x44, 0x27, 0x05, 0x25, 0xae, 0x87, 0x28, 0x72, 0xdf, 0xda, 0x60, 0x26, 0x60, 0x58, 0x8e, 0x37, 0x47, 0xd2, 0x19, 0x4a, 0xe7, 0xda, 0xee, 0xe9,
0x97, 0xac, 0xc3, 0xc2, 0x79, 0x7c, 0xdd, 0x6d, 0xcd, 0x94, 0x4f, 0xc6, 0x1f, 0x14, 0xa0, 0xa2, 0xb9, 0x42, 0xdf, 0x0e, 0xce, 0x6d, 0xeb, 0xe1, 0xa3, 0x4f, 0xe4, 0x55, 0x00, 0x15, 0x04, 0xf6,
0x0d, 0x0a, 0xab, 0x42, 0xc9, 0x6c, 0xf5, 0x5a, 0xe6, 0xb3, 0xd6, 0x6e, 0xfd, 0x06, 0xbb, 0x07, 0xce, 0xed, 0x87, 0x8f, 0x3e, 0x99, 0xd5, 0xa4, 0xe5, 0x45, 0x00, 0x9a, 0x26, 0xbd, 0x0a, 0x05,
0xef, 0xb4, 0x3b, 0x3b, 0x5d, 0xd3, 0x6c, 0xed, 0xf4, 0xad, 0xae, 0x69, 0xa9, 0x0b, 0xd6, 0x8e, 0xba, 0xc5, 0x95, 0x92, 0xa1, 0xe8, 0x81, 0x3d, 0x80, 0x55, 0xe5, 0xfc, 0x90, 0x69, 0xeb, 0x24,
0x9a, 0x5f, 0x1f, 0xb6, 0x3a, 0x7d, 0x6b, 0xb7, 0xd5, 0x6f, 0xb6, 0x0f, 0x7a, 0xf5, 0x0c, 0x7b, 0x05, 0x4b, 0x74, 0x52, 0x50, 0xe2, 0x7a, 0x88, 0x22, 0x77, 0xc9, 0x3a, 0x2c, 0x9c, 0xc7, 0x57,
0x03, 0x1a, 0x31, 0xa5, 0x42, 0x37, 0x0f, 0xbb, 0xc7, 0x9d, 0x7e, 0x3d, 0xcb, 0xee, 0xc0, 0xad, 0xf2, 0xd6, 0x4c, 0xf9, 0x64, 0xfc, 0x41, 0x01, 0x2a, 0xda, 0xa0, 0xb0, 0x2a, 0x94, 0xcc, 0x56,
0xbd, 0x76, 0xa7, 0x79, 0x60, 0xc5, 0x34, 0x3b, 0x07, 0xfd, 0x67, 0x56, 0xeb, 0x57, 0x8f, 0xda, 0xaf, 0x65, 0x3e, 0x6b, 0xed, 0xd6, 0x6f, 0xb0, 0x7b, 0xf0, 0x4e, 0xbb, 0xb3, 0xd3, 0x35, 0xcd,
0xe6, 0xd7, 0xf5, 0x5c, 0x1a, 0xc1, 0x7e, 0xff, 0x60, 0x47, 0xd5, 0x90, 0x67, 0x37, 0x61, 0x8d, 0xd6, 0x4e, 0xdf, 0xea, 0x9a, 0x96, 0xba, 0x04, 0xee, 0xa8, 0xf9, 0xf5, 0x61, 0xab, 0xd3, 0xb7,
0x08, 0xa8, 0x88, 0xd5, 0xef, 0x76, 0xad, 0x5e, 0xb7, 0xdb, 0xa9, 0x17, 0xd8, 0x32, 0xd4, 0xda, 0x76, 0x5b, 0xfd, 0x66, 0xfb, 0xa0, 0x57, 0xcf, 0xb0, 0x37, 0xa0, 0x11, 0x53, 0x2a, 0x74, 0xf3,
0x9d, 0x67, 0xcd, 0x83, 0xf6, 0xae, 0x65, 0xb6, 0x9a, 0x07, 0x87, 0xf5, 0x05, 0xb6, 0x02, 0x4b, 0xb0, 0x7b, 0xdc, 0xe9, 0xd7, 0xb3, 0xec, 0x0e, 0xdc, 0xda, 0x6b, 0x77, 0x9a, 0x07, 0x56, 0x4c,
0xb3, 0x74, 0x45, 0x51, 0x85, 0xa2, 0xeb, 0x76, 0xda, 0xdd, 0x8e, 0xf5, 0xac, 0x65, 0xf6, 0xda, 0xb3, 0x73, 0xd0, 0x7f, 0x66, 0xb5, 0x7e, 0xf5, 0xa8, 0x6d, 0x7e, 0x5d, 0xcf, 0xa5, 0x11, 0xec,
0xdd, 0x4e, 0xbd, 0xc4, 0xd6, 0x81, 0x25, 0x51, 0xfb, 0x87, 0xcd, 0x9d, 0x7a, 0x99, 0xad, 0xc1, 0xf7, 0x0f, 0x76, 0x54, 0x0d, 0x79, 0x76, 0x13, 0xd6, 0x88, 0x80, 0x8a, 0x58, 0xfd, 0x6e, 0xd7,
0x72, 0x12, 0xfe, 0xb4, 0xf5, 0x75, 0x1d, 0x58, 0x03, 0x56, 0xa9, 0x63, 0xd6, 0x76, 0xeb, 0xa0, 0xea, 0x75, 0xbb, 0x9d, 0x7a, 0x81, 0x2d, 0x43, 0xad, 0xdd, 0x79, 0xd6, 0x3c, 0x68, 0xef, 0x5a,
0xfb, 0x95, 0x75, 0xd8, 0xee, 0xb4, 0x0f, 0x8f, 0x0f, 0xeb, 0x15, 0xbc, 0xb7, 0xb1, 0xd5, 0xb2, 0x66, 0xab, 0x79, 0x70, 0x58, 0x5f, 0x60, 0x2b, 0xb0, 0x34, 0x4b, 0x57, 0x14, 0x55, 0x28, 0xba,
0xda, 0x9d, 0xde, 0xf1, 0xde, 0x5e, 0x7b, 0xa7, 0xdd, 0xea, 0xf4, 0xeb, 0x55, 0x6a, 0x39, 0xed, 0x6e, 0xa7, 0xdd, 0xed, 0x58, 0xcf, 0x5a, 0x66, 0xaf, 0xdd, 0xed, 0xd4, 0x4b, 0x6c, 0x1d, 0x58,
0xc5, 0x6b, 0xa2, 0x80, 0x3c, 0xdb, 0x62, 0xed, 0xb6, 0x7b, 0xcd, 0xed, 0x83, 0xd6, 0x6e, 0x7d, 0x12, 0xb5, 0x7f, 0xd8, 0xdc, 0xa9, 0x97, 0xd9, 0x1a, 0x2c, 0x27, 0xe1, 0x4f, 0x5b, 0x5f, 0xd7,
0x91, 0xdd, 0x86, 0x9b, 0xfd, 0xd6, 0xe1, 0x51, 0xd7, 0x6c, 0x9a, 0x5f, 0xab, 0xb3, 0x2f, 0xd6, 0x81, 0x35, 0x60, 0x95, 0x3a, 0x66, 0x6d, 0xb7, 0x0e, 0xba, 0x5f, 0x59, 0x87, 0xed, 0x4e, 0xfb,
0x5e, 0xb3, 0x7d, 0x70, 0x6c, 0xb6, 0xea, 0x4b, 0xec, 0x2d, 0xb8, 0x6d, 0xb6, 0xbe, 0x3c, 0x6e, 0xf0, 0xf8, 0xb0, 0x5e, 0xc1, 0xbb, 0x25, 0x5b, 0x2d, 0xab, 0xdd, 0xe9, 0x1d, 0xef, 0xed, 0xb5,
0x9b, 0xad, 0x5d, 0xab, 0xd3, 0xdd, 0x6d, 0x59, 0x7b, 0xad, 0x66, 0xff, 0xd8, 0x6c, 0x59, 0x87, 0x77, 0xda, 0xad, 0x4e, 0xbf, 0x5e, 0xa5, 0x96, 0xd3, 0x5e, 0xbc, 0x26, 0x0a, 0xc8, 0xb3, 0x2d,
0xed, 0x5e, 0xaf, 0xdd, 0x79, 0x52, 0xaf, 0xb3, 0x77, 0xe0, 0x6e, 0x44, 0x12, 0x55, 0x30, 0x43, 0xd6, 0x6e, 0xbb, 0xd7, 0xdc, 0x3e, 0x68, 0xed, 0xd6, 0x17, 0xd9, 0x6d, 0xb8, 0xd9, 0x6f, 0x1d,
0xb5, 0x2c, 0xde, 0x4f, 0x4d, 0x69, 0xa7, 0xf5, 0xab, 0x7d, 0xeb, 0xa8, 0xd5, 0x32, 0xeb, 0x8c, 0x1e, 0x75, 0xcd, 0xa6, 0xf9, 0xb5, 0x3a, 0xfb, 0x62, 0xed, 0x35, 0xdb, 0x07, 0xc7, 0x66, 0xab,
0x6d, 0xc2, 0x7a, 0xdc, 0x3c, 0x35, 0x20, 0xdb, 0x5e, 0x11, 0xb8, 0xa3, 0x96, 0x79, 0xd8, 0xec, 0xbe, 0xc4, 0xde, 0x82, 0xdb, 0x66, 0xeb, 0xcb, 0xe3, 0xb6, 0xd9, 0xda, 0xb5, 0x3a, 0xdd, 0xdd,
0x88, 0x09, 0x4e, 0xe0, 0x56, 0x45, 0xb7, 0x63, 0xdc, 0x6c, 0xb7, 0xd7, 0x18, 0x83, 0x45, 0x6d, 0x96, 0xb5, 0xd7, 0x6a, 0xf6, 0x8f, 0xcd, 0x96, 0x75, 0xd8, 0xee, 0xf5, 0xda, 0x9d, 0x27, 0xf5,
0x56, 0xf6, 0x9a, 0x66, 0x7d, 0x9d, 0x2d, 0x41, 0xe5, 0xf0, 0xe8, 0xc8, 0xea, 0xb7, 0x0f, 0x5b, 0x3a, 0x7b, 0x07, 0xee, 0x46, 0x24, 0x51, 0x05, 0x33, 0x54, 0xcb, 0xe2, 0xfd, 0xd4, 0x94, 0x76,
0xdd, 0xe3, 0x7e, 0x7d, 0x83, 0xad, 0x41, 0xbd, 0xdd, 0xe9, 0xb7, 0x4c, 0x31, 0xd7, 0xaa, 0xe8, 0x5a, 0xbf, 0xda, 0xb7, 0x8e, 0x5a, 0x2d, 0xb3, 0xce, 0xd8, 0x26, 0xac, 0xc7, 0xcd, 0x53, 0x03,
0x7f, 0x2b, 0xb2, 0x55, 0x58, 0x52, 0x3d, 0x55, 0xd0, 0x3f, 0x2e, 0xb2, 0x0d, 0x60, 0xc7, 0x1d, 0xb2, 0xed, 0x15, 0x81, 0x3b, 0x6a, 0x99, 0x87, 0xcd, 0x8e, 0x98, 0xe0, 0x04, 0x6e, 0x55, 0x74,
0xb3, 0xd5, 0xdc, 0x15, 0x03, 0x17, 0x21, 0xfe, 0x7b, 0x51, 0x86, 0x94, 0x7e, 0x9e, 0x8b, 0x36, 0x3b, 0xc6, 0xcd, 0x76, 0x7b, 0x8d, 0x31, 0x58, 0xd4, 0x66, 0x65, 0xaf, 0x69, 0xd6, 0xd7, 0xd9,
0xeb, 0x38, 0x47, 0x23, 0x79, 0xf9, 0x79, 0x55, 0xbb, 0xb4, 0xfc, 0x55, 0x9f, 0x30, 0xd1, 0x4c, 0x12, 0x54, 0x0e, 0x8f, 0x8e, 0xac, 0x7e, 0xfb, 0xb0, 0xd5, 0x3d, 0xee, 0xd7, 0x37, 0xd8, 0x1a,
0xab, 0xdc, 0x9c, 0x69, 0x35, 0x67, 0xbb, 0xd7, 0x74, 0xdd, 0xef, 0x6d, 0xa8, 0x8d, 0xe9, 0x22, 0xd4, 0xdb, 0x9d, 0x7e, 0xcb, 0x14, 0x73, 0xad, 0x8a, 0xfe, 0xf7, 0x22, 0x5b, 0x85, 0x25, 0xd5,
0x74, 0x79, 0xe1, 0x31, 0xc8, 0x84, 0x25, 0x02, 0xd2, 0x6d, 0xc7, 0x73, 0xdf, 0xf0, 0x28, 0xcc, 0x53, 0x05, 0xfd, 0xe3, 0x22, 0xdb, 0x00, 0x76, 0xdc, 0x31, 0x5b, 0xcd, 0x5d, 0x31, 0x70, 0x11,
0x7f, 0xc3, 0x23, 0x4d, 0xbf, 0x5f, 0x48, 0xd3, 0xef, 0xef, 0xc3, 0x32, 0x89, 0x26, 0xc7, 0x75, 0xe2, 0x7f, 0x14, 0x65, 0x48, 0xe9, 0xe7, 0xb9, 0x68, 0xb3, 0x8e, 0x73, 0x34, 0x92, 0x17, 0xb4,
0xc6, 0xca, 0x6a, 0x26, 0x2d, 0x70, 0x09, 0x45, 0x14, 0xc1, 0x95, 0x39, 0xa1, 0x4c, 0x0e, 0x29, 0x57, 0xb5, 0x8b, 0xd5, 0x5f, 0xf5, 0x99, 0x15, 0xcd, 0xb4, 0xca, 0xcd, 0x99, 0x56, 0x73, 0xb6,
0x42, 0x8a, 0xd2, 0xda, 0x48, 0x58, 0x1a, 0x24, 0x39, 0x22, 0x4b, 0x23, 0x6a, 0xc1, 0xbe, 0x8c, 0x7b, 0x4d, 0xd7, 0xfd, 0xde, 0x86, 0xda, 0x98, 0x2e, 0x6b, 0x97, 0x97, 0x32, 0x83, 0x4c, 0x58,
0x5b, 0xa8, 0x68, 0x2d, 0x10, 0x1c, 0x5b, 0xb8, 0x0f, 0xcb, 0xfc, 0x32, 0xf4, 0x6d, 0xcb, 0x9b, 0x22, 0x20, 0xdd, 0xc8, 0x3c, 0xf7, 0x9d, 0x91, 0xc2, 0xfc, 0x77, 0x46, 0xd2, 0xf4, 0xfb, 0x85,
0xd8, 0xdf, 0x4c, 0x31, 0xe6, 0x6d, 0xa3, 0x0d, 0x5f, 0x35, 0x97, 0x10, 0xd1, 0x45, 0xf8, 0xae, 0x34, 0xfd, 0xfe, 0x3e, 0x2c, 0x93, 0x68, 0x72, 0x5c, 0x67, 0xac, 0xac, 0x66, 0xd2, 0x02, 0x97,
0x1d, 0xda, 0xf7, 0xff, 0x3c, 0x54, 0xb4, 0x4b, 0xf2, 0xd9, 0x06, 0xac, 0x7c, 0xd5, 0xee, 0x77, 0x50, 0x44, 0x11, 0x5c, 0x99, 0x13, 0xca, 0xe4, 0x90, 0x22, 0xa4, 0x28, 0xad, 0x8d, 0x84, 0xa5,
0x5a, 0xbd, 0x9e, 0x75, 0x74, 0xbc, 0xfd, 0xb4, 0xf5, 0xb5, 0xb5, 0xdf, 0xec, 0xed, 0xd7, 0x6f, 0x41, 0x92, 0x23, 0xb2, 0x34, 0xa2, 0x16, 0xec, 0xcb, 0xb8, 0x85, 0x8a, 0xd6, 0x02, 0xc1, 0xb1,
0x88, 0x45, 0xdb, 0x69, 0xf5, 0xfa, 0xad, 0xdd, 0x04, 0x3c, 0xc3, 0xde, 0x84, 0xcd, 0xe3, 0xce, 0x85, 0xfb, 0xb0, 0xcc, 0x2f, 0x43, 0xdf, 0xb6, 0xbc, 0x89, 0xfd, 0xcd, 0x14, 0x63, 0xde, 0x36,
0x71, 0xaf, 0xb5, 0x6b, 0xa5, 0x95, 0xcb, 0x0a, 0x2e, 0x95, 0xf8, 0x94, 0xe2, 0xb9, 0xfb, 0xbf, 0xda, 0xf0, 0x55, 0x73, 0x09, 0x11, 0x5d, 0x84, 0xef, 0xda, 0xa1, 0x7d, 0xff, 0xcf, 0x43, 0x45,
0x01, 0x8b, 0xc9, 0x63, 0xe0, 0x0c, 0x60, 0xe1, 0xa0, 0xf5, 0xa4, 0xb9, 0xf3, 0x35, 0xdd, 0xec, 0xbb, 0xc8, 0x9f, 0x6d, 0xc0, 0xca, 0x57, 0xed, 0x7e, 0xa7, 0xd5, 0xeb, 0x59, 0x47, 0xc7, 0xdb,
0xda, 0xeb, 0x37, 0xfb, 0xed, 0x1d, 0x4b, 0xde, 0xe4, 0x2a, 0x24, 0x42, 0x86, 0x55, 0xa0, 0xd8, 0x4f, 0x5b, 0x5f, 0x5b, 0xfb, 0xcd, 0xde, 0x7e, 0xfd, 0x86, 0x58, 0xb4, 0x9d, 0x56, 0xaf, 0xdf,
0xec, 0xec, 0xec, 0x77, 0xcd, 0x5e, 0x3d, 0xcb, 0xde, 0x80, 0x0d, 0xc5, 0xab, 0x3b, 0xdd, 0xc3, 0xda, 0x4d, 0xc0, 0x33, 0xec, 0x4d, 0xd8, 0x3c, 0xee, 0x1c, 0xf7, 0x5a, 0xbb, 0x56, 0x5a, 0xb9,
0xc3, 0x76, 0x1f, 0x85, 0x61, 0xff, 0xeb, 0x23, 0xc1, 0x9a, 0xf7, 0x6d, 0x28, 0xc7, 0x57, 0xd1, 0xac, 0xe0, 0x52, 0x89, 0x4f, 0x29, 0x9e, 0xbb, 0xff, 0x1b, 0xb0, 0x98, 0x3c, 0x06, 0xce, 0x00,
0xa2, 0x80, 0x69, 0xf7, 0xdb, 0xcd, 0x7e, 0x2c, 0x5d, 0xeb, 0x37, 0x84, 0xfc, 0x8a, 0xc1, 0x78, 0x16, 0x0e, 0x5a, 0x4f, 0x9a, 0x3b, 0x5f, 0xd3, 0xed, 0xb3, 0xbd, 0x7e, 0xb3, 0xdf, 0xde, 0xb1,
0x93, 0x6c, 0x3d, 0x43, 0x27, 0xe5, 0x14, 0x90, 0x5a, 0xaf, 0x67, 0xc5, 0xa2, 0x8a, 0xa1, 0xdb, 0xe4, 0x6d, 0xb3, 0x42, 0x22, 0x64, 0x58, 0x05, 0x8a, 0xcd, 0xce, 0xce, 0x7e, 0xd7, 0xec, 0xd5,
0xdd, 0xbe, 0x78, 0x85, 0xcf, 0x61, 0x31, 0x99, 0x0f, 0x99, 0x74, 0x6c, 0x6f, 0xc2, 0xfa, 0x76, 0xb3, 0xec, 0x0d, 0xd8, 0x50, 0xbc, 0xba, 0xd3, 0x3d, 0x3c, 0x6c, 0xf7, 0x51, 0x18, 0xf6, 0xbf,
0xab, 0xff, 0x55, 0xab, 0xd5, 0xc1, 0xd1, 0xd9, 0x69, 0x75, 0xfa, 0x66, 0xf3, 0xa0, 0xdd, 0xff, 0x3e, 0x12, 0xac, 0x79, 0xdf, 0x86, 0x72, 0x7c, 0x5d, 0x2e, 0x0a, 0x98, 0x76, 0xbf, 0xdd, 0xec,
0xba, 0x9e, 0xb9, 0xff, 0x18, 0xea, 0xb3, 0xc1, 0xc7, 0x44, 0xb4, 0xf6, 0x65, 0x61, 0xdd, 0xfb, 0xc7, 0xd2, 0xb5, 0x7e, 0x43, 0xc8, 0xaf, 0x18, 0x8c, 0xb7, 0xdd, 0xd6, 0x33, 0x74, 0x52, 0x4e,
0xff, 0x39, 0x03, 0xab, 0x69, 0x7e, 0x77, 0x31, 0x87, 0x72, 0x71, 0x0a, 0x11, 0xdd, 0xeb, 0x76, 0x01, 0xa9, 0xf5, 0x7a, 0x56, 0x2c, 0xaa, 0x18, 0xba, 0xdd, 0xed, 0x8b, 0x57, 0xf8, 0x1c, 0x16,
0xac, 0x4e, 0x17, 0xaf, 0x8e, 0xdc, 0x84, 0xf5, 0x19, 0x84, 0x92, 0x04, 0x19, 0x76, 0x0b, 0x36, 0x93, 0xf9, 0x90, 0x49, 0xc7, 0xf6, 0x26, 0xac, 0x6f, 0xb7, 0xfa, 0x5f, 0xb5, 0x5a, 0x1d, 0x1c,
0xe6, 0x0a, 0x59, 0x66, 0xf7, 0x18, 0x5f, 0xbb, 0x01, 0xab, 0x33, 0xc8, 0x96, 0x69, 0x76, 0xcd, 0x9d, 0x9d, 0x56, 0xa7, 0x6f, 0x36, 0x0f, 0xda, 0xfd, 0xaf, 0xeb, 0x99, 0xfb, 0x8f, 0xa1, 0x3e,
0x7a, 0x8e, 0x7d, 0x00, 0xf7, 0x66, 0x30, 0xf3, 0x1b, 0x93, 0xda, 0xb7, 0xf2, 0xec, 0x3d, 0x78, 0x1b, 0x7c, 0x4c, 0x44, 0x6b, 0x5f, 0x16, 0xd6, 0xbd, 0xff, 0x5f, 0x32, 0xb0, 0x9a, 0xe6, 0x77,
0x7b, 0x8e, 0x3a, 0x96, 0xdd, 0xd6, 0x76, 0xf3, 0x40, 0xbc, 0x5e, 0xbd, 0x70, 0xff, 0x1f, 0xe7, 0x17, 0x73, 0x28, 0x17, 0xa7, 0x10, 0xd1, 0xbd, 0x6e, 0xc7, 0xea, 0x74, 0xf1, 0x7a, 0xcb, 0x4d,
0x00, 0xe2, 0x03, 0x47, 0xa2, 0xfd, 0xdd, 0x66, 0xbf, 0x79, 0xd0, 0x15, 0xec, 0x65, 0x76, 0xfb, 0x58, 0x9f, 0x41, 0x28, 0x49, 0x90, 0x61, 0xb7, 0x60, 0x63, 0xae, 0x90, 0x65, 0x76, 0x8f, 0xf1,
0xa2, 0x76, 0xb3, 0xf5, 0x65, 0xfd, 0x46, 0x2a, 0xa6, 0x7b, 0x24, 0x5e, 0x68, 0x03, 0x56, 0x68, 0xb5, 0x1b, 0xb0, 0x3a, 0x83, 0x6c, 0x99, 0x66, 0xd7, 0xac, 0xe7, 0xd8, 0x07, 0x70, 0x6f, 0x06,
0xaa, 0x0e, 0xc4, 0x6b, 0xb4, 0x3b, 0x4f, 0xe8, 0x16, 0x52, 0xdc, 0xfd, 0x8e, 0x8f, 0xf6, 0xcc, 0x33, 0xbf, 0x31, 0xa9, 0x7d, 0x2b, 0xcf, 0xde, 0x83, 0xb7, 0xe7, 0xa8, 0x63, 0xd9, 0x6d, 0x6d,
0x6e, 0xa7, 0x6f, 0xf5, 0xf6, 0x8f, 0xfb, 0xbb, 0x78, 0x87, 0xe9, 0x8e, 0xd9, 0x3e, 0xa2, 0x3a, 0x37, 0x0f, 0xc4, 0xeb, 0xd5, 0x0b, 0xf7, 0xff, 0x71, 0x0e, 0x20, 0x3e, 0x70, 0x24, 0xda, 0xdf,
0xf3, 0x2f, 0x23, 0x10, 0x55, 0x17, 0xc4, 0x5a, 0x78, 0xd2, 0xed, 0xf5, 0xda, 0x47, 0xd6, 0x97, 0x6d, 0xf6, 0x9b, 0x07, 0x5d, 0xc1, 0x5e, 0x66, 0xb7, 0x2f, 0x6a, 0x37, 0x5b, 0x5f, 0xd6, 0x6f,
0xc7, 0x2d, 0xb3, 0xdd, 0xea, 0x61, 0xc1, 0x85, 0x14, 0xb8, 0xa0, 0x2f, 0x8a, 0x3d, 0xb3, 0x7f, 0xa4, 0x62, 0xba, 0x47, 0xe2, 0x85, 0x36, 0x60, 0x85, 0xa6, 0xea, 0x40, 0xbc, 0x46, 0xbb, 0xf3,
0xf0, 0x4c, 0x6e, 0x6a, 0x82, 0xb4, 0x94, 0x04, 0x09, 0xaa, 0xb2, 0x98, 0x1d, 0xb1, 0x2b, 0xa4, 0x84, 0x6e, 0x4a, 0xc5, 0xdd, 0xef, 0xf8, 0x68, 0xcf, 0xec, 0x76, 0xfa, 0x56, 0x6f, 0xff, 0xb8,
0xd4, 0x0c, 0xd7, 0xe0, 0x44, 0xb9, 0x8a, 0xd8, 0xef, 0xe6, 0x16, 0x09, 0x16, 0xab, 0xa6, 0xa3, 0xbf, 0x8b, 0xf7, 0xac, 0xee, 0x98, 0xed, 0x23, 0xaa, 0x33, 0xff, 0x32, 0x02, 0x51, 0x75, 0x41,
0x44, 0x29, 0xdc, 0x0a, 0x23, 0xc5, 0x61, 0x77, 0xd7, 0xc4, 0x02, 0x8b, 0x73, 0x50, 0x41, 0xbb, 0xac, 0x85, 0x27, 0xdd, 0x5e, 0xaf, 0x7d, 0x64, 0x7d, 0x79, 0xdc, 0x32, 0xdb, 0xad, 0x1e, 0x16,
0x24, 0x98, 0x50, 0x6c, 0x1b, 0x82, 0xa4, 0xae, 0x1e, 0x04, 0x66, 0xf9, 0xe1, 0xff, 0x79, 0x13, 0x5c, 0x48, 0x81, 0x0b, 0xfa, 0xa2, 0xd8, 0x33, 0xfb, 0x07, 0xcf, 0xe4, 0xa6, 0x26, 0x48, 0x4b,
0xca, 0x51, 0xe2, 0x31, 0xfb, 0x29, 0xd4, 0x12, 0x27, 0x41, 0x99, 0x72, 0x0b, 0xa6, 0x1d, 0x1c, 0x49, 0x90, 0xa0, 0x2a, 0x8b, 0xd9, 0x11, 0xbb, 0x42, 0x4a, 0xcd, 0x70, 0x0d, 0x4e, 0x94, 0xab,
0xdd, 0x7c, 0x23, 0x1d, 0x29, 0x35, 0xd0, 0x43, 0xcd, 0xc2, 0xa0, 0xca, 0xde, 0x98, 0xd5, 0xfa, 0x88, 0xfd, 0x6e, 0x6e, 0x91, 0x60, 0xb1, 0x6a, 0x3a, 0x4a, 0x94, 0xc2, 0xad, 0x30, 0x52, 0x1c,
0x13, 0xb5, 0xdd, 0xbe, 0x06, 0x2b, 0xab, 0x7b, 0x8a, 0x17, 0xa2, 0xea, 0x9f, 0x25, 0x64, 0xb7, 0x76, 0x77, 0x4d, 0x2c, 0xb0, 0x38, 0x07, 0x15, 0xb4, 0x4b, 0x82, 0x09, 0xc5, 0xb6, 0x21, 0x48,
0xe3, 0xdb, 0x29, 0x53, 0x3e, 0x57, 0xb8, 0x79, 0x73, 0xfe, 0x03, 0x82, 0xea, 0x8b, 0x83, 0xbb, 0xea, 0xea, 0x41, 0x60, 0x96, 0x1f, 0xfe, 0x87, 0x3b, 0x50, 0x8e, 0x12, 0x8f, 0xd9, 0x4f, 0xa1,
0x50, 0xd1, 0xbe, 0xb6, 0xc3, 0x6e, 0x5e, 0xfb, 0x65, 0xa0, 0xcd, 0xcd, 0x34, 0x94, 0xec, 0xd2, 0x96, 0x38, 0x09, 0xca, 0x94, 0x5b, 0x30, 0xed, 0xe0, 0xe8, 0xe6, 0x1b, 0xe9, 0x48, 0xa9, 0x81,
0x17, 0x50, 0x8e, 0xbe, 0xbc, 0xc2, 0x36, 0xb4, 0xaf, 0xe6, 0xe8, 0xdf, 0x8f, 0xd9, 0x6c, 0xcc, 0x1e, 0x6a, 0x16, 0x06, 0x55, 0xf6, 0xc6, 0xac, 0xd6, 0x9f, 0xa8, 0xed, 0xf6, 0x35, 0x58, 0x59,
0x23, 0x64, 0xf9, 0x5d, 0xa8, 0x68, 0x1f, 0x50, 0x89, 0x7a, 0x31, 0xff, 0x91, 0x96, 0xa8, 0x17, 0xdd, 0x53, 0xbc, 0xb4, 0x55, 0xff, 0x74, 0x22, 0xbb, 0x1d, 0xdf, 0xa0, 0x99, 0xf2, 0x49, 0xc5,
0x69, 0xdf, 0x5b, 0x39, 0x80, 0x35, 0x69, 0xc7, 0x9c, 0xf0, 0x6f, 0x33, 0x3c, 0x29, 0xdf, 0x57, 0xcd, 0x9b, 0xf3, 0x1f, 0x39, 0x54, 0x5f, 0x45, 0xdc, 0x85, 0x8a, 0xf6, 0x45, 0x20, 0x76, 0xf3,
0x7c, 0x90, 0x61, 0x8f, 0xa1, 0xa4, 0x3e, 0x95, 0xc3, 0xd6, 0xd3, 0x3f, 0x04, 0xb4, 0xb9, 0x31, 0xda, 0xaf, 0x17, 0x6d, 0x6e, 0xa6, 0xa1, 0x64, 0x97, 0xbe, 0x80, 0x72, 0xf4, 0x75, 0x18, 0xb6,
0x07, 0x97, 0x5d, 0x69, 0x02, 0xc4, 0x9f, 0x66, 0x61, 0xea, 0xc5, 0xe7, 0x3e, 0xf5, 0x12, 0xcd, 0xa1, 0x7d, 0xd9, 0x47, 0xff, 0xc6, 0xcd, 0x66, 0x63, 0x1e, 0x21, 0xcb, 0xef, 0x42, 0x45, 0xfb,
0x4c, 0xca, 0x77, 0x5c, 0x76, 0xa1, 0xa2, 0x7d, 0x85, 0x25, 0x1a, 0x93, 0xf9, 0x2f, 0xb8, 0x44, 0xc8, 0x4b, 0xd4, 0x8b, 0xf9, 0x0f, 0xc9, 0x44, 0xbd, 0x48, 0xfb, 0x26, 0xcc, 0x01, 0xac, 0x49,
0x63, 0x92, 0xf6, 0xd1, 0x96, 0x9f, 0x42, 0x2d, 0xf1, 0x39, 0x95, 0x88, 0x8f, 0xd3, 0x3e, 0xd6, 0x3b, 0xe6, 0x84, 0x7f, 0x9b, 0xe1, 0x49, 0xf9, 0x06, 0xe4, 0x83, 0x0c, 0x7b, 0x0c, 0x25, 0xf5,
0x12, 0xf1, 0x71, 0xfa, 0x17, 0x58, 0x76, 0xa1, 0xa2, 0x7d, 0xfc, 0x24, 0xea, 0xd1, 0xfc, 0x77, 0x39, 0x1f, 0xb6, 0x9e, 0xfe, 0xb1, 0xa2, 0xcd, 0x8d, 0x39, 0xb8, 0xec, 0x4a, 0x13, 0x20, 0xfe,
0x56, 0xa2, 0x1e, 0xa5, 0x7c, 0x2b, 0x45, 0xac, 0x86, 0xe4, 0x97, 0x4f, 0xa2, 0xd5, 0x90, 0xfa, 0x7c, 0x0c, 0x53, 0x2f, 0x3e, 0xf7, 0x39, 0x9a, 0x68, 0x66, 0x52, 0xbe, 0x35, 0xb3, 0x0b, 0x15,
0x09, 0x95, 0x68, 0x35, 0xa4, 0x7f, 0x2e, 0x45, 0xb0, 0x5e, 0x74, 0x13, 0x32, 0xdb, 0xd0, 0xb8, 0xed, 0x4b, 0x31, 0xd1, 0x98, 0xcc, 0x7f, 0x65, 0x26, 0x1a, 0x93, 0xb4, 0x0f, 0xcb, 0xfc, 0x14,
0x43, 0xbf, 0x52, 0x39, 0x62, 0xbd, 0xf9, 0x4b, 0x93, 0x9f, 0xc0, 0x4a, 0xc4, 0x34, 0xd1, 0x3d, 0x6a, 0x89, 0x4f, 0xbe, 0x44, 0x7c, 0x9c, 0xf6, 0x41, 0x99, 0x88, 0x8f, 0xd3, 0xbf, 0x12, 0xb3,
0xc6, 0x41, 0xd4, 0xa7, 0xd4, 0xdb, 0x92, 0x37, 0xeb, 0xb3, 0xd8, 0x07, 0x19, 0xf6, 0x19, 0x14, 0x0b, 0x15, 0xed, 0x03, 0x2d, 0x51, 0x8f, 0xe6, 0xbf, 0x05, 0x13, 0xf5, 0x28, 0xe5, 0x7b, 0x2e,
0xe5, 0xe5, 0xb0, 0x6c, 0x6d, 0xf6, 0xb2, 0x58, 0xea, 0xc4, 0x7a, 0xfa, 0x1d, 0xb2, 0xec, 0x08, 0x62, 0x35, 0x24, 0xbf, 0xce, 0x12, 0xad, 0x86, 0xd4, 0xcf, 0xbc, 0x44, 0xab, 0x21, 0xfd, 0x93,
0x96, 0x66, 0xef, 0x07, 0xbe, 0x7d, 0xdd, 0x7d, 0x0a, 0x54, 0xd3, 0x9b, 0x2f, 0xbf, 0x6e, 0x81, 0x2e, 0x82, 0xf5, 0xa2, 0xdb, 0x9a, 0xd9, 0x86, 0xc6, 0x1d, 0xfa, 0xb5, 0xcf, 0x11, 0xeb, 0xcd,
0x3d, 0x81, 0xaa, 0xfe, 0x29, 0x03, 0xa6, 0xaf, 0x9a, 0xd9, 0xba, 0x6e, 0xa5, 0xe2, 0x64, 0x45, 0x5f, 0xec, 0xfc, 0x04, 0x56, 0x22, 0xa6, 0x89, 0xee, 0x5a, 0x0e, 0xa2, 0x3e, 0xa5, 0xde, 0xe8,
0xcf, 0x60, 0x3d, 0x1a, 0x1d, 0xfd, 0x70, 0x7f, 0xc0, 0xee, 0xa4, 0x1c, 0xf9, 0x4f, 0x8c, 0xd1, 0xbc, 0x59, 0x9f, 0xc5, 0x3e, 0xc8, 0xb0, 0xcf, 0xa0, 0x28, 0x2f, 0xb0, 0x65, 0x6b, 0xb3, 0x17,
0xcd, 0x6b, 0xef, 0x04, 0x78, 0x90, 0x41, 0x91, 0x98, 0xb8, 0xa0, 0x3d, 0x16, 0x89, 0x69, 0xf7, 0xda, 0x52, 0x27, 0xd6, 0xd3, 0xef, 0xb9, 0x65, 0x47, 0xb8, 0xa0, 0xf5, 0x1b, 0x66, 0x75, 0x8e,
0xd2, 0xc7, 0x22, 0x31, 0xfd, 0x56, 0xf7, 0x26, 0x2c, 0x69, 0x97, 0x13, 0xf4, 0xae, 0xdc, 0x41, 0x4d, 0xb9, 0x94, 0x76, 0xf3, 0xcd, 0xeb, 0xd0, 0x71, 0x8d, 0xb3, 0xb7, 0x22, 0xdf, 0xbe, 0xee,
0xc4, 0x9d, 0xf3, 0x17, 0x75, 0x6e, 0xa6, 0xf9, 0xbe, 0xd8, 0x0e, 0x54, 0xf4, 0xfb, 0x0d, 0x5e, 0x86, 0x86, 0x64, 0x8d, 0xd7, 0x5d, 0x25, 0xf5, 0x04, 0xaa, 0xfa, 0x07, 0x1c, 0x98, 0xbe, 0x0e,
0x52, 0x7c, 0x43, 0x43, 0xe9, 0x57, 0x3f, 0x3e, 0xc8, 0xb0, 0x03, 0xa8, 0xcf, 0xde, 0x46, 0x16, 0x67, 0xeb, 0xba, 0x95, 0x8a, 0x93, 0x15, 0x3d, 0x83, 0xf5, 0x68, 0xbc, 0xf5, 0xeb, 0x02, 0x02,
0x2d, 0xb8, 0xb4, 0x1b, 0xdc, 0x36, 0x67, 0x90, 0x89, 0x3b, 0xcc, 0x04, 0x5f, 0x24, 0xbe, 0xba, 0x76, 0x27, 0xe5, 0x12, 0x81, 0xc4, 0xa8, 0xdf, 0xbc, 0xf6, 0x96, 0x81, 0x07, 0x19, 0x14, 0xb2,
0xe7, 0xf9, 0xb3, 0x1b, 0x47, 0xf2, 0x6b, 0x7c, 0x51, 0x6d, 0x69, 0xdf, 0x61, 0xbc, 0x97, 0x79, 0x89, 0x6b, 0xe9, 0x63, 0x21, 0x9b, 0x76, 0x1b, 0x7f, 0x2c, 0x64, 0xd3, 0xef, 0xb2, 0x6f, 0xc2,
0x90, 0x61, 0x7b, 0x50, 0x4d, 0x5c, 0xc6, 0x93, 0xc8, 0x58, 0x9f, 0x79, 0xcd, 0x86, 0x8e, 0x9b, 0x92, 0x76, 0xdd, 0x41, 0xef, 0xca, 0x1d, 0x44, 0xfc, 0x3e, 0x7f, 0xf5, 0xe7, 0x66, 0x9a, 0x37,
0x79, 0xcf, 0x43, 0x58, 0x4c, 0x06, 0x69, 0xa3, 0x8e, 0xa5, 0x86, 0x83, 0xa3, 0xe9, 0x4b, 0x8f, 0x8d, 0xed, 0x40, 0x45, 0xbf, 0x31, 0xe1, 0x25, 0xc5, 0x37, 0x34, 0x94, 0x7e, 0x99, 0xe4, 0x83,
0xec, 0xb2, 0x1f, 0xd3, 0x37, 0x65, 0x55, 0x42, 0x0e, 0x9b, 0xff, 0x06, 0x69, 0x34, 0x67, 0xfa, 0x0c, 0x3b, 0x80, 0xfa, 0xec, 0xfd, 0x66, 0xd1, 0x12, 0x4e, 0xbb, 0x13, 0x6e, 0x73, 0x06, 0x99,
0x17, 0x3b, 0x8d, 0xdc, 0x5f, 0xc9, 0x66, 0xf0, 0xbd, 0x7e, 0x44, 0x5f, 0x74, 0x53, 0x39, 0x19, 0xb8, 0x15, 0x4d, 0xf0, 0x45, 0xe2, 0x5b, 0x83, 0x9e, 0x3f, 0xbb, 0x15, 0x25, 0xbf, 0x41, 0x18,
0x62, 0xfe, 0x5f, 0xb7, 0x12, 0xb6, 0x47, 0x8d, 0xcb, 0xef, 0x69, 0xc6, 0x72, 0x76, 0xee, 0x1b, 0xd5, 0x96, 0xf6, 0xf5, 0xc9, 0x7b, 0x99, 0x07, 0x19, 0xb6, 0x07, 0xd5, 0xc4, 0xf5, 0x3e, 0x89,
0x9b, 0xaf, 0xe8, 0x43, 0x93, 0xfa, 0x20, 0xcb, 0x24, 0x78, 0xf0, 0x35, 0xeb, 0x62, 0x9f, 0x02, 0x1c, 0xf8, 0x99, 0xd7, 0x6c, 0xe8, 0xb8, 0x99, 0xf7, 0x3c, 0x84, 0xc5, 0x64, 0xd8, 0x37, 0xea,
0xc4, 0x89, 0x6e, 0x6c, 0x26, 0xdd, 0x2a, 0x5a, 0x50, 0x29, 0xb9, 0x70, 0x2d, 0x5a, 0xef, 0x51, 0x58, 0x6a, 0x80, 0x39, 0x9a, 0xbe, 0xf4, 0x58, 0x31, 0xfb, 0x31, 0x7d, 0x49, 0x57, 0xa5, 0xf8,
0xbe, 0x97, 0xbe, 0x81, 0x26, 0x53, 0xcf, 0x12, 0x1b, 0xe8, 0x6c, 0x35, 0x3f, 0x84, 0xda, 0x81, 0xb0, 0xf9, 0x2f, 0xaf, 0x46, 0x73, 0xa6, 0x7f, 0xa7, 0xd4, 0xc8, 0xfd, 0x95, 0x6c, 0x06, 0xdf,
0xe7, 0x3d, 0x9f, 0x4e, 0xa2, 0x6c, 0xe9, 0x64, 0x32, 0x82, 0x30, 0x66, 0x37, 0x67, 0xba, 0xc5, 0xeb, 0x47, 0xf4, 0x1d, 0x3b, 0x95, 0xe5, 0x21, 0xe6, 0xff, 0x75, 0x2b, 0x61, 0x7b, 0xd4, 0xb8,
0x9a, 0xb0, 0x1c, 0x89, 0x88, 0x38, 0xe1, 0x2c, 0x49, 0x94, 0x10, 0x0c, 0x33, 0x15, 0x3c, 0xc8, 0xfc, 0x8a, 0x68, 0x2c, 0xb9, 0xe7, 0xbe, 0x2c, 0xfa, 0x8a, 0x3e, 0x34, 0xa9, 0x0f, 0xb2, 0x4c,
0xb0, 0x87, 0x50, 0xdd, 0xe5, 0x03, 0x3c, 0x2c, 0x8f, 0x61, 0xf3, 0x95, 0x44, 0x08, 0x96, 0xe2, 0x82, 0x07, 0x5f, 0xb3, 0x2e, 0xf6, 0x29, 0x40, 0x9c, 0x3a, 0xc7, 0x66, 0x12, 0xb8, 0xa2, 0x05,
0xed, 0x9b, 0xb5, 0x04, 0x50, 0x89, 0xb8, 0x38, 0xfd, 0x42, 0x97, 0xf0, 0xc9, 0x1c, 0x86, 0x84, 0x95, 0x92, 0x5d, 0xd7, 0xa2, 0xf5, 0x1e, 0x65, 0x90, 0xe9, 0x5b, 0x72, 0x32, 0x99, 0x2d, 0xb1,
0x88, 0x9b, 0x4b, 0xc1, 0x78, 0x06, 0xcb, 0x73, 0x09, 0x0e, 0x91, 0x74, 0xbb, 0x2e, 0x2d, 0x62, 0x25, 0xcf, 0x56, 0xf3, 0x43, 0xa8, 0x1d, 0x78, 0xde, 0xf3, 0xe9, 0x24, 0xca, 0xbf, 0x4e, 0xa6,
0xf3, 0xee, 0xf5, 0x04, 0xb2, 0xde, 0x9f, 0x40, 0x8d, 0x6e, 0x02, 0x3d, 0xe1, 0x74, 0xd8, 0x6d, 0x37, 0x08, 0xf3, 0x78, 0x73, 0xa6, 0x5b, 0xac, 0x09, 0xcb, 0x91, 0x88, 0x88, 0x53, 0xd8, 0x92,
0xe6, 0xa6, 0x18, 0xfd, 0x24, 0xdd, 0xac, 0x48, 0xa2, 0x02, 0x4f, 0xf0, 0x32, 0x7c, 0xed, 0x28, 0x44, 0x09, 0xc1, 0x30, 0x53, 0xc1, 0x83, 0x0c, 0x7b, 0x08, 0xd5, 0x5d, 0x3e, 0xc0, 0xe3, 0xf7,
0x59, 0x34, 0xaf, 0xf3, 0xc7, 0xdb, 0xa2, 0x79, 0x4d, 0x3b, 0xb5, 0xf6, 0x39, 0x54, 0x9e, 0xf0, 0x18, 0x88, 0x5f, 0x49, 0x04, 0x75, 0x29, 0x82, 0xbf, 0x59, 0x4b, 0x00, 0x95, 0x88, 0x8b, 0x13,
0x50, 0x1d, 0xce, 0x8a, 0xb4, 0x99, 0x99, 0xd3, 0x5a, 0x9b, 0x29, 0x47, 0xea, 0xd8, 0x27, 0x58, 0x3a, 0xf4, 0x3d, 0x23, 0x99, 0x15, 0x91, 0x10, 0x71, 0x73, 0x49, 0x1d, 0xcf, 0x60, 0x79, 0x2e,
0x34, 0x3a, 0x68, 0xbc, 0xae, 0xb5, 0xa2, 0x17, 0x5d, 0x9a, 0x81, 0x0b, 0x5d, 0x41, 0xbb, 0x6e, 0x65, 0x22, 0x92, 0x6e, 0xd7, 0x25, 0x5a, 0x6c, 0xde, 0xbd, 0x9e, 0x40, 0xd6, 0xfb, 0x13, 0xa8,
0x20, 0xea, 0xf8, 0xfc, 0xf5, 0x12, 0x51, 0xc7, 0xd3, 0x6e, 0x27, 0xf8, 0x31, 0x8d, 0x80, 0x76, 0xd1, 0xdd, 0xa2, 0x27, 0x9c, 0x8e, 0xcf, 0xcd, 0xdc, 0x3d, 0xa3, 0x9f, 0xcd, 0x9b, 0x15, 0x49,
0x1c, 0x2c, 0x56, 0x98, 0x66, 0x4f, 0x8e, 0x45, 0xdd, 0xd7, 0xc9, 0x1f, 0x01, 0xf4, 0x42, 0x6f, 0x54, 0xe0, 0x09, 0x7e, 0x02, 0x40, 0x3b, 0x9c, 0x16, 0xcd, 0xeb, 0xfc, 0x81, 0xb9, 0x68, 0x5e,
0xb2, 0x6b, 0xf3, 0xb1, 0xe7, 0xc6, 0x32, 0x21, 0x3e, 0x88, 0x14, 0x2f, 0x44, 0xed, 0x34, 0x12, 0xd3, 0xce, 0xc1, 0x7d, 0x0e, 0x95, 0x27, 0x3c, 0x54, 0xc7, 0xbd, 0x22, 0xfd, 0x68, 0xe6, 0xfc,
0xfb, 0x4a, 0xd3, 0x24, 0x13, 0x53, 0xa2, 0xa6, 0xfd, 0xda, 0xb3, 0x4a, 0xd1, 0xeb, 0xa4, 0x9c, 0xd7, 0x66, 0xca, 0x21, 0x3d, 0xf6, 0x09, 0x16, 0x8d, 0x8e, 0x2e, 0xaf, 0x6b, 0xad, 0xe8, 0x45,
0x57, 0x42, 0x21, 0x01, 0x71, 0xee, 0x49, 0xa4, 0x17, 0xce, 0xa5, 0xb5, 0x44, 0x6b, 0x3d, 0x25, 0x97, 0x66, 0xe0, 0x42, 0xfb, 0xd0, 0x2e, 0x30, 0x88, 0x3a, 0x3e, 0x7f, 0x61, 0x45, 0xd4, 0xf1,
0x51, 0xe5, 0x0b, 0x28, 0xc7, 0x41, 0xfb, 0x8d, 0xf8, 0xee, 0x93, 0x44, 0x88, 0x3f, 0x92, 0xde, 0xb4, 0xfb, 0x0e, 0x7e, 0x4c, 0x23, 0xa0, 0x1d, 0x30, 0x8b, 0x55, 0xb0, 0xd9, 0xb3, 0x68, 0x51,
0xf3, 0x01, 0xf3, 0x0e, 0xac, 0x50, 0x77, 0xa2, 0xed, 0x0f, 0x8f, 0xcb, 0x44, 0xdf, 0x72, 0x98, 0xf7, 0x75, 0xf2, 0x47, 0x00, 0xbd, 0xd0, 0x9b, 0xec, 0xda, 0x7c, 0xec, 0xb9, 0xb1, 0x4c, 0x88,
0x8f, 0x54, 0x47, 0xeb, 0x27, 0x2d, 0xde, 0x2a, 0xd6, 0xcf, 0x5c, 0xdc, 0x2e, 0x5a, 0x3f, 0xd7, 0x8f, 0x36, 0xc5, 0x0b, 0x51, 0x3b, 0xdf, 0xc4, 0xbe, 0xd2, 0x74, 0xd3, 0xc4, 0x94, 0xa8, 0x69,
0x05, 0x62, 0xa3, 0xf5, 0x73, 0x7d, 0xc8, 0xaf, 0x03, 0x2b, 0x29, 0x11, 0x38, 0xf6, 0x96, 0x32, 0xbf, 0xf6, 0xf4, 0x53, 0xf4, 0x3a, 0x29, 0x27, 0xa0, 0x50, 0x48, 0x40, 0x9c, 0xcd, 0x12, 0x69,
0x43, 0xae, 0x8d, 0xce, 0x6d, 0xa6, 0x46, 0x6a, 0x58, 0x1f, 0x36, 0xa8, 0x4c, 0x73, 0x34, 0x9a, 0x9a, 0x73, 0x89, 0x32, 0xd1, 0x5a, 0x4f, 0x49, 0x7d, 0xf9, 0x02, 0xca, 0x71, 0x1a, 0xc0, 0x46,
0x09, 0xf8, 0xbc, 0xa9, 0x15, 0x48, 0x09, 0x62, 0x25, 0x54, 0x99, 0x99, 0x40, 0x56, 0x07, 0xea, 0x7c, 0x9b, 0x4a, 0x22, 0x69, 0x20, 0x92, 0xde, 0xf3, 0x21, 0xf8, 0x0e, 0xac, 0x50, 0x77, 0xa2,
0xb3, 0xb1, 0x12, 0x76, 0x3d, 0xf9, 0xe6, 0x9d, 0x84, 0x82, 0x3d, 0x1f, 0x5f, 0x61, 0xcf, 0xa2, 0xed, 0x0f, 0x0f, 0xe0, 0x44, 0x5f, 0xb0, 0x98, 0x8f, 0x7d, 0x47, 0xeb, 0x27, 0x2d, 0x82, 0x2b,
0x88, 0xcd, 0x4c, 0x1f, 0xef, 0x44, 0x17, 0x3a, 0xa7, 0xc7, 0x97, 0x22, 0xdd, 0x3d, 0x35, 0xe0, 0xd6, 0xcf, 0x5c, 0x24, 0x30, 0x5a, 0x3f, 0xd7, 0x85, 0x76, 0xa3, 0xf5, 0x73, 0x7d, 0x10, 0xb1,
0xc3, 0x7e, 0x15, 0x36, 0x66, 0x39, 0x5a, 0xd5, 0x7c, 0x37, 0x6d, 0xb8, 0xae, 0x55, 0xe5, 0x92, 0x03, 0x2b, 0x29, 0x31, 0x3d, 0xf6, 0x96, 0x32, 0x6c, 0xae, 0x8d, 0xf7, 0x6d, 0xa6, 0xc6, 0x7e,
0x2f, 0xf4, 0x20, 0x23, 0x04, 0xb1, 0x1e, 0x77, 0x89, 0x18, 0x29, 0x25, 0xc0, 0x13, 0x31, 0x52, 0x58, 0x1f, 0x36, 0xa8, 0x4c, 0x73, 0x34, 0x9a, 0x09, 0x21, 0xbd, 0xa9, 0x15, 0x48, 0x09, 0x8b,
0x5a, 0xa0, 0x66, 0xfb, 0xbd, 0x5f, 0xfb, 0xde, 0x99, 0x13, 0x9e, 0x4f, 0x4f, 0xb6, 0x06, 0xde, 0x25, 0x54, 0x99, 0x99, 0xd0, 0x58, 0x07, 0xea, 0xb3, 0xd1, 0x17, 0x76, 0x3d, 0xf9, 0xe6, 0x9d,
0xf8, 0xc3, 0x91, 0x32, 0xc5, 0xe5, 0x21, 0xca, 0x0f, 0x47, 0xee, 0xf0, 0x43, 0x2c, 0x7d, 0xb2, 0x84, 0xca, 0x3e, 0x1f, 0xb1, 0x61, 0xcf, 0xa2, 0x18, 0xd0, 0x4c, 0x1f, 0xef, 0x44, 0x57, 0x44,
0x30, 0xf1, 0xbd, 0xd0, 0xfb, 0xe1, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xeb, 0x43, 0xf6, 0x73, 0xa7, 0x47, 0xac, 0x22, 0x6b, 0x20, 0x35, 0x84, 0xc4, 0x7e, 0x15, 0x36, 0x66, 0x39, 0x5a, 0xd5,
0xe4, 0x81, 0x00, 0x00, 0x7c, 0x37, 0x6d, 0xb8, 0xae, 0x55, 0xe5, 0x92, 0x2f, 0xf4, 0x20, 0x23, 0x04, 0xb1, 0x1e, 0xc9,
0x89, 0x18, 0x29, 0x25, 0x64, 0x14, 0x31, 0x52, 0x5a, 0xe8, 0x67, 0xfb, 0xbd, 0x5f, 0xfb, 0xde,
0x99, 0x13, 0x9e, 0x4f, 0x4f, 0xb6, 0x06, 0xde, 0xf8, 0xc3, 0x91, 0x32, 0xee, 0xe5, 0xb1, 0xcc,
0x0f, 0x47, 0xee, 0xf0, 0x43, 0x2c, 0x7d, 0xb2, 0x30, 0xf1, 0xbd, 0xd0, 0xfb, 0xe1, 0xff, 0x0d,
0x00, 0x00, 0xff, 0xff, 0x1f, 0xda, 0x01, 0x0a, 0xda, 0x82, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -12434,6 +12529,11 @@ type LightningClient interface {
//it's identity pubkey, alias, the chains it is connected to, and information //it's identity pubkey, alias, the chains it is connected to, and information
//concerning the number of open+pending channels. //concerning the number of open+pending channels.
GetInfo(ctx context.Context, in *GetInfoRequest, opts ...grpc.CallOption) (*GetInfoResponse, error) GetInfo(ctx context.Context, in *GetInfoRequest, opts ...grpc.CallOption) (*GetInfoResponse, error)
//* lncli: `getrecoveryinfo`
//GetRecoveryInfo returns information concerning the recovery mode including
//whether it's in a recovery mode, whether the recovery is finished, and the
//progress made so far.
GetRecoveryInfo(ctx context.Context, in *GetRecoveryInfoRequest, opts ...grpc.CallOption) (*GetRecoveryInfoResponse, error)
// lncli: `pendingchannels` // lncli: `pendingchannels`
//PendingChannels returns a list of all the channels that are currently //PendingChannels returns a list of all the channels that are currently
//considered "pending". A channel is pending if it has finished the funding //considered "pending". A channel is pending if it has finished the funding
@ -12883,6 +12983,15 @@ func (c *lightningClient) GetInfo(ctx context.Context, in *GetInfoRequest, opts
return out, nil return out, nil
} }
func (c *lightningClient) GetRecoveryInfo(ctx context.Context, in *GetRecoveryInfoRequest, opts ...grpc.CallOption) (*GetRecoveryInfoResponse, error) {
out := new(GetRecoveryInfoResponse)
err := c.cc.Invoke(ctx, "/lnrpc.Lightning/GetRecoveryInfo", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *lightningClient) PendingChannels(ctx context.Context, in *PendingChannelsRequest, opts ...grpc.CallOption) (*PendingChannelsResponse, error) { func (c *lightningClient) PendingChannels(ctx context.Context, in *PendingChannelsRequest, opts ...grpc.CallOption) (*PendingChannelsResponse, error) {
out := new(PendingChannelsResponse) out := new(PendingChannelsResponse)
err := c.cc.Invoke(ctx, "/lnrpc.Lightning/PendingChannels", in, out, opts...) err := c.cc.Invoke(ctx, "/lnrpc.Lightning/PendingChannels", in, out, opts...)
@ -13525,6 +13634,11 @@ type LightningServer interface {
//it's identity pubkey, alias, the chains it is connected to, and information //it's identity pubkey, alias, the chains it is connected to, and information
//concerning the number of open+pending channels. //concerning the number of open+pending channels.
GetInfo(context.Context, *GetInfoRequest) (*GetInfoResponse, error) GetInfo(context.Context, *GetInfoRequest) (*GetInfoResponse, error)
//* lncli: `getrecoveryinfo`
//GetRecoveryInfo returns information concerning the recovery mode including
//whether it's in a recovery mode, whether the recovery is finished, and the
//progress made so far.
GetRecoveryInfo(context.Context, *GetRecoveryInfoRequest) (*GetRecoveryInfoResponse, error)
// lncli: `pendingchannels` // lncli: `pendingchannels`
//PendingChannels returns a list of all the channels that are currently //PendingChannels returns a list of all the channels that are currently
//considered "pending". A channel is pending if it has finished the funding //considered "pending". A channel is pending if it has finished the funding
@ -13828,6 +13942,9 @@ func (*UnimplementedLightningServer) SubscribePeerEvents(req *PeerEventSubscript
func (*UnimplementedLightningServer) GetInfo(ctx context.Context, req *GetInfoRequest) (*GetInfoResponse, error) { func (*UnimplementedLightningServer) GetInfo(ctx context.Context, req *GetInfoRequest) (*GetInfoResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetInfo not implemented") return nil, status.Errorf(codes.Unimplemented, "method GetInfo not implemented")
} }
func (*UnimplementedLightningServer) GetRecoveryInfo(ctx context.Context, req *GetRecoveryInfoRequest) (*GetRecoveryInfoResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetRecoveryInfo not implemented")
}
func (*UnimplementedLightningServer) PendingChannels(ctx context.Context, req *PendingChannelsRequest) (*PendingChannelsResponse, error) { func (*UnimplementedLightningServer) PendingChannels(ctx context.Context, req *PendingChannelsRequest) (*PendingChannelsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method PendingChannels not implemented") return nil, status.Errorf(codes.Unimplemented, "method PendingChannels not implemented")
} }
@ -14244,6 +14361,24 @@ func _Lightning_GetInfo_Handler(srv interface{}, ctx context.Context, dec func(i
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _Lightning_GetRecoveryInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetRecoveryInfoRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(LightningServer).GetRecoveryInfo(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/lnrpc.Lightning/GetRecoveryInfo",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(LightningServer).GetRecoveryInfo(ctx, req.(*GetRecoveryInfoRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Lightning_PendingChannels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _Lightning_PendingChannels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(PendingChannelsRequest) in := new(PendingChannelsRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
@ -15048,6 +15183,10 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{
MethodName: "GetInfo", MethodName: "GetInfo",
Handler: _Lightning_GetInfo_Handler, Handler: _Lightning_GetInfo_Handler,
}, },
{
MethodName: "GetRecoveryInfo",
Handler: _Lightning_GetRecoveryInfo_Handler,
},
{ {
MethodName: "PendingChannels", MethodName: "PendingChannels",
Handler: _Lightning_PendingChannels_Handler, Handler: _Lightning_PendingChannels_Handler,

@ -519,6 +519,24 @@ func local_request_Lightning_GetInfo_0(ctx context.Context, marshaler runtime.Ma
} }
func request_Lightning_GetRecoveryInfo_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetRecoveryInfoRequest
var metadata runtime.ServerMetadata
msg, err := client.GetRecoveryInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Lightning_GetRecoveryInfo_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetRecoveryInfoRequest
var metadata runtime.ServerMetadata
msg, err := server.GetRecoveryInfo(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_PendingChannels_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { func request_Lightning_PendingChannels_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq PendingChannelsRequest var protoReq PendingChannelsRequest
var metadata runtime.ServerMetadata var metadata runtime.ServerMetadata
@ -2194,6 +2212,26 @@ func RegisterLightningHandlerServer(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_GetRecoveryInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_GetRecoveryInfo_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_GetRecoveryInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_PendingChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_PendingChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
@ -3197,6 +3235,26 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}) })
mux.Handle("GET", pattern_Lightning_GetRecoveryInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
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_GetRecoveryInfo_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_GetRecoveryInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_PendingChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { mux.Handle("GET", pattern_Lightning_PendingChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context()) ctx, cancel := context.WithCancel(req.Context())
defer cancel() defer cancel()
@ -3953,6 +4011,8 @@ var (
pattern_Lightning_GetInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "getinfo"}, "", runtime.AssumeColonVerbOpt(true))) pattern_Lightning_GetInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "getinfo"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_GetRecoveryInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "getrecoveryinfo"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_PendingChannels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "channels", "pending"}, "", runtime.AssumeColonVerbOpt(true))) pattern_Lightning_PendingChannels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "channels", "pending"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_ListChannels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "channels"}, "", runtime.AssumeColonVerbOpt(true))) pattern_Lightning_ListChannels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "channels"}, "", runtime.AssumeColonVerbOpt(true)))
@ -4059,6 +4119,8 @@ var (
forward_Lightning_GetInfo_0 = runtime.ForwardResponseMessage forward_Lightning_GetInfo_0 = runtime.ForwardResponseMessage
forward_Lightning_GetRecoveryInfo_0 = runtime.ForwardResponseMessage
forward_Lightning_PendingChannels_0 = runtime.ForwardResponseMessage forward_Lightning_PendingChannels_0 = runtime.ForwardResponseMessage
forward_Lightning_ListChannels_0 = runtime.ForwardResponseMessage forward_Lightning_ListChannels_0 = runtime.ForwardResponseMessage

@ -140,6 +140,14 @@ service Lightning {
*/ */
rpc GetInfo (GetInfoRequest) returns (GetInfoResponse); rpc GetInfo (GetInfoRequest) returns (GetInfoResponse);
/** lncli: `getrecoveryinfo`
GetRecoveryInfo returns information concerning the recovery mode including
whether it's in a recovery mode, whether the recovery is finished, and the
progress made so far.
*/
rpc GetRecoveryInfo (GetRecoveryInfoRequest)
returns (GetRecoveryInfoResponse);
// TODO(roasbeef): merge with below with bool? // TODO(roasbeef): merge with below with bool?
/* lncli: `pendingchannels` /* lncli: `pendingchannels`
PendingChannels returns a list of all the channels that are currently PendingChannels returns a list of all the channels that are currently
@ -1381,6 +1389,19 @@ message GetInfoResponse {
map<uint32, Feature> features = 19; map<uint32, Feature> features = 19;
} }
message GetRecoveryInfoRequest {
}
message GetRecoveryInfoResponse {
// Whether the wallet is in recovery mode
bool recovery_mode = 1;
// Whether the wallet recovery progress is finished
bool recovery_finished = 2;
// The recovery progress, ranging from 0 to 1.
double progress = 3;
}
message Chain { message Chain {
// The blockchain the node is on (eg bitcoin, litecoin) // The blockchain the node is on (eg bitcoin, litecoin)
string chain = 1; string chain = 1;

@ -829,6 +829,29 @@
] ]
} }
}, },
"/v1/getrecoveryinfo": {
"get": {
"summary": "* lncli: `getrecoveryinfo`\nGetRecoveryInfo returns information concerning the recovery mode including\nwhether it's in a recovery mode, whether the recovery is finished, and the\nprogress made so far.",
"operationId": "GetRecoveryInfo",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/lnrpcGetRecoveryInfoResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
"Lightning"
]
}
},
"/v1/graph": { "/v1/graph": {
"get": { "get": {
"summary": "lncli: `describegraph`\nDescribeGraph returns a description of the latest graph state from the\npoint of view of the node. The graph information is partitioned into two\ncomponents: all the nodes/vertexes, and all the edges that connect the\nvertexes themselves. As this is a directed graph, the edges also contain\nthe node directional specific routing policy which includes: the time lock\ndelta, fee information, etc.", "summary": "lncli: `describegraph`\nDescribeGraph returns a description of the latest graph state from the\npoint of view of the node. The graph information is partitioned into two\ncomponents: all the nodes/vertexes, and all the edges that connect the\nvertexes themselves. As this is a directed graph, the edges also contain\nthe node directional specific routing policy which includes: the time lock\ndelta, fee information, etc.",
@ -3530,6 +3553,26 @@
} }
} }
}, },
"lnrpcGetRecoveryInfoResponse": {
"type": "object",
"properties": {
"recovery_mode": {
"type": "boolean",
"format": "boolean",
"title": "Whether the wallet is in recovery mode"
},
"recovery_finished": {
"type": "boolean",
"format": "boolean",
"title": "Whether the wallet recovery progress is finished"
},
"progress": {
"type": "number",
"format": "double",
"description": "The recovery progress, ranging from 0 to 1."
}
}
},
"lnrpcGraphTopologyUpdate": { "lnrpcGraphTopologyUpdate": {
"type": "object", "type": "object",
"properties": { "properties": {

@ -817,6 +817,105 @@ const (
AddrTypeNestedPubkeyHash = lnrpc.AddressType_NESTED_PUBKEY_HASH AddrTypeNestedPubkeyHash = lnrpc.AddressType_NESTED_PUBKEY_HASH
) )
// testGetRecoveryInfo checks whether lnd gives the right information about
// the wallet recovery process.
func testGetRecoveryInfo(net *lntest.NetworkHarness, t *harnessTest) {
ctxb := context.Background()
// First, create a new node with strong passphrase and grab the mnemonic
// used for key derivation. This will bring up Carol with an empty
// wallet, and such that she is synced up.
password := []byte("The Magic Words are Squeamish Ossifrage")
carol, mnemonic, err := net.NewNodeWithSeed("Carol", nil, password)
if err != nil {
t.Fatalf("unable to create node with seed; %v", err)
}
shutdownAndAssert(net, t, carol)
checkInfo := func(expectedRecoveryMode, expectedRecoveryFinished bool,
expectedProgress float64, recoveryWindow int32) {
// Restore Carol, passing in the password, mnemonic, and
// desired recovery window.
node, err := net.RestoreNodeWithSeed(
"Carol", nil, password, mnemonic, recoveryWindow, nil,
)
if err != nil {
t.Fatalf("unable to restore node: %v", err)
}
// Wait for Carol to sync to the chain.
_, minerHeight, err := net.Miner.Node.GetBestBlock()
if err != nil {
t.Fatalf("unable to get current blockheight %v", err)
}
ctxt, _ := context.WithTimeout(ctxb, defaultTimeout)
err = waitForNodeBlockHeight(ctxt, node, minerHeight)
if err != nil {
t.Fatalf("unable to sync to chain: %v", err)
}
// Query carol for her current wallet recovery progress.
var (
recoveryMode bool
recoveryFinished bool
progress float64
)
err = wait.Predicate(func() bool {
// Verify that recovery info gives the right response.
req := &lnrpc.GetRecoveryInfoRequest{}
ctxt, _ := context.WithTimeout(ctxb, defaultTimeout)
resp, err := node.GetRecoveryInfo(ctxt, req)
if err != nil {
t.Fatalf("unable to query recovery info: %v", err)
}
recoveryMode = resp.RecoveryMode
recoveryFinished = resp.RecoveryFinished
progress = resp.Progress
if recoveryMode != expectedRecoveryMode ||
recoveryFinished != expectedRecoveryFinished ||
progress != expectedProgress {
return false
}
return true
}, 15*time.Second)
if err != nil {
t.Fatalf("expected recovery mode to be %v, got %v, "+
"expected recovery finished to be %v, got %v, "+
"expected progress %v, got %v",
expectedRecoveryMode, recoveryMode,
expectedRecoveryFinished, recoveryFinished,
expectedProgress, progress,
)
}
// Lastly, shutdown this Carol so we can move on to the next
// restoration.
shutdownAndAssert(net, t, node)
}
// Restore Carol with a recovery window of 0. Since it's not in recovery
// mode, the recovery info will give a response with recoveryMode=false,
// recoveryFinished=false, and progress=0
checkInfo(false, false, 0, 0)
// Change the recovery windown to be 1 to turn on recovery mode. Since the
// current chain height is the same as the birthday height, it should
// indicate the recovery process is finished.
checkInfo(true, true, 1, 1)
// We now go ahead 5 blocks. Because the wallet's syncing process is
// controlled by a goroutine in the background, it will catch up quickly.
// This makes the recovery progress back to 1.
mineBlocks(t, net, 5, 0)
checkInfo(true, true, 1, 1)
}
// testOnchainFundRecovery checks lnd's ability to rescan for onchain outputs // testOnchainFundRecovery checks lnd's ability to rescan for onchain outputs
// when providing a valid aezeed that owns outputs on the chain. This test // when providing a valid aezeed that owns outputs on the chain. This test
// performs multiple restorations using the same seed and various recovery // performs multiple restorations using the same seed and various recovery
@ -14430,6 +14529,10 @@ var testsCases = []*testCase{
name: "sweep coins", name: "sweep coins",
test: testSweepAllCoins, test: testSweepAllCoins,
}, },
{
name: "recovery info",
test: testGetRecoveryInfo,
},
{ {
name: "onchain fund recovery", name: "onchain fund recovery",
test: testOnchainFundRecovery, test: testOnchainFundRecovery,

@ -844,3 +844,83 @@ func (b *BtcWallet) IsSynced() (bool, int64, error) {
return true, bestTimestamp, nil return true, bestTimestamp, nil
} }
// GetRecoveryInfo returns a boolean indicating whether the wallet is started
// in recovery mode. It also returns a float64, ranging from 0 to 1,
// representing the recovery progress made so far.
//
// This is a part of the WalletController interface.
func (b *BtcWallet) GetRecoveryInfo() (bool, float64, error) {
isRecoveryMode := true
progress := float64(0)
// A zero value in RecoveryWindow indicates there is no trigger of
// recovery mode.
if b.cfg.RecoveryWindow == 0 {
isRecoveryMode = false
return isRecoveryMode, progress, nil
}
// Query the wallet's birthday block height from db.
var birthdayBlock waddrmgr.BlockStamp
err := walletdb.View(b.db, func(tx walletdb.ReadTx) error {
var err error
addrmgrNs := tx.ReadBucket(waddrmgrNamespaceKey)
birthdayBlock, _, err = b.wallet.Manager.BirthdayBlock(addrmgrNs)
if err != nil {
return err
}
return nil
})
if err != nil {
// The wallet won't start until the backend is synced, thus the birthday
// block won't be set and this particular error will be returned. We'll
// catch this error and return a progress of 0 instead.
if waddrmgr.IsError(err, waddrmgr.ErrBirthdayBlockNotSet) {
return isRecoveryMode, progress, nil
}
return isRecoveryMode, progress, err
}
// Grab the best chain state the wallet is currently aware of.
syncState := b.wallet.Manager.SyncedTo()
// Next, query the chain backend to grab the info about the tip of the
// main chain.
//
// NOTE: The actual recovery process is handled by the btcsuite/btcwallet.
// The process purposefully doesn't update the best height. It might create
// a small difference between the height queried here and the height used
// in the recovery process, ie, the bestHeight used here might be greater,
// showing the recovery being unfinished while it's actually done. However,
// during a wallet rescan after the recovery, the wallet's synced height
// will catch up and this won't be an issue.
_, bestHeight, err := b.cfg.ChainSource.GetBestBlock()
if err != nil {
return isRecoveryMode, progress, err
}
// The birthday block height might be greater than the current synced height
// in a newly restored wallet, and might be greater than the chain tip if a
// rollback happens. In that case, we will return zero progress here.
if syncState.Height < birthdayBlock.Height ||
bestHeight < birthdayBlock.Height {
return isRecoveryMode, progress, nil
}
// progress is the ratio of the [number of blocks processed] over the [total
// number of blocks] needed in a recovery mode, ranging from 0 to 1, in
// which,
// - total number of blocks is the current chain's best height minus the
// wallet's birthday height plus 1.
// - number of blocks processed is the wallet's synced height minus its
// birthday height plus 1.
// - If the wallet is born very recently, the bestHeight can be equal to
// the birthdayBlock.Height, and it will recovery instantly.
progress = float64(syncState.Height-birthdayBlock.Height+1) /
float64(bestHeight-birthdayBlock.Height+1)
return isRecoveryMode, progress, nil
}

@ -285,6 +285,11 @@ type WalletController interface {
// known to the wallet, expressed in Unix epoch time // known to the wallet, expressed in Unix epoch time
IsSynced() (bool, int64, error) IsSynced() (bool, int64, error)
// GetRecoveryInfo returns a boolean indicating whether the wallet is
// started in recovery mode. It also returns a float64 indicating the
// recovery progress made so far.
GetRecoveryInfo() (bool, float64, error)
// Start initializes the wallet, making any necessary connections, // Start initializes the wallet, making any necessary connections,
// starting up required goroutines etc. // starting up required goroutines etc.
Start() error Start() error

@ -45,6 +45,7 @@ import (
"github.com/lightningnetwork/lnd/lnwallet/chainfee" "github.com/lightningnetwork/lnd/lnwallet/chainfee"
"github.com/lightningnetwork/lnd/lnwallet/chanfunding" "github.com/lightningnetwork/lnd/lnwallet/chanfunding"
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
"github.com/stretchr/testify/require"
) )
var ( var (
@ -364,6 +365,51 @@ func createTestWallet(tempTestDir string, miningNode *rpctest.Harness,
return wallet, nil return wallet, nil
} }
func testGetRecoveryInfo(miner *rpctest.Harness,
alice, bob *lnwallet.LightningWallet, t *testing.T) {
// alice's wallet is in recovery mode
expectedRecoveryMode := true
expectedProgress := float64(1)
isRecoveryMode, progress, err := alice.GetRecoveryInfo()
require.NoError(t, err, "unable to get alice's recovery info")
require.Equal(t,
expectedRecoveryMode, isRecoveryMode, "recovery mode incorrect",
)
require.Equal(t, expectedProgress, progress, "progress incorrect")
// Generate 5 blocks and check the recovery process again.
const numBlocksMined = 5
_, err = miner.Node.Generate(numBlocksMined)
require.NoError(t, err, "unable to mine blocks")
// Check the recovery process. Once synced, the progress should be 1.
err = waitForWalletSync(miner, alice)
require.NoError(t, err, "Couldn't sync Alice's wallet")
isRecoveryMode, progress, err = alice.GetRecoveryInfo()
require.NoError(t, err, "unable to get alice's recovery info")
require.Equal(t,
expectedRecoveryMode, isRecoveryMode, "recovery mode incorrect",
)
require.Equal(t, expectedProgress, progress, "progress incorrect")
// bob's wallet is not in recovery mode
expectedRecoveryMode = false
expectedProgress = float64(0)
isRecoveryMode, progress, err = bob.GetRecoveryInfo()
require.NoError(t, err, "unable to get bob's recovery info")
require.Equal(t,
expectedRecoveryMode, isRecoveryMode, "recovery mode incorrect",
)
require.Equal(t, expectedProgress, progress, "progress incorrect")
}
func testDualFundingReservationWorkflow(miner *rpctest.Harness, func testDualFundingReservationWorkflow(miner *rpctest.Harness,
alice, bob *lnwallet.LightningWallet, t *testing.T) { alice, bob *lnwallet.LightningWallet, t *testing.T) {
@ -2712,6 +2758,10 @@ var walletTests = []walletTestCase{
name: "test sign create account", name: "test sign create account",
test: testSignOutputCreateAccount, test: testSignOutputCreateAccount,
}, },
{
name: "test get recovery info",
test: testGetRecoveryInfo,
},
} }
func clearWalletStates(a, b *lnwallet.LightningWallet) error { func clearWalletStates(a, b *lnwallet.LightningWallet) error {
@ -3177,6 +3227,8 @@ func runTests(t *testing.T, walletDriver *lnwallet.WalletDriver,
NetParams: netParams, NetParams: netParams,
ChainSource: aliceClient, ChainSource: aliceClient,
CoinType: keychain.CoinTypeTestnet, CoinType: keychain.CoinTypeTestnet,
// wallet starts in recovery mode
RecoveryWindow: 2,
} }
aliceWalletController, err = walletDriver.New(aliceWalletConfig) aliceWalletController, err = walletDriver.New(aliceWalletConfig)
if err != nil { if err != nil {
@ -3200,6 +3252,8 @@ func runTests(t *testing.T, walletDriver *lnwallet.WalletDriver,
NetParams: netParams, NetParams: netParams,
ChainSource: bobClient, ChainSource: bobClient,
CoinType: keychain.CoinTypeTestnet, CoinType: keychain.CoinTypeTestnet,
// wallet starts without recovery mode
RecoveryWindow: 0,
} }
bobWalletController, err = walletDriver.New(bobWalletConfig) bobWalletController, err = walletDriver.New(bobWalletConfig)
if err != nil { if err != nil {

@ -349,6 +349,9 @@ func (*mockWalletController) SubscribeTransactions() (lnwallet.TransactionSubscr
func (*mockWalletController) IsSynced() (bool, int64, error) { func (*mockWalletController) IsSynced() (bool, int64, error) {
return true, int64(0), nil return true, int64(0), nil
} }
func (*mockWalletController) GetRecoveryInfo() (bool, float64, error) {
return true, float64(1), nil
}
func (*mockWalletController) Start() error { func (*mockWalletController) Start() error {
return nil return nil
} }

@ -261,6 +261,10 @@ func mainRPCServerPermissions() map[string][]bakery.Op {
Entity: "info", Entity: "info",
Action: "read", Action: "read",
}}, }},
"/lnrpc.Lightning/GetRecoveryInfo": {{
Entity: "info",
Action: "read",
}},
"/lnrpc.Lightning/ListPeers": {{ "/lnrpc.Lightning/ListPeers": {{
Entity: "peers", Entity: "peers",
Action: "read", Action: "read",
@ -2481,6 +2485,27 @@ func (r *rpcServer) GetInfo(ctx context.Context,
}, nil }, nil
} }
// GetRecoveryInfo returns a boolean indicating whether the wallet is started
// in recovery mode, whether the recovery is finished, and the progress made
// so far.
func (r *rpcServer) GetRecoveryInfo(ctx context.Context,
in *lnrpc.GetRecoveryInfoRequest) (*lnrpc.GetRecoveryInfoResponse, error) {
isRecoveryMode, progress, err := r.server.cc.wallet.GetRecoveryInfo()
if err != nil {
return nil, fmt.Errorf("unable to get wallet recovery info: %v", err)
}
rpcsLog.Debugf("[getrecoveryinfo] is recovery mode=%v, progress=%v",
isRecoveryMode, progress)
return &lnrpc.GetRecoveryInfoResponse{
RecoveryMode: isRecoveryMode,
RecoveryFinished: progress == 1,
Progress: progress,
}, nil
}
// ListPeers returns a verbose listing of all currently active peers. // ListPeers returns a verbose listing of all currently active peers.
func (r *rpcServer) ListPeers(ctx context.Context, func (r *rpcServer) ListPeers(ctx context.Context,
in *lnrpc.ListPeersRequest) (*lnrpc.ListPeersResponse, error) { in *lnrpc.ListPeersRequest) (*lnrpc.ListPeersResponse, error) {