Merge pull request #3722 from Roasbeef/external-funding-rpc

lnrpc+lnwallet+funding: implement new RPCs to enable external channel funding
This commit is contained in:
Olaoluwa Osuntokun 2019-12-23 14:41:46 -06:00 committed by GitHub
commit 7eacc40419
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 1839 additions and 711 deletions

@ -99,6 +99,8 @@ var (
// script is set for a peer that does not support the feature bit.
errUpfrontShutdownScriptNotSupported = errors.New("peer does not support" +
"option upfront shutdown script")
zeroID [32]byte
)
// reservationWithCtx encapsulates a pending channel reservation. This wrapper
@ -840,8 +842,8 @@ func (f *fundingManager) advanceFundingState(channel *channeldb.OpenChannel,
// are still steps left of the setup procedure. We continue the
// procedure where we left off.
err = f.stateStep(
channel, lnChannel, shortChanID, channelState,
updateChan,
channel, lnChannel, shortChanID, pendingChanID,
channelState, updateChan,
)
if err != nil {
fndgLog.Errorf("Unable to advance state(%v): %v",
@ -857,7 +859,8 @@ func (f *fundingManager) advanceFundingState(channel *channeldb.OpenChannel,
// updateChan can be set non-nil to get OpenStatusUpdates.
func (f *fundingManager) stateStep(channel *channeldb.OpenChannel,
lnChannel *lnwallet.LightningChannel,
shortChanID *lnwire.ShortChannelID, channelState channelOpeningState,
shortChanID *lnwire.ShortChannelID, pendingChanID [32]byte,
channelState channelOpeningState,
updateChan chan<- *lnrpc.OpenStatusUpdate) error {
chanID := lnwire.NewChanIDFromOutPoint(&channel.FundingOutpoint)
@ -936,6 +939,7 @@ func (f *fundingManager) stateStep(channel *channeldb.OpenChannel,
ChannelPoint: cp,
},
},
PendingChanId: pendingChanID[:],
}
select {
@ -1816,6 +1820,7 @@ func (f *fundingManager) handleFundingSigned(fmsg *fundingSignedMsg) {
// Send an update to the upstream client that the negotiation process
// is over.
//
// TODO(roasbeef): add abstraction over updates to accommodate
// long-polling, or SSE, etc.
upd := &lnrpc.OpenStatusUpdate{
@ -1825,6 +1830,7 @@ func (f *fundingManager) handleFundingSigned(fmsg *fundingSignedMsg) {
OutputIndex: fundingPoint.Index,
},
},
PendingChanId: pendingChanID[:],
}
select {
@ -2853,9 +2859,23 @@ func (f *fundingManager) handleInitFundingMsg(msg *initFundingMsg) {
channelFlags = lnwire.FFAnnounceChannel
}
// Obtain a new pending channel ID which is used to track this
// reservation throughout its lifetime.
chanID := f.nextPendingChanID()
// If the caller specified their own channel ID, then we'll use that.
// Otherwise we'll generate a fresh one as normal. This will be used
// to track this reservation throughout its lifetime.
var chanID [32]byte
if msg.pendingChanID == zeroID {
chanID = f.nextPendingChanID()
} else {
// If the user specified their own pending channel ID, then
// we'll ensure it doesn't collide with any existing pending
// channel ID.
chanID = msg.pendingChanID
if _, err := f.getReservationCtx(peerKey, chanID); err == nil {
msg.err <- fmt.Errorf("pendingChannelID(%x) "+
"already present", chanID[:])
return
}
}
// Initialize a funding reservation with the local wallet. If the
// wallet doesn't have enough funds to commit to this channel, then the
@ -2886,6 +2906,7 @@ func (f *fundingManager) handleInitFundingMsg(msg *initFundingMsg) {
Flags: channelFlags,
MinConfs: msg.minConfs,
Tweakless: tweaklessCommitment,
ChanFunder: msg.chanFunder,
}
reservation, err := f.cfg.Wallet.InitChannelReservation(req)

@ -281,7 +281,7 @@ func (x ChannelEventUpdate_UpdateType) String() string {
}
func (ChannelEventUpdate_UpdateType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{66, 0}
return fileDescriptor_77a6da22d6a3feb1, []int{73, 0}
}
type Invoice_InvoiceState int32
@ -312,7 +312,7 @@ func (x Invoice_InvoiceState) String() string {
}
func (Invoice_InvoiceState) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{98, 0}
return fileDescriptor_77a6da22d6a3feb1, []int{105, 0}
}
type Payment_PaymentStatus int32
@ -343,7 +343,7 @@ func (x Payment_PaymentStatus) String() string {
}
func (Payment_PaymentStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{105, 0}
return fileDescriptor_77a6da22d6a3feb1, []int{112, 0}
}
type HTLCAttempt_HTLCStatus int32
@ -371,7 +371,7 @@ func (x HTLCAttempt_HTLCStatus) String() string {
}
func (HTLCAttempt_HTLCStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{106, 0}
return fileDescriptor_77a6da22d6a3feb1, []int{113, 0}
}
type GenSeedRequest struct {
@ -4331,10 +4331,17 @@ type OpenChannelRequest struct {
//
//Note: If this value is set on channel creation, you will *not* be able to
//cooperatively close out to a different address.
CloseAddress string `protobuf:"bytes,13,opt,name=close_address,proto3" json:"close_address,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
CloseAddress string `protobuf:"bytes,13,opt,name=close_address,proto3" json:"close_address,omitempty"`
//*
//Funding shims are an optional argument that allow the caller to intercept
//certain funding functionality. For example, a shim can be provided to use a
//particular key for the commitment key (ideally cold) rather than use one
//that is generated by the wallet as normal, or signal that signing will be
//carried out in an interactive manner (PSBT based).
FundingShim *FundingShim `protobuf:"bytes,14,opt,name=funding_shim,proto3" json:"funding_shim,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *OpenChannelRequest) Reset() { *m = OpenChannelRequest{} }
@ -4447,14 +4454,25 @@ func (m *OpenChannelRequest) GetCloseAddress() string {
return ""
}
func (m *OpenChannelRequest) GetFundingShim() *FundingShim {
if m != nil {
return m.FundingShim
}
return nil
}
type OpenStatusUpdate struct {
// Types that are valid to be assigned to Update:
// *OpenStatusUpdate_ChanPending
// *OpenStatusUpdate_ChanOpen
Update isOpenStatusUpdate_Update `protobuf_oneof:"update"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Update isOpenStatusUpdate_Update `protobuf_oneof:"update"`
//*
//The pending channel ID of the created channel. This value may be used to
//further the funding flow manually via the FundingStateStep method.
PendingChanId []byte `protobuf:"bytes,4,opt,name=pending_chan_id,proto3" json:"pending_chan_id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *OpenStatusUpdate) Reset() { *m = OpenStatusUpdate{} }
@ -4519,6 +4537,13 @@ func (m *OpenStatusUpdate) GetChanOpen() *ChannelOpenUpdate {
return nil
}
func (m *OpenStatusUpdate) GetPendingChanId() []byte {
if m != nil {
return m.PendingChanId
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*OpenStatusUpdate) XXX_OneofWrappers() []interface{} {
return []interface{}{
@ -4527,6 +4552,404 @@ func (*OpenStatusUpdate) XXX_OneofWrappers() []interface{} {
}
}
type KeyLocator struct {
/// The family of key being identified.
KeyFamily int32 `protobuf:"varint,1,opt,name=key_family,json=keyFamily,proto3" json:"key_family,omitempty"`
/// The precise index of the key being identified.
KeyIndex int32 `protobuf:"varint,2,opt,name=key_index,json=keyIndex,proto3" json:"key_index,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *KeyLocator) Reset() { *m = KeyLocator{} }
func (m *KeyLocator) String() string { return proto.CompactTextString(m) }
func (*KeyLocator) ProtoMessage() {}
func (*KeyLocator) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{62}
}
func (m *KeyLocator) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_KeyLocator.Unmarshal(m, b)
}
func (m *KeyLocator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_KeyLocator.Marshal(b, m, deterministic)
}
func (m *KeyLocator) XXX_Merge(src proto.Message) {
xxx_messageInfo_KeyLocator.Merge(m, src)
}
func (m *KeyLocator) XXX_Size() int {
return xxx_messageInfo_KeyLocator.Size(m)
}
func (m *KeyLocator) XXX_DiscardUnknown() {
xxx_messageInfo_KeyLocator.DiscardUnknown(m)
}
var xxx_messageInfo_KeyLocator proto.InternalMessageInfo
func (m *KeyLocator) GetKeyFamily() int32 {
if m != nil {
return m.KeyFamily
}
return 0
}
func (m *KeyLocator) GetKeyIndex() int32 {
if m != nil {
return m.KeyIndex
}
return 0
}
type KeyDescriptor struct {
//*
//The raw bytes of the key being identified.
RawKeyBytes []byte `protobuf:"bytes,1,opt,name=raw_key_bytes,json=rawKeyBytes,proto3" json:"raw_key_bytes,omitempty"`
//*
//The key locator that identifies which key to use for signing.
KeyLoc *KeyLocator `protobuf:"bytes,2,opt,name=key_loc,json=keyLoc,proto3" json:"key_loc,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *KeyDescriptor) Reset() { *m = KeyDescriptor{} }
func (m *KeyDescriptor) String() string { return proto.CompactTextString(m) }
func (*KeyDescriptor) ProtoMessage() {}
func (*KeyDescriptor) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{63}
}
func (m *KeyDescriptor) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_KeyDescriptor.Unmarshal(m, b)
}
func (m *KeyDescriptor) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_KeyDescriptor.Marshal(b, m, deterministic)
}
func (m *KeyDescriptor) XXX_Merge(src proto.Message) {
xxx_messageInfo_KeyDescriptor.Merge(m, src)
}
func (m *KeyDescriptor) XXX_Size() int {
return xxx_messageInfo_KeyDescriptor.Size(m)
}
func (m *KeyDescriptor) XXX_DiscardUnknown() {
xxx_messageInfo_KeyDescriptor.DiscardUnknown(m)
}
var xxx_messageInfo_KeyDescriptor proto.InternalMessageInfo
func (m *KeyDescriptor) GetRawKeyBytes() []byte {
if m != nil {
return m.RawKeyBytes
}
return nil
}
func (m *KeyDescriptor) GetKeyLoc() *KeyLocator {
if m != nil {
return m.KeyLoc
}
return nil
}
type ChanPointShim struct {
//*
//The size of the pre-crafted output to be used as the channel point for this
//channel funding.
Amt int64 `protobuf:"varint,1,opt,name=amt,proto3" json:"amt,omitempty"`
/// The target channel point to refrence in created commitment transactions.
ChanPoint *ChannelPoint `protobuf:"bytes,2,opt,name=chan_point,json=chanPoint,proto3" json:"chan_point,omitempty"`
/// Our local key to use when creating the multi-sig output.
LocalKey *KeyDescriptor `protobuf:"bytes,3,opt,name=local_key,json=localKey,proto3" json:"local_key,omitempty"`
/// The key of the remote party to use when creating the multi-sig output.
RemoteKey []byte `protobuf:"bytes,4,opt,name=remote_key,json=remoteKey,proto3" json:"remote_key,omitempty"`
//*
//If non-zero, then this will be used as the pending channel ID on the wire
//protocol to initate the funding request. This is an optional field, and
//should only be set if the responder is already expecting a specific pending
//channel ID.
PendingChanId []byte `protobuf:"bytes,5,opt,name=pending_chan_id,json=pendingChanId,proto3" json:"pending_chan_id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ChanPointShim) Reset() { *m = ChanPointShim{} }
func (m *ChanPointShim) String() string { return proto.CompactTextString(m) }
func (*ChanPointShim) ProtoMessage() {}
func (*ChanPointShim) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{64}
}
func (m *ChanPointShim) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChanPointShim.Unmarshal(m, b)
}
func (m *ChanPointShim) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ChanPointShim.Marshal(b, m, deterministic)
}
func (m *ChanPointShim) XXX_Merge(src proto.Message) {
xxx_messageInfo_ChanPointShim.Merge(m, src)
}
func (m *ChanPointShim) XXX_Size() int {
return xxx_messageInfo_ChanPointShim.Size(m)
}
func (m *ChanPointShim) XXX_DiscardUnknown() {
xxx_messageInfo_ChanPointShim.DiscardUnknown(m)
}
var xxx_messageInfo_ChanPointShim proto.InternalMessageInfo
func (m *ChanPointShim) GetAmt() int64 {
if m != nil {
return m.Amt
}
return 0
}
func (m *ChanPointShim) GetChanPoint() *ChannelPoint {
if m != nil {
return m.ChanPoint
}
return nil
}
func (m *ChanPointShim) GetLocalKey() *KeyDescriptor {
if m != nil {
return m.LocalKey
}
return nil
}
func (m *ChanPointShim) GetRemoteKey() []byte {
if m != nil {
return m.RemoteKey
}
return nil
}
func (m *ChanPointShim) GetPendingChanId() []byte {
if m != nil {
return m.PendingChanId
}
return nil
}
type FundingShim struct {
// Types that are valid to be assigned to Shim:
// *FundingShim_ChanPointShim
Shim isFundingShim_Shim `protobuf_oneof:"shim"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *FundingShim) Reset() { *m = FundingShim{} }
func (m *FundingShim) String() string { return proto.CompactTextString(m) }
func (*FundingShim) ProtoMessage() {}
func (*FundingShim) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{65}
}
func (m *FundingShim) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FundingShim.Unmarshal(m, b)
}
func (m *FundingShim) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_FundingShim.Marshal(b, m, deterministic)
}
func (m *FundingShim) XXX_Merge(src proto.Message) {
xxx_messageInfo_FundingShim.Merge(m, src)
}
func (m *FundingShim) XXX_Size() int {
return xxx_messageInfo_FundingShim.Size(m)
}
func (m *FundingShim) XXX_DiscardUnknown() {
xxx_messageInfo_FundingShim.DiscardUnknown(m)
}
var xxx_messageInfo_FundingShim proto.InternalMessageInfo
type isFundingShim_Shim interface {
isFundingShim_Shim()
}
type FundingShim_ChanPointShim struct {
ChanPointShim *ChanPointShim `protobuf:"bytes,1,opt,name=chan_point_shim,json=chanPointShim,proto3,oneof"`
}
func (*FundingShim_ChanPointShim) isFundingShim_Shim() {}
func (m *FundingShim) GetShim() isFundingShim_Shim {
if m != nil {
return m.Shim
}
return nil
}
func (m *FundingShim) GetChanPointShim() *ChanPointShim {
if x, ok := m.GetShim().(*FundingShim_ChanPointShim); ok {
return x.ChanPointShim
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*FundingShim) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*FundingShim_ChanPointShim)(nil),
}
}
type FundingShimCancel struct {
/// The pending channel ID of the channel to cancel the funding shim for.
PendingChanId []byte `protobuf:"bytes,1,opt,name=pending_chan_id,json=pendingChanId,proto3" json:"pending_chan_id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *FundingShimCancel) Reset() { *m = FundingShimCancel{} }
func (m *FundingShimCancel) String() string { return proto.CompactTextString(m) }
func (*FundingShimCancel) ProtoMessage() {}
func (*FundingShimCancel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{66}
}
func (m *FundingShimCancel) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FundingShimCancel.Unmarshal(m, b)
}
func (m *FundingShimCancel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_FundingShimCancel.Marshal(b, m, deterministic)
}
func (m *FundingShimCancel) XXX_Merge(src proto.Message) {
xxx_messageInfo_FundingShimCancel.Merge(m, src)
}
func (m *FundingShimCancel) XXX_Size() int {
return xxx_messageInfo_FundingShimCancel.Size(m)
}
func (m *FundingShimCancel) XXX_DiscardUnknown() {
xxx_messageInfo_FundingShimCancel.DiscardUnknown(m)
}
var xxx_messageInfo_FundingShimCancel proto.InternalMessageInfo
func (m *FundingShimCancel) GetPendingChanId() []byte {
if m != nil {
return m.PendingChanId
}
return nil
}
type FundingTransitionMsg struct {
// Types that are valid to be assigned to Trigger:
// *FundingTransitionMsg_ShimRegister
// *FundingTransitionMsg_ShimCancel
Trigger isFundingTransitionMsg_Trigger `protobuf_oneof:"trigger"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *FundingTransitionMsg) Reset() { *m = FundingTransitionMsg{} }
func (m *FundingTransitionMsg) String() string { return proto.CompactTextString(m) }
func (*FundingTransitionMsg) ProtoMessage() {}
func (*FundingTransitionMsg) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{67}
}
func (m *FundingTransitionMsg) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FundingTransitionMsg.Unmarshal(m, b)
}
func (m *FundingTransitionMsg) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_FundingTransitionMsg.Marshal(b, m, deterministic)
}
func (m *FundingTransitionMsg) XXX_Merge(src proto.Message) {
xxx_messageInfo_FundingTransitionMsg.Merge(m, src)
}
func (m *FundingTransitionMsg) XXX_Size() int {
return xxx_messageInfo_FundingTransitionMsg.Size(m)
}
func (m *FundingTransitionMsg) XXX_DiscardUnknown() {
xxx_messageInfo_FundingTransitionMsg.DiscardUnknown(m)
}
var xxx_messageInfo_FundingTransitionMsg proto.InternalMessageInfo
type isFundingTransitionMsg_Trigger interface {
isFundingTransitionMsg_Trigger()
}
type FundingTransitionMsg_ShimRegister struct {
ShimRegister *FundingShim `protobuf:"bytes,1,opt,name=shim_register,json=shimRegister,proto3,oneof"`
}
type FundingTransitionMsg_ShimCancel struct {
ShimCancel *FundingShimCancel `protobuf:"bytes,2,opt,name=shim_cancel,json=shimCancel,proto3,oneof"`
}
func (*FundingTransitionMsg_ShimRegister) isFundingTransitionMsg_Trigger() {}
func (*FundingTransitionMsg_ShimCancel) isFundingTransitionMsg_Trigger() {}
func (m *FundingTransitionMsg) GetTrigger() isFundingTransitionMsg_Trigger {
if m != nil {
return m.Trigger
}
return nil
}
func (m *FundingTransitionMsg) GetShimRegister() *FundingShim {
if x, ok := m.GetTrigger().(*FundingTransitionMsg_ShimRegister); ok {
return x.ShimRegister
}
return nil
}
func (m *FundingTransitionMsg) GetShimCancel() *FundingShimCancel {
if x, ok := m.GetTrigger().(*FundingTransitionMsg_ShimCancel); ok {
return x.ShimCancel
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*FundingTransitionMsg) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*FundingTransitionMsg_ShimRegister)(nil),
(*FundingTransitionMsg_ShimCancel)(nil),
}
}
type FundingStateStepResp struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *FundingStateStepResp) Reset() { *m = FundingStateStepResp{} }
func (m *FundingStateStepResp) String() string { return proto.CompactTextString(m) }
func (*FundingStateStepResp) ProtoMessage() {}
func (*FundingStateStepResp) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{68}
}
func (m *FundingStateStepResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FundingStateStepResp.Unmarshal(m, b)
}
func (m *FundingStateStepResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_FundingStateStepResp.Marshal(b, m, deterministic)
}
func (m *FundingStateStepResp) XXX_Merge(src proto.Message) {
xxx_messageInfo_FundingStateStepResp.Merge(m, src)
}
func (m *FundingStateStepResp) XXX_Size() int {
return xxx_messageInfo_FundingStateStepResp.Size(m)
}
func (m *FundingStateStepResp) XXX_DiscardUnknown() {
xxx_messageInfo_FundingStateStepResp.DiscardUnknown(m)
}
var xxx_messageInfo_FundingStateStepResp proto.InternalMessageInfo
type PendingHTLC struct {
/// The direction within the channel that the htlc was sent
Incoming bool `protobuf:"varint,1,opt,name=incoming,proto3" json:"incoming,omitempty"`
@ -4552,7 +4975,7 @@ func (m *PendingHTLC) Reset() { *m = PendingHTLC{} }
func (m *PendingHTLC) String() string { return proto.CompactTextString(m) }
func (*PendingHTLC) ProtoMessage() {}
func (*PendingHTLC) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{62}
return fileDescriptor_77a6da22d6a3feb1, []int{69}
}
func (m *PendingHTLC) XXX_Unmarshal(b []byte) error {
@ -4625,7 +5048,7 @@ func (m *PendingChannelsRequest) Reset() { *m = PendingChannelsRequest{}
func (m *PendingChannelsRequest) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsRequest) ProtoMessage() {}
func (*PendingChannelsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{63}
return fileDescriptor_77a6da22d6a3feb1, []int{70}
}
func (m *PendingChannelsRequest) XXX_Unmarshal(b []byte) error {
@ -4666,7 +5089,7 @@ func (m *PendingChannelsResponse) Reset() { *m = PendingChannelsResponse
func (m *PendingChannelsResponse) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsResponse) ProtoMessage() {}
func (*PendingChannelsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{64}
return fileDescriptor_77a6da22d6a3feb1, []int{71}
}
func (m *PendingChannelsResponse) XXX_Unmarshal(b []byte) error {
@ -4745,7 +5168,7 @@ func (m *PendingChannelsResponse_PendingChannel) Reset() {
func (m *PendingChannelsResponse_PendingChannel) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsResponse_PendingChannel) ProtoMessage() {}
func (*PendingChannelsResponse_PendingChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{64, 0}
return fileDescriptor_77a6da22d6a3feb1, []int{71, 0}
}
func (m *PendingChannelsResponse_PendingChannel) XXX_Unmarshal(b []byte) error {
@ -4847,7 +5270,7 @@ func (m *PendingChannelsResponse_PendingOpenChannel) String() string {
}
func (*PendingChannelsResponse_PendingOpenChannel) ProtoMessage() {}
func (*PendingChannelsResponse_PendingOpenChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{64, 1}
return fileDescriptor_77a6da22d6a3feb1, []int{71, 1}
}
func (m *PendingChannelsResponse_PendingOpenChannel) XXX_Unmarshal(b []byte) error {
@ -4921,7 +5344,7 @@ func (m *PendingChannelsResponse_WaitingCloseChannel) String() string {
}
func (*PendingChannelsResponse_WaitingCloseChannel) ProtoMessage() {}
func (*PendingChannelsResponse_WaitingCloseChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{64, 2}
return fileDescriptor_77a6da22d6a3feb1, []int{71, 2}
}
func (m *PendingChannelsResponse_WaitingCloseChannel) XXX_Unmarshal(b []byte) error {
@ -4970,7 +5393,7 @@ func (m *PendingChannelsResponse_ClosedChannel) Reset() { *m = PendingCh
func (m *PendingChannelsResponse_ClosedChannel) String() string { return proto.CompactTextString(m) }
func (*PendingChannelsResponse_ClosedChannel) ProtoMessage() {}
func (*PendingChannelsResponse_ClosedChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{64, 3}
return fileDescriptor_77a6da22d6a3feb1, []int{71, 3}
}
func (m *PendingChannelsResponse_ClosedChannel) XXX_Unmarshal(b []byte) error {
@ -5035,7 +5458,7 @@ func (m *PendingChannelsResponse_ForceClosedChannel) String() string {
}
func (*PendingChannelsResponse_ForceClosedChannel) ProtoMessage() {}
func (*PendingChannelsResponse_ForceClosedChannel) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{64, 4}
return fileDescriptor_77a6da22d6a3feb1, []int{71, 4}
}
func (m *PendingChannelsResponse_ForceClosedChannel) XXX_Unmarshal(b []byte) error {
@ -5115,7 +5538,7 @@ func (m *ChannelEventSubscription) Reset() { *m = ChannelEventSubscripti
func (m *ChannelEventSubscription) String() string { return proto.CompactTextString(m) }
func (*ChannelEventSubscription) ProtoMessage() {}
func (*ChannelEventSubscription) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{65}
return fileDescriptor_77a6da22d6a3feb1, []int{72}
}
func (m *ChannelEventSubscription) XXX_Unmarshal(b []byte) error {
@ -5153,7 +5576,7 @@ func (m *ChannelEventUpdate) Reset() { *m = ChannelEventUpdate{} }
func (m *ChannelEventUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelEventUpdate) ProtoMessage() {}
func (*ChannelEventUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{66}
return fileDescriptor_77a6da22d6a3feb1, []int{73}
}
func (m *ChannelEventUpdate) XXX_Unmarshal(b []byte) error {
@ -5264,7 +5687,7 @@ func (m *WalletBalanceRequest) Reset() { *m = WalletBalanceRequest{} }
func (m *WalletBalanceRequest) String() string { return proto.CompactTextString(m) }
func (*WalletBalanceRequest) ProtoMessage() {}
func (*WalletBalanceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{67}
return fileDescriptor_77a6da22d6a3feb1, []int{74}
}
func (m *WalletBalanceRequest) XXX_Unmarshal(b []byte) error {
@ -5301,7 +5724,7 @@ func (m *WalletBalanceResponse) Reset() { *m = WalletBalanceResponse{} }
func (m *WalletBalanceResponse) String() string { return proto.CompactTextString(m) }
func (*WalletBalanceResponse) ProtoMessage() {}
func (*WalletBalanceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{68}
return fileDescriptor_77a6da22d6a3feb1, []int{75}
}
func (m *WalletBalanceResponse) XXX_Unmarshal(b []byte) error {
@ -5353,7 +5776,7 @@ func (m *ChannelBalanceRequest) Reset() { *m = ChannelBalanceRequest{} }
func (m *ChannelBalanceRequest) String() string { return proto.CompactTextString(m) }
func (*ChannelBalanceRequest) ProtoMessage() {}
func (*ChannelBalanceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{69}
return fileDescriptor_77a6da22d6a3feb1, []int{76}
}
func (m *ChannelBalanceRequest) XXX_Unmarshal(b []byte) error {
@ -5388,7 +5811,7 @@ func (m *ChannelBalanceResponse) Reset() { *m = ChannelBalanceResponse{}
func (m *ChannelBalanceResponse) String() string { return proto.CompactTextString(m) }
func (*ChannelBalanceResponse) ProtoMessage() {}
func (*ChannelBalanceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{70}
return fileDescriptor_77a6da22d6a3feb1, []int{77}
}
func (m *ChannelBalanceResponse) XXX_Unmarshal(b []byte) error {
@ -5489,7 +5912,7 @@ func (m *QueryRoutesRequest) Reset() { *m = QueryRoutesRequest{} }
func (m *QueryRoutesRequest) String() string { return proto.CompactTextString(m) }
func (*QueryRoutesRequest) ProtoMessage() {}
func (*QueryRoutesRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{71}
return fileDescriptor_77a6da22d6a3feb1, []int{78}
}
func (m *QueryRoutesRequest) XXX_Unmarshal(b []byte) error {
@ -5613,7 +6036,7 @@ func (m *NodePair) Reset() { *m = NodePair{} }
func (m *NodePair) String() string { return proto.CompactTextString(m) }
func (*NodePair) ProtoMessage() {}
func (*NodePair) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{72}
return fileDescriptor_77a6da22d6a3feb1, []int{79}
}
func (m *NodePair) XXX_Unmarshal(b []byte) error {
@ -5666,7 +6089,7 @@ func (m *EdgeLocator) Reset() { *m = EdgeLocator{} }
func (m *EdgeLocator) String() string { return proto.CompactTextString(m) }
func (*EdgeLocator) ProtoMessage() {}
func (*EdgeLocator) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{73}
return fileDescriptor_77a6da22d6a3feb1, []int{80}
}
func (m *EdgeLocator) XXX_Unmarshal(b []byte) error {
@ -5719,7 +6142,7 @@ func (m *QueryRoutesResponse) Reset() { *m = QueryRoutesResponse{} }
func (m *QueryRoutesResponse) String() string { return proto.CompactTextString(m) }
func (*QueryRoutesResponse) ProtoMessage() {}
func (*QueryRoutesResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{74}
return fileDescriptor_77a6da22d6a3feb1, []int{81}
}
func (m *QueryRoutesResponse) XXX_Unmarshal(b []byte) error {
@ -5795,7 +6218,7 @@ func (m *Hop) Reset() { *m = Hop{} }
func (m *Hop) String() string { return proto.CompactTextString(m) }
func (*Hop) ProtoMessage() {}
func (*Hop) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{75}
return fileDescriptor_77a6da22d6a3feb1, []int{82}
}
func (m *Hop) XXX_Unmarshal(b []byte) error {
@ -5917,7 +6340,7 @@ func (m *MPPRecord) Reset() { *m = MPPRecord{} }
func (m *MPPRecord) String() string { return proto.CompactTextString(m) }
func (*MPPRecord) ProtoMessage() {}
func (*MPPRecord) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{76}
return fileDescriptor_77a6da22d6a3feb1, []int{83}
}
func (m *MPPRecord) XXX_Unmarshal(b []byte) error {
@ -5995,7 +6418,7 @@ func (m *Route) Reset() { *m = Route{} }
func (m *Route) String() string { return proto.CompactTextString(m) }
func (*Route) ProtoMessage() {}
func (*Route) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{77}
return fileDescriptor_77a6da22d6a3feb1, []int{84}
}
func (m *Route) XXX_Unmarshal(b []byte) error {
@ -6074,7 +6497,7 @@ func (m *NodeInfoRequest) Reset() { *m = NodeInfoRequest{} }
func (m *NodeInfoRequest) String() string { return proto.CompactTextString(m) }
func (*NodeInfoRequest) ProtoMessage() {}
func (*NodeInfoRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{78}
return fileDescriptor_77a6da22d6a3feb1, []int{85}
}
func (m *NodeInfoRequest) XXX_Unmarshal(b []byte) error {
@ -6131,7 +6554,7 @@ func (m *NodeInfo) Reset() { *m = NodeInfo{} }
func (m *NodeInfo) String() string { return proto.CompactTextString(m) }
func (*NodeInfo) ProtoMessage() {}
func (*NodeInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{79}
return fileDescriptor_77a6da22d6a3feb1, []int{86}
}
func (m *NodeInfo) XXX_Unmarshal(b []byte) error {
@ -6201,7 +6624,7 @@ func (m *LightningNode) Reset() { *m = LightningNode{} }
func (m *LightningNode) String() string { return proto.CompactTextString(m) }
func (*LightningNode) ProtoMessage() {}
func (*LightningNode) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{80}
return fileDescriptor_77a6da22d6a3feb1, []int{87}
}
func (m *LightningNode) XXX_Unmarshal(b []byte) error {
@ -6276,7 +6699,7 @@ func (m *NodeAddress) Reset() { *m = NodeAddress{} }
func (m *NodeAddress) String() string { return proto.CompactTextString(m) }
func (*NodeAddress) ProtoMessage() {}
func (*NodeAddress) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{81}
return fileDescriptor_77a6da22d6a3feb1, []int{88}
}
func (m *NodeAddress) XXX_Unmarshal(b []byte) error {
@ -6328,7 +6751,7 @@ func (m *RoutingPolicy) Reset() { *m = RoutingPolicy{} }
func (m *RoutingPolicy) String() string { return proto.CompactTextString(m) }
func (*RoutingPolicy) ProtoMessage() {}
func (*RoutingPolicy) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{82}
return fileDescriptor_77a6da22d6a3feb1, []int{89}
}
func (m *RoutingPolicy) XXX_Unmarshal(b []byte) error {
@ -6426,7 +6849,7 @@ func (m *ChannelEdge) Reset() { *m = ChannelEdge{} }
func (m *ChannelEdge) String() string { return proto.CompactTextString(m) }
func (*ChannelEdge) ProtoMessage() {}
func (*ChannelEdge) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{83}
return fileDescriptor_77a6da22d6a3feb1, []int{90}
}
func (m *ChannelEdge) XXX_Unmarshal(b []byte) error {
@ -6519,7 +6942,7 @@ func (m *ChannelGraphRequest) Reset() { *m = ChannelGraphRequest{} }
func (m *ChannelGraphRequest) String() string { return proto.CompactTextString(m) }
func (*ChannelGraphRequest) ProtoMessage() {}
func (*ChannelGraphRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{84}
return fileDescriptor_77a6da22d6a3feb1, []int{91}
}
func (m *ChannelGraphRequest) XXX_Unmarshal(b []byte) error {
@ -6562,7 +6985,7 @@ func (m *ChannelGraph) Reset() { *m = ChannelGraph{} }
func (m *ChannelGraph) String() string { return proto.CompactTextString(m) }
func (*ChannelGraph) ProtoMessage() {}
func (*ChannelGraph) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{85}
return fileDescriptor_77a6da22d6a3feb1, []int{92}
}
func (m *ChannelGraph) XXX_Unmarshal(b []byte) error {
@ -6612,7 +7035,7 @@ func (m *ChanInfoRequest) Reset() { *m = ChanInfoRequest{} }
func (m *ChanInfoRequest) String() string { return proto.CompactTextString(m) }
func (*ChanInfoRequest) ProtoMessage() {}
func (*ChanInfoRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{86}
return fileDescriptor_77a6da22d6a3feb1, []int{93}
}
func (m *ChanInfoRequest) XXX_Unmarshal(b []byte) error {
@ -6650,7 +7073,7 @@ func (m *NetworkInfoRequest) Reset() { *m = NetworkInfoRequest{} }
func (m *NetworkInfoRequest) String() string { return proto.CompactTextString(m) }
func (*NetworkInfoRequest) ProtoMessage() {}
func (*NetworkInfoRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{87}
return fileDescriptor_77a6da22d6a3feb1, []int{94}
}
func (m *NetworkInfoRequest) XXX_Unmarshal(b []byte) error {
@ -6693,7 +7116,7 @@ func (m *NetworkInfo) Reset() { *m = NetworkInfo{} }
func (m *NetworkInfo) String() string { return proto.CompactTextString(m) }
func (*NetworkInfo) ProtoMessage() {}
func (*NetworkInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{88}
return fileDescriptor_77a6da22d6a3feb1, []int{95}
}
func (m *NetworkInfo) XXX_Unmarshal(b []byte) error {
@ -6801,7 +7224,7 @@ func (m *StopRequest) Reset() { *m = StopRequest{} }
func (m *StopRequest) String() string { return proto.CompactTextString(m) }
func (*StopRequest) ProtoMessage() {}
func (*StopRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{89}
return fileDescriptor_77a6da22d6a3feb1, []int{96}
}
func (m *StopRequest) XXX_Unmarshal(b []byte) error {
@ -6832,7 +7255,7 @@ func (m *StopResponse) Reset() { *m = StopResponse{} }
func (m *StopResponse) String() string { return proto.CompactTextString(m) }
func (*StopResponse) ProtoMessage() {}
func (*StopResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{90}
return fileDescriptor_77a6da22d6a3feb1, []int{97}
}
func (m *StopResponse) XXX_Unmarshal(b []byte) error {
@ -6863,7 +7286,7 @@ func (m *GraphTopologySubscription) Reset() { *m = GraphTopologySubscrip
func (m *GraphTopologySubscription) String() string { return proto.CompactTextString(m) }
func (*GraphTopologySubscription) ProtoMessage() {}
func (*GraphTopologySubscription) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{91}
return fileDescriptor_77a6da22d6a3feb1, []int{98}
}
func (m *GraphTopologySubscription) XXX_Unmarshal(b []byte) error {
@ -6897,7 +7320,7 @@ func (m *GraphTopologyUpdate) Reset() { *m = GraphTopologyUpdate{} }
func (m *GraphTopologyUpdate) String() string { return proto.CompactTextString(m) }
func (*GraphTopologyUpdate) ProtoMessage() {}
func (*GraphTopologyUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{92}
return fileDescriptor_77a6da22d6a3feb1, []int{99}
}
func (m *GraphTopologyUpdate) XXX_Unmarshal(b []byte) error {
@ -6954,7 +7377,7 @@ func (m *NodeUpdate) Reset() { *m = NodeUpdate{} }
func (m *NodeUpdate) String() string { return proto.CompactTextString(m) }
func (*NodeUpdate) ProtoMessage() {}
func (*NodeUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{93}
return fileDescriptor_77a6da22d6a3feb1, []int{100}
}
func (m *NodeUpdate) XXX_Unmarshal(b []byte) error {
@ -7030,7 +7453,7 @@ func (m *ChannelEdgeUpdate) Reset() { *m = ChannelEdgeUpdate{} }
func (m *ChannelEdgeUpdate) String() string { return proto.CompactTextString(m) }
func (*ChannelEdgeUpdate) ProtoMessage() {}
func (*ChannelEdgeUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{94}
return fileDescriptor_77a6da22d6a3feb1, []int{101}
}
func (m *ChannelEdgeUpdate) XXX_Unmarshal(b []byte) error {
@ -7111,7 +7534,7 @@ func (m *ClosedChannelUpdate) Reset() { *m = ClosedChannelUpdate{} }
func (m *ClosedChannelUpdate) String() string { return proto.CompactTextString(m) }
func (*ClosedChannelUpdate) ProtoMessage() {}
func (*ClosedChannelUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{95}
return fileDescriptor_77a6da22d6a3feb1, []int{102}
}
func (m *ClosedChannelUpdate) XXX_Unmarshal(b []byte) error {
@ -7182,7 +7605,7 @@ func (m *HopHint) Reset() { *m = HopHint{} }
func (m *HopHint) String() string { return proto.CompactTextString(m) }
func (*HopHint) ProtoMessage() {}
func (*HopHint) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{96}
return fileDescriptor_77a6da22d6a3feb1, []int{103}
}
func (m *HopHint) XXX_Unmarshal(b []byte) error {
@ -7252,7 +7675,7 @@ func (m *RouteHint) Reset() { *m = RouteHint{} }
func (m *RouteHint) String() string { return proto.CompactTextString(m) }
func (*RouteHint) ProtoMessage() {}
func (*RouteHint) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{97}
return fileDescriptor_77a6da22d6a3feb1, []int{104}
}
func (m *RouteHint) XXX_Unmarshal(b []byte) error {
@ -7381,7 +7804,7 @@ func (m *Invoice) Reset() { *m = Invoice{} }
func (m *Invoice) String() string { return proto.CompactTextString(m) }
func (*Invoice) ProtoMessage() {}
func (*Invoice) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{98}
return fileDescriptor_77a6da22d6a3feb1, []int{105}
}
func (m *Invoice) XXX_Unmarshal(b []byte) error {
@ -7596,7 +8019,7 @@ func (m *InvoiceHTLC) Reset() { *m = InvoiceHTLC{} }
func (m *InvoiceHTLC) String() string { return proto.CompactTextString(m) }
func (*InvoiceHTLC) ProtoMessage() {}
func (*InvoiceHTLC) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{99}
return fileDescriptor_77a6da22d6a3feb1, []int{106}
}
func (m *InvoiceHTLC) XXX_Unmarshal(b []byte) error {
@ -7709,7 +8132,7 @@ func (m *AddInvoiceResponse) Reset() { *m = AddInvoiceResponse{} }
func (m *AddInvoiceResponse) String() string { return proto.CompactTextString(m) }
func (*AddInvoiceResponse) ProtoMessage() {}
func (*AddInvoiceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{100}
return fileDescriptor_77a6da22d6a3feb1, []int{107}
}
func (m *AddInvoiceResponse) XXX_Unmarshal(b []byte) error {
@ -7771,7 +8194,7 @@ func (m *PaymentHash) Reset() { *m = PaymentHash{} }
func (m *PaymentHash) String() string { return proto.CompactTextString(m) }
func (*PaymentHash) ProtoMessage() {}
func (*PaymentHash) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{101}
return fileDescriptor_77a6da22d6a3feb1, []int{108}
}
func (m *PaymentHash) XXX_Unmarshal(b []byte) error {
@ -7831,7 +8254,7 @@ func (m *ListInvoiceRequest) Reset() { *m = ListInvoiceRequest{} }
func (m *ListInvoiceRequest) String() string { return proto.CompactTextString(m) }
func (*ListInvoiceRequest) ProtoMessage() {}
func (*ListInvoiceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{102}
return fileDescriptor_77a6da22d6a3feb1, []int{109}
}
func (m *ListInvoiceRequest) XXX_Unmarshal(b []byte) error {
@ -7902,7 +8325,7 @@ func (m *ListInvoiceResponse) Reset() { *m = ListInvoiceResponse{} }
func (m *ListInvoiceResponse) String() string { return proto.CompactTextString(m) }
func (*ListInvoiceResponse) ProtoMessage() {}
func (*ListInvoiceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{103}
return fileDescriptor_77a6da22d6a3feb1, []int{110}
}
func (m *ListInvoiceResponse) XXX_Unmarshal(b []byte) error {
@ -7966,7 +8389,7 @@ func (m *InvoiceSubscription) Reset() { *m = InvoiceSubscription{} }
func (m *InvoiceSubscription) String() string { return proto.CompactTextString(m) }
func (*InvoiceSubscription) ProtoMessage() {}
func (*InvoiceSubscription) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{104}
return fileDescriptor_77a6da22d6a3feb1, []int{111}
}
func (m *InvoiceSubscription) XXX_Unmarshal(b []byte) error {
@ -8039,7 +8462,7 @@ func (m *Payment) Reset() { *m = Payment{} }
func (m *Payment) String() string { return proto.CompactTextString(m) }
func (*Payment) ProtoMessage() {}
func (*Payment) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{105}
return fileDescriptor_77a6da22d6a3feb1, []int{112}
}
func (m *Payment) XXX_Unmarshal(b []byte) error {
@ -8182,7 +8605,7 @@ func (m *HTLCAttempt) Reset() { *m = HTLCAttempt{} }
func (m *HTLCAttempt) String() string { return proto.CompactTextString(m) }
func (*HTLCAttempt) ProtoMessage() {}
func (*HTLCAttempt) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{106}
return fileDescriptor_77a6da22d6a3feb1, []int{113}
}
func (m *HTLCAttempt) XXX_Unmarshal(b []byte) error {
@ -8246,7 +8669,7 @@ func (m *ListPaymentsRequest) Reset() { *m = ListPaymentsRequest{} }
func (m *ListPaymentsRequest) String() string { return proto.CompactTextString(m) }
func (*ListPaymentsRequest) ProtoMessage() {}
func (*ListPaymentsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{107}
return fileDescriptor_77a6da22d6a3feb1, []int{114}
}
func (m *ListPaymentsRequest) XXX_Unmarshal(b []byte) error {
@ -8286,7 +8709,7 @@ func (m *ListPaymentsResponse) Reset() { *m = ListPaymentsResponse{} }
func (m *ListPaymentsResponse) String() string { return proto.CompactTextString(m) }
func (*ListPaymentsResponse) ProtoMessage() {}
func (*ListPaymentsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{108}
return fileDescriptor_77a6da22d6a3feb1, []int{115}
}
func (m *ListPaymentsResponse) XXX_Unmarshal(b []byte) error {
@ -8324,7 +8747,7 @@ func (m *DeleteAllPaymentsRequest) Reset() { *m = DeleteAllPaymentsReque
func (m *DeleteAllPaymentsRequest) String() string { return proto.CompactTextString(m) }
func (*DeleteAllPaymentsRequest) ProtoMessage() {}
func (*DeleteAllPaymentsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{109}
return fileDescriptor_77a6da22d6a3feb1, []int{116}
}
func (m *DeleteAllPaymentsRequest) XXX_Unmarshal(b []byte) error {
@ -8355,7 +8778,7 @@ func (m *DeleteAllPaymentsResponse) Reset() { *m = DeleteAllPaymentsResp
func (m *DeleteAllPaymentsResponse) String() string { return proto.CompactTextString(m) }
func (*DeleteAllPaymentsResponse) ProtoMessage() {}
func (*DeleteAllPaymentsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{110}
return fileDescriptor_77a6da22d6a3feb1, []int{117}
}
func (m *DeleteAllPaymentsResponse) XXX_Unmarshal(b []byte) error {
@ -8387,7 +8810,7 @@ func (m *AbandonChannelRequest) Reset() { *m = AbandonChannelRequest{} }
func (m *AbandonChannelRequest) String() string { return proto.CompactTextString(m) }
func (*AbandonChannelRequest) ProtoMessage() {}
func (*AbandonChannelRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{111}
return fileDescriptor_77a6da22d6a3feb1, []int{118}
}
func (m *AbandonChannelRequest) XXX_Unmarshal(b []byte) error {
@ -8425,7 +8848,7 @@ func (m *AbandonChannelResponse) Reset() { *m = AbandonChannelResponse{}
func (m *AbandonChannelResponse) String() string { return proto.CompactTextString(m) }
func (*AbandonChannelResponse) ProtoMessage() {}
func (*AbandonChannelResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{112}
return fileDescriptor_77a6da22d6a3feb1, []int{119}
}
func (m *AbandonChannelResponse) XXX_Unmarshal(b []byte) error {
@ -8458,7 +8881,7 @@ func (m *DebugLevelRequest) Reset() { *m = DebugLevelRequest{} }
func (m *DebugLevelRequest) String() string { return proto.CompactTextString(m) }
func (*DebugLevelRequest) ProtoMessage() {}
func (*DebugLevelRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{113}
return fileDescriptor_77a6da22d6a3feb1, []int{120}
}
func (m *DebugLevelRequest) XXX_Unmarshal(b []byte) error {
@ -8504,7 +8927,7 @@ func (m *DebugLevelResponse) Reset() { *m = DebugLevelResponse{} }
func (m *DebugLevelResponse) String() string { return proto.CompactTextString(m) }
func (*DebugLevelResponse) ProtoMessage() {}
func (*DebugLevelResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{114}
return fileDescriptor_77a6da22d6a3feb1, []int{121}
}
func (m *DebugLevelResponse) XXX_Unmarshal(b []byte) error {
@ -8544,7 +8967,7 @@ func (m *PayReqString) Reset() { *m = PayReqString{} }
func (m *PayReqString) String() string { return proto.CompactTextString(m) }
func (*PayReqString) ProtoMessage() {}
func (*PayReqString) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{115}
return fileDescriptor_77a6da22d6a3feb1, []int{122}
}
func (m *PayReqString) XXX_Unmarshal(b []byte) error {
@ -8595,7 +9018,7 @@ func (m *PayReq) Reset() { *m = PayReq{} }
func (m *PayReq) String() string { return proto.CompactTextString(m) }
func (*PayReq) ProtoMessage() {}
func (*PayReq) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{116}
return fileDescriptor_77a6da22d6a3feb1, []int{123}
}
func (m *PayReq) XXX_Unmarshal(b []byte) error {
@ -8720,7 +9143,7 @@ func (m *Feature) Reset() { *m = Feature{} }
func (m *Feature) String() string { return proto.CompactTextString(m) }
func (*Feature) ProtoMessage() {}
func (*Feature) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{117}
return fileDescriptor_77a6da22d6a3feb1, []int{124}
}
func (m *Feature) XXX_Unmarshal(b []byte) error {
@ -8772,7 +9195,7 @@ func (m *FeeReportRequest) Reset() { *m = FeeReportRequest{} }
func (m *FeeReportRequest) String() string { return proto.CompactTextString(m) }
func (*FeeReportRequest) ProtoMessage() {}
func (*FeeReportRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{118}
return fileDescriptor_77a6da22d6a3feb1, []int{125}
}
func (m *FeeReportRequest) XXX_Unmarshal(b []byte) error {
@ -8811,7 +9234,7 @@ func (m *ChannelFeeReport) Reset() { *m = ChannelFeeReport{} }
func (m *ChannelFeeReport) String() string { return proto.CompactTextString(m) }
func (*ChannelFeeReport) ProtoMessage() {}
func (*ChannelFeeReport) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{119}
return fileDescriptor_77a6da22d6a3feb1, []int{126}
}
func (m *ChannelFeeReport) XXX_Unmarshal(b []byte) error {
@ -8878,7 +9301,7 @@ func (m *FeeReportResponse) Reset() { *m = FeeReportResponse{} }
func (m *FeeReportResponse) String() string { return proto.CompactTextString(m) }
func (*FeeReportResponse) ProtoMessage() {}
func (*FeeReportResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{120}
return fileDescriptor_77a6da22d6a3feb1, []int{127}
}
func (m *FeeReportResponse) XXX_Unmarshal(b []byte) error {
@ -8953,7 +9376,7 @@ func (m *PolicyUpdateRequest) Reset() { *m = PolicyUpdateRequest{} }
func (m *PolicyUpdateRequest) String() string { return proto.CompactTextString(m) }
func (*PolicyUpdateRequest) ProtoMessage() {}
func (*PolicyUpdateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{121}
return fileDescriptor_77a6da22d6a3feb1, []int{128}
}
func (m *PolicyUpdateRequest) XXX_Unmarshal(b []byte) error {
@ -9071,7 +9494,7 @@ func (m *PolicyUpdateResponse) Reset() { *m = PolicyUpdateResponse{} }
func (m *PolicyUpdateResponse) String() string { return proto.CompactTextString(m) }
func (*PolicyUpdateResponse) ProtoMessage() {}
func (*PolicyUpdateResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{122}
return fileDescriptor_77a6da22d6a3feb1, []int{129}
}
func (m *PolicyUpdateResponse) XXX_Unmarshal(b []byte) error {
@ -9110,7 +9533,7 @@ func (m *ForwardingHistoryRequest) Reset() { *m = ForwardingHistoryReque
func (m *ForwardingHistoryRequest) String() string { return proto.CompactTextString(m) }
func (*ForwardingHistoryRequest) ProtoMessage() {}
func (*ForwardingHistoryRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{123}
return fileDescriptor_77a6da22d6a3feb1, []int{130}
}
func (m *ForwardingHistoryRequest) XXX_Unmarshal(b []byte) error {
@ -9187,7 +9610,7 @@ func (m *ForwardingEvent) Reset() { *m = ForwardingEvent{} }
func (m *ForwardingEvent) String() string { return proto.CompactTextString(m) }
func (*ForwardingEvent) ProtoMessage() {}
func (*ForwardingEvent) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{124}
return fileDescriptor_77a6da22d6a3feb1, []int{131}
}
func (m *ForwardingEvent) XXX_Unmarshal(b []byte) error {
@ -9285,7 +9708,7 @@ func (m *ForwardingHistoryResponse) Reset() { *m = ForwardingHistoryResp
func (m *ForwardingHistoryResponse) String() string { return proto.CompactTextString(m) }
func (*ForwardingHistoryResponse) ProtoMessage() {}
func (*ForwardingHistoryResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{125}
return fileDescriptor_77a6da22d6a3feb1, []int{132}
}
func (m *ForwardingHistoryResponse) XXX_Unmarshal(b []byte) error {
@ -9332,7 +9755,7 @@ func (m *ExportChannelBackupRequest) Reset() { *m = ExportChannelBackupR
func (m *ExportChannelBackupRequest) String() string { return proto.CompactTextString(m) }
func (*ExportChannelBackupRequest) ProtoMessage() {}
func (*ExportChannelBackupRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{126}
return fileDescriptor_77a6da22d6a3feb1, []int{133}
}
func (m *ExportChannelBackupRequest) XXX_Unmarshal(b []byte) error {
@ -9379,7 +9802,7 @@ func (m *ChannelBackup) Reset() { *m = ChannelBackup{} }
func (m *ChannelBackup) String() string { return proto.CompactTextString(m) }
func (*ChannelBackup) ProtoMessage() {}
func (*ChannelBackup) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{127}
return fileDescriptor_77a6da22d6a3feb1, []int{134}
}
func (m *ChannelBackup) XXX_Unmarshal(b []byte) error {
@ -9433,7 +9856,7 @@ func (m *MultiChanBackup) Reset() { *m = MultiChanBackup{} }
func (m *MultiChanBackup) String() string { return proto.CompactTextString(m) }
func (*MultiChanBackup) ProtoMessage() {}
func (*MultiChanBackup) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{128}
return fileDescriptor_77a6da22d6a3feb1, []int{135}
}
func (m *MultiChanBackup) XXX_Unmarshal(b []byte) error {
@ -9478,7 +9901,7 @@ func (m *ChanBackupExportRequest) Reset() { *m = ChanBackupExportRequest
func (m *ChanBackupExportRequest) String() string { return proto.CompactTextString(m) }
func (*ChanBackupExportRequest) ProtoMessage() {}
func (*ChanBackupExportRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{129}
return fileDescriptor_77a6da22d6a3feb1, []int{136}
}
func (m *ChanBackupExportRequest) XXX_Unmarshal(b []byte) error {
@ -9517,7 +9940,7 @@ func (m *ChanBackupSnapshot) Reset() { *m = ChanBackupSnapshot{} }
func (m *ChanBackupSnapshot) String() string { return proto.CompactTextString(m) }
func (*ChanBackupSnapshot) ProtoMessage() {}
func (*ChanBackupSnapshot) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{130}
return fileDescriptor_77a6da22d6a3feb1, []int{137}
}
func (m *ChanBackupSnapshot) XXX_Unmarshal(b []byte) error {
@ -9565,7 +9988,7 @@ func (m *ChannelBackups) Reset() { *m = ChannelBackups{} }
func (m *ChannelBackups) String() string { return proto.CompactTextString(m) }
func (*ChannelBackups) ProtoMessage() {}
func (*ChannelBackups) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{131}
return fileDescriptor_77a6da22d6a3feb1, []int{138}
}
func (m *ChannelBackups) XXX_Unmarshal(b []byte) error {
@ -9607,7 +10030,7 @@ func (m *RestoreChanBackupRequest) Reset() { *m = RestoreChanBackupReque
func (m *RestoreChanBackupRequest) String() string { return proto.CompactTextString(m) }
func (*RestoreChanBackupRequest) ProtoMessage() {}
func (*RestoreChanBackupRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{132}
return fileDescriptor_77a6da22d6a3feb1, []int{139}
}
func (m *RestoreChanBackupRequest) XXX_Unmarshal(b []byte) error {
@ -9683,7 +10106,7 @@ func (m *RestoreBackupResponse) Reset() { *m = RestoreBackupResponse{} }
func (m *RestoreBackupResponse) String() string { return proto.CompactTextString(m) }
func (*RestoreBackupResponse) ProtoMessage() {}
func (*RestoreBackupResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{133}
return fileDescriptor_77a6da22d6a3feb1, []int{140}
}
func (m *RestoreBackupResponse) XXX_Unmarshal(b []byte) error {
@ -9714,7 +10137,7 @@ func (m *ChannelBackupSubscription) Reset() { *m = ChannelBackupSubscrip
func (m *ChannelBackupSubscription) String() string { return proto.CompactTextString(m) }
func (*ChannelBackupSubscription) ProtoMessage() {}
func (*ChannelBackupSubscription) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{134}
return fileDescriptor_77a6da22d6a3feb1, []int{141}
}
func (m *ChannelBackupSubscription) XXX_Unmarshal(b []byte) error {
@ -9745,7 +10168,7 @@ func (m *VerifyChanBackupResponse) Reset() { *m = VerifyChanBackupRespon
func (m *VerifyChanBackupResponse) String() string { return proto.CompactTextString(m) }
func (*VerifyChanBackupResponse) ProtoMessage() {}
func (*VerifyChanBackupResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{135}
return fileDescriptor_77a6da22d6a3feb1, []int{142}
}
func (m *VerifyChanBackupResponse) XXX_Unmarshal(b []byte) error {
@ -9780,7 +10203,7 @@ func (m *MacaroonPermission) Reset() { *m = MacaroonPermission{} }
func (m *MacaroonPermission) String() string { return proto.CompactTextString(m) }
func (*MacaroonPermission) ProtoMessage() {}
func (*MacaroonPermission) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{136}
return fileDescriptor_77a6da22d6a3feb1, []int{143}
}
func (m *MacaroonPermission) XXX_Unmarshal(b []byte) error {
@ -9827,7 +10250,7 @@ func (m *BakeMacaroonRequest) Reset() { *m = BakeMacaroonRequest{} }
func (m *BakeMacaroonRequest) String() string { return proto.CompactTextString(m) }
func (*BakeMacaroonRequest) ProtoMessage() {}
func (*BakeMacaroonRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{137}
return fileDescriptor_77a6da22d6a3feb1, []int{144}
}
func (m *BakeMacaroonRequest) XXX_Unmarshal(b []byte) error {
@ -9867,7 +10290,7 @@ func (m *BakeMacaroonResponse) Reset() { *m = BakeMacaroonResponse{} }
func (m *BakeMacaroonResponse) String() string { return proto.CompactTextString(m) }
func (*BakeMacaroonResponse) ProtoMessage() {}
func (*BakeMacaroonResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_77a6da22d6a3feb1, []int{138}
return fileDescriptor_77a6da22d6a3feb1, []int{145}
}
func (m *BakeMacaroonResponse) XXX_Unmarshal(b []byte) error {
@ -9973,6 +10396,13 @@ func init() {
proto.RegisterType((*PendingUpdate)(nil), "lnrpc.PendingUpdate")
proto.RegisterType((*OpenChannelRequest)(nil), "lnrpc.OpenChannelRequest")
proto.RegisterType((*OpenStatusUpdate)(nil), "lnrpc.OpenStatusUpdate")
proto.RegisterType((*KeyLocator)(nil), "lnrpc.KeyLocator")
proto.RegisterType((*KeyDescriptor)(nil), "lnrpc.KeyDescriptor")
proto.RegisterType((*ChanPointShim)(nil), "lnrpc.ChanPointShim")
proto.RegisterType((*FundingShim)(nil), "lnrpc.FundingShim")
proto.RegisterType((*FundingShimCancel)(nil), "lnrpc.FundingShimCancel")
proto.RegisterType((*FundingTransitionMsg)(nil), "lnrpc.FundingTransitionMsg")
proto.RegisterType((*FundingStateStepResp)(nil), "lnrpc.FundingStateStepResp")
proto.RegisterType((*PendingHTLC)(nil), "lnrpc.PendingHTLC")
proto.RegisterType((*PendingChannelsRequest)(nil), "lnrpc.PendingChannelsRequest")
proto.RegisterType((*PendingChannelsResponse)(nil), "lnrpc.PendingChannelsResponse")
@ -10066,600 +10496,620 @@ func init() {
func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) }
var fileDescriptor_77a6da22d6a3feb1 = []byte{
// 9473 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x5d, 0x6c, 0x24, 0x59,
0x96, 0x96, 0xf3, 0xcf, 0xce, 0x3c, 0xf9, 0xe3, 0xf4, 0xf5, 0x5f, 0x56, 0xd6, 0x4f, 0xbb, 0x63,
0x6a, 0xaa, 0xab, 0x6b, 0x7a, 0x5c, 0xd5, 0x9e, 0xee, 0xde, 0xda, 0x6e, 0x76, 0x77, 0x5c, 0xb6,
0xab, 0xec, 0x6e, 0x97, 0xed, 0x0e, 0xbb, 0xba, 0xb6, 0x67, 0x76, 0x15, 0x13, 0xce, 0xbc, 0xb6,
0x63, 0x2a, 0x33, 0x22, 0x3b, 0x22, 0xd2, 0x2e, 0x4f, 0xd3, 0x3c, 0x20, 0x40, 0x88, 0x17, 0x34,
0xac, 0x90, 0x00, 0x81, 0x56, 0x9a, 0x05, 0x21, 0xc4, 0x03, 0xbc, 0x80, 0x16, 0xb4, 0x3c, 0xf1,
0xb0, 0xbc, 0x00, 0x0f, 0x20, 0x21, 0xb1, 0x12, 0x12, 0x5a, 0x1e, 0x58, 0x21, 0xde, 0x80, 0x67,
0x74, 0xcf, 0xfd, 0x89, 0x7b, 0x23, 0x22, 0xab, 0xdc, 0x33, 0xbd, 0xfd, 0x52, 0x95, 0xf7, 0xbb,
0x37, 0xee, 0xef, 0x39, 0xe7, 0x9e, 0x7b, 0xce, 0xb9, 0xd7, 0x50, 0x0b, 0x47, 0xbd, 0xd5, 0x51,
0x18, 0xc4, 0x01, 0xa9, 0x0c, 0xfc, 0x70, 0xd4, 0xeb, 0xde, 0x38, 0x0d, 0x82, 0xd3, 0x01, 0xbd,
0xef, 0x8e, 0xbc, 0xfb, 0xae, 0xef, 0x07, 0xb1, 0x1b, 0x7b, 0x81, 0x1f, 0xf1, 0x42, 0xd6, 0x4f,
0xa0, 0xf5, 0x84, 0xfa, 0x87, 0x94, 0xf6, 0x6d, 0xfa, 0xc5, 0x98, 0x46, 0x31, 0xf9, 0x1e, 0xcc,
0xb9, 0xf4, 0x67, 0x94, 0xf6, 0x9d, 0x91, 0x1b, 0x45, 0xa3, 0xb3, 0xd0, 0x8d, 0x68, 0xa7, 0xb0,
0x52, 0xb8, 0xdb, 0xb0, 0xdb, 0x3c, 0xe3, 0x40, 0xe1, 0xe4, 0x4d, 0x68, 0x44, 0xac, 0x28, 0xf5,
0xe3, 0x30, 0x18, 0x5d, 0x76, 0x8a, 0x58, 0xae, 0xce, 0xb0, 0x2d, 0x0e, 0x59, 0x03, 0x98, 0x55,
0x2d, 0x44, 0xa3, 0xc0, 0x8f, 0x28, 0x79, 0x00, 0x0b, 0x3d, 0x6f, 0x74, 0x46, 0x43, 0x07, 0x3f,
0x1e, 0xfa, 0x74, 0x18, 0xf8, 0x5e, 0xaf, 0x53, 0x58, 0x29, 0xdd, 0xad, 0xd9, 0x84, 0xe7, 0xb1,
0x2f, 0x9e, 0x8a, 0x1c, 0xf2, 0x16, 0xcc, 0x52, 0x9f, 0xe3, 0xb4, 0x8f, 0x5f, 0x89, 0xa6, 0x5a,
0x09, 0xcc, 0x3e, 0xb0, 0xfe, 0x7a, 0x11, 0xe6, 0x76, 0x7c, 0x2f, 0x7e, 0xee, 0x0e, 0x06, 0x34,
0x96, 0x63, 0x7a, 0x0b, 0x66, 0x2f, 0x10, 0xc0, 0x31, 0x5d, 0x04, 0x61, 0x5f, 0x8c, 0xa8, 0xc5,
0xe1, 0x03, 0x81, 0x4e, 0xec, 0x59, 0x71, 0x62, 0xcf, 0x72, 0xa7, 0xab, 0x34, 0x61, 0xba, 0xde,
0x82, 0xd9, 0x90, 0xf6, 0x82, 0x73, 0x1a, 0x5e, 0x3a, 0x17, 0x9e, 0xdf, 0x0f, 0x2e, 0x3a, 0xe5,
0x95, 0xc2, 0xdd, 0x8a, 0xdd, 0x92, 0xf0, 0x73, 0x44, 0xc9, 0x23, 0x98, 0xed, 0x9d, 0xb9, 0xbe,
0x4f, 0x07, 0xce, 0xb1, 0xdb, 0x7b, 0x31, 0x1e, 0x45, 0x9d, 0xca, 0x4a, 0xe1, 0x6e, 0x7d, 0xed,
0xda, 0x2a, 0xae, 0xea, 0xea, 0xc6, 0x99, 0xeb, 0x3f, 0xc2, 0x9c, 0x43, 0xdf, 0x1d, 0x45, 0x67,
0x41, 0x6c, 0xb7, 0xc4, 0x17, 0x1c, 0x8e, 0xac, 0x05, 0x20, 0xfa, 0x4c, 0xf0, 0xb9, 0xb7, 0xfe,
0x69, 0x01, 0xe6, 0x9f, 0xf9, 0x83, 0xa0, 0xf7, 0xe2, 0x97, 0x9c, 0xa2, 0x9c, 0x31, 0x14, 0xaf,
0x3a, 0x86, 0xd2, 0xd7, 0x1d, 0xc3, 0x12, 0x2c, 0x98, 0x9d, 0x15, 0xa3, 0xa0, 0xb0, 0xc8, 0xbe,
0x3e, 0xa5, 0xb2, 0x5b, 0x72, 0x18, 0x6f, 0x43, 0xbb, 0x37, 0x0e, 0x43, 0xea, 0x67, 0xc6, 0x31,
0x2b, 0x70, 0x35, 0x90, 0x37, 0xa1, 0xe1, 0xd3, 0x8b, 0xa4, 0x98, 0xa0, 0x5d, 0x9f, 0x5e, 0xc8,
0x22, 0x56, 0x07, 0x96, 0xd2, 0xcd, 0x88, 0x0e, 0xfc, 0xf7, 0x02, 0x94, 0x9f, 0xc5, 0x2f, 0x03,
0xb2, 0x0a, 0xe5, 0xf8, 0x72, 0xc4, 0x39, 0xa4, 0xb5, 0x46, 0xc4, 0xd0, 0xd6, 0xfb, 0xfd, 0x90,
0x46, 0xd1, 0xd1, 0xe5, 0x88, 0xda, 0x0d, 0x97, 0x27, 0x1c, 0x56, 0x8e, 0x74, 0x60, 0x46, 0xa4,
0xb1, 0xc1, 0x9a, 0x2d, 0x93, 0xe4, 0x16, 0x80, 0x3b, 0x0c, 0xc6, 0x7e, 0xec, 0x44, 0x6e, 0x8c,
0x53, 0x55, 0xb2, 0x35, 0x84, 0xdc, 0x80, 0xda, 0xe8, 0x85, 0x13, 0xf5, 0x42, 0x6f, 0x14, 0x23,
0xd9, 0xd4, 0xec, 0x04, 0x20, 0xdf, 0x83, 0x6a, 0x30, 0x8e, 0x47, 0x81, 0xe7, 0xc7, 0x82, 0x54,
0x66, 0x45, 0x5f, 0xf6, 0xc7, 0xf1, 0x01, 0x83, 0x6d, 0x55, 0x80, 0xdc, 0x86, 0x66, 0x2f, 0xf0,
0x4f, 0xbc, 0x70, 0xc8, 0x85, 0x41, 0x67, 0x1a, 0x5b, 0x33, 0x41, 0xeb, 0x5f, 0x15, 0xa1, 0x7e,
0x14, 0xba, 0x7e, 0xe4, 0xf6, 0x18, 0xc0, 0xba, 0x1e, 0xbf, 0x74, 0xce, 0xdc, 0xe8, 0x0c, 0x47,
0x5b, 0xb3, 0x65, 0x92, 0x2c, 0xc1, 0x34, 0xef, 0x28, 0x8e, 0xa9, 0x64, 0x8b, 0x14, 0x79, 0x07,
0xe6, 0xfc, 0xf1, 0xd0, 0x31, 0xdb, 0x2a, 0x21, 0xb5, 0x64, 0x33, 0xd8, 0x04, 0x1c, 0xb3, 0xb5,
0xe6, 0x4d, 0xf0, 0x11, 0x6a, 0x08, 0xb1, 0xa0, 0x21, 0x52, 0xd4, 0x3b, 0x3d, 0xe3, 0xc3, 0xac,
0xd8, 0x06, 0xc6, 0xea, 0x88, 0xbd, 0x21, 0x75, 0xa2, 0xd8, 0x1d, 0x8e, 0xc4, 0xb0, 0x34, 0x04,
0xf3, 0x83, 0xd8, 0x1d, 0x38, 0x27, 0x94, 0x46, 0x9d, 0x19, 0x91, 0xaf, 0x10, 0x72, 0x07, 0x5a,
0x7d, 0x1a, 0xc5, 0x8e, 0x58, 0x14, 0x1a, 0x75, 0xaa, 0xc8, 0xfa, 0x29, 0x94, 0xd5, 0x13, 0xba,
0x17, 0x0e, 0x9b, 0x00, 0xfa, 0xb2, 0x53, 0xe3, 0x7d, 0x4d, 0x10, 0x46, 0x39, 0x4f, 0x68, 0xac,
0xcd, 0x5e, 0x24, 0x28, 0xd4, 0xda, 0x05, 0xa2, 0xc1, 0x9b, 0x34, 0x76, 0xbd, 0x41, 0x44, 0x3e,
0x80, 0x46, 0xac, 0x15, 0x46, 0x51, 0x58, 0x57, 0xe4, 0xa4, 0x7d, 0x60, 0x1b, 0xe5, 0xac, 0x33,
0xa8, 0x3e, 0xa6, 0x74, 0xd7, 0x1b, 0x7a, 0x31, 0x59, 0x82, 0xca, 0x89, 0xf7, 0x92, 0x72, 0x82,
0x2f, 0x6d, 0x4f, 0xd9, 0x3c, 0x49, 0xde, 0x00, 0xc0, 0x1f, 0xce, 0x50, 0x11, 0xd6, 0xf6, 0x94,
0x5d, 0x43, 0xec, 0x29, 0xa3, 0xac, 0x2e, 0xcc, 0x8c, 0x68, 0xd8, 0xa3, 0x72, 0xfd, 0xb6, 0xa7,
0x6c, 0x09, 0x3c, 0x9a, 0x81, 0xca, 0x80, 0xd5, 0x6e, 0xfd, 0x71, 0x05, 0xea, 0x87, 0xd4, 0x57,
0x9c, 0x46, 0xa0, 0xcc, 0xe6, 0x44, 0x70, 0x17, 0xfe, 0x26, 0xdf, 0x81, 0x3a, 0xce, 0x53, 0x14,
0x87, 0x9e, 0x7f, 0xca, 0x09, 0xfc, 0x51, 0xb1, 0x53, 0xb0, 0x81, 0xc1, 0x87, 0x88, 0x92, 0x36,
0x94, 0xdc, 0xa1, 0x24, 0x70, 0xf6, 0x93, 0x5c, 0x83, 0xaa, 0x3b, 0x8c, 0x79, 0xf7, 0x1a, 0x08,
0xcf, 0xb8, 0xc3, 0x18, 0xbb, 0xf6, 0x26, 0x34, 0x46, 0xee, 0xe5, 0x90, 0xf1, 0xb3, 0xa2, 0x8a,
0x86, 0x5d, 0x17, 0xd8, 0x36, 0x23, 0x8b, 0x35, 0x98, 0xd7, 0x8b, 0xc8, 0xc6, 0x2b, 0xaa, 0xf1,
0x39, 0xad, 0xb4, 0xe8, 0xc3, 0x5b, 0x30, 0x2b, 0xbf, 0x09, 0xf9, 0x78, 0x90, 0x56, 0x6a, 0x76,
0x4b, 0xc0, 0x72, 0x94, 0x77, 0xa1, 0x7d, 0xe2, 0xf9, 0xee, 0xc0, 0xe9, 0x0d, 0xe2, 0x73, 0xa7,
0x4f, 0x07, 0xb1, 0x8b, 0x54, 0x53, 0xb1, 0x5b, 0x88, 0x6f, 0x0c, 0xe2, 0xf3, 0x4d, 0x86, 0x92,
0x77, 0xa0, 0x76, 0x42, 0xa9, 0x83, 0x93, 0xd5, 0xa9, 0x1a, 0x1c, 0x28, 0x57, 0xc8, 0xae, 0x9e,
0xc8, 0xb5, 0x7a, 0x07, 0xda, 0xc1, 0x38, 0x3e, 0x0d, 0x3c, 0xff, 0xd4, 0x61, 0x32, 0xcf, 0xf1,
0xfa, 0x48, 0x45, 0xe5, 0x47, 0xc5, 0x07, 0x05, 0xbb, 0x25, 0xf3, 0x98, 0xf4, 0xd9, 0xe9, 0x93,
0x3b, 0x30, 0x3b, 0x70, 0xa3, 0xd8, 0x39, 0x0b, 0x46, 0xce, 0x68, 0x7c, 0xfc, 0x82, 0x5e, 0x76,
0x9a, 0x38, 0x11, 0x4d, 0x06, 0x6f, 0x07, 0xa3, 0x03, 0x04, 0xc9, 0x4d, 0x00, 0xec, 0x27, 0xef,
0x04, 0xac, 0x14, 0xee, 0x36, 0xed, 0x1a, 0x43, 0x78, 0xa3, 0x9f, 0xc3, 0x3c, 0x2e, 0x4f, 0x6f,
0x1c, 0xc5, 0xc1, 0xd0, 0x61, 0xf2, 0x3a, 0xec, 0x47, 0x9d, 0x3a, 0xd2, 0xda, 0xdb, 0xa2, 0xb3,
0xda, 0x1a, 0xaf, 0x6e, 0xd2, 0x28, 0xde, 0xc0, 0xc2, 0x36, 0x2f, 0xcb, 0x36, 0xf5, 0x4b, 0x7b,
0xae, 0x9f, 0xc6, 0xc9, 0x3b, 0x40, 0xdc, 0xc1, 0x20, 0xb8, 0x70, 0x22, 0x3a, 0x38, 0x71, 0xc4,
0x24, 0x76, 0x5a, 0x2b, 0x85, 0xbb, 0x55, 0xbb, 0x8d, 0x39, 0x87, 0x74, 0x70, 0x72, 0xc0, 0x71,
0xf2, 0x01, 0x34, 0xb1, 0x23, 0x27, 0xd4, 0x8d, 0xc7, 0x21, 0x8d, 0x3a, 0xb3, 0x2b, 0xa5, 0xbb,
0xad, 0xb5, 0x39, 0x35, 0x5f, 0x08, 0x3f, 0xf2, 0x62, 0xbb, 0xc1, 0xca, 0x89, 0x74, 0xd4, 0xdd,
0x84, 0xa5, 0xfc, 0x2e, 0x31, 0xa2, 0x62, 0xb3, 0xc2, 0x88, 0xb1, 0x6c, 0xb3, 0x9f, 0x64, 0x01,
0x2a, 0xe7, 0xee, 0x60, 0x4c, 0x85, 0x5c, 0xe7, 0x89, 0x0f, 0x8b, 0x0f, 0x0b, 0xd6, 0x1f, 0x16,
0xa0, 0xc1, 0x47, 0x29, 0xf4, 0x91, 0xdb, 0xd0, 0x94, 0xd4, 0x40, 0xc3, 0x30, 0x08, 0x85, 0x78,
0x33, 0x41, 0x72, 0x0f, 0xda, 0x12, 0x18, 0x85, 0xd4, 0x1b, 0xba, 0xa7, 0xb2, 0xee, 0x0c, 0x4e,
0xd6, 0x92, 0x1a, 0xc3, 0x60, 0x1c, 0x53, 0xb1, 0xf3, 0x35, 0xc4, 0x00, 0x6d, 0x86, 0xd9, 0x66,
0x11, 0x26, 0xde, 0x72, 0x48, 0xdd, 0xc0, 0xac, 0xbf, 0x5d, 0x00, 0xc2, 0xba, 0x7e, 0x14, 0xf0,
0x2a, 0x04, 0x95, 0xa6, 0xb9, 0xa4, 0x70, 0x65, 0x2e, 0x29, 0xbe, 0x8a, 0x4b, 0x2c, 0xa8, 0xf0,
0xde, 0x97, 0x73, 0x7a, 0xcf, 0xb3, 0x3e, 0x2e, 0x57, 0x4b, 0xed, 0xb2, 0xf5, 0x5f, 0x4b, 0xb0,
0xb0, 0xc1, 0xb7, 0xee, 0xf5, 0x5e, 0x8f, 0x8e, 0x14, 0xff, 0xbc, 0x01, 0x75, 0x3f, 0xe8, 0x53,
0x49, 0xb5, 0xbc, 0x63, 0xc0, 0x20, 0x8d, 0x64, 0xcf, 0x5c, 0xcf, 0xe7, 0x1d, 0xe7, 0xf3, 0x59,
0x43, 0x04, 0xbb, 0x7d, 0x07, 0x66, 0x47, 0xd4, 0xef, 0xeb, 0x6c, 0xc2, 0x95, 0xab, 0xa6, 0x80,
0x05, 0x87, 0xbc, 0x01, 0xf5, 0x93, 0x31, 0x2f, 0xc7, 0x84, 0x4b, 0x19, 0xe9, 0x00, 0x04, 0xb4,
0xce, 0x65, 0xcc, 0x68, 0x1c, 0x9d, 0x61, 0x6e, 0x05, 0x73, 0x67, 0x58, 0x9a, 0x65, 0xdd, 0x04,
0xe8, 0x8f, 0xa3, 0x58, 0x70, 0xcd, 0x34, 0x66, 0xd6, 0x18, 0xc2, 0xb9, 0xe6, 0xfb, 0x30, 0x3f,
0x74, 0x5f, 0x3a, 0x48, 0x3f, 0x8e, 0xe7, 0x3b, 0x27, 0x03, 0xdc, 0x7d, 0x66, 0xb0, 0x5c, 0x7b,
0xe8, 0xbe, 0xfc, 0x8c, 0xe5, 0xec, 0xf8, 0x8f, 0x11, 0x67, 0xa2, 0x45, 0xaa, 0x3d, 0x21, 0x8d,
0x68, 0x78, 0x4e, 0x51, 0x1a, 0x94, 0x95, 0x6e, 0x63, 0x73, 0x94, 0xf5, 0x68, 0xc8, 0xc6, 0x1d,
0x0f, 0x7a, 0x9c, 0xf5, 0xed, 0x99, 0xa1, 0xe7, 0x6f, 0xc7, 0x83, 0x1e, 0xb9, 0x01, 0xc0, 0x64,
0xc9, 0x88, 0x86, 0xce, 0x8b, 0x0b, 0xe4, 0xe3, 0x32, 0xca, 0x8e, 0x03, 0x1a, 0x7e, 0x72, 0x41,
0xae, 0x43, 0xad, 0x17, 0xa1, 0x30, 0x72, 0x2f, 0x3b, 0x75, 0x64, 0xf2, 0x6a, 0x2f, 0x62, 0x62,
0xc8, 0xbd, 0x64, 0x8c, 0xc8, 0x7a, 0xeb, 0xe2, 0x2a, 0xd0, 0x3e, 0x56, 0x1f, 0xa1, 0x54, 0x6d,
0x62, 0x67, 0xd7, 0x45, 0x06, 0x6b, 0x27, 0x22, 0xdf, 0x81, 0xa6, 0xec, 0xec, 0xc9, 0xc0, 0x3d,
0x8d, 0x50, 0xac, 0x34, 0xed, 0x86, 0x00, 0x1f, 0x33, 0xcc, 0x7a, 0xce, 0x95, 0x2d, 0x6d, 0x6d,
0x05, 0xdf, 0xb0, 0x6d, 0x1f, 0x11, 0x5c, 0xd7, 0xaa, 0x2d, 0x52, 0x79, 0x8b, 0x56, 0xcc, 0x59,
0x34, 0xeb, 0x17, 0x05, 0x68, 0x88, 0x9a, 0x51, 0x43, 0x21, 0x0f, 0x80, 0xc8, 0x55, 0x8c, 0x5f,
0x7a, 0x7d, 0xe7, 0xf8, 0x32, 0xa6, 0x11, 0x27, 0x9a, 0xed, 0x29, 0x3b, 0x27, 0x8f, 0xc9, 0x51,
0x03, 0x8d, 0xe2, 0x90, 0xd3, 0xf4, 0xf6, 0x94, 0x9d, 0xc9, 0x61, 0x2c, 0xc6, 0x74, 0xa0, 0x71,
0xec, 0x78, 0x7e, 0x9f, 0xbe, 0x44, 0x52, 0x6a, 0xda, 0x06, 0xf6, 0xa8, 0x05, 0x0d, 0xfd, 0x3b,
0xeb, 0xa7, 0x50, 0x95, 0x1a, 0x14, 0x6a, 0x0f, 0xa9, 0x7e, 0xd9, 0x1a, 0x42, 0xba, 0x50, 0x35,
0x7b, 0x61, 0x57, 0xbf, 0x4e, 0xdb, 0xd6, 0x6f, 0x42, 0x7b, 0x97, 0x11, 0x91, 0xcf, 0x88, 0x56,
0xa8, 0x85, 0x4b, 0x30, 0xad, 0x31, 0x4f, 0xcd, 0x16, 0x29, 0xb6, 0xff, 0x9e, 0x05, 0x51, 0x2c,
0xda, 0xc1, 0xdf, 0xd6, 0x1f, 0x17, 0x80, 0x6c, 0x45, 0xb1, 0x37, 0x74, 0x63, 0xfa, 0x98, 0x2a,
0xf1, 0xb0, 0x0f, 0x0d, 0x56, 0xdb, 0x51, 0xb0, 0xce, 0x95, 0x34, 0xae, 0x5c, 0x7c, 0x4f, 0xb0,
0x73, 0xf6, 0x83, 0x55, 0xbd, 0x34, 0x17, 0xf9, 0x46, 0x05, 0x8c, 0xdb, 0x62, 0x37, 0x3c, 0xa5,
0x31, 0x6a, 0x70, 0x42, 0xff, 0x07, 0x0e, 0x6d, 0x04, 0xfe, 0x49, 0xf7, 0xb7, 0x60, 0x2e, 0x53,
0x87, 0x2e, 0xa3, 0x6b, 0x39, 0x32, 0xba, 0xa4, 0xcb, 0xe8, 0x1e, 0xcc, 0x1b, 0xfd, 0x12, 0x14,
0xd7, 0x81, 0x19, 0xc6, 0x18, 0x4c, 0x51, 0x28, 0x70, 0x45, 0x41, 0x24, 0xc9, 0x1a, 0x2c, 0x9c,
0x50, 0x1a, 0xba, 0x31, 0x26, 0x91, 0x75, 0xd8, 0x9a, 0x88, 0x9a, 0x73, 0xf3, 0xac, 0x3f, 0x2d,
0xc0, 0x2c, 0x93, 0xa6, 0x4f, 0x5d, 0xff, 0x52, 0xce, 0xd5, 0x6e, 0xee, 0x5c, 0xdd, 0xd5, 0x36,
0x47, 0xad, 0xf4, 0xd7, 0x9d, 0xa8, 0x52, 0x7a, 0xa2, 0xc8, 0x0a, 0x34, 0x8c, 0xee, 0x56, 0xb8,
0x46, 0x1a, 0xb9, 0xf1, 0x01, 0x0d, 0x1f, 0x5d, 0xc6, 0xf4, 0x57, 0x9f, 0xca, 0x3b, 0xd0, 0x4e,
0xba, 0x2d, 0xe6, 0x91, 0x40, 0x99, 0x11, 0xa6, 0xa8, 0x00, 0x7f, 0x5b, 0x7f, 0xbf, 0xc0, 0x0b,
0x6e, 0x04, 0x9e, 0xd2, 0x56, 0x59, 0x41, 0xa6, 0xf4, 0xca, 0x82, 0xec, 0xf7, 0x44, 0x6d, 0xff,
0x57, 0x1f, 0x2c, 0x93, 0x89, 0x11, 0xf5, 0xfb, 0x8e, 0x3b, 0x18, 0xa0, 0x20, 0xae, 0xda, 0x33,
0x2c, 0xbd, 0x3e, 0x18, 0x58, 0x6f, 0xc1, 0x9c, 0xd6, 0xbb, 0x57, 0x8c, 0x63, 0x0f, 0xc8, 0xae,
0x17, 0xc5, 0xcf, 0xfc, 0x68, 0xa4, 0x29, 0x72, 0xd7, 0xa1, 0xc6, 0xa4, 0x2d, 0xeb, 0x19, 0xe7,
0xdc, 0x8a, 0xcd, 0xc4, 0x2f, 0xeb, 0x57, 0x84, 0x99, 0xee, 0x4b, 0x91, 0x59, 0x14, 0x99, 0xee,
0x4b, 0xcc, 0xb4, 0x1e, 0xc2, 0xbc, 0x51, 0x9f, 0x68, 0xfa, 0x4d, 0xa8, 0x8c, 0xe3, 0x97, 0x81,
0x54, 0xd5, 0xeb, 0x82, 0x42, 0xd8, 0xa1, 0xd0, 0xe6, 0x39, 0xd6, 0x47, 0x30, 0xb7, 0x47, 0x2f,
0x04, 0x23, 0xcb, 0x8e, 0xdc, 0x79, 0xed, 0x81, 0x11, 0xf3, 0xad, 0x55, 0x20, 0xfa, 0xc7, 0x09,
0x03, 0xc8, 0xe3, 0x63, 0xc1, 0x38, 0x3e, 0x5a, 0x77, 0x80, 0x1c, 0x7a, 0xa7, 0xfe, 0x53, 0x1a,
0x45, 0xee, 0xa9, 0x62, 0xfd, 0x36, 0x94, 0x86, 0xd1, 0xa9, 0x10, 0x55, 0xec, 0xa7, 0xf5, 0x03,
0x98, 0x37, 0xca, 0x89, 0x8a, 0x6f, 0x40, 0x2d, 0xf2, 0x4e, 0x7d, 0x54, 0xb4, 0x44, 0xd5, 0x09,
0x60, 0x3d, 0x86, 0x85, 0xcf, 0x68, 0xe8, 0x9d, 0x5c, 0xbe, 0xae, 0x7a, 0xb3, 0x9e, 0x62, 0xba,
0x9e, 0x2d, 0x58, 0x4c, 0xd5, 0x23, 0x9a, 0xe7, 0xe4, 0x2b, 0x56, 0xb2, 0x6a, 0xf3, 0x84, 0x26,
0xfb, 0x8a, 0xba, 0xec, 0xb3, 0x9e, 0x01, 0xd9, 0x08, 0x7c, 0x9f, 0xf6, 0xe2, 0x03, 0x4a, 0xc3,
0xc4, 0x72, 0x95, 0xd0, 0x6a, 0x7d, 0x6d, 0x59, 0xcc, 0x6c, 0x5a, 0xa0, 0x0a, 0x22, 0x26, 0x50,
0x1e, 0xd1, 0x70, 0x88, 0x15, 0x57, 0x6d, 0xfc, 0x6d, 0x2d, 0xc2, 0xbc, 0x51, 0xad, 0x38, 0xeb,
0xbf, 0x0b, 0x8b, 0x9b, 0x5e, 0xd4, 0xcb, 0x36, 0xd8, 0x81, 0x99, 0xd1, 0xf8, 0xd8, 0x49, 0x38,
0x51, 0x26, 0xd9, 0xf1, 0x2f, 0xfd, 0x89, 0xa8, 0xec, 0xaf, 0x15, 0xa0, 0xbc, 0x7d, 0xb4, 0xbb,
0xc1, 0xf6, 0x0a, 0xcf, 0xef, 0x05, 0x43, 0xa6, 0x85, 0xf1, 0x41, 0xab, 0xf4, 0x44, 0x0e, 0xbb,
0x01, 0x35, 0x54, 0xde, 0xd8, 0x89, 0x57, 0xe8, 0x41, 0x09, 0xc0, 0x4e, 0xdb, 0xf4, 0xe5, 0xc8,
0x0b, 0xf1, 0x38, 0x2d, 0x0f, 0xc9, 0x65, 0xdc, 0x66, 0xb2, 0x19, 0xd6, 0xbf, 0x9b, 0x81, 0x19,
0xb1, 0xf9, 0xf2, 0x8d, 0x3c, 0xf6, 0xce, 0x69, 0xb2, 0x91, 0xb3, 0x14, 0x53, 0x8c, 0x43, 0x3a,
0x0c, 0x62, 0xa5, 0xbf, 0xf1, 0x65, 0x30, 0x41, 0xb4, 0x26, 0x08, 0x25, 0x82, 0xdb, 0x1f, 0x4a,
0xbc, 0x94, 0x01, 0x92, 0x1b, 0x30, 0x23, 0x95, 0x81, 0xb2, 0x3a, 0xe8, 0x48, 0x88, 0xcd, 0x46,
0xcf, 0x1d, 0xb9, 0x3d, 0x2f, 0xbe, 0x14, 0x62, 0x41, 0xa5, 0x59, 0xfd, 0x83, 0xa0, 0xe7, 0x0e,
0x9c, 0x63, 0x77, 0xe0, 0xfa, 0x3d, 0x2a, 0xad, 0x15, 0x06, 0xc8, 0x4e, 0xee, 0xa2, 0x5b, 0xb2,
0x18, 0x3f, 0xdd, 0xa7, 0x50, 0xb6, 0x87, 0xf7, 0x82, 0xe1, 0xd0, 0x63, 0xa7, 0x0f, 0xae, 0x9a,
0x95, 0x6c, 0x0d, 0xe1, 0xb6, 0x11, 0x4c, 0x5d, 0xf0, 0x19, 0xac, 0x49, 0xdb, 0x88, 0x06, 0xb2,
0x5a, 0x52, 0x1a, 0x5a, 0xc9, 0xd6, 0x10, 0xb6, 0x16, 0x63, 0x3f, 0xa2, 0x71, 0x3c, 0xa0, 0x7d,
0xd5, 0xa1, 0x3a, 0x16, 0xcb, 0x66, 0x90, 0x07, 0x30, 0xcf, 0x6d, 0x10, 0x91, 0x1b, 0x07, 0xd1,
0x99, 0x17, 0x39, 0x11, 0x3b, 0x3e, 0xf1, 0xb3, 0x70, 0x5e, 0x16, 0x79, 0x08, 0xcb, 0x29, 0x38,
0xa4, 0x3d, 0xea, 0x9d, 0xd3, 0x3e, 0xaa, 0x70, 0x25, 0x7b, 0x52, 0x36, 0x59, 0x81, 0xba, 0x3f,
0x1e, 0x3a, 0xe3, 0x51, 0xdf, 0x65, 0x4a, 0x4c, 0x0b, 0x95, 0x4b, 0x1d, 0x22, 0xef, 0x82, 0xd4,
0xd3, 0x84, 0xf6, 0x38, 0x6b, 0x48, 0x38, 0x46, 0xbd, 0xb6, 0x59, 0x82, 0x11, 0x66, 0xa2, 0x92,
0xb6, 0xc5, 0xb9, 0x53, 0x02, 0xc8, 0x27, 0xa1, 0x77, 0xee, 0xc6, 0xb4, 0x33, 0xc7, 0x85, 0xba,
0x48, 0xb2, 0xef, 0x3c, 0xdf, 0x8b, 0x3d, 0x37, 0x0e, 0xc2, 0x0e, 0xc1, 0xbc, 0x04, 0x60, 0x93,
0x88, 0xf4, 0x11, 0xc5, 0x6e, 0x3c, 0x8e, 0x84, 0x86, 0x3a, 0x8f, 0xc4, 0x95, 0xcd, 0x20, 0x1f,
0xc0, 0x12, 0xa7, 0x08, 0xcc, 0x12, 0xba, 0x37, 0xaa, 0x0a, 0x0b, 0x38, 0x23, 0x13, 0x72, 0xd9,
0x54, 0x0a, 0x12, 0xc9, 0x7c, 0xb8, 0xc8, 0xa7, 0x72, 0x42, 0x36, 0xeb, 0x1f, 0xeb, 0x81, 0xd7,
0x73, 0x44, 0x09, 0xc6, 0x22, 0x4b, 0x38, 0x8a, 0x6c, 0x06, 0x23, 0xf1, 0x81, 0x77, 0x42, 0x63,
0x6f, 0x48, 0x3b, 0xcb, 0x9c, 0xc4, 0x65, 0x9a, 0x31, 0xe0, 0x78, 0x84, 0x39, 0x1d, 0xce, 0xf0,
0x3c, 0x85, 0xc4, 0x38, 0x08, 0x22, 0x2a, 0x2d, 0x4f, 0x9d, 0x6b, 0x82, 0xb5, 0x74, 0xd0, 0xfa,
0xfd, 0x02, 0xdf, 0xa2, 0x04, 0x3b, 0x47, 0xda, 0xe1, 0x8b, 0x33, 0xb2, 0x13, 0xf8, 0x83, 0x4b,
0xc1, 0xdb, 0xc0, 0xa1, 0x7d, 0x7f, 0x70, 0xc9, 0xd4, 0x7f, 0xcf, 0xd7, 0x8b, 0x70, 0x69, 0xd8,
0x90, 0x20, 0x16, 0x7a, 0x03, 0xea, 0xa3, 0xf1, 0xf1, 0xc0, 0xeb, 0xf1, 0x22, 0x25, 0x5e, 0x0b,
0x87, 0xb0, 0x00, 0x3b, 0x7d, 0xf2, 0xf5, 0xe4, 0x25, 0xca, 0x58, 0xa2, 0x2e, 0x30, 0x56, 0xc4,
0x7a, 0x04, 0x0b, 0x66, 0x07, 0x85, 0xd8, 0xbf, 0x07, 0x55, 0x21, 0x25, 0xa4, 0x19, 0xa2, 0xa5,
0x19, 0x87, 0xd9, 0x61, 0x49, 0xe5, 0x5b, 0xff, 0xba, 0x0c, 0xf3, 0x02, 0xdd, 0x60, 0xc3, 0x3f,
0x1c, 0x0f, 0x87, 0x6e, 0x98, 0x23, 0x7e, 0x0a, 0xaf, 0x11, 0x3f, 0xc5, 0xac, 0xf8, 0xb9, 0x65,
0x9c, 0x42, 0xb9, 0xfc, 0xd2, 0x10, 0x72, 0x17, 0x66, 0xd9, 0x94, 0xf3, 0x43, 0x81, 0x6e, 0x9f,
0x4c, 0xc3, 0x59, 0x91, 0x59, 0xc9, 0x13, 0x99, 0xba, 0xb8, 0x9b, 0x4e, 0x89, 0x3b, 0x0b, 0x1a,
0x7c, 0x79, 0x85, 0x04, 0x9f, 0x11, 0x47, 0x32, 0x0d, 0x63, 0xfd, 0x49, 0x0b, 0x17, 0x2e, 0xc9,
0x66, 0xf3, 0x44, 0x8b, 0x37, 0xa4, 0xb8, 0x43, 0x68, 0xa5, 0x6b, 0x42, 0xb4, 0x64, 0xb3, 0xc8,
0x63, 0x00, 0xde, 0x16, 0xaa, 0x29, 0x80, 0x6a, 0xca, 0x1d, 0x73, 0x55, 0xf4, 0xf9, 0x5f, 0x65,
0x89, 0x71, 0x48, 0x51, 0x75, 0xd1, 0xbe, 0xb4, 0xfe, 0x46, 0x01, 0xea, 0x5a, 0x1e, 0x59, 0x84,
0xb9, 0x8d, 0xfd, 0xfd, 0x83, 0x2d, 0x7b, 0xfd, 0x68, 0xe7, 0xb3, 0x2d, 0x67, 0x63, 0x77, 0xff,
0x70, 0xab, 0x3d, 0xc5, 0xe0, 0xdd, 0xfd, 0x8d, 0xf5, 0x5d, 0xe7, 0xf1, 0xbe, 0xbd, 0x21, 0xe1,
0x02, 0x59, 0x02, 0x62, 0x6f, 0x3d, 0xdd, 0x3f, 0xda, 0x32, 0xf0, 0x22, 0x69, 0x43, 0xe3, 0x91,
0xbd, 0xb5, 0xbe, 0xb1, 0x2d, 0x90, 0x12, 0x59, 0x80, 0xf6, 0xe3, 0x67, 0x7b, 0x9b, 0x3b, 0x7b,
0x4f, 0x9c, 0x8d, 0xf5, 0xbd, 0x8d, 0xad, 0xdd, 0xad, 0xcd, 0x76, 0x99, 0x34, 0xa1, 0xb6, 0xfe,
0x68, 0x7d, 0x6f, 0x73, 0x7f, 0x6f, 0x6b, 0xb3, 0x5d, 0xb1, 0xfe, 0x5b, 0x01, 0x16, 0xb1, 0xd7,
0xfd, 0x34, 0x93, 0xac, 0x40, 0xbd, 0x17, 0x04, 0x23, 0x76, 0x3c, 0x48, 0x36, 0x40, 0x1d, 0x62,
0x0c, 0xc0, 0x45, 0xc7, 0x49, 0x10, 0xf6, 0xa8, 0xe0, 0x11, 0x40, 0xe8, 0x31, 0x43, 0x18, 0x03,
0x88, 0xe5, 0xe5, 0x25, 0x38, 0x8b, 0xd4, 0x39, 0xc6, 0x8b, 0x2c, 0xc1, 0xf4, 0x71, 0x48, 0xdd,
0xde, 0x99, 0xe0, 0x0e, 0x91, 0x22, 0x6f, 0x27, 0xe7, 0xd7, 0x1e, 0x9b, 0xfd, 0x01, 0xed, 0x23,
0xc5, 0x54, 0xed, 0x59, 0x81, 0x6f, 0x08, 0x98, 0xc9, 0x4a, 0xf7, 0xd8, 0xf5, 0xfb, 0x81, 0x4f,
0xfb, 0x42, 0x39, 0x4e, 0x00, 0xeb, 0x00, 0x96, 0xd2, 0xe3, 0x13, 0x3c, 0xf6, 0x81, 0xc6, 0x63,
0x5c, 0x57, 0xed, 0x4e, 0x5e, 0x4d, 0x8d, 0xdf, 0xfe, 0xb4, 0x04, 0x65, 0xa6, 0xba, 0x4c, 0x56,
0x73, 0x74, 0x6d, 0xb4, 0x94, 0x71, 0x66, 0xe0, 0x91, 0x98, 0x6f, 0x64, 0xc2, 0x1c, 0x93, 0x20,
0x49, 0x7e, 0x48, 0x7b, 0xe7, 0xc2, 0x20, 0xa3, 0x21, 0x8c, 0x41, 0xd8, 0x51, 0x01, 0xbf, 0x16,
0x0c, 0x22, 0xd3, 0x32, 0x0f, 0xbf, 0x9c, 0x49, 0xf2, 0xf0, 0xbb, 0x0e, 0xcc, 0x78, 0xfe, 0x71,
0x30, 0xf6, 0xfb, 0xc8, 0x10, 0x55, 0x5b, 0x26, 0xd1, 0x7d, 0x82, 0x8c, 0xca, 0xa4, 0x2c, 0x27,
0xff, 0x04, 0x20, 0x6b, 0x50, 0x8b, 0x2e, 0xfd, 0x9e, 0x4e, 0xf3, 0x0b, 0x62, 0x96, 0xd8, 0x1c,
0xac, 0x1e, 0x5e, 0xfa, 0x3d, 0xa4, 0xf0, 0xa4, 0x18, 0x79, 0x1f, 0xaa, 0xca, 0x80, 0xc9, 0x85,
0xd7, 0x35, 0xfd, 0x13, 0x69, 0xb5, 0xe4, 0xe7, 0x42, 0x55, 0xb4, 0xfb, 0x09, 0x34, 0x8d, 0x2c,
0xfd, 0x30, 0xd7, 0xe4, 0x87, 0xb9, 0xdb, 0xfa, 0x61, 0x2e, 0x91, 0x89, 0xe2, 0x33, 0xfd, 0x70,
0xf7, 0x5b, 0x50, 0x95, 0x5d, 0x63, 0xac, 0xf1, 0x6c, 0xef, 0x93, 0xbd, 0xfd, 0xe7, 0x7b, 0xce,
0xe1, 0xe7, 0x7b, 0x1b, 0xed, 0x29, 0x32, 0x0b, 0xf5, 0xf5, 0x0d, 0xe4, 0x36, 0x04, 0x0a, 0xac,
0xc8, 0xc1, 0xfa, 0xe1, 0xa1, 0x42, 0x8a, 0x16, 0x81, 0x36, 0x93, 0xcc, 0xac, 0xc7, 0xca, 0x45,
0xf1, 0x01, 0xcc, 0x69, 0x58, 0x72, 0xde, 0x19, 0x31, 0x20, 0x75, 0xde, 0x41, 0xe5, 0x96, 0xe7,
0x58, 0xcb, 0xb0, 0xc8, 0x92, 0x5b, 0xe7, 0xd4, 0x8f, 0x0f, 0xc7, 0xc7, 0xdc, 0x33, 0xe5, 0x05,
0xbe, 0xf5, 0x57, 0x0b, 0x50, 0x53, 0x39, 0xaf, 0xa0, 0x27, 0xe9, 0x4c, 0x2b, 0xe2, 0x02, 0x74,
0xb5, 0x26, 0xf0, 0xcb, 0x55, 0xfc, 0xd7, 0x38, 0x23, 0xd5, 0x14, 0xc4, 0x06, 0x7b, 0xb0, 0xb5,
0x65, 0x3b, 0xfb, 0x7b, 0xbb, 0x3b, 0x7b, 0x4c, 0xb2, 0xb0, 0xc1, 0x22, 0xf0, 0xf8, 0x31, 0x22,
0x05, 0xab, 0x0d, 0xad, 0x27, 0x34, 0xde, 0xf1, 0x4f, 0x02, 0x39, 0xd4, 0xff, 0x57, 0x81, 0x59,
0x05, 0x25, 0x67, 0xac, 0x73, 0x1a, 0x46, 0x5e, 0xe0, 0xa3, 0x76, 0x54, 0xb3, 0x65, 0x92, 0x89,
0x5d, 0xaf, 0x4f, 0xfd, 0xd8, 0x8b, 0x2f, 0x1d, 0xc3, 0x28, 0x93, 0x86, 0xd9, 0x79, 0xc6, 0x1d,
0x78, 0xae, 0x74, 0xf2, 0xf1, 0x04, 0x43, 0x7b, 0xc1, 0x20, 0x08, 0x51, 0x0d, 0xaa, 0xd9, 0x3c,
0x41, 0xd6, 0x60, 0x81, 0xa9, 0x5f, 0xba, 0xc9, 0x0c, 0x99, 0x95, 0x5b, 0x88, 0x72, 0xf3, 0x98,
0x58, 0x67, 0xb8, 0xd8, 0xbb, 0xd5, 0x27, 0x5c, 0xdb, 0xcf, 0xcb, 0x22, 0xef, 0xc1, 0x22, 0x83,
0xd5, 0x7e, 0xaf, 0xbe, 0x99, 0xc5, 0x6f, 0xf2, 0x33, 0x19, 0xd7, 0xf0, 0xf6, 0xd9, 0xca, 0x57,
0xb8, 0x62, 0xa7, 0x80, 0x8c, 0x47, 0x6e, 0x9a, 0x6f, 0x55, 0x69, 0x8f, 0x9c, 0xe6, 0xd5, 0xab,
0x66, 0xbc, 0x7a, 0xef, 0xc1, 0xe2, 0x31, 0x8d, 0x62, 0xe7, 0x8c, 0xba, 0x7d, 0x1a, 0x22, 0x37,
0x72, 0xe7, 0x1d, 0xd7, 0x63, 0xf3, 0x33, 0x71, 0x03, 0xbc, 0xf4, 0x7b, 0xb4, 0xef, 0xc4, 0x81,
0x83, 0x1b, 0x35, 0xf2, 0x74, 0xd5, 0x4e, 0xc3, 0x66, 0xc9, 0xd3, 0xd0, 0x1d, 0x9d, 0x09, 0x45,
0x33, 0x0d, 0x33, 0x15, 0x21, 0xa6, 0x51, 0xec, 0x53, 0xee, 0x3a, 0xa9, 0xa2, 0x59, 0x5c, 0x42,
0xe4, 0x36, 0x4c, 0x63, 0x85, 0x51, 0xa7, 0x8d, 0x0c, 0xd0, 0x48, 0x84, 0xa8, 0xe7, 0xdb, 0x22,
0x8f, 0x1d, 0x2b, 0xc7, 0xa1, 0x17, 0x75, 0x1a, 0xe8, 0x35, 0xc4, 0xdf, 0xe4, 0x87, 0x9a, 0x9c,
0x98, 0xc7, 0x6f, 0x6f, 0x8b, 0x6f, 0x53, 0x94, 0xf7, 0xad, 0x88, 0x8c, 0x8f, 0xcb, 0xd5, 0x7a,
0xbb, 0x61, 0xfd, 0x1a, 0x54, 0xb0, 0xe7, 0x48, 0x93, 0x38, 0x7f, 0x05, 0x41, 0x93, 0x88, 0x76,
0x60, 0xc6, 0xa7, 0xf1, 0x45, 0x10, 0xbe, 0x90, 0x6e, 0x6a, 0x91, 0xb4, 0x7e, 0x86, 0x67, 0x6f,
0xe5, 0xb6, 0x7d, 0x86, 0x87, 0x06, 0x72, 0x1d, 0x6a, 0x7c, 0x4d, 0xa3, 0x33, 0x57, 0x98, 0x03,
0xaa, 0x08, 0x1c, 0x9e, 0xb9, 0x6c, 0x7f, 0x34, 0xc8, 0x84, 0x5b, 0x58, 0xea, 0x88, 0x6d, 0x73,
0x2a, 0xb9, 0x0d, 0x2d, 0xe9, 0x10, 0x8e, 0x9c, 0x01, 0x3d, 0x89, 0xa5, 0x7d, 0xd4, 0x1f, 0x0f,
0xd1, 0x0c, 0xb3, 0x4b, 0x4f, 0x62, 0x6b, 0x0f, 0xe6, 0xc4, 0x9e, 0xb5, 0x3f, 0xa2, 0xb2, 0xe9,
0x5f, 0xcf, 0xd3, 0xff, 0xea, 0x6b, 0xf3, 0xe6, 0x26, 0xc7, 0x5d, 0xe0, 0x66, 0x49, 0xcb, 0x06,
0xa2, 0xef, 0x81, 0xa2, 0x42, 0xa1, 0x80, 0x49, 0x0b, 0xb0, 0x18, 0x8e, 0x81, 0xb1, 0xf9, 0x89,
0xc6, 0xbd, 0x9e, 0x74, 0xe3, 0x57, 0x6d, 0x99, 0xb4, 0xfe, 0x73, 0x01, 0xe6, 0xb1, 0x36, 0xa9,
0xc1, 0x0a, 0x3d, 0xe3, 0xe1, 0xd7, 0xe8, 0xa6, 0xb4, 0xbf, 0x73, 0xab, 0xf3, 0x02, 0x54, 0x74,
0xcd, 0x83, 0x27, 0xbe, 0xbe, 0xb5, 0xad, 0x9c, 0xb1, 0xb6, 0xdd, 0x83, 0x76, 0x9f, 0x0e, 0x3c,
0x0c, 0xe5, 0x90, 0xfb, 0x38, 0x57, 0x57, 0x33, 0xb8, 0xf5, 0x77, 0x0a, 0x30, 0xc7, 0x15, 0x05,
0x3c, 0x73, 0x89, 0xa9, 0xfa, 0x0b, 0xf2, 0x7c, 0x22, 0x04, 0x94, 0x18, 0x54, 0xb2, 0x75, 0x22,
0xca, 0x0b, 0x6f, 0x4f, 0xd9, 0x66, 0x61, 0xf2, 0x11, 0x6a, 0xdd, 0xbe, 0x83, 0x68, 0x4e, 0x70,
0x88, 0xb9, 0x2e, 0xdb, 0x53, 0xb6, 0x56, 0xfc, 0x51, 0x95, 0x1d, 0x99, 0x18, 0x6e, 0x3d, 0x81,
0xa6, 0xd1, 0x90, 0x61, 0x15, 0x6c, 0x70, 0xab, 0x60, 0xc6, 0xfc, 0x5e, 0xcc, 0x31, 0xbf, 0xff,
0x49, 0x09, 0x08, 0x23, 0xac, 0xd4, 0xca, 0xad, 0x98, 0x3e, 0x2c, 0x19, 0x27, 0x92, 0x40, 0x64,
0x0d, 0x88, 0x96, 0x94, 0xbe, 0xb5, 0x92, 0xf2, 0xad, 0xe5, 0xe4, 0x32, 0xa9, 0x2f, 0xb4, 0x4a,
0xe5, 0xb7, 0x42, 0x8b, 0x0f, 0x5f, 0xa6, 0xdc, 0x3c, 0xa6, 0xf9, 0xa0, 0x13, 0x8b, 0x9d, 0x4d,
0x85, 0x95, 0x44, 0xa6, 0xd3, 0xf4, 0x30, 0xfd, 0x5a, 0x7a, 0x98, 0xc9, 0xd0, 0x83, 0x76, 0x4e,
0xaf, 0x9a, 0xe7, 0xf4, 0xdb, 0xd0, 0x94, 0xbe, 0x2a, 0xee, 0xa6, 0x17, 0x46, 0x11, 0x03, 0x64,
0xf4, 0x24, 0x8f, 0xca, 0xca, 0x18, 0xc0, 0x9d, 0xd0, 0x19, 0x9c, 0x6d, 0x2c, 0x89, 0x3d, 0xb6,
0x8e, 0x9d, 0x4d, 0x00, 0x3c, 0x59, 0x33, 0x2a, 0x71, 0xc6, 0xbe, 0x88, 0x11, 0xa1, 0x7d, 0x34,
0x87, 0xb0, 0x93, 0x75, 0x3a, 0x23, 0x7b, 0x4a, 0x6e, 0xe6, 0x9d, 0x92, 0xff, 0x56, 0x01, 0xda,
0x6c, 0x75, 0x0d, 0x02, 0xfe, 0x10, 0x90, 0xd7, 0xae, 0x48, 0xbf, 0x46, 0x59, 0xf2, 0x10, 0x6a,
0x98, 0x0e, 0x46, 0xd4, 0x17, 0xd4, 0xdb, 0x31, 0xa9, 0x37, 0x91, 0x52, 0xdb, 0x53, 0x76, 0x52,
0x58, 0xa3, 0xdd, 0xff, 0x58, 0x80, 0xba, 0x68, 0xe5, 0x97, 0xb6, 0x0a, 0x76, 0xb5, 0xd0, 0x1f,
0xae, 0x86, 0x27, 0x91, 0x3e, 0x77, 0x61, 0x76, 0xc8, 0x76, 0x00, 0xa6, 0x9a, 0x18, 0x16, 0xc1,
0x34, 0xcc, 0x34, 0x0a, 0x14, 0xc8, 0x91, 0x13, 0x7b, 0x03, 0x47, 0xe6, 0x8a, 0x20, 0x9b, 0xbc,
0x2c, 0x26, 0x97, 0xa2, 0xd8, 0x3d, 0xa5, 0x62, 0xdb, 0xe7, 0x09, 0xab, 0x03, 0x4b, 0x07, 0x89,
0x97, 0x4f, 0x3b, 0x69, 0x59, 0xff, 0xac, 0x09, 0xcb, 0x99, 0x2c, 0x15, 0x12, 0x28, 0xcc, 0x5c,
0x03, 0x6f, 0x78, 0x1c, 0xa8, 0x63, 0x6a, 0x41, 0xb7, 0x80, 0x19, 0x59, 0xe4, 0x14, 0x16, 0xa5,
0x56, 0xc4, 0xe6, 0x34, 0xd1, 0x67, 0x8a, 0xb8, 0xc5, 0xbe, 0x6b, 0x2e, 0x61, 0xba, 0x41, 0x89,
0xeb, 0xec, 0x9e, 0x5f, 0x1f, 0x39, 0x83, 0x8e, 0x52, 0xbf, 0xc4, 0x16, 0xa0, 0xa9, 0x68, 0xac,
0xad, 0x77, 0x5e, 0xd3, 0x96, 0x71, 0x30, 0xb3, 0x27, 0xd6, 0x46, 0x2e, 0xe1, 0x96, 0xcc, 0x43,
0x19, 0x9f, 0x6d, 0xaf, 0x7c, 0xa5, 0xb1, 0xe1, 0x91, 0xd3, 0x6c, 0xf4, 0x35, 0x15, 0x93, 0x9f,
0xc2, 0xd2, 0x85, 0xeb, 0xc5, 0xb2, 0x5b, 0x9a, 0x7a, 0x58, 0xc1, 0x26, 0xd7, 0x5e, 0xd3, 0xe4,
0x73, 0xfe, 0xb1, 0xb1, 0xf1, 0x4d, 0xa8, 0xb1, 0xfb, 0x47, 0x45, 0x68, 0x99, 0xf5, 0x30, 0x32,
0x15, 0x12, 0x42, 0x4a, 0x4a, 0xa9, 0x58, 0xa7, 0xe0, 0xac, 0xb5, 0xa7, 0x98, 0x67, 0xed, 0xd1,
0xed, 0x2b, 0xa5, 0xd7, 0x99, 0x93, 0xcb, 0x57, 0x33, 0x27, 0x57, 0x72, 0xcd, 0xc9, 0x93, 0xad,
0x8e, 0xd3, 0xbf, 0xac, 0xd5, 0x71, 0xe6, 0x95, 0x56, 0xc7, 0xee, 0xff, 0x2d, 0x00, 0xc9, 0x52,
0x2f, 0x79, 0xc2, 0x0d, 0x5c, 0x3e, 0x1d, 0x08, 0x21, 0xf6, 0xfd, 0xab, 0x71, 0x80, 0x5c, 0x2d,
0xf9, 0x35, 0x63, 0x45, 0x3d, 0x2e, 0x4f, 0x57, 0xda, 0x9a, 0x76, 0x5e, 0x56, 0xca, 0xa4, 0x5e,
0x7e, 0xbd, 0x49, 0xbd, 0xf2, 0x7a, 0x93, 0xfa, 0x74, 0xda, 0xa4, 0xde, 0xfd, 0x2b, 0x05, 0x98,
0xcf, 0x21, 0xb3, 0x6f, 0x6e, 0xe0, 0x8c, 0x30, 0x0c, 0xe9, 0x53, 0x14, 0x84, 0xa1, 0x83, 0xdd,
0xbf, 0x08, 0x4d, 0x83, 0xb5, 0xbe, 0xb9, 0xf6, 0xd3, 0x7a, 0x27, 0xa7, 0x6c, 0x03, 0xeb, 0xfe,
0xaf, 0x22, 0x90, 0x2c, 0x7b, 0x7f, 0xab, 0x7d, 0xc8, 0xce, 0x53, 0x29, 0x67, 0x9e, 0xfe, 0x5c,
0x77, 0x9e, 0x77, 0x60, 0x4e, 0x04, 0x1b, 0x6b, 0x26, 0x4d, 0x4e, 0x31, 0xd9, 0x0c, 0xa6, 0x79,
0x9b, 0xfe, 0x8c, 0xaa, 0x11, 0x5c, 0xa9, 0x6d, 0xbf, 0x29, 0xb7, 0x86, 0xd5, 0x85, 0x8e, 0x98,
0xa1, 0xac, 0x4d, 0xe3, 0x5f, 0x94, 0xd4, 0xe1, 0x01, 0x33, 0x85, 0x42, 0xf1, 0x1e, 0x34, 0xf4,
0xed, 0x43, 0x2c, 0x47, 0xca, 0xaa, 0xcd, 0x54, 0x09, 0xbd, 0x14, 0xd9, 0x84, 0x16, 0x0a, 0xc9,
0xbe, 0xfa, 0x8e, 0x1f, 0xe3, 0x5e, 0x61, 0xa9, 0xdb, 0x9e, 0xb2, 0x53, 0xdf, 0x90, 0xdf, 0x80,
0x96, 0x79, 0x7e, 0x17, 0x5a, 0x49, 0xde, 0x19, 0x83, 0x7d, 0x6e, 0x16, 0x26, 0xeb, 0xd0, 0x4e,
0x1b, 0x00, 0x44, 0xe4, 0xd7, 0x84, 0x0a, 0x32, 0xc5, 0xc9, 0x43, 0x61, 0xc0, 0xa9, 0xa0, 0x01,
0xe7, 0xb6, 0xf9, 0x99, 0x36, 0x4d, 0xab, 0xfc, 0x3f, 0xcd, 0x94, 0xf3, 0x3b, 0x00, 0x09, 0x46,
0xda, 0xd0, 0xd8, 0x3f, 0xd8, 0xda, 0x73, 0x36, 0xb6, 0xd7, 0xf7, 0xf6, 0xb6, 0x76, 0xdb, 0x53,
0x84, 0x40, 0x0b, 0x0d, 0xbe, 0x9b, 0x0a, 0x2b, 0x30, 0x4c, 0x98, 0xb7, 0x24, 0x56, 0x24, 0x0b,
0xd0, 0xde, 0xd9, 0x4b, 0xa1, 0xa5, 0x47, 0x35, 0xc5, 0x1f, 0xd6, 0x12, 0x2c, 0xf0, 0x60, 0xf2,
0x47, 0x9c, 0x3c, 0xa4, 0x76, 0xf2, 0x0f, 0x0a, 0xb0, 0x98, 0xca, 0x48, 0xc2, 0x03, 0xb9, 0x02,
0x62, 0x6a, 0x25, 0x26, 0x88, 0xce, 0x2a, 0xa9, 0x91, 0xa6, 0x24, 0x48, 0x36, 0x83, 0xd1, 0xbc,
0xa6, 0xc1, 0xa6, 0x38, 0x29, 0x2f, 0xcb, 0x5a, 0x56, 0x51, 0x58, 0xa9, 0x8e, 0x9f, 0xf0, 0x20,
0x75, 0x3d, 0x23, 0x31, 0x64, 0x99, 0x5d, 0x96, 0x49, 0x76, 0xf8, 0x30, 0x94, 0x1d, 0xb3, 0xbf,
0xb9, 0x79, 0xd6, 0xff, 0x2e, 0x03, 0xf9, 0x74, 0x4c, 0xc3, 0x4b, 0x8c, 0xff, 0x53, 0xf6, 0xf3,
0xe5, 0xb4, 0x35, 0x6f, 0x7a, 0x34, 0x3e, 0xfe, 0x84, 0x5e, 0xca, 0x38, 0xdf, 0xe2, 0x95, 0xe2,
0x7c, 0xf3, 0xe2, 0x6c, 0xcb, 0xaf, 0x8f, 0xb3, 0xad, 0xbc, 0x2e, 0xce, 0xf6, 0x3b, 0xd0, 0xf4,
0x4e, 0xfd, 0x80, 0x89, 0x03, 0xa6, 0x42, 0x44, 0x9d, 0xe9, 0x95, 0x12, 0x3b, 0xcc, 0x0b, 0x70,
0x8f, 0x61, 0xe4, 0xa3, 0xa4, 0x10, 0xed, 0x9f, 0x62, 0x5c, 0xb8, 0x2e, 0x20, 0xb6, 0xfa, 0xa7,
0x74, 0x37, 0xe8, 0xb9, 0x71, 0x10, 0xe2, 0x69, 0x4e, 0x7e, 0xcc, 0xf0, 0x88, 0xdc, 0x86, 0x56,
0x14, 0x8c, 0x99, 0x52, 0x25, 0xa7, 0x81, 0xdb, 0xb8, 0x1a, 0x1c, 0x3d, 0xe0, 0x93, 0xb1, 0x0a,
0xf3, 0xe3, 0x88, 0x3a, 0x43, 0x2f, 0x8a, 0xd8, 0xc6, 0xd9, 0x0b, 0xfc, 0x38, 0x0c, 0x06, 0xc2,
0x66, 0x35, 0x37, 0x8e, 0xe8, 0x53, 0x9e, 0xb3, 0xc1, 0x33, 0xc8, 0x7b, 0x49, 0x97, 0x46, 0xae,
0x17, 0x46, 0x1d, 0xc0, 0x2e, 0xc9, 0x91, 0xb2, 0x7e, 0x1f, 0xb8, 0x5e, 0xa8, 0xfa, 0xc2, 0x12,
0x51, 0x2a, 0xfe, 0xb7, 0x9e, 0x8e, 0xff, 0xfd, 0x49, 0x7e, 0xfc, 0x6f, 0x13, 0xab, 0x7e, 0x20,
0xaa, 0xce, 0x2e, 0xf1, 0xd5, 0xc3, 0x80, 0xbf, 0x99, 0x00, 0x5d, 0x11, 0x53, 0xba, 0x0a, 0x55,
0x39, 0x4c, 0x76, 0xa2, 0x3f, 0x09, 0x83, 0xa1, 0x3c, 0xd1, 0xb3, 0xdf, 0xa4, 0x05, 0xc5, 0x38,
0x10, 0x1f, 0x17, 0xe3, 0xc0, 0xfa, 0x5d, 0xa8, 0x6b, 0x2b, 0x45, 0xde, 0xe4, 0xc6, 0x05, 0xa6,
0x13, 0x0a, 0x53, 0x00, 0xf7, 0xf9, 0xd5, 0x04, 0xba, 0xd3, 0x27, 0xdf, 0x83, 0xb9, 0xbe, 0x17,
0x52, 0x0c, 0xa5, 0x77, 0x42, 0x7a, 0x4e, 0xc3, 0x48, 0x1a, 0x59, 0xda, 0x2a, 0xc3, 0xe6, 0xb8,
0xe5, 0xc0, 0xbc, 0x31, 0x35, 0x4a, 0x38, 0x4c, 0x63, 0x20, 0xac, 0xb4, 0x8b, 0x9b, 0x41, 0xb2,
0x22, 0x8f, 0x6d, 0xab, 0xc2, 0x3e, 0xe4, 0x8c, 0xc2, 0xe0, 0x18, 0x1b, 0x29, 0xd8, 0x06, 0x66,
0xfd, 0xcf, 0x12, 0x94, 0xb6, 0x83, 0x91, 0xee, 0xa9, 0x2c, 0x64, 0x3d, 0x95, 0x42, 0xff, 0x75,
0x94, 0x7a, 0x2b, 0x94, 0x14, 0x03, 0x24, 0xf7, 0xa0, 0xc5, 0x38, 0x2d, 0x0e, 0x98, 0xbe, 0x7f,
0xe1, 0x86, 0x3c, 0x6a, 0xb6, 0x84, 0xe4, 0x9b, 0xca, 0x21, 0x0b, 0x50, 0x52, 0x6a, 0x1b, 0x16,
0x60, 0x49, 0x76, 0xd8, 0xc4, 0x98, 0x91, 0x4b, 0x61, 0xf5, 0x15, 0x29, 0x26, 0xb8, 0xcc, 0xef,
0x39, 0x3b, 0xf3, 0xcd, 0x37, 0x2f, 0x8b, 0xe9, 0xe2, 0x8c, 0x61, 0x87, 0x89, 0x6a, 0xab, 0xd2,
0xba, 0x2b, 0xa0, 0x6a, 0xba, 0x02, 0x56, 0xa0, 0x1e, 0x0f, 0xce, 0x9d, 0x91, 0x7b, 0x39, 0x08,
0xdc, 0xbe, 0x60, 0x14, 0x1d, 0x22, 0x0f, 0x00, 0x86, 0xa3, 0x91, 0xa0, 0x62, 0xb4, 0x33, 0xd4,
0xd7, 0xda, 0x62, 0xf6, 0x9f, 0x1e, 0x1c, 0x70, 0xea, 0xb3, 0xb5, 0x32, 0x64, 0x0b, 0x5a, 0xb9,
0xa1, 0xef, 0x37, 0x65, 0x64, 0x43, 0x30, 0x5a, 0xcd, 0xa1, 0xf3, 0xd4, 0x47, 0xdd, 0x1f, 0x02,
0xf9, 0x15, 0x23, 0xd0, 0x9f, 0x43, 0x4d, 0xf5, 0x50, 0x8f, 0xfb, 0xc6, 0xf0, 0xa5, 0xba, 0x19,
0xf7, 0x8d, 0xd1, 0x4a, 0x77, 0xa0, 0xc5, 0x77, 0x1b, 0x25, 0x3f, 0x79, 0xc8, 0x49, 0x0a, 0xb5,
0xfe, 0xac, 0x00, 0x15, 0xa4, 0x3c, 0xa6, 0x7e, 0xf1, 0x3c, 0xe5, 0xe2, 0x15, 0xd6, 0xe2, 0x34,
0x4c, 0x2c, 0xe3, 0x4a, 0x4c, 0x51, 0x91, 0x81, 0x7e, 0x2d, 0x66, 0x05, 0x6a, 0xaa, 0x25, 0x8d,
0x94, 0x12, 0x90, 0xdc, 0x82, 0xf2, 0x59, 0x30, 0x92, 0x27, 0x54, 0x48, 0x66, 0xd4, 0x46, 0x3c,
0xe9, 0x0f, 0xab, 0x8f, 0x0f, 0x81, 0x9f, 0x02, 0xd2, 0x70, 0xce, 0x58, 0xa7, 0x73, 0xc7, 0xfa,
0x0c, 0x66, 0x99, 0x7c, 0xd0, 0xbc, 0x39, 0x93, 0xf7, 0xa2, 0xb7, 0x99, 0x6a, 0xd3, 0x1b, 0x8c,
0xfb, 0x54, 0xb7, 0x13, 0xa0, 0x17, 0x40, 0xe0, 0x52, 0x43, 0xb6, 0xfe, 0x79, 0x81, 0xcb, 0x1d,
0x56, 0x2f, 0xb9, 0x0b, 0x65, 0xb6, 0x6d, 0xa4, 0xcc, 0x42, 0x2a, 0xa4, 0x8c, 0x95, 0xb3, 0xb1,
0x04, 0x5b, 0x45, 0x34, 0x60, 0xeb, 0xb5, 0x73, 0xf3, 0x75, 0x72, 0xc8, 0x56, 0x23, 0x4b, 0x9d,
0x4d, 0x53, 0x28, 0x59, 0xd5, 0x3c, 0xb6, 0x65, 0x63, 0x2b, 0x92, 0x9a, 0x54, 0xff, 0x94, 0x6a,
0x9e, 0xda, 0x7f, 0x59, 0x84, 0xa6, 0xd1, 0x27, 0xc6, 0x3d, 0x78, 0x61, 0x84, 0x5b, 0x99, 0xc4,
0xca, 0xeb, 0x90, 0xce, 0x79, 0x45, 0x93, 0xf3, 0x94, 0xeb, 0xaa, 0xa4, 0xbb, 0xae, 0x1e, 0x40,
0x2d, 0xb9, 0x13, 0x65, 0x76, 0x8a, 0xb5, 0x28, 0x83, 0xeb, 0x92, 0x42, 0x89, 0xb3, 0xab, 0xa2,
0x3b, 0xbb, 0x7e, 0x53, 0x73, 0x86, 0x4c, 0x63, 0x35, 0x56, 0xde, 0xac, 0x7e, 0x3b, 0xde, 0xd3,
0x8f, 0xa0, 0xae, 0x75, 0x5e, 0x77, 0x7a, 0x14, 0x0c, 0xa7, 0x87, 0x0a, 0x83, 0x2d, 0x26, 0x61,
0xb0, 0xd6, 0xcf, 0x8b, 0xd0, 0x64, 0xbc, 0xe6, 0xf9, 0xa7, 0x07, 0xc1, 0xc0, 0xeb, 0x5d, 0x22,
0x8d, 0x4b, 0xb6, 0x12, 0x3a, 0x8c, 0xe4, 0x39, 0x13, 0x66, 0x32, 0x51, 0xc5, 0xfe, 0x73, 0x01,
0xae, 0xd2, 0x4c, 0xc2, 0x33, 0xf9, 0x78, 0xec, 0x46, 0x54, 0xbb, 0xb1, 0x65, 0x9b, 0x20, 0x93,
0xc3, 0x0c, 0xc0, 0xa0, 0xe6, 0xa1, 0x37, 0x18, 0x78, 0xbc, 0x2c, 0x3f, 0x7c, 0xe7, 0x65, 0xb1,
0x36, 0xfb, 0x5e, 0xe4, 0x1e, 0x27, 0x21, 0x06, 0x2a, 0x8d, 0xf6, 0x5d, 0xf7, 0xa5, 0x66, 0xdf,
0xe5, 0xb7, 0x20, 0x4c, 0x30, 0x4d, 0x55, 0x33, 0x19, 0xaa, 0xb2, 0xfe, 0x6d, 0x11, 0xea, 0x1a,
0x8d, 0x32, 0xd9, 0x92, 0xbb, 0x09, 0x6b, 0xa8, 0x88, 0xbd, 0xf1, 0x0d, 0x73, 0x8e, 0x86, 0x90,
0xdb, 0x66, 0xab, 0xe8, 0x17, 0x42, 0xe9, 0x63, 0xd0, 0xf3, 0x0d, 0xa8, 0x31, 0x3e, 0x7c, 0x17,
0x6d, 0x47, 0xe2, 0x76, 0xa4, 0x02, 0x64, 0xee, 0x1a, 0xe6, 0x56, 0x92, 0x5c, 0x04, 0x5e, 0x19,
0x8d, 0xf3, 0x10, 0x1a, 0xa2, 0x1a, 0x5c, 0x63, 0x1c, 0x74, 0x22, 0x09, 0x8c, 0xf5, 0xb7, 0x8d,
0x92, 0xf2, 0xcb, 0x35, 0xf9, 0x65, 0xf5, 0x75, 0x5f, 0xca, 0x92, 0xd6, 0x13, 0x15, 0xe8, 0xf4,
0x24, 0x74, 0x47, 0x67, 0x52, 0xba, 0x3d, 0x80, 0x79, 0x29, 0xc4, 0xc6, 0xbe, 0xeb, 0xfb, 0xc1,
0xd8, 0xef, 0x51, 0x19, 0x31, 0x9b, 0x97, 0x65, 0xf5, 0xd5, 0xfd, 0x0a, 0xac, 0x88, 0xdc, 0x83,
0x0a, 0xd7, 0x82, 0xb9, 0xae, 0x92, 0x2f, 0xcf, 0x78, 0x11, 0x72, 0x17, 0x2a, 0x5c, 0x19, 0x2e,
0x4e, 0x94, 0x40, 0xbc, 0x80, 0xb5, 0x0a, 0xb3, 0x78, 0xa1, 0x43, 0x13, 0xc4, 0xd7, 0xf3, 0x74,
0x98, 0xe9, 0x1e, 0xbf, 0xf6, 0xb1, 0x00, 0x64, 0x8f, 0xf3, 0x95, 0xee, 0x89, 0xff, 0xb3, 0x12,
0xd4, 0x35, 0x98, 0x09, 0x4b, 0x74, 0xcb, 0x3a, 0x7d, 0xcf, 0x1d, 0xd2, 0x98, 0x86, 0x82, 0x97,
0x52, 0x28, 0x2b, 0xe7, 0x9e, 0x9f, 0x3a, 0xc1, 0x38, 0x76, 0xfa, 0xf4, 0x34, 0xa4, 0x54, 0x28,
0x57, 0x29, 0x94, 0x95, 0x63, 0xd4, 0xac, 0x95, 0xe3, 0x1e, 0xc6, 0x14, 0x2a, 0x3d, 0xde, 0x7c,
0x9e, 0xca, 0x89, 0xc7, 0x9b, 0xcf, 0x4a, 0x5a, 0xcc, 0x57, 0x72, 0xc4, 0xfc, 0x07, 0xb0, 0xc4,
0x05, 0xba, 0x90, 0x1e, 0x4e, 0x8a, 0xb8, 0x26, 0xe4, 0x92, 0x7b, 0xd0, 0x66, 0x7d, 0x96, 0xac,
0x11, 0x79, 0x3f, 0xe3, 0x3c, 0x56, 0xb0, 0x33, 0x38, 0x2b, 0x8b, 0xde, 0x12, 0xbd, 0x2c, 0x8f,
0x00, 0xcb, 0xe0, 0x58, 0xd6, 0x7d, 0x69, 0x96, 0xad, 0x89, 0xb2, 0x29, 0x9c, 0x3c, 0x84, 0xe5,
0x21, 0xed, 0x7b, 0xae, 0x59, 0x85, 0x93, 0x68, 0x1c, 0x93, 0xb2, 0x59, 0x2b, 0x6c, 0x16, 0x7e,
0x16, 0x0c, 0x8f, 0x3d, 0xbe, 0xcb, 0x72, 0xbf, 0x4e, 0xd9, 0xce, 0xe0, 0x56, 0x13, 0xea, 0x87,
0x71, 0x30, 0x92, 0x4b, 0xdf, 0x82, 0x06, 0x4f, 0x8a, 0x18, 0xe9, 0xeb, 0x70, 0x0d, 0xe9, 0xf5,
0x28, 0x18, 0x05, 0x83, 0xe0, 0xf4, 0xd2, 0xb0, 0xbb, 0xfc, 0xfb, 0x02, 0xcc, 0x1b, 0xb9, 0x89,
0xe1, 0x05, 0x8d, 0xc4, 0x32, 0xb0, 0x95, 0x93, 0xf8, 0x9c, 0xb6, 0x47, 0xf1, 0x82, 0xdc, 0x73,
0xf7, 0x4c, 0xc4, 0xba, 0xae, 0x27, 0xb7, 0xb5, 0xe4, 0x87, 0x9c, 0xde, 0x3b, 0x59, 0x7a, 0x17,
0xdf, 0xcb, 0x7b, 0x5c, 0xb2, 0x8a, 0xdf, 0x10, 0xf1, 0x7a, 0x7d, 0x31, 0xe8, 0x92, 0x19, 0x63,
0xa5, 0xdb, 0xe9, 0x64, 0x0f, 0x7a, 0x0a, 0x8c, 0xac, 0x5f, 0x14, 0x00, 0x92, 0xde, 0x61, 0x94,
0x97, 0xda, 0x67, 0xf9, 0x83, 0x08, 0xda, 0x9e, 0xfa, 0x26, 0x34, 0x54, 0xa4, 0x49, 0xb2, 0x75,
0xd7, 0x25, 0xc6, 0x54, 0x9d, 0xb7, 0x60, 0xf6, 0x74, 0x10, 0x1c, 0xa3, 0x4a, 0x25, 0xf6, 0x59,
0x1e, 0x29, 0xde, 0xe2, 0xb0, 0xdc, 0x3d, 0x93, 0x7d, 0xbe, 0x9c, 0x1b, 0xa2, 0xa2, 0xef, 0xda,
0x6c, 0xaf, 0x9b, 0xcb, 0xcc, 0xc4, 0x2b, 0xb9, 0x9c, 0xac, 0x65, 0xc4, 0xfa, 0x04, 0x67, 0x37,
0x1e, 0xc8, 0x0e, 0x5e, 0x6b, 0xb6, 0xff, 0x08, 0x5a, 0x21, 0x97, 0x99, 0x52, 0xa0, 0x96, 0x5f,
0x21, 0x50, 0x9b, 0xa1, 0xb1, 0x33, 0xbf, 0x0d, 0x6d, 0xb7, 0x7f, 0x4e, 0xc3, 0xd8, 0x43, 0x33,
0x26, 0xea, 0x74, 0x7c, 0x80, 0xb3, 0x1a, 0x8e, 0xaa, 0xd3, 0x5b, 0x30, 0x2b, 0xe2, 0xf6, 0x55,
0x49, 0x71, 0x35, 0x38, 0x81, 0x59, 0x41, 0xeb, 0x1f, 0x4b, 0x47, 0xbf, 0xb9, 0xba, 0xaf, 0x9e,
0x15, 0x7d, 0x84, 0xc5, 0xd4, 0x08, 0xbf, 0x23, 0xdc, 0x98, 0x7d, 0x69, 0x2f, 0x2d, 0x69, 0x91,
0x9f, 0x7d, 0x11, 0x28, 0x61, 0x4e, 0x6b, 0xf9, 0x2a, 0xd3, 0x6a, 0xfd, 0x97, 0x02, 0xcc, 0x6c,
0x07, 0xa3, 0x6d, 0x8f, 0x07, 0x5f, 0x21, 0x9b, 0xa8, 0x4b, 0x33, 0x32, 0xf9, 0x9a, 0x08, 0xd9,
0x5c, 0xad, 0xa4, 0x99, 0xd6, 0x4a, 0x7e, 0x08, 0xd7, 0xd1, 0x62, 0x1f, 0x06, 0xa3, 0x20, 0x64,
0xec, 0xea, 0x0e, 0xb8, 0x0a, 0x12, 0xf8, 0xf1, 0x99, 0x14, 0xa7, 0xaf, 0x2a, 0x82, 0x66, 0xb4,
0x41, 0x7c, 0xee, 0xf0, 0xe3, 0xa6, 0xd0, 0xa2, 0xb8, 0x94, 0xcd, 0x66, 0x58, 0xbf, 0x0e, 0x35,
0x3c, 0xee, 0xe0, 0xd0, 0xde, 0x81, 0xda, 0x59, 0x30, 0x72, 0xce, 0x3c, 0x3f, 0x96, 0xec, 0xdf,
0x4a, 0xce, 0x21, 0xdb, 0x38, 0x29, 0xaa, 0x80, 0xf5, 0x1f, 0x66, 0x60, 0x66, 0xc7, 0x3f, 0x0f,
0xbc, 0x1e, 0x06, 0x0c, 0x0c, 0xe9, 0x30, 0x90, 0xd7, 0x88, 0xd8, 0x6f, 0xbc, 0xe1, 0x9f, 0x5c,
0xf4, 0xe5, 0x2c, 0xa4, 0x21, 0xec, 0x80, 0x1c, 0xea, 0x17, 0x75, 0x45, 0x2a, 0x39, 0xf5, 0x55,
0xb4, 0x8b, 0x58, 0xac, 0x36, 0x7e, 0x81, 0x14, 0xe7, 0x8e, 0x87, 0x7f, 0x6b, 0x08, 0x9b, 0x7c,
0x11, 0xb9, 0xcb, 0x43, 0x3b, 0x79, 0xec, 0x91, 0x80, 0xf0, 0xd0, 0x1f, 0x52, 0xee, 0x73, 0x51,
0xaa, 0x17, 0x3b, 0xf4, 0xeb, 0x20, 0x53, 0xcf, 0xf8, 0x07, 0xbc, 0x0c, 0xdf, 0x0e, 0x74, 0x88,
0x29, 0xa8, 0xe9, 0x6b, 0xef, 0xfc, 0xe9, 0x82, 0x34, 0xcc, 0x43, 0x43, 0x94, 0xd0, 0xe5, 0xe3,
0x04, 0x7e, 0xd9, 0x39, 0x8d, 0x6b, 0xa6, 0x02, 0x7e, 0xc1, 0x41, 0x9a, 0x0a, 0x18, 0xc9, 0xb8,
0x83, 0xc1, 0xb1, 0xdb, 0x7b, 0xc1, 0x4f, 0xb6, 0x0d, 0xee, 0xaa, 0x33, 0x40, 0x8c, 0xbf, 0x4d,
0xd6, 0x15, 0x5d, 0xf7, 0x65, 0x5b, 0x87, 0xc8, 0x1a, 0xd4, 0xd1, 0x8c, 0x22, 0x56, 0xb6, 0x85,
0x2b, 0xdb, 0xd6, 0xed, 0x2c, 0xb8, 0xb6, 0x7a, 0x21, 0x3d, 0x94, 0x61, 0x36, 0x73, 0xe5, 0xc0,
0xed, 0xf7, 0x45, 0x14, 0x48, 0x9b, 0x5f, 0xf6, 0x55, 0x00, 0x1a, 0x6a, 0xf8, 0x84, 0xf1, 0x02,
0x73, 0x58, 0xc0, 0xc0, 0xc8, 0x2d, 0x6e, 0xc6, 0x1c, 0xb9, 0x5e, 0x1f, 0x43, 0xc9, 0xf8, 0x59,
0x58, 0x61, 0xac, 0x0e, 0xf9, 0x1b, 0x37, 0xce, 0x79, 0x9c, 0x15, 0x03, 0x63, 0x73, 0xa3, 0xd2,
0xc3, 0xe4, 0x8e, 0x82, 0x09, 0x92, 0x77, 0xd1, 0xc3, 0x1e, 0x53, 0xbc, 0x88, 0xd0, 0x5a, 0xbb,
0x2e, 0xc6, 0x2c, 0xc8, 0x56, 0xfe, 0x7f, 0xc8, 0x8a, 0xd8, 0xbc, 0x24, 0x53, 0xdb, 0xb8, 0x93,
0x63, 0xc9, 0x50, 0xdb, 0x44, 0x51, 0x74, 0x72, 0xf0, 0x02, 0xe4, 0xa1, 0x76, 0x12, 0xeb, 0x60,
0xe1, 0x1b, 0xa9, 0xfa, 0xbf, 0x95, 0x33, 0xd8, 0x3a, 0x34, 0xf4, 0x71, 0x90, 0x2a, 0x94, 0xf7,
0x0f, 0xb6, 0xf6, 0xda, 0x53, 0xa4, 0x0e, 0x33, 0x87, 0x5b, 0x47, 0x47, 0xbb, 0x5b, 0x9b, 0xed,
0x02, 0x69, 0x40, 0x55, 0x45, 0x77, 0x17, 0x59, 0x6a, 0x7d, 0x63, 0x63, 0xeb, 0xe0, 0x68, 0x6b,
0xb3, 0x5d, 0xfa, 0xb8, 0x5c, 0x2d, 0xb6, 0x4b, 0xa8, 0x40, 0x6a, 0xc3, 0x7c, 0x8d, 0x1d, 0xed,
0x16, 0x00, 0x1e, 0x6c, 0x92, 0x68, 0xa0, 0xb2, 0xad, 0x21, 0x4c, 0x50, 0x2b, 0xfb, 0x43, 0x89,
0x5f, 0xc0, 0x96, 0x69, 0x5c, 0x3c, 0xbc, 0xe9, 0xac, 0x3b, 0xb6, 0x2a, 0xb6, 0x09, 0x32, 0xc2,
0x16, 0x00, 0x86, 0x1c, 0x73, 0x71, 0xa0, 0x43, 0x8c, 0x50, 0x42, 0x1a, 0x05, 0x83, 0x73, 0xca,
0x8b, 0x70, 0xf5, 0xd0, 0xc0, 0x58, 0x5b, 0x42, 0xe2, 0x69, 0xd7, 0x01, 0x2a, 0xb6, 0x09, 0x92,
0xef, 0x4b, 0x42, 0xa9, 0x22, 0xa1, 0x2c, 0x67, 0x57, 0xdd, 0x20, 0x92, 0xa7, 0x19, 0x43, 0x58,
0x0d, 0x09, 0xe0, 0xbb, 0xd9, 0xef, 0xae, 0x60, 0x10, 0x23, 0xab, 0x40, 0x86, 0xa3, 0x91, 0x93,
0x63, 0xa1, 0x2a, 0xdb, 0x39, 0x39, 0xdf, 0x80, 0x01, 0x2d, 0x06, 0xb2, 0xde, 0xef, 0x8b, 0x6e,
0xea, 0xf7, 0xd1, 0x43, 0xfd, 0x01, 0x04, 0x29, 0x92, 0x73, 0xc4, 0x5e, 0x31, 0x5f, 0xec, 0xbd,
0x52, 0x38, 0x58, 0x3b, 0x50, 0x3f, 0xd0, 0x9e, 0x54, 0xb0, 0xd8, 0x0e, 0x21, 0x1f, 0x53, 0xe0,
0x7b, 0x07, 0x37, 0x9c, 0x25, 0xa8, 0xd6, 0xa5, 0xa2, 0xde, 0x25, 0xeb, 0x1f, 0x16, 0xf8, 0x2d,
0x55, 0x35, 0x04, 0xde, 0xbe, 0x05, 0x0d, 0xe5, 0x7b, 0x49, 0xae, 0xec, 0x18, 0x18, 0x2b, 0x83,
0xdd, 0x71, 0x82, 0x93, 0x93, 0x88, 0xca, 0xe0, 0x7a, 0x03, 0x93, 0xca, 0x38, 0x53, 0xef, 0x3d,
0xde, 0x42, 0x24, 0x82, 0xec, 0x33, 0x38, 0xa3, 0x74, 0x61, 0xfb, 0x96, 0xd7, 0x0a, 0x54, 0x5a,
0xdd, 0x2c, 0x4a, 0xcf, 0xf4, 0x3d, 0xa8, 0xaa, 0x7a, 0xcd, 0x9d, 0x56, 0x96, 0x54, 0xf9, 0x6c,
0x47, 0xc7, 0x83, 0xba, 0xd1, 0x69, 0xce, 0x70, 0xd9, 0x0c, 0x46, 0x4b, 0x27, 0x5e, 0x98, 0x2e,
0xce, 0x39, 0x30, 0x27, 0xc7, 0x7a, 0x0e, 0xf3, 0x52, 0x7c, 0x68, 0xa7, 0x04, 0x73, 0x21, 0x0b,
0xaf, 0x93, 0xf2, 0xc5, 0xac, 0x94, 0xb7, 0xfe, 0x4d, 0x19, 0x66, 0xe4, 0x7b, 0x25, 0x56, 0xce,
0xfb, 0x1a, 0x35, 0xf3, 0x69, 0x0e, 0xd2, 0x31, 0x2e, 0x60, 0x23, 0x21, 0x88, 0xbd, 0xff, 0x6e,
0x7a, 0xf7, 0x4e, 0x0c, 0xa8, 0xa9, 0x1d, 0x7c, 0x09, 0xca, 0x23, 0x37, 0x3e, 0x43, 0xfb, 0x1a,
0xa7, 0x25, 0x4c, 0x4b, 0x13, 0x7d, 0xc5, 0x34, 0xd1, 0xe7, 0x3d, 0x48, 0xc2, 0x55, 0xd5, 0xec,
0x83, 0x24, 0x37, 0xa0, 0xc6, 0xb5, 0x8d, 0xc4, 0x0a, 0x9f, 0x00, 0x29, 0xed, 0xa4, 0x9a, 0xd1,
0x4e, 0xae, 0xae, 0x37, 0xbc, 0x07, 0xd3, 0xfc, 0x52, 0x9e, 0xb8, 0x44, 0x21, 0xb7, 0x14, 0x31,
0x93, 0xf2, 0x7f, 0x1e, 0x83, 0x67, 0x8b, 0xb2, 0xfa, 0xb5, 0xfe, 0xba, 0x79, 0xad, 0x5f, 0x77,
0x1e, 0x34, 0x52, 0xce, 0x83, 0x7b, 0xd0, 0x56, 0xd3, 0x87, 0x06, 0x36, 0x3f, 0x12, 0x41, 0xe3,
0x19, 0x3c, 0xd9, 0x16, 0x5b, 0xc6, 0xb6, 0xc8, 0x24, 0xdc, 0x7a, 0x1c, 0xd3, 0xe1, 0x28, 0x16,
0xdb, 0xa2, 0xf5, 0x18, 0x9a, 0x46, 0x27, 0xd9, 0x36, 0x24, 0xae, 0x55, 0xb4, 0xa7, 0x48, 0x13,
0x6a, 0x3b, 0x7b, 0xce, 0xe3, 0xdd, 0x9d, 0x27, 0xdb, 0x47, 0xed, 0x02, 0x4b, 0x1e, 0x3e, 0xdb,
0xd8, 0xd8, 0xda, 0xda, 0xc4, 0x6d, 0x09, 0x60, 0xfa, 0xf1, 0xfa, 0x0e, 0xdb, 0xa2, 0x4a, 0xd6,
0xff, 0x29, 0x40, 0x5d, 0xab, 0x9e, 0xbc, 0xaf, 0x66, 0x86, 0xdf, 0xfc, 0xbe, 0x99, 0xed, 0xc2,
0xaa, 0x14, 0xd4, 0xda, 0xd4, 0xa8, 0x37, 0x58, 0x8a, 0x13, 0xdf, 0x60, 0x61, 0xcb, 0xe3, 0xf2,
0x1a, 0xd4, 0x3c, 0xf0, 0xd3, 0x53, 0x1a, 0xe6, 0x71, 0x56, 0xc9, 0xee, 0xc2, 0x4a, 0x72, 0x8b,
0x61, 0x1a, 0xb6, 0x3e, 0x00, 0x48, 0x7a, 0x63, 0x0e, 0x7b, 0xca, 0x1c, 0x76, 0x41, 0x1b, 0x76,
0xd1, 0xda, 0xe4, 0x02, 0x43, 0x4c, 0xa1, 0xf2, 0x12, 0x7f, 0x1f, 0x88, 0x34, 0x50, 0x61, 0x3c,
0xe3, 0x68, 0x40, 0x63, 0x79, 0xd9, 0x6a, 0x4e, 0xe4, 0xec, 0xa8, 0x0c, 0x79, 0x5f, 0x30, 0xa9,
0x25, 0x91, 0x3b, 0x82, 0xe2, 0xd2, 0x72, 0x47, 0x14, 0xb5, 0x55, 0xbe, 0xd5, 0x85, 0xce, 0x26,
0x65, 0xb5, 0xad, 0x0f, 0x06, 0xa9, 0xee, 0x58, 0xd7, 0xe1, 0x5a, 0x4e, 0x9e, 0x30, 0x3f, 0x7c,
0x0a, 0x8b, 0xeb, 0xfc, 0x5e, 0xd5, 0x37, 0x15, 0xc2, 0x6d, 0x75, 0x60, 0x29, 0x5d, 0xa5, 0x68,
0xec, 0x31, 0xcc, 0x6d, 0xd2, 0xe3, 0xf1, 0xe9, 0x2e, 0x3d, 0x4f, 0x1a, 0x22, 0x50, 0x8e, 0xce,
0x82, 0x0b, 0x31, 0x3f, 0xf8, 0x9b, 0xdc, 0x04, 0x18, 0xb0, 0x32, 0x4e, 0x34, 0xa2, 0x3d, 0x79,
0xb3, 0x1e, 0x91, 0xc3, 0x11, 0xed, 0x59, 0x1f, 0x00, 0xd1, 0xeb, 0x11, 0xf3, 0xc5, 0x8e, 0x04,
0xe3, 0x63, 0x27, 0xba, 0x8c, 0x62, 0x3a, 0x94, 0x4f, 0x06, 0xe8, 0x90, 0xf5, 0x16, 0x34, 0x0e,
0xdc, 0x4b, 0x9b, 0x7e, 0x21, 0xde, 0xfc, 0x59, 0x86, 0x99, 0x91, 0x7b, 0xc9, 0xf8, 0x59, 0xb9,
0x50, 0x30, 0xdb, 0xfa, 0xc3, 0x32, 0x4c, 0xf3, 0x92, 0xac, 0xd6, 0x3e, 0x8d, 0x62, 0xcf, 0x47,
0x1e, 0x93, 0xb5, 0x6a, 0x50, 0x46, 0x60, 0x16, 0x73, 0x04, 0xa6, 0x30, 0xa5, 0xc9, 0x1b, 0xca,
0x82, 0x64, 0x0d, 0x8c, 0x89, 0xad, 0xe4, 0x42, 0x08, 0xa7, 0xd4, 0x04, 0x48, 0xf9, 0x28, 0x93,
0x83, 0x07, 0xef, 0x9f, 0xdc, 0x0b, 0x84, 0x4c, 0xd4, 0xa1, 0xdc, 0xe3, 0xcd, 0x8c, 0x8c, 0x7c,
0x4f, 0x1d, 0x6f, 0x32, 0xc7, 0x98, 0xea, 0x15, 0x8e, 0x31, 0xdc, 0xbe, 0xf6, 0xaa, 0x63, 0x0c,
0x5c, 0xe5, 0x18, 0x73, 0x15, 0xdf, 0x60, 0x17, 0xaa, 0xb8, 0xa7, 0x6b, 0x22, 0x52, 0xa6, 0xc9,
0xaf, 0x69, 0x3a, 0x3e, 0x77, 0xf3, 0x5f, 0x4f, 0xf8, 0xc5, 0xa6, 0x5f, 0x7c, 0x3b, 0x2a, 0xfe,
0x8f, 0x61, 0x46, 0xa0, 0x8c, 0xb2, 0x7d, 0x77, 0x28, 0x5f, 0x86, 0xc0, 0xdf, 0x6c, 0xea, 0xf0,
0x82, 0xfa, 0x17, 0x63, 0x2f, 0xa4, 0x7d, 0x79, 0x7b, 0x52, 0x83, 0x30, 0x2a, 0x3a, 0x72, 0x5e,
0xf8, 0xc1, 0x85, 0x2f, 0xee, 0x4f, 0xaa, 0xb4, 0x45, 0xa0, 0x8d, 0x2f, 0xc4, 0x8c, 0x82, 0x50,
0x3e, 0xf6, 0x61, 0xfd, 0xdd, 0x02, 0xb4, 0x05, 0xa3, 0xa9, 0x3c, 0x19, 0x10, 0xf0, 0xaa, 0x4b,
0xc2, 0xb7, 0xa1, 0x89, 0xb6, 0x0c, 0xb5, 0xe5, 0x08, 0xe7, 0xba, 0x01, 0xb2, 0xfe, 0xca, 0xb0,
0xc4, 0xa1, 0x37, 0x10, 0x74, 0xab, 0x43, 0x72, 0xd7, 0x0a, 0x5d, 0x71, 0xed, 0xa2, 0x60, 0xab,
0xb4, 0xf5, 0x47, 0x05, 0x98, 0xd3, 0x3a, 0x2c, 0x18, 0xf5, 0x23, 0x68, 0xa8, 0x87, 0x98, 0xa8,
0x52, 0xaa, 0x96, 0x4d, 0xc9, 0x92, 0x7c, 0x66, 0x14, 0x46, 0x7a, 0x77, 0x2f, 0xb1, 0x83, 0xd1,
0x78, 0x28, 0xb4, 0x19, 0x1d, 0x62, 0x74, 0x74, 0x41, 0xe9, 0x0b, 0x55, 0x84, 0xeb, 0x53, 0x06,
0x86, 0x3e, 0xa0, 0xc0, 0x8f, 0xcf, 0x54, 0xa1, 0xb2, 0xf0, 0x01, 0xe9, 0xa0, 0xf5, 0x27, 0x45,
0x98, 0xe7, 0x46, 0x35, 0x61, 0xcc, 0x54, 0x6f, 0x61, 0x4c, 0x73, 0xfb, 0x22, 0x17, 0x5a, 0xdb,
0x53, 0xb6, 0x48, 0x93, 0xf7, 0xaf, 0x68, 0x08, 0x54, 0xf7, 0x3b, 0x26, 0xac, 0x45, 0x29, 0x6f,
0x2d, 0x5e, 0x31, 0xd3, 0x79, 0xee, 0xb8, 0x4a, 0xbe, 0x3b, 0xee, 0x6a, 0xee, 0xaf, 0xcc, 0x25,
0x88, 0x19, 0x51, 0xca, 0xb8, 0x04, 0xb1, 0x06, 0xcb, 0x06, 0x80, 0xf2, 0xda, 0x3b, 0xf1, 0xa8,
0xbc, 0x91, 0x3a, 0x17, 0xd1, 0xd8, 0x31, 0x8a, 0x3c, 0x9a, 0x81, 0x4a, 0xd4, 0x0b, 0x46, 0xd4,
0x5a, 0x82, 0x05, 0x73, 0x72, 0xc5, 0x2e, 0xf1, 0x8b, 0x02, 0x74, 0x1e, 0xf3, 0xa0, 0x0a, 0xcf,
0x3f, 0xdd, 0xf6, 0xa2, 0x38, 0x08, 0xd5, 0x93, 0x45, 0xb7, 0x00, 0xa2, 0xd8, 0x0d, 0xc5, 0x39,
0x93, 0x2b, 0xbb, 0x1a, 0xc2, 0xe6, 0x88, 0xfa, 0x7d, 0x9e, 0xcb, 0x69, 0x43, 0xa5, 0x33, 0x87,
0x09, 0x61, 0x72, 0x34, 0x54, 0xf2, 0x3b, 0xfc, 0x6e, 0x16, 0x9b, 0x0c, 0x7a, 0x8e, 0x5b, 0x2f,
0xb7, 0xe3, 0xa5, 0x50, 0xeb, 0xf7, 0x8b, 0x30, 0x9b, 0x74, 0x92, 0xdf, 0xf5, 0x34, 0x04, 0xb8,
0xd0, 0xc3, 0x13, 0x01, 0x2e, 0xdc, 0x83, 0x8e, 0xc7, 0x14, 0x73, 0xcd, 0xea, 0xa8, 0xa1, 0xe4,
0x36, 0xd4, 0x65, 0x2a, 0x18, 0xc7, 0xda, 0xdb, 0x21, 0x3a, 0xcc, 0xef, 0x46, 0xb0, 0xa3, 0x81,
0x38, 0xe6, 0x88, 0x14, 0xde, 0x50, 0x1e, 0xc6, 0xf8, 0x25, 0x5f, 0x53, 0x99, 0x64, 0x02, 0x8d,
0xe9, 0xd4, 0x7c, 0x0d, 0x51, 0x9f, 0xd6, 0x75, 0xcd, 0xaa, 0x7a, 0x73, 0x4d, 0xf1, 0x3c, 0xaf,
0x31, 0xb9, 0xfe, 0x52, 0xb6, 0x75, 0x48, 0x5a, 0x7d, 0x82, 0xb1, 0x71, 0xfc, 0x35, 0x30, 0xeb,
0x6f, 0x16, 0xe0, 0x5a, 0xce, 0x32, 0x0a, 0x19, 0xb0, 0x09, 0x73, 0x27, 0x2a, 0x53, 0x4e, 0x35,
0x17, 0x04, 0x4b, 0x52, 0xb8, 0x9a, 0xd3, 0x6b, 0x67, 0x3f, 0x50, 0xc7, 0x2d, 0xbe, 0x78, 0xc6,
0x6d, 0xa7, 0x6c, 0x86, 0x75, 0x00, 0xdd, 0xad, 0x97, 0x4c, 0xa4, 0x6c, 0xe8, 0x0f, 0xef, 0x4a,
0xca, 0x5a, 0xcb, 0x88, 0xcc, 0xd7, 0x1b, 0x9b, 0x4f, 0xa0, 0x69, 0xd4, 0x45, 0x7e, 0x70, 0xd5,
0x4a, 0x74, 0xee, 0x5f, 0x11, 0xab, 0xce, 0x5f, 0x0e, 0x96, 0x77, 0xae, 0x34, 0xc8, 0x3a, 0x87,
0xd9, 0xa7, 0xe3, 0x41, 0xec, 0x25, 0xaf, 0x08, 0x93, 0xf7, 0xc5, 0x47, 0x58, 0x85, 0x9c, 0xba,
0xdc, 0xa6, 0xf4, 0x72, 0x6c, 0xc6, 0x86, 0xac, 0x26, 0x27, 0xdb, 0x62, 0x36, 0xc3, 0xba, 0x06,
0xcb, 0x49, 0x93, 0x7c, 0xee, 0xe4, 0xb6, 0xf3, 0x07, 0x05, 0x1e, 0x12, 0x6c, 0x3e, 0x6a, 0x4c,
0x9e, 0xc0, 0x7c, 0xe4, 0xf9, 0xa7, 0x03, 0xaa, 0xd7, 0x13, 0x89, 0x99, 0x58, 0x34, 0xbb, 0x27,
0x1e, 0x3e, 0xb6, 0xf3, 0xbe, 0x60, 0x04, 0x92, 0xdf, 0xd1, 0x84, 0x40, 0x52, 0x53, 0x92, 0x37,
0x80, 0x8f, 0xa1, 0x65, 0x36, 0x46, 0x1e, 0x8a, 0x4b, 0x50, 0x49, 0xcf, 0x74, 0xef, 0xb0, 0x49,
0x19, 0x46, 0x49, 0xeb, 0xe7, 0x05, 0xe8, 0xd8, 0x94, 0x91, 0x31, 0xd5, 0x1a, 0x15, 0xd4, 0xf3,
0x51, 0xa6, 0xda, 0xc9, 0x03, 0x56, 0x97, 0xab, 0xe4, 0x58, 0x57, 0x27, 0x2e, 0xca, 0xf6, 0x54,
0xce, 0xa8, 0x1e, 0x55, 0x61, 0x5a, 0x8c, 0x6f, 0x19, 0x16, 0x45, 0x97, 0x64, 0x77, 0x12, 0xb7,
0xa2, 0xd1, 0xa8, 0xe1, 0x56, 0xec, 0x42, 0x87, 0xbf, 0x4c, 0xa5, 0x8f, 0x43, 0x7c, 0xb8, 0x09,
0xe4, 0xa9, 0xdb, 0x73, 0xc3, 0x20, 0xf0, 0x0f, 0x68, 0x28, 0x62, 0x38, 0x51, 0xfb, 0x44, 0xaf,
0x9b, 0x54, 0x94, 0x79, 0x4a, 0x3e, 0xa6, 0x14, 0xf8, 0xf2, 0xd1, 0x2a, 0x9e, 0xb2, 0x6c, 0x98,
0x7f, 0xe4, 0xbe, 0xa0, 0xb2, 0xa6, 0x64, 0x96, 0xea, 0x23, 0x55, 0xa9, 0x9c, 0x7b, 0x79, 0x0b,
0x32, 0xdb, 0xac, 0xad, 0x97, 0xb6, 0xd6, 0x60, 0xc1, 0xac, 0x53, 0x88, 0x92, 0x2e, 0x54, 0x87,
0x02, 0x13, 0xbd, 0x53, 0xe9, 0x7b, 0x5f, 0x41, 0x5d, 0x7b, 0x6d, 0x8c, 0x2c, 0xc3, 0xfc, 0xf3,
0x9d, 0xa3, 0xbd, 0xad, 0xc3, 0x43, 0xe7, 0xe0, 0xd9, 0xa3, 0x4f, 0xb6, 0x3e, 0x77, 0xb6, 0xd7,
0x0f, 0xb7, 0xdb, 0x53, 0x64, 0x09, 0xc8, 0xde, 0xd6, 0xe1, 0xd1, 0xd6, 0xa6, 0x81, 0x17, 0xc8,
0x2d, 0xe8, 0x3e, 0xdb, 0x7b, 0x76, 0xb8, 0xb5, 0xe9, 0xe4, 0x7d, 0x57, 0x24, 0x37, 0xe1, 0x9a,
0xc8, 0xcf, 0xf9, 0xbc, 0x74, 0xef, 0x23, 0x68, 0xa7, 0xcd, 0x92, 0x86, 0x39, 0xf7, 0x55, 0x76,
0xdf, 0x7b, 0xff, 0xa8, 0x04, 0x90, 0xbc, 0x0e, 0x4b, 0x3a, 0xb0, 0xb0, 0xb9, 0x7e, 0xb4, 0xbe,
0xbb, 0xcf, 0x3a, 0x61, 0xef, 0x1f, 0x6d, 0x6d, 0x1c, 0x39, 0xf6, 0xd6, 0xa7, 0xed, 0xa9, 0xdc,
0x9c, 0xfd, 0x03, 0x76, 0x64, 0x5f, 0x86, 0xf9, 0x9d, 0xbd, 0x9d, 0xa3, 0x9d, 0xf5, 0x5d, 0xc7,
0xde, 0x7f, 0xb6, 0xb3, 0xf7, 0x84, 0xbf, 0x84, 0x50, 0x22, 0x6f, 0xc0, 0xf5, 0x67, 0x07, 0x8f,
0xed, 0xfd, 0xbd, 0x23, 0xe7, 0x70, 0xfb, 0xd9, 0xd1, 0x26, 0xbe, 0xa3, 0xb0, 0x61, 0xef, 0x1c,
0xf0, 0x3a, 0xcb, 0xaf, 0x2a, 0xc0, 0xaa, 0xae, 0xb0, 0x19, 0x7b, 0xb2, 0x7f, 0x78, 0xb8, 0x73,
0xe0, 0x7c, 0xfa, 0x6c, 0xcb, 0xde, 0xd9, 0x3a, 0xc4, 0x0f, 0xa7, 0x73, 0x70, 0x56, 0x7e, 0x86,
0xcc, 0x41, 0xf3, 0x68, 0xf7, 0x33, 0x67, 0x7f, 0x6f, 0x67, 0x7f, 0x0f, 0x8b, 0x56, 0x4d, 0x88,
0x95, 0xaa, 0x91, 0x2e, 0x2c, 0x6d, 0xfd, 0xf6, 0x91, 0x93, 0x53, 0x33, 0x4c, 0xc8, 0x63, 0xdf,
0xd5, 0xc9, 0x35, 0x58, 0x3c, 0x3c, 0x5a, 0x3f, 0xda, 0xd9, 0x70, 0xc4, 0x43, 0x2a, 0x6c, 0x11,
0xd8, 0x67, 0x8d, 0xfc, 0x2c, 0xf6, 0x55, 0x93, 0x2c, 0x40, 0xfb, 0x60, 0xfd, 0xf3, 0xa7, 0x5b,
0x7b, 0x47, 0xce, 0xfa, 0xe6, 0xa6, 0x8d, 0x1f, 0xb4, 0x32, 0x28, 0x2b, 0x3b, 0xcb, 0x16, 0xea,
0xe9, 0xc1, 0x01, 0x16, 0x69, 0xcb, 0x04, 0xcb, 0x99, 0x5b, 0xfb, 0x79, 0x09, 0x5a, 0x3c, 0x98,
0x9e, 0x3f, 0xdf, 0x4e, 0x43, 0xf2, 0x14, 0x66, 0xc4, 0xdf, 0x01, 0x20, 0x8b, 0xea, 0xfa, 0xbb,
0xfe, 0x97, 0x07, 0xba, 0x4b, 0x69, 0x58, 0xb0, 0xdf, 0xfc, 0x5f, 0xfe, 0x4f, 0xff, 0xe3, 0xf7,
0x8a, 0x4d, 0x52, 0xbf, 0x7f, 0xfe, 0xee, 0xfd, 0x53, 0xea, 0x47, 0xac, 0x8e, 0xdf, 0x01, 0x48,
0x5e, 0xb7, 0x27, 0x1d, 0x65, 0x7d, 0x4c, 0x3d, 0xfd, 0xdf, 0xbd, 0x96, 0x93, 0x23, 0xea, 0xbd,
0x86, 0xf5, 0xce, 0x5b, 0x2d, 0x56, 0xaf, 0xe7, 0x7b, 0x31, 0x7f, 0xe9, 0xfe, 0xc3, 0xc2, 0x3d,
0xd2, 0x87, 0x86, 0xfe, 0xee, 0x3c, 0x91, 0xde, 0xfc, 0x9c, 0x97, 0xf3, 0xbb, 0xd7, 0x73, 0xf3,
0xa4, 0xcc, 0xc1, 0x36, 0x16, 0xad, 0x36, 0x6b, 0x63, 0x8c, 0x25, 0x92, 0x56, 0x06, 0x5c, 0x12,
0x27, 0xcf, 0xcb, 0x93, 0x1b, 0x9a, 0x70, 0xcc, 0x3c, 0x6e, 0xdf, 0xbd, 0x39, 0x21, 0x57, 0xb4,
0x75, 0x13, 0xdb, 0x5a, 0xb6, 0x08, 0x6b, 0xab, 0x87, 0x65, 0xe4, 0xe3, 0xf6, 0x1f, 0x16, 0xee,
0xad, 0xfd, 0xde, 0x5d, 0xa8, 0xa9, 0x48, 0x1f, 0xf2, 0x53, 0x68, 0x1a, 0xb7, 0x1d, 0x88, 0x1c,
0x46, 0xde, 0xe5, 0x88, 0xee, 0x8d, 0xfc, 0x4c, 0xd1, 0xf0, 0x2d, 0x6c, 0xb8, 0x43, 0x96, 0x58,
0xc3, 0xe2, 0xba, 0xc0, 0x7d, 0xbc, 0xb7, 0xc3, 0x1f, 0x13, 0x78, 0xa1, 0xed, 0x38, 0xbc, 0xb1,
0x1b, 0xe9, 0x4d, 0xc0, 0x68, 0xed, 0xe6, 0x84, 0x5c, 0xd1, 0xdc, 0x0d, 0x6c, 0x6e, 0x89, 0x2c,
0xe8, 0xcd, 0xa9, 0xe8, 0x1b, 0x8a, 0x0f, 0x7a, 0xe8, 0x2f, 0xaf, 0x93, 0x9b, 0xc9, 0x73, 0x0b,
0x39, 0x2f, 0xb2, 0x2b, 0x12, 0xc9, 0x3e, 0xcb, 0x6e, 0x75, 0xb0, 0x29, 0x42, 0x70, 0xf9, 0xf4,
0x87, 0xd7, 0xc9, 0x31, 0xd4, 0xb5, 0x07, 0x4a, 0xc9, 0xb5, 0x89, 0x8f, 0xa9, 0x76, 0xbb, 0x79,
0x59, 0x79, 0x43, 0xd1, 0xeb, 0xbf, 0xcf, 0x14, 0xd2, 0x1f, 0x43, 0x4d, 0x3d, 0x79, 0x49, 0x96,
0xb5, 0x27, 0x48, 0xf5, 0x27, 0x3a, 0xbb, 0x9d, 0x6c, 0x46, 0x1e, 0xf1, 0xe9, 0xb5, 0x33, 0xe2,
0x7b, 0x0e, 0x75, 0xed, 0x59, 0x4b, 0x35, 0x80, 0xec, 0xd3, 0x99, 0x6a, 0x00, 0x39, 0xaf, 0x60,
0x5a, 0x73, 0xd8, 0x44, 0x9d, 0xd4, 0x90, 0xbe, 0xe3, 0x97, 0x41, 0x44, 0x76, 0x61, 0x51, 0xec,
0xac, 0xc7, 0xf4, 0xeb, 0x2c, 0x43, 0xce, 0x63, 0xf7, 0x0f, 0x0a, 0xe4, 0x23, 0xa8, 0xca, 0xd7,
0x4b, 0xc9, 0x52, 0xfe, 0x2b, 0xac, 0xdd, 0xe5, 0x0c, 0x2e, 0xb6, 0xc1, 0xcf, 0x01, 0x92, 0x37,
0x34, 0x95, 0x90, 0xc8, 0xbc, 0xc9, 0xa9, 0x28, 0x20, 0xfb, 0xe0, 0xa6, 0xb5, 0x84, 0x03, 0x6c,
0x13, 0x14, 0x12, 0x3e, 0xbd, 0x90, 0x0f, 0x1c, 0xfd, 0x04, 0xea, 0xda, 0x33, 0x9a, 0x6a, 0xfa,
0xb2, 0x4f, 0x70, 0xaa, 0xe9, 0xcb, 0x79, 0x75, 0xd3, 0xea, 0x62, 0xed, 0x0b, 0xd6, 0x2c, 0xab,
0x3d, 0xf2, 0x4e, 0xfd, 0x21, 0x2f, 0xc0, 0x16, 0xe8, 0x0c, 0x9a, 0xc6, 0x5b, 0x99, 0x8a, 0x43,
0xf3, 0x5e, 0xe2, 0x54, 0x1c, 0x9a, 0xfb, 0xbc, 0xa6, 0xa4, 0x33, 0x6b, 0x8e, 0xb5, 0x73, 0x8e,
0x45, 0xb4, 0x96, 0x7e, 0x04, 0x75, 0xed, 0xdd, 0x4b, 0x35, 0x96, 0xec, 0x13, 0x9b, 0x6a, 0x2c,
0x79, 0xcf, 0x64, 0x2e, 0x60, 0x1b, 0x2d, 0x0b, 0x49, 0x01, 0xdf, 0x87, 0x61, 0x75, 0xff, 0x14,
0x5a, 0xe6, 0x4b, 0x98, 0x8a, 0xf7, 0x73, 0xdf, 0xd4, 0x54, 0xbc, 0x3f, 0xe1, 0xf9, 0x4c, 0x41,
0xd2, 0xf7, 0xe6, 0x55, 0x23, 0xf7, 0xbf, 0x14, 0x81, 0xcb, 0x5f, 0x91, 0x4f, 0x99, 0x80, 0x13,
0xef, 0x16, 0x91, 0x65, 0x8d, 0x6a, 0xf5, 0xd7, 0x8d, 0x14, 0xbf, 0x64, 0x9e, 0x38, 0x32, 0x89,
0x99, 0xbf, 0x70, 0xf3, 0x04, 0xe6, 0x15, 0x31, 0xab, 0x77, 0x88, 0x22, 0x35, 0x86, 0xdc, 0xe7,
0x8e, 0xba, 0xed, 0x74, 0xee, 0x83, 0x02, 0xdf, 0xfe, 0xf0, 0xb5, 0x17, 0x6d, 0xfb, 0xd3, 0x9f,
0x22, 0xd2, 0xb6, 0x3f, 0xe3, 0x51, 0x98, 0xf4, 0xf6, 0x17, 0x7b, 0xac, 0x0e, 0x1f, 0x66, 0x53,
0x57, 0x3b, 0x15, 0x7b, 0xe5, 0xdf, 0xbe, 0xef, 0xde, 0x7a, 0xf5, 0x8d, 0x50, 0x53, 0x14, 0x49,
0x69, 0x7a, 0x5f, 0xbe, 0x75, 0xf0, 0xbb, 0xd0, 0xd0, 0x1f, 0xf0, 0x23, 0xba, 0x4c, 0x48, 0xb7,
0x74, 0x3d, 0x37, 0xcf, 0xa4, 0x12, 0xd2, 0xd0, 0x9b, 0x21, 0x9f, 0xc1, 0x92, 0x9a, 0x66, 0xfd,
0xb6, 0x60, 0x44, 0xde, 0xc8, 0xb9, 0x43, 0x68, 0x4c, 0xf6, 0xb5, 0x89, 0x97, 0x0c, 0x1f, 0x14,
0x18, 0xf5, 0x99, 0xaf, 0xa2, 0x25, 0x3b, 0x4f, 0xde, 0x63, 0x70, 0xc9, 0xce, 0x93, 0xfb, 0x94,
0x9a, 0xa4, 0x3e, 0x32, 0x6f, 0xcc, 0x11, 0x8f, 0xcf, 0x22, 0x3f, 0x82, 0x59, 0xed, 0x3e, 0xf6,
0xe1, 0xa5, 0xdf, 0x53, 0x9c, 0x94, 0x7d, 0x54, 0xa4, 0x9b, 0x77, 0x2c, 0xb5, 0x96, 0xb1, 0xfe,
0x39, 0xcb, 0x98, 0x1c, 0xc6, 0x45, 0x1b, 0x50, 0xd7, 0xef, 0x7a, 0xbf, 0xa2, 0xde, 0x65, 0x2d,
0x4b, 0x7f, 0xe9, 0xe2, 0x41, 0x81, 0x1c, 0xf0, 0x38, 0x5d, 0xf5, 0x8e, 0x7b, 0x10, 0xa6, 0xf7,
0x61, 0xf3, 0x7d, 0x77, 0xb5, 0x90, 0x79, 0x2f, 0xfb, 0xdf, 0x2d, 0x3c, 0x28, 0x90, 0xbf, 0x57,
0x80, 0x86, 0x71, 0x17, 0xdb, 0x88, 0x7a, 0x4c, 0xf5, 0xac, 0xa3, 0xe7, 0xe9, 0x5d, 0xb3, 0x6c,
0x1c, 0xf6, 0xee, 0xbd, 0x8f, 0x8d, 0x69, 0xfd, 0xd2, 0xb0, 0xcd, 0xae, 0xa6, 0x1f, 0x73, 0xff,
0x2a, 0x5d, 0x40, 0x7f, 0xca, 0xe5, 0xab, 0x07, 0x05, 0xf2, 0x4f, 0x0a, 0xd0, 0x32, 0x9d, 0x2e,
0x6a, 0xb8, 0xb9, 0xee, 0x1d, 0xb5, 0xf8, 0x13, 0x3c, 0x35, 0x3f, 0xc2, 0x5e, 0x1e, 0xdd, 0xb3,
0x8d, 0x5e, 0x8a, 0x17, 0xf8, 0x7e, 0xb5, 0xde, 0x92, 0x0f, 0xf9, 0xdf, 0x56, 0x91, 0xfe, 0x66,
0x92, 0xfd, 0x5b, 0x1c, 0x8a, 0x60, 0xf4, 0xbf, 0x5c, 0x81, 0x8b, 0xf0, 0x13, 0xfe, 0x88, 0xb9,
0x74, 0x5a, 0x32, 0xba, 0xbb, 0xea, 0xf7, 0xd6, 0x6d, 0x1c, 0xd3, 0x2d, 0xeb, 0x9a, 0x31, 0xa6,
0xb4, 0xaa, 0xb0, 0xce, 0x7b, 0x27, 0xfe, 0xe8, 0x44, 0xb2, 0xd7, 0x65, 0xfe, 0x10, 0xc5, 0xe4,
0x4e, 0x0e, 0x79, 0x27, 0x45, 0x71, 0x83, 0x39, 0xae, 0x58, 0x8d, 0x75, 0x0f, 0xfb, 0x7a, 0xdb,
0x7a, 0x63, 0x62, 0x5f, 0xef, 0xa3, 0xeb, 0x84, 0xf5, 0xf8, 0x00, 0x20, 0x89, 0x0f, 0x21, 0xa9,
0xd8, 0x04, 0x25, 0x32, 0xb2, 0x21, 0x24, 0x26, 0x07, 0xca, 0x10, 0x06, 0x56, 0xe3, 0x8f, 0xb9,
0x00, 0xdc, 0x91, 0x51, 0x0d, 0xba, 0xbe, 0x64, 0x06, 0x71, 0x18, 0xfa, 0x52, 0xba, 0x7e, 0x43,
0xfc, 0xa9, 0x10, 0x89, 0x67, 0xd0, 0xdc, 0x0d, 0x82, 0x17, 0xe3, 0x91, 0x0a, 0x48, 0x34, 0xbd,
0x9a, 0xdb, 0x6e, 0x74, 0xd6, 0x4d, 0x8d, 0xc2, 0x5a, 0xc1, 0xaa, 0xba, 0xa4, 0xa3, 0x55, 0x75,
0xff, 0xcb, 0x24, 0xf6, 0xe4, 0x2b, 0xe2, 0xc2, 0x9c, 0x92, 0xaa, 0xaa, 0xe3, 0x5d, 0xb3, 0x1a,
0x43, 0x96, 0xa6, 0x9b, 0x30, 0x14, 0x7b, 0xd9, 0xdb, 0xfb, 0x91, 0xac, 0x13, 0x65, 0x4a, 0x63,
0x93, 0xf6, 0xf0, 0x9a, 0x26, 0xba, 0x06, 0xe7, 0x0d, 0xf7, 0x12, 0xf7, 0x29, 0x76, 0x9b, 0x06,
0x68, 0xee, 0x34, 0x23, 0xf7, 0x32, 0xa4, 0x5f, 0xdc, 0xff, 0x52, 0x38, 0x1d, 0xbf, 0x92, 0x3b,
0x8d, 0xf4, 0xca, 0x1a, 0x3b, 0x4d, 0xca, 0x8d, 0x6b, 0xec, 0x34, 0x19, 0x37, 0xae, 0x31, 0xd5,
0xd2, 0x2b, 0x4c, 0x06, 0x30, 0x97, 0xf1, 0xfc, 0xaa, 0x4d, 0x66, 0x92, 0xbf, 0xb8, 0xbb, 0x32,
0xb9, 0x80, 0xd9, 0xda, 0x3d, 0xb3, 0xb5, 0x43, 0x68, 0x6e, 0x52, 0x3e, 0x59, 0xfc, 0x06, 0x46,
0xea, 0x42, 0xbf, 0x7e, 0xbf, 0x23, 0xbd, 0x25, 0x60, 0x9e, 0xa9, 0x93, 0xf0, 0x77, 0xea, 0x7e,
0x0c, 0xf5, 0x27, 0x34, 0x96, 0x57, 0x2e, 0x94, 0x56, 0x9c, 0xba, 0x83, 0xd1, 0xcd, 0xb9, 0xb1,
0x61, 0xd2, 0x0c, 0xd6, 0x76, 0x9f, 0xf6, 0x4f, 0x29, 0x17, 0x4e, 0x8e, 0xd7, 0xff, 0x8a, 0xfc,
0x36, 0x56, 0xae, 0x2e, 0xc0, 0x2d, 0x69, 0xf1, 0xf3, 0x7a, 0xe5, 0xb3, 0x29, 0x3c, 0xaf, 0x66,
0x3f, 0xe8, 0x53, 0x4d, 0x3b, 0xf3, 0xa1, 0xae, 0x5d, 0xa0, 0x55, 0x0c, 0x94, 0xbd, 0x6f, 0xac,
0x18, 0x28, 0xe7, 0xbe, 0xad, 0x75, 0x17, 0xdb, 0xb1, 0xc8, 0x4a, 0xd2, 0x0e, 0xbf, 0x63, 0x9b,
0xb4, 0x74, 0xff, 0x4b, 0x77, 0x18, 0x7f, 0x45, 0x9e, 0xe3, 0x63, 0x8f, 0xfa, 0x95, 0x92, 0x44,
0xcd, 0x4f, 0xdf, 0x3e, 0x51, 0x93, 0xa5, 0x65, 0x99, 0xaa, 0x3f, 0x6f, 0x0a, 0x75, 0xaf, 0xf7,
0x01, 0x0e, 0xe3, 0x60, 0xb4, 0xe9, 0xd2, 0x61, 0xe0, 0x27, 0xb2, 0x36, 0xb9, 0xd0, 0x90, 0xc8,
0x2f, 0xed, 0x56, 0x03, 0x79, 0xae, 0x9d, 0x8b, 0x8c, 0x5b, 0x39, 0x92, 0xb8, 0x26, 0xde, 0x79,
0x50, 0x13, 0x92, 0x73, 0xef, 0xe1, 0x41, 0x81, 0xac, 0x03, 0x24, 0xae, 0x7f, 0x75, 0xca, 0xc9,
0x44, 0x15, 0x28, 0xb1, 0x97, 0x13, 0x27, 0x70, 0x00, 0xb5, 0xc4, 0x51, 0xba, 0x9c, 0x5c, 0xa7,
0x37, 0xdc, 0xaa, 0x6a, 0x07, 0xcf, 0xb8, 0x2f, 0xad, 0x36, 0x4e, 0x15, 0x90, 0x2a, 0x9b, 0x2a,
0xf4, 0x49, 0x7a, 0x30, 0xcf, 0x3b, 0xa8, 0x14, 0x1c, 0x0c, 0xc4, 0x57, 0x6f, 0x7a, 0x66, 0x5d,
0x88, 0x8a, 0x9b, 0x73, 0x3d, 0x60, 0x86, 0xb1, 0x86, 0x51, 0x2b, 0xbf, 0x04, 0xc0, 0x44, 0xf3,
0x10, 0xe6, 0x32, 0x4e, 0x15, 0xc5, 0xd2, 0x93, 0xbc, 0x66, 0x8a, 0xa5, 0x27, 0xfa, 0x63, 0xac,
0x45, 0x6c, 0x72, 0xd6, 0x02, 0x3c, 0x9c, 0x5d, 0x78, 0x71, 0xef, 0x8c, 0x35, 0xf7, 0x07, 0x05,
0x98, 0xcf, 0xf1, 0x99, 0x90, 0x37, 0xe5, 0x39, 0x7f, 0xa2, 0x3f, 0xa5, 0x9b, 0x6b, 0x52, 0xb7,
0x0e, 0xb1, 0x9d, 0xa7, 0xe4, 0x13, 0x63, 0x63, 0xe3, 0xd6, 0x6c, 0xc1, 0x99, 0xaf, 0x54, 0x2a,
0x72, 0x35, 0x8a, 0x2f, 0x60, 0x99, 0x77, 0x64, 0x7d, 0x30, 0x48, 0x99, 0xfb, 0x6f, 0x65, 0xfe,
0xfe, 0xa2, 0xe1, 0xc6, 0xe8, 0x4e, 0xfe, 0xfb, 0x8c, 0x13, 0x14, 0x60, 0xde, 0x55, 0x32, 0x86,
0x76, 0xda, 0x84, 0x4e, 0x26, 0xd7, 0xd5, 0x7d, 0xc3, 0x38, 0xb1, 0xe6, 0x98, 0xdd, 0xbf, 0x8b,
0x8d, 0xbd, 0x61, 0x75, 0xf3, 0xe6, 0x85, 0x1f, 0x62, 0xd9, 0x7a, 0xfc, 0x25, 0x65, 0xef, 0x4f,
0x8d, 0x53, 0x36, 0x30, 0xc9, 0x41, 0xa1, 0xce, 0xcc, 0xf9, 0xee, 0x82, 0x3b, 0xd8, 0xfc, 0x8a,
0x75, 0x3d, 0xaf, 0xf9, 0x90, 0x7f, 0xc2, 0x4f, 0xcf, 0xcb, 0x69, 0xbe, 0x96, 0x3d, 0x58, 0xc9,
0x5b, 0xef, 0x89, 0xa7, 0x97, 0xd4, 0x5c, 0x4f, 0xa1, 0x6e, 0xd7, 0xd0, 0xed, 0xfb, 0x8a, 0x7d,
0x72, 0x1c, 0x09, 0x8a, 0x7d, 0xf2, 0x1c, 0x02, 0xa6, 0x5e, 0x23, 0x5d, 0x01, 0x1f, 0x16, 0xee,
0x3d, 0x7a, 0xeb, 0x47, 0xdf, 0x3d, 0xf5, 0xe2, 0xb3, 0xf1, 0xf1, 0x6a, 0x2f, 0x18, 0xde, 0x1f,
0x48, 0xfb, 0xa0, 0xb8, 0x9c, 0x76, 0x7f, 0xe0, 0xf7, 0xef, 0x63, 0xb5, 0xc7, 0xd3, 0xf8, 0x07,
0x63, 0x7f, 0xf0, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x8f, 0x46, 0xa4, 0x00, 0x62, 0x76, 0x00,
0x00,
// 9799 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x4d, 0x6c, 0x24, 0xc9,
0x95, 0x5e, 0x67, 0xfd, 0x90, 0x55, 0xaf, 0x7e, 0x58, 0x0c, 0xb2, 0xc9, 0xea, 0xea, 0x9f, 0xe9,
0x49, 0xb5, 0x66, 0x5a, 0xad, 0x11, 0xbb, 0x87, 0x92, 0x66, 0x7b, 0xa7, 0xbd, 0x5a, 0xf1, 0xaf,
0x9b, 0xd4, 0xb0, 0x49, 0x2a, 0xc9, 0x56, 0xaf, 0xa4, 0x5d, 0xa4, 0x92, 0x55, 0x41, 0x32, 0xd5,
0x55, 0x99, 0x35, 0x99, 0x59, 0x64, 0x53, 0xf2, 0xf8, 0x60, 0xd8, 0x86, 0xe1, 0x8b, 0x21, 0x2c,
0x0c, 0x78, 0x0d, 0x1b, 0x0b, 0x68, 0x6d, 0x18, 0x86, 0x0f, 0xf6, 0xc5, 0xc6, 0xda, 0x90, 0x4f,
0x3e, 0xac, 0x2f, 0xb6, 0x0f, 0x36, 0x60, 0xc0, 0x06, 0x0c, 0x2c, 0xd6, 0x07, 0x2f, 0x0c, 0xdf,
0x6c, 0x9f, 0x8d, 0x78, 0xf1, 0x93, 0x11, 0x99, 0x59, 0xec, 0x1e, 0x49, 0x3b, 0x97, 0x6e, 0xc6,
0xf7, 0x22, 0xe3, 0xf7, 0xbd, 0x17, 0x2f, 0xde, 0x8b, 0x88, 0x82, 0x7a, 0x34, 0xee, 0xaf, 0x8c,
0xa3, 0x30, 0x09, 0x49, 0x75, 0x18, 0x44, 0xe3, 0x7e, 0xef, 0xd6, 0x69, 0x18, 0x9e, 0x0e, 0xe9,
0x43, 0x6f, 0xec, 0x3f, 0xf4, 0x82, 0x20, 0x4c, 0xbc, 0xc4, 0x0f, 0x83, 0x98, 0x67, 0xb2, 0x7f,
0x04, 0xed, 0x67, 0x34, 0x38, 0xa4, 0x74, 0xe0, 0xd0, 0x4f, 0x27, 0x34, 0x4e, 0xc8, 0x57, 0x61,
0xde, 0xa3, 0x3f, 0xa1, 0x74, 0xe0, 0x8e, 0xbd, 0x38, 0x1e, 0x9f, 0x45, 0x5e, 0x4c, 0xbb, 0xd6,
0x5d, 0xeb, 0x7e, 0xd3, 0xe9, 0x70, 0xc2, 0x81, 0xc2, 0xc9, 0xbb, 0xd0, 0x8c, 0x59, 0x56, 0x1a,
0x24, 0x51, 0x38, 0xbe, 0xec, 0x96, 0x30, 0x5f, 0x83, 0x61, 0x5b, 0x1c, 0xb2, 0x87, 0x30, 0xa7,
0x6a, 0x88, 0xc7, 0x61, 0x10, 0x53, 0xf2, 0x08, 0x16, 0xfb, 0xfe, 0xf8, 0x8c, 0x46, 0x2e, 0x7e,
0x3c, 0x0a, 0xe8, 0x28, 0x0c, 0xfc, 0x7e, 0xd7, 0xba, 0x5b, 0xbe, 0x5f, 0x77, 0x08, 0xa7, 0xb1,
0x2f, 0x9e, 0x0b, 0x0a, 0x79, 0x1f, 0xe6, 0x68, 0xc0, 0x71, 0x3a, 0xc0, 0xaf, 0x44, 0x55, 0xed,
0x14, 0x66, 0x1f, 0xd8, 0x7f, 0xb3, 0x04, 0xf3, 0x3b, 0x81, 0x9f, 0xbc, 0xf4, 0x86, 0x43, 0x9a,
0xc8, 0x3e, 0xbd, 0x0f, 0x73, 0x17, 0x08, 0x60, 0x9f, 0x2e, 0xc2, 0x68, 0x20, 0x7a, 0xd4, 0xe6,
0xf0, 0x81, 0x40, 0xa7, 0xb6, 0xac, 0x34, 0xb5, 0x65, 0x85, 0xc3, 0x55, 0x9e, 0x32, 0x5c, 0xef,
0xc3, 0x5c, 0x44, 0xfb, 0xe1, 0x39, 0x8d, 0x2e, 0xdd, 0x0b, 0x3f, 0x18, 0x84, 0x17, 0xdd, 0xca,
0x5d, 0xeb, 0x7e, 0xd5, 0x69, 0x4b, 0xf8, 0x25, 0xa2, 0x64, 0x1d, 0xe6, 0xfa, 0x67, 0x5e, 0x10,
0xd0, 0xa1, 0x7b, 0xec, 0xf5, 0x5f, 0x4d, 0xc6, 0x71, 0xb7, 0x7a, 0xd7, 0xba, 0xdf, 0x58, 0xbd,
0xb1, 0x82, 0xb3, 0xba, 0xb2, 0x71, 0xe6, 0x05, 0xeb, 0x48, 0x39, 0x0c, 0xbc, 0x71, 0x7c, 0x16,
0x26, 0x4e, 0x5b, 0x7c, 0xc1, 0xe1, 0xd8, 0x5e, 0x04, 0xa2, 0x8f, 0x04, 0x1f, 0x7b, 0xfb, 0x9f,
0x5a, 0xb0, 0xf0, 0x22, 0x18, 0x86, 0xfd, 0x57, 0xbf, 0xe4, 0x10, 0x15, 0xf4, 0xa1, 0xf4, 0xb6,
0x7d, 0x28, 0x7f, 0xde, 0x3e, 0x2c, 0xc1, 0xa2, 0xd9, 0x58, 0xd1, 0x0b, 0x0a, 0xd7, 0xd9, 0xd7,
0xa7, 0x54, 0x36, 0x4b, 0x76, 0xe3, 0x2b, 0xd0, 0xe9, 0x4f, 0xa2, 0x88, 0x06, 0xb9, 0x7e, 0xcc,
0x09, 0x5c, 0x75, 0xe4, 0x5d, 0x68, 0x06, 0xf4, 0x22, 0xcd, 0x26, 0x78, 0x37, 0xa0, 0x17, 0x32,
0x8b, 0xdd, 0x85, 0xa5, 0x6c, 0x35, 0xa2, 0x01, 0x7f, 0x6a, 0x41, 0xe5, 0x45, 0xf2, 0x3a, 0x24,
0x2b, 0x50, 0x49, 0x2e, 0xc7, 0x5c, 0x42, 0xda, 0xab, 0x44, 0x74, 0x6d, 0x6d, 0x30, 0x88, 0x68,
0x1c, 0x1f, 0x5d, 0x8e, 0xa9, 0xd3, 0xf4, 0x78, 0xc2, 0x65, 0xf9, 0x48, 0x17, 0x66, 0x45, 0x1a,
0x2b, 0xac, 0x3b, 0x32, 0x49, 0xee, 0x00, 0x78, 0xa3, 0x70, 0x12, 0x24, 0x6e, 0xec, 0x25, 0x38,
0x54, 0x65, 0x47, 0x43, 0xc8, 0x2d, 0xa8, 0x8f, 0x5f, 0xb9, 0x71, 0x3f, 0xf2, 0xc7, 0x09, 0xb2,
0x4d, 0xdd, 0x49, 0x01, 0xf2, 0x55, 0xa8, 0x85, 0x93, 0x64, 0x1c, 0xfa, 0x41, 0x22, 0x58, 0x65,
0x4e, 0xb4, 0x65, 0x7f, 0x92, 0x1c, 0x30, 0xd8, 0x51, 0x19, 0xc8, 0x3d, 0x68, 0xf5, 0xc3, 0xe0,
0xc4, 0x8f, 0x46, 0x5c, 0x19, 0x74, 0x67, 0xb0, 0x36, 0x13, 0xb4, 0xff, 0x55, 0x09, 0x1a, 0x47,
0x91, 0x17, 0xc4, 0x5e, 0x9f, 0x01, 0xac, 0xe9, 0xc9, 0x6b, 0xf7, 0xcc, 0x8b, 0xcf, 0xb0, 0xb7,
0x75, 0x47, 0x26, 0xc9, 0x12, 0xcc, 0xf0, 0x86, 0x62, 0x9f, 0xca, 0x8e, 0x48, 0x91, 0x0f, 0x60,
0x3e, 0x98, 0x8c, 0x5c, 0xb3, 0xae, 0x32, 0x72, 0x4b, 0x9e, 0xc0, 0x06, 0xe0, 0x98, 0xcd, 0x35,
0xaf, 0x82, 0xf7, 0x50, 0x43, 0x88, 0x0d, 0x4d, 0x91, 0xa2, 0xfe, 0xe9, 0x19, 0xef, 0x66, 0xd5,
0x31, 0x30, 0x56, 0x46, 0xe2, 0x8f, 0xa8, 0x1b, 0x27, 0xde, 0x68, 0x2c, 0xba, 0xa5, 0x21, 0x48,
0x0f, 0x13, 0x6f, 0xe8, 0x9e, 0x50, 0x1a, 0x77, 0x67, 0x05, 0x5d, 0x21, 0xe4, 0x3d, 0x68, 0x0f,
0x68, 0x9c, 0xb8, 0x62, 0x52, 0x68, 0xdc, 0xad, 0xa1, 0xe8, 0x67, 0x50, 0x56, 0x4e, 0xe4, 0x5d,
0xb8, 0x6c, 0x00, 0xe8, 0xeb, 0x6e, 0x9d, 0xb7, 0x35, 0x45, 0x18, 0xe7, 0x3c, 0xa3, 0x89, 0x36,
0x7a, 0xb1, 0xe0, 0x50, 0x7b, 0x17, 0x88, 0x06, 0x6f, 0xd2, 0xc4, 0xf3, 0x87, 0x31, 0xf9, 0x08,
0x9a, 0x89, 0x96, 0x19, 0x55, 0x61, 0x43, 0xb1, 0x93, 0xf6, 0x81, 0x63, 0xe4, 0xb3, 0xcf, 0xa0,
0xf6, 0x94, 0xd2, 0x5d, 0x7f, 0xe4, 0x27, 0x64, 0x09, 0xaa, 0x27, 0xfe, 0x6b, 0xca, 0x19, 0xbe,
0xbc, 0x7d, 0xcd, 0xe1, 0x49, 0xf2, 0x0e, 0x00, 0xfe, 0xe1, 0x8e, 0x14, 0x63, 0x6d, 0x5f, 0x73,
0xea, 0x88, 0x3d, 0x67, 0x9c, 0xd5, 0x83, 0xd9, 0x31, 0x8d, 0xfa, 0x54, 0xce, 0xdf, 0xf6, 0x35,
0x47, 0x02, 0xeb, 0xb3, 0x50, 0x1d, 0xb2, 0xd2, 0xed, 0x3f, 0xa9, 0x42, 0xe3, 0x90, 0x06, 0x4a,
0xd2, 0x08, 0x54, 0xd8, 0x98, 0x08, 0xe9, 0xc2, 0xbf, 0xc9, 0x97, 0xa0, 0x81, 0xe3, 0x14, 0x27,
0x91, 0x1f, 0x9c, 0x72, 0x06, 0x5f, 0x2f, 0x75, 0x2d, 0x07, 0x18, 0x7c, 0x88, 0x28, 0xe9, 0x40,
0xd9, 0x1b, 0x49, 0x06, 0x67, 0x7f, 0x92, 0x1b, 0x50, 0xf3, 0x46, 0x09, 0x6f, 0x5e, 0x13, 0xe1,
0x59, 0x6f, 0x94, 0x60, 0xd3, 0xde, 0x85, 0xe6, 0xd8, 0xbb, 0x1c, 0x31, 0x79, 0x56, 0x5c, 0xd1,
0x74, 0x1a, 0x02, 0xdb, 0x66, 0x6c, 0xb1, 0x0a, 0x0b, 0x7a, 0x16, 0x59, 0x79, 0x55, 0x55, 0x3e,
0xaf, 0xe5, 0x16, 0x6d, 0x78, 0x1f, 0xe6, 0xe4, 0x37, 0x11, 0xef, 0x0f, 0xf2, 0x4a, 0xdd, 0x69,
0x0b, 0x58, 0xf6, 0xf2, 0x3e, 0x74, 0x4e, 0xfc, 0xc0, 0x1b, 0xba, 0xfd, 0x61, 0x72, 0xee, 0x0e,
0xe8, 0x30, 0xf1, 0x90, 0x6b, 0xaa, 0x4e, 0x1b, 0xf1, 0x8d, 0x61, 0x72, 0xbe, 0xc9, 0x50, 0xf2,
0x01, 0xd4, 0x4f, 0x28, 0x75, 0x71, 0xb0, 0xba, 0x35, 0x43, 0x02, 0xe5, 0x0c, 0x39, 0xb5, 0x13,
0x39, 0x57, 0x1f, 0x40, 0x27, 0x9c, 0x24, 0xa7, 0xa1, 0x1f, 0x9c, 0xba, 0x4c, 0xe7, 0xb9, 0xfe,
0x00, 0xb9, 0xa8, 0xb2, 0x5e, 0x7a, 0x64, 0x39, 0x6d, 0x49, 0x63, 0xda, 0x67, 0x67, 0x40, 0xde,
0x83, 0xb9, 0xa1, 0x17, 0x27, 0xee, 0x59, 0x38, 0x76, 0xc7, 0x93, 0xe3, 0x57, 0xf4, 0xb2, 0xdb,
0xc2, 0x81, 0x68, 0x31, 0x78, 0x3b, 0x1c, 0x1f, 0x20, 0x48, 0x6e, 0x03, 0x60, 0x3b, 0x79, 0x23,
0xe0, 0xae, 0x75, 0xbf, 0xe5, 0xd4, 0x19, 0xc2, 0x2b, 0xfd, 0x3e, 0x2c, 0xe0, 0xf4, 0xf4, 0x27,
0x71, 0x12, 0x8e, 0x5c, 0xa6, 0xaf, 0xa3, 0x41, 0xdc, 0x6d, 0x20, 0xaf, 0x7d, 0x45, 0x34, 0x56,
0x9b, 0xe3, 0x95, 0x4d, 0x1a, 0x27, 0x1b, 0x98, 0xd9, 0xe1, 0x79, 0xd9, 0xa2, 0x7e, 0xe9, 0xcc,
0x0f, 0xb2, 0x38, 0xf9, 0x00, 0x88, 0x37, 0x1c, 0x86, 0x17, 0x6e, 0x4c, 0x87, 0x27, 0xae, 0x18,
0xc4, 0x6e, 0xfb, 0xae, 0x75, 0xbf, 0xe6, 0x74, 0x90, 0x72, 0x48, 0x87, 0x27, 0x07, 0x1c, 0x27,
0x1f, 0x41, 0x0b, 0x1b, 0x72, 0x42, 0xbd, 0x64, 0x12, 0xd1, 0xb8, 0x3b, 0x77, 0xb7, 0x7c, 0xbf,
0xbd, 0x3a, 0xaf, 0xc6, 0x0b, 0xe1, 0x75, 0x3f, 0x71, 0x9a, 0x2c, 0x9f, 0x48, 0xc7, 0xbd, 0x4d,
0x58, 0x2a, 0x6e, 0x12, 0x63, 0x2a, 0x36, 0x2a, 0x8c, 0x19, 0x2b, 0x0e, 0xfb, 0x93, 0x2c, 0x42,
0xf5, 0xdc, 0x1b, 0x4e, 0xa8, 0xd0, 0xeb, 0x3c, 0xf1, 0x71, 0xe9, 0xb1, 0x65, 0xff, 0xb1, 0x05,
0x4d, 0xde, 0x4b, 0x61, 0x8f, 0xdc, 0x83, 0x96, 0xe4, 0x06, 0x1a, 0x45, 0x61, 0x24, 0xd4, 0x9b,
0x09, 0x92, 0x07, 0xd0, 0x91, 0xc0, 0x38, 0xa2, 0xfe, 0xc8, 0x3b, 0x95, 0x65, 0xe7, 0x70, 0xb2,
0x9a, 0x96, 0x18, 0x85, 0x93, 0x84, 0x8a, 0x95, 0xaf, 0x29, 0x3a, 0xe8, 0x30, 0xcc, 0x31, 0xb3,
0x30, 0xf5, 0x56, 0xc0, 0xea, 0x06, 0x66, 0xff, 0x1d, 0x0b, 0x08, 0x6b, 0xfa, 0x51, 0xc8, 0x8b,
0x10, 0x5c, 0x9a, 0x95, 0x12, 0xeb, 0xad, 0xa5, 0xa4, 0x74, 0x95, 0x94, 0xd8, 0x50, 0xe5, 0xad,
0xaf, 0x14, 0xb4, 0x9e, 0x93, 0xbe, 0x53, 0xa9, 0x95, 0x3b, 0x15, 0xfb, 0xbf, 0x96, 0x61, 0x71,
0x83, 0x2f, 0xdd, 0x6b, 0xfd, 0x3e, 0x1d, 0x2b, 0xf9, 0x79, 0x07, 0x1a, 0x41, 0x38, 0xa0, 0x92,
0x6b, 0x79, 0xc3, 0x80, 0x41, 0x1a, 0xcb, 0x9e, 0x79, 0x7e, 0xc0, 0x1b, 0xce, 0xc7, 0xb3, 0x8e,
0x08, 0x36, 0xfb, 0x3d, 0x98, 0x1b, 0xd3, 0x60, 0xa0, 0x8b, 0x09, 0x37, 0xae, 0x5a, 0x02, 0x16,
0x12, 0xf2, 0x0e, 0x34, 0x4e, 0x26, 0x3c, 0x1f, 0x53, 0x2e, 0x15, 0xe4, 0x03, 0x10, 0xd0, 0x1a,
0xd7, 0x31, 0xe3, 0x49, 0x7c, 0x86, 0xd4, 0x2a, 0x52, 0x67, 0x59, 0x9a, 0x91, 0x6e, 0x03, 0x0c,
0x26, 0x71, 0x22, 0xa4, 0x66, 0x06, 0x89, 0x75, 0x86, 0x70, 0xa9, 0xf9, 0x1a, 0x2c, 0x8c, 0xbc,
0xd7, 0x2e, 0xf2, 0x8f, 0xeb, 0x07, 0xee, 0xc9, 0x10, 0x57, 0x9f, 0x59, 0xcc, 0xd7, 0x19, 0x79,
0xaf, 0xbf, 0xc7, 0x28, 0x3b, 0xc1, 0x53, 0xc4, 0x99, 0x6a, 0x91, 0x66, 0x4f, 0x44, 0x63, 0x1a,
0x9d, 0x53, 0xd4, 0x06, 0x15, 0x65, 0xdb, 0x38, 0x1c, 0x65, 0x2d, 0x1a, 0xb1, 0x7e, 0x27, 0xc3,
0x3e, 0x17, 0x7d, 0x67, 0x76, 0xe4, 0x07, 0xdb, 0xc9, 0xb0, 0x4f, 0x6e, 0x01, 0x30, 0x5d, 0x32,
0xa6, 0x91, 0xfb, 0xea, 0x02, 0xe5, 0xb8, 0x82, 0xba, 0xe3, 0x80, 0x46, 0x9f, 0x5c, 0x90, 0x9b,
0x50, 0xef, 0xc7, 0xa8, 0x8c, 0xbc, 0xcb, 0x6e, 0x03, 0x85, 0xbc, 0xd6, 0x8f, 0x99, 0x1a, 0xf2,
0x2e, 0x99, 0x20, 0xb2, 0xd6, 0x7a, 0x38, 0x0b, 0x74, 0x80, 0xc5, 0xc7, 0xa8, 0x55, 0x5b, 0xd8,
0xd8, 0x35, 0x41, 0x60, 0xf5, 0xc4, 0xe4, 0x4b, 0xd0, 0x92, 0x8d, 0x3d, 0x19, 0x7a, 0xa7, 0x31,
0xaa, 0x95, 0x96, 0xd3, 0x14, 0xe0, 0x53, 0x86, 0xd9, 0x2f, 0xb9, 0xb1, 0xa5, 0xcd, 0xad, 0x90,
0x1b, 0xb6, 0xec, 0x23, 0x82, 0xf3, 0x5a, 0x73, 0x44, 0xaa, 0x68, 0xd2, 0x4a, 0x05, 0x93, 0x66,
0xff, 0xdc, 0x82, 0xa6, 0x28, 0x19, 0x2d, 0x14, 0xf2, 0x08, 0x88, 0x9c, 0xc5, 0xe4, 0xb5, 0x3f,
0x70, 0x8f, 0x2f, 0x13, 0x1a, 0x73, 0xa6, 0xd9, 0xbe, 0xe6, 0x14, 0xd0, 0x98, 0x1e, 0x35, 0xd0,
0x38, 0x89, 0x38, 0x4f, 0x6f, 0x5f, 0x73, 0x72, 0x14, 0x26, 0x62, 0xcc, 0x06, 0x9a, 0x24, 0xae,
0x1f, 0x0c, 0xe8, 0x6b, 0x64, 0xa5, 0x96, 0x63, 0x60, 0xeb, 0x6d, 0x68, 0xea, 0xdf, 0xd9, 0x3f,
0x86, 0x9a, 0xb4, 0xa0, 0xd0, 0x7a, 0xc8, 0xb4, 0xcb, 0xd1, 0x10, 0xd2, 0x83, 0x9a, 0xd9, 0x0a,
0xa7, 0xf6, 0x79, 0xea, 0xb6, 0xbf, 0x05, 0x9d, 0x5d, 0xc6, 0x44, 0x01, 0x63, 0x5a, 0x61, 0x16,
0x2e, 0xc1, 0x8c, 0x26, 0x3c, 0x75, 0x47, 0xa4, 0xd8, 0xfa, 0x7b, 0x16, 0xc6, 0x89, 0xa8, 0x07,
0xff, 0xb6, 0xff, 0xc4, 0x02, 0xb2, 0x15, 0x27, 0xfe, 0xc8, 0x4b, 0xe8, 0x53, 0xaa, 0xd4, 0xc3,
0x3e, 0x34, 0x59, 0x69, 0x47, 0xe1, 0x1a, 0x37, 0xd2, 0xb8, 0x71, 0xf1, 0x55, 0x21, 0xce, 0xf9,
0x0f, 0x56, 0xf4, 0xdc, 0x5c, 0xe5, 0x1b, 0x05, 0x30, 0x69, 0x4b, 0xbc, 0xe8, 0x94, 0x26, 0x68,
0xc1, 0x09, 0xfb, 0x1f, 0x38, 0xb4, 0x11, 0x06, 0x27, 0xbd, 0xdf, 0x86, 0xf9, 0x5c, 0x19, 0xba,
0x8e, 0xae, 0x17, 0xe8, 0xe8, 0xb2, 0xae, 0xa3, 0xfb, 0xb0, 0x60, 0xb4, 0x4b, 0x70, 0x5c, 0x17,
0x66, 0x99, 0x60, 0x30, 0x43, 0xc1, 0xe2, 0x86, 0x82, 0x48, 0x92, 0x55, 0x58, 0x3c, 0xa1, 0x34,
0xf2, 0x12, 0x4c, 0xa2, 0xe8, 0xb0, 0x39, 0x11, 0x25, 0x17, 0xd2, 0xec, 0x3f, 0xb3, 0x60, 0x8e,
0x69, 0xd3, 0xe7, 0x5e, 0x70, 0x29, 0xc7, 0x6a, 0xb7, 0x70, 0xac, 0xee, 0x6b, 0x8b, 0xa3, 0x96,
0xfb, 0xf3, 0x0e, 0x54, 0x39, 0x3b, 0x50, 0xe4, 0x2e, 0x34, 0x8d, 0xe6, 0x56, 0xb9, 0x45, 0x1a,
0x7b, 0xc9, 0x01, 0x8d, 0xd6, 0x2f, 0x13, 0xfa, 0xab, 0x0f, 0xe5, 0x7b, 0xd0, 0x49, 0x9b, 0x2d,
0xc6, 0x91, 0x40, 0x85, 0x31, 0xa6, 0x28, 0x00, 0xff, 0xb6, 0xff, 0xbe, 0xc5, 0x33, 0x6e, 0x84,
0xbe, 0xb2, 0x56, 0x59, 0x46, 0x66, 0xf4, 0xca, 0x8c, 0xec, 0xef, 0xa9, 0xd6, 0xfe, 0xaf, 0xde,
0x59, 0xa6, 0x13, 0x63, 0x1a, 0x0c, 0x5c, 0x6f, 0x38, 0x44, 0x45, 0x5c, 0x73, 0x66, 0x59, 0x7a,
0x6d, 0x38, 0xb4, 0xdf, 0x87, 0x79, 0xad, 0x75, 0x57, 0xf4, 0x63, 0x0f, 0xc8, 0xae, 0x1f, 0x27,
0x2f, 0x82, 0x78, 0xac, 0x19, 0x72, 0x37, 0xa1, 0xce, 0xb4, 0x2d, 0x6b, 0x19, 0x97, 0xdc, 0xaa,
0xc3, 0xd4, 0x2f, 0x6b, 0x57, 0x8c, 0x44, 0xef, 0xb5, 0x20, 0x96, 0x04, 0xd1, 0x7b, 0x8d, 0x44,
0xfb, 0x31, 0x2c, 0x18, 0xe5, 0x89, 0xaa, 0xdf, 0x85, 0xea, 0x24, 0x79, 0x1d, 0x4a, 0x53, 0xbd,
0x21, 0x38, 0x84, 0x6d, 0x0a, 0x1d, 0x4e, 0xb1, 0x9f, 0xc0, 0xfc, 0x1e, 0xbd, 0x10, 0x82, 0x2c,
0x1b, 0xf2, 0xde, 0x1b, 0x37, 0x8c, 0x48, 0xb7, 0x57, 0x80, 0xe8, 0x1f, 0xa7, 0x02, 0x20, 0xb7,
0x8f, 0x96, 0xb1, 0x7d, 0xb4, 0xdf, 0x03, 0x72, 0xe8, 0x9f, 0x06, 0xcf, 0x69, 0x1c, 0x7b, 0xa7,
0x4a, 0xf4, 0x3b, 0x50, 0x1e, 0xc5, 0xa7, 0x42, 0x55, 0xb1, 0x3f, 0xed, 0xaf, 0xc3, 0x82, 0x91,
0x4f, 0x14, 0x7c, 0x0b, 0xea, 0xb1, 0x7f, 0x1a, 0xa0, 0xa1, 0x25, 0x8a, 0x4e, 0x01, 0xfb, 0x29,
0x2c, 0x7e, 0x8f, 0x46, 0xfe, 0xc9, 0xe5, 0x9b, 0x8a, 0x37, 0xcb, 0x29, 0x65, 0xcb, 0xd9, 0x82,
0xeb, 0x99, 0x72, 0x44, 0xf5, 0x9c, 0x7d, 0xc5, 0x4c, 0xd6, 0x1c, 0x9e, 0xd0, 0x74, 0x5f, 0x49,
0xd7, 0x7d, 0xf6, 0x0b, 0x20, 0x1b, 0x61, 0x10, 0xd0, 0x7e, 0x72, 0x40, 0x69, 0x94, 0x7a, 0xae,
0x52, 0x5e, 0x6d, 0xac, 0x2e, 0x8b, 0x91, 0xcd, 0x2a, 0x54, 0xc1, 0xc4, 0x04, 0x2a, 0x63, 0x1a,
0x8d, 0xb0, 0xe0, 0x9a, 0x83, 0x7f, 0xdb, 0xd7, 0x61, 0xc1, 0x28, 0x56, 0xec, 0xf5, 0x3f, 0x84,
0xeb, 0x9b, 0x7e, 0xdc, 0xcf, 0x57, 0xd8, 0x85, 0xd9, 0xf1, 0xe4, 0xd8, 0x4d, 0x25, 0x51, 0x26,
0xd9, 0xf6, 0x2f, 0xfb, 0x89, 0x28, 0xec, 0x6f, 0x58, 0x50, 0xd9, 0x3e, 0xda, 0xdd, 0x60, 0x6b,
0x85, 0x1f, 0xf4, 0xc3, 0x11, 0xb3, 0xc2, 0x78, 0xa7, 0x55, 0x7a, 0xaa, 0x84, 0xdd, 0x82, 0x3a,
0x1a, 0x6f, 0x6c, 0xc7, 0x2b, 0xec, 0xa0, 0x14, 0x60, 0xbb, 0x6d, 0xfa, 0x7a, 0xec, 0x47, 0xb8,
0x9d, 0x96, 0x9b, 0xe4, 0x0a, 0x2e, 0x33, 0x79, 0x82, 0xfd, 0xef, 0x66, 0x61, 0x56, 0x2c, 0xbe,
0x7c, 0x21, 0x4f, 0xfc, 0x73, 0x9a, 0x2e, 0xe4, 0x2c, 0xc5, 0x0c, 0xe3, 0x88, 0x8e, 0xc2, 0x44,
0xd9, 0x6f, 0x7c, 0x1a, 0x4c, 0x10, 0xbd, 0x09, 0xc2, 0x88, 0xe0, 0xfe, 0x87, 0x32, 0xcf, 0x65,
0x80, 0xe4, 0x16, 0xcc, 0x4a, 0x63, 0xa0, 0xa2, 0x36, 0x3a, 0x12, 0x62, 0xa3, 0xd1, 0xf7, 0xc6,
0x5e, 0xdf, 0x4f, 0x2e, 0x85, 0x5a, 0x50, 0x69, 0x56, 0xfe, 0x30, 0xec, 0x7b, 0x43, 0xf7, 0xd8,
0x1b, 0x7a, 0x41, 0x9f, 0x4a, 0x6f, 0x85, 0x01, 0xb2, 0x9d, 0xbb, 0x68, 0x96, 0xcc, 0xc6, 0x77,
0xf7, 0x19, 0x94, 0xad, 0xe1, 0xfd, 0x70, 0x34, 0xf2, 0xd9, 0xee, 0x83, 0x9b, 0x66, 0x65, 0x47,
0x43, 0xb8, 0x6f, 0x04, 0x53, 0x17, 0x7c, 0x04, 0xeb, 0xd2, 0x37, 0xa2, 0x81, 0xac, 0x94, 0x8c,
0x85, 0x56, 0x76, 0x34, 0x84, 0xcd, 0xc5, 0x24, 0x88, 0x69, 0x92, 0x0c, 0xe9, 0x40, 0x35, 0xa8,
0x81, 0xd9, 0xf2, 0x04, 0xf2, 0x08, 0x16, 0xb8, 0x0f, 0x22, 0xf6, 0x92, 0x30, 0x3e, 0xf3, 0x63,
0x37, 0x66, 0xdb, 0x27, 0xbe, 0x17, 0x2e, 0x22, 0x91, 0xc7, 0xb0, 0x9c, 0x81, 0x23, 0xda, 0xa7,
0xfe, 0x39, 0x1d, 0xa0, 0x09, 0x57, 0x76, 0xa6, 0x91, 0xc9, 0x5d, 0x68, 0x04, 0x93, 0x91, 0x3b,
0x19, 0x0f, 0x3c, 0x66, 0xc4, 0xb4, 0xd1, 0xb8, 0xd4, 0x21, 0xf2, 0x21, 0x48, 0x3b, 0x4d, 0x58,
0x8f, 0x73, 0x86, 0x86, 0x63, 0xdc, 0xeb, 0x98, 0x39, 0x18, 0x63, 0xa6, 0x26, 0x69, 0x47, 0xec,
0x3b, 0x25, 0x80, 0x72, 0x12, 0xf9, 0xe7, 0x5e, 0x42, 0xbb, 0xf3, 0x5c, 0xa9, 0x8b, 0x24, 0xfb,
0xce, 0x0f, 0xfc, 0xc4, 0xf7, 0x92, 0x30, 0xea, 0x12, 0xa4, 0xa5, 0x00, 0x1b, 0x44, 0xe4, 0x8f,
0x38, 0xf1, 0x92, 0x49, 0x2c, 0x2c, 0xd4, 0x05, 0x64, 0xae, 0x3c, 0x81, 0x7c, 0x04, 0x4b, 0x9c,
0x23, 0x90, 0x24, 0x6c, 0x6f, 0x34, 0x15, 0x16, 0x71, 0x44, 0xa6, 0x50, 0xd9, 0x50, 0x0a, 0x16,
0xc9, 0x7d, 0x78, 0x9d, 0x0f, 0xe5, 0x14, 0x32, 0x6b, 0x1f, 0x6b, 0x81, 0xdf, 0x77, 0x45, 0x0e,
0x26, 0x22, 0x4b, 0xd8, 0x8b, 0x3c, 0x81, 0xb1, 0xf8, 0xd0, 0x3f, 0xa1, 0x89, 0x3f, 0xa2, 0xdd,
0x65, 0xce, 0xe2, 0x32, 0xcd, 0x04, 0x70, 0x32, 0x46, 0x4a, 0x97, 0x0b, 0x3c, 0x4f, 0x21, 0x33,
0x0e, 0xc3, 0x98, 0x4a, 0xcf, 0x53, 0xf7, 0x86, 0x10, 0x2d, 0x1d, 0xb4, 0xff, 0xd0, 0xe2, 0x4b,
0x94, 0x10, 0xe7, 0x58, 0xdb, 0x7c, 0x71, 0x41, 0x76, 0xc3, 0x60, 0x78, 0x29, 0x64, 0x1b, 0x38,
0xb4, 0x1f, 0x0c, 0x2f, 0x99, 0xf9, 0xef, 0x07, 0x7a, 0x16, 0xae, 0x0d, 0x9b, 0x12, 0xc4, 0x4c,
0xef, 0x40, 0x63, 0x3c, 0x39, 0x1e, 0xfa, 0x7d, 0x9e, 0xa5, 0xcc, 0x4b, 0xe1, 0x10, 0x66, 0x60,
0xbb, 0x4f, 0x3e, 0x9f, 0x3c, 0x47, 0x05, 0x73, 0x34, 0x04, 0xc6, 0xb2, 0xd8, 0xeb, 0xb0, 0x68,
0x36, 0x50, 0xa8, 0xfd, 0x07, 0x50, 0x13, 0x5a, 0x42, 0xba, 0x21, 0xda, 0x9a, 0x73, 0x98, 0x6d,
0x96, 0x14, 0xdd, 0xfe, 0xd7, 0x15, 0x58, 0x10, 0xe8, 0x06, 0xeb, 0xfe, 0xe1, 0x64, 0x34, 0xf2,
0xa2, 0x02, 0xf5, 0x63, 0xbd, 0x41, 0xfd, 0x94, 0xf2, 0xea, 0xe7, 0x8e, 0xb1, 0x0b, 0xe5, 0xfa,
0x4b, 0x43, 0xc8, 0x7d, 0x98, 0x63, 0x43, 0xce, 0x37, 0x05, 0xba, 0x7f, 0x32, 0x0b, 0xe7, 0x55,
0x66, 0xb5, 0x48, 0x65, 0xea, 0xea, 0x6e, 0x26, 0xa3, 0xee, 0x6c, 0x68, 0xf2, 0xe9, 0x15, 0x1a,
0x7c, 0x56, 0x6c, 0xc9, 0x34, 0x8c, 0xb5, 0x27, 0xab, 0x5c, 0xb8, 0x26, 0x9b, 0x2b, 0x52, 0x2d,
0xfe, 0x88, 0xe2, 0x0a, 0xa1, 0xe5, 0xae, 0x0b, 0xd5, 0x92, 0x27, 0x91, 0xa7, 0x00, 0xbc, 0x2e,
0x34, 0x53, 0x00, 0xcd, 0x94, 0xf7, 0xcc, 0x59, 0xd1, 0xc7, 0x7f, 0x85, 0x25, 0x26, 0x11, 0x45,
0xd3, 0x45, 0xfb, 0xd2, 0xfe, 0x5b, 0x16, 0x34, 0x34, 0x1a, 0xb9, 0x0e, 0xf3, 0x1b, 0xfb, 0xfb,
0x07, 0x5b, 0xce, 0xda, 0xd1, 0xce, 0xf7, 0xb6, 0xdc, 0x8d, 0xdd, 0xfd, 0xc3, 0xad, 0xce, 0x35,
0x06, 0xef, 0xee, 0x6f, 0xac, 0xed, 0xba, 0x4f, 0xf7, 0x9d, 0x0d, 0x09, 0x5b, 0x64, 0x09, 0x88,
0xb3, 0xf5, 0x7c, 0xff, 0x68, 0xcb, 0xc0, 0x4b, 0xa4, 0x03, 0xcd, 0x75, 0x67, 0x6b, 0x6d, 0x63,
0x5b, 0x20, 0x65, 0xb2, 0x08, 0x9d, 0xa7, 0x2f, 0xf6, 0x36, 0x77, 0xf6, 0x9e, 0xb9, 0x1b, 0x6b,
0x7b, 0x1b, 0x5b, 0xbb, 0x5b, 0x9b, 0x9d, 0x0a, 0x69, 0x41, 0x7d, 0x6d, 0x7d, 0x6d, 0x6f, 0x73,
0x7f, 0x6f, 0x6b, 0xb3, 0x53, 0xb5, 0xff, 0xbb, 0x05, 0xd7, 0xb1, 0xd5, 0x83, 0xac, 0x90, 0xdc,
0x85, 0x46, 0x3f, 0x0c, 0xc7, 0x6c, 0x7b, 0x90, 0x2e, 0x80, 0x3a, 0xc4, 0x04, 0x80, 0xab, 0x8e,
0x93, 0x30, 0xea, 0x53, 0x21, 0x23, 0x80, 0xd0, 0x53, 0x86, 0x30, 0x01, 0x10, 0xd3, 0xcb, 0x73,
0x70, 0x11, 0x69, 0x70, 0x8c, 0x67, 0x59, 0x82, 0x99, 0xe3, 0x88, 0x7a, 0xfd, 0x33, 0x21, 0x1d,
0x22, 0x45, 0xbe, 0x92, 0xee, 0x5f, 0xfb, 0x6c, 0xf4, 0x87, 0x74, 0x80, 0x1c, 0x53, 0x73, 0xe6,
0x04, 0xbe, 0x21, 0x60, 0xa6, 0x2b, 0xbd, 0x63, 0x2f, 0x18, 0x84, 0x01, 0x1d, 0x08, 0xe3, 0x38,
0x05, 0xec, 0x03, 0x58, 0xca, 0xf6, 0x4f, 0xc8, 0xd8, 0x47, 0x9a, 0x8c, 0x71, 0x5b, 0xb5, 0x37,
0x7d, 0x36, 0x35, 0x79, 0xfb, 0xb3, 0x32, 0x54, 0x98, 0xe9, 0x32, 0xdd, 0xcc, 0xd1, 0xad, 0xd1,
0x72, 0x2e, 0x98, 0x81, 0x5b, 0x62, 0xbe, 0x90, 0x09, 0x77, 0x4c, 0x8a, 0xa4, 0xf4, 0x88, 0xf6,
0xcf, 0x85, 0x43, 0x46, 0x43, 0x98, 0x80, 0xb0, 0xad, 0x02, 0x7e, 0x2d, 0x04, 0x44, 0xa6, 0x25,
0x0d, 0xbf, 0x9c, 0x4d, 0x69, 0xf8, 0x5d, 0x17, 0x66, 0xfd, 0xe0, 0x38, 0x9c, 0x04, 0x03, 0x14,
0x88, 0x9a, 0x23, 0x93, 0x18, 0x3e, 0x41, 0x41, 0x65, 0x5a, 0x96, 0xb3, 0x7f, 0x0a, 0x90, 0x55,
0xa8, 0xc7, 0x97, 0x41, 0x5f, 0xe7, 0xf9, 0x45, 0x31, 0x4a, 0x6c, 0x0c, 0x56, 0x0e, 0x2f, 0x83,
0x3e, 0x72, 0x78, 0x9a, 0x8d, 0x7c, 0x13, 0x6a, 0xca, 0x81, 0xc9, 0x95, 0xd7, 0x0d, 0xfd, 0x13,
0xe9, 0xb5, 0xe4, 0xfb, 0x42, 0x95, 0xb5, 0xf7, 0x09, 0xb4, 0x0c, 0x92, 0xbe, 0x99, 0x6b, 0xf1,
0xcd, 0xdc, 0x3d, 0x7d, 0x33, 0x97, 0xea, 0x44, 0xf1, 0x99, 0xbe, 0xb9, 0xfb, 0x6d, 0xa8, 0xc9,
0xa6, 0x31, 0xd1, 0x78, 0xb1, 0xf7, 0xc9, 0xde, 0xfe, 0xcb, 0x3d, 0xf7, 0xf0, 0xfb, 0x7b, 0x1b,
0x9d, 0x6b, 0x64, 0x0e, 0x1a, 0x6b, 0x1b, 0x28, 0x6d, 0x08, 0x58, 0x2c, 0xcb, 0xc1, 0xda, 0xe1,
0xa1, 0x42, 0x4a, 0x36, 0x81, 0x0e, 0xd3, 0xcc, 0xac, 0xc5, 0x2a, 0x44, 0xf1, 0x11, 0xcc, 0x6b,
0x58, 0xba, 0xdf, 0x19, 0x33, 0x20, 0xb3, 0xdf, 0x41, 0xe3, 0x96, 0x53, 0xec, 0x65, 0xb8, 0xce,
0x92, 0x5b, 0xe7, 0x34, 0x48, 0x0e, 0x27, 0xc7, 0x3c, 0x32, 0xe5, 0x87, 0x81, 0xfd, 0xd7, 0x2d,
0xa8, 0x2b, 0xca, 0x15, 0xfc, 0x24, 0x83, 0x69, 0x25, 0x9c, 0x80, 0x9e, 0x56, 0x05, 0x7e, 0xb9,
0x82, 0xff, 0x1a, 0x7b, 0xa4, 0xba, 0x82, 0x58, 0x67, 0x0f, 0xb6, 0xb6, 0x1c, 0x77, 0x7f, 0x6f,
0x77, 0x67, 0x8f, 0x69, 0x16, 0xd6, 0x59, 0x04, 0x9e, 0x3e, 0x45, 0xc4, 0xb2, 0x3b, 0xd0, 0x7e,
0x46, 0x93, 0x9d, 0xe0, 0x24, 0x94, 0x5d, 0xfd, 0x7f, 0x55, 0x98, 0x53, 0x50, 0xba, 0xc7, 0x3a,
0xa7, 0x51, 0xec, 0x87, 0x01, 0x5a, 0x47, 0x75, 0x47, 0x26, 0x99, 0xda, 0xf5, 0x07, 0x34, 0x48,
0xfc, 0xe4, 0xd2, 0x35, 0x9c, 0x32, 0x59, 0x98, 0xed, 0x67, 0xbc, 0xa1, 0xef, 0xc9, 0x20, 0x1f,
0x4f, 0x30, 0xb4, 0x1f, 0x0e, 0xc3, 0x08, 0xcd, 0xa0, 0xba, 0xc3, 0x13, 0x64, 0x15, 0x16, 0x99,
0xf9, 0xa5, 0xbb, 0xcc, 0x50, 0x58, 0xb9, 0x87, 0xa8, 0x90, 0xc6, 0xd4, 0x3a, 0xc3, 0xc5, 0xda,
0xad, 0x3e, 0xe1, 0xd6, 0x7e, 0x11, 0x89, 0x7c, 0x03, 0xae, 0x33, 0x58, 0xad, 0xf7, 0xea, 0x9b,
0x39, 0xfc, 0xa6, 0x98, 0xc8, 0xa4, 0x86, 0xd7, 0xcf, 0x66, 0xbe, 0xca, 0x0d, 0x3b, 0x05, 0xe4,
0x22, 0x72, 0x33, 0x7c, 0xa9, 0xca, 0x46, 0xe4, 0xb4, 0xa8, 0x5e, 0x2d, 0x17, 0xd5, 0xfb, 0x06,
0x5c, 0x3f, 0xa6, 0x71, 0xe2, 0x9e, 0x51, 0x6f, 0x40, 0x23, 0x94, 0x46, 0x1e, 0xbc, 0xe3, 0x76,
0x6c, 0x31, 0x11, 0x17, 0xc0, 0xcb, 0xa0, 0x4f, 0x07, 0x6e, 0x12, 0xba, 0xb8, 0x50, 0xa3, 0x4c,
0xd7, 0x9c, 0x2c, 0x6c, 0xe6, 0x3c, 0x8d, 0xbc, 0xf1, 0x99, 0x30, 0x34, 0xb3, 0x30, 0x33, 0x11,
0x12, 0x1a, 0x27, 0x01, 0xe5, 0xa1, 0x93, 0x1a, 0xba, 0xc5, 0x25, 0x44, 0xee, 0xc1, 0x0c, 0x16,
0x18, 0x77, 0x3b, 0x28, 0x00, 0xcd, 0x54, 0x89, 0xfa, 0x81, 0x23, 0x68, 0x6c, 0x5b, 0x39, 0x89,
0xfc, 0xb8, 0xdb, 0xc4, 0xa8, 0x21, 0xfe, 0x4d, 0xbe, 0xad, 0xe9, 0x89, 0x05, 0xfc, 0xf6, 0x9e,
0xf8, 0x36, 0xc3, 0x79, 0x5f, 0x88, 0xca, 0xf8, 0x4e, 0xa5, 0xd6, 0xe8, 0x34, 0xed, 0xdf, 0x80,
0x2a, 0xb6, 0x1c, 0x79, 0x12, 0xc7, 0xcf, 0x12, 0x3c, 0x89, 0x68, 0x17, 0x66, 0x03, 0x9a, 0x5c,
0x84, 0xd1, 0x2b, 0x19, 0xa6, 0x16, 0x49, 0xfb, 0x27, 0xb8, 0xf7, 0x56, 0x61, 0xdb, 0x17, 0xb8,
0x69, 0x20, 0x37, 0xa1, 0xce, 0xe7, 0x34, 0x3e, 0xf3, 0x84, 0x3b, 0xa0, 0x86, 0xc0, 0xe1, 0x99,
0xc7, 0xd6, 0x47, 0x83, 0x4d, 0xb8, 0x87, 0xa5, 0x81, 0xd8, 0x36, 0xe7, 0x92, 0x7b, 0xd0, 0x96,
0x01, 0xe1, 0xd8, 0x1d, 0xd2, 0x93, 0x44, 0xfa, 0x47, 0x83, 0xc9, 0x08, 0xdd, 0x30, 0xbb, 0xf4,
0x24, 0xb1, 0xf7, 0x60, 0x5e, 0xac, 0x59, 0xfb, 0x63, 0x2a, 0xab, 0xfe, 0xcd, 0x22, 0xfb, 0xaf,
0xb1, 0xba, 0x60, 0x2e, 0x72, 0x3c, 0x04, 0x6e, 0xe6, 0xb4, 0x1d, 0x20, 0xfa, 0x1a, 0x28, 0x0a,
0x14, 0x06, 0x98, 0xf4, 0x00, 0x8b, 0xee, 0x18, 0x18, 0x1b, 0x9f, 0x78, 0xd2, 0xef, 0xcb, 0x30,
0x7e, 0xcd, 0x91, 0x49, 0xfb, 0x3f, 0x5b, 0xb0, 0x80, 0xa5, 0x49, 0x0b, 0x56, 0xd8, 0x19, 0x8f,
0x3f, 0x47, 0x33, 0xa5, 0xff, 0x9d, 0x7b, 0x9d, 0x17, 0xa1, 0xaa, 0x5b, 0x1e, 0x3c, 0xf1, 0xf9,
0xbd, 0x6d, 0x95, 0x9c, 0xb7, 0xed, 0x01, 0x74, 0x06, 0x74, 0xe8, 0xe3, 0x51, 0x0e, 0xb9, 0x8e,
0x73, 0x73, 0x35, 0x87, 0xdb, 0x7f, 0xd7, 0x82, 0x79, 0x6e, 0x28, 0xe0, 0x9e, 0x4b, 0x0c, 0xd5,
0x5f, 0x92, 0xfb, 0x13, 0xa1, 0xa0, 0x44, 0xa7, 0xd2, 0xa5, 0x13, 0x51, 0x9e, 0x79, 0xfb, 0x9a,
0x63, 0x66, 0x26, 0x4f, 0xd0, 0xea, 0x0e, 0x5c, 0x44, 0x0b, 0x0e, 0x87, 0x98, 0xf3, 0xb2, 0x7d,
0xcd, 0xd1, 0xb2, 0xaf, 0xd7, 0xd8, 0x96, 0x89, 0xe1, 0xf6, 0x33, 0x68, 0x19, 0x15, 0x19, 0x5e,
0xc1, 0x26, 0xf7, 0x0a, 0xe6, 0xdc, 0xef, 0xa5, 0x02, 0xf7, 0xfb, 0xef, 0x57, 0x80, 0x30, 0xc6,
0xca, 0xcc, 0xdc, 0x5d, 0x33, 0x86, 0x25, 0xcf, 0x89, 0xa4, 0x10, 0x59, 0x05, 0xa2, 0x25, 0x65,
0x6c, 0xad, 0xac, 0x62, 0x6b, 0x05, 0x54, 0xa6, 0xf5, 0x85, 0x55, 0xa9, 0xe2, 0x56, 0xe8, 0xf1,
0xe1, 0xd3, 0x54, 0x48, 0x63, 0x96, 0x0f, 0x06, 0xb1, 0xd8, 0xde, 0x54, 0x78, 0x49, 0x64, 0x3a,
0xcb, 0x0f, 0x33, 0x6f, 0xe4, 0x87, 0xd9, 0x1c, 0x3f, 0x68, 0xfb, 0xf4, 0x9a, 0xb9, 0x4f, 0xbf,
0x07, 0x2d, 0x19, 0xab, 0xe2, 0x61, 0x7a, 0xe1, 0x14, 0x31, 0x40, 0xc6, 0x4f, 0x72, 0xab, 0xac,
0x9c, 0x01, 0x3c, 0x08, 0x9d, 0xc3, 0xd9, 0xc2, 0x92, 0xfa, 0x63, 0x1b, 0xd8, 0xd8, 0x14, 0xc0,
0x9d, 0x35, 0xe3, 0x12, 0x77, 0x12, 0x88, 0x33, 0x22, 0x74, 0x80, 0xee, 0x10, 0xb6, 0xb3, 0xce,
0x12, 0xf2, 0xbb, 0xe4, 0x56, 0xc1, 0x2e, 0x99, 0x7c, 0x94, 0x06, 0x76, 0xe2, 0x33, 0x7f, 0x84,
0x6b, 0x7b, 0x7a, 0xc4, 0xe2, 0x29, 0x27, 0x1d, 0x9e, 0xf9, 0x23, 0xc7, 0xc8, 0x67, 0xff, 0xc2,
0x82, 0x0e, 0xe3, 0x0a, 0x83, 0xf1, 0x3f, 0x06, 0x94, 0xd1, 0xb7, 0xe4, 0x7b, 0x23, 0x2f, 0x79,
0x0c, 0x75, 0x4c, 0x87, 0x63, 0x1a, 0x08, 0xae, 0xef, 0x9a, 0x5c, 0x9f, 0x6a, 0xb7, 0xed, 0x6b,
0x4e, 0x9a, 0x99, 0xad, 0x65, 0xd9, 0xc0, 0x1a, 0x8f, 0x12, 0x67, 0x61, 0x4d, 0x3a, 0xb6, 0x01,
0x3e, 0xa1, 0x97, 0xbb, 0x61, 0x1f, 0x5d, 0x2a, 0xb7, 0x01, 0x18, 0x0f, 0x9e, 0x78, 0x23, 0x5f,
0x78, 0x04, 0xaa, 0x4e, 0xfd, 0x15, 0xbd, 0x7c, 0x8a, 0x00, 0x53, 0xe3, 0x8c, 0x9c, 0x8a, 0x48,
0xd5, 0xa9, 0xbd, 0xa2, 0x97, 0x3b, 0x28, 0x1e, 0x2e, 0xb4, 0x3e, 0xa1, 0x97, 0x9b, 0x94, 0xdb,
0x75, 0x61, 0x44, 0x6c, 0x68, 0x45, 0xde, 0x05, 0xb3, 0xdc, 0x8c, 0x88, 0x58, 0x23, 0xf2, 0x2e,
0x3e, 0xa1, 0x97, 0xeb, 0x18, 0x12, 0x7b, 0x00, 0xb3, 0x8c, 0x3e, 0x0c, 0xfb, 0x62, 0x65, 0x92,
0x41, 0xfe, 0xb4, 0x51, 0xce, 0xcc, 0x2b, 0xfc, 0xdb, 0xfe, 0x8f, 0x16, 0xb4, 0xd8, 0x08, 0xa0,
0xda, 0x63, 0x33, 0x21, 0xcf, 0x8a, 0x58, 0xe9, 0x59, 0x91, 0x55, 0xa1, 0x33, 0xb8, 0x0e, 0x2d,
0x4d, 0xd7, 0xa1, 0x38, 0x6c, 0x5c, 0x81, 0x7e, 0x08, 0x75, 0x2e, 0x4e, 0x4c, 0x7c, 0xcb, 0xc6,
0x4c, 0x19, 0x1d, 0x72, 0x6a, 0x98, 0xed, 0x13, 0x1e, 0x96, 0xd6, 0x7c, 0x3a, 0x7c, 0x90, 0xeb,
0x1c, 0x61, 0xe4, 0x82, 0x08, 0x67, 0xb5, 0x28, 0xc2, 0xf9, 0x02, 0x1a, 0x1a, 0x63, 0x91, 0x6f,
0xf1, 0xd8, 0x30, 0x6f, 0x3c, 0xe7, 0x42, 0x93, 0x71, 0x8c, 0xde, 0xa3, 0xc2, 0xd4, 0x81, 0xf5,
0x19, 0xa8, 0x20, 0x4b, 0x3e, 0x81, 0x79, 0xad, 0x58, 0xbe, 0x43, 0x2c, 0x6a, 0x93, 0x55, 0xd4,
0xa6, 0x3f, 0xb0, 0x60, 0x51, 0x7c, 0x8d, 0xe7, 0x8a, 0x7c, 0xb6, 0x8c, 0x3f, 0x8f, 0x4f, 0xd9,
0x42, 0xca, 0x4a, 0x77, 0x23, 0x7a, 0xea, 0xc7, 0x09, 0x95, 0x8e, 0xf4, 0x02, 0x09, 0x61, 0x2c,
0xcd, 0xb2, 0x3a, 0x22, 0x27, 0x79, 0x02, 0x0d, 0xfc, 0x94, 0xef, 0x61, 0xc5, 0xb4, 0x74, 0xf3,
0x1f, 0xf2, 0xa6, 0x32, 0x4d, 0x1e, 0xab, 0xd4, 0x7a, 0x1d, 0x66, 0x93, 0xc8, 0x3f, 0x3d, 0xa5,
0x91, 0xbd, 0xa4, 0x9a, 0xc6, 0xa4, 0x8d, 0x1e, 0x26, 0x74, 0xcc, 0x8c, 0x23, 0xc6, 0x19, 0x0d,
0x21, 0x54, 0xbf, 0xb4, 0xf3, 0xbc, 0xa7, 0x9d, 0x90, 0xe3, 0xbb, 0xd5, 0xf4, 0x40, 0xdc, 0x7d,
0x98, 0x1b, 0x31, 0x43, 0x89, 0x59, 0xf0, 0x86, 0xe3, 0x3c, 0x0b, 0x33, 0xc3, 0x1b, 0xed, 0x96,
0xd8, 0x4d, 0xfc, 0xa1, 0x2b, 0xa9, 0xe2, 0x2c, 0x5a, 0x11, 0x89, 0x2d, 0xdf, 0x71, 0xe2, 0x9d,
0x52, 0x61, 0x1d, 0xf3, 0x84, 0xdd, 0x85, 0xa5, 0x83, 0x74, 0x5a, 0x34, 0x87, 0x84, 0xfd, 0xcf,
0x5a, 0xb0, 0x9c, 0x23, 0xa9, 0x93, 0xb3, 0xc2, 0x1b, 0x3c, 0xf4, 0x47, 0xc7, 0xa1, 0xf2, 0xe6,
0x58, 0xba, 0xa3, 0xd8, 0x20, 0x91, 0x53, 0xb8, 0x2e, 0xb9, 0x82, 0xa9, 0x90, 0xd4, 0xec, 0x2f,
0xa1, 0x25, 0xfa, 0xa1, 0xa9, 0xb1, 0xb2, 0x15, 0x4a, 0x5c, 0x5f, 0x15, 0x8b, 0xcb, 0x23, 0x67,
0xd0, 0x55, 0xec, 0x27, 0x2c, 0x25, 0x6d, 0x27, 0xc3, 0xea, 0xfa, 0xe0, 0x0d, 0x75, 0x19, 0xfe,
0x0b, 0x67, 0x6a, 0x69, 0xe4, 0x12, 0xee, 0x48, 0x1a, 0x9a, 0x42, 0xf9, 0xfa, 0x2a, 0x6f, 0xd5,
0x37, 0xf4, 0xcc, 0x98, 0x95, 0xbe, 0xa1, 0x60, 0xf2, 0x63, 0x58, 0xba, 0xf0, 0xfc, 0x44, 0x36,
0x4b, 0xdb, 0x45, 0x55, 0xb1, 0xca, 0xd5, 0x37, 0x54, 0xf9, 0x92, 0x7f, 0x6c, 0xd8, 0x87, 0x53,
0x4a, 0xec, 0xfd, 0xa2, 0x04, 0x6d, 0xb3, 0x1c, 0xc6, 0xa6, 0x42, 0x2b, 0x49, 0x83, 0x42, 0xee,
0x3f, 0x33, 0x70, 0xde, 0x29, 0x5a, 0x2a, 0x72, 0x8a, 0xea, 0x6e, 0xc8, 0xf2, 0x9b, 0xa2, 0x2e,
0x95, 0xb7, 0x8b, 0xba, 0x54, 0x0b, 0xa3, 0x2e, 0xd3, 0x9d, 0xf3, 0x33, 0xbf, 0xac, 0x73, 0x7e,
0xf6, 0x4a, 0xe7, 0x7c, 0xef, 0xff, 0x5a, 0x40, 0xf2, 0xdc, 0x4b, 0x9e, 0x71, 0x3f, 0x70, 0x40,
0x87, 0x42, 0xbd, 0x7d, 0xed, 0xed, 0x24, 0x40, 0xce, 0x96, 0xfc, 0x9a, 0x89, 0xa2, 0x7e, 0x7c,
0x55, 0xdf, 0xdb, 0xb4, 0x9c, 0x22, 0x52, 0x26, 0xf2, 0x54, 0x79, 0x73, 0xe4, 0xa9, 0xfa, 0xe6,
0xc8, 0xd3, 0x4c, 0x36, 0xf2, 0xd4, 0xfb, 0x6b, 0x16, 0x2c, 0x14, 0xb0, 0xd9, 0xaf, 0xaf, 0xe3,
0x8c, 0x31, 0x0c, 0xed, 0x53, 0x12, 0x8c, 0xa1, 0x83, 0xbd, 0xbf, 0x0c, 0x2d, 0x43, 0xb4, 0x7e,
0x7d, 0xf5, 0x67, 0xb7, 0x67, 0x9c, 0xb3, 0x0d, 0xac, 0xf7, 0xbf, 0x4a, 0x40, 0xf2, 0xe2, 0xfd,
0x85, 0xb6, 0x21, 0x3f, 0x4e, 0xe5, 0x82, 0x71, 0xfa, 0x0b, 0x5d, 0x79, 0x3e, 0x80, 0x79, 0x71,
0x26, 0x5f, 0xf3, 0xfc, 0x73, 0x8e, 0xc9, 0x13, 0xd8, 0x06, 0xd5, 0x0c, 0xfb, 0xd5, 0x8c, 0x33,
0xc8, 0xda, 0xf2, 0x9b, 0x89, 0xfe, 0xd9, 0x3d, 0xe8, 0x8a, 0x11, 0xca, 0xbb, 0xfe, 0xfe, 0x45,
0x59, 0xed, 0xb1, 0x91, 0x28, 0xec, 0xe7, 0x6f, 0x40, 0x53, 0x5f, 0x3e, 0xc4, 0x74, 0x64, 0x82,
0x3f, 0xcc, 0xcc, 0xd0, 0x73, 0x91, 0x4d, 0x68, 0xa3, 0x92, 0x1c, 0xa8, 0xef, 0xb8, 0xa5, 0x71,
0x85, 0x43, 0x7b, 0xfb, 0x9a, 0x93, 0xf9, 0x86, 0xfc, 0x16, 0xb4, 0x4d, 0x37, 0x97, 0xb0, 0x09,
0x8b, 0xcc, 0x48, 0xf6, 0xb9, 0x99, 0x99, 0xac, 0x41, 0x27, 0xeb, 0x27, 0x13, 0x07, 0x24, 0xa7,
0x14, 0x90, 0xcb, 0x4e, 0x1e, 0x0b, 0x3f, 0x67, 0x15, 0xfd, 0x9c, 0xf7, 0xcc, 0xcf, 0xb4, 0x61,
0x5a, 0xe1, 0xff, 0x69, 0x1e, 0xcf, 0xdf, 0x05, 0x48, 0x31, 0xd2, 0x81, 0xe6, 0xfe, 0xc1, 0xd6,
0x9e, 0xbb, 0xb1, 0xbd, 0xb6, 0xb7, 0xb7, 0xb5, 0xdb, 0xb9, 0x46, 0x08, 0xb4, 0x31, 0x2e, 0xb2,
0xa9, 0x30, 0x8b, 0x61, 0xc2, 0x0b, 0x2c, 0xb1, 0x12, 0x59, 0x84, 0xce, 0xce, 0x5e, 0x06, 0x2d,
0x33, 0x4b, 0x4c, 0x34, 0x91, 0x59, 0x62, 0xfc, 0xce, 0xc5, 0x3a, 0x67, 0x0f, 0x69, 0x9d, 0xfc,
0x03, 0x0b, 0xae, 0x67, 0x08, 0xe9, 0x29, 0x5a, 0x6e, 0x80, 0x98, 0x56, 0x89, 0x09, 0x62, 0x4c,
0x57, 0x6e, 0xdc, 0x32, 0x1a, 0x24, 0x4f, 0x60, 0x3c, 0xaf, 0x6d, 0xf4, 0x32, 0x92, 0x54, 0x44,
0xb2, 0x97, 0xd5, 0x61, 0xc5, 0x4c, 0xc3, 0x4f, 0xf8, 0x5d, 0x0e, 0x9d, 0x90, 0xfa, 0x7b, 0xcd,
0x26, 0xcb, 0x24, 0xdb, 0xa3, 0x1b, 0xc6, 0x8e, 0xd9, 0xde, 0x42, 0x9a, 0xfd, 0xbf, 0x2b, 0x40,
0xbe, 0x3b, 0xa1, 0xd1, 0x25, 0x1e, 0x93, 0x55, 0x61, 0xa6, 0xe5, 0xac, 0xd3, 0x7b, 0x66, 0x3c,
0x39, 0x66, 0x5b, 0x09, 0xb1, 0xc5, 0x29, 0xbd, 0xd5, 0x71, 0xf8, 0xa2, 0xe3, 0xe8, 0x95, 0x37,
0x1f, 0x47, 0xaf, 0xbe, 0xe9, 0x38, 0xfa, 0x97, 0xa0, 0xe5, 0x9f, 0x06, 0x21, 0x53, 0x07, 0xcc,
0x84, 0x88, 0xbb, 0x33, 0x77, 0xcb, 0xf7, 0x9b, 0x4e, 0x53, 0x80, 0x7b, 0x0c, 0x23, 0x4f, 0xd2,
0x4c, 0x74, 0x70, 0x8a, 0xd7, 0x27, 0x74, 0x05, 0xb1, 0x35, 0x38, 0xa5, 0x62, 0x47, 0x87, 0x4e,
0x0f, 0xf9, 0x31, 0xc3, 0x63, 0x72, 0x0f, 0xda, 0x71, 0x38, 0x61, 0x46, 0x95, 0x1c, 0x06, 0xee,
0x0a, 0x6e, 0x72, 0xf4, 0x80, 0x0f, 0xc6, 0x0a, 0x2c, 0x4c, 0x62, 0xea, 0x8e, 0xfc, 0x38, 0x66,
0x0b, 0x67, 0x3f, 0x0c, 0x92, 0x28, 0x1c, 0x0a, 0xd7, 0xee, 0xfc, 0x24, 0xa6, 0xcf, 0x39, 0x65,
0x83, 0x13, 0xc8, 0x37, 0xd2, 0x26, 0x8d, 0x3d, 0x3f, 0x8a, 0xbb, 0x80, 0x4d, 0x92, 0x3d, 0x65,
0xed, 0x3e, 0xf0, 0xfc, 0x48, 0xb5, 0x85, 0x25, 0xe2, 0xcc, 0x31, 0xf9, 0x46, 0xf6, 0x98, 0xfc,
0x8f, 0x8a, 0x8f, 0xc9, 0xb7, 0xb0, 0xe8, 0x47, 0xa2, 0xe8, 0xfc, 0x14, 0xbf, 0xfd, 0x69, 0xf9,
0x5f, 0xcf, 0x39, 0x76, 0x71, 0xf4, 0x7a, 0x05, 0x6a, 0xb2, 0x9b, 0x84, 0x40, 0xe5, 0x24, 0x0a,
0x47, 0xd2, 0xf1, 0xc5, 0xfe, 0x26, 0x6d, 0x28, 0x25, 0xa1, 0xf8, 0xb8, 0x94, 0x84, 0xf6, 0xef,
0x41, 0x43, 0x9b, 0x29, 0xf2, 0x2e, 0xdf, 0x4f, 0x33, 0x9b, 0x50, 0x6c, 0x18, 0x79, 0x68, 0xbc,
0x2e, 0xd0, 0x9d, 0x01, 0xf9, 0x2a, 0xcc, 0x0f, 0xfc, 0x88, 0xe2, 0x8d, 0x13, 0x37, 0xa2, 0xe7,
0x34, 0x8a, 0xa5, 0x2f, 0xb2, 0xa3, 0x08, 0x0e, 0xc7, 0x6d, 0x17, 0x16, 0x8c, 0xa1, 0x51, 0xca,
0x61, 0x06, 0xcf, 0x8b, 0xcb, 0xf0, 0x91, 0x79, 0x96, 0x5c, 0xd0, 0xd8, 0xb2, 0x2a, 0xdc, 0xa8,
0xee, 0x38, 0x0a, 0x8f, 0xb1, 0x12, 0xcb, 0x31, 0x30, 0xfb, 0x7f, 0x96, 0xa1, 0xbc, 0x1d, 0x8e,
0xf5, 0x80, 0xbe, 0x95, 0x0f, 0xe8, 0x0b, 0xfb, 0xd7, 0x55, 0xe6, 0xad, 0x30, 0x52, 0x0c, 0x90,
0x3c, 0x80, 0x36, 0x93, 0xb4, 0x24, 0x64, 0xf6, 0xfe, 0x85, 0x17, 0xf1, 0xc3, 0xe5, 0x65, 0x64,
0xdf, 0x0c, 0x85, 0x2c, 0x42, 0x59, 0x99, 0x6d, 0x98, 0x81, 0x25, 0xd9, 0x66, 0x13, 0x8f, 0x56,
0x5d, 0x8a, 0xe0, 0x88, 0x48, 0x31, 0xc5, 0x65, 0x7e, 0xcf, 0xc5, 0x99, 0x2f, 0xbe, 0x45, 0x24,
0x66, 0x8b, 0x33, 0x81, 0x1d, 0xa5, 0xa6, 0xad, 0x4a, 0xeb, 0x11, 0xb3, 0x9a, 0x19, 0x31, 0xbb,
0x0b, 0x8d, 0x64, 0x78, 0xee, 0x8e, 0xbd, 0xcb, 0x61, 0xe8, 0x0d, 0x84, 0xa0, 0xe8, 0x10, 0x79,
0x04, 0x30, 0x1a, 0x8f, 0x05, 0x17, 0xa3, 0x3b, 0xae, 0xb1, 0xda, 0x11, 0xa3, 0xff, 0xfc, 0xe0,
0x80, 0x73, 0x9f, 0xa3, 0xe5, 0x21, 0x5b, 0xd0, 0x2e, 0xbc, 0x21, 0x72, 0x5b, 0x1e, 0x00, 0x0a,
0xc7, 0x2b, 0x05, 0x7c, 0x9e, 0xf9, 0xa8, 0xf7, 0x6d, 0x20, 0xbf, 0xe2, 0x45, 0x8d, 0x97, 0x50,
0x57, 0x2d, 0xd4, 0xaf, 0x47, 0xe0, 0x29, 0xbf, 0x86, 0x79, 0x3d, 0x02, 0x0f, 0xf5, 0xbd, 0x07,
0x6d, 0xbe, 0xda, 0x28, 0xfd, 0xc9, 0x4f, 0x66, 0x65, 0x50, 0xfb, 0xcf, 0x2d, 0xa8, 0x22, 0xe7,
0x31, 0xf3, 0x8b, 0xd3, 0xd4, 0x49, 0x08, 0x11, 0x54, 0xc9, 0xc2, 0xc4, 0x36, 0x6e, 0x8e, 0x95,
0x14, 0x1b, 0xe8, 0xb7, 0xc7, 0xee, 0x42, 0x5d, 0xd5, 0xa4, 0xb1, 0x52, 0x0a, 0x92, 0x3b, 0x50,
0x39, 0x0b, 0xc7, 0x72, 0x87, 0x0a, 0xe9, 0x88, 0x3a, 0x88, 0xa7, 0xed, 0x61, 0xe5, 0xf1, 0x2e,
0xf0, 0x5d, 0x40, 0x16, 0x2e, 0xe8, 0xeb, 0x4c, 0x61, 0x5f, 0x5f, 0xc0, 0x1c, 0xd3, 0x0f, 0x5a,
0xd0, 0x73, 0xfa, 0x5a, 0xf4, 0x15, 0x66, 0xda, 0xf4, 0x87, 0x93, 0x01, 0xd5, 0xfd, 0x04, 0x18,
0x2c, 0x13, 0xb8, 0xb4, 0x90, 0xed, 0x7f, 0x6e, 0x71, 0xbd, 0xc3, 0xca, 0x25, 0xf7, 0xa1, 0xc2,
0x96, 0x8d, 0x8c, 0x33, 0x4b, 0x9d, 0xbc, 0x64, 0xf9, 0x1c, 0xcc, 0xc1, 0x66, 0x11, 0xe3, 0x3c,
0x7a, 0xe9, 0x3c, 0xca, 0x93, 0x6e, 0xb2, 0x55, 0xcf, 0x32, 0x7b, 0xd3, 0x0c, 0x4a, 0x56, 0xb4,
0x83, 0x0d, 0x15, 0x63, 0x29, 0x92, 0x96, 0xd4, 0xe0, 0x94, 0x6a, 0x07, 0x1a, 0xfe, 0x65, 0x09,
0x5a, 0x46, 0x9b, 0x98, 0xf4, 0xe0, 0xbd, 0x2a, 0xee, 0x2a, 0x15, 0x33, 0xaf, 0x43, 0xba, 0xe4,
0x95, 0x4c, 0xc9, 0x53, 0x11, 0xde, 0xb2, 0x1e, 0xe1, 0x7d, 0x04, 0xf5, 0xf4, 0xea, 0xa0, 0xd9,
0x28, 0x56, 0xa3, 0x3c, 0x83, 0x9a, 0x66, 0x4a, 0x63, 0xc2, 0x55, 0x3d, 0x26, 0xfc, 0x2d, 0x2d,
0x66, 0x38, 0x83, 0xc5, 0xd8, 0x45, 0xa3, 0xfa, 0xc5, 0x1c, 0x32, 0x78, 0x02, 0x0d, 0xad, 0xf1,
0x7a, 0x6c, 0xd0, 0x32, 0x62, 0x83, 0xea, 0xb4, 0x78, 0x29, 0x3d, 0x2d, 0x6e, 0xff, 0xac, 0x04,
0x2d, 0x26, 0x6b, 0x7e, 0x70, 0x7a, 0x10, 0x0e, 0xfd, 0xfe, 0x25, 0xf2, 0xb8, 0x14, 0x2b, 0x61,
0xc3, 0x48, 0x99, 0x33, 0x61, 0xa6, 0x13, 0xd5, 0x15, 0x19, 0xae, 0xc0, 0x55, 0x9a, 0x69, 0x78,
0xa6, 0x1f, 0x8f, 0xbd, 0x98, 0x6a, 0x17, 0x1b, 0x1d, 0x13, 0x64, 0x7a, 0x98, 0x01, 0x78, 0xf6,
0x7f, 0xe4, 0x0f, 0x87, 0x3e, 0xcf, 0xcb, 0x37, 0xdf, 0x45, 0x24, 0x56, 0xe7, 0xc0, 0x8f, 0xbd,
0xe3, 0xf4, 0x24, 0x8e, 0x4a, 0x63, 0x18, 0xc4, 0x7b, 0xad, 0x85, 0x41, 0xf8, 0x65, 0x21, 0x13,
0xcc, 0x72, 0xd5, 0x6c, 0x8e, 0xab, 0xec, 0x7f, 0x5b, 0x82, 0x86, 0xc6, 0xa3, 0x4c, 0xb7, 0x14,
0x2e, 0xc2, 0x1a, 0x2a, 0x8e, 0xa8, 0x05, 0x86, 0x3b, 0x47, 0x43, 0xc8, 0x3d, 0xb3, 0x56, 0x0c,
0x9f, 0xa2, 0xf6, 0x31, 0xf8, 0xf9, 0x16, 0xd4, 0x99, 0x1c, 0x7e, 0x88, 0xbe, 0x23, 0x71, 0x89,
0x58, 0x01, 0x92, 0xba, 0x8a, 0xd4, 0x6a, 0x4a, 0x45, 0xe0, 0xca, 0x43, 0x6b, 0x8f, 0xa1, 0x29,
0x8a, 0xc1, 0x39, 0xc6, 0x4e, 0xa7, 0x9a, 0xc0, 0x98, 0x7f, 0xc7, 0xc8, 0x29, 0xbf, 0x5c, 0x95,
0x5f, 0xd6, 0xde, 0xf4, 0xa5, 0xcc, 0x69, 0x3f, 0x53, 0xe7, 0x01, 0x9f, 0x45, 0xde, 0xf8, 0x4c,
0x6a, 0xb7, 0x47, 0xb0, 0x20, 0x95, 0xd8, 0x24, 0xf0, 0x82, 0x20, 0x9c, 0x04, 0x7d, 0x2a, 0x0f,
0x96, 0x17, 0x91, 0xec, 0x81, 0xba, 0x86, 0x84, 0x05, 0x91, 0x07, 0x50, 0xe5, 0x56, 0x30, 0xb7,
0x55, 0x8a, 0xf5, 0x19, 0xcf, 0x42, 0xee, 0x43, 0x95, 0x1b, 0xc3, 0xa5, 0xa9, 0x1a, 0x88, 0x67,
0xb0, 0x57, 0x60, 0x0e, 0x3d, 0xf0, 0x9a, 0x22, 0xbe, 0x59, 0x64, 0xc3, 0xcc, 0xf4, 0xb9, 0x9f,
0x7e, 0x11, 0xc8, 0x1e, 0x97, 0x2b, 0xfd, 0xc0, 0xca, 0x9f, 0x97, 0xa1, 0xa1, 0xc1, 0x4c, 0x59,
0xe2, 0xe9, 0x05, 0x77, 0xe0, 0x7b, 0x23, 0x2a, 0xbd, 0xf6, 0x2d, 0x27, 0x83, 0xb2, 0x7c, 0xde,
0xf9, 0xa9, 0x1b, 0x4e, 0x12, 0x77, 0x40, 0x4f, 0x23, 0x4a, 0x85, 0x71, 0x95, 0x41, 0x59, 0x3e,
0xc6, 0xcd, 0x5a, 0x3e, 0x1e, 0x88, 0xcf, 0xa0, 0xf2, 0x60, 0x08, 0x1f, 0xa7, 0x4a, 0x7a, 0x30,
0x84, 0x8f, 0x4a, 0x56, 0xcd, 0x57, 0x0b, 0xd4, 0xfc, 0x47, 0xb0, 0xc4, 0x15, 0xba, 0xd0, 0x1e,
0x6e, 0x86, 0xb9, 0xa6, 0x50, 0xc9, 0x03, 0xe8, 0xb0, 0x36, 0x4b, 0xd1, 0x88, 0xfd, 0x9f, 0x70,
0x19, 0xb3, 0x9c, 0x1c, 0xce, 0xf2, 0x62, 0x50, 0x51, 0xcf, 0xcb, 0x0f, 0x4a, 0xe6, 0x70, 0xcc,
0xeb, 0xbd, 0x36, 0xf3, 0xd6, 0x45, 0xde, 0x0c, 0x4e, 0x1e, 0xc3, 0xf2, 0x88, 0x0e, 0x7c, 0xcf,
0x2c, 0xc2, 0x4d, 0x2d, 0x8e, 0x69, 0x64, 0x56, 0x0b, 0x1b, 0x85, 0x9f, 0x84, 0xa3, 0x63, 0x9f,
0xaf, 0xb2, 0x3c, 0xfc, 0x59, 0x71, 0x72, 0xb8, 0xdd, 0x82, 0xc6, 0x61, 0x12, 0x8e, 0xe5, 0xd4,
0xb7, 0xa1, 0xc9, 0x93, 0xe2, 0x2a, 0xc1, 0x4d, 0xb8, 0x81, 0xfc, 0x7a, 0x14, 0x8e, 0xc3, 0x61,
0x78, 0x7a, 0x69, 0xf8, 0x5d, 0xfe, 0xbd, 0x05, 0x0b, 0x06, 0x35, 0x75, 0xbc, 0xa0, 0x93, 0x58,
0x9e, 0xff, 0xe6, 0x2c, 0x3e, 0xaf, 0xad, 0x51, 0x3c, 0x23, 0x0f, 0x70, 0xbf, 0x10, 0x47, 0xc2,
0xd7, 0xd2, 0x4b, 0x8d, 0xf2, 0x43, 0xce, 0xef, 0xdd, 0x3c, 0xbf, 0x8b, 0xef, 0xe5, 0x75, 0x47,
0x59, 0xc4, 0x6f, 0x89, 0x63, 0xad, 0x03, 0xd1, 0xe9, 0xb2, 0x79, 0x14, 0x51, 0xf7, 0xd3, 0xc9,
0x16, 0xf4, 0x15, 0x18, 0xdb, 0x3f, 0xb7, 0x00, 0xd2, 0xd6, 0xe1, 0x61, 0x48, 0xb5, 0xce, 0xf2,
0x77, 0x43, 0xb4, 0x35, 0xf5, 0x5d, 0x68, 0xaa, 0x03, 0x59, 0xe9, 0xd2, 0xdd, 0x90, 0x18, 0x33,
0x75, 0xde, 0x87, 0xb9, 0xd3, 0x61, 0x78, 0x8c, 0x26, 0x95, 0x58, 0x67, 0xf9, 0x85, 0x8a, 0x36,
0x87, 0xe5, 0xea, 0x99, 0xae, 0xf3, 0x95, 0xc2, 0x93, 0x5c, 0xfa, 0xaa, 0xcd, 0xd6, 0xba, 0xf9,
0xdc, 0x48, 0x5c, 0x29, 0xe5, 0xbf, 0x54, 0x3c, 0xf3, 0x2a, 0xb7, 0xfd, 0x13, 0x68, 0x47, 0x5c,
0x67, 0x4a, 0x85, 0x5a, 0xb9, 0x42, 0xa1, 0xb6, 0x22, 0x63, 0x65, 0xfe, 0x0a, 0x74, 0xbc, 0xc1,
0x39, 0x8d, 0x12, 0x1f, 0xdd, 0x98, 0x68, 0xd3, 0xf1, 0x0e, 0xce, 0x69, 0x38, 0x9a, 0x4e, 0xef,
0xc3, 0x9c, 0xb8, 0xde, 0xa2, 0x72, 0x8a, 0x1b, 0xf4, 0x29, 0xcc, 0x32, 0xda, 0xff, 0x58, 0x9e,
0x87, 0x31, 0x67, 0xf7, 0xea, 0x51, 0xd1, 0x7b, 0x58, 0xca, 0xf4, 0xf0, 0x4b, 0x22, 0xda, 0x3f,
0x90, 0xfe, 0xd2, 0xb2, 0x76, 0x40, 0x7a, 0x20, 0xce, 0x13, 0x99, 0xc3, 0x5a, 0x79, 0x9b, 0x61,
0xb5, 0xff, 0x8b, 0x05, 0xb3, 0xdb, 0xe1, 0x78, 0xdb, 0xe7, 0x67, 0x14, 0x51, 0x4c, 0xd4, 0xdd,
0x32, 0x99, 0x7c, 0xc3, 0x41, 0xf2, 0x42, 0xab, 0xa4, 0x95, 0xb5, 0x4a, 0xbe, 0x0d, 0x37, 0xd1,
0x63, 0x1f, 0x85, 0xe3, 0x30, 0x62, 0xe2, 0xea, 0x0d, 0xb9, 0x09, 0x12, 0x06, 0xc9, 0x99, 0x54,
0xa7, 0x57, 0x65, 0x41, 0x37, 0xda, 0x30, 0x39, 0x77, 0xf9, 0x76, 0x53, 0x58, 0x51, 0x5c, 0xcb,
0xe6, 0x09, 0xf6, 0x6f, 0x42, 0x1d, 0xb7, 0x3b, 0xd8, 0xb5, 0x0f, 0xa0, 0x7e, 0x16, 0x8e, 0xdd,
0x33, 0x3f, 0x48, 0xa4, 0xf8, 0xb7, 0xd3, 0x7d, 0xc8, 0x36, 0x0e, 0x8a, 0xca, 0x60, 0xff, 0x87,
0x59, 0x98, 0xdd, 0x09, 0xce, 0x43, 0xbf, 0x8f, 0xe7, 0x6a, 0x46, 0x74, 0x14, 0xca, 0xdb, 0x76,
0xec, 0x6f, 0x7c, 0x08, 0x23, 0xbd, 0x0f, 0xcf, 0x45, 0x48, 0x43, 0xd8, 0x06, 0x39, 0xd2, 0xef,
0xb3, 0x8b, 0x54, 0xba, 0xeb, 0xab, 0x6a, 0xf7, 0x15, 0x59, 0x69, 0xfc, 0x9e, 0x35, 0x8e, 0x1d,
0xbf, 0x25, 0xa1, 0x21, 0x6c, 0xf0, 0xc5, 0x01, 0x77, 0x7e, 0x02, 0x9a, 0x1f, 0xd1, 0x13, 0x10,
0x6e, 0xfa, 0x23, 0xca, 0x63, 0x2e, 0xca, 0xf4, 0x62, 0x9b, 0x7e, 0x1d, 0x64, 0xe6, 0x19, 0xff,
0x80, 0xe7, 0xe1, 0xcb, 0x81, 0x0e, 0xe1, 0x31, 0x8b, 0xcc, 0xeb, 0x10, 0xfc, 0x85, 0x8f, 0x2c,
0xcc, 0x4f, 0x50, 0x29, 0xa5, 0xcb, 0xfb, 0x09, 0xfc, 0x4d, 0x80, 0x2c, 0xae, 0xb9, 0x0a, 0xf8,
0x3d, 0x20, 0xe9, 0x2a, 0x60, 0x2c, 0xe3, 0x0d, 0x87, 0xc7, 0x5e, 0xff, 0x15, 0xdf, 0xd9, 0x36,
0x79, 0xa8, 0xce, 0x00, 0xf1, 0x98, 0x7a, 0x3a, 0xaf, 0x78, 0xc2, 0xa5, 0xe2, 0xe8, 0x10, 0x59,
0x85, 0x06, 0xba, 0x51, 0xc4, 0xcc, 0xb6, 0x71, 0x66, 0x3b, 0xba, 0x9f, 0x05, 0xe7, 0x56, 0xcf,
0xa4, 0x9f, 0xf8, 0x99, 0xcb, 0xdd, 0xcc, 0xf1, 0x06, 0x03, 0x71, 0x12, 0xa4, 0xc3, 0xef, 0xc4,
0x2b, 0x00, 0x1d, 0x35, 0x7c, 0xc0, 0x78, 0x86, 0x79, 0xcc, 0x60, 0x60, 0xe4, 0x0e, 0x77, 0x63,
0x8e, 0x3d, 0x7f, 0x80, 0x27, 0x2e, 0xf9, 0x5e, 0x58, 0x61, 0xac, 0x0c, 0xf9, 0x37, 0x2e, 0x9c,
0x0b, 0x38, 0x2a, 0x06, 0xc6, 0xc6, 0x46, 0xa5, 0x47, 0xe9, 0x55, 0x1e, 0x13, 0x24, 0x1f, 0x62,
0x84, 0x3d, 0xa1, 0x78, 0x5f, 0xa7, 0xbd, 0x7a, 0x53, 0xf4, 0x59, 0xb0, 0xad, 0xfc, 0x1f, 0x4f,
0x14, 0x38, 0x3c, 0x27, 0x33, 0xdb, 0x78, 0x90, 0x63, 0xc9, 0x30, 0xdb, 0x44, 0x56, 0x0c, 0x72,
0xf0, 0x0c, 0xe4, 0xb1, 0xb6, 0x13, 0xeb, 0x62, 0xe6, 0x5b, 0x99, 0xf2, 0xbf, 0x90, 0x3d, 0xd8,
0x1a, 0x34, 0xf5, 0x7e, 0x90, 0x1a, 0x54, 0xf6, 0x0f, 0xb6, 0xf6, 0x3a, 0xd7, 0x48, 0x03, 0x66,
0x0f, 0xb7, 0x8e, 0x8e, 0x76, 0xb7, 0x36, 0x3b, 0x16, 0x69, 0x42, 0x4d, 0x5d, 0x82, 0x28, 0xb1,
0xd4, 0xda, 0xc6, 0xc6, 0xd6, 0xc1, 0xd1, 0xd6, 0x66, 0xa7, 0xfc, 0x9d, 0x4a, 0xad, 0xd4, 0x29,
0xa3, 0x01, 0xa9, 0x75, 0xf3, 0x0d, 0x7e, 0xb4, 0x3b, 0x00, 0xb8, 0xb1, 0x49, 0x4f, 0x04, 0x55,
0x1c, 0x0d, 0x61, 0x8a, 0x5a, 0xf9, 0x1f, 0xca, 0xfc, 0x9d, 0x02, 0x99, 0xc6, 0xc9, 0xc3, 0x07,
0x01, 0xf4, 0xc0, 0x56, 0xd5, 0x31, 0x41, 0xc6, 0xd8, 0x02, 0xc0, 0x93, 0xf9, 0x5c, 0x1d, 0xe8,
0x10, 0x63, 0x94, 0x88, 0xc6, 0xe1, 0xf0, 0x9c, 0xf2, 0x2c, 0xdc, 0x3c, 0x34, 0x30, 0x56, 0x97,
0xd0, 0x78, 0xda, 0xad, 0x99, 0xaa, 0x63, 0x82, 0xe4, 0x6b, 0x92, 0x51, 0x6a, 0xc8, 0x28, 0xcb,
0xf9, 0x59, 0x37, 0x98, 0xe4, 0x79, 0xce, 0x11, 0x56, 0x47, 0x06, 0xf8, 0x72, 0xfe, 0xbb, 0xb7,
0x70, 0x88, 0x91, 0x15, 0x20, 0xa3, 0xf1, 0xd8, 0x2d, 0xf0, 0x50, 0x55, 0x9c, 0x02, 0xca, 0xaf,
0xc1, 0x81, 0x96, 0x00, 0x59, 0x1b, 0x0c, 0x44, 0x33, 0xf5, 0x67, 0x1b, 0x22, 0xfd, 0x9d, 0x10,
0xa9, 0x92, 0x0b, 0xd4, 0x5e, 0xa9, 0x58, 0xed, 0x5d, 0xa9, 0x1c, 0xec, 0x1d, 0x68, 0x1c, 0x68,
0x2f, 0x8f, 0xd8, 0x6c, 0x85, 0x90, 0x6f, 0x8e, 0xf0, 0xb5, 0x83, 0x3b, 0xce, 0x52, 0x54, 0x6b,
0x52, 0x49, 0x6f, 0x92, 0xfd, 0x0f, 0x2d, 0x7e, 0x99, 0x5b, 0x75, 0x81, 0xd7, 0x6f, 0x43, 0x53,
0xc5, 0x5e, 0xd2, 0x9b, 0x6d, 0x06, 0xc6, 0xf2, 0x60, 0x73, 0xdc, 0xf0, 0xe4, 0x24, 0xa6, 0xf2,
0x0e, 0x8a, 0x81, 0x49, 0x63, 0x9c, 0x99, 0xf7, 0x3e, 0xaf, 0x21, 0x16, 0x77, 0x51, 0x72, 0x38,
0xe3, 0x74, 0xe1, 0xfb, 0x96, 0xb7, 0x6f, 0x54, 0x5a, 0x5d, 0xc0, 0xcb, 0x8e, 0xf4, 0x03, 0xa8,
0xa9, 0x72, 0xcd, 0x95, 0x56, 0xe6, 0x54, 0x74, 0xb6, 0xa2, 0xe3, 0x46, 0xdd, 0x68, 0x34, 0x17,
0xb8, 0x3c, 0x81, 0xf1, 0xd2, 0x89, 0x1f, 0x65, 0xb3, 0x73, 0x09, 0x2c, 0xa0, 0xd8, 0x2f, 0x61,
0x41, 0xaa, 0x0f, 0x6d, 0x97, 0x60, 0x4e, 0xa4, 0xf5, 0x26, 0x2d, 0x5f, 0xca, 0x6b, 0x79, 0xfb,
0xdf, 0x54, 0x60, 0x56, 0x3e, 0xeb, 0x63, 0x17, 0x3c, 0x43, 0x53, 0x37, 0x5f, 0xb0, 0x21, 0x5d,
0xe3, 0x9d, 0x02, 0x64, 0x04, 0xb1, 0xf6, 0xdf, 0xcf, 0xae, 0xde, 0xa9, 0x03, 0x35, 0xb3, 0x82,
0x2f, 0x41, 0x65, 0xec, 0x25, 0x67, 0xe8, 0x5f, 0xe3, 0xbc, 0x84, 0x69, 0xe9, 0xa2, 0xaf, 0x9a,
0x2e, 0xfa, 0xa2, 0x77, 0x7b, 0xb8, 0xa9, 0x9a, 0x7f, 0xb7, 0xe7, 0x16, 0xd4, 0xb9, 0xb5, 0x91,
0x7a, 0xe1, 0x53, 0x20, 0x63, 0x9d, 0xd4, 0x72, 0xd6, 0xc9, 0xdb, 0xdb, 0x0d, 0xdf, 0x80, 0x19,
0x7e, 0x77, 0x55, 0xdc, 0x35, 0x92, 0x4b, 0x8a, 0x18, 0x49, 0xf9, 0x3f, 0x3f, 0x72, 0xea, 0x88,
0xbc, 0xfa, 0xeb, 0x17, 0x0d, 0xf3, 0xf5, 0x0b, 0x3d, 0x78, 0xd0, 0xcc, 0x04, 0x0f, 0x1e, 0x40,
0x47, 0x0d, 0x1f, 0x3a, 0xd8, 0x82, 0x58, 0xdc, 0xad, 0xc8, 0xe1, 0xe9, 0xb2, 0xd8, 0x36, 0x96,
0x45, 0xa6, 0xe1, 0xd6, 0x92, 0x84, 0x8e, 0xc6, 0x89, 0x58, 0x16, 0xed, 0xa7, 0xd0, 0x32, 0x1a,
0xc9, 0x96, 0x21, 0x71, 0xfb, 0xa8, 0x73, 0x8d, 0xb4, 0xa0, 0xbe, 0xb3, 0xe7, 0x3e, 0xdd, 0xdd,
0x79, 0xb6, 0x7d, 0xd4, 0xb1, 0x58, 0xf2, 0xf0, 0xc5, 0xc6, 0xc6, 0xd6, 0xd6, 0x26, 0x2e, 0x4b,
0x00, 0x33, 0x4f, 0xd7, 0x76, 0xd8, 0x12, 0x55, 0xb6, 0xff, 0x8f, 0x05, 0x0d, 0xad, 0x78, 0xf2,
0x4d, 0x35, 0x32, 0xfc, 0x81, 0x84, 0xdb, 0xf9, 0x26, 0xac, 0x48, 0x45, 0xad, 0x0d, 0x8d, 0x7a,
0xaa, 0xa8, 0x34, 0xf5, 0xa9, 0x22, 0x36, 0x3d, 0x1e, 0x2f, 0x41, 0x8d, 0x03, 0xdf, 0x3d, 0x65,
0x61, 0x7e, 0xce, 0x2a, 0x5d, 0x5d, 0x58, 0x4e, 0xee, 0x31, 0xcc, 0xc2, 0xf6, 0x47, 0x00, 0x69,
0x6b, 0xcc, 0x6e, 0x5f, 0x33, 0xbb, 0x6d, 0x69, 0xdd, 0x2e, 0xd9, 0x9b, 0x5c, 0x61, 0x88, 0x21,
0x54, 0x51, 0xe2, 0xaf, 0x01, 0x91, 0x0e, 0x2a, 0x3c, 0xcf, 0x38, 0x1e, 0xd2, 0x44, 0xde, 0x49,
0x9c, 0x17, 0x94, 0x1d, 0x45, 0x90, 0xd7, 0x6a, 0xd3, 0x52, 0x52, 0xbd, 0x23, 0x38, 0x2e, 0xab,
0x77, 0x44, 0x56, 0x47, 0xd1, 0xed, 0x1e, 0x74, 0x37, 0x29, 0x2b, 0x6d, 0x6d, 0x38, 0xcc, 0x34,
0xc7, 0xbe, 0x09, 0x37, 0x0a, 0x68, 0xc2, 0xfd, 0xf0, 0x5d, 0xb8, 0xbe, 0xc6, 0xaf, 0x1f, 0xfe,
0xba, 0x6e, 0x3a, 0xd8, 0x5d, 0x58, 0xca, 0x16, 0x29, 0x2a, 0x7b, 0x0a, 0xf3, 0x9b, 0xf4, 0x78,
0x72, 0xba, 0x4b, 0xcf, 0xd3, 0x8a, 0x08, 0x54, 0xe2, 0xb3, 0xf0, 0x42, 0x8c, 0x0f, 0xfe, 0x4d,
0x6e, 0x03, 0x0c, 0x59, 0x1e, 0x37, 0x1e, 0xd3, 0xbe, 0x7c, 0x80, 0x02, 0x91, 0xc3, 0x31, 0xed,
0xdb, 0x1f, 0x01, 0xd1, 0xcb, 0x11, 0xe3, 0xc5, 0xb6, 0x04, 0x93, 0x63, 0x37, 0xbe, 0x8c, 0x13,
0x3a, 0x92, 0x2f, 0x6b, 0xe8, 0x90, 0xfd, 0x3e, 0x34, 0x0f, 0xbc, 0x4b, 0x87, 0x7e, 0x2a, 0x9e,
0xc6, 0x5a, 0x86, 0xd9, 0xb1, 0x77, 0xc9, 0xe4, 0x59, 0x85, 0x50, 0x90, 0x6c, 0xff, 0x71, 0x05,
0x66, 0x78, 0x4e, 0x56, 0xea, 0x80, 0xc6, 0x89, 0x1f, 0xa0, 0x8c, 0xc9, 0x52, 0x35, 0x28, 0xa7,
0x30, 0x4b, 0x05, 0x0a, 0x53, 0xb8, 0xd2, 0xe4, 0x45, 0x7e, 0xc1, 0xb2, 0x06, 0xc6, 0xd4, 0x56,
0x7a, 0x6f, 0x8a, 0x73, 0x6a, 0x0a, 0x64, 0x62, 0x94, 0xe9, 0xc6, 0x83, 0xb7, 0x4f, 0xae, 0x05,
0x42, 0x27, 0xea, 0x50, 0xe1, 0xf6, 0x66, 0x56, 0x5e, 0x10, 0xc9, 0x6c, 0x6f, 0x72, 0xdb, 0x98,
0xda, 0x5b, 0x6c, 0x63, 0xb8, 0x7f, 0xed, 0xaa, 0x6d, 0x0c, 0xbc, 0xcd, 0x36, 0xe6, 0x6d, 0x62,
0x83, 0x3d, 0xa8, 0xe1, 0x9a, 0xae, 0xa9, 0x48, 0x99, 0x26, 0xbf, 0xa1, 0xd9, 0xf8, 0x3c, 0xcc,
0x7f, 0x33, 0x95, 0x17, 0x87, 0x7e, 0xfa, 0xc5, 0x98, 0xf8, 0x3f, 0x84, 0x59, 0x81, 0x32, 0xce,
0x0e, 0xbc, 0x91, 0x7c, 0x40, 0x05, 0xff, 0x66, 0x43, 0x87, 0xef, 0x38, 0x7c, 0x3a, 0xf1, 0x23,
0x3a, 0x90, 0x97, 0x8c, 0x35, 0x08, 0x4f, 0x45, 0xc7, 0xee, 0xab, 0x20, 0xbc, 0x08, 0xc4, 0x35,
0x63, 0x95, 0xb6, 0x09, 0x74, 0xf0, 0x21, 0xa5, 0x71, 0x18, 0xc9, 0x37, 0x71, 0xec, 0x3f, 0xb0,
0xa0, 0x23, 0x04, 0x4d, 0xd1, 0xe4, 0x81, 0x80, 0xab, 0xee, 0xd2, 0xdf, 0x83, 0x16, 0xfa, 0x32,
0xd4, 0x92, 0x23, 0x82, 0xeb, 0x06, 0xc8, 0xda, 0x2b, 0x8f, 0x25, 0x8e, 0xfc, 0xa1, 0xe0, 0x5b,
0x1d, 0x92, 0xab, 0x56, 0xe4, 0x89, 0xdb, 0x49, 0x96, 0xa3, 0xd2, 0xf6, 0x2f, 0x2c, 0x98, 0xd7,
0x1a, 0x2c, 0x04, 0xf5, 0x09, 0x34, 0xd5, 0x7b, 0x65, 0x54, 0x19, 0x55, 0xcb, 0xa6, 0x66, 0x49,
0x3f, 0x33, 0x32, 0x23, 0xbf, 0x7b, 0x97, 0xd8, 0xc0, 0x78, 0x32, 0x12, 0xd6, 0x8c, 0x0e, 0x31,
0x3e, 0xba, 0xa0, 0xf4, 0x95, 0xca, 0xc2, 0xed, 0x29, 0x03, 0xc3, 0x18, 0x50, 0x18, 0x24, 0x67,
0x2a, 0x53, 0x45, 0xc4, 0x80, 0x74, 0xd0, 0xfe, 0x6f, 0x25, 0x58, 0xe0, 0x4e, 0x35, 0xe1, 0xcc,
0x54, 0x4f, 0xc6, 0xcc, 0x70, 0xff, 0x22, 0x57, 0x5a, 0xdb, 0xd7, 0x1c, 0x91, 0x26, 0xdf, 0x7c,
0x4b, 0x47, 0xa0, 0xba, 0x06, 0x35, 0x65, 0x2e, 0xca, 0x45, 0x73, 0x71, 0xc5, 0x48, 0x17, 0x85,
0xe3, 0xaa, 0xc5, 0xe1, 0xb8, 0xb7, 0x0b, 0x7f, 0xe5, 0xee, 0x0a, 0xcd, 0x8a, 0x5c, 0xc6, 0x5d,
0xa1, 0x55, 0x58, 0x36, 0x00, 0xd4, 0xd7, 0xfe, 0x89, 0x4f, 0xe5, 0xc5, 0xed, 0xf9, 0x98, 0x26,
0xae, 0x91, 0x65, 0x7d, 0x16, 0xaa, 0x71, 0x3f, 0x1c, 0x53, 0x7b, 0x09, 0x16, 0xcd, 0xc1, 0x15,
0xab, 0xc4, 0xcf, 0x2d, 0xe8, 0x3e, 0xe5, 0x87, 0x2a, 0xfc, 0xe0, 0x74, 0xdb, 0x8f, 0x93, 0x30,
0x52, 0x2f, 0x7b, 0xdd, 0x01, 0x88, 0x13, 0x2f, 0x12, 0xfb, 0x4c, 0x6e, 0xec, 0x6a, 0x08, 0x1b,
0x23, 0x1a, 0x0c, 0x38, 0x95, 0xf3, 0x86, 0x4a, 0xe7, 0x36, 0x13, 0xc2, 0xe5, 0x68, 0x98, 0xe4,
0xef, 0xf1, 0x2b, 0x8c, 0x6c, 0x30, 0xe8, 0x39, 0x2e, 0xbd, 0xdc, 0x8f, 0x97, 0x41, 0xed, 0x3f,
0x2c, 0xc1, 0x5c, 0xda, 0x48, 0x7e, 0x25, 0xda, 0x50, 0xe0, 0xc2, 0x0e, 0x4f, 0x15, 0xb8, 0x08,
0x0f, 0xba, 0x3e, 0x33, 0xcc, 0x35, 0xaf, 0xa3, 0x86, 0x92, 0x7b, 0xd0, 0x90, 0xa9, 0x70, 0x92,
0x68, 0x4f, 0xec, 0xe8, 0x30, 0xbf, 0x1b, 0xc1, 0xb6, 0x06, 0x62, 0x9b, 0x23, 0x52, 0x78, 0x91,
0x7f, 0x94, 0xe0, 0x97, 0x7c, 0x4e, 0x65, 0x92, 0x29, 0x34, 0x66, 0x53, 0xf3, 0x39, 0x44, 0x7b,
0x5a, 0xb7, 0x35, 0x6b, 0xea, 0x69, 0x42, 0x25, 0xf3, 0xbc, 0xc4, 0xf4, 0x96, 0x58, 0xc5, 0xd1,
0x21, 0xe9, 0xf5, 0x09, 0x27, 0xc6, 0xf6, 0xd7, 0xc0, 0xec, 0xbf, 0x6d, 0xc1, 0x8d, 0x82, 0x69,
0x14, 0x3a, 0x60, 0x13, 0xe6, 0x4f, 0x14, 0x51, 0x0e, 0x35, 0x57, 0x04, 0x4b, 0x52, 0xb9, 0x9a,
0xc3, 0xeb, 0xe4, 0x3f, 0x50, 0xdb, 0x2d, 0x3e, 0x79, 0xc6, 0xa5, 0xc0, 0x3c, 0xc1, 0x3e, 0x80,
0xde, 0xd6, 0x6b, 0xa6, 0x52, 0x36, 0xf4, 0xf7, 0xa9, 0x25, 0x67, 0xad, 0xe6, 0x54, 0xe6, 0x9b,
0x9d, 0xcd, 0x27, 0xfc, 0xaa, 0x93, 0x2a, 0x8b, 0x7c, 0xfd, 0x6d, 0x0b, 0xd1, 0xa5, 0xff, 0xae,
0x98, 0x75, 0xfe, 0xc0, 0xb6, 0xbc, 0x9a, 0xa8, 0x41, 0xf6, 0x39, 0xcc, 0x3d, 0x9f, 0x0c, 0x13,
0x3f, 0x7d, 0x6c, 0x9b, 0x7c, 0x53, 0x7c, 0x84, 0x45, 0xc8, 0xa1, 0x2b, 0xac, 0x4a, 0xcf, 0xc7,
0x46, 0x6c, 0xc4, 0x4a, 0x72, 0xf3, 0x35, 0xe6, 0x09, 0xf6, 0x0d, 0x58, 0x4e, 0xab, 0xe4, 0x63,
0x27, 0x97, 0x9d, 0x3f, 0xb2, 0xf8, 0x91, 0x60, 0xf3, 0xed, 0x6f, 0xf2, 0x0c, 0x16, 0x62, 0x3f,
0x38, 0x1d, 0x52, 0xbd, 0x9c, 0x58, 0x8c, 0xc4, 0x75, 0xb3, 0x79, 0xe2, 0x7d, 0x70, 0xa7, 0xe8,
0x0b, 0xc6, 0x20, 0xc5, 0x0d, 0x4d, 0x19, 0x24, 0x33, 0x24, 0x45, 0x1d, 0xf8, 0x0e, 0xb4, 0xcd,
0xca, 0xc8, 0x63, 0x71, 0xe7, 0x2f, 0x6d, 0x59, 0x39, 0x73, 0x75, 0x2b, 0xe5, 0x0c, 0x23, 0xa7,
0xfd, 0x33, 0x0b, 0xba, 0x0e, 0x65, 0x6c, 0x4c, 0xb5, 0x4a, 0x05, 0xf7, 0x3c, 0xc9, 0x15, 0x3b,
0xbd, 0xc3, 0xea, 0x2e, 0xa1, 0xec, 0xeb, 0xca, 0xd4, 0x49, 0xd9, 0xbe, 0x56, 0xd0, 0xab, 0xf5,
0x1a, 0xcc, 0x88, 0xfe, 0x2d, 0xc3, 0x75, 0xd1, 0x24, 0xd9, 0x9c, 0x34, 0xac, 0x68, 0x54, 0x6a,
0x84, 0x15, 0x7b, 0xd0, 0xe5, 0x0f, 0xb8, 0xe9, 0xfd, 0x10, 0x1f, 0x6e, 0x02, 0x79, 0xee, 0xf5,
0xbd, 0x28, 0x0c, 0x83, 0x03, 0x1a, 0x89, 0x33, 0x9c, 0x68, 0x7d, 0x62, 0xd4, 0x4d, 0x1a, 0xca,
0x3c, 0x25, 0xdf, 0x1c, 0x0b, 0x03, 0xf9, 0xb6, 0x1b, 0x4f, 0xd9, 0x0e, 0x2c, 0xac, 0x7b, 0xaf,
0xa8, 0x2c, 0x29, 0x1d, 0xa5, 0xc6, 0x58, 0x15, 0x2a, 0xc7, 0x5e, 0x5e, 0x16, 0xce, 0x57, 0xeb,
0xe8, 0xb9, 0xed, 0x55, 0x58, 0x34, 0xcb, 0x14, 0xaa, 0xa4, 0x07, 0xb5, 0x91, 0xc0, 0x44, 0xeb,
0x54, 0xfa, 0xc1, 0x67, 0xd0, 0xd0, 0x1e, 0xe5, 0x23, 0xcb, 0xb0, 0xf0, 0x72, 0xe7, 0x68, 0x6f,
0xeb, 0xf0, 0xd0, 0x3d, 0x78, 0xb1, 0xfe, 0xc9, 0xd6, 0xf7, 0xdd, 0xed, 0xb5, 0xc3, 0xed, 0xce,
0x35, 0xb2, 0x04, 0x64, 0x6f, 0xeb, 0xf0, 0x68, 0x6b, 0xd3, 0xc0, 0x2d, 0x72, 0x07, 0x7a, 0x2f,
0xf6, 0x5e, 0x1c, 0x6e, 0x6d, 0xba, 0x45, 0xdf, 0x95, 0xc8, 0x6d, 0xb8, 0x21, 0xe8, 0x05, 0x9f,
0x97, 0x1f, 0x3c, 0x81, 0x4e, 0xd6, 0x2d, 0x69, 0xb8, 0x73, 0xaf, 0xf2, 0xfb, 0x3e, 0xf8, 0x47,
0x65, 0x80, 0xf4, 0x11, 0x65, 0xd2, 0x85, 0xc5, 0xcd, 0xb5, 0xa3, 0xb5, 0xdd, 0x7d, 0xd6, 0x08,
0x67, 0xff, 0x68, 0x6b, 0xe3, 0xc8, 0x75, 0xb6, 0xbe, 0xdb, 0xb9, 0x56, 0x48, 0xd9, 0x3f, 0x60,
0x5b, 0xf6, 0x65, 0x58, 0xd8, 0xd9, 0xdb, 0x39, 0xda, 0x59, 0xdb, 0x75, 0x9d, 0xfd, 0x17, 0x3b,
0x7b, 0xcf, 0xf8, 0x83, 0x21, 0x65, 0xf2, 0x0e, 0xdc, 0x7c, 0x71, 0xf0, 0xd4, 0xd9, 0xdf, 0x3b,
0x72, 0x0f, 0xb7, 0x5f, 0x1c, 0x6d, 0xe2, 0x73, 0x23, 0x1b, 0xce, 0xce, 0x01, 0x2f, 0xb3, 0x72,
0x55, 0x06, 0x56, 0x74, 0x95, 0x8d, 0xd8, 0xb3, 0xfd, 0xc3, 0xc3, 0x9d, 0x03, 0xf7, 0xbb, 0x2f,
0xb6, 0x9c, 0x9d, 0xad, 0x43, 0xfc, 0x70, 0xa6, 0x00, 0x67, 0xf9, 0x67, 0xc9, 0x3c, 0xb4, 0x8e,
0x76, 0xbf, 0xe7, 0xee, 0xef, 0xed, 0xec, 0xef, 0x61, 0xd6, 0x9a, 0x09, 0xb1, 0x5c, 0x75, 0xd2,
0x83, 0xa5, 0xad, 0xdf, 0x39, 0x72, 0x0b, 0x4a, 0x86, 0x29, 0x34, 0xf6, 0x5d, 0x83, 0xdc, 0x80,
0xeb, 0x87, 0x47, 0x6b, 0x47, 0x3b, 0x1b, 0xae, 0x78, 0x6f, 0x88, 0x4d, 0x02, 0xfb, 0xac, 0x59,
0x4c, 0x62, 0x5f, 0xb5, 0xc8, 0x22, 0x74, 0x0e, 0xd6, 0xbe, 0xff, 0x7c, 0x6b, 0xef, 0xc8, 0x5d,
0xdb, 0xdc, 0x74, 0xf0, 0x83, 0x76, 0x0e, 0x65, 0x79, 0xe7, 0xd8, 0x44, 0x3d, 0x3f, 0x38, 0xc0,
0x2c, 0x1d, 0x99, 0x60, 0x94, 0xf9, 0xd5, 0x9f, 0x95, 0xa1, 0xcd, 0x0f, 0xd3, 0xf3, 0x5f, 0x39,
0xa0, 0x11, 0x79, 0x0e, 0xb3, 0xe2, 0xe7, 0x32, 0xc8, 0x75, 0xf5, 0x4a, 0x84, 0xfe, 0x03, 0x1d,
0xbd, 0xa5, 0x2c, 0x2c, 0xc4, 0x6f, 0xe1, 0xaf, 0xfe, 0xa7, 0xff, 0xf1, 0xfb, 0xa5, 0x16, 0x69,
0x3c, 0x3c, 0xff, 0xf0, 0xe1, 0x29, 0x0d, 0x62, 0x56, 0xc6, 0xef, 0x02, 0xa4, 0x3f, 0x02, 0x41,
0xba, 0xca, 0xfb, 0x98, 0xf9, 0x85, 0x8c, 0xde, 0x8d, 0x02, 0x8a, 0x28, 0xf7, 0x06, 0x96, 0xbb,
0x60, 0xb7, 0x59, 0xb9, 0x7e, 0xe0, 0x27, 0xfc, 0x07, 0x21, 0x3e, 0xb6, 0x1e, 0x90, 0x01, 0x34,
0xf5, 0x9f, 0x67, 0x20, 0x32, 0x9a, 0x5f, 0xf0, 0x03, 0x13, 0xbd, 0x9b, 0x85, 0x34, 0xa9, 0x73,
0xb0, 0x8e, 0xeb, 0x76, 0x87, 0xd5, 0x31, 0xc1, 0x1c, 0x69, 0x2d, 0x43, 0xae, 0x89, 0xd3, 0x5f,
0x61, 0x20, 0xb7, 0x34, 0xe5, 0x98, 0xfb, 0x0d, 0x88, 0xde, 0xed, 0x29, 0x54, 0x51, 0xd7, 0x6d,
0xac, 0x6b, 0xd9, 0x26, 0xac, 0xae, 0x3e, 0xe6, 0x91, 0xbf, 0x01, 0xf1, 0xb1, 0xf5, 0x60, 0xf5,
0x4f, 0xef, 0x43, 0x5d, 0x9d, 0xf4, 0x21, 0x3f, 0x86, 0x96, 0x71, 0xdb, 0x81, 0xc8, 0x6e, 0x14,
0x5d, 0x8e, 0xe8, 0xdd, 0x2a, 0x26, 0x8a, 0x8a, 0xef, 0x60, 0xc5, 0x5d, 0xb2, 0xc4, 0x2a, 0x16,
0xd7, 0x05, 0x1e, 0xe2, 0xbd, 0x1d, 0xfe, 0xe6, 0xc6, 0x2b, 0x6d, 0xc5, 0xe1, 0x95, 0xdd, 0xca,
0x2e, 0x02, 0x46, 0x6d, 0xb7, 0xa7, 0x50, 0x45, 0x75, 0xb7, 0xb0, 0xba, 0x25, 0xb2, 0xa8, 0x57,
0xa7, 0x4e, 0xdf, 0x50, 0x7c, 0xf7, 0x46, 0xff, 0x81, 0x02, 0x72, 0x3b, 0x7d, 0x95, 0xa4, 0xe0,
0x87, 0x0b, 0x14, 0x8b, 0xe4, 0x7f, 0xbd, 0xc0, 0xee, 0x62, 0x55, 0x84, 0xe0, 0xf4, 0xe9, 0xbf,
0x4f, 0x40, 0x8e, 0xa1, 0xa1, 0xbd, 0xe3, 0x4b, 0x6e, 0x4c, 0x7d, 0x73, 0xb8, 0xd7, 0x2b, 0x22,
0x15, 0x75, 0x45, 0x2f, 0xff, 0x21, 0x33, 0x48, 0x7f, 0x08, 0x75, 0xf5, 0x32, 0x2c, 0x59, 0xd6,
0x5e, 0xea, 0xd5, 0x5f, 0xb2, 0xed, 0x75, 0xf3, 0x84, 0x22, 0xe6, 0xd3, 0x4b, 0x67, 0xcc, 0xf7,
0x12, 0x1a, 0xda, 0xeb, 0xaf, 0xaa, 0x03, 0xf9, 0x17, 0x66, 0x55, 0x07, 0x0a, 0x1e, 0x8b, 0xb5,
0xe7, 0xb1, 0x8a, 0x06, 0xa9, 0x23, 0x7f, 0x27, 0xaf, 0xc3, 0x98, 0xec, 0xc2, 0x75, 0xb1, 0xb2,
0x1e, 0xd3, 0xcf, 0x33, 0x0d, 0x05, 0xbf, 0x09, 0xf1, 0xc8, 0x22, 0x4f, 0xa0, 0x26, 0x1f, 0xf9,
0x25, 0x4b, 0xc5, 0x8f, 0x15, 0xf7, 0x96, 0x73, 0xb8, 0x58, 0x06, 0xbf, 0x0f, 0x90, 0x3e, 0x35,
0xab, 0x94, 0x44, 0xee, 0xe9, 0x5a, 0xc5, 0x01, 0xf9, 0x77, 0x69, 0xed, 0x25, 0xec, 0x60, 0x87,
0xa0, 0x92, 0x08, 0xe8, 0x85, 0x7c, 0x74, 0xe1, 0x47, 0xd0, 0xd0, 0x5e, 0x9b, 0x55, 0xc3, 0x97,
0x7f, 0xa9, 0x56, 0x0d, 0x5f, 0xc1, 0xe3, 0xb4, 0x76, 0x0f, 0x4b, 0x5f, 0xb4, 0xe7, 0x58, 0xe9,
0xb1, 0x7f, 0x1a, 0x8c, 0x78, 0x06, 0x36, 0x41, 0x67, 0xd0, 0x32, 0x9e, 0x94, 0x55, 0x12, 0x5a,
0xf4, 0x60, 0xad, 0x92, 0xd0, 0xc2, 0x57, 0x68, 0x25, 0x9f, 0xd9, 0xf3, 0xac, 0x9e, 0x73, 0xcc,
0xa2, 0xd5, 0xf4, 0x03, 0x68, 0x68, 0xcf, 0xc3, 0xaa, 0xbe, 0xe4, 0x5f, 0xa2, 0x55, 0x7d, 0x29,
0x7a, 0x4d, 0x76, 0x11, 0xeb, 0x68, 0xdb, 0xc8, 0x0a, 0xf8, 0x8c, 0x12, 0x2b, 0xfb, 0xc7, 0xd0,
0x36, 0x1f, 0x8c, 0x55, 0xb2, 0x5f, 0xf8, 0xf4, 0xac, 0x92, 0xfd, 0x29, 0xaf, 0xcc, 0x0a, 0x96,
0x7e, 0xb0, 0xa0, 0x2a, 0x79, 0xf8, 0x53, 0x71, 0x70, 0xf9, 0x33, 0xf2, 0x5d, 0xa6, 0xe0, 0xc4,
0xf3, 0x5e, 0x64, 0x59, 0xe3, 0x5a, 0xfd, 0x11, 0x30, 0x25, 0x2f, 0xb9, 0x97, 0xc0, 0x4c, 0x66,
0xe6, 0x0f, 0x41, 0x3d, 0x83, 0x05, 0xc5, 0xcc, 0xea, 0xb9, 0xae, 0x58, 0xf5, 0xa1, 0xf0, 0x55,
0xb0, 0x5e, 0x27, 0x4b, 0x7d, 0x64, 0xf1, 0xe5, 0x0f, 0x1f, 0x45, 0xd2, 0x96, 0x3f, 0xfd, 0xc5,
0x2e, 0x6d, 0xf9, 0x33, 0xde, 0x4e, 0xca, 0x2e, 0x7f, 0x89, 0xcf, 0xca, 0x08, 0x60, 0x2e, 0x73,
0xb5, 0x53, 0x89, 0x57, 0xf1, 0xed, 0xfb, 0xde, 0x9d, 0xab, 0x6f, 0x84, 0x9a, 0xaa, 0x48, 0x6a,
0xd3, 0x87, 0xf2, 0x69, 0x8f, 0xdf, 0x83, 0xa6, 0xfe, 0xce, 0x25, 0xd1, 0x75, 0x42, 0xb6, 0xa6,
0x9b, 0x85, 0x34, 0x93, 0x4b, 0x48, 0x53, 0xaf, 0x86, 0x7c, 0x0f, 0x96, 0xd4, 0x30, 0xeb, 0xb7,
0x05, 0x63, 0xf2, 0x4e, 0xc1, 0x1d, 0x42, 0x63, 0xb0, 0x6f, 0x4c, 0xbd, 0x64, 0xf8, 0xc8, 0x62,
0xdc, 0x67, 0x3e, 0x1e, 0x98, 0xae, 0x3c, 0x45, 0x6f, 0x26, 0xa6, 0x2b, 0x4f, 0xe1, 0x8b, 0x83,
0x92, 0xfb, 0xc8, 0x82, 0x31, 0x46, 0xfc, 0x7c, 0x16, 0xf9, 0x01, 0xcc, 0x69, 0xf7, 0xb1, 0x0f,
0x2f, 0x83, 0xbe, 0x92, 0xa4, 0xfc, 0xdb, 0x3b, 0xbd, 0xa2, 0x6d, 0xa9, 0xbd, 0x8c, 0xe5, 0xcf,
0xdb, 0xc6, 0xe0, 0x30, 0x29, 0xda, 0x80, 0x86, 0x7e, 0xd7, 0xfb, 0x8a, 0x72, 0x97, 0x35, 0x92,
0xfe, 0xb0, 0xcb, 0x23, 0x8b, 0xec, 0x42, 0x27, 0xfb, 0x06, 0x85, 0xd2, 0x29, 0x45, 0xef, 0x66,
0xf4, 0x32, 0x44, 0xe3, 0xe5, 0x0a, 0x72, 0xc0, 0x4f, 0xfd, 0xaa, 0x1f, 0x4f, 0x08, 0xa3, 0xec,
0xaa, 0x6e, 0xfe, 0xa8, 0x82, 0x2a, 0xad, 0xe8, 0xe7, 0x34, 0xee, 0x5b, 0x8f, 0x2c, 0xf2, 0xf7,
0x2c, 0x68, 0x1a, 0x37, 0xbb, 0x8d, 0x33, 0x94, 0x99, 0x7e, 0x76, 0x75, 0x9a, 0xde, 0x51, 0xdb,
0xc1, 0x41, 0xdc, 0x7d, 0xf0, 0x1d, 0x63, 0x92, 0x7e, 0x6a, 0x78, 0x7a, 0x57, 0xb2, 0xbf, 0xa0,
0xf0, 0x59, 0x36, 0x83, 0xfe, 0x7e, 0xd2, 0x67, 0x8f, 0x2c, 0xf2, 0x4f, 0x2c, 0x68, 0x9b, 0x21,
0x1c, 0xd5, 0xdd, 0xc2, 0x60, 0x91, 0x62, 0xa5, 0x29, 0x71, 0x9f, 0x1f, 0x60, 0x2b, 0x8f, 0x1e,
0x38, 0x46, 0x2b, 0xc5, 0xb3, 0x97, 0xbf, 0x5a, 0x6b, 0xc9, 0xc7, 0xfc, 0x07, 0x8d, 0x64, 0xf4,
0x9a, 0xe4, 0x7f, 0x00, 0x47, 0xb1, 0x9f, 0xfe, 0x73, 0x31, 0x38, 0x09, 0x3f, 0xe2, 0xbf, 0x1c,
0x20, 0x43, 0xa0, 0x8c, 0x8b, 0xdf, 0xf6, 0x7b, 0xfb, 0x1e, 0xf6, 0xe9, 0x8e, 0x7d, 0xc3, 0xe8,
0x53, 0xd6, 0xf0, 0x58, 0xe3, 0xad, 0x13, 0xbf, 0xf4, 0x92, 0xae, 0x9c, 0xb9, 0x5f, 0x7f, 0x99,
0xde, 0xc8, 0x11, 0x6f, 0xa4, 0xc8, 0x6e, 0x88, 0xda, 0x5b, 0x16, 0x63, 0x3f, 0xc0, 0xb6, 0xde,
0xb3, 0xdf, 0x99, 0xda, 0xd6, 0x87, 0x18, 0x88, 0x61, 0x2d, 0x3e, 0x00, 0x48, 0x4f, 0x9b, 0x90,
0xcc, 0x49, 0x07, 0xa5, 0x80, 0xf2, 0x07, 0x52, 0x4c, 0x79, 0x96, 0x07, 0x22, 0x58, 0x89, 0x3f,
0xe4, 0xea, 0x74, 0x47, 0x9e, 0x91, 0xd0, 0xad, 0x2f, 0xf3, 0x48, 0x88, 0x61, 0x7d, 0x65, 0xcb,
0x37, 0x94, 0xa9, 0x3a, 0x70, 0xf1, 0x02, 0x5a, 0xbb, 0x61, 0xf8, 0x6a, 0x32, 0x56, 0xc7, 0x1b,
0xcd, 0x18, 0xe9, 0xb6, 0x17, 0x9f, 0xf5, 0x32, 0xbd, 0xb0, 0xef, 0x62, 0x51, 0x3d, 0xd2, 0xd5,
0x8a, 0x7a, 0xf8, 0xd3, 0xf4, 0x24, 0xcb, 0x67, 0xc4, 0x83, 0x79, 0xa5, 0xa3, 0x55, 0xc3, 0x7b,
0x66, 0x31, 0x86, 0x66, 0xce, 0x56, 0x61, 0x6c, 0x13, 0x64, 0x6b, 0x1f, 0xc6, 0xb2, 0xcc, 0x47,
0x16, 0x39, 0x80, 0xe6, 0x26, 0xed, 0xe3, 0xa5, 0x4f, 0x0c, 0x34, 0x2e, 0x18, 0xc1, 0x2a, 0x1e,
0xa1, 0xec, 0xb5, 0x0c, 0xd0, 0x5c, 0xb7, 0xc6, 0xde, 0x65, 0x44, 0x3f, 0x7d, 0xf8, 0x53, 0x11,
0xc2, 0xfc, 0x4c, 0xae, 0x5b, 0x32, 0xc6, 0x6b, 0xac, 0x5b, 0x99, 0xa0, 0xb0, 0xb1, 0x6e, 0xe5,
0x82, 0xc2, 0xc6, 0x50, 0xcb, 0x18, 0x33, 0x19, 0xc2, 0x7c, 0x2e, 0x8e, 0xac, 0x96, 0xac, 0x69,
0xd1, 0xe7, 0xde, 0xdd, 0xe9, 0x19, 0xcc, 0xda, 0x1e, 0x98, 0xb5, 0x1d, 0x42, 0x8b, 0xbf, 0xe9,
0x74, 0x4c, 0xf9, 0x7d, 0x8e, 0xcc, 0xf3, 0x00, 0xfa, 0x6d, 0x91, 0xec, 0x02, 0x83, 0x34, 0xd3,
0xc2, 0xe1, 0x8f, 0x43, 0xfe, 0x10, 0x1a, 0xcf, 0x68, 0x22, 0x2f, 0x70, 0x28, 0x1b, 0x3b, 0x73,
0xa3, 0xa3, 0x57, 0x70, 0xff, 0xc3, 0xe4, 0x19, 0x2c, 0xed, 0x21, 0x1d, 0x9c, 0x52, 0xae, 0x9c,
0x5c, 0x7f, 0xf0, 0x19, 0xf9, 0x1d, 0x2c, 0x5c, 0x5d, 0xa7, 0x5b, 0xd2, 0x4e, 0xe3, 0xeb, 0x85,
0xcf, 0x65, 0xf0, 0xa2, 0x92, 0x83, 0x70, 0x40, 0x35, 0x5b, 0x2f, 0x80, 0x86, 0x76, 0x1d, 0x57,
0x09, 0x50, 0xfe, 0xf6, 0xb2, 0x12, 0xa0, 0x82, 0xdb, 0xbb, 0xf6, 0x7d, 0xac, 0xc7, 0x26, 0x77,
0xd3, 0x7a, 0xf8, 0x8d, 0xdd, 0xb4, 0xa6, 0x87, 0x3f, 0xf5, 0x46, 0xc9, 0x67, 0xe4, 0x25, 0xbe,
0xb0, 0xaa, 0x5f, 0x50, 0x49, 0x37, 0x0d, 0xd9, 0xbb, 0x2c, 0x6a, 0xb0, 0x34, 0x92, 0xb9, 0x91,
0xe0, 0x55, 0xa1, 0x25, 0xf7, 0x4d, 0x80, 0xc3, 0x24, 0x1c, 0x6f, 0x7a, 0x74, 0x14, 0x06, 0xa9,
0xae, 0x4d, 0xaf, 0x47, 0xa4, 0xfa, 0x4b, 0xbb, 0x23, 0x41, 0x5e, 0x6a, 0xbb, 0x2c, 0xe3, 0x8e,
0x8f, 0x64, 0xae, 0xa9, 0x37, 0x28, 0xd4, 0x80, 0x14, 0xdc, 0xa2, 0x78, 0x64, 0x91, 0x35, 0x80,
0xf4, 0x20, 0x81, 0xda, 0x33, 0xe5, 0xce, 0x28, 0x28, 0xb5, 0x57, 0x70, 0xea, 0xe0, 0x00, 0xea,
0x69, 0xd8, 0x75, 0x39, 0xbd, 0x9c, 0x6f, 0x04, 0x69, 0xd5, 0x0a, 0x9e, 0x0b, 0x86, 0xda, 0x1d,
0x1c, 0x2a, 0x20, 0x35, 0x36, 0x54, 0x18, 0xe1, 0xf4, 0x61, 0x81, 0x37, 0x50, 0x99, 0x4b, 0x78,
0xac, 0x5f, 0x3d, 0xa4, 0x9b, 0x0f, 0x48, 0x2a, 0x69, 0x2e, 0x8c, 0xa7, 0x19, 0xae, 0x1f, 0xc6,
0xad, 0xfc, 0x4a, 0x01, 0x53, 0xcd, 0x23, 0x98, 0xcf, 0x85, 0x68, 0x94, 0x48, 0x4f, 0x8b, 0xc1,
0x29, 0x91, 0x9e, 0x1a, 0xdd, 0xb1, 0xaf, 0x63, 0x95, 0x73, 0x36, 0xe0, 0x56, 0xef, 0xc2, 0x4f,
0xfa, 0x67, 0xac, 0xba, 0x3f, 0xb2, 0x60, 0xa1, 0x20, 0x02, 0x43, 0xde, 0x95, 0x5e, 0x83, 0xa9,
0xd1, 0x99, 0x5e, 0xa1, 0x83, 0xde, 0x3e, 0xc4, 0x7a, 0x9e, 0x93, 0x4f, 0x8c, 0x85, 0x8d, 0xfb,
0xc6, 0x85, 0x64, 0x5e, 0x69, 0x54, 0x14, 0x5a, 0x14, 0x9f, 0xc2, 0x32, 0x6f, 0xc8, 0xda, 0x70,
0x98, 0x09, 0x1e, 0xdc, 0xc9, 0xfd, 0xe8, 0xa9, 0x11, 0x14, 0xe9, 0x4d, 0xff, 0x51, 0xd4, 0x29,
0xe6, 0x34, 0x6f, 0x2a, 0x99, 0x40, 0x27, 0xeb, 0x90, 0x27, 0xd3, 0xcb, 0xea, 0xbd, 0x63, 0xec,
0x7f, 0x0b, 0x9c, 0xf8, 0x5f, 0xc6, 0xca, 0xde, 0xb1, 0x7b, 0x45, 0xe3, 0xc2, 0xb7, 0xc4, 0x6c,
0x3e, 0xfe, 0x8a, 0x8a, 0x1e, 0x64, 0xfa, 0x29, 0x2b, 0x98, 0x16, 0xee, 0x50, 0x3b, 0xf0, 0xe2,
0xe0, 0xc3, 0x7b, 0x58, 0xfd, 0x5d, 0xfb, 0x66, 0x51, 0xf5, 0x11, 0xff, 0x84, 0xef, 0xc5, 0x97,
0xb3, 0x72, 0x2d, 0x5b, 0x70, 0xb7, 0x68, 0xbe, 0xa7, 0xee, 0x85, 0x32, 0x63, 0x7d, 0x0d, 0x6d,
0xbb, 0xa6, 0x1e, 0x2d, 0x50, 0xe2, 0x53, 0x10, 0x96, 0x50, 0xe2, 0x53, 0x14, 0x5e, 0x30, 0xed,
0x1a, 0x19, 0x58, 0xf8, 0xd8, 0x7a, 0xb0, 0xfe, 0xfe, 0x0f, 0xbe, 0x7c, 0xea, 0x27, 0x67, 0x93,
0xe3, 0x95, 0x7e, 0x38, 0x7a, 0x38, 0x94, 0xde, 0x46, 0x71, 0xd5, 0xed, 0xe1, 0x30, 0x18, 0x3c,
0xc4, 0x62, 0x8f, 0x67, 0xf0, 0x57, 0x9a, 0xbf, 0xfe, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x83,
0x91, 0xdc, 0xd2, 0xd7, 0x79, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -11000,9 +11450,22 @@ type LightningClient interface {
//request to a remote peer. Users are able to specify a target number of
//blocks that the funding transaction should be confirmed in, or a manual fee
//rate to us for the funding transaction. If neither are specified, then a
//lax block confirmation target is used.
//lax block confirmation target is used. Each OpenStatusUpdate will return
//the pending channel ID of the in-progress channel. Depending on the
//arguments specified in the OpenChannelRequest, this pending channel ID can
//then be used to manually progress the channel funding flow.
OpenChannel(ctx context.Context, in *OpenChannelRequest, opts ...grpc.CallOption) (Lightning_OpenChannelClient, error)
//*
//FundingStateStep is an advanced funding related call that allows the caller
//to either execute some preparatory steps for a funding workflow, or
//manually progress a funding workflow. The primary way a funding flow is
//identified is via its pending channel ID. As an example, this method can be
//used to specify that we're expecting a funding flow for a particular
//pending channel ID, for which we need to use specific parameters.
//Alternatively, this can be used to interactively drive PSBT signing for
//funding for partially complete funding transactions.
FundingStateStep(ctx context.Context, in *FundingTransitionMsg, opts ...grpc.CallOption) (*FundingStateStepResp, error)
//*
//ChannelAcceptor dispatches a bi-directional streaming RPC in which
//OpenChannel requests are sent to the client and the client responds with
//a boolean that tells LND whether or not to accept the channel. This allows
@ -11494,6 +11957,15 @@ func (x *lightningOpenChannelClient) Recv() (*OpenStatusUpdate, error) {
return m, nil
}
func (c *lightningClient) FundingStateStep(ctx context.Context, in *FundingTransitionMsg, opts ...grpc.CallOption) (*FundingStateStepResp, error) {
out := new(FundingStateStepResp)
err := c.cc.Invoke(ctx, "/lnrpc.Lightning/FundingStateStep", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *lightningClient) ChannelAcceptor(ctx context.Context, opts ...grpc.CallOption) (Lightning_ChannelAcceptorClient, error) {
stream, err := c.cc.NewStream(ctx, &_Lightning_serviceDesc.Streams[4], "/lnrpc.Lightning/ChannelAcceptor", opts...)
if err != nil {
@ -12040,9 +12512,22 @@ type LightningServer interface {
//request to a remote peer. Users are able to specify a target number of
//blocks that the funding transaction should be confirmed in, or a manual fee
//rate to us for the funding transaction. If neither are specified, then a
//lax block confirmation target is used.
//lax block confirmation target is used. Each OpenStatusUpdate will return
//the pending channel ID of the in-progress channel. Depending on the
//arguments specified in the OpenChannelRequest, this pending channel ID can
//then be used to manually progress the channel funding flow.
OpenChannel(*OpenChannelRequest, Lightning_OpenChannelServer) error
//*
//FundingStateStep is an advanced funding related call that allows the caller
//to either execute some preparatory steps for a funding workflow, or
//manually progress a funding workflow. The primary way a funding flow is
//identified is via its pending channel ID. As an example, this method can be
//used to specify that we're expecting a funding flow for a particular
//pending channel ID, for which we need to use specific parameters.
//Alternatively, this can be used to interactively drive PSBT signing for
//funding for partially complete funding transactions.
FundingStateStep(context.Context, *FundingTransitionMsg) (*FundingStateStepResp, error)
//*
//ChannelAcceptor dispatches a bi-directional streaming RPC in which
//OpenChannel requests are sent to the client and the client responds with
//a boolean that tells LND whether or not to accept the channel. This allows
@ -12648,6 +13133,24 @@ func (x *lightningOpenChannelServer) Send(m *OpenStatusUpdate) error {
return x.ServerStream.SendMsg(m)
}
func _Lightning_FundingStateStep_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(FundingTransitionMsg)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(LightningServer).FundingStateStep(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/lnrpc.Lightning/FundingStateStep",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(LightningServer).FundingStateStep(ctx, req.(*FundingTransitionMsg))
}
return interceptor(ctx, in, info, handler)
}
func _Lightning_ChannelAcceptor_Handler(srv interface{}, stream grpc.ServerStream) error {
return srv.(LightningServer).ChannelAcceptor(&lightningChannelAcceptorServer{stream})
}
@ -13318,6 +13821,10 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{
MethodName: "OpenChannelSync",
Handler: _Lightning_OpenChannelSync_Handler,
},
{
MethodName: "FundingStateStep",
Handler: _Lightning_FundingStateStep_Handler,
},
{
MethodName: "AbandonChannel",
Handler: _Lightning_AbandonChannel_Handler,

@ -437,10 +437,25 @@ service Lightning {
request to a remote peer. Users are able to specify a target number of
blocks that the funding transaction should be confirmed in, or a manual fee
rate to us for the funding transaction. If neither are specified, then a
lax block confirmation target is used.
lax block confirmation target is used. Each OpenStatusUpdate will return
the pending channel ID of the in-progress channel. Depending on the
arguments specified in the OpenChannelRequest, this pending channel ID can
then be used to manually progress the channel funding flow.
*/
rpc OpenChannel (OpenChannelRequest) returns (stream OpenStatusUpdate);
/**
FundingStateStep is an advanced funding related call that allows the caller
to either execute some preparatory steps for a funding workflow, or
manually progress a funding workflow. The primary way a funding flow is
identified is via its pending channel ID. As an example, this method can be
used to specify that we're expecting a funding flow for a particular
pending channel ID, for which we need to use specific parameters.
Alternatively, this can be used to interactively drive PSBT signing for
funding for partially complete funding transactions.
*/
rpc FundingStateStep(FundingTransitionMsg) returns (FundingStateStepResp);
/**
ChannelAcceptor dispatches a bi-directional streaming RPC in which
OpenChannel requests are sent to the client and the client responds with
@ -1678,15 +1693,103 @@ message OpenChannelRequest {
Note: If this value is set on channel creation, you will *not* be able to
cooperatively close out to a different address.
*/
string close_address = 13[json_name = "close_address"];
string close_address = 13 [json_name = "close_address"];
/**
Funding shims are an optional argument that allow the caller to intercept
certain funding functionality. For example, a shim can be provided to use a
particular key for the commitment key (ideally cold) rather than use one
that is generated by the wallet as normal, or signal that signing will be
carried out in an interactive manner (PSBT based).
*/
FundingShim funding_shim = 14 [json_name = "funding_shim"];
}
message OpenStatusUpdate {
oneof update {
PendingUpdate chan_pending = 1 [json_name = "chan_pending"];
ChannelOpenUpdate chan_open = 3 [json_name = "chan_open"];
}
/**
The pending channel ID of the created channel. This value may be used to
further the funding flow manually via the FundingStateStep method.
*/
bytes pending_chan_id = 4 [json_name = "pending_chan_id"];
}
message KeyLocator {
/// The family of key being identified.
int32 key_family = 1;
/// The precise index of the key being identified.
int32 key_index = 2;
}
message KeyDescriptor {
/**
The raw bytes of the key being identified.
*/
bytes raw_key_bytes = 1;
/**
The key locator that identifies which key to use for signing.
*/
KeyLocator key_loc = 2;
}
message ChanPointShim {
/**
The size of the pre-crafted output to be used as the channel point for this
channel funding.
*/
int64 amt = 1;
/// The target channel point to refrence in created commitment transactions.
ChannelPoint chan_point = 2;
/// Our local key to use when creating the multi-sig output.
KeyDescriptor local_key = 3;
/// The key of the remote party to use when creating the multi-sig output.
bytes remote_key = 4;
/**
If non-zero, then this will be used as the pending channel ID on the wire
protocol to initate the funding request. This is an optional field, and
should only be set if the responder is already expecting a specific pending
channel ID.
*/
bytes pending_chan_id = 5;
}
message FundingShim {
oneof shim {
ChanPointShim chan_point_shim = 1;
}
}
message FundingShimCancel {
/// The pending channel ID of the channel to cancel the funding shim for.
bytes pending_chan_id = 1;
}
message FundingTransitionMsg {
oneof trigger {
/**
The funding shim to regsiter. This should be used before any
channel funding has began by the remote party, as it is intended as a
prepatory step for the full channel funding.
*/
FundingShim shim_register = 1;
/// Used to cancel an existing registered funding shim.
FundingShimCancel shim_cancel = 2;
}
}
message FundingStateStepResp {
}
message PendingHTLC {
/// The direction within the channel that the htlc was sent

@ -1680,6 +1680,34 @@
}
}
},
"lnrpcChanPointShim": {
"type": "object",
"properties": {
"amt": {
"type": "string",
"format": "int64",
"description": "*\nThe size of the pre-crafted output to be used as the channel point for this\nchannel funding."
},
"chan_point": {
"$ref": "#/definitions/lnrpcChannelPoint",
"description": "/ The target channel point to refrence in created commitment transactions."
},
"local_key": {
"$ref": "#/definitions/lnrpcKeyDescriptor",
"description": "/ Our local key to use when creating the multi-sig output."
},
"remote_key": {
"type": "string",
"format": "byte",
"description": "/ The key of the remote party to use when creating the multi-sig output."
},
"pending_chan_id": {
"type": "string",
"format": "byte",
"description": "*\nIf non-zero, then this will be used as the pending channel ID on the wire\nprotocol to initate the funding request. This is an optional field, and\nshould only be set if the responder is already expecting a specific pending\nchannel ID."
}
}
},
"lnrpcChangePasswordRequest": {
"type": "object",
"properties": {
@ -2433,6 +2461,27 @@
}
}
},
"lnrpcFundingShim": {
"type": "object",
"properties": {
"chan_point_shim": {
"$ref": "#/definitions/lnrpcChanPointShim"
}
}
},
"lnrpcFundingShimCancel": {
"type": "object",
"properties": {
"pending_chan_id": {
"type": "string",
"format": "byte",
"description": "/ The pending channel ID of the channel to cancel the funding shim for."
}
}
},
"lnrpcFundingStateStepResp": {
"type": "object"
},
"lnrpcGenSeedResponse": {
"type": "object",
"properties": {
@ -2917,6 +2966,35 @@
],
"default": "ACCEPTED"
},
"lnrpcKeyDescriptor": {
"type": "object",
"properties": {
"raw_key_bytes": {
"type": "string",
"format": "byte",
"description": "*\nThe raw bytes of the key being identified."
},
"key_loc": {
"$ref": "#/definitions/lnrpcKeyLocator",
"description": "* \nThe key locator that identifies which key to use for signing."
}
}
},
"lnrpcKeyLocator": {
"type": "object",
"properties": {
"key_family": {
"type": "integer",
"format": "int32",
"description": "/ The family of key being identified."
},
"key_index": {
"type": "integer",
"format": "int32",
"description": "/ The precise index of the key being identified."
}
}
},
"lnrpcLightningAddress": {
"type": "object",
"properties": {
@ -3271,6 +3349,10 @@
"close_address": {
"type": "string",
"description": "Close address is an optional address which specifies the address to which\nfunds should be paid out to upon cooperative close. This field may only be\nset if the peer supports the option upfront feature bit (call listpeers\nto check). The remote peer will only accept cooperative closes to this\naddress if it is set.\n\nNote: If this value is set on channel creation, you will *not* be able to\ncooperatively close out to a different address."
},
"funding_shim": {
"$ref": "#/definitions/lnrpcFundingShim",
"description": "*\nFunding shims are an optional argument that allow the caller to intercept\ncertain funding functionality. For example, a shim can be provided to use a\nparticular key for the commitment key (ideally cold) rather than use one\nthat is generated by the wallet as normal, or signal that signing will be\ncarried out in an interactive manner (PSBT based)."
}
}
},
@ -3282,6 +3364,11 @@
},
"chan_open": {
"$ref": "#/definitions/lnrpcChannelOpenUpdate"
},
"pending_chan_id": {
"type": "string",
"format": "byte",
"description": "*\nThe pending channel ID of the created channel. This value may be used to\nfurther the funding flow manually via the FundingStateStep method."
}
}
},

@ -844,6 +844,10 @@ type OpenChannelParams struct {
// MinHtlc is the htlc_minimum_msat value set when opening the channel.
MinHtlc lnwire.MilliSatoshi
// FundingShim is an optional funding shim that the caller can specify
// in order to modify the channel funding workflow.
FundingShim *lnrpc.FundingShim
}
// OpenChannel attempts to open a channel between srcNode and destNode with the
@ -879,6 +883,7 @@ func (n *NetworkHarness) OpenChannel(ctx context.Context,
MinConfs: minConfs,
SpendUnconfirmed: p.SpendUnconfirmed,
MinHtlcMsat: int64(p.MinHtlc),
FundingShim: p.FundingShim,
}
respStream, err := srcNode.OpenChannel(ctx, openReq)

@ -33,9 +33,11 @@ import (
"github.com/lightningnetwork/lnd"
"github.com/lightningnetwork/lnd/chanbackup"
"github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/input"
"github.com/lightningnetwork/lnd/lnrpc"
"github.com/lightningnetwork/lnd/lnrpc/invoicesrpc"
"github.com/lightningnetwork/lnd/lnrpc/routerrpc"
"github.com/lightningnetwork/lnd/lnrpc/signrpc"
"github.com/lightningnetwork/lnd/lnrpc/watchtowerrpc"
"github.com/lightningnetwork/lnd/lnrpc/wtclientrpc"
"github.com/lightningnetwork/lnd/lntest"
@ -955,8 +957,8 @@ func testOnchainFundRecovery(net *lntest.NetworkHarness, t *harnessTest) {
// then return a function closure that should be called to assert proper
// channel closure.
func basicChannelFundingTest(t *harnessTest, net *lntest.NetworkHarness,
alice *lntest.HarnessNode,
bob *lntest.HarnessNode) (*lnrpc.Channel, *lnrpc.Channel, func(), error) {
alice *lntest.HarnessNode, bob *lntest.HarnessNode,
fundingShim *lnrpc.FundingShim) (*lnrpc.Channel, *lnrpc.Channel, func(), error) {
chanAmt := lnd.MaxBtcFundingAmount
pushAmt := btcutil.Amount(100000)
@ -972,8 +974,9 @@ func basicChannelFundingTest(t *harnessTest, net *lntest.NetworkHarness,
chanPoint := openChannelAndAssert(
ctxt, t, net, alice, bob,
lntest.OpenChannelParams{
Amt: chanAmt,
PushAmt: pushAmt,
Amt: chanAmt,
PushAmt: pushAmt,
FundingShim: fundingShim,
},
)
@ -1095,7 +1098,7 @@ test:
ht := t
success := t.t.Run(testName, func(t *testing.T) {
carolChannel, daveChannel, closeChan, err := basicChannelFundingTest(
ht, net, carol, dave,
ht, net, carol, dave, nil,
)
if err != nil {
t.Fatalf("failed funding flow: %v", err)
@ -14907,6 +14910,181 @@ func testHoldInvoicePersistence(net *lntest.NetworkHarness, t *harnessTest) {
}
}
// testExternalFundingChanPoint tests that we're able to carry out a normal
// channel funding workflow given a channel point that was constructed outside
// the main daemon.
func testExternalFundingChanPoint(net *lntest.NetworkHarness, t *harnessTest) {
ctxb := context.Background()
// First, we'll create two new nodes that we'll use to open channel
// between for this test.
carol, err := net.NewNode("carol", nil)
if err != nil {
t.Fatalf("unable to start new node: %v", err)
}
defer shutdownAndAssert(net, t, carol)
dave, err := net.NewNode("dave", nil)
if err != nil {
t.Fatalf("unable to start new node: %v", err)
}
defer shutdownAndAssert(net, t, dave)
// Carol will be funding the channel, so we'll send some coins over to
// her and ensure they have enough confirmations before we proceed.
ctxt, _ := context.WithTimeout(ctxb, defaultTimeout)
err = net.SendCoins(ctxt, btcutil.SatoshiPerBitcoin, carol)
if err != nil {
t.Fatalf("unable to send coins to carol: %v", err)
}
// Before we start the test, we'll ensure both sides are connected to
// the funding flow can properly be executed.
ctxt, _ = context.WithTimeout(ctxb, defaultTimeout)
err = net.EnsureConnected(ctxt, carol, dave)
if err != nil {
t.Fatalf("unable to connect peers: %v", err)
}
// At this point, we're ready to simulate our external channle funding
// flow. To start with, we'll get to new keys from both sides which
// will be used to create the multi-sig output for the external funding
// transaction.
keyLoc := &signrpc.KeyLocator{
KeyFamily: 9999,
KeyIndex: 1,
}
carolFundingKey, err := carol.WalletKitClient.DeriveKey(ctxb, keyLoc)
if err != nil {
t.Fatalf("unable to get carol funding key: %v", err)
}
daveFundingKey, err := dave.WalletKitClient.DeriveKey(ctxb, keyLoc)
if err != nil {
t.Fatalf("unable to get dave funding key: %v", err)
}
// Now that we have the multi-sig keys for each party, we can manually
// construct the funding transaction. We'll instruct the backend to
// immediately create and broadcast a transaction paying out an exact
// amount. Normally this would reside in the mempool, but we just
// confirm it now for simplicity.
const chanSize = lnd.MaxBtcFundingAmount
_, fundingOutput, err := input.GenFundingPkScript(
carolFundingKey.RawKeyBytes, daveFundingKey.RawKeyBytes,
int64(chanSize),
)
if err != nil {
t.Fatalf("unable to create funding script: %v", err)
}
txid, err := net.Miner.SendOutputsWithoutChange(
[]*wire.TxOut{fundingOutput}, 5,
)
if err != nil {
t.Fatalf("unable to create funding output: %v", err)
}
// At this point, we can being our external channel funding workflow.
// We'll start by generating a pending channel ID externally that will
// be used to track this new funding type.
var pendingChanID [32]byte
if _, err := rand.Read(pendingChanID[:]); err != nil {
t.Fatalf("unable to gen pending chan ID: %v", err)
}
// Now that we have the pending channel ID, Dave (our responder) will
// register the intent to receive a new channel funding workflow using
// the pending channel ID.
chanPointShim := &lnrpc.ChanPointShim{
Amt: int64(chanSize),
ChanPoint: &lnrpc.ChannelPoint{
FundingTxid: &lnrpc.ChannelPoint_FundingTxidBytes{
FundingTxidBytes: txid[:],
},
},
LocalKey: &lnrpc.KeyDescriptor{
RawKeyBytes: daveFundingKey.RawKeyBytes,
KeyLoc: &lnrpc.KeyLocator{
KeyFamily: daveFundingKey.KeyLoc.KeyFamily,
KeyIndex: daveFundingKey.KeyLoc.KeyIndex,
},
},
RemoteKey: carolFundingKey.RawKeyBytes,
PendingChanId: pendingChanID[:],
}
fundingShim := &lnrpc.FundingShim{
Shim: &lnrpc.FundingShim_ChanPointShim{
ChanPointShim: chanPointShim,
},
}
_, err = dave.FundingStateStep(ctxb, &lnrpc.FundingTransitionMsg{
Trigger: &lnrpc.FundingTransitionMsg_ShimRegister{
ShimRegister: fundingShim,
},
})
if err != nil {
t.Fatalf("unable to walk funding state forward: %v", err)
}
// If we attempt to register the same shim (has the same pending chan
// ID), then we should get an error.
_, err = dave.FundingStateStep(ctxb, &lnrpc.FundingTransitionMsg{
Trigger: &lnrpc.FundingTransitionMsg_ShimRegister{
ShimRegister: fundingShim,
},
})
if err == nil {
t.Fatalf("duplicate pending channel ID funding shim " +
"registration should trigger an error")
}
// We'll take the chan point shim we just registered for Dave (the
// responder), and swap the local/remote keys before we feed it in as
// Carol's funding shim as the initiator.
fundingShim.GetChanPointShim().LocalKey = &lnrpc.KeyDescriptor{
RawKeyBytes: carolFundingKey.RawKeyBytes,
KeyLoc: &lnrpc.KeyLocator{
KeyFamily: carolFundingKey.KeyLoc.KeyFamily,
KeyIndex: carolFundingKey.KeyLoc.KeyIndex,
},
}
fundingShim.GetChanPointShim().RemoteKey = daveFundingKey.RawKeyBytes
// At this point, we'll now carry out the normal basic channel funding
// test as everything should now proceed as normal (a regular channel
// funding flow).
_, _, closeChans, err := basicChannelFundingTest(
t, net, carol, dave, fundingShim,
)
if err != nil {
t.Fatalf("unable to open channels: %v", err)
}
// Next, to make sure the channel functions as normal, we'll make some
// payments within the channel.
payAmt := btcutil.Amount(100000)
invoice := &lnrpc.Invoice{
Memo: "new chans",
Value: int64(payAmt),
}
ctxt, _ = context.WithTimeout(ctxb, defaultTimeout)
resp, err := dave.AddInvoice(ctxt, invoice)
if err != nil {
t.Fatalf("unable to add invoice: %v", err)
}
ctxt, _ = context.WithTimeout(ctxb, defaultTimeout)
err = completePaymentRequests(
ctxt, carol, []string{resp.PaymentRequest}, true,
)
if err != nil {
t.Fatalf("unable to make payments between Carol and Dave")
}
// To conclude, we'll close the newly created channel between Carol and
// Dave.
closeChans()
}
type testCase struct {
name string
test func(net *lntest.NetworkHarness, t *harnessTest)
@ -15170,6 +15348,10 @@ var testsCases = []*testCase{
name: "immediate payment after channel opened",
test: testPaymentFollowingChannelOpen,
},
{
name: "external channel funding",
test: testExternalFundingChanPoint,
},
}
// TestLightningNetworkDaemon performs a series of integration tests amongst a

@ -154,15 +154,9 @@ func NewCannedAssembler(chanPoint wire.OutPoint, fundingAmt btcutil.Amount,
//
// NOTE: This method satisfies the chanfunding.Assembler interface.
func (c *CannedAssembler) ProvisionChannel(req *Request) (Intent, error) {
switch {
// A simple sanity check to ensure the provision request matches the
// re-made shim intent.
case req.LocalAmt != c.fundingAmt:
return nil, fmt.Errorf("intent doesn't match canned assembler")
// We'll exit out if this field is set as the funding transaction has
// already been assembled, so we don't influence coin selection..
case req.SubtractFees:
if req.SubtractFees {
return nil, fmt.Errorf("SubtractFees ignored, funding " +
"transaction is frozen")
}
@ -179,6 +173,14 @@ func (c *CannedAssembler) ProvisionChannel(req *Request) (Intent, error) {
intent.remoteFundingAmt = c.fundingAmt
}
// A simple sanity check to ensure the provisioned request matches the
// re-made shim intent.
if req.LocalAmt+req.RemoteAmt != c.fundingAmt {
return nil, fmt.Errorf("intent doesn't match canned "+
"assembler: local_amt=%v, remote_amt=%v, funding_amt=%v",
req.LocalAmt, req.RemoteAmt, c.fundingAmt)
}
return intent, nil
}

@ -450,8 +450,30 @@ func (l *LightningWallet) RegisterFundingIntent(expectedID [32]byte,
shimIntent chanfunding.Intent) error {
l.intentMtx.Lock()
defer l.intentMtx.Unlock()
if _, ok := l.fundingIntents[expectedID]; ok {
return fmt.Errorf("pendingChanID(%x) already has intent "+
"registered", expectedID[:])
}
l.fundingIntents[expectedID] = shimIntent
l.intentMtx.Unlock()
return nil
}
// CancelFundingIntent allows a caller to cancel a previously registered
// funding intent. If no intent was found, then an error will be returned.
func (l *LightningWallet) CancelFundingIntent(pid [32]byte) error {
l.intentMtx.Lock()
defer l.intentMtx.Unlock()
if _, ok := l.fundingIntents[pid]; !ok {
return fmt.Errorf("no funding intent found for "+
"pendingChannelID(%x)", pid[:])
}
delete(l.fundingIntents, pid)
return nil
}

@ -40,6 +40,7 @@ import (
"github.com/lightningnetwork/lnd/htlcswitch"
"github.com/lightningnetwork/lnd/input"
"github.com/lightningnetwork/lnd/invoices"
"github.com/lightningnetwork/lnd/keychain"
"github.com/lightningnetwork/lnd/lncfg"
"github.com/lightningnetwork/lnd/lnrpc"
"github.com/lightningnetwork/lnd/lnrpc/invoicesrpc"
@ -47,6 +48,7 @@ import (
"github.com/lightningnetwork/lnd/lntypes"
"github.com/lightningnetwork/lnd/lnwallet"
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
"github.com/lightningnetwork/lnd/lnwallet/chanfunding"
"github.com/lightningnetwork/lnd/lnwire"
"github.com/lightningnetwork/lnd/macaroons"
"github.com/lightningnetwork/lnd/monitoring"
@ -440,6 +442,13 @@ func mainRPCServerPermissions() map[string][]bakery.Op {
Entity: "peers",
Action: "read",
}},
"/lnrpc.Lightning/FundingStateStep": {{
Entity: "onchain",
Action: "write",
}, {
Entity: "offchain",
Action: "write",
}},
}
}
@ -1447,6 +1456,88 @@ func extractOpenChannelMinConfs(in *lnrpc.OpenChannelRequest) (int32, error) {
}
}
// newFundingShimAssembler returns a new fully populated
// chanfunding.CannedAssembler using a FundingShim obtained from an RPC caller.
func newFundingShimAssembler(chanPointShim *lnrpc.ChanPointShim,
initiator bool, keyRing keychain.KeyRing) (chanfunding.Assembler, error) {
// Perform some basic sanity checks to ensure that all the expected
// fields are populated.
switch {
case chanPointShim.RemoteKey == nil:
return nil, fmt.Errorf("remote key not set")
case chanPointShim.LocalKey == nil:
return nil, fmt.Errorf("local key desc not set")
case chanPointShim.LocalKey.RawKeyBytes == nil:
return nil, fmt.Errorf("local raw key bytes not set")
case chanPointShim.LocalKey.KeyLoc == nil:
return nil, fmt.Errorf("local key loc not set")
case chanPointShim.ChanPoint == nil:
return nil, fmt.Errorf("chan point not set")
case len(chanPointShim.PendingChanId) != 32:
return nil, fmt.Errorf("pending chan ID not set")
}
// First, we'll map the RPC's channel point to one we can actually use.
index := chanPointShim.ChanPoint.OutputIndex
txid, err := GetChanPointFundingTxid(chanPointShim.ChanPoint)
if err != nil {
return nil, err
}
chanPoint := wire.NewOutPoint(txid, index)
// Next we'll parse out the remote party's funding key, as well as our
// full key descriptor.
remoteKey, err := btcec.ParsePubKey(
chanPointShim.RemoteKey, btcec.S256(),
)
if err != nil {
return nil, err
}
shimKeyDesc := chanPointShim.LocalKey
localKey, err := btcec.ParsePubKey(
shimKeyDesc.RawKeyBytes, btcec.S256(),
)
if err != nil {
return nil, err
}
localKeyDesc := keychain.KeyDescriptor{
PubKey: localKey,
KeyLocator: keychain.KeyLocator{
Family: keychain.KeyFamily(
shimKeyDesc.KeyLoc.KeyFamily,
),
Index: uint32(shimKeyDesc.KeyLoc.KeyIndex),
},
}
// Verify that if we re-derive this key according to the passed
// KeyLocator, that we get the exact same key back. Otherwise, we may
// end up in a situation where we aren't able to actually sign for this
// newly created channel.
derivedKey, err := keyRing.DeriveKey(localKeyDesc.KeyLocator)
if err != nil {
return nil, err
}
if !derivedKey.PubKey.IsEqual(localKey) {
return nil, fmt.Errorf("KeyLocator does not match attached " +
"raw pubkey")
}
// With all the parts assembled, we can now make the canned assembler
// to pass into the wallet.
return chanfunding.NewCannedAssembler(
*chanPoint, btcutil.Amount(chanPointShim.Amt),
&localKeyDesc, remoteKey, initiator,
), nil
}
// OpenChannel attempts to open a singly funded channel specified in the
// request to a remote peer.
func (r *rpcServer) OpenChannel(in *lnrpc.OpenChannelRequest,
@ -1563,6 +1654,28 @@ func (r *rpcServer) OpenChannel(in *lnrpc.OpenChannelRequest,
shutdownScript: script,
}
// If the user has provided a shim, then we'll now augment the based
// open channel request with this additional logic.
if in.FundingShim != nil {
// If we have a chan point shim, then this means the funding
// transaction was crafted externally. In this case we only
// need to hand a channel point down into the wallet.
if in.FundingShim.GetChanPointShim() != nil {
chanPointShim := in.FundingShim.GetChanPointShim()
// Map the channel point shim into a new
// chanfunding.CannedAssembler that the wallet will use
// to obtain the channel point details.
copy(req.pendingChanID[:], chanPointShim.PendingChanId)
req.chanFunder, err = newFundingShimAssembler(
chanPointShim, true, r.server.cc.keyRing,
)
if err != nil {
return err
}
}
}
updateChan, errChan := r.server.OpenChannel(req)
var outpoint wire.OutPoint
@ -5692,3 +5805,77 @@ func (r *rpcServer) BakeMacaroon(ctx context.Context,
return resp, nil
}
// FundingStateStep is an advanced funding related call that allows the caller
// to either execute some preparatory steps for a funding workflow, or manually
// progress a funding workflow. The primary way a funding flow is identified is
// via its pending channel ID. As an example, this method can be used to
// specify that we're expecting a funding flow for a particular pending channel
// ID, for which we need to use specific parameters. Alternatively, this can
// be used to interactively drive PSBT signing for funding for partially
// complete funding transactions.
func (r *rpcServer) FundingStateStep(ctx context.Context,
in *lnrpc.FundingTransitionMsg) (*lnrpc.FundingStateStepResp, error) {
switch {
// If this is a message to register a new shim that is an external
// channel point, then we'll contact the wallet to register this new
// shim. A user will use this method to register a new channel funding
// workflow which has already been partially negotiated outside of the
// core protocol.
case in.GetShimRegister() != nil &&
in.GetShimRegister().GetChanPointShim() != nil:
rpcShimIntent := in.GetShimRegister().GetChanPointShim()
// Using the rpc shim as a template, we'll construct a new
// chanfunding.Assembler that is able to express proper
// formulation of this expected channel.
shimAssembler, err := newFundingShimAssembler(
rpcShimIntent, false, r.server.cc.keyRing,
)
if err != nil {
return nil, err
}
req := &chanfunding.Request{
RemoteAmt: btcutil.Amount(rpcShimIntent.Amt),
}
shimIntent, err := shimAssembler.ProvisionChannel(req)
if err != nil {
return nil, err
}
// Once we have the intent, we'll register it with the wallet.
// Once we receive an incoming funding request that uses this
// pending channel ID, then this shim will be dispatched in
// place of our regular funding workflow.
var pendingChanID [32]byte
copy(pendingChanID[:], rpcShimIntent.PendingChanId)
err = r.server.cc.wallet.RegisterFundingIntent(
pendingChanID, shimIntent,
)
if err != nil {
return nil, err
}
// If this is a transition to cancel an existing shim, then we'll pass
// this message along to the wallet.
case in.GetShimCancel() != nil:
pid := in.GetShimCancel().PendingChanId
var pendingChanID [32]byte
copy(pendingChanID[:], pid)
err := r.server.cc.wallet.CancelFundingIntent(pendingChanID)
if err != nil {
return nil, err
}
}
// TODO(roasbeef): extend PendingChannels to also show shims
// TODO(roasbeef): return resulting state? also add a method to query
// current state?
return &lnrpc.FundingStateStepResp{}, nil
}

@ -47,6 +47,7 @@ import (
"github.com/lightningnetwork/lnd/lnrpc/routerrpc"
"github.com/lightningnetwork/lnd/lnwallet"
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
"github.com/lightningnetwork/lnd/lnwallet/chanfunding"
"github.com/lightningnetwork/lnd/lnwire"
"github.com/lightningnetwork/lnd/nat"
"github.com/lightningnetwork/lnd/netann"
@ -3108,6 +3109,17 @@ type openChanReq struct {
// TODO(roasbeef): add ability to specify channel constraints as well
// chanFunder is an optional channel funder that allows the caller to
// control exactly how the channel funding is carried out. If not
// specified, then the default chanfunding.WalletAssembler will be
// used.
chanFunder chanfunding.Assembler
// pendingChanID is not all zeroes (the default value), then this will
// be the pending channel ID used for the funding flow within the wire
// protocol.
pendingChanID [32]byte
updates chan *lnrpc.OpenStatusUpdate
err chan error
}