diff --git a/pkg/roachpb/api.go b/pkg/roachpb/api.go index 06fe71c5d719..3d7d75787506 100644 --- a/pkg/roachpb/api.go +++ b/pkg/roachpb/api.go @@ -1628,3 +1628,14 @@ func (c *TenantConsumption) Sub(other *TenantConsumption) { c.SQLPodsCPUSeconds -= other.SQLPodsCPUSeconds } } + +// SafeFormat implements redact.SafeFormatter. +func (s *ScanStats) SafeFormat(w redact.SafePrinter, _ rune) { + w.Printf("scan stats: stepped %d times (%d internal); seeked %d times (%d internal)", + s.NumInterfaceSteps, s.NumInternalSteps, s.NumInterfaceSeeks, s.NumInternalSeeks) +} + +// String implements fmt.Stringer. +func (s *ScanStats) String() string { + return redact.StringWithoutMarkers(s) +} diff --git a/pkg/roachpb/api.pb.go b/pkg/roachpb/api.pb.go index af8cab023475..25c8cc797c23 100644 --- a/pkg/roachpb/api.pb.go +++ b/pkg/roachpb/api.pb.go @@ -7681,6 +7681,43 @@ func (m *ContentionEvent) XXX_DiscardUnknown() { var xxx_messageInfo_ContentionEvent proto.InternalMessageInfo +// ScanStats is a message that will be attached to BatchResponses containing +// information about what happened during each scan and get in the request. +type ScanStats struct { + NumInterfaceSeeks uint64 `protobuf:"varint,1,opt,name=num_interface_seeks,json=numInterfaceSeeks,proto3" json:"num_interface_seeks,omitempty"` + NumInternalSeeks uint64 `protobuf:"varint,2,opt,name=num_internal_seeks,json=numInternalSeeks,proto3" json:"num_internal_seeks,omitempty"` + NumInterfaceSteps uint64 `protobuf:"varint,3,opt,name=num_interface_steps,json=numInterfaceSteps,proto3" json:"num_interface_steps,omitempty"` + NumInternalSteps uint64 `protobuf:"varint,4,opt,name=num_internal_steps,json=numInternalSteps,proto3" json:"num_internal_steps,omitempty"` +} + +func (m *ScanStats) Reset() { *m = ScanStats{} } +func (*ScanStats) ProtoMessage() {} +func (*ScanStats) Descriptor() ([]byte, []int) { + return fileDescriptor_e08772acc330f58b, []int{122} +} +func (m *ScanStats) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ScanStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ScanStats) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScanStats.Merge(m, src) +} +func (m *ScanStats) XXX_Size() int { + return m.Size() +} +func (m *ScanStats) XXX_DiscardUnknown() { + xxx_messageInfo_ScanStats.DiscardUnknown(m) +} + +var xxx_messageInfo_ScanStats proto.InternalMessageInfo + func init() { proto.RegisterEnum("cockroach.roachpb.ReadConsistencyType", ReadConsistencyType_name, ReadConsistencyType_value) proto.RegisterEnum("cockroach.roachpb.RoutingPolicy", RoutingPolicy_name, RoutingPolicy_value) @@ -7829,585 +7866,590 @@ func init() { proto.RegisterType((*JoinNodeRequest)(nil), "cockroach.roachpb.JoinNodeRequest") proto.RegisterType((*JoinNodeResponse)(nil), "cockroach.roachpb.JoinNodeResponse") proto.RegisterType((*ContentionEvent)(nil), "cockroach.roachpb.ContentionEvent") + proto.RegisterType((*ScanStats)(nil), "cockroach.roachpb.ScanStats") } func init() { proto.RegisterFile("roachpb/api.proto", fileDescriptor_e08772acc330f58b) } var fileDescriptor_e08772acc330f58b = []byte{ - // 9157 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0xbd, 0x5d, 0x6c, 0x23, 0x57, - 0x96, 0x1f, 0xae, 0x22, 0x29, 0x89, 0x3c, 0x14, 0xc9, 0xd2, 0x55, 0x7f, 0xa8, 0xd5, 0xb6, 0xd4, - 0x5d, 0xed, 0xfe, 0x5c, 0x9b, 0x72, 0x77, 0xdb, 0x7f, 0x7b, 0x6c, 0x8f, 0x67, 0x45, 0x8a, 0xdd, - 0xa4, 0xbe, 0x5a, 0x5d, 0xa4, 0xba, 0x61, 0xef, 0xec, 0xbf, 0xb6, 0x54, 0x75, 0x25, 0xd5, 0x88, - 0xac, 0x62, 0x57, 0x15, 0xd5, 0xa2, 0x81, 0x3c, 0x24, 0xd9, 0x4c, 0xfc, 0x14, 0x4c, 0x90, 0x00, - 0x3b, 0x83, 0x0d, 0x16, 0xde, 0xcc, 0x22, 0x79, 0xc8, 0x43, 0x82, 0x24, 0x48, 0xb0, 0x41, 0xb2, - 0xfb, 0x90, 0x87, 0x18, 0xc1, 0x22, 0x3b, 0xf3, 0xb6, 0x08, 0x10, 0x65, 0xa3, 0xc9, 0x43, 0x16, - 0x41, 0x90, 0x20, 0x09, 0xb0, 0x81, 0x81, 0x7c, 0xe0, 0x7e, 0xd4, 0x07, 0xc9, 0x22, 0x45, 0xb5, - 0xcb, 0x89, 0x81, 0x7d, 0x91, 0x58, 0xa7, 0xee, 0x39, 0xf7, 0xde, 0x73, 0xbf, 0xce, 0xef, 0xde, - 0x73, 0x6e, 0xc1, 0xac, 0x6d, 0xa9, 0xda, 0x41, 0x7b, 0x77, 0x59, 0x6d, 0x1b, 0xc5, 0xb6, 0x6d, - 0xb9, 0x16, 0x9a, 0xd5, 0x2c, 0xed, 0x90, 0x92, 0x8b, 0xfc, 0xe5, 0xc2, 0x45, 0x6c, 0xdb, 0x96, - 0xed, 0xb4, 0x77, 0x97, 0xd9, 0x0f, 0x96, 0x72, 0xe1, 0xde, 0xe1, 0xd1, 0xf2, 0xe1, 0x91, 0x83, - 0xed, 0x23, 0x6c, 0x2f, 0x6b, 0x96, 0xa9, 0x75, 0x6c, 0x1b, 0x9b, 0x5a, 0x77, 0xb9, 0x69, 0x69, - 0x87, 0xf4, 0x8f, 0x61, 0xee, 0x47, 0xa5, 0xb5, 0xb1, 0xaa, 0x3b, 0x9d, 0x56, 0x4b, 0xb5, 0xbb, - 0xcb, 0x54, 0x2c, 0x7f, 0xe0, 0x69, 0x91, 0x57, 0x28, 0x5d, 0x75, 0x55, 0x4e, 0xbb, 0xe0, 0xd1, - 0x7a, 0x4a, 0x70, 0xc9, 0xa3, 0xb6, 0xb0, 0xab, 0x86, 0x52, 0x5f, 0xf1, 0xe8, 0x4e, 0x5b, 0x35, - 0x15, 0xcd, 0x32, 0xf7, 0x0c, 0xaf, 0x20, 0x57, 0x1d, 0xd7, 0xb2, 0xd5, 0x7d, 0xbc, 0x8c, 0xcd, - 0x7d, 0xc3, 0xc4, 0x84, 0xf7, 0x48, 0xd3, 0xf8, 0xcb, 0xd7, 0x22, 0x5f, 0x3e, 0xe4, 0x6f, 0xe7, - 0x3b, 0xae, 0xd1, 0x5c, 0x3e, 0x68, 0x6a, 0xcb, 0xae, 0xd1, 0xc2, 0x8e, 0xab, 0xb6, 0xda, 0x5e, - 0xed, 0xe8, 0x1b, 0xd7, 0x56, 0x35, 0xc3, 0xdc, 0xf7, 0xfe, 0xb7, 0x77, 0x97, 0x6d, 0xac, 0x59, - 0xb6, 0x8e, 0x75, 0x85, 0x94, 0xc3, 0xab, 0xc9, 0xbe, 0xb5, 0x6f, 0xd1, 0x9f, 0xcb, 0xe4, 0x17, - 0xa7, 0x2e, 0xee, 0x5b, 0xd6, 0x7e, 0x13, 0x2f, 0xd3, 0xa7, 0xdd, 0xce, 0xde, 0xb2, 0xde, 0xb1, - 0x55, 0xd7, 0xb0, 0x38, 0x97, 0xf4, 0x8f, 0x04, 0xc8, 0xc9, 0xf8, 0x45, 0x07, 0x3b, 0x6e, 0x15, - 0xab, 0x3a, 0xb6, 0xd1, 0x15, 0x48, 0x1e, 0xe2, 0xee, 0x7c, 0xf2, 0x9a, 0x70, 0x67, 0xa6, 0x34, - 0xfd, 0xd5, 0xc9, 0x52, 0x72, 0x1d, 0x77, 0x65, 0x42, 0x43, 0xd7, 0x60, 0x1a, 0x9b, 0xba, 0x42, - 0x5e, 0xa7, 0x7a, 0x5f, 0x4f, 0x61, 0x53, 0x5f, 0xc7, 0x5d, 0xf4, 0x7d, 0x48, 0x3b, 0x44, 0x9a, - 0xa9, 0xe1, 0xf9, 0xc9, 0x6b, 0xc2, 0x9d, 0xc9, 0xd2, 0x2f, 0x7f, 0x75, 0xb2, 0xf4, 0xd1, 0xbe, - 0xe1, 0x1e, 0x74, 0x76, 0x8b, 0x9a, 0xd5, 0x5a, 0xf6, 0x7b, 0x81, 0xbe, 0x1b, 0xfc, 0x5e, 0x6e, - 0x1f, 0xee, 0x2f, 0xf7, 0xeb, 0xa8, 0xd8, 0x38, 0x36, 0xeb, 0xf8, 0x85, 0xec, 0x4b, 0x5c, 0x4b, - 0xa5, 0x05, 0x31, 0xb1, 0x96, 0x4a, 0x27, 0xc4, 0xa4, 0xf4, 0x87, 0x09, 0xc8, 0xcb, 0xd8, 0x69, - 0x5b, 0xa6, 0x83, 0x79, 0xc9, 0xdf, 0x86, 0xa4, 0x7b, 0x6c, 0xd2, 0x92, 0x67, 0x1f, 0x2c, 0x16, - 0x07, 0xfa, 0x5b, 0xb1, 0x61, 0xab, 0xa6, 0xa3, 0x6a, 0xa4, 0xfa, 0x32, 0x49, 0x8a, 0xde, 0x87, - 0xac, 0x8d, 0x9d, 0x4e, 0x0b, 0x53, 0x45, 0xd2, 0x4a, 0x65, 0x1f, 0x5c, 0x8e, 0xe0, 0xac, 0xb7, - 0x55, 0x53, 0x06, 0x96, 0x96, 0xfc, 0x46, 0x75, 0xc8, 0x71, 0x4e, 0x1b, 0xab, 0x8e, 0x65, 0xce, - 0x4f, 0x5f, 0x13, 0xee, 0xe4, 0x1f, 0x14, 0x23, 0x78, 0x7b, 0x4b, 0x49, 0x1e, 0x3b, 0x2d, 0x2c, - 0x53, 0x2e, 0x79, 0xc6, 0x0e, 0x3d, 0xa1, 0x2b, 0x90, 0x36, 0x3b, 0x2d, 0xa2, 0x5f, 0x87, 0x6a, - 0x2f, 0x29, 0x4f, 0x9b, 0x9d, 0xd6, 0x3a, 0xee, 0x3a, 0xe8, 0x2a, 0x64, 0xc8, 0xab, 0xdd, 0xae, - 0x8b, 0x9d, 0xf9, 0x34, 0x7d, 0x47, 0xd2, 0x96, 0xc8, 0xb3, 0xf4, 0x31, 0xcc, 0x84, 0xa5, 0x22, - 0x04, 0x79, 0xb9, 0x52, 0xdf, 0xd9, 0xac, 0x28, 0x3b, 0x5b, 0xeb, 0x5b, 0x4f, 0x9e, 0x6f, 0x89, - 0x13, 0xe8, 0x02, 0x88, 0x9c, 0xb6, 0x5e, 0xf9, 0x44, 0xd9, 0xa8, 0x6d, 0xd6, 0x1a, 0xa2, 0xb0, - 0x90, 0xfa, 0xfc, 0xa7, 0x8b, 0x13, 0x6b, 0xa9, 0xf4, 0x94, 0x38, 0x2d, 0xfd, 0x54, 0x00, 0x78, - 0x8c, 0x5d, 0xde, 0x1b, 0x50, 0x09, 0xa6, 0x0e, 0x68, 0x89, 0xe7, 0x05, 0xaa, 0x96, 0x6b, 0x91, - 0x55, 0x0b, 0xf5, 0x9c, 0x52, 0xfa, 0xcb, 0x93, 0xa5, 0x89, 0x9f, 0x9d, 0x2c, 0x09, 0x32, 0xe7, - 0x44, 0x4f, 0x21, 0x7b, 0x88, 0xbb, 0x0a, 0x1f, 0xb2, 0xf3, 0x09, 0xaa, 0xa3, 0xb7, 0x43, 0x82, - 0x0e, 0x8f, 0x8a, 0xde, 0xe8, 0x2d, 0x86, 0x46, 0x7a, 0x91, 0x70, 0x14, 0xeb, 0xae, 0x8d, 0xcd, - 0x7d, 0xf7, 0x40, 0x86, 0x43, 0xdc, 0xdd, 0x60, 0x32, 0xa4, 0xdf, 0x17, 0x20, 0x4b, 0x4b, 0xc9, - 0x94, 0x8a, 0xca, 0x7d, 0xc5, 0xbc, 0x7e, 0x66, 0x0b, 0x44, 0x94, 0xb3, 0x08, 0x93, 0x47, 0x6a, - 0xb3, 0x83, 0x69, 0x09, 0xb3, 0x0f, 0xe6, 0x23, 0x64, 0x3c, 0x23, 0xef, 0x65, 0x96, 0x0c, 0x7d, - 0x08, 0x33, 0x86, 0xe9, 0x62, 0xd3, 0x55, 0x18, 0x5b, 0xf2, 0x0c, 0xb6, 0x2c, 0x4b, 0x4d, 0x1f, - 0xa4, 0x7f, 0x28, 0x00, 0x6c, 0x77, 0x62, 0xd5, 0xf3, 0x3b, 0x63, 0x96, 0xbf, 0x94, 0x22, 0xac, - 0x5e, 0x2d, 0x2e, 0xc1, 0x94, 0x61, 0x36, 0x0d, 0x93, 0x95, 0x3f, 0x2d, 0xf3, 0x27, 0x74, 0x01, - 0x26, 0x77, 0x9b, 0x86, 0xa9, 0xd3, 0xf1, 0x90, 0x96, 0xd9, 0x83, 0x24, 0x43, 0x96, 0x96, 0x3a, - 0x46, 0xbd, 0x4b, 0x27, 0x09, 0xb8, 0x58, 0xb6, 0x4c, 0xdd, 0x20, 0x43, 0x52, 0x6d, 0x7e, 0x2b, - 0xb4, 0xb2, 0x06, 0x17, 0x74, 0xdc, 0xb6, 0xb1, 0xa6, 0xba, 0x58, 0x57, 0xf0, 0x71, 0x7b, 0xcc, - 0x36, 0x46, 0x01, 0x57, 0xe5, 0xb8, 0x4d, 0x69, 0x64, 0xd4, 0x12, 0x01, 0x6c, 0xd4, 0x4e, 0x91, - 0x29, 0x53, 0x4e, 0xe3, 0xe3, 0x36, 0x1d, 0xb5, 0xd1, 0x6a, 0x46, 0xef, 0xc0, 0x65, 0xb5, 0xd9, - 0xb4, 0x5e, 0x2a, 0xc6, 0x9e, 0xa2, 0x5b, 0xd8, 0x51, 0x4c, 0xcb, 0x55, 0xf0, 0xb1, 0xe1, 0xb8, - 0x74, 0x4a, 0x48, 0xcb, 0x73, 0xf4, 0x75, 0x6d, 0x6f, 0xd5, 0xc2, 0xce, 0x96, 0xe5, 0x56, 0xc8, - 0xab, 0x50, 0x53, 0x4e, 0x87, 0x9b, 0x52, 0xfa, 0x55, 0xb8, 0xd4, 0xaf, 0xdf, 0x38, 0xdb, 0xef, - 0x0f, 0x04, 0xc8, 0xd7, 0x4c, 0xc3, 0xfd, 0x56, 0x34, 0x9c, 0xaf, 0xcf, 0x64, 0x58, 0x9f, 0xf7, - 0x40, 0xdc, 0x53, 0x8d, 0xe6, 0x13, 0xb3, 0x61, 0xb5, 0x76, 0x1d, 0xd7, 0x32, 0xb1, 0xc3, 0x15, - 0x3e, 0x40, 0x97, 0x9e, 0x41, 0xc1, 0xaf, 0x4d, 0x9c, 0x6a, 0x72, 0x41, 0xac, 0x99, 0x9a, 0x8d, - 0x5b, 0xd8, 0x8c, 0x55, 0x4f, 0xaf, 0x41, 0xc6, 0xf0, 0xe4, 0x52, 0x5d, 0x25, 0xe5, 0x80, 0x20, - 0x75, 0x60, 0x36, 0x94, 0x6b, 0x9c, 0xd3, 0x25, 0x59, 0x8c, 0xf0, 0x4b, 0x25, 0x68, 0x23, 0xb2, - 0x18, 0xe1, 0x97, 0x6c, 0x7a, 0xab, 0x43, 0x6e, 0x15, 0x37, 0xb1, 0x8b, 0x63, 0xac, 0xa9, 0xb4, - 0x03, 0x79, 0x4f, 0x68, 0x9c, 0x0d, 0xf3, 0x1b, 0x02, 0x20, 0x2e, 0x57, 0x35, 0xf7, 0xe3, 0x2c, - 0x31, 0x5a, 0x22, 0xa6, 0x85, 0xdb, 0xb1, 0x4d, 0xb6, 0x9c, 0xb3, 0x3e, 0x09, 0x8c, 0x44, 0x57, - 0xf4, 0x60, 0xc8, 0xa6, 0xc2, 0x43, 0x96, 0x9b, 0x37, 0x2f, 0x61, 0xae, 0xa7, 0x60, 0xf1, 0x36, - 0x5f, 0x8a, 0x96, 0x29, 0x71, 0x2d, 0x19, 0xb6, 0xe1, 0x28, 0x51, 0xfa, 0xb1, 0x00, 0xb3, 0xe5, - 0x26, 0x56, 0xed, 0xd8, 0x35, 0xf2, 0x3d, 0x48, 0xeb, 0x58, 0xd5, 0x69, 0x95, 0xd9, 0xc0, 0x7e, - 0x3d, 0x24, 0x85, 0x58, 0xba, 0xc5, 0x83, 0xa6, 0x56, 0x6c, 0x78, 0x36, 0x30, 0x1f, 0xdd, 0x3e, - 0x93, 0xf4, 0x09, 0xa0, 0x70, 0xc9, 0xe2, 0xec, 0x08, 0xbf, 0x93, 0x00, 0x24, 0xe3, 0x23, 0x6c, - 0xbb, 0xb1, 0x57, 0x7b, 0x15, 0xb2, 0xae, 0x6a, 0xef, 0x63, 0x57, 0x21, 0xd6, 0xfd, 0x79, 0x6a, - 0x0e, 0x8c, 0x8f, 0x90, 0x51, 0x03, 0x6e, 0x63, 0x53, 0xdd, 0x6d, 0x62, 0x2a, 0x45, 0xd9, 0xb5, - 0x3a, 0xa6, 0xae, 0x18, 0x2e, 0xb6, 0x55, 0xd7, 0xb2, 0x15, 0xab, 0xed, 0x1a, 0x2d, 0xe3, 0x33, - 0x6a, 0xd8, 0xf3, 0xae, 0x76, 0x83, 0x25, 0x27, 0xcc, 0x25, 0x92, 0xb8, 0xc6, 0xd3, 0x3e, 0x09, - 0x25, 0x45, 0x45, 0x98, 0x33, 0xf6, 0x4d, 0xcb, 0xc6, 0xca, 0xbe, 0xa6, 0xb8, 0x07, 0x36, 0x76, - 0x0e, 0xac, 0xa6, 0xb7, 0x20, 0xcd, 0xb2, 0x57, 0x8f, 0xb5, 0x86, 0xf7, 0x42, 0xfa, 0x14, 0xe6, - 0x7a, 0xb4, 0x14, 0x67, 0x13, 0xfc, 0x17, 0x01, 0xb2, 0x75, 0x4d, 0x35, 0xe3, 0xd4, 0xfd, 0xc7, - 0x90, 0x75, 0x34, 0xd5, 0x54, 0xf6, 0x2c, 0xbb, 0xa5, 0xba, 0xb4, 0x5e, 0xf9, 0x1e, 0xdd, 0xfb, - 0xf6, 0xbd, 0xa6, 0x9a, 0x8f, 0x68, 0x22, 0x19, 0x1c, 0xff, 0x77, 0xbf, 0xfd, 0x3a, 0xf9, 0xf5, - 0xed, 0x57, 0x36, 0xbc, 0xd7, 0x52, 0xe9, 0xa4, 0x98, 0x92, 0xfe, 0x54, 0x80, 0x19, 0x56, 0xe5, - 0x38, 0x87, 0xf7, 0xbb, 0x90, 0xb2, 0xad, 0x97, 0x6c, 0x78, 0x67, 0x1f, 0x5c, 0x8d, 0x10, 0xb1, - 0x8e, 0xbb, 0xe1, 0xf5, 0x93, 0x26, 0x47, 0x25, 0xe0, 0x56, 0xaa, 0x42, 0xb9, 0x93, 0xe3, 0x72, - 0x03, 0xe3, 0x92, 0x89, 0x8c, 0xdb, 0x50, 0xd8, 0x55, 0x5d, 0xed, 0x40, 0xb1, 0x79, 0x21, 0xc9, - 0x5a, 0x9b, 0xbc, 0x33, 0x23, 0xe7, 0x29, 0xd9, 0x2b, 0xba, 0x43, 0x6a, 0xce, 0xc6, 0x9b, 0x83, - 0xff, 0x8c, 0xb5, 0xf9, 0xff, 0x12, 0xf8, 0x18, 0xf2, 0x6a, 0xfe, 0x67, 0xad, 0xe9, 0x7f, 0x92, - 0x80, 0xcb, 0xe5, 0x03, 0xac, 0x1d, 0x96, 0x2d, 0xd3, 0x31, 0x1c, 0x97, 0xe8, 0x2e, 0xce, 0xf6, - 0xbf, 0x0a, 0x99, 0x97, 0x86, 0x7b, 0xa0, 0xe8, 0xc6, 0xde, 0x1e, 0x9d, 0x6d, 0xd3, 0x72, 0x9a, - 0x10, 0x56, 0x8d, 0xbd, 0x3d, 0xf4, 0x10, 0x52, 0x2d, 0x4b, 0x67, 0xc6, 0x7c, 0xfe, 0xc1, 0x52, - 0x84, 0x78, 0x5a, 0x34, 0xa7, 0xd3, 0xda, 0xb4, 0x74, 0x2c, 0xd3, 0xc4, 0x68, 0x11, 0x40, 0x23, - 0xd4, 0xb6, 0x65, 0x98, 0x2e, 0x9f, 0x1c, 0x43, 0x14, 0x54, 0x85, 0x8c, 0x8b, 0xed, 0x96, 0x61, - 0xaa, 0x2e, 0x9e, 0x9f, 0xa4, 0xca, 0x7b, 0x23, 0xb2, 0xe0, 0xed, 0xa6, 0xa1, 0xa9, 0xab, 0xd8, - 0xd1, 0x6c, 0xa3, 0xed, 0x5a, 0x36, 0xd7, 0x62, 0xc0, 0x2c, 0xfd, 0x95, 0x14, 0xcc, 0x0f, 0xea, - 0x26, 0xce, 0x1e, 0xb2, 0x0d, 0x53, 0x36, 0x76, 0x3a, 0x4d, 0x97, 0xf7, 0x91, 0x07, 0xc3, 0x54, - 0x10, 0x51, 0x02, 0xba, 0x75, 0xd1, 0x74, 0x79, 0xb1, 0xb9, 0x9c, 0x85, 0x7f, 0x2a, 0xc0, 0x14, - 0x7b, 0x81, 0xee, 0x43, 0xda, 0x26, 0x0b, 0x83, 0x62, 0xe8, 0xb4, 0x8c, 0xc9, 0xd2, 0xa5, 0xd3, - 0x93, 0xa5, 0x69, 0xba, 0x58, 0xd4, 0x56, 0xbf, 0x0a, 0x7e, 0xca, 0xd3, 0x34, 0x5d, 0x4d, 0x27, - 0xad, 0xe5, 0xb8, 0xaa, 0xed, 0xd2, 0x4d, 0xa5, 0x04, 0x43, 0x48, 0x94, 0xb0, 0x8e, 0xbb, 0x68, - 0x0d, 0xa6, 0x1c, 0x57, 0x75, 0x3b, 0x0e, 0x6f, 0xaf, 0x73, 0x15, 0xb6, 0x4e, 0x39, 0x65, 0x2e, - 0x81, 0x98, 0x5b, 0x3a, 0x76, 0x55, 0xa3, 0x49, 0x1b, 0x30, 0x23, 0xf3, 0x27, 0xe9, 0x37, 0x05, - 0x98, 0x62, 0x49, 0xd1, 0x65, 0x98, 0x93, 0x57, 0xb6, 0x1e, 0x57, 0x94, 0xda, 0xd6, 0x6a, 0xa5, - 0x51, 0x91, 0x37, 0x6b, 0x5b, 0x2b, 0x8d, 0x8a, 0x38, 0x81, 0x2e, 0x01, 0xf2, 0x5e, 0x94, 0x9f, - 0x6c, 0xd5, 0x6b, 0xf5, 0x46, 0x65, 0xab, 0x21, 0x0a, 0x74, 0x4f, 0x85, 0xd2, 0x43, 0xd4, 0x04, - 0x7a, 0x03, 0xae, 0xf5, 0x53, 0x95, 0x7a, 0x63, 0xa5, 0x51, 0x57, 0x2a, 0xf5, 0x46, 0x6d, 0x73, - 0xa5, 0x51, 0x59, 0x15, 0x93, 0x23, 0x52, 0x91, 0x4c, 0x64, 0xb9, 0x52, 0x6e, 0x88, 0x29, 0xc9, - 0x85, 0x8b, 0x32, 0xd6, 0xac, 0x56, 0xbb, 0xe3, 0x62, 0x52, 0x4a, 0x27, 0xce, 0x91, 0x72, 0x19, - 0xa6, 0x75, 0xbb, 0xab, 0xd8, 0x1d, 0x93, 0x8f, 0x93, 0x29, 0xdd, 0xee, 0xca, 0x1d, 0x53, 0xfa, - 0x7b, 0x02, 0x5c, 0xea, 0xcf, 0x36, 0xce, 0x4e, 0xf8, 0x14, 0xb2, 0xaa, 0xae, 0x63, 0x5d, 0xd1, - 0x71, 0xd3, 0x55, 0xb9, 0x49, 0x74, 0x2f, 0x24, 0x89, 0x6f, 0x05, 0x16, 0xfd, 0xad, 0xc0, 0xcd, - 0x67, 0xe5, 0x32, 0x2d, 0xc8, 0x2a, 0xe1, 0xf0, 0xa6, 0x1f, 0x2a, 0x84, 0x52, 0xa4, 0x9f, 0xa4, - 0x20, 0x57, 0x31, 0xf5, 0xc6, 0x71, 0xac, 0x6b, 0xc9, 0x25, 0x98, 0xd2, 0xac, 0x56, 0xcb, 0x70, - 0x3d, 0x05, 0xb1, 0x27, 0xf4, 0x9d, 0x90, 0x29, 0x9b, 0x1c, 0xc3, 0xa0, 0x0b, 0x8c, 0x58, 0xf4, - 0x6b, 0x70, 0x99, 0xcc, 0x9a, 0xb6, 0xa9, 0x36, 0x15, 0x26, 0x4d, 0x71, 0x6d, 0x63, 0x7f, 0x1f, - 0xdb, 0x7c, 0xfb, 0xf1, 0x4e, 0x44, 0x39, 0x6b, 0x9c, 0xa3, 0x4c, 0x19, 0x1a, 0x2c, 0xbd, 0x7c, - 0xd1, 0x88, 0x22, 0xa3, 0x8f, 0x00, 0xc8, 0x52, 0x44, 0xb7, 0x34, 0x1d, 0x3e, 0x1f, 0x0d, 0xdb, - 0xd3, 0xf4, 0xa6, 0x20, 0xc2, 0x40, 0x9e, 0x1d, 0xf4, 0x14, 0x44, 0xc3, 0x54, 0xf6, 0x9a, 0xc6, - 0xfe, 0x81, 0xab, 0xbc, 0xb4, 0x0d, 0x17, 0x3b, 0xf3, 0xb3, 0x54, 0x46, 0x54, 0x53, 0xd7, 0xf9, - 0xd6, 0xac, 0xfe, 0x9c, 0xa4, 0xe4, 0xd2, 0xf2, 0x86, 0xf9, 0x88, 0xf2, 0x53, 0xa2, 0x83, 0x96, - 0x09, 0x14, 0x7a, 0xd1, 0x31, 0x6c, 0xac, 0xdc, 0x6f, 0x6b, 0x74, 0x1f, 0x24, 0x5d, 0xca, 0x9f, - 0x9e, 0x2c, 0x81, 0xcc, 0xc8, 0xf7, 0xb7, 0xcb, 0x04, 0x1a, 0xb1, 0xdf, 0x6d, 0x8d, 0xa8, 0xbd, - 0x6d, 0x19, 0x8e, 0x65, 0xce, 0x67, 0x98, 0xda, 0xd9, 0x13, 0xba, 0x0b, 0xa2, 0x7b, 0x6c, 0x2a, - 0x07, 0x58, 0xb5, 0xdd, 0x5d, 0xac, 0xba, 0x64, 0x7d, 0x06, 0x9a, 0xa2, 0xe0, 0x1e, 0x9b, 0xd5, - 0x10, 0x79, 0x2d, 0x95, 0x9e, 0x16, 0xd3, 0x6b, 0xa9, 0x74, 0x5a, 0xcc, 0x48, 0xff, 0x46, 0x80, - 0xbc, 0xd7, 0x37, 0xe2, 0xec, 0xc6, 0x77, 0x40, 0xb4, 0x4c, 0xac, 0xb4, 0x0f, 0x54, 0x07, 0xf3, - 0xb6, 0xe4, 0xab, 0x43, 0xde, 0x32, 0xf1, 0x36, 0x21, 0xb3, 0x96, 0x41, 0xdb, 0x30, 0xeb, 0xb8, - 0xea, 0xbe, 0x61, 0xee, 0x2b, 0xfe, 0x16, 0x3f, 0xb5, 0x2c, 0xc6, 0x44, 0x02, 0x22, 0xe7, 0xf6, - 0xe9, 0x3d, 0x26, 0xc5, 0xcf, 0x05, 0x98, 0x5d, 0xd1, 0x5b, 0x86, 0x59, 0x6f, 0x37, 0x8d, 0x58, - 0x37, 0x18, 0xde, 0x80, 0x8c, 0x43, 0x64, 0x06, 0xb3, 0x73, 0x00, 0x17, 0xd3, 0xf4, 0x0d, 0x99, - 0xa6, 0x37, 0xa0, 0x80, 0x8f, 0xdb, 0x06, 0x3b, 0x57, 0x60, 0x28, 0x27, 0x35, 0x7e, 0xdd, 0xf2, - 0x01, 0x2f, 0x79, 0xc5, 0xeb, 0xf4, 0x09, 0xa0, 0x70, 0x95, 0xe2, 0x04, 0x1a, 0x9f, 0xc0, 0x1c, - 0x15, 0xbd, 0x63, 0x3a, 0x31, 0xeb, 0x4b, 0xfa, 0x15, 0xb8, 0xd0, 0x2b, 0x3a, 0xce, 0x72, 0x3f, - 0xe7, 0xad, 0xbc, 0x89, 0xed, 0x58, 0x11, 0xaa, 0xaf, 0x6b, 0x2e, 0x38, 0xce, 0x32, 0xff, 0xba, - 0x00, 0x57, 0xa8, 0x6c, 0x7a, 0xf4, 0xb2, 0x87, 0xed, 0x0d, 0xac, 0x3a, 0xb1, 0xc2, 0xeb, 0x1b, - 0x30, 0xc5, 0x60, 0x32, 0xed, 0x9f, 0x93, 0xa5, 0x2c, 0x31, 0x33, 0xea, 0xae, 0x65, 0x13, 0x33, - 0x83, 0xbf, 0x92, 0x54, 0x58, 0x88, 0x2a, 0x45, 0x9c, 0x35, 0xfd, 0x2d, 0x01, 0x66, 0xb9, 0x85, - 0x47, 0xba, 0x72, 0xf9, 0x80, 0x18, 0x38, 0xa8, 0x02, 0x59, 0x8d, 0xfe, 0x52, 0xdc, 0x6e, 0x1b, - 0x53, 0xf9, 0xf9, 0x51, 0xc6, 0x21, 0x63, 0x6b, 0x74, 0xdb, 0x98, 0x58, 0x98, 0xde, 0x6f, 0xa2, - 0xa8, 0x50, 0x25, 0x47, 0x9a, 0x97, 0x74, 0x1c, 0xd1, 0xb4, 0x9e, 0x9d, 0xc6, 0x75, 0xf0, 0x0f, - 0x92, 0x5c, 0x09, 0x2c, 0x0f, 0x9e, 0x3c, 0x56, 0x83, 0xe2, 0x53, 0xb8, 0x14, 0xda, 0x3a, 0x0f, - 0x57, 0x3c, 0x71, 0x8e, 0x8a, 0x87, 0xb6, 0xdf, 0x03, 0x2a, 0xfa, 0x04, 0x42, 0x1b, 0xec, 0x0a, - 0xab, 0x93, 0x07, 0x55, 0xce, 0xa3, 0x8e, 0xd9, 0x40, 0x0a, 0xa3, 0x3b, 0xa8, 0x0c, 0x69, 0x7c, - 0xdc, 0x56, 0x74, 0xec, 0x68, 0x7c, 0xe2, 0x92, 0xa2, 0x04, 0x92, 0xa2, 0x0c, 0x18, 0xef, 0xd3, - 0xf8, 0xb8, 0x4d, 0x88, 0x68, 0x87, 0xac, 0x9b, 0xde, 0xba, 0x4e, 0x8b, 0xed, 0x9c, 0x8d, 0x05, - 0x82, 0x9e, 0xc2, 0xc5, 0x15, 0xfc, 0x25, 0x9d, 0x89, 0x90, 0xbe, 0x10, 0xe0, 0x6a, 0x64, 0xab, - 0xc5, 0xb9, 0x90, 0x7d, 0x04, 0x29, 0x5a, 0xf9, 0xc4, 0x39, 0x2b, 0x4f, 0xb9, 0xa4, 0xcf, 0x13, - 0x7c, 0x8c, 0xcb, 0xb8, 0x69, 0x11, 0xc5, 0xc6, 0xbe, 0x85, 0xf6, 0x04, 0x72, 0x47, 0x96, 0x8b, - 0x6d, 0xbf, 0xd9, 0x13, 0xe7, 0x6e, 0xf6, 0x19, 0x2a, 0xc0, 0x6b, 0xf1, 0x67, 0x30, 0x6b, 0x5a, - 0xa6, 0xd2, 0x2b, 0xf4, 0xfc, 0x7d, 0xa9, 0x60, 0x5a, 0xe6, 0xb3, 0x90, 0x5c, 0x7f, 0x9e, 0xe9, - 0xd3, 0x44, 0x9c, 0xf3, 0xcc, 0x8f, 0x04, 0x98, 0xf3, 0x2d, 0x9d, 0x98, 0xcd, 0xdd, 0x77, 0x21, - 0x69, 0x5a, 0x2f, 0xcf, 0xb3, 0x45, 0x49, 0xd2, 0x93, 0x55, 0xaf, 0xb7, 0x44, 0x71, 0xd6, 0xf7, - 0x9f, 0x25, 0x20, 0xf3, 0xb8, 0x1c, 0x67, 0x2d, 0x3f, 0xe2, 0xdb, 0xdf, 0xac, 0xbd, 0xa3, 0x7a, - 0xbb, 0x9f, 0x5f, 0xf1, 0x71, 0x79, 0x1d, 0x77, 0xbd, 0xde, 0x4e, 0xb8, 0xd0, 0x0a, 0x64, 0x7a, - 0x37, 0x4a, 0xc7, 0xd4, 0x54, 0xc0, 0xb5, 0x80, 0x61, 0x92, 0xca, 0xf5, 0x5c, 0x2d, 0x84, 0x08, - 0x57, 0x0b, 0x92, 0x8d, 0x6f, 0x29, 0x26, 0xce, 0x93, 0x4d, 0xc8, 0x44, 0x9c, 0x14, 0xa7, 0xa4, - 0xa7, 0x00, 0xa4, 0x3a, 0x71, 0x36, 0xc9, 0x0f, 0x93, 0x90, 0xdf, 0xee, 0x38, 0x07, 0x31, 0xf7, - 0xbe, 0x32, 0x40, 0xbb, 0xe3, 0x1c, 0x90, 0x11, 0x79, 0x6c, 0xf2, 0x3a, 0x9f, 0xe1, 0xc5, 0xe1, - 0x55, 0x9a, 0xf1, 0x35, 0x8e, 0x4d, 0x54, 0xe5, 0x42, 0xb0, 0x12, 0xb8, 0x82, 0xdc, 0x18, 0x85, - 0x2c, 0x1b, 0xc7, 0xe6, 0x26, 0xf6, 0x21, 0x25, 0x93, 0x84, 0x89, 0xa4, 0x8f, 0x60, 0x9a, 0x3c, - 0x28, 0xae, 0x75, 0x9e, 0x66, 0x9e, 0x22, 0x3c, 0x0d, 0x0b, 0x7d, 0x08, 0x19, 0xc6, 0x4d, 0x56, - 0xbf, 0x29, 0xba, 0xfa, 0x45, 0xd5, 0x85, 0xab, 0x91, 0xae, 0x7b, 0x69, 0xca, 0x4a, 0xd6, 0xba, - 0x0b, 0x30, 0xb9, 0x67, 0xd9, 0x9a, 0x77, 0x98, 0xcb, 0x1e, 0x58, 0x7b, 0x32, 0x48, 0xb3, 0x96, - 0x4a, 0x67, 0x44, 0x90, 0x7e, 0x53, 0x80, 0x82, 0xdf, 0x10, 0x71, 0x2e, 0x08, 0xe5, 0x1e, 0x2d, - 0x9e, 0xbf, 0x29, 0x88, 0x02, 0xa5, 0x7f, 0x41, 0x2d, 0x22, 0xcd, 0x3a, 0xa2, 0x2d, 0x13, 0x67, - 0x4f, 0xf9, 0x90, 0x39, 0xfa, 0x24, 0xce, 0xdb, 0xba, 0xd4, 0xe7, 0xe7, 0x3e, 0x5c, 0x30, 0x5a, - 0x64, 0x3e, 0x37, 0xdc, 0x66, 0x97, 0xc3, 0x36, 0x17, 0x7b, 0xa7, 0xc6, 0x73, 0xc1, 0xbb, 0xb2, - 0xf7, 0x4a, 0xfa, 0x1d, 0xba, 0x5b, 0x1d, 0xd4, 0x24, 0x4e, 0x55, 0xd7, 0x20, 0x67, 0x33, 0xd1, - 0xc4, 0xac, 0x39, 0xa7, 0xb6, 0x67, 0x7c, 0x56, 0xa2, 0xf0, 0xdf, 0x4e, 0x40, 0xe1, 0x69, 0x07, - 0xdb, 0xdd, 0x6f, 0x93, 0xba, 0x6f, 0x41, 0xe1, 0xa5, 0x6a, 0xb8, 0xca, 0x9e, 0x65, 0x2b, 0x9d, - 0xb6, 0xae, 0xba, 0x9e, 0xb7, 0x49, 0x8e, 0x90, 0x1f, 0x59, 0xf6, 0x0e, 0x25, 0x22, 0x0c, 0xe8, - 0xd0, 0xb4, 0x5e, 0x9a, 0x0a, 0x21, 0x53, 0xa0, 0x7c, 0x6c, 0xf2, 0x2d, 0xe4, 0xd2, 0x7b, 0xff, - 0xfa, 0x64, 0xe9, 0xe1, 0x58, 0x3e, 0x64, 0xd4, 0x5f, 0xae, 0xd3, 0x31, 0xf4, 0xe2, 0xce, 0x4e, - 0x6d, 0x55, 0x16, 0xa9, 0xc8, 0xe7, 0x4c, 0x62, 0xe3, 0xd8, 0x74, 0xa4, 0xbf, 0x95, 0x00, 0x31, - 0xd0, 0x51, 0x9c, 0x0d, 0x59, 0x81, 0xec, 0x8b, 0x0e, 0xb6, 0x8d, 0x57, 0x68, 0x46, 0xe0, 0x8c, - 0x64, 0xda, 0xb9, 0x07, 0xb3, 0xee, 0xb1, 0xa9, 0x30, 0x0f, 0x3f, 0xe6, 0xf8, 0xe1, 0x39, 0x2c, - 0x14, 0x5c, 0x52, 0x66, 0x42, 0xa7, 0x4e, 0x1f, 0x0e, 0xfa, 0x14, 0x66, 0x7a, 0xb4, 0x95, 0xfc, - 0x7a, 0xda, 0xca, 0xbe, 0x0c, 0x29, 0xea, 0xf7, 0x05, 0x40, 0x54, 0x51, 0x35, 0xb6, 0xc7, 0xff, - 0x6d, 0xe9, 0x4f, 0x77, 0x40, 0xa4, 0xae, 0x9a, 0x8a, 0xb1, 0xa7, 0xb4, 0x0c, 0xc7, 0x31, 0xcc, - 0x7d, 0xde, 0xa1, 0xf2, 0x94, 0x5e, 0xdb, 0xdb, 0x64, 0x54, 0xe9, 0xcf, 0xc1, 0x5c, 0x4f, 0x05, - 0xe2, 0x6c, 0xec, 0xeb, 0x30, 0xb3, 0xc7, 0x8e, 0x60, 0xa9, 0x70, 0xbe, 0x3d, 0x98, 0xa5, 0x34, - 0x96, 0x9f, 0xf4, 0x1f, 0x13, 0x70, 0x41, 0xc6, 0x8e, 0xd5, 0x3c, 0xc2, 0xf1, 0xab, 0xb0, 0x0a, - 0xfc, 0xec, 0x45, 0x79, 0x25, 0x4d, 0x66, 0x18, 0x33, 0x5b, 0xe6, 0x7a, 0xf7, 0xd8, 0xdf, 0x18, - 0xdd, 0x63, 0x07, 0x77, 0xd5, 0xf9, 0x4e, 0x5d, 0xaa, 0x67, 0xa7, 0xce, 0x82, 0x02, 0x3b, 0x3d, - 0xd6, 0x15, 0x07, 0xbf, 0x30, 0x3b, 0x2d, 0x0f, 0x0c, 0x15, 0x47, 0x15, 0xb2, 0xc6, 0x58, 0xea, - 0xf8, 0xc5, 0x56, 0xa7, 0x45, 0x6d, 0xe7, 0xd2, 0x25, 0x52, 0xde, 0xd3, 0x93, 0xa5, 0x7c, 0xcf, - 0x3b, 0x47, 0xce, 0x1b, 0xfe, 0x33, 0x91, 0x2e, 0x7d, 0x1f, 0x2e, 0xf6, 0x29, 0x3b, 0x4e, 0x8b, - 0xe7, 0x9f, 0x24, 0xe1, 0x4a, 0xaf, 0xf8, 0xb8, 0x21, 0xce, 0xb7, 0xbd, 0x41, 0xab, 0x90, 0x6b, - 0x19, 0xe6, 0xab, 0xed, 0x5e, 0xce, 0xb4, 0x0c, 0xd3, 0xa7, 0x45, 0x75, 0x8d, 0xa9, 0x6f, 0xb4, - 0x6b, 0xa8, 0xb0, 0x10, 0xd5, 0x76, 0x71, 0xf6, 0x8f, 0xcf, 0x05, 0x98, 0x89, 0x7b, 0x5b, 0xee, - 0xd5, 0xbc, 0xe0, 0xa4, 0x06, 0xe4, 0xbe, 0x81, 0x7d, 0xbc, 0xdf, 0x16, 0x00, 0x35, 0xec, 0x8e, - 0x49, 0x40, 0xed, 0x86, 0xb5, 0x1f, 0x67, 0x35, 0x2f, 0xc0, 0xa4, 0x61, 0xea, 0xf8, 0x98, 0x56, - 0x33, 0x25, 0xb3, 0x87, 0x9e, 0xa3, 0xc4, 0xe4, 0x58, 0x47, 0x89, 0xd2, 0xa7, 0x30, 0xd7, 0x53, - 0xc4, 0x38, 0xeb, 0xff, 0x27, 0x09, 0x98, 0xe3, 0x15, 0x89, 0x7d, 0x07, 0xf3, 0x1d, 0x98, 0x6c, - 0x12, 0x99, 0x23, 0xda, 0x99, 0xe6, 0xe9, 0xb5, 0x33, 0x4d, 0x8c, 0xbe, 0x0b, 0xd0, 0xb6, 0xf1, - 0x91, 0xc2, 0x58, 0x93, 0x63, 0xb1, 0x66, 0x08, 0x07, 0x25, 0xa0, 0x1f, 0x0b, 0x50, 0x20, 0x03, - 0xba, 0x6d, 0x5b, 0x6d, 0xcb, 0x21, 0x36, 0x8b, 0x33, 0x1e, 0xcc, 0x79, 0x7a, 0x7a, 0xb2, 0x94, - 0xdb, 0x34, 0xcc, 0x6d, 0xce, 0xd8, 0xa8, 0x8f, 0xed, 0xe0, 0xef, 0x85, 0x39, 0x14, 0xcb, 0x4d, - 0x4b, 0x3b, 0x0c, 0x0e, 0xc7, 0xc8, 0xcc, 0xe2, 0x8b, 0x73, 0xa4, 0x3f, 0x14, 0xe0, 0xc2, 0x37, - 0xb6, 0x5d, 0xfc, 0xff, 0x42, 0xd9, 0xd2, 0x33, 0x10, 0xe9, 0x8f, 0x9a, 0xb9, 0x67, 0xc5, 0xb9, - 0x71, 0xff, 0x3f, 0x05, 0x98, 0x0d, 0x09, 0x8e, 0xd3, 0xc0, 0x79, 0x55, 0x3d, 0xe5, 0x98, 0x3b, - 0x8c, 0x3b, 0x9e, 0xaa, 0xe4, 0x19, 0x9e, 0x9c, 0x75, 0xca, 0x22, 0xcc, 0x60, 0x32, 0x8b, 0xd1, - 0x2d, 0xde, 0x5d, 0x16, 0x64, 0xd2, 0xb7, 0xa3, 0x9f, 0xf5, 0x13, 0x94, 0xba, 0xd2, 0xaf, 0x10, - 0x0b, 0x2b, 0x3c, 0x28, 0xe3, 0x1c, 0xf2, 0xff, 0x38, 0x01, 0x97, 0xca, 0xec, 0x08, 0xdc, 0xf3, - 0x09, 0x89, 0xb3, 0x23, 0xce, 0xc3, 0xf4, 0x11, 0xb6, 0x1d, 0xc3, 0x62, 0xab, 0x7d, 0x4e, 0xf6, - 0x1e, 0xd1, 0x02, 0xa4, 0x1d, 0x53, 0x6d, 0x3b, 0x07, 0x96, 0x77, 0x9c, 0xe8, 0x3f, 0xfb, 0xfe, - 0x2b, 0x93, 0xaf, 0xee, 0xbf, 0x32, 0x35, 0xda, 0x7f, 0x65, 0xfa, 0x6b, 0xf8, 0xaf, 0xf0, 0xb3, - 0xbb, 0x7f, 0x29, 0xc0, 0xe5, 0x01, 0xcd, 0xc5, 0xd9, 0x39, 0x7f, 0x00, 0x59, 0x8d, 0x0b, 0x26, - 0xeb, 0x03, 0x3b, 0x98, 0xac, 0x91, 0x64, 0xaf, 0x08, 0x7d, 0x4e, 0x4f, 0x96, 0xc0, 0x2b, 0x6a, - 0x6d, 0x95, 0x2b, 0x87, 0xfc, 0xd6, 0xa5, 0xff, 0x04, 0x50, 0xa8, 0x1c, 0xb3, 0x4d, 0xf9, 0x3a, - 0xb3, 0x4a, 0xd0, 0x23, 0x48, 0xb7, 0x6d, 0xeb, 0xc8, 0xf0, 0xaa, 0x91, 0xef, 0x71, 0x5e, 0xf0, - 0xaa, 0xd1, 0xc7, 0xb5, 0xcd, 0x39, 0x64, 0x9f, 0x17, 0x35, 0x20, 0xb3, 0x61, 0x69, 0x6a, 0xf3, - 0x91, 0xd1, 0xf4, 0x06, 0xda, 0xdb, 0x67, 0x0b, 0x2a, 0xfa, 0x3c, 0xdb, 0xaa, 0x7b, 0xe0, 0x35, - 0x82, 0x4f, 0x44, 0x35, 0x48, 0x57, 0x5d, 0xb7, 0x4d, 0x5e, 0xf2, 0xf1, 0x77, 0x7b, 0x0c, 0xa1, - 0x84, 0xc5, 0xf3, 0xb8, 0xf5, 0xd8, 0x51, 0x03, 0x66, 0x1f, 0xd3, 0xf8, 0xb1, 0x72, 0xd3, 0xea, - 0xe8, 0x65, 0x1a, 0xef, 0xc6, 0x97, 0x89, 0x5b, 0x63, 0xc8, 0x7c, 0x5c, 0xae, 0xcb, 0x83, 0x02, - 0xd0, 0x0a, 0xa4, 0xeb, 0x0f, 0xb9, 0x30, 0x66, 0x46, 0xde, 0x1c, 0x43, 0x58, 0xfd, 0xa1, 0xec, - 0xb3, 0xa1, 0x35, 0xc8, 0xae, 0x7c, 0xd6, 0xb1, 0x31, 0x97, 0x32, 0x35, 0xd4, 0x73, 0xa2, 0x5f, - 0x0a, 0xe5, 0x92, 0xc3, 0xcc, 0xe8, 0xfb, 0x50, 0x20, 0x7a, 0x6b, 0xa8, 0xbb, 0x4d, 0x4f, 0x5e, - 0x9a, 0xca, 0x7b, 0x73, 0x0c, 0x79, 0x3e, 0xa7, 0x77, 0x24, 0xd0, 0x27, 0x6a, 0x41, 0x86, 0x5c, - 0x4f, 0x7b, 0x21, 0x04, 0xa9, 0x36, 0x69, 0x1a, 0x81, 0xba, 0x21, 0xd1, 0xdf, 0xe8, 0x2d, 0x98, - 0x36, 0x2d, 0x1d, 0x7b, 0x9d, 0x39, 0x57, 0xba, 0x70, 0x7a, 0xb2, 0x34, 0xb5, 0x65, 0xe9, 0xcc, - 0xd6, 0xe1, 0xbf, 0xe4, 0x29, 0x92, 0xa8, 0xa6, 0x2f, 0x5c, 0x83, 0x14, 0x69, 0x22, 0x32, 0x87, - 0xec, 0xaa, 0x0e, 0xde, 0xb1, 0x0d, 0x2e, 0xcd, 0x7b, 0x5c, 0xf8, 0xbb, 0x09, 0x48, 0xd4, 0x1f, - 0x12, 0x6b, 0x7e, 0xb7, 0xa3, 0x1d, 0x62, 0x97, 0xbf, 0xe7, 0x4f, 0xd4, 0xca, 0xb7, 0xf1, 0x9e, - 0xc1, 0x8c, 0xae, 0x8c, 0xcc, 0x9f, 0xd0, 0xeb, 0x00, 0xaa, 0xa6, 0x61, 0xc7, 0x51, 0xbc, 0x10, - 0xc0, 0x8c, 0x9c, 0x61, 0x94, 0x75, 0xdc, 0x25, 0x6c, 0x0e, 0xd6, 0x6c, 0xec, 0x7a, 0x3e, 0x54, - 0xec, 0x89, 0xb0, 0xb9, 0xb8, 0xd5, 0x56, 0x5c, 0xeb, 0x10, 0x9b, 0xb4, 0x49, 0x33, 0x64, 0x56, - 0x68, 0xb5, 0x1b, 0x84, 0x40, 0x26, 0x34, 0x6c, 0xea, 0xc1, 0xec, 0x93, 0x91, 0xfd, 0x67, 0x22, - 0xd2, 0xc6, 0xfb, 0x06, 0x0f, 0xa0, 0xcb, 0xc8, 0xfc, 0x89, 0x68, 0x49, 0xed, 0xb8, 0x07, 0xb4, - 0x25, 0x32, 0x32, 0xfd, 0x8d, 0x6e, 0x41, 0x81, 0xb9, 0x5d, 0x2a, 0xd8, 0xd4, 0x14, 0x3a, 0x0f, - 0x66, 0xe8, 0xeb, 0x1c, 0x23, 0x57, 0x4c, 0x8d, 0xcc, 0x7a, 0xe8, 0x21, 0x70, 0x82, 0x72, 0xd8, - 0x72, 0x88, 0x4e, 0x81, 0xa4, 0x2a, 0x15, 0x4e, 0x4f, 0x96, 0xb2, 0x75, 0xfa, 0x62, 0x7d, 0xb3, - 0x4e, 0xd6, 0x12, 0x96, 0x6a, 0xbd, 0xe5, 0xd4, 0xf4, 0x85, 0xbf, 0x2e, 0x40, 0xf2, 0x71, 0xb9, - 0x7e, 0x6e, 0x95, 0x79, 0x05, 0x4d, 0x86, 0x0a, 0x7a, 0x1b, 0x0a, 0xbb, 0x46, 0xb3, 0x69, 0x98, - 0xfb, 0xc4, 0xbe, 0xfa, 0x01, 0xd6, 0x3c, 0x85, 0xe5, 0x39, 0x79, 0x9b, 0x51, 0xd1, 0x35, 0xc8, - 0x6a, 0x36, 0xd6, 0xb1, 0xe9, 0x1a, 0x6a, 0xd3, 0xe1, 0x9a, 0x0b, 0x93, 0x16, 0xfe, 0xbc, 0x00, - 0x93, 0xb4, 0xb3, 0xa2, 0xd7, 0x20, 0xa3, 0x59, 0xa6, 0xab, 0x1a, 0x26, 0x9f, 0x75, 0x32, 0x72, - 0x40, 0x18, 0x5a, 0xbc, 0xeb, 0x30, 0xa3, 0x6a, 0x9a, 0xd5, 0x31, 0x5d, 0xc5, 0x54, 0x5b, 0x98, - 0x17, 0x33, 0xcb, 0x69, 0x5b, 0x6a, 0x0b, 0xa3, 0x25, 0xf0, 0x1e, 0xfd, 0xc8, 0xce, 0x8c, 0x0c, - 0x9c, 0xb4, 0x8e, 0xbb, 0x0b, 0x18, 0x32, 0x7e, 0xaf, 0x26, 0xf5, 0xed, 0x38, 0x7e, 0x09, 0xe8, - 0x6f, 0xf4, 0x36, 0x5c, 0x78, 0xd1, 0x51, 0x9b, 0xc6, 0x1e, 0xdd, 0xfc, 0xa2, 0x5e, 0xea, 0x34, - 0x33, 0x56, 0x14, 0xe4, 0xbf, 0xa3, 0x12, 0x68, 0x9e, 0xde, 0x20, 0x48, 0x06, 0x83, 0x80, 0xb9, - 0xec, 0x48, 0x5d, 0x98, 0x95, 0xb1, 0x6b, 0x77, 0x1b, 0x2c, 0xd8, 0xb5, 0x72, 0x84, 0x4d, 0x97, - 0xd4, 0xdd, 0x6a, 0x63, 0xe6, 0x24, 0xe2, 0xd5, 0xdd, 0x27, 0xa0, 0x9b, 0x90, 0x57, 0x5d, 0xd2, - 0xdd, 0x5c, 0xc5, 0xec, 0xb4, 0x76, 0xb1, 0xcd, 0x5c, 0x01, 0xe4, 0x1c, 0xa7, 0x6e, 0x51, 0x22, - 0x8f, 0xc8, 0xb0, 0xbb, 0x0a, 0xdd, 0x27, 0xe2, 0x59, 0x03, 0x25, 0x55, 0x08, 0x45, 0xba, 0x0b, - 0x17, 0x49, 0x3d, 0x2b, 0xa6, 0x66, 0x77, 0xdb, 0x44, 0xf2, 0x13, 0xfa, 0xd7, 0x41, 0x62, 0xe8, - 0x9c, 0x86, 0x1e, 0xcf, 0x48, 0x5f, 0x4e, 0x43, 0xae, 0x72, 0xdc, 0xb6, 0xec, 0x58, 0x77, 0x75, - 0x4a, 0x30, 0xcd, 0x81, 0xef, 0x88, 0xa3, 0xd8, 0xbe, 0x19, 0xc8, 0x3b, 0x87, 0xe6, 0x8c, 0xe8, - 0x99, 0x1f, 0x98, 0x7a, 0x88, 0xbb, 0xc4, 0xaa, 0x9f, 0x19, 0xc7, 0xaa, 0x9f, 0xe3, 0x58, 0x3a, - 0xcb, 0xe2, 0x48, 0xd7, 0x71, 0xb7, 0x51, 0x97, 0x79, 0x6c, 0x2c, 0x79, 0x70, 0xd0, 0x16, 0x64, - 0x5b, 0x47, 0x9a, 0xa6, 0xec, 0x19, 0x4d, 0x97, 0xfb, 0xaa, 0x45, 0xbb, 0x55, 0x6f, 0x3e, 0x2b, - 0x97, 0x1f, 0xd1, 0x44, 0xcc, 0xc7, 0x2b, 0x78, 0x96, 0x81, 0x48, 0x60, 0xbf, 0x51, 0x09, 0x80, - 0x39, 0x7e, 0x52, 0x7f, 0xa1, 0xe4, 0x39, 0x4e, 0xb8, 0x28, 0x1b, 0x0d, 0x8a, 0x90, 0x20, 0xc7, - 0xdc, 0x93, 0x5a, 0x06, 0x8b, 0x4a, 0xce, 0xb1, 0x6d, 0x38, 0x4a, 0xdc, 0x34, 0x68, 0x44, 0xf2, - 0x9b, 0xc0, 0x83, 0x6e, 0x14, 0xc7, 0x0b, 0xa1, 0x2b, 0xe5, 0x4e, 0x4f, 0x96, 0x32, 0x32, 0xa5, - 0xd6, 0xeb, 0x0d, 0x39, 0xc3, 0x12, 0xd4, 0x1d, 0xf7, 0x3c, 0x61, 0x16, 0xd3, 0xe3, 0x87, 0x59, - 0xfc, 0x65, 0x01, 0x2e, 0xf1, 0xf6, 0x51, 0x76, 0xa9, 0x6b, 0xb9, 0xda, 0x34, 0xdc, 0xae, 0x72, - 0x78, 0x34, 0x9f, 0xa6, 0xe6, 0xd6, 0x77, 0x22, 0xdb, 0x39, 0xd4, 0xbd, 0x8a, 0x5e, 0x6b, 0x77, - 0x37, 0x38, 0xf3, 0xfa, 0x51, 0xc5, 0x74, 0xed, 0x6e, 0xe9, 0xf2, 0xe9, 0xc9, 0xd2, 0xdc, 0xe0, - 0xdb, 0x67, 0xf2, 0x9c, 0x33, 0xc8, 0x82, 0xaa, 0x00, 0xd8, 0xef, 0xde, 0x74, 0xf6, 0x8c, 0x5e, - 0x36, 0x23, 0xc7, 0x81, 0x1c, 0xe2, 0x45, 0x77, 0x40, 0xe4, 0x61, 0x2d, 0x7b, 0x46, 0x13, 0x2b, - 0x8e, 0xf1, 0x19, 0xa6, 0xf3, 0x6c, 0x52, 0xce, 0x33, 0x3a, 0x11, 0x51, 0x37, 0x3e, 0xc3, 0xe8, - 0x3e, 0x5c, 0x0c, 0x5a, 0x40, 0xd9, 0xc5, 0x4d, 0xeb, 0x25, 0x4b, 0x9e, 0xa5, 0xc9, 0x91, 0xaf, - 0xfd, 0x12, 0x79, 0x45, 0x58, 0x16, 0x7e, 0x00, 0xf3, 0xc3, 0x2a, 0x1c, 0x1e, 0x8c, 0x19, 0x76, - 0x56, 0xfa, 0x7e, 0xef, 0x46, 0xc9, 0x18, 0x83, 0x86, 0x6f, 0x96, 0x7c, 0x90, 0x78, 0x5f, 0x90, - 0xfe, 0x4e, 0x02, 0x72, 0xa5, 0x4e, 0xf3, 0xf0, 0x49, 0xbb, 0xce, 0x6e, 0x0b, 0x40, 0x57, 0x21, - 0xa3, 0xab, 0xae, 0xca, 0x0a, 0x29, 0xb0, 0xf0, 0x36, 0x42, 0xa0, 0xb5, 0xb9, 0x0d, 0x85, 0x90, - 0x1f, 0x0a, 0xf7, 0xb6, 0xa7, 0xd5, 0x0e, 0xc8, 0xd4, 0x21, 0xfe, 0x7d, 0x98, 0x0f, 0x25, 0xa4, - 0xbb, 0x1a, 0x0a, 0x36, 0x5d, 0xdb, 0xc0, 0x6c, 0x67, 0x2e, 0x29, 0x87, 0x9c, 0x65, 0x6a, 0xe4, - 0x75, 0x85, 0xbd, 0x45, 0x0d, 0x98, 0x21, 0x09, 0xbb, 0x0a, 0x9d, 0x81, 0xbd, 0x9d, 0xd3, 0xfb, - 0x11, 0xd5, 0xea, 0x29, 0x77, 0x91, 0xea, 0xa7, 0x4c, 0x79, 0xe8, 0x4f, 0x39, 0x8b, 0x03, 0xca, - 0xc2, 0xc7, 0x20, 0xf6, 0x27, 0x08, 0xeb, 0x32, 0xc5, 0x74, 0x79, 0x21, 0xac, 0xcb, 0x64, 0x48, - 0x4f, 0x6b, 0xa9, 0x74, 0x4a, 0x9c, 0x94, 0x7e, 0x2b, 0x05, 0x79, 0xaf, 0x67, 0xc6, 0x69, 0xd2, - 0x97, 0x60, 0x92, 0xf4, 0x23, 0xcf, 0xb5, 0xe3, 0xd6, 0x88, 0x01, 0xc1, 0xfd, 0xbb, 0x49, 0xff, - 0xf2, 0xd0, 0x27, 0x65, 0x8d, 0x63, 0x4a, 0x59, 0xf8, 0xbd, 0x04, 0xa4, 0xa8, 0x15, 0x7d, 0x1f, - 0x52, 0xf4, 0x4e, 0x00, 0x61, 0xe4, 0x9d, 0x00, 0x9e, 0x6b, 0x00, 0x49, 0x8a, 0x36, 0xc9, 0xe0, - 0xd2, 0xbd, 0x79, 0x37, 0x33, 0x4e, 0xfe, 0x22, 0x9f, 0x77, 0xd3, 0x15, 0x7a, 0x7f, 0x42, 0xa3, - 0x4e, 0x4d, 0x23, 0x36, 0xe3, 0x7a, 0x6b, 0x64, 0x22, 0x64, 0x28, 0x96, 0xa8, 0xab, 0x92, 0x65, - 0xbb, 0x58, 0xe7, 0x46, 0xef, 0xb5, 0xb3, 0xba, 0x85, 0x67, 0xd4, 0x7b, 0x7c, 0xe8, 0x0a, 0x24, - 0xc9, 0x54, 0x38, 0xcd, 0xbc, 0x0e, 0x4e, 0x4f, 0x96, 0x92, 0x64, 0x12, 0x24, 0x34, 0xb4, 0x0c, - 0xd9, 0xde, 0xc9, 0x89, 0xd8, 0x4d, 0x74, 0x16, 0x0f, 0x4d, 0x2c, 0xd0, 0xf4, 0x47, 0x24, 0x03, - 0x7c, 0xac, 0x6b, 0x70, 0x7f, 0x83, 0x5f, 0x17, 0xb8, 0x7b, 0x65, 0x5d, 0x23, 0xcb, 0xaf, 0x1d, - 0xe7, 0xfa, 0x78, 0x17, 0x44, 0x5b, 0x35, 0x75, 0xab, 0x65, 0x7c, 0x86, 0xd9, 0x06, 0x83, 0xc3, - 0x4f, 0x5e, 0x0a, 0x3e, 0x9d, 0xee, 0x04, 0x38, 0xd2, 0x7f, 0x10, 0xb8, 0x2b, 0xa6, 0x5f, 0x8c, - 0x78, 0xcf, 0xc7, 0xb3, 0x7c, 0x77, 0xd2, 0xdc, 0xb3, 0x3c, 0x4f, 0x92, 0xd7, 0x86, 0xf9, 0x4d, - 0xd5, 0xcc, 0x3d, 0xcb, 0x3b, 0xe9, 0xb3, 0x3d, 0x82, 0xb3, 0xf0, 0xcb, 0x30, 0x49, 0x5f, 0xbf, - 0x42, 0x57, 0xf3, 0xdd, 0x7f, 0x13, 0x62, 0x52, 0xfa, 0xe3, 0x04, 0xbc, 0x41, 0xab, 0xfa, 0x0c, - 0xdb, 0xc6, 0x5e, 0x77, 0xdb, 0xb6, 0x5c, 0xac, 0xb9, 0x58, 0x0f, 0x36, 0xd8, 0x62, 0x6c, 0x02, - 0x1d, 0x32, 0xfc, 0x68, 0xd2, 0xd0, 0xf9, 0x25, 0x20, 0x8f, 0xbf, 0x1e, 0xf0, 0x4e, 0xb3, 0x23, - 0xcd, 0xda, 0xaa, 0x9c, 0x66, 0x92, 0x6b, 0x3a, 0x5a, 0x81, 0x4c, 0xdb, 0xab, 0xc6, 0xb9, 0xbc, - 0x5f, 0x7c, 0x2e, 0xb4, 0x0e, 0x05, 0x5e, 0x50, 0xb5, 0x69, 0x1c, 0x61, 0x45, 0x75, 0xcf, 0x33, - 0x23, 0xe4, 0x18, 0xef, 0x0a, 0x61, 0x5d, 0x71, 0xa5, 0xbf, 0x9a, 0x82, 0x9b, 0x67, 0xa8, 0x38, - 0xce, 0xee, 0xb5, 0x00, 0xe9, 0x23, 0x92, 0x91, 0xc1, 0x6b, 0x9f, 0x96, 0xfd, 0x67, 0xb4, 0xdb, - 0xb3, 0xac, 0xec, 0xa9, 0x46, 0x93, 0x2c, 0x43, 0xcc, 0xdf, 0x70, 0xb8, 0x47, 0x53, 0xb4, 0xff, - 0x5e, 0x68, 0x01, 0x7a, 0x44, 0x05, 0xd1, 0x64, 0x0e, 0xfa, 0x5c, 0x80, 0x05, 0x96, 0x21, 0x73, - 0x7a, 0xeb, 0xcb, 0x26, 0x45, 0xb3, 0x59, 0x8d, 0xc8, 0x66, 0x2c, 0x1d, 0x15, 0x43, 0x79, 0xf1, - 0x82, 0xcc, 0x87, 0x73, 0x0b, 0x17, 0x65, 0xe1, 0x37, 0x04, 0xc8, 0x86, 0x08, 0xe8, 0xd6, 0x40, - 0x88, 0x51, 0xf6, 0x34, 0x2a, 0xae, 0xe8, 0xe6, 0x40, 0x5c, 0x51, 0x29, 0xfd, 0xd5, 0xc9, 0x52, - 0x4a, 0x66, 0xae, 0xeb, 0x5e, 0x84, 0xd1, 0xf5, 0xe0, 0x46, 0x9b, 0x64, 0x5f, 0x22, 0xef, 0x4a, - 0x1b, 0x8a, 0x50, 0x55, 0xef, 0x44, 0x8c, 0x22, 0x54, 0xf2, 0x24, 0xfd, 0x24, 0x01, 0xb3, 0x2b, - 0xba, 0x5e, 0xaf, 0x53, 0x54, 0x13, 0xe7, 0x18, 0x43, 0x90, 0x22, 0xe6, 0x06, 0x0f, 0x87, 0xa2, - 0xbf, 0xd1, 0x5b, 0x80, 0x74, 0xc3, 0x61, 0x37, 0x43, 0x38, 0x07, 0xaa, 0x6e, 0xbd, 0x0c, 0x0e, - 0xbe, 0x67, 0xbd, 0x37, 0x75, 0xef, 0x05, 0xaa, 0x03, 0xb5, 0xb5, 0x15, 0xc7, 0x55, 0xfd, 0x8d, - 0xfd, 0x9b, 0x63, 0x05, 0xd8, 0x30, 0xe3, 0xd8, 0x7f, 0x94, 0x33, 0x44, 0x0e, 0xfd, 0x49, 0x4c, - 0x3e, 0x83, 0x34, 0x8a, 0xab, 0xa8, 0x8e, 0x17, 0x1a, 0xc2, 0xee, 0xa4, 0xc8, 0x33, 0xfa, 0x8a, - 0xc3, 0x22, 0x3e, 0x98, 0x47, 0x79, 0xa0, 0x9a, 0x38, 0xb7, 0x65, 0xff, 0xa6, 0x00, 0x79, 0x19, - 0xef, 0xd9, 0xd8, 0x39, 0x88, 0x53, 0xe7, 0x8f, 0x60, 0xc6, 0x66, 0x52, 0x95, 0x3d, 0xdb, 0x6a, - 0x9d, 0x67, 0xae, 0xc8, 0x72, 0xc6, 0x47, 0xb6, 0xd5, 0xe2, 0x53, 0xf2, 0x33, 0x28, 0xf8, 0x65, - 0x8c, 0xb3, 0xf2, 0x7f, 0x9b, 0x06, 0x8f, 0x32, 0xc1, 0x71, 0x9f, 0x40, 0xc7, 0xab, 0x01, 0xba, - 0x35, 0x1f, 0x2e, 0x68, 0x9c, 0x6a, 0xf8, 0xf7, 0x02, 0xe4, 0xeb, 0x9d, 0x5d, 0x76, 0xe3, 0x51, - 0x7c, 0x1a, 0xa8, 0x40, 0xa6, 0x89, 0xf7, 0x5c, 0xe5, 0x95, 0x7c, 0xa1, 0xd3, 0x84, 0x95, 0x7a, - 0x82, 0x3f, 0x06, 0xb0, 0x69, 0xf4, 0x14, 0x95, 0x93, 0x3c, 0xa7, 0x9c, 0x0c, 0xe5, 0x25, 0x64, - 0xb2, 0xea, 0x14, 0xfc, 0x6a, 0xc6, 0xb9, 0xbe, 0x3c, 0xef, 0x99, 0x1d, 0x92, 0xe7, 0x99, 0x1d, - 0x66, 0xb9, 0xc1, 0x1a, 0x3d, 0x43, 0x14, 0x61, 0x8e, 0x9a, 0x65, 0x8a, 0xda, 0x6e, 0x37, 0x0d, - 0x0f, 0xf6, 0xd0, 0xf9, 0x27, 0x25, 0xcf, 0xd2, 0x57, 0x2b, 0xec, 0x0d, 0x05, 0x3c, 0xe8, 0x87, - 0x02, 0xcc, 0xec, 0xd9, 0x18, 0x7f, 0x86, 0x15, 0x3a, 0x25, 0x8f, 0xe7, 0x55, 0xb0, 0x4a, 0xca, - 0xf0, 0xb5, 0x4f, 0x1d, 0xb3, 0x2c, 0xe3, 0x3a, 0xc9, 0x17, 0x6d, 0x81, 0xa8, 0x35, 0xd9, 0x39, - 0xa8, 0xef, 0xe1, 0x30, 0x35, 0xfe, 0x00, 0x28, 0x30, 0xe6, 0xc0, 0xc9, 0xe1, 0x29, 0x19, 0x4c, - 0xaa, 0xae, 0xf0, 0x0b, 0xe8, 0xa8, 0xb1, 0xdd, 0xeb, 0xe1, 0x10, 0x8e, 0x22, 0x0f, 0xdd, 0x5b, - 0x57, 0x94, 0xb1, 0xaa, 0x73, 0xcb, 0x9d, 0x8c, 0x2b, 0xff, 0x81, 0x8f, 0xab, 0xe7, 0x30, 0x4b, - 0xfb, 0x4d, 0xdc, 0xc1, 0xa0, 0xd2, 0xdf, 0x4f, 0x02, 0x0a, 0x4b, 0xfe, 0xe6, 0xfa, 0x5b, 0x22, - 0xbe, 0xfe, 0xb6, 0x06, 0x52, 0xc8, 0x18, 0x6a, 0xaa, 0x8e, 0xab, 0x30, 0x57, 0x3a, 0x47, 0x69, - 0x63, 0x5b, 0x71, 0xb0, 0x66, 0xf1, 0xfb, 0x80, 0x04, 0x79, 0x31, 0x48, 0xb9, 0xa1, 0x3a, 0xee, - 0x53, 0x96, 0x6e, 0x1b, 0xdb, 0x75, 0x9a, 0x0a, 0x3d, 0x84, 0x4b, 0x2d, 0xf5, 0x38, 0x8a, 0x7f, - 0x92, 0xf2, 0xcf, 0xb5, 0xd4, 0xe3, 0x01, 0xa6, 0x0f, 0x60, 0x21, 0x9a, 0x49, 0x71, 0xb0, 0x77, - 0xd4, 0x76, 0x29, 0x82, 0xb1, 0x8e, 0x5d, 0xb4, 0x02, 0x10, 0x80, 0x08, 0xbe, 0x46, 0x8f, 0x83, - 0x21, 0x32, 0x3e, 0x86, 0x90, 0x7e, 0x24, 0x40, 0x7e, 0xd3, 0xd8, 0xb7, 0xd5, 0x58, 0x6f, 0xdb, - 0x41, 0x1f, 0xf4, 0x9e, 0x4d, 0x66, 0x1f, 0x2c, 0x44, 0xf9, 0x9e, 0xb0, 0x14, 0xde, 0xfe, 0x23, - 0x67, 0x20, 0x4b, 0x9f, 0x5f, 0xa2, 0x38, 0xe7, 0x7c, 0x0d, 0x5e, 0xa7, 0xde, 0x7c, 0xdc, 0x95, - 0xe7, 0x1b, 0x41, 0x37, 0xd2, 0xef, 0x0a, 0xb0, 0x38, 0x2c, 0x97, 0x38, 0x07, 0x84, 0x4c, 0xef, - 0x1d, 0xa4, 0x39, 0x28, 0xfe, 0x88, 0x38, 0x63, 0xa6, 0x41, 0x7c, 0x24, 0x80, 0x5f, 0xb6, 0x3a, - 0xbd, 0x91, 0x90, 0xfd, 0x76, 0x88, 0x82, 0xea, 0x9a, 0x6a, 0xd2, 0x50, 0xe1, 0x26, 0x56, 0x8f, - 0x30, 0x77, 0x44, 0x8c, 0x75, 0x96, 0xf8, 0x42, 0x80, 0xc5, 0x61, 0xb9, 0xc4, 0xa9, 0xa0, 0xef, - 0xc0, 0x34, 0xf3, 0x68, 0xf3, 0x40, 0xcd, 0x95, 0x21, 0x51, 0xd1, 0xa6, 0x17, 0x8b, 0xe3, 0xa5, - 0x97, 0x1a, 0x90, 0x2f, 0xa9, 0xb6, 0x6d, 0xc4, 0xba, 0xf5, 0x20, 0xfd, 0x44, 0x80, 0x82, 0x2f, - 0x36, 0xce, 0x9a, 0x7e, 0xfd, 0x40, 0x0f, 0xe9, 0x3f, 0x5f, 0x85, 0x19, 0x5e, 0xfe, 0x1d, 0xd3, - 0xb0, 0x4c, 0x74, 0x1f, 0x92, 0xfb, 0xfc, 0x00, 0x2b, 0x1b, 0xb9, 0x47, 0x1f, 0x5c, 0xf3, 0x58, - 0x9d, 0x90, 0x49, 0x5a, 0xc2, 0xd2, 0xee, 0xb8, 0x11, 0x05, 0x08, 0x22, 0x15, 0xc2, 0x2c, 0xed, - 0x8e, 0x8b, 0xea, 0x50, 0xd0, 0x82, 0xbb, 0xe5, 0x14, 0xc2, 0x9e, 0x1c, 0xba, 0xa1, 0x1c, 0x79, - 0xcb, 0x5f, 0x75, 0x42, 0xce, 0x6b, 0x3d, 0x2f, 0x50, 0x39, 0x7c, 0xa5, 0x59, 0x6a, 0xc0, 0x0d, - 0x32, 0x68, 0xfa, 0xde, 0xeb, 0xd4, 0xaa, 0x13, 0xa1, 0x9b, 0xcf, 0xd0, 0x07, 0x30, 0xa5, 0xd3, - 0xcb, 0xb3, 0xb8, 0x3d, 0x11, 0xd5, 0xe0, 0x3d, 0x77, 0x94, 0x55, 0x27, 0x64, 0xce, 0x81, 0xd6, - 0x60, 0x86, 0xfd, 0x62, 0x68, 0x97, 0x5b, 0x01, 0x37, 0x87, 0x4b, 0x08, 0xd9, 0xe1, 0xd5, 0x09, - 0x39, 0xab, 0x07, 0x54, 0xf4, 0x18, 0xb2, 0x5a, 0x13, 0xab, 0x36, 0x17, 0x75, 0x6b, 0x68, 0xec, - 0xe6, 0xc0, 0x85, 0x5b, 0xd5, 0x09, 0x19, 0x34, 0x9f, 0x48, 0x0a, 0x65, 0xd3, 0x7b, 0x97, 0xb8, - 0xa4, 0xb7, 0x87, 0x16, 0x6a, 0xf0, 0x12, 0xab, 0x2a, 0xb5, 0xcf, 0x7d, 0x2a, 0x7a, 0x07, 0x52, - 0x8e, 0xa6, 0x9a, 0xdc, 0x24, 0x59, 0x1c, 0x72, 0x31, 0x4e, 0xc0, 0x4c, 0x53, 0xa3, 0x0f, 0x19, - 0x50, 0x76, 0x8f, 0xbd, 0x53, 0x83, 0x28, 0x9d, 0xf6, 0x5c, 0xc0, 0x40, 0x74, 0x8a, 0x29, 0x81, - 0xe8, 0x41, 0xd5, 0x5b, 0x86, 0xa9, 0xd0, 0x83, 0x19, 0x7a, 0x4c, 0x10, 0xad, 0x87, 0x81, 0x28, - 0xf6, 0x2a, 0xbd, 0xe5, 0xc1, 0x23, 0xa2, 0x4d, 0xc8, 0x31, 0x41, 0x1d, 0x16, 0x60, 0x3d, 0xbf, - 0x3c, 0xd4, 0x17, 0x21, 0x22, 0xc4, 0xbb, 0x3a, 0x21, 0xcf, 0xa8, 0x21, 0x72, 0x50, 0xae, 0x16, - 0xb6, 0xf7, 0xd9, 0x79, 0xc4, 0x88, 0x72, 0x85, 0x1d, 0x3c, 0xfd, 0x72, 0x51, 0x22, 0xfa, 0x35, - 0xb8, 0xc0, 0x04, 0xb9, 0xdc, 0x6f, 0x8d, 0xbb, 0x3f, 0xbd, 0x3e, 0xd4, 0x8f, 0x60, 0x68, 0x50, - 0x74, 0x75, 0x42, 0x46, 0xea, 0xc0, 0x4b, 0xa4, 0xc1, 0x45, 0x96, 0x03, 0x8f, 0xaa, 0xb5, 0x79, - 0x20, 0xe8, 0xfc, 0x0d, 0x9a, 0xc5, 0x5b, 0xc3, 0xb2, 0x88, 0x0c, 0xf6, 0xad, 0x4e, 0xc8, 0x73, - 0xea, 0xe0, 0xdb, 0xa0, 0x1a, 0x36, 0x8f, 0x5f, 0xe4, 0xdd, 0xed, 0xad, 0xd1, 0xd5, 0x88, 0x8a, - 0xfb, 0xf4, 0xab, 0xd1, 0xf3, 0x92, 0x34, 0xa0, 0x7f, 0x7b, 0x03, 0xed, 0x4c, 0x33, 0x43, 0x1b, - 0x30, 0x22, 0xc8, 0x91, 0x34, 0xe0, 0x41, 0x88, 0x8c, 0x8a, 0x90, 0xd8, 0xd7, 0xe8, 0xa9, 0x5f, - 0xb4, 0xe9, 0xe4, 0x07, 0xf2, 0x55, 0x27, 0xe4, 0xc4, 0xbe, 0x86, 0x3e, 0x86, 0x34, 0x8b, 0xca, - 0x3a, 0x36, 0xe7, 0xf3, 0x43, 0xe7, 0xec, 0xde, 0xd8, 0xb6, 0xea, 0x84, 0x4c, 0x03, 0xc1, 0x78, - 0x47, 0xe6, 0x11, 0x37, 0x54, 0x44, 0x71, 0x44, 0x30, 0x76, 0x5f, 0xdc, 0x13, 0xe9, 0x30, 0xb6, - 0x4f, 0x44, 0xdb, 0x90, 0xe7, 0x4b, 0xb7, 0x17, 0x41, 0x20, 0x0e, 0xf5, 0xd4, 0x89, 0x0a, 0x22, - 0xa8, 0xd2, 0x2d, 0xca, 0x10, 0x9d, 0xb4, 0x5d, 0xaf, 0x44, 0xde, 0x76, 0xb3, 0x43, 0xdb, 0x6e, - 0xa8, 0x43, 0x3b, 0x69, 0x3b, 0x7b, 0xe0, 0x25, 0x7a, 0x0f, 0x26, 0xd9, 0x38, 0x41, 0x54, 0x64, - 0x94, 0xf3, 0x59, 0xdf, 0x10, 0x61, 0xe9, 0xc9, 0xec, 0xe5, 0x72, 0xc7, 0x5c, 0xa5, 0x69, 0xed, - 0xcf, 0xcf, 0x0d, 0x9d, 0xbd, 0x06, 0x5d, 0x8c, 0xc9, 0xec, 0xe5, 0x06, 0x54, 0xd2, 0x81, 0x6c, - 0xf6, 0x86, 0x0f, 0xb1, 0x0b, 0x43, 0x3b, 0x50, 0x84, 0xbf, 0x6e, 0x95, 0x86, 0x4c, 0x05, 0x64, - 0x7f, 0x62, 0x75, 0xb0, 0x42, 0x27, 0xc5, 0x8b, 0xa3, 0x27, 0xd6, 0x9e, 0xdb, 0xca, 0xfc, 0x89, - 0x95, 0x51, 0xd1, 0x33, 0x10, 0xf9, 0x95, 0x39, 0x8a, 0xe7, 0x3f, 0x36, 0x7f, 0x89, 0xca, 0xbb, - 0x1b, 0xb9, 0x20, 0x46, 0xb9, 0x16, 0x56, 0x09, 0x96, 0xec, 0x7d, 0x83, 0x3e, 0x81, 0x59, 0x2a, - 0x4f, 0xd1, 0x82, 0x5b, 0x8e, 0xe6, 0xe7, 0x07, 0xee, 0xcc, 0x19, 0x7e, 0x21, 0x92, 0x27, 0x59, - 0xd4, 0xfa, 0x5e, 0x91, 0xf1, 0x60, 0x98, 0x86, 0x4b, 0xd7, 0xee, 0x85, 0xa1, 0xe3, 0xa1, 0xf7, - 0x86, 0xd7, 0x2a, 0xb5, 0xb5, 0x28, 0x85, 0x74, 0xe3, 0xbe, 0x19, 0xef, 0xb5, 0xa1, 0xdd, 0x78, - 0xc8, 0x64, 0x97, 0x73, 0x7b, 0xe6, 0xb9, 0x55, 0x00, 0xb6, 0x83, 0x40, 0x41, 0xd1, 0xe2, 0x50, - 0x03, 0xa0, 0xdf, 0x9f, 0x96, 0x18, 0x00, 0x4d, 0x8f, 0x46, 0x0c, 0x00, 0x76, 0xdc, 0x35, 0x7f, - 0x6d, 0xf8, 0x62, 0x15, 0x3e, 0x5f, 0xa7, 0x8b, 0x15, 0x25, 0x10, 0x83, 0x8c, 0xc0, 0xb9, 0x2e, - 0x1d, 0xe1, 0xd7, 0x87, 0xee, 0xde, 0xf4, 0x05, 0xda, 0x55, 0x27, 0xe4, 0xf4, 0x0b, 0x4e, 0x22, - 0xbd, 0x8a, 0x89, 0xe0, 0x63, 0xfb, 0xde, 0xd0, 0x5e, 0x35, 0x18, 0x61, 0x45, 0x7a, 0xd5, 0x8b, - 0x80, 0x1a, 0x2c, 0x79, 0x0e, 0x3b, 0xc8, 0x9a, 0x7f, 0x63, 0xf4, 0x92, 0xd7, 0x7b, 0xec, 0xe6, - 0x2f, 0x79, 0x9c, 0xcc, 0x96, 0x3c, 0x5d, 0x71, 0x1c, 0xea, 0xa6, 0x33, 0x7f, 0x73, 0xc4, 0x92, - 0xd7, 0xb7, 0xb5, 0xcd, 0x96, 0x3c, 0xbd, 0xce, 0x38, 0x89, 0xf5, 0x67, 0x7b, 0x57, 0x44, 0x71, - 0x60, 0x7f, 0x7b, 0xa8, 0xf5, 0x17, 0x79, 0x87, 0x15, 0xb1, 0xfe, 0xec, 0x9e, 0x17, 0xe8, 0xbb, - 0x30, 0xcd, 0xb7, 0x12, 0xe7, 0xef, 0x8c, 0x30, 0xa9, 0xc3, 0xbb, 0xbf, 0xa4, 0x3b, 0x72, 0x1e, - 0x36, 0x39, 0xb0, 0x2d, 0x4c, 0x36, 0xf9, 0xdd, 0x1d, 0x31, 0x39, 0x0c, 0xec, 0xa2, 0xb2, 0xc9, - 0x21, 0x20, 0x93, 0xd2, 0x38, 0x6c, 0xfb, 0x6d, 0xfe, 0x97, 0x86, 0x96, 0xa6, 0x77, 0x1f, 0x92, - 0x94, 0x86, 0xf3, 0xd0, 0xc5, 0x82, 0xae, 0xd5, 0x4c, 0x3b, 0x6f, 0x0e, 0x5f, 0x2c, 0xfa, 0x37, - 0x74, 0xaa, 0xde, 0x41, 0x21, 0xd3, 0xca, 0x5f, 0x10, 0xe0, 0x1a, 0xeb, 0x03, 0xf4, 0x98, 0xa4, - 0xab, 0xf8, 0xa7, 0x5c, 0xa1, 0xdd, 0xaa, 0xfb, 0x54, 0xfc, 0x7b, 0xe7, 0x3f, 0x94, 0xf1, 0x72, - 0x7c, 0x5d, 0x1d, 0x95, 0x8e, 0x28, 0xa3, 0xc5, 0x70, 0xfd, 0xfc, 0x83, 0xa1, 0xca, 0xe8, 0xdd, - 0x8b, 0x20, 0xca, 0xe0, 0x3c, 0xa8, 0x09, 0xf3, 0x6c, 0x48, 0x04, 0xb8, 0xd7, 0x2f, 0xfa, 0xc3, - 0xa1, 0x9e, 0xaf, 0x23, 0x11, 0x7f, 0x75, 0x42, 0xbe, 0xf4, 0x22, 0x32, 0x01, 0xc9, 0x8d, 0xde, - 0x01, 0x69, 0x04, 0x30, 0x55, 0xf1, 0xf0, 0xe4, 0x3b, 0x43, 0x73, 0x1b, 0x09, 0x9f, 0x49, 0x6e, - 0x4e, 0x64, 0x02, 0xa2, 0x9a, 0x5d, 0x06, 0x0d, 0xe7, 0xdf, 0x1d, 0xaa, 0x9a, 0x5e, 0x4c, 0x4a, - 0x54, 0xc3, 0x79, 0x4a, 0xd3, 0xdc, 0xe5, 0xc2, 0x0f, 0xed, 0x2e, 0x88, 0xe2, 0x5a, 0x2a, 0x7d, - 0x59, 0x9c, 0x5f, 0x4b, 0xa5, 0xaf, 0x88, 0x0b, 0x6b, 0xa9, 0xf4, 0x55, 0xf1, 0xb5, 0xb5, 0x54, - 0x7a, 0x49, 0xbc, 0xb6, 0x96, 0x4a, 0x4b, 0xe2, 0x0d, 0xe9, 0xe7, 0x57, 0x21, 0xe7, 0x21, 0x4b, - 0x06, 0xf9, 0x1e, 0x84, 0x21, 0xdf, 0xe2, 0x30, 0xc8, 0xc7, 0xb1, 0x28, 0xc7, 0x7c, 0x0f, 0xc2, - 0x98, 0x6f, 0x71, 0x18, 0xe6, 0x0b, 0x78, 0x08, 0xe8, 0x6b, 0x0c, 0x03, 0x7d, 0x77, 0xc7, 0x00, - 0x7d, 0xbe, 0xa8, 0x7e, 0xd4, 0xb7, 0x3a, 0x88, 0xfa, 0xde, 0x18, 0x8d, 0xfa, 0x7c, 0x51, 0x21, - 0xd8, 0xf7, 0x61, 0x1f, 0xec, 0xbb, 0x3e, 0x02, 0xf6, 0xf9, 0xfc, 0x1e, 0xee, 0x5b, 0x8f, 0xc4, - 0x7d, 0xb7, 0xce, 0xc2, 0x7d, 0xbe, 0x9c, 0x1e, 0xe0, 0x57, 0x8d, 0x02, 0x7e, 0x37, 0xcf, 0x00, - 0x7e, 0xbe, 0xa8, 0x30, 0xf2, 0x5b, 0x8f, 0x44, 0x7e, 0xb7, 0xce, 0x42, 0x7e, 0x41, 0xb1, 0xc2, - 0xd0, 0xef, 0xdd, 0x1e, 0xe8, 0xb7, 0x34, 0x14, 0xfa, 0xf9, 0xdc, 0x0c, 0xfb, 0x7d, 0xd4, 0x8f, - 0xfd, 0xae, 0x8f, 0xc0, 0x7e, 0x81, 0x62, 0x39, 0xf8, 0xab, 0x46, 0x81, 0xbf, 0x9b, 0x67, 0x80, - 0xbf, 0x40, 0x17, 0x21, 0xf4, 0xb7, 0x15, 0x8d, 0xfe, 0x6e, 0x9f, 0x89, 0xfe, 0x7c, 0x69, 0xbd, - 0xf0, 0xaf, 0x1a, 0x05, 0xff, 0x6e, 0x9e, 0x01, 0xff, 0xfa, 0x4a, 0xc6, 0xf0, 0x9f, 0x3a, 0x12, - 0xff, 0xbd, 0x35, 0x26, 0xfe, 0xf3, 0x45, 0x47, 0x01, 0x40, 0x7d, 0x34, 0x00, 0x2c, 0x8e, 0x0b, - 0x00, 0xfd, 0x4c, 0x22, 0x11, 0xa0, 0x3a, 0x12, 0x01, 0xbe, 0x35, 0x26, 0x02, 0xec, 0xab, 0x48, - 0x2f, 0x04, 0xdc, 0x8a, 0x86, 0x80, 0xb7, 0xcf, 0x84, 0x80, 0x41, 0x2b, 0xf6, 0x60, 0xc0, 0xe5, - 0x10, 0x06, 0x7c, 0x7d, 0x08, 0x06, 0xf4, 0x59, 0x09, 0x08, 0xfc, 0xde, 0x00, 0x08, 0x94, 0x46, - 0x81, 0x40, 0x9f, 0xd7, 0x47, 0x81, 0xd5, 0x28, 0x14, 0x78, 0xf3, 0x0c, 0x14, 0x18, 0xf4, 0x9b, - 0x10, 0x0c, 0x7c, 0x3a, 0x04, 0x06, 0xde, 0x39, 0x1b, 0x06, 0xfa, 0xf2, 0xfa, 0x70, 0xa0, 0x3a, - 0x12, 0x07, 0xbe, 0x35, 0x26, 0x0e, 0x0c, 0x5a, 0x30, 0x02, 0x08, 0xbe, 0xdf, 0x0b, 0x04, 0xaf, - 0x0d, 0x07, 0x82, 0xbe, 0x18, 0x8e, 0x04, 0xd7, 0x23, 0x91, 0xe0, 0xad, 0xb3, 0x90, 0x60, 0x30, - 0x9b, 0x85, 0xa1, 0xe0, 0x56, 0x34, 0x14, 0xbc, 0x7d, 0x26, 0x14, 0x0c, 0x3a, 0x52, 0x0f, 0x16, - 0x5c, 0x8f, 0xc4, 0x82, 0xb7, 0xce, 0xc2, 0x82, 0x7d, 0x53, 0x2d, 0x07, 0x83, 0xcf, 0x87, 0x82, - 0xc1, 0x7b, 0xe3, 0x80, 0x41, 0x5f, 0xe8, 0x00, 0x1a, 0xfc, 0x74, 0x38, 0x1a, 0xfc, 0xa5, 0x73, - 0x5c, 0x8f, 0x1b, 0x09, 0x07, 0xbf, 0x37, 0x00, 0x07, 0xa5, 0x51, 0x70, 0x30, 0x18, 0x19, 0x1e, - 0x1e, 0xac, 0x44, 0xa0, 0xb7, 0x37, 0x46, 0xa3, 0xb7, 0x60, 0x21, 0x0f, 0xe0, 0xdb, 0x87, 0x7d, - 0xf0, 0xed, 0xfa, 0x99, 0xde, 0xa0, 0x21, 0xfc, 0x56, 0x1a, 0xc4, 0x6f, 0x37, 0x46, 0xe2, 0x37, - 0x5f, 0x42, 0x00, 0xe0, 0xd6, 0x23, 0x01, 0xdc, 0xad, 0xb3, 0x00, 0x5c, 0xd0, 0x15, 0xc2, 0x08, - 0x6e, 0x2b, 0x1a, 0xc1, 0xdd, 0x3e, 0x13, 0xc1, 0xf5, 0x2d, 0x5b, 0x1e, 0x84, 0xab, 0x46, 0x41, - 0xb8, 0x9b, 0x67, 0x40, 0xb8, 0xf0, 0xb2, 0xe5, 0x63, 0xb8, 0xc6, 0x30, 0x0c, 0x77, 0x77, 0x0c, - 0x0c, 0x17, 0x18, 0x73, 0x7d, 0x20, 0xee, 0xe3, 0x7e, 0x10, 0x27, 0x8d, 0x02, 0x71, 0x41, 0x27, - 0xf2, 0x50, 0xdc, 0x56, 0x34, 0x8a, 0xbb, 0x7d, 0x26, 0x8a, 0x0b, 0x8f, 0xeb, 0x10, 0x8c, 0xfb, - 0xb8, 0x1f, 0xc6, 0x49, 0xa3, 0x60, 0x5c, 0x50, 0x1e, 0x0f, 0xc7, 0x55, 0xa3, 0x70, 0xdc, 0xcd, - 0x33, 0x70, 0x5c, 0x68, 0xba, 0x0f, 0x80, 0xdc, 0x5f, 0x1c, 0x1f, 0xc8, 0xbd, 0xff, 0xaa, 0xde, - 0x75, 0x67, 0x23, 0xb9, 0x8f, 0xfb, 0x91, 0x9c, 0x34, 0x0a, 0xc9, 0x05, 0xfa, 0xf0, 0xa0, 0x5c, - 0xeb, 0x4c, 0x28, 0x77, 0xff, 0x1c, 0x50, 0xce, 0x97, 0x3f, 0x0c, 0xcb, 0xb5, 0xce, 0xc4, 0x72, - 0xf7, 0xcf, 0x81, 0xe5, 0x82, 0xec, 0x86, 0x80, 0xb9, 0x8f, 0xfb, 0xc1, 0x9c, 0x34, 0x0a, 0xcc, - 0x05, 0xda, 0x39, 0x37, 0x9a, 0x7b, 0x4d, 0x7c, 0xbd, 0x07, 0xd3, 0xfd, 0xb5, 0x0c, 0x4c, 0x55, - 0x23, 0xce, 0x04, 0x85, 0x57, 0x39, 0x13, 0x44, 0xdf, 0x85, 0xab, 0xfe, 0x03, 0xf5, 0xe7, 0x52, - 0x78, 0x48, 0x9c, 0xd6, 0xb4, 0xb4, 0x43, 0xba, 0x54, 0xa6, 0xe5, 0x79, 0x3f, 0xc9, 0x23, 0xdb, - 0x6a, 0xb1, 0xd0, 0x38, 0xea, 0x25, 0x83, 0x56, 0xc9, 0x18, 0xa6, 0x36, 0xe1, 0xd9, 0x37, 0x8e, - 0x0e, 0xde, 0x89, 0xc9, 0x59, 0x5f, 0xe1, 0x12, 0x07, 0xf4, 0x2e, 0xe4, 0x3a, 0x0e, 0xb6, 0x95, - 0xb6, 0x6d, 0x58, 0xb6, 0xe1, 0xb2, 0x70, 0x34, 0xa1, 0x24, 0x7e, 0x75, 0xb2, 0x34, 0xb3, 0xe3, - 0x60, 0x7b, 0x9b, 0xd3, 0xe5, 0x99, 0x4e, 0xe8, 0xc9, 0xfb, 0xf4, 0xdf, 0xe4, 0xf8, 0x9f, 0xfe, - 0x7b, 0x0a, 0x22, 0xf5, 0xd0, 0x09, 0x2f, 0xa3, 0xec, 0x9e, 0xb6, 0xe8, 0x15, 0x5f, 0xd5, 0x43, - 0x2b, 0x25, 0xbd, 0xaf, 0xad, 0x60, 0xf7, 0x12, 0xd1, 0x63, 0xc8, 0xdb, 0x56, 0x87, 0x5e, 0xc7, - 0xd4, 0xb6, 0x9a, 0x86, 0xd6, 0xa5, 0xf6, 0x4d, 0x3e, 0xfa, 0xbc, 0x99, 0x25, 0xdc, 0xa6, 0xe9, - 0xe4, 0x9c, 0x1d, 0x7e, 0x44, 0x75, 0xa0, 0x57, 0x31, 0x79, 0x52, 0xd0, 0xc0, 0xe5, 0xf7, 0x23, - 0x3f, 0x41, 0xf1, 0x5c, 0x35, 0x5c, 0x2e, 0x17, 0x5e, 0xfa, 0xbf, 0xd1, 0x23, 0x98, 0xa1, 0xd7, - 0x82, 0x93, 0x36, 0xb7, 0x3a, 0x2e, 0x37, 0x6f, 0xae, 0x14, 0xd9, 0x07, 0x22, 0x8b, 0xde, 0x07, - 0x22, 0x8b, 0xab, 0xfc, 0x03, 0x91, 0xec, 0xac, 0xfa, 0xc7, 0xff, 0x76, 0x49, 0x90, 0xb3, 0x9e, - 0xe7, 0x94, 0xd5, 0x71, 0xd1, 0x7d, 0xb8, 0xd8, 0x52, 0x8f, 0xe9, 0xed, 0xe2, 0x8a, 0x67, 0x7f, - 0xd1, 0xfb, 0x14, 0xd9, 0x57, 0x09, 0x51, 0x4b, 0x3d, 0xa6, 0x5f, 0x4b, 0x64, 0xaf, 0xe8, 0xa7, - 0x8e, 0xae, 0xc3, 0x0c, 0x8f, 0x15, 0x62, 0x5f, 0x42, 0x2b, 0xd0, 0x94, 0xfc, 0xb3, 0x38, 0xec, - 0x63, 0x68, 0x37, 0x21, 0xaf, 0x1b, 0x8e, 0x6b, 0x98, 0x9a, 0xcb, 0x2f, 0x2e, 0x67, 0x57, 0x7f, - 0xe7, 0x3c, 0x2a, 0xbb, 0x9d, 0xbc, 0x01, 0xb3, 0x5a, 0xd3, 0xf0, 0xad, 0x5a, 0x66, 0x67, 0xcc, - 0x0e, 0x1d, 0xa7, 0x65, 0x9a, 0xb6, 0xdf, 0x81, 0xa6, 0xa0, 0xf5, 0x92, 0x51, 0x19, 0x0a, 0xfb, - 0xaa, 0x8b, 0x5f, 0xaa, 0x5d, 0xc5, 0x0b, 0xc3, 0xcd, 0xd2, 0xab, 0x07, 0xae, 0x9e, 0x9e, 0x2c, - 0xe5, 0x1e, 0xb3, 0x57, 0x03, 0xd1, 0xb8, 0xb9, 0xfd, 0xd0, 0x0b, 0x1d, 0xdd, 0x86, 0x82, 0xea, - 0x74, 0x4d, 0x8d, 0xf6, 0x28, 0x6c, 0x3a, 0x1d, 0x87, 0x87, 0xa3, 0xe5, 0x29, 0xb9, 0xec, 0x51, - 0xd1, 0x87, 0xb0, 0xc0, 0xbf, 0x4f, 0xf2, 0x52, 0xb5, 0x75, 0x85, 0xf6, 0xc2, 0x60, 0xb8, 0x8b, - 0x94, 0xe7, 0x32, 0xfb, 0x1e, 0x09, 0x49, 0x40, 0xba, 0x5e, 0x30, 0x1b, 0x3e, 0x83, 0x59, 0x1a, - 0x94, 0x86, 0x75, 0xb2, 0x1c, 0x35, 0xb1, 0x89, 0x1d, 0x67, 0xc4, 0x29, 0x43, 0x89, 0xa5, 0xad, - 0x7b, 0x49, 0xd9, 0x04, 0x23, 0x8b, 0xbb, 0x7d, 0x74, 0xff, 0xbe, 0x74, 0x10, 0xb3, 0x6b, 0xa9, - 0xf4, 0x8c, 0x98, 0x5b, 0x4b, 0xa5, 0xf3, 0x62, 0x41, 0xfa, 0xdf, 0x02, 0x5c, 0x8a, 0x16, 0x82, - 0xea, 0x30, 0xd7, 0x73, 0x25, 0x10, 0x8b, 0x96, 0x3b, 0xcf, 0x7c, 0x35, 0x1b, 0xbe, 0x18, 0x88, - 0xe6, 0x42, 0x94, 0x13, 0x21, 0x54, 0x71, 0x5c, 0xdb, 0xd0, 0xbc, 0x6b, 0xb6, 0x2e, 0x0f, 0xb0, - 0xd5, 0xe9, 0x6b, 0x5a, 0x22, 0xf5, 0x78, 0xa0, 0x44, 0xc9, 0xf3, 0x94, 0x48, 0x3d, 0xee, 0x15, - 0x2d, 0xfd, 0x30, 0x09, 0x05, 0xb2, 0xf2, 0x3a, 0x8e, 0x61, 0x99, 0x55, 0xdf, 0x41, 0xdf, 0x9f, - 0xa0, 0x04, 0x1a, 0x6b, 0xea, 0x3f, 0xa3, 0x25, 0x1a, 0xd3, 0x4b, 0x10, 0x8e, 0xff, 0xbd, 0xa7, - 0xa4, 0x0c, 0x8c, 0x44, 0xa3, 0x16, 0x57, 0x60, 0xca, 0xb1, 0x3a, 0xb6, 0xe6, 0x7d, 0x85, 0xe4, - 0xee, 0x90, 0xa5, 0x3e, 0x94, 0x61, 0xb1, 0x4e, 0x19, 0x64, 0xce, 0x88, 0x3e, 0x85, 0x02, 0xfb, - 0x45, 0x63, 0x09, 0x69, 0x2c, 0x1f, 0x0b, 0xc8, 0xbc, 0x3f, 0xb6, 0xac, 0x0d, 0xce, 0x28, 0xe7, - 0x9d, 0x9e, 0x67, 0xf4, 0x31, 0xbc, 0x66, 0x5a, 0x4a, 0x0b, 0xb7, 0x2c, 0xb6, 0xc4, 0x93, 0x59, - 0x46, 0x57, 0x54, 0x57, 0xe1, 0x85, 0x66, 0x1e, 0xdf, 0xf3, 0xa6, 0xb5, 0x49, 0x93, 0xc8, 0x3c, - 0xc5, 0x8a, 0xcb, 0xe4, 0x4a, 0x45, 0x98, 0x62, 0xbf, 0x50, 0x06, 0x26, 0x9f, 0x34, 0xaa, 0x15, - 0x59, 0x9c, 0x40, 0x33, 0x90, 0x7e, 0x24, 0x3f, 0xd9, 0x54, 0xea, 0x4f, 0x37, 0x44, 0x01, 0x65, - 0x61, 0x5a, 0x7e, 0xf2, 0xa4, 0xa1, 0xac, 0x3f, 0x13, 0x13, 0xd2, 0x6d, 0xc8, 0xf7, 0x96, 0x08, - 0x01, 0x4c, 0xc9, 0x95, 0xcd, 0x27, 0xf4, 0xd3, 0x1b, 0x19, 0x98, 0xdc, 0x78, 0x52, 0x5e, 0xd9, - 0x10, 0x05, 0xe9, 0x4f, 0x04, 0x98, 0x29, 0xb1, 0x6f, 0xc9, 0x30, 0xbf, 0x9e, 0x0f, 0xfb, 0xfc, - 0x6f, 0xae, 0x44, 0x6f, 0x21, 0x0c, 0xf3, 0xbb, 0x49, 0xf3, 0xd9, 0xcb, 0x8b, 0x39, 0x5b, 0x1a, - 0x0e, 0x1c, 0xe9, 0x1e, 0xab, 0xe7, 0xe8, 0xeb, 0xb1, 0xa1, 0x3a, 0x88, 0xaa, 0xa7, 0x5b, 0x85, - 0x97, 0x64, 0xb8, 0xbb, 0x6f, 0x5f, 0x33, 0x78, 0x73, 0x91, 0xda, 0x4b, 0xfe, 0x20, 0xf5, 0xe3, - 0x2f, 0x96, 0x26, 0xa4, 0x3f, 0x4d, 0x41, 0xae, 0x14, 0xfe, 0x6e, 0x0e, 0xaa, 0xf5, 0x55, 0xf6, - 0x76, 0xa4, 0x59, 0x12, 0xe2, 0x28, 0x8e, 0xf8, 0x22, 0x59, 0x26, 0xf8, 0x48, 0x0f, 0xab, 0xfb, - 0xb5, 0x11, 0xae, 0x4b, 0xe1, 0xca, 0x07, 0x8c, 0x0b, 0xff, 0x2a, 0xe9, 0xdb, 0x2b, 0x45, 0x98, - 0x64, 0x31, 0xd5, 0xc2, 0xc0, 0x75, 0x2f, 0x74, 0xa5, 0x22, 0x70, 0x8d, 0xbc, 0x97, 0x59, 0x32, - 0x62, 0xdf, 0x34, 0x5e, 0xc9, 0xe7, 0x29, 0x98, 0x07, 0xcf, 0xff, 0xad, 0xdf, 0x0e, 0xbb, 0xdc, - 0xf8, 0xff, 0xa2, 0x87, 0x31, 0xc9, 0x0f, 0xfd, 0x2a, 0x14, 0x34, 0xab, 0xd9, 0x64, 0x56, 0x3e, - 0x5b, 0xd9, 0x06, 0xaf, 0x3b, 0xa3, 0x45, 0xe0, 0x9f, 0x77, 0x2e, 0xfa, 0x9f, 0x79, 0x2e, 0xca, - 0xfc, 0x33, 0xcf, 0xa1, 0xf0, 0xaf, 0xbc, 0x2f, 0x8c, 0x2d, 0x88, 0x7d, 0x91, 0x68, 0xd3, 0xaf, - 0x12, 0x89, 0xc6, 0xe2, 0xf7, 0x78, 0xcf, 0xfb, 0xb9, 0xc0, 0xfd, 0x80, 0x37, 0x2c, 0xeb, 0xb0, - 0xe3, 0x7b, 0x57, 0x2e, 0x84, 0xaf, 0x2a, 0x0e, 0x82, 0x64, 0x68, 0xcc, 0x68, 0x94, 0x29, 0x95, - 0xf8, 0x7a, 0xa6, 0xd4, 0x75, 0x98, 0x69, 0xdb, 0x78, 0x0f, 0xbb, 0xda, 0x81, 0x62, 0x76, 0x5a, - 0x3c, 0x60, 0x36, 0xeb, 0xd1, 0xb6, 0x3a, 0x2d, 0x74, 0x17, 0x44, 0x3f, 0x09, 0xdf, 0x79, 0xf1, - 0xee, 0xc9, 0xf4, 0xe8, 0x7c, 0x9f, 0x46, 0xfa, 0xaf, 0x02, 0xcc, 0xf5, 0xd4, 0x89, 0x8f, 0xa9, - 0x35, 0xc8, 0xea, 0xbe, 0xf1, 0xea, 0xcc, 0x0b, 0xe7, 0x0c, 0x9f, 0x0a, 0x33, 0x23, 0x05, 0x2e, - 0x79, 0xd9, 0xd2, 0x0f, 0xdb, 0x04, 0x62, 0x13, 0xe7, 0x14, 0x7b, 0x31, 0x90, 0xb3, 0x1a, 0xca, - 0xc0, 0x1f, 0x64, 0xc9, 0xb1, 0x06, 0x99, 0xf4, 0xdf, 0x05, 0x10, 0x69, 0x06, 0x8f, 0x30, 0xd6, - 0x63, 0x99, 0x32, 0xbd, 0x38, 0xc5, 0xc4, 0xf8, 0x21, 0xb1, 0x3d, 0x1f, 0xe3, 0x4a, 0xf6, 0x7d, - 0x8c, 0x2b, 0x6a, 0xfe, 0x4c, 0x7d, 0xcd, 0xf9, 0x53, 0xfa, 0x42, 0x80, 0xbc, 0x5f, 0x6d, 0xf6, - 0x15, 0xde, 0x11, 0xd7, 0x6c, 0xbf, 0xda, 0x97, 0x66, 0xbd, 0xeb, 0xc0, 0xc6, 0xfa, 0x30, 0x70, - 0xf8, 0x3a, 0x30, 0xf6, 0x85, 0xd4, 0xbf, 0xe1, 0x75, 0x47, 0x52, 0xc4, 0x72, 0x70, 0x0f, 0xd3, - 0x2b, 0x84, 0x1c, 0x7f, 0x13, 0x8e, 0xc4, 0x8f, 0x42, 0x0a, 0xa4, 0x3d, 0x8a, 0x68, 0x69, 0xac, - 0xf9, 0xdd, 0xd3, 0x12, 0xeb, 0x80, 0x7f, 0x10, 0x6e, 0x09, 0x76, 0x8f, 0xc7, 0x43, 0x48, 0x1e, - 0xa9, 0xcd, 0x51, 0xee, 0xb2, 0x3d, 0x2d, 0x27, 0x93, 0xd4, 0xe8, 0x51, 0xcf, 0xf5, 0x55, 0x89, - 0xe1, 0xbb, 0xb2, 0x83, 0x2a, 0xed, 0xb9, 0xe6, 0xea, 0xbd, 0xde, 0x01, 0x34, 0x32, 0xfb, 0xf0, - 0x48, 0xfa, 0x20, 0xf5, 0xe5, 0x17, 0x4b, 0x82, 0xf4, 0x11, 0x20, 0x62, 0xeb, 0xb8, 0x4f, 0x3b, - 0x96, 0x1d, 0x5c, 0x05, 0xd6, 0x1f, 0x8f, 0x38, 0x19, 0x1d, 0x8f, 0x28, 0x5d, 0x84, 0xb9, 0x1e, - 0x6e, 0x36, 0x03, 0x49, 0xef, 0xc1, 0x95, 0xc7, 0x96, 0xe3, 0x18, 0xed, 0x7a, 0x67, 0x97, 0x0d, - 0x75, 0xb2, 0x5e, 0xf9, 0x73, 0x6e, 0xba, 0x4d, 0xb7, 0xfc, 0x4c, 0x36, 0x37, 0x65, 0x64, 0xff, - 0x59, 0xfa, 0x3d, 0x01, 0x2e, 0x0f, 0x72, 0x32, 0x2d, 0x47, 0xdd, 0x90, 0x30, 0xad, 0x59, 0xc1, - 0x4d, 0xb5, 0x67, 0xf7, 0x56, 0x2f, 0x39, 0x41, 0x35, 0x3c, 0x4f, 0xa5, 0xa5, 0xd2, 0x39, 0x89, - 0x5f, 0x9c, 0x92, 0xe7, 0xe4, 0x4d, 0x46, 0x0d, 0xa6, 0xa7, 0xd4, 0x78, 0xd3, 0xd3, 0xff, 0x10, - 0x60, 0xb6, 0x81, 0x4d, 0xd5, 0x74, 0xc9, 0xbc, 0xdf, 0x69, 0xb1, 0x5b, 0x25, 0x0a, 0x90, 0xb4, - 0x95, 0x0e, 0x2d, 0xba, 0x20, 0x27, 0xec, 0x1d, 0x74, 0x03, 0x72, 0x74, 0x6d, 0x09, 0xd9, 0x6a, - 0xc2, 0x9d, 0x94, 0x4c, 0xa3, 0x6b, 0x64, 0xcf, 0x10, 0x7b, 0x1d, 0x80, 0x26, 0x62, 0xe8, 0x32, - 0x49, 0x53, 0x64, 0x08, 0xc5, 0xc7, 0x96, 0x34, 0x5a, 0x31, 0x10, 0xc2, 0x02, 0x92, 0x72, 0x94, - 0xea, 0x4b, 0x59, 0x82, 0x2c, 0x4b, 0xc6, 0xc4, 0x4c, 0xd2, 0x34, 0x40, 0x49, 0x4c, 0xce, 0x23, - 0xb8, 0xe0, 0xbc, 0x68, 0x2a, 0x6d, 0x4b, 0x77, 0x14, 0xad, 0xdd, 0xe1, 0x91, 0x1e, 0xec, 0xc3, - 0xde, 0x42, 0xe9, 0xe2, 0xe9, 0xc9, 0xd2, 0x6c, 0xfd, 0xe9, 0xc6, 0xb6, 0xa5, 0x3b, 0xe5, 0xed, - 0x1d, 0x16, 0xe7, 0xe1, 0xc8, 0xb3, 0xce, 0x8b, 0x26, 0x25, 0xb5, 0x3b, 0x9c, 0x24, 0xfd, 0xa5, - 0x24, 0x20, 0x7a, 0x33, 0x52, 0x89, 0x5e, 0x2d, 0xe4, 0x35, 0xb7, 0x05, 0x8b, 0x5a, 0xa0, 0x0a, - 0xc5, 0x31, 0x4c, 0x62, 0xdf, 0xab, 0x8e, 0xeb, 0x95, 0x9b, 0x8f, 0x9b, 0xc8, 0x0b, 0x5d, 0xfb, - 0x35, 0xc9, 0xdb, 0xf1, 0x6a, 0x48, 0x62, 0x9d, 0x08, 0xdc, 0x50, 0x1d, 0x3f, 0xc3, 0xbb, 0x90, - 0x71, 0x29, 0x9f, 0x77, 0xef, 0x54, 0xaa, 0x34, 0x73, 0x7a, 0xb2, 0x94, 0x66, 0xc2, 0x6a, 0xab, - 0x72, 0x9a, 0xbd, 0xae, 0xe9, 0x68, 0x19, 0xb2, 0x86, 0xe9, 0xb8, 0x2a, 0x29, 0x12, 0xdf, 0xcc, - 0xc9, 0xb1, 0x8b, 0x01, 0x6a, 0x9c, 0x5c, 0x5b, 0x95, 0xc1, 0x4b, 0x42, 0xe3, 0x6f, 0xf3, 0x3e, - 0x03, 0x3b, 0x9d, 0xa1, 0xc1, 0xe2, 0x72, 0xce, 0xa3, 0xb2, 0x33, 0x17, 0xc9, 0x3f, 0xc3, 0xc1, - 0xba, 0x42, 0x5a, 0x9e, 0xc5, 0xda, 0x64, 0x7d, 0xa2, 0xbc, 0x83, 0x9e, 0xc3, 0x45, 0xbe, 0x7b, - 0xe0, 0x6d, 0x37, 0xb4, 0xb1, 0x6d, 0x58, 0xde, 0x05, 0x08, 0x63, 0xed, 0x60, 0xcc, 0x31, 0x09, - 0xbc, 0xe6, 0xdb, 0x94, 0x5f, 0xfa, 0xe7, 0x02, 0xcc, 0xf5, 0xb4, 0x03, 0x37, 0x0b, 0x3e, 0xea, - 0x9d, 0xee, 0xc2, 0xb6, 0x31, 0xa5, 0x3b, 0xf4, 0xb8, 0x5b, 0xb3, 0x74, 0x3e, 0x4f, 0xf4, 0x4c, - 0x7b, 0x68, 0x11, 0xb2, 0xfb, 0xb6, 0x6a, 0x7a, 0x15, 0x4a, 0xd0, 0x0a, 0x65, 0x38, 0x49, 0xde, - 0x41, 0x5b, 0x20, 0x12, 0xb4, 0x7a, 0xd8, 0xc4, 0x8a, 0xce, 0x0b, 0xca, 0x67, 0xa4, 0xb1, 0x6a, - 0x52, 0xe0, 0xcc, 0xde, 0x2b, 0xa9, 0x01, 0x85, 0x35, 0xcb, 0x30, 0xb7, 0x2c, 0xdd, 0x8f, 0x01, - 0x5a, 0x81, 0xfc, 0xae, 0x61, 0xaa, 0x76, 0x57, 0xf1, 0xc2, 0x78, 0x84, 0xb3, 0xc2, 0x78, 0xe4, - 0x1c, 0xe3, 0xe0, 0x8f, 0xd2, 0xcf, 0x04, 0x10, 0x03, 0xb1, 0x5c, 0x31, 0x6f, 0x02, 0x68, 0xcd, - 0x8e, 0xe3, 0x62, 0xdb, 0x9b, 0xee, 0x66, 0x58, 0xb8, 0x70, 0x99, 0x51, 0x6b, 0xab, 0x72, 0x86, - 0x27, 0xa8, 0xe9, 0xe8, 0x46, 0xef, 0xa5, 0x66, 0x93, 0x25, 0x38, 0x1d, 0xb8, 0xca, 0x8c, 0xcc, - 0x9f, 0x8e, 0x6b, 0xd9, 0x7e, 0xaf, 0xe2, 0xf3, 0xa7, 0x77, 0xdd, 0x23, 0xbd, 0xd6, 0x08, 0xd3, - 0x1b, 0x01, 0xf2, 0xc4, 0x98, 0x3f, 0xc2, 0x7e, 0x95, 0x52, 0x67, 0x57, 0x89, 0x71, 0x78, 0x55, - 0xfa, 0x5d, 0x01, 0x0a, 0x65, 0x36, 0xad, 0xf9, 0x53, 0xe5, 0x08, 0xd3, 0x60, 0x15, 0xd2, 0xee, - 0xb1, 0xa9, 0xb4, 0xb0, 0xff, 0x85, 0xc2, 0x73, 0xdc, 0xc7, 0x3c, 0xed, 0xb2, 0x47, 0xfa, 0xd1, - 0xeb, 0x57, 0x68, 0x65, 0x9f, 0x89, 0x59, 0xe5, 0xf7, 0xea, 0x64, 0xf9, 0x18, 0xb0, 0x9b, 0x51, - 0x1e, 0x20, 0xf4, 0xe9, 0xc9, 0x09, 0xfa, 0x41, 0xca, 0xca, 0xca, 0xaa, 0xb2, 0xb3, 0x55, 0x7e, - 0xb2, 0xb9, 0x59, 0x6b, 0x34, 0x2a, 0xab, 0xa2, 0x80, 0x44, 0x98, 0xe9, 0xf9, 0x70, 0x65, 0x62, - 0x21, 0xf5, 0xf9, 0x4f, 0x17, 0x27, 0xee, 0xbd, 0x05, 0xb9, 0x9e, 0x6d, 0x48, 0x54, 0x80, 0xec, - 0x46, 0x65, 0xa5, 0x5e, 0xa9, 0x3e, 0xd9, 0x58, 0xa5, 0xb0, 0x3d, 0x0b, 0xd3, 0x5b, 0x95, 0x15, - 0xb9, 0x52, 0x6f, 0x88, 0xc2, 0xbd, 0xff, 0x0f, 0x20, 0xf8, 0x64, 0x2e, 0xc9, 0x7a, 0xbd, 0xf2, - 0x89, 0xf2, 0x6c, 0x65, 0x63, 0xa7, 0x52, 0x17, 0x27, 0x10, 0x82, 0x7c, 0x69, 0xa5, 0x51, 0xae, - 0x2a, 0x72, 0xa5, 0xbe, 0xfd, 0x64, 0xab, 0x5e, 0x11, 0x05, 0x9e, 0xcd, 0x2a, 0xcc, 0x84, 0x2f, - 0xa5, 0x44, 0x73, 0x50, 0x28, 0x57, 0x2b, 0xe5, 0x75, 0xe5, 0x59, 0x6d, 0x45, 0x79, 0xba, 0x53, - 0xd9, 0x21, 0x38, 0x9f, 0xd4, 0x84, 0x12, 0x1f, 0xed, 0x6c, 0x6c, 0x88, 0x02, 0x29, 0x0a, 0x7b, - 0xa6, 0xdf, 0xc4, 0x14, 0x13, 0xf7, 0x36, 0x21, 0x1b, 0xfa, 0x58, 0x06, 0xc9, 0x6e, 0x7b, 0xa7, - 0x5e, 0x55, 0x1a, 0xb5, 0xcd, 0x4a, 0xbd, 0xb1, 0xb2, 0xb9, 0xcd, 0x64, 0x50, 0xda, 0x4a, 0xe9, - 0x89, 0xdc, 0x10, 0x05, 0xff, 0xb9, 0xf1, 0x64, 0xa7, 0x5c, 0xf5, 0x6a, 0x2d, 0xa5, 0xd2, 0x49, - 0x31, 0x79, 0xef, 0x18, 0x2e, 0x0f, 0xb9, 0x9f, 0x91, 0x54, 0x7a, 0xc7, 0xa4, 0x1f, 0x0e, 0x10, - 0x27, 0x50, 0x0e, 0x32, 0xa4, 0xa7, 0xd2, 0x2b, 0x4f, 0x44, 0x01, 0xa5, 0x21, 0x75, 0xe0, 0xba, - 0x6d, 0x31, 0x81, 0xa6, 0x20, 0xe1, 0x3c, 0x14, 0x93, 0xe4, 0xff, 0xbe, 0x23, 0xa6, 0x50, 0x06, - 0x26, 0xd5, 0xcf, 0x3a, 0x36, 0x16, 0x27, 0xd1, 0x0c, 0xa4, 0x3b, 0x0e, 0xb6, 0xf7, 0x8c, 0x26, - 0x16, 0xa7, 0x09, 0x8b, 0xd9, 0x69, 0x36, 0xc5, 0xb4, 0x94, 0x4a, 0x4f, 0x89, 0x53, 0xf7, 0xae, - 0x43, 0xe8, 0x4a, 0x2c, 0x04, 0x30, 0xb5, 0xa1, 0xba, 0xd8, 0x71, 0xc5, 0x09, 0x34, 0x0d, 0xc9, - 0x95, 0x66, 0x53, 0x14, 0x1e, 0xfc, 0xb7, 0x29, 0x48, 0x7b, 0x9f, 0x7c, 0x44, 0x1b, 0x30, 0x49, - 0x71, 0x3d, 0x5a, 0x1a, 0x8e, 0xf8, 0xe9, 0xb0, 0x5f, 0xb8, 0x76, 0xd6, 0x96, 0x80, 0x34, 0x81, - 0xfe, 0x7f, 0xc8, 0x86, 0x90, 0x10, 0x1a, 0x7a, 0x8c, 0xd5, 0x83, 0xfe, 0x16, 0x6e, 0x9d, 0x95, - 0xcc, 0x97, 0xff, 0x1c, 0x32, 0xbe, 0x11, 0x85, 0x6e, 0x8c, 0x32, 0xb1, 0x3c, 0xd9, 0xa3, 0xed, - 0x30, 0x32, 0x4a, 0xa5, 0x89, 0xb7, 0x05, 0x64, 0x03, 0x1a, 0xb4, 0x77, 0x50, 0x94, 0x5f, 0xfb, - 0x50, 0x83, 0x6a, 0xe1, 0xde, 0x58, 0xa9, 0x83, 0x3c, 0x89, 0xb2, 0x02, 0xa3, 0x2d, 0x5a, 0x59, - 0x03, 0x26, 0x61, 0xb4, 0xb2, 0x22, 0x6c, 0x3f, 0xda, 0x18, 0xa1, 0xf5, 0x27, 0x52, 0xfe, 0xa0, - 0x9d, 0x10, 0x29, 0x3f, 0x62, 0x19, 0x93, 0x26, 0xd0, 0x53, 0x48, 0x91, 0x39, 0x1c, 0x45, 0xc1, - 0xa9, 0xbe, 0x35, 0x63, 0xe1, 0xc6, 0xc8, 0x34, 0xbe, 0xc8, 0x7d, 0xc8, 0x3f, 0xc6, 0x74, 0x33, - 0x9e, 0xdd, 0x6f, 0xe9, 0xa0, 0x3b, 0xd1, 0xce, 0x86, 0xa1, 0x24, 0x5e, 0x16, 0x77, 0xc7, 0x48, - 0xe9, 0x67, 0xd4, 0x86, 0x59, 0xf6, 0x65, 0x90, 0x70, 0x5e, 0x51, 0x1e, 0x0e, 0x03, 0xa9, 0xbc, - 0xec, 0xde, 0x1c, 0x2f, 0xb1, 0x97, 0x63, 0xe9, 0xee, 0x97, 0xff, 0x6e, 0x71, 0xe2, 0xcb, 0xd3, - 0x45, 0xe1, 0x67, 0xa7, 0x8b, 0xc2, 0x1f, 0x9d, 0x2e, 0x0a, 0x7f, 0x7c, 0xba, 0x28, 0xfc, 0xe8, - 0x17, 0x8b, 0x13, 0x3f, 0xfb, 0xc5, 0xe2, 0xc4, 0x1f, 0xfd, 0x62, 0x71, 0xe2, 0xd3, 0x69, 0x2e, - 0x66, 0x77, 0x8a, 0xce, 0xdd, 0x0f, 0xff, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x39, 0xeb, 0x9e, - 0xe3, 0xe7, 0x8c, 0x00, 0x00, + // 9229 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x5d, 0x6c, 0x23, 0x57, + 0x96, 0x9e, 0x8a, 0xa4, 0x24, 0xf2, 0x50, 0x24, 0x4b, 0x57, 0xfd, 0xa3, 0x56, 0xdb, 0x52, 0x77, + 0xb5, 0xfb, 0x77, 0x6d, 0xca, 0xdd, 0x6d, 0xc7, 0x5e, 0xdb, 0xe3, 0x59, 0x91, 0x62, 0x37, 0xa9, + 0xbf, 0x56, 0x17, 0xa9, 0x6e, 0xd8, 0x3b, 0x9b, 0xda, 0x52, 0xd5, 0x95, 0x54, 0x23, 0xb2, 0x8a, + 0x5d, 0x55, 0x54, 0x8b, 0x06, 0xf2, 0x90, 0x64, 0x33, 0xf1, 0x53, 0x30, 0x41, 0x02, 0xec, 0x0c, + 0x36, 0x58, 0x78, 0x33, 0x8b, 0xe4, 0x21, 0x0f, 0x09, 0x92, 0x20, 0xc1, 0x06, 0xc9, 0xee, 0x43, + 0x1e, 0x62, 0x04, 0x9b, 0xec, 0xcc, 0xdb, 0x22, 0x40, 0x94, 0x8d, 0x26, 0x0f, 0x59, 0x04, 0x41, + 0x82, 0x24, 0xc0, 0x06, 0x06, 0xf2, 0x83, 0xfb, 0x53, 0x3f, 0x24, 0x8b, 0x14, 0xd5, 0x2e, 0x27, + 0x06, 0xf6, 0x45, 0x62, 0x9d, 0x7b, 0xcf, 0xa9, 0x7b, 0xcf, 0xfd, 0x3b, 0xdf, 0xbd, 0xe7, 0xdc, + 0x82, 0x59, 0xdb, 0x52, 0xb5, 0x83, 0xf6, 0xee, 0xb2, 0xda, 0x36, 0x8a, 0x6d, 0xdb, 0x72, 0x2d, + 0x34, 0xab, 0x59, 0xda, 0x21, 0x25, 0x17, 0x79, 0xe2, 0xc2, 0x45, 0x6c, 0xdb, 0x96, 0xed, 0xb4, + 0x77, 0x97, 0xd9, 0x0f, 0x96, 0x73, 0xe1, 0xde, 0xe1, 0xd1, 0xf2, 0xe1, 0x91, 0x83, 0xed, 0x23, + 0x6c, 0x2f, 0x6b, 0x96, 0xa9, 0x75, 0x6c, 0x1b, 0x9b, 0x5a, 0x77, 0xb9, 0x69, 0x69, 0x87, 0xf4, + 0x8f, 0x61, 0xee, 0x47, 0xe5, 0xb5, 0xb1, 0xaa, 0x3b, 0x9d, 0x56, 0x4b, 0xb5, 0xbb, 0xcb, 0x54, + 0x2c, 0x7f, 0xe0, 0x79, 0x91, 0x57, 0x28, 0x5d, 0x75, 0x55, 0x4e, 0xbb, 0xe0, 0xd1, 0x7a, 0x4a, + 0x70, 0xc9, 0xa3, 0xb6, 0xb0, 0xab, 0x86, 0x72, 0x5f, 0xf1, 0xe8, 0x4e, 0x5b, 0x35, 0x15, 0xcd, + 0x32, 0xf7, 0x0c, 0xaf, 0x20, 0x57, 0x1d, 0xd7, 0xb2, 0xd5, 0x7d, 0xbc, 0x8c, 0xcd, 0x7d, 0xc3, + 0xc4, 0x84, 0xf7, 0x48, 0xd3, 0x78, 0xe2, 0x6b, 0x91, 0x89, 0x0f, 0x79, 0xea, 0x7c, 0xc7, 0x35, + 0x9a, 0xcb, 0x07, 0x4d, 0x6d, 0xd9, 0x35, 0x5a, 0xd8, 0x71, 0xd5, 0x56, 0xdb, 0xab, 0x1d, 0x4d, + 0x71, 0x6d, 0x55, 0x33, 0xcc, 0x7d, 0xef, 0x7f, 0x7b, 0x77, 0xd9, 0xc6, 0x9a, 0x65, 0xeb, 0x58, + 0x57, 0x48, 0x39, 0xbc, 0x9a, 0xec, 0x5b, 0xfb, 0x16, 0xfd, 0xb9, 0x4c, 0x7e, 0x71, 0xea, 0xe2, + 0xbe, 0x65, 0xed, 0x37, 0xf1, 0x32, 0x7d, 0xda, 0xed, 0xec, 0x2d, 0xeb, 0x1d, 0x5b, 0x75, 0x0d, + 0x8b, 0x73, 0x49, 0xff, 0x48, 0x80, 0x9c, 0x8c, 0x5f, 0x74, 0xb0, 0xe3, 0x56, 0xb1, 0xaa, 0x63, + 0x1b, 0x5d, 0x81, 0xe4, 0x21, 0xee, 0xce, 0x27, 0xaf, 0x09, 0x77, 0x66, 0x4a, 0xd3, 0x5f, 0x9d, + 0x2c, 0x25, 0xd7, 0x71, 0x57, 0x26, 0x34, 0x74, 0x0d, 0xa6, 0xb1, 0xa9, 0x2b, 0x24, 0x39, 0xd5, + 0x9b, 0x3c, 0x85, 0x4d, 0x7d, 0x1d, 0x77, 0xd1, 0xf7, 0x20, 0xed, 0x10, 0x69, 0xa6, 0x86, 0xe7, + 0x27, 0xaf, 0x09, 0x77, 0x26, 0x4b, 0xbf, 0xf4, 0xd5, 0xc9, 0xd2, 0x47, 0xfb, 0x86, 0x7b, 0xd0, + 0xd9, 0x2d, 0x6a, 0x56, 0x6b, 0xd9, 0xef, 0x05, 0xfa, 0x6e, 0xf0, 0x7b, 0xb9, 0x7d, 0xb8, 0xbf, + 0xdc, 0xaf, 0xa3, 0x62, 0xe3, 0xd8, 0xac, 0xe3, 0x17, 0xb2, 0x2f, 0x71, 0x2d, 0x95, 0x16, 0xc4, + 0xc4, 0x5a, 0x2a, 0x9d, 0x10, 0x93, 0xd2, 0x1f, 0x24, 0x20, 0x2f, 0x63, 0xa7, 0x6d, 0x99, 0x0e, + 0xe6, 0x25, 0x7f, 0x1b, 0x92, 0xee, 0xb1, 0x49, 0x4b, 0x9e, 0x7d, 0xb0, 0x58, 0x1c, 0xe8, 0x6f, + 0xc5, 0x86, 0xad, 0x9a, 0x8e, 0xaa, 0x91, 0xea, 0xcb, 0x24, 0x2b, 0x7a, 0x1f, 0xb2, 0x36, 0x76, + 0x3a, 0x2d, 0x4c, 0x15, 0x49, 0x2b, 0x95, 0x7d, 0x70, 0x39, 0x82, 0xb3, 0xde, 0x56, 0x4d, 0x19, + 0x58, 0x5e, 0xf2, 0x1b, 0xd5, 0x21, 0xc7, 0x39, 0x6d, 0xac, 0x3a, 0x96, 0x39, 0x3f, 0x7d, 0x4d, + 0xb8, 0x93, 0x7f, 0x50, 0x8c, 0xe0, 0xed, 0x2d, 0x25, 0x79, 0xec, 0xb4, 0xb0, 0x4c, 0xb9, 0xe4, + 0x19, 0x3b, 0xf4, 0x84, 0xae, 0x40, 0xda, 0xec, 0xb4, 0x88, 0x7e, 0x1d, 0xaa, 0xbd, 0xa4, 0x3c, + 0x6d, 0x76, 0x5a, 0xeb, 0xb8, 0xeb, 0xa0, 0xab, 0x90, 0x21, 0x49, 0xbb, 0x5d, 0x17, 0x3b, 0xf3, + 0x69, 0x9a, 0x46, 0xf2, 0x96, 0xc8, 0xb3, 0xf4, 0x31, 0xcc, 0x84, 0xa5, 0x22, 0x04, 0x79, 0xb9, + 0x52, 0xdf, 0xd9, 0xac, 0x28, 0x3b, 0x5b, 0xeb, 0x5b, 0x4f, 0x9e, 0x6f, 0x89, 0x13, 0xe8, 0x02, + 0x88, 0x9c, 0xb6, 0x5e, 0xf9, 0x44, 0xd9, 0xa8, 0x6d, 0xd6, 0x1a, 0xa2, 0xb0, 0x90, 0xfa, 0xfc, + 0x27, 0x8b, 0x13, 0x6b, 0xa9, 0xf4, 0x94, 0x38, 0x2d, 0xfd, 0x44, 0x00, 0x78, 0x8c, 0x5d, 0xde, + 0x1b, 0x50, 0x09, 0xa6, 0x0e, 0x68, 0x89, 0xe7, 0x05, 0xaa, 0x96, 0x6b, 0x91, 0x55, 0x0b, 0xf5, + 0x9c, 0x52, 0xfa, 0xcb, 0x93, 0xa5, 0x89, 0x9f, 0x9e, 0x2c, 0x09, 0x32, 0xe7, 0x44, 0x4f, 0x21, + 0x7b, 0x88, 0xbb, 0x0a, 0x1f, 0xb2, 0xf3, 0x09, 0xaa, 0xa3, 0xb7, 0x43, 0x82, 0x0e, 0x8f, 0x8a, + 0xde, 0xe8, 0x2d, 0x86, 0x46, 0x7a, 0x91, 0x70, 0x14, 0xeb, 0xae, 0x8d, 0xcd, 0x7d, 0xf7, 0x40, + 0x86, 0x43, 0xdc, 0xdd, 0x60, 0x32, 0xa4, 0xdf, 0x13, 0x20, 0x4b, 0x4b, 0xc9, 0x94, 0x8a, 0xca, + 0x7d, 0xc5, 0xbc, 0x7e, 0x66, 0x0b, 0x44, 0x94, 0xb3, 0x08, 0x93, 0x47, 0x6a, 0xb3, 0x83, 0x69, + 0x09, 0xb3, 0x0f, 0xe6, 0x23, 0x64, 0x3c, 0x23, 0xe9, 0x32, 0xcb, 0x86, 0x3e, 0x84, 0x19, 0xc3, + 0x74, 0xb1, 0xe9, 0x2a, 0x8c, 0x2d, 0x79, 0x06, 0x5b, 0x96, 0xe5, 0xa6, 0x0f, 0xd2, 0x3f, 0x14, + 0x00, 0xb6, 0x3b, 0xb1, 0xea, 0xf9, 0x9d, 0x31, 0xcb, 0x5f, 0x4a, 0x11, 0x56, 0xaf, 0x16, 0x97, + 0x60, 0xca, 0x30, 0x9b, 0x86, 0xc9, 0xca, 0x9f, 0x96, 0xf9, 0x13, 0xba, 0x00, 0x93, 0xbb, 0x4d, + 0xc3, 0xd4, 0xe9, 0x78, 0x48, 0xcb, 0xec, 0x41, 0x92, 0x21, 0x4b, 0x4b, 0x1d, 0xa3, 0xde, 0xa5, + 0x93, 0x04, 0x5c, 0x2c, 0x5b, 0xa6, 0x6e, 0x90, 0x21, 0xa9, 0x36, 0xbf, 0x15, 0x5a, 0x59, 0x83, + 0x0b, 0x3a, 0x6e, 0xdb, 0x58, 0x53, 0x5d, 0xac, 0x2b, 0xf8, 0xb8, 0x3d, 0x66, 0x1b, 0xa3, 0x80, + 0xab, 0x72, 0xdc, 0xa6, 0x34, 0x32, 0x6a, 0x89, 0x00, 0x36, 0x6a, 0xa7, 0xc8, 0x94, 0x29, 0xa7, + 0xf1, 0x71, 0x9b, 0x8e, 0xda, 0x68, 0x35, 0xa3, 0x77, 0xe0, 0xb2, 0xda, 0x6c, 0x5a, 0x2f, 0x15, + 0x63, 0x4f, 0xd1, 0x2d, 0xec, 0x28, 0xa6, 0xe5, 0x2a, 0xf8, 0xd8, 0x70, 0x5c, 0x3a, 0x25, 0xa4, + 0xe5, 0x39, 0x9a, 0x5c, 0xdb, 0x5b, 0xb5, 0xb0, 0xb3, 0x65, 0xb9, 0x15, 0x92, 0x14, 0x6a, 0xca, + 0xe9, 0x70, 0x53, 0x4a, 0xbf, 0x02, 0x97, 0xfa, 0xf5, 0x1b, 0x67, 0xfb, 0xfd, 0xbe, 0x00, 0xf9, + 0x9a, 0x69, 0xb8, 0xdf, 0x8a, 0x86, 0xf3, 0xf5, 0x99, 0x0c, 0xeb, 0xf3, 0x1e, 0x88, 0x7b, 0xaa, + 0xd1, 0x7c, 0x62, 0x36, 0xac, 0xd6, 0xae, 0xe3, 0x5a, 0x26, 0x76, 0xb8, 0xc2, 0x07, 0xe8, 0xd2, + 0x33, 0x28, 0xf8, 0xb5, 0x89, 0x53, 0x4d, 0x2e, 0x88, 0x35, 0x53, 0xb3, 0x71, 0x0b, 0x9b, 0xb1, + 0xea, 0xe9, 0x35, 0xc8, 0x18, 0x9e, 0x5c, 0xaa, 0xab, 0xa4, 0x1c, 0x10, 0xa4, 0x0e, 0xcc, 0x86, + 0xde, 0x1a, 0xe7, 0x74, 0x49, 0x16, 0x23, 0xfc, 0x52, 0x09, 0xda, 0x88, 0x2c, 0x46, 0xf8, 0x25, + 0x9b, 0xde, 0xea, 0x90, 0x5b, 0xc5, 0x4d, 0xec, 0xe2, 0x18, 0x6b, 0x2a, 0xed, 0x40, 0xde, 0x13, + 0x1a, 0x67, 0xc3, 0xfc, 0xba, 0x00, 0x88, 0xcb, 0x55, 0xcd, 0xfd, 0x38, 0x4b, 0x8c, 0x96, 0x88, + 0x69, 0xe1, 0x76, 0x6c, 0x93, 0x2d, 0xe7, 0xac, 0x4f, 0x02, 0x23, 0xd1, 0x15, 0x3d, 0x18, 0xb2, + 0xa9, 0xf0, 0x90, 0xe5, 0xe6, 0xcd, 0x4b, 0x98, 0xeb, 0x29, 0x58, 0xbc, 0xcd, 0x97, 0xa2, 0x65, + 0x4a, 0x5c, 0x4b, 0x86, 0x6d, 0x38, 0x4a, 0x94, 0x7e, 0x24, 0xc0, 0x6c, 0xb9, 0x89, 0x55, 0x3b, + 0x76, 0x8d, 0x7c, 0x17, 0xd2, 0x3a, 0x56, 0x75, 0x5a, 0x65, 0x36, 0xb0, 0x5f, 0x0f, 0x49, 0x21, + 0x96, 0x6e, 0xf1, 0xa0, 0xa9, 0x15, 0x1b, 0x9e, 0x0d, 0xcc, 0x47, 0xb7, 0xcf, 0x24, 0x7d, 0x02, + 0x28, 0x5c, 0xb2, 0x38, 0x3b, 0xc2, 0x6f, 0x27, 0x00, 0xc9, 0xf8, 0x08, 0xdb, 0x6e, 0xec, 0xd5, + 0x5e, 0x85, 0xac, 0xab, 0xda, 0xfb, 0xd8, 0x55, 0x88, 0x75, 0x7f, 0x9e, 0x9a, 0x03, 0xe3, 0x23, + 0x64, 0xd4, 0x80, 0xdb, 0xd8, 0x54, 0x77, 0x9b, 0x98, 0x4a, 0x51, 0x76, 0xad, 0x8e, 0xa9, 0x2b, + 0x86, 0x8b, 0x6d, 0xd5, 0xb5, 0x6c, 0xc5, 0x6a, 0xbb, 0x46, 0xcb, 0xf8, 0x8c, 0x1a, 0xf6, 0xbc, + 0xab, 0xdd, 0x60, 0xd9, 0x09, 0x73, 0x89, 0x64, 0xae, 0xf1, 0xbc, 0x4f, 0x42, 0x59, 0x51, 0x11, + 0xe6, 0x8c, 0x7d, 0xd3, 0xb2, 0xb1, 0xb2, 0xaf, 0x29, 0xee, 0x81, 0x8d, 0x9d, 0x03, 0xab, 0xe9, + 0x2d, 0x48, 0xb3, 0x2c, 0xe9, 0xb1, 0xd6, 0xf0, 0x12, 0xa4, 0x4f, 0x61, 0xae, 0x47, 0x4b, 0x71, + 0x36, 0xc1, 0x7f, 0x15, 0x20, 0x5b, 0xd7, 0x54, 0x33, 0x4e, 0xdd, 0x7f, 0x0c, 0x59, 0x47, 0x53, + 0x4d, 0x65, 0xcf, 0xb2, 0x5b, 0xaa, 0x4b, 0xeb, 0x95, 0xef, 0xd1, 0xbd, 0x6f, 0xdf, 0x6b, 0xaa, + 0xf9, 0x88, 0x66, 0x92, 0xc1, 0xf1, 0x7f, 0xf7, 0xdb, 0xaf, 0x93, 0x5f, 0xdf, 0x7e, 0x65, 0xc3, + 0x7b, 0x2d, 0x95, 0x4e, 0x8a, 0x29, 0xe9, 0x4f, 0x04, 0x98, 0x61, 0x55, 0x8e, 0x73, 0x78, 0xbf, + 0x0b, 0x29, 0xdb, 0x7a, 0xc9, 0x86, 0x77, 0xf6, 0xc1, 0xd5, 0x08, 0x11, 0xeb, 0xb8, 0x1b, 0x5e, + 0x3f, 0x69, 0x76, 0x54, 0x02, 0x6e, 0xa5, 0x2a, 0x94, 0x3b, 0x39, 0x2e, 0x37, 0x30, 0x2e, 0x99, + 0xc8, 0xb8, 0x0d, 0x85, 0x5d, 0xd5, 0xd5, 0x0e, 0x14, 0x9b, 0x17, 0x92, 0xac, 0xb5, 0xc9, 0x3b, + 0x33, 0x72, 0x9e, 0x92, 0xbd, 0xa2, 0x3b, 0xa4, 0xe6, 0x6c, 0xbc, 0x39, 0xf8, 0x4f, 0x59, 0x9b, + 0xff, 0x6f, 0x81, 0x8f, 0x21, 0xaf, 0xe6, 0x7f, 0xda, 0x9a, 0xfe, 0xc7, 0x09, 0xb8, 0x5c, 0x3e, + 0xc0, 0xda, 0x61, 0xd9, 0x32, 0x1d, 0xc3, 0x71, 0x89, 0xee, 0xe2, 0x6c, 0xff, 0xab, 0x90, 0x79, + 0x69, 0xb8, 0x07, 0x8a, 0x6e, 0xec, 0xed, 0xd1, 0xd9, 0x36, 0x2d, 0xa7, 0x09, 0x61, 0xd5, 0xd8, + 0xdb, 0x43, 0x0f, 0x21, 0xd5, 0xb2, 0x74, 0x66, 0xcc, 0xe7, 0x1f, 0x2c, 0x45, 0x88, 0xa7, 0x45, + 0x73, 0x3a, 0xad, 0x4d, 0x4b, 0xc7, 0x32, 0xcd, 0x8c, 0x16, 0x01, 0x34, 0x42, 0x6d, 0x5b, 0x86, + 0xe9, 0xf2, 0xc9, 0x31, 0x44, 0x41, 0x55, 0xc8, 0xb8, 0xd8, 0x6e, 0x19, 0xa6, 0xea, 0xe2, 0xf9, + 0x49, 0xaa, 0xbc, 0x37, 0x22, 0x0b, 0xde, 0x6e, 0x1a, 0x9a, 0xba, 0x8a, 0x1d, 0xcd, 0x36, 0xda, + 0xae, 0x65, 0x73, 0x2d, 0x06, 0xcc, 0xd2, 0x5f, 0x49, 0xc1, 0xfc, 0xa0, 0x6e, 0xe2, 0xec, 0x21, + 0xdb, 0x30, 0x65, 0x63, 0xa7, 0xd3, 0x74, 0x79, 0x1f, 0x79, 0x30, 0x4c, 0x05, 0x11, 0x25, 0xa0, + 0x5b, 0x17, 0x4d, 0x97, 0x17, 0x9b, 0xcb, 0x59, 0xf8, 0xa7, 0x02, 0x4c, 0xb1, 0x04, 0x74, 0x1f, + 0xd2, 0x36, 0x59, 0x18, 0x14, 0x43, 0xa7, 0x65, 0x4c, 0x96, 0x2e, 0x9d, 0x9e, 0x2c, 0x4d, 0xd3, + 0xc5, 0xa2, 0xb6, 0xfa, 0x55, 0xf0, 0x53, 0x9e, 0xa6, 0xf9, 0x6a, 0x3a, 0x69, 0x2d, 0xc7, 0x55, + 0x6d, 0x97, 0x6e, 0x2a, 0x25, 0x18, 0x42, 0xa2, 0x84, 0x75, 0xdc, 0x45, 0x6b, 0x30, 0xe5, 0xb8, + 0xaa, 0xdb, 0x71, 0x78, 0x7b, 0x9d, 0xab, 0xb0, 0x75, 0xca, 0x29, 0x73, 0x09, 0xc4, 0xdc, 0xd2, + 0xb1, 0xab, 0x1a, 0x4d, 0xda, 0x80, 0x19, 0x99, 0x3f, 0x49, 0xbf, 0x21, 0xc0, 0x14, 0xcb, 0x8a, + 0x2e, 0xc3, 0x9c, 0xbc, 0xb2, 0xf5, 0xb8, 0xa2, 0xd4, 0xb6, 0x56, 0x2b, 0x8d, 0x8a, 0xbc, 0x59, + 0xdb, 0x5a, 0x69, 0x54, 0xc4, 0x09, 0x74, 0x09, 0x90, 0x97, 0x50, 0x7e, 0xb2, 0x55, 0xaf, 0xd5, + 0x1b, 0x95, 0xad, 0x86, 0x28, 0xd0, 0x3d, 0x15, 0x4a, 0x0f, 0x51, 0x13, 0xe8, 0x0d, 0xb8, 0xd6, + 0x4f, 0x55, 0xea, 0x8d, 0x95, 0x46, 0x5d, 0xa9, 0xd4, 0x1b, 0xb5, 0xcd, 0x95, 0x46, 0x65, 0x55, + 0x4c, 0x8e, 0xc8, 0x45, 0x5e, 0x22, 0xcb, 0x95, 0x72, 0x43, 0x4c, 0x49, 0x2e, 0x5c, 0x94, 0xb1, + 0x66, 0xb5, 0xda, 0x1d, 0x17, 0x93, 0x52, 0x3a, 0x71, 0x8e, 0x94, 0xcb, 0x30, 0xad, 0xdb, 0x5d, + 0xc5, 0xee, 0x98, 0x7c, 0x9c, 0x4c, 0xe9, 0x76, 0x57, 0xee, 0x98, 0xd2, 0xdf, 0x13, 0xe0, 0x52, + 0xff, 0x6b, 0xe3, 0xec, 0x84, 0x4f, 0x21, 0xab, 0xea, 0x3a, 0xd6, 0x15, 0x1d, 0x37, 0x5d, 0x95, + 0x9b, 0x44, 0xf7, 0x42, 0x92, 0xf8, 0x56, 0x60, 0xd1, 0xdf, 0x0a, 0xdc, 0x7c, 0x56, 0x2e, 0xd3, + 0x82, 0xac, 0x12, 0x0e, 0x6f, 0xfa, 0xa1, 0x42, 0x28, 0x45, 0xfa, 0x71, 0x0a, 0x72, 0x15, 0x53, + 0x6f, 0x1c, 0xc7, 0xba, 0x96, 0x5c, 0x82, 0x29, 0xcd, 0x6a, 0xb5, 0x0c, 0xd7, 0x53, 0x10, 0x7b, + 0x42, 0xbf, 0x18, 0x32, 0x65, 0x93, 0x63, 0x18, 0x74, 0x81, 0x11, 0x8b, 0x7e, 0x15, 0x2e, 0x93, + 0x59, 0xd3, 0x36, 0xd5, 0xa6, 0xc2, 0xa4, 0x29, 0xae, 0x6d, 0xec, 0xef, 0x63, 0x9b, 0x6f, 0x3f, + 0xde, 0x89, 0x28, 0x67, 0x8d, 0x73, 0x94, 0x29, 0x43, 0x83, 0xe5, 0x97, 0x2f, 0x1a, 0x51, 0x64, + 0xf4, 0x11, 0x00, 0x59, 0x8a, 0xe8, 0x96, 0xa6, 0xc3, 0xe7, 0xa3, 0x61, 0x7b, 0x9a, 0xde, 0x14, + 0x44, 0x18, 0xc8, 0xb3, 0x83, 0x9e, 0x82, 0x68, 0x98, 0xca, 0x5e, 0xd3, 0xd8, 0x3f, 0x70, 0x95, + 0x97, 0xb6, 0xe1, 0x62, 0x67, 0x7e, 0x96, 0xca, 0x88, 0x6a, 0xea, 0x3a, 0xdf, 0x9a, 0xd5, 0x9f, + 0x93, 0x9c, 0x5c, 0x5a, 0xde, 0x30, 0x1f, 0x51, 0x7e, 0x4a, 0x74, 0xd0, 0x32, 0x81, 0x42, 0x2f, + 0x3a, 0x86, 0x8d, 0x95, 0xfb, 0x6d, 0x8d, 0xee, 0x83, 0xa4, 0x4b, 0xf9, 0xd3, 0x93, 0x25, 0x90, + 0x19, 0xf9, 0xfe, 0x76, 0x99, 0x40, 0x23, 0xf6, 0xbb, 0xad, 0x11, 0xb5, 0xb7, 0x2d, 0xc3, 0xb1, + 0xcc, 0xf9, 0x0c, 0x53, 0x3b, 0x7b, 0x42, 0x77, 0x41, 0x74, 0x8f, 0x4d, 0xe5, 0x00, 0xab, 0xb6, + 0xbb, 0x8b, 0x55, 0x97, 0xac, 0xcf, 0x40, 0x73, 0x14, 0xdc, 0x63, 0xb3, 0x1a, 0x22, 0xaf, 0xa5, + 0xd2, 0xd3, 0x62, 0x7a, 0x2d, 0x95, 0x4e, 0x8b, 0x19, 0xe9, 0xdf, 0x0a, 0x90, 0xf7, 0xfa, 0x46, + 0x9c, 0xdd, 0xf8, 0x0e, 0x88, 0x96, 0x89, 0x95, 0xf6, 0x81, 0xea, 0x60, 0xde, 0x96, 0x7c, 0x75, + 0xc8, 0x5b, 0x26, 0xde, 0x26, 0x64, 0xd6, 0x32, 0x68, 0x1b, 0x66, 0x1d, 0x57, 0xdd, 0x37, 0xcc, + 0x7d, 0xc5, 0xdf, 0xe2, 0xa7, 0x96, 0xc5, 0x98, 0x48, 0x40, 0xe4, 0xdc, 0x3e, 0xbd, 0xc7, 0xa4, + 0xf8, 0x99, 0x00, 0xb3, 0x2b, 0x7a, 0xcb, 0x30, 0xeb, 0xed, 0xa6, 0x11, 0xeb, 0x06, 0xc3, 0x1b, + 0x90, 0x71, 0x88, 0xcc, 0x60, 0x76, 0x0e, 0xe0, 0x62, 0x9a, 0xa6, 0x90, 0x69, 0x7a, 0x03, 0x0a, + 0xf8, 0xb8, 0x6d, 0xb0, 0x73, 0x05, 0x86, 0x72, 0x52, 0xe3, 0xd7, 0x2d, 0x1f, 0xf0, 0x92, 0x24, + 0x5e, 0xa7, 0x4f, 0x00, 0x85, 0xab, 0x14, 0x27, 0xd0, 0xf8, 0x04, 0xe6, 0xa8, 0xe8, 0x1d, 0xd3, + 0x89, 0x59, 0x5f, 0xd2, 0x2f, 0xc3, 0x85, 0x5e, 0xd1, 0x71, 0x96, 0xfb, 0x39, 0x6f, 0xe5, 0x4d, + 0x6c, 0xc7, 0x8a, 0x50, 0x7d, 0x5d, 0x73, 0xc1, 0x71, 0x96, 0xf9, 0xd7, 0x04, 0xb8, 0x42, 0x65, + 0xd3, 0xa3, 0x97, 0x3d, 0x6c, 0x6f, 0x60, 0xd5, 0x89, 0x15, 0x5e, 0xdf, 0x80, 0x29, 0x06, 0x93, + 0x69, 0xff, 0x9c, 0x2c, 0x65, 0x89, 0x99, 0x51, 0x77, 0x2d, 0x9b, 0x98, 0x19, 0x3c, 0x49, 0x52, + 0x61, 0x21, 0xaa, 0x14, 0x71, 0xd6, 0xf4, 0x37, 0x05, 0x98, 0xe5, 0x16, 0x1e, 0xe9, 0xca, 0xe5, + 0x03, 0x62, 0xe0, 0xa0, 0x0a, 0x64, 0x35, 0xfa, 0x4b, 0x71, 0xbb, 0x6d, 0x4c, 0xe5, 0xe7, 0x47, + 0x19, 0x87, 0x8c, 0xad, 0xd1, 0x6d, 0x63, 0x62, 0x61, 0x7a, 0xbf, 0x89, 0xa2, 0x42, 0x95, 0x1c, + 0x69, 0x5e, 0xd2, 0x71, 0x44, 0xf3, 0x7a, 0x76, 0x1a, 0xd7, 0xc1, 0x3f, 0x48, 0x72, 0x25, 0xb0, + 0x77, 0xf0, 0xec, 0xb1, 0x1a, 0x14, 0x9f, 0xc2, 0xa5, 0xd0, 0xd6, 0x79, 0xb8, 0xe2, 0x89, 0x73, + 0x54, 0x3c, 0xb4, 0xfd, 0x1e, 0x50, 0xd1, 0x27, 0x10, 0xda, 0x60, 0x57, 0x58, 0x9d, 0x3c, 0xa8, + 0x72, 0x1e, 0x75, 0xcc, 0x06, 0x52, 0x18, 0xdd, 0x41, 0x65, 0x48, 0xe3, 0xe3, 0xb6, 0xa2, 0x63, + 0x47, 0xe3, 0x13, 0x97, 0x14, 0x25, 0x90, 0x14, 0x65, 0xc0, 0x78, 0x9f, 0xc6, 0xc7, 0x6d, 0x42, + 0x44, 0x3b, 0x64, 0xdd, 0xf4, 0xd6, 0x75, 0x5a, 0x6c, 0xe7, 0x6c, 0x2c, 0x10, 0xf4, 0x14, 0x2e, + 0xae, 0xe0, 0x2f, 0xe9, 0x4c, 0x84, 0xf4, 0x85, 0x00, 0x57, 0x23, 0x5b, 0x2d, 0xce, 0x85, 0xec, + 0x23, 0x48, 0xd1, 0xca, 0x27, 0xce, 0x59, 0x79, 0xca, 0x25, 0x7d, 0x9e, 0xe0, 0x63, 0x5c, 0xc6, + 0x4d, 0x8b, 0x28, 0x36, 0xf6, 0x2d, 0xb4, 0x27, 0x90, 0x3b, 0xb2, 0x5c, 0x6c, 0xfb, 0xcd, 0x9e, + 0x38, 0x77, 0xb3, 0xcf, 0x50, 0x01, 0x5e, 0x8b, 0x3f, 0x83, 0x59, 0xd3, 0x32, 0x95, 0x5e, 0xa1, + 0xe7, 0xef, 0x4b, 0x05, 0xd3, 0x32, 0x9f, 0x85, 0xe4, 0xfa, 0xf3, 0x4c, 0x9f, 0x26, 0xe2, 0x9c, + 0x67, 0x7e, 0x28, 0xc0, 0x9c, 0x6f, 0xe9, 0xc4, 0x6c, 0xee, 0xbe, 0x0b, 0x49, 0xd3, 0x7a, 0x79, + 0x9e, 0x2d, 0x4a, 0x92, 0x9f, 0xac, 0x7a, 0xbd, 0x25, 0x8a, 0xb3, 0xbe, 0xff, 0x2c, 0x01, 0x99, + 0xc7, 0xe5, 0x38, 0x6b, 0xf9, 0x11, 0xdf, 0xfe, 0x66, 0xed, 0x1d, 0xd5, 0xdb, 0xfd, 0xf7, 0x15, + 0x1f, 0x97, 0xd7, 0x71, 0xd7, 0xeb, 0xed, 0x84, 0x0b, 0xad, 0x40, 0xa6, 0x77, 0xa3, 0x74, 0x4c, + 0x4d, 0x05, 0x5c, 0x0b, 0x18, 0x26, 0xa9, 0x5c, 0xcf, 0xd5, 0x42, 0x88, 0x70, 0xb5, 0x20, 0xaf, + 0xf1, 0x2d, 0xc5, 0xc4, 0x79, 0x5e, 0x13, 0x32, 0x11, 0x27, 0xc5, 0x29, 0xe9, 0x29, 0x00, 0xa9, + 0x4e, 0x9c, 0x4d, 0xf2, 0x83, 0x24, 0xe4, 0xb7, 0x3b, 0xce, 0x41, 0xcc, 0xbd, 0xaf, 0x0c, 0xd0, + 0xee, 0x38, 0x07, 0x64, 0x44, 0x1e, 0x9b, 0xbc, 0xce, 0x67, 0x78, 0x71, 0x78, 0x95, 0x66, 0x7c, + 0x8d, 0x63, 0x13, 0x55, 0xb9, 0x10, 0xac, 0x04, 0xae, 0x20, 0x37, 0x46, 0x21, 0xcb, 0xc6, 0xb1, + 0xb9, 0x89, 0x7d, 0x48, 0xc9, 0x24, 0x61, 0x22, 0xe9, 0x23, 0x98, 0x26, 0x0f, 0x8a, 0x6b, 0x9d, + 0xa7, 0x99, 0xa7, 0x08, 0x4f, 0xc3, 0x42, 0x1f, 0x42, 0x86, 0x71, 0x93, 0xd5, 0x6f, 0x8a, 0xae, + 0x7e, 0x51, 0x75, 0xe1, 0x6a, 0xa4, 0xeb, 0x5e, 0x9a, 0xb2, 0x92, 0xb5, 0xee, 0x02, 0x4c, 0xee, + 0x59, 0xb6, 0xe6, 0x1d, 0xe6, 0xb2, 0x07, 0xd6, 0x9e, 0x0c, 0xd2, 0xac, 0xa5, 0xd2, 0x19, 0x11, + 0xa4, 0xdf, 0x10, 0xa0, 0xe0, 0x37, 0x44, 0x9c, 0x0b, 0x42, 0xb9, 0x47, 0x8b, 0xe7, 0x6f, 0x0a, + 0xa2, 0x40, 0xe9, 0x5f, 0x50, 0x8b, 0x48, 0xb3, 0x8e, 0x68, 0xcb, 0xc4, 0xd9, 0x53, 0x3e, 0x64, + 0x8e, 0x3e, 0x89, 0xf3, 0xb6, 0x2e, 0xf5, 0xf9, 0xb9, 0x0f, 0x17, 0x8c, 0x16, 0x99, 0xcf, 0x0d, + 0xb7, 0xd9, 0xe5, 0xb0, 0xcd, 0xc5, 0xde, 0xa9, 0xf1, 0x5c, 0x90, 0x56, 0xf6, 0x92, 0xa4, 0xdf, + 0xa6, 0xbb, 0xd5, 0x41, 0x4d, 0xe2, 0x54, 0x75, 0x0d, 0x72, 0x36, 0x13, 0x4d, 0xcc, 0x9a, 0x73, + 0x6a, 0x7b, 0xc6, 0x67, 0x25, 0x0a, 0xff, 0xad, 0x04, 0x14, 0x9e, 0x76, 0xb0, 0xdd, 0xfd, 0x36, + 0xa9, 0xfb, 0x16, 0x14, 0x5e, 0xaa, 0x86, 0xab, 0xec, 0x59, 0xb6, 0xd2, 0x69, 0xeb, 0xaa, 0xeb, + 0x79, 0x9b, 0xe4, 0x08, 0xf9, 0x91, 0x65, 0xef, 0x50, 0x22, 0xc2, 0x80, 0x0e, 0x4d, 0xeb, 0xa5, + 0xa9, 0x10, 0x32, 0x05, 0xca, 0xc7, 0x26, 0xdf, 0x42, 0x2e, 0xbd, 0xf7, 0x6f, 0x4e, 0x96, 0x1e, + 0x8e, 0xe5, 0x43, 0x46, 0xfd, 0xe5, 0x3a, 0x1d, 0x43, 0x2f, 0xee, 0xec, 0xd4, 0x56, 0x65, 0x91, + 0x8a, 0x7c, 0xce, 0x24, 0x36, 0x8e, 0x4d, 0x47, 0xfa, 0x5b, 0x09, 0x10, 0x03, 0x1d, 0xc5, 0xd9, + 0x90, 0x15, 0xc8, 0xbe, 0xe8, 0x60, 0xdb, 0x78, 0x85, 0x66, 0x04, 0xce, 0x48, 0xa6, 0x9d, 0x7b, + 0x30, 0xeb, 0x1e, 0x9b, 0x0a, 0xf3, 0xf0, 0x63, 0x8e, 0x1f, 0x9e, 0xc3, 0x42, 0xc1, 0x25, 0x65, + 0x26, 0x74, 0xea, 0xf4, 0xe1, 0xa0, 0x4f, 0x61, 0xa6, 0x47, 0x5b, 0xc9, 0xaf, 0xa7, 0xad, 0xec, + 0xcb, 0x90, 0xa2, 0x7e, 0x4f, 0x00, 0x44, 0x15, 0x55, 0x63, 0x7b, 0xfc, 0xdf, 0x96, 0xfe, 0x74, + 0x07, 0x44, 0xea, 0xaa, 0xa9, 0x18, 0x7b, 0x4a, 0xcb, 0x70, 0x1c, 0xc3, 0xdc, 0xe7, 0x1d, 0x2a, + 0x4f, 0xe9, 0xb5, 0xbd, 0x4d, 0x46, 0x95, 0xfe, 0x1c, 0xcc, 0xf5, 0x54, 0x20, 0xce, 0xc6, 0xbe, + 0x0e, 0x33, 0x7b, 0xec, 0x08, 0x96, 0x0a, 0xe7, 0xdb, 0x83, 0x59, 0x4a, 0x63, 0xef, 0x93, 0xfe, + 0x53, 0x02, 0x2e, 0xc8, 0xd8, 0xb1, 0x9a, 0x47, 0x38, 0x7e, 0x15, 0x56, 0x81, 0x9f, 0xbd, 0x28, + 0xaf, 0xa4, 0xc9, 0x0c, 0x63, 0x66, 0xcb, 0x5c, 0xef, 0x1e, 0xfb, 0x1b, 0xa3, 0x7b, 0xec, 0xe0, + 0xae, 0x3a, 0xdf, 0xa9, 0x4b, 0xf5, 0xec, 0xd4, 0x59, 0x50, 0x60, 0xa7, 0xc7, 0xba, 0xe2, 0xe0, + 0x17, 0x66, 0xa7, 0xe5, 0x81, 0xa1, 0xe2, 0xa8, 0x42, 0xd6, 0x18, 0x4b, 0x1d, 0xbf, 0xd8, 0xea, + 0xb4, 0xa8, 0xed, 0x5c, 0xba, 0x44, 0xca, 0x7b, 0x7a, 0xb2, 0x94, 0xef, 0x49, 0x73, 0xe4, 0xbc, + 0xe1, 0x3f, 0x13, 0xe9, 0xd2, 0xf7, 0xe0, 0x62, 0x9f, 0xb2, 0xe3, 0xb4, 0x78, 0xfe, 0x49, 0x12, + 0xae, 0xf4, 0x8a, 0x8f, 0x1b, 0xe2, 0x7c, 0xdb, 0x1b, 0xb4, 0x0a, 0xb9, 0x96, 0x61, 0xbe, 0xda, + 0xee, 0xe5, 0x4c, 0xcb, 0x30, 0x7d, 0x5a, 0x54, 0xd7, 0x98, 0xfa, 0x46, 0xbb, 0x86, 0x0a, 0x0b, + 0x51, 0x6d, 0x17, 0x67, 0xff, 0xf8, 0x5c, 0x80, 0x99, 0xb8, 0xb7, 0xe5, 0x5e, 0xcd, 0x0b, 0x4e, + 0x6a, 0x40, 0xee, 0x1b, 0xd8, 0xc7, 0xfb, 0x2d, 0x01, 0x50, 0xc3, 0xee, 0x98, 0x04, 0xd4, 0x6e, + 0x58, 0xfb, 0x71, 0x56, 0xf3, 0x02, 0x4c, 0x1a, 0xa6, 0x8e, 0x8f, 0x69, 0x35, 0x53, 0x32, 0x7b, + 0xe8, 0x39, 0x4a, 0x4c, 0x8e, 0x75, 0x94, 0x28, 0x7d, 0x0a, 0x73, 0x3d, 0x45, 0x8c, 0xb3, 0xfe, + 0x7f, 0x9c, 0x80, 0x39, 0x5e, 0x91, 0xd8, 0x77, 0x30, 0xdf, 0x81, 0xc9, 0x26, 0x91, 0x39, 0xa2, + 0x9d, 0xe9, 0x3b, 0xbd, 0x76, 0xa6, 0x99, 0xd1, 0x77, 0x00, 0xda, 0x36, 0x3e, 0x52, 0x18, 0x6b, + 0x72, 0x2c, 0xd6, 0x0c, 0xe1, 0xa0, 0x04, 0xf4, 0x23, 0x01, 0x0a, 0x64, 0x40, 0xb7, 0x6d, 0xab, + 0x6d, 0x39, 0xc4, 0x66, 0x71, 0xc6, 0x83, 0x39, 0x4f, 0x4f, 0x4f, 0x96, 0x72, 0x9b, 0x86, 0xb9, + 0xcd, 0x19, 0x1b, 0xf5, 0xb1, 0x1d, 0xfc, 0xbd, 0x30, 0x87, 0x62, 0xb9, 0x69, 0x69, 0x87, 0xc1, + 0xe1, 0x18, 0x99, 0x59, 0x7c, 0x71, 0x8e, 0xf4, 0x07, 0x02, 0x5c, 0xf8, 0xc6, 0xb6, 0x8b, 0xff, + 0x7f, 0x28, 0x5b, 0x7a, 0x06, 0x22, 0xfd, 0x51, 0x33, 0xf7, 0xac, 0x38, 0x37, 0xee, 0xff, 0x97, + 0x00, 0xb3, 0x21, 0xc1, 0x71, 0x1a, 0x38, 0xaf, 0xaa, 0xa7, 0x1c, 0x73, 0x87, 0x71, 0xc7, 0x53, + 0x95, 0x3c, 0xc3, 0xb3, 0xb3, 0x4e, 0x59, 0x84, 0x19, 0x4c, 0x66, 0x31, 0xba, 0xc5, 0xbb, 0xcb, + 0x82, 0x4c, 0xfa, 0x76, 0xf4, 0xb3, 0x7e, 0x86, 0x52, 0x57, 0xfa, 0x65, 0x62, 0x61, 0x85, 0x07, + 0x65, 0x9c, 0x43, 0xfe, 0x1f, 0x27, 0xe0, 0x52, 0x99, 0x1d, 0x81, 0x7b, 0x3e, 0x21, 0x71, 0x76, + 0xc4, 0x79, 0x98, 0x3e, 0xc2, 0xb6, 0x63, 0x58, 0x6c, 0xb5, 0xcf, 0xc9, 0xde, 0x23, 0x5a, 0x80, + 0xb4, 0x63, 0xaa, 0x6d, 0xe7, 0xc0, 0xf2, 0x8e, 0x13, 0xfd, 0x67, 0xdf, 0x7f, 0x65, 0xf2, 0xd5, + 0xfd, 0x57, 0xa6, 0x46, 0xfb, 0xaf, 0x4c, 0x7f, 0x0d, 0xff, 0x15, 0x7e, 0x76, 0xf7, 0x2f, 0x05, + 0xb8, 0x3c, 0xa0, 0xb9, 0x38, 0x3b, 0xe7, 0xf7, 0x21, 0xab, 0x71, 0xc1, 0x64, 0x7d, 0x60, 0x07, + 0x93, 0x35, 0x92, 0xed, 0x15, 0xa1, 0xcf, 0xe9, 0xc9, 0x12, 0x78, 0x45, 0xad, 0xad, 0x72, 0xe5, + 0x90, 0xdf, 0xba, 0xf4, 0x9f, 0x01, 0x0a, 0x95, 0x63, 0xb6, 0x29, 0x5f, 0x67, 0x56, 0x09, 0x7a, + 0x04, 0xe9, 0xb6, 0x6d, 0x1d, 0x19, 0x5e, 0x35, 0xf2, 0x3d, 0xce, 0x0b, 0x5e, 0x35, 0xfa, 0xb8, + 0xb6, 0x39, 0x87, 0xec, 0xf3, 0xa2, 0x06, 0x64, 0x36, 0x2c, 0x4d, 0x6d, 0x3e, 0x32, 0x9a, 0xde, + 0x40, 0x7b, 0xfb, 0x6c, 0x41, 0x45, 0x9f, 0x67, 0x5b, 0x75, 0x0f, 0xbc, 0x46, 0xf0, 0x89, 0xa8, + 0x06, 0xe9, 0xaa, 0xeb, 0xb6, 0x49, 0x22, 0x1f, 0x7f, 0xb7, 0xc7, 0x10, 0x4a, 0x58, 0x3c, 0x8f, + 0x5b, 0x8f, 0x1d, 0x35, 0x60, 0xf6, 0x31, 0x8d, 0x1f, 0x2b, 0x37, 0xad, 0x8e, 0x5e, 0xa6, 0xf1, + 0x6e, 0x7c, 0x99, 0xb8, 0x35, 0x86, 0xcc, 0xc7, 0xe5, 0xba, 0x3c, 0x28, 0x00, 0xad, 0x40, 0xba, + 0xfe, 0x90, 0x0b, 0x63, 0x66, 0xe4, 0xcd, 0x31, 0x84, 0xd5, 0x1f, 0xca, 0x3e, 0x1b, 0x5a, 0x83, + 0xec, 0xca, 0x67, 0x1d, 0x1b, 0x73, 0x29, 0x53, 0x43, 0x3d, 0x27, 0xfa, 0xa5, 0x50, 0x2e, 0x39, + 0xcc, 0x8c, 0xbe, 0x07, 0x05, 0xa2, 0xb7, 0x86, 0xba, 0xdb, 0xf4, 0xe4, 0xa5, 0xa9, 0xbc, 0x37, + 0xc7, 0x90, 0xe7, 0x73, 0x7a, 0x47, 0x02, 0x7d, 0xa2, 0x16, 0x64, 0xc8, 0xf5, 0xb4, 0x17, 0x42, + 0x90, 0x6a, 0x93, 0xa6, 0x11, 0xa8, 0x1b, 0x12, 0xfd, 0x8d, 0xde, 0x82, 0x69, 0xd3, 0xd2, 0xb1, + 0xd7, 0x99, 0x73, 0xa5, 0x0b, 0xa7, 0x27, 0x4b, 0x53, 0x5b, 0x96, 0xce, 0x6c, 0x1d, 0xfe, 0x4b, + 0x9e, 0x22, 0x99, 0x6a, 0xfa, 0xc2, 0x35, 0x48, 0x91, 0x26, 0x22, 0x73, 0xc8, 0xae, 0xea, 0xe0, + 0x1d, 0xdb, 0xe0, 0xd2, 0xbc, 0xc7, 0x85, 0xbf, 0x9b, 0x80, 0x44, 0xfd, 0x21, 0xb1, 0xe6, 0x77, + 0x3b, 0xda, 0x21, 0x76, 0x79, 0x3a, 0x7f, 0xa2, 0x56, 0xbe, 0x8d, 0xf7, 0x0c, 0x66, 0x74, 0x65, + 0x64, 0xfe, 0x84, 0x5e, 0x07, 0x50, 0x35, 0x0d, 0x3b, 0x8e, 0xe2, 0x85, 0x00, 0x66, 0xe4, 0x0c, + 0xa3, 0xac, 0xe3, 0x2e, 0x61, 0x73, 0xb0, 0x66, 0x63, 0xd7, 0xf3, 0xa1, 0x62, 0x4f, 0x84, 0xcd, + 0xc5, 0xad, 0xb6, 0xe2, 0x5a, 0x87, 0xd8, 0xa4, 0x4d, 0x9a, 0x21, 0xb3, 0x42, 0xab, 0xdd, 0x20, + 0x04, 0x32, 0xa1, 0x61, 0x53, 0x0f, 0x66, 0x9f, 0x8c, 0xec, 0x3f, 0x13, 0x91, 0x36, 0xde, 0x37, + 0x78, 0x00, 0x5d, 0x46, 0xe6, 0x4f, 0x44, 0x4b, 0x6a, 0xc7, 0x3d, 0xa0, 0x2d, 0x91, 0x91, 0xe9, + 0x6f, 0x74, 0x0b, 0x0a, 0xcc, 0xed, 0x52, 0xc1, 0xa6, 0xa6, 0xd0, 0x79, 0x30, 0x43, 0x93, 0x73, + 0x8c, 0x5c, 0x31, 0x35, 0x32, 0xeb, 0xa1, 0x87, 0xc0, 0x09, 0xca, 0x61, 0xcb, 0x21, 0x3a, 0x05, + 0x92, 0xab, 0x54, 0x38, 0x3d, 0x59, 0xca, 0xd6, 0x69, 0xc2, 0xfa, 0x66, 0x9d, 0xac, 0x25, 0x2c, + 0xd7, 0x7a, 0xcb, 0xa9, 0xe9, 0x0b, 0x7f, 0x5d, 0x80, 0xe4, 0xe3, 0x72, 0xfd, 0xdc, 0x2a, 0xf3, + 0x0a, 0x9a, 0x0c, 0x15, 0xf4, 0x36, 0x14, 0x76, 0x8d, 0x66, 0xd3, 0x30, 0xf7, 0x89, 0x7d, 0xf5, + 0x7d, 0xac, 0x79, 0x0a, 0xcb, 0x73, 0xf2, 0x36, 0xa3, 0xa2, 0x6b, 0x90, 0xd5, 0x6c, 0xac, 0x63, + 0xd3, 0x35, 0xd4, 0xa6, 0xc3, 0x35, 0x17, 0x26, 0x2d, 0xfc, 0x79, 0x01, 0x26, 0x69, 0x67, 0x45, + 0xaf, 0x41, 0x46, 0xb3, 0x4c, 0x57, 0x35, 0x4c, 0x3e, 0xeb, 0x64, 0xe4, 0x80, 0x30, 0xb4, 0x78, + 0xd7, 0x61, 0x46, 0xd5, 0x34, 0xab, 0x63, 0xba, 0x8a, 0xa9, 0xb6, 0x30, 0x2f, 0x66, 0x96, 0xd3, + 0xb6, 0xd4, 0x16, 0x46, 0x4b, 0xe0, 0x3d, 0xfa, 0x91, 0x9d, 0x19, 0x19, 0x38, 0x69, 0x1d, 0x77, + 0x17, 0x30, 0x64, 0xfc, 0x5e, 0x4d, 0xea, 0xdb, 0x71, 0xfc, 0x12, 0xd0, 0xdf, 0xe8, 0x6d, 0xb8, + 0xf0, 0xa2, 0xa3, 0x36, 0x8d, 0x3d, 0xba, 0xf9, 0x45, 0xbd, 0xd4, 0xe9, 0xcb, 0x58, 0x51, 0x90, + 0x9f, 0x46, 0x25, 0xd0, 0x77, 0x7a, 0x83, 0x20, 0x19, 0x0c, 0x02, 0xe6, 0xb2, 0x23, 0x75, 0x61, + 0x56, 0xc6, 0xae, 0xdd, 0x6d, 0xb0, 0x60, 0xd7, 0xca, 0x11, 0x36, 0x5d, 0x52, 0x77, 0xab, 0x8d, + 0x99, 0x93, 0x88, 0x57, 0x77, 0x9f, 0x80, 0x6e, 0x42, 0x5e, 0x75, 0x49, 0x77, 0x73, 0x15, 0xb3, + 0xd3, 0xda, 0xc5, 0x36, 0x73, 0x05, 0x90, 0x73, 0x9c, 0xba, 0x45, 0x89, 0x3c, 0x22, 0xc3, 0xee, + 0x2a, 0x74, 0x9f, 0x88, 0xbf, 0x1a, 0x28, 0xa9, 0x42, 0x28, 0xd2, 0x5d, 0xb8, 0x48, 0xea, 0x59, + 0x31, 0x35, 0xbb, 0xdb, 0x26, 0x92, 0x9f, 0xd0, 0xbf, 0x0e, 0x12, 0x43, 0xe7, 0x34, 0xf4, 0x78, + 0x46, 0xfa, 0x72, 0x1a, 0x72, 0x95, 0xe3, 0xb6, 0x65, 0xc7, 0xba, 0xab, 0x53, 0x82, 0x69, 0x0e, + 0x7c, 0x47, 0x1c, 0xc5, 0xf6, 0xcd, 0x40, 0xde, 0x39, 0x34, 0x67, 0x44, 0xcf, 0xfc, 0xc0, 0xd4, + 0x43, 0xdc, 0x25, 0x56, 0xfd, 0xcc, 0x38, 0x56, 0xfd, 0x1c, 0xc7, 0xd2, 0x59, 0x16, 0x47, 0xba, + 0x8e, 0xbb, 0x8d, 0xba, 0xcc, 0x63, 0x63, 0xc9, 0x83, 0x83, 0xb6, 0x20, 0xdb, 0x3a, 0xd2, 0x34, + 0x65, 0xcf, 0x68, 0xba, 0xdc, 0x57, 0x2d, 0xda, 0xad, 0x7a, 0xf3, 0x59, 0xb9, 0xfc, 0x88, 0x66, + 0x62, 0x3e, 0x5e, 0xc1, 0xb3, 0x0c, 0x44, 0x02, 0xfb, 0x8d, 0x4a, 0x00, 0xcc, 0xf1, 0x93, 0xfa, + 0x0b, 0x25, 0xcf, 0x71, 0xc2, 0x45, 0xd9, 0x68, 0x50, 0x84, 0x04, 0x39, 0xe6, 0x9e, 0xd4, 0x32, + 0x58, 0x54, 0x72, 0x8e, 0x6d, 0xc3, 0x51, 0xe2, 0xa6, 0x41, 0x23, 0x92, 0xdf, 0x04, 0x1e, 0x74, + 0xa3, 0x38, 0x5e, 0x08, 0x5d, 0x29, 0x77, 0x7a, 0xb2, 0x94, 0x91, 0x29, 0xb5, 0x5e, 0x6f, 0xc8, + 0x19, 0x96, 0xa1, 0xee, 0xb8, 0xe7, 0x09, 0xb3, 0x98, 0x1e, 0x3f, 0xcc, 0xe2, 0x2f, 0x0b, 0x70, + 0x89, 0xb7, 0x8f, 0xb2, 0x4b, 0x5d, 0xcb, 0xd5, 0xa6, 0xe1, 0x76, 0x95, 0xc3, 0xa3, 0xf9, 0x34, + 0x35, 0xb7, 0x7e, 0x31, 0xb2, 0x9d, 0x43, 0xdd, 0xab, 0xe8, 0xb5, 0x76, 0x77, 0x83, 0x33, 0xaf, + 0x1f, 0x55, 0x4c, 0xd7, 0xee, 0x96, 0x2e, 0x9f, 0x9e, 0x2c, 0xcd, 0x0d, 0xa6, 0x3e, 0x93, 0xe7, + 0x9c, 0x41, 0x16, 0x54, 0x05, 0xc0, 0x7e, 0xf7, 0xa6, 0xb3, 0x67, 0xf4, 0xb2, 0x19, 0x39, 0x0e, + 0xe4, 0x10, 0x2f, 0xba, 0x03, 0x22, 0x0f, 0x6b, 0xd9, 0x33, 0x9a, 0x58, 0x71, 0x8c, 0xcf, 0x30, + 0x9d, 0x67, 0x93, 0x72, 0x9e, 0xd1, 0x89, 0x88, 0xba, 0xf1, 0x19, 0x46, 0xf7, 0xe1, 0x62, 0xd0, + 0x02, 0xca, 0x2e, 0x6e, 0x5a, 0x2f, 0x59, 0xf6, 0x2c, 0xcd, 0x8e, 0x7c, 0xed, 0x97, 0x48, 0x12, + 0x61, 0x59, 0xf8, 0x3e, 0xcc, 0x0f, 0xab, 0x70, 0x78, 0x30, 0x66, 0xd8, 0x59, 0xe9, 0xfb, 0xbd, + 0x1b, 0x25, 0x63, 0x0c, 0x1a, 0xbe, 0x59, 0xf2, 0x41, 0xe2, 0x7d, 0x41, 0xfa, 0x3b, 0x09, 0xc8, + 0x95, 0x3a, 0xcd, 0xc3, 0x27, 0xed, 0x3a, 0xbb, 0x2d, 0x00, 0x5d, 0x85, 0x8c, 0xae, 0xba, 0x2a, + 0x2b, 0xa4, 0xc0, 0xc2, 0xdb, 0x08, 0x81, 0xd6, 0xe6, 0x36, 0x14, 0x42, 0x7e, 0x28, 0xdc, 0xdb, + 0x9e, 0x56, 0x3b, 0x20, 0x53, 0x87, 0xf8, 0xf7, 0x61, 0x3e, 0x94, 0x91, 0xee, 0x6a, 0x28, 0xd8, + 0x74, 0x6d, 0x03, 0xb3, 0x9d, 0xb9, 0xa4, 0x1c, 0x72, 0x96, 0xa9, 0x91, 0xe4, 0x0a, 0x4b, 0x45, + 0x0d, 0x98, 0x21, 0x19, 0xbb, 0x0a, 0x9d, 0x81, 0xbd, 0x9d, 0xd3, 0xfb, 0x11, 0xd5, 0xea, 0x29, + 0x77, 0x91, 0xea, 0xa7, 0x4c, 0x79, 0xe8, 0x4f, 0x39, 0x8b, 0x03, 0xca, 0xc2, 0xc7, 0x20, 0xf6, + 0x67, 0x08, 0xeb, 0x32, 0xc5, 0x74, 0x79, 0x21, 0xac, 0xcb, 0x64, 0x48, 0x4f, 0x6b, 0xa9, 0x74, + 0x4a, 0x9c, 0x94, 0x7e, 0x33, 0x05, 0x79, 0xaf, 0x67, 0xc6, 0x69, 0xd2, 0x97, 0x60, 0x92, 0xf4, + 0x23, 0xcf, 0xb5, 0xe3, 0xd6, 0x88, 0x01, 0xc1, 0xfd, 0xbb, 0x49, 0xff, 0xf2, 0xd0, 0x27, 0x65, + 0x8d, 0x63, 0x4a, 0x59, 0xf8, 0xdd, 0x04, 0xa4, 0xa8, 0x15, 0x7d, 0x1f, 0x52, 0xf4, 0x4e, 0x00, + 0x61, 0xe4, 0x9d, 0x00, 0x9e, 0x6b, 0x00, 0xc9, 0x8a, 0x36, 0xc9, 0xe0, 0xd2, 0xbd, 0x79, 0x37, + 0x33, 0xce, 0xfb, 0x45, 0x3e, 0xef, 0xa6, 0x2b, 0xf4, 0xfe, 0x84, 0x46, 0x9d, 0x9a, 0x46, 0x6c, + 0xc6, 0xf5, 0xd6, 0xc8, 0x44, 0xc8, 0x50, 0x2c, 0x51, 0x57, 0x25, 0xcb, 0x76, 0xb1, 0xce, 0x8d, + 0xde, 0x6b, 0x67, 0x75, 0x0b, 0xcf, 0xa8, 0xf7, 0xf8, 0xd0, 0x15, 0x48, 0x92, 0xa9, 0x70, 0x9a, + 0x79, 0x1d, 0x9c, 0x9e, 0x2c, 0x25, 0xc9, 0x24, 0x48, 0x68, 0x68, 0x19, 0xb2, 0xbd, 0x93, 0x13, + 0xb1, 0x9b, 0xe8, 0x2c, 0x1e, 0x9a, 0x58, 0xa0, 0xe9, 0x8f, 0x48, 0x06, 0xf8, 0x58, 0xd7, 0xe0, + 0xfe, 0x06, 0xbf, 0x26, 0x70, 0xf7, 0xca, 0xba, 0x46, 0x96, 0x5f, 0x3b, 0xce, 0xf5, 0xf1, 0x2e, + 0x88, 0xb6, 0x6a, 0xea, 0x56, 0xcb, 0xf8, 0x0c, 0xb3, 0x0d, 0x06, 0x87, 0x9f, 0xbc, 0x14, 0x7c, + 0x3a, 0xdd, 0x09, 0x70, 0xa4, 0xff, 0x28, 0x70, 0x57, 0x4c, 0xbf, 0x18, 0xf1, 0x9e, 0x8f, 0x67, + 0xf9, 0xee, 0xa4, 0xb9, 0x67, 0x79, 0x9e, 0x24, 0xaf, 0x0d, 0xf3, 0x9b, 0xaa, 0x99, 0x7b, 0x96, + 0x77, 0xd2, 0x67, 0x7b, 0x04, 0x67, 0xe1, 0x97, 0x60, 0x92, 0x26, 0xbf, 0x42, 0x57, 0xf3, 0xdd, + 0x7f, 0x13, 0x62, 0x52, 0xfa, 0xa3, 0x04, 0xbc, 0x41, 0xab, 0xfa, 0x0c, 0xdb, 0xc6, 0x5e, 0x77, + 0xdb, 0xb6, 0x5c, 0xac, 0xb9, 0x58, 0x0f, 0x36, 0xd8, 0x62, 0x6c, 0x02, 0x1d, 0x32, 0xfc, 0x68, + 0xd2, 0xd0, 0xf9, 0x25, 0x20, 0x8f, 0xbf, 0x1e, 0xf0, 0x4e, 0xb3, 0x23, 0xcd, 0xda, 0xaa, 0x9c, + 0x66, 0x92, 0x6b, 0x3a, 0x5a, 0x81, 0x4c, 0xdb, 0xab, 0xc6, 0xb9, 0xbc, 0x5f, 0x7c, 0x2e, 0xb4, + 0x0e, 0x05, 0x5e, 0x50, 0xb5, 0x69, 0x1c, 0x61, 0x45, 0x75, 0xcf, 0x33, 0x23, 0xe4, 0x18, 0xef, + 0x0a, 0x61, 0x5d, 0x71, 0xa5, 0xbf, 0x9a, 0x82, 0x9b, 0x67, 0xa8, 0x38, 0xce, 0xee, 0xb5, 0x00, + 0xe9, 0x23, 0xf2, 0x22, 0x83, 0xd7, 0x3e, 0x2d, 0xfb, 0xcf, 0x68, 0xb7, 0x67, 0x59, 0xd9, 0x53, + 0x8d, 0x26, 0x59, 0x86, 0x98, 0xbf, 0xe1, 0x70, 0x8f, 0xa6, 0x68, 0xff, 0xbd, 0xd0, 0x02, 0xf4, + 0x88, 0x0a, 0xa2, 0xd9, 0x1c, 0xf4, 0xb9, 0x00, 0x0b, 0xec, 0x85, 0xcc, 0xe9, 0xad, 0xef, 0x35, + 0x29, 0xfa, 0x9a, 0xd5, 0x88, 0xd7, 0x8c, 0xa5, 0xa3, 0x62, 0xe8, 0x5d, 0xbc, 0x20, 0xf3, 0xe1, + 0xb7, 0x85, 0x8b, 0xb2, 0xf0, 0xeb, 0x02, 0x64, 0x43, 0x04, 0x74, 0x6b, 0x20, 0xc4, 0x28, 0x7b, + 0x1a, 0x15, 0x57, 0x74, 0x73, 0x20, 0xae, 0xa8, 0x94, 0xfe, 0xea, 0x64, 0x29, 0x25, 0x33, 0xd7, + 0x75, 0x2f, 0xc2, 0xe8, 0x7a, 0x70, 0xa3, 0x4d, 0xb2, 0x2f, 0x93, 0x77, 0xa5, 0x0d, 0x45, 0xa8, + 0xaa, 0x77, 0x22, 0x46, 0x11, 0x2a, 0x79, 0x92, 0x7e, 0x9c, 0x80, 0xd9, 0x15, 0x5d, 0xaf, 0xd7, + 0x29, 0xaa, 0x89, 0x73, 0x8c, 0x21, 0x48, 0x11, 0x73, 0x83, 0x87, 0x43, 0xd1, 0xdf, 0xe8, 0x2d, + 0x40, 0xba, 0xe1, 0xb0, 0x9b, 0x21, 0x9c, 0x03, 0x55, 0xb7, 0x5e, 0x06, 0x07, 0xdf, 0xb3, 0x5e, + 0x4a, 0xdd, 0x4b, 0x40, 0x75, 0xa0, 0xb6, 0xb6, 0xe2, 0xb8, 0xaa, 0xbf, 0xb1, 0x7f, 0x73, 0xac, + 0x00, 0x1b, 0x66, 0x1c, 0xfb, 0x8f, 0x72, 0x86, 0xc8, 0xa1, 0x3f, 0x89, 0xc9, 0x67, 0x90, 0x46, + 0x71, 0x15, 0xd5, 0xf1, 0x42, 0x43, 0xd8, 0x9d, 0x14, 0x79, 0x46, 0x5f, 0x71, 0x58, 0xc4, 0x07, + 0xf3, 0x28, 0x0f, 0x54, 0x13, 0xe7, 0xb6, 0xec, 0xdf, 0x14, 0x20, 0x2f, 0xe3, 0x3d, 0x1b, 0x3b, + 0x07, 0x71, 0xea, 0xfc, 0x11, 0xcc, 0xd8, 0x4c, 0xaa, 0xb2, 0x67, 0x5b, 0xad, 0xf3, 0xcc, 0x15, + 0x59, 0xce, 0xf8, 0xc8, 0xb6, 0x5a, 0x7c, 0x4a, 0x7e, 0x06, 0x05, 0xbf, 0x8c, 0x71, 0x56, 0xfe, + 0x6f, 0xd3, 0xe0, 0x51, 0x26, 0x38, 0xee, 0x13, 0xe8, 0x78, 0x35, 0x40, 0xb7, 0xe6, 0xc3, 0x05, + 0x8d, 0x53, 0x0d, 0xff, 0x41, 0x80, 0x7c, 0xbd, 0xb3, 0xcb, 0x6e, 0x3c, 0x8a, 0x4f, 0x03, 0x15, + 0xc8, 0x34, 0xf1, 0x9e, 0xab, 0xbc, 0x92, 0x2f, 0x74, 0x9a, 0xb0, 0x52, 0x4f, 0xf0, 0xc7, 0x00, + 0x36, 0x8d, 0x9e, 0xa2, 0x72, 0x92, 0xe7, 0x94, 0x93, 0xa1, 0xbc, 0x84, 0x4c, 0x56, 0x9d, 0x82, + 0x5f, 0xcd, 0x38, 0xd7, 0x97, 0xe7, 0x3d, 0xb3, 0x43, 0xf2, 0x3c, 0xb3, 0xc3, 0x2c, 0x37, 0x58, + 0xa3, 0x67, 0x88, 0x22, 0xcc, 0x51, 0xb3, 0x4c, 0x51, 0xdb, 0xed, 0xa6, 0xe1, 0xc1, 0x1e, 0x3a, + 0xff, 0xa4, 0xe4, 0x59, 0x9a, 0xb4, 0xc2, 0x52, 0x28, 0xe0, 0x41, 0x3f, 0x10, 0x60, 0x66, 0xcf, + 0xc6, 0xf8, 0x33, 0xac, 0xd0, 0x29, 0x79, 0x3c, 0xaf, 0x82, 0x55, 0x52, 0x86, 0xaf, 0x7d, 0xea, + 0x98, 0x65, 0x2f, 0xae, 0x93, 0xf7, 0xa2, 0x2d, 0x10, 0xb5, 0x26, 0x3b, 0x07, 0xf5, 0x3d, 0x1c, + 0xa6, 0xc6, 0x1f, 0x00, 0x05, 0xc6, 0x1c, 0x38, 0x39, 0x3c, 0x25, 0x83, 0x49, 0xd5, 0x15, 0x7e, + 0x01, 0x1d, 0x35, 0xb6, 0x7b, 0x3d, 0x1c, 0xc2, 0x51, 0xe4, 0xa1, 0x7b, 0xeb, 0x8a, 0x32, 0x56, + 0x75, 0x6e, 0xb9, 0x93, 0x71, 0xe5, 0x3f, 0xf0, 0x71, 0xf5, 0x1c, 0x66, 0x69, 0xbf, 0x89, 0x3b, + 0x18, 0x54, 0xfa, 0xfb, 0x49, 0x40, 0x61, 0xc9, 0xdf, 0x5c, 0x7f, 0x4b, 0xc4, 0xd7, 0xdf, 0xd6, + 0x40, 0x0a, 0x19, 0x43, 0x4d, 0xd5, 0x71, 0x15, 0xe6, 0x4a, 0xe7, 0x28, 0x6d, 0x6c, 0x2b, 0x0e, + 0xd6, 0x2c, 0x7e, 0x1f, 0x90, 0x20, 0x2f, 0x06, 0x39, 0x37, 0x54, 0xc7, 0x7d, 0xca, 0xf2, 0x6d, + 0x63, 0xbb, 0x4e, 0x73, 0xa1, 0x87, 0x70, 0xa9, 0xa5, 0x1e, 0x47, 0xf1, 0x4f, 0x52, 0xfe, 0xb9, + 0x96, 0x7a, 0x3c, 0xc0, 0xf4, 0x01, 0x2c, 0x44, 0x33, 0x29, 0x0e, 0xf6, 0x8e, 0xda, 0x2e, 0x45, + 0x30, 0xd6, 0xb1, 0x8b, 0x56, 0x00, 0x02, 0x10, 0xc1, 0xd7, 0xe8, 0x71, 0x30, 0x44, 0xc6, 0xc7, + 0x10, 0xd2, 0x0f, 0x05, 0xc8, 0x6f, 0x1a, 0xfb, 0xb6, 0x1a, 0xeb, 0x6d, 0x3b, 0xe8, 0x83, 0xde, + 0xb3, 0xc9, 0xec, 0x83, 0x85, 0x28, 0xdf, 0x13, 0x96, 0xc3, 0xdb, 0x7f, 0xe4, 0x0c, 0x64, 0xe9, + 0xf3, 0x4b, 0x14, 0xe7, 0x9c, 0xaf, 0xc1, 0xeb, 0xd4, 0x9b, 0x8f, 0xbb, 0xf2, 0x7c, 0x23, 0xe8, + 0x46, 0xfa, 0x1d, 0x01, 0x16, 0x87, 0xbd, 0x25, 0xce, 0x01, 0x21, 0xd3, 0x7b, 0x07, 0xe9, 0x1b, + 0x14, 0x7f, 0x44, 0x9c, 0x31, 0xd3, 0x20, 0x3e, 0x12, 0xc0, 0x2f, 0x5b, 0x9d, 0xde, 0x48, 0xc8, + 0x7e, 0x3b, 0x44, 0x41, 0x75, 0x4d, 0x35, 0x69, 0xa8, 0x70, 0x13, 0xab, 0x47, 0x98, 0x3b, 0x22, + 0xc6, 0x3a, 0x4b, 0x7c, 0x21, 0xc0, 0xe2, 0xb0, 0xb7, 0xc4, 0xa9, 0xa0, 0x5f, 0x84, 0x69, 0xe6, + 0xd1, 0xe6, 0x81, 0x9a, 0x2b, 0x43, 0xa2, 0xa2, 0x4d, 0x2f, 0x16, 0xc7, 0xcb, 0x2f, 0x35, 0x20, + 0x5f, 0x52, 0x6d, 0xdb, 0x88, 0x75, 0xeb, 0x41, 0xfa, 0xb1, 0x00, 0x05, 0x5f, 0x6c, 0x9c, 0x35, + 0xfd, 0xfa, 0x81, 0x1e, 0xd2, 0x7f, 0xb9, 0x0a, 0x33, 0xbc, 0xfc, 0x3b, 0xa6, 0x61, 0x99, 0xe8, + 0x3e, 0x24, 0xf7, 0xf9, 0x01, 0x56, 0x36, 0x72, 0x8f, 0x3e, 0xb8, 0xe6, 0xb1, 0x3a, 0x21, 0x93, + 0xbc, 0x84, 0xa5, 0xdd, 0x71, 0x23, 0x0a, 0x10, 0x44, 0x2a, 0x84, 0x59, 0xda, 0x1d, 0x17, 0xd5, + 0xa1, 0xa0, 0x05, 0x77, 0xcb, 0x29, 0x84, 0x3d, 0x39, 0x74, 0x43, 0x39, 0xf2, 0x96, 0xbf, 0xea, + 0x84, 0x9c, 0xd7, 0x7a, 0x12, 0x50, 0x39, 0x7c, 0xa5, 0x59, 0x6a, 0xc0, 0x0d, 0x32, 0x68, 0xfa, + 0xde, 0xeb, 0xd4, 0xaa, 0x13, 0xa1, 0x9b, 0xcf, 0xd0, 0x07, 0x30, 0xa5, 0xd3, 0xcb, 0xb3, 0xb8, + 0x3d, 0x11, 0xd5, 0xe0, 0x3d, 0x77, 0x94, 0x55, 0x27, 0x64, 0xce, 0x81, 0xd6, 0x60, 0x86, 0xfd, + 0x62, 0x68, 0x97, 0x5b, 0x01, 0x37, 0x87, 0x4b, 0x08, 0xd9, 0xe1, 0xd5, 0x09, 0x39, 0xab, 0x07, + 0x54, 0xf4, 0x18, 0xb2, 0x5a, 0x13, 0xab, 0x36, 0x17, 0x75, 0x6b, 0x68, 0xec, 0xe6, 0xc0, 0x85, + 0x5b, 0xd5, 0x09, 0x19, 0x34, 0x9f, 0x48, 0x0a, 0x65, 0xd3, 0x7b, 0x97, 0xb8, 0xa4, 0xb7, 0x87, + 0x16, 0x6a, 0xf0, 0x12, 0xab, 0x2a, 0xb5, 0xcf, 0x7d, 0x2a, 0x7a, 0x07, 0x52, 0x8e, 0xa6, 0x9a, + 0xdc, 0x24, 0x59, 0x1c, 0x72, 0x31, 0x4e, 0xc0, 0x4c, 0x73, 0xa3, 0x0f, 0x19, 0x50, 0x76, 0x8f, + 0xbd, 0x53, 0x83, 0x28, 0x9d, 0xf6, 0x5c, 0xc0, 0x40, 0x74, 0x8a, 0x29, 0x81, 0xe8, 0x41, 0xd5, + 0x5b, 0x86, 0xa9, 0xd0, 0x83, 0x19, 0x7a, 0x4c, 0x10, 0xad, 0x87, 0x81, 0x28, 0xf6, 0x2a, 0xbd, + 0xe5, 0xc1, 0x23, 0xa2, 0x4d, 0xc8, 0x31, 0x41, 0x1d, 0x16, 0x60, 0x3d, 0xbf, 0x3c, 0xd4, 0x17, + 0x21, 0x22, 0xc4, 0xbb, 0x3a, 0x21, 0xcf, 0xa8, 0x21, 0x72, 0x50, 0xae, 0x16, 0xb6, 0xf7, 0xd9, + 0x79, 0xc4, 0x88, 0x72, 0x85, 0x1d, 0x3c, 0xfd, 0x72, 0x51, 0x22, 0xfa, 0x55, 0xb8, 0xc0, 0x04, + 0xb9, 0xdc, 0x6f, 0x8d, 0xbb, 0x3f, 0xbd, 0x3e, 0xd4, 0x8f, 0x60, 0x68, 0x50, 0x74, 0x75, 0x42, + 0x46, 0xea, 0x40, 0x22, 0xd2, 0xe0, 0x22, 0x7b, 0x03, 0x8f, 0xaa, 0xb5, 0x79, 0x20, 0xe8, 0xfc, + 0x0d, 0xfa, 0x8a, 0xb7, 0x86, 0xbd, 0x22, 0x32, 0xd8, 0xb7, 0x3a, 0x21, 0xcf, 0xa9, 0x83, 0xa9, + 0x41, 0x35, 0x6c, 0x1e, 0xbf, 0xc8, 0xbb, 0xdb, 0x5b, 0xa3, 0xab, 0x11, 0x15, 0xf7, 0xe9, 0x57, + 0xa3, 0x27, 0x91, 0x34, 0xa0, 0x7f, 0x7b, 0x03, 0xed, 0x4c, 0x33, 0x43, 0x1b, 0x30, 0x22, 0xc8, + 0x91, 0x34, 0xe0, 0x41, 0x88, 0x8c, 0x8a, 0x90, 0xd8, 0xd7, 0xe8, 0xa9, 0x5f, 0xb4, 0xe9, 0xe4, + 0x07, 0xf2, 0x55, 0x27, 0xe4, 0xc4, 0xbe, 0x86, 0x3e, 0x86, 0x34, 0x8b, 0xca, 0x3a, 0x36, 0xe7, + 0xf3, 0x43, 0xe7, 0xec, 0xde, 0xd8, 0xb6, 0xea, 0x84, 0x4c, 0x03, 0xc1, 0x78, 0x47, 0xe6, 0x11, + 0x37, 0x54, 0x44, 0x71, 0x44, 0x30, 0x76, 0x5f, 0xdc, 0x13, 0xe9, 0x30, 0xb6, 0x4f, 0x44, 0xdb, + 0x90, 0xe7, 0x4b, 0xb7, 0x17, 0x41, 0x20, 0x0e, 0xf5, 0xd4, 0x89, 0x0a, 0x22, 0xa8, 0xd2, 0x2d, + 0xca, 0x10, 0x9d, 0xb4, 0x5d, 0xaf, 0x44, 0xde, 0x76, 0xb3, 0x43, 0xdb, 0x6e, 0xa8, 0x43, 0x3b, + 0x69, 0x3b, 0x7b, 0x20, 0x11, 0xbd, 0x07, 0x93, 0x6c, 0x9c, 0x20, 0x2a, 0x32, 0xca, 0xf9, 0xac, + 0x6f, 0x88, 0xb0, 0xfc, 0x64, 0xf6, 0x72, 0xb9, 0x63, 0xae, 0xd2, 0xb4, 0xf6, 0xe7, 0xe7, 0x86, + 0xce, 0x5e, 0x83, 0x2e, 0xc6, 0x64, 0xf6, 0x72, 0x03, 0x2a, 0xe9, 0x40, 0x36, 0x4b, 0xe1, 0x43, + 0xec, 0xc2, 0xd0, 0x0e, 0x14, 0xe1, 0xaf, 0x5b, 0xa5, 0x21, 0x53, 0x01, 0xd9, 0x9f, 0x58, 0x1d, + 0xac, 0xd0, 0x49, 0xf1, 0xe2, 0xe8, 0x89, 0xb5, 0xe7, 0xb6, 0x32, 0x7f, 0x62, 0x65, 0x54, 0xf4, + 0x0c, 0x44, 0x7e, 0x65, 0x8e, 0xe2, 0xf9, 0x8f, 0xcd, 0x5f, 0xa2, 0xf2, 0xee, 0x46, 0x2e, 0x88, + 0x51, 0xae, 0x85, 0x55, 0x82, 0x25, 0x7b, 0x53, 0xd0, 0x27, 0x30, 0x4b, 0xe5, 0x29, 0x5a, 0x70, + 0xcb, 0xd1, 0xfc, 0xfc, 0xc0, 0x9d, 0x39, 0xc3, 0x2f, 0x44, 0xf2, 0x24, 0x8b, 0x5a, 0x5f, 0x12, + 0x19, 0x0f, 0x86, 0x69, 0xb8, 0x74, 0xed, 0x5e, 0x18, 0x3a, 0x1e, 0x7a, 0x6f, 0x78, 0xad, 0x52, + 0x5b, 0x8b, 0x52, 0x48, 0x37, 0xee, 0x9b, 0xf1, 0x5e, 0x1b, 0xda, 0x8d, 0x87, 0x4c, 0x76, 0x39, + 0xb7, 0x67, 0x9e, 0x5b, 0x05, 0x60, 0x3b, 0x08, 0x14, 0x14, 0x2d, 0x0e, 0x35, 0x00, 0xfa, 0xfd, + 0x69, 0x89, 0x01, 0xd0, 0xf4, 0x68, 0xc4, 0x00, 0x60, 0xc7, 0x5d, 0xf3, 0xd7, 0x86, 0x2f, 0x56, + 0xe1, 0xf3, 0x75, 0xba, 0x58, 0x51, 0x02, 0x31, 0xc8, 0x08, 0x9c, 0xeb, 0xd2, 0x11, 0x7e, 0x7d, + 0xe8, 0xee, 0x4d, 0x5f, 0xa0, 0x5d, 0x75, 0x42, 0x4e, 0xbf, 0xe0, 0x24, 0xd2, 0xab, 0x98, 0x08, + 0x3e, 0xb6, 0xef, 0x0d, 0xed, 0x55, 0x83, 0x11, 0x56, 0xa4, 0x57, 0xbd, 0x08, 0xa8, 0xc1, 0x92, + 0xe7, 0xb0, 0x83, 0xac, 0xf9, 0x37, 0x46, 0x2f, 0x79, 0xbd, 0xc7, 0x6e, 0xfe, 0x92, 0xc7, 0xc9, + 0x6c, 0xc9, 0xd3, 0x15, 0xc7, 0xa1, 0x6e, 0x3a, 0xf3, 0x37, 0x47, 0x2c, 0x79, 0x7d, 0x5b, 0xdb, + 0x6c, 0xc9, 0xd3, 0xeb, 0x8c, 0x93, 0x58, 0x7f, 0xb6, 0x77, 0x45, 0x14, 0x07, 0xf6, 0xb7, 0x87, + 0x5a, 0x7f, 0x91, 0x77, 0x58, 0x11, 0xeb, 0xcf, 0xee, 0x49, 0x40, 0xdf, 0x81, 0x69, 0xbe, 0x95, + 0x38, 0x7f, 0x67, 0x84, 0x49, 0x1d, 0xde, 0xfd, 0x25, 0xdd, 0x91, 0xf3, 0xb0, 0xc9, 0x81, 0x6d, + 0x61, 0xb2, 0xc9, 0xef, 0xee, 0x88, 0xc9, 0x61, 0x60, 0x17, 0x95, 0x4d, 0x0e, 0x01, 0x99, 0x94, + 0xc6, 0x61, 0xdb, 0x6f, 0xf3, 0xbf, 0x30, 0xb4, 0x34, 0xbd, 0xfb, 0x90, 0xa4, 0x34, 0x9c, 0x87, + 0x2e, 0x16, 0x74, 0xad, 0x66, 0xda, 0x79, 0x73, 0xf8, 0x62, 0xd1, 0xbf, 0xa1, 0x53, 0xf5, 0x0e, + 0x0a, 0x99, 0x56, 0xfe, 0x82, 0x00, 0xd7, 0x58, 0x1f, 0xa0, 0xc7, 0x24, 0x5d, 0xc5, 0x3f, 0xe5, + 0x0a, 0xed, 0x56, 0xdd, 0xa7, 0xe2, 0xdf, 0x3b, 0xff, 0xa1, 0x8c, 0xf7, 0xc6, 0xd7, 0xd5, 0x51, + 0xf9, 0x88, 0x32, 0x5a, 0x0c, 0xd7, 0xcf, 0x3f, 0x18, 0xaa, 0x8c, 0xde, 0xbd, 0x08, 0xa2, 0x0c, + 0xce, 0x83, 0x9a, 0x30, 0xcf, 0x86, 0x44, 0x80, 0x7b, 0xfd, 0xa2, 0x3f, 0x1c, 0xea, 0xf9, 0x3a, + 0x12, 0xf1, 0x57, 0x27, 0xe4, 0x4b, 0x2f, 0x22, 0x33, 0x90, 0xb7, 0xd1, 0x3b, 0x20, 0x8d, 0x00, + 0xa6, 0x2a, 0x1e, 0x9e, 0x7c, 0x67, 0xe8, 0xdb, 0x46, 0xc2, 0x67, 0xf2, 0x36, 0x27, 0x32, 0x03, + 0x51, 0xcd, 0x2e, 0x83, 0x86, 0xf3, 0xef, 0x0e, 0x55, 0x4d, 0x2f, 0x26, 0x25, 0xaa, 0xe1, 0x3c, + 0xa5, 0x69, 0xee, 0x72, 0xe1, 0x87, 0x76, 0x17, 0x44, 0x71, 0x2d, 0x95, 0xbe, 0x2c, 0xce, 0xaf, + 0xa5, 0xd2, 0x57, 0xc4, 0x85, 0xb5, 0x54, 0xfa, 0xaa, 0xf8, 0xda, 0x5a, 0x2a, 0xbd, 0x24, 0x5e, + 0x5b, 0x4b, 0xa5, 0x25, 0xf1, 0x86, 0xf4, 0xb3, 0xab, 0x90, 0xf3, 0x90, 0x25, 0x83, 0x7c, 0x0f, + 0xc2, 0x90, 0x6f, 0x71, 0x18, 0xe4, 0xe3, 0x58, 0x94, 0x63, 0xbe, 0x07, 0x61, 0xcc, 0xb7, 0x38, + 0x0c, 0xf3, 0x05, 0x3c, 0x04, 0xf4, 0x35, 0x86, 0x81, 0xbe, 0xbb, 0x63, 0x80, 0x3e, 0x5f, 0x54, + 0x3f, 0xea, 0x5b, 0x1d, 0x44, 0x7d, 0x6f, 0x8c, 0x46, 0x7d, 0xbe, 0xa8, 0x10, 0xec, 0xfb, 0xb0, + 0x0f, 0xf6, 0x5d, 0x1f, 0x01, 0xfb, 0x7c, 0x7e, 0x0f, 0xf7, 0xad, 0x47, 0xe2, 0xbe, 0x5b, 0x67, + 0xe1, 0x3e, 0x5f, 0x4e, 0x0f, 0xf0, 0xab, 0x46, 0x01, 0xbf, 0x9b, 0x67, 0x00, 0x3f, 0x5f, 0x54, + 0x18, 0xf9, 0xad, 0x47, 0x22, 0xbf, 0x5b, 0x67, 0x21, 0xbf, 0xa0, 0x58, 0x61, 0xe8, 0xf7, 0x6e, + 0x0f, 0xf4, 0x5b, 0x1a, 0x0a, 0xfd, 0x7c, 0x6e, 0x86, 0xfd, 0x3e, 0xea, 0xc7, 0x7e, 0xd7, 0x47, + 0x60, 0xbf, 0x40, 0xb1, 0x1c, 0xfc, 0x55, 0xa3, 0xc0, 0xdf, 0xcd, 0x33, 0xc0, 0x5f, 0xa0, 0x8b, + 0x10, 0xfa, 0xdb, 0x8a, 0x46, 0x7f, 0xb7, 0xcf, 0x44, 0x7f, 0xbe, 0xb4, 0x5e, 0xf8, 0x57, 0x8d, + 0x82, 0x7f, 0x37, 0xcf, 0x80, 0x7f, 0x7d, 0x25, 0x63, 0xf8, 0x4f, 0x1d, 0x89, 0xff, 0xde, 0x1a, + 0x13, 0xff, 0xf9, 0xa2, 0xa3, 0x00, 0xa0, 0x3e, 0x1a, 0x00, 0x16, 0xc7, 0x05, 0x80, 0xfe, 0x4b, + 0x22, 0x11, 0xa0, 0x3a, 0x12, 0x01, 0xbe, 0x35, 0x26, 0x02, 0xec, 0xab, 0x48, 0x2f, 0x04, 0xdc, + 0x8a, 0x86, 0x80, 0xb7, 0xcf, 0x84, 0x80, 0x41, 0x2b, 0xf6, 0x60, 0xc0, 0xe5, 0x10, 0x06, 0x7c, + 0x7d, 0x08, 0x06, 0xf4, 0x59, 0x09, 0x08, 0xfc, 0xee, 0x00, 0x08, 0x94, 0x46, 0x81, 0x40, 0x9f, + 0xd7, 0x47, 0x81, 0xd5, 0x28, 0x14, 0x78, 0xf3, 0x0c, 0x14, 0x18, 0xf4, 0x9b, 0x10, 0x0c, 0x7c, + 0x3a, 0x04, 0x06, 0xde, 0x39, 0x1b, 0x06, 0xfa, 0xf2, 0xfa, 0x70, 0xa0, 0x3a, 0x12, 0x07, 0xbe, + 0x35, 0x26, 0x0e, 0x0c, 0x5a, 0x30, 0x02, 0x08, 0xbe, 0xdf, 0x0b, 0x04, 0xaf, 0x0d, 0x07, 0x82, + 0xbe, 0x18, 0x8e, 0x04, 0xd7, 0x23, 0x91, 0xe0, 0xad, 0xb3, 0x90, 0x60, 0x30, 0x9b, 0x85, 0xa1, + 0xe0, 0x56, 0x34, 0x14, 0xbc, 0x7d, 0x26, 0x14, 0x0c, 0x3a, 0x52, 0x0f, 0x16, 0x5c, 0x8f, 0xc4, + 0x82, 0xb7, 0xce, 0xc2, 0x82, 0x7d, 0x53, 0x2d, 0x07, 0x83, 0xcf, 0x87, 0x82, 0xc1, 0x7b, 0xe3, + 0x80, 0x41, 0x5f, 0xe8, 0x00, 0x1a, 0xfc, 0x74, 0x38, 0x1a, 0xfc, 0x85, 0x73, 0x5c, 0x8f, 0x1b, + 0x09, 0x07, 0xbf, 0x3b, 0x00, 0x07, 0xa5, 0x51, 0x70, 0x30, 0x18, 0x19, 0x1e, 0x1e, 0xac, 0x44, + 0xa0, 0xb7, 0x37, 0x46, 0xa3, 0xb7, 0x60, 0x21, 0x0f, 0xe0, 0xdb, 0x87, 0x7d, 0xf0, 0xed, 0xfa, + 0x99, 0xde, 0xa0, 0x21, 0xfc, 0x56, 0x1a, 0xc4, 0x6f, 0x37, 0x46, 0xe2, 0x37, 0x5f, 0x42, 0x00, + 0xe0, 0xd6, 0x23, 0x01, 0xdc, 0xad, 0xb3, 0x00, 0x5c, 0xd0, 0x15, 0xc2, 0x08, 0x6e, 0x2b, 0x1a, + 0xc1, 0xdd, 0x3e, 0x13, 0xc1, 0xf5, 0x2d, 0x5b, 0x1e, 0x84, 0xab, 0x46, 0x41, 0xb8, 0x9b, 0x67, + 0x40, 0xb8, 0xf0, 0xb2, 0xe5, 0x63, 0xb8, 0xc6, 0x30, 0x0c, 0x77, 0x77, 0x0c, 0x0c, 0x17, 0x18, + 0x73, 0x7d, 0x20, 0xee, 0xe3, 0x7e, 0x10, 0x27, 0x8d, 0x02, 0x71, 0x41, 0x27, 0xf2, 0x50, 0xdc, + 0x56, 0x34, 0x8a, 0xbb, 0x7d, 0x26, 0x8a, 0x0b, 0x8f, 0xeb, 0x10, 0x8c, 0xfb, 0xb8, 0x1f, 0xc6, + 0x49, 0xa3, 0x60, 0x5c, 0x50, 0x1e, 0x0f, 0xc7, 0x55, 0xa3, 0x70, 0xdc, 0xcd, 0x33, 0x70, 0x5c, + 0x68, 0xba, 0x0f, 0x80, 0xdc, 0x5f, 0x1c, 0x1f, 0xc8, 0xbd, 0xff, 0xaa, 0xde, 0x75, 0x67, 0x23, + 0xb9, 0x8f, 0xfb, 0x91, 0x9c, 0x34, 0x0a, 0xc9, 0x05, 0xfa, 0xf0, 0xa0, 0x5c, 0xeb, 0x4c, 0x28, + 0x77, 0xff, 0x1c, 0x50, 0xce, 0x97, 0x3f, 0x0c, 0xcb, 0xb5, 0xce, 0xc4, 0x72, 0xf7, 0xcf, 0x81, + 0xe5, 0x82, 0xd7, 0x0d, 0x01, 0x73, 0x1f, 0xf7, 0x83, 0x39, 0x69, 0x14, 0x98, 0x0b, 0xb4, 0x73, + 0x6e, 0x34, 0xf7, 0x9a, 0xf8, 0x7a, 0x0f, 0xa6, 0xfb, 0x6b, 0x19, 0x98, 0xaa, 0x46, 0x9c, 0x09, + 0x0a, 0xaf, 0x72, 0x26, 0x88, 0xbe, 0x03, 0x57, 0xfd, 0x07, 0xea, 0xcf, 0xa5, 0xf0, 0x90, 0x38, + 0xad, 0x69, 0x69, 0x87, 0x74, 0xa9, 0x4c, 0xcb, 0xf3, 0x7e, 0x96, 0x47, 0xb6, 0xd5, 0x62, 0xa1, + 0x71, 0xd4, 0x4b, 0x06, 0xad, 0x92, 0x31, 0x4c, 0x6d, 0xc2, 0xb3, 0x6f, 0x1c, 0x1d, 0xbc, 0x13, + 0x93, 0xb3, 0xbe, 0xc2, 0x25, 0x0e, 0xe8, 0x5d, 0xc8, 0x75, 0x1c, 0x6c, 0x2b, 0x6d, 0xdb, 0xb0, + 0x6c, 0xc3, 0x65, 0xe1, 0x68, 0x42, 0x49, 0xfc, 0xea, 0x64, 0x69, 0x66, 0xc7, 0xc1, 0xf6, 0x36, + 0xa7, 0xcb, 0x33, 0x9d, 0xd0, 0x93, 0xf7, 0xe9, 0xbf, 0xc9, 0xf1, 0x3f, 0xfd, 0xf7, 0x14, 0x44, + 0xea, 0xa1, 0x13, 0x5e, 0x46, 0xd9, 0x3d, 0x6d, 0xd1, 0x2b, 0xbe, 0xaa, 0x87, 0x56, 0x4a, 0x7a, + 0x5f, 0x5b, 0xc1, 0xee, 0x25, 0xa2, 0xc7, 0x90, 0xb7, 0xad, 0x0e, 0xbd, 0x8e, 0xa9, 0x6d, 0x35, + 0x0d, 0xad, 0x4b, 0xed, 0x9b, 0x7c, 0xf4, 0x79, 0x33, 0xcb, 0xb8, 0x4d, 0xf3, 0xc9, 0x39, 0x3b, + 0xfc, 0x88, 0xea, 0x40, 0xaf, 0x62, 0xf2, 0xa4, 0xa0, 0x81, 0xcb, 0xef, 0x47, 0x7e, 0x82, 0xe2, + 0xb9, 0x6a, 0xb8, 0x5c, 0x2e, 0xbc, 0xf4, 0x7f, 0xa3, 0x47, 0x30, 0x43, 0xaf, 0x05, 0x27, 0x6d, + 0x6e, 0x75, 0x5c, 0x6e, 0xde, 0x5c, 0x29, 0xb2, 0x0f, 0x44, 0x16, 0xbd, 0x0f, 0x44, 0x16, 0x57, + 0xf9, 0x07, 0x22, 0xd9, 0x59, 0xf5, 0x8f, 0xfe, 0xdd, 0x92, 0x20, 0x67, 0x3d, 0xcf, 0x29, 0xab, + 0xe3, 0xa2, 0xfb, 0x70, 0xb1, 0xa5, 0x1e, 0xd3, 0xdb, 0xc5, 0x15, 0xcf, 0xfe, 0xa2, 0xf7, 0x29, + 0xb2, 0xaf, 0x12, 0xa2, 0x96, 0x7a, 0x4c, 0xbf, 0x96, 0xc8, 0x92, 0xe8, 0xa7, 0x8e, 0xae, 0xc3, + 0x0c, 0x8f, 0x15, 0x62, 0x5f, 0x42, 0x2b, 0xd0, 0x9c, 0xfc, 0xb3, 0x38, 0xec, 0x63, 0x68, 0x37, + 0x21, 0xaf, 0x1b, 0x8e, 0x6b, 0x98, 0x9a, 0xcb, 0x2f, 0x2e, 0x67, 0x57, 0x7f, 0xe7, 0x3c, 0x2a, + 0xbb, 0x9d, 0xbc, 0x01, 0xb3, 0x5a, 0xd3, 0xf0, 0xad, 0x5a, 0x66, 0x67, 0xcc, 0x0e, 0x1d, 0xa7, + 0x65, 0x9a, 0xb7, 0xdf, 0x81, 0xa6, 0xa0, 0xf5, 0x92, 0x51, 0x19, 0x0a, 0xfb, 0xaa, 0x8b, 0x5f, + 0xaa, 0x5d, 0xc5, 0x0b, 0xc3, 0xcd, 0xd2, 0xab, 0x07, 0xae, 0x9e, 0x9e, 0x2c, 0xe5, 0x1e, 0xb3, + 0xa4, 0x81, 0x68, 0xdc, 0xdc, 0x7e, 0x28, 0x41, 0x47, 0xb7, 0xa1, 0xa0, 0x3a, 0x5d, 0x53, 0xa3, + 0x3d, 0x0a, 0x9b, 0x4e, 0xc7, 0xe1, 0xe1, 0x68, 0x79, 0x4a, 0x2e, 0x7b, 0x54, 0xf4, 0x21, 0x2c, + 0xf0, 0xef, 0x93, 0xbc, 0x54, 0x6d, 0x5d, 0xa1, 0xbd, 0x30, 0x18, 0xee, 0x22, 0xe5, 0xb9, 0xcc, + 0xbe, 0x47, 0x42, 0x32, 0x90, 0xae, 0x17, 0xcc, 0x86, 0xcf, 0x60, 0x96, 0x06, 0xa5, 0x61, 0x9d, + 0x2c, 0x47, 0x4d, 0x6c, 0x62, 0xc7, 0x19, 0x71, 0xca, 0x50, 0x62, 0x79, 0xeb, 0x5e, 0x56, 0x36, + 0xc1, 0xc8, 0xe2, 0x6e, 0x1f, 0xdd, 0xbf, 0x2f, 0x1d, 0xc4, 0xec, 0x5a, 0x2a, 0x3d, 0x23, 0xe6, + 0xd6, 0x52, 0xe9, 0xbc, 0x58, 0x90, 0xfe, 0x8f, 0x00, 0x97, 0xa2, 0x85, 0xa0, 0x3a, 0xcc, 0xf5, + 0x5c, 0x09, 0xc4, 0xa2, 0xe5, 0xce, 0x33, 0x5f, 0xcd, 0x86, 0x2f, 0x06, 0xa2, 0x6f, 0x21, 0xca, + 0x89, 0x10, 0xaa, 0x38, 0xae, 0x6d, 0x68, 0xde, 0x35, 0x5b, 0x97, 0x07, 0xd8, 0xea, 0x34, 0x99, + 0x96, 0x48, 0x3d, 0x1e, 0x28, 0x51, 0xf2, 0x3c, 0x25, 0x52, 0x8f, 0x7b, 0x45, 0x4b, 0x3f, 0x48, + 0x42, 0x81, 0xac, 0xbc, 0x8e, 0x63, 0x58, 0x66, 0xd5, 0x77, 0xd0, 0xf7, 0x27, 0x28, 0x81, 0xc6, + 0x9a, 0xfa, 0xcf, 0x68, 0x89, 0xc6, 0xf4, 0x12, 0x84, 0xe3, 0x7f, 0xef, 0x29, 0x29, 0x03, 0x23, + 0xd1, 0xa8, 0xc5, 0x15, 0x98, 0x72, 0xac, 0x8e, 0xad, 0x79, 0x5f, 0x21, 0xb9, 0x3b, 0x64, 0xa9, + 0x0f, 0xbd, 0xb0, 0x58, 0xa7, 0x0c, 0x32, 0x67, 0x44, 0x9f, 0x42, 0x81, 0xfd, 0xa2, 0xb1, 0x84, + 0x34, 0x96, 0x8f, 0x05, 0x64, 0xde, 0x1f, 0x5b, 0xd6, 0x06, 0x67, 0x94, 0xf3, 0x4e, 0xcf, 0x33, + 0xfa, 0x18, 0x5e, 0x33, 0x2d, 0xa5, 0x85, 0x5b, 0x16, 0x5b, 0xe2, 0xc9, 0x2c, 0xa3, 0x2b, 0xaa, + 0xab, 0xf0, 0x42, 0x33, 0x8f, 0xef, 0x79, 0xd3, 0xda, 0xa4, 0x59, 0x64, 0x9e, 0x63, 0xc5, 0x65, + 0x72, 0xa5, 0x22, 0x4c, 0xb1, 0x5f, 0x28, 0x03, 0x93, 0x4f, 0x1a, 0xd5, 0x8a, 0x2c, 0x4e, 0xa0, + 0x19, 0x48, 0x3f, 0x92, 0x9f, 0x6c, 0x2a, 0xf5, 0xa7, 0x1b, 0xa2, 0x80, 0xb2, 0x30, 0x2d, 0x3f, + 0x79, 0xd2, 0x50, 0xd6, 0x9f, 0x89, 0x09, 0xe9, 0x36, 0xe4, 0x7b, 0x4b, 0x84, 0x00, 0xa6, 0xe4, + 0xca, 0xe6, 0x13, 0xfa, 0xe9, 0x8d, 0x0c, 0x4c, 0x6e, 0x3c, 0x29, 0xaf, 0x6c, 0x88, 0x82, 0xf4, + 0xc7, 0x02, 0xcc, 0x94, 0xd8, 0xb7, 0x64, 0x98, 0x5f, 0xcf, 0x87, 0x7d, 0xfe, 0x37, 0x57, 0xa2, + 0xb7, 0x10, 0x86, 0xf9, 0xdd, 0xa4, 0xf9, 0xec, 0xe5, 0xc5, 0x9c, 0x2d, 0x0d, 0x07, 0x8e, 0x74, + 0x8f, 0xd5, 0x73, 0xf4, 0xf5, 0xd8, 0x50, 0x1d, 0x44, 0xd5, 0xd3, 0xad, 0xc2, 0x4b, 0x32, 0xdc, + 0xdd, 0xb7, 0xaf, 0x19, 0xbc, 0xb9, 0x48, 0xed, 0x25, 0x7f, 0x90, 0xfa, 0xd1, 0x17, 0x4b, 0x13, + 0xd2, 0x9f, 0xa4, 0x20, 0x57, 0x0a, 0x7f, 0x37, 0x07, 0xd5, 0xfa, 0x2a, 0x7b, 0x3b, 0xd2, 0x2c, + 0x09, 0x71, 0x14, 0x47, 0x7c, 0x91, 0x2c, 0x13, 0x7c, 0xa4, 0x87, 0xd5, 0xfd, 0xda, 0x08, 0xd7, + 0xa5, 0x70, 0xe5, 0x03, 0xc6, 0x85, 0x7f, 0x9d, 0xf4, 0xed, 0x95, 0x22, 0x4c, 0xb2, 0x98, 0x6a, + 0x61, 0xe0, 0xba, 0x17, 0xba, 0x52, 0x11, 0xb8, 0x46, 0xd2, 0x65, 0x96, 0x8d, 0xd8, 0x37, 0x8d, + 0x57, 0xf2, 0x79, 0x0a, 0xe6, 0xc1, 0xf3, 0x7f, 0xeb, 0xb7, 0xc3, 0x2e, 0x37, 0xfe, 0x7f, 0xe8, + 0x61, 0x4c, 0xde, 0x87, 0x7e, 0x05, 0x0a, 0x9a, 0xd5, 0x6c, 0x32, 0x2b, 0x9f, 0xad, 0x6c, 0x83, + 0xd7, 0x9d, 0xd1, 0x22, 0xf0, 0xcf, 0x3b, 0x17, 0xfd, 0xcf, 0x3c, 0x17, 0x65, 0xfe, 0x99, 0xe7, + 0x50, 0xf8, 0x57, 0xde, 0x17, 0xc6, 0x16, 0xc4, 0xbe, 0x48, 0xb4, 0xe9, 0x57, 0x89, 0x44, 0x63, + 0xf1, 0x7b, 0xbc, 0xe7, 0xfd, 0x4c, 0xe0, 0x7e, 0xc0, 0x1b, 0x96, 0x75, 0xd8, 0xf1, 0xbd, 0x2b, + 0x17, 0xc2, 0x57, 0x15, 0x07, 0x41, 0x32, 0x34, 0x66, 0x34, 0xca, 0x94, 0x4a, 0x7c, 0x3d, 0x53, + 0xea, 0x3a, 0xcc, 0xb4, 0x6d, 0xbc, 0x87, 0x5d, 0xed, 0x40, 0x31, 0x3b, 0x2d, 0x1e, 0x30, 0x9b, + 0xf5, 0x68, 0x5b, 0x9d, 0x16, 0xba, 0x0b, 0xa2, 0x9f, 0x85, 0xef, 0xbc, 0x78, 0xf7, 0x64, 0x7a, + 0x74, 0xbe, 0x4f, 0x23, 0xfd, 0x37, 0x01, 0xe6, 0x7a, 0xea, 0xc4, 0xc7, 0xd4, 0x1a, 0x64, 0x75, + 0xdf, 0x78, 0x75, 0xe6, 0x85, 0x73, 0x86, 0x4f, 0x85, 0x99, 0x91, 0x02, 0x97, 0xbc, 0xd7, 0xd2, + 0x0f, 0xdb, 0x04, 0x62, 0x13, 0xe7, 0x14, 0x7b, 0x31, 0x90, 0xb3, 0x1a, 0x7a, 0x81, 0x3f, 0xc8, + 0x92, 0x63, 0x0d, 0x32, 0xe9, 0x7f, 0x08, 0x20, 0xd2, 0x17, 0x3c, 0xc2, 0x58, 0x8f, 0x65, 0xca, + 0xf4, 0xe2, 0x14, 0x13, 0xe3, 0x87, 0xc4, 0xf6, 0x7c, 0x8c, 0x2b, 0xd9, 0xf7, 0x31, 0xae, 0xa8, + 0xf9, 0x33, 0xf5, 0x35, 0xe7, 0x4f, 0xe9, 0x0b, 0x01, 0xf2, 0x7e, 0xb5, 0xd9, 0x57, 0x78, 0x47, + 0x5c, 0xb3, 0xfd, 0x6a, 0x5f, 0x9a, 0xf5, 0xae, 0x03, 0x1b, 0xeb, 0xc3, 0xc0, 0xe1, 0xeb, 0xc0, + 0xd8, 0x17, 0x52, 0xff, 0x86, 0xd7, 0x1d, 0x49, 0x11, 0xcb, 0xc1, 0x3d, 0x4c, 0xaf, 0x10, 0x72, + 0xfc, 0x4d, 0x38, 0x12, 0x3f, 0x0a, 0x29, 0x90, 0xf6, 0x28, 0xa2, 0xa5, 0xb1, 0xe6, 0x77, 0x4f, + 0x4b, 0xac, 0x03, 0xfe, 0x7e, 0xb8, 0x25, 0xd8, 0x3d, 0x1e, 0x0f, 0x21, 0x79, 0xa4, 0x36, 0x47, + 0xb9, 0xcb, 0xf6, 0xb4, 0x9c, 0x4c, 0x72, 0xa3, 0x47, 0x3d, 0xd7, 0x57, 0x25, 0x86, 0xef, 0xca, + 0x0e, 0xaa, 0xb4, 0xe7, 0x9a, 0xab, 0xf7, 0x7a, 0x07, 0xd0, 0xc8, 0xd7, 0x87, 0x47, 0xd2, 0x07, + 0xa9, 0x2f, 0xbf, 0x58, 0x12, 0xa4, 0x8f, 0x00, 0x11, 0x5b, 0xc7, 0x7d, 0xda, 0xb1, 0xec, 0xe0, + 0x2a, 0xb0, 0xfe, 0x78, 0xc4, 0xc9, 0xe8, 0x78, 0x44, 0xe9, 0x22, 0xcc, 0xf5, 0x70, 0xb3, 0x19, + 0x48, 0x7a, 0x0f, 0xae, 0x3c, 0xb6, 0x1c, 0xc7, 0x68, 0xd7, 0x3b, 0xbb, 0x6c, 0xa8, 0x93, 0xf5, + 0xca, 0x9f, 0x73, 0xd3, 0x6d, 0xba, 0xe5, 0x67, 0xb2, 0xb9, 0x29, 0x23, 0xfb, 0xcf, 0xd2, 0xef, + 0x0a, 0x70, 0x79, 0x90, 0x93, 0x69, 0x39, 0xea, 0x86, 0x84, 0x69, 0xcd, 0x0a, 0x6e, 0xaa, 0x3d, + 0xbb, 0xb7, 0x7a, 0xd9, 0x09, 0xaa, 0xe1, 0xef, 0x54, 0x5a, 0x2a, 0x9d, 0x93, 0xf8, 0xc5, 0x29, + 0x79, 0x4e, 0xde, 0x64, 0xd4, 0x60, 0x7a, 0x4a, 0x8d, 0x37, 0x3d, 0xfd, 0x4f, 0x01, 0x66, 0x1b, + 0xd8, 0x54, 0x4d, 0x97, 0xcc, 0xfb, 0x9d, 0x16, 0xbb, 0x55, 0xa2, 0x00, 0x49, 0x5b, 0xe9, 0xd0, + 0xa2, 0x0b, 0x72, 0xc2, 0xde, 0x41, 0x37, 0x20, 0x47, 0xd7, 0x96, 0x90, 0xad, 0x26, 0xdc, 0x49, + 0xc9, 0x34, 0xba, 0x46, 0xf6, 0x0c, 0xb1, 0xd7, 0x01, 0x68, 0x26, 0x86, 0x2e, 0x93, 0x34, 0x47, + 0x86, 0x50, 0x7c, 0x6c, 0x49, 0xa3, 0x15, 0x03, 0x21, 0x2c, 0x20, 0x29, 0x47, 0xa9, 0xbe, 0x94, + 0x25, 0xc8, 0xb2, 0x6c, 0x4c, 0xcc, 0x24, 0xcd, 0x03, 0x94, 0xc4, 0xe4, 0x3c, 0x82, 0x0b, 0xce, + 0x8b, 0xa6, 0xd2, 0xb6, 0x74, 0x47, 0xd1, 0xda, 0x1d, 0x1e, 0xe9, 0xc1, 0x3e, 0xec, 0x2d, 0x94, + 0x2e, 0x9e, 0x9e, 0x2c, 0xcd, 0xd6, 0x9f, 0x6e, 0x6c, 0x5b, 0xba, 0x53, 0xde, 0xde, 0x61, 0x71, + 0x1e, 0x8e, 0x3c, 0xeb, 0xbc, 0x68, 0x52, 0x52, 0xbb, 0xc3, 0x49, 0xd2, 0x5f, 0x4a, 0x02, 0xa2, + 0x37, 0x23, 0x95, 0xe8, 0xd5, 0x42, 0x5e, 0x73, 0x5b, 0xb0, 0xa8, 0x05, 0xaa, 0x50, 0x1c, 0xc3, + 0x24, 0xf6, 0xbd, 0xea, 0xb8, 0x5e, 0xb9, 0xf9, 0xb8, 0x89, 0xbc, 0xd0, 0xb5, 0x5f, 0x93, 0xbc, + 0x1d, 0xaf, 0x86, 0x24, 0xd6, 0x89, 0xc0, 0x0d, 0xd5, 0xf1, 0x5f, 0x78, 0x17, 0x32, 0x2e, 0xe5, + 0xf3, 0xee, 0x9d, 0x4a, 0x95, 0x66, 0x4e, 0x4f, 0x96, 0xd2, 0x4c, 0x58, 0x6d, 0x55, 0x4e, 0xb3, + 0xe4, 0x9a, 0x8e, 0x96, 0x21, 0x6b, 0x98, 0x8e, 0xab, 0x92, 0x22, 0xf1, 0xcd, 0x9c, 0x1c, 0xbb, + 0x18, 0xa0, 0xc6, 0xc9, 0xb5, 0x55, 0x19, 0xbc, 0x2c, 0x34, 0xfe, 0x36, 0xef, 0x33, 0xb0, 0xd3, + 0x19, 0x1a, 0x2c, 0x2e, 0xe7, 0x3c, 0x2a, 0x3b, 0x73, 0x91, 0xfc, 0x33, 0x1c, 0xac, 0x2b, 0xa4, + 0xe5, 0x59, 0xac, 0x4d, 0xd6, 0x27, 0xca, 0x3b, 0xe8, 0x39, 0x5c, 0xe4, 0xbb, 0x07, 0xde, 0x76, + 0x43, 0x1b, 0xdb, 0x86, 0xe5, 0x5d, 0x80, 0x30, 0xd6, 0x0e, 0xc6, 0x1c, 0x93, 0xc0, 0x6b, 0xbe, + 0x4d, 0xf9, 0xa5, 0x7f, 0x2e, 0xc0, 0x5c, 0x4f, 0x3b, 0x70, 0xb3, 0xe0, 0xa3, 0xde, 0xe9, 0x2e, + 0x6c, 0x1b, 0x53, 0xba, 0x43, 0x8f, 0xbb, 0x35, 0x4b, 0xe7, 0xf3, 0x44, 0xcf, 0xb4, 0x87, 0x16, + 0x21, 0xbb, 0x6f, 0xab, 0xa6, 0x57, 0xa1, 0x04, 0xad, 0x50, 0x86, 0x93, 0xe4, 0x1d, 0xb4, 0x05, + 0x22, 0x41, 0xab, 0x87, 0x4d, 0xac, 0xe8, 0xbc, 0xa0, 0x7c, 0x46, 0x1a, 0xab, 0x26, 0x05, 0xce, + 0xec, 0x25, 0x49, 0x0d, 0x28, 0xac, 0x59, 0x86, 0xb9, 0x65, 0xe9, 0x7e, 0x0c, 0xd0, 0x0a, 0xe4, + 0x77, 0x0d, 0x53, 0xb5, 0xbb, 0x8a, 0x17, 0xc6, 0x23, 0x9c, 0x15, 0xc6, 0x23, 0xe7, 0x18, 0x07, + 0x7f, 0x94, 0x7e, 0x2a, 0x80, 0x18, 0x88, 0xe5, 0x8a, 0x79, 0x13, 0x40, 0x6b, 0x76, 0x1c, 0x17, + 0xdb, 0xde, 0x74, 0x37, 0xc3, 0xc2, 0x85, 0xcb, 0x8c, 0x5a, 0x5b, 0x95, 0x33, 0x3c, 0x43, 0x4d, + 0x47, 0x37, 0x7a, 0x2f, 0x35, 0x9b, 0x2c, 0xc1, 0xe9, 0xc0, 0x55, 0x66, 0x64, 0xfe, 0x74, 0x5c, + 0xcb, 0xf6, 0x7b, 0x15, 0x9f, 0x3f, 0xbd, 0xeb, 0x1e, 0xe9, 0xb5, 0x46, 0x98, 0xde, 0x08, 0x90, + 0x27, 0xc6, 0xfc, 0x11, 0xf6, 0xab, 0x94, 0x3a, 0xbb, 0x4a, 0x8c, 0xc3, 0xab, 0xd2, 0xef, 0x08, + 0x50, 0x28, 0xb3, 0x69, 0xcd, 0x9f, 0x2a, 0x47, 0x98, 0x06, 0xab, 0x90, 0x76, 0x8f, 0x4d, 0xa5, + 0x85, 0xfd, 0x2f, 0x14, 0x9e, 0xe3, 0x3e, 0xe6, 0x69, 0x97, 0x3d, 0xd2, 0x8f, 0x5e, 0xbf, 0x42, + 0x2b, 0xfb, 0x4c, 0xdc, 0x2a, 0xff, 0x57, 0x02, 0x64, 0xea, 0x9a, 0x6a, 0xfa, 0x61, 0x96, 0x66, + 0xa7, 0xc5, 0x76, 0xc4, 0xf7, 0x54, 0x0d, 0x2b, 0x0e, 0xc6, 0x87, 0x0e, 0xbf, 0xc6, 0x65, 0xd6, + 0xec, 0xb4, 0x6a, 0x5e, 0x4a, 0x9d, 0x24, 0xa0, 0x37, 0x01, 0xf9, 0xf9, 0x4d, 0xb5, 0xc9, 0xb3, + 0xb3, 0x99, 0x54, 0xf4, 0xb2, 0x9b, 0x6a, 0x93, 0xe5, 0x1e, 0x94, 0xee, 0xe2, 0xb6, 0x37, 0xad, + 0xf6, 0x4a, 0x27, 0x09, 0x83, 0xd2, 0x69, 0xf6, 0xd4, 0xa0, 0x74, 0x42, 0x67, 0xf5, 0xb9, 0x57, + 0x27, 0xcb, 0xe1, 0x00, 0x0e, 0x40, 0x79, 0x80, 0xd0, 0xa7, 0x34, 0x27, 0xe8, 0x07, 0x36, 0x2b, + 0x2b, 0xab, 0xca, 0xce, 0x56, 0xf9, 0xc9, 0xe6, 0x66, 0xad, 0xd1, 0xa8, 0xac, 0x8a, 0x02, 0x12, + 0x61, 0xa6, 0xe7, 0x43, 0x9c, 0x89, 0x85, 0xd4, 0xe7, 0x3f, 0x59, 0x9c, 0xb8, 0xf7, 0x16, 0xe4, + 0x7a, 0xb6, 0x55, 0x51, 0x01, 0xb2, 0x1b, 0x95, 0x95, 0x7a, 0xa5, 0xfa, 0x64, 0x63, 0x95, 0x6e, + 0x43, 0x64, 0x61, 0x7a, 0xab, 0xb2, 0x22, 0x57, 0xea, 0x0d, 0x51, 0xb8, 0xf7, 0x67, 0x00, 0x82, + 0x4f, 0x00, 0x93, 0x57, 0xaf, 0x57, 0x3e, 0x51, 0x9e, 0xad, 0x6c, 0xec, 0x54, 0xea, 0xe2, 0x04, + 0x42, 0x90, 0x2f, 0xad, 0x34, 0xca, 0x55, 0x45, 0xae, 0xd4, 0xb7, 0x9f, 0x6c, 0xd5, 0x2b, 0xa2, + 0xc0, 0x5f, 0xb3, 0x0a, 0x33, 0xe1, 0x4b, 0x36, 0xd1, 0x1c, 0x14, 0xca, 0xd5, 0x4a, 0x79, 0x5d, + 0x79, 0x56, 0x5b, 0x51, 0x9e, 0xee, 0x54, 0x76, 0x2a, 0xe2, 0x04, 0xad, 0x09, 0x25, 0x3e, 0xda, + 0xd9, 0xd8, 0x10, 0x05, 0x52, 0x14, 0xf6, 0x4c, 0xbf, 0xf1, 0x29, 0x26, 0xee, 0x6d, 0x42, 0x36, + 0xf4, 0xf1, 0x0f, 0xf2, 0xba, 0xed, 0x9d, 0x7a, 0x55, 0x69, 0xd4, 0x36, 0x2b, 0xf5, 0xc6, 0xca, + 0xe6, 0x36, 0x93, 0x41, 0x69, 0x2b, 0xa5, 0x27, 0x72, 0x43, 0x14, 0xfc, 0xe7, 0xc6, 0x93, 0x9d, + 0x72, 0xd5, 0xab, 0xb5, 0x94, 0x4a, 0x27, 0xc5, 0xe4, 0xbd, 0x63, 0xb8, 0x3c, 0xe4, 0xbe, 0x49, + 0x52, 0xe9, 0x1d, 0x93, 0x7e, 0x08, 0x41, 0x9c, 0x40, 0x39, 0xc8, 0x90, 0x91, 0x47, 0xaf, 0x70, + 0x11, 0x05, 0x94, 0x86, 0xd4, 0x81, 0xeb, 0xb6, 0xc5, 0x04, 0x9a, 0x82, 0x84, 0xf3, 0x50, 0x4c, + 0x92, 0xff, 0xfb, 0x8e, 0x98, 0x42, 0x19, 0x98, 0x54, 0x3f, 0xeb, 0xd8, 0x58, 0x9c, 0x44, 0x33, + 0x90, 0xee, 0x38, 0xd8, 0xde, 0x33, 0x9a, 0x58, 0x9c, 0x26, 0x2c, 0x66, 0xa7, 0xd9, 0x14, 0xd3, + 0x52, 0x2a, 0x3d, 0x25, 0x4e, 0xdd, 0xbb, 0x0e, 0xa1, 0x2b, 0xbe, 0x10, 0xc0, 0xd4, 0x86, 0xea, + 0x62, 0xc7, 0x15, 0x27, 0xd0, 0x34, 0x24, 0x57, 0x9a, 0x4d, 0x51, 0x78, 0xf0, 0xdf, 0xa7, 0x20, + 0xed, 0xf5, 0x02, 0xb4, 0x01, 0x93, 0x74, 0x9f, 0x02, 0x2d, 0x0d, 0xdf, 0xc1, 0xa0, 0xd3, 0xd8, + 0xc2, 0xb5, 0xb3, 0xb6, 0x38, 0xa4, 0x09, 0xf4, 0x67, 0x21, 0x1b, 0x42, 0x76, 0x68, 0xe8, 0xb1, + 0x5c, 0x0f, 0x9a, 0x5d, 0xb8, 0x75, 0x56, 0x36, 0x5f, 0xfe, 0x73, 0xc8, 0xf8, 0x46, 0x21, 0xba, + 0x31, 0xca, 0x64, 0xf4, 0x64, 0x8f, 0xb6, 0x2b, 0xc9, 0xac, 0x23, 0x4d, 0xbc, 0x2d, 0x20, 0x1b, + 0xd0, 0xa0, 0xfd, 0x86, 0xa2, 0xfc, 0xf4, 0x87, 0x1a, 0x88, 0x0b, 0xf7, 0xc6, 0xca, 0x1d, 0xbc, + 0x93, 0x28, 0x2b, 0x30, 0x42, 0xa3, 0x95, 0x35, 0x60, 0xe2, 0x46, 0x2b, 0x2b, 0xc2, 0x96, 0xa5, + 0x8d, 0x11, 0x5a, 0x4f, 0x23, 0xe5, 0x0f, 0xda, 0x3d, 0x91, 0xf2, 0x23, 0x96, 0x65, 0x69, 0x02, + 0x3d, 0x85, 0x14, 0x59, 0x93, 0x50, 0x14, 0x3c, 0xec, 0x5b, 0x03, 0x17, 0x6e, 0x8c, 0xcc, 0xe3, + 0x8b, 0xdc, 0x87, 0xfc, 0x63, 0x4c, 0x0f, 0x17, 0xd8, 0x7d, 0x9d, 0x0e, 0xba, 0x13, 0xed, 0x3c, + 0x19, 0xca, 0xe2, 0xbd, 0xe2, 0xee, 0x18, 0x39, 0xfd, 0x17, 0xb5, 0x61, 0x96, 0x7d, 0xe9, 0x24, + 0xfc, 0xae, 0x28, 0x8f, 0x8d, 0x81, 0x5c, 0xde, 0xeb, 0xde, 0x1c, 0x2f, 0xb3, 0xf7, 0xc6, 0xd2, + 0xdd, 0x2f, 0xff, 0xfd, 0xe2, 0xc4, 0x97, 0xa7, 0x8b, 0xc2, 0x4f, 0x4f, 0x17, 0x85, 0x3f, 0x3c, + 0x5d, 0x14, 0xfe, 0xe8, 0x74, 0x51, 0xf8, 0xe1, 0xcf, 0x17, 0x27, 0x7e, 0xfa, 0xf3, 0xc5, 0x89, + 0x3f, 0xfc, 0xf9, 0xe2, 0xc4, 0xa7, 0xd3, 0x5c, 0xcc, 0xee, 0x14, 0x5d, 0x8b, 0x1e, 0xfe, 0xdf, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x38, 0xee, 0x24, 0xb6, 0xb7, 0x8d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -17681,6 +17723,49 @@ func (m *ContentionEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ScanStats) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ScanStats) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ScanStats) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.NumInternalSteps != 0 { + i = encodeVarintApi(dAtA, i, uint64(m.NumInternalSteps)) + i-- + dAtA[i] = 0x20 + } + if m.NumInterfaceSteps != 0 { + i = encodeVarintApi(dAtA, i, uint64(m.NumInterfaceSteps)) + i-- + dAtA[i] = 0x18 + } + if m.NumInternalSeeks != 0 { + i = encodeVarintApi(dAtA, i, uint64(m.NumInternalSeeks)) + i-- + dAtA[i] = 0x10 + } + if m.NumInterfaceSeeks != 0 { + i = encodeVarintApi(dAtA, i, uint64(m.NumInterfaceSeeks)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func encodeVarintApi(dAtA []byte, offset int, v uint64) int { offset -= sovApi(v) base := offset @@ -21193,6 +21278,27 @@ func (m *ContentionEvent) Size() (n int) { return n } +func (m *ScanStats) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.NumInterfaceSeeks != 0 { + n += 1 + sovApi(uint64(m.NumInterfaceSeeks)) + } + if m.NumInternalSeeks != 0 { + n += 1 + sovApi(uint64(m.NumInternalSeeks)) + } + if m.NumInterfaceSteps != 0 { + n += 1 + sovApi(uint64(m.NumInterfaceSteps)) + } + if m.NumInternalSteps != 0 { + n += 1 + sovApi(uint64(m.NumInternalSteps)) + } + return n +} + func sovApi(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -42845,6 +42951,132 @@ func (m *ContentionEvent) Unmarshal(dAtA []byte) error { } return nil } +func (m *ScanStats) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ScanStats: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ScanStats: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NumInterfaceSeeks", wireType) + } + m.NumInterfaceSeeks = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NumInterfaceSeeks |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NumInternalSeeks", wireType) + } + m.NumInternalSeeks = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NumInternalSeeks |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NumInterfaceSteps", wireType) + } + m.NumInterfaceSteps = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NumInterfaceSteps |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NumInternalSteps", wireType) + } + m.NumInternalSteps = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NumInternalSteps |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipApi(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/pkg/roachpb/api.proto b/pkg/roachpb/api.proto index 417eff2da348..974df4b4ff66 100644 --- a/pkg/roachpb/api.proto +++ b/pkg/roachpb/api.proto @@ -2577,3 +2577,14 @@ message ContentionEvent { google.protobuf.Duration duration = 3 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; } + +// ScanStats is a message that will be attached to BatchResponses containing +// information about what happened during each scan and get in the request. +message ScanStats { + option (gogoproto.goproto_stringer) = false; + + uint64 num_interface_seeks = 1; + uint64 num_internal_seeks = 2; + uint64 num_interface_steps = 3; + uint64 num_internal_steps = 4; +} diff --git a/pkg/sql/colexecop/operator.go b/pkg/sql/colexecop/operator.go index 3ac46e47db84..fe1083797f6f 100644 --- a/pkg/sql/colexecop/operator.go +++ b/pkg/sql/colexecop/operator.go @@ -72,6 +72,9 @@ type KVReader interface { // GetCumulativeContentionTime returns the amount of time KV reads spent // contending. It must be safe for concurrent use. GetCumulativeContentionTime() time.Duration + // GetScanStats returns statistics about the scan that happened during the + // KV reads. It must be safe for concurrent use. + GetScanStats() execinfra.ScanStats } // ZeroInputNode is an execinfra.OpNode with no inputs. diff --git a/pkg/sql/colfetcher/colbatch_scan.go b/pkg/sql/colfetcher/colbatch_scan.go index 0f381e0e0820..a33b3221f2d7 100644 --- a/pkg/sql/colfetcher/colbatch_scan.go +++ b/pkg/sql/colfetcher/colbatch_scan.go @@ -169,6 +169,11 @@ func (s *ColBatchScan) GetCumulativeContentionTime() time.Duration { return execinfra.GetCumulativeContentionTime(s.Ctx) } +// GetScanStats is part of the colexecop.KVReader interface. +func (s *ColBatchScan) GetScanStats() execinfra.ScanStats { + return execinfra.GetScanStats(s.Ctx) +} + var colBatchScanPool = sync.Pool{ New: func() interface{} { return &ColBatchScan{} diff --git a/pkg/sql/colfetcher/index_join.go b/pkg/sql/colfetcher/index_join.go index 1ca5d235b002..72c784d6e3f6 100644 --- a/pkg/sql/colfetcher/index_join.go +++ b/pkg/sql/colfetcher/index_join.go @@ -514,6 +514,11 @@ func adjustMemEstimate(estimate int64) int64 { return estimate*memEstimateMultiplier + memEstimateAdditive } +// GetScanStats is part of the colexecop.KVReader interface. +func (s *ColIndexJoin) GetScanStats() execinfra.ScanStats { + return execinfra.GetScanStats(s.Ctx) +} + // Release implements the execinfra.Releasable interface. func (s *ColIndexJoin) Release() { s.rf.Release() diff --git a/pkg/sql/colflow/stats.go b/pkg/sql/colflow/stats.go index bd1e47b78d90..f2d73d5b3dec 100644 --- a/pkg/sql/colflow/stats.go +++ b/pkg/sql/colflow/stats.go @@ -19,6 +19,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/colexecerror" "github.com/cockroachdb/cockroach/pkg/sql/colexecop" "github.com/cockroachdb/cockroach/pkg/sql/colflow/colrpc" + "github.com/cockroachdb/cockroach/pkg/sql/execinfra" "github.com/cockroachdb/cockroach/pkg/sql/execinfrapb" "github.com/cockroachdb/cockroach/pkg/util" "github.com/cockroachdb/cockroach/pkg/util/mon" @@ -212,6 +213,8 @@ func (vsc *vectorizedStatsCollectorImpl) GetStats() *execinfrapb.ComponentStats s.KV.TuplesRead.Set(uint64(vsc.kvReader.GetRowsRead())) s.KV.BytesRead.Set(uint64(vsc.kvReader.GetBytesRead())) s.KV.ContentionTime.Set(vsc.kvReader.GetCumulativeContentionTime()) + scanStats := vsc.kvReader.GetScanStats() + execinfra.PopulateKVMVCCStats(&s.KV, &scanStats) } else { s.Exec.ExecTime.Set(time) } diff --git a/pkg/sql/execinfra/stats.go b/pkg/sql/execinfra/stats.go index 2873b5595f3c..0adefd5ee708 100644 --- a/pkg/sql/execinfra/stats.go +++ b/pkg/sql/execinfra/stats.go @@ -15,6 +15,8 @@ import ( "time" "github.com/cockroachdb/cockroach/pkg/roachpb" + "github.com/cockroachdb/cockroach/pkg/sql/execinfrapb" + "github.com/cockroachdb/cockroach/pkg/util/optional" "github.com/cockroachdb/cockroach/pkg/util/tracing" pbtypes "github.com/gogo/protobuf/types" ) @@ -50,3 +52,55 @@ func GetCumulativeContentionTime(ctx context.Context) time.Duration { } return cumulativeContentionTime } + +// ScanStats contains statistics on the internal MVCC operators used to satisfy +// a scan. See storage/engine.go for a more thorough discussion of the meaning +// of each stat. +type ScanStats struct { + // NumInterfaceSteps is the number of times the MVCC step function was called + // to satisfy a scan. + NumInterfaceSteps uint64 + // NumInternalSteps is the number of times that MVCC step was invoked + // internally, including to step over internal, uncompacted Pebble versions. + NumInternalSteps uint64 + // NumInterfaceSeeks is the number of times the MVCC seek function was called + // to satisfy a scan. + NumInterfaceSeeks uint64 + // NumInternalSeeks is the number of times that MVCC seek was invoked + // internally, including to step over internal, uncompacted Pebble versions. + NumInternalSeeks uint64 +} + +// PopulateKVMVCCStats adds data from the input ScanStats to the input KVStats. +func PopulateKVMVCCStats(kvStats *execinfrapb.KVStats, ss *ScanStats) { + kvStats.NumInterfaceSteps = optional.MakeUint(ss.NumInterfaceSteps) + kvStats.NumInternalSteps = optional.MakeUint(ss.NumInternalSteps) + kvStats.NumInterfaceSeeks = optional.MakeUint(ss.NumInterfaceSeeks) + kvStats.NumInternalSeeks = optional.MakeUint(ss.NumInternalSeeks) +} + +// GetScanStats is a helper function to calculate scan stats from the tracing +// span from the context. +func GetScanStats(ctx context.Context) (ss ScanStats) { + recording := GetTraceData(ctx) + if recording == nil { + return ScanStats{} + } + var ev roachpb.ScanStats + for i := range recording { + recording[i].Structured(func(any *pbtypes.Any, _ time.Time) { + if !pbtypes.Is(any, &ev) { + return + } + if err := pbtypes.UnmarshalAny(any, &ev); err != nil { + return + } + + ss.NumInterfaceSteps += ev.NumInterfaceSteps + ss.NumInternalSteps += ev.NumInternalSteps + ss.NumInterfaceSeeks += ev.NumInterfaceSeeks + ss.NumInternalSeeks += ev.NumInternalSeeks + }) + } + return ss +} diff --git a/pkg/sql/execinfrapb/component_stats.go b/pkg/sql/execinfrapb/component_stats.go index 6175695a7d77..ecad65b04325 100644 --- a/pkg/sql/execinfrapb/component_stats.go +++ b/pkg/sql/execinfrapb/component_stats.go @@ -151,6 +151,20 @@ func (s *ComponentStats) formatStats(fn func(suffix string, value interface{})) if s.KV.BytesRead.HasValue() { fn("KV bytes read", humanize.IBytes(s.KV.BytesRead.Value())) } + if s.KV.NumInterfaceSteps.HasValue() { + fn("MVCC step count (ext/int)", + fmt.Sprintf("%s/%s", + humanizeutil.Count(s.KV.NumInterfaceSteps.Value()), + humanizeutil.Count(s.KV.NumInternalSteps.Value())), + ) + } + if s.KV.NumInterfaceSeeks.HasValue() { + fn("MVCC seek count (ext/int)", + fmt.Sprintf("%s/%s", + humanizeutil.Count(s.KV.NumInterfaceSeeks.Value()), + humanizeutil.Count(s.KV.NumInternalSeeks.Value())), + ) + } // Exec stats. if s.Exec.ExecTime.HasValue() { @@ -217,6 +231,18 @@ func (s *ComponentStats) Union(other *ComponentStats) *ComponentStats { if !result.KV.ContentionTime.HasValue() { result.KV.ContentionTime = other.KV.ContentionTime } + if !result.KV.NumInterfaceSteps.HasValue() { + result.KV.NumInterfaceSteps = other.KV.NumInterfaceSteps + } + if !result.KV.NumInternalSteps.HasValue() { + result.KV.NumInternalSteps = other.KV.NumInternalSteps + } + if !result.KV.NumInterfaceSeeks.HasValue() { + result.KV.NumInterfaceSeeks = other.KV.NumInterfaceSeeks + } + if !result.KV.NumInternalSeeks.HasValue() { + result.KV.NumInternalSeeks = other.KV.NumInternalSeeks + } if !result.KV.TuplesRead.HasValue() { result.KV.TuplesRead = other.KV.TuplesRead } @@ -306,6 +332,10 @@ func (s *ComponentStats) MakeDeterministic() { // KV. timeVal(&s.KV.KVTime) timeVal(&s.KV.ContentionTime) + resetUint(&s.KV.NumInterfaceSteps) + resetUint(&s.KV.NumInternalSteps) + resetUint(&s.KV.NumInterfaceSeeks) + resetUint(&s.KV.NumInternalSeeks) if s.KV.BytesRead.HasValue() { // BytesRead is overridden to a useful value for tests. s.KV.BytesRead.Set(8 * s.KV.TuplesRead.Value()) diff --git a/pkg/sql/execinfrapb/component_stats.pb.go b/pkg/sql/execinfrapb/component_stats.pb.go index 9cc827378011..147c0d27a80f 100644 --- a/pkg/sql/execinfrapb/component_stats.pb.go +++ b/pkg/sql/execinfrapb/component_stats.pb.go @@ -296,7 +296,11 @@ type KVStats struct { KVTime optional.Duration `protobuf:"bytes,3,opt,name=kv_time,json=kvTime" json:"kv_time"` // ContentionTime is the cumulative time a KV request spent contending with // other transactions. This time accounts for a portion of KVTime above. - ContentionTime optional.Duration `protobuf:"bytes,4,opt,name=contention_time,json=contentionTime" json:"contention_time"` + ContentionTime optional.Duration `protobuf:"bytes,4,opt,name=contention_time,json=contentionTime" json:"contention_time"` + NumInterfaceSteps optional.Uint `protobuf:"bytes,5,opt,name=num_interface_steps,json=numInterfaceSteps" json:"num_interface_steps"` + NumInternalSteps optional.Uint `protobuf:"bytes,6,opt,name=num_internal_steps,json=numInternalSteps" json:"num_internal_steps"` + NumInterfaceSeeks optional.Uint `protobuf:"bytes,7,opt,name=num_interface_seeks,json=numInterfaceSeeks" json:"num_interface_seeks"` + NumInternalSeeks optional.Uint `protobuf:"bytes,8,opt,name=num_internal_seeks,json=numInternalSeeks" json:"num_internal_seeks"` } func (m *KVStats) Reset() { *m = KVStats{} } @@ -457,70 +461,74 @@ func init() { } var fileDescriptor_11ea9e8b662a649a = []byte{ - // 1005 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0x4f, 0x6f, 0xe2, 0xc6, - 0x1b, 0xc7, 0xb1, 0x21, 0x26, 0x3c, 0x2c, 0x84, 0x9d, 0xdf, 0x1e, 0x50, 0xf4, 0x2b, 0xc9, 0xd2, - 0xae, 0x84, 0x2a, 0x15, 0x54, 0x0e, 0xed, 0x69, 0x0f, 0x21, 0xb0, 0x5d, 0x36, 0xc9, 0x92, 0x35, - 0x24, 0x95, 0xf6, 0x62, 0x0d, 0xf6, 0x84, 0x58, 0xf8, 0x1f, 0xf6, 0x98, 0x38, 0x7d, 0x15, 0x3d, - 0xb5, 0xc7, 0xbe, 0x86, 0x5e, 0xfb, 0x0a, 0x72, 0xdc, 0x43, 0x0f, 0xab, 0x1e, 0xa2, 0x2e, 0xe9, - 0x5b, 0xe8, 0xa5, 0xa7, 0x6a, 0xc6, 0xc6, 0x38, 0xa9, 0xd0, 0xe2, 0xaa, 0xb7, 0xc1, 0x9e, 0xef, - 0x67, 0x9e, 0x79, 0x9e, 0xe7, 0xfb, 0x18, 0x78, 0xe6, 0xcd, 0x8c, 0x16, 0x09, 0x88, 0xaa, 0x5b, - 0x17, 0x2e, 0x76, 0xc6, 0x2d, 0xd5, 0x36, 0x1d, 0xdb, 0x22, 0x16, 0x55, 0x3c, 0x8a, 0xa9, 0xd7, - 0x74, 0x5c, 0x9b, 0xda, 0xa8, 0xaa, 0xda, 0xea, 0xd4, 0xb5, 0xb1, 0x7a, 0xd9, 0xf4, 0x66, 0x46, - 0x53, 0xd3, 0x3d, 0xea, 0xcd, 0x0c, 0xd7, 0xb7, 0x76, 0x9f, 0x4c, 0xec, 0x89, 0xcd, 0x37, 0xb5, - 0xd8, 0x2a, 0xdc, 0xbf, 0xfb, 0x7f, 0x9f, 0xea, 0x46, 0xcb, 0x76, 0xa8, 0x6e, 0x5b, 0x78, 0xb5, - 0x08, 0xdf, 0xd6, 0x7f, 0x15, 0xa1, 0x78, 0xb8, 0x3c, 0xa7, 0xdf, 0x45, 0x5f, 0x42, 0xfe, 0xc2, - 0xb0, 0xaf, 0x14, 0x5d, 0xab, 0x0a, 0xfb, 0x42, 0xe3, 0x51, 0xa7, 0x7a, 0x73, 0xbb, 0x97, 0xf9, - 0xed, 0x76, 0x4f, 0x7a, 0x61, 0xd8, 0x57, 0xfd, 0xee, 0x22, 0x5e, 0xc9, 0x12, 0xdb, 0xd8, 0xd7, - 0x50, 0x17, 0x72, 0xf4, 0xda, 0x21, 0x55, 0x71, 0x5f, 0x68, 0x94, 0xdb, 0x9f, 0x37, 0xd7, 0xc5, - 0xd7, 0x4c, 0x9c, 0xd3, 0x1c, 0x5d, 0x3b, 0xa4, 0x93, 0x63, 0x6c, 0x99, 0xab, 0xd1, 0x2e, 0x88, - 0xba, 0x56, 0xcd, 0xee, 0x0b, 0x8d, 0xad, 0x0e, 0xb0, 0xe7, 0x8b, 0xdb, 0x3d, 0xb1, 0xdf, 0x95, - 0x45, 0x5d, 0x43, 0x01, 0xec, 0x78, 0x33, 0x43, 0xd1, 0x2d, 0x8f, 0x62, 0x4b, 0x25, 0x2c, 0xb8, - 0x1c, 0xdf, 0x78, 0x1a, 0x6d, 0x2c, 0x0d, 0xdf, 0x1c, 0xf7, 0xa3, 0xb7, 0xfd, 0xee, 0x5f, 0xb7, - 0x7b, 0x5f, 0x4f, 0x74, 0x7a, 0xe9, 0x8f, 0x9b, 0xaa, 0x6d, 0xb6, 0xe2, 0x78, 0xb4, 0xf1, 0x6a, - 0xdd, 0x72, 0xa6, 0x93, 0xd6, 0x18, 0x7b, 0xa4, 0x79, 0x4f, 0x2a, 0x97, 0xbc, 0x99, 0x11, 0xff, - 0xd4, 0xea, 0x5f, 0x41, 0x8e, 0x45, 0x8a, 0x0a, 0xb0, 0x75, 0xf6, 0x7a, 0xd8, 0x1b, 0x55, 0x32, - 0xa8, 0x04, 0x85, 0x53, 0x79, 0x70, 0xd8, 0x1b, 0x0e, 0x07, 0x72, 0x45, 0x40, 0x00, 0xd2, 0x70, - 0x24, 0xf7, 0x0e, 0x4e, 0x2a, 0x22, 0xda, 0x86, 0xdc, 0x8b, 0xe3, 0xc1, 0xb7, 0x95, 0x6c, 0xfd, - 0x97, 0x1c, 0x94, 0xe3, 0xeb, 0x0e, 0x59, 0xf5, 0x50, 0x1f, 0x0a, 0x71, 0x41, 0x79, 0x6e, 0x8b, - 0xed, 0x67, 0x1b, 0xe5, 0x2a, 0x4a, 0xd3, 0x4a, 0x8d, 0x7a, 0x20, 0x59, 0x84, 0x2a, 0x6e, 0xc0, - 0x73, 0x5e, 0x6c, 0x37, 0xd6, 0x73, 0x5e, 0x13, 0x7a, 0x65, 0xbb, 0x53, 0x39, 0xe0, 0x41, 0x44, - 0xa8, 0x2d, 0x8b, 0x50, 0x39, 0x58, 0x62, 0x68, 0xc0, 0xd3, 0xbe, 0x09, 0x66, 0xf4, 0x0f, 0xcc, - 0x28, 0x40, 0xcf, 0x41, 0x9c, 0xce, 0x79, 0x41, 0x8a, 0xed, 0xa7, 0xeb, 0x11, 0x47, 0xe7, 0xa1, - 0x36, 0x2e, 0xee, 0xd1, 0xb9, 0x2c, 0x4e, 0xe7, 0xe8, 0x39, 0xe4, 0x58, 0xd3, 0x57, 0xb7, 0x38, - 0xe0, 0xd3, 0xf5, 0x80, 0x5e, 0x40, 0xd4, 0xe4, 0xf1, 0x5c, 0x86, 0x0e, 0x41, 0xb2, 0x7d, 0xea, - 0xf8, 0xb4, 0x2a, 0x7d, 0x2c, 0xa7, 0x03, 0xbe, 0x2f, 0x89, 0x88, 0xa4, 0xa8, 0x03, 0x92, 0x6e, - 0x39, 0x3e, 0xf5, 0xaa, 0xf9, 0xfd, 0x6c, 0xa3, 0xd8, 0xfe, 0x6c, 0x3d, 0xa4, 0x6f, 0x3d, 0x64, - 0x84, 0x4a, 0xf4, 0x12, 0x80, 0x3b, 0x87, 0x7b, 0xb5, 0xba, 0xfd, 0xb1, 0xdb, 0x30, 0x13, 0x25, - 0x31, 0x85, 0x8b, 0xe5, 0x83, 0xfa, 0x0f, 0x02, 0xc0, 0xea, 0x18, 0xd4, 0x01, 0xb0, 0x7c, 0x53, - 0xa1, 0xbe, 0x63, 0x10, 0x2f, 0xea, 0x9c, 0x4f, 0x12, 0x60, 0xe6, 0xef, 0x66, 0x6c, 0xeb, 0x33, - 0xdd, 0xa2, 0x4b, 0xa4, 0xe5, 0x9b, 0x23, 0xae, 0x42, 0x5d, 0x28, 0x5c, 0x61, 0x9d, 0x2a, 0x54, - 0x37, 0x49, 0xd4, 0x34, 0x4f, 0xd7, 0x22, 0xba, 0xbe, 0x8b, 0xd9, 0x32, 0xc2, 0x6c, 0x33, 0xe5, - 0x48, 0x37, 0x49, 0xfd, 0x43, 0x16, 0xca, 0xf7, 0x1b, 0x0a, 0x1d, 0x40, 0xde, 0xc0, 0x94, 0x58, - 0xea, 0x75, 0x14, 0xd9, 0xc6, 0xd8, 0xa5, 0xee, 0xbf, 0x89, 0x0d, 0xbd, 0x85, 0x27, 0x1a, 0xf1, - 0x88, 0xab, 0x63, 0x43, 0xff, 0x8e, 0x6f, 0x09, 0x81, 0xd9, 0x74, 0xc0, 0xff, 0x3d, 0x80, 0x70, - 0xf6, 0x31, 0xec, 0x84, 0xd9, 0x57, 0x5c, 0xa2, 0x12, 0x7d, 0x4e, 0xb4, 0xa8, 0xdd, 0x37, 0x2a, - 0x43, 0x39, 0xd4, 0xca, 0x91, 0x14, 0xbd, 0x82, 0xf2, 0xf8, 0x9a, 0x26, 0x61, 0x5b, 0x9b, 0xc3, - 0x4a, 0x5c, 0x1a, 0xb3, 0x4e, 0xe1, 0xb1, 0x49, 0x3c, 0x0f, 0x4f, 0x92, 0x38, 0x69, 0x73, 0x5c, - 0x65, 0xa9, 0x5e, 0x12, 0xeb, 0x7f, 0x08, 0x71, 0x8d, 0x23, 0xb7, 0xa3, 0x2e, 0x14, 0xa3, 0xeb, - 0x7b, 0xab, 0xd9, 0xb5, 0x11, 0x1e, 0x42, 0xdd, 0x90, 0x0d, 0xad, 0x0e, 0x40, 0x78, 0x6d, 0x0e, - 0x11, 0x53, 0xb4, 0x31, 0x97, 0x71, 0xc6, 0x4b, 0x28, 0xc5, 0xd7, 0xe5, 0x98, 0xec, 0xe6, 0x98, - 0x47, 0x4b, 0x25, 0x23, 0xd5, 0x7f, 0x16, 0x21, 0x1f, 0x4d, 0xa4, 0x55, 0x64, 0x2e, 0xc1, 0x5a, - 0x2a, 0x83, 0x45, 0xc5, 0xc0, 0x5a, 0x22, 0x47, 0x1c, 0x22, 0xa6, 0xce, 0x11, 0xa7, 0xbc, 0x82, - 0xfc, 0x74, 0x9e, 0xb2, 0x6f, 0xcb, 0xd1, 0x3c, 0x95, 0x8e, 0xce, 0x59, 0xb3, 0xca, 0xd2, 0x74, - 0xce, 0x9b, 0xf6, 0x14, 0x76, 0x54, 0xdb, 0xa2, 0xc4, 0x5a, 0x79, 0x21, 0x97, 0xce, 0x0b, 0xe5, - 0x95, 0x9e, 0xdb, 0xff, 0x4f, 0x01, 0x0a, 0xf1, 0x10, 0x66, 0xb6, 0x65, 0x03, 0x38, 0x24, 0xa7, - 0xf4, 0xfe, 0x36, 0x53, 0xf2, 0x28, 0x07, 0xf0, 0xd8, 0xc4, 0x81, 0x82, 0x0d, 0xc3, 0x56, 0x31, - 0x25, 0x9a, 0x62, 0x12, 0x33, 0x4d, 0xf6, 0x76, 0x4c, 0x1c, 0x1c, 0x2c, 0xc5, 0x27, 0xc4, 0x44, - 0x6f, 0x00, 0xdd, 0x07, 0x6a, 0xba, 0x37, 0x4d, 0xd3, 0x27, 0x95, 0x24, 0xb1, 0xab, 0x7b, 0xd3, - 0xfa, 0x8f, 0x02, 0x14, 0x13, 0xdf, 0x0e, 0x56, 0x6b, 0x36, 0x90, 0xc7, 0x98, 0xaa, 0x97, 0xe9, - 0x26, 0x32, 0x1b, 0xe4, 0x9d, 0x50, 0xf6, 0x60, 0xac, 0x8b, 0xff, 0x66, 0xac, 0xd7, 0x7f, 0x12, - 0xa0, 0x10, 0x7f, 0x48, 0xd0, 0x37, 0x50, 0x62, 0x57, 0x37, 0x89, 0xa9, 0xf8, 0xac, 0xd3, 0xd3, - 0x44, 0x56, 0x34, 0x71, 0x70, 0x42, 0xcc, 0x33, 0xa6, 0x43, 0x7d, 0x28, 0x33, 0x10, 0xcb, 0x5c, - 0x44, 0x12, 0xd3, 0xf8, 0x0c, 0x07, 0x2c, 0x6d, 0x1c, 0xd5, 0xf9, 0xe2, 0xe6, 0x43, 0x2d, 0x73, - 0xb3, 0xa8, 0x09, 0xef, 0x16, 0x35, 0xe1, 0xfd, 0xa2, 0x26, 0xfc, 0xbe, 0xa8, 0x09, 0xdf, 0xdf, - 0xd5, 0x32, 0xef, 0xee, 0x6a, 0x99, 0xf7, 0x77, 0xb5, 0xcc, 0xdb, 0x62, 0xe2, 0x2f, 0xef, 0xdf, - 0x01, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x60, 0x3a, 0x85, 0x04, 0x0b, 0x00, 0x00, + // 1066 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x97, 0x4d, 0x4f, 0xe3, 0x46, + 0x18, 0xc7, 0x63, 0xe7, 0x05, 0xf2, 0x64, 0x13, 0xb2, 0xb3, 0x7b, 0x88, 0x50, 0x1b, 0xd8, 0xb4, + 0x2b, 0xa1, 0x4a, 0x4d, 0x54, 0x0e, 0xed, 0x69, 0x0f, 0x84, 0xb0, 0xdd, 0x2c, 0xb0, 0xb0, 0x4e, + 0xa0, 0xd2, 0x5e, 0xac, 0x89, 0x3d, 0x80, 0x15, 0x7b, 0x6c, 0xec, 0x71, 0x30, 0xbd, 0xf5, 0x1b, + 0xf4, 0xd4, 0x1e, 0xfb, 0x3d, 0xfa, 0x09, 0x38, 0xee, 0xa1, 0x87, 0x55, 0x0f, 0xa8, 0x1b, 0xfa, + 0x15, 0x7a, 0xe9, 0xa9, 0x9a, 0xf1, 0x4b, 0x0c, 0x28, 0xda, 0x18, 0xf5, 0x36, 0xc4, 0xf3, 0xff, + 0xcd, 0xf3, 0xfe, 0x08, 0x78, 0xee, 0x9d, 0x9b, 0x1d, 0x12, 0x10, 0xcd, 0xa0, 0x27, 0x2e, 0x76, + 0x46, 0x1d, 0xcd, 0xb6, 0x1c, 0x9b, 0x12, 0xca, 0x54, 0x8f, 0x61, 0xe6, 0xb5, 0x1d, 0xd7, 0x66, + 0x36, 0x6a, 0x68, 0xb6, 0x36, 0x76, 0x6d, 0xac, 0x9d, 0xb5, 0xbd, 0x73, 0xb3, 0xad, 0x1b, 0x1e, + 0xf3, 0xce, 0x4d, 0xd7, 0xa7, 0xab, 0x4f, 0x4f, 0xed, 0x53, 0x5b, 0x5c, 0xea, 0xf0, 0x53, 0x78, + 0x7f, 0xf5, 0x33, 0x9f, 0x19, 0x66, 0xc7, 0x76, 0x98, 0x61, 0x53, 0x3c, 0x3b, 0x84, 0x5f, 0x5b, + 0x7f, 0xc8, 0x50, 0xd9, 0x8e, 0xdf, 0xe9, 0xf7, 0xd0, 0x37, 0xb0, 0x74, 0x62, 0xda, 0x17, 0xaa, + 0xa1, 0x37, 0xa4, 0x75, 0x69, 0xe3, 0x51, 0xb7, 0x71, 0x75, 0xbd, 0x96, 0xfb, 0xf3, 0x7a, 0xad, + 0xf4, 0xd2, 0xb4, 0x2f, 0xfa, 0xbd, 0x69, 0x72, 0x52, 0x4a, 0xfc, 0x62, 0x5f, 0x47, 0x3d, 0x28, + 0xb0, 0x4b, 0x87, 0x34, 0xe4, 0x75, 0x69, 0xa3, 0xb6, 0xf9, 0x55, 0x7b, 0x9e, 0x7d, 0xed, 0xd4, + 0x3b, 0xed, 0xe1, 0xa5, 0x43, 0xba, 0x05, 0xce, 0x56, 0x84, 0x1a, 0xad, 0x82, 0x6c, 0xe8, 0x8d, + 0xfc, 0xba, 0xb4, 0x51, 0xec, 0x02, 0xff, 0x7d, 0x7a, 0xbd, 0x26, 0xf7, 0x7b, 0x8a, 0x6c, 0xe8, + 0x28, 0x80, 0x15, 0xef, 0xdc, 0x54, 0x0d, 0xea, 0x31, 0x4c, 0x35, 0xc2, 0x8d, 0x2b, 0x88, 0x8b, + 0x87, 0xd1, 0xc5, 0xea, 0xe0, 0xed, 0x5e, 0x3f, 0xfa, 0xda, 0xef, 0xfd, 0x7b, 0xbd, 0xf6, 0xdd, + 0xa9, 0xc1, 0xce, 0xfc, 0x51, 0x5b, 0xb3, 0xad, 0x4e, 0x62, 0x8f, 0x3e, 0x9a, 0x9d, 0x3b, 0xce, + 0xf8, 0xb4, 0x33, 0xc2, 0x1e, 0x69, 0xdf, 0x92, 0x2a, 0x55, 0xef, 0xdc, 0x4c, 0xfe, 0xd4, 0x5b, + 0xdf, 0x42, 0x81, 0x5b, 0x8a, 0xca, 0x50, 0x3c, 0x7a, 0x33, 0xd8, 0x19, 0xd6, 0x73, 0xa8, 0x0a, + 0xe5, 0x43, 0xe5, 0x60, 0x7b, 0x67, 0x30, 0x38, 0x50, 0xea, 0x12, 0x02, 0x28, 0x0d, 0x86, 0xca, + 0xce, 0xd6, 0x7e, 0x5d, 0x46, 0xcb, 0x50, 0x78, 0xb9, 0x77, 0xf0, 0x43, 0x3d, 0xdf, 0xfa, 0xbd, + 0x00, 0xb5, 0xc4, 0xdd, 0x01, 0xcf, 0x1e, 0xea, 0x43, 0x39, 0x49, 0xa8, 0x88, 0x6d, 0x65, 0xf3, + 0xf9, 0x42, 0xb1, 0x8a, 0xc2, 0x34, 0x53, 0xa3, 0x1d, 0x28, 0x51, 0xc2, 0x54, 0x37, 0x10, 0x31, + 0xaf, 0x6c, 0x6e, 0xcc, 0xe7, 0xbc, 0x21, 0xec, 0xc2, 0x76, 0xc7, 0x4a, 0x20, 0x8c, 0x88, 0x50, + 0x45, 0x4a, 0x98, 0x12, 0xc4, 0x18, 0x16, 0x88, 0xb0, 0x2f, 0x82, 0x19, 0xde, 0xc3, 0x0c, 0x03, + 0xf4, 0x02, 0xe4, 0xf1, 0x44, 0x24, 0xa4, 0xb2, 0xf9, 0x6c, 0x3e, 0x62, 0xf7, 0x38, 0xd4, 0x26, + 0xc9, 0xdd, 0x3d, 0x56, 0xe4, 0xf1, 0x04, 0xbd, 0x80, 0x02, 0x2f, 0xfa, 0x46, 0x51, 0x00, 0xbe, + 0x98, 0x0f, 0xd8, 0x09, 0x88, 0x96, 0x7e, 0x5e, 0xc8, 0xd0, 0x36, 0x94, 0x6c, 0x9f, 0x39, 0x3e, + 0x6b, 0x94, 0x3e, 0x15, 0xd3, 0x03, 0x71, 0x2f, 0x8d, 0x88, 0xa4, 0xa8, 0x0b, 0x25, 0x83, 0x3a, + 0x3e, 0xf3, 0x1a, 0x4b, 0xeb, 0xf9, 0x8d, 0xca, 0xe6, 0x97, 0xf3, 0x21, 0x7d, 0x7a, 0x97, 0x11, + 0x2a, 0xd1, 0x2b, 0x00, 0xd1, 0x39, 0xa2, 0x57, 0x1b, 0xcb, 0x9f, 0xf2, 0x86, 0x37, 0x51, 0x1a, + 0x53, 0x3e, 0x89, 0x7f, 0x68, 0xfd, 0x22, 0x01, 0xcc, 0x9e, 0x41, 0x5d, 0x00, 0xea, 0x5b, 0x2a, + 0xf3, 0x1d, 0x93, 0x78, 0x51, 0xe5, 0x7c, 0x9e, 0x02, 0xf3, 0xfe, 0x6e, 0x27, 0x6d, 0x7d, 0x64, + 0x50, 0x16, 0x23, 0xa9, 0x6f, 0x0d, 0x85, 0x0a, 0xf5, 0xa0, 0x7c, 0x81, 0x0d, 0xa6, 0x32, 0xc3, + 0x22, 0x51, 0xd1, 0x3c, 0x9b, 0x8b, 0xe8, 0xf9, 0x2e, 0xe6, 0xc7, 0x08, 0xb3, 0xcc, 0x95, 0x43, + 0xc3, 0x22, 0xad, 0x8f, 0x79, 0xa8, 0xdd, 0x2e, 0x28, 0xb4, 0x05, 0x4b, 0x26, 0x66, 0x84, 0x6a, + 0x97, 0x91, 0x65, 0x0b, 0x63, 0x63, 0xdd, 0xff, 0x63, 0x1b, 0x7a, 0x07, 0x4f, 0x75, 0xe2, 0x11, + 0xd7, 0xc0, 0xa6, 0xf1, 0xa3, 0xb8, 0x12, 0x02, 0xf3, 0xd9, 0x80, 0x4f, 0xee, 0x40, 0x04, 0x7b, + 0x0f, 0x56, 0xc2, 0xe8, 0xab, 0x2e, 0xd1, 0x88, 0x31, 0x21, 0x7a, 0x54, 0xee, 0x0b, 0xa5, 0xa1, + 0x16, 0x6a, 0x95, 0x48, 0x8a, 0x5e, 0x43, 0x6d, 0x74, 0xc9, 0xd2, 0xb0, 0xe2, 0xe2, 0xb0, 0xaa, + 0x90, 0x26, 0xac, 0x43, 0x78, 0x6c, 0x11, 0xcf, 0xc3, 0xa7, 0x69, 0x5c, 0x69, 0x71, 0x5c, 0x3d, + 0x56, 0xc7, 0xc4, 0xd6, 0xdf, 0x52, 0x92, 0xe3, 0xa8, 0xdb, 0x51, 0x0f, 0x2a, 0x91, 0xfb, 0xde, + 0x6c, 0x76, 0x2d, 0x84, 0x87, 0x50, 0x37, 0xe0, 0x43, 0xab, 0x0b, 0x10, 0xba, 0x2d, 0x20, 0x72, + 0x86, 0x32, 0x16, 0x32, 0xc1, 0x78, 0x05, 0xd5, 0xc4, 0x5d, 0x81, 0xc9, 0x2f, 0x8e, 0x79, 0x14, + 0x2b, 0x39, 0xa9, 0xf5, 0x53, 0x11, 0x96, 0xa2, 0x89, 0x34, 0xb3, 0xcc, 0x25, 0x58, 0xcf, 0xd4, + 0x60, 0x51, 0x32, 0xb0, 0x9e, 0x8a, 0x91, 0x80, 0xc8, 0x99, 0x63, 0x24, 0x28, 0xaf, 0x61, 0x69, + 0x3c, 0xc9, 0x58, 0xb7, 0xb5, 0x68, 0x9e, 0x96, 0x76, 0x8f, 0x79, 0xb1, 0x2a, 0xa5, 0xf1, 0x44, + 0x14, 0xed, 0x21, 0xac, 0x68, 0x36, 0x65, 0x84, 0xce, 0x7a, 0xa1, 0x90, 0xad, 0x17, 0x6a, 0x33, + 0xbd, 0x20, 0x0e, 0xe0, 0x09, 0x1f, 0x44, 0x06, 0x65, 0xc4, 0x3d, 0xc1, 0x1a, 0x51, 0x3d, 0x46, + 0x1c, 0x2f, 0x4b, 0xf5, 0x3e, 0xa6, 0xbe, 0xd5, 0x8f, 0xe5, 0x03, 0xae, 0x46, 0x6f, 0x01, 0x25, + 0x50, 0x8a, 0xcd, 0x88, 0x99, 0xa5, 0x84, 0x63, 0x26, 0xc5, 0x66, 0x88, 0xbc, 0x6f, 0x27, 0x21, + 0x63, 0x3e, 0xda, 0x1f, 0x68, 0x27, 0x57, 0xdf, 0xb7, 0x53, 0x30, 0x97, 0x1f, 0x68, 0x27, 0x17, + 0xb7, 0xfe, 0x91, 0xa0, 0x9c, 0x2c, 0x35, 0x3e, 0x06, 0xf9, 0x42, 0x0b, 0x33, 0x95, 0x71, 0x96, + 0x2e, 0x73, 0xa5, 0xc8, 0xd1, 0x01, 0x3c, 0xb6, 0x70, 0xa0, 0x62, 0xd3, 0xb4, 0x35, 0xcc, 0x88, + 0xae, 0x5a, 0xc4, 0xca, 0x52, 0x8d, 0x2b, 0x16, 0x0e, 0xb6, 0x62, 0xf1, 0x3e, 0xb1, 0xb8, 0xdf, + 0xb7, 0x81, 0xba, 0xe1, 0x8d, 0xb3, 0xf4, 0x5d, 0x3d, 0x4d, 0xec, 0x19, 0xde, 0xb8, 0xf5, 0xab, + 0x04, 0x95, 0xd4, 0x2e, 0xe6, 0xbd, 0xc3, 0x43, 0x3b, 0xc2, 0x4c, 0x3b, 0xcb, 0xb6, 0xe1, 0xf8, + 0x62, 0xec, 0x86, 0xb2, 0x3b, 0x6b, 0x52, 0x7e, 0xc8, 0x9a, 0x6c, 0xfd, 0x26, 0x41, 0x39, 0x59, + 0xcc, 0xe8, 0x7b, 0xa8, 0x72, 0xd7, 0x2d, 0x62, 0xa9, 0x3e, 0x9f, 0x1c, 0x59, 0x2c, 0xab, 0x58, + 0x38, 0xd8, 0x27, 0xd6, 0x11, 0xd7, 0xa1, 0x3e, 0xd4, 0x38, 0x88, 0x47, 0x2e, 0x22, 0xc9, 0x59, + 0xe6, 0x16, 0x0e, 0x78, 0xd8, 0x04, 0xaa, 0xfb, 0xf5, 0xd5, 0xc7, 0x66, 0xee, 0x6a, 0xda, 0x94, + 0xde, 0x4f, 0x9b, 0xd2, 0x87, 0x69, 0x53, 0xfa, 0x6b, 0xda, 0x94, 0x7e, 0xbe, 0x69, 0xe6, 0xde, + 0xdf, 0x34, 0x73, 0x1f, 0x6e, 0x9a, 0xb9, 0x77, 0x95, 0xd4, 0xbf, 0x10, 0xff, 0x05, 0x00, 0x00, + 0xff, 0xff, 0xa2, 0xda, 0x3c, 0xa0, 0x54, 0x0c, 0x00, 0x00, } func (m *ComponentID) Marshal() (dAtA []byte, err error) { @@ -871,6 +879,46 @@ func (m *KVStats) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + { + size, err := m.NumInternalSeeks.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintComponentStats(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + { + size, err := m.NumInterfaceSeeks.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintComponentStats(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + { + size, err := m.NumInternalSteps.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintComponentStats(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + { + size, err := m.NumInterfaceSteps.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintComponentStats(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a { size, err := m.ContentionTime.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -1170,6 +1218,14 @@ func (m *KVStats) Size() (n int) { n += 1 + l + sovComponentStats(uint64(l)) l = m.ContentionTime.Size() n += 1 + l + sovComponentStats(uint64(l)) + l = m.NumInterfaceSteps.Size() + n += 1 + l + sovComponentStats(uint64(l)) + l = m.NumInternalSteps.Size() + n += 1 + l + sovComponentStats(uint64(l)) + l = m.NumInterfaceSeeks.Size() + n += 1 + l + sovComponentStats(uint64(l)) + l = m.NumInternalSeeks.Size() + n += 1 + l + sovComponentStats(uint64(l)) return n } @@ -2349,6 +2405,138 @@ func (m *KVStats) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NumInterfaceSteps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowComponentStats + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthComponentStats + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthComponentStats + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NumInterfaceSteps.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NumInternalSteps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowComponentStats + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthComponentStats + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthComponentStats + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NumInternalSteps.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NumInterfaceSeeks", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowComponentStats + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthComponentStats + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthComponentStats + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NumInterfaceSeeks.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NumInternalSeeks", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowComponentStats + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthComponentStats + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthComponentStats + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NumInternalSeeks.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipComponentStats(dAtA[iNdEx:]) diff --git a/pkg/sql/execinfrapb/component_stats.proto b/pkg/sql/execinfrapb/component_stats.proto index b98a023acfc5..5d01450cc058 100644 --- a/pkg/sql/execinfrapb/component_stats.proto +++ b/pkg/sql/execinfrapb/component_stats.proto @@ -130,6 +130,11 @@ message KVStats { // ContentionTime is the cumulative time a KV request spent contending with // other transactions. This time accounts for a portion of KVTime above. optional util.optional.Duration contention_time = 4 [(gogoproto.nullable) = false]; + + optional util.optional.Uint num_interface_steps = 5 [(gogoproto.nullable) = false]; + optional util.optional.Uint num_internal_steps = 6 [(gogoproto.nullable) = false]; + optional util.optional.Uint num_interface_seeks = 7 [(gogoproto.nullable) = false]; + optional util.optional.Uint num_internal_seeks = 8 [(gogoproto.nullable) = false]; } // ExecStats contains statistics about the execution of a component. diff --git a/pkg/sql/explain_test.go b/pkg/sql/explain_test.go index 17655ddb2f19..ec094e6cabd5 100644 --- a/pkg/sql/explain_test.go +++ b/pkg/sql/explain_test.go @@ -15,6 +15,7 @@ import ( "context" "fmt" "regexp" + "strconv" "strings" "testing" "time" @@ -23,10 +24,12 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/tests" "github.com/cockroachdb/cockroach/pkg/testutils" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" + "github.com/cockroachdb/cockroach/pkg/testutils/skip" "github.com/cockroachdb/cockroach/pkg/testutils/sqlutils" "github.com/cockroachdb/cockroach/pkg/util/leaktest" "github.com/cockroachdb/cockroach/pkg/util/log" "github.com/cockroachdb/cockroach/pkg/util/timeutil" + "github.com/stretchr/testify/assert" ) func TestStatementReuses(t *testing.T) { @@ -317,3 +320,76 @@ func TestExplainStatsCollected(t *testing.T) { } } } + +// TestExplainMVCCSteps makes sure that the MVCC stats are properly collected +// during explain analyze. This can't be a normal logic test because the MVCC +// stats are marked as nondeterministic (they change depending on number of +// nodes in the query). +func TestExplainMVCCSteps(t *testing.T) { + defer leaktest.AfterTest(t)() + defer log.Scope(t).Close(t) + + skip.UnderMetamorphic(t, + "this test expects a precise number of scan requests, which is not upheld "+ + "in the metamorphic configuration that edits the kv batch size.") + + ctx := context.Background() + srv, godb, _ := serverutils.StartServer(t, base.TestServerArgs{Insecure: true}) + defer srv.Stopper().Stop(ctx) + r := sqlutils.MakeSQLRunner(godb) + r.Exec(t, "CREATE TABLE ab (a PRIMARY KEY, b) AS SELECT g, g FROM generate_series(1,1000) g(g)") + + expectedSteps, expectedSeeks := 1000, 2 + foundSteps, foundSeeks := getMVCCStats(t, r) + + assert.Equal(t, expectedSteps, foundSteps) + assert.Equal(t, expectedSeeks, foundSeeks) + assert.Equal(t, expectedSteps, foundSteps) + assert.Equal(t, expectedSeeks, foundSeeks) + + // Update all rows. + r.Exec(t, "UPDATE ab SET b=b+1 WHERE true") + + expectedSteps, expectedSeeks = 2000, 2 + foundSteps, foundSeeks = getMVCCStats(t, r) + + assert.Equal(t, expectedSteps, foundSteps) + assert.Equal(t, expectedSeeks, foundSeeks) +} + +func getMVCCStats(t *testing.T, r *sqlutils.SQLRunner) (foundSteps, foundSeeks int) { + rows := r.Query(t, "EXPLAIN ANALYZE(VERBOSE) SELECT count(*) FROM ab") + var output strings.Builder + var str string + var err error + for rows.Next() { + if err := rows.Scan(&str); err != nil { + t.Fatal(err) + } + output.WriteString(str) + output.WriteByte('\n') + str = strings.TrimSpace(str) + // Numbers are printed with commas to indicate 1000s places, remove them. + str = strings.ReplaceAll(str, ",", "") + stepRe := regexp.MustCompile(`MVCC step count \(ext/int\): (\d+)/(\d+)`) + stepMatches := stepRe.FindStringSubmatch(str) + if len(stepMatches) == 3 { + foundSteps, err = strconv.Atoi(stepMatches[1]) + assert.NoError(t, err) + } + seekRe := regexp.MustCompile(`MVCC seek count \(ext/int\): (\d+)/(\d+)`) + seekMatches := seekRe.FindStringSubmatch(str) + if len(seekMatches) == 3 { + foundSeeks, err = strconv.Atoi(seekMatches[1]) + assert.NoError(t, err) + } + } + if err := rows.Close(); err != nil { + t.Fatal(err) + } + if t.Failed() { + fmt.Println("Explain output:") + fmt.Println(output.String()) + } + return foundSteps, foundSeeks +} diff --git a/pkg/sql/instrumentation.go b/pkg/sql/instrumentation.go index 5a74d1e6044c..fec5b64ee846 100644 --- a/pkg/sql/instrumentation.go +++ b/pkg/sql/instrumentation.go @@ -568,6 +568,10 @@ func (m execNodeTraceMetadata) annotateExplain( nodeStats.KVContentionTime.MaybeAdd(stats.KV.ContentionTime) nodeStats.KVBytesRead.MaybeAdd(stats.KV.BytesRead) nodeStats.KVRowsRead.MaybeAdd(stats.KV.TuplesRead) + nodeStats.StepCount.MaybeAdd(stats.KV.NumInterfaceSteps) + nodeStats.InternalStepCount.MaybeAdd(stats.KV.NumInternalSteps) + nodeStats.SeekCount.MaybeAdd(stats.KV.NumInterfaceSeeks) + nodeStats.InternalSeekCount.MaybeAdd(stats.KV.NumInternalSeeks) nodeStats.VectorizedBatchCount.MaybeAdd(stats.Output.NumBatches) } // If we didn't get statistics for all processors, we don't show the diff --git a/pkg/sql/logictest/testdata/logic_test/dist_vectorize b/pkg/sql/logictest/testdata/logic_test/dist_vectorize index 2cb30931c936..c2c3e7150e29 100644 --- a/pkg/sql/logictest/testdata/logic_test/dist_vectorize +++ b/pkg/sql/logictest/testdata/logic_test/dist_vectorize @@ -77,7 +77,7 @@ regions: table: kv@primary spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsls9u004Qx--_p1jNqf1pI_9Nm_pUqIpUQROUpHBAUbW1R8aqvWt2121ClMfiBXgyZDuGOCm2EUJBoced8ezMfL6zu16C-hSDB5PLN5cXU-KLjOuj_4_Jq_Homtw_AAUuAhyyBBV4H8ACCjZQcICCCxT6MKOQSuGjUkLmnyyLgKtgDp5JIeJppnPzjIIvJIK3BB3pGMGDKbuLcYwsQGmYQCFAzaK4SHP_cJ7KKGFyARQmKePKIz0jTzzKtEeGgiNQeP2O6ChBj5hfv6hy7QuuketI8B2XFI-KSGSBR6zScrfQWJkG5CVQSNicJJgIuSAsjoXPNAYeMQvfHdP-R1REZDrNi8hLLvasDBbMVhTK1bplpVmI4Fkr2h3LizCUGDItpNGvU7kY3Qynt-PR-8nRMVDAOfrZbqu_Uaf90zp_lJdxIQOUGNRqm62aO7G2BJ7cXN9eDadH59af6cSpdWJ1H0SrfRANu2c4hzGKLWA2BDzZ6yja3QW0Owjo9Az3MARsAbMh4OleBXS6C-h0ENDtFXfjAQjYAmZDwMFeBXS7C-h2ELDfOwz5WrBsyHf217zlT9Q5RpUKrnDrTX96ZzN_6zEIsfwxUCKTPr6Vwi_SlMtREVcYAlS69Frl4oqXrrzAzWCrMdiuBVvbwXZz5pbUTmO02xzs_krdBcUCKHDUj0Lek5hp5P7iu-iV_ZFFuj4OASqUEYujz2x3Vqqw9dnwMXrA9fmoXNUhqXzlQam8CSrFwtoHZucZrCPpNyI5aeZ58sxzG8lpI5JBM8_BM89tJGfNt4XZclE1X3P_BtHZ6r9vAQAA__-opWgS +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzslt9u0zwUwO-_p7DOVffJVf5263I1qIY0wVrUduMCVZOXHJWoiR1sZ2uZ-li8AE-GkizQdFtqhFCR6KXP8YmPf_nZ8gOozwkEMDl_dz6YklDkXHf-PyJvxqNLsrgDClxEOGQpKgg-ggMUXKDgAQUfKPRgRiGTIkSlhCymPJQFF9ESAptCzLNcF-EZhVBIhOABdKwThACm7DbBMbIIpWUDhQg1i5NymcXdWSbjlMkVUJhkjKuAdK1i4VGuAzIUHIHC22ui4xQDYn_7qqpxKLhGrmPBn6SkuFdEIosC4lSR25XGOtQnr4HC5fVgQJTGrAJBOrjUVsz1UUDsssdqAuLipQkpW5IUUyFXhCWJCJnGKCB2-fVbpsNPqIjIdVZso5hfdlUHHJitKVSjR2hKszlC4KypOdhX87nEOdNCWr0m18Hoaji9GY8-TDpHQAGXGOZPYf1Gn-6Lff5sL-dCRigxavQ2W7fvxNlSZHJ1eXMxnHbOnD-zE6-xE8dcZWe3ypbbtbyDzEZoNxQ43qvMrrkCroECXtfyDwoYod1Q4GSvCnjmCngGCvjd8n4-KLAb7YYC_b0q4Jsr4Bso0OseBDACuyHA6V_zpnmmzzGqTHCFW2-b579sF28ejOZYPZCUyGWI76UIy2Wq4aisKwMRKl1lnWpwwatU0eBmsdNa7DaKne1it33lHUt7rdV-e7H_K32XFEugwFHfC7kgCdPIw9WPn17H71msmzpEqFDGLIm_sKeu1GWPpyvE-A4fT1idqo9ZnauOWp1NUSk2b0ywjR1sIum1Ijlu53l84LmN5KQVSb-dZ__AcxvJafttYe-4qNqvuX-D6Gz93_cAAAD__2VFyow= query T EXPLAIN ANALYZE (DISTSQL) SELECT * FROM kv JOIN kw ON kv.k = kw.k @@ -123,7 +123,7 @@ regions: table: kw@primary spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsmt1u2zYUx-_3FMS52la5MiU7TQQUMDZ0QLo1HtJiN4MvGOnMFiyLLknH8YI81l5gTzbImtv6Q5_oQk70XSSa0uFP53_0F3MeQX5MIID3b3558-MH8j356Xb8jszvydvx9Q2Zr8n4hszvX87JazJfv5yDAymP8IYtUELwO1BwwAMHfHBgAA4MYeLAUvAQpeQi-8njdsJ19ABB34E4Xa5UdnriQMgFQvAIKlYJQgAf2F2Ct8giFG4fHIhQsTjZ3mZ-P1qKeMHEBhx4v2SpDEjPzW78829ExQsMSP_vv2R-HPJUYapinh4NCb6WRCCLAkLzM3cbhbtTl-QHcGDBHsgCF1xsCEsSHjKFUUD627E7psIZSsJXarlSAcnC3F5zd4LC5MmB_Chf_W51dxsyY3K2v65R9vuJA1KxKUJAn5x2uC4OcK2Pcbm0g8C8QmCfr8NFhAKjw-u8yG5c61cn2L9DMcW3PE5RuPQgVxP8Q307oi--ey3i6Sz_ExwYZ6sdUWfkOSPfGWViwQcMV8fYy3hmY_JjQhQuliSK5ZysJJtia9yfUfo1UK7SU5hOErrhPb506XCfTcGKK8MeFoY92Aub1pcMra4wrtdz_a5JhrYF9qpGjekiMK8Q2DPWGNrBGuPVzz2vhlj9njvoWu7RtsAua4i1i8C8QmDPKFavg2L16-eeX0Osg5477Fru0bbArmqItYvAvEJgzyhWv4NiHdTPvUENsQ57Xcs82hbXsFqqPZcSlkaEEq5mKLqGzitE94yiHXRQtBXbPbcolzyVePDpffrK_YwgRlPMn4vkKxHir4KH29vkh-PtvO0XTYRS5aNefnCd7oakYqrs0_2_JNfP86V-9BeF0aeo1lzMScIUpuHmU_i782sWq_2FRShRxCyJ_2THq95N-1erIcb322V_MbQT7aex7Zp3owuUGYrDyV8fyZVmJLQEyeVXQUKbIqHFSW5tmtChjUxog1roGVcLy6O_KIze2gd6pRmJllpYjoQWJ7m1aXJQCy1h4h0y6X_JxN9_PRxO9ksn0_1a1Deukg5aeuIOp0M5kmKj_X94oLo9sYEP1E5PXMFEtyfW4heGLT1xh9OkHEmx0TajFpZHr9sTG_hA7fTEFUx0e2IttfCiiSe2A8mrs1VuhsTKPelyJMX-24w3Znn02q2ygbrXbpW1ZPnl2So3Q2LlnnQ5kmL_bUYtLI9eu1XWUgsrmOi2ylqy_OpslY_-y9C21aLDaVLBRLdZNjFPrNytrmBS4sHNeG1WxW-lX6Zt-y3sZaLbMespiGa3cZiYJyVG3JCCeO65OAGlUdOFJeI_6iUxyjWbyES3a9ajnXImdrrmcibad66NhFJsxQ15czbpTrPFITZpT7PFTDRpejszMWL72kgoxVbckIJ41KpioWuePH3zTwAAAP__FEHMWg== +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsmt9u2zYUxu_3FASv2lWuTMlOEwEFjAUdkG5JhrTozeALRjqzBcmiStJxvCCPtRfYkw2S5rb-I0oyOpAzdReJpHT44-GnL_R5wuJzigP84d2v7y4_oh_Rz3e31yh5QO9vr25QskK3Nyh5eJ2gtyhZvU6wgzMWwQ1dgMDB75hgB3vYwT528Ag7eIynDs45C0EIxosuT-WAq-gRB0MHx1m-lMXtqYNDxgEHT1jGMgUc4I_0PoU7oBFwd4gdHIGkcVq-JnmY5DxeUL7GDv6Q00wEaOAWL_7lE5LxAgI0_PsvUV2HLJOQyZhle02crQTiQKMAkerO_VrC5tY5-gk7-PrT5SUSEnIUsmUm0Qt4lG6cyZcBGpZxVR0AkroOC_qIFrBgfI1omrKQSogCNCyffk9lOAeB2FLmSxmgon8Z1eYGwdNnB1dXFb8Nn_s1mlMx3yYzKfpPHSwknQEOyLNzHPCzHeCrfeAu6ZEfQO7VIv_6HMYj4BDtPudV8eJWvQ6s3jXwGbxncQbcJTv7JYU_5IsJefXyLY9n8-pP7ODbYrYT4kw8Z-I7k2LDwiOEy_2FU_Es2sTnFElY5CiKRYKWgs7gaNxfUfotUC6zQ5gOErphA5a7ZLzNpmbGjWGPa8MebYVN2m860qxyrjdw_X7TqXWuA_I3LXSuR96sc0SPzpET1DmvffZ6LQTDH7ijPnvVgtEB-XkLweiRNwuGp0cwvBMUDL999votBGM0cMd99qoFowPyixaC0SNvFgxfj2D4JygYo_bZO2ohGONBn7tquegAfNwsFwOXIJpFiCAm58B7-GrhGOkRjtEJCkfDAeIdiJxlAnaOYg4_eVgQhGgG1boItuQh_MZZWL6murwtx5X_XUYgZNXqVRdX2aZJSCpVRzn_JblhlS_toz-rjT4DuWI8QSmVkIXrL-Fv7q9oLLcnFoEAHtM0_pPuz3oz7N_dHkL8UE77m6bNtv_SVs5507oAUaDYHfz9kVxoRkIUSM6_CxLSFQmpT3Jr04SMbWRCOmihZ5wWqqM_q43e2gW90IxEixaqkZD6JLc2TXa00BIm3i6T4bdM_O3Pw-5gXzmYbGvR0DglHR3piU84HdRI6o32_2FBdXtiAxfUTk_cwES3J9biF8ZHeuITThM1knqjbYYWqqPX7YkNXFA7PXEDE92eWIsWnnXxxHYgedNb5W5IrDyTViOp999mfDHV0Wu3ygbue-1WWUuWn_dWuRsSK8-k1Ujq_bcZWqiOXrtV1qKFDUx0W2UtWX7RW-W9XxmOLbU44TRpYKLbLJuYJ1aeVjcwUXhwMz6bTfFb6ZfJsfUW9jLR7Zj1CKLZZRwm5onCiBsiiH3NxQEonYouLNn8e7UkRrlmE5nods169o6aiZ2uWc1E-8m1kVDqrbghX84u1Wm2OMQu5Wm2mIkuRW89EyOOr42EUm_FDRHEvVIVC13z9PmHfwIAAP__GzeRXQ== # Verify execution. statement ok diff --git a/pkg/sql/logictest/testdata/logic_test/explain_analyze b/pkg/sql/logictest/testdata/logic_test/explain_analyze index 8e5385a99453..b78aee77c0e0 100644 --- a/pkg/sql/logictest/testdata/logic_test/explain_analyze +++ b/pkg/sql/logictest/testdata/logic_test/explain_analyze @@ -95,6 +95,8 @@ regions: │ KV contention time: 0µs │ KV rows read: 4 │ KV bytes read: 32 B +│ MVCC step count (ext/int): 0/0 +│ MVCC seek count (ext/int): 0/0 │ estimated row count: 1,000 (missing stats) │ table: kv@primary │ spans: FULL SCAN @@ -109,6 +111,8 @@ regions: KV contention time: 0µs KV rows read: 3 KV bytes read: 24 B + MVCC step count (ext/int): 0/0 + MVCC seek count (ext/int): 0/0 estimated row count: 1,000 (missing stats) table: ab@primary spans: FULL SCAN diff --git a/pkg/sql/logictest/testdata/logic_test/explain_analyze_plans b/pkg/sql/logictest/testdata/logic_test/explain_analyze_plans index 91c2ebe01610..bab620b6ba26 100644 --- a/pkg/sql/logictest/testdata/logic_test/explain_analyze_plans +++ b/pkg/sql/logictest/testdata/logic_test/explain_analyze_plans @@ -108,7 +108,7 @@ regions: table: kw@primary spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsm99u4jgbxs-_q7B81NGECXagpUgjMTOab9XZFkb9s9JohSqXeGkEJIxjSrtVL2tvYK9slVCmkBA7yXRqN85ZE2N48_Pjx_Hrt_cw_D6FXXj2-fjzp3MwuXk3sQC5Ge9Nlu8mb8D_TwcnYHIDvgyO-mCyBIN-_BHwHkTt4LfTwcVX8PFbfBNa0A9c2iczGsLunxBBC2JoQQdasAUt2IZDC85ZMKJhGLDoI_dxhyP3FnabFvT8-YJHt4cWHAWMwu495B6fUtiF5-RqSk8pcSmzm9CCLuXEm8Y_M7npzZk3I-wOWvBsTvywCxp29MODBe-CXhTG738A7s1oFzT__SdcXY8Cn1Ofe4GfamLBMgSMErcLHjtf3XG6vtUBH6EFZ-QWzOgsYHeATKfBiHDqdkEzbrsifHRNQxAs-DwKIQo4_s71DQSHDxZcXa04rJ_z6g5ck_B6-wl70eeHFgw5GVPYRQ9WOXD7CXDLNDgbVRodzkT39D0BcymjbvJ73kY_nOtTO0bhhLIx_RJ4PmU2Suh3Sv_iez309s175o2vV38-jYDVi4aD3tLRIg1cRDJqC79PAaezOXC9cAIWIRnT0qCfIDpF9PdhPGZ0THjAbNROjY0FByuOj2L70P922R-cX_Yvjo_3eijicHZxstfD0V-fBhf988e_M4D8Yvm0fk4-Yjy4-XN4zi5OLo8iQE50dUp9l7JYQaCH7Z7zjNCegLRzAFn4u5DspNEPGsHcxgmdlA27nRn2_lbYKL-DIvnSY-OG7VTXQVFZdAc5Fp9qo8OZ6F5w8UGVWnwk-ttcfPartfgUlo9k8UGvffHB-a0I53Bxp2G3qmtFqCy6Tg4XrzY6nInuBV0cV8rFJfrbdPGDarl4YflIXBy_dhd38luRk8PFWw27XV0rQmXRHeZw8Wqjw5noXtDFnUq5uER_my7eqZaLF5aPxMWd1-7irfxW1Mrh4u1GdY0IlQXXlnt4w0aA-C5AIODXlFUXIs6E-IJu3qqUm0uUuOnmh9Vy88Lykbh567W7ueSE55SG88APaSK9v_ubmxEt6o7pim4YLNiIfmXBKP6Z1eUg7henuFwa8lUrXl0c-eumkBMuOh74lZOouTKN_NF3MqP3KV8GbAKmhFN_dPcj_PX9JfH49oO5NKTMI1Pvb5J-6nW3R8MeUe8mfuyNprVz_2iLn3ndOqNhhCLZ-fmRIEcxEyRg0nkWJqgwk1on6YmvWidKmKACZoi1M0Nx9J3M6I0d0IQZvjwTJWYoYVLrRGaGhjDBSSbNTSbbSJrJzo4QaEun18odU0QcPWqauDZKmLRrJinbqHWSZmKkTlpCK00gSXZuCzvj_W0j1u6tdL9kgqHCchAjyd6NvoYBVZ5g0HBEzUwwSCa-ap0o2XsdlEwwVFgmYiTZu1E9zFAcvfIEg4YjamaCQTLxVetEiRl2hC-2h-IEw2HJBEOFNSZGIsha6JF0kYRv5MZRzMTMBIOEiZE6QanTPFGGwYzlBRU5zTNFJ0XOCGsmkoSGHlsQWfyqB1XLya86-6BG6akjvTr9IGFi5GZVwkSQ1dDEESXxqx5UNY4omfyqUxBqlJ46rdx6b0YtcRICpQ726iyEhImZxRMyKNkbND1yM5L4zUxEyKCo3nWrgSIuV1DNRM3SW9dAFGVi5qa1Lq0oDkX3chnZ5DdzUOtCiKJMzNy01vUVxaHoXjMjm_xmDqq4GgJJyiFQXQ-RRlq6IMJgKKo3aDpCEaQ3NEnP1DURO_5_ra6JSDPRuyZCRyaqMxFq5k7pmgiDodRKKZTe0GMzgvWuiVDjiHVNRFEmZmYiZFBqpRRKb2jiiOKaCCypicB1TUQaaV0TURyK6g2ajlDMLLSQQdG9egbXNRHDh-HD__4LAAD__xCkSa4= +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsm99u4rgXx-9_T2H5qqMJE5yElkYaiZlqfqvOtjDqn5FGK1Sl5CyNgIRJTGm36mPtC-yTrRLKFAjYMdNZu9h3JI6Tk4-Pzzc-Pjzg7PsQ-_j808mnows0uH03sFBw298bTN8N3qD_n3VO0eAWfe4ct9Fgijrt4hL0HuXt6LezzuUX9PFbcRJbOE5CaAcjyLD_BybYwg62sIst7GELN3DXwuM06UGWJWl-yUPR4Ti8w37dwlE8ntD8dNfCvSQF7D9gGtEhYB9fBNdDOIMghNSuYwuHQINoWDxmcNsap9EoSO-xhc_HQZz5qGbnD-5MqI9auRm_f0U0GoGP6v_8nc2Oe0lMIaZREpea0mSaoRSC0EdPna_vKcxPNdFHbOHTr0dHKKMwRr1kElO0B3fUjmL6xkf1wsLZBQCDTReMgjs0glGS3qNgOEx6AYXQR_Xi7tcB7d1AhpIJHecvkV9fWDU_QXD30cKzoxnJOanre3QTZDfLjFr59V0LZzToA_bJo7Ud-v0V9NMyepsY-Ez4zkb4z_dJ0hBSCFfv8zZ_cKWr1ozjKaR9-JxEMaQ2WZlDQ_iT7rXI2zfv06h_M_v5PIZWKx9QuIPepDxkLJJ5W_Z9iCiMxiiMsgGaZEEftgb9DNEV8eAP_X4K_YAmqU0apbGxcGfG8cldP7S_XbU7F1fty5OTvRbJOZxfnu61nPzXUeeyffH0ewOQX-w-3s-5DxuPU_85POeXp1fHOSA3PzqDOIS08CDUcuyW-4LQnoE0KgCZxOuQrKXRTmrJ2HZW_GRbsxsbzd5fMptUj8GEL3-2U7NdE4OrCqAA_IMKAmjgiwggkSOAZKcEkOPBiwK4v1sCKOw-HAEkr10AnerBzKmgJG7N9kwwq6okAvCbFZTEwBdREkeOkjg7pSQcD15UkoPdUhJh9-EoifPalcStHszcCkri1eyGCWZVlUQA_mEFJTHwRZTElaMk7k4pCceDF5WkuVtKIuw-HCVxX7uSeNWDmVdBSRo1E8qq6ogA-gZfR2o2QUEcIoISegOpGYaqiuLJURRvpxSF48uLinK4W4oi7D4cRfFeu6JwdvzOIBsncQYr2z3r71zPaUHYhxndLJmkPfiSJr3iMbPDTtGvSDeGkNFZqzM7OI7nTRkNKGu76FdOovosaFS3vrnR-hjoNEkHaBhQiHv3P8yfn58GEV1-sRAySKNgGP0VlN963u0p5Pcgui1ee6FpHvt_tBXvPG8dQZajWO388kiIK5kJYTBpvggTIszE-El54sv2EylMiEAwdJQLhmzrmxut13ZAV4Lhf89ESjDkMDF-wguGmjBxVpnUF5ksI6mvdnaZQD2VPivXTBG29aSuozZymDQMk1LYMH5SZqKln3jMULqCZLVzg9nZ2V8OxMp9le5vmWDYYXdgI9m8Gn0NAyo9waDgiOqZYOBMfNl-ImXtdbBlgmGH3YSNZPNqVI1gyLZeeoJBwRHVM8HAmfiy_URKMGwyP2wP2QmGwy0TDDvsY2wkjKyFGkkXjvlaLhzZTPRMMHCYaOknpLSbx8ow6CEvRGQ3Txc_EdkjNEw4CQ01liA8-2UPqpKTX3b2QY6nl7b0TPqBw0TLxSqHCSOroUhE5Ngve1DlRETO5JedgpDj6aXdyqXvZuKxkxCktLFnshAcJnoWT_CgbF6gqZGb4divZyKCB0X2qlsOFHa5gmwmcqTX1ECIMtFz0WpKK8ShqF4uw5v8eg6qKYQQZaLnotXUV4hDUb1mhjf59RxUdjUE4ZRDEFMPUUa6dUGExlBkL9BUhMJIbyiSnjE1EWv-v2ZqIspM1K6JUJGJ7EyEnLmzdU2ExlCMpwilN9RYjDhq10TIiYimJkKUiZ6ZCB4U4ylC6Q1FIiK7JsLh1EQ4piaijNTURIhDkb1AUxGKnoUWPCiqV884piai-9h9_N-_AQAA___Lkw6x # This query verifies stats collection for the hashJoiner, distinct and sorter. query T @@ -166,7 +166,7 @@ regions: table: kw@primary spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsm99u2zYUxu_3FASvWkyuTEp2HAMFgv4Zlm6LhyQYMAy-UCwuFmxLrkjHyYI81l5gTzZIrurItHikpAs50XeRFdmHv3N4PuqjdI_55zke4ouPP398f4k-nF5cnp69v0SvZus369foh_PRL2h2gz6NTs_QbI1GZ2h282aG3qLsPBqdf_h4jt79nh9hB8dJyM6CBeN4-Acm2MEUO9jDDvaxg3t47OBlmkwY50ma_ct9fsFpeIuHXQdH8XIlso_HDp4kKcPDeywiMWd4iC-Dqzk7Z0HIUreLHRwyEUTz_GdmNyfLNFoE6R128MUyiPkQddzsh0crMUQnWRg__YZEtGBD1P3nb745niSxYLGIklg6lSZrjlIWhEP05eKrO8GKjwboHXbwIrhFC7ZI0jsUzOfJJBAsHKJufu4qEJMp4yhZiWUWQhZw_p3FBwSPHxy8OdpwKMZ5dYemAZ-WR3iS_f_YwVwE1wwPyYPzNHD9HXBrGZxLHqOjbUNHK9Ftv2cVJ2nIUhaWvmmcXQn9yx7-PwZ8-imJYpa6ZKdw5-xP8eqEvH6bRtfT_K8SeHbLJisZsopedo5_niPBFksURnyGVjy4Zk-GuwXnNam5DxEXUTwRLulJ2TBiXM2Kxn9G0ajo0K6ZdLYj7zXJ-kWSCpa6VMr596YNq18jofvSmY9lb07Pkk6ydL2dhFYMGoy8Vxn5USlyUr_1E1gzXdpxPVtUswG6oxqqWULXctUkL6yapC2qCdTcVjX7ZurCc1SzWdEoVZOYSadKNYGsF6op5dxw1aT1GyitoT1ex_Vt0Z4G6AY1tKeEruXaQ19Ye2hbtAeoua32HJnZXZ-jPc2KRqk91Ew6VdoDZL3QHinnhmuPV7-BejW0x--4PVu0pwG64xraU0LXcu3xXlh7vLZoD1BzW-0ZmNldn6M9zYpGqT2emXSqtAfIeqE9Us4N1x6_fgP1a2hPr2OL8jQA14OVp-MSFMQhIigRU5baokH-C2uQ3xYNAqpvq0HHZnbZ52hQs6JRapBvJp0qDQKyXmiQlHPDNQjYiDtnfJnEnO12g73f3M0SzsJrtqkOnqzSCfs1TSb5z2wOR_l1uZUZMi42Z-nm4DQuTnERCNW2139Jrovzblc_-uPK6GMm1kk6Q_NAsHhy9zX84vN1EInywELGWRoF8-ivQB51cdkXmZmw6CYf9qNThd58PZePuTi7YDxDsXvxt0dCepqZEAWTwTdhQpoyoeRQJxKTIxuZkAbNkBrXDNXRH1dGb21Cd5rhyzPR0gyBIieHOgGaoSVM6C6T7mMmXglJd_diTwnUN2lZuWeKqKMnVq4XACZWrhfUTKh3YCIxsfKezFe20p66lfaUF_fLPHcv7qubeLmTdY1b0h490Z1ocS2pkVRPr_9DQrW7EwZm1E53AmCie7Wh5cZt8ER3osVlokZSbXmY0QzV0Wt3JwzMqJ3uBMBEtzuhpRkeKxe2pKteUxO1-13tT7S4ygAmCtfDDNMGil_3msHEpNppUUBQrPQoiOSBlzsqBTqq2i7u27hgJ4AXZmWZqZnYOfUAb73aFTHjPgaqc90OhpGT387liOSEHzwMgImdz22omSisEUM6IlDnum0MPR0RgKLbx9BT6ertPdIHlt3SBt_ByACY2Pn4BgSlejliiLujjt9SIwOAYufdlLR3WO6oA6CjSm77wcggktt-MDIAJrqnnol1YufjHdDkMWpf5QnxW2lk0CbvzVlyKwMw0W1kaOmIABM7n_GAJk-1O2JGR4Tit9LIoOr9QwrsH1Jp__BgZABM7DQyICh2LkfUUBTuiBnuDhS_7rspPUmVdhDLHdUHOqr6rRMrjQwque1GGRkmMrFz6qmZ2GlkQJPHzuUIAMWofZV98QNbCFbetKuZ6DYy9NQ5sH9op5EBTB7dj3kYCaXaHTGkI6r3Dymwf0jVb-vYaWQAb7rZuXIAoNhpZADvuln5mAcExaiX_vetp9Qv63nAy3qeZLdbaGSMH777NwAA__-E3RxV +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsm9Fuo0YUhu_7FKO52lXxwgzYcZBWijZJ1Wy7cZVEK1WVLwhMY2QbvMw4ThrlsfoCfbIKvKyDMXMg2Yaph7vYgHPmO2fOP_wDD5h_mWEXX57-enp8hU7OLq_Ozo-v0Jvp6t3qLfrpYvQJTW_Rx9HZOZqu0OgcTW_fTdF7lB5Ho4uT0wv04ffsEzZwFAfs3Jszjt0_MMEGptjANjawgw3cx2MDL5LYZ5zHSXrKQ3bBWXCHXcvAYbRYivTrsYH9OGHYfcAiFDOGXXzlXc_YBfMClpgWNnDAhBfOsn8zvT1aJOHcS-6xgS8XXsRd1DPTfzxaChcdpWH88hmJcM5cZP3zN19_9uNIsEiEcVQ6lMQrjhLmBS76evH1vWD5V0P0ARv40-fjY8QFWyA_XkYCvWF3wgwj8dZFVhbh-gTGplUnzL07NGfzOLlH3mwW-55ggYus7NevPeFPGEfxUizSQaTnZ1HlXxA8fjTw-tOaZE7q-h5NPD4pMjpKzx8bmAvvhmGXPBrPQz_YQr8qozfJU_i0g78Nn1bC3_zOMoqTgCUsKPzSOL0SOmVHBn_2-ORjHEYsMcnW5JmxP8WbI_L2fRLeTLK_Cqljd8xfltMko5ce419mSLD5AgUhn6Il927Ys-FuwNlNqvYk5CKMfGGSfikbSoyrWdE4LygaGR1qqUlnM_J-k6xfxolgiUlLOf9RtWENaiR0VzqzsezM6XncixemvZXQikGDkfcrIz8oRE7qiweBddukPdPulLuucjeAf1BDuQvwO-UGlJu8snKTfVFuoGo3yj1QU5teotzNikaq3ERNOlXKDWQ9V-5SzhVXblq_BdMa-mf3TKfTv7r61wD-sIb-FeB3-gfoH31l_aP7on9A1W7070DNDv8S_WtWNFL9o2rSqdI_IOu5_pVyrrj-2fVbsF1D_5ye2e_0r67-NYB_WEP_CvA7_QP0z35l_bP3Rf-Aqt3o31DNDv8S_WtWNFL9s9WkU6V_QNZz_SvlXHH9c-q3YKeG_vV7nfrVVb8G6Puw-vVMgrwoQATFYsKSTgfr6qDzyjro7IsOAvW70cFDNTv9S3SwWdFIddBRk06VDgJZz3WwlHPFdRDYmL1gfBFHnG13g52_bKUJZ8ENW1cHj5eJz35LYj_7N-uPo-y6zFYOGBfro3T94SzKD3HhCdk26H9JzsJZt6sf_WFl9BETqziZopknWOTffws__37lhaI4sIBxloTeLPzLK486v-yrUPksvM2G_eRQrljfjmVjzo_OGU9RbF_8_ZGQfstMiITJ8LswIU2ZUNLVSYnJgY5MSINmSJVrhvLoDyuj1zahW83w9Zm00gyBIiddnQDNUBMmdJuJ9ZSJXUBibV9sS4E6Ki0rd0wRefREy_UCwETL9YKcCbU7JiUmWt6TOdJW2pe30r704kGR5_bFA3kTL3YyS7kl7cEz3Yk9riU5kurp9X9IaOvuhIIZ1dOdAJi0vdpo5cZt-Ex3Yo_LRI6k2vJQoxnKo2_dnVAwo3q6EwCTtt2JVprhoXRhSyz5mprI3e9qf2KPqwxgInE91DBtoPjbXjOomFQ9LQoIipYeBSl54MWOSoGOKreLBzou2AnghWlZZnImek49wFuvdkXUuI-B6rxtB0PJya_ncqTkhHceBsBEz-c25Ewk1ogiHRGo87ZtjHY6IgClbR-jnUqXb--RAbDsLm3wdUYGwETPxzcgKNXLEUXcHXn8mhoZABQ976ZKe4fFjjoEOmrJbe-MDFJy2zsjA2DS9tRTsU70fLwDmjxK7as8I34tjQza5L05TW5lACZtGxmtdESAiZ7PeECTp9odUaMjQvFraWRQ-f4hBfYPaWn_sDMyACZ6GhkQFD2XI3IoEndEDXcHir_tu6l2klraQSx2VAfoqPK3TrQ0MmjJbVfKyFCRiZ5TT85ETyMDmjx6LkcAKErtq-yKH9hC0PKmXc6kbSOjnToH9g_1NDKAydP2Yx5KQql2RxTpiPL9QwrsH1L52zp6GhnAm256rhwAKHoaGcC7blo-5gFBUeql_13rKfnLejbwsp5dsts1NDLGjz_8GwAA__8EUOFJ # This query verifies stats collection for WITH ORDINALITY and the hashJoiner. query T @@ -220,7 +220,7 @@ regions: table: kv@primary spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzcUUFv00wQvX-_YjTHT4sSOzaHPblAUQ2lRkkEQsiHjXeUrmLvurvrkijKz-IP8MuQbSqatDENiAvHeW_fzpv3tuhuSuQ4O788fzmH_-H1NHsHq1v4mM4vIJu-Sq_OLtP5JzibgWBHiAUy1EbSlajIIf-MAeYMa2sKcs7YFtp2D1K5Rj5mqHTd-BbOGRbGEvIteuVLQo5zsShpSkKSHY2RoSQvVNl9u7pNaqsqYTfIcFYL7Tg8Q4ZvP4BXFXEYf_vq-rkw2pP2yugHlDVfHFgSkkPcI4uNpzsoGsMLZFiJNVRUGbsBUZamEJ4kh55bCF9ckwPT-LrxHFqX3ad3QIz5jmE__bjSebEk5MGOPT2JzEqlRan8ZhTsB0FrKpqHx_2BsfAUY_crCv-1iia_WdHkb1cUHTX200-jjZVkSe6ZyVvlr548ct2FcNdvjNJkR9H-dVlrNQlYErJkwpKIJTFLniM7dvZQVy3nbkrwVNUglVtB48SSnlxleDyy-JQup-Rqox0dRvfoz-M2L5JL6vN3prEFvbem6Nb0Y9bpOkCS8z0b9EOqe6o1eF8cDIqjPXFwKA4HxZPhzZMTNoeH4mhQHB9sznf_fQ8AAP__6tMgPQ== +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsUcFu00AQvfMVozkBWhTbcTjsySUUNdA2KImKEMph4x2lq9i77u66JIryWfwAX4bspaJJm9CAuHGcN_Nm3ry3RndTIMfx6flpfwIv4d1oeAGLW_g0mJzBcPR2cHlyPph8hpMxCLanMUOG2ki6FCU55F8wxinDypqcnDO2gdbtwEAukUcMla5q38BThrmxhHyNXvmCkONEzAoakZBkOxEylOSFKtq1i9ussqoUdoUMx5XQjsMrZPjhCrwqiUP0_ZsLdW60J-2V0Q9a1nx1YElIDr2AzFae7qA0gjfI8OKq3wfnqYLc1NrDc1r6jtL-BYeolRUGiBb7BkqxhJJKY1cgisLkwpPkELbPhM-vyYGpfVV7Ds18K-sO6OF0wzBUP31yXswJebxhT_dyaKXSolB-1Ym3raQl5fVDe_5CWHKMsPshJ_9D3vWy-4chd_91yOleYb_01NpYSZbklphpw_zdyCPfnQl3_d4oTbaTbn83bKRmMcsSlnVZlrKsx7LXyPa9fSirpuduCvBUViCVW0DtxJyeHGWy37LeMVmOyFVGO9q17tHNUeMXyTkF_52pbU4frcnbM6EctrwWkOR86MahGOjQagTeJ8cHyekWOd4lJwfJ3cOXu0dcTnbJ6UFyb-fydPPsRwAAAP__PmxHoQ== # Verify that EXPLAIN ANALYZE on an unsupported query doesn't return an error. statement ok @@ -273,7 +273,7 @@ regions: table: kv@primary spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzslduO2jwQx--_p7DmapGMcuRTlSvailarHqjYFb2ouDDxiFokdtZ2OBTxWH2BPlkVh2w3sIf0sohLzz__zMxvJs4OzF0GCdyMPo7e3hK2Wlwte2Q8HU3IVY-8m4w_keUKKEjF8TPL0UDyDQKgEAKFCCjEQGEAMwqFVikao3T1yM4ZrvkGEp-CkEVpq_CMQqo0QrIDK2yGkMAtm2c4QcZRez5Q4GiZyFya5WpYaJEzvQUKNwWTJiF9r0o8Lm1ChlUZH6bEihwT4v_6aepzqqRFaYWSJ5JWa0M0Mp6Qg3m-tdiEXpE3QCFnG5JjrvSWsCxTKbPIE-I7bc5s-h0NUaUtqhKqgt07m0AAsz2F-nRo2Fi2QEiCPX0Cyh8WpVSao0be4jDbP4Ltq5BcrVF7gzaz19P3V8Ogd8-oooUbTMtTHs81WmnmLiMW84JwYZakNGyBnTkMnuQQtjgE3ZcjeHk5vLDvReewHmF3LGEHLFHfi88BS9QdS9QBS9x3X88_jyXujiXugGXQPwcoL_x2JmgKJQ0e3bSPv9mvbmDkC6yva6NKneIXrVKXpj6Onc8FOBpbq0F9uJZOcgU-NAfPmv9vmf1jc_g3mV0rriuQaNdKL0nGLMp0ez-8Jr5mwrbHytGgFiwTP9jpzBvbYfApihUeht9IzQY0Wr0FjZqjqX4tDx_wOy9CG0l0QXKMJL4gOUYyuCDZz_b__Q4AAP__hj_5Cg== +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzslctu2zoQhvfnKQazsgEaknw5KLhKG6RF0KYunMBdFF4w4sAlLJEKSfnSwI_VF-iTFaKsNHYuVfdacmZ-zczn35h7dHcZcry--HRxfgNiveyt-jCdX8yg14f3s-kVrNbIUBtJn0VODvk3TJDhEBmOkOEYGU5wwbCwJiXnjK1K7oPgUm6RxwyVLkpfhRcMU2MJ-T165TNCjjfiNqMZCUk2ipGhJC9UFtqs1meFVbmwO2R4XQjtOAyiqvG09BzOqjE-zsGrnDjEv366-p0a7Ul7ZfSTlDUbB5aE5HAQ3-48NaE38A4ZXs3Pz8F5KiA1pfbQo62PlPZ9DnGYsC4gWr1UkIst5JQbuwORZSYVniSHOHz9Vvj0OzkwpS-qJar6MFUTSHCxZ1i_DsicF0tCnuzZC1j_0Cy1sZIsySOSi_0z4L8qLc2GbDQ5pv52_qF3lvQfKFe8aUtp-ZToa4tWOXeXgae8AKncCkonltSaw-RFDsMjDkl7eyV_t1c0HESjzmAV2GF7sMMWYEeDaNyBrcCO2oMdtQA7HoR_cAeWj9uDHbcAOxl0WFsc8Bm5wmhHJxfn-S_H1SUiuaT6bDlT2pS-WJOGNvVzGnQhIMn5OpvUj0sdUmHAx-LkVfH_R-L4VDz8l85hlbAVavIbY1eQCU863T38_E18I5Q_NoYkR1aJTP0QT13TyA7WSUmt6WCfJtV4qMnVPmqyObnqxD4uiFsb4RjJqENyimTcITlFMumQ7Bf7_34HAAD__-kfW5M= # Very simple query to make it easier to spot regressions when rewriting results # in test files. @@ -300,7 +300,7 @@ regions: table: kv@primary spans: [/0 - /0] · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyMkMFq6zAQRffvK4ZZC2JvBQ_Ce7g0pG2KE9JF8UKRhtTYllxpnCYEf1Z_oF9WLJWUUgpd3ntHRzP3jOG5RYnr4qb4v4EGrsrVLTQHeLguygIa-AsZCrTO0J3qKKB8xBwrgb13mkJwfrLOcWBhjigzgbXtB57sSqB2nlCekWtuCSVu1K6lkpQhP5vAhljVbcQ2h3nv6075Ewpc98oGCbMsTq0GljDPUeByC1x3JCF7ew1Ja2eZLNfOfou8ewngSRkZr1huYXdiuljwDwV26ggddc6fQLWt04rpku0U6ycK4AbupxUmSGR-GtUoMKmPiwOrPaHMR_H7VkoKvbOBvhTyEzkbK4Fk9pSaD27wmu690_GbJFfxXTQMBU5pnsTCpmisxj_vAQAA__9rTqSD +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyMUc1q4zAQvu9TDHPaBUHsq2AhbPDSkKYpTkgPxQdFHlJjW3KlcZoQ_Fh9gT5ZsVRSSgn0-P3oG803Z_TPDUpcZ7fZbAM1_M9XS6gP8HCT5RnU8BcSFGhsSXeqJY_yEVMsBHbOavLeupE6B8O8PKJMBFam63mkC4HaOkJ5Rq64IZS4UbuGclIluckYXBKrqgmx9WHauapV7oQC150yXsIkCa5VzxKmKQpcbIGrliQkb68-Ym0Nk-HKmm-Ssy8eHKlShi0WW9idmC4U_EOBy-1sBp6pA217w_CbjjypDP-REIdHA1F9zdCqI7TUWncC1TRWK6ZL-k6xfiIPtuduXGL0h199EsUgMKKPzjyrPaFMB_HzXnPynTWevlR6LTkZCoFU7ineztveabp3VocxEa7Cu0CU5DmqaQRzE6WhGH69BwAA__821Lg1 # Test a query that has a subquery and a postquery. statement ok @@ -389,6 +389,6 @@ regions: actual row count: 1 label: buffer 1 · -Diagram 1 (subquery): https://cockroachdb.github.io/distsqlplan/decode.html#eJysUuGK2zwQ_P89xbK_EtARO8cHRb8uLSmEpE5JcoFSwqHIi0_Ullxp0yQNeay-QJ-s2I7bM0fTlvanZjTS7OycMHzMUeIkWY4XK5gkqznoR5OnsB7N7sdL6MUCesvxbPxqBYWxvbIPrxfzN1AqT5b7fRRoXUqJKiigfI8xCvwfNwJL7zSF4HwFn-pLk_SAMhJobLnjCt4I1M4TyhOy4ZxQYuJuXDkYosCUWJm8fpQOpHdsnAU2BUmIvn4JKHCrWD9SALfjcscSIhTo3f4HEOPmLLA5Xf4LrDJCeXsWTzzF1z2t1DanBamU_CDqOmtiuCu9KZQ_osBlqWyQcIMCZ6YwDFUg03XX-HQN2lkm-3ym6RrqETypVLbi7ZGphV7ASxRYqAMUVDh_BJXnTiumVEJUc38RS_wnsYyyzFOm2PlB3E1llLx7SOarh-R-NuvdxVVJ_v0Khx2vv6jVgkLpbKCOz5-9HJ03AinNqKlucDuv6a13uv6mOc5rXQ2kFLhhb5vDxDZUZfCpOL4qHl4XD6-Ko664HqWeCi3x3vkPkCsmq4_fk2_xvTLc3UlKgbxRufmsni-slV1Kqsl8oktRW6pta8s1jW3ZgkJQWedC9LtF2Jz_-xYAAP__g4SOVg== +Diagram 1 (subquery): https://cockroachdb.github.io/distsqlplan/decode.html#eJysUtFq20oQfb9fMcyTDRssOVwo-5Q0uGDiyMV2DKWYsF4NyhJpV90d1XaNP6s_0C8rlqw2IsRtaR_nzJzZM2fPHsOnHCWOk_lotoBxspiCfjR5Csvryf1oDr1YQG8-moxuFlAY2yv78G42vYNSebLc76NA61JKVEEB5UeMUeD_uBJYeqcpBOeP8L4eGqdblJFAY8uKj_BKoHaeUO6RDeeEEhN34crBEAWmxMrk9VLakq7YOAtsCpIQffsaUOBasX6kAK7ismIJEQr0bvMTiHF1ENhUp_cCq4xQXh7EM03xeU0Ltc5pRiolP4i6yhobrkpvCuV3KHBeKhskXKDAiSkMw9GQ22VX-O0StLNM9uVNt0uoT_CkUtmS1zumFnoDb1Hg3fLmBgJTCdpVlqFHWx4Yy30JUa2xGSB6em2gUFsoqHB-ByrPnVZMqYSo3v4XxsZ_Yux1lnnKFDs_iLu-XicfHpLp4iG5n0x6V_ExZv8-BMOO1l8Ec0ahdDZQR-drm6PDSiClGTXhD67ymt57p-tnmnJa82ogpcBN97IpxrZpHQU-J8dnycPz5OFZctQl16fUV6El3jj_BLlisnr3w_kW3yjD3T9JKZA3Kjdf1MsPa2mnmGsyn-kU9bbV5r3tNZlvuwWFoLLOQPS7QVgd_vseAAD___Xaogg= Diagram 2 (main-query): https://cockroachdb.github.io/distsqlplan/decode.html#eJyMj89K80AUxfffU1zOqoWBL9nOTiRCoLbSVjeSRZxc2oF0bpy5wULJY_kCPpk0I4gLweX53Tl_5oL02sOiXu-q7Z7q9X5D7uj7jp5uVo_VjhalocWuWlW3ezr5sBiWdLfd3NPQRg66XMIgSMfr9sQJ9hklGoMhiuOUJF7RZX5Qd2fYwsCHYdQrbgycRIa9QL32DIteXNuTkzEoFf8LGHSsre_nYD6zG9VLIPUntlR8vCcYvLTqjpxIRh1GtXR1RXn7BiWaySCrr96k7YFhy8n8fduW0yAh8Y9RvyUXU2PA3YHz_5OM0fFDFDfXZLmZfTPoOGm-llnUIZ-mZvr3GQAA__9Sm4hi -Diagram 3 (postquery): https://cockroachdb.github.io/distsqlplan/decode.html#eJy0k9Fu2jAUhu_3FEfnCiRLJNCLyVd0E0gpWTJBys3EhXEOrbdgZ7ajFSEeay-wJ5sSt9pY1Who6x3_b__Hn3-TI7qvFXJMstVsWUCSFTnIe1WVsL5Ob2crGMQMBqtZOntfwF7pQT2E-TL_ALWwpP1wiAy1KSkTe3LIP2GMG4a1NZKcM7a1jt2GpHxAHjFUum58a28YSmMJ-RG98hUhx8pIUYGTQsO22e3IQjSKkGFJXqiqG583nsN0jAzpgWTjldHg1Z44RD--O2S4FV7ekwPT-Lrd2-at-fbLiHFzYhjUI4fz4o6Qxyf296xzVXmyZEfxOWDwOUxjSFaQ5QVkt2n6KrzjS3hvjNJLEiXZ0ficuDjUxCGdzQu4zooEbvIkQ4bhgae1VXthD8gwNeZLU8NnozQY3d4Q2eN7tL-6w6FFb5mftPOiqs5vvFg_09JoT_p5OYt1NxAsiTJMXaxhe_D0ZL2Fd_9QbfRitZNLqg1_W7LWWFC7QByPJuct_3_Gq0sYl-Rqox2dQb00OTptGFJ5R-Hzdaaxkj5aI7tjgsy7XGeU5HxYjYNIdFhqAX8Px73hcX943Bue9IcnveGrP8Kb05ufAQAA__9GX6z9 +Diagram 3 (postquery): https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lMGO2jAQhu99itGcQLJEAnuofNrtipWyZJMKslwqDsYZdt0Ndmo7KgjxWH2BPlmVmFVLV6BStTfm9_zjb_it7NB9qZBjks3G0wKSrMhBPquqhPlN-jieQS9m0JuN0_FtAWule3Uf7qb5A9TCkvb9PjLUpqRMrMkh_4QxLhjW1khyzthW2nUNSblBHjFUum58Ky8YSmMJ-Q698hUhx8pIUYGTQsOyWa3IQjSIkGFJXqiqG583nsP1EBnShmTjldHg1Zo4RN-_OWS4FF4-kwPT-Lrtbf3WfP0pxLjYMwzVgcN58UTI4z37c9Y7VXmyZAfxMWDQOVzHkMwgywvIHtP0v_AOL-G9N0pPSZRkB8Nj4mJbE4d0fFfATVYkcJ8nGTIMAV_XVq2F3SLD1JiXpobPRmkwut0Q2SGP9ld3ObToLfNr7byoquONJ_M3tTTak37750zm3UCwJMowdTKH5dbTq_QePiDDh_ntLThPNUjTaA892viB0r7PDw8oNBC9nGr423Cik-GMLgknPHyy1lhQq7BzPBgd5_TvGa8uYZySq412dAR1anK0XzCk8onCB8CZxkr6aI3srgll3vk6oSTnw2kcikSHoxbwV3N81jw8bx6eNY_Om0dnzVe_mRf7dz8CAAD__4iLwK8= diff --git a/pkg/sql/logictest/testdata/logic_test/inverted_index_geospatial b/pkg/sql/logictest/testdata/logic_test/inverted_index_geospatial index 7bab56f6bc7f..6f16e52e28b9 100644 --- a/pkg/sql/logictest/testdata/logic_test/inverted_index_geospatial +++ b/pkg/sql/logictest/testdata/logic_test/inverted_index_geospatial @@ -78,7 +78,7 @@ regions: table: geo_table@geom_index spans: 31 spans · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzMVeFO40YQ_t-nGM0fQHWVXdukYatKKWDatIUgJ2qF6ggt9jRY2F6zu7kzQnmse4F7spNt4AhRDDn-XH44mm_yTWa-b3Z9j-Y2Q4GT4O_gaAo3cBKOT2FO6tLKq4zg3z-CMABjL9PCkjYUW7O7MwlHx7-6_QM--OV8PDqb7vqMMeZB88W8vR0hfg_Gp8E0vHDqWvkejMPjIITDC7hBBwuV0JnMyaD4DznOHCy1iskYpWvovvnBKKlQMAfTolzYGp45GCtNKO7RpjYjFDitewxJJqR7DB1MyMo0a8o-jTCsG7hMi4QqdHBSysII6EV4GEXV_0kUVZxFUcVee-BP23J4hCCLBDwGyl6TNujgX_-ATXMSwD5_eohjVVgqbKqKtZRWHw1okokAv0Wu7iw9Qp4Lh-hgLivIKVf6DmSWqVhaSgSwJnclbXxNBtTClgsroNaoKfoI-DhbOthGDxobK-eEgi-dt_swKj6QtpScpJklTbrHV814zAdVqUEVMOQCTO0EGCu1FY2y3s_7UcRcFkWMvfZAoCLZllYbsubIuJZhWPfbDNho3srdxsbKLFt1hiqKF-uGdRlR58xtBpbyEpLU3MDCyDm92Sd3o0_uNj79qdLi4bi4m45LqdNc6ruv0jhD9z2b665vLu-_f3M3K-Jto8jTxnqrerS4eHnzMc54fce5zO33D9jzz1H_Nz7weRsM2IAPfD_w-Y54fhkO3b2NO-d-w869QyZ_G5kmSlvSPX9VpCH_8Xs7DvvbTBWSKVVhaGWqTZXZcuYgJXNqX1FGLXRM51rFzd-04bjhNUBCxrZZ3gajok3VDT4n806y2012O8leN9nrJPvdZL-TvP-CPFv-8CUAAP__Wwmyxw== +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzMVe9u2zYQ_76nONyXxJgGk5LiuRwGeHHVzdtSF7LRoZiMgJFurmCJVEl6UxD4sfYCe7JBUtLFNazWy5f4A4378zvf_X5H-g7thwIFLqJfo-kSNvAqnl_BmvS1kzcFwW8_RXEE1l3nypGxlDp7fraIZy-_90cv-Pi7N_PZ6-V5yBhjAbRfLBicCfFjNL-KlvE7r6lVDmAev4xiuHwHG_RQ6Yxey5Isit-R48rDyuiUrNWmcd21CbOsRsE8zFW1dY175WGqDaG4Q5e7glDgsukxJpmRGTL0MCMn86It-3GESdPAda4yqtHDRSWVFTBM8DJJ6j-yJKk5S5Kafe7Ab07F8ARBqgwCBtq9J2PRw1_egstLEsD--fveTrVypFyu1UHI6L8sGJKZgLDz3Nw6enAFPlyih1dvp1OwjipI9VY5OKfaDXPlBgJYS0qXQLQ5llDKGkoqtbkFWRQ6lY4yAaytfiNd-p4s6K2rtk5Ak9-29eAIcbXzsLPuVbJOrgkF33lfruRM_UnGUfYqLxwZMkO-L-dDPKorA1rBhAuwjZZgnTROtNoE314kCfNZkjD2uQOBVHYqrJH0QNN5Q8Ok6bcdsFWtE6yzrZNFsa8t1ZRuDyXvE6KJ2Q8FOCoryHK7ga2Va_pinfyjOvmn6PSzztX9hfOPXbjK5KU0t_9R4038p-y-f7j7fPQcdv84p8EpnH7c-WCf0c4vPn19GWe8eWd95o9GL9jjz3T0Ax-HvDPGbMzHYRiF_Ew8fpAn_uDo1vr_Y2ufQFN4Ck0LbRyZYbhP0oR__dwu1MUpU8VkK60s7U11rDLbrTykbE3d36TVW5PSG6PT9mc6c97iWkdG1nVR3hkz1YWaBh-DeS_Y7wf7veCgHxz0gsN-cNgLvvgEvNp99W8AAAD__wVq2is= statement ok DROP TABLE geo_table @@ -164,7 +164,7 @@ regions: table: geo_table@geom_index spans: 31 spans · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzUVeFO40YQ_t-nGM0fQHWVXdukYatKKWDatIUgJ2qFzhFa7LlgYXvN7uYuCOWx7gXuyU5rA0dA-C46ftzlx0bzjb_xzPftrm_RXBcocBL9Gx1M4QqO4vExzEmdW3lREPz_VxRHYOx5XlnShlJrtrcm8ejwd7-_xwe_nY5HJ9PtkDHGAmj-WLCzJcSf0fg4msZnnqtV7sA4Poxi2D-DK_SwUhmdyJIMijfIceZhrVVKxijtoNvmgVG2RME8zKt6YR088zBVmlDcos1tQShw6nqMSWakeww9zMjKvGjKPowwdA2c51VGS_RwUsvKCOgluJ8ky7dZkixZ4Bb2hQV_2ZTDEwRZZRAwUPaStEEP__kPbF6SAPbxw12cqspSZXNVPUtp9d6AJpkJ8Fvk4sbSPcT7sI8elnIJJZVK34AsCpVKS5kA1uQupE0vyYBa2HphBTiNmqL3gI-zlYdtdKexsXJOKPjK-3ofRtU70payo7ywpEn3-LoZ9_loWWtQFQy5AOOcAGOltqJRNvh1N0mYU5Y5ATsXBKqyTWnOkGeOjJ0MQ9dvM2CjeSt3Gxsri2LdGVpSunhuWJcRLmeuC7BU1pDl5goWRs7pFXzyN_Hpb5VXd8fFf-m41Dovpb75LI039H-onRtsosjDjg3W9Whx8fTmY5xxd8f5zO_399jj30H_Dz4IeRsM2IAPwjAK-ZZ4fBkO_Z1X3XPfIFO4iUwTpS3pXrgu0pD__L0dh91NporJ1KoytDbVS5XZauYhZXNqP1FGLXRKp1qlzWvacNzwGiAjY9ssb4NR1aZcg4_JvJPsd5P9TnLQTQ46yWE3Oewk7z4hz1Y_fQoAAP__bAayyQ== +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzkleFu2zYQx7_vKQ73JQmmwaSkeC6HAV5cdfO21IVsdCgmI2CkmytYIlWS3hQEfqy9wJ5soJR0cYNoM5YPA-YPNO6Of_r4_5H0LdoPFQpcJj8msxVs4VW6uIQN6SsnryuCn75L0gSsuyqVI2Mpd_b0ZJnOX34djl_wyVdvFvPXq9OYMcYi6L5YdHYixLfJ4jJZpe8Cv1Z9Bov0ZZLCxTvYYoBKF_Ra1mRR_Iwc1wE2RudkrTY-ddtNmBctChZgqZqd8-l1gLk2hOIWXekqQoEr32NKsiAzYhhgQU6WVbfsxy1MfQNXpSqoxQCXjVRWwCjDiyxrfymyrGWRH9jfDPjFsRqeIUhVQMRAu_dkLAb4w1twZU0C2B-_38W5Vo6UK7V6VDL6NwuGZCEg7DPXN47uU3wMFxjg5dvZDKyjBnK9Uw5OqXWjUrkzAawzpZ9AtH1qQi1bqKnW5gZkVelcOioEsG71a-ny92RB71yzcwL8_K6t-0SI632AfXRHyTq5IRR8H_xzknP1KxlHxauycmTIjPghzvt60jYGtIIpF2A9S7BOGic6NtGX51nGPBvmEQwOCKSKY2Ue6SOmC2_D1PfbbbCj1gPrY-tkVR2ypZby3WPkQyB8zX6owFHdQFHaLeys3NAzcAqP4fS9LtXdhQufunCNKWtpbv6yJpiG_7OzHx3j6cczHx062ufFp68v44z7dzZk4Xj8gj38zMbf8EnM-2DCJnwSx0nMT8TDB3kanj3rqf0XNsXH2LTUxpEZxYcmTfnn_7ULdX7MrlKyjVaWDnb11Mpsvw6Qig31f5NW70xOb4zOu5_pw0Wn6xIFWddXeR_MVV_yDT4U80FxOCwOB8XRsDgaFMfD4nhQfP6JeL3_7M8AAAD__xfz2i0= # Also works when creating an index. statement ok @@ -226,4 +226,4 @@ regions: table: geo_table@geom_index spans: 31 spans · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzUVeFO40YQ_t-nGM0fQHWVXdukYatKKWDatIUgJ2qFzhFa7LlgYXvN7uYuCOWx7gXuyU5rA0dA-C46ftzlx0bzjb_xzPftrm_RXBcocBL9Gx1M4QqO4vExzEmdW3lREPz_VxRHYOx5XlnShlJrtrcm8ejwd7-_xwe_nY5HJ9PtkDHGAmj-WLCzJcSf0fg4msZnnqtV7sA4Poxi2D-DK_SwUhmdyJIMijfIceZhrVVKxijtoNvmgVG2RME8zKt6YR088zBVmlDcos1tQShw6nqMSWakeww9zMjKvGjKPowwdA2c51VGS_RwUsvKCOgluJ8ky7dZkixZ4Bb2hQV_2ZTDEwRZZRAwUPaStEEP__kPbF6SAPbxw12cqspSZXNVPUtp9d6AJpkJ8Fvk4sbSPcT7sI8elnIJJZVK34AsCpVKS5kA1uQupE0vyYBa2HphBTiNmqL3gI-zlYdtdKexsXJOKPjK-3ofRtU70payo7ywpEn3-LoZ9_loWWtQFQy5AOOcAGOltqJRNvh1N0mYU5Y5ATsXBKqyTWnOkGeOjJ0MQ9dvM2CjeSt3Gxsri2LdGVpSunhuWJcRLmeuC7BU1pDl5goWRs7pFXzyN_Hpb5VXd8fFf-m41Dovpb75LI039H-onRtsosjDjg3W9Whx8fTmY5xxd8f5zO_399jj30H_Dz4IeRsM2IAPwjAK-ZZ4fBkO_Z1X3XPfIFO4iUwTpS3pXrgu0pD__L0dh91NporJ1KoytDbVS5XZauYhZXNqP1FGLXRKp1qlzWvacNzwGiAjY9ssb4NR1aZcg4_JvJPsd5P9TnLQTQ46yWE3Oewk7z4hz1Y_fQoAAP__bAayyQ== +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzkleFu2zYQx7_vKQ73JQmmwaSkeC6HAV5cdfO21IVsdCgmI2CkmytYIlWS3hQEfqy9wJ5soJR0cYNoM5YPA-YPNO6Of_r4_5H0LdoPFQpcJj8msxVs4VW6uIQN6SsnryuCn75L0gSsuyqVI2Mpd_b0ZJnOX34djl_wyVdvFvPXq9OYMcYi6L5YdHYixLfJ4jJZpe8Cv1Z9Bov0ZZLCxTvYYoBKF_Ra1mRR_Iwc1wE2RudkrTY-ddtNmBctChZgqZqd8-l1gLk2hOIWXekqQoEr32NKsiAzYhhgQU6WVbfsxy1MfQNXpSqoxQCXjVRWwCjDiyxrfymyrGWRH9jfDPjFsRqeIUhVQMRAu_dkLAb4w1twZU0C2B-_38W5Vo6UK7V6VDL6NwuGZCEg7DPXN47uU3wMFxjg5dvZDKyjBnK9Uw5OqXWjUrkzAawzpZ9AtH1qQi1bqKnW5gZkVelcOioEsG71a-ny92RB71yzcwL8_K6t-0SI632AfXRHyTq5IRR8H_xzknP1KxlHxauycmTIjPghzvt60jYGtIIpF2A9S7BOGic6NtGX51nGPBvmEQwOCKSKY2Ue6SOmC2_D1PfbbbCj1gPrY-tkVR2ypZby3WPkQyB8zX6owFHdQFHaLeys3NAzcAqP4fS9LtXdhQufunCNKWtpbv6yJpiG_7OzHx3j6cczHx062ufFp68v44z7dzZk4Xj8gj38zMbf8EnM-2DCJnwSx0nMT8TDB3kanj3rqf0XNsXH2LTUxpEZxYcmTfnn_7ULdX7MrlKyjVaWDnb11Mpsvw6Qig31f5NW70xOb4zOu5_pw0Wn6xIFWddXeR_MVV_yDT4U80FxOCwOB8XRsDgaFMfD4nhQfP6JeL3_7M8AAAD__xfz2i0= diff --git a/pkg/sql/logictest/testdata/logic_test/vectorize_local b/pkg/sql/logictest/testdata/logic_test/vectorize_local index 9361b7386a5d..ff4717b07f2c 100644 --- a/pkg/sql/logictest/testdata/logic_test/vectorize_local +++ b/pkg/sql/logictest/testdata/logic_test/vectorize_local @@ -59,7 +59,7 @@ regions: table: a@primary spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyMkcFq6zAQRffvK4a71uPZb9GFVqElhZC2KUnopngxsYZUYEuuJNOE4M_qD_TLiq1kUUqhy3uufTQanRBfG2hs5nfzmy0x3a5X98RQcN7IA7cSoZ9RolLogq8lRh9GdJo-WJgDdKFgXdenEVcKtQ8CfUKyqRFobHnXyFrYSPhXQMFIYttMWp51wbYcjlDYdOyipr9QWPVJ06yEwvKJkm1FU_HxHnOuvUvikvXuWxX8W6QgbDT9V0VxFuyOSS64vKKlvYZCywdqpfXhSNw0vuYkRlNBY7fjVL9IJN-nbpxkHHpSX0CWV4NCJueLx8R7gS4H9fvlrCV23kX5spefzMVQKYjZS36A6PtQy2Pw9XRMjqvpvwkYiSm3ZQ4Ll6uhGv58BgAA__9Zk6J- +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyMkcFqKjEUhvf3KQ5ndS_kYqaLLrKSigWx1qLipswiJgcbOpNMkzNUkXmsvkCfrMxEF6UIXZ7v_Pnz588J01uFCtfTh-lkAxruV8sFaBTog6VHXVNC9YwFlgKbGAylFGKPToNgZg-opEDnm5Z7XAo0IRKqE7LjilDhRu8qWpG2FEcSBVpi7arBVo-b6Godjyhw3WifFPxHgcuWFYwLFDjfAruaFMjPj5RnEzyTZxf8j1UM7wkiaavgRkh5NtgdmS64uIW5u0OBi-1kAompARNaz_CXDjxynv8pkEPKLCB6vSao9QFqqkM8gq6qYDSTVSChd99pNi-UILTc9G_p9UO4C8jxyk5gJufqEus9oSo68ft6V5Sa4BN9a_aas-xKgWT3lL8whTYaeorBDNfkcTmcG4ClxHlb5GHm86oruz9fAQAA__-9SrYw query T EXPLAIN ANALYZE (DISTSQL) SELECT c.a FROM c JOIN d ON d.b = c.b @@ -96,7 +96,7 @@ regions: table: c@sec spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJykkt-K1DAUxu99isO5jmM7FyIBYVBWmHWdyuzijfQiTQ5rNM2pSYozDPNYvoBPJk264FgU_1x-39fv5JwfPWH87FDi7dXN1cs70CsFr_bNG9Bw3Wx3YKDZgVl18Bz0qkOBng3tVE8R5XussRU4BNYUI4fJOuUPtuaAshJo_TCmyW4Fag6E8oTJJkco8U51jvakDIUnFQo0lJR1eazeRNIo8HZQPkp4jAKbMUnY1GKzRoGv30GyPUmovn2NRWv2iXyy7BdR4C8RAikjYS53x0QPVv0UXqDAXh2gp57DEZRzrFUiI6HKWaeS_kAReEzDtMa0bR76YKyxPQssar42JnVPKOuz-HMi12z9DKS-BGI2Q7C9CkcUeMP8aRzgI1sP7CVkIjMenB_IN5dzi45JObcg828Q6yXEZ5kTHUiPy_Z_4Fv_Db49xYF9pAt0v5pcnVuBZO6p_LSRx6DpbWCdnymyyb1sGIqppHURW1-iacEfy_Vvy-ufyu350fcAAAD__wxXIpI= +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJysk99q20wQxe-_pxjm6itsHckXpSwUTE0KThO7OCE3RRer3SFVI-2ouyNqY_xYfYE-WdGuAk1NSv9dztk5M6PfQQeMn1rUeH1-eb68ATsz8Ga7uQILF5vVGhxs1uBmNbwCO6tRoWdHa9NRRP0eS6wU9oEtxchhlA6pYeV2qAuFje8HGeVKoeVAqA8ojbSEGm9M3dKWjKNwVqBCR2KaNo21i0gWFV73xkcNz1HhZhANi1It5qjw7S1I05GG4uuXmGvLXshLw_7kKfDnCIGM0zCZ673Qg1S-gNeo8Op2uYQo1IPlwQv8Tzs5a7w801Ck83ID0f1TDZ3ZQUcdhz2YtmVrhJyGIk2vjdgPFIEH6ccPGfvTWQ_CHKujwlxNvKKYO0JdHtWvM73gxk9Iy8dI3aIPTWfCHhVeMt8PPXzkxgN7DYnpBBinBYlaBpbrKKZtT9j-WQzlaQwv_1EKtCM7nO7_iwDmvxPAlmLPPtIj-E9NLo6VQnJ3lH-cyEOw9C6wTWtyuUm-JDiKkl_LXKx8fhoP_N5c_tQ8_8FcHf_7FgAA__-oKkn2 query T EXPLAIN (OPT, VERBOSE) SELECT c.a FROM c INNER MERGE JOIN d ON c.a = d.b @@ -188,7 +188,7 @@ regions: table: d@primary spans: FULL SCAN · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzUU8Fu00AQvfMVozmBurRZp-KwUqUIZFAKsZFTcUE-bHYH18LedXfXIlGUz-IH-DJkm4o6DYFIHOCWeTNv8t6b9Rb9XYUCl_G7-NUNqHMJr7N0AQrmSRJnsIizNzFcp_MENKRJP3AF-nyFDI3VlMiaPIqPyDFn2DiryHvrOmjbD8z1GsWEYWmaNnRwzlBZRyi2GMpQEQq8kauKMpKa3MUEGWoKsqz6tWrmSSHDZSONF_AcGaZtEDDjyPDtBwhlTQIm3776oVbWBDKhtOZRy9kvHhxJLSAakNUm0D3EX8BLZFjLNdRUW7cBWVVWyUBawKTvrWRQt-TBtqHpNHRS-6X3QIT5juFQ_bDqgywIBd-xP49jaV0gd8HHScz4GTKkNan2sb1jsruev6sgUN2ALv1naL0s6C-4ik5x9fDI0dianjWurKXbHDp09F8devrLSH4m0RrrNDnSoxTyjvm7kQO5LsgVdG1LQ-5iOs61ok_h6YyfPbtyZXE7_Bx9QP_Ua7o85TVl5BtrPO1HeHDzpMuNdEHDHbxtnaL3zqr-b4Yy7Xk9oMmHocuHYm6GVifwIZkfJU9HZL5Pjk4gR_vk6VHy5Z7sfPfkewAAAP__1qTrvw== +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzkU8Fq20AQvfcrhjklZBtLcuhhIWAa3OK0tosdcik-rHenioi0q-yOqI3xZ_UH-mVFUkMjx3Fr6KHQm-bNe6OZN7MbDA85SpwPPw6vbkCfK3g3m45Bw2gyGc5gPJy9H8L1dDQBA9NJQ7gEc75EgdYZmqiCAsrPGONCYOmdphCcr6FNQxiZFcpIYGbLimt4IVA7Tyg3yBnnhBJv1DKnGSlDvhehQEOssrwpqweBNAqcl8oGCa9R4LRiCYMYBX64Bc4KkhB9_xbaWDvLZDlz9lnKu68BPCkjIWmR5ZrpEYrfwFsUOL69uoLAVIJ2lWU4oRX3MsunEqKmt5ZAdP8SoVArKKhwfg0qz51WTEZC1FRfKtZ3FMBVXNZT1PymrUcgwcVWYBv9NCuwSgllvBV_bujceSbfi7teDuIzFEgr0tVzgw61XefCQw5MRQkmC_dQBZXSX5gqOWaqp2eSdEczg9JnhfLrfaeS_Gen0n_R1F9eVtZ5Q55Mx8dFrfwdZc9mxuRTunaZJd_rdzeT0xc-GcRnp5c-S-_az84j_qfu8eKYe5xRKJ0NtGvh3spR7RuZlNo9BFd5TZ-8081v2nDa6BrAUOA2G7fByLapusGn4viguN8Rx7vi5AhxsivuHxRf7LS92L76EQAA__8gyhMy statement ok RESET vectorize; RESET distsql diff --git a/pkg/sql/opt/exec/execbuilder/testdata/distsql_misc b/pkg/sql/opt/exec/execbuilder/testdata/distsql_misc index f159e04a5410..4a9fca33770d 100644 --- a/pkg/sql/opt/exec/execbuilder/testdata/distsql_misc +++ b/pkg/sql/opt/exec/execbuilder/testdata/distsql_misc @@ -110,7 +110,7 @@ network usage: · • create statistics · -Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzUVd9q2zwUv_-eQpyrb6DUkuykqa_alQ5CWTPisJuRCzU-ZKaJ5EkKXVfyWHuBPdmwNZOlTWwVMmgvdY6Ofn_4ifMI9tsSUricXF1Mr0g2vZiOsunoMiOWk_ENkeTDZPyR5NJJoKB0jjdyhRbSL8CBggAKMVBIgEIfZhRKo-dorTbVlcd6YJR_h5RRKFS5dlV5RmGuDUL6CK5wS4QUpvJ2iROUOZqIAYUcnSyWNUwFfV6aYiXNA1DISqlsSnoRJ1LlhBPtvqIBCuO1S8l5Rer6M3HFClPCfv20_jzXyqFyhVbPWkbfW2JQ5inhjPna7YPDpjhkjLwHCvU9vXZlhVPdnG0o-PMfUdbJBULKNzRceCZX5RJN1N8V7ctZ8QNrrJpX5qRXeAhYHATe4q2VNjkazHfwZpuD1C4WC4ML6bSJOAsnSf4XjJHb9fwOnX13kHK8Q5mHh4SHhCTivUgcPyZiX0z4yYBcF8-CIoKD0iG-Ccrg6EER4a6LINdFL4rfiusd4hvXT4_uehzuehzketyLkrfieof4xvXh0V1Pwl1PglxPelH_-K7H-1wXJ_E-1-Ng1zvEN66f_dNVtAd4grbUyuKTlbT_ZVatKswX6Pea1Wszx09Gz2sYfxzXc3UhR-t8l_vDSPlWRfDvYd46LHaG-dNh0Y7cAR23Tiftw8lLeNcu1oaCQnevzZ1PnUVV_98qtE3DR893th--6a7QWrnYXvAh3KXWb6U2aNc1eL26TlupDdt1DV-vrrP2FLOOD9T-_V6kLD6oTJwkHcr6lbLZ5r_fAQAA__-xKCQz +Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzkVdFO2zAUfd9XWPcJJJfETlpKnmAVkyoEnZqKl6kPJrnqIlo7sx0BQ_2s_cC-bEq8iJW1SZBaCYlH3-vbc-45p_EzmB9LiGA0vbyYXZJ4djEbx7PxKCaGkckNEeTLdHJNUmEFUJAqxRuxQgPRN2BAgQOFACiEQKEPcwq5Vgkao3R55bkaGKePEPkUMpkXtizPKSRKI0TPYDO7RIhgJu6WOEWRovZ8oJCiFdmygimhz3OdrYR-AgpxLqSJSM9jRMiUMKLsd9RAYVLYiJyXpK5uic1WGBH_9y_jzomSFqXNlPyvpdWDIRpFGhHm-65292SxLg59n3wGCte3oxExFnOSqEJacoSP1sukPY6IX3F2FxDvd12okFRh85JpiTVfU3Dnv7IYKxYIEVvT7tLFYpUvUXv9TdlcOc5-YoVVbRZb4TTaBcx3Ar_gFVLpFDWmG3jz9U5qF4uFxoWwSnvM706SHHHfJ3dFco_WHO-kHGxQZt1jxrrEzGM9j-8_aHxb0NjJgFxlB4ga7xy1FvnqqA32HjXe3TfeyTfe84KP41uLfLVvp3v3LejuW9DJt6DnhR_Htxb5at-Ge_ct7O5b2Mm3sOf19-9bsM03fhIcxregs28t8tW-nR30Sd4CPEWTK2nw1dO8_Zf98snGdIHufTeq0Al-1SqpYNxxUs1VhRSNdV3mDmPpWiXBf4dZ4zDfGGavh3kzcgt00DgdNg-Hb-FdqVgJChLtg9L3LrcGZfUFKGNfN1x4Xeflo1N3V2iMWLxccCHcpNZvpDZo3mvwfvc6baQ2bN5r-H73OmtOsd_yB2r--71ps2DnZvwkbNmsX242X3_6EwAA__91aYat query T retry EXPLAIN (DISTSQL, TYPES) SELECT * FROM data diff --git a/pkg/sql/opt/exec/explain/emit.go b/pkg/sql/opt/exec/explain/emit.go index b53d588db2a1..a1d19fefee0e 100644 --- a/pkg/sql/opt/exec/explain/emit.go +++ b/pkg/sql/opt/exec/explain/emit.go @@ -369,6 +369,18 @@ func (e *emitter) emitNodeAttributes(n *Node) error { if s.KVBytesRead.HasValue() { e.ob.AddField("KV bytes read", humanize.IBytes(s.KVBytesRead.Value())) } + if e.ob.flags.Verbose { + if s.StepCount.HasValue() { + e.ob.AddField("MVCC step count (ext/int)", fmt.Sprintf("%s/%s", + humanizeutil.Count(s.StepCount.Value()), humanizeutil.Count(s.InternalStepCount.Value()), + )) + } + if s.SeekCount.HasValue() { + e.ob.AddField("MVCC seek count (ext/int)", fmt.Sprintf("%s/%s", + humanizeutil.Count(s.SeekCount.Value()), humanizeutil.Count(s.InternalSeekCount.Value()), + )) + } + } } if stats, ok := n.annotations[exec.EstimatedStatsID]; ok { diff --git a/pkg/sql/opt/exec/factory.go b/pkg/sql/opt/exec/factory.go index 43b6d63f30bc..cf10fcdd9367 100644 --- a/pkg/sql/opt/exec/factory.go +++ b/pkg/sql/opt/exec/factory.go @@ -320,6 +320,11 @@ type ExecutionStats struct { KVBytesRead optional.Uint KVRowsRead optional.Uint + StepCount optional.Uint + InternalStepCount optional.Uint + SeekCount optional.Uint + InternalSeekCount optional.Uint + // Nodes on which this operator was executed. Nodes []string diff --git a/pkg/sql/row/BUILD.bazel b/pkg/sql/row/BUILD.bazel index f36c3e526eab..6a8836d6309a 100644 --- a/pkg/sql/row/BUILD.bazel +++ b/pkg/sql/row/BUILD.bazel @@ -59,7 +59,6 @@ go_library( "//pkg/util/log/eventpb", "//pkg/util/metric", "//pkg/util/mon", - "//pkg/util/syncutil", "//pkg/util/timeutil", "//pkg/util/unique", "//pkg/util/uuid", diff --git a/pkg/sql/row/kv_fetcher.go b/pkg/sql/row/kv_fetcher.go index 57d99b9cb0fe..88af15fb215d 100644 --- a/pkg/sql/row/kv_fetcher.go +++ b/pkg/sql/row/kv_fetcher.go @@ -12,6 +12,7 @@ package row import ( "context" + "sync/atomic" "time" "github.com/cockroachdb/cockroach/pkg/kv" @@ -22,7 +23,6 @@ import ( "github.com/cockroachdb/cockroach/pkg/storage/enginepb" "github.com/cockroachdb/cockroach/pkg/util/hlc" "github.com/cockroachdb/cockroach/pkg/util/mon" - "github.com/cockroachdb/cockroach/pkg/util/syncutil" "github.com/cockroachdb/errors" ) @@ -37,8 +37,8 @@ type KVFetcher struct { newSpan bool // Observability fields. - mu struct { - syncutil.Mutex + // Note: these need to be read via an atomic op. + atomics struct { bytesRead int64 } } @@ -114,9 +114,7 @@ func (f *KVFetcher) GetBytesRead() int64 { if f == nil { return 0 } - f.mu.Lock() - defer f.mu.Unlock() - return f.mu.bytesRead + return atomic.LoadInt64(&f.atomics.bytesRead) } // MVCCDecodingStrategy controls if and how the fetcher should decode MVCC @@ -192,9 +190,12 @@ func (f *KVFetcher) NextKV( return false, kv, false, nil } f.newSpan = true - f.mu.Lock() - f.mu.bytesRead += int64(len(f.batchResponse)) - f.mu.Unlock() + nBytes := len(f.batchResponse) + for i := range f.kvs { + nBytes += len(f.kvs[i].Key) + nBytes += len(f.kvs[i].Value.RawBytes) + } + atomic.AddInt64(&f.atomics.bytesRead, int64(nBytes)) } } diff --git a/pkg/sql/rowexec/inverted_joiner.go b/pkg/sql/rowexec/inverted_joiner.go index fea35ca15385..918031a79632 100644 --- a/pkg/sql/rowexec/inverted_joiner.go +++ b/pkg/sql/rowexec/inverted_joiner.go @@ -40,7 +40,7 @@ import ( // scanned rows to disk. The spilling cost will probably be dominated by // the de-duping cost, since it incurs a read. var invertedJoinerBatchSize = util.ConstantWithMetamorphicTestValue( - "invered-joiner-batch-size", + "inverted-joiner-batch-size", 100, /* defaultValue */ 1, /* metamorphicValue */ ) @@ -160,6 +160,8 @@ type invertedJoiner struct { spanBuilder *span.Builder outputContinuationCol bool + + scanStats execinfra.ScanStats } var _ execinfra.Processor = &invertedJoiner{} @@ -771,7 +773,8 @@ func (ij *invertedJoiner) execStatsForTrace() *execinfrapb.ComponentStats { if !ok { return nil } - return &execinfrapb.ComponentStats{ + ij.scanStats = execinfra.GetScanStats(ij.Ctx) + ret := execinfrapb.ComponentStats{ Inputs: []execinfrapb.InputStats{is}, KV: execinfrapb.KVStats{ BytesRead: optional.MakeUint(uint64(ij.fetcher.GetBytesRead())), @@ -785,6 +788,8 @@ func (ij *invertedJoiner) execStatsForTrace() *execinfrapb.ComponentStats { }, Output: ij.OutputHelper.Stats(), } + execinfra.PopulateKVMVCCStats(&ret.KV, &ij.scanStats) + return &ret } func (ij *invertedJoiner) generateMeta() []execinfrapb.ProducerMetadata { diff --git a/pkg/sql/rowexec/joinreader.go b/pkg/sql/rowexec/joinreader.go index 2aa8884913f6..a74d0435c06a 100644 --- a/pkg/sql/rowexec/joinreader.go +++ b/pkg/sql/rowexec/joinreader.go @@ -174,10 +174,15 @@ type joinReader struct { // detailed comment in the spec). This can never be true for index joins, // and requires that the spec has MaintainOrdering set to true. outputGroupContinuationForLeftRow bool + // lookupBatchBytesLimit controls the TargetBytes of lookup requests. If 0, a // default will be used. Regardless of this value, bytes limits aren't always // used. lookupBatchBytesLimit rowinfra.BytesLimit + + // scanStats is collected from the trace after we finish doing work for this + // join. + scanStats execinfra.ScanStats } var _ execinfra.Processor = &joinReader{} @@ -878,6 +883,11 @@ func (jr *joinReader) ConsumerClosed() { } func (jr *joinReader) close() { + // Make sure to clone any tracing span so that stats can pick it up later. + // Stats are only collected after we finish closing the processor. + if !jr.Closed { + jr.scanStats = execinfra.GetScanStats(jr.Ctx) + } if jr.InternalClose() { if jr.fetcher != nil { jr.fetcher.Close(jr.Ctx) @@ -908,7 +918,7 @@ func (jr *joinReader) execStatsForTrace() *execinfrapb.ComponentStats { } // TODO(asubiotto): Add memory and disk usage to EXPLAIN ANALYZE. - return &execinfrapb.ComponentStats{ + ret := &execinfrapb.ComponentStats{ Inputs: []execinfrapb.InputStats{is}, KV: execinfrapb.KVStats{ BytesRead: optional.MakeUint(uint64(jr.fetcher.GetBytesRead())), @@ -918,6 +928,8 @@ func (jr *joinReader) execStatsForTrace() *execinfrapb.ComponentStats { }, Output: jr.OutputHelper.Stats(), } + execinfra.PopulateKVMVCCStats(&ret.KV, &jr.scanStats) + return ret } func (jr *joinReader) generateMeta() []execinfrapb.ProducerMetadata { diff --git a/pkg/sql/rowexec/tablereader.go b/pkg/sql/rowexec/tablereader.go index 9b8a52c64175..111a7f72db36 100644 --- a/pkg/sql/rowexec/tablereader.go +++ b/pkg/sql/rowexec/tablereader.go @@ -52,6 +52,8 @@ type tableReader struct { fetcher rowFetcher alloc rowenc.DatumAlloc + scanStats execinfra.ScanStats + // rowsRead is the number of rows read and is tracked unconditionally. rowsRead int64 } @@ -297,6 +299,9 @@ func (tr *tableReader) Next() (rowenc.EncDatumRow, *execinfrapb.ProducerMetadata func (tr *tableReader) close() { if tr.InternalClose() { + // scanStats is collected from the trace after we finish doing work for this + // join. + tr.scanStats = execinfra.GetScanStats(tr.Ctx) if tr.fetcher != nil { tr.fetcher.Close(tr.Ctx) } @@ -314,7 +319,7 @@ func (tr *tableReader) execStatsForTrace() *execinfrapb.ComponentStats { if !ok { return nil } - return &execinfrapb.ComponentStats{ + ret := &execinfrapb.ComponentStats{ KV: execinfrapb.KVStats{ BytesRead: optional.MakeUint(uint64(tr.fetcher.GetBytesRead())), TuplesRead: is.NumTuples, @@ -323,6 +328,8 @@ func (tr *tableReader) execStatsForTrace() *execinfrapb.ComponentStats { }, Output: tr.OutputHelper.Stats(), } + execinfra.PopulateKVMVCCStats(&ret.KV, &tr.scanStats) + return ret } func (tr *tableReader) generateMeta() []execinfrapb.ProducerMetadata { diff --git a/pkg/sql/rowexec/zigzagjoiner.go b/pkg/sql/rowexec/zigzagjoiner.go index 8a599f2bc23d..3a61983af452 100644 --- a/pkg/sql/rowexec/zigzagjoiner.go +++ b/pkg/sql/rowexec/zigzagjoiner.go @@ -247,6 +247,8 @@ type zigzagJoiner struct { rowAlloc rowenc.EncDatumRowAlloc fetchedInititalRow bool + + scanStats execinfra.ScanStats } // zigzagJoinerBatchSize is a parameter which determines how many rows should @@ -991,10 +993,13 @@ func (z *zigzagJoiner) ConsumerClosed() { // execStatsForTrace implements ProcessorBase.ExecStatsForTrace. func (z *zigzagJoiner) execStatsForTrace() *execinfrapb.ComponentStats { + z.scanStats = execinfra.GetScanStats(z.Ctx) + kvStats := execinfrapb.KVStats{ BytesRead: optional.MakeUint(uint64(z.getBytesRead())), ContentionTime: optional.MakeTimeValue(execinfra.GetCumulativeContentionTime(z.Ctx)), } + execinfra.PopulateKVMVCCStats(&kvStats, &z.scanStats) for i := range z.infos { fis, ok := getFetcherInputStats(z.infos[i].fetcher) if !ok { diff --git a/pkg/storage/mvcc.go b/pkg/storage/mvcc.go index 89d97151e9a1..ebb7e53851f8 100644 --- a/pkg/storage/mvcc.go +++ b/pkg/storage/mvcc.go @@ -32,7 +32,9 @@ import ( "github.com/cockroachdb/cockroach/pkg/util/mon" "github.com/cockroachdb/cockroach/pkg/util/protoutil" "github.com/cockroachdb/cockroach/pkg/util/timeutil" + "github.com/cockroachdb/cockroach/pkg/util/tracing" "github.com/cockroachdb/errors" + "github.com/cockroachdb/pebble" ) const ( @@ -897,6 +899,10 @@ func mvccGet( mvccScanner.init(opts.Txn, opts.LocalUncertaintyLimit) mvccScanner.get(ctx) + // If we have a trace, emit the scan stats that we produced. + traceSpan := tracing.SpanFromContext(ctx) + recordIteratorStats(traceSpan, mvccScanner.stats()) + if mvccScanner.err != nil { return optionalValue{}, nil, mvccScanner.err } @@ -2347,6 +2353,22 @@ func MVCCDeleteRange( return keys, res.ResumeSpan, res.NumKeys, nil } +func recordIteratorStats(traceSpan *tracing.Span, iteratorStats IteratorStats) { + stats := iteratorStats.Stats + if traceSpan != nil { + steps := stats.ReverseStepCount[pebble.InterfaceCall] + stats.ForwardStepCount[pebble.InterfaceCall] + seeks := stats.ReverseSeekCount[pebble.InterfaceCall] + stats.ForwardSeekCount[pebble.InterfaceCall] + internalSteps := stats.ReverseStepCount[pebble.InternalIterCall] + stats.ForwardStepCount[pebble.InternalIterCall] + internalSeeks := stats.ReverseSeekCount[pebble.InternalIterCall] + stats.ForwardSeekCount[pebble.InternalIterCall] + traceSpan.RecordStructured(&roachpb.ScanStats{ + NumInterfaceSeeks: uint64(seeks), + NumInternalSeeks: uint64(internalSeeks), + NumInterfaceSteps: uint64(steps), + NumInternalSteps: uint64(internalSteps), + }) + } +} + func mvccScanToBytes( ctx context.Context, iter MVCCIterator, @@ -2398,6 +2420,11 @@ func mvccScanToBytes( res.NumKeys = mvccScanner.results.count res.NumBytes = mvccScanner.results.bytes + // If we have a trace, emit the scan stats that we produced. + traceSpan := tracing.SpanFromContext(ctx) + + recordIteratorStats(traceSpan, mvccScanner.stats()) + res.Intents, err = buildScanIntents(mvccScanner.intentsRepr()) if err != nil { return MVCCScanResult{}, err diff --git a/pkg/storage/pebble_mvcc_scanner.go b/pkg/storage/pebble_mvcc_scanner.go index b1ebb1f2c39f..6d3120d20df1 100644 --- a/pkg/storage/pebble_mvcc_scanner.go +++ b/pkg/storage/pebble_mvcc_scanner.go @@ -918,3 +918,7 @@ func (p *pebbleMVCCScanner) intentsRepr() []byte { } return p.intents.Repr() } + +func (p *pebbleMVCCScanner) stats() IteratorStats { + return p.parent.Stats() +} diff --git a/pkg/ui/workspaces/cluster-ui/src/tableStatistics/tableStatistics.module.scss b/pkg/ui/workspaces/cluster-ui/src/tableStatistics/tableStatistics.module.scss index 0b15463d0d4d..683d665867b8 100644 --- a/pkg/ui/workspaces/cluster-ui/src/tableStatistics/tableStatistics.module.scss +++ b/pkg/ui/workspaces/cluster-ui/src/tableStatistics/tableStatistics.module.scss @@ -1,3 +1,5 @@ +@import "src/core/index.module"; + .flex-display { display: flex; } @@ -6,3 +8,11 @@ padding-top: 3px; padding-right: 10px; } + +.action { + color: $colors--link; + &:hover { + color: $colors--link; + text-decoration: underline; + } +} diff --git a/pkg/ui/workspaces/cluster-ui/src/tableStatistics/tableStatistics.tsx b/pkg/ui/workspaces/cluster-ui/src/tableStatistics/tableStatistics.tsx index 8e411bb2c73c..55f4ffad0f68 100644 --- a/pkg/ui/workspaces/cluster-ui/src/tableStatistics/tableStatistics.tsx +++ b/pkg/ui/workspaces/cluster-ui/src/tableStatistics/tableStatistics.tsx @@ -73,7 +73,7 @@ export const TableStatistics: React.FC = ({ ); let toolTipText = ` history is cleared once an hour by default, which can be configured with - the cluster setting diagnostics.sql_stat_reset.interval. Clicking ‘Clear SQL stats’ will reset SQL stats + the cluster setting diagnostics.sql_stat_reset.interval. Clicking ‘clear SQL stats’ will reset SQL stats on the statements and transactions pages.`; switch (tooltipType) { @@ -104,7 +104,9 @@ export const TableStatistics: React.FC = ({
{renderLastCleared(lastReset)} {" "}-{" "} - Clear SQL Stats + + clear SQL stats +