From 0fe35e0014c8a89ab57681b1eb87e97d49a1a098 Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Mon, 10 Sep 2018 18:19:55 -0700 Subject: [PATCH 1/5] channeldb/invoices: extend invoice queries to allow backwards pagination --- channeldb/invoices.go | 116 +++++++++++++++++++++++++----------------- 1 file changed, 70 insertions(+), 46 deletions(-) diff --git a/channeldb/invoices.go b/channeldb/invoices.go index 141f79067..e9149c4d6 100644 --- a/channeldb/invoices.go +++ b/channeldb/invoices.go @@ -402,15 +402,19 @@ func (d *DB) FetchAllInvoices(pendingOnly bool) ([]Invoice, error) { type InvoiceQuery struct { // IndexOffset is the offset within the add indices to start at. This // can be used to start the response at a particular invoice. - IndexOffset uint32 + IndexOffset uint64 // NumMaxInvoices is the maximum number of invoices that should be // starting from the add index. - NumMaxInvoices uint32 + NumMaxInvoices uint64 // PendingOnly, if set, returns unsettled invoices starting from the // add index. PendingOnly bool + + // Reversed, if set, indicates that the invoices returned should start + // from the IndexOffset and go backwards. + Reversed bool } // InvoiceSlice is the response to a invoice query. It includes the original @@ -423,13 +427,19 @@ type InvoiceSlice struct { InvoiceQuery // Invoices is the set of invoices that matched the query above. - Invoices []*Invoice + Invoices []Invoice + + // FirstIndexOffset is the index of the first element in the set of + // returned Invoices above. Callers can use this to resume their query + // in the event that the slice has too many events to fit into a single + // response. + FirstIndexOffset uint64 // LastIndexOffset is the index of the last element in the set of // returned Invoices above. Callers can use this to resume their query - // in the event that the time slice has too many events to fit into a - // single response. - LastIndexOffset uint32 + // in the event that the slice has too many events to fit into a single + // response. + LastIndexOffset uint64 } // QueryInvoices allows a caller to query the invoice database for invoices @@ -439,12 +449,6 @@ func (d *DB) QueryInvoices(q InvoiceQuery) (InvoiceSlice, error) { InvoiceQuery: q, } - // If the caller provided an index offset, then we'll not know how many - // records we need to skip. We'll also keep track of the record offset - // as that's part of the final return value. - invoicesToSkip := q.IndexOffset - invoiceOffset := q.IndexOffset - err := d.View(func(tx *bolt.Tx) error { // If the bucket wasn't found, then there aren't any invoices // within the database yet, so we can simply exit. @@ -452,38 +456,50 @@ func (d *DB) QueryInvoices(q InvoiceQuery) (InvoiceSlice, error) { if invoices == nil { return ErrNoInvoicesCreated } - invoiceAddedIndex := invoices.Bucket(addIndexBucket) - if invoiceAddedIndex == nil { + invoiceAddIndex := invoices.Bucket(addIndexBucket) + if invoiceAddIndex == nil { return ErrNoInvoicesCreated } - // We'll be using a cursor to seek into the database, so we'll - // populate byte slices that represent the start of the key - // space we're interested in. - var startIndex [8]byte - switch q.PendingOnly { - case true: - // We have to start from the beginning so we know - // how many pending invoices we're skipping. - byteOrder.PutUint64(startIndex[:], uint64(1)) - default: - // We can seek right to the invoice offset we want - // to start with. - invoicesToSkip = 0 - byteOrder.PutUint64(startIndex[:], uint64(invoiceOffset+1)) + // keyForIndex is a helper closure that retrieves the invoice + // key for the given add index of an invoice. + keyForIndex := func(c *bolt.Cursor, index uint64) []byte { + var keyIndex [8]byte + byteOrder.PutUint64(keyIndex[:], index) + _, invoiceKey := c.Seek(keyIndex[:]) + return invoiceKey + } + + // nextKey is a helper closure to determine what the next + // invoice key is when iterating over the invoice add index. + nextKey := func(c *bolt.Cursor) ([]byte, []byte) { + if q.Reversed { + return c.Prev() + } + return c.Next() + } + + // We'll be using a cursor to seek into the database and return + // a slice of invoices. We'll need to determine where to start + // our cursor depending on the parameters set within the query. + c := invoiceAddIndex.Cursor() + invoiceKey := keyForIndex(c, q.IndexOffset+1) + if q.Reversed { + _, invoiceKey = c.Last() + if q.IndexOffset != 0 { + invoiceKey = keyForIndex(c, q.IndexOffset-1) + } } // If we know that a set of invoices exists, then we'll begin // our seek through the bucket in order to satisfy the query. - // We'll continue until either we reach the end of the range, - // or reach our max number of events. - cursor := invoiceAddedIndex.Cursor() - _, invoiceKey := cursor.Seek(startIndex[:]) - for ; invoiceKey != nil; _, invoiceKey = cursor.Next() { + // We'll continue until either we reach the end of the range, or + // reach our max number of invoices. + for ; invoiceKey != nil; _, invoiceKey = nextKey(c) { // If our current return payload exceeds the max number // of invoices, then we'll exit now. - if uint32(len(resp.Invoices)) >= q.NumMaxInvoices { - return nil + if uint64(len(resp.Invoices)) >= q.NumMaxInvoices { + break } invoice, err := fetchInvoice(invoiceKey, invoices) @@ -496,17 +512,22 @@ func (d *DB) QueryInvoices(q InvoiceQuery) (InvoiceSlice, error) { if q.PendingOnly && invoice.Terms.Settled { continue } - // If we're not yet past the user defined offset, then - // we'll continue to seek forward. - if invoicesToSkip > 0 { - invoicesToSkip-- - continue - } // At this point, we've exhausted the offset, so we'll // begin collecting invoices found within the range. - resp.Invoices = append(resp.Invoices, &invoice) - invoiceOffset++ + resp.Invoices = append(resp.Invoices, invoice) + } + + // If we iterated through the add index in reverse order, then + // we'll need to reverse the slice of invoices to return them in + // forward order. + if q.Reversed { + numInvoices := len(resp.Invoices) + for i := 0; i < numInvoices/2; i++ { + opposite := numInvoices - i - 1 + resp.Invoices[i], resp.Invoices[opposite] = + resp.Invoices[opposite], resp.Invoices[i] + } } return nil @@ -515,9 +536,12 @@ func (d *DB) QueryInvoices(q InvoiceQuery) (InvoiceSlice, error) { return resp, err } - // Finally, record the index of the last invoice added so that the - // caller can resume from this point later on. - resp.LastIndexOffset = invoiceOffset + // Finally, record the indexes of the first and last invoices returned + // so that the caller can resume from this point later on. + if len(resp.Invoices) > 0 { + resp.FirstIndexOffset = resp.Invoices[0].AddIndex + resp.LastIndexOffset = resp.Invoices[len(resp.Invoices)-1].AddIndex + } return resp, nil } From 7e6eb44cf8a90ac14d52f4ad40d0a1dfab17076a Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Mon, 10 Sep 2018 18:20:38 -0700 Subject: [PATCH 2/5] channeldb/invoice_test: refactor TestQueryInvoices and add reverse test cases --- channeldb/invoice_test.go | 187 +++++++++++++++++++++----------------- 1 file changed, 103 insertions(+), 84 deletions(-) diff --git a/channeldb/invoice_test.go b/channeldb/invoice_test.go index 73c58270d..5c648112b 100644 --- a/channeldb/invoice_test.go +++ b/channeldb/invoice_test.go @@ -377,7 +377,7 @@ func TestDuplicateSettleInvoice(t *testing.T) { } // TestQueryInvoices ensures that we can properly query the invoice database for -// invoices between specific time intervals. +// invoices using different types of queries. func TestQueryInvoices(t *testing.T) { t.Parallel() @@ -387,11 +387,11 @@ func TestQueryInvoices(t *testing.T) { t.Fatalf("unable to make test db: %v", err) } - // To begin the test, we'll add 100 invoices to the database. We'll + // To begin the test, we'll add 50 invoices to the database. We'll // assume that the index of the invoice within the database is the same // as the amount of the invoice itself. - const numInvoices = 100 - for i := lnwire.MilliSatoshi(0); i < numInvoices; i++ { + const numInvoices = 50 + for i := lnwire.MilliSatoshi(1); i <= numInvoices; i++ { invoice, err := randInvoice(i) if err != nil { t.Fatalf("unable to create invoice: %v", err) @@ -410,93 +410,112 @@ func TestQueryInvoices(t *testing.T) { } } - // With the invoices created, we can begin querying the database. We'll - // start with a simple query to retrieve all invoices. - query := InvoiceQuery{ - NumMaxInvoices: numInvoices, - } - res, err := db.QueryInvoices(query) + // We'll then retrieve the set of all invoices and pending invoices. + // This will serve useful when comparing the expected responses of the + // query with the actual ones. + invoices, err := db.FetchAllInvoices(false) if err != nil { - t.Fatalf("unable to query invoices: %v", err) + t.Fatalf("unable to retrieve invoices: %v", err) } - if len(res.Invoices) != numInvoices { - t.Fatalf("expected %d invoices, got %d", numInvoices, - len(res.Invoices)) + pendingInvoices, err := db.FetchAllInvoices(true) + if err != nil { + t.Fatalf("unable to retrieve pending invoices: %v", err) } - // Now, we'll limit the query to only return the latest 30 invoices. - query.IndexOffset = 70 - res, err = db.QueryInvoices(query) - if err != nil { - t.Fatalf("unable to query invoices: %v", err) + // The test will consist of several queries along with their respective + // expected response. Each query response should match its expected one. + testCases := []struct { + query InvoiceQuery + expected []Invoice + }{ + // Fetch all invoices with a single query. + { + query: InvoiceQuery{ + NumMaxInvoices: numInvoices, + }, + expected: invoices, + }, + // Fetch the first 25 invoices. + { + query: InvoiceQuery{ + NumMaxInvoices: numInvoices / 2, + }, + expected: invoices[:numInvoices/2], + }, + // Fetch the first 10 invoices, but this time iterating + // backwards. + { + query: InvoiceQuery{ + IndexOffset: 11, + Reversed: true, + NumMaxInvoices: numInvoices, + }, + expected: invoices[:10], + }, + // Fetch the last 40 invoices. + { + query: InvoiceQuery{ + IndexOffset: 10, + NumMaxInvoices: numInvoices, + }, + expected: invoices[10:], + }, + // Fetch all pending invoices with a single query. + { + query: InvoiceQuery{ + PendingOnly: true, + NumMaxInvoices: numInvoices, + }, + expected: pendingInvoices, + }, + // Fetch the first 12 pending invoices. + { + query: InvoiceQuery{ + PendingOnly: true, + NumMaxInvoices: numInvoices / 4, + }, + expected: pendingInvoices[:len(pendingInvoices)/2], + }, + // Fetch the first 5 pending invoices, but this time iterating + // backwards. + { + query: InvoiceQuery{ + IndexOffset: 10, + PendingOnly: true, + Reversed: true, + NumMaxInvoices: numInvoices, + }, + // Since we seek to the invoice with index 10 and + // iterate backwards, there should only be 5 pending + // invoices before it as every other invoice within the + // index is settled. + expected: pendingInvoices[:5], + }, + // Fetch the last 15 invoices. + { + query: InvoiceQuery{ + IndexOffset: 20, + PendingOnly: true, + NumMaxInvoices: numInvoices, + }, + // Since we seek to the invoice with index 20, there are + // 30 invoices left. From these 30, only 15 of them are + // still pending. + expected: pendingInvoices[len(pendingInvoices)-15:], + }, } - if uint32(len(res.Invoices)) != numInvoices-query.IndexOffset { - t.Fatalf("expected %d invoices, got %d", - numInvoices-query.IndexOffset, len(res.Invoices)) - } - for _, invoice := range res.Invoices { - if uint32(invoice.Terms.Value) < query.IndexOffset { - t.Fatalf("found invoice with index %v before offset %v", - invoice.Terms.Value, query.IndexOffset) + + for i, testCase := range testCases { + response, err := db.QueryInvoices(testCase.query) + if err != nil { + t.Fatalf("unable to query invoice database: %v", err) } - } - // Limit the query from above to return 25 invoices max. - query.NumMaxInvoices = 25 - res, err = db.QueryInvoices(query) - if err != nil { - t.Fatalf("unable to query invoices: %v", err) - } - if uint32(len(res.Invoices)) != query.NumMaxInvoices { - t.Fatalf("expected %d invoices, got %d", query.NumMaxInvoices, - len(res.Invoices)) - } - - // Reset the query to fetch all unsettled invoices within the time - // slice. - query = InvoiceQuery{ - PendingOnly: true, - NumMaxInvoices: numInvoices, - } - res, err = db.QueryInvoices(query) - if err != nil { - t.Fatalf("unable to query invoices: %v", err) - } - // Since only invoices with even amounts were settled, we should see - // that there are 50 invoices within the response. - if len(res.Invoices) != numInvoices/2 { - t.Fatalf("expected %d pending invoices, got %d", numInvoices/2, - len(res.Invoices)) - } - for _, invoice := range res.Invoices { - if invoice.Terms.Value%2 == 0 { - t.Fatal("retrieved unexpected settled invoice") - } - } - - // Finally, we'll skip the first 10 invoices from the set of unsettled - // invoices. - query.IndexOffset = 10 - res, err = db.QueryInvoices(query) - if err != nil { - t.Fatalf("unable to query invoices: %v", err) - } - if uint32(len(res.Invoices)) != (numInvoices/2)-query.IndexOffset { - t.Fatalf("expected %d invoices, got %d", - (numInvoices/2)-query.IndexOffset, len(res.Invoices)) - } - // To ensure the correct invoices were returned, we'll make sure each - // invoice has an odd value (meaning unsettled). Since the 10 invoices - // skipped should be unsettled, the value of the invoice must be at - // least the index of the 11th unsettled invoice. - for _, invoice := range res.Invoices { - if uint32(invoice.Terms.Value) < query.IndexOffset*2 { - t.Fatalf("found invoice with index %v before offset %v", - invoice.Terms.Value, query.IndexOffset*2) - } - if invoice.Terms.Value%2 == 0 { - t.Fatalf("found unexpected settled invoice with index %v", - invoice.Terms.Value) + if !reflect.DeepEqual(response.Invoices, testCase.expected) { + t.Fatalf("test #%d: query returned incorrect set of "+ + "invoices: expcted %v, got %v", i, + spew.Sdump(response.Invoices), + spew.Sdump(testCase.expected)) } } } From 8e151ffd3f33fda0a60250512127b5a81405300b Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Mon, 10 Sep 2018 18:19:06 -0700 Subject: [PATCH 3/5] lnrpc: add fields to paginate invoices backwards --- lnrpc/rpc.pb.go | 821 +++++++++++++++++++++-------------------- lnrpc/rpc.proto | 22 +- lnrpc/rpc.swagger.json | 27 +- 3 files changed, 459 insertions(+), 411 deletions(-) diff --git a/lnrpc/rpc.pb.go b/lnrpc/rpc.pb.go index 080c522ac..3bf607fd6 100644 --- a/lnrpc/rpc.pb.go +++ b/lnrpc/rpc.pb.go @@ -4104,9 +4104,13 @@ type ListInvoiceRequest struct { // The offset in the time series to start at. As each response can only contain // 50k invoices, callers can use this to skip around within a packed time // series. - IndexOffset uint32 `protobuf:"varint,4,opt,name=index_offset" json:"index_offset,omitempty"` + IndexOffset uint64 `protobuf:"varint,4,opt,name=index_offset" json:"index_offset,omitempty"` // / The max number of invoices to return in the response to this query. - NumMaxInvoices uint32 `protobuf:"varint,5,opt,name=num_max_invoices" json:"num_max_invoices,omitempty"` + NumMaxInvoices uint64 `protobuf:"varint,5,opt,name=num_max_invoices" json:"num_max_invoices,omitempty"` + // * + // If set, the invoices returned will result from seeking backwards from the + // specified index offset. + Reversed bool `protobuf:"varint,6,opt,name=reversed" json:"reversed,omitempty"` } func (m *ListInvoiceRequest) Reset() { *m = ListInvoiceRequest{} } @@ -4121,29 +4125,40 @@ func (m *ListInvoiceRequest) GetPendingOnly() bool { return false } -func (m *ListInvoiceRequest) GetIndexOffset() uint32 { +func (m *ListInvoiceRequest) GetIndexOffset() uint64 { if m != nil { return m.IndexOffset } return 0 } -func (m *ListInvoiceRequest) GetNumMaxInvoices() uint32 { +func (m *ListInvoiceRequest) GetNumMaxInvoices() uint64 { if m != nil { return m.NumMaxInvoices } return 0 } +func (m *ListInvoiceRequest) GetReversed() bool { + if m != nil { + return m.Reversed + } + return false +} + type ListInvoiceResponse struct { // * // A list of invoices from the time slice of the time series specified in the // request. Invoices []*Invoice `protobuf:"bytes,1,rep,name=invoices" json:"invoices,omitempty"` // * - // The index of the last time in the set of returned invoices. Can be used to - // seek further, pagination style. - LastIndexOffset uint32 `protobuf:"varint,2,opt,name=last_index_offset" json:"last_index_offset,omitempty"` + // The index of the last item in the set of returned invoices. This can be used + // to seek further, pagination style. + LastIndexOffset uint64 `protobuf:"varint,2,opt,name=last_index_offset" json:"last_index_offset,omitempty"` + // * + // The index of the last item in the set of returned invoices. This can be used + // to seek backwards, pagination style. + FirstIndexOffset uint64 `protobuf:"varint,3,opt,name=first_index_offset" json:"first_index_offset,omitempty"` } func (m *ListInvoiceResponse) Reset() { *m = ListInvoiceResponse{} } @@ -4158,13 +4173,20 @@ func (m *ListInvoiceResponse) GetInvoices() []*Invoice { return nil } -func (m *ListInvoiceResponse) GetLastIndexOffset() uint32 { +func (m *ListInvoiceResponse) GetLastIndexOffset() uint64 { if m != nil { return m.LastIndexOffset } return 0 } +func (m *ListInvoiceResponse) GetFirstIndexOffset() uint64 { + if m != nil { + return m.FirstIndexOffset + } + return 0 +} + type InvoiceSubscription struct { // * // If specified (non-zero), then we'll first start by sending out @@ -7161,399 +7183,400 @@ var _Lightning_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("rpc.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 6294 bytes of a gzipped FileDescriptorProto + // 6315 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x5c, 0xdd, 0x8f, 0x1c, 0xd9, 0x55, 0x77, 0xf5, 0xc7, 0xcc, 0xf4, 0xe9, 0x9e, 0x99, 0x9e, 0x3b, 0xe3, 0x99, 0x76, 0xef, 0xae, 0xd7, 0x5b, 0xb1, 0xd6, 0xce, 0xb0, 0xd8, 0xde, 0x49, 0xb2, 0xda, 0xec, 0x42, 0x82, 0x3d, 0x1e, 0x7b, 0x9c, 0xcc, 0xda, 0x93, 0x1a, 0x3b, 0x86, 0x04, 0xd4, 0xa9, 0xe9, 0xbe, 0xd3, 0x53, 0x71, - 0x77, 0x55, 0xa7, 0xaa, 0x7a, 0xc6, 0x9d, 0xc5, 0x52, 0x20, 0x08, 0xf1, 0x40, 0x84, 0x10, 0x48, - 0x28, 0x48, 0x08, 0x29, 0x48, 0x28, 0xfc, 0x01, 0xf0, 0x12, 0x90, 0x78, 0xe0, 0x05, 0x24, 0xc4, - 0x43, 0x9e, 0x22, 0x1e, 0xe1, 0x05, 0x10, 0x2f, 0x48, 0xbc, 0x22, 0x74, 0xce, 0xfd, 0xa8, 0x7b, - 0xab, 0x6a, 0x3c, 0xce, 0x07, 0xbc, 0xf5, 0xfd, 0xdd, 0x53, 0xf7, 0xf3, 0x7c, 0xdd, 0x73, 0xcf, - 0x6d, 0x68, 0xc4, 0x93, 0xfe, 0x8d, 0x49, 0x1c, 0xa5, 0x11, 0xab, 0x8f, 0xc2, 0x78, 0xd2, 0xef, - 0xbe, 0x3e, 0x8c, 0xa2, 0xe1, 0x88, 0xdf, 0xf4, 0x27, 0xc1, 0x4d, 0x3f, 0x0c, 0xa3, 0xd4, 0x4f, - 0x83, 0x28, 0x4c, 0x04, 0x91, 0xfb, 0x35, 0x58, 0xba, 0xcf, 0xc3, 0x03, 0xce, 0x07, 0x1e, 0xff, - 0xc6, 0x94, 0x27, 0x29, 0xfb, 0x39, 0x58, 0xf1, 0xf9, 0x37, 0x39, 0x1f, 0xf4, 0x26, 0x7e, 0x92, - 0x4c, 0x8e, 0x63, 0x3f, 0xe1, 0x1d, 0xe7, 0x8a, 0x73, 0xbd, 0xe5, 0xb5, 0x45, 0xc5, 0xbe, 0xc6, - 0xd9, 0x5b, 0xd0, 0x4a, 0x90, 0x94, 0x87, 0x69, 0x1c, 0x4d, 0x66, 0x9d, 0x0a, 0xd1, 0x35, 0x11, - 0xdb, 0x11, 0x90, 0x3b, 0x82, 0x65, 0xdd, 0x43, 0x32, 0x89, 0xc2, 0x84, 0xb3, 0x5b, 0xb0, 0xd6, - 0x0f, 0x26, 0xc7, 0x3c, 0xee, 0xd1, 0xc7, 0xe3, 0x90, 0x8f, 0xa3, 0x30, 0xe8, 0x77, 0x9c, 0x2b, - 0xd5, 0xeb, 0x0d, 0x8f, 0x89, 0x3a, 0xfc, 0xe2, 0x23, 0x59, 0xc3, 0xae, 0xc1, 0x32, 0x0f, 0x05, - 0xce, 0x07, 0xf4, 0x95, 0xec, 0x6a, 0x29, 0x83, 0xf1, 0x03, 0xf7, 0xef, 0x1c, 0x58, 0x79, 0x10, - 0x06, 0xe9, 0x53, 0x7f, 0x34, 0xe2, 0xa9, 0x9a, 0xd3, 0x35, 0x58, 0x3e, 0x25, 0x80, 0xe6, 0x74, - 0x1a, 0xc5, 0x03, 0x39, 0xa3, 0x25, 0x01, 0xef, 0x4b, 0xf4, 0xcc, 0x91, 0x55, 0xce, 0x1c, 0x59, - 0xe9, 0x72, 0x55, 0xcf, 0x58, 0xae, 0x6b, 0xb0, 0x1c, 0xf3, 0x7e, 0x74, 0xc2, 0xe3, 0x59, 0xef, - 0x34, 0x08, 0x07, 0xd1, 0x69, 0xa7, 0x76, 0xc5, 0xb9, 0x5e, 0xf7, 0x96, 0x14, 0xfc, 0x94, 0x50, - 0x77, 0x0d, 0x98, 0x39, 0x0b, 0xb1, 0x6e, 0xee, 0x10, 0x56, 0x9f, 0x84, 0xa3, 0xa8, 0xff, 0xec, - 0x27, 0x9c, 0x5d, 0x49, 0xf7, 0x95, 0xd2, 0xee, 0xd7, 0x61, 0xcd, 0xee, 0x48, 0x0e, 0x80, 0xc3, - 0xc5, 0xed, 0x63, 0x3f, 0x1c, 0x72, 0xd5, 0xa4, 0x1a, 0xc2, 0x27, 0xa1, 0xdd, 0x9f, 0xc6, 0x31, - 0x0f, 0x0b, 0x63, 0x58, 0x96, 0xb8, 0x1e, 0xc4, 0x5b, 0xd0, 0x0a, 0xf9, 0x69, 0x46, 0x26, 0x59, - 0x26, 0xe4, 0xa7, 0x8a, 0xc4, 0xed, 0xc0, 0x7a, 0xbe, 0x1b, 0x39, 0x80, 0xef, 0x56, 0xa0, 0xf9, - 0x38, 0xf6, 0xc3, 0xc4, 0xef, 0x23, 0x17, 0xb3, 0x0e, 0xcc, 0xa7, 0xcf, 0x7b, 0xc7, 0x7e, 0x72, - 0x4c, 0xdd, 0x35, 0x3c, 0x55, 0x64, 0xeb, 0x30, 0xe7, 0x8f, 0xa3, 0x69, 0x98, 0x52, 0x07, 0x55, - 0x4f, 0x96, 0xd8, 0x3b, 0xb0, 0x12, 0x4e, 0xc7, 0xbd, 0x7e, 0x14, 0x1e, 0x05, 0xf1, 0x58, 0xc8, - 0x02, 0xed, 0x57, 0xdd, 0x2b, 0x56, 0xb0, 0xcb, 0x00, 0x87, 0xb8, 0x0e, 0xa2, 0x8b, 0x1a, 0x75, - 0x61, 0x20, 0xcc, 0x85, 0x96, 0x2c, 0xf1, 0x60, 0x78, 0x9c, 0x76, 0xea, 0xd4, 0x90, 0x85, 0x61, - 0x1b, 0x69, 0x30, 0xe6, 0xbd, 0x24, 0xf5, 0xc7, 0x93, 0xce, 0x1c, 0x8d, 0xc6, 0x40, 0xa8, 0x3e, - 0x4a, 0xfd, 0x51, 0xef, 0x88, 0xf3, 0xa4, 0x33, 0x2f, 0xeb, 0x35, 0xc2, 0xde, 0x86, 0xa5, 0x01, - 0x4f, 0xd2, 0x9e, 0x3f, 0x18, 0xc4, 0x3c, 0x49, 0x78, 0xd2, 0x59, 0x20, 0x6e, 0xcc, 0xa1, 0xb8, - 0x6a, 0xf7, 0x79, 0x6a, 0xac, 0x4e, 0x22, 0x77, 0xc7, 0xdd, 0x03, 0x66, 0xc0, 0x77, 0x79, 0xea, - 0x07, 0xa3, 0x84, 0xbd, 0x07, 0xad, 0xd4, 0x20, 0x26, 0xe9, 0x6b, 0x6e, 0xb1, 0x1b, 0xa4, 0x36, - 0x6e, 0x18, 0x1f, 0x78, 0x16, 0x9d, 0x7b, 0x1f, 0x16, 0xee, 0x71, 0xbe, 0x17, 0x8c, 0x83, 0x94, - 0xad, 0x43, 0xfd, 0x28, 0x78, 0xce, 0xc5, 0x66, 0x57, 0x77, 0x2f, 0x78, 0xa2, 0xc8, 0xba, 0x30, - 0x3f, 0xe1, 0x71, 0x9f, 0xab, 0xe5, 0xdf, 0xbd, 0xe0, 0x29, 0xe0, 0xce, 0x3c, 0xd4, 0x47, 0xf8, - 0xb1, 0xfb, 0xfd, 0x0a, 0x34, 0x0f, 0x78, 0xa8, 0x99, 0x88, 0x41, 0x0d, 0xa7, 0x24, 0x19, 0x87, - 0x7e, 0xb3, 0x37, 0xa1, 0x49, 0xd3, 0x4c, 0xd2, 0x38, 0x08, 0x87, 0xd4, 0x58, 0xc3, 0x03, 0x84, - 0x0e, 0x08, 0x61, 0x6d, 0xa8, 0xfa, 0xe3, 0x94, 0x76, 0xb0, 0xea, 0xe1, 0x4f, 0x64, 0xb0, 0x89, - 0x3f, 0x1b, 0x23, 0x2f, 0xea, 0x5d, 0x6b, 0x79, 0x4d, 0x89, 0xed, 0xe2, 0xb6, 0xdd, 0x80, 0x55, - 0x93, 0x44, 0xb5, 0x5e, 0xa7, 0xd6, 0x57, 0x0c, 0x4a, 0xd9, 0xc9, 0x35, 0x58, 0x56, 0xf4, 0xb1, - 0x18, 0x2c, 0xed, 0x63, 0xc3, 0x5b, 0x92, 0xb0, 0x9a, 0xc2, 0x75, 0x68, 0x1f, 0x05, 0xa1, 0x3f, - 0xea, 0xf5, 0x47, 0xe9, 0x49, 0x6f, 0xc0, 0x47, 0xa9, 0x4f, 0x3b, 0x5a, 0xf7, 0x96, 0x08, 0xdf, - 0x1e, 0xa5, 0x27, 0x77, 0x11, 0x65, 0xef, 0x40, 0xe3, 0x88, 0xf3, 0x1e, 0xad, 0x44, 0x67, 0xe1, - 0x8a, 0x73, 0xbd, 0xb9, 0xb5, 0x2c, 0x97, 0x5e, 0xad, 0xae, 0xb7, 0x70, 0x24, 0x7f, 0xb9, 0x7f, - 0xe8, 0x40, 0x4b, 0x2c, 0x95, 0x54, 0xa1, 0x57, 0x61, 0x51, 0x8d, 0x88, 0xc7, 0x71, 0x14, 0x4b, - 0xf6, 0xb7, 0x41, 0xb6, 0x09, 0x6d, 0x05, 0x4c, 0x62, 0x1e, 0x8c, 0xfd, 0x21, 0x97, 0xf2, 0x56, - 0xc0, 0xd9, 0x56, 0xd6, 0x62, 0x1c, 0x4d, 0x53, 0xa1, 0xc4, 0x9a, 0x5b, 0x2d, 0x39, 0x28, 0x0f, - 0x31, 0xcf, 0x26, 0x71, 0xbf, 0xe3, 0x00, 0xc3, 0x61, 0x3d, 0x8e, 0x44, 0xb5, 0x5c, 0x85, 0xfc, - 0x0e, 0x38, 0xaf, 0xbc, 0x03, 0x95, 0xb3, 0x76, 0xe0, 0x2a, 0xcc, 0x51, 0x97, 0x28, 0xab, 0xd5, - 0xc2, 0xb0, 0x64, 0x9d, 0xfb, 0x3d, 0x07, 0x5a, 0xa8, 0x39, 0x42, 0x3e, 0xda, 0x8f, 0x82, 0x30, - 0x65, 0xb7, 0x80, 0x1d, 0x4d, 0xc3, 0x41, 0x10, 0x0e, 0x7b, 0xe9, 0xf3, 0x60, 0xd0, 0x3b, 0x9c, - 0x61, 0x13, 0x34, 0x9e, 0xdd, 0x0b, 0x5e, 0x49, 0x1d, 0x7b, 0x07, 0xda, 0x16, 0x9a, 0xa4, 0xb1, - 0x18, 0xd5, 0xee, 0x05, 0xaf, 0x50, 0x83, 0xf2, 0x1f, 0x4d, 0xd3, 0xc9, 0x34, 0xed, 0x05, 0xe1, - 0x80, 0x3f, 0xa7, 0x35, 0x5b, 0xf4, 0x2c, 0xec, 0xce, 0x12, 0xb4, 0xcc, 0xef, 0xdc, 0xcf, 0x41, - 0x7b, 0x0f, 0x15, 0x43, 0x18, 0x84, 0xc3, 0xdb, 0x42, 0x7a, 0x51, 0x5b, 0x4d, 0xa6, 0x87, 0xcf, - 0xf8, 0x4c, 0xee, 0xa3, 0x2c, 0xa1, 0x48, 0x1c, 0x47, 0x49, 0x2a, 0xd7, 0x85, 0x7e, 0xbb, 0xff, - 0xe2, 0xc0, 0x32, 0x2e, 0xfa, 0x47, 0x7e, 0x38, 0x53, 0x2b, 0xbe, 0x07, 0x2d, 0x6c, 0xea, 0x71, - 0x74, 0x5b, 0xe8, 0x3c, 0x21, 0xcb, 0xd7, 0xe5, 0x22, 0xe5, 0xa8, 0x6f, 0x98, 0xa4, 0x68, 0xa6, - 0x67, 0x9e, 0xf5, 0x35, 0x0a, 0x5d, 0xea, 0xc7, 0x43, 0x9e, 0x92, 0x36, 0x94, 0xda, 0x11, 0x04, - 0xb4, 0x1d, 0x85, 0x47, 0xec, 0x0a, 0xb4, 0x12, 0x3f, 0xed, 0x4d, 0x78, 0x4c, 0xab, 0x46, 0x82, - 0x53, 0xf5, 0x20, 0xf1, 0xd3, 0x7d, 0x1e, 0xdf, 0x99, 0xa5, 0xbc, 0xfb, 0x79, 0x58, 0x29, 0xf4, - 0x82, 0xb2, 0x9a, 0x4d, 0x11, 0x7f, 0xb2, 0x35, 0xa8, 0x9f, 0xf8, 0xa3, 0x29, 0x97, 0x4a, 0x5a, - 0x14, 0x3e, 0xa8, 0xbc, 0xef, 0xb8, 0x6f, 0x43, 0x3b, 0x1b, 0xb6, 0x64, 0x7a, 0x06, 0x35, 0x5c, - 0x41, 0xd9, 0x00, 0xfd, 0x76, 0x7f, 0xc3, 0x11, 0x84, 0xdb, 0x51, 0xa0, 0x15, 0x1e, 0x12, 0xa2, - 0x5e, 0x54, 0x84, 0xf8, 0xfb, 0x4c, 0x83, 0xf0, 0xd3, 0x4f, 0xd6, 0xbd, 0x06, 0x2b, 0xc6, 0x10, - 0x5e, 0x32, 0xd8, 0xef, 0x38, 0xb0, 0xf2, 0x90, 0x9f, 0xca, 0x5d, 0x57, 0xa3, 0x7d, 0x1f, 0x6a, - 0xe9, 0x6c, 0x22, 0x9c, 0xac, 0xa5, 0xad, 0xab, 0x72, 0xd3, 0x0a, 0x74, 0x37, 0x64, 0xf1, 0xf1, - 0x6c, 0xc2, 0x3d, 0xfa, 0xc2, 0xfd, 0x1c, 0x34, 0x0d, 0x90, 0x6d, 0xc0, 0xea, 0xd3, 0x07, 0x8f, - 0x1f, 0xee, 0x1c, 0x1c, 0xf4, 0xf6, 0x9f, 0xdc, 0xf9, 0xe2, 0xce, 0xaf, 0xf4, 0x76, 0x6f, 0x1f, - 0xec, 0xb6, 0x2f, 0xb0, 0x75, 0x60, 0x0f, 0x77, 0x0e, 0x1e, 0xef, 0xdc, 0xb5, 0x70, 0xc7, 0xed, - 0x42, 0xe7, 0x21, 0x3f, 0x7d, 0x1a, 0xa4, 0x21, 0x4f, 0x12, 0xbb, 0x37, 0xf7, 0x06, 0x30, 0x73, - 0x08, 0x72, 0x56, 0x1d, 0x98, 0x97, 0x16, 0x47, 0x19, 0x5c, 0x59, 0x74, 0xdf, 0x06, 0x76, 0x10, - 0x0c, 0xc3, 0x8f, 0x78, 0x92, 0xf8, 0x43, 0xad, 0x0a, 0xda, 0x50, 0x1d, 0x27, 0x43, 0xa9, 0x01, - 0xf0, 0xa7, 0xfb, 0x29, 0x58, 0xb5, 0xe8, 0x64, 0xc3, 0xaf, 0x43, 0x23, 0x09, 0x86, 0xa1, 0x9f, - 0x4e, 0x63, 0x2e, 0x9b, 0xce, 0x00, 0xf7, 0x1e, 0xac, 0x7d, 0x99, 0xc7, 0xc1, 0xd1, 0xec, 0xbc, - 0xe6, 0xed, 0x76, 0x2a, 0xf9, 0x76, 0x76, 0xe0, 0x62, 0xae, 0x1d, 0xd9, 0xbd, 0x60, 0x44, 0xb9, - 0x5d, 0x0b, 0x9e, 0x28, 0x18, 0x62, 0x59, 0x31, 0xc5, 0xd2, 0x7d, 0x02, 0x6c, 0x3b, 0x0a, 0x43, - 0xde, 0x4f, 0xf7, 0x39, 0x8f, 0x33, 0xcf, 0x39, 0xe3, 0xba, 0xe6, 0xd6, 0x86, 0xdc, 0xc7, 0xbc, - 0xac, 0x4b, 0x76, 0x64, 0x50, 0x9b, 0xf0, 0x78, 0x4c, 0x0d, 0x2f, 0x78, 0xf4, 0xdb, 0xbd, 0x08, - 0xab, 0x56, 0xb3, 0xd2, 0xe9, 0x79, 0x17, 0x2e, 0xde, 0x0d, 0x92, 0x7e, 0xb1, 0xc3, 0x0e, 0xcc, - 0x4f, 0xa6, 0x87, 0xbd, 0x4c, 0xa6, 0x54, 0x11, 0x7d, 0x81, 0xfc, 0x27, 0xb2, 0xb1, 0xdf, 0x76, - 0xa0, 0xb6, 0xfb, 0x78, 0x6f, 0x9b, 0x75, 0x61, 0x21, 0x08, 0xfb, 0xd1, 0x18, 0xd5, 0xae, 0x98, - 0xb4, 0x2e, 0x9f, 0x29, 0x2b, 0xaf, 0x43, 0x83, 0xb4, 0x35, 0xba, 0x37, 0xd2, 0xc9, 0xcd, 0x00, - 0x74, 0xad, 0xf8, 0xf3, 0x49, 0x10, 0x93, 0xef, 0xa4, 0x3c, 0xa2, 0x1a, 0x69, 0xc4, 0x62, 0x85, - 0xfb, 0x3f, 0x35, 0x98, 0x97, 0xba, 0x9a, 0xfa, 0xeb, 0xa7, 0xc1, 0x09, 0x97, 0x23, 0x91, 0x25, - 0xb4, 0x72, 0x31, 0x1f, 0x47, 0x29, 0xef, 0x59, 0xdb, 0x60, 0x83, 0x48, 0xd5, 0x17, 0x0d, 0xf5, - 0x26, 0xa8, 0xf5, 0x69, 0x64, 0x0d, 0xcf, 0x06, 0x71, 0xb1, 0x10, 0xe8, 0x05, 0x03, 0x1a, 0x53, - 0xcd, 0x53, 0x45, 0x5c, 0x89, 0xbe, 0x3f, 0xf1, 0xfb, 0x41, 0x3a, 0x93, 0xc2, 0xad, 0xcb, 0xd8, - 0xf6, 0x28, 0xea, 0xfb, 0xa3, 0xde, 0xa1, 0x3f, 0xf2, 0xc3, 0x3e, 0x97, 0xfe, 0x9b, 0x0d, 0xa2, - 0x8b, 0x26, 0x87, 0xa4, 0xc8, 0x84, 0x1b, 0x97, 0x43, 0xd1, 0xd5, 0xeb, 0x47, 0xe3, 0x71, 0x90, - 0xa2, 0x67, 0x47, 0x56, 0xbf, 0xea, 0x19, 0x08, 0xcd, 0x44, 0x94, 0x4e, 0xc5, 0xea, 0x35, 0x44, - 0x6f, 0x16, 0x88, 0xad, 0xa0, 0xeb, 0x80, 0x0a, 0xe9, 0xd9, 0x69, 0x07, 0x44, 0x2b, 0x19, 0x82, - 0xfb, 0x30, 0x0d, 0x13, 0x9e, 0xa6, 0x23, 0x3e, 0xd0, 0x03, 0x6a, 0x12, 0x59, 0xb1, 0x82, 0xdd, - 0x82, 0x55, 0xe1, 0x6c, 0x26, 0x7e, 0x1a, 0x25, 0xc7, 0x41, 0xd2, 0x4b, 0xd0, 0x6d, 0x6b, 0x11, - 0x7d, 0x59, 0x15, 0x7b, 0x1f, 0x36, 0x72, 0x70, 0xcc, 0xfb, 0x3c, 0x38, 0xe1, 0x83, 0xce, 0x22, - 0x7d, 0x75, 0x56, 0x35, 0xbb, 0x02, 0x4d, 0xf4, 0xb1, 0xa7, 0x93, 0x81, 0x8f, 0x76, 0x78, 0x89, - 0xf6, 0xc1, 0x84, 0xd8, 0xbb, 0xb0, 0x38, 0xe1, 0xc2, 0x58, 0x1e, 0xa7, 0xa3, 0x7e, 0xd2, 0x59, - 0x26, 0x4b, 0xd6, 0x94, 0xc2, 0x84, 0x9c, 0xeb, 0xd9, 0x14, 0xc8, 0x94, 0xfd, 0x84, 0x9c, 0x2d, - 0x7f, 0xd6, 0x69, 0x13, 0xbb, 0x65, 0x00, 0xc9, 0x48, 0x1c, 0x9c, 0xf8, 0x29, 0xef, 0xac, 0x10, - 0x6f, 0xa9, 0xa2, 0xfb, 0xa7, 0x0e, 0xac, 0xee, 0x05, 0x49, 0x2a, 0x99, 0x50, 0xab, 0xe3, 0x37, - 0xa1, 0x29, 0xd8, 0xaf, 0x17, 0x85, 0xa3, 0x99, 0xe4, 0x48, 0x10, 0xd0, 0xa3, 0x70, 0x34, 0x63, - 0x9f, 0x80, 0xc5, 0x20, 0x34, 0x49, 0x84, 0x0c, 0xb7, 0x14, 0x48, 0x44, 0x6f, 0x42, 0x73, 0x32, - 0x3d, 0x1c, 0x05, 0x7d, 0x41, 0x52, 0x15, 0xad, 0x08, 0x88, 0x08, 0xd0, 0x49, 0x12, 0x23, 0x11, - 0x14, 0x35, 0xa2, 0x68, 0x4a, 0x0c, 0x49, 0xdc, 0x3b, 0xb0, 0x66, 0x0f, 0x50, 0x2a, 0xab, 0x4d, - 0x58, 0x90, 0xbc, 0x9d, 0x74, 0x9a, 0xb4, 0x3e, 0x4b, 0x72, 0x7d, 0x24, 0xa9, 0xa7, 0xeb, 0xdd, - 0x3f, 0xaf, 0xc1, 0xaa, 0x44, 0xb7, 0x47, 0x51, 0xc2, 0x0f, 0xa6, 0xe3, 0xb1, 0x1f, 0x97, 0x08, - 0x8d, 0x73, 0x8e, 0xd0, 0x54, 0x6c, 0xa1, 0x41, 0x56, 0x3e, 0xf6, 0x83, 0x50, 0x78, 0x78, 0x42, - 0xe2, 0x0c, 0x84, 0x5d, 0x87, 0xe5, 0xfe, 0x28, 0x4a, 0x84, 0xd7, 0x63, 0x1e, 0x9f, 0xf2, 0x70, - 0x51, 0xc8, 0xeb, 0x65, 0x42, 0x6e, 0x0a, 0xe9, 0x5c, 0x4e, 0x48, 0x5d, 0x68, 0x61, 0xa3, 0x5c, - 0xe9, 0x9c, 0x79, 0xe1, 0x85, 0x99, 0x18, 0x8e, 0x27, 0x2f, 0x12, 0x42, 0xfe, 0x96, 0xcb, 0x04, - 0x02, 0x4f, 0x67, 0xa8, 0xd3, 0x0c, 0xea, 0x86, 0x14, 0x88, 0x62, 0x15, 0xbb, 0x07, 0x20, 0xfa, - 0x22, 0x33, 0x0e, 0x64, 0xc6, 0xdf, 0xb6, 0x77, 0xc4, 0x5c, 0xfb, 0x1b, 0x58, 0x98, 0xc6, 0x9c, - 0x0c, 0xb9, 0xf1, 0xa5, 0xfb, 0x31, 0x34, 0x8d, 0x2a, 0x76, 0x11, 0x56, 0xb6, 0x1f, 0x3d, 0xda, - 0xdf, 0xf1, 0x6e, 0x3f, 0x7e, 0xf0, 0xe5, 0x9d, 0xde, 0xf6, 0xde, 0xa3, 0x83, 0x9d, 0xf6, 0x05, - 0x84, 0xf7, 0x1e, 0x6d, 0xdf, 0xde, 0xeb, 0xdd, 0x7b, 0xe4, 0x6d, 0x2b, 0xd8, 0x41, 0x1b, 0xef, - 0xed, 0x7c, 0xf4, 0xe8, 0xf1, 0x8e, 0x85, 0x57, 0x58, 0x1b, 0x5a, 0x77, 0xbc, 0x9d, 0xdb, 0xdb, - 0xbb, 0x12, 0xa9, 0xb2, 0x35, 0x68, 0xdf, 0x7b, 0xf2, 0xf0, 0xee, 0x83, 0x87, 0xf7, 0x7b, 0xdb, - 0xb7, 0x1f, 0x6e, 0xef, 0xec, 0xed, 0xdc, 0x6d, 0xd7, 0xdc, 0xbf, 0x75, 0xe0, 0x22, 0x8d, 0x72, - 0x90, 0x17, 0x88, 0x2b, 0xd0, 0xec, 0x47, 0xd1, 0x84, 0xa3, 0xfe, 0xd6, 0x2a, 0xda, 0x84, 0x90, - 0xd9, 0x85, 0x42, 0x3c, 0x8a, 0xe2, 0x3e, 0x97, 0xf2, 0x00, 0x04, 0xdd, 0x43, 0x04, 0x99, 0x5d, - 0x6e, 0xa7, 0xa0, 0x10, 0xe2, 0xd0, 0x14, 0x98, 0x20, 0x59, 0x87, 0xb9, 0xc3, 0x98, 0xfb, 0xfd, - 0x63, 0x29, 0x09, 0xb2, 0xc4, 0x3e, 0x99, 0x39, 0xe4, 0x7d, 0x5c, 0xed, 0x11, 0x1f, 0x10, 0x87, - 0x2c, 0x78, 0xcb, 0x12, 0xdf, 0x96, 0xb0, 0xbb, 0x0f, 0xeb, 0xf9, 0x19, 0x48, 0x89, 0x79, 0xcf, - 0x90, 0x18, 0xe1, 0x1b, 0x77, 0xcf, 0xde, 0x1f, 0x43, 0x7a, 0xfe, 0xdd, 0x81, 0x1a, 0x9a, 0xcf, - 0xb3, 0x4d, 0xad, 0xe9, 0x11, 0x55, 0x2d, 0x8f, 0x88, 0x82, 0x07, 0x78, 0xa6, 0x10, 0x0a, 0x55, - 0x18, 0x1d, 0x03, 0xc9, 0xea, 0x63, 0xde, 0x3f, 0xa1, 0x39, 0xe9, 0x7a, 0x44, 0x90, 0xe5, 0xd1, - 0xf1, 0xa4, 0xaf, 0x25, 0xcb, 0xab, 0xb2, 0xaa, 0xa3, 0x2f, 0xe7, 0xb3, 0x3a, 0xfa, 0xae, 0x03, - 0xf3, 0x41, 0x78, 0x18, 0x4d, 0xc3, 0x01, 0xb1, 0xf8, 0x82, 0xa7, 0x8a, 0xa8, 0x2a, 0x27, 0x24, - 0x7a, 0xc1, 0x58, 0x31, 0x74, 0x06, 0xb8, 0x0c, 0x0f, 0x26, 0x09, 0xb9, 0x0b, 0xda, 0x0b, 0x7c, - 0x0f, 0x56, 0x0c, 0x4c, 0xae, 0xe6, 0x5b, 0x50, 0x9f, 0x20, 0x20, 0x97, 0x52, 0x29, 0x67, 0xf2, - 0x33, 0x44, 0x8d, 0xdb, 0x86, 0xa5, 0xfb, 0x3c, 0x7d, 0x10, 0x1e, 0x45, 0xaa, 0xa5, 0x1f, 0x55, - 0x61, 0x59, 0x43, 0xb2, 0xa1, 0xeb, 0xb0, 0x1c, 0x0c, 0x78, 0x98, 0x06, 0xe9, 0xac, 0x67, 0x9d, - 0x7f, 0xf2, 0x30, 0xfa, 0x67, 0xfe, 0x28, 0xf0, 0x13, 0xe9, 0x01, 0x88, 0x02, 0xdb, 0x82, 0x35, - 0x34, 0x1e, 0xca, 0x1e, 0xe8, 0x2d, 0x16, 0xc7, 0xb0, 0xd2, 0x3a, 0x14, 0x6f, 0xc4, 0xa5, 0xfe, - 0xd6, 0x9f, 0x08, 0x3f, 0xa5, 0xac, 0x0a, 0x57, 0x4d, 0xb4, 0x84, 0x53, 0xae, 0x0b, 0x03, 0xa3, - 0x81, 0x42, 0x08, 0x68, 0x4e, 0x28, 0x9f, 0x7c, 0x08, 0xc8, 0x08, 0x23, 0x2d, 0x14, 0xc2, 0x48, - 0xa8, 0x9c, 0x66, 0x61, 0x9f, 0x0f, 0x7a, 0x69, 0xd4, 0x23, 0x25, 0x4a, 0xbb, 0xb3, 0xe0, 0xe5, - 0x61, 0x0a, 0x78, 0xf1, 0x24, 0x0d, 0x79, 0x4a, 0x7a, 0x66, 0xc1, 0x53, 0x45, 0x94, 0x1f, 0x22, - 0x11, 0x26, 0xa1, 0xe1, 0xc9, 0x12, 0x3a, 0x9a, 0xd3, 0x38, 0x48, 0x3a, 0x2d, 0x42, 0xe9, 0x37, - 0xfb, 0x34, 0x5c, 0x3c, 0xe4, 0x49, 0xda, 0x3b, 0xe6, 0xfe, 0x80, 0xc7, 0xb4, 0xfb, 0x22, 0x3a, - 0x25, 0xec, 0x77, 0x79, 0x25, 0xf6, 0x7d, 0xc2, 0xe3, 0x24, 0x88, 0x42, 0xb2, 0xdc, 0x0d, 0x4f, - 0x15, 0xdd, 0x6f, 0x92, 0x3f, 0xac, 0xe3, 0x66, 0x4f, 0xc8, 0x98, 0xb3, 0xd7, 0xa0, 0x21, 0xe6, - 0x98, 0x1c, 0xfb, 0xd2, 0x45, 0x5f, 0x20, 0xe0, 0xe0, 0xd8, 0x47, 0x8d, 0x60, 0x2d, 0x9b, 0x08, - 0x44, 0x36, 0x09, 0xdb, 0x15, 0xab, 0x76, 0x15, 0x96, 0x54, 0x44, 0x2e, 0xe9, 0x8d, 0xf8, 0x51, - 0xaa, 0x8e, 0xd7, 0xe1, 0x74, 0x8c, 0xdd, 0x25, 0x7b, 0xfc, 0x28, 0x75, 0x1f, 0xc2, 0x8a, 0x94, - 0xe1, 0x47, 0x13, 0xae, 0xba, 0xfe, 0x6c, 0x99, 0x75, 0x6b, 0x6e, 0xad, 0xda, 0x42, 0x4f, 0x31, - 0x82, 0x9c, 0xc9, 0x73, 0x3d, 0x60, 0xa6, 0x4e, 0x90, 0x0d, 0x4a, 0x13, 0xa3, 0x0e, 0xf1, 0x72, - 0x3a, 0x16, 0x86, 0xeb, 0x93, 0x4c, 0xfb, 0x7d, 0xd4, 0x04, 0x42, 0x03, 0xaa, 0xa2, 0xfb, 0x7d, - 0x07, 0x56, 0xa9, 0x35, 0x65, 0x9f, 0xf5, 0xc9, 0xef, 0xd5, 0x87, 0xd9, 0xea, 0x9b, 0x81, 0x8d, - 0x35, 0xa8, 0x9b, 0xba, 0x56, 0x14, 0x7e, 0xfc, 0xb3, 0x6c, 0xad, 0x70, 0x96, 0xfd, 0x91, 0x03, - 0x2b, 0x42, 0x19, 0xa6, 0x7e, 0x3a, 0x4d, 0xe4, 0xf4, 0x7f, 0x01, 0x16, 0x85, 0x9d, 0x92, 0xe2, - 0x24, 0x07, 0xba, 0xa6, 0x25, 0x9f, 0x50, 0x41, 0xbc, 0x7b, 0xc1, 0xb3, 0x89, 0xd9, 0xe7, 0xa1, - 0x65, 0x86, 0x55, 0x69, 0xcc, 0xcd, 0xad, 0x4b, 0x6a, 0x96, 0x05, 0xce, 0xd9, 0xbd, 0xe0, 0x59, - 0x1f, 0xb0, 0x0f, 0xc9, 0xd9, 0x08, 0x7b, 0xd4, 0xac, 0x0c, 0x4c, 0x5d, 0x2a, 0x51, 0xe0, 0xfa, - 0x73, 0x83, 0xfc, 0xce, 0x02, 0xcc, 0x09, 0xef, 0xd2, 0xbd, 0x0f, 0x8b, 0xd6, 0x48, 0xad, 0x33, - 0x7a, 0x4b, 0x9c, 0xd1, 0x0b, 0x21, 0x9d, 0x4a, 0x31, 0xa4, 0xe3, 0x7e, 0xbb, 0x0a, 0x0c, 0xb9, - 0x2d, 0xb7, 0x9d, 0xe8, 0xde, 0x46, 0x03, 0xeb, 0xb0, 0xd2, 0xf2, 0x4c, 0x88, 0xdd, 0x00, 0x66, - 0x14, 0x55, 0xd4, 0x4b, 0xd8, 0x8d, 0x92, 0x1a, 0x54, 0x70, 0xd2, 0xb0, 0x4a, 0x13, 0x28, 0x8f, - 0x65, 0x62, 0xdf, 0x4a, 0xeb, 0xd0, 0x34, 0x4c, 0xa6, 0xc9, 0x31, 0xba, 0xdf, 0xea, 0x38, 0xa3, - 0xca, 0x79, 0x06, 0x99, 0x3b, 0x97, 0x41, 0xe6, 0xf3, 0x0c, 0x62, 0x3a, 0xd4, 0x0b, 0x96, 0x43, - 0x8d, 0x8e, 0xdc, 0x18, 0xdd, 0xbf, 0x74, 0xd4, 0xef, 0x8d, 0xb1, 0x77, 0x79, 0x7a, 0xb1, 0x40, - 0xb6, 0x09, 0x6d, 0xe9, 0x0a, 0x64, 0x5e, 0x3b, 0xd0, 0x1a, 0x17, 0x70, 0xd4, 0xbc, 0xf8, 0x31, - 0x69, 0x00, 0x3a, 0xc1, 0xd4, 0xbd, 0x0c, 0x70, 0x7f, 0xe8, 0x40, 0x1b, 0x77, 0xc1, 0xe2, 0xd4, - 0x0f, 0x80, 0x04, 0xe5, 0x15, 0x19, 0xd5, 0xa2, 0xfd, 0xe9, 0xf9, 0xf4, 0x7d, 0x68, 0x50, 0x83, - 0xd1, 0x84, 0x87, 0x92, 0x4d, 0x3b, 0x36, 0x9b, 0x66, 0x3a, 0x6a, 0xf7, 0x82, 0x97, 0x11, 0x1b, - 0x4c, 0xfa, 0x4f, 0x0e, 0x34, 0xe5, 0x30, 0x7f, 0xe2, 0x73, 0x7a, 0x17, 0x16, 0x90, 0x5f, 0x8d, - 0xc3, 0xb0, 0x2e, 0xa3, 0xad, 0x19, 0xfb, 0xe9, 0x34, 0x46, 0xe3, 0x6a, 0x9d, 0xd1, 0xf3, 0x30, - 0x5a, 0x4a, 0x52, 0xc7, 0x49, 0x2f, 0x0d, 0x46, 0x3d, 0x55, 0x2b, 0xef, 0x38, 0xca, 0xaa, 0x50, - 0x2b, 0x25, 0xa9, 0x3f, 0xe4, 0xd2, 0x08, 0x8a, 0x82, 0xdb, 0x81, 0x75, 0x39, 0xa1, 0x9c, 0x67, - 0xe9, 0xfe, 0x4d, 0x0b, 0x36, 0x0a, 0x55, 0xfa, 0x92, 0x50, 0x1e, 0x3e, 0x47, 0xc1, 0xf8, 0x30, - 0xd2, 0x6e, 0xb8, 0x63, 0x9e, 0x4b, 0xad, 0x2a, 0x36, 0x84, 0x8b, 0xca, 0xda, 0xe3, 0x9a, 0x66, - 0xb6, 0xbd, 0x42, 0x6e, 0xca, 0xbb, 0x36, 0x0f, 0xe4, 0x3b, 0x54, 0xb8, 0x29, 0xd7, 0xe5, 0xed, - 0xb1, 0x63, 0xe8, 0x68, 0xb7, 0x42, 0x1a, 0x00, 0xc3, 0xf5, 0xc0, 0xbe, 0xde, 0x39, 0xa7, 0x2f, - 0xcb, 0x4d, 0xf5, 0xce, 0x6c, 0x8d, 0xcd, 0xe0, 0xb2, 0xaa, 0x23, 0x0d, 0x5f, 0xec, 0xaf, 0xf6, - 0x4a, 0x73, 0x23, 0x17, 0xdb, 0xee, 0xf4, 0x9c, 0x86, 0xd9, 0xd7, 0x61, 0xfd, 0xd4, 0x0f, 0x52, - 0x35, 0x2c, 0xc3, 0x55, 0xaa, 0x53, 0x97, 0x5b, 0xe7, 0x74, 0xf9, 0x54, 0x7c, 0x6c, 0x99, 0xbd, - 0x33, 0x5a, 0xec, 0xfe, 0x83, 0x03, 0x4b, 0x76, 0x3b, 0xc8, 0xa6, 0x52, 0x1d, 0x28, 0xb5, 0xa8, - 0x5c, 0xc3, 0x1c, 0x5c, 0x3c, 0xc9, 0x56, 0xca, 0x4e, 0xb2, 0xe6, 0xf9, 0xb1, 0x7a, 0x5e, 0x90, - 0xa7, 0xf6, 0x6a, 0x41, 0x9e, 0x7a, 0x59, 0x90, 0xa7, 0xfb, 0xdf, 0x0e, 0xb0, 0x22, 0x2f, 0xb1, - 0xfb, 0xe2, 0x28, 0x1d, 0xf2, 0x91, 0xd4, 0x49, 0x3f, 0xff, 0x6a, 0xfc, 0xa8, 0xd6, 0x4e, 0x7d, - 0x8d, 0x82, 0x61, 0x2a, 0x1d, 0xd3, 0x81, 0x5a, 0xf4, 0xca, 0xaa, 0x72, 0x61, 0xa7, 0xda, 0xf9, - 0x61, 0xa7, 0xfa, 0xf9, 0x61, 0xa7, 0xb9, 0x7c, 0xd8, 0xa9, 0xfb, 0x5b, 0x0e, 0xac, 0x96, 0x6c, - 0xfa, 0xcf, 0x6e, 0xe2, 0xb8, 0x4d, 0x96, 0x2e, 0xa8, 0xc8, 0x6d, 0x32, 0xc1, 0xee, 0xaf, 0xc3, - 0xa2, 0xc5, 0xe8, 0x3f, 0xbb, 0xfe, 0xf3, 0x3e, 0xa0, 0xe0, 0x33, 0x0b, 0xeb, 0xfe, 0x47, 0x05, - 0x58, 0x51, 0xd8, 0xfe, 0x5f, 0xc7, 0x50, 0x5c, 0xa7, 0x6a, 0xc9, 0x3a, 0xfd, 0x9f, 0xda, 0x81, - 0x77, 0x60, 0x45, 0x66, 0x14, 0x18, 0x01, 0x14, 0xc1, 0x31, 0xc5, 0x0a, 0xf4, 0x82, 0xed, 0x98, - 0xdf, 0x82, 0x75, 0x13, 0x6d, 0x18, 0xc3, 0x5c, 0xe8, 0xcf, 0x5d, 0x87, 0x35, 0x91, 0xa1, 0x70, - 0x47, 0x34, 0xa5, 0xec, 0xca, 0x9f, 0x38, 0x70, 0x31, 0x57, 0x91, 0xdd, 0x9b, 0x0a, 0xd3, 0x61, - 0xdb, 0x13, 0x1b, 0xc4, 0xf1, 0x4b, 0x39, 0x32, 0xc6, 0x2f, 0xb8, 0xad, 0x58, 0x81, 0xeb, 0x33, - 0x0d, 0x8b, 0xf4, 0x62, 0xd5, 0xcb, 0xaa, 0xdc, 0x0d, 0x91, 0x47, 0x11, 0xf2, 0x51, 0x6e, 0xe0, - 0x47, 0x22, 0xf3, 0xc1, 0xac, 0xc8, 0x2e, 0x5e, 0xec, 0x21, 0xab, 0x22, 0xfa, 0x88, 0x96, 0x99, - 0xb2, 0xc7, 0x5b, 0x5a, 0xe7, 0xfe, 0x95, 0x03, 0xec, 0x4b, 0x53, 0x1e, 0xcf, 0xe8, 0xfe, 0x54, - 0x47, 0x7a, 0x36, 0xf2, 0x51, 0x8e, 0xb9, 0xc9, 0xf4, 0xf0, 0x8b, 0x7c, 0xa6, 0x6e, 0xd9, 0x2b, - 0xd9, 0x2d, 0xfb, 0x1b, 0x00, 0x78, 0x38, 0xd3, 0x97, 0xb2, 0xe4, 0x9b, 0x85, 0xd3, 0xb1, 0x68, - 0xb0, 0xf4, 0x22, 0xbc, 0x76, 0xfe, 0x45, 0x78, 0xfd, 0xbc, 0x8b, 0xf0, 0x0f, 0x61, 0xd5, 0x1a, - 0xb7, 0xde, 0x56, 0x75, 0x3d, 0xec, 0xbc, 0xe4, 0x7a, 0xf8, 0x3f, 0x1d, 0xa8, 0xee, 0x46, 0x13, - 0x33, 0xaa, 0xe9, 0xd8, 0x51, 0x4d, 0x69, 0x4b, 0x7a, 0xda, 0x54, 0x48, 0x15, 0x63, 0x81, 0x6c, - 0x13, 0x96, 0xfc, 0x71, 0x8a, 0x87, 0xf2, 0xa3, 0x28, 0x3e, 0xf5, 0xe3, 0x81, 0xd8, 0xeb, 0x3b, - 0x95, 0x8e, 0xe3, 0xe5, 0x6a, 0xd8, 0x1a, 0x54, 0xb5, 0xd2, 0x25, 0x02, 0x2c, 0xa2, 0xe3, 0x46, - 0x37, 0x22, 0x33, 0x19, 0x4f, 0x90, 0x25, 0x64, 0x25, 0xfb, 0x7b, 0xe1, 0x48, 0x0b, 0xd1, 0x29, - 0xab, 0x42, 0xbb, 0x86, 0xcb, 0x47, 0x64, 0x32, 0x10, 0xa4, 0xca, 0xee, 0xbf, 0x39, 0x50, 0xa7, - 0x15, 0x40, 0x61, 0x17, 0x1c, 0xae, 0xc3, 0x97, 0x34, 0xf3, 0x45, 0x2f, 0x0f, 0x33, 0xd7, 0xca, - 0x46, 0xa9, 0xe8, 0x61, 0x9b, 0x19, 0x29, 0x57, 0xa0, 0x21, 0x4a, 0x3a, 0xf3, 0x82, 0x48, 0x32, - 0x90, 0x5d, 0x86, 0xda, 0x71, 0x34, 0x51, 0xde, 0x09, 0xa8, 0xe8, 0x7d, 0x34, 0xf1, 0x08, 0xcf, - 0xc6, 0x83, 0xed, 0x89, 0xc1, 0x0b, 0x9b, 0x93, 0x87, 0xd1, 0xea, 0xea, 0x66, 0xcd, 0xc5, 0xc8, - 0xa1, 0xee, 0x26, 0x2c, 0x3f, 0x8c, 0x06, 0xdc, 0x88, 0x38, 0x9d, 0xc9, 0xcd, 0xee, 0xb7, 0x1c, - 0x58, 0x50, 0xc4, 0xec, 0x3a, 0xd4, 0xd0, 0x95, 0xc8, 0x1d, 0x14, 0xf4, 0xad, 0x1d, 0xd2, 0x79, - 0x44, 0x81, 0xba, 0x97, 0xe2, 0x11, 0x99, 0x5b, 0xa9, 0xa2, 0x11, 0x99, 0xd7, 0xa4, 0x87, 0x9b, - 0x73, 0x36, 0x72, 0xa8, 0xfb, 0x17, 0x0e, 0x2c, 0x5a, 0x7d, 0xe0, 0xe1, 0x71, 0xe4, 0x27, 0xa9, - 0xbc, 0x09, 0x91, 0xdb, 0x63, 0x42, 0x66, 0x0c, 0xb2, 0x62, 0xc7, 0x20, 0x75, 0x74, 0xac, 0x6a, - 0x46, 0xc7, 0x6e, 0x41, 0x23, 0xcb, 0x19, 0xaa, 0x59, 0x3a, 0x15, 0x7b, 0x54, 0xf7, 0x91, 0x19, - 0x11, 0xb6, 0xd3, 0x8f, 0x46, 0x51, 0x2c, 0x43, 0xf0, 0xa2, 0xe0, 0x7e, 0x08, 0x4d, 0x83, 0x1e, - 0x87, 0x11, 0xf2, 0xf4, 0x34, 0x8a, 0x9f, 0xa9, 0x50, 0xa8, 0x2c, 0xea, 0x6b, 0xf7, 0x4a, 0x76, - 0xed, 0xee, 0xfe, 0xbd, 0x03, 0x8b, 0xc8, 0x83, 0x41, 0x38, 0xdc, 0x8f, 0x46, 0x41, 0x7f, 0x46, - 0x7b, 0xaf, 0xd8, 0x4d, 0x6a, 0x06, 0xc5, 0x8b, 0x36, 0x8c, 0xbc, 0xad, 0xce, 0x8e, 0x52, 0x10, - 0x75, 0x19, 0x25, 0x15, 0xf9, 0xfc, 0xd0, 0x4f, 0x24, 0xf3, 0x4b, 0x23, 0x67, 0x81, 0x28, 0x4f, - 0x08, 0xc4, 0x7e, 0xca, 0x7b, 0xe3, 0x60, 0x34, 0x0a, 0x04, 0xad, 0x70, 0x81, 0xca, 0xaa, 0xb0, - 0xcf, 0x41, 0x90, 0xf8, 0x87, 0x59, 0x98, 0x59, 0x97, 0xdd, 0x1f, 0x54, 0xa0, 0x29, 0xd5, 0xf3, - 0xce, 0x60, 0xc8, 0xe5, 0x1d, 0x08, 0x39, 0x99, 0x5a, 0x95, 0x18, 0x88, 0xaa, 0xb7, 0xdc, 0x52, - 0x03, 0xc9, 0x6f, 0x79, 0xb5, 0xb8, 0xe5, 0xaf, 0x43, 0x03, 0x59, 0xef, 0x5d, 0xf2, 0x7f, 0xc5, - 0xfd, 0x49, 0x06, 0xa8, 0xda, 0x2d, 0xaa, 0xad, 0x67, 0xb5, 0x04, 0xbc, 0xf4, 0xc6, 0xe4, 0x7d, - 0x68, 0xc9, 0x66, 0x68, 0x4f, 0x48, 0x73, 0x64, 0xcc, 0x6f, 0xed, 0x97, 0x67, 0x51, 0xaa, 0x2f, - 0xb7, 0xd4, 0x97, 0x0b, 0xe7, 0x7d, 0xa9, 0x28, 0xe9, 0x76, 0x5b, 0xac, 0xcd, 0xfd, 0xd8, 0x9f, - 0x1c, 0x2b, 0x93, 0x37, 0xd0, 0x29, 0x3b, 0x04, 0xb3, 0x4d, 0xa8, 0xe3, 0x67, 0x4a, 0x93, 0x97, - 0x0b, 0xa4, 0x20, 0x61, 0xd7, 0xa1, 0xce, 0x07, 0x43, 0xae, 0x4e, 0x78, 0xcc, 0x3e, 0x6b, 0xe3, - 0x1e, 0x79, 0x82, 0x00, 0xd5, 0x03, 0xa2, 0x39, 0xf5, 0x60, 0x5b, 0x81, 0x39, 0x2c, 0x3e, 0x18, - 0xb8, 0x6b, 0xc0, 0x1e, 0x0a, 0x8e, 0x36, 0xe3, 0xd7, 0xdf, 0xae, 0x42, 0xd3, 0x80, 0x51, 0xd2, - 0x87, 0x38, 0xe0, 0xde, 0x20, 0xf0, 0xc7, 0x3c, 0xe5, 0xb1, 0xe4, 0xe2, 0x1c, 0x8a, 0x74, 0xfe, - 0xc9, 0xb0, 0x17, 0x4d, 0xd3, 0xde, 0x80, 0x0f, 0x63, 0x2e, 0x0c, 0x33, 0x1a, 0x0a, 0x0b, 0x45, - 0xba, 0xb1, 0xff, 0xdc, 0xa4, 0x13, 0xfc, 0x90, 0x43, 0x55, 0x34, 0x5a, 0xac, 0x51, 0x2d, 0x8b, - 0x46, 0x8b, 0x15, 0xc9, 0xeb, 0xa8, 0x7a, 0x89, 0x8e, 0x7a, 0x0f, 0xd6, 0x85, 0x36, 0x92, 0x72, - 0xdb, 0xcb, 0xb1, 0xc9, 0x19, 0xb5, 0x6c, 0x13, 0xda, 0x38, 0x66, 0xc5, 0xe0, 0x49, 0xf0, 0x4d, - 0x11, 0x1f, 0x72, 0xbc, 0x02, 0x8e, 0xb4, 0x14, 0xa8, 0x31, 0x69, 0xc5, 0x7d, 0x5b, 0x01, 0x27, - 0x5a, 0xff, 0xb9, 0x4d, 0xdb, 0x90, 0xb4, 0x39, 0xdc, 0x5d, 0x84, 0xe6, 0x41, 0x1a, 0x4d, 0xd4, - 0xa6, 0x2c, 0x41, 0x4b, 0x14, 0x65, 0x76, 0xc3, 0x6b, 0x70, 0x89, 0xb8, 0xe8, 0x71, 0x34, 0x89, - 0x46, 0xd1, 0x70, 0x76, 0x30, 0x3d, 0x4c, 0xfa, 0x71, 0x30, 0xc1, 0xd3, 0x90, 0xfb, 0x8f, 0x0e, - 0xac, 0x5a, 0xb5, 0x32, 0x64, 0xf4, 0x69, 0xc1, 0xd2, 0xfa, 0x5a, 0x5a, 0x30, 0xde, 0x8a, 0xa1, - 0x2a, 0x05, 0xa1, 0x08, 0xe5, 0x3d, 0x91, 0x37, 0xd5, 0xb7, 0x61, 0x59, 0x8d, 0x4c, 0x7d, 0x28, - 0xb8, 0xb0, 0x53, 0xe4, 0x42, 0xf9, 0xfd, 0x92, 0xfc, 0x40, 0x35, 0xf1, 0x8b, 0xf2, 0xde, 0x72, - 0x40, 0x73, 0x54, 0xb1, 0x03, 0x7d, 0x33, 0x65, 0x9e, 0x20, 0xd4, 0x08, 0xfa, 0x1a, 0x4c, 0xdc, - 0xdf, 0x75, 0x00, 0xb2, 0xd1, 0x21, 0x63, 0x64, 0xea, 0x5e, 0xa4, 0x52, 0x1b, 0xaa, 0xfd, 0x2d, - 0x68, 0xe9, 0x3b, 0x95, 0xcc, 0x82, 0x34, 0x15, 0x86, 0x4e, 0xde, 0x35, 0x58, 0x1e, 0x8e, 0xa2, - 0x43, 0x32, 0xbf, 0x94, 0x2e, 0x93, 0xc8, 0x1c, 0x8f, 0x25, 0x01, 0xdf, 0x93, 0x68, 0x66, 0x6e, - 0x6a, 0x86, 0xb9, 0x71, 0xbf, 0x53, 0xd1, 0x91, 0xf8, 0x6c, 0xce, 0x67, 0x4a, 0x19, 0xdb, 0x2a, - 0x28, 0xc7, 0x33, 0x02, 0xdf, 0x14, 0x25, 0xdb, 0x3f, 0xf7, 0x10, 0xff, 0x21, 0x2c, 0xc5, 0x42, - 0xfb, 0x28, 0xd5, 0x54, 0x7b, 0x89, 0x6a, 0x5a, 0x8c, 0x2d, 0x9b, 0xf4, 0x49, 0x68, 0xfb, 0x83, - 0x13, 0x1e, 0xa7, 0x01, 0x1d, 0xa3, 0xc8, 0x21, 0x10, 0x0a, 0x75, 0xd9, 0xc0, 0xc9, 0x4e, 0x5f, - 0x83, 0x65, 0x99, 0x57, 0xa3, 0x29, 0x65, 0x2e, 0x68, 0x06, 0x23, 0xa1, 0xfb, 0x67, 0x2a, 0xe8, - 0x6f, 0xef, 0xe1, 0xd9, 0x2b, 0x62, 0xce, 0xae, 0x92, 0x9b, 0xdd, 0x27, 0x64, 0x00, 0x7e, 0xa0, - 0xce, 0x6a, 0x55, 0xe3, 0x8e, 0x7b, 0x20, 0x2f, 0x4c, 0xec, 0x25, 0xad, 0xbd, 0xca, 0x92, 0xba, - 0x3f, 0x74, 0x60, 0x7e, 0x37, 0x9a, 0xec, 0xca, 0xdb, 0x7e, 0x12, 0x04, 0x9d, 0xb5, 0xa6, 0x8a, - 0x2f, 0xc9, 0x03, 0x28, 0xb5, 0xc3, 0x8b, 0x79, 0x3b, 0xfc, 0x4b, 0xf0, 0x1a, 0x45, 0x0a, 0xe2, - 0x68, 0x12, 0xc5, 0x28, 0x8c, 0xfe, 0x48, 0x18, 0xdd, 0x28, 0x4c, 0x8f, 0x95, 0x1a, 0x7b, 0x19, - 0x09, 0x1d, 0xc9, 0xf0, 0x28, 0x21, 0x1c, 0x65, 0xe9, 0x37, 0x08, 0xed, 0x56, 0xac, 0x70, 0x3f, - 0x0b, 0x0d, 0x72, 0x7c, 0x69, 0x5a, 0xef, 0x40, 0xe3, 0x38, 0x9a, 0xf4, 0x8e, 0x83, 0x30, 0x55, - 0xc2, 0xbd, 0x94, 0x79, 0xa4, 0xbb, 0xb4, 0x20, 0x9a, 0xc0, 0xfd, 0xa3, 0x3a, 0xcc, 0x3f, 0x08, - 0x4f, 0xa2, 0xa0, 0x4f, 0xf7, 0x03, 0x63, 0x3e, 0x8e, 0x54, 0x0e, 0x1f, 0xfe, 0xc6, 0xa5, 0xa0, - 0x7c, 0x96, 0x49, 0x2a, 0x03, 0xfc, 0xaa, 0x88, 0xe6, 0x3e, 0xce, 0xf2, 0x6c, 0x85, 0xe8, 0x18, - 0x08, 0x3a, 0xfd, 0xb1, 0x99, 0x92, 0x2c, 0x4b, 0x59, 0x12, 0x64, 0xdd, 0x48, 0x82, 0xa4, 0xdb, - 0x24, 0x91, 0x99, 0x40, 0xfc, 0xb5, 0xe0, 0xa9, 0x22, 0x1d, 0x52, 0x62, 0x2e, 0x22, 0x3c, 0xe4, - 0x38, 0xcc, 0xcb, 0x43, 0x8a, 0x09, 0xa2, 0x73, 0x21, 0x3e, 0x10, 0x34, 0x42, 0xf9, 0x9a, 0x10, - 0x3a, 0x62, 0xf9, 0xac, 0xe6, 0x86, 0xe0, 0xf9, 0x1c, 0x8c, 0x1a, 0x7a, 0xc0, 0xb5, 0x22, 0x15, - 0x73, 0x00, 0x91, 0x47, 0x9c, 0xc7, 0x8d, 0xa3, 0x8d, 0x48, 0x39, 0x52, 0x47, 0x1b, 0x64, 0x14, - 0x7f, 0x34, 0x3a, 0xf4, 0xfb, 0xcf, 0x28, 0x69, 0x9d, 0x32, 0x8c, 0x1a, 0x9e, 0x0d, 0x52, 0xae, - 0x41, 0xb6, 0x9b, 0x74, 0x1f, 0x59, 0xf3, 0x4c, 0x88, 0x6d, 0x41, 0x93, 0x8e, 0x73, 0x72, 0x3f, - 0x97, 0x68, 0x3f, 0xdb, 0xe6, 0x79, 0x8f, 0x76, 0xd4, 0x24, 0x32, 0xef, 0x2c, 0x96, 0xed, 0x3b, - 0x0b, 0xa1, 0x34, 0xe5, 0x55, 0x4f, 0x9b, 0x7a, 0xcb, 0x00, 0xb4, 0xa6, 0x72, 0xc1, 0x04, 0xc1, - 0x0a, 0x11, 0x58, 0x18, 0xbb, 0x0c, 0x0b, 0x78, 0x08, 0x99, 0xf8, 0xc1, 0xa0, 0xc3, 0xf4, 0x59, - 0x48, 0x63, 0xd8, 0x86, 0xfa, 0x4d, 0x57, 0x32, 0xab, 0xb4, 0x2a, 0x16, 0x86, 0x6b, 0xa3, 0xcb, - 0x24, 0x44, 0x6b, 0x62, 0x47, 0x2d, 0xd0, 0x4d, 0x81, 0xdd, 0x1e, 0x0c, 0x24, 0x6f, 0xea, 0xa3, - 0x6f, 0xc6, 0x55, 0x8e, 0xc5, 0x55, 0x25, 0xbb, 0x5b, 0x29, 0xdf, 0xdd, 0x97, 0xae, 0x81, 0xbb, - 0x03, 0xcd, 0x7d, 0x23, 0x71, 0x9b, 0x98, 0x5c, 0xa5, 0x6c, 0x4b, 0xc1, 0x30, 0x10, 0x63, 0x38, - 0x15, 0x73, 0x38, 0xee, 0xef, 0x38, 0xc0, 0xf6, 0x82, 0x24, 0xd5, 0xc3, 0x17, 0x7d, 0xbb, 0xd0, - 0xd2, 0x01, 0x8a, 0x2c, 0xdb, 0xca, 0xc2, 0x90, 0x86, 0x86, 0xd2, 0x8b, 0x8e, 0x8e, 0x12, 0xae, - 0xc2, 0x54, 0x16, 0x86, 0x1c, 0x8a, 0x3e, 0x0e, 0xfa, 0x0b, 0x81, 0xe8, 0x41, 0xf9, 0x3e, 0x05, - 0xdc, 0x8d, 0x44, 0xde, 0x57, 0x7e, 0x21, 0x37, 0x61, 0x41, 0x7f, 0x6a, 0x6b, 0x09, 0x45, 0xa9, - 0xeb, 0x51, 0x1b, 0x91, 0x9b, 0x6e, 0x8d, 0x4b, 0x9c, 0x07, 0x8b, 0x15, 0xee, 0x53, 0x58, 0x95, - 0x4d, 0x98, 0xfe, 0x88, 0xbd, 0xee, 0xce, 0x79, 0xbc, 0x57, 0x29, 0xf2, 0x9e, 0xfb, 0x03, 0x07, - 0xe6, 0xe5, 0xe6, 0xd0, 0x4a, 0xe6, 0x93, 0xee, 0x1b, 0x9e, 0x85, 0x95, 0xa7, 0x5b, 0x17, 0xf5, - 0x49, 0xb5, 0x4c, 0x9f, 0x30, 0xa8, 0x4d, 0xfc, 0xf4, 0x98, 0x0e, 0x92, 0x0d, 0x8f, 0x7e, 0xb3, - 0xb6, 0x08, 0x6e, 0x08, 0xbd, 0x45, 0x81, 0x8d, 0xb2, 0x17, 0x07, 0xc2, 0x3c, 0x16, 0x70, 0x3c, - 0x10, 0x50, 0x6e, 0x89, 0xc0, 0xf5, 0xa5, 0x90, 0xcc, 0x7a, 0xcb, 0xe0, 0x6c, 0x7f, 0x64, 0x13, - 0xf9, 0xfd, 0x91, 0xa4, 0x9e, 0xae, 0x77, 0xbb, 0xd0, 0xb9, 0xcb, 0x47, 0x3c, 0xe5, 0xb7, 0x47, - 0xa3, 0x7c, 0xfb, 0xaf, 0xc1, 0xa5, 0x92, 0x3a, 0xe9, 0x40, 0xde, 0x83, 0x95, 0xbb, 0xfc, 0x70, - 0x3a, 0xdc, 0xe3, 0x27, 0xd9, 0xbd, 0x2e, 0x83, 0x5a, 0x72, 0x1c, 0x9d, 0x4a, 0xe6, 0xa4, 0xdf, - 0xec, 0x0d, 0x80, 0x11, 0xd2, 0xf4, 0x92, 0x09, 0xef, 0xab, 0x44, 0x63, 0x42, 0x0e, 0x26, 0xbc, - 0xef, 0xbe, 0x07, 0xcc, 0x6c, 0x47, 0x4e, 0x01, 0x75, 0xf2, 0xf4, 0xb0, 0x97, 0xcc, 0x92, 0x94, - 0x8f, 0x55, 0x06, 0xb5, 0x09, 0xb9, 0xd7, 0xa0, 0xb5, 0xef, 0xcf, 0x3c, 0xfe, 0x0d, 0xf9, 0xee, - 0x61, 0x03, 0xe6, 0x27, 0xfe, 0x0c, 0x45, 0x55, 0xc7, 0x30, 0xa8, 0xda, 0xfd, 0xaf, 0x0a, 0xcc, - 0x09, 0x4a, 0x6c, 0x75, 0xc0, 0x93, 0x34, 0x08, 0xc5, 0xad, 0xa5, 0x6c, 0xd5, 0x80, 0x0a, 0xbc, - 0x51, 0x29, 0xe1, 0x0d, 0x79, 0x72, 0x50, 0x49, 0x9b, 0x92, 0x09, 0x2c, 0x0c, 0x39, 0x36, 0xcb, - 0x15, 0x11, 0x87, 0xe8, 0x0c, 0xc8, 0x05, 0xb5, 0x32, 0xcd, 0x2f, 0xc6, 0xa7, 0xd8, 0x5e, 0xb2, - 0x83, 0x09, 0x95, 0xda, 0x97, 0x79, 0xc1, 0x35, 0x05, 0xfb, 0x52, 0xb0, 0x23, 0x0b, 0xaf, 0x60, - 0x47, 0xc4, 0x71, 0xe2, 0x65, 0x76, 0x04, 0x5e, 0xc1, 0x8e, 0xb8, 0x0c, 0xda, 0xf7, 0x38, 0xf7, - 0x38, 0x7a, 0x28, 0x8a, 0x9d, 0xbe, 0xeb, 0x40, 0x5b, 0x3a, 0x57, 0xba, 0x8e, 0xbd, 0x65, 0x79, - 0x62, 0xa5, 0xa9, 0x95, 0x57, 0x61, 0x91, 0xfc, 0x23, 0x1d, 0xbd, 0x93, 0xa1, 0x46, 0x0b, 0xc4, - 0x79, 0xa8, 0x2b, 0x96, 0x71, 0x30, 0x92, 0x9b, 0x62, 0x42, 0x2a, 0x00, 0x18, 0xfb, 0x32, 0x9d, - 0xc3, 0xf1, 0x74, 0xd9, 0xfd, 0x6b, 0x07, 0x56, 0x8c, 0x01, 0x4b, 0x2e, 0xfc, 0x10, 0x54, 0x2e, - 0x89, 0x08, 0xf2, 0x09, 0x61, 0xda, 0xb0, 0x1d, 0xc5, 0xec, 0x33, 0x8b, 0x98, 0x36, 0xd3, 0x9f, - 0xd1, 0x00, 0x93, 0xe9, 0x58, 0x6a, 0x25, 0x13, 0x42, 0x46, 0x3a, 0xe5, 0xfc, 0x99, 0x26, 0xa9, - 0x0a, 0xc5, 0x65, 0x62, 0x94, 0x2a, 0x80, 0x7e, 0x9d, 0x26, 0x12, 0xd9, 0x71, 0x36, 0xe8, 0xfe, - 0xb3, 0x03, 0xab, 0xc2, 0x41, 0x97, 0xc7, 0x1f, 0x9d, 0xf7, 0x3e, 0x27, 0x4e, 0x24, 0x42, 0x22, - 0x77, 0x2f, 0x78, 0xb2, 0xcc, 0x3e, 0xf3, 0x8a, 0x87, 0x0a, 0x9d, 0x22, 0x72, 0xc6, 0x5e, 0x54, - 0xcb, 0xf6, 0xe2, 0x25, 0x2b, 0x5d, 0x16, 0xd4, 0xaa, 0x97, 0x06, 0xb5, 0xee, 0xcc, 0x43, 0x3d, - 0xe9, 0x47, 0x13, 0xee, 0xae, 0xc3, 0x9a, 0x3d, 0x39, 0xa9, 0x82, 0xbe, 0xe7, 0x40, 0xe7, 0x9e, - 0x08, 0xf1, 0x06, 0xe1, 0x70, 0x37, 0x48, 0xd2, 0x28, 0xd6, 0x0f, 0x7d, 0x2e, 0x03, 0x24, 0xa9, - 0x1f, 0xa7, 0x22, 0x85, 0x4f, 0x86, 0x9c, 0x32, 0x04, 0xc7, 0xc8, 0xc3, 0x81, 0xa8, 0x15, 0x7b, - 0xa3, 0xcb, 0x05, 0x3b, 0x5a, 0x2d, 0xb1, 0xa3, 0x6f, 0x8b, 0x9c, 0x2b, 0xb4, 0x97, 0xfc, 0x84, - 0x54, 0xad, 0xb0, 0xb6, 0x39, 0xd4, 0xfd, 0x4b, 0x07, 0x96, 0xb3, 0x41, 0xee, 0x20, 0x68, 0x6b, - 0x07, 0x69, 0xcf, 0x32, 0xed, 0xa0, 0x82, 0x61, 0x01, 0x1a, 0x38, 0x39, 0x36, 0x03, 0x21, 0x89, - 0x95, 0xa5, 0x68, 0xaa, 0xd2, 0x25, 0x4d, 0x48, 0x64, 0x3b, 0xa0, 0x69, 0x95, 0xb9, 0x92, 0xb2, - 0x44, 0x19, 0x98, 0xe3, 0x94, 0xbe, 0x9a, 0x13, 0x87, 0x13, 0x59, 0x54, 0xf6, 0x69, 0x9e, 0x50, - 0xfc, 0xe9, 0xfe, 0x9e, 0x03, 0x97, 0x4a, 0x16, 0x57, 0x4a, 0xc6, 0x5d, 0x58, 0x39, 0xd2, 0x95, - 0x6a, 0x01, 0x84, 0x78, 0xac, 0xab, 0x3b, 0x09, 0x7b, 0xd2, 0x5e, 0xf1, 0x03, 0xed, 0x1c, 0x88, - 0x25, 0xb5, 0xd2, 0x88, 0x8a, 0x15, 0x5b, 0xbf, 0x5f, 0x85, 0x25, 0x71, 0x57, 0x25, 0x9e, 0xdc, - 0xf2, 0x98, 0x7d, 0x04, 0xf3, 0xf2, 0xc9, 0x34, 0xbb, 0x28, 0xbb, 0xb5, 0x1f, 0x69, 0x77, 0xd7, - 0xf3, 0xb0, 0xe4, 0x9d, 0xd5, 0xdf, 0xfc, 0xe1, 0xbf, 0xfe, 0x41, 0x65, 0x91, 0x35, 0x6f, 0x9e, - 0xbc, 0x7b, 0x73, 0xc8, 0xc3, 0x04, 0xdb, 0xf8, 0x55, 0x80, 0xec, 0x31, 0x31, 0xeb, 0x68, 0xa7, - 0x26, 0xf7, 0x4a, 0xba, 0x7b, 0xa9, 0xa4, 0x46, 0xb6, 0x7b, 0x89, 0xda, 0x5d, 0x75, 0x97, 0xb0, - 0xdd, 0x20, 0x0c, 0x52, 0xf1, 0xb2, 0xf8, 0x03, 0x67, 0x93, 0x0d, 0xa0, 0x65, 0xbe, 0x15, 0x66, - 0x2a, 0x7c, 0x51, 0xf2, 0x52, 0xb9, 0xfb, 0x5a, 0x69, 0x9d, 0x8a, 0xdd, 0x50, 0x1f, 0x17, 0xdd, - 0x36, 0xf6, 0x31, 0x25, 0x8a, 0xac, 0x97, 0x11, 0x2c, 0xd9, 0x4f, 0x82, 0xd9, 0xeb, 0x86, 0x58, - 0x17, 0x1e, 0x24, 0x77, 0xdf, 0x38, 0xa3, 0x56, 0xf6, 0xf5, 0x06, 0xf5, 0xb5, 0xe1, 0x32, 0xec, - 0xab, 0x4f, 0x34, 0xea, 0x41, 0xf2, 0x07, 0xce, 0xe6, 0xd6, 0xb7, 0x2e, 0x43, 0x43, 0x07, 0x1c, - 0xd9, 0xd7, 0x61, 0xd1, 0xba, 0x4c, 0x64, 0x6a, 0x1a, 0x65, 0x77, 0x8f, 0xdd, 0xd7, 0xcb, 0x2b, - 0x65, 0xc7, 0x97, 0xa9, 0xe3, 0x0e, 0x5b, 0xc7, 0x8e, 0xe5, 0x6d, 0xdc, 0x4d, 0xba, 0x42, 0x15, - 0xf9, 0x9d, 0xcf, 0xc4, 0x3c, 0xb3, 0x0b, 0x40, 0x6b, 0x9e, 0x85, 0x0b, 0x43, 0x6b, 0x9e, 0xc5, - 0x5b, 0x43, 0xf7, 0x75, 0xea, 0x6e, 0x9d, 0xad, 0x99, 0xdd, 0xe9, 0x40, 0x20, 0xa7, 0x8c, 0x5c, - 0xf3, 0xc5, 0x30, 0x7b, 0x43, 0x33, 0x56, 0xd9, 0x4b, 0x62, 0xcd, 0x22, 0xc5, 0xe7, 0xc4, 0x6e, - 0x87, 0xba, 0x62, 0x8c, 0xb6, 0xcf, 0x7c, 0x30, 0xcc, 0xbe, 0x0a, 0x0d, 0xfd, 0x3c, 0x8e, 0x6d, - 0x18, 0x6f, 0x12, 0xcd, 0x37, 0x7b, 0xdd, 0x4e, 0xb1, 0xa2, 0x8c, 0x31, 0xcc, 0x96, 0x91, 0x31, - 0xf6, 0xe0, 0xa2, 0x74, 0xaa, 0x0f, 0xf9, 0x8f, 0x33, 0x93, 0x92, 0x77, 0xce, 0xb7, 0x1c, 0xf6, - 0x21, 0x2c, 0xa8, 0x57, 0x87, 0x6c, 0xbd, 0xfc, 0xf5, 0x64, 0x77, 0xa3, 0x80, 0x4b, 0xed, 0x71, - 0x1b, 0x20, 0x7b, 0x31, 0xa7, 0xe5, 0xac, 0xf0, 0x8e, 0x4f, 0x2f, 0x62, 0xc9, 0xf3, 0xba, 0x21, - 0xbd, 0x0f, 0xb4, 0x1f, 0xe4, 0xb1, 0x37, 0x33, 0xfa, 0xd2, 0xa7, 0x7a, 0x2f, 0x69, 0xd0, 0x5d, - 0xa7, 0xb5, 0x6b, 0x33, 0x12, 0xdc, 0x90, 0x9f, 0xaa, 0xdc, 0xf4, 0xbb, 0xd0, 0x34, 0x5e, 0xe1, - 0x31, 0xd5, 0x42, 0xf1, 0x05, 0x5f, 0xb7, 0x5b, 0x56, 0x25, 0x87, 0xfb, 0x05, 0x58, 0xb4, 0x9e, - 0xd3, 0x69, 0xc9, 0x28, 0x7b, 0xac, 0xa7, 0x25, 0xa3, 0xfc, 0x05, 0xde, 0x57, 0xa0, 0x69, 0x3c, - 0x7e, 0x63, 0x46, 0xd6, 0x5d, 0xee, 0xd9, 0x9b, 0x1e, 0x51, 0xd9, 0x5b, 0xb9, 0x35, 0x9a, 0xef, - 0x92, 0xdb, 0xc0, 0xf9, 0x52, 0x82, 0x36, 0x32, 0xc9, 0xd7, 0x61, 0xc9, 0x7e, 0x0e, 0xa7, 0xa5, - 0xaa, 0xf4, 0x61, 0x9d, 0x96, 0xaa, 0x33, 0xde, 0xd0, 0x49, 0x86, 0xdc, 0x5c, 0xd5, 0x9d, 0xdc, - 0xfc, 0x58, 0x5e, 0xc5, 0xbd, 0x60, 0x5f, 0x42, 0xd5, 0x21, 0x33, 0xe6, 0x59, 0xf6, 0x08, 0xd0, - 0xce, 0xab, 0xd7, 0xdc, 0x5e, 0x48, 0xae, 0x77, 0x57, 0xa8, 0xf1, 0x26, 0xcb, 0x66, 0x20, 0xec, - 0x01, 0x65, 0xce, 0x1b, 0xf6, 0xc0, 0x4c, 0xae, 0x37, 0xec, 0x81, 0x95, 0x60, 0x9f, 0xb7, 0x07, - 0x69, 0x80, 0x6d, 0x84, 0xb0, 0x9c, 0x4b, 0x3b, 0xd1, 0xc2, 0x52, 0x9e, 0xa7, 0xd7, 0xbd, 0xfc, - 0xf2, 0x6c, 0x15, 0x5b, 0xcd, 0x28, 0xf5, 0x72, 0x53, 0xa5, 0x55, 0xfe, 0x1a, 0xb4, 0xcc, 0x67, - 0x4c, 0xda, 0x42, 0x94, 0x3c, 0xbe, 0xd2, 0x16, 0xa2, 0xec, 0xdd, 0x93, 0xda, 0x5c, 0xd6, 0x32, - 0xbb, 0xc1, 0xcd, 0xb5, 0x5f, 0x7d, 0x64, 0x2a, 0xb3, 0xec, 0x39, 0x4b, 0xa6, 0x32, 0x4b, 0x9f, - 0x8a, 0xa8, 0xcd, 0x65, 0xab, 0xd6, 0x5c, 0x44, 0x9c, 0x95, 0x7d, 0x05, 0x96, 0x8d, 0x9c, 0xae, - 0x83, 0x59, 0xd8, 0xd7, 0x8c, 0x5a, 0xcc, 0x07, 0xee, 0x96, 0x79, 0x9e, 0xee, 0x06, 0xb5, 0xbf, - 0xe2, 0x5a, 0x93, 0x40, 0x26, 0xdd, 0x86, 0xa6, 0x99, 0x2f, 0xf6, 0x92, 0x76, 0x37, 0x8c, 0x2a, - 0x33, 0xf9, 0xf5, 0x96, 0xc3, 0xfe, 0xd8, 0x81, 0x96, 0x95, 0x7d, 0x65, 0xdd, 0x26, 0xe4, 0xda, - 0xe9, 0x98, 0x75, 0x66, 0x43, 0xae, 0x47, 0x83, 0xdc, 0xdb, 0xfc, 0x82, 0xb5, 0x08, 0x1f, 0x5b, - 0x27, 0x98, 0x1b, 0xf9, 0xd7, 0xf0, 0x2f, 0xf2, 0x04, 0x66, 0xce, 0xf4, 0x8b, 0x5b, 0x0e, 0xfb, - 0x40, 0xfc, 0xdf, 0x83, 0x8a, 0x58, 0x30, 0x43, 0x91, 0xe6, 0x97, 0xcc, 0xfc, 0xb3, 0x83, 0xeb, - 0xce, 0x2d, 0x87, 0x7d, 0x4d, 0x3c, 0x7a, 0x97, 0xdf, 0xd2, 0xca, 0xbf, 0xea, 0xf7, 0xee, 0x55, - 0x9a, 0xcd, 0x65, 0xf7, 0x92, 0x35, 0x9b, 0xbc, 0x25, 0xb9, 0x2d, 0x46, 0x27, 0xff, 0xcb, 0x20, - 0x53, 0x89, 0x85, 0xff, 0x37, 0x38, 0x7b, 0x90, 0x63, 0x31, 0x48, 0x49, 0x6e, 0xb1, 0xc7, 0x2b, - 0x36, 0xe3, 0x6e, 0xd2, 0x58, 0xaf, 0xba, 0x6f, 0x9e, 0x39, 0xd6, 0x9b, 0x74, 0x22, 0xc5, 0x11, - 0xef, 0x03, 0x64, 0x01, 0x41, 0x96, 0x8b, 0x56, 0x69, 0xab, 0x50, 0x8c, 0x19, 0xda, 0x3c, 0xa8, - 0x82, 0x5a, 0xd8, 0xe2, 0x57, 0x85, 0xa8, 0x3e, 0x50, 0x71, 0xae, 0x4b, 0x86, 0x38, 0xda, 0x91, - 0xbb, 0x6e, 0xb7, 0xac, 0xaa, 0x4c, 0x50, 0x75, 0xd0, 0xec, 0x09, 0x2c, 0xee, 0x45, 0xd1, 0xb3, - 0xe9, 0x44, 0x87, 0xd7, 0xed, 0xf8, 0xcd, 0xae, 0x9f, 0x1c, 0x77, 0x73, 0xb3, 0x70, 0xaf, 0x50, - 0x53, 0x5d, 0xd6, 0x31, 0x9a, 0xba, 0xf9, 0x71, 0x16, 0x70, 0x7c, 0xc1, 0x7c, 0x58, 0xd1, 0x1e, - 0x80, 0x1e, 0x78, 0xd7, 0x6e, 0xc6, 0x8c, 0xbb, 0x15, 0xba, 0xb0, 0x7c, 0x32, 0x35, 0xda, 0x9b, - 0x89, 0x6a, 0xf3, 0x96, 0xc3, 0xf6, 0xa1, 0x75, 0x97, 0xf7, 0xa3, 0x01, 0x97, 0x11, 0x97, 0xd5, - 0x6c, 0xe0, 0x3a, 0x54, 0xd3, 0x5d, 0xb4, 0x40, 0x5b, 0x27, 0x4e, 0xfc, 0x59, 0xcc, 0xbf, 0x71, - 0xf3, 0x63, 0x19, 0xcb, 0x79, 0xa1, 0x74, 0xa2, 0x8a, 0x3f, 0x59, 0x3a, 0x31, 0x17, 0xb0, 0xb2, - 0x74, 0x62, 0x21, 0x60, 0x65, 0x2d, 0xb5, 0x8a, 0x7f, 0xb1, 0x11, 0xac, 0x14, 0x62, 0x5c, 0xda, - 0x8f, 0x38, 0x2b, 0x32, 0xd6, 0xbd, 0x72, 0x36, 0x81, 0xdd, 0xdb, 0xa6, 0xdd, 0xdb, 0x01, 0x2c, - 0xde, 0xe5, 0x62, 0xb1, 0xc4, 0x1d, 0x7e, 0xee, 0x71, 0x9d, 0x79, 0xdf, 0x9f, 0x57, 0x8a, 0x54, - 0x67, 0x1b, 0x3d, 0xba, 0x40, 0x67, 0x5f, 0x85, 0xe6, 0x7d, 0x9e, 0xaa, 0x4b, 0x7b, 0xed, 0x8d, - 0xe5, 0x6e, 0xf1, 0xbb, 0x25, 0x77, 0xfe, 0x36, 0xcf, 0x50, 0x6b, 0x37, 0xf9, 0x60, 0xc8, 0x85, - 0x7a, 0xea, 0x05, 0x83, 0x17, 0xec, 0x97, 0xa9, 0x71, 0x9d, 0x03, 0xb4, 0x6e, 0xdc, 0xf5, 0x9a, - 0x8d, 0x2f, 0xe7, 0xf0, 0xb2, 0x96, 0xc3, 0x68, 0xc0, 0x0d, 0xf3, 0x1f, 0x42, 0xd3, 0x48, 0x50, - 0xd3, 0x02, 0x54, 0x4c, 0xb6, 0xd3, 0x02, 0x54, 0x92, 0xcf, 0xe6, 0x5e, 0xa7, 0x7e, 0x5c, 0x76, - 0x25, 0xeb, 0x47, 0xe4, 0xb0, 0x65, 0x3d, 0xdd, 0xfc, 0xd8, 0x1f, 0xa7, 0x2f, 0xd8, 0x53, 0x7a, - 0x68, 0x67, 0x26, 0x26, 0x64, 0xde, 0x60, 0x3e, 0x87, 0x41, 0x2f, 0x96, 0x51, 0x65, 0x7b, 0x88, - 0xa2, 0x2b, 0xf2, 0x12, 0x3e, 0x03, 0x70, 0x90, 0x46, 0x93, 0xbb, 0x3e, 0x1f, 0x47, 0x61, 0xa6, - 0x6b, 0xb3, 0xcb, 0xf7, 0x4c, 0x7f, 0x19, 0x37, 0xf0, 0xec, 0xa9, 0xe1, 0x8f, 0x5b, 0x79, 0x1d, - 0x8a, 0xb9, 0xce, 0xbc, 0x9f, 0xd7, 0x0b, 0x52, 0x72, 0x47, 0x7f, 0xcb, 0x41, 0xef, 0x3a, 0x8b, - 0xa8, 0x6a, 0xef, 0xba, 0x10, 0xac, 0xd5, 0x6a, 0xaf, 0x24, 0xfc, 0xba, 0x0f, 0x8d, 0x2c, 0x44, - 0xb7, 0x91, 0x25, 0x19, 0x5a, 0x01, 0x3d, 0x6d, 0x15, 0x0b, 0x81, 0x33, 0xb7, 0x4d, 0x4b, 0x05, - 0x6c, 0x01, 0x97, 0x8a, 0xa2, 0x61, 0x01, 0xac, 0x8a, 0x01, 0x6a, 0x13, 0x4f, 0xd7, 0xc9, 0x6a, - 0x26, 0x25, 0xc1, 0x2b, 0x2d, 0xcd, 0xa5, 0xb1, 0x1f, 0xeb, 0x9c, 0x8d, 0xdc, 0x2a, 0xae, 0xb2, - 0x51, 0x35, 0x8f, 0x61, 0xa5, 0x10, 0xb8, 0xd0, 0x22, 0x7d, 0x56, 0xbc, 0x48, 0x8b, 0xf4, 0x99, - 0x31, 0x0f, 0xf7, 0x22, 0x75, 0xb9, 0xec, 0x02, 0x76, 0x99, 0x9c, 0x06, 0x69, 0xff, 0xf8, 0x03, - 0x67, 0xf3, 0x70, 0x8e, 0xfe, 0x1f, 0xee, 0x53, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x6f, 0xfa, - 0x23, 0x44, 0x51, 0x4e, 0x00, 0x00, + 0x77, 0x55, 0xa7, 0xaa, 0x7a, 0xc6, 0x9d, 0xc5, 0x52, 0x20, 0x88, 0x27, 0x22, 0x84, 0x40, 0x42, + 0x41, 0x42, 0x48, 0x01, 0xa1, 0xf0, 0x07, 0xc0, 0x4b, 0x40, 0xe2, 0x81, 0x17, 0x90, 0x10, 0x0f, + 0x79, 0x8a, 0x78, 0x84, 0x17, 0x40, 0xbc, 0x20, 0xf1, 0x8a, 0xd0, 0x39, 0xf7, 0xa3, 0xee, 0xad, + 0xaa, 0xf1, 0x38, 0x1f, 0xf0, 0xd6, 0xf7, 0x77, 0x4f, 0xdd, 0xcf, 0xf3, 0x75, 0xcf, 0x3d, 0xb7, + 0xa1, 0x11, 0x4f, 0xfa, 0x37, 0x26, 0x71, 0x94, 0x46, 0xac, 0x3e, 0x0a, 0xe3, 0x49, 0xbf, 0xfb, + 0xfa, 0x30, 0x8a, 0x86, 0x23, 0x7e, 0xd3, 0x9f, 0x04, 0x37, 0xfd, 0x30, 0x8c, 0x52, 0x3f, 0x0d, + 0xa2, 0x30, 0x11, 0x44, 0xee, 0xd7, 0x60, 0xe9, 0x3e, 0x0f, 0x0f, 0x38, 0x1f, 0x78, 0xfc, 0x1b, + 0x53, 0x9e, 0xa4, 0xec, 0xe7, 0x60, 0xc5, 0xe7, 0xdf, 0xe4, 0x7c, 0xd0, 0x9b, 0xf8, 0x49, 0x32, + 0x39, 0x8e, 0xfd, 0x84, 0x77, 0x9c, 0x2b, 0xce, 0xf5, 0x96, 0xd7, 0x16, 0x15, 0xfb, 0x1a, 0x67, + 0x6f, 0x41, 0x2b, 0x41, 0x52, 0x1e, 0xa6, 0x71, 0x34, 0x99, 0x75, 0x2a, 0x44, 0xd7, 0x44, 0x6c, + 0x47, 0x40, 0xee, 0x08, 0x96, 0x75, 0x0f, 0xc9, 0x24, 0x0a, 0x13, 0xce, 0x6e, 0xc1, 0x5a, 0x3f, + 0x98, 0x1c, 0xf3, 0xb8, 0x47, 0x1f, 0x8f, 0x43, 0x3e, 0x8e, 0xc2, 0xa0, 0xdf, 0x71, 0xae, 0x54, + 0xaf, 0x37, 0x3c, 0x26, 0xea, 0xf0, 0x8b, 0x8f, 0x64, 0x0d, 0xbb, 0x06, 0xcb, 0x3c, 0x14, 0x38, + 0x1f, 0xd0, 0x57, 0xb2, 0xab, 0xa5, 0x0c, 0xc6, 0x0f, 0xdc, 0xbf, 0x73, 0x60, 0xe5, 0x41, 0x18, + 0xa4, 0x4f, 0xfd, 0xd1, 0x88, 0xa7, 0x6a, 0x4e, 0xd7, 0x60, 0xf9, 0x94, 0x00, 0x9a, 0xd3, 0x69, + 0x14, 0x0f, 0xe4, 0x8c, 0x96, 0x04, 0xbc, 0x2f, 0xd1, 0x33, 0x47, 0x56, 0x39, 0x73, 0x64, 0xa5, + 0xcb, 0x55, 0x3d, 0x63, 0xb9, 0xae, 0xc1, 0x72, 0xcc, 0xfb, 0xd1, 0x09, 0x8f, 0x67, 0xbd, 0xd3, + 0x20, 0x1c, 0x44, 0xa7, 0x9d, 0xda, 0x15, 0xe7, 0x7a, 0xdd, 0x5b, 0x52, 0xf0, 0x53, 0x42, 0xdd, + 0x35, 0x60, 0xe6, 0x2c, 0xc4, 0xba, 0xb9, 0x43, 0x58, 0x7d, 0x12, 0x8e, 0xa2, 0xfe, 0xb3, 0x9f, + 0x70, 0x76, 0x25, 0xdd, 0x57, 0x4a, 0xbb, 0x5f, 0x87, 0x35, 0xbb, 0x23, 0x39, 0x00, 0x0e, 0x17, + 0xb7, 0x8f, 0xfd, 0x70, 0xc8, 0x55, 0x93, 0x6a, 0x08, 0x9f, 0x84, 0x76, 0x7f, 0x1a, 0xc7, 0x3c, + 0x2c, 0x8c, 0x61, 0x59, 0xe2, 0x7a, 0x10, 0x6f, 0x41, 0x2b, 0xe4, 0xa7, 0x19, 0x99, 0x64, 0x99, + 0x90, 0x9f, 0x2a, 0x12, 0xb7, 0x03, 0xeb, 0xf9, 0x6e, 0xe4, 0x00, 0xbe, 0x5b, 0x81, 0xe6, 0xe3, + 0xd8, 0x0f, 0x13, 0xbf, 0x8f, 0x5c, 0xcc, 0x3a, 0x30, 0x9f, 0x3e, 0xef, 0x1d, 0xfb, 0xc9, 0x31, + 0x75, 0xd7, 0xf0, 0x54, 0x91, 0xad, 0xc3, 0x9c, 0x3f, 0x8e, 0xa6, 0x61, 0x4a, 0x1d, 0x54, 0x3d, + 0x59, 0x62, 0xef, 0xc0, 0x4a, 0x38, 0x1d, 0xf7, 0xfa, 0x51, 0x78, 0x14, 0xc4, 0x63, 0x21, 0x0b, + 0xb4, 0x5f, 0x75, 0xaf, 0x58, 0xc1, 0x2e, 0x03, 0x1c, 0xe2, 0x3a, 0x88, 0x2e, 0x6a, 0xd4, 0x85, + 0x81, 0x30, 0x17, 0x5a, 0xb2, 0xc4, 0x83, 0xe1, 0x71, 0xda, 0xa9, 0x53, 0x43, 0x16, 0x86, 0x6d, + 0xa4, 0xc1, 0x98, 0xf7, 0x92, 0xd4, 0x1f, 0x4f, 0x3a, 0x73, 0x34, 0x1a, 0x03, 0xa1, 0xfa, 0x28, + 0xf5, 0x47, 0xbd, 0x23, 0xce, 0x93, 0xce, 0xbc, 0xac, 0xd7, 0x08, 0x7b, 0x1b, 0x96, 0x06, 0x3c, + 0x49, 0x7b, 0xfe, 0x60, 0x10, 0xf3, 0x24, 0xe1, 0x49, 0x67, 0x81, 0xb8, 0x31, 0x87, 0xe2, 0xaa, + 0xdd, 0xe7, 0xa9, 0xb1, 0x3a, 0x89, 0xdc, 0x1d, 0x77, 0x0f, 0x98, 0x01, 0xdf, 0xe5, 0xa9, 0x1f, + 0x8c, 0x12, 0xf6, 0x1e, 0xb4, 0x52, 0x83, 0x98, 0xa4, 0xaf, 0xb9, 0xc5, 0x6e, 0x90, 0xda, 0xb8, + 0x61, 0x7c, 0xe0, 0x59, 0x74, 0xee, 0x7d, 0x58, 0xb8, 0xc7, 0xf9, 0x5e, 0x30, 0x0e, 0x52, 0xb6, + 0x0e, 0xf5, 0xa3, 0xe0, 0x39, 0x17, 0x9b, 0x5d, 0xdd, 0xbd, 0xe0, 0x89, 0x22, 0xeb, 0xc2, 0xfc, + 0x84, 0xc7, 0x7d, 0xae, 0x96, 0x7f, 0xf7, 0x82, 0xa7, 0x80, 0x3b, 0xf3, 0x50, 0x1f, 0xe1, 0xc7, + 0xee, 0xf7, 0x2b, 0xd0, 0x3c, 0xe0, 0xa1, 0x66, 0x22, 0x06, 0x35, 0x9c, 0x92, 0x64, 0x1c, 0xfa, + 0xcd, 0xde, 0x84, 0x26, 0x4d, 0x33, 0x49, 0xe3, 0x20, 0x1c, 0x52, 0x63, 0x0d, 0x0f, 0x10, 0x3a, + 0x20, 0x84, 0xb5, 0xa1, 0xea, 0x8f, 0x53, 0xda, 0xc1, 0xaa, 0x87, 0x3f, 0x91, 0xc1, 0x26, 0xfe, + 0x6c, 0x8c, 0xbc, 0xa8, 0x77, 0xad, 0xe5, 0x35, 0x25, 0xb6, 0x8b, 0xdb, 0x76, 0x03, 0x56, 0x4d, + 0x12, 0xd5, 0x7a, 0x9d, 0x5a, 0x5f, 0x31, 0x28, 0x65, 0x27, 0xd7, 0x60, 0x59, 0xd1, 0xc7, 0x62, + 0xb0, 0xb4, 0x8f, 0x0d, 0x6f, 0x49, 0xc2, 0x6a, 0x0a, 0xd7, 0xa1, 0x7d, 0x14, 0x84, 0xfe, 0xa8, + 0xd7, 0x1f, 0xa5, 0x27, 0xbd, 0x01, 0x1f, 0xa5, 0x3e, 0xed, 0x68, 0xdd, 0x5b, 0x22, 0x7c, 0x7b, + 0x94, 0x9e, 0xdc, 0x45, 0x94, 0xbd, 0x03, 0x8d, 0x23, 0xce, 0x7b, 0xb4, 0x12, 0x9d, 0x85, 0x2b, + 0xce, 0xf5, 0xe6, 0xd6, 0xb2, 0x5c, 0x7a, 0xb5, 0xba, 0xde, 0xc2, 0x91, 0xfc, 0xe5, 0xfe, 0x81, + 0x03, 0x2d, 0xb1, 0x54, 0x52, 0x85, 0x5e, 0x85, 0x45, 0x35, 0x22, 0x1e, 0xc7, 0x51, 0x2c, 0xd9, + 0xdf, 0x06, 0xd9, 0x26, 0xb4, 0x15, 0x30, 0x89, 0x79, 0x30, 0xf6, 0x87, 0x5c, 0xca, 0x5b, 0x01, + 0x67, 0x5b, 0x59, 0x8b, 0x71, 0x34, 0x4d, 0x85, 0x12, 0x6b, 0x6e, 0xb5, 0xe4, 0xa0, 0x3c, 0xc4, + 0x3c, 0x9b, 0xc4, 0xfd, 0x8e, 0x03, 0x0c, 0x87, 0xf5, 0x38, 0x12, 0xd5, 0x72, 0x15, 0xf2, 0x3b, + 0xe0, 0xbc, 0xf2, 0x0e, 0x54, 0xce, 0xda, 0x81, 0xab, 0x30, 0x47, 0x5d, 0xa2, 0xac, 0x56, 0x0b, + 0xc3, 0x92, 0x75, 0xee, 0xf7, 0x1c, 0x68, 0xa1, 0xe6, 0x08, 0xf9, 0x68, 0x3f, 0x0a, 0xc2, 0x94, + 0xdd, 0x02, 0x76, 0x34, 0x0d, 0x07, 0x41, 0x38, 0xec, 0xa5, 0xcf, 0x83, 0x41, 0xef, 0x70, 0x86, + 0x4d, 0xd0, 0x78, 0x76, 0x2f, 0x78, 0x25, 0x75, 0xec, 0x1d, 0x68, 0x5b, 0x68, 0x92, 0xc6, 0x62, + 0x54, 0xbb, 0x17, 0xbc, 0x42, 0x0d, 0xca, 0x7f, 0x34, 0x4d, 0x27, 0xd3, 0xb4, 0x17, 0x84, 0x03, + 0xfe, 0x9c, 0xd6, 0x6c, 0xd1, 0xb3, 0xb0, 0x3b, 0x4b, 0xd0, 0x32, 0xbf, 0x73, 0x3f, 0x07, 0xed, + 0x3d, 0x54, 0x0c, 0x61, 0x10, 0x0e, 0x6f, 0x0b, 0xe9, 0x45, 0x6d, 0x35, 0x99, 0x1e, 0x3e, 0xe3, + 0x33, 0xb9, 0x8f, 0xb2, 0x84, 0x22, 0x71, 0x1c, 0x25, 0xa9, 0x5c, 0x17, 0xfa, 0xed, 0xfe, 0x8b, + 0x03, 0xcb, 0xb8, 0xe8, 0x1f, 0xf9, 0xe1, 0x4c, 0xad, 0xf8, 0x1e, 0xb4, 0xb0, 0xa9, 0xc7, 0xd1, + 0x6d, 0xa1, 0xf3, 0x84, 0x2c, 0x5f, 0x97, 0x8b, 0x94, 0xa3, 0xbe, 0x61, 0x92, 0xa2, 0x99, 0x9e, + 0x79, 0xd6, 0xd7, 0x28, 0x74, 0xa9, 0x1f, 0x0f, 0x79, 0x4a, 0xda, 0x50, 0x6a, 0x47, 0x10, 0xd0, + 0x76, 0x14, 0x1e, 0xb1, 0x2b, 0xd0, 0x4a, 0xfc, 0xb4, 0x37, 0xe1, 0x31, 0xad, 0x1a, 0x09, 0x4e, + 0xd5, 0x83, 0xc4, 0x4f, 0xf7, 0x79, 0x7c, 0x67, 0x96, 0xf2, 0xee, 0xe7, 0x61, 0xa5, 0xd0, 0x0b, + 0xca, 0x6a, 0x36, 0x45, 0xfc, 0xc9, 0xd6, 0xa0, 0x7e, 0xe2, 0x8f, 0xa6, 0x5c, 0x2a, 0x69, 0x51, + 0xf8, 0xa0, 0xf2, 0xbe, 0xe3, 0xbe, 0x0d, 0xed, 0x6c, 0xd8, 0x92, 0xe9, 0x19, 0xd4, 0x70, 0x05, + 0x65, 0x03, 0xf4, 0xdb, 0xfd, 0x0d, 0x47, 0x10, 0x6e, 0x47, 0x81, 0x56, 0x78, 0x48, 0x88, 0x7a, + 0x51, 0x11, 0xe2, 0xef, 0x33, 0x0d, 0xc2, 0x4f, 0x3f, 0x59, 0xf7, 0x1a, 0xac, 0x18, 0x43, 0x78, + 0xc9, 0x60, 0xbf, 0xe3, 0xc0, 0xca, 0x43, 0x7e, 0x2a, 0x77, 0x5d, 0x8d, 0xf6, 0x7d, 0xa8, 0xa5, + 0xb3, 0x89, 0x70, 0xb2, 0x96, 0xb6, 0xae, 0xca, 0x4d, 0x2b, 0xd0, 0xdd, 0x90, 0xc5, 0xc7, 0xb3, + 0x09, 0xf7, 0xe8, 0x0b, 0xf7, 0x73, 0xd0, 0x34, 0x40, 0xb6, 0x01, 0xab, 0x4f, 0x1f, 0x3c, 0x7e, + 0xb8, 0x73, 0x70, 0xd0, 0xdb, 0x7f, 0x72, 0xe7, 0x8b, 0x3b, 0xbf, 0xd2, 0xdb, 0xbd, 0x7d, 0xb0, + 0xdb, 0xbe, 0xc0, 0xd6, 0x81, 0x3d, 0xdc, 0x39, 0x78, 0xbc, 0x73, 0xd7, 0xc2, 0x1d, 0xb7, 0x0b, + 0x9d, 0x87, 0xfc, 0xf4, 0x69, 0x90, 0x86, 0x3c, 0x49, 0xec, 0xde, 0xdc, 0x1b, 0xc0, 0xcc, 0x21, + 0xc8, 0x59, 0x75, 0x60, 0x5e, 0x5a, 0x1c, 0x65, 0x70, 0x65, 0xd1, 0x7d, 0x1b, 0xd8, 0x41, 0x30, + 0x0c, 0x3f, 0xe2, 0x49, 0xe2, 0x0f, 0xb5, 0x2a, 0x68, 0x43, 0x75, 0x9c, 0x0c, 0xa5, 0x06, 0xc0, + 0x9f, 0xee, 0xa7, 0x60, 0xd5, 0xa2, 0x93, 0x0d, 0xbf, 0x0e, 0x8d, 0x24, 0x18, 0x86, 0x7e, 0x3a, + 0x8d, 0xb9, 0x6c, 0x3a, 0x03, 0xdc, 0x7b, 0xb0, 0xf6, 0x65, 0x1e, 0x07, 0x47, 0xb3, 0xf3, 0x9a, + 0xb7, 0xdb, 0xa9, 0xe4, 0xdb, 0xd9, 0x81, 0x8b, 0xb9, 0x76, 0x64, 0xf7, 0x82, 0x11, 0xe5, 0x76, + 0x2d, 0x78, 0xa2, 0x60, 0x88, 0x65, 0xc5, 0x14, 0x4b, 0xf7, 0x09, 0xb0, 0xed, 0x28, 0x0c, 0x79, + 0x3f, 0xdd, 0xe7, 0x3c, 0xce, 0x3c, 0xe7, 0x8c, 0xeb, 0x9a, 0x5b, 0x1b, 0x72, 0x1f, 0xf3, 0xb2, + 0x2e, 0xd9, 0x91, 0x41, 0x6d, 0xc2, 0xe3, 0x31, 0x35, 0xbc, 0xe0, 0xd1, 0x6f, 0xf7, 0x22, 0xac, + 0x5a, 0xcd, 0x4a, 0xa7, 0xe7, 0x5d, 0xb8, 0x78, 0x37, 0x48, 0xfa, 0xc5, 0x0e, 0x3b, 0x30, 0x3f, + 0x99, 0x1e, 0xf6, 0x32, 0x99, 0x52, 0x45, 0xf4, 0x05, 0xf2, 0x9f, 0xc8, 0xc6, 0x7e, 0xdb, 0x81, + 0xda, 0xee, 0xe3, 0xbd, 0x6d, 0xd6, 0x85, 0x85, 0x20, 0xec, 0x47, 0x63, 0x54, 0xbb, 0x62, 0xd2, + 0xba, 0x7c, 0xa6, 0xac, 0xbc, 0x0e, 0x0d, 0xd2, 0xd6, 0xe8, 0xde, 0x48, 0x27, 0x37, 0x03, 0xd0, + 0xb5, 0xe2, 0xcf, 0x27, 0x41, 0x4c, 0xbe, 0x93, 0xf2, 0x88, 0x6a, 0xa4, 0x11, 0x8b, 0x15, 0xee, + 0xff, 0xd4, 0x60, 0x5e, 0xea, 0x6a, 0xea, 0xaf, 0x9f, 0x06, 0x27, 0x5c, 0x8e, 0x44, 0x96, 0xd0, + 0xca, 0xc5, 0x7c, 0x1c, 0xa5, 0xbc, 0x67, 0x6d, 0x83, 0x0d, 0x22, 0x55, 0x5f, 0x34, 0xd4, 0x9b, + 0xa0, 0xd6, 0xa7, 0x91, 0x35, 0x3c, 0x1b, 0xc4, 0xc5, 0x42, 0xa0, 0x17, 0x0c, 0x68, 0x4c, 0x35, + 0x4f, 0x15, 0x71, 0x25, 0xfa, 0xfe, 0xc4, 0xef, 0x07, 0xe9, 0x4c, 0x0a, 0xb7, 0x2e, 0x63, 0xdb, + 0xa3, 0xa8, 0xef, 0x8f, 0x7a, 0x87, 0xfe, 0xc8, 0x0f, 0xfb, 0x5c, 0xfa, 0x6f, 0x36, 0x88, 0x2e, + 0x9a, 0x1c, 0x92, 0x22, 0x13, 0x6e, 0x5c, 0x0e, 0x45, 0x57, 0xaf, 0x1f, 0x8d, 0xc7, 0x41, 0x8a, + 0x9e, 0x1d, 0x59, 0xfd, 0xaa, 0x67, 0x20, 0x34, 0x13, 0x51, 0x3a, 0x15, 0xab, 0xd7, 0x10, 0xbd, + 0x59, 0x20, 0xb6, 0x82, 0xae, 0x03, 0x2a, 0xa4, 0x67, 0xa7, 0x1d, 0x10, 0xad, 0x64, 0x08, 0xee, + 0xc3, 0x34, 0x4c, 0x78, 0x9a, 0x8e, 0xf8, 0x40, 0x0f, 0xa8, 0x49, 0x64, 0xc5, 0x0a, 0x76, 0x0b, + 0x56, 0x85, 0xb3, 0x99, 0xf8, 0x69, 0x94, 0x1c, 0x07, 0x49, 0x2f, 0x41, 0xb7, 0xad, 0x45, 0xf4, + 0x65, 0x55, 0xec, 0x7d, 0xd8, 0xc8, 0xc1, 0x31, 0xef, 0xf3, 0xe0, 0x84, 0x0f, 0x3a, 0x8b, 0xf4, + 0xd5, 0x59, 0xd5, 0xec, 0x0a, 0x34, 0xd1, 0xc7, 0x9e, 0x4e, 0x06, 0x3e, 0xda, 0xe1, 0x25, 0xda, + 0x07, 0x13, 0x62, 0xef, 0xc2, 0xe2, 0x84, 0x0b, 0x63, 0x79, 0x9c, 0x8e, 0xfa, 0x49, 0x67, 0x99, + 0x2c, 0x59, 0x53, 0x0a, 0x13, 0x72, 0xae, 0x67, 0x53, 0x20, 0x53, 0xf6, 0x13, 0x72, 0xb6, 0xfc, + 0x59, 0xa7, 0x4d, 0xec, 0x96, 0x01, 0x24, 0x23, 0x71, 0x70, 0xe2, 0xa7, 0xbc, 0xb3, 0x42, 0xbc, + 0xa5, 0x8a, 0xee, 0x9f, 0x38, 0xb0, 0xba, 0x17, 0x24, 0xa9, 0x64, 0x42, 0xad, 0x8e, 0xdf, 0x84, + 0xa6, 0x60, 0xbf, 0x5e, 0x14, 0x8e, 0x66, 0x92, 0x23, 0x41, 0x40, 0x8f, 0xc2, 0xd1, 0x8c, 0x7d, + 0x02, 0x16, 0x83, 0xd0, 0x24, 0x11, 0x32, 0xdc, 0x52, 0x20, 0x11, 0xbd, 0x09, 0xcd, 0xc9, 0xf4, + 0x70, 0x14, 0xf4, 0x05, 0x49, 0x55, 0xb4, 0x22, 0x20, 0x22, 0x40, 0x27, 0x49, 0x8c, 0x44, 0x50, + 0xd4, 0x88, 0xa2, 0x29, 0x31, 0x24, 0x71, 0xef, 0xc0, 0x9a, 0x3d, 0x40, 0xa9, 0xac, 0x36, 0x61, + 0x41, 0xf2, 0x76, 0xd2, 0x69, 0xd2, 0xfa, 0x2c, 0xc9, 0xf5, 0x91, 0xa4, 0x9e, 0xae, 0x77, 0xff, + 0xbc, 0x06, 0xab, 0x12, 0xdd, 0x1e, 0x45, 0x09, 0x3f, 0x98, 0x8e, 0xc7, 0x7e, 0x5c, 0x22, 0x34, + 0xce, 0x39, 0x42, 0x53, 0xb1, 0x85, 0x06, 0x59, 0xf9, 0xd8, 0x0f, 0x42, 0xe1, 0xe1, 0x09, 0x89, + 0x33, 0x10, 0x76, 0x1d, 0x96, 0xfb, 0xa3, 0x28, 0x11, 0x5e, 0x8f, 0x79, 0x7c, 0xca, 0xc3, 0x45, + 0x21, 0xaf, 0x97, 0x09, 0xb9, 0x29, 0xa4, 0x73, 0x39, 0x21, 0x75, 0xa1, 0x85, 0x8d, 0x72, 0xa5, + 0x73, 0xe6, 0x85, 0x17, 0x66, 0x62, 0x38, 0x9e, 0xbc, 0x48, 0x08, 0xf9, 0x5b, 0x2e, 0x13, 0x08, + 0x3c, 0x9d, 0xa1, 0x4e, 0x33, 0xa8, 0x1b, 0x52, 0x20, 0x8a, 0x55, 0xec, 0x1e, 0x80, 0xe8, 0x8b, + 0xcc, 0x38, 0x90, 0x19, 0x7f, 0xdb, 0xde, 0x11, 0x73, 0xed, 0x6f, 0x60, 0x61, 0x1a, 0x73, 0x32, + 0xe4, 0xc6, 0x97, 0xee, 0xc7, 0xd0, 0x34, 0xaa, 0xd8, 0x45, 0x58, 0xd9, 0x7e, 0xf4, 0x68, 0x7f, + 0xc7, 0xbb, 0xfd, 0xf8, 0xc1, 0x97, 0x77, 0x7a, 0xdb, 0x7b, 0x8f, 0x0e, 0x76, 0xda, 0x17, 0x10, + 0xde, 0x7b, 0xb4, 0x7d, 0x7b, 0xaf, 0x77, 0xef, 0x91, 0xb7, 0xad, 0x60, 0x07, 0x6d, 0xbc, 0xb7, + 0xf3, 0xd1, 0xa3, 0xc7, 0x3b, 0x16, 0x5e, 0x61, 0x6d, 0x68, 0xdd, 0xf1, 0x76, 0x6e, 0x6f, 0xef, + 0x4a, 0xa4, 0xca, 0xd6, 0xa0, 0x7d, 0xef, 0xc9, 0xc3, 0xbb, 0x0f, 0x1e, 0xde, 0xef, 0x6d, 0xdf, + 0x7e, 0xb8, 0xbd, 0xb3, 0xb7, 0x73, 0xb7, 0x5d, 0x73, 0xff, 0xd6, 0x81, 0x8b, 0x34, 0xca, 0x41, + 0x5e, 0x20, 0xae, 0x40, 0xb3, 0x1f, 0x45, 0x13, 0x8e, 0xfa, 0x5b, 0xab, 0x68, 0x13, 0x42, 0x66, + 0x17, 0x0a, 0xf1, 0x28, 0x8a, 0xfb, 0x5c, 0xca, 0x03, 0x10, 0x74, 0x0f, 0x11, 0x64, 0x76, 0xb9, + 0x9d, 0x82, 0x42, 0x88, 0x43, 0x53, 0x60, 0x82, 0x64, 0x1d, 0xe6, 0x0e, 0x63, 0xee, 0xf7, 0x8f, + 0xa5, 0x24, 0xc8, 0x12, 0xfb, 0x64, 0xe6, 0x90, 0xf7, 0x71, 0xb5, 0x47, 0x7c, 0x40, 0x1c, 0xb2, + 0xe0, 0x2d, 0x4b, 0x7c, 0x5b, 0xc2, 0xee, 0x3e, 0xac, 0xe7, 0x67, 0x20, 0x25, 0xe6, 0x3d, 0x43, + 0x62, 0x84, 0x6f, 0xdc, 0x3d, 0x7b, 0x7f, 0x0c, 0xe9, 0xf9, 0x77, 0x07, 0x6a, 0x68, 0x3e, 0xcf, + 0x36, 0xb5, 0xa6, 0x47, 0x54, 0xb5, 0x3c, 0x22, 0x0a, 0x1e, 0xe0, 0x99, 0x42, 0x28, 0x54, 0x61, + 0x74, 0x0c, 0x24, 0xab, 0x8f, 0x79, 0xff, 0x84, 0xe6, 0xa4, 0xeb, 0x11, 0x41, 0x96, 0x47, 0xc7, + 0x93, 0xbe, 0x96, 0x2c, 0xaf, 0xca, 0xaa, 0x8e, 0xbe, 0x9c, 0xcf, 0xea, 0xe8, 0xbb, 0x0e, 0xcc, + 0x07, 0xe1, 0x61, 0x34, 0x0d, 0x07, 0xc4, 0xe2, 0x0b, 0x9e, 0x2a, 0xa2, 0xaa, 0x9c, 0x90, 0xe8, + 0x05, 0x63, 0xc5, 0xd0, 0x19, 0xe0, 0x32, 0x3c, 0x98, 0x24, 0xe4, 0x2e, 0x68, 0x2f, 0xf0, 0x3d, + 0x58, 0x31, 0x30, 0xb9, 0x9a, 0x6f, 0x41, 0x7d, 0x82, 0x80, 0x5c, 0x4a, 0xa5, 0x9c, 0xc9, 0xcf, + 0x10, 0x35, 0x6e, 0x1b, 0x96, 0xee, 0xf3, 0xf4, 0x41, 0x78, 0x14, 0xa9, 0x96, 0x7e, 0x54, 0x85, + 0x65, 0x0d, 0xc9, 0x86, 0xae, 0xc3, 0x72, 0x30, 0xe0, 0x61, 0x1a, 0xa4, 0xb3, 0x9e, 0x75, 0xfe, + 0xc9, 0xc3, 0xe8, 0x9f, 0xf9, 0xa3, 0xc0, 0x4f, 0xa4, 0x07, 0x20, 0x0a, 0x6c, 0x0b, 0xd6, 0xd0, + 0x78, 0x28, 0x7b, 0xa0, 0xb7, 0x58, 0x1c, 0xc3, 0x4a, 0xeb, 0x50, 0xbc, 0x11, 0x97, 0xfa, 0x5b, + 0x7f, 0x22, 0xfc, 0x94, 0xb2, 0x2a, 0x5c, 0x35, 0xd1, 0x12, 0x4e, 0xb9, 0x2e, 0x0c, 0x8c, 0x06, + 0x0a, 0x21, 0xa0, 0x39, 0xa1, 0x7c, 0xf2, 0x21, 0x20, 0x23, 0x8c, 0xb4, 0x50, 0x08, 0x23, 0xa1, + 0x72, 0x9a, 0x85, 0x7d, 0x3e, 0xe8, 0xa5, 0x51, 0x8f, 0x94, 0x28, 0xed, 0xce, 0x82, 0x97, 0x87, + 0x29, 0xe0, 0xc5, 0x93, 0x34, 0xe4, 0x29, 0xe9, 0x99, 0x05, 0x4f, 0x15, 0x51, 0x7e, 0x88, 0x44, + 0x98, 0x84, 0x86, 0x27, 0x4b, 0xe8, 0x68, 0x4e, 0xe3, 0x20, 0xe9, 0xb4, 0x08, 0xa5, 0xdf, 0xec, + 0xd3, 0x70, 0xf1, 0x90, 0x27, 0x69, 0xef, 0x98, 0xfb, 0x03, 0x1e, 0xd3, 0xee, 0x8b, 0xe8, 0x94, + 0xb0, 0xdf, 0xe5, 0x95, 0xd8, 0xf7, 0x09, 0x8f, 0x93, 0x20, 0x0a, 0xc9, 0x72, 0x37, 0x3c, 0x55, + 0x74, 0xbf, 0x49, 0xfe, 0xb0, 0x8e, 0x9b, 0x3d, 0x21, 0x63, 0xce, 0x5e, 0x83, 0x86, 0x98, 0x63, + 0x72, 0xec, 0x4b, 0x17, 0x7d, 0x81, 0x80, 0x83, 0x63, 0x1f, 0x35, 0x82, 0xb5, 0x6c, 0x22, 0x10, + 0xd9, 0x24, 0x6c, 0x57, 0xac, 0xda, 0x55, 0x58, 0x52, 0x11, 0xb9, 0xa4, 0x37, 0xe2, 0x47, 0xa9, + 0x3a, 0x5e, 0x87, 0xd3, 0x31, 0x76, 0x97, 0xec, 0xf1, 0xa3, 0xd4, 0x7d, 0x08, 0x2b, 0x52, 0x86, + 0x1f, 0x4d, 0xb8, 0xea, 0xfa, 0xb3, 0x65, 0xd6, 0xad, 0xb9, 0xb5, 0x6a, 0x0b, 0x3d, 0xc5, 0x08, + 0x72, 0x26, 0xcf, 0xf5, 0x80, 0x99, 0x3a, 0x41, 0x36, 0x28, 0x4d, 0x8c, 0x3a, 0xc4, 0xcb, 0xe9, + 0x58, 0x18, 0xae, 0x4f, 0x32, 0xed, 0xf7, 0x51, 0x13, 0x08, 0x0d, 0xa8, 0x8a, 0xee, 0xf7, 0x1d, + 0x58, 0xa5, 0xd6, 0x94, 0x7d, 0xd6, 0x27, 0xbf, 0x57, 0x1f, 0x66, 0xab, 0x6f, 0x06, 0x36, 0xd6, + 0xa0, 0x6e, 0xea, 0x5a, 0x51, 0xf8, 0xf1, 0xcf, 0xb2, 0xb5, 0xc2, 0x59, 0xf6, 0x47, 0x0e, 0xac, + 0x08, 0x65, 0x98, 0xfa, 0xe9, 0x34, 0x91, 0xd3, 0xff, 0x05, 0x58, 0x14, 0x76, 0x4a, 0x8a, 0x93, + 0x1c, 0xe8, 0x9a, 0x96, 0x7c, 0x42, 0x05, 0xf1, 0xee, 0x05, 0xcf, 0x26, 0x66, 0x9f, 0x87, 0x96, + 0x19, 0x56, 0xa5, 0x31, 0x37, 0xb7, 0x2e, 0xa9, 0x59, 0x16, 0x38, 0x67, 0xf7, 0x82, 0x67, 0x7d, + 0xc0, 0x3e, 0x24, 0x67, 0x23, 0xec, 0x51, 0xb3, 0x32, 0x30, 0x75, 0xa9, 0x44, 0x81, 0xeb, 0xcf, + 0x0d, 0xf2, 0x3b, 0x0b, 0x30, 0x27, 0xbc, 0x4b, 0xf7, 0x3e, 0x2c, 0x5a, 0x23, 0xb5, 0xce, 0xe8, + 0x2d, 0x71, 0x46, 0x2f, 0x84, 0x74, 0x2a, 0xc5, 0x90, 0x8e, 0xfb, 0xed, 0x2a, 0x30, 0xe4, 0xb6, + 0xdc, 0x76, 0xa2, 0x7b, 0x1b, 0x0d, 0xac, 0xc3, 0x4a, 0xcb, 0x33, 0x21, 0x76, 0x03, 0x98, 0x51, + 0x54, 0x51, 0x2f, 0x61, 0x37, 0x4a, 0x6a, 0x50, 0xc1, 0x49, 0xc3, 0x2a, 0x4d, 0xa0, 0x3c, 0x96, + 0x89, 0x7d, 0x2b, 0xad, 0x43, 0xd3, 0x30, 0x99, 0x26, 0xc7, 0xe8, 0x7e, 0xab, 0xe3, 0x8c, 0x2a, + 0xe7, 0x19, 0x64, 0xee, 0x5c, 0x06, 0x99, 0xcf, 0x33, 0x88, 0xe9, 0x50, 0x2f, 0x58, 0x0e, 0x35, + 0x3a, 0x72, 0x63, 0x74, 0xff, 0xd2, 0x51, 0xbf, 0x37, 0xc6, 0xde, 0xe5, 0xe9, 0xc5, 0x02, 0xd9, + 0x26, 0xb4, 0xa5, 0x2b, 0x90, 0x79, 0xed, 0x40, 0x6b, 0x5c, 0xc0, 0x51, 0xf3, 0xe2, 0xc7, 0xa4, + 0x01, 0xe8, 0x04, 0x53, 0xf7, 0x32, 0xc0, 0xfd, 0xa1, 0x03, 0x6d, 0xdc, 0x05, 0x8b, 0x53, 0x3f, + 0x00, 0x12, 0x94, 0x57, 0x64, 0x54, 0x8b, 0xf6, 0xa7, 0xe7, 0xd3, 0xf7, 0xa1, 0x41, 0x0d, 0x46, + 0x13, 0x1e, 0x4a, 0x36, 0xed, 0xd8, 0x6c, 0x9a, 0xe9, 0xa8, 0xdd, 0x0b, 0x5e, 0x46, 0x6c, 0x30, + 0xe9, 0x3f, 0x39, 0xd0, 0x94, 0xc3, 0xfc, 0x89, 0xcf, 0xe9, 0x5d, 0x58, 0x40, 0x7e, 0x35, 0x0e, + 0xc3, 0xba, 0x8c, 0xb6, 0x66, 0xec, 0xa7, 0xd3, 0x18, 0x8d, 0xab, 0x75, 0x46, 0xcf, 0xc3, 0x68, + 0x29, 0x49, 0x1d, 0x27, 0xbd, 0x34, 0x18, 0xf5, 0x54, 0xad, 0xbc, 0xe3, 0x28, 0xab, 0x42, 0xad, + 0x94, 0xa4, 0xfe, 0x90, 0x4b, 0x23, 0x28, 0x0a, 0x6e, 0x07, 0xd6, 0xe5, 0x84, 0x72, 0x9e, 0xa5, + 0xfb, 0x37, 0x2d, 0xd8, 0x28, 0x54, 0xe9, 0x4b, 0x42, 0x79, 0xf8, 0x1c, 0x05, 0xe3, 0xc3, 0x48, + 0xbb, 0xe1, 0x8e, 0x79, 0x2e, 0xb5, 0xaa, 0xd8, 0x10, 0x2e, 0x2a, 0x6b, 0x8f, 0x6b, 0x9a, 0xd9, + 0xf6, 0x0a, 0xb9, 0x29, 0xef, 0xda, 0x3c, 0x90, 0xef, 0x50, 0xe1, 0xa6, 0x5c, 0x97, 0xb7, 0xc7, + 0x8e, 0xa1, 0xa3, 0xdd, 0x0a, 0x69, 0x00, 0x0c, 0xd7, 0x03, 0xfb, 0x7a, 0xe7, 0x9c, 0xbe, 0x2c, + 0x37, 0xd5, 0x3b, 0xb3, 0x35, 0x36, 0x83, 0xcb, 0xaa, 0x8e, 0x34, 0x7c, 0xb1, 0xbf, 0xda, 0x2b, + 0xcd, 0x8d, 0x5c, 0x6c, 0xbb, 0xd3, 0x73, 0x1a, 0x66, 0x5f, 0x87, 0xf5, 0x53, 0x3f, 0x48, 0xd5, + 0xb0, 0x0c, 0x57, 0xa9, 0x4e, 0x5d, 0x6e, 0x9d, 0xd3, 0xe5, 0x53, 0xf1, 0xb1, 0x65, 0xf6, 0xce, + 0x68, 0xb1, 0xfb, 0x0f, 0x0e, 0x2c, 0xd9, 0xed, 0x20, 0x9b, 0x4a, 0x75, 0xa0, 0xd4, 0xa2, 0x72, + 0x0d, 0x73, 0x70, 0xf1, 0x24, 0x5b, 0x29, 0x3b, 0xc9, 0x9a, 0xe7, 0xc7, 0xea, 0x79, 0x41, 0x9e, + 0xda, 0xab, 0x05, 0x79, 0xea, 0x65, 0x41, 0x9e, 0xee, 0x7f, 0x3b, 0xc0, 0x8a, 0xbc, 0xc4, 0xee, + 0x8b, 0xa3, 0x74, 0xc8, 0x47, 0x52, 0x27, 0xfd, 0xfc, 0xab, 0xf1, 0xa3, 0x5a, 0x3b, 0xf5, 0x35, + 0x0a, 0x86, 0xa9, 0x74, 0x4c, 0x07, 0x6a, 0xd1, 0x2b, 0xab, 0xca, 0x85, 0x9d, 0x6a, 0xe7, 0x87, + 0x9d, 0xea, 0xe7, 0x87, 0x9d, 0xe6, 0xf2, 0x61, 0xa7, 0xee, 0x6f, 0x39, 0xb0, 0x5a, 0xb2, 0xe9, + 0x3f, 0xbb, 0x89, 0xe3, 0x36, 0x59, 0xba, 0xa0, 0x22, 0xb7, 0xc9, 0x04, 0xbb, 0xbf, 0x0e, 0x8b, + 0x16, 0xa3, 0xff, 0xec, 0xfa, 0xcf, 0xfb, 0x80, 0x82, 0xcf, 0x2c, 0xac, 0xfb, 0x1f, 0x15, 0x60, + 0x45, 0x61, 0xfb, 0x7f, 0x1d, 0x43, 0x71, 0x9d, 0xaa, 0x25, 0xeb, 0xf4, 0x7f, 0x6a, 0x07, 0xde, + 0x81, 0x15, 0x99, 0x51, 0x60, 0x04, 0x50, 0x04, 0xc7, 0x14, 0x2b, 0xd0, 0x0b, 0xb6, 0x63, 0x7e, + 0x0b, 0xd6, 0x4d, 0xb4, 0x61, 0x0c, 0x73, 0xa1, 0x3f, 0x77, 0x1d, 0xd6, 0x44, 0x86, 0xc2, 0x1d, + 0xd1, 0x94, 0xb2, 0x2b, 0x7f, 0xec, 0xc0, 0xc5, 0x5c, 0x45, 0x76, 0x6f, 0x2a, 0x4c, 0x87, 0x6d, + 0x4f, 0x6c, 0x10, 0xc7, 0x2f, 0xe5, 0xc8, 0x18, 0xbf, 0xe0, 0xb6, 0x62, 0x05, 0xae, 0xcf, 0x34, + 0x2c, 0xd2, 0x8b, 0x55, 0x2f, 0xab, 0x72, 0x37, 0x44, 0x1e, 0x45, 0xc8, 0x47, 0xb9, 0x81, 0x1f, + 0x89, 0xcc, 0x07, 0xb3, 0x22, 0xbb, 0x78, 0xb1, 0x87, 0xac, 0x8a, 0xe8, 0x23, 0x5a, 0x66, 0xca, + 0x1e, 0x6f, 0x69, 0x9d, 0xfb, 0x57, 0x0e, 0xb0, 0x2f, 0x4d, 0x79, 0x3c, 0xa3, 0xfb, 0x53, 0x1d, + 0xe9, 0xd9, 0xc8, 0x47, 0x39, 0xe6, 0x26, 0xd3, 0xc3, 0x2f, 0xf2, 0x99, 0xba, 0x65, 0xaf, 0x64, + 0xb7, 0xec, 0x6f, 0x00, 0xe0, 0xe1, 0x4c, 0x5f, 0xca, 0x92, 0x6f, 0x16, 0x4e, 0xc7, 0xa2, 0xc1, + 0xd2, 0x8b, 0xf0, 0xda, 0xf9, 0x17, 0xe1, 0xf5, 0xf3, 0x2e, 0xc2, 0x3f, 0x84, 0x55, 0x6b, 0xdc, + 0x7a, 0x5b, 0xd5, 0xf5, 0xb0, 0xf3, 0x92, 0xeb, 0xe1, 0xff, 0x74, 0xa0, 0xba, 0x1b, 0x4d, 0xcc, + 0xa8, 0xa6, 0x63, 0x47, 0x35, 0xa5, 0x2d, 0xe9, 0x69, 0x53, 0x21, 0x55, 0x8c, 0x05, 0xb2, 0x4d, + 0x58, 0xf2, 0xc7, 0x29, 0x1e, 0xca, 0x8f, 0xa2, 0xf8, 0xd4, 0x8f, 0x07, 0x62, 0xaf, 0xef, 0x54, + 0x3a, 0x8e, 0x97, 0xab, 0x61, 0x6b, 0x50, 0xd5, 0x4a, 0x97, 0x08, 0xb0, 0x88, 0x8e, 0x1b, 0xdd, + 0x88, 0xcc, 0x64, 0x3c, 0x41, 0x96, 0x90, 0x95, 0xec, 0xef, 0x85, 0x23, 0x2d, 0x44, 0xa7, 0xac, + 0x0a, 0xed, 0x1a, 0x2e, 0x1f, 0x91, 0xc9, 0x40, 0x90, 0x2a, 0xbb, 0xff, 0xe6, 0x40, 0x9d, 0x56, + 0x00, 0x85, 0x5d, 0x70, 0xb8, 0x0e, 0x5f, 0xd2, 0xcc, 0x17, 0xbd, 0x3c, 0xcc, 0x5c, 0x2b, 0x1b, + 0xa5, 0xa2, 0x87, 0x6d, 0x66, 0xa4, 0x5c, 0x81, 0x86, 0x28, 0xe9, 0xcc, 0x0b, 0x22, 0xc9, 0x40, + 0x76, 0x19, 0x6a, 0xc7, 0xd1, 0x44, 0x79, 0x27, 0xa0, 0xa2, 0xf7, 0xd1, 0xc4, 0x23, 0x3c, 0x1b, + 0x0f, 0xb6, 0x27, 0x06, 0x2f, 0x6c, 0x4e, 0x1e, 0x46, 0xab, 0xab, 0x9b, 0x35, 0x17, 0x23, 0x87, + 0xba, 0x9b, 0xb0, 0xfc, 0x30, 0x1a, 0x70, 0x23, 0xe2, 0x74, 0x26, 0x37, 0xbb, 0xdf, 0x72, 0x60, + 0x41, 0x11, 0xb3, 0xeb, 0x50, 0x43, 0x57, 0x22, 0x77, 0x50, 0xd0, 0xb7, 0x76, 0x48, 0xe7, 0x11, + 0x05, 0xea, 0x5e, 0x8a, 0x47, 0x64, 0x6e, 0xa5, 0x8a, 0x46, 0x64, 0x5e, 0x93, 0x1e, 0x6e, 0xce, + 0xd9, 0xc8, 0xa1, 0xee, 0x5f, 0x38, 0xb0, 0x68, 0xf5, 0x81, 0x87, 0xc7, 0x91, 0x9f, 0xa4, 0xf2, + 0x26, 0x44, 0x6e, 0x8f, 0x09, 0x99, 0x31, 0xc8, 0x8a, 0x1d, 0x83, 0xd4, 0xd1, 0xb1, 0xaa, 0x19, + 0x1d, 0xbb, 0x05, 0x8d, 0x2c, 0x67, 0xa8, 0x66, 0xe9, 0x54, 0xec, 0x51, 0xdd, 0x47, 0x66, 0x44, + 0xd8, 0x4e, 0x3f, 0x1a, 0x45, 0xb1, 0x0c, 0xc1, 0x8b, 0x82, 0xfb, 0x21, 0x34, 0x0d, 0x7a, 0x1c, + 0x46, 0xc8, 0xd3, 0xd3, 0x28, 0x7e, 0xa6, 0x42, 0xa1, 0xb2, 0xa8, 0xaf, 0xdd, 0x2b, 0xd9, 0xb5, + 0xbb, 0xfb, 0xf7, 0x0e, 0x2c, 0x22, 0x0f, 0x06, 0xe1, 0x70, 0x3f, 0x1a, 0x05, 0xfd, 0x19, 0xed, + 0xbd, 0x62, 0x37, 0xa9, 0x19, 0x14, 0x2f, 0xda, 0x30, 0xf2, 0xb6, 0x3a, 0x3b, 0x4a, 0x41, 0xd4, + 0x65, 0x94, 0x54, 0xe4, 0xf3, 0x43, 0x3f, 0x91, 0xcc, 0x2f, 0x8d, 0x9c, 0x05, 0xa2, 0x3c, 0x21, + 0x10, 0xfb, 0x29, 0xef, 0x8d, 0x83, 0xd1, 0x28, 0x10, 0xb4, 0xc2, 0x05, 0x2a, 0xab, 0xc2, 0x3e, + 0x07, 0x41, 0xe2, 0x1f, 0x66, 0x61, 0x66, 0x5d, 0x76, 0x7f, 0x50, 0x81, 0xa6, 0x54, 0xcf, 0x3b, + 0x83, 0x21, 0x97, 0x77, 0x20, 0xe4, 0x64, 0x6a, 0x55, 0x62, 0x20, 0xaa, 0xde, 0x72, 0x4b, 0x0d, + 0x24, 0xbf, 0xe5, 0xd5, 0xe2, 0x96, 0xbf, 0x0e, 0x0d, 0x64, 0xbd, 0x77, 0xc9, 0xff, 0x15, 0xf7, + 0x27, 0x19, 0xa0, 0x6a, 0xb7, 0xa8, 0xb6, 0x9e, 0xd5, 0x12, 0xf0, 0xd2, 0x1b, 0x93, 0xf7, 0xa1, + 0x25, 0x9b, 0xa1, 0x3d, 0x21, 0xcd, 0x91, 0x31, 0xbf, 0xb5, 0x5f, 0x9e, 0x45, 0xa9, 0xbe, 0xdc, + 0x52, 0x5f, 0x2e, 0x9c, 0xf7, 0xa5, 0xa2, 0xa4, 0xdb, 0x6d, 0xb1, 0x36, 0xf7, 0x63, 0x7f, 0x72, + 0xac, 0x4c, 0xde, 0x40, 0xa7, 0xec, 0x10, 0xcc, 0x36, 0xa1, 0x8e, 0x9f, 0x29, 0x4d, 0x5e, 0x2e, + 0x90, 0x82, 0x84, 0x5d, 0x87, 0x3a, 0x1f, 0x0c, 0xb9, 0x3a, 0xe1, 0x31, 0xfb, 0xac, 0x8d, 0x7b, + 0xe4, 0x09, 0x02, 0x54, 0x0f, 0x88, 0xe6, 0xd4, 0x83, 0x6d, 0x05, 0xe6, 0xb0, 0xf8, 0x60, 0xe0, + 0xae, 0x01, 0x7b, 0x28, 0x38, 0xda, 0x8c, 0x5f, 0x7f, 0xbb, 0x0a, 0x4d, 0x03, 0x46, 0x49, 0x1f, + 0xe2, 0x80, 0x7b, 0x83, 0xc0, 0x1f, 0xf3, 0x94, 0xc7, 0x92, 0x8b, 0x73, 0x28, 0xd2, 0xf9, 0x27, + 0xc3, 0x5e, 0x34, 0x4d, 0x7b, 0x03, 0x3e, 0x8c, 0xb9, 0x30, 0xcc, 0x68, 0x28, 0x2c, 0x14, 0xe9, + 0xc6, 0xfe, 0x73, 0x93, 0x4e, 0xf0, 0x43, 0x0e, 0x55, 0xd1, 0x68, 0xb1, 0x46, 0xb5, 0x2c, 0x1a, + 0x2d, 0x56, 0x24, 0xaf, 0xa3, 0xea, 0x25, 0x3a, 0xea, 0x3d, 0x58, 0x17, 0xda, 0x48, 0xca, 0x6d, + 0x2f, 0xc7, 0x26, 0x67, 0xd4, 0xb2, 0x4d, 0x68, 0xe3, 0x98, 0x15, 0x83, 0x27, 0xc1, 0x37, 0x45, + 0x7c, 0xc8, 0xf1, 0x0a, 0x38, 0xd2, 0x52, 0xa0, 0xc6, 0xa4, 0x15, 0xf7, 0x6d, 0x05, 0x9c, 0x68, + 0xfd, 0xe7, 0x36, 0x6d, 0x43, 0xd2, 0xe6, 0x70, 0x77, 0x11, 0x9a, 0x07, 0x69, 0x34, 0x51, 0x9b, + 0xb2, 0x04, 0x2d, 0x51, 0x94, 0xd9, 0x0d, 0xaf, 0xc1, 0x25, 0xe2, 0xa2, 0xc7, 0xd1, 0x24, 0x1a, + 0x45, 0xc3, 0xd9, 0xc1, 0xf4, 0x30, 0xe9, 0xc7, 0xc1, 0x04, 0x4f, 0x43, 0xee, 0x3f, 0x3a, 0xb0, + 0x6a, 0xd5, 0xca, 0x90, 0xd1, 0xa7, 0x05, 0x4b, 0xeb, 0x6b, 0x69, 0xc1, 0x78, 0x2b, 0x86, 0xaa, + 0x14, 0x84, 0x22, 0x94, 0xf7, 0x44, 0xde, 0x54, 0xdf, 0x86, 0x65, 0x35, 0x32, 0xf5, 0xa1, 0xe0, + 0xc2, 0x4e, 0x91, 0x0b, 0xe5, 0xf7, 0x4b, 0xf2, 0x03, 0xd5, 0xc4, 0x2f, 0xca, 0x7b, 0xcb, 0x01, + 0xcd, 0x51, 0xc5, 0x0e, 0xf4, 0xcd, 0x94, 0x79, 0x82, 0x50, 0x23, 0xe8, 0x6b, 0x30, 0x71, 0x7f, + 0xc7, 0x01, 0xc8, 0x46, 0x87, 0x8c, 0x91, 0xa9, 0x7b, 0x91, 0x4a, 0x6d, 0xa8, 0xf6, 0xb7, 0xa0, + 0xa5, 0xef, 0x54, 0x32, 0x0b, 0xd2, 0x54, 0x18, 0x3a, 0x79, 0xd7, 0x60, 0x79, 0x38, 0x8a, 0x0e, + 0xc9, 0xfc, 0x52, 0xba, 0x4c, 0x22, 0x73, 0x3c, 0x96, 0x04, 0x7c, 0x4f, 0xa2, 0x99, 0xb9, 0xa9, + 0x19, 0xe6, 0xc6, 0xfd, 0x4e, 0x45, 0x47, 0xe2, 0xb3, 0x39, 0x9f, 0x29, 0x65, 0x6c, 0xab, 0xa0, + 0x1c, 0xcf, 0x08, 0x7c, 0x53, 0x94, 0x6c, 0xff, 0xdc, 0x43, 0xfc, 0x87, 0xb0, 0x14, 0x0b, 0xed, + 0xa3, 0x54, 0x53, 0xed, 0x25, 0xaa, 0x69, 0x31, 0xb6, 0x6c, 0xd2, 0x27, 0xa1, 0xed, 0x0f, 0x4e, + 0x78, 0x9c, 0x06, 0x74, 0x8c, 0x22, 0x87, 0x40, 0x28, 0xd4, 0x65, 0x03, 0x27, 0x3b, 0x7d, 0x0d, + 0x96, 0x65, 0x5e, 0x8d, 0xa6, 0x94, 0xb9, 0xa0, 0x19, 0x8c, 0x84, 0xee, 0x9f, 0xaa, 0xa0, 0xbf, + 0xbd, 0x87, 0x67, 0xaf, 0x88, 0x39, 0xbb, 0x4a, 0x6e, 0x76, 0x9f, 0x90, 0x01, 0xf8, 0x81, 0x3a, + 0xab, 0x55, 0x8d, 0x3b, 0xee, 0x81, 0xbc, 0x30, 0xb1, 0x97, 0xb4, 0xf6, 0x2a, 0x4b, 0xea, 0xfe, + 0xd0, 0x81, 0xf9, 0xdd, 0x68, 0xb2, 0x2b, 0x6f, 0xfb, 0x49, 0x10, 0x74, 0xd6, 0x9a, 0x2a, 0xbe, + 0x24, 0x0f, 0xa0, 0xd4, 0x0e, 0x2f, 0xe6, 0xed, 0xf0, 0x2f, 0xc1, 0x6b, 0x14, 0x29, 0x88, 0xa3, + 0x49, 0x14, 0xa3, 0x30, 0xfa, 0x23, 0x61, 0x74, 0xa3, 0x30, 0x3d, 0x56, 0x6a, 0xec, 0x65, 0x24, + 0x74, 0x24, 0xc3, 0xa3, 0x84, 0x70, 0x94, 0xa5, 0xdf, 0x20, 0xb4, 0x5b, 0xb1, 0xc2, 0xfd, 0x2c, + 0x34, 0xc8, 0xf1, 0xa5, 0x69, 0xbd, 0x03, 0x8d, 0xe3, 0x68, 0xd2, 0x3b, 0x0e, 0xc2, 0x54, 0x09, + 0xf7, 0x52, 0xe6, 0x91, 0xee, 0xd2, 0x82, 0x68, 0x02, 0xf7, 0x0f, 0xeb, 0x30, 0xff, 0x20, 0x3c, + 0x89, 0x82, 0x3e, 0xdd, 0x0f, 0x8c, 0xf9, 0x38, 0x52, 0x39, 0x7c, 0xf8, 0x1b, 0x97, 0x82, 0xf2, + 0x59, 0x26, 0xa9, 0x0c, 0xf0, 0xab, 0x22, 0x9a, 0xfb, 0x38, 0xcb, 0xb3, 0x15, 0xa2, 0x63, 0x20, + 0xe8, 0xf4, 0xc7, 0x66, 0x4a, 0xb2, 0x2c, 0x65, 0x49, 0x90, 0x75, 0x23, 0x09, 0x92, 0x6e, 0x93, + 0x44, 0x66, 0x02, 0xf1, 0xd7, 0x82, 0xa7, 0x8a, 0x74, 0x48, 0x89, 0xb9, 0x88, 0xf0, 0x90, 0xe3, + 0x30, 0x2f, 0x0f, 0x29, 0x26, 0x88, 0xce, 0x85, 0xf8, 0x40, 0xd0, 0x08, 0xe5, 0x6b, 0x42, 0xe8, + 0x88, 0xe5, 0xb3, 0x9a, 0x1b, 0x82, 0xe7, 0x73, 0x30, 0x6a, 0xe8, 0x01, 0xd7, 0x8a, 0x54, 0xcc, + 0x01, 0x44, 0x1e, 0x71, 0x1e, 0x37, 0x8e, 0x36, 0x22, 0xe5, 0x48, 0x1d, 0x6d, 0x90, 0x51, 0xfc, + 0xd1, 0xe8, 0xd0, 0xef, 0x3f, 0xa3, 0xa4, 0x75, 0xca, 0x30, 0x6a, 0x78, 0x36, 0x48, 0xb9, 0x06, + 0xd9, 0x6e, 0xd2, 0x7d, 0x64, 0xcd, 0x33, 0x21, 0xb6, 0x05, 0x4d, 0x3a, 0xce, 0xc9, 0xfd, 0x5c, + 0xa2, 0xfd, 0x6c, 0x9b, 0xe7, 0x3d, 0xda, 0x51, 0x93, 0xc8, 0xbc, 0xb3, 0x58, 0xb6, 0xef, 0x2c, + 0x84, 0xd2, 0x94, 0x57, 0x3d, 0x6d, 0xea, 0x2d, 0x03, 0xd0, 0x9a, 0xca, 0x05, 0x13, 0x04, 0x2b, + 0x44, 0x60, 0x61, 0xec, 0x32, 0x2c, 0xe0, 0x21, 0x64, 0xe2, 0x07, 0x83, 0x0e, 0xd3, 0x67, 0x21, + 0x8d, 0x61, 0x1b, 0xea, 0x37, 0x5d, 0xc9, 0xac, 0xd2, 0xaa, 0x58, 0x18, 0xae, 0x8d, 0x2e, 0x93, + 0x10, 0xad, 0x89, 0x1d, 0xb5, 0x40, 0x37, 0x05, 0x76, 0x7b, 0x30, 0x90, 0xbc, 0xa9, 0x8f, 0xbe, + 0x19, 0x57, 0x39, 0x16, 0x57, 0x95, 0xec, 0x6e, 0xa5, 0x7c, 0x77, 0x5f, 0xba, 0x06, 0xee, 0x0e, + 0x34, 0xf7, 0x8d, 0xc4, 0x6d, 0x62, 0x72, 0x95, 0xb2, 0x2d, 0x05, 0xc3, 0x40, 0x8c, 0xe1, 0x54, + 0xcc, 0xe1, 0xb8, 0x7f, 0xe6, 0x00, 0xdb, 0x0b, 0x92, 0x54, 0x0f, 0x5f, 0xf4, 0xed, 0x42, 0x4b, + 0x07, 0x28, 0xb2, 0x6c, 0x2b, 0x0b, 0x43, 0x1a, 0x1a, 0x4a, 0x2f, 0x3a, 0x3a, 0x4a, 0xb8, 0xca, + 0xa4, 0xb0, 0x30, 0xe4, 0x50, 0xf4, 0x71, 0xd0, 0x5f, 0x08, 0x44, 0x0f, 0x89, 0xcc, 0xa8, 0x28, + 0xe0, 0xa8, 0x67, 0x63, 0x7e, 0xc2, 0xe3, 0x44, 0x8b, 0x96, 0x2e, 0xeb, 0xa4, 0xb0, 0xfc, 0x2a, + 0x6f, 0xc2, 0x82, 0x6e, 0xd7, 0x56, 0x21, 0x8a, 0x52, 0xd7, 0xa3, 0xaa, 0x22, 0x1f, 0xde, 0x1a, + 0xb4, 0x50, 0x9b, 0xc5, 0x0a, 0x76, 0x03, 0xd8, 0x51, 0x10, 0xe7, 0xc9, 0xab, 0x44, 0x5e, 0x52, + 0xe3, 0x3e, 0x85, 0x55, 0xd9, 0xa5, 0xe9, 0xdc, 0xd8, 0x9b, 0xe8, 0x9c, 0xc7, 0xc8, 0x95, 0x22, + 0x23, 0xbb, 0x3f, 0x70, 0x60, 0x5e, 0xee, 0x34, 0x6d, 0x4b, 0x3e, 0x83, 0xbf, 0xe1, 0x59, 0x58, + 0x79, 0xee, 0x76, 0x51, 0x39, 0x55, 0xcb, 0x94, 0x13, 0x83, 0xda, 0xc4, 0x4f, 0x8f, 0xe9, 0x54, + 0xda, 0xf0, 0xe8, 0x37, 0x6b, 0x8b, 0x48, 0x89, 0x50, 0x82, 0x14, 0x25, 0x29, 0x7b, 0xbe, 0x20, + 0x6c, 0x6d, 0x01, 0xc7, 0xd3, 0x05, 0x25, 0xaa, 0x08, 0x5c, 0xdf, 0x30, 0xc9, 0x14, 0xba, 0x0c, + 0xce, 0xf6, 0x53, 0x36, 0x91, 0xdf, 0x4f, 0x49, 0xea, 0xe9, 0x7a, 0xb7, 0x0b, 0x9d, 0xbb, 0x7c, + 0xc4, 0x53, 0x7e, 0x7b, 0x34, 0xca, 0xb7, 0xff, 0x1a, 0x5c, 0x2a, 0xa9, 0x93, 0xde, 0xe8, 0x3d, + 0x58, 0xb9, 0xcb, 0x0f, 0xa7, 0xc3, 0x3d, 0x7e, 0x92, 0x5d, 0x12, 0x33, 0xa8, 0x25, 0xc7, 0xd1, + 0xa9, 0xe4, 0x74, 0xfa, 0xcd, 0xde, 0x00, 0x18, 0x21, 0x4d, 0x2f, 0x99, 0xf0, 0xbe, 0xca, 0x5a, + 0x26, 0xe4, 0x60, 0xc2, 0xfb, 0xee, 0x7b, 0xc0, 0xcc, 0x76, 0xe4, 0x14, 0x50, 0xc1, 0x4f, 0x0f, + 0x7b, 0xc9, 0x2c, 0x49, 0xf9, 0x58, 0xa5, 0x63, 0x9b, 0x90, 0x7b, 0x0d, 0x5a, 0xfb, 0xfe, 0xcc, + 0xe3, 0xdf, 0x90, 0x8f, 0x28, 0x36, 0x60, 0x7e, 0xe2, 0xcf, 0x50, 0xee, 0x75, 0x40, 0x84, 0xaa, + 0xdd, 0xff, 0xaa, 0xc0, 0x9c, 0xa0, 0xc4, 0x56, 0x07, 0x3c, 0x49, 0x83, 0x50, 0x5c, 0x81, 0xca, + 0x56, 0x0d, 0xa8, 0xc0, 0x1b, 0x95, 0x12, 0xde, 0x90, 0xc7, 0x10, 0x95, 0x01, 0x2a, 0x99, 0xc0, + 0xc2, 0x90, 0x63, 0xb3, 0xc4, 0x13, 0x71, 0x22, 0xcf, 0x80, 0x5c, 0x84, 0x2c, 0x33, 0x23, 0x62, + 0x7c, 0x8a, 0xed, 0x25, 0x3b, 0x98, 0x50, 0xa9, 0xb1, 0x9a, 0x17, 0x5c, 0x53, 0x30, 0x56, 0x05, + 0xa3, 0xb4, 0xf0, 0x0a, 0x46, 0x49, 0x9c, 0x4d, 0x5e, 0x66, 0x94, 0xe0, 0x15, 0x8c, 0x92, 0xcb, + 0xa0, 0x7d, 0x8f, 0x73, 0x8f, 0xa3, 0xbb, 0xa3, 0xd8, 0xe9, 0xbb, 0x0e, 0xb4, 0xa5, 0xa7, 0xa6, + 0xeb, 0xd8, 0x5b, 0x96, 0x5b, 0x57, 0x9a, 0xa7, 0x79, 0x15, 0x16, 0xc9, 0xd9, 0xd2, 0xa1, 0x40, + 0x19, 0xb7, 0xb4, 0x40, 0x9c, 0x87, 0xba, 0xaf, 0x19, 0x07, 0x23, 0xb9, 0x29, 0x26, 0xa4, 0xa2, + 0x89, 0xb1, 0x2f, 0x73, 0x43, 0x1c, 0x4f, 0x97, 0xdd, 0xbf, 0x76, 0x60, 0xc5, 0x18, 0xb0, 0xe4, + 0xc2, 0x0f, 0x41, 0x25, 0xa6, 0x88, 0x88, 0xa1, 0x10, 0xa6, 0x0d, 0xdb, 0xeb, 0xcc, 0x3e, 0xb3, + 0x88, 0x69, 0x33, 0xfd, 0x19, 0x0d, 0x30, 0x99, 0x8e, 0xa5, 0x56, 0x32, 0x21, 0x64, 0xa4, 0x53, + 0xce, 0x9f, 0x69, 0x12, 0xa1, 0x17, 0x2d, 0x8c, 0xf2, 0x0e, 0xd0, 0x49, 0xd4, 0x44, 0xc2, 0x40, + 0xd8, 0xa0, 0xfb, 0xcf, 0x0e, 0xac, 0x0a, 0x6f, 0x5f, 0x9e, 0xa5, 0x74, 0x12, 0xfd, 0x9c, 0x38, + 0xde, 0x08, 0x89, 0xdc, 0xbd, 0xe0, 0xc9, 0x32, 0xfb, 0xcc, 0x2b, 0x9e, 0x50, 0x74, 0xbe, 0xc9, + 0x19, 0x7b, 0x51, 0x2d, 0xdb, 0x8b, 0x97, 0xac, 0x74, 0x59, 0x84, 0xac, 0x5e, 0x1a, 0x21, 0xbb, + 0x33, 0x0f, 0xf5, 0xa4, 0x1f, 0x4d, 0xb8, 0xbb, 0x0e, 0x6b, 0xf6, 0xe4, 0xa4, 0x0a, 0xfa, 0x9e, + 0x03, 0x9d, 0x7b, 0x22, 0x5e, 0x1c, 0x84, 0xc3, 0xdd, 0x20, 0x49, 0xa3, 0x58, 0xbf, 0x1a, 0xba, + 0x0c, 0x90, 0xa4, 0x7e, 0x9c, 0x8a, 0x7c, 0x40, 0x19, 0xbf, 0xca, 0x10, 0x1c, 0x23, 0x0f, 0x07, + 0xa2, 0x56, 0xec, 0x8d, 0x2e, 0x17, 0x8c, 0xb2, 0x3c, 0x8f, 0x58, 0xa6, 0xed, 0x6d, 0x91, 0xc0, + 0x85, 0xc6, 0x97, 0x9f, 0x90, 0xaa, 0x15, 0x8e, 0x7e, 0x0e, 0x75, 0xff, 0xd2, 0x81, 0xe5, 0x6c, + 0x90, 0x3b, 0x08, 0xda, 0xda, 0x41, 0xda, 0xb3, 0x4c, 0x3b, 0xa8, 0xc8, 0x5a, 0x80, 0x06, 0x4e, + 0x8e, 0xcd, 0x40, 0x48, 0x62, 0x65, 0x29, 0x9a, 0x2a, 0x8f, 0xc1, 0x84, 0x44, 0xea, 0x04, 0x9a, + 0x56, 0xe9, 0x26, 0xc8, 0x12, 0xa5, 0x73, 0x8e, 0x53, 0xfa, 0x6a, 0x4e, 0x9c, 0x74, 0x64, 0x51, + 0xd9, 0xa7, 0x79, 0x42, 0xf1, 0xa7, 0xfb, 0xbb, 0x0e, 0x5c, 0x2a, 0x59, 0x5c, 0x29, 0x19, 0x77, + 0x61, 0xe5, 0x48, 0x57, 0xaa, 0x05, 0x10, 0xe2, 0xb1, 0xae, 0x2e, 0x38, 0xec, 0x49, 0x7b, 0xc5, + 0x0f, 0xb4, 0x33, 0x21, 0x96, 0xd4, 0xca, 0x49, 0x2a, 0x56, 0x6c, 0xfd, 0x5e, 0x15, 0x96, 0xc4, + 0xc5, 0x97, 0x78, 0xbf, 0xcb, 0x63, 0xf6, 0x11, 0xcc, 0xcb, 0xf7, 0xd7, 0xec, 0xa2, 0xec, 0xd6, + 0x7e, 0xf1, 0xdd, 0x5d, 0xcf, 0xc3, 0x92, 0x77, 0x56, 0x7f, 0xf3, 0x87, 0xff, 0xfa, 0xfb, 0x95, + 0x45, 0xd6, 0xbc, 0x79, 0xf2, 0xee, 0xcd, 0x21, 0x0f, 0x13, 0x6c, 0xe3, 0x57, 0x01, 0xb2, 0x97, + 0xc9, 0xac, 0xa3, 0x9d, 0xa0, 0xdc, 0x93, 0xeb, 0xee, 0xa5, 0x92, 0x1a, 0xd9, 0xee, 0x25, 0x6a, + 0x77, 0xd5, 0x5d, 0xc2, 0x76, 0x83, 0x30, 0x48, 0xc5, 0x33, 0xe5, 0x0f, 0x9c, 0x4d, 0x36, 0x80, + 0x96, 0xf9, 0xf0, 0x98, 0xa9, 0x58, 0x48, 0xc9, 0xb3, 0xe7, 0xee, 0x6b, 0xa5, 0x75, 0x2a, 0x10, + 0x44, 0x7d, 0x5c, 0x74, 0xdb, 0xd8, 0xc7, 0x94, 0x28, 0xb2, 0x5e, 0x46, 0xb0, 0x64, 0xbf, 0x2f, + 0x66, 0xaf, 0x1b, 0x62, 0x5d, 0x78, 0xdd, 0xdc, 0x7d, 0xe3, 0x8c, 0x5a, 0xd9, 0xd7, 0x1b, 0xd4, + 0xd7, 0x86, 0xcb, 0xb0, 0xaf, 0x3e, 0xd1, 0xa8, 0xd7, 0xcd, 0x1f, 0x38, 0x9b, 0x5b, 0xdf, 0xba, + 0x0c, 0x0d, 0x1d, 0xbd, 0x64, 0x5f, 0x87, 0x45, 0xeb, 0x66, 0x92, 0xa9, 0x69, 0x94, 0x5d, 0x64, + 0x76, 0x5f, 0x2f, 0xaf, 0x94, 0x1d, 0x5f, 0xa6, 0x8e, 0x3b, 0x6c, 0x1d, 0x3b, 0x96, 0x57, 0x7b, + 0x37, 0xe9, 0x3e, 0x56, 0x24, 0x8b, 0x3e, 0x13, 0xf3, 0xcc, 0x6e, 0x13, 0xad, 0x79, 0x16, 0x6e, + 0x1f, 0xad, 0x79, 0x16, 0xaf, 0x20, 0xdd, 0xd7, 0xa9, 0xbb, 0x75, 0xb6, 0x66, 0x76, 0xa7, 0xa3, + 0x8a, 0x9c, 0xd2, 0x7b, 0xcd, 0xe7, 0xc7, 0xec, 0x0d, 0xcd, 0x58, 0x65, 0xcf, 0x92, 0x35, 0x8b, + 0x14, 0xdf, 0x26, 0xbb, 0x1d, 0xea, 0x8a, 0x31, 0xda, 0x3e, 0xf3, 0xf5, 0x31, 0xfb, 0x2a, 0x34, + 0xf4, 0x5b, 0x3b, 0xb6, 0x61, 0x3c, 0x70, 0x34, 0x1f, 0x00, 0x76, 0x3b, 0xc5, 0x8a, 0x32, 0xc6, + 0x30, 0x5b, 0x46, 0xc6, 0xd8, 0x83, 0x8b, 0xd2, 0xa9, 0x3e, 0xe4, 0x3f, 0xce, 0x4c, 0x4a, 0x1e, + 0x4d, 0xdf, 0x72, 0xd8, 0x87, 0xb0, 0xa0, 0x9e, 0x30, 0xb2, 0xf5, 0xf2, 0xa7, 0x98, 0xdd, 0x8d, + 0x02, 0x2e, 0xb5, 0xc7, 0x6d, 0x80, 0xec, 0xf9, 0x9d, 0x96, 0xb3, 0xc2, 0xa3, 0x40, 0xbd, 0x88, + 0x25, 0x6f, 0xf5, 0x86, 0xf4, 0xd8, 0xd0, 0x7e, 0xdd, 0xc7, 0xde, 0xcc, 0xe8, 0x4b, 0xdf, 0xfd, + 0xbd, 0xa4, 0x41, 0x77, 0x9d, 0xd6, 0xae, 0xcd, 0x48, 0x70, 0x43, 0x7e, 0xaa, 0x12, 0xdd, 0xef, + 0x42, 0xd3, 0x78, 0xd2, 0xc7, 0x54, 0x0b, 0xc5, 0xe7, 0x80, 0xdd, 0x6e, 0x59, 0x95, 0x1c, 0xee, + 0x17, 0x60, 0xd1, 0x7a, 0x9b, 0xa7, 0x25, 0xa3, 0xec, 0xe5, 0x9f, 0x96, 0x8c, 0xf2, 0xe7, 0x7c, + 0x5f, 0x81, 0xa6, 0xf1, 0x92, 0x8e, 0x19, 0x29, 0x7c, 0xb9, 0x37, 0x74, 0x7a, 0x44, 0x65, 0x0f, + 0xef, 0xd6, 0x68, 0xbe, 0x4b, 0x6e, 0x03, 0xe7, 0x4b, 0xd9, 0xde, 0xc8, 0x24, 0x5f, 0x87, 0x25, + 0xfb, 0x6d, 0x9d, 0x96, 0xaa, 0xd2, 0x57, 0x7a, 0x5a, 0xaa, 0xce, 0x78, 0x90, 0x27, 0x19, 0x72, + 0x73, 0x55, 0x77, 0x72, 0xf3, 0x63, 0x79, 0xaf, 0xf7, 0x82, 0x7d, 0x09, 0x55, 0x87, 0x4c, 0xbf, + 0x67, 0xd9, 0x8b, 0x42, 0x3b, 0x49, 0x5f, 0x73, 0x7b, 0x21, 0x53, 0xdf, 0x5d, 0xa1, 0xc6, 0x9b, + 0x2c, 0x9b, 0x81, 0xb0, 0x07, 0x94, 0x86, 0x6f, 0xd8, 0x03, 0x33, 0x53, 0xdf, 0xb0, 0x07, 0x56, + 0xb6, 0x7e, 0xde, 0x1e, 0xa4, 0x01, 0xb6, 0x11, 0xc2, 0x72, 0x2e, 0x87, 0x45, 0x0b, 0x4b, 0x79, + 0xd2, 0x5f, 0xf7, 0xf2, 0xcb, 0x53, 0x5f, 0x6c, 0x35, 0xa3, 0xd4, 0xcb, 0x4d, 0x95, 0xa3, 0xf9, + 0x6b, 0xd0, 0x32, 0xdf, 0x44, 0x69, 0x0b, 0x51, 0xf2, 0x92, 0x4b, 0x5b, 0x88, 0xb2, 0x47, 0x54, + 0x6a, 0x73, 0x59, 0xcb, 0xec, 0x06, 0x37, 0xd7, 0x7e, 0x42, 0x92, 0xa9, 0xcc, 0xb2, 0xb7, 0x31, + 0x99, 0xca, 0x2c, 0x7d, 0x77, 0xa2, 0x36, 0x97, 0xad, 0x5a, 0x73, 0x11, 0x41, 0x5b, 0xf6, 0x15, + 0x58, 0x36, 0x12, 0xc4, 0x0e, 0x66, 0x61, 0x5f, 0x33, 0x6a, 0x31, 0xb9, 0xb8, 0x5b, 0xe6, 0x79, + 0xba, 0x1b, 0xd4, 0xfe, 0x8a, 0x6b, 0x4d, 0x02, 0x99, 0x74, 0x1b, 0x9a, 0x66, 0xf2, 0xd9, 0x4b, + 0xda, 0xdd, 0x30, 0xaa, 0xcc, 0x4c, 0xda, 0x5b, 0x0e, 0xfb, 0x23, 0x07, 0x5a, 0x56, 0x2a, 0x97, + 0x75, 0x35, 0x91, 0x6b, 0xa7, 0x63, 0xd6, 0x99, 0x0d, 0xb9, 0x1e, 0x0d, 0x72, 0x6f, 0xf3, 0x0b, + 0xd6, 0x22, 0x7c, 0x6c, 0x9d, 0x60, 0x6e, 0xe4, 0x9f, 0xd6, 0xbf, 0xc8, 0x13, 0x98, 0x09, 0xd8, + 0x2f, 0x6e, 0x39, 0xec, 0x03, 0xf1, 0xe7, 0x11, 0x2a, 0x62, 0xc1, 0x0c, 0x45, 0x9a, 0x5f, 0x32, + 0xf3, 0x9f, 0x13, 0xae, 0x3b, 0xb7, 0x1c, 0xf6, 0x35, 0xf1, 0x82, 0x5e, 0x7e, 0x4b, 0x2b, 0xff, + 0xaa, 0xdf, 0xbb, 0x57, 0x69, 0x36, 0x97, 0xdd, 0x4b, 0xd6, 0x6c, 0xf2, 0x96, 0xe4, 0xb6, 0x18, + 0x9d, 0xfc, 0x63, 0x84, 0x4c, 0x25, 0x16, 0xfe, 0x2c, 0xe1, 0xec, 0x41, 0x8e, 0xc5, 0x20, 0x25, + 0xb9, 0xc5, 0x1e, 0xaf, 0xd8, 0x8c, 0xbb, 0x49, 0x63, 0xbd, 0xea, 0xbe, 0x79, 0xe6, 0x58, 0x6f, + 0xd2, 0x89, 0x14, 0x47, 0xbc, 0x0f, 0x90, 0x45, 0x17, 0x59, 0x2e, 0xba, 0xa5, 0xad, 0x42, 0x31, + 0x00, 0x69, 0xf3, 0xa0, 0x0a, 0x82, 0x61, 0x8b, 0x5f, 0x15, 0xa2, 0xfa, 0x40, 0xc5, 0xc5, 0x2e, + 0x19, 0xe2, 0x68, 0x87, 0x01, 0xbb, 0xdd, 0xb2, 0xaa, 0x32, 0x41, 0xd5, 0x41, 0xb6, 0x27, 0xb0, + 0xb8, 0x17, 0x45, 0xcf, 0xa6, 0x13, 0x1d, 0xab, 0xb7, 0xe3, 0x37, 0xbb, 0x7e, 0x72, 0xdc, 0xcd, + 0xcd, 0xc2, 0xbd, 0x42, 0x4d, 0x75, 0x59, 0xc7, 0x68, 0xea, 0xe6, 0xc7, 0x59, 0xf4, 0xf2, 0x05, + 0xf3, 0x61, 0x45, 0x7b, 0x00, 0x7a, 0xe0, 0x5d, 0xbb, 0x19, 0x33, 0xee, 0x56, 0xe8, 0xc2, 0xf2, + 0xc9, 0xd4, 0x68, 0x6f, 0x26, 0xaa, 0xcd, 0x5b, 0x0e, 0xdb, 0x87, 0xd6, 0x5d, 0xde, 0x8f, 0x06, + 0x5c, 0x46, 0x5c, 0x56, 0xb3, 0x81, 0xeb, 0x50, 0x4d, 0x77, 0xd1, 0x02, 0x6d, 0x9d, 0x38, 0xf1, + 0x67, 0x31, 0xff, 0xc6, 0xcd, 0x8f, 0x65, 0x2c, 0xe7, 0x85, 0xd2, 0x89, 0x2a, 0xfe, 0x64, 0xe9, + 0xc4, 0x5c, 0xc0, 0xca, 0xd2, 0x89, 0x85, 0x80, 0x95, 0xb5, 0xd4, 0x2a, 0xfe, 0xc5, 0x46, 0xb0, + 0x52, 0x88, 0x71, 0x69, 0x3f, 0xe2, 0xac, 0xc8, 0x58, 0xf7, 0xca, 0xd9, 0x04, 0x76, 0x6f, 0x9b, + 0x76, 0x6f, 0x07, 0xb0, 0x78, 0x97, 0x8b, 0xc5, 0x12, 0x09, 0x01, 0xb9, 0x97, 0x7a, 0x66, 0xf2, + 0x40, 0x5e, 0x29, 0x52, 0x9d, 0x6d, 0xf4, 0xe8, 0x36, 0x9e, 0x7d, 0x15, 0x9a, 0xf7, 0x79, 0xaa, + 0x32, 0x00, 0xb4, 0x37, 0x96, 0x4b, 0x09, 0xe8, 0x96, 0x24, 0x10, 0xd8, 0x3c, 0x43, 0xad, 0xdd, + 0xe4, 0x83, 0x21, 0x17, 0xea, 0xa9, 0x17, 0x0c, 0x5e, 0xb0, 0x5f, 0xa6, 0xc6, 0x75, 0x42, 0xd1, + 0xba, 0x71, 0x71, 0x6c, 0x36, 0xbe, 0x9c, 0xc3, 0xcb, 0x5a, 0x0e, 0xa3, 0x01, 0x37, 0xcc, 0x7f, + 0x08, 0x4d, 0x23, 0xdb, 0x4d, 0x0b, 0x50, 0x31, 0x73, 0x4f, 0x0b, 0x50, 0x49, 0x72, 0x9c, 0x7b, + 0x9d, 0xfa, 0x71, 0xd9, 0x95, 0xac, 0x1f, 0x91, 0x10, 0x97, 0xf5, 0x74, 0xf3, 0x63, 0x7f, 0x9c, + 0xbe, 0x60, 0x4f, 0xe9, 0xd5, 0x9e, 0x99, 0xe5, 0x90, 0x79, 0x83, 0xf9, 0x84, 0x08, 0xbd, 0x58, + 0x46, 0x95, 0xed, 0x21, 0x8a, 0xae, 0xc8, 0x4b, 0xf8, 0x0c, 0xc0, 0x41, 0x1a, 0x4d, 0xee, 0xfa, + 0x7c, 0x1c, 0x85, 0x99, 0xae, 0xcd, 0x6e, 0xf2, 0x33, 0xfd, 0x65, 0x5c, 0xe7, 0xb3, 0xa7, 0x86, + 0x3f, 0x6e, 0x25, 0x89, 0x28, 0xe6, 0x3a, 0xf3, 0xb2, 0x5f, 0x2f, 0x48, 0xc9, 0x85, 0xff, 0x2d, + 0x07, 0xbd, 0xeb, 0x2c, 0xa2, 0xaa, 0xbd, 0xeb, 0x42, 0xb0, 0x56, 0xab, 0xbd, 0x92, 0xf0, 0xeb, + 0x3e, 0x34, 0xb2, 0x10, 0xdd, 0x46, 0x96, 0xb1, 0x68, 0x05, 0xf4, 0xb4, 0x55, 0x2c, 0x04, 0xce, + 0xdc, 0x36, 0x2d, 0x15, 0xb0, 0x05, 0x5c, 0x2a, 0x8a, 0x86, 0x05, 0xb0, 0x2a, 0x06, 0xa8, 0x4d, + 0x3c, 0xdd, 0x4d, 0xab, 0x99, 0x94, 0x04, 0xaf, 0xb4, 0x34, 0x97, 0xc6, 0x7e, 0xac, 0x73, 0x36, + 0x72, 0xab, 0xb8, 0x17, 0x47, 0xd5, 0x3c, 0x86, 0x95, 0x42, 0xe0, 0x42, 0x8b, 0xf4, 0x59, 0xf1, + 0x22, 0x2d, 0xd2, 0x67, 0xc6, 0x3c, 0xdc, 0x8b, 0xd4, 0xe5, 0xb2, 0x0b, 0xd8, 0x65, 0x72, 0x1a, + 0xa4, 0xfd, 0xe3, 0x0f, 0x9c, 0xcd, 0xc3, 0x39, 0xfa, 0xb3, 0xb9, 0x4f, 0xfd, 0x6f, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xf1, 0xeb, 0xab, 0x92, 0x9e, 0x4e, 0x00, 0x00, } diff --git a/lnrpc/rpc.proto b/lnrpc/rpc.proto index 3d31c17f8..93cb1c1db 100644 --- a/lnrpc/rpc.proto +++ b/lnrpc/rpc.proto @@ -1730,10 +1730,16 @@ message ListInvoiceRequest { 50k invoices, callers can use this to skip around within a packed time series. */ - uint32 index_offset = 4 [json_name = "index_offset"]; + uint64 index_offset = 4 [json_name = "index_offset"]; /// The max number of invoices to return in the response to this query. - uint32 num_max_invoices = 5 [json_name = "num_max_invoices"]; + uint64 num_max_invoices = 5 [json_name = "num_max_invoices"]; + + /** + If set, the invoices returned will result from seeking backwards from the + specified index offset. + */ + bool reversed = 6 [json_name = "reversed"]; } message ListInvoiceResponse { /** @@ -1743,10 +1749,16 @@ message ListInvoiceResponse { repeated Invoice invoices = 1 [json_name = "invoices"]; /** - The index of the last time in the set of returned invoices. Can be used to - seek further, pagination style. + The index of the last item in the set of returned invoices. This can be used + to seek further, pagination style. */ - uint32 last_index_offset = 2 [json_name = "last_index_offset"]; + uint64 last_index_offset = 2 [json_name = "last_index_offset"]; + + /** + The index of the last item in the set of returned invoices. This can be used + to seek backwards, pagination style. + */ + uint64 first_index_offset = 3 [json_name = "first_index_offset"]; } message InvoiceSubscription { diff --git a/lnrpc/rpc.swagger.json b/lnrpc/rpc.swagger.json index 6dd93d212..918ebdb49 100644 --- a/lnrpc/rpc.swagger.json +++ b/lnrpc/rpc.swagger.json @@ -638,16 +638,24 @@ "description": "*\nThe offset in the time series to start at. As each response can only contain\n50k invoices, callers can use this to skip around within a packed time\nseries.", "in": "query", "required": false, - "type": "integer", - "format": "int64" + "type": "string", + "format": "uint64" }, { "name": "num_max_invoices", "description": "/ The max number of invoices to return in the response to this query.", "in": "query", "required": false, - "type": "integer", - "format": "int64" + "type": "string", + "format": "uint64" + }, + { + "name": "reversed", + "description": "*\nIf set, the invoices returned will result from seeking backwards from the\nspecified index offset.", + "in": "query", + "required": false, + "type": "boolean", + "format": "boolean" } ], "tags": [ @@ -2021,9 +2029,14 @@ "description": "*\nA list of invoices from the time slice of the time series specified in the\nrequest." }, "last_index_offset": { - "type": "integer", - "format": "int64", - "description": "*\nThe index of the last time in the set of returned invoices. Can be used to\nseek further, pagination style." + "type": "string", + "format": "uint64", + "description": "*\nThe index of the last item in the set of returned invoices. This can be used\nto seek further, pagination style." + }, + "first_index_offset": { + "type": "string", + "format": "uint64", + "description": "*\nThe index of the last item in the set of returned invoices. This can be used\nto seek backwards, pagination style." } } }, From 012d4f5c8c2a14acb01126fa0f5b3f4da9669bd6 Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Mon, 10 Sep 2018 18:21:13 -0700 Subject: [PATCH 4/5] rpcserver: include new proto fields in ListInvoices rpc --- rpcserver.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/rpcserver.go b/rpcserver.go index 4b085af01..9fcaa75d3 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -2888,6 +2888,7 @@ func (r *rpcServer) ListInvoices(ctx context.Context, IndexOffset: req.IndexOffset, NumMaxInvoices: req.NumMaxInvoices, PendingOnly: req.PendingOnly, + Reversed: req.Reversed, } invoiceSlice, err := r.server.chanDB.QueryInvoices(q) if err != nil { @@ -2897,11 +2898,12 @@ func (r *rpcServer) ListInvoices(ctx context.Context, // Before returning the response, we'll need to convert each invoice // into it's proto representation. resp := &lnrpc.ListInvoiceResponse{ - Invoices: make([]*lnrpc.Invoice, len(invoiceSlice.Invoices)), - LastIndexOffset: invoiceSlice.LastIndexOffset, + Invoices: make([]*lnrpc.Invoice, len(invoiceSlice.Invoices)), + FirstIndexOffset: invoiceSlice.FirstIndexOffset, + LastIndexOffset: invoiceSlice.LastIndexOffset, } for i, invoice := range invoiceSlice.Invoices { - resp.Invoices[i], err = createRPCInvoice(invoice) + resp.Invoices[i], err = createRPCInvoice(&invoice) if err != nil { return nil, err } From 08bddece8bae37fb85308dbbb667dcbf6d5c9a80 Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Mon, 10 Sep 2018 18:23:22 -0700 Subject: [PATCH 5/5] cmd/lncli: add description and reversed flag to listinvoices --- cmd/lncli/commands.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/cmd/lncli/commands.go b/cmd/lncli/commands.go index 828fe3aa3..c36812110 100644 --- a/cmd/lncli/commands.go +++ b/cmd/lncli/commands.go @@ -2310,6 +2310,15 @@ var listInvoicesCommand = cli.Command{ Name: "listinvoices", Category: "Payments", Usage: "List all invoices currently stored.", + Description: ` + This command enables the retrieval of all invoices currently stored + within the database. It has full support for pagination-style responses, + allowing users to query for specific invoices through their add_index. + This can be done by using either the first_index_offset or + last_index_offset fields included in the response. The reversed flag is + set by default in order to paginate backwards. If you wish to paginate + forwards, you must explicitly set the flag to false. If none of the + parameters are specified, then the last 100 invoices will be returned.`, Flags: []cli.Flag{ cli.BoolFlag{ Name: "pending_only", @@ -2324,6 +2333,12 @@ var listInvoicesCommand = cli.Command{ Name: "max_invoices", Usage: "the max number of invoices to return", }, + cli.BoolTFlag{ + Name: "reversed", + Usage: "if set, the invoices returned precede the " + + "given index_offset, allowing backwards " + + "pagination", + }, }, Action: actionDecorator(listInvoices), } @@ -2334,8 +2349,9 @@ func listInvoices(ctx *cli.Context) error { req := &lnrpc.ListInvoiceRequest{ PendingOnly: ctx.Bool("pending_only"), - IndexOffset: uint32(ctx.Uint64("index_offset")), - NumMaxInvoices: uint32(ctx.Uint64("max_invoices")), + IndexOffset: ctx.Uint64("index_offset"), + NumMaxInvoices: ctx.Uint64("max_invoices"), + Reversed: ctx.Bool("reversed"), } invoices, err := client.ListInvoices(context.Background(), req)