From 3b6f7fdb83509b023af4c54f01b34e3caee0f635 Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Sat, 2 Jun 2018 14:49:09 +0200 Subject: [PATCH 1/3] gitignore: ignore visual studio code config --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 39d610dc9d..2812f1653d 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,5 @@ profile.tmp .DS_Store main* + +.vscode From ab67b9a4de5dfc5672c826e96e5380e40c197fb3 Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Tue, 29 May 2018 11:26:47 +0200 Subject: [PATCH 2/3] rpcserver+lnrpc+lncli: add AbandonChannel rpc call Using AbandonChannel, a channel can be abandoned. This means removing all state without any on-chain or off-chain action. A close summary is the only thing that is stored in the db after abandoning. A specific close type Abandoned is added. Abandoned channels can be retrieved via the ClosedChannels RPC. --- channeldb/channel.go | 5 + cmd/lncli/commands.go | 140 +++++-- cmd/lncli/main.go | 1 + config_debug.go | 6 + config_production.go | 6 + lnrpc/rpc.pb.go | 903 ++++++++++++++++++++++------------------- lnrpc/rpc.pb.gw.go | 79 ++++ lnrpc/rpc.proto | 23 ++ lnrpc/rpc.swagger.json | 21 +- rpcserver.go | 80 +++- 10 files changed, 816 insertions(+), 448 deletions(-) create mode 100644 config_debug.go create mode 100644 config_production.go diff --git a/channeldb/channel.go b/channeldb/channel.go index c155b8fce9..daaf84439f 100644 --- a/channeldb/channel.go +++ b/channeldb/channel.go @@ -1792,6 +1792,11 @@ const ( // we or the remote fail at some point during the opening workflow, or // we timeout waiting for the funding transaction to be confirmed. FundingCanceled ClosureType = 3 + + // Abandoned indicates that the channel state was removed without + // any further actions. This is intended to clean up unusable + // channels during development. + Abandoned ClosureType = 5 ) // ChannelCloseSummary contains the final state of a channel at the point it diff --git a/cmd/lncli/commands.go b/cmd/lncli/commands.go index 0d9bb18a13..30967dc9e4 100644 --- a/cmd/lncli/commands.go +++ b/cmd/lncli/commands.go @@ -709,43 +709,19 @@ func closeChannel(ctx *cli.Context) error { return nil } + channelPoint, err := parseChannelPoint(ctx) + if err != nil { + return err + } + // TODO(roasbeef): implement time deadline within server req := &lnrpc.CloseChannelRequest{ - ChannelPoint: &lnrpc.ChannelPoint{}, + ChannelPoint: channelPoint, Force: ctx.Bool("force"), TargetConf: int32(ctx.Int64("conf_target")), SatPerByte: ctx.Int64("sat_per_byte"), } - args := ctx.Args() - - switch { - case ctx.IsSet("funding_txid"): - req.ChannelPoint.FundingTxid = &lnrpc.ChannelPoint_FundingTxidStr{ - FundingTxidStr: ctx.String("funding_txid"), - } - case args.Present(): - req.ChannelPoint.FundingTxid = &lnrpc.ChannelPoint_FundingTxidStr{ - FundingTxidStr: args.First(), - } - args = args.Tail() - default: - return fmt.Errorf("funding txid argument missing") - } - - switch { - case ctx.IsSet("output_index"): - req.ChannelPoint.OutputIndex = uint32(ctx.Int("output_index")) - case args.Present(): - index, err := strconv.ParseUint(args.First(), 10, 32) - if err != nil { - return fmt.Errorf("unable to decode output index: %v", err) - } - req.ChannelPoint.OutputIndex = uint32(index) - default: - req.ChannelPoint.OutputIndex = 0 - } - // After parsing the request, we'll spin up a goroutine that will // retrieve the closing transaction ID when attempting to close the // channel. We do this to because `executeChannelClose` can block, so we @@ -765,7 +741,7 @@ func closeChannel(ctx *cli.Context) error { }) }() - err := executeChannelClose(client, req, txidChan, ctx.Bool("block")) + err = executeChannelClose(client, req, txidChan, ctx.Bool("block")) if err != nil { return err } @@ -1029,6 +1005,102 @@ func promptForConfirmation(msg string) bool { } } +var abandonChannelCommand = cli.Command{ + Name: "abandonchannel", + Category: "Channels", + Usage: "Abandons an existing channel.", + Description: ` + Removes all channel state from the database except for a close + summary. This method can be used to get rid of permanently unusable + channels due to bugs fixed in newer versions of lnd. + + Only available when lnd is built in debug mode. + + To view which funding_txids/output_indexes can be used for this command, + see the channel_point values within the listchannels command output. + The format for a channel_point is 'funding_txid:output_index'.`, + ArgsUsage: "funding_txid [output_index]", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "funding_txid", + Usage: "the txid of the channel's funding transaction", + }, + cli.IntFlag{ + Name: "output_index", + Usage: "the output index for the funding output of the funding " + + "transaction", + }, + }, + Action: actionDecorator(abandonChannel), +} + +func abandonChannel(ctx *cli.Context) error { + ctxb := context.Background() + + client, cleanUp := getClient(ctx) + defer cleanUp() + + // Show command help if no arguments and flags were provided. + if ctx.NArg() == 0 && ctx.NumFlags() == 0 { + cli.ShowCommandHelp(ctx, "abandonchannel") + return nil + } + + channelPoint, err := parseChannelPoint(ctx) + if err != nil { + return err + } + + req := &lnrpc.AbandonChannelRequest{ + ChannelPoint: channelPoint, + } + + resp, err := client.AbandonChannel(ctxb, req) + if err != nil { + return err + } + + printRespJSON(resp) + return nil +} + +// parseChannelPoint parses a funding txid and output index from the command +// line. Both named options as well as unnamed parameters are supported. +func parseChannelPoint(ctx *cli.Context) (*lnrpc.ChannelPoint, error) { + channelPoint := &lnrpc.ChannelPoint{} + + args := ctx.Args() + + switch { + case ctx.IsSet("funding_txid"): + channelPoint.FundingTxid = &lnrpc.ChannelPoint_FundingTxidStr{ + FundingTxidStr: ctx.String("funding_txid"), + } + case args.Present(): + channelPoint.FundingTxid = &lnrpc.ChannelPoint_FundingTxidStr{ + FundingTxidStr: args.First(), + } + args = args.Tail() + default: + return nil, fmt.Errorf("funding txid argument missing") + } + + switch { + case ctx.IsSet("output_index"): + channelPoint.OutputIndex = uint32(ctx.Int("output_index")) + case args.Present(): + index, err := strconv.ParseUint(args.First(), 10, 32) + if err != nil { + return nil, fmt.Errorf("unable to decode output index: %v", err) + } + channelPoint.OutputIndex = uint32(index) + default: + channelPoint.OutputIndex = 0 + } + + return channelPoint, nil +} + var listPeersCommand = cli.Command{ Name: "listpeers", Category: "Peers", @@ -1618,6 +1690,11 @@ var closedChannelsCommand = cli.Command{ Name: "funding_canceled", Usage: "list channels that were never fully opened", }, + cli.BoolFlag{ + Name: "abandoned", + Usage: "list channels that were abandoned by " + + "the local node", + }, }, Action: actionDecorator(closedChannels), } @@ -1633,6 +1710,7 @@ func closedChannels(ctx *cli.Context) error { RemoteForce: ctx.Bool("remote_force"), Breach: ctx.Bool("breach"), FundingCanceled: ctx.Bool("funding_cancelled"), + Abandoned: ctx.Bool("abandoned"), } resp, err := client.ClosedChannels(ctxb, req) diff --git a/cmd/lncli/main.go b/cmd/lncli/main.go index d67095ef8d..7a698f0781 100644 --- a/cmd/lncli/main.go +++ b/cmd/lncli/main.go @@ -264,6 +264,7 @@ func main() { openChannelCommand, closeChannelCommand, closeAllChannelsCommand, + abandonChannelCommand, listPeersCommand, walletBalanceCommand, channelBalanceCommand, diff --git a/config_debug.go b/config_debug.go new file mode 100644 index 0000000000..6c9fd71434 --- /dev/null +++ b/config_debug.go @@ -0,0 +1,6 @@ +// +build debug + +package main + +// DebugBuild signals that this is a debug build. +const DebugBuild = true diff --git a/config_production.go b/config_production.go new file mode 100644 index 0000000000..59b986bf3c --- /dev/null +++ b/config_production.go @@ -0,0 +1,6 @@ +// +build !debug + +package main + +// DebugBuild signals that this is a debug build. +const DebugBuild = false diff --git a/lnrpc/rpc.pb.go b/lnrpc/rpc.pb.go index 73a7153b1d..6032884c75 100644 --- a/lnrpc/rpc.pb.go +++ b/lnrpc/rpc.pb.go @@ -102,6 +102,8 @@ It has these top-level messages: ListPaymentsResponse DeleteAllPaymentsRequest DeleteAllPaymentsResponse + AbandonChannelRequest + AbandonChannelResponse DebugLevelRequest DebugLevelResponse PayReqString @@ -169,6 +171,7 @@ const ( ChannelCloseSummary_REMOTE_FORCE_CLOSE ChannelCloseSummary_ClosureType = 2 ChannelCloseSummary_BREACH_CLOSE ChannelCloseSummary_ClosureType = 3 ChannelCloseSummary_FUNDING_CANCELED ChannelCloseSummary_ClosureType = 4 + ChannelCloseSummary_ABANDONED ChannelCloseSummary_ClosureType = 5 ) var ChannelCloseSummary_ClosureType_name = map[int32]string{ @@ -177,6 +180,7 @@ var ChannelCloseSummary_ClosureType_name = map[int32]string{ 2: "REMOTE_FORCE_CLOSE", 3: "BREACH_CLOSE", 4: "FUNDING_CANCELED", + 5: "ABANDONED", } var ChannelCloseSummary_ClosureType_value = map[string]int32{ "COOPERATIVE_CLOSE": 0, @@ -184,6 +188,7 @@ var ChannelCloseSummary_ClosureType_value = map[string]int32{ "REMOTE_FORCE_CLOSE": 2, "BREACH_CLOSE": 3, "FUNDING_CANCELED": 4, + "ABANDONED": 5, } func (x ChannelCloseSummary_ClosureType) String() string { @@ -1606,6 +1611,7 @@ type ClosedChannelsRequest struct { RemoteForce bool `protobuf:"varint,3,opt,name=remote_force,json=remoteForce" json:"remote_force,omitempty"` Breach bool `protobuf:"varint,4,opt,name=breach" json:"breach,omitempty"` FundingCanceled bool `protobuf:"varint,5,opt,name=funding_canceled,json=fundingCanceled" json:"funding_canceled,omitempty"` + Abandoned bool `protobuf:"varint,6,opt,name=abandoned" json:"abandoned,omitempty"` } func (m *ClosedChannelsRequest) Reset() { *m = ClosedChannelsRequest{} } @@ -1648,6 +1654,13 @@ func (m *ClosedChannelsRequest) GetFundingCanceled() bool { return false } +func (m *ClosedChannelsRequest) GetAbandoned() bool { + if m != nil { + return m.Abandoned + } + return false +} + type ClosedChannelsResponse struct { Channels []*ChannelCloseSummary `protobuf:"bytes,1,rep,name=channels" json:"channels,omitempty"` } @@ -4323,6 +4336,30 @@ func (m *DeleteAllPaymentsResponse) String() string { return proto.Co func (*DeleteAllPaymentsResponse) ProtoMessage() {} func (*DeleteAllPaymentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{93} } +type AbandonChannelRequest struct { + ChannelPoint *ChannelPoint `protobuf:"bytes,1,opt,name=channel_point,json=channelPoint" json:"channel_point,omitempty"` +} + +func (m *AbandonChannelRequest) Reset() { *m = AbandonChannelRequest{} } +func (m *AbandonChannelRequest) String() string { return proto.CompactTextString(m) } +func (*AbandonChannelRequest) ProtoMessage() {} +func (*AbandonChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{94} } + +func (m *AbandonChannelRequest) GetChannelPoint() *ChannelPoint { + if m != nil { + return m.ChannelPoint + } + return nil +} + +type AbandonChannelResponse struct { +} + +func (m *AbandonChannelResponse) Reset() { *m = AbandonChannelResponse{} } +func (m *AbandonChannelResponse) String() string { return proto.CompactTextString(m) } +func (*AbandonChannelResponse) ProtoMessage() {} +func (*AbandonChannelResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{95} } + type DebugLevelRequest struct { Show bool `protobuf:"varint,1,opt,name=show" json:"show,omitempty"` LevelSpec string `protobuf:"bytes,2,opt,name=level_spec,json=levelSpec" json:"level_spec,omitempty"` @@ -4331,7 +4368,7 @@ type DebugLevelRequest struct { func (m *DebugLevelRequest) Reset() { *m = DebugLevelRequest{} } func (m *DebugLevelRequest) String() string { return proto.CompactTextString(m) } func (*DebugLevelRequest) ProtoMessage() {} -func (*DebugLevelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{94} } +func (*DebugLevelRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{96} } func (m *DebugLevelRequest) GetShow() bool { if m != nil { @@ -4354,7 +4391,7 @@ type DebugLevelResponse struct { func (m *DebugLevelResponse) Reset() { *m = DebugLevelResponse{} } func (m *DebugLevelResponse) String() string { return proto.CompactTextString(m) } func (*DebugLevelResponse) ProtoMessage() {} -func (*DebugLevelResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{95} } +func (*DebugLevelResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{97} } func (m *DebugLevelResponse) GetSubSystems() string { if m != nil { @@ -4371,7 +4408,7 @@ type PayReqString struct { func (m *PayReqString) Reset() { *m = PayReqString{} } func (m *PayReqString) String() string { return proto.CompactTextString(m) } func (*PayReqString) ProtoMessage() {} -func (*PayReqString) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{96} } +func (*PayReqString) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{98} } func (m *PayReqString) GetPayReq() string { if m != nil { @@ -4396,7 +4433,7 @@ type PayReq struct { func (m *PayReq) Reset() { *m = PayReq{} } func (m *PayReq) String() string { return proto.CompactTextString(m) } func (*PayReq) ProtoMessage() {} -func (*PayReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{97} } +func (*PayReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{99} } func (m *PayReq) GetDestination() string { if m != nil { @@ -4474,7 +4511,7 @@ type FeeReportRequest struct { func (m *FeeReportRequest) Reset() { *m = FeeReportRequest{} } func (m *FeeReportRequest) String() string { return proto.CompactTextString(m) } func (*FeeReportRequest) ProtoMessage() {} -func (*FeeReportRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{98} } +func (*FeeReportRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{100} } type ChannelFeeReport struct { // / The channel that this fee report belongs to. @@ -4490,7 +4527,7 @@ type ChannelFeeReport struct { func (m *ChannelFeeReport) Reset() { *m = ChannelFeeReport{} } func (m *ChannelFeeReport) String() string { return proto.CompactTextString(m) } func (*ChannelFeeReport) ProtoMessage() {} -func (*ChannelFeeReport) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{99} } +func (*ChannelFeeReport) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{101} } func (m *ChannelFeeReport) GetChanPoint() string { if m != nil { @@ -4534,7 +4571,7 @@ type FeeReportResponse struct { func (m *FeeReportResponse) Reset() { *m = FeeReportResponse{} } func (m *FeeReportResponse) String() string { return proto.CompactTextString(m) } func (*FeeReportResponse) ProtoMessage() {} -func (*FeeReportResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{100} } +func (*FeeReportResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{102} } func (m *FeeReportResponse) GetChannelFees() []*ChannelFeeReport { if m != nil { @@ -4580,7 +4617,7 @@ type PolicyUpdateRequest struct { func (m *PolicyUpdateRequest) Reset() { *m = PolicyUpdateRequest{} } func (m *PolicyUpdateRequest) String() string { return proto.CompactTextString(m) } func (*PolicyUpdateRequest) ProtoMessage() {} -func (*PolicyUpdateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{101} } +func (*PolicyUpdateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{103} } type isPolicyUpdateRequest_Scope interface{ isPolicyUpdateRequest_Scope() } @@ -4715,7 +4752,7 @@ type PolicyUpdateResponse struct { func (m *PolicyUpdateResponse) Reset() { *m = PolicyUpdateResponse{} } func (m *PolicyUpdateResponse) String() string { return proto.CompactTextString(m) } func (*PolicyUpdateResponse) ProtoMessage() {} -func (*PolicyUpdateResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{102} } +func (*PolicyUpdateResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{104} } type ForwardingHistoryRequest struct { // / Start time is the starting point of the forwarding history request. All records beyond this point will be included, respecting the end time, and the index offset. @@ -4731,7 +4768,7 @@ type ForwardingHistoryRequest struct { func (m *ForwardingHistoryRequest) Reset() { *m = ForwardingHistoryRequest{} } func (m *ForwardingHistoryRequest) String() string { return proto.CompactTextString(m) } func (*ForwardingHistoryRequest) ProtoMessage() {} -func (*ForwardingHistoryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{103} } +func (*ForwardingHistoryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{105} } func (m *ForwardingHistoryRequest) GetStartTime() uint64 { if m != nil { @@ -4779,7 +4816,7 @@ type ForwardingEvent struct { func (m *ForwardingEvent) Reset() { *m = ForwardingEvent{} } func (m *ForwardingEvent) String() string { return proto.CompactTextString(m) } func (*ForwardingEvent) ProtoMessage() {} -func (*ForwardingEvent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{104} } +func (*ForwardingEvent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{106} } func (m *ForwardingEvent) GetTimestamp() uint64 { if m != nil { @@ -4833,7 +4870,7 @@ type ForwardingHistoryResponse struct { func (m *ForwardingHistoryResponse) Reset() { *m = ForwardingHistoryResponse{} } func (m *ForwardingHistoryResponse) String() string { return proto.CompactTextString(m) } func (*ForwardingHistoryResponse) ProtoMessage() {} -func (*ForwardingHistoryResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{105} } +func (*ForwardingHistoryResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{107} } func (m *ForwardingHistoryResponse) GetForwardingEvents() []*ForwardingEvent { if m != nil { @@ -4949,6 +4986,8 @@ func init() { proto.RegisterType((*ListPaymentsResponse)(nil), "lnrpc.ListPaymentsResponse") proto.RegisterType((*DeleteAllPaymentsRequest)(nil), "lnrpc.DeleteAllPaymentsRequest") proto.RegisterType((*DeleteAllPaymentsResponse)(nil), "lnrpc.DeleteAllPaymentsResponse") + proto.RegisterType((*AbandonChannelRequest)(nil), "lnrpc.AbandonChannelRequest") + proto.RegisterType((*AbandonChannelResponse)(nil), "lnrpc.AbandonChannelResponse") proto.RegisterType((*DebugLevelRequest)(nil), "lnrpc.DebugLevelRequest") proto.RegisterType((*DebugLevelResponse)(nil), "lnrpc.DebugLevelResponse") proto.RegisterType((*PayReqString)(nil), "lnrpc.PayReqString") @@ -5297,6 +5336,12 @@ type LightningClient interface { // closure transaction is confirmed, or a manual fee rate. If neither are // specified, then a default lax, block confirmation target is used. CloseChannel(ctx context.Context, in *CloseChannelRequest, opts ...grpc.CallOption) (Lightning_CloseChannelClient, error) + // * lncli: `abandonchannel` + // AbandonChannel removes all channel state from the database except for a + // close summary. This method can be used to get rid of permanently unusable + // channels due to bugs fixed in newer versions of lnd. Only available + // when in debug builds of lnd. + AbandonChannel(ctx context.Context, in *AbandonChannelRequest, opts ...grpc.CallOption) (*AbandonChannelResponse, error) // * lncli: `sendpayment` // SendPayment dispatches a bi-directional streaming RPC for sending payments // through the Lightning Network. A single RPC invocation creates a persistent @@ -5688,6 +5733,15 @@ func (x *lightningCloseChannelClient) Recv() (*CloseStatusUpdate, error) { return m, nil } +func (c *lightningClient) AbandonChannel(ctx context.Context, in *AbandonChannelRequest, opts ...grpc.CallOption) (*AbandonChannelResponse, error) { + out := new(AbandonChannelResponse) + err := grpc.Invoke(ctx, "/lnrpc.Lightning/AbandonChannel", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *lightningClient) SendPayment(ctx context.Context, opts ...grpc.CallOption) (Lightning_SendPaymentClient, error) { stream, err := grpc.NewClientStream(ctx, &_Lightning_serviceDesc.Streams[3], c.cc, "/lnrpc.Lightning/SendPayment", opts...) if err != nil { @@ -6081,6 +6135,12 @@ type LightningServer interface { // closure transaction is confirmed, or a manual fee rate. If neither are // specified, then a default lax, block confirmation target is used. CloseChannel(*CloseChannelRequest, Lightning_CloseChannelServer) error + // * lncli: `abandonchannel` + // AbandonChannel removes all channel state from the database except for a + // close summary. This method can be used to get rid of permanently unusable + // channels due to bugs fixed in newer versions of lnd. Only available + // when in debug builds of lnd. + AbandonChannel(context.Context, *AbandonChannelRequest) (*AbandonChannelResponse, error) // * lncli: `sendpayment` // SendPayment dispatches a bi-directional streaming RPC for sending payments // through the Lightning Network. A single RPC invocation creates a persistent @@ -6588,6 +6648,24 @@ func (x *lightningCloseChannelServer) Send(m *CloseStatusUpdate) error { return x.ServerStream.SendMsg(m) } +func _Lightning_AbandonChannel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AbandonChannelRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LightningServer).AbandonChannel(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/lnrpc.Lightning/AbandonChannel", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LightningServer).AbandonChannel(ctx, req.(*AbandonChannelRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Lightning_SendPayment_Handler(srv interface{}, stream grpc.ServerStream) error { return srv.(LightningServer).SendPayment(&lightningSendPaymentServer{stream}) } @@ -7078,6 +7156,10 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{ MethodName: "OpenChannelSync", Handler: _Lightning_OpenChannelSync_Handler, }, + { + MethodName: "AbandonChannel", + Handler: _Lightning_AbandonChannel_Handler, + }, { MethodName: "SendPaymentSync", Handler: _Lightning_SendPaymentSync_Handler, @@ -7196,400 +7278,405 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("rpc.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 6315 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x5c, 0xdd, 0x8f, 0x1c, 0xd9, - 0x55, 0x77, 0xf5, 0xc7, 0xcc, 0xf4, 0xe9, 0x9e, 0x99, 0x9e, 0x3b, 0xe3, 0x99, 0x76, 0xef, 0xae, - 0xd7, 0x5b, 0xb1, 0xd6, 0xce, 0xb0, 0xd8, 0xde, 0x49, 0xb2, 0xda, 0xec, 0x42, 0x82, 0x3d, 0x1e, - 0x7b, 0x9c, 0xcc, 0xda, 0x93, 0x1a, 0x3b, 0x86, 0x04, 0xd4, 0xa9, 0xe9, 0xbe, 0xd3, 0x53, 0x71, - 0x77, 0x55, 0xa7, 0xaa, 0x7a, 0xc6, 0x9d, 0xc5, 0x52, 0x20, 0x88, 0x27, 0x22, 0x84, 0x40, 0x42, - 0x41, 0x42, 0x48, 0x01, 0xa1, 0xf0, 0x07, 0xc0, 0x4b, 0x40, 0xe2, 0x81, 0x17, 0x90, 0x10, 0x0f, - 0x79, 0x8a, 0x78, 0x84, 0x17, 0x40, 0xbc, 0x20, 0xf1, 0x8a, 0xd0, 0x39, 0xf7, 0xa3, 0xee, 0xad, - 0xaa, 0xf1, 0x38, 0x1f, 0xf0, 0xd6, 0xf7, 0x77, 0x4f, 0xdd, 0xcf, 0xf3, 0x75, 0xcf, 0x3d, 0xb7, - 0xa1, 0x11, 0x4f, 0xfa, 0x37, 0x26, 0x71, 0x94, 0x46, 0xac, 0x3e, 0x0a, 0xe3, 0x49, 0xbf, 0xfb, - 0xfa, 0x30, 0x8a, 0x86, 0x23, 0x7e, 0xd3, 0x9f, 0x04, 0x37, 0xfd, 0x30, 0x8c, 0x52, 0x3f, 0x0d, - 0xa2, 0x30, 0x11, 0x44, 0xee, 0xd7, 0x60, 0xe9, 0x3e, 0x0f, 0x0f, 0x38, 0x1f, 0x78, 0xfc, 0x1b, - 0x53, 0x9e, 0xa4, 0xec, 0xe7, 0x60, 0xc5, 0xe7, 0xdf, 0xe4, 0x7c, 0xd0, 0x9b, 0xf8, 0x49, 0x32, - 0x39, 0x8e, 0xfd, 0x84, 0x77, 0x9c, 0x2b, 0xce, 0xf5, 0x96, 0xd7, 0x16, 0x15, 0xfb, 0x1a, 0x67, - 0x6f, 0x41, 0x2b, 0x41, 0x52, 0x1e, 0xa6, 0x71, 0x34, 0x99, 0x75, 0x2a, 0x44, 0xd7, 0x44, 0x6c, - 0x47, 0x40, 0xee, 0x08, 0x96, 0x75, 0x0f, 0xc9, 0x24, 0x0a, 0x13, 0xce, 0x6e, 0xc1, 0x5a, 0x3f, - 0x98, 0x1c, 0xf3, 0xb8, 0x47, 0x1f, 0x8f, 0x43, 0x3e, 0x8e, 0xc2, 0xa0, 0xdf, 0x71, 0xae, 0x54, - 0xaf, 0x37, 0x3c, 0x26, 0xea, 0xf0, 0x8b, 0x8f, 0x64, 0x0d, 0xbb, 0x06, 0xcb, 0x3c, 0x14, 0x38, - 0x1f, 0xd0, 0x57, 0xb2, 0xab, 0xa5, 0x0c, 0xc6, 0x0f, 0xdc, 0xbf, 0x73, 0x60, 0xe5, 0x41, 0x18, - 0xa4, 0x4f, 0xfd, 0xd1, 0x88, 0xa7, 0x6a, 0x4e, 0xd7, 0x60, 0xf9, 0x94, 0x00, 0x9a, 0xd3, 0x69, - 0x14, 0x0f, 0xe4, 0x8c, 0x96, 0x04, 0xbc, 0x2f, 0xd1, 0x33, 0x47, 0x56, 0x39, 0x73, 0x64, 0xa5, - 0xcb, 0x55, 0x3d, 0x63, 0xb9, 0xae, 0xc1, 0x72, 0xcc, 0xfb, 0xd1, 0x09, 0x8f, 0x67, 0xbd, 0xd3, - 0x20, 0x1c, 0x44, 0xa7, 0x9d, 0xda, 0x15, 0xe7, 0x7a, 0xdd, 0x5b, 0x52, 0xf0, 0x53, 0x42, 0xdd, - 0x35, 0x60, 0xe6, 0x2c, 0xc4, 0xba, 0xb9, 0x43, 0x58, 0x7d, 0x12, 0x8e, 0xa2, 0xfe, 0xb3, 0x9f, - 0x70, 0x76, 0x25, 0xdd, 0x57, 0x4a, 0xbb, 0x5f, 0x87, 0x35, 0xbb, 0x23, 0x39, 0x00, 0x0e, 0x17, - 0xb7, 0x8f, 0xfd, 0x70, 0xc8, 0x55, 0x93, 0x6a, 0x08, 0x9f, 0x84, 0x76, 0x7f, 0x1a, 0xc7, 0x3c, - 0x2c, 0x8c, 0x61, 0x59, 0xe2, 0x7a, 0x10, 0x6f, 0x41, 0x2b, 0xe4, 0xa7, 0x19, 0x99, 0x64, 0x99, - 0x90, 0x9f, 0x2a, 0x12, 0xb7, 0x03, 0xeb, 0xf9, 0x6e, 0xe4, 0x00, 0xbe, 0x5b, 0x81, 0xe6, 0xe3, - 0xd8, 0x0f, 0x13, 0xbf, 0x8f, 0x5c, 0xcc, 0x3a, 0x30, 0x9f, 0x3e, 0xef, 0x1d, 0xfb, 0xc9, 0x31, - 0x75, 0xd7, 0xf0, 0x54, 0x91, 0xad, 0xc3, 0x9c, 0x3f, 0x8e, 0xa6, 0x61, 0x4a, 0x1d, 0x54, 0x3d, - 0x59, 0x62, 0xef, 0xc0, 0x4a, 0x38, 0x1d, 0xf7, 0xfa, 0x51, 0x78, 0x14, 0xc4, 0x63, 0x21, 0x0b, - 0xb4, 0x5f, 0x75, 0xaf, 0x58, 0xc1, 0x2e, 0x03, 0x1c, 0xe2, 0x3a, 0x88, 0x2e, 0x6a, 0xd4, 0x85, - 0x81, 0x30, 0x17, 0x5a, 0xb2, 0xc4, 0x83, 0xe1, 0x71, 0xda, 0xa9, 0x53, 0x43, 0x16, 0x86, 0x6d, - 0xa4, 0xc1, 0x98, 0xf7, 0x92, 0xd4, 0x1f, 0x4f, 0x3a, 0x73, 0x34, 0x1a, 0x03, 0xa1, 0xfa, 0x28, - 0xf5, 0x47, 0xbd, 0x23, 0xce, 0x93, 0xce, 0xbc, 0xac, 0xd7, 0x08, 0x7b, 0x1b, 0x96, 0x06, 0x3c, - 0x49, 0x7b, 0xfe, 0x60, 0x10, 0xf3, 0x24, 0xe1, 0x49, 0x67, 0x81, 0xb8, 0x31, 0x87, 0xe2, 0xaa, - 0xdd, 0xe7, 0xa9, 0xb1, 0x3a, 0x89, 0xdc, 0x1d, 0x77, 0x0f, 0x98, 0x01, 0xdf, 0xe5, 0xa9, 0x1f, - 0x8c, 0x12, 0xf6, 0x1e, 0xb4, 0x52, 0x83, 0x98, 0xa4, 0xaf, 0xb9, 0xc5, 0x6e, 0x90, 0xda, 0xb8, - 0x61, 0x7c, 0xe0, 0x59, 0x74, 0xee, 0x7d, 0x58, 0xb8, 0xc7, 0xf9, 0x5e, 0x30, 0x0e, 0x52, 0xb6, - 0x0e, 0xf5, 0xa3, 0xe0, 0x39, 0x17, 0x9b, 0x5d, 0xdd, 0xbd, 0xe0, 0x89, 0x22, 0xeb, 0xc2, 0xfc, - 0x84, 0xc7, 0x7d, 0xae, 0x96, 0x7f, 0xf7, 0x82, 0xa7, 0x80, 0x3b, 0xf3, 0x50, 0x1f, 0xe1, 0xc7, - 0xee, 0xf7, 0x2b, 0xd0, 0x3c, 0xe0, 0xa1, 0x66, 0x22, 0x06, 0x35, 0x9c, 0x92, 0x64, 0x1c, 0xfa, - 0xcd, 0xde, 0x84, 0x26, 0x4d, 0x33, 0x49, 0xe3, 0x20, 0x1c, 0x52, 0x63, 0x0d, 0x0f, 0x10, 0x3a, - 0x20, 0x84, 0xb5, 0xa1, 0xea, 0x8f, 0x53, 0xda, 0xc1, 0xaa, 0x87, 0x3f, 0x91, 0xc1, 0x26, 0xfe, - 0x6c, 0x8c, 0xbc, 0xa8, 0x77, 0xad, 0xe5, 0x35, 0x25, 0xb6, 0x8b, 0xdb, 0x76, 0x03, 0x56, 0x4d, - 0x12, 0xd5, 0x7a, 0x9d, 0x5a, 0x5f, 0x31, 0x28, 0x65, 0x27, 0xd7, 0x60, 0x59, 0xd1, 0xc7, 0x62, - 0xb0, 0xb4, 0x8f, 0x0d, 0x6f, 0x49, 0xc2, 0x6a, 0x0a, 0xd7, 0xa1, 0x7d, 0x14, 0x84, 0xfe, 0xa8, - 0xd7, 0x1f, 0xa5, 0x27, 0xbd, 0x01, 0x1f, 0xa5, 0x3e, 0xed, 0x68, 0xdd, 0x5b, 0x22, 0x7c, 0x7b, - 0x94, 0x9e, 0xdc, 0x45, 0x94, 0xbd, 0x03, 0x8d, 0x23, 0xce, 0x7b, 0xb4, 0x12, 0x9d, 0x85, 0x2b, - 0xce, 0xf5, 0xe6, 0xd6, 0xb2, 0x5c, 0x7a, 0xb5, 0xba, 0xde, 0xc2, 0x91, 0xfc, 0xe5, 0xfe, 0x81, - 0x03, 0x2d, 0xb1, 0x54, 0x52, 0x85, 0x5e, 0x85, 0x45, 0x35, 0x22, 0x1e, 0xc7, 0x51, 0x2c, 0xd9, - 0xdf, 0x06, 0xd9, 0x26, 0xb4, 0x15, 0x30, 0x89, 0x79, 0x30, 0xf6, 0x87, 0x5c, 0xca, 0x5b, 0x01, - 0x67, 0x5b, 0x59, 0x8b, 0x71, 0x34, 0x4d, 0x85, 0x12, 0x6b, 0x6e, 0xb5, 0xe4, 0xa0, 0x3c, 0xc4, - 0x3c, 0x9b, 0xc4, 0xfd, 0x8e, 0x03, 0x0c, 0x87, 0xf5, 0x38, 0x12, 0xd5, 0x72, 0x15, 0xf2, 0x3b, - 0xe0, 0xbc, 0xf2, 0x0e, 0x54, 0xce, 0xda, 0x81, 0xab, 0x30, 0x47, 0x5d, 0xa2, 0xac, 0x56, 0x0b, - 0xc3, 0x92, 0x75, 0xee, 0xf7, 0x1c, 0x68, 0xa1, 0xe6, 0x08, 0xf9, 0x68, 0x3f, 0x0a, 0xc2, 0x94, - 0xdd, 0x02, 0x76, 0x34, 0x0d, 0x07, 0x41, 0x38, 0xec, 0xa5, 0xcf, 0x83, 0x41, 0xef, 0x70, 0x86, - 0x4d, 0xd0, 0x78, 0x76, 0x2f, 0x78, 0x25, 0x75, 0xec, 0x1d, 0x68, 0x5b, 0x68, 0x92, 0xc6, 0x62, - 0x54, 0xbb, 0x17, 0xbc, 0x42, 0x0d, 0xca, 0x7f, 0x34, 0x4d, 0x27, 0xd3, 0xb4, 0x17, 0x84, 0x03, - 0xfe, 0x9c, 0xd6, 0x6c, 0xd1, 0xb3, 0xb0, 0x3b, 0x4b, 0xd0, 0x32, 0xbf, 0x73, 0x3f, 0x07, 0xed, - 0x3d, 0x54, 0x0c, 0x61, 0x10, 0x0e, 0x6f, 0x0b, 0xe9, 0x45, 0x6d, 0x35, 0x99, 0x1e, 0x3e, 0xe3, - 0x33, 0xb9, 0x8f, 0xb2, 0x84, 0x22, 0x71, 0x1c, 0x25, 0xa9, 0x5c, 0x17, 0xfa, 0xed, 0xfe, 0x8b, - 0x03, 0xcb, 0xb8, 0xe8, 0x1f, 0xf9, 0xe1, 0x4c, 0xad, 0xf8, 0x1e, 0xb4, 0xb0, 0xa9, 0xc7, 0xd1, - 0x6d, 0xa1, 0xf3, 0x84, 0x2c, 0x5f, 0x97, 0x8b, 0x94, 0xa3, 0xbe, 0x61, 0x92, 0xa2, 0x99, 0x9e, - 0x79, 0xd6, 0xd7, 0x28, 0x74, 0xa9, 0x1f, 0x0f, 0x79, 0x4a, 0xda, 0x50, 0x6a, 0x47, 0x10, 0xd0, - 0x76, 0x14, 0x1e, 0xb1, 0x2b, 0xd0, 0x4a, 0xfc, 0xb4, 0x37, 0xe1, 0x31, 0xad, 0x1a, 0x09, 0x4e, - 0xd5, 0x83, 0xc4, 0x4f, 0xf7, 0x79, 0x7c, 0x67, 0x96, 0xf2, 0xee, 0xe7, 0x61, 0xa5, 0xd0, 0x0b, - 0xca, 0x6a, 0x36, 0x45, 0xfc, 0xc9, 0xd6, 0xa0, 0x7e, 0xe2, 0x8f, 0xa6, 0x5c, 0x2a, 0x69, 0x51, - 0xf8, 0xa0, 0xf2, 0xbe, 0xe3, 0xbe, 0x0d, 0xed, 0x6c, 0xd8, 0x92, 0xe9, 0x19, 0xd4, 0x70, 0x05, - 0x65, 0x03, 0xf4, 0xdb, 0xfd, 0x0d, 0x47, 0x10, 0x6e, 0x47, 0x81, 0x56, 0x78, 0x48, 0x88, 0x7a, - 0x51, 0x11, 0xe2, 0xef, 0x33, 0x0d, 0xc2, 0x4f, 0x3f, 0x59, 0xf7, 0x1a, 0xac, 0x18, 0x43, 0x78, - 0xc9, 0x60, 0xbf, 0xe3, 0xc0, 0xca, 0x43, 0x7e, 0x2a, 0x77, 0x5d, 0x8d, 0xf6, 0x7d, 0xa8, 0xa5, - 0xb3, 0x89, 0x70, 0xb2, 0x96, 0xb6, 0xae, 0xca, 0x4d, 0x2b, 0xd0, 0xdd, 0x90, 0xc5, 0xc7, 0xb3, - 0x09, 0xf7, 0xe8, 0x0b, 0xf7, 0x73, 0xd0, 0x34, 0x40, 0xb6, 0x01, 0xab, 0x4f, 0x1f, 0x3c, 0x7e, - 0xb8, 0x73, 0x70, 0xd0, 0xdb, 0x7f, 0x72, 0xe7, 0x8b, 0x3b, 0xbf, 0xd2, 0xdb, 0xbd, 0x7d, 0xb0, - 0xdb, 0xbe, 0xc0, 0xd6, 0x81, 0x3d, 0xdc, 0x39, 0x78, 0xbc, 0x73, 0xd7, 0xc2, 0x1d, 0xb7, 0x0b, - 0x9d, 0x87, 0xfc, 0xf4, 0x69, 0x90, 0x86, 0x3c, 0x49, 0xec, 0xde, 0xdc, 0x1b, 0xc0, 0xcc, 0x21, - 0xc8, 0x59, 0x75, 0x60, 0x5e, 0x5a, 0x1c, 0x65, 0x70, 0x65, 0xd1, 0x7d, 0x1b, 0xd8, 0x41, 0x30, - 0x0c, 0x3f, 0xe2, 0x49, 0xe2, 0x0f, 0xb5, 0x2a, 0x68, 0x43, 0x75, 0x9c, 0x0c, 0xa5, 0x06, 0xc0, - 0x9f, 0xee, 0xa7, 0x60, 0xd5, 0xa2, 0x93, 0x0d, 0xbf, 0x0e, 0x8d, 0x24, 0x18, 0x86, 0x7e, 0x3a, - 0x8d, 0xb9, 0x6c, 0x3a, 0x03, 0xdc, 0x7b, 0xb0, 0xf6, 0x65, 0x1e, 0x07, 0x47, 0xb3, 0xf3, 0x9a, - 0xb7, 0xdb, 0xa9, 0xe4, 0xdb, 0xd9, 0x81, 0x8b, 0xb9, 0x76, 0x64, 0xf7, 0x82, 0x11, 0xe5, 0x76, - 0x2d, 0x78, 0xa2, 0x60, 0x88, 0x65, 0xc5, 0x14, 0x4b, 0xf7, 0x09, 0xb0, 0xed, 0x28, 0x0c, 0x79, - 0x3f, 0xdd, 0xe7, 0x3c, 0xce, 0x3c, 0xe7, 0x8c, 0xeb, 0x9a, 0x5b, 0x1b, 0x72, 0x1f, 0xf3, 0xb2, - 0x2e, 0xd9, 0x91, 0x41, 0x6d, 0xc2, 0xe3, 0x31, 0x35, 0xbc, 0xe0, 0xd1, 0x6f, 0xf7, 0x22, 0xac, - 0x5a, 0xcd, 0x4a, 0xa7, 0xe7, 0x5d, 0xb8, 0x78, 0x37, 0x48, 0xfa, 0xc5, 0x0e, 0x3b, 0x30, 0x3f, - 0x99, 0x1e, 0xf6, 0x32, 0x99, 0x52, 0x45, 0xf4, 0x05, 0xf2, 0x9f, 0xc8, 0xc6, 0x7e, 0xdb, 0x81, - 0xda, 0xee, 0xe3, 0xbd, 0x6d, 0xd6, 0x85, 0x85, 0x20, 0xec, 0x47, 0x63, 0x54, 0xbb, 0x62, 0xd2, - 0xba, 0x7c, 0xa6, 0xac, 0xbc, 0x0e, 0x0d, 0xd2, 0xd6, 0xe8, 0xde, 0x48, 0x27, 0x37, 0x03, 0xd0, - 0xb5, 0xe2, 0xcf, 0x27, 0x41, 0x4c, 0xbe, 0x93, 0xf2, 0x88, 0x6a, 0xa4, 0x11, 0x8b, 0x15, 0xee, - 0xff, 0xd4, 0x60, 0x5e, 0xea, 0x6a, 0xea, 0xaf, 0x9f, 0x06, 0x27, 0x5c, 0x8e, 0x44, 0x96, 0xd0, - 0xca, 0xc5, 0x7c, 0x1c, 0xa5, 0xbc, 0x67, 0x6d, 0x83, 0x0d, 0x22, 0x55, 0x5f, 0x34, 0xd4, 0x9b, - 0xa0, 0xd6, 0xa7, 0x91, 0x35, 0x3c, 0x1b, 0xc4, 0xc5, 0x42, 0xa0, 0x17, 0x0c, 0x68, 0x4c, 0x35, - 0x4f, 0x15, 0x71, 0x25, 0xfa, 0xfe, 0xc4, 0xef, 0x07, 0xe9, 0x4c, 0x0a, 0xb7, 0x2e, 0x63, 0xdb, - 0xa3, 0xa8, 0xef, 0x8f, 0x7a, 0x87, 0xfe, 0xc8, 0x0f, 0xfb, 0x5c, 0xfa, 0x6f, 0x36, 0x88, 0x2e, - 0x9a, 0x1c, 0x92, 0x22, 0x13, 0x6e, 0x5c, 0x0e, 0x45, 0x57, 0xaf, 0x1f, 0x8d, 0xc7, 0x41, 0x8a, - 0x9e, 0x1d, 0x59, 0xfd, 0xaa, 0x67, 0x20, 0x34, 0x13, 0x51, 0x3a, 0x15, 0xab, 0xd7, 0x10, 0xbd, - 0x59, 0x20, 0xb6, 0x82, 0xae, 0x03, 0x2a, 0xa4, 0x67, 0xa7, 0x1d, 0x10, 0xad, 0x64, 0x08, 0xee, - 0xc3, 0x34, 0x4c, 0x78, 0x9a, 0x8e, 0xf8, 0x40, 0x0f, 0xa8, 0x49, 0x64, 0xc5, 0x0a, 0x76, 0x0b, - 0x56, 0x85, 0xb3, 0x99, 0xf8, 0x69, 0x94, 0x1c, 0x07, 0x49, 0x2f, 0x41, 0xb7, 0xad, 0x45, 0xf4, - 0x65, 0x55, 0xec, 0x7d, 0xd8, 0xc8, 0xc1, 0x31, 0xef, 0xf3, 0xe0, 0x84, 0x0f, 0x3a, 0x8b, 0xf4, - 0xd5, 0x59, 0xd5, 0xec, 0x0a, 0x34, 0xd1, 0xc7, 0x9e, 0x4e, 0x06, 0x3e, 0xda, 0xe1, 0x25, 0xda, - 0x07, 0x13, 0x62, 0xef, 0xc2, 0xe2, 0x84, 0x0b, 0x63, 0x79, 0x9c, 0x8e, 0xfa, 0x49, 0x67, 0x99, - 0x2c, 0x59, 0x53, 0x0a, 0x13, 0x72, 0xae, 0x67, 0x53, 0x20, 0x53, 0xf6, 0x13, 0x72, 0xb6, 0xfc, - 0x59, 0xa7, 0x4d, 0xec, 0x96, 0x01, 0x24, 0x23, 0x71, 0x70, 0xe2, 0xa7, 0xbc, 0xb3, 0x42, 0xbc, - 0xa5, 0x8a, 0xee, 0x9f, 0x38, 0xb0, 0xba, 0x17, 0x24, 0xa9, 0x64, 0x42, 0xad, 0x8e, 0xdf, 0x84, - 0xa6, 0x60, 0xbf, 0x5e, 0x14, 0x8e, 0x66, 0x92, 0x23, 0x41, 0x40, 0x8f, 0xc2, 0xd1, 0x8c, 0x7d, - 0x02, 0x16, 0x83, 0xd0, 0x24, 0x11, 0x32, 0xdc, 0x52, 0x20, 0x11, 0xbd, 0x09, 0xcd, 0xc9, 0xf4, - 0x70, 0x14, 0xf4, 0x05, 0x49, 0x55, 0xb4, 0x22, 0x20, 0x22, 0x40, 0x27, 0x49, 0x8c, 0x44, 0x50, - 0xd4, 0x88, 0xa2, 0x29, 0x31, 0x24, 0x71, 0xef, 0xc0, 0x9a, 0x3d, 0x40, 0xa9, 0xac, 0x36, 0x61, - 0x41, 0xf2, 0x76, 0xd2, 0x69, 0xd2, 0xfa, 0x2c, 0xc9, 0xf5, 0x91, 0xa4, 0x9e, 0xae, 0x77, 0xff, - 0xbc, 0x06, 0xab, 0x12, 0xdd, 0x1e, 0x45, 0x09, 0x3f, 0x98, 0x8e, 0xc7, 0x7e, 0x5c, 0x22, 0x34, - 0xce, 0x39, 0x42, 0x53, 0xb1, 0x85, 0x06, 0x59, 0xf9, 0xd8, 0x0f, 0x42, 0xe1, 0xe1, 0x09, 0x89, - 0x33, 0x10, 0x76, 0x1d, 0x96, 0xfb, 0xa3, 0x28, 0x11, 0x5e, 0x8f, 0x79, 0x7c, 0xca, 0xc3, 0x45, - 0x21, 0xaf, 0x97, 0x09, 0xb9, 0x29, 0xa4, 0x73, 0x39, 0x21, 0x75, 0xa1, 0x85, 0x8d, 0x72, 0xa5, - 0x73, 0xe6, 0x85, 0x17, 0x66, 0x62, 0x38, 0x9e, 0xbc, 0x48, 0x08, 0xf9, 0x5b, 0x2e, 0x13, 0x08, - 0x3c, 0x9d, 0xa1, 0x4e, 0x33, 0xa8, 0x1b, 0x52, 0x20, 0x8a, 0x55, 0xec, 0x1e, 0x80, 0xe8, 0x8b, - 0xcc, 0x38, 0x90, 0x19, 0x7f, 0xdb, 0xde, 0x11, 0x73, 0xed, 0x6f, 0x60, 0x61, 0x1a, 0x73, 0x32, - 0xe4, 0xc6, 0x97, 0xee, 0xc7, 0xd0, 0x34, 0xaa, 0xd8, 0x45, 0x58, 0xd9, 0x7e, 0xf4, 0x68, 0x7f, - 0xc7, 0xbb, 0xfd, 0xf8, 0xc1, 0x97, 0x77, 0x7a, 0xdb, 0x7b, 0x8f, 0x0e, 0x76, 0xda, 0x17, 0x10, - 0xde, 0x7b, 0xb4, 0x7d, 0x7b, 0xaf, 0x77, 0xef, 0x91, 0xb7, 0xad, 0x60, 0x07, 0x6d, 0xbc, 0xb7, - 0xf3, 0xd1, 0xa3, 0xc7, 0x3b, 0x16, 0x5e, 0x61, 0x6d, 0x68, 0xdd, 0xf1, 0x76, 0x6e, 0x6f, 0xef, - 0x4a, 0xa4, 0xca, 0xd6, 0xa0, 0x7d, 0xef, 0xc9, 0xc3, 0xbb, 0x0f, 0x1e, 0xde, 0xef, 0x6d, 0xdf, - 0x7e, 0xb8, 0xbd, 0xb3, 0xb7, 0x73, 0xb7, 0x5d, 0x73, 0xff, 0xd6, 0x81, 0x8b, 0x34, 0xca, 0x41, - 0x5e, 0x20, 0xae, 0x40, 0xb3, 0x1f, 0x45, 0x13, 0x8e, 0xfa, 0x5b, 0xab, 0x68, 0x13, 0x42, 0x66, - 0x17, 0x0a, 0xf1, 0x28, 0x8a, 0xfb, 0x5c, 0xca, 0x03, 0x10, 0x74, 0x0f, 0x11, 0x64, 0x76, 0xb9, - 0x9d, 0x82, 0x42, 0x88, 0x43, 0x53, 0x60, 0x82, 0x64, 0x1d, 0xe6, 0x0e, 0x63, 0xee, 0xf7, 0x8f, - 0xa5, 0x24, 0xc8, 0x12, 0xfb, 0x64, 0xe6, 0x90, 0xf7, 0x71, 0xb5, 0x47, 0x7c, 0x40, 0x1c, 0xb2, - 0xe0, 0x2d, 0x4b, 0x7c, 0x5b, 0xc2, 0xee, 0x3e, 0xac, 0xe7, 0x67, 0x20, 0x25, 0xe6, 0x3d, 0x43, - 0x62, 0x84, 0x6f, 0xdc, 0x3d, 0x7b, 0x7f, 0x0c, 0xe9, 0xf9, 0x77, 0x07, 0x6a, 0x68, 0x3e, 0xcf, - 0x36, 0xb5, 0xa6, 0x47, 0x54, 0xb5, 0x3c, 0x22, 0x0a, 0x1e, 0xe0, 0x99, 0x42, 0x28, 0x54, 0x61, - 0x74, 0x0c, 0x24, 0xab, 0x8f, 0x79, 0xff, 0x84, 0xe6, 0xa4, 0xeb, 0x11, 0x41, 0x96, 0x47, 0xc7, - 0x93, 0xbe, 0x96, 0x2c, 0xaf, 0xca, 0xaa, 0x8e, 0xbe, 0x9c, 0xcf, 0xea, 0xe8, 0xbb, 0x0e, 0xcc, - 0x07, 0xe1, 0x61, 0x34, 0x0d, 0x07, 0xc4, 0xe2, 0x0b, 0x9e, 0x2a, 0xa2, 0xaa, 0x9c, 0x90, 0xe8, - 0x05, 0x63, 0xc5, 0xd0, 0x19, 0xe0, 0x32, 0x3c, 0x98, 0x24, 0xe4, 0x2e, 0x68, 0x2f, 0xf0, 0x3d, - 0x58, 0x31, 0x30, 0xb9, 0x9a, 0x6f, 0x41, 0x7d, 0x82, 0x80, 0x5c, 0x4a, 0xa5, 0x9c, 0xc9, 0xcf, - 0x10, 0x35, 0x6e, 0x1b, 0x96, 0xee, 0xf3, 0xf4, 0x41, 0x78, 0x14, 0xa9, 0x96, 0x7e, 0x54, 0x85, - 0x65, 0x0d, 0xc9, 0x86, 0xae, 0xc3, 0x72, 0x30, 0xe0, 0x61, 0x1a, 0xa4, 0xb3, 0x9e, 0x75, 0xfe, - 0xc9, 0xc3, 0xe8, 0x9f, 0xf9, 0xa3, 0xc0, 0x4f, 0xa4, 0x07, 0x20, 0x0a, 0x6c, 0x0b, 0xd6, 0xd0, - 0x78, 0x28, 0x7b, 0xa0, 0xb7, 0x58, 0x1c, 0xc3, 0x4a, 0xeb, 0x50, 0xbc, 0x11, 0x97, 0xfa, 0x5b, - 0x7f, 0x22, 0xfc, 0x94, 0xb2, 0x2a, 0x5c, 0x35, 0xd1, 0x12, 0x4e, 0xb9, 0x2e, 0x0c, 0x8c, 0x06, - 0x0a, 0x21, 0xa0, 0x39, 0xa1, 0x7c, 0xf2, 0x21, 0x20, 0x23, 0x8c, 0xb4, 0x50, 0x08, 0x23, 0xa1, - 0x72, 0x9a, 0x85, 0x7d, 0x3e, 0xe8, 0xa5, 0x51, 0x8f, 0x94, 0x28, 0xed, 0xce, 0x82, 0x97, 0x87, - 0x29, 0xe0, 0xc5, 0x93, 0x34, 0xe4, 0x29, 0xe9, 0x99, 0x05, 0x4f, 0x15, 0x51, 0x7e, 0x88, 0x44, - 0x98, 0x84, 0x86, 0x27, 0x4b, 0xe8, 0x68, 0x4e, 0xe3, 0x20, 0xe9, 0xb4, 0x08, 0xa5, 0xdf, 0xec, - 0xd3, 0x70, 0xf1, 0x90, 0x27, 0x69, 0xef, 0x98, 0xfb, 0x03, 0x1e, 0xd3, 0xee, 0x8b, 0xe8, 0x94, - 0xb0, 0xdf, 0xe5, 0x95, 0xd8, 0xf7, 0x09, 0x8f, 0x93, 0x20, 0x0a, 0xc9, 0x72, 0x37, 0x3c, 0x55, - 0x74, 0xbf, 0x49, 0xfe, 0xb0, 0x8e, 0x9b, 0x3d, 0x21, 0x63, 0xce, 0x5e, 0x83, 0x86, 0x98, 0x63, - 0x72, 0xec, 0x4b, 0x17, 0x7d, 0x81, 0x80, 0x83, 0x63, 0x1f, 0x35, 0x82, 0xb5, 0x6c, 0x22, 0x10, - 0xd9, 0x24, 0x6c, 0x57, 0xac, 0xda, 0x55, 0x58, 0x52, 0x11, 0xb9, 0xa4, 0x37, 0xe2, 0x47, 0xa9, - 0x3a, 0x5e, 0x87, 0xd3, 0x31, 0x76, 0x97, 0xec, 0xf1, 0xa3, 0xd4, 0x7d, 0x08, 0x2b, 0x52, 0x86, - 0x1f, 0x4d, 0xb8, 0xea, 0xfa, 0xb3, 0x65, 0xd6, 0xad, 0xb9, 0xb5, 0x6a, 0x0b, 0x3d, 0xc5, 0x08, - 0x72, 0x26, 0xcf, 0xf5, 0x80, 0x99, 0x3a, 0x41, 0x36, 0x28, 0x4d, 0x8c, 0x3a, 0xc4, 0xcb, 0xe9, - 0x58, 0x18, 0xae, 0x4f, 0x32, 0xed, 0xf7, 0x51, 0x13, 0x08, 0x0d, 0xa8, 0x8a, 0xee, 0xf7, 0x1d, - 0x58, 0xa5, 0xd6, 0x94, 0x7d, 0xd6, 0x27, 0xbf, 0x57, 0x1f, 0x66, 0xab, 0x6f, 0x06, 0x36, 0xd6, - 0xa0, 0x6e, 0xea, 0x5a, 0x51, 0xf8, 0xf1, 0xcf, 0xb2, 0xb5, 0xc2, 0x59, 0xf6, 0x47, 0x0e, 0xac, - 0x08, 0x65, 0x98, 0xfa, 0xe9, 0x34, 0x91, 0xd3, 0xff, 0x05, 0x58, 0x14, 0x76, 0x4a, 0x8a, 0x93, - 0x1c, 0xe8, 0x9a, 0x96, 0x7c, 0x42, 0x05, 0xf1, 0xee, 0x05, 0xcf, 0x26, 0x66, 0x9f, 0x87, 0x96, - 0x19, 0x56, 0xa5, 0x31, 0x37, 0xb7, 0x2e, 0xa9, 0x59, 0x16, 0x38, 0x67, 0xf7, 0x82, 0x67, 0x7d, - 0xc0, 0x3e, 0x24, 0x67, 0x23, 0xec, 0x51, 0xb3, 0x32, 0x30, 0x75, 0xa9, 0x44, 0x81, 0xeb, 0xcf, - 0x0d, 0xf2, 0x3b, 0x0b, 0x30, 0x27, 0xbc, 0x4b, 0xf7, 0x3e, 0x2c, 0x5a, 0x23, 0xb5, 0xce, 0xe8, - 0x2d, 0x71, 0x46, 0x2f, 0x84, 0x74, 0x2a, 0xc5, 0x90, 0x8e, 0xfb, 0xed, 0x2a, 0x30, 0xe4, 0xb6, - 0xdc, 0x76, 0xa2, 0x7b, 0x1b, 0x0d, 0xac, 0xc3, 0x4a, 0xcb, 0x33, 0x21, 0x76, 0x03, 0x98, 0x51, - 0x54, 0x51, 0x2f, 0x61, 0x37, 0x4a, 0x6a, 0x50, 0xc1, 0x49, 0xc3, 0x2a, 0x4d, 0xa0, 0x3c, 0x96, - 0x89, 0x7d, 0x2b, 0xad, 0x43, 0xd3, 0x30, 0x99, 0x26, 0xc7, 0xe8, 0x7e, 0xab, 0xe3, 0x8c, 0x2a, - 0xe7, 0x19, 0x64, 0xee, 0x5c, 0x06, 0x99, 0xcf, 0x33, 0x88, 0xe9, 0x50, 0x2f, 0x58, 0x0e, 0x35, - 0x3a, 0x72, 0x63, 0x74, 0xff, 0xd2, 0x51, 0xbf, 0x37, 0xc6, 0xde, 0xe5, 0xe9, 0xc5, 0x02, 0xd9, - 0x26, 0xb4, 0xa5, 0x2b, 0x90, 0x79, 0xed, 0x40, 0x6b, 0x5c, 0xc0, 0x51, 0xf3, 0xe2, 0xc7, 0xa4, - 0x01, 0xe8, 0x04, 0x53, 0xf7, 0x32, 0xc0, 0xfd, 0xa1, 0x03, 0x6d, 0xdc, 0x05, 0x8b, 0x53, 0x3f, - 0x00, 0x12, 0x94, 0x57, 0x64, 0x54, 0x8b, 0xf6, 0xa7, 0xe7, 0xd3, 0xf7, 0xa1, 0x41, 0x0d, 0x46, - 0x13, 0x1e, 0x4a, 0x36, 0xed, 0xd8, 0x6c, 0x9a, 0xe9, 0xa8, 0xdd, 0x0b, 0x5e, 0x46, 0x6c, 0x30, - 0xe9, 0x3f, 0x39, 0xd0, 0x94, 0xc3, 0xfc, 0x89, 0xcf, 0xe9, 0x5d, 0x58, 0x40, 0x7e, 0x35, 0x0e, - 0xc3, 0xba, 0x8c, 0xb6, 0x66, 0xec, 0xa7, 0xd3, 0x18, 0x8d, 0xab, 0x75, 0x46, 0xcf, 0xc3, 0x68, - 0x29, 0x49, 0x1d, 0x27, 0xbd, 0x34, 0x18, 0xf5, 0x54, 0xad, 0xbc, 0xe3, 0x28, 0xab, 0x42, 0xad, - 0x94, 0xa4, 0xfe, 0x90, 0x4b, 0x23, 0x28, 0x0a, 0x6e, 0x07, 0xd6, 0xe5, 0x84, 0x72, 0x9e, 0xa5, - 0xfb, 0x37, 0x2d, 0xd8, 0x28, 0x54, 0xe9, 0x4b, 0x42, 0x79, 0xf8, 0x1c, 0x05, 0xe3, 0xc3, 0x48, - 0xbb, 0xe1, 0x8e, 0x79, 0x2e, 0xb5, 0xaa, 0xd8, 0x10, 0x2e, 0x2a, 0x6b, 0x8f, 0x6b, 0x9a, 0xd9, - 0xf6, 0x0a, 0xb9, 0x29, 0xef, 0xda, 0x3c, 0x90, 0xef, 0x50, 0xe1, 0xa6, 0x5c, 0x97, 0xb7, 0xc7, - 0x8e, 0xa1, 0xa3, 0xdd, 0x0a, 0x69, 0x00, 0x0c, 0xd7, 0x03, 0xfb, 0x7a, 0xe7, 0x9c, 0xbe, 0x2c, - 0x37, 0xd5, 0x3b, 0xb3, 0x35, 0x36, 0x83, 0xcb, 0xaa, 0x8e, 0x34, 0x7c, 0xb1, 0xbf, 0xda, 0x2b, - 0xcd, 0x8d, 0x5c, 0x6c, 0xbb, 0xd3, 0x73, 0x1a, 0x66, 0x5f, 0x87, 0xf5, 0x53, 0x3f, 0x48, 0xd5, - 0xb0, 0x0c, 0x57, 0xa9, 0x4e, 0x5d, 0x6e, 0x9d, 0xd3, 0xe5, 0x53, 0xf1, 0xb1, 0x65, 0xf6, 0xce, - 0x68, 0xb1, 0xfb, 0x0f, 0x0e, 0x2c, 0xd9, 0xed, 0x20, 0x9b, 0x4a, 0x75, 0xa0, 0xd4, 0xa2, 0x72, - 0x0d, 0x73, 0x70, 0xf1, 0x24, 0x5b, 0x29, 0x3b, 0xc9, 0x9a, 0xe7, 0xc7, 0xea, 0x79, 0x41, 0x9e, - 0xda, 0xab, 0x05, 0x79, 0xea, 0x65, 0x41, 0x9e, 0xee, 0x7f, 0x3b, 0xc0, 0x8a, 0xbc, 0xc4, 0xee, - 0x8b, 0xa3, 0x74, 0xc8, 0x47, 0x52, 0x27, 0xfd, 0xfc, 0xab, 0xf1, 0xa3, 0x5a, 0x3b, 0xf5, 0x35, - 0x0a, 0x86, 0xa9, 0x74, 0x4c, 0x07, 0x6a, 0xd1, 0x2b, 0xab, 0xca, 0x85, 0x9d, 0x6a, 0xe7, 0x87, - 0x9d, 0xea, 0xe7, 0x87, 0x9d, 0xe6, 0xf2, 0x61, 0xa7, 0xee, 0x6f, 0x39, 0xb0, 0x5a, 0xb2, 0xe9, - 0x3f, 0xbb, 0x89, 0xe3, 0x36, 0x59, 0xba, 0xa0, 0x22, 0xb7, 0xc9, 0x04, 0xbb, 0xbf, 0x0e, 0x8b, - 0x16, 0xa3, 0xff, 0xec, 0xfa, 0xcf, 0xfb, 0x80, 0x82, 0xcf, 0x2c, 0xac, 0xfb, 0x1f, 0x15, 0x60, - 0x45, 0x61, 0xfb, 0x7f, 0x1d, 0x43, 0x71, 0x9d, 0xaa, 0x25, 0xeb, 0xf4, 0x7f, 0x6a, 0x07, 0xde, - 0x81, 0x15, 0x99, 0x51, 0x60, 0x04, 0x50, 0x04, 0xc7, 0x14, 0x2b, 0xd0, 0x0b, 0xb6, 0x63, 0x7e, - 0x0b, 0xd6, 0x4d, 0xb4, 0x61, 0x0c, 0x73, 0xa1, 0x3f, 0x77, 0x1d, 0xd6, 0x44, 0x86, 0xc2, 0x1d, - 0xd1, 0x94, 0xb2, 0x2b, 0x7f, 0xec, 0xc0, 0xc5, 0x5c, 0x45, 0x76, 0x6f, 0x2a, 0x4c, 0x87, 0x6d, - 0x4f, 0x6c, 0x10, 0xc7, 0x2f, 0xe5, 0xc8, 0x18, 0xbf, 0xe0, 0xb6, 0x62, 0x05, 0xae, 0xcf, 0x34, - 0x2c, 0xd2, 0x8b, 0x55, 0x2f, 0xab, 0x72, 0x37, 0x44, 0x1e, 0x45, 0xc8, 0x47, 0xb9, 0x81, 0x1f, - 0x89, 0xcc, 0x07, 0xb3, 0x22, 0xbb, 0x78, 0xb1, 0x87, 0xac, 0x8a, 0xe8, 0x23, 0x5a, 0x66, 0xca, - 0x1e, 0x6f, 0x69, 0x9d, 0xfb, 0x57, 0x0e, 0xb0, 0x2f, 0x4d, 0x79, 0x3c, 0xa3, 0xfb, 0x53, 0x1d, - 0xe9, 0xd9, 0xc8, 0x47, 0x39, 0xe6, 0x26, 0xd3, 0xc3, 0x2f, 0xf2, 0x99, 0xba, 0x65, 0xaf, 0x64, - 0xb7, 0xec, 0x6f, 0x00, 0xe0, 0xe1, 0x4c, 0x5f, 0xca, 0x92, 0x6f, 0x16, 0x4e, 0xc7, 0xa2, 0xc1, - 0xd2, 0x8b, 0xf0, 0xda, 0xf9, 0x17, 0xe1, 0xf5, 0xf3, 0x2e, 0xc2, 0x3f, 0x84, 0x55, 0x6b, 0xdc, - 0x7a, 0x5b, 0xd5, 0xf5, 0xb0, 0xf3, 0x92, 0xeb, 0xe1, 0xff, 0x74, 0xa0, 0xba, 0x1b, 0x4d, 0xcc, - 0xa8, 0xa6, 0x63, 0x47, 0x35, 0xa5, 0x2d, 0xe9, 0x69, 0x53, 0x21, 0x55, 0x8c, 0x05, 0xb2, 0x4d, - 0x58, 0xf2, 0xc7, 0x29, 0x1e, 0xca, 0x8f, 0xa2, 0xf8, 0xd4, 0x8f, 0x07, 0x62, 0xaf, 0xef, 0x54, - 0x3a, 0x8e, 0x97, 0xab, 0x61, 0x6b, 0x50, 0xd5, 0x4a, 0x97, 0x08, 0xb0, 0x88, 0x8e, 0x1b, 0xdd, - 0x88, 0xcc, 0x64, 0x3c, 0x41, 0x96, 0x90, 0x95, 0xec, 0xef, 0x85, 0x23, 0x2d, 0x44, 0xa7, 0xac, - 0x0a, 0xed, 0x1a, 0x2e, 0x1f, 0x91, 0xc9, 0x40, 0x90, 0x2a, 0xbb, 0xff, 0xe6, 0x40, 0x9d, 0x56, - 0x00, 0x85, 0x5d, 0x70, 0xb8, 0x0e, 0x5f, 0xd2, 0xcc, 0x17, 0xbd, 0x3c, 0xcc, 0x5c, 0x2b, 0x1b, - 0xa5, 0xa2, 0x87, 0x6d, 0x66, 0xa4, 0x5c, 0x81, 0x86, 0x28, 0xe9, 0xcc, 0x0b, 0x22, 0xc9, 0x40, - 0x76, 0x19, 0x6a, 0xc7, 0xd1, 0x44, 0x79, 0x27, 0xa0, 0xa2, 0xf7, 0xd1, 0xc4, 0x23, 0x3c, 0x1b, - 0x0f, 0xb6, 0x27, 0x06, 0x2f, 0x6c, 0x4e, 0x1e, 0x46, 0xab, 0xab, 0x9b, 0x35, 0x17, 0x23, 0x87, - 0xba, 0x9b, 0xb0, 0xfc, 0x30, 0x1a, 0x70, 0x23, 0xe2, 0x74, 0x26, 0x37, 0xbb, 0xdf, 0x72, 0x60, - 0x41, 0x11, 0xb3, 0xeb, 0x50, 0x43, 0x57, 0x22, 0x77, 0x50, 0xd0, 0xb7, 0x76, 0x48, 0xe7, 0x11, - 0x05, 0xea, 0x5e, 0x8a, 0x47, 0x64, 0x6e, 0xa5, 0x8a, 0x46, 0x64, 0x5e, 0x93, 0x1e, 0x6e, 0xce, - 0xd9, 0xc8, 0xa1, 0xee, 0x5f, 0x38, 0xb0, 0x68, 0xf5, 0x81, 0x87, 0xc7, 0x91, 0x9f, 0xa4, 0xf2, - 0x26, 0x44, 0x6e, 0x8f, 0x09, 0x99, 0x31, 0xc8, 0x8a, 0x1d, 0x83, 0xd4, 0xd1, 0xb1, 0xaa, 0x19, - 0x1d, 0xbb, 0x05, 0x8d, 0x2c, 0x67, 0xa8, 0x66, 0xe9, 0x54, 0xec, 0x51, 0xdd, 0x47, 0x66, 0x44, - 0xd8, 0x4e, 0x3f, 0x1a, 0x45, 0xb1, 0x0c, 0xc1, 0x8b, 0x82, 0xfb, 0x21, 0x34, 0x0d, 0x7a, 0x1c, - 0x46, 0xc8, 0xd3, 0xd3, 0x28, 0x7e, 0xa6, 0x42, 0xa1, 0xb2, 0xa8, 0xaf, 0xdd, 0x2b, 0xd9, 0xb5, - 0xbb, 0xfb, 0xf7, 0x0e, 0x2c, 0x22, 0x0f, 0x06, 0xe1, 0x70, 0x3f, 0x1a, 0x05, 0xfd, 0x19, 0xed, - 0xbd, 0x62, 0x37, 0xa9, 0x19, 0x14, 0x2f, 0xda, 0x30, 0xf2, 0xb6, 0x3a, 0x3b, 0x4a, 0x41, 0xd4, - 0x65, 0x94, 0x54, 0xe4, 0xf3, 0x43, 0x3f, 0x91, 0xcc, 0x2f, 0x8d, 0x9c, 0x05, 0xa2, 0x3c, 0x21, - 0x10, 0xfb, 0x29, 0xef, 0x8d, 0x83, 0xd1, 0x28, 0x10, 0xb4, 0xc2, 0x05, 0x2a, 0xab, 0xc2, 0x3e, - 0x07, 0x41, 0xe2, 0x1f, 0x66, 0x61, 0x66, 0x5d, 0x76, 0x7f, 0x50, 0x81, 0xa6, 0x54, 0xcf, 0x3b, - 0x83, 0x21, 0x97, 0x77, 0x20, 0xe4, 0x64, 0x6a, 0x55, 0x62, 0x20, 0xaa, 0xde, 0x72, 0x4b, 0x0d, - 0x24, 0xbf, 0xe5, 0xd5, 0xe2, 0x96, 0xbf, 0x0e, 0x0d, 0x64, 0xbd, 0x77, 0xc9, 0xff, 0x15, 0xf7, - 0x27, 0x19, 0xa0, 0x6a, 0xb7, 0xa8, 0xb6, 0x9e, 0xd5, 0x12, 0xf0, 0xd2, 0x1b, 0x93, 0xf7, 0xa1, - 0x25, 0x9b, 0xa1, 0x3d, 0x21, 0xcd, 0x91, 0x31, 0xbf, 0xb5, 0x5f, 0x9e, 0x45, 0xa9, 0xbe, 0xdc, - 0x52, 0x5f, 0x2e, 0x9c, 0xf7, 0xa5, 0xa2, 0xa4, 0xdb, 0x6d, 0xb1, 0x36, 0xf7, 0x63, 0x7f, 0x72, - 0xac, 0x4c, 0xde, 0x40, 0xa7, 0xec, 0x10, 0xcc, 0x36, 0xa1, 0x8e, 0x9f, 0x29, 0x4d, 0x5e, 0x2e, - 0x90, 0x82, 0x84, 0x5d, 0x87, 0x3a, 0x1f, 0x0c, 0xb9, 0x3a, 0xe1, 0x31, 0xfb, 0xac, 0x8d, 0x7b, - 0xe4, 0x09, 0x02, 0x54, 0x0f, 0x88, 0xe6, 0xd4, 0x83, 0x6d, 0x05, 0xe6, 0xb0, 0xf8, 0x60, 0xe0, - 0xae, 0x01, 0x7b, 0x28, 0x38, 0xda, 0x8c, 0x5f, 0x7f, 0xbb, 0x0a, 0x4d, 0x03, 0x46, 0x49, 0x1f, - 0xe2, 0x80, 0x7b, 0x83, 0xc0, 0x1f, 0xf3, 0x94, 0xc7, 0x92, 0x8b, 0x73, 0x28, 0xd2, 0xf9, 0x27, - 0xc3, 0x5e, 0x34, 0x4d, 0x7b, 0x03, 0x3e, 0x8c, 0xb9, 0x30, 0xcc, 0x68, 0x28, 0x2c, 0x14, 0xe9, - 0xc6, 0xfe, 0x73, 0x93, 0x4e, 0xf0, 0x43, 0x0e, 0x55, 0xd1, 0x68, 0xb1, 0x46, 0xb5, 0x2c, 0x1a, - 0x2d, 0x56, 0x24, 0xaf, 0xa3, 0xea, 0x25, 0x3a, 0xea, 0x3d, 0x58, 0x17, 0xda, 0x48, 0xca, 0x6d, - 0x2f, 0xc7, 0x26, 0x67, 0xd4, 0xb2, 0x4d, 0x68, 0xe3, 0x98, 0x15, 0x83, 0x27, 0xc1, 0x37, 0x45, - 0x7c, 0xc8, 0xf1, 0x0a, 0x38, 0xd2, 0x52, 0xa0, 0xc6, 0xa4, 0x15, 0xf7, 0x6d, 0x05, 0x9c, 0x68, - 0xfd, 0xe7, 0x36, 0x6d, 0x43, 0xd2, 0xe6, 0x70, 0x77, 0x11, 0x9a, 0x07, 0x69, 0x34, 0x51, 0x9b, - 0xb2, 0x04, 0x2d, 0x51, 0x94, 0xd9, 0x0d, 0xaf, 0xc1, 0x25, 0xe2, 0xa2, 0xc7, 0xd1, 0x24, 0x1a, - 0x45, 0xc3, 0xd9, 0xc1, 0xf4, 0x30, 0xe9, 0xc7, 0xc1, 0x04, 0x4f, 0x43, 0xee, 0x3f, 0x3a, 0xb0, - 0x6a, 0xd5, 0xca, 0x90, 0xd1, 0xa7, 0x05, 0x4b, 0xeb, 0x6b, 0x69, 0xc1, 0x78, 0x2b, 0x86, 0xaa, - 0x14, 0x84, 0x22, 0x94, 0xf7, 0x44, 0xde, 0x54, 0xdf, 0x86, 0x65, 0x35, 0x32, 0xf5, 0xa1, 0xe0, - 0xc2, 0x4e, 0x91, 0x0b, 0xe5, 0xf7, 0x4b, 0xf2, 0x03, 0xd5, 0xc4, 0x2f, 0xca, 0x7b, 0xcb, 0x01, - 0xcd, 0x51, 0xc5, 0x0e, 0xf4, 0xcd, 0x94, 0x79, 0x82, 0x50, 0x23, 0xe8, 0x6b, 0x30, 0x71, 0x7f, - 0xc7, 0x01, 0xc8, 0x46, 0x87, 0x8c, 0x91, 0xa9, 0x7b, 0x91, 0x4a, 0x6d, 0xa8, 0xf6, 0xb7, 0xa0, - 0xa5, 0xef, 0x54, 0x32, 0x0b, 0xd2, 0x54, 0x18, 0x3a, 0x79, 0xd7, 0x60, 0x79, 0x38, 0x8a, 0x0e, - 0xc9, 0xfc, 0x52, 0xba, 0x4c, 0x22, 0x73, 0x3c, 0x96, 0x04, 0x7c, 0x4f, 0xa2, 0x99, 0xb9, 0xa9, - 0x19, 0xe6, 0xc6, 0xfd, 0x4e, 0x45, 0x47, 0xe2, 0xb3, 0x39, 0x9f, 0x29, 0x65, 0x6c, 0xab, 0xa0, - 0x1c, 0xcf, 0x08, 0x7c, 0x53, 0x94, 0x6c, 0xff, 0xdc, 0x43, 0xfc, 0x87, 0xb0, 0x14, 0x0b, 0xed, - 0xa3, 0x54, 0x53, 0xed, 0x25, 0xaa, 0x69, 0x31, 0xb6, 0x6c, 0xd2, 0x27, 0xa1, 0xed, 0x0f, 0x4e, - 0x78, 0x9c, 0x06, 0x74, 0x8c, 0x22, 0x87, 0x40, 0x28, 0xd4, 0x65, 0x03, 0x27, 0x3b, 0x7d, 0x0d, - 0x96, 0x65, 0x5e, 0x8d, 0xa6, 0x94, 0xb9, 0xa0, 0x19, 0x8c, 0x84, 0xee, 0x9f, 0xaa, 0xa0, 0xbf, - 0xbd, 0x87, 0x67, 0xaf, 0x88, 0x39, 0xbb, 0x4a, 0x6e, 0x76, 0x9f, 0x90, 0x01, 0xf8, 0x81, 0x3a, - 0xab, 0x55, 0x8d, 0x3b, 0xee, 0x81, 0xbc, 0x30, 0xb1, 0x97, 0xb4, 0xf6, 0x2a, 0x4b, 0xea, 0xfe, - 0xd0, 0x81, 0xf9, 0xdd, 0x68, 0xb2, 0x2b, 0x6f, 0xfb, 0x49, 0x10, 0x74, 0xd6, 0x9a, 0x2a, 0xbe, - 0x24, 0x0f, 0xa0, 0xd4, 0x0e, 0x2f, 0xe6, 0xed, 0xf0, 0x2f, 0xc1, 0x6b, 0x14, 0x29, 0x88, 0xa3, - 0x49, 0x14, 0xa3, 0x30, 0xfa, 0x23, 0x61, 0x74, 0xa3, 0x30, 0x3d, 0x56, 0x6a, 0xec, 0x65, 0x24, - 0x74, 0x24, 0xc3, 0xa3, 0x84, 0x70, 0x94, 0xa5, 0xdf, 0x20, 0xb4, 0x5b, 0xb1, 0xc2, 0xfd, 0x2c, - 0x34, 0xc8, 0xf1, 0xa5, 0x69, 0xbd, 0x03, 0x8d, 0xe3, 0x68, 0xd2, 0x3b, 0x0e, 0xc2, 0x54, 0x09, - 0xf7, 0x52, 0xe6, 0x91, 0xee, 0xd2, 0x82, 0x68, 0x02, 0xf7, 0x0f, 0xeb, 0x30, 0xff, 0x20, 0x3c, - 0x89, 0x82, 0x3e, 0xdd, 0x0f, 0x8c, 0xf9, 0x38, 0x52, 0x39, 0x7c, 0xf8, 0x1b, 0x97, 0x82, 0xf2, - 0x59, 0x26, 0xa9, 0x0c, 0xf0, 0xab, 0x22, 0x9a, 0xfb, 0x38, 0xcb, 0xb3, 0x15, 0xa2, 0x63, 0x20, - 0xe8, 0xf4, 0xc7, 0x66, 0x4a, 0xb2, 0x2c, 0x65, 0x49, 0x90, 0x75, 0x23, 0x09, 0x92, 0x6e, 0x93, - 0x44, 0x66, 0x02, 0xf1, 0xd7, 0x82, 0xa7, 0x8a, 0x74, 0x48, 0x89, 0xb9, 0x88, 0xf0, 0x90, 0xe3, - 0x30, 0x2f, 0x0f, 0x29, 0x26, 0x88, 0xce, 0x85, 0xf8, 0x40, 0xd0, 0x08, 0xe5, 0x6b, 0x42, 0xe8, - 0x88, 0xe5, 0xb3, 0x9a, 0x1b, 0x82, 0xe7, 0x73, 0x30, 0x6a, 0xe8, 0x01, 0xd7, 0x8a, 0x54, 0xcc, - 0x01, 0x44, 0x1e, 0x71, 0x1e, 0x37, 0x8e, 0x36, 0x22, 0xe5, 0x48, 0x1d, 0x6d, 0x90, 0x51, 0xfc, - 0xd1, 0xe8, 0xd0, 0xef, 0x3f, 0xa3, 0xa4, 0x75, 0xca, 0x30, 0x6a, 0x78, 0x36, 0x48, 0xb9, 0x06, - 0xd9, 0x6e, 0xd2, 0x7d, 0x64, 0xcd, 0x33, 0x21, 0xb6, 0x05, 0x4d, 0x3a, 0xce, 0xc9, 0xfd, 0x5c, - 0xa2, 0xfd, 0x6c, 0x9b, 0xe7, 0x3d, 0xda, 0x51, 0x93, 0xc8, 0xbc, 0xb3, 0x58, 0xb6, 0xef, 0x2c, - 0x84, 0xd2, 0x94, 0x57, 0x3d, 0x6d, 0xea, 0x2d, 0x03, 0xd0, 0x9a, 0xca, 0x05, 0x13, 0x04, 0x2b, - 0x44, 0x60, 0x61, 0xec, 0x32, 0x2c, 0xe0, 0x21, 0x64, 0xe2, 0x07, 0x83, 0x0e, 0xd3, 0x67, 0x21, - 0x8d, 0x61, 0x1b, 0xea, 0x37, 0x5d, 0xc9, 0xac, 0xd2, 0xaa, 0x58, 0x18, 0xae, 0x8d, 0x2e, 0x93, - 0x10, 0xad, 0x89, 0x1d, 0xb5, 0x40, 0x37, 0x05, 0x76, 0x7b, 0x30, 0x90, 0xbc, 0xa9, 0x8f, 0xbe, - 0x19, 0x57, 0x39, 0x16, 0x57, 0x95, 0xec, 0x6e, 0xa5, 0x7c, 0x77, 0x5f, 0xba, 0x06, 0xee, 0x0e, - 0x34, 0xf7, 0x8d, 0xc4, 0x6d, 0x62, 0x72, 0x95, 0xb2, 0x2d, 0x05, 0xc3, 0x40, 0x8c, 0xe1, 0x54, - 0xcc, 0xe1, 0xb8, 0x7f, 0xe6, 0x00, 0xdb, 0x0b, 0x92, 0x54, 0x0f, 0x5f, 0xf4, 0xed, 0x42, 0x4b, - 0x07, 0x28, 0xb2, 0x6c, 0x2b, 0x0b, 0x43, 0x1a, 0x1a, 0x4a, 0x2f, 0x3a, 0x3a, 0x4a, 0xb8, 0xca, - 0xa4, 0xb0, 0x30, 0xe4, 0x50, 0xf4, 0x71, 0xd0, 0x5f, 0x08, 0x44, 0x0f, 0x89, 0xcc, 0xa8, 0x28, - 0xe0, 0xa8, 0x67, 0x63, 0x7e, 0xc2, 0xe3, 0x44, 0x8b, 0x96, 0x2e, 0xeb, 0xa4, 0xb0, 0xfc, 0x2a, - 0x6f, 0xc2, 0x82, 0x6e, 0xd7, 0x56, 0x21, 0x8a, 0x52, 0xd7, 0xa3, 0xaa, 0x22, 0x1f, 0xde, 0x1a, - 0xb4, 0x50, 0x9b, 0xc5, 0x0a, 0x76, 0x03, 0xd8, 0x51, 0x10, 0xe7, 0xc9, 0xab, 0x44, 0x5e, 0x52, - 0xe3, 0x3e, 0x85, 0x55, 0xd9, 0xa5, 0xe9, 0xdc, 0xd8, 0x9b, 0xe8, 0x9c, 0xc7, 0xc8, 0x95, 0x22, - 0x23, 0xbb, 0x3f, 0x70, 0x60, 0x5e, 0xee, 0x34, 0x6d, 0x4b, 0x3e, 0x83, 0xbf, 0xe1, 0x59, 0x58, - 0x79, 0xee, 0x76, 0x51, 0x39, 0x55, 0xcb, 0x94, 0x13, 0x83, 0xda, 0xc4, 0x4f, 0x8f, 0xe9, 0x54, - 0xda, 0xf0, 0xe8, 0x37, 0x6b, 0x8b, 0x48, 0x89, 0x50, 0x82, 0x14, 0x25, 0x29, 0x7b, 0xbe, 0x20, - 0x6c, 0x6d, 0x01, 0xc7, 0xd3, 0x05, 0x25, 0xaa, 0x08, 0x5c, 0xdf, 0x30, 0xc9, 0x14, 0xba, 0x0c, - 0xce, 0xf6, 0x53, 0x36, 0x91, 0xdf, 0x4f, 0x49, 0xea, 0xe9, 0x7a, 0xb7, 0x0b, 0x9d, 0xbb, 0x7c, - 0xc4, 0x53, 0x7e, 0x7b, 0x34, 0xca, 0xb7, 0xff, 0x1a, 0x5c, 0x2a, 0xa9, 0x93, 0xde, 0xe8, 0x3d, - 0x58, 0xb9, 0xcb, 0x0f, 0xa7, 0xc3, 0x3d, 0x7e, 0x92, 0x5d, 0x12, 0x33, 0xa8, 0x25, 0xc7, 0xd1, - 0xa9, 0xe4, 0x74, 0xfa, 0xcd, 0xde, 0x00, 0x18, 0x21, 0x4d, 0x2f, 0x99, 0xf0, 0xbe, 0xca, 0x5a, - 0x26, 0xe4, 0x60, 0xc2, 0xfb, 0xee, 0x7b, 0xc0, 0xcc, 0x76, 0xe4, 0x14, 0x50, 0xc1, 0x4f, 0x0f, - 0x7b, 0xc9, 0x2c, 0x49, 0xf9, 0x58, 0xa5, 0x63, 0x9b, 0x90, 0x7b, 0x0d, 0x5a, 0xfb, 0xfe, 0xcc, - 0xe3, 0xdf, 0x90, 0x8f, 0x28, 0x36, 0x60, 0x7e, 0xe2, 0xcf, 0x50, 0xee, 0x75, 0x40, 0x84, 0xaa, - 0xdd, 0xff, 0xaa, 0xc0, 0x9c, 0xa0, 0xc4, 0x56, 0x07, 0x3c, 0x49, 0x83, 0x50, 0x5c, 0x81, 0xca, - 0x56, 0x0d, 0xa8, 0xc0, 0x1b, 0x95, 0x12, 0xde, 0x90, 0xc7, 0x10, 0x95, 0x01, 0x2a, 0x99, 0xc0, - 0xc2, 0x90, 0x63, 0xb3, 0xc4, 0x13, 0x71, 0x22, 0xcf, 0x80, 0x5c, 0x84, 0x2c, 0x33, 0x23, 0x62, - 0x7c, 0x8a, 0xed, 0x25, 0x3b, 0x98, 0x50, 0xa9, 0xb1, 0x9a, 0x17, 0x5c, 0x53, 0x30, 0x56, 0x05, - 0xa3, 0xb4, 0xf0, 0x0a, 0x46, 0x49, 0x9c, 0x4d, 0x5e, 0x66, 0x94, 0xe0, 0x15, 0x8c, 0x92, 0xcb, - 0xa0, 0x7d, 0x8f, 0x73, 0x8f, 0xa3, 0xbb, 0xa3, 0xd8, 0xe9, 0xbb, 0x0e, 0xb4, 0xa5, 0xa7, 0xa6, - 0xeb, 0xd8, 0x5b, 0x96, 0x5b, 0x57, 0x9a, 0xa7, 0x79, 0x15, 0x16, 0xc9, 0xd9, 0xd2, 0xa1, 0x40, - 0x19, 0xb7, 0xb4, 0x40, 0x9c, 0x87, 0xba, 0xaf, 0x19, 0x07, 0x23, 0xb9, 0x29, 0x26, 0xa4, 0xa2, - 0x89, 0xb1, 0x2f, 0x73, 0x43, 0x1c, 0x4f, 0x97, 0xdd, 0xbf, 0x76, 0x60, 0xc5, 0x18, 0xb0, 0xe4, - 0xc2, 0x0f, 0x41, 0x25, 0xa6, 0x88, 0x88, 0xa1, 0x10, 0xa6, 0x0d, 0xdb, 0xeb, 0xcc, 0x3e, 0xb3, - 0x88, 0x69, 0x33, 0xfd, 0x19, 0x0d, 0x30, 0x99, 0x8e, 0xa5, 0x56, 0x32, 0x21, 0x64, 0xa4, 0x53, - 0xce, 0x9f, 0x69, 0x12, 0xa1, 0x17, 0x2d, 0x8c, 0xf2, 0x0e, 0xd0, 0x49, 0xd4, 0x44, 0xc2, 0x40, - 0xd8, 0xa0, 0xfb, 0xcf, 0x0e, 0xac, 0x0a, 0x6f, 0x5f, 0x9e, 0xa5, 0x74, 0x12, 0xfd, 0x9c, 0x38, - 0xde, 0x08, 0x89, 0xdc, 0xbd, 0xe0, 0xc9, 0x32, 0xfb, 0xcc, 0x2b, 0x9e, 0x50, 0x74, 0xbe, 0xc9, - 0x19, 0x7b, 0x51, 0x2d, 0xdb, 0x8b, 0x97, 0xac, 0x74, 0x59, 0x84, 0xac, 0x5e, 0x1a, 0x21, 0xbb, - 0x33, 0x0f, 0xf5, 0xa4, 0x1f, 0x4d, 0xb8, 0xbb, 0x0e, 0x6b, 0xf6, 0xe4, 0xa4, 0x0a, 0xfa, 0x9e, - 0x03, 0x9d, 0x7b, 0x22, 0x5e, 0x1c, 0x84, 0xc3, 0xdd, 0x20, 0x49, 0xa3, 0x58, 0xbf, 0x1a, 0xba, - 0x0c, 0x90, 0xa4, 0x7e, 0x9c, 0x8a, 0x7c, 0x40, 0x19, 0xbf, 0xca, 0x10, 0x1c, 0x23, 0x0f, 0x07, - 0xa2, 0x56, 0xec, 0x8d, 0x2e, 0x17, 0x8c, 0xb2, 0x3c, 0x8f, 0x58, 0xa6, 0xed, 0x6d, 0x91, 0xc0, - 0x85, 0xc6, 0x97, 0x9f, 0x90, 0xaa, 0x15, 0x8e, 0x7e, 0x0e, 0x75, 0xff, 0xd2, 0x81, 0xe5, 0x6c, - 0x90, 0x3b, 0x08, 0xda, 0xda, 0x41, 0xda, 0xb3, 0x4c, 0x3b, 0xa8, 0xc8, 0x5a, 0x80, 0x06, 0x4e, - 0x8e, 0xcd, 0x40, 0x48, 0x62, 0x65, 0x29, 0x9a, 0x2a, 0x8f, 0xc1, 0x84, 0x44, 0xea, 0x04, 0x9a, - 0x56, 0xe9, 0x26, 0xc8, 0x12, 0xa5, 0x73, 0x8e, 0x53, 0xfa, 0x6a, 0x4e, 0x9c, 0x74, 0x64, 0x51, - 0xd9, 0xa7, 0x79, 0x42, 0xf1, 0xa7, 0xfb, 0xbb, 0x0e, 0x5c, 0x2a, 0x59, 0x5c, 0x29, 0x19, 0x77, - 0x61, 0xe5, 0x48, 0x57, 0xaa, 0x05, 0x10, 0xe2, 0xb1, 0xae, 0x2e, 0x38, 0xec, 0x49, 0x7b, 0xc5, - 0x0f, 0xb4, 0x33, 0x21, 0x96, 0xd4, 0xca, 0x49, 0x2a, 0x56, 0x6c, 0xfd, 0x5e, 0x15, 0x96, 0xc4, - 0xc5, 0x97, 0x78, 0xbf, 0xcb, 0x63, 0xf6, 0x11, 0xcc, 0xcb, 0xf7, 0xd7, 0xec, 0xa2, 0xec, 0xd6, - 0x7e, 0xf1, 0xdd, 0x5d, 0xcf, 0xc3, 0x92, 0x77, 0x56, 0x7f, 0xf3, 0x87, 0xff, 0xfa, 0xfb, 0x95, - 0x45, 0xd6, 0xbc, 0x79, 0xf2, 0xee, 0xcd, 0x21, 0x0f, 0x13, 0x6c, 0xe3, 0x57, 0x01, 0xb2, 0x97, - 0xc9, 0xac, 0xa3, 0x9d, 0xa0, 0xdc, 0x93, 0xeb, 0xee, 0xa5, 0x92, 0x1a, 0xd9, 0xee, 0x25, 0x6a, - 0x77, 0xd5, 0x5d, 0xc2, 0x76, 0x83, 0x30, 0x48, 0xc5, 0x33, 0xe5, 0x0f, 0x9c, 0x4d, 0x36, 0x80, - 0x96, 0xf9, 0xf0, 0x98, 0xa9, 0x58, 0x48, 0xc9, 0xb3, 0xe7, 0xee, 0x6b, 0xa5, 0x75, 0x2a, 0x10, - 0x44, 0x7d, 0x5c, 0x74, 0xdb, 0xd8, 0xc7, 0x94, 0x28, 0xb2, 0x5e, 0x46, 0xb0, 0x64, 0xbf, 0x2f, - 0x66, 0xaf, 0x1b, 0x62, 0x5d, 0x78, 0xdd, 0xdc, 0x7d, 0xe3, 0x8c, 0x5a, 0xd9, 0xd7, 0x1b, 0xd4, - 0xd7, 0x86, 0xcb, 0xb0, 0xaf, 0x3e, 0xd1, 0xa8, 0xd7, 0xcd, 0x1f, 0x38, 0x9b, 0x5b, 0xdf, 0xba, - 0x0c, 0x0d, 0x1d, 0xbd, 0x64, 0x5f, 0x87, 0x45, 0xeb, 0x66, 0x92, 0xa9, 0x69, 0x94, 0x5d, 0x64, - 0x76, 0x5f, 0x2f, 0xaf, 0x94, 0x1d, 0x5f, 0xa6, 0x8e, 0x3b, 0x6c, 0x1d, 0x3b, 0x96, 0x57, 0x7b, - 0x37, 0xe9, 0x3e, 0x56, 0x24, 0x8b, 0x3e, 0x13, 0xf3, 0xcc, 0x6e, 0x13, 0xad, 0x79, 0x16, 0x6e, - 0x1f, 0xad, 0x79, 0x16, 0xaf, 0x20, 0xdd, 0xd7, 0xa9, 0xbb, 0x75, 0xb6, 0x66, 0x76, 0xa7, 0xa3, - 0x8a, 0x9c, 0xd2, 0x7b, 0xcd, 0xe7, 0xc7, 0xec, 0x0d, 0xcd, 0x58, 0x65, 0xcf, 0x92, 0x35, 0x8b, - 0x14, 0xdf, 0x26, 0xbb, 0x1d, 0xea, 0x8a, 0x31, 0xda, 0x3e, 0xf3, 0xf5, 0x31, 0xfb, 0x2a, 0x34, - 0xf4, 0x5b, 0x3b, 0xb6, 0x61, 0x3c, 0x70, 0x34, 0x1f, 0x00, 0x76, 0x3b, 0xc5, 0x8a, 0x32, 0xc6, - 0x30, 0x5b, 0x46, 0xc6, 0xd8, 0x83, 0x8b, 0xd2, 0xa9, 0x3e, 0xe4, 0x3f, 0xce, 0x4c, 0x4a, 0x1e, - 0x4d, 0xdf, 0x72, 0xd8, 0x87, 0xb0, 0xa0, 0x9e, 0x30, 0xb2, 0xf5, 0xf2, 0xa7, 0x98, 0xdd, 0x8d, - 0x02, 0x2e, 0xb5, 0xc7, 0x6d, 0x80, 0xec, 0xf9, 0x9d, 0x96, 0xb3, 0xc2, 0xa3, 0x40, 0xbd, 0x88, - 0x25, 0x6f, 0xf5, 0x86, 0xf4, 0xd8, 0xd0, 0x7e, 0xdd, 0xc7, 0xde, 0xcc, 0xe8, 0x4b, 0xdf, 0xfd, - 0xbd, 0xa4, 0x41, 0x77, 0x9d, 0xd6, 0xae, 0xcd, 0x48, 0x70, 0x43, 0x7e, 0xaa, 0x12, 0xdd, 0xef, - 0x42, 0xd3, 0x78, 0xd2, 0xc7, 0x54, 0x0b, 0xc5, 0xe7, 0x80, 0xdd, 0x6e, 0x59, 0x95, 0x1c, 0xee, - 0x17, 0x60, 0xd1, 0x7a, 0x9b, 0xa7, 0x25, 0xa3, 0xec, 0xe5, 0x9f, 0x96, 0x8c, 0xf2, 0xe7, 0x7c, - 0x5f, 0x81, 0xa6, 0xf1, 0x92, 0x8e, 0x19, 0x29, 0x7c, 0xb9, 0x37, 0x74, 0x7a, 0x44, 0x65, 0x0f, - 0xef, 0xd6, 0x68, 0xbe, 0x4b, 0x6e, 0x03, 0xe7, 0x4b, 0xd9, 0xde, 0xc8, 0x24, 0x5f, 0x87, 0x25, - 0xfb, 0x6d, 0x9d, 0x96, 0xaa, 0xd2, 0x57, 0x7a, 0x5a, 0xaa, 0xce, 0x78, 0x90, 0x27, 0x19, 0x72, - 0x73, 0x55, 0x77, 0x72, 0xf3, 0x63, 0x79, 0xaf, 0xf7, 0x82, 0x7d, 0x09, 0x55, 0x87, 0x4c, 0xbf, - 0x67, 0xd9, 0x8b, 0x42, 0x3b, 0x49, 0x5f, 0x73, 0x7b, 0x21, 0x53, 0xdf, 0x5d, 0xa1, 0xc6, 0x9b, - 0x2c, 0x9b, 0x81, 0xb0, 0x07, 0x94, 0x86, 0x6f, 0xd8, 0x03, 0x33, 0x53, 0xdf, 0xb0, 0x07, 0x56, - 0xb6, 0x7e, 0xde, 0x1e, 0xa4, 0x01, 0xb6, 0x11, 0xc2, 0x72, 0x2e, 0x87, 0x45, 0x0b, 0x4b, 0x79, - 0xd2, 0x5f, 0xf7, 0xf2, 0xcb, 0x53, 0x5f, 0x6c, 0x35, 0xa3, 0xd4, 0xcb, 0x4d, 0x95, 0xa3, 0xf9, - 0x6b, 0xd0, 0x32, 0xdf, 0x44, 0x69, 0x0b, 0x51, 0xf2, 0x92, 0x4b, 0x5b, 0x88, 0xb2, 0x47, 0x54, - 0x6a, 0x73, 0x59, 0xcb, 0xec, 0x06, 0x37, 0xd7, 0x7e, 0x42, 0x92, 0xa9, 0xcc, 0xb2, 0xb7, 0x31, - 0x99, 0xca, 0x2c, 0x7d, 0x77, 0xa2, 0x36, 0x97, 0xad, 0x5a, 0x73, 0x11, 0x41, 0x5b, 0xf6, 0x15, - 0x58, 0x36, 0x12, 0xc4, 0x0e, 0x66, 0x61, 0x5f, 0x33, 0x6a, 0x31, 0xb9, 0xb8, 0x5b, 0xe6, 0x79, - 0xba, 0x1b, 0xd4, 0xfe, 0x8a, 0x6b, 0x4d, 0x02, 0x99, 0x74, 0x1b, 0x9a, 0x66, 0xf2, 0xd9, 0x4b, - 0xda, 0xdd, 0x30, 0xaa, 0xcc, 0x4c, 0xda, 0x5b, 0x0e, 0xfb, 0x23, 0x07, 0x5a, 0x56, 0x2a, 0x97, - 0x75, 0x35, 0x91, 0x6b, 0xa7, 0x63, 0xd6, 0x99, 0x0d, 0xb9, 0x1e, 0x0d, 0x72, 0x6f, 0xf3, 0x0b, - 0xd6, 0x22, 0x7c, 0x6c, 0x9d, 0x60, 0x6e, 0xe4, 0x9f, 0xd6, 0xbf, 0xc8, 0x13, 0x98, 0x09, 0xd8, - 0x2f, 0x6e, 0x39, 0xec, 0x03, 0xf1, 0xe7, 0x11, 0x2a, 0x62, 0xc1, 0x0c, 0x45, 0x9a, 0x5f, 0x32, - 0xf3, 0x9f, 0x13, 0xae, 0x3b, 0xb7, 0x1c, 0xf6, 0x35, 0xf1, 0x82, 0x5e, 0x7e, 0x4b, 0x2b, 0xff, - 0xaa, 0xdf, 0xbb, 0x57, 0x69, 0x36, 0x97, 0xdd, 0x4b, 0xd6, 0x6c, 0xf2, 0x96, 0xe4, 0xb6, 0x18, - 0x9d, 0xfc, 0x63, 0x84, 0x4c, 0x25, 0x16, 0xfe, 0x2c, 0xe1, 0xec, 0x41, 0x8e, 0xc5, 0x20, 0x25, - 0xb9, 0xc5, 0x1e, 0xaf, 0xd8, 0x8c, 0xbb, 0x49, 0x63, 0xbd, 0xea, 0xbe, 0x79, 0xe6, 0x58, 0x6f, - 0xd2, 0x89, 0x14, 0x47, 0xbc, 0x0f, 0x90, 0x45, 0x17, 0x59, 0x2e, 0xba, 0xa5, 0xad, 0x42, 0x31, - 0x00, 0x69, 0xf3, 0xa0, 0x0a, 0x82, 0x61, 0x8b, 0x5f, 0x15, 0xa2, 0xfa, 0x40, 0xc5, 0xc5, 0x2e, - 0x19, 0xe2, 0x68, 0x87, 0x01, 0xbb, 0xdd, 0xb2, 0xaa, 0x32, 0x41, 0xd5, 0x41, 0xb6, 0x27, 0xb0, - 0xb8, 0x17, 0x45, 0xcf, 0xa6, 0x13, 0x1d, 0xab, 0xb7, 0xe3, 0x37, 0xbb, 0x7e, 0x72, 0xdc, 0xcd, - 0xcd, 0xc2, 0xbd, 0x42, 0x4d, 0x75, 0x59, 0xc7, 0x68, 0xea, 0xe6, 0xc7, 0x59, 0xf4, 0xf2, 0x05, - 0xf3, 0x61, 0x45, 0x7b, 0x00, 0x7a, 0xe0, 0x5d, 0xbb, 0x19, 0x33, 0xee, 0x56, 0xe8, 0xc2, 0xf2, - 0xc9, 0xd4, 0x68, 0x6f, 0x26, 0xaa, 0xcd, 0x5b, 0x0e, 0xdb, 0x87, 0xd6, 0x5d, 0xde, 0x8f, 0x06, - 0x5c, 0x46, 0x5c, 0x56, 0xb3, 0x81, 0xeb, 0x50, 0x4d, 0x77, 0xd1, 0x02, 0x6d, 0x9d, 0x38, 0xf1, - 0x67, 0x31, 0xff, 0xc6, 0xcd, 0x8f, 0x65, 0x2c, 0xe7, 0x85, 0xd2, 0x89, 0x2a, 0xfe, 0x64, 0xe9, - 0xc4, 0x5c, 0xc0, 0xca, 0xd2, 0x89, 0x85, 0x80, 0x95, 0xb5, 0xd4, 0x2a, 0xfe, 0xc5, 0x46, 0xb0, - 0x52, 0x88, 0x71, 0x69, 0x3f, 0xe2, 0xac, 0xc8, 0x58, 0xf7, 0xca, 0xd9, 0x04, 0x76, 0x6f, 0x9b, - 0x76, 0x6f, 0x07, 0xb0, 0x78, 0x97, 0x8b, 0xc5, 0x12, 0x09, 0x01, 0xb9, 0x97, 0x7a, 0x66, 0xf2, - 0x40, 0x5e, 0x29, 0x52, 0x9d, 0x6d, 0xf4, 0xe8, 0x36, 0x9e, 0x7d, 0x15, 0x9a, 0xf7, 0x79, 0xaa, - 0x32, 0x00, 0xb4, 0x37, 0x96, 0x4b, 0x09, 0xe8, 0x96, 0x24, 0x10, 0xd8, 0x3c, 0x43, 0xad, 0xdd, - 0xe4, 0x83, 0x21, 0x17, 0xea, 0xa9, 0x17, 0x0c, 0x5e, 0xb0, 0x5f, 0xa6, 0xc6, 0x75, 0x42, 0xd1, - 0xba, 0x71, 0x71, 0x6c, 0x36, 0xbe, 0x9c, 0xc3, 0xcb, 0x5a, 0x0e, 0xa3, 0x01, 0x37, 0xcc, 0x7f, - 0x08, 0x4d, 0x23, 0xdb, 0x4d, 0x0b, 0x50, 0x31, 0x73, 0x4f, 0x0b, 0x50, 0x49, 0x72, 0x9c, 0x7b, - 0x9d, 0xfa, 0x71, 0xd9, 0x95, 0xac, 0x1f, 0x91, 0x10, 0x97, 0xf5, 0x74, 0xf3, 0x63, 0x7f, 0x9c, - 0xbe, 0x60, 0x4f, 0xe9, 0xd5, 0x9e, 0x99, 0xe5, 0x90, 0x79, 0x83, 0xf9, 0x84, 0x08, 0xbd, 0x58, - 0x46, 0x95, 0xed, 0x21, 0x8a, 0xae, 0xc8, 0x4b, 0xf8, 0x0c, 0xc0, 0x41, 0x1a, 0x4d, 0xee, 0xfa, - 0x7c, 0x1c, 0x85, 0x99, 0xae, 0xcd, 0x6e, 0xf2, 0x33, 0xfd, 0x65, 0x5c, 0xe7, 0xb3, 0xa7, 0x86, - 0x3f, 0x6e, 0x25, 0x89, 0x28, 0xe6, 0x3a, 0xf3, 0xb2, 0x5f, 0x2f, 0x48, 0xc9, 0x85, 0xff, 0x2d, - 0x07, 0xbd, 0xeb, 0x2c, 0xa2, 0xaa, 0xbd, 0xeb, 0x42, 0xb0, 0x56, 0xab, 0xbd, 0x92, 0xf0, 0xeb, - 0x3e, 0x34, 0xb2, 0x10, 0xdd, 0x46, 0x96, 0xb1, 0x68, 0x05, 0xf4, 0xb4, 0x55, 0x2c, 0x04, 0xce, - 0xdc, 0x36, 0x2d, 0x15, 0xb0, 0x05, 0x5c, 0x2a, 0x8a, 0x86, 0x05, 0xb0, 0x2a, 0x06, 0xa8, 0x4d, - 0x3c, 0xdd, 0x4d, 0xab, 0x99, 0x94, 0x04, 0xaf, 0xb4, 0x34, 0x97, 0xc6, 0x7e, 0xac, 0x73, 0x36, - 0x72, 0xab, 0xb8, 0x17, 0x47, 0xd5, 0x3c, 0x86, 0x95, 0x42, 0xe0, 0x42, 0x8b, 0xf4, 0x59, 0xf1, - 0x22, 0x2d, 0xd2, 0x67, 0xc6, 0x3c, 0xdc, 0x8b, 0xd4, 0xe5, 0xb2, 0x0b, 0xd8, 0x65, 0x72, 0x1a, - 0xa4, 0xfd, 0xe3, 0x0f, 0x9c, 0xcd, 0xc3, 0x39, 0xfa, 0xb3, 0xb9, 0x4f, 0xfd, 0x6f, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xf1, 0xeb, 0xab, 0x92, 0x9e, 0x4e, 0x00, 0x00, + // 6387 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7c, 0xcd, 0x6f, 0x1c, 0xd9, + 0x75, 0xaf, 0xaa, 0xd9, 0x4d, 0xb2, 0x4f, 0x37, 0xc9, 0xe6, 0xe5, 0x57, 0xab, 0x67, 0x46, 0xa3, + 0x29, 0x0f, 0x46, 0x32, 0xdf, 0x3c, 0x49, 0x43, 0xdb, 0x83, 0xf1, 0xcc, 0x7b, 0xf6, 0xa3, 0x48, + 0x4a, 0x94, 0xcd, 0x91, 0xe8, 0xa2, 0xc6, 0x7a, 0xb1, 0x13, 0xb4, 0x8b, 0xdd, 0x97, 0xcd, 0xb2, + 0xba, 0xab, 0xda, 0x55, 0xd5, 0xa4, 0xda, 0x13, 0x01, 0x49, 0x1c, 0x64, 0x11, 0xc4, 0x08, 0x82, + 0x04, 0x08, 0x1c, 0x20, 0x08, 0xe2, 0x78, 0xe1, 0xfc, 0x01, 0xf1, 0xc6, 0xc9, 0x2e, 0x9b, 0x04, + 0x08, 0xb2, 0xf0, 0xca, 0x08, 0x90, 0x4d, 0xb2, 0x49, 0x82, 0x6c, 0x02, 0x64, 0x1b, 0x04, 0xe7, + 0xdc, 0x8f, 0xba, 0xb7, 0xaa, 0x28, 0xca, 0x5f, 0xd9, 0xf5, 0xfd, 0xdd, 0x53, 0xf7, 0xf3, 0x7c, + 0xdd, 0x73, 0xcf, 0x6d, 0xa8, 0xc7, 0xe3, 0xde, 0xad, 0x71, 0x1c, 0xa5, 0x11, 0xab, 0x0d, 0xc3, + 0x78, 0xdc, 0xeb, 0xbc, 0x3a, 0x88, 0xa2, 0xc1, 0x90, 0xdf, 0xf6, 0xc7, 0xc1, 0x6d, 0x3f, 0x0c, + 0xa3, 0xd4, 0x4f, 0x83, 0x28, 0x4c, 0x04, 0x91, 0xfb, 0x35, 0x58, 0xbc, 0xcf, 0xc3, 0x23, 0xce, + 0xfb, 0x1e, 0xff, 0xc6, 0x84, 0x27, 0x29, 0xfb, 0x5f, 0xb0, 0xec, 0xf3, 0x6f, 0x72, 0xde, 0xef, + 0x8e, 0xfd, 0x24, 0x19, 0x9f, 0xc6, 0x7e, 0xc2, 0xdb, 0xce, 0x75, 0xe7, 0x66, 0xd3, 0x6b, 0x89, + 0x8a, 0x43, 0x8d, 0xb3, 0x37, 0xa0, 0x99, 0x20, 0x29, 0x0f, 0xd3, 0x38, 0x1a, 0x4f, 0xdb, 0x15, + 0xa2, 0x6b, 0x20, 0xb6, 0x27, 0x20, 0x77, 0x08, 0x4b, 0xba, 0x87, 0x64, 0x1c, 0x85, 0x09, 0x67, + 0x77, 0x60, 0xb5, 0x17, 0x8c, 0x4f, 0x79, 0xdc, 0xa5, 0x8f, 0x47, 0x21, 0x1f, 0x45, 0x61, 0xd0, + 0x6b, 0x3b, 0xd7, 0x67, 0x6e, 0xd6, 0x3d, 0x26, 0xea, 0xf0, 0x8b, 0x0f, 0x65, 0x0d, 0xbb, 0x01, + 0x4b, 0x3c, 0x14, 0x38, 0xef, 0xd3, 0x57, 0xb2, 0xab, 0xc5, 0x0c, 0xc6, 0x0f, 0xdc, 0xbf, 0x76, + 0x60, 0xf9, 0x41, 0x18, 0xa4, 0x4f, 0xfc, 0xe1, 0x90, 0xa7, 0x6a, 0x4e, 0x37, 0x60, 0xe9, 0x9c, + 0x00, 0x9a, 0xd3, 0x79, 0x14, 0xf7, 0xe5, 0x8c, 0x16, 0x05, 0x7c, 0x28, 0xd1, 0x0b, 0x47, 0x56, + 0xb9, 0x70, 0x64, 0xa5, 0xcb, 0x35, 0x73, 0xc1, 0x72, 0xdd, 0x80, 0xa5, 0x98, 0xf7, 0xa2, 0x33, + 0x1e, 0x4f, 0xbb, 0xe7, 0x41, 0xd8, 0x8f, 0xce, 0xdb, 0xd5, 0xeb, 0xce, 0xcd, 0x9a, 0xb7, 0xa8, + 0xe0, 0x27, 0x84, 0xba, 0xab, 0xc0, 0xcc, 0x59, 0x88, 0x75, 0x73, 0x07, 0xb0, 0xf2, 0x51, 0x38, + 0x8c, 0x7a, 0x4f, 0x7f, 0xca, 0xd9, 0x95, 0x74, 0x5f, 0x29, 0xed, 0x7e, 0x1d, 0x56, 0xed, 0x8e, + 0xe4, 0x00, 0x38, 0xac, 0xed, 0x9c, 0xfa, 0xe1, 0x80, 0xab, 0x26, 0xd5, 0x10, 0x3e, 0x09, 0xad, + 0xde, 0x24, 0x8e, 0x79, 0x58, 0x18, 0xc3, 0x92, 0xc4, 0xf5, 0x20, 0xde, 0x80, 0x66, 0xc8, 0xcf, + 0x33, 0x32, 0xc9, 0x32, 0x21, 0x3f, 0x57, 0x24, 0x6e, 0x1b, 0xd6, 0xf3, 0xdd, 0xc8, 0x01, 0x7c, + 0xa7, 0x02, 0x8d, 0xc7, 0xb1, 0x1f, 0x26, 0x7e, 0x0f, 0xb9, 0x98, 0xb5, 0x61, 0x2e, 0x7d, 0xd6, + 0x3d, 0xf5, 0x93, 0x53, 0xea, 0xae, 0xee, 0xa9, 0x22, 0x5b, 0x87, 0x59, 0x7f, 0x14, 0x4d, 0xc2, + 0x94, 0x3a, 0x98, 0xf1, 0x64, 0x89, 0xbd, 0x0d, 0xcb, 0xe1, 0x64, 0xd4, 0xed, 0x45, 0xe1, 0x49, + 0x10, 0x8f, 0x84, 0x2c, 0xd0, 0x7e, 0xd5, 0xbc, 0x62, 0x05, 0xbb, 0x06, 0x70, 0x8c, 0xeb, 0x20, + 0xba, 0xa8, 0x52, 0x17, 0x06, 0xc2, 0x5c, 0x68, 0xca, 0x12, 0x0f, 0x06, 0xa7, 0x69, 0xbb, 0x46, + 0x0d, 0x59, 0x18, 0xb6, 0x91, 0x06, 0x23, 0xde, 0x4d, 0x52, 0x7f, 0x34, 0x6e, 0xcf, 0xd2, 0x68, + 0x0c, 0x84, 0xea, 0xa3, 0xd4, 0x1f, 0x76, 0x4f, 0x38, 0x4f, 0xda, 0x73, 0xb2, 0x5e, 0x23, 0xec, + 0x2d, 0x58, 0xec, 0xf3, 0x24, 0xed, 0xfa, 0xfd, 0x7e, 0xcc, 0x93, 0x84, 0x27, 0xed, 0x79, 0xe2, + 0xc6, 0x1c, 0x8a, 0xab, 0x76, 0x9f, 0xa7, 0xc6, 0xea, 0x24, 0x72, 0x77, 0xdc, 0x03, 0x60, 0x06, + 0xbc, 0xcb, 0x53, 0x3f, 0x18, 0x26, 0xec, 0x5d, 0x68, 0xa6, 0x06, 0x31, 0x49, 0x5f, 0x63, 0x8b, + 0xdd, 0x22, 0xb5, 0x71, 0xcb, 0xf8, 0xc0, 0xb3, 0xe8, 0xdc, 0xfb, 0x30, 0x7f, 0x8f, 0xf3, 0x83, + 0x60, 0x14, 0xa4, 0x6c, 0x1d, 0x6a, 0x27, 0xc1, 0x33, 0x2e, 0x36, 0x7b, 0x66, 0xff, 0x8a, 0x27, + 0x8a, 0xac, 0x03, 0x73, 0x63, 0x1e, 0xf7, 0xb8, 0x5a, 0xfe, 0xfd, 0x2b, 0x9e, 0x02, 0xee, 0xce, + 0x41, 0x6d, 0x88, 0x1f, 0xbb, 0xdf, 0xaf, 0x40, 0xe3, 0x88, 0x87, 0x9a, 0x89, 0x18, 0x54, 0x71, + 0x4a, 0x92, 0x71, 0xe8, 0x37, 0x7b, 0x1d, 0x1a, 0x34, 0xcd, 0x24, 0x8d, 0x83, 0x70, 0x40, 0x8d, + 0xd5, 0x3d, 0x40, 0xe8, 0x88, 0x10, 0xd6, 0x82, 0x19, 0x7f, 0x94, 0xd2, 0x0e, 0xce, 0x78, 0xf8, + 0x13, 0x19, 0x6c, 0xec, 0x4f, 0x47, 0xc8, 0x8b, 0x7a, 0xd7, 0x9a, 0x5e, 0x43, 0x62, 0xfb, 0xb8, + 0x6d, 0xb7, 0x60, 0xc5, 0x24, 0x51, 0xad, 0xd7, 0xa8, 0xf5, 0x65, 0x83, 0x52, 0x76, 0x72, 0x03, + 0x96, 0x14, 0x7d, 0x2c, 0x06, 0x4b, 0xfb, 0x58, 0xf7, 0x16, 0x25, 0xac, 0xa6, 0x70, 0x13, 0x5a, + 0x27, 0x41, 0xe8, 0x0f, 0xbb, 0xbd, 0x61, 0x7a, 0xd6, 0xed, 0xf3, 0x61, 0xea, 0xd3, 0x8e, 0xd6, + 0xbc, 0x45, 0xc2, 0x77, 0x86, 0xe9, 0xd9, 0x2e, 0xa2, 0xec, 0x6d, 0xa8, 0x9f, 0x70, 0xde, 0xa5, + 0x95, 0x68, 0xcf, 0x5f, 0x77, 0x6e, 0x36, 0xb6, 0x96, 0xe4, 0xd2, 0xab, 0xd5, 0xf5, 0xe6, 0x4f, + 0xe4, 0x2f, 0xf7, 0x0f, 0x1c, 0x68, 0x8a, 0xa5, 0x92, 0x2a, 0xf4, 0x4d, 0x58, 0x50, 0x23, 0xe2, + 0x71, 0x1c, 0xc5, 0x92, 0xfd, 0x6d, 0x90, 0x6d, 0x42, 0x4b, 0x01, 0xe3, 0x98, 0x07, 0x23, 0x7f, + 0xc0, 0xa5, 0xbc, 0x15, 0x70, 0xb6, 0x95, 0xb5, 0x18, 0x47, 0x93, 0x54, 0x28, 0xb1, 0xc6, 0x56, + 0x53, 0x0e, 0xca, 0x43, 0xcc, 0xb3, 0x49, 0xdc, 0x6f, 0x3b, 0xc0, 0x70, 0x58, 0x8f, 0x23, 0x51, + 0x2d, 0x57, 0x21, 0xbf, 0x03, 0xce, 0x4b, 0xef, 0x40, 0xe5, 0xa2, 0x1d, 0x78, 0x13, 0x66, 0xa9, + 0x4b, 0x94, 0xd5, 0x99, 0xc2, 0xb0, 0x64, 0x9d, 0xfb, 0x5d, 0x07, 0x9a, 0xa8, 0x39, 0x42, 0x3e, + 0x3c, 0x8c, 0x82, 0x30, 0x65, 0x77, 0x80, 0x9d, 0x4c, 0xc2, 0x7e, 0x10, 0x0e, 0xba, 0xe9, 0xb3, + 0xa0, 0xdf, 0x3d, 0x9e, 0x62, 0x13, 0x34, 0x9e, 0xfd, 0x2b, 0x5e, 0x49, 0x1d, 0x7b, 0x1b, 0x5a, + 0x16, 0x9a, 0xa4, 0xb1, 0x18, 0xd5, 0xfe, 0x15, 0xaf, 0x50, 0x83, 0xf2, 0x1f, 0x4d, 0xd2, 0xf1, + 0x24, 0xed, 0x06, 0x61, 0x9f, 0x3f, 0xa3, 0x35, 0x5b, 0xf0, 0x2c, 0xec, 0xee, 0x22, 0x34, 0xcd, + 0xef, 0xdc, 0xcf, 0x41, 0xeb, 0x00, 0x15, 0x43, 0x18, 0x84, 0x83, 0x6d, 0x21, 0xbd, 0xa8, 0xad, + 0xc6, 0x93, 0xe3, 0xa7, 0x7c, 0x2a, 0xf7, 0x51, 0x96, 0x50, 0x24, 0x4e, 0xa3, 0x24, 0x95, 0xeb, + 0x42, 0xbf, 0xdd, 0x7f, 0x72, 0x60, 0x09, 0x17, 0xfd, 0x43, 0x3f, 0x9c, 0xaa, 0x15, 0x3f, 0x80, + 0x26, 0x36, 0xf5, 0x38, 0xda, 0x16, 0x3a, 0x4f, 0xc8, 0xf2, 0x4d, 0xb9, 0x48, 0x39, 0xea, 0x5b, + 0x26, 0x29, 0x9a, 0xe9, 0xa9, 0x67, 0x7d, 0x8d, 0x42, 0x97, 0xfa, 0xf1, 0x80, 0xa7, 0xa4, 0x0d, + 0xa5, 0x76, 0x04, 0x01, 0xed, 0x44, 0xe1, 0x09, 0xbb, 0x0e, 0xcd, 0xc4, 0x4f, 0xbb, 0x63, 0x1e, + 0xd3, 0xaa, 0x91, 0xe0, 0xcc, 0x78, 0x90, 0xf8, 0xe9, 0x21, 0x8f, 0xef, 0x4e, 0x53, 0xde, 0xf9, + 0x3c, 0x2c, 0x17, 0x7a, 0x41, 0x59, 0xcd, 0xa6, 0x88, 0x3f, 0xd9, 0x2a, 0xd4, 0xce, 0xfc, 0xe1, + 0x84, 0x4b, 0x25, 0x2d, 0x0a, 0xef, 0x57, 0xde, 0x73, 0xdc, 0xb7, 0xa0, 0x95, 0x0d, 0x5b, 0x32, + 0x3d, 0x83, 0x2a, 0xae, 0xa0, 0x6c, 0x80, 0x7e, 0xbb, 0xbf, 0xee, 0x08, 0xc2, 0x9d, 0x28, 0xd0, + 0x0a, 0x0f, 0x09, 0x51, 0x2f, 0x2a, 0x42, 0xfc, 0x7d, 0xa1, 0x41, 0xf8, 0xd9, 0x27, 0xeb, 0xde, + 0x80, 0x65, 0x63, 0x08, 0x2f, 0x18, 0xec, 0xb7, 0x1d, 0x58, 0x7e, 0xc8, 0xcf, 0xe5, 0xae, 0xab, + 0xd1, 0xbe, 0x07, 0xd5, 0x74, 0x3a, 0x16, 0x4e, 0xd6, 0xe2, 0xd6, 0x9b, 0x72, 0xd3, 0x0a, 0x74, + 0xb7, 0x64, 0xf1, 0xf1, 0x74, 0xcc, 0x3d, 0xfa, 0xc2, 0xfd, 0x1c, 0x34, 0x0c, 0x90, 0x6d, 0xc0, + 0xca, 0x93, 0x07, 0x8f, 0x1f, 0xee, 0x1d, 0x1d, 0x75, 0x0f, 0x3f, 0xba, 0xfb, 0xc5, 0xbd, 0x5f, + 0xea, 0xee, 0x6f, 0x1f, 0xed, 0xb7, 0xae, 0xb0, 0x75, 0x60, 0x0f, 0xf7, 0x8e, 0x1e, 0xef, 0xed, + 0x5a, 0xb8, 0xe3, 0x76, 0xa0, 0xfd, 0x90, 0x9f, 0x3f, 0x09, 0xd2, 0x90, 0x27, 0x89, 0xdd, 0x9b, + 0x7b, 0x0b, 0x98, 0x39, 0x04, 0x39, 0xab, 0x36, 0xcc, 0x49, 0x8b, 0xa3, 0x0c, 0xae, 0x2c, 0xba, + 0x6f, 0x01, 0x3b, 0x0a, 0x06, 0xe1, 0x87, 0x3c, 0x49, 0xfc, 0x81, 0x56, 0x05, 0x2d, 0x98, 0x19, + 0x25, 0x03, 0xa9, 0x01, 0xf0, 0xa7, 0xfb, 0x29, 0x58, 0xb1, 0xe8, 0x64, 0xc3, 0xaf, 0x42, 0x3d, + 0x09, 0x06, 0xa1, 0x9f, 0x4e, 0x62, 0x2e, 0x9b, 0xce, 0x00, 0xf7, 0x1e, 0xac, 0x7e, 0x99, 0xc7, + 0xc1, 0xc9, 0xf4, 0xb2, 0xe6, 0xed, 0x76, 0x2a, 0xf9, 0x76, 0xf6, 0x60, 0x2d, 0xd7, 0x8e, 0xec, + 0x5e, 0x30, 0xa2, 0xdc, 0xae, 0x79, 0x4f, 0x14, 0x0c, 0xb1, 0xac, 0x98, 0x62, 0xe9, 0x7e, 0x04, + 0x6c, 0x27, 0x0a, 0x43, 0xde, 0x4b, 0x0f, 0x39, 0x8f, 0x33, 0xcf, 0x39, 0xe3, 0xba, 0xc6, 0xd6, + 0x86, 0xdc, 0xc7, 0xbc, 0xac, 0x4b, 0x76, 0x64, 0x50, 0x1d, 0xf3, 0x78, 0x44, 0x0d, 0xcf, 0x7b, + 0xf4, 0xdb, 0x5d, 0x83, 0x15, 0xab, 0x59, 0xe9, 0xf4, 0xbc, 0x03, 0x6b, 0xbb, 0x41, 0xd2, 0x2b, + 0x76, 0xd8, 0x86, 0xb9, 0xf1, 0xe4, 0xb8, 0x9b, 0xc9, 0x94, 0x2a, 0xa2, 0x2f, 0x90, 0xff, 0x44, + 0x36, 0xf6, 0x5b, 0x0e, 0x54, 0xf7, 0x1f, 0x1f, 0xec, 0xb0, 0x0e, 0xcc, 0x07, 0x61, 0x2f, 0x1a, + 0xa1, 0xda, 0x15, 0x93, 0xd6, 0xe5, 0x0b, 0x65, 0xe5, 0x55, 0xa8, 0x93, 0xb6, 0x46, 0xf7, 0x46, + 0x3a, 0xb9, 0x19, 0x80, 0xae, 0x15, 0x7f, 0x36, 0x0e, 0x62, 0xf2, 0x9d, 0x94, 0x47, 0x54, 0x25, + 0x8d, 0x58, 0xac, 0x70, 0xff, 0xab, 0x0a, 0x73, 0x52, 0x57, 0x53, 0x7f, 0xbd, 0x34, 0x38, 0xe3, + 0x72, 0x24, 0xb2, 0x84, 0x56, 0x2e, 0xe6, 0xa3, 0x28, 0xe5, 0x5d, 0x6b, 0x1b, 0x6c, 0x10, 0xa9, + 0x7a, 0xa2, 0xa1, 0xee, 0x18, 0xb5, 0x3e, 0x8d, 0xac, 0xee, 0xd9, 0x20, 0x2e, 0x16, 0x02, 0xdd, + 0xa0, 0x4f, 0x63, 0xaa, 0x7a, 0xaa, 0x88, 0x2b, 0xd1, 0xf3, 0xc7, 0x7e, 0x2f, 0x48, 0xa7, 0x52, + 0xb8, 0x75, 0x19, 0xdb, 0x1e, 0x46, 0x3d, 0x7f, 0xd8, 0x3d, 0xf6, 0x87, 0x7e, 0xd8, 0xe3, 0xd2, + 0x7f, 0xb3, 0x41, 0x74, 0xd1, 0xe4, 0x90, 0x14, 0x99, 0x70, 0xe3, 0x72, 0x28, 0xba, 0x7a, 0xbd, + 0x68, 0x34, 0x0a, 0x52, 0xf4, 0xec, 0xc8, 0xea, 0xcf, 0x78, 0x06, 0x42, 0x33, 0x11, 0xa5, 0x73, + 0xb1, 0x7a, 0x75, 0xd1, 0x9b, 0x05, 0x62, 0x2b, 0xe8, 0x3a, 0xa0, 0x42, 0x7a, 0x7a, 0xde, 0x06, + 0xd1, 0x4a, 0x86, 0xe0, 0x3e, 0x4c, 0xc2, 0x84, 0xa7, 0xe9, 0x90, 0xf7, 0xf5, 0x80, 0x1a, 0x44, + 0x56, 0xac, 0x60, 0x77, 0x60, 0x45, 0x38, 0x9b, 0x89, 0x9f, 0x46, 0xc9, 0x69, 0x90, 0x74, 0x13, + 0x74, 0xdb, 0x9a, 0x44, 0x5f, 0x56, 0xc5, 0xde, 0x83, 0x8d, 0x1c, 0x1c, 0xf3, 0x1e, 0x0f, 0xce, + 0x78, 0xbf, 0xbd, 0x40, 0x5f, 0x5d, 0x54, 0xcd, 0xae, 0x43, 0x03, 0x7d, 0xec, 0xc9, 0xb8, 0xef, + 0xa3, 0x1d, 0x5e, 0xa4, 0x7d, 0x30, 0x21, 0xf6, 0x0e, 0x2c, 0x8c, 0xb9, 0x30, 0x96, 0xa7, 0xe9, + 0xb0, 0x97, 0xb4, 0x97, 0xc8, 0x92, 0x35, 0xa4, 0x30, 0x21, 0xe7, 0x7a, 0x36, 0x05, 0x32, 0x65, + 0x2f, 0x21, 0x67, 0xcb, 0x9f, 0xb6, 0x5b, 0xc4, 0x6e, 0x19, 0x40, 0x32, 0x12, 0x07, 0x67, 0x7e, + 0xca, 0xdb, 0xcb, 0xc4, 0x5b, 0xaa, 0xe8, 0xfe, 0x89, 0x03, 0x2b, 0x07, 0x41, 0x92, 0x4a, 0x26, + 0xd4, 0xea, 0xf8, 0x75, 0x68, 0x08, 0xf6, 0xeb, 0x46, 0xe1, 0x70, 0x2a, 0x39, 0x12, 0x04, 0xf4, + 0x28, 0x1c, 0x4e, 0xd9, 0x27, 0x60, 0x21, 0x08, 0x4d, 0x12, 0x21, 0xc3, 0x4d, 0x05, 0x12, 0xd1, + 0xeb, 0xd0, 0x18, 0x4f, 0x8e, 0x87, 0x41, 0x4f, 0x90, 0xcc, 0x88, 0x56, 0x04, 0x44, 0x04, 0xe8, + 0x24, 0x89, 0x91, 0x08, 0x8a, 0x2a, 0x51, 0x34, 0x24, 0x86, 0x24, 0xee, 0x5d, 0x58, 0xb5, 0x07, + 0x28, 0x95, 0xd5, 0x26, 0xcc, 0x4b, 0xde, 0x4e, 0xda, 0x0d, 0x5a, 0x9f, 0x45, 0xb9, 0x3e, 0x92, + 0xd4, 0xd3, 0xf5, 0xee, 0x0f, 0xaa, 0xb0, 0x22, 0xd1, 0x9d, 0x61, 0x94, 0xf0, 0xa3, 0xc9, 0x68, + 0xe4, 0xc7, 0x25, 0x42, 0xe3, 0x5c, 0x22, 0x34, 0x15, 0x5b, 0x68, 0x90, 0x95, 0x4f, 0xfd, 0x20, + 0x14, 0x1e, 0x9e, 0x90, 0x38, 0x03, 0x61, 0x37, 0x61, 0xa9, 0x37, 0x8c, 0x12, 0xe1, 0xf5, 0x98, + 0xc7, 0xa7, 0x3c, 0x5c, 0x14, 0xf2, 0x5a, 0x99, 0x90, 0x9b, 0x42, 0x3a, 0x9b, 0x13, 0x52, 0x17, + 0x9a, 0xd8, 0x28, 0x57, 0x3a, 0x67, 0x4e, 0x78, 0x61, 0x26, 0x86, 0xe3, 0xc9, 0x8b, 0x84, 0x90, + 0xbf, 0xa5, 0x32, 0x81, 0xc0, 0xd3, 0x19, 0xea, 0x34, 0x83, 0xba, 0x2e, 0x05, 0xa2, 0x58, 0xc5, + 0xee, 0x01, 0x88, 0xbe, 0xc8, 0x8c, 0x03, 0x99, 0xf1, 0xb7, 0xec, 0x1d, 0x31, 0xd7, 0xfe, 0x16, + 0x16, 0x26, 0x31, 0x27, 0x43, 0x6e, 0x7c, 0xe9, 0xfe, 0xb6, 0x03, 0x0d, 0xa3, 0x8e, 0xad, 0xc1, + 0xf2, 0xce, 0xa3, 0x47, 0x87, 0x7b, 0xde, 0xf6, 0xe3, 0x07, 0x5f, 0xde, 0xeb, 0xee, 0x1c, 0x3c, + 0x3a, 0xda, 0x6b, 0x5d, 0x41, 0xf8, 0xe0, 0xd1, 0xce, 0xf6, 0x41, 0xf7, 0xde, 0x23, 0x6f, 0x47, + 0xc1, 0x0e, 0x1a, 0x79, 0x6f, 0xef, 0xc3, 0x47, 0x8f, 0xf7, 0x2c, 0xbc, 0xc2, 0x5a, 0xd0, 0xbc, + 0xeb, 0xed, 0x6d, 0xef, 0xec, 0x4b, 0x64, 0x86, 0xad, 0x42, 0xeb, 0xde, 0x47, 0x0f, 0x77, 0x1f, + 0x3c, 0xbc, 0xdf, 0xdd, 0xd9, 0x7e, 0xb8, 0xb3, 0x77, 0xb0, 0xb7, 0xdb, 0xaa, 0xb2, 0x05, 0xa8, + 0x6f, 0xdf, 0xdd, 0x7e, 0xb8, 0xfb, 0xe8, 0xe1, 0xde, 0x6e, 0xab, 0xe6, 0xfe, 0xa3, 0x03, 0x6b, + 0x34, 0xea, 0x7e, 0x5e, 0x40, 0xae, 0x43, 0xa3, 0x17, 0x45, 0x63, 0x8e, 0xfa, 0x5c, 0xab, 0x6c, + 0x13, 0x42, 0xe6, 0x17, 0x0a, 0xf2, 0x24, 0x8a, 0x7b, 0x5c, 0xca, 0x07, 0x10, 0x74, 0x0f, 0x11, + 0x64, 0x7e, 0xb9, 0xbd, 0x82, 0x42, 0x88, 0x47, 0x43, 0x60, 0x82, 0x64, 0x1d, 0x66, 0x8f, 0x63, + 0xee, 0xf7, 0x4e, 0xa5, 0x64, 0xc8, 0x12, 0xfb, 0x64, 0xe6, 0xa0, 0xf7, 0x70, 0xf5, 0x87, 0xbc, + 0x4f, 0x1c, 0x33, 0xef, 0x2d, 0x49, 0x7c, 0x47, 0xc2, 0xa8, 0x19, 0xfc, 0x63, 0x3f, 0xec, 0x47, + 0x21, 0xef, 0x13, 0xd3, 0xcc, 0x7b, 0x19, 0xe0, 0x1e, 0xc2, 0x7a, 0x7e, 0x7e, 0x52, 0xbe, 0xde, + 0x35, 0xe4, 0x4b, 0x78, 0xd2, 0x9d, 0x8b, 0x77, 0xd3, 0x90, 0xb5, 0x7f, 0x75, 0xa0, 0x8a, 0xc6, + 0xf6, 0x62, 0xc3, 0x6c, 0xfa, 0x4f, 0x33, 0x96, 0xff, 0x44, 0xa1, 0x06, 0x3c, 0x81, 0x08, 0xf5, + 0x2b, 0x4c, 0x94, 0x81, 0x64, 0xf5, 0x31, 0xef, 0x9d, 0xd1, 0x8c, 0x75, 0x3d, 0x22, 0x28, 0x20, + 0xe8, 0xa6, 0xd2, 0xd7, 0x52, 0x40, 0x54, 0x59, 0xd5, 0xd1, 0x97, 0x73, 0x59, 0x1d, 0x7d, 0xd7, + 0x86, 0xb9, 0x20, 0x3c, 0x8e, 0x26, 0x61, 0x9f, 0x04, 0x62, 0xde, 0x53, 0x45, 0x5c, 0xbe, 0x31, + 0x09, 0x6a, 0x30, 0x52, 0xec, 0x9f, 0x01, 0x2e, 0xc3, 0x63, 0x4c, 0x42, 0xce, 0x85, 0xf6, 0x19, + 0xdf, 0x85, 0x65, 0x03, 0x93, 0xab, 0xf9, 0x06, 0xd4, 0xc6, 0x08, 0xc8, 0xa5, 0x54, 0xaa, 0x9c, + 0xbc, 0x12, 0x51, 0xe3, 0xb6, 0x60, 0xf1, 0x3e, 0x4f, 0x1f, 0x84, 0x27, 0x91, 0x6a, 0xe9, 0xc7, + 0x33, 0xb0, 0xa4, 0x21, 0xd9, 0xd0, 0x4d, 0x58, 0x0a, 0xfa, 0x3c, 0x4c, 0x83, 0x74, 0xda, 0xb5, + 0x4e, 0x4b, 0x79, 0x18, 0xbd, 0x39, 0x7f, 0x18, 0xf8, 0x89, 0xf4, 0x17, 0x44, 0x81, 0x6d, 0xc1, + 0x2a, 0x9a, 0x1a, 0x65, 0x3d, 0xf4, 0x16, 0x8b, 0x43, 0x5b, 0x69, 0x1d, 0x2a, 0x03, 0xc4, 0xa5, + 0xb6, 0xd7, 0x9f, 0x08, 0xaf, 0xa6, 0xac, 0x0a, 0x57, 0x4d, 0xb4, 0x84, 0x53, 0xae, 0x09, 0x73, + 0xa4, 0x81, 0x42, 0xc0, 0x68, 0x56, 0xa8, 0xaa, 0x7c, 0xc0, 0xc8, 0x08, 0x3a, 0xcd, 0x17, 0x82, + 0x4e, 0xa8, 0xca, 0xa6, 0x61, 0x8f, 0xf7, 0xbb, 0x69, 0xd4, 0x25, 0x95, 0x4b, 0xbb, 0x33, 0xef, + 0xe5, 0x61, 0x0a, 0x8f, 0xf1, 0x24, 0x0d, 0x79, 0x4a, 0x5a, 0x69, 0xde, 0x53, 0x45, 0x94, 0x2e, + 0x22, 0x11, 0x06, 0xa4, 0xee, 0xc9, 0x12, 0xba, 0xa5, 0x93, 0x38, 0x48, 0xda, 0x4d, 0x42, 0xe9, + 0x37, 0xfb, 0x34, 0xac, 0x1d, 0xf3, 0x24, 0xed, 0x9e, 0x72, 0xbf, 0xcf, 0x63, 0xda, 0x7d, 0x11, + 0xcb, 0x12, 0xd6, 0xbe, 0xbc, 0x12, 0xfb, 0x3e, 0xe3, 0x71, 0x12, 0x44, 0x21, 0xd9, 0xf9, 0xba, + 0xa7, 0x8a, 0xee, 0x37, 0xc9, 0x7b, 0xd6, 0x51, 0xb6, 0x8f, 0xc8, 0xf4, 0xb3, 0x57, 0xa0, 0x2e, + 0xe6, 0x98, 0x9c, 0xfa, 0xd2, 0xa1, 0x9f, 0x27, 0xe0, 0xe8, 0xd4, 0x47, 0x7d, 0x61, 0x2d, 0x9b, + 0x08, 0x5b, 0x36, 0x08, 0xdb, 0x17, 0xab, 0xf6, 0x26, 0x2c, 0xaa, 0xf8, 0x5d, 0xd2, 0x1d, 0xf2, + 0x93, 0x54, 0x1d, 0xc6, 0xc3, 0xc9, 0x08, 0xbb, 0x4b, 0x0e, 0xf8, 0x49, 0xea, 0x3e, 0x84, 0x65, + 0x29, 0xc3, 0x8f, 0xc6, 0x5c, 0x75, 0xfd, 0xd9, 0x32, 0x5b, 0xd8, 0xd8, 0x5a, 0xb1, 0x85, 0x9e, + 0x22, 0x0a, 0x39, 0x03, 0xe9, 0x7a, 0xc0, 0x4c, 0x9d, 0x20, 0x1b, 0x94, 0x06, 0x49, 0x1d, 0xf9, + 0xe5, 0x74, 0x2c, 0x0c, 0xd7, 0x27, 0x99, 0xf4, 0x7a, 0xa8, 0x09, 0x84, 0x7e, 0x54, 0x45, 0xf7, + 0xfb, 0x0e, 0xac, 0x50, 0x6b, 0xca, 0x9a, 0xeb, 0x73, 0xe2, 0xcb, 0x0f, 0xb3, 0xd9, 0x33, 0xc3, + 0x20, 0xab, 0x50, 0x33, 0x35, 0xb1, 0x28, 0xfc, 0xe4, 0x27, 0xdf, 0x6a, 0xe1, 0xe4, 0xfb, 0x63, + 0x07, 0x96, 0x85, 0x32, 0x4c, 0xfd, 0x74, 0x92, 0xc8, 0xe9, 0xff, 0x1f, 0x58, 0x10, 0x56, 0x4d, + 0x8a, 0x93, 0x1c, 0xe8, 0xaa, 0x96, 0x7c, 0x42, 0x05, 0xf1, 0xfe, 0x15, 0xcf, 0x26, 0x66, 0x9f, + 0x87, 0xa6, 0x19, 0x84, 0xa5, 0x31, 0x37, 0xb6, 0xae, 0xaa, 0x59, 0x16, 0x38, 0x67, 0xff, 0x8a, + 0x67, 0x7d, 0xc0, 0x3e, 0x20, 0xd7, 0x24, 0xec, 0x52, 0xb3, 0x32, 0x8c, 0x75, 0xb5, 0x44, 0x81, + 0xeb, 0xcf, 0x0d, 0xf2, 0xbb, 0xf3, 0x30, 0x2b, 0x7c, 0x51, 0xf7, 0x3e, 0x2c, 0x58, 0x23, 0xb5, + 0x4e, 0xf4, 0x4d, 0x71, 0xa2, 0x2f, 0x04, 0x80, 0x2a, 0xc5, 0x00, 0x90, 0xfb, 0xad, 0x19, 0x60, + 0xc8, 0x6d, 0xb9, 0xed, 0x44, 0x67, 0x38, 0xea, 0x5b, 0x47, 0x9b, 0xa6, 0x67, 0x42, 0xec, 0x16, + 0x30, 0xa3, 0xa8, 0x62, 0x64, 0xc2, 0x6e, 0x94, 0xd4, 0xa0, 0x82, 0x93, 0x66, 0x57, 0x1a, 0x48, + 0x79, 0x88, 0x13, 0xfb, 0x56, 0x5a, 0x87, 0xa6, 0x61, 0x3c, 0x49, 0x4e, 0xd1, 0x59, 0x57, 0x87, + 0x1f, 0x55, 0xce, 0x33, 0xc8, 0xec, 0xa5, 0x0c, 0x32, 0x97, 0x67, 0x10, 0xd3, 0xfd, 0x9e, 0xb7, + 0xdc, 0x6f, 0x74, 0xfb, 0x46, 0xe8, 0x2c, 0xa6, 0xc3, 0x5e, 0x77, 0x84, 0xbd, 0xcb, 0xb3, 0x8e, + 0x05, 0xb2, 0x4d, 0x68, 0x49, 0x47, 0x21, 0xf3, 0xf1, 0x81, 0xd6, 0xb8, 0x80, 0xa3, 0xe6, 0xc5, + 0x8f, 0x49, 0x03, 0xd0, 0x79, 0xa7, 0xe6, 0x65, 0x80, 0xfb, 0x23, 0x07, 0x5a, 0xb8, 0x0b, 0x16, + 0xa7, 0xbe, 0x0f, 0x24, 0x28, 0x2f, 0xc9, 0xa8, 0x16, 0xed, 0xcf, 0xce, 0xa7, 0xef, 0x41, 0x9d, + 0x1a, 0x8c, 0xc6, 0x3c, 0x94, 0x6c, 0xda, 0xb6, 0xd9, 0x34, 0xd3, 0x51, 0xfb, 0x57, 0xbc, 0x8c, + 0xd8, 0x60, 0xd2, 0xbf, 0x77, 0xa0, 0x21, 0x87, 0xf9, 0x53, 0x9f, 0xea, 0x3b, 0x30, 0x8f, 0xfc, + 0x6a, 0x1c, 0x9d, 0x75, 0x19, 0x6d, 0xcd, 0xc8, 0x4f, 0x27, 0x31, 0x1a, 0x57, 0xeb, 0x44, 0x9f, + 0x87, 0xd1, 0x52, 0x92, 0x3a, 0x4e, 0xba, 0x69, 0x30, 0xec, 0xaa, 0x5a, 0x79, 0x23, 0x52, 0x56, + 0x85, 0x5a, 0x29, 0x49, 0xfd, 0x01, 0x97, 0x46, 0x50, 0x14, 0xdc, 0x36, 0xac, 0xcb, 0x09, 0xe5, + 0xfc, 0x4e, 0xf7, 0xaf, 0x9a, 0xb0, 0x51, 0xa8, 0xd2, 0x57, 0x8a, 0xf2, 0xa8, 0x3a, 0x0c, 0x46, + 0xc7, 0x91, 0x76, 0xda, 0x1d, 0xf3, 0x14, 0x6b, 0x55, 0xb1, 0x01, 0xac, 0x29, 0x6b, 0x8f, 0x6b, + 0x9a, 0xd9, 0xf6, 0x0a, 0xb9, 0x29, 0xef, 0xd8, 0x3c, 0x90, 0xef, 0x50, 0xe1, 0xa6, 0x5c, 0x97, + 0xb7, 0xc7, 0x4e, 0xa1, 0xad, 0xdd, 0x0a, 0x69, 0x00, 0x0c, 0xd7, 0x03, 0xfb, 0x7a, 0xfb, 0x92, + 0xbe, 0x2c, 0x37, 0xd5, 0xbb, 0xb0, 0x35, 0x36, 0x85, 0x6b, 0xaa, 0x8e, 0x34, 0x7c, 0xb1, 0xbf, + 0xea, 0x4b, 0xcd, 0x8d, 0x1c, 0x70, 0xbb, 0xd3, 0x4b, 0x1a, 0x66, 0x5f, 0x87, 0xf5, 0x73, 0x3f, + 0x48, 0xd5, 0xb0, 0x0c, 0x57, 0xa9, 0x46, 0x5d, 0x6e, 0x5d, 0xd2, 0xe5, 0x13, 0xf1, 0xb1, 0x65, + 0xf6, 0x2e, 0x68, 0xb1, 0xf3, 0xb7, 0x0e, 0x2c, 0xda, 0xed, 0x20, 0x9b, 0x4a, 0x75, 0xa0, 0xd4, + 0xa2, 0x72, 0x0d, 0x73, 0x70, 0xf1, 0xdc, 0x5b, 0x29, 0x3b, 0xf7, 0x9a, 0xa7, 0xcd, 0x99, 0xcb, + 0x42, 0x42, 0xd5, 0x97, 0x0b, 0x09, 0xd5, 0xca, 0x42, 0x42, 0x9d, 0xff, 0x74, 0x80, 0x15, 0x79, + 0x89, 0xdd, 0x17, 0x07, 0xef, 0x90, 0x0f, 0xa5, 0x4e, 0xfa, 0xdf, 0x2f, 0xc7, 0x8f, 0x6a, 0xed, + 0xd4, 0xd7, 0x28, 0x18, 0xa6, 0xd2, 0x31, 0x1d, 0xa8, 0x05, 0xaf, 0xac, 0x2a, 0x17, 0xa4, 0xaa, + 0x5e, 0x1e, 0xa4, 0xaa, 0x5d, 0x1e, 0xa4, 0x9a, 0xcd, 0x07, 0xa9, 0x3a, 0xbf, 0xe9, 0xc0, 0x4a, + 0xc9, 0xa6, 0xff, 0xfc, 0x26, 0x8e, 0xdb, 0x64, 0xe9, 0x82, 0x8a, 0xdc, 0x26, 0x13, 0xec, 0xfc, + 0x2a, 0x2c, 0x58, 0x8c, 0xfe, 0xf3, 0xeb, 0x3f, 0xef, 0x03, 0x0a, 0x3e, 0xb3, 0xb0, 0xce, 0xbf, + 0x55, 0x80, 0x15, 0x85, 0xed, 0x7f, 0x74, 0x0c, 0xc5, 0x75, 0x9a, 0x29, 0x59, 0xa7, 0x5f, 0xa8, + 0x1d, 0x78, 0x1b, 0x96, 0x65, 0xfe, 0x81, 0x11, 0x6e, 0x11, 0x1c, 0x53, 0xac, 0x40, 0x2f, 0xd8, + 0x8e, 0x10, 0xce, 0x5b, 0xf7, 0xd6, 0x86, 0x31, 0xcc, 0x05, 0x0a, 0xdd, 0x75, 0x58, 0x15, 0xf9, + 0x0c, 0x77, 0x45, 0x53, 0xca, 0xae, 0xfc, 0xb1, 0x03, 0x6b, 0xb9, 0x8a, 0xec, 0x96, 0x55, 0x98, + 0x0e, 0xdb, 0x9e, 0xd8, 0x20, 0x8e, 0x5f, 0xca, 0x91, 0x31, 0x7e, 0xc1, 0x6d, 0xc5, 0x0a, 0x5c, + 0x9f, 0x49, 0x58, 0xa4, 0x17, 0xab, 0x5e, 0x56, 0xe5, 0x6e, 0x88, 0xac, 0x8b, 0x90, 0x0f, 0x73, + 0x03, 0x3f, 0x11, 0x79, 0x12, 0x66, 0x45, 0x76, 0x4d, 0x63, 0x0f, 0x59, 0x15, 0xd1, 0x47, 0xb4, + 0xcc, 0x94, 0x3d, 0xde, 0xd2, 0x3a, 0xf7, 0x07, 0x0e, 0xb0, 0x2f, 0x4d, 0x78, 0x3c, 0xa5, 0xdb, + 0x56, 0x1d, 0x07, 0xda, 0xc8, 0x47, 0x39, 0x66, 0xc7, 0x93, 0xe3, 0x2f, 0xf2, 0xa9, 0xba, 0x93, + 0xaf, 0x64, 0x77, 0xf2, 0xaf, 0x01, 0xe0, 0xe1, 0x4c, 0x5f, 0xe1, 0x92, 0x6f, 0x16, 0x4e, 0x46, + 0xa2, 0xc1, 0xd2, 0x6b, 0xf3, 0xea, 0xe5, 0xd7, 0xe6, 0xb5, 0xcb, 0xae, 0xcd, 0x3f, 0x80, 0x15, + 0x6b, 0xdc, 0x7a, 0x5b, 0xd5, 0x65, 0xb2, 0xf3, 0x82, 0xcb, 0xe4, 0x7f, 0x77, 0x60, 0x66, 0x3f, + 0x1a, 0x9b, 0x31, 0x50, 0xc7, 0x8e, 0x81, 0x4a, 0x5b, 0xd2, 0xd5, 0xa6, 0x42, 0xaa, 0x18, 0x0b, + 0x64, 0x9b, 0xb0, 0xe8, 0x8f, 0x52, 0x3c, 0x94, 0x9f, 0x44, 0xf1, 0xb9, 0x1f, 0xf7, 0xc5, 0x5e, + 0xdf, 0xad, 0xb4, 0x1d, 0x2f, 0x57, 0xc3, 0x56, 0x61, 0x46, 0x2b, 0x5d, 0x22, 0xc0, 0x22, 0x3a, + 0x6e, 0x74, 0x7f, 0x32, 0x95, 0xf1, 0x04, 0x59, 0x42, 0x56, 0xb2, 0xbf, 0x17, 0x8e, 0xb4, 0x10, + 0x9d, 0xb2, 0x2a, 0xb4, 0x6b, 0xb8, 0x7c, 0x44, 0x26, 0x03, 0x41, 0xaa, 0xec, 0xfe, 0x8b, 0x03, + 0x35, 0x5a, 0x01, 0x14, 0x76, 0xc1, 0xe1, 0x3a, 0xd8, 0x49, 0x33, 0x5f, 0xf0, 0xf2, 0x30, 0x73, + 0xad, 0xdc, 0x95, 0x8a, 0x1e, 0xb6, 0x99, 0xbf, 0x72, 0x1d, 0xea, 0xa2, 0xa4, 0xf3, 0x34, 0x88, + 0x24, 0x03, 0xd9, 0x35, 0xa8, 0x9e, 0x46, 0x63, 0xe5, 0x9d, 0x80, 0x8a, 0xf5, 0x47, 0x63, 0x8f, + 0xf0, 0x6c, 0x3c, 0xd8, 0x9e, 0x18, 0xbc, 0xb0, 0x39, 0x79, 0x18, 0xad, 0xae, 0x6e, 0xd6, 0x5c, + 0x8c, 0x1c, 0xea, 0x6e, 0xc2, 0xd2, 0xc3, 0xa8, 0xcf, 0x8d, 0x88, 0xd3, 0x85, 0xdc, 0xec, 0xfe, + 0x9a, 0x03, 0xf3, 0x8a, 0x98, 0xdd, 0x84, 0x2a, 0xba, 0x12, 0xb9, 0x83, 0x82, 0xbe, 0xe3, 0x43, + 0x3a, 0x8f, 0x28, 0x50, 0xf7, 0x52, 0x3c, 0x22, 0x73, 0x2b, 0x55, 0x34, 0x22, 0xf3, 0x9a, 0xf4, + 0x70, 0x73, 0xce, 0x46, 0x0e, 0x75, 0xff, 0xdc, 0x81, 0x05, 0xab, 0x0f, 0x3c, 0x3c, 0x0e, 0xfd, + 0x24, 0x95, 0xf7, 0x26, 0x72, 0x7b, 0x4c, 0xc8, 0x8c, 0x41, 0x56, 0xec, 0x18, 0xa4, 0x8e, 0x8e, + 0xcd, 0x98, 0xd1, 0xb1, 0x3b, 0x50, 0xcf, 0x32, 0x8c, 0xaa, 0x96, 0x4e, 0xc5, 0x1e, 0xd5, 0xed, + 0x65, 0x46, 0x84, 0xed, 0xf4, 0xa2, 0x61, 0x14, 0xcb, 0x80, 0xbd, 0x28, 0xb8, 0x1f, 0x40, 0xc3, + 0xa0, 0xc7, 0x61, 0x84, 0x3c, 0x3d, 0x8f, 0xe2, 0xa7, 0x2a, 0x14, 0x2a, 0x8b, 0xfa, 0x92, 0xbe, + 0x92, 0x5d, 0xd2, 0xbb, 0x7f, 0xe3, 0xc0, 0x02, 0xf2, 0x60, 0x10, 0x0e, 0x0e, 0xa3, 0x61, 0xd0, + 0x9b, 0xd2, 0xde, 0x2b, 0x76, 0x93, 0x9a, 0x41, 0xf1, 0xa2, 0x0d, 0x23, 0x6f, 0xab, 0xb3, 0xa3, + 0x14, 0x44, 0x5d, 0x46, 0x49, 0x45, 0x3e, 0x3f, 0xf6, 0x13, 0xc9, 0xfc, 0xd2, 0xc8, 0x59, 0x20, + 0xca, 0x13, 0x02, 0xb1, 0x9f, 0xf2, 0xee, 0x28, 0x18, 0x0e, 0x03, 0x41, 0x2b, 0x5c, 0xa0, 0xb2, + 0x2a, 0xec, 0xb3, 0x1f, 0x24, 0xfe, 0x71, 0x16, 0x84, 0xd6, 0x65, 0xf7, 0x87, 0x15, 0x68, 0x48, + 0xf5, 0xbc, 0xd7, 0x1f, 0x70, 0x79, 0x63, 0x42, 0x4e, 0xa6, 0x56, 0x25, 0x06, 0xa2, 0xea, 0x2d, + 0xb7, 0xd4, 0x40, 0xf2, 0x5b, 0x3e, 0x53, 0xdc, 0xf2, 0x57, 0xa1, 0x8e, 0xac, 0xf7, 0x0e, 0xf9, + 0xbf, 0xe2, 0xb6, 0x25, 0x03, 0x54, 0xed, 0x16, 0xd5, 0xd6, 0xb2, 0x5a, 0x02, 0x5e, 0x78, 0xbf, + 0xf2, 0x1e, 0x34, 0x65, 0x33, 0xb4, 0x27, 0xa4, 0x39, 0x32, 0xe6, 0xb7, 0xf6, 0xcb, 0xb3, 0x28, + 0xd5, 0x97, 0x5b, 0xea, 0xcb, 0xf9, 0xcb, 0xbe, 0x54, 0x94, 0x74, 0x17, 0x2e, 0xd6, 0xe6, 0x7e, + 0xec, 0x8f, 0x4f, 0x95, 0xc9, 0xeb, 0xeb, 0x04, 0x1f, 0x82, 0xd9, 0x26, 0xd4, 0xf0, 0x33, 0xa5, + 0xc9, 0xcb, 0x05, 0x52, 0x90, 0xb0, 0x9b, 0x50, 0xe3, 0xfd, 0x01, 0x57, 0x27, 0x3c, 0x66, 0x9f, + 0xb5, 0x71, 0x8f, 0x3c, 0x41, 0x80, 0xea, 0x01, 0xd1, 0x9c, 0x7a, 0xb0, 0xad, 0xc0, 0x2c, 0x16, + 0x1f, 0xf4, 0xdd, 0x55, 0x60, 0x0f, 0x05, 0x47, 0x9b, 0xf1, 0xeb, 0x6f, 0xcd, 0x40, 0xc3, 0x80, + 0x51, 0xd2, 0x07, 0x38, 0xe0, 0x6e, 0x3f, 0xf0, 0x47, 0x3c, 0xe5, 0xb1, 0xe4, 0xe2, 0x1c, 0x8a, + 0x74, 0xfe, 0xd9, 0xa0, 0x1b, 0x4d, 0xd2, 0x6e, 0x9f, 0x0f, 0x62, 0x2e, 0x0c, 0x33, 0x1a, 0x0a, + 0x0b, 0x45, 0xba, 0x91, 0xff, 0xcc, 0xa4, 0x13, 0xfc, 0x90, 0x43, 0x55, 0x34, 0x5a, 0xac, 0x51, + 0x35, 0x8b, 0x46, 0x8b, 0x15, 0xc9, 0xeb, 0xa8, 0x5a, 0x89, 0x8e, 0x7a, 0x17, 0xd6, 0x85, 0x36, + 0x92, 0x72, 0xdb, 0xcd, 0xb1, 0xc9, 0x05, 0xb5, 0x6c, 0x13, 0x5a, 0x38, 0x66, 0xc5, 0xe0, 0x49, + 0xf0, 0x4d, 0x11, 0x1f, 0x72, 0xbc, 0x02, 0x8e, 0xb4, 0x14, 0xa8, 0x31, 0x69, 0xc5, 0xed, 0x5c, + 0x01, 0x27, 0x5a, 0xff, 0x99, 0x4d, 0x5b, 0x97, 0xb4, 0x39, 0xdc, 0x5d, 0x80, 0xc6, 0x51, 0x1a, + 0x8d, 0xd5, 0xa6, 0x2c, 0x42, 0x53, 0x14, 0x65, 0x2e, 0xc4, 0x2b, 0x70, 0x95, 0xb8, 0xe8, 0x71, + 0x34, 0x8e, 0x86, 0xd1, 0x60, 0x7a, 0x34, 0x39, 0x4e, 0x7a, 0x71, 0x30, 0xc6, 0xd3, 0x90, 0xfb, + 0x77, 0x0e, 0xac, 0x58, 0xb5, 0x32, 0x64, 0xf4, 0x69, 0xc1, 0xd2, 0xfa, 0x12, 0x5b, 0x30, 0xde, + 0xb2, 0xa1, 0x2a, 0x05, 0xa1, 0x08, 0xe5, 0x7d, 0x24, 0xef, 0xb5, 0xb7, 0x61, 0x49, 0x8d, 0x4c, + 0x7d, 0x28, 0xb8, 0xb0, 0x5d, 0xe4, 0x42, 0xf9, 0xfd, 0xa2, 0xfc, 0x40, 0x35, 0xf1, 0x7f, 0xe5, + 0x2d, 0x67, 0x9f, 0xe6, 0xa8, 0x62, 0x07, 0xfa, 0x66, 0xca, 0x3c, 0x41, 0xa8, 0x11, 0xf4, 0x34, + 0x98, 0xb8, 0xbf, 0xe3, 0x00, 0x64, 0xa3, 0xa3, 0xbb, 0x31, 0xad, 0xee, 0x45, 0xe2, 0xb5, 0xa1, + 0xda, 0xdf, 0x80, 0xa6, 0xbe, 0x53, 0xc9, 0x2c, 0x48, 0x43, 0x61, 0xe8, 0xe4, 0xdd, 0x80, 0xa5, + 0xc1, 0x30, 0x3a, 0x26, 0xf3, 0x4b, 0xc9, 0x35, 0x89, 0xcc, 0x08, 0x59, 0x14, 0xf0, 0x3d, 0x89, + 0x66, 0xe6, 0xa6, 0x6a, 0x98, 0x1b, 0xf7, 0xdb, 0x15, 0x1d, 0x89, 0xcf, 0xe6, 0x7c, 0xa1, 0x94, + 0xb1, 0xad, 0x82, 0x72, 0xbc, 0x20, 0xf0, 0x4d, 0x51, 0xb2, 0xc3, 0x4b, 0x0f, 0xf1, 0x1f, 0xc0, + 0x62, 0x2c, 0xb4, 0x8f, 0x52, 0x4d, 0xd5, 0x17, 0xa8, 0xa6, 0x85, 0xd8, 0xb2, 0x49, 0x9f, 0x84, + 0x96, 0xdf, 0x3f, 0xe3, 0x71, 0x1a, 0xd0, 0x31, 0x8a, 0x1c, 0x02, 0xa1, 0x50, 0x97, 0x0c, 0x9c, + 0xec, 0xf4, 0x0d, 0x58, 0x92, 0x59, 0x38, 0x9a, 0x52, 0x66, 0x8e, 0x66, 0x30, 0x12, 0xba, 0x7f, + 0xa6, 0x82, 0xfe, 0xf6, 0x1e, 0x5e, 0xbc, 0x22, 0xe6, 0xec, 0x2a, 0xb9, 0xd9, 0x7d, 0x42, 0x06, + 0xe0, 0xfb, 0xea, 0xac, 0x36, 0x63, 0xdc, 0x88, 0xf7, 0xe5, 0x85, 0x89, 0xbd, 0xa4, 0xd5, 0x97, + 0x59, 0x52, 0xf7, 0x47, 0x0e, 0xcc, 0xed, 0x47, 0xe3, 0x7d, 0x99, 0x1b, 0x40, 0x82, 0xa0, 0x73, + 0xdc, 0x54, 0xf1, 0x05, 0x59, 0x03, 0xa5, 0x76, 0x78, 0x21, 0x6f, 0x87, 0xff, 0x1f, 0xbc, 0x42, + 0x91, 0x82, 0x38, 0x1a, 0x47, 0x31, 0x0a, 0xa3, 0x3f, 0x14, 0x46, 0x37, 0x0a, 0xd3, 0x53, 0xa5, + 0xc6, 0x5e, 0x44, 0x42, 0x47, 0x32, 0x3c, 0x4a, 0x08, 0x47, 0x59, 0xfa, 0x0d, 0x42, 0xbb, 0x15, + 0x2b, 0xdc, 0xcf, 0x42, 0x9d, 0x1c, 0x5f, 0x9a, 0xd6, 0xdb, 0x50, 0x3f, 0x8d, 0xc6, 0xdd, 0xd3, + 0x20, 0x4c, 0x95, 0x70, 0x2f, 0x66, 0x1e, 0xe9, 0x3e, 0x2d, 0x88, 0x26, 0x70, 0xff, 0xb0, 0x06, + 0x73, 0x0f, 0xc2, 0xb3, 0x28, 0xe8, 0xd1, 0xfd, 0xc0, 0x88, 0x8f, 0x22, 0x95, 0xf1, 0x87, 0xbf, + 0x71, 0x29, 0x28, 0xfb, 0x65, 0x9c, 0xca, 0x00, 0xbf, 0x2a, 0xa2, 0xb9, 0x8f, 0xb3, 0xac, 0x5c, + 0x21, 0x3a, 0x06, 0x82, 0x4e, 0x7f, 0x6c, 0x26, 0x30, 0xcb, 0x52, 0x96, 0x32, 0x59, 0x33, 0x52, + 0x26, 0xe9, 0x36, 0x49, 0xe4, 0x31, 0xc8, 0x8b, 0x6e, 0x55, 0xa4, 0x43, 0x4a, 0xcc, 0x45, 0x84, + 0x87, 0x1c, 0x87, 0x39, 0x79, 0x48, 0x31, 0x41, 0x74, 0x2e, 0xc4, 0x07, 0x82, 0x46, 0x28, 0x5f, + 0x13, 0x42, 0x47, 0x2c, 0x9f, 0x03, 0x5d, 0x17, 0x3c, 0x9f, 0x83, 0x51, 0x43, 0xf7, 0xb9, 0x56, + 0xa4, 0x62, 0x0e, 0x20, 0xb2, 0x8e, 0xf3, 0xb8, 0x71, 0xb4, 0x11, 0x09, 0x4a, 0xea, 0x68, 0x83, + 0x8c, 0xe2, 0x0f, 0x87, 0xc7, 0x7e, 0xef, 0x29, 0xa5, 0xb8, 0x53, 0x3e, 0x52, 0xdd, 0xb3, 0x41, + 0xca, 0x44, 0xc8, 0x76, 0x93, 0xee, 0x23, 0xab, 0x9e, 0x09, 0xb1, 0x2d, 0x68, 0xd0, 0x71, 0x4e, + 0xee, 0xe7, 0x22, 0xed, 0x67, 0xcb, 0x3c, 0xef, 0xd1, 0x8e, 0x9a, 0x44, 0xe6, 0x9d, 0xc5, 0x92, + 0x7d, 0x67, 0x21, 0x94, 0xa6, 0xbc, 0xea, 0x69, 0x51, 0x6f, 0x19, 0x80, 0xd6, 0x54, 0x2e, 0x98, + 0x20, 0x58, 0x26, 0x02, 0x0b, 0x63, 0xd7, 0x60, 0x1e, 0x0f, 0x21, 0x63, 0x3f, 0xe8, 0xb7, 0x99, + 0x3e, 0x0b, 0x69, 0x0c, 0xdb, 0x50, 0xbf, 0xe9, 0x4a, 0x66, 0x85, 0x56, 0xc5, 0xc2, 0x70, 0x6d, + 0x74, 0x99, 0x84, 0x68, 0x55, 0xec, 0xa8, 0x05, 0xba, 0x29, 0xb0, 0xed, 0x7e, 0x5f, 0xf2, 0xa6, + 0x3e, 0xfa, 0x66, 0x5c, 0xe5, 0x58, 0x5c, 0x55, 0xb2, 0xbb, 0x95, 0xf2, 0xdd, 0x7d, 0xe1, 0x1a, + 0xb8, 0x7b, 0xd0, 0x38, 0x34, 0xd2, 0xbc, 0x89, 0xc9, 0x55, 0x82, 0xb7, 0x14, 0x0c, 0x03, 0x31, + 0x86, 0x53, 0x31, 0x87, 0xe3, 0x7e, 0xcf, 0x01, 0x76, 0x10, 0x24, 0xa9, 0x1e, 0xbe, 0xe8, 0xdb, + 0x85, 0xa6, 0x0e, 0x50, 0x64, 0xb9, 0x59, 0x16, 0x86, 0x34, 0x34, 0x94, 0x6e, 0x74, 0x72, 0x92, + 0x70, 0x95, 0x49, 0x61, 0x61, 0xc8, 0xa1, 0xe8, 0xe3, 0xa0, 0xbf, 0x10, 0x88, 0x1e, 0x12, 0x99, + 0x51, 0x51, 0xc0, 0x51, 0xcf, 0xc6, 0xfc, 0x8c, 0xc7, 0x89, 0x16, 0x2d, 0x5d, 0xd6, 0x29, 0x64, + 0xf9, 0x55, 0xde, 0x84, 0x79, 0xdd, 0xae, 0xad, 0x42, 0x14, 0xa5, 0xae, 0x47, 0x55, 0x45, 0x3e, + 0xbc, 0x35, 0x68, 0xa1, 0x36, 0x8b, 0x15, 0xec, 0x16, 0xb0, 0x93, 0x20, 0xce, 0x93, 0xcf, 0x10, + 0x79, 0x49, 0x8d, 0xfb, 0x04, 0x56, 0x64, 0x97, 0xa6, 0x73, 0x63, 0x6f, 0xa2, 0x73, 0x19, 0x23, + 0x57, 0x8a, 0x8c, 0xec, 0xfe, 0xd0, 0x81, 0x39, 0xb9, 0xd3, 0xb4, 0x2d, 0xf9, 0x7c, 0xff, 0xba, + 0x67, 0x61, 0xe5, 0x99, 0xde, 0x45, 0xe5, 0x34, 0x53, 0xa6, 0x9c, 0x18, 0x54, 0xc7, 0x7e, 0x7a, + 0x4a, 0xa7, 0xd2, 0xba, 0x47, 0xbf, 0x59, 0x4b, 0x44, 0x4a, 0x84, 0x12, 0xa4, 0x28, 0x49, 0xd9, + 0x63, 0x07, 0x61, 0x6b, 0x0b, 0x38, 0x9e, 0x2e, 0x28, 0x51, 0x45, 0xe0, 0xfa, 0x86, 0x49, 0x26, + 0xdc, 0x65, 0x70, 0xb6, 0x9f, 0xb2, 0x89, 0xfc, 0x7e, 0x4a, 0x52, 0x4f, 0xd7, 0xbb, 0x1d, 0x68, + 0xef, 0xf2, 0x21, 0x4f, 0xf9, 0xf6, 0x70, 0x98, 0x6f, 0xff, 0x15, 0xb8, 0x5a, 0x52, 0x27, 0xbd, + 0xd1, 0x2f, 0xc1, 0xda, 0xb6, 0x48, 0x4e, 0xfa, 0x79, 0xdd, 0xfb, 0xbb, 0x6d, 0x58, 0xcf, 0x37, + 0x29, 0x3b, 0xbb, 0x07, 0xcb, 0xbb, 0xfc, 0x78, 0x32, 0x38, 0xe0, 0x67, 0x59, 0x47, 0x0c, 0xaa, + 0xc9, 0x69, 0x74, 0x2e, 0xc5, 0x8a, 0x7e, 0xb3, 0xd7, 0x00, 0x86, 0x48, 0xd3, 0x4d, 0xc6, 0xbc, + 0xa7, 0x12, 0xaa, 0x09, 0x39, 0x1a, 0xf3, 0x9e, 0xfb, 0x2e, 0x30, 0xb3, 0x1d, 0xb9, 0x5e, 0x68, + 0x4d, 0x26, 0xc7, 0xdd, 0x64, 0x9a, 0xa4, 0x7c, 0xa4, 0x32, 0xc5, 0x4d, 0xc8, 0xbd, 0x01, 0xcd, + 0x43, 0x7f, 0xea, 0xf1, 0x6f, 0xc8, 0xf7, 0x1d, 0x1b, 0x30, 0x37, 0xf6, 0xa7, 0xa8, 0x64, 0x74, + 0xf4, 0x85, 0xaa, 0xdd, 0xff, 0xa8, 0xc0, 0xac, 0xa0, 0xc4, 0x56, 0xfb, 0x3c, 0x49, 0x83, 0x50, + 0xdc, 0xb7, 0xca, 0x56, 0x0d, 0xa8, 0xc0, 0x88, 0x95, 0x12, 0x46, 0x94, 0x67, 0x1e, 0x95, 0x9c, + 0x2a, 0x39, 0xce, 0xc2, 0x50, 0x3c, 0xb2, 0x2c, 0x17, 0x71, 0xfc, 0xcf, 0x80, 0x5c, 0x38, 0x2e, + 0xb3, 0x59, 0x62, 0x7c, 0x4a, 0xc6, 0x24, 0xef, 0x99, 0x50, 0xa9, 0x65, 0x9c, 0x13, 0x2c, 0x5a, + 0xb0, 0x8c, 0x05, 0x0b, 0x38, 0xff, 0x12, 0x16, 0x50, 0x1c, 0x84, 0x5e, 0x64, 0x01, 0xe1, 0x25, + 0x2c, 0xa0, 0xcb, 0xa0, 0x75, 0x8f, 0x73, 0x8f, 0xa3, 0x6f, 0xa5, 0x78, 0xf7, 0x3b, 0x0e, 0xb4, + 0x24, 0x17, 0xe9, 0x3a, 0xf6, 0x86, 0xe5, 0x43, 0x96, 0xa6, 0x90, 0xbe, 0x09, 0x0b, 0xe4, 0xd9, + 0xe9, 0xb8, 0xa3, 0x0c, 0x92, 0x5a, 0x20, 0xce, 0x43, 0x5d, 0x0e, 0x8d, 0x82, 0xa1, 0xdc, 0x14, + 0x13, 0x52, 0xa1, 0xcb, 0xd8, 0x97, 0x89, 0x28, 0x8e, 0xa7, 0xcb, 0xee, 0x5f, 0x3a, 0xb0, 0x6c, + 0x0c, 0x58, 0x72, 0xe1, 0x07, 0xa0, 0xa4, 0x41, 0x84, 0x27, 0x85, 0xe4, 0x6e, 0xd8, 0x62, 0x93, + 0x7d, 0x66, 0x11, 0xd3, 0x66, 0xfa, 0x53, 0x1a, 0x60, 0x32, 0x19, 0x49, 0x15, 0x68, 0x42, 0xc8, + 0x48, 0xe7, 0x9c, 0x3f, 0xd5, 0x24, 0x42, 0x09, 0x5b, 0x18, 0x25, 0x39, 0xa0, 0x47, 0xaa, 0x89, + 0x84, 0x35, 0xb2, 0x41, 0xf7, 0x1f, 0x1c, 0x58, 0x11, 0x47, 0x0b, 0x79, 0x70, 0xd3, 0xf9, 0xfd, + 0xb3, 0xe2, 0x2c, 0x25, 0x24, 0x72, 0xff, 0x8a, 0x27, 0xcb, 0xec, 0x33, 0x2f, 0x79, 0x1c, 0xd2, + 0xc9, 0x2d, 0x17, 0xec, 0xc5, 0x4c, 0xd9, 0x5e, 0xbc, 0x60, 0xa5, 0xcb, 0xc2, 0x71, 0xb5, 0xd2, + 0x70, 0xdc, 0xdd, 0x39, 0xa8, 0x25, 0xbd, 0x68, 0xcc, 0xdd, 0x75, 0x58, 0xb5, 0x27, 0x27, 0x55, + 0xd0, 0x77, 0x1d, 0x68, 0xdf, 0x13, 0xc1, 0xe9, 0x20, 0x1c, 0xec, 0x07, 0x49, 0x1a, 0xc5, 0xfa, + 0x41, 0xd3, 0x35, 0x80, 0x24, 0xf5, 0xe3, 0x54, 0x24, 0x1f, 0xca, 0x60, 0x59, 0x86, 0xe0, 0x18, + 0x79, 0xd8, 0x17, 0xb5, 0x62, 0x6f, 0x74, 0xb9, 0xe0, 0x01, 0xc8, 0xc3, 0x8f, 0x65, 0x47, 0xdf, + 0x12, 0xd9, 0x62, 0x68, 0xe9, 0xf9, 0x19, 0xe9, 0x75, 0x71, 0xaa, 0xc8, 0xa1, 0xee, 0x5f, 0x38, + 0xb0, 0x94, 0x0d, 0x72, 0x0f, 0x41, 0x5b, 0x3b, 0x48, 0xe3, 0x99, 0x69, 0x07, 0x15, 0xc6, 0x0b, + 0xd0, 0x9a, 0xca, 0xb1, 0x19, 0x08, 0x49, 0xac, 0x2c, 0x45, 0x13, 0xe5, 0x9e, 0x98, 0x90, 0xc8, + 0xd3, 0x40, 0x3b, 0x2e, 0x7d, 0x12, 0x59, 0xa2, 0xdc, 0xd1, 0x51, 0x4a, 0x5f, 0xcd, 0x8a, 0x63, + 0x95, 0x2c, 0x2a, 0x63, 0x38, 0x47, 0x28, 0xfe, 0x74, 0x7f, 0xd7, 0x81, 0xab, 0x25, 0x8b, 0x2b, + 0x25, 0x63, 0x17, 0x96, 0x4f, 0x74, 0xa5, 0x5a, 0x00, 0x21, 0x1e, 0xeb, 0xea, 0x36, 0xc5, 0x9e, + 0xb4, 0x57, 0xfc, 0x40, 0x7b, 0x2e, 0x62, 0x49, 0xad, 0x04, 0xa8, 0x62, 0xc5, 0xd6, 0xef, 0xcd, + 0xc0, 0xa2, 0xb8, 0x65, 0x13, 0x4f, 0x8b, 0x79, 0xcc, 0x3e, 0x84, 0x39, 0xf9, 0x34, 0x9c, 0xad, + 0xc9, 0x6e, 0xed, 0xc7, 0xe8, 0x9d, 0xf5, 0x3c, 0x2c, 0x79, 0x67, 0xe5, 0x37, 0x7e, 0xf4, 0xcf, + 0xbf, 0x5f, 0x59, 0x60, 0x8d, 0xdb, 0x67, 0xef, 0xdc, 0x1e, 0xf0, 0x30, 0xc1, 0x36, 0x7e, 0x19, + 0x20, 0x7b, 0x34, 0xcd, 0xda, 0xda, 0xe3, 0xca, 0xbd, 0x06, 0xef, 0x5c, 0x2d, 0xa9, 0x91, 0xed, + 0x5e, 0xa5, 0x76, 0x57, 0xdc, 0x45, 0x6c, 0x37, 0x08, 0x83, 0x54, 0xbc, 0xa0, 0x7e, 0xdf, 0xd9, + 0x64, 0x7d, 0x68, 0x9a, 0x6f, 0xa2, 0x99, 0x0a, 0xbc, 0x94, 0xbc, 0xc8, 0xee, 0xbc, 0x52, 0x5a, + 0xa7, 0xa2, 0x4e, 0xd4, 0xc7, 0x9a, 0xdb, 0xc2, 0x3e, 0x26, 0x44, 0x91, 0xf5, 0x32, 0x84, 0x45, + 0xfb, 0xe9, 0x33, 0x7b, 0xd5, 0x10, 0xeb, 0xc2, 0xc3, 0xeb, 0xce, 0x6b, 0x17, 0xd4, 0xca, 0xbe, + 0x5e, 0xa3, 0xbe, 0x36, 0x5c, 0x86, 0x7d, 0xf5, 0x88, 0x46, 0x3d, 0xbc, 0x7e, 0xdf, 0xd9, 0xdc, + 0xfa, 0xde, 0xeb, 0x50, 0xd7, 0xa1, 0x52, 0xf6, 0x75, 0x58, 0xb0, 0xae, 0x41, 0x99, 0x9a, 0x46, + 0xd9, 0xad, 0x69, 0xe7, 0xd5, 0xf2, 0x4a, 0xd9, 0xf1, 0x35, 0xea, 0xb8, 0xcd, 0xd6, 0xb1, 0x63, + 0x79, 0x8f, 0x78, 0x9b, 0x2e, 0x7f, 0x45, 0x66, 0xea, 0x53, 0x31, 0xcf, 0xec, 0xea, 0xd2, 0x9a, + 0x67, 0xe1, 0xaa, 0xd3, 0x9a, 0x67, 0xf1, 0xbe, 0xd3, 0x7d, 0x95, 0xba, 0x5b, 0x67, 0xab, 0x66, + 0x77, 0x3a, 0x84, 0xc9, 0x29, 0x97, 0xd8, 0x7c, 0x19, 0xcd, 0x5e, 0xd3, 0x8c, 0x55, 0xf6, 0x62, + 0x5a, 0xb3, 0x48, 0xf1, 0xd9, 0xb4, 0xdb, 0xa6, 0xae, 0x18, 0xa3, 0xed, 0x33, 0x1f, 0x46, 0xb3, + 0xaf, 0x42, 0x5d, 0x3f, 0x03, 0x64, 0x1b, 0xc6, 0xdb, 0x4b, 0xf3, 0x6d, 0x62, 0xa7, 0x5d, 0xac, + 0x28, 0x63, 0x0c, 0xb3, 0x65, 0x64, 0x8c, 0x03, 0x58, 0x93, 0x1e, 0xfc, 0x31, 0xff, 0x49, 0x66, + 0x52, 0xf2, 0x9e, 0xfb, 0x8e, 0xc3, 0x3e, 0x80, 0x79, 0xf5, 0xba, 0x92, 0xad, 0x97, 0xbf, 0x12, + 0xed, 0x6c, 0x14, 0x70, 0xa9, 0x3d, 0xb6, 0x01, 0xb2, 0x97, 0x81, 0x5a, 0xce, 0x0a, 0xef, 0x15, + 0xf5, 0x22, 0x96, 0x3c, 0x23, 0x1c, 0xd0, 0x3b, 0x48, 0xfb, 0xe1, 0x21, 0x7b, 0x3d, 0xa3, 0x2f, + 0x7d, 0x92, 0xf8, 0x82, 0x06, 0xdd, 0x75, 0x5a, 0xbb, 0x16, 0x23, 0xc1, 0x0d, 0xf9, 0xb9, 0xca, + 0xaa, 0xdf, 0x85, 0x86, 0xf1, 0xda, 0x90, 0xa9, 0x16, 0x8a, 0x2f, 0x15, 0x3b, 0x9d, 0xb2, 0x2a, + 0x39, 0xdc, 0x2f, 0xc0, 0x82, 0xf5, 0x6c, 0x50, 0x4b, 0x46, 0xd9, 0xa3, 0x44, 0x2d, 0x19, 0xe5, + 0x2f, 0x0d, 0xbf, 0x02, 0x0d, 0xe3, 0x91, 0x1f, 0x33, 0xf2, 0x05, 0x73, 0xcf, 0xfb, 0xf4, 0x88, + 0xca, 0xde, 0x04, 0xae, 0xd2, 0x7c, 0x17, 0xdd, 0x3a, 0xce, 0x97, 0x52, 0xcb, 0x91, 0x49, 0xbe, + 0x0e, 0x8b, 0xf6, 0xb3, 0x3f, 0x2d, 0x55, 0xa5, 0x0f, 0x08, 0xb5, 0x54, 0x5d, 0xf0, 0x56, 0x50, + 0x32, 0xe4, 0xe6, 0x8a, 0xee, 0xe4, 0xf6, 0xc7, 0xf2, 0x12, 0xf1, 0x39, 0xfb, 0x12, 0xaa, 0x0e, + 0x99, 0xeb, 0xcf, 0xb2, 0xc7, 0x8e, 0xf6, 0x8b, 0x00, 0xcd, 0xed, 0x85, 0x67, 0x01, 0xee, 0x32, + 0x35, 0xde, 0x60, 0xd9, 0x0c, 0x84, 0x3d, 0xa0, 0x9c, 0x7f, 0xc3, 0x1e, 0x98, 0xcf, 0x02, 0x0c, + 0x7b, 0x60, 0x3d, 0x0d, 0xc8, 0xdb, 0x83, 0x34, 0xc0, 0x36, 0x42, 0x58, 0xca, 0x25, 0xcc, 0x68, + 0x61, 0x29, 0xcf, 0x30, 0xec, 0x5c, 0x7b, 0x71, 0x9e, 0x8d, 0xad, 0x66, 0x94, 0x7a, 0xb9, 0xad, + 0x12, 0x42, 0x7f, 0x05, 0x9a, 0xe6, 0x73, 0x2d, 0x6d, 0x21, 0x4a, 0x1e, 0x99, 0x69, 0x0b, 0x51, + 0xf6, 0xbe, 0x4b, 0x6d, 0x2e, 0x6b, 0x9a, 0xdd, 0xe0, 0xe6, 0xda, 0xef, 0x55, 0x32, 0x95, 0x59, + 0xf6, 0x4c, 0x27, 0x53, 0x99, 0xa5, 0x8f, 0x5c, 0xd4, 0xe6, 0xb2, 0x15, 0x6b, 0x2e, 0x22, 0x42, + 0xcc, 0xbe, 0x02, 0x4b, 0x46, 0x36, 0xda, 0xd1, 0x34, 0xec, 0x69, 0x46, 0x2d, 0x66, 0x32, 0x77, + 0xca, 0x3c, 0x4f, 0x77, 0x83, 0xda, 0x5f, 0x76, 0xad, 0x49, 0x20, 0x93, 0xee, 0x40, 0xc3, 0xcc, + 0x74, 0x7b, 0x41, 0xbb, 0x1b, 0x46, 0x95, 0x99, 0xb6, 0x7b, 0xc7, 0x61, 0x7f, 0xe4, 0x40, 0xd3, + 0xca, 0x1b, 0xb3, 0xee, 0x41, 0x72, 0xed, 0xb4, 0xcd, 0x3a, 0xb3, 0x21, 0xd7, 0xa3, 0x41, 0x1e, + 0x6c, 0x7e, 0xc1, 0x5a, 0x84, 0x8f, 0xad, 0x13, 0xcc, 0xad, 0xfc, 0xab, 0xff, 0xe7, 0x79, 0x02, + 0x33, 0xdb, 0xfb, 0xf9, 0x1d, 0x87, 0xfd, 0xa9, 0x03, 0x8b, 0xf6, 0xb9, 0x5b, 0x6f, 0x55, 0xe9, + 0x09, 0x5f, 0x6f, 0xd5, 0x05, 0x87, 0xf5, 0x5f, 0xc0, 0x28, 0xd9, 0xfb, 0xe2, 0xbf, 0x37, 0x54, + 0x08, 0x87, 0x19, 0xca, 0x3e, 0xbf, 0xad, 0xe6, 0x1f, 0x4f, 0xdc, 0x74, 0xee, 0x38, 0xec, 0x6b, + 0xe2, 0x0f, 0x08, 0xe4, 0xb7, 0xc4, 0x1d, 0x2f, 0xfb, 0xbd, 0xfb, 0x26, 0xcd, 0xe5, 0x9a, 0x7b, + 0xd5, 0x9a, 0x4b, 0xde, 0xda, 0x6d, 0x8b, 0xd1, 0xc9, 0xff, 0x95, 0xc8, 0xd4, 0x76, 0xe1, 0xbf, + 0x26, 0x2e, 0x1e, 0xe4, 0x48, 0x0c, 0x52, 0x92, 0x5b, 0x2c, 0xfc, 0x92, 0xcd, 0xb8, 0x9b, 0x34, + 0xd6, 0x37, 0xdd, 0xd7, 0x2f, 0x1c, 0xeb, 0x6d, 0x3a, 0x35, 0xe3, 0x88, 0x0f, 0x01, 0xb2, 0x70, + 0x2b, 0xcb, 0x85, 0xfb, 0xb4, 0xe5, 0x2a, 0x46, 0x64, 0x6d, 0x39, 0x51, 0x51, 0x41, 0x6c, 0xf1, + 0xab, 0x42, 0x9d, 0x3c, 0x50, 0x81, 0xc2, 0xab, 0x86, 0xca, 0xb0, 0xe3, 0xa2, 0x9d, 0x4e, 0x59, + 0x55, 0x99, 0x32, 0xd1, 0x51, 0xc7, 0x8f, 0x60, 0xe1, 0x20, 0x8a, 0x9e, 0x4e, 0xc6, 0xfa, 0xf2, + 0xc2, 0x0e, 0x68, 0xed, 0xfb, 0xc9, 0x69, 0x27, 0x37, 0x0b, 0xf7, 0x3a, 0x35, 0xd5, 0x61, 0x6d, + 0xa3, 0xa9, 0xdb, 0x1f, 0x67, 0xe1, 0xdc, 0xe7, 0xcc, 0x87, 0x65, 0xed, 0xa5, 0xe8, 0x81, 0x77, + 0xec, 0x66, 0xcc, 0x40, 0x64, 0xa1, 0x0b, 0xcb, 0x6f, 0x54, 0xa3, 0xbd, 0x9d, 0xa8, 0x36, 0xef, + 0x38, 0xec, 0x10, 0x9a, 0xbb, 0xbc, 0x17, 0xf5, 0xb9, 0x8c, 0x0a, 0xad, 0x64, 0x03, 0xd7, 0xe1, + 0xa4, 0xce, 0x82, 0x05, 0xda, 0x7a, 0x7b, 0xec, 0x4f, 0x63, 0xfe, 0x8d, 0xdb, 0x1f, 0xcb, 0x78, + 0xd3, 0x73, 0xa5, 0xb7, 0x55, 0x40, 0xce, 0xd2, 0xdb, 0xb9, 0x08, 0x9e, 0xa5, 0xb7, 0x0b, 0x11, + 0x3c, 0x6b, 0xa9, 0x55, 0x40, 0x90, 0x0d, 0x61, 0xb9, 0x10, 0xf4, 0xd3, 0xbe, 0xce, 0x45, 0xa1, + 0xc2, 0xce, 0xf5, 0x8b, 0x09, 0xec, 0xde, 0x36, 0xed, 0xde, 0x8e, 0x60, 0x61, 0x97, 0x8b, 0xc5, + 0x12, 0x19, 0x12, 0xb9, 0xa7, 0x8b, 0x66, 0x36, 0x45, 0x5e, 0x71, 0x53, 0x9d, 0x6d, 0x98, 0x29, + 0x3d, 0x81, 0x7d, 0x15, 0x1a, 0xf7, 0x79, 0xaa, 0x52, 0x22, 0xb4, 0xc7, 0x98, 0xcb, 0x91, 0xe8, + 0x94, 0x64, 0x54, 0xd8, 0x3c, 0x43, 0xad, 0xdd, 0xe6, 0xfd, 0x01, 0x17, 0xca, 0xa9, 0x1b, 0xf4, + 0x9f, 0xb3, 0xff, 0x4f, 0x8d, 0xeb, 0x0c, 0xab, 0x75, 0xe3, 0x26, 0xdd, 0x6c, 0x7c, 0x29, 0x87, + 0x97, 0xb5, 0x1c, 0x46, 0x7d, 0x6e, 0xb8, 0x28, 0x21, 0x34, 0x8c, 0xf4, 0x3f, 0x2d, 0x40, 0xc5, + 0x54, 0x46, 0x2d, 0x40, 0x25, 0xd9, 0x82, 0xee, 0x4d, 0xea, 0xc7, 0x65, 0xd7, 0xb3, 0x7e, 0x44, + 0x86, 0x60, 0xd6, 0xd3, 0xed, 0x8f, 0xfd, 0x51, 0xfa, 0x9c, 0x3d, 0xa1, 0x67, 0x8c, 0x66, 0xda, + 0x47, 0xe6, 0xb1, 0xe6, 0x33, 0x44, 0xf4, 0x62, 0x19, 0x55, 0xb6, 0x17, 0x2b, 0xba, 0x22, 0x4f, + 0xe6, 0x33, 0x00, 0x47, 0x69, 0x34, 0xde, 0xf5, 0xf9, 0x28, 0x0a, 0x33, 0x5d, 0x9b, 0xa5, 0x36, + 0x64, 0xfa, 0xcb, 0xc8, 0x6f, 0x60, 0x4f, 0x8c, 0x33, 0x83, 0x95, 0x35, 0xa3, 0x98, 0xeb, 0xc2, + 0xec, 0x07, 0xbd, 0x20, 0x25, 0x19, 0x10, 0x77, 0x1c, 0x3c, 0x01, 0x64, 0x51, 0x5f, 0x7d, 0x02, + 0x28, 0x04, 0x94, 0xb5, 0xda, 0x2b, 0x09, 0x11, 0x1f, 0x42, 0x3d, 0x0b, 0x23, 0x6e, 0x64, 0x29, + 0x9c, 0x56, 0xd0, 0x51, 0x5b, 0xee, 0x42, 0x70, 0xcf, 0x6d, 0xd1, 0x52, 0x01, 0x9b, 0xc7, 0xa5, + 0xa2, 0x88, 0x5d, 0x00, 0x2b, 0x62, 0x80, 0xda, 0x0d, 0xa1, 0xcb, 0x7a, 0x35, 0x93, 0x92, 0x00, + 0x9b, 0x96, 0xe6, 0xd2, 0xf8, 0x94, 0x15, 0x0b, 0x40, 0x6e, 0x15, 0x89, 0x02, 0xa8, 0x9a, 0x47, + 0xb0, 0x5c, 0x08, 0xae, 0x68, 0x91, 0xbe, 0x28, 0xa6, 0xa5, 0x45, 0xfa, 0xc2, 0xb8, 0x8c, 0xbb, + 0x46, 0x5d, 0x2e, 0xb9, 0x80, 0x5d, 0x26, 0xe7, 0x41, 0xda, 0x3b, 0x7d, 0xdf, 0xd9, 0x3c, 0x9e, + 0xa5, 0xff, 0xea, 0xfb, 0xd4, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x8c, 0x95, 0x76, 0xdd, + 0x4f, 0x00, 0x00, } diff --git a/lnrpc/rpc.pb.gw.go b/lnrpc/rpc.pb.gw.go index 2646dde960..a635cfb0ce 100644 --- a/lnrpc/rpc.pb.gw.go +++ b/lnrpc/rpc.pb.gw.go @@ -301,6 +301,52 @@ func request_Lightning_CloseChannel_0(ctx context.Context, marshaler runtime.Mar } +var ( + filter_Lightning_AbandonChannel_0 = &utilities.DoubleArray{Encoding: map[string]int{"channel_point": 0, "funding_txid_str": 1, "output_index": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 2, 2, 3, 4}} +) + +func request_Lightning_AbandonChannel_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AbandonChannelRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["channel_point.funding_txid_str"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_point.funding_txid_str") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "channel_point.funding_txid_str", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_point.funding_txid_str", err) + } + + val, ok = pathParams["channel_point.output_index"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_point.output_index") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "channel_point.output_index", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_point.output_index", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_AbandonChannel_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.AbandonChannel(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + func request_Lightning_SendPaymentSync_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq SendRequest var metadata runtime.ServerMetadata @@ -1220,6 +1266,35 @@ func RegisterLightningHandler(ctx context.Context, mux *runtime.ServeMux, conn * }) + mux.Handle("DELETE", pattern_Lightning_AbandonChannel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Lightning_AbandonChannel_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_AbandonChannel_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_Lightning_SendPaymentSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(ctx) defer cancel() @@ -1745,6 +1820,8 @@ var ( pattern_Lightning_CloseChannel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "channels", "channel_point.funding_txid_str", "channel_point.output_index"}, "")) + pattern_Lightning_AbandonChannel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "channels", "channel_point.funding_txid_str", "channel_point.output_index"}, "")) + pattern_Lightning_SendPaymentSync_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "channels", "transactions"}, "")) pattern_Lightning_SendToRouteSync_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "channels", "transactions", "route"}, "")) @@ -1809,6 +1886,8 @@ var ( forward_Lightning_CloseChannel_0 = runtime.ForwardResponseStream + forward_Lightning_AbandonChannel_0 = runtime.ForwardResponseMessage + forward_Lightning_SendPaymentSync_0 = runtime.ForwardResponseMessage forward_Lightning_SendToRouteSync_0 = runtime.ForwardResponseMessage diff --git a/lnrpc/rpc.proto b/lnrpc/rpc.proto index b227e652fb..7ceb944601 100644 --- a/lnrpc/rpc.proto +++ b/lnrpc/rpc.proto @@ -389,6 +389,19 @@ service Lightning { }; } + /** lncli: `abandonchannel` + AbandonChannel removes all channel state from the database except for a + close summary. This method can be used to get rid of permanently unusable + channels due to bugs fixed in newer versions of lnd. Only available + when in debug builds of lnd. + */ + rpc AbandonChannel (AbandonChannelRequest) returns (AbandonChannelResponse) { + option (google.api.http) = { + delete: "/v1/channels/{channel_point.funding_txid_str}/{channel_point.output_index}" + }; + } + + /** lncli: `sendpayment` SendPayment dispatches a bi-directional streaming RPC for sending payments through the Lightning Network. A single RPC invocation creates a persistent @@ -991,6 +1004,7 @@ message ChannelCloseSummary { REMOTE_FORCE_CLOSE = 2; BREACH_CLOSE = 3; FUNDING_CANCELED = 4; + ABANDONED = 5; } /// Details on how the channel was closed. @@ -1003,6 +1017,7 @@ message ClosedChannelsRequest { bool remote_force = 3; bool breach = 4; bool funding_canceled = 5; + bool abandoned = 6; } message ClosedChannelsResponse { @@ -1820,6 +1835,14 @@ message DeleteAllPaymentsRequest { message DeleteAllPaymentsResponse { } +message AbandonChannelRequest { + ChannelPoint channel_point = 1; +} + +message AbandonChannelResponse { +} + + message DebugLevelRequest { bool show = 1; string level_spec = 2; diff --git a/lnrpc/rpc.swagger.json b/lnrpc/rpc.swagger.json index 6d250746c5..75b44e7733 100644 --- a/lnrpc/rpc.swagger.json +++ b/lnrpc/rpc.swagger.json @@ -195,6 +195,13 @@ "required": false, "type": "boolean", "format": "boolean" + }, + { + "name": "abandoned", + "in": "query", + "required": false, + "type": "boolean", + "format": "boolean" } ], "tags": [ @@ -275,13 +282,13 @@ }, "/v1/channels/{channel_point.funding_txid_str}/{channel_point.output_index}": { "delete": { - "summary": "* lncli: `closechannel`\nCloseChannel attempts to close an active channel identified by its channel\noutpoint (ChannelPoint). The actions of this method can additionally be\naugmented to attempt a force close after a timeout period in the case of an\ninactive peer. If a non-force close (cooperative closure) is requested,\nthen the user can specify either a target number of blocks until the\nclosure transaction is confirmed, or a manual fee rate. If neither are\nspecified, then a default lax, block confirmation target is used.", - "operationId": "CloseChannel", + "summary": "* lncli: `abandonchannel`\nAbandonChannel removes all channel state from the database except for a\nclose summary. This method can be used to get rid of permanently unusable\nchannels due to bugs fixed in newer versions of lnd. Only available\nwhen in debug builds of lnd.", + "operationId": "AbandonChannel", "responses": { "200": { - "description": "(streaming responses)", + "description": "", "schema": { - "$ref": "#/definitions/lnrpcCloseStatusUpdate" + "$ref": "#/definitions/lnrpcAbandonChannelResponse" } } }, @@ -970,7 +977,8 @@ "LOCAL_FORCE_CLOSE", "REMOTE_FORCE_CLOSE", "BREACH_CLOSE", - "FUNDING_CANCELED" + "FUNDING_CANCELED", + "ABANDONED" ], "default": "COOPERATIVE_CLOSE" }, @@ -1092,6 +1100,9 @@ } } }, + "lnrpcAbandonChannelResponse": { + "type": "object" + }, "lnrpcAddInvoiceResponse": { "type": "object", "properties": { diff --git a/rpcserver.go b/rpcserver.go index 903d4f2daa..7b0c7a81cd 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -201,6 +201,10 @@ var ( Entity: "offchain", Action: "write", }}, + "/lnrpc.Lightning/AbandonChannel": {{ + Entity: "offchain", + Action: "write", + }}, "/lnrpc.Lightning/GetInfo": {{ Entity: "info", Action: "read", @@ -1200,9 +1204,56 @@ out: return nil } -// fetchActiveChannel attempts to locate a channel identified by its channel +// AbandonChannel removes all channel state from the database except for a +// close summary. This method can be used to get rid of permanently unusable +// channels due to bugs fixed in newer versions of lnd. +func (r *rpcServer) AbandonChannel(ctx context.Context, + in *lnrpc.AbandonChannelRequest) (*lnrpc.AbandonChannelResponse, error) { + + if !DebugBuild { + return nil, fmt.Errorf("AbandonChannel RPC call only " + + "available in debug builds") + } + + index := in.ChannelPoint.OutputIndex + txidHash, err := getChanPointFundingTxid(in.GetChannelPoint()) + if err != nil { + return nil, err + } + txid, err := chainhash.NewHash(txidHash) + if err != nil { + return nil, err + } + chanPoint := wire.NewOutPoint(txid, index) + + dbChan, err := r.fetchOpenDbChannel(*chanPoint) + if err != nil { + return nil, err + } + + summary := &channeldb.ChannelCloseSummary{ + ChanPoint: *chanPoint, + ChainHash: dbChan.ChainHash, + RemotePub: dbChan.IdentityPub, + Capacity: dbChan.Capacity, + CloseType: channeldb.Abandoned, + ShortChanID: dbChan.ShortChannelID, + IsPending: false, + } + + err = dbChan.CloseChannel(summary) + if err != nil { + return nil, err + } + + return &lnrpc.AbandonChannelResponse{}, nil +} + +// fetchOpenDbChannel attempts to locate a channel identified by its channel // point from the database's set of all currently opened channels. -func (r *rpcServer) fetchActiveChannel(chanPoint wire.OutPoint) (*lnwallet.LightningChannel, error) { +func (r *rpcServer) fetchOpenDbChannel(chanPoint wire.OutPoint) ( + *channeldb.OpenChannel, error) { + dbChannels, err := r.server.chanDB.FetchAllChannels() if err != nil { return nil, err @@ -1224,7 +1275,22 @@ func (r *rpcServer) fetchActiveChannel(chanPoint wire.OutPoint) (*lnwallet.Light return nil, fmt.Errorf("unable to find channel") } - // Otherwise, we create a fully populated channel state machine which + return dbChan, nil +} + +// fetchActiveChannel attempts to locate a channel identified by its channel +// point from the database's set of all currently opened channels and +// return it as a fully popuplated state machine +func (r *rpcServer) fetchActiveChannel(chanPoint wire.OutPoint) ( + *lnwallet.LightningChannel, error) { + + dbChan, err := r.fetchOpenDbChannel(chanPoint) + if err != nil { + return nil, err + } + + // If the channel is successfully fetched from the database, + // we create a fully populated channel state machine which // uses the db channel as backing storage. return lnwallet.NewLightningChannel( r.server.cc.wallet.Cfg.Signer, nil, dbChan, @@ -1619,7 +1685,8 @@ func (r *rpcServer) ClosedChannels(ctx context.Context, // Show all channels when no filter flags are set. filterResults := in.Cooperative || in.LocalForce || - in.RemoteForce || in.Breach || in.FundingCanceled + in.RemoteForce || in.Breach || in.FundingCanceled || + in.Abandoned resp := &lnrpc.ClosedChannelsResponse{} @@ -1670,6 +1737,11 @@ func (r *rpcServer) ClosedChannels(ctx context.Context, continue } closeType = lnrpc.ChannelCloseSummary_FUNDING_CANCELED + case channeldb.Abandoned: + if filterResults && !in.Abandoned { + continue + } + closeType = lnrpc.ChannelCloseSummary_ABANDONED } channel := &lnrpc.ChannelCloseSummary{ From a75b0c871b365621518b12909ff0206f49400433 Mon Sep 17 00:00:00 2001 From: Joost Jager Date: Wed, 20 Jun 2018 09:09:02 +0200 Subject: [PATCH 3/3] lnd_test: add AbandonChannel test --- lnd_test.go | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/lnd_test.go b/lnd_test.go index acf8610e24..a1a37ad3bd 100644 --- a/lnd_test.go +++ b/lnd_test.go @@ -12009,6 +12009,103 @@ func testSendUpdateDisableChannel(net *lntest.NetworkHarness, t *harnessTest) { mineBlocks(t, net, 1) } +// testAbandonChannel abandones a channel and asserts that it is no +// longer open and not in one of the pending closure states. It also +// verifies that the abandoned channel is reported as closed with close +// type 'abandoned'. +func testAbandonChannel(net *lntest.NetworkHarness, t *harnessTest) { + timeout := time.Duration(time.Second * 5) + ctxb := context.Background() + + // First establish a channel between Alice and Bob. + ctxt, _ := context.WithTimeout(ctxb, timeout) + + channelParam := lntest.OpenChannelParams{ + Amt: maxBtcFundingAmount, + PushAmt: btcutil.Amount(100000), + } + + chanPoint := openChannelAndAssert( + ctxt, t, net, net.Alice, net.Bob, channelParam) + + // Wait for channel to be confirmed open. + ctxt, _ = context.WithTimeout(ctxb, time.Second*15) + err := net.Alice.WaitForNetworkChannelOpen(ctxt, chanPoint) + if err != nil { + t.Fatalf("alice didn't report channel: %v", err) + } + err = net.Bob.WaitForNetworkChannelOpen(ctxt, chanPoint) + if err != nil { + t.Fatalf("bob didn't report channel: %v", err) + } + + // Send request to abandon channel. + abandonChannelRequest := &lnrpc.AbandonChannelRequest{ + ChannelPoint: chanPoint, + } + + ctxt, _ = context.WithTimeout(ctxb, timeout) + _, err = net.Alice.AbandonChannel(ctxt, abandonChannelRequest) + + if err != nil { + t.Fatalf("unable to abandon channel: %v", err) + } + + // Assert that channel in no longer open. + listReq := &lnrpc.ListChannelsRequest{} + aliceChannelList, err := net.Alice.ListChannels(ctxb, listReq) + if err != nil { + t.Fatalf("unable to list channels: %v", err) + } + if len(aliceChannelList.Channels) != 0 { + t.Fatalf("alice should only have no channels open, "+ + "instead she has %v", + len(aliceChannelList.Channels)) + } + + // Assert that channel is not pending closure. + pendingReq := &lnrpc.PendingChannelsRequest{} + alicePendingList, err := net.Alice.PendingChannels(ctxb, pendingReq) + if err != nil { + t.Fatalf("unable to list pending channels: %v", err) + } + if len(alicePendingList.PendingClosingChannels) != 0 { + t.Fatalf("alice should only have no pending closing channels, "+ + "instead she has %v", + len(alicePendingList.PendingClosingChannels)) + } + if len(alicePendingList.PendingForceClosingChannels) != 0 { + t.Fatalf("alice should only have no pending force closing "+ + "channels instead she has %v", + len(alicePendingList.PendingForceClosingChannels)) + } + if len(alicePendingList.WaitingCloseChannels) != 0 { + t.Fatalf("alice should only have no waiting close "+ + "channels instead she has %v", + len(alicePendingList.WaitingCloseChannels)) + } + + // Assert that channel is listed as abandoned. + closedReq := &lnrpc.ClosedChannelsRequest{ + Abandoned: true, + } + aliceClosedList, err := net.Alice.ClosedChannels(ctxb, closedReq) + if err != nil { + t.Fatalf("unable to list closed channels: %v", err) + } + if len(aliceClosedList.Channels) != 1 { + t.Fatalf("alice should only have a single abandoned channel, "+ + "instead she has %v", + len(aliceClosedList.Channels)) + } + + // Now that we're done with the test, the channel can be closed. This is + // necessary to avoid unexpected outcomes of other tests that use Bob's + // lnd instance. + ctxt, _ = context.WithTimeout(ctxb, timeout) + closeChannelAndAssert(ctxt, t, net, net.Bob, chanPoint, true) +} + type testCase struct { name string test func(net *lntest.NetworkHarness, t *harnessTest) @@ -12196,6 +12293,10 @@ var testsCases = []*testCase{ name: "garbage collect link nodes", test: testGarbageCollectLinkNodes, }, + { + name: "abandonchannel", + test: testAbandonChannel, + }, { name: "revoked uncooperative close retribution zero value remote output", test: testRevokedCloseRetributionZeroValueRemoteOutput,