diff --git a/pkg/cli/zip_test.go b/pkg/cli/zip_test.go index 314cce8a0cec..cc8bbc7d60b1 100644 --- a/pkg/cli/zip_test.go +++ b/pkg/cli/zip_test.go @@ -69,6 +69,7 @@ table_name NOT IN ( 'cluster_contended_keys', 'cluster_contended_indexes', 'cluster_contended_tables', + 'cluster_inflight_traces', 'create_statements', 'create_type_statements', 'cross_db_references', diff --git a/pkg/jobs/jobspb/jobs.pb.go b/pkg/jobs/jobspb/jobs.pb.go index 55c404ec7f82..f550721387d8 100644 --- a/pkg/jobs/jobspb/jobs.pb.go +++ b/pkg/jobs/jobspb/jobs.pb.go @@ -1136,7 +1136,7 @@ var xxx_messageInfo_NewSchemaChangeDetails proto.InternalMessageInfo // NewSchemaChangeProgress is the persisted progress for the new schema change job. type NewSchemaChangeProgress struct { - States []scpb.State `protobuf:"varint,1,rep,packed,name=states,proto3,enum=cockroach.sql.schemachanger.scpb.State" json:"states,omitempty"` + States []scpb.Status `protobuf:"varint,1,rep,packed,name=states,proto3,enum=cockroach.sql.schemachanger.scpb.Status" json:"states,omitempty"` } func (m *NewSchemaChangeProgress) Reset() { *m = NewSchemaChangeProgress{} } @@ -2626,9 +2626,9 @@ func init() { proto.RegisterFile("jobs/jobspb/jobs.proto", fileDescriptor_6c315f var fileDescriptor_6c315f3a2536c4ef = []byte{ // 5045 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x7b, 0x4b, 0x70, 0x1b, 0x47, - 0x7a, 0x3f, 0x07, 0x04, 0x81, 0xc1, 0x87, 0x07, 0x07, 0x4d, 0x4a, 0x82, 0xb1, 0xb6, 0xc0, 0x85, - 0x2d, 0x5b, 0x92, 0x6d, 0xd0, 0x4b, 0xed, 0xc3, 0xd6, 0xda, 0xb2, 0xf1, 0x22, 0x09, 0x50, 0x7c, - 0x68, 0x40, 0xca, 0xb2, 0xf7, 0xef, 0x9d, 0xff, 0x60, 0xa6, 0x49, 0x4e, 0x08, 0xcc, 0x40, 0xd3, + 0x7a, 0x3f, 0x07, 0x04, 0x81, 0xc1, 0x87, 0x07, 0x07, 0x4d, 0x4a, 0x82, 0xb1, 0xb6, 0xc0, 0xc5, + 0x5a, 0xb6, 0x24, 0xdb, 0xa0, 0x97, 0xda, 0x87, 0xad, 0xb5, 0x65, 0xe3, 0x45, 0x12, 0xa0, 0xf8, + 0xd0, 0x80, 0x94, 0x65, 0xfb, 0xef, 0x9d, 0xff, 0x60, 0xa6, 0x49, 0x4e, 0x08, 0xcc, 0x40, 0xd3, 0x03, 0x49, 0xdc, 0x54, 0xa5, 0x52, 0xbb, 0x95, 0xaa, 0x94, 0x4e, 0xc9, 0x61, 0x73, 0x48, 0xa2, 0xaa, 0xad, 0x5a, 0x6f, 0x55, 0x0e, 0xc9, 0x21, 0x5b, 0xa9, 0x4d, 0x0e, 0x39, 0x25, 0x17, 0x1f, 0x36, 0x55, 0x7b, 0x49, 0x95, 0x93, 0x03, 0x93, 0xd0, 0x97, 0x1c, 0x53, 0xc9, 0x4d, 0xa7, 0x54, @@ -2637,310 +2637,310 @@ var fileDescriptor_6c315f3a2536c4ef = []byte{ 0x4a, 0x3d, 0xd7, 0xf1, 0x1c, 0xf4, 0x92, 0xe1, 0x18, 0x7b, 0xae, 0xa3, 0x1b, 0xbb, 0x25, 0x72, 0xbf, 0x53, 0x62, 0x25, 0xbc, 0x56, 0xfe, 0x02, 0x76, 0x5d, 0xc7, 0xa5, 0xf5, 0xf9, 0x0f, 0xde, 0x22, 0x3f, 0xbb, 0xe3, 0xec, 0x38, 0xec, 0xe7, 0x3c, 0xfd, 0x25, 0xa4, 0x88, 0x61, 0xf4, 0xda, - 0xf3, 0xa6, 0xee, 0xe9, 0x42, 0x96, 0xf3, 0x65, 0x96, 0xf3, 0xf6, 0xb6, 0xe3, 0x76, 0x75, 0xcf, - 0xc7, 0x78, 0x95, 0xdc, 0xef, 0xcc, 0x1b, 0xba, 0xa7, 0x77, 0x9c, 0x9d, 0x79, 0x13, 0x13, 0xa3, - 0xd7, 0x9e, 0x27, 0x9e, 0xdb, 0x37, 0xbc, 0xbe, 0x8b, 0x4d, 0x51, 0xa9, 0x70, 0x4c, 0x25, 0x0f, - 0xdb, 0xba, 0xed, 0xf9, 0xf8, 0x7d, 0xcf, 0xea, 0xcc, 0xef, 0x76, 0x8c, 0x79, 0xcf, 0xea, 0x62, - 0xe2, 0xe9, 0xdd, 0x9e, 0x28, 0xf9, 0x26, 0x6d, 0x4a, 0x8c, 0x5d, 0xdc, 0xd5, 0x8d, 0x5d, 0xdd, - 0xde, 0xc1, 0xee, 0x3c, 0xef, 0xc3, 0xe8, 0xb5, 0x45, 0x95, 0xd7, 0x8c, 0x4e, 0x9f, 0x78, 0xd8, - 0x7d, 0x80, 0x5d, 0x62, 0x39, 0xf6, 0xbc, 0xf8, 0xd4, 0xc4, 0x37, 0xaf, 0x55, 0xfc, 0x45, 0x04, - 0x2e, 0x55, 0x74, 0x63, 0xaf, 0xdf, 0xab, 0xdb, 0x86, 0xbb, 0xdf, 0xf3, 0x2c, 0xc7, 0x5e, 0x67, - 0xff, 0x12, 0xa4, 0xc0, 0xe4, 0x1e, 0xde, 0xcf, 0x49, 0x73, 0xd2, 0xd5, 0x94, 0x4a, 0x7f, 0xa2, - 0x0f, 0x20, 0xda, 0x75, 0x4c, 0x9c, 0x8b, 0xcc, 0x49, 0x57, 0x33, 0x0b, 0xd7, 0x4a, 0x27, 0xae, - 0x6d, 0x69, 0x80, 0xb6, 0xea, 0x98, 0x58, 0x65, 0xcd, 0x50, 0x1b, 0xe4, 0xbd, 0x2e, 0xd1, 0x2c, - 0x7b, 0xdb, 0xc9, 0x4d, 0xce, 0x49, 0x57, 0x93, 0x0b, 0x37, 0x4f, 0x81, 0x38, 0x61, 0x58, 0xa5, - 0x95, 0xd5, 0x56, 0xc3, 0xde, 0x76, 0x2a, 0xc9, 0xc3, 0x83, 0x42, 0x5c, 0x7c, 0xa8, 0xf1, 0xbd, - 0x2e, 0xa1, 0x3f, 0xf2, 0xeb, 0xe0, 0xcb, 0xe8, 0xf8, 0xfb, 0xae, 0xc5, 0xc6, 0x9f, 0x50, 0xe9, - 0x4f, 0xf4, 0x16, 0x20, 0xcc, 0xf1, 0xb0, 0xa9, 0xd1, 0x8d, 0xd4, 0xe8, 0x04, 0x23, 0x6c, 0x82, - 0x4a, 0x50, 0x52, 0xd3, 0x3d, 0x7d, 0x05, 0xef, 0xdf, 0x8c, 0xfe, 0xe7, 0xcf, 0x0a, 0x12, 0xff, - 0xb7, 0xf8, 0xfb, 0x93, 0x90, 0x19, 0x0c, 0x85, 0xc1, 0x2f, 0x43, 0x8c, 0xed, 0x00, 0x66, 0x3d, - 0x64, 0x16, 0xde, 0x19, 0x6b, 0x39, 0x68, 0xd3, 0x52, 0x8b, 0xb5, 0x53, 0x45, 0x7b, 0x84, 0x20, - 0x4a, 0xf4, 0x8e, 0x27, 0x06, 0xc2, 0x7e, 0xa3, 0x3f, 0x93, 0x60, 0x6e, 0x74, 0x44, 0x95, 0xfd, - 0x95, 0xd5, 0xd6, 0xaa, 0x4e, 0xb7, 0x71, 0x05, 0xef, 0x37, 0x6a, 0xb9, 0xc9, 0xb9, 0xc9, 0xab, - 0xc9, 0x85, 0xf5, 0xf1, 0x3b, 0xae, 0x9f, 0x81, 0x58, 0xb7, 0x3d, 0x77, 0x5f, 0x3d, 0xb3, 0xe3, - 0x7c, 0x0b, 0xae, 0x8c, 0x05, 0x15, 0xd6, 0xa1, 0x04, 0xd7, 0xa1, 0x59, 0x98, 0x7a, 0xa0, 0x77, - 0xfa, 0x58, 0xcc, 0x96, 0x7f, 0xdc, 0x8c, 0xbc, 0x2b, 0x15, 0x2f, 0x41, 0x8c, 0x2f, 0x0c, 0x4a, - 0x43, 0xa2, 0x5c, 0x6f, 0x2d, 0x7c, 0xe7, 0xbb, 0x4b, 0xd5, 0x55, 0x65, 0x42, 0x6c, 0xc1, 0xaf, - 0x24, 0xb8, 0xd8, 0xf2, 0x5c, 0xac, 0x77, 0x1b, 0xf6, 0x0e, 0x26, 0x74, 0x4e, 0x35, 0xec, 0xe9, - 0x56, 0x87, 0xa0, 0x2b, 0x90, 0x21, 0xac, 0x44, 0xd3, 0x4d, 0xd3, 0xc5, 0x84, 0x88, 0x0e, 0xd3, - 0x5c, 0x5a, 0xe6, 0x42, 0xf4, 0x2d, 0x88, 0x92, 0x9e, 0x6e, 0xb3, 0x9e, 0x93, 0x0b, 0x97, 0x42, - 0xcb, 0x26, 0x0e, 0x72, 0xa9, 0xd5, 0xd3, 0xed, 0x4a, 0xf4, 0x8b, 0x83, 0xc2, 0x84, 0xca, 0xaa, - 0xa2, 0x0a, 0x00, 0xf1, 0x74, 0xd7, 0xd3, 0xe8, 0x09, 0x14, 0x4a, 0xfb, 0x4a, 0xa8, 0x21, 0x3d, - 0xa1, 0xa5, 0xdd, 0x8e, 0x51, 0xda, 0xf4, 0x4f, 0xa8, 0x68, 0x9e, 0x60, 0xcd, 0xa8, 0xb4, 0xa8, - 0xc3, 0xa5, 0x91, 0x71, 0x6f, 0xb8, 0xce, 0x0e, 0x1b, 0xd1, 0x22, 0xa4, 0x8c, 0xbe, 0xe7, 0x3c, - 0xc0, 0x2e, 0xef, 0x40, 0x1a, 0xbf, 0x83, 0xa4, 0x68, 0xc8, 0xba, 0xf8, 0xfb, 0x18, 0xa4, 0xf9, - 0x79, 0xf1, 0x97, 0x64, 0x78, 0xe0, 0xd2, 0xb3, 0x0c, 0x1c, 0xdd, 0x02, 0x19, 0xdb, 0x26, 0x47, - 0x88, 0x8c, 0x8f, 0x10, 0xc7, 0xb6, 0xc9, 0xda, 0xbf, 0xc4, 0x0f, 0x20, 0x5d, 0xb5, 0x44, 0x25, - 0x7e, 0x78, 0x50, 0x98, 0xdc, 0x52, 0x1b, 0xfc, 0x24, 0xfe, 0x44, 0x82, 0x99, 0xbe, 0x6b, 0x11, - 0xad, 0xbd, 0xaf, 0x75, 0x1c, 0x43, 0xef, 0x58, 0xde, 0xbe, 0xb6, 0xf7, 0x20, 0x37, 0xc5, 0x34, - 0xfa, 0xd6, 0x99, 0xb4, 0x20, 0xa6, 0x59, 0xda, 0x72, 0x2d, 0x52, 0xd9, 0xbf, 0x2d, 0x10, 0x56, - 0x1e, 0x30, 0xad, 0xab, 0xcc, 0x1e, 0x1e, 0x14, 0x94, 0x2d, 0xb5, 0x11, 0x2e, 0xba, 0xab, 0x2a, - 0xfd, 0x91, 0xca, 0xe8, 0x7d, 0xc8, 0x9b, 0xb8, 0xe7, 0x62, 0x43, 0xa7, 0x84, 0xd0, 0x66, 0xc8, - 0x5a, 0x57, 0xb7, 0xad, 0x6d, 0x4c, 0xbc, 0x5c, 0x94, 0x29, 0x68, 0x6e, 0x50, 0x83, 0x77, 0xbd, - 0x2a, 0xca, 0x91, 0x1e, 0xb0, 0x89, 0xe5, 0xd8, 0x9a, 0xc3, 0xe9, 0x29, 0x17, 0x63, 0x0b, 0xb5, - 0x70, 0x7e, 0x62, 0x53, 0xb3, 0xf8, 0x08, 0x05, 0xab, 0x30, 0x1d, 0xea, 0x82, 0x11, 0x67, 0x82, - 0xe1, 0x5f, 0x1b, 0xfb, 0xcc, 0xab, 0x19, 0x3c, 0xcc, 0x5b, 0x7f, 0x2c, 0x41, 0x9e, 0x92, 0x3f, - 0x36, 0xe8, 0xa4, 0x03, 0xcb, 0xa2, 0xb9, 0xd8, 0x70, 0x5c, 0x33, 0x17, 0xa7, 0xb3, 0xae, 0xb4, - 0xfe, 0xf5, 0xa0, 0x70, 0x63, 0xc7, 0xf2, 0x76, 0xfb, 0xed, 0x92, 0xe1, 0x74, 0xe7, 0x83, 0xde, - 0xcc, 0xf6, 0xe0, 0xf7, 0x7c, 0x6f, 0x6f, 0x67, 0x9e, 0xd9, 0xa8, 0x7e, 0xdf, 0x32, 0x4b, 0x5b, - 0x5b, 0x8d, 0xda, 0xe1, 0x41, 0x21, 0xb7, 0xe1, 0x83, 0x07, 0x8a, 0xa1, 0x32, 0x68, 0x35, 0xd7, - 0x3b, 0xa1, 0x04, 0xbd, 0x0b, 0x19, 0xc3, 0xe9, 0x74, 0xb0, 0xc1, 0xe6, 0xb9, 0xa5, 0x36, 0x72, - 0x32, 0x53, 0x9a, 0xec, 0xe1, 0x41, 0x21, 0x5d, 0x0d, 0x4a, 0xa8, 0xfa, 0xa4, 0x8d, 0xf0, 0x67, - 0xbe, 0x0a, 0x17, 0x8e, 0xd5, 0x81, 0xb3, 0x98, 0x27, 0x11, 0x66, 0x1e, 0x05, 0x32, 0x7c, 0x53, - 0xfc, 0x83, 0x59, 0xfc, 0x07, 0x04, 0x19, 0x15, 0x13, 0xcf, 0x71, 0xb1, 0x7f, 0xa2, 0xc2, 0xa7, - 0x21, 0xfa, 0x0c, 0xa7, 0xe1, 0x97, 0x12, 0xcc, 0x50, 0x2b, 0xef, 0x5a, 0x3d, 0xcf, 0x71, 0x35, - 0x17, 0x3f, 0x74, 0x2d, 0x0f, 0x93, 0x5c, 0x84, 0xa9, 0x7c, 0xf9, 0x94, 0x0d, 0x1d, 0x1e, 0x48, - 0xa9, 0x16, 0x80, 0xa8, 0x02, 0x83, 0x6b, 0xfd, 0xad, 0x1f, 0xff, 0x5b, 0xe1, 0xe6, 0x58, 0x7b, - 0x76, 0xd4, 0xf1, 0x28, 0x35, 0x6a, 0x2a, 0x32, 0x8f, 0x00, 0xa3, 0x97, 0x21, 0x4a, 0x4f, 0x0d, - 0xb3, 0x34, 0x89, 0x8a, 0x7c, 0x78, 0x50, 0x88, 0xd2, 0x73, 0xa5, 0x32, 0x29, 0xf2, 0x60, 0x56, - 0x1c, 0x9a, 0xe0, 0x0c, 0x33, 0x1d, 0x8d, 0xb3, 0x29, 0xbd, 0x3f, 0xfe, 0x94, 0xf8, 0xea, 0xfb, - 0x5b, 0xc8, 0xcc, 0x3b, 0x5f, 0x3d, 0xd4, 0x3e, 0x52, 0x82, 0x36, 0x20, 0x43, 0x6d, 0x77, 0x5b, - 0x27, 0x58, 0xa3, 0x43, 0x26, 0x39, 0x85, 0xf5, 0x37, 0x7a, 0x26, 0xc8, 0xfd, 0x0e, 0xad, 0x53, - 0xaa, 0x89, 0xca, 0xa1, 0x75, 0x4b, 0x9b, 0x21, 0x19, 0x41, 0x4b, 0x90, 0xf4, 0xf4, 0x76, 0xc7, - 0x87, 0xe3, 0x24, 0xf4, 0xfa, 0x09, 0x70, 0x9b, 0xb4, 0x66, 0x08, 0x0b, 0x3c, 0x5f, 0x40, 0x50, - 0x0d, 0xc0, 0xdb, 0xef, 0xf9, 0x38, 0x19, 0x86, 0x73, 0xe5, 0x24, 0x9c, 0xfd, 0x5e, 0x18, 0x26, - 0xe1, 0x89, 0x6f, 0x82, 0x9a, 0x90, 0xe2, 0xbe, 0x9d, 0xc0, 0x99, 0x66, 0x38, 0x6f, 0x9c, 0x80, - 0xc3, 0x6c, 0xa6, 0x1e, 0x42, 0x4a, 0x92, 0x40, 0x42, 0x50, 0x19, 0xe2, 0xdc, 0xa7, 0x24, 0xb9, - 0x34, 0x83, 0xf9, 0xe6, 0x49, 0xc3, 0x61, 0xb5, 0x42, 0x4b, 0xef, 0xb7, 0x43, 0xf3, 0x90, 0xa4, - 0x86, 0xc6, 0xb5, 0x4c, 0xac, 0x99, 0x6d, 0x46, 0x70, 0x89, 0x4a, 0xe6, 0xf0, 0xa0, 0x00, 0xeb, - 0x42, 0x5c, 0xab, 0xa8, 0xe0, 0x57, 0xa9, 0xb5, 0xd1, 0x9b, 0x90, 0xed, 0xb9, 0xb8, 0xa7, 0xbb, - 0x58, 0x33, 0x9c, 0x6e, 0xaf, 0x83, 0x3d, 0x6c, 0xb2, 0x03, 0x2d, 0xab, 0x8a, 0x28, 0xa8, 0xfa, - 0x72, 0x6e, 0xbb, 0x75, 0x8f, 0xba, 0x85, 0x04, 0xbb, 0xb4, 0x66, 0x82, 0xd5, 0x4c, 0x33, 0x69, - 0x43, 0x08, 0xd1, 0x3e, 0x5c, 0x24, 0xfb, 0xc4, 0xc3, 0x5d, 0x8d, 0x2d, 0x37, 0xd1, 0xba, 0xd6, - 0x8e, 0x4b, 0x49, 0x39, 0x97, 0x65, 0xd3, 0xaa, 0x8e, 0xaf, 0x6c, 0x2d, 0x86, 0xc3, 0xb6, 0x91, - 0xac, 0x0a, 0x14, 0xee, 0xf8, 0xcc, 0x92, 0x63, 0x8a, 0xd0, 0x0d, 0xb8, 0x30, 0x38, 0x19, 0x44, - 0xeb, 0xf5, 0xdb, 0x1d, 0x8b, 0xec, 0x62, 0x33, 0x07, 0x6c, 0xa0, 0xb3, 0xa1, 0xc2, 0x0d, 0xbf, - 0x0c, 0xed, 0x0f, 0x1d, 0x76, 0x83, 0xae, 0x8e, 0xbe, 0x83, 0x73, 0xc9, 0x39, 0xe9, 0xea, 0x54, - 0x65, 0xf9, 0xe9, 0x41, 0xa1, 0x36, 0xf6, 0x49, 0x25, 0xb8, 0x3b, 0xef, 0xb9, 0x18, 0x87, 0x0e, - 0x7e, 0x55, 0xe0, 0x85, 0xcf, 0xac, 0x2f, 0x43, 0x2a, 0xc0, 0x80, 0xf2, 0x73, 0xa9, 0x67, 0xb6, - 0x47, 0x21, 0x14, 0x64, 0x03, 0x72, 0xf1, 0x03, 0xbd, 0x63, 0x99, 0xba, 0x87, 0x35, 0xcb, 0x36, - 0xf1, 0x23, 0x4c, 0x72, 0x88, 0x2d, 0xfd, 0x7b, 0xe3, 0x2f, 0xbd, 0x1a, 0x60, 0x34, 0x28, 0x84, - 0xd0, 0xb4, 0xac, 0x3b, 0x2c, 0xc6, 0x24, 0xff, 0x3f, 0x12, 0x64, 0x8f, 0xf0, 0x1c, 0xda, 0x84, - 0x88, 0x65, 0x32, 0x4a, 0x4f, 0x57, 0xa8, 0xa9, 0x89, 0x34, 0x6a, 0x4f, 0x0f, 0x9e, 0x8b, 0xf3, - 0x22, 0x96, 0x89, 0x76, 0x20, 0x41, 0x55, 0xd2, 0xf6, 0x34, 0xcb, 0x64, 0xb6, 0x21, 0x5d, 0x69, - 0x1e, 0x1e, 0x14, 0xe4, 0x0d, 0x26, 0x7c, 0xee, 0x2e, 0x64, 0x0e, 0xde, 0x30, 0x51, 0x01, 0x92, - 0x9e, 0xa3, 0xe1, 0x47, 0x16, 0xf1, 0x2c, 0x7b, 0x87, 0xf9, 0x45, 0xb2, 0x0a, 0x9e, 0x53, 0x17, - 0x92, 0xfc, 0x9f, 0x47, 0x00, 0x1d, 0xa5, 0x42, 0xf4, 0x77, 0x12, 0xbc, 0xec, 0x3b, 0x4b, 0x8e, - 0x6b, 0xed, 0x58, 0xb6, 0xde, 0x19, 0xf2, 0x9a, 0x24, 0xb6, 0x0f, 0x9f, 0x3e, 0x0f, 0xdf, 0x0a, - 0x4f, 0x6a, 0x5d, 0xc0, 0x8f, 0x7a, 0x54, 0x2f, 0x53, 0xc3, 0xce, 0x3d, 0xaa, 0x23, 0x55, 0xee, - 0xaa, 0xb9, 0xfe, 0x09, 0x8d, 0xf3, 0x2b, 0xf0, 0xca, 0xa9, 0xc0, 0xe7, 0x31, 0xd3, 0xf9, 0x1f, - 0x4b, 0x70, 0xe9, 0x04, 0xe3, 0x17, 0xc6, 0x49, 0x73, 0x9c, 0x3b, 0x61, 0x9c, 0xe4, 0xc2, 0xf7, - 0x9f, 0xc3, 0xc0, 0x86, 0x07, 0xb1, 0x04, 0x2f, 0x9d, 0x48, 0x20, 0x67, 0xcd, 0x46, 0x0e, 0x03, - 0xfd, 0x8b, 0x04, 0xd3, 0x23, 0xe7, 0x01, 0x7d, 0x12, 0x52, 0xf0, 0x06, 0x8d, 0x6f, 0x59, 0x27, - 0x2f, 0x44, 0xcb, 0xf7, 0x8e, 0x6a, 0xf9, 0x1a, 0xed, 0x81, 0x75, 0xcc, 0x7a, 0xf8, 0xf0, 0x99, - 0x7b, 0xe0, 0x10, 0x03, 0x4d, 0x6f, 0x46, 0x65, 0x49, 0x89, 0x14, 0xdf, 0xa1, 0x13, 0x64, 0x2b, - 0x1b, 0x04, 0x3c, 0xaf, 0x00, 0xec, 0x5a, 0x3b, 0xbb, 0xda, 0x43, 0xdd, 0xc3, 0xae, 0x48, 0x2d, - 0x24, 0xa8, 0xe4, 0x63, 0x2a, 0x28, 0xfe, 0x29, 0x40, 0xba, 0xd1, 0xed, 0x39, 0xae, 0xe7, 0x7b, - 0x5d, 0xb7, 0x21, 0xc6, 0x09, 0x5f, 0x28, 0x79, 0xe9, 0x94, 0x6d, 0x1c, 0x6a, 0xc9, 0xed, 0xb4, - 0x60, 0x18, 0x81, 0x81, 0xd6, 0x21, 0xce, 0x8d, 0x23, 0xc9, 0x5d, 0x62, 0x70, 0xf3, 0x63, 0xc3, - 0x71, 0x33, 0xeb, 0xdb, 0x46, 0x81, 0x12, 0xf8, 0x47, 0x91, 0x63, 0xfd, 0xa3, 0x0f, 0x20, 0xc6, - 0xf3, 0x42, 0x22, 0x72, 0x2c, 0x1c, 0x13, 0x72, 0x36, 0xd6, 0x17, 0xad, 0x0e, 0x5e, 0x64, 0xd5, - 0xfc, 0xd1, 0xf2, 0x46, 0xe8, 0x75, 0x90, 0x09, 0xf1, 0x34, 0x62, 0xfd, 0x88, 0x7b, 0x9c, 0x93, - 0x3c, 0xe7, 0xd1, 0x6a, 0x6d, 0xb6, 0xac, 0x1f, 0x61, 0x35, 0x4e, 0x88, 0x47, 0x7f, 0xa0, 0xcb, - 0xc0, 0xac, 0x2f, 0xd1, 0xa9, 0x4d, 0x65, 0xe6, 0x73, 0x52, 0x0d, 0x49, 0x18, 0xce, 0x9e, 0xd5, - 0xd3, 0xb6, 0xf7, 0x08, 0xb7, 0x59, 0x02, 0x67, 0xcf, 0xea, 0x2d, 0xae, 0x10, 0x35, 0x4e, 0x0b, - 0x17, 0xf7, 0x08, 0xca, 0x83, 0xfc, 0x50, 0xef, 0x74, 0x98, 0x87, 0x3b, 0xc5, 0x50, 0x82, 0xef, - 0x61, 0x92, 0x8c, 0x7d, 0xbd, 0x24, 0x29, 0x7c, 0xca, 0x9e, 0xee, 0xed, 0xb2, 0x70, 0x24, 0xa1, - 0x02, 0x17, 0x6d, 0xe8, 0xde, 0x2e, 0xca, 0x41, 0x9c, 0xcf, 0x8b, 0xe4, 0xe4, 0xb9, 0xc9, 0xab, - 0x29, 0xd5, 0xff, 0x44, 0x6f, 0xc0, 0xb4, 0xc5, 0x42, 0x6c, 0xcd, 0xb4, 0x5c, 0x6c, 0x78, 0x9d, - 0x7d, 0x66, 0x6f, 0x65, 0x35, 0xc3, 0xc5, 0x35, 0x21, 0x45, 0xd7, 0x40, 0x19, 0x75, 0x50, 0x98, - 0x9d, 0x94, 0xd5, 0xe9, 0x11, 0xff, 0x84, 0xfa, 0x32, 0x62, 0xaf, 0x43, 0x86, 0x3f, 0xc7, 0x7d, - 0x19, 0x51, 0x30, 0x30, 0xfa, 0xd7, 0x40, 0x11, 0xde, 0xc9, 0xa0, 0x6e, 0x9a, 0xe3, 0x72, 0xf9, - 0xa0, 0x6a, 0x09, 0x66, 0x7a, 0xba, 0x4b, 0xb0, 0xd6, 0xee, 0xdb, 0x66, 0x07, 0x6b, 0x1c, 0x2b, - 0x97, 0x61, 0xb5, 0xb3, 0xac, 0xa8, 0xc2, 0x4a, 0xb8, 0xde, 0x9d, 0x15, 0xb5, 0x5d, 0xfc, 0x3f, - 0x88, 0xda, 0xf2, 0xbf, 0x88, 0xc0, 0x14, 0x3b, 0x65, 0xe8, 0x26, 0x44, 0xe9, 0x5e, 0x8a, 0x3c, - 0xc3, 0xb8, 0x9e, 0x33, 0x6b, 0x83, 0x10, 0x44, 0x6d, 0xbd, 0x8b, 0x73, 0x88, 0xed, 0x34, 0xfb, - 0x8d, 0x2e, 0x41, 0x9c, 0xe0, 0xfb, 0xda, 0x03, 0xbd, 0x93, 0x9b, 0x61, 0x8a, 0x18, 0x23, 0xf8, - 0xfe, 0x5d, 0xbd, 0x83, 0x2e, 0x40, 0xcc, 0x22, 0x9a, 0x8d, 0x1f, 0xe6, 0x66, 0x39, 0x9f, 0x5a, - 0x64, 0x0d, 0x3f, 0x44, 0xdf, 0x80, 0xc4, 0x43, 0x9d, 0x68, 0xb8, 0xdb, 0xf3, 0xf6, 0xd9, 0x5a, - 0xc8, 0x54, 0x75, 0x49, 0x9d, 0x7e, 0x33, 0xb3, 0xab, 0xbb, 0x3b, 0xd8, 0xd3, 0x0c, 0xa7, 0x43, - 0x72, 0x17, 0xe8, 0x51, 0xa5, 0x5e, 0x3b, 0x15, 0x55, 0x9d, 0x0e, 0x69, 0x46, 0xe5, 0x88, 0x32, - 0xd9, 0x8c, 0xca, 0x93, 0x4a, 0xb4, 0x19, 0x95, 0xa3, 0xca, 0x54, 0x33, 0x2a, 0x4f, 0x29, 0xb1, - 0x66, 0x54, 0x8e, 0x29, 0xf1, 0x66, 0x54, 0x8e, 0x2b, 0x72, 0x33, 0x2a, 0xcb, 0x4a, 0xa2, 0x19, - 0x95, 0x13, 0x0a, 0x34, 0xa3, 0x32, 0x28, 0xc9, 0x66, 0x54, 0x4e, 0x2a, 0xa9, 0x66, 0x54, 0x4e, - 0x29, 0xe9, 0x66, 0x54, 0x4e, 0x2b, 0x99, 0x66, 0x54, 0xce, 0x28, 0xd3, 0xcd, 0xa8, 0x3c, 0xad, - 0x28, 0xcd, 0xa8, 0xac, 0x28, 0xd9, 0x66, 0x54, 0xce, 0x2a, 0x28, 0x5f, 0x17, 0x89, 0x2d, 0x1d, - 0x7d, 0x7f, 0x68, 0x9d, 0xc6, 0xf6, 0xe8, 0x59, 0xa3, 0xe2, 0x2f, 0x25, 0x50, 0x5a, 0xf8, 0x7e, - 0x1f, 0xdb, 0x06, 0xbe, 0xab, 0x77, 0xaa, 0xbb, 0x7d, 0x7b, 0x0f, 0xbd, 0x0e, 0xd3, 0x06, 0xfd, - 0xa1, 0xf1, 0x6c, 0x0f, 0x5d, 0x31, 0x89, 0xad, 0x58, 0x9a, 0x89, 0x5b, 0x54, 0x4a, 0x17, 0xee, - 0x15, 0x00, 0x51, 0x8f, 0xb2, 0x49, 0x84, 0x55, 0x49, 0xf0, 0x2a, 0x94, 0x42, 0x46, 0x60, 0x5c, - 0xe7, 0x21, 0xa3, 0xac, 0x21, 0x18, 0xd5, 0x79, 0x88, 0xe6, 0x61, 0xd6, 0xc6, 0x8f, 0x3c, 0x6d, - 0xb4, 0x32, 0xa3, 0x27, 0x35, 0x4b, 0xcb, 0xaa, 0xe1, 0x06, 0xc5, 0x7f, 0x8a, 0xc0, 0xb4, 0x3f, - 0x68, 0x9f, 0xd3, 0xb7, 0x41, 0xa1, 0xbb, 0x6b, 0x99, 0x9a, 0xe7, 0x70, 0x24, 0x9f, 0xdd, 0x3f, - 0x38, 0x85, 0x8e, 0x47, 0x50, 0xe8, 0x77, 0xc3, 0xdc, 0x74, 0x58, 0x77, 0xdc, 0x09, 0x50, 0xd3, - 0x24, 0x2c, 0xcb, 0x6f, 0x41, 0xc6, 0x6f, 0xc4, 0x25, 0xa8, 0x0a, 0xb1, 0xa1, 0xfe, 0xde, 0x1c, - 0xa3, 0x3f, 0x7f, 0xa9, 0x55, 0xd1, 0x34, 0xff, 0xbb, 0x80, 0x8e, 0xf6, 0x1d, 0x36, 0xfd, 0x53, - 0xdc, 0xf4, 0xaf, 0x0f, 0x3b, 0x20, 0xef, 0x9d, 0x6f, 0x6e, 0xa1, 0x61, 0x87, 0x53, 0x15, 0xff, - 0x18, 0x81, 0x0c, 0x37, 0x4c, 0x81, 0x4d, 0xa5, 0x14, 0x45, 0x19, 0xd0, 0xb2, 0x77, 0xb4, 0x9e, - 0x10, 0xb2, 0xf9, 0x45, 0x54, 0xc5, 0x2f, 0x08, 0x2a, 0xbf, 0x0a, 0x69, 0x17, 0xeb, 0xe6, 0xa0, - 0x62, 0x84, 0x55, 0x4c, 0x51, 0x61, 0x50, 0xe9, 0x0a, 0x64, 0x98, 0xdf, 0x33, 0xa8, 0x35, 0xc9, - 0x6a, 0xa5, 0x99, 0x34, 0xa8, 0x56, 0x81, 0x34, 0xe9, 0xe9, 0xf6, 0xa0, 0x56, 0x94, 0x2d, 0xea, - 0x19, 0x89, 0xd5, 0x14, 0x6d, 0x13, 0x76, 0x08, 0x5c, 0x4c, 0xfa, 0x5d, 0xac, 0xf5, 0x1c, 0x1e, - 0x79, 0x4f, 0xaa, 0x09, 0x2e, 0xd9, 0x70, 0x08, 0xda, 0x62, 0xaa, 0xc2, 0xd6, 0x42, 0x33, 0xf9, - 0xe2, 0xe4, 0x62, 0xac, 0x97, 0xeb, 0xe3, 0x2f, 0xa7, 0x3a, 0x4d, 0x86, 0x05, 0xc5, 0xbf, 0x96, - 0xe0, 0x12, 0x8d, 0xbf, 0xf9, 0x49, 0xab, 0xb2, 0x2b, 0x14, 0x5f, 0x3b, 0x75, 0x88, 0xb3, 0x18, - 0x3e, 0x70, 0xc4, 0x96, 0x0f, 0x0f, 0x0a, 0x31, 0x5a, 0xfb, 0xb9, 0xad, 0x5c, 0x8c, 0x02, 0x37, - 0x58, 0x44, 0xe9, 0xb9, 0xba, 0x4d, 0x2c, 0x1a, 0x5b, 0xd1, 0x6d, 0xeb, 0xe2, 0x6e, 0x1b, 0xbb, - 0x7c, 0x33, 0x52, 0xea, 0xec, 0x50, 0xe1, 0x2a, 0x2f, 0x2b, 0xe6, 0x21, 0x37, 0x3a, 0xe4, 0x20, - 0x5d, 0xf5, 0xff, 0xe0, 0xe2, 0x1a, 0x7e, 0x78, 0xdc, 0x6c, 0x2a, 0x10, 0xe7, 0x4c, 0xe7, 0xab, - 0xfc, 0xd5, 0x51, 0xd2, 0x09, 0xdf, 0x22, 0x95, 0xd8, 0x48, 0x37, 0x59, 0x03, 0xd5, 0x6f, 0x58, - 0xfc, 0x14, 0x2e, 0x8d, 0xa0, 0x07, 0xdb, 0xf7, 0x21, 0xc4, 0x68, 0x9c, 0x2e, 0xdc, 0xb3, 0xcc, - 0x51, 0x4a, 0x3b, 0x8a, 0xde, 0xa2, 0xf5, 0x55, 0xd1, 0xac, 0xa8, 0xb2, 0x3c, 0x5b, 0xbf, 0x8b, - 0xa9, 0x86, 0xdc, 0xb6, 0x88, 0x87, 0x3e, 0x82, 0x94, 0xd0, 0x08, 0xaa, 0x28, 0xfe, 0xb0, 0xcf, - 0x50, 0xaa, 0xa4, 0x1b, 0x80, 0x90, 0xe2, 0xdf, 0x48, 0x30, 0x53, 0x73, 0x9d, 0x5e, 0x0f, 0x9b, - 0xc2, 0xe4, 0xf0, 0xb5, 0xf0, 0x2d, 0x8d, 0x14, 0xb2, 0x34, 0x6b, 0x10, 0x69, 0xd4, 0x84, 0x3f, - 0x7c, 0xeb, 0x79, 0xdd, 0xec, 0x46, 0x0d, 0xbd, 0xc7, 0x17, 0xa4, 0x4f, 0x18, 0x7f, 0x66, 0x8e, - 0xa4, 0x5b, 0x86, 0xd4, 0x94, 0x55, 0x54, 0x45, 0x83, 0xe2, 0xe7, 0x71, 0xb8, 0x10, 0x5e, 0xe4, - 0xa5, 0xaa, 0x3f, 0xf0, 0xcf, 0x20, 0xee, 0x87, 0xdc, 0x63, 0xf0, 0xe4, 0x71, 0x10, 0x25, 0xb1, - 0x1e, 0xe1, 0xb0, 0xdb, 0xc7, 0x44, 0x2d, 0xc8, 0x5a, 0xb6, 0x87, 0xdd, 0x0e, 0xd6, 0x1f, 0x50, - 0xe7, 0x82, 0xae, 0x99, 0x48, 0x71, 0x8e, 0x6b, 0xca, 0x95, 0x10, 0x00, 0x77, 0x09, 0x3e, 0x83, - 0x99, 0x30, 0xa8, 0x3f, 0xfe, 0xd3, 0x73, 0x6b, 0x6c, 0x78, 0x03, 0x58, 0x3f, 0x09, 0x18, 0x02, - 0x12, 0x09, 0x02, 0x74, 0x2f, 0x88, 0x0b, 0x78, 0xfe, 0xf4, 0xe6, 0x33, 0xaf, 0x48, 0x6d, 0x24, - 0x46, 0x18, 0xf2, 0x74, 0x99, 0x11, 0xfc, 0x9a, 0x3c, 0xdd, 0xbb, 0x10, 0xe3, 0x29, 0x36, 0x71, - 0x67, 0x70, 0xeb, 0x59, 0xa7, 0xc0, 0x53, 0x77, 0xaa, 0x40, 0xcb, 0xff, 0x89, 0x04, 0xa9, 0xf0, - 0x76, 0x23, 0x0b, 0x64, 0xb6, 0xfc, 0x3e, 0xa5, 0x4d, 0xbe, 0xf0, 0xc8, 0x8f, 0xab, 0x52, 0xc3, - 0xa4, 0x8e, 0x98, 0xe9, 0x3a, 0xbd, 0xc1, 0x9d, 0xd1, 0xa4, 0x2a, 0x53, 0x01, 0x75, 0x1d, 0xf3, - 0xbf, 0x07, 0x89, 0x60, 0xd1, 0x43, 0xb9, 0x9c, 0xc9, 0x17, 0x98, 0xcb, 0x39, 0xb5, 0xff, 0x1a, - 0xa4, 0x87, 0x56, 0x0c, 0x5d, 0x0c, 0xc6, 0x10, 0xad, 0xc4, 0xf8, 0x18, 0xce, 0x44, 0x29, 0xfe, - 0x55, 0x1c, 0x66, 0x8e, 0x63, 0xda, 0x4f, 0x40, 0x09, 0xf1, 0x96, 0xd6, 0xb1, 0x88, 0x27, 0x74, - 0xf3, 0xda, 0xe9, 0xa9, 0x87, 0x10, 0xf9, 0x09, 0x55, 0xcc, 0xb8, 0xc3, 0x94, 0xf8, 0x03, 0xc8, - 0x98, 0x7c, 0xe0, 0x22, 0xfb, 0x29, 0x6e, 0x7e, 0x4f, 0x0b, 0x86, 0x8f, 0x21, 0x40, 0x81, 0x9e, - 0x36, 0x43, 0x45, 0x04, 0x19, 0x90, 0x0e, 0xc0, 0xf7, 0x7b, 0x22, 0xaa, 0x7a, 0x7e, 0x32, 0x4c, - 0xf9, 0xbd, 0x50, 0x4c, 0xb4, 0x03, 0xd3, 0x7e, 0x27, 0x7e, 0x00, 0x9e, 0x78, 0x21, 0xdd, 0xf8, - 0x0b, 0xd3, 0x12, 0x01, 0xf9, 0x4f, 0x24, 0x98, 0xf1, 0x7b, 0x0a, 0x6e, 0x09, 0x2c, 0x93, 0xd1, - 0x59, 0xba, 0xd2, 0x3a, 0x3c, 0x28, 0x64, 0xc5, 0xca, 0xf8, 0xd7, 0x02, 0xcf, 0xad, 0x77, 0x59, - 0x73, 0x04, 0xd0, 0xa4, 0x3e, 0x04, 0x2d, 0xa7, 0x1d, 0x4f, 0x0d, 0x7c, 0x08, 0x4a, 0x6c, 0xcf, - 0xef, 0x43, 0xd0, 0x9f, 0x0d, 0x13, 0xfd, 0x81, 0x04, 0x59, 0x7e, 0x69, 0xd1, 0xed, 0x7b, 0x3a, - 0xbf, 0x1f, 0xf4, 0x23, 0xf3, 0x4f, 0x0e, 0x0f, 0x0a, 0xd3, 0x6c, 0x7b, 0x57, 0x45, 0x19, 0xeb, - 0xb6, 0xf2, 0xac, 0xdd, 0x0e, 0x50, 0x44, 0x20, 0x1b, 0x08, 0x4c, 0xb4, 0x02, 0x19, 0x9e, 0xae, - 0xf0, 0x5f, 0x96, 0xb0, 0x90, 0x3d, 0x5d, 0x79, 0xed, 0xe9, 0x41, 0x61, 0xee, 0x98, 0x73, 0xc2, - 0x33, 0x1d, 0x77, 0x79, 0x5d, 0x35, 0xbd, 0x1d, 0xfe, 0x44, 0xb7, 0x61, 0x9a, 0x3b, 0x9e, 0x41, - 0x80, 0xcb, 0x12, 0x16, 0x63, 0x5e, 0xb5, 0x71, 0xa7, 0x35, 0x90, 0x8a, 0x2c, 0xd4, 0x45, 0x98, - 0x3d, 0xd6, 0x67, 0xfa, 0x32, 0x06, 0x17, 0x87, 0x69, 0x35, 0xf0, 0x6a, 0xb4, 0x51, 0x7b, 0xfb, - 0xe1, 0xd8, 0xd4, 0xec, 0x63, 0x70, 0x6a, 0xf4, 0xbf, 0x46, 0x2d, 0xee, 0x67, 0x23, 0xd6, 0xeb, - 0x19, 0xf0, 0xd9, 0xf6, 0x8e, 0xe0, 0xfb, 0x26, 0xec, 0x5e, 0x60, 0x59, 0x78, 0xde, 0xe9, 0xa3, - 0x67, 0x80, 0x67, 0xed, 0xfd, 0xcf, 0xc0, 0xb6, 0xfc, 0x5a, 0x82, 0xf4, 0xd0, 0xcc, 0x7e, 0x9b, - 0xc6, 0x65, 0x23, 0xf0, 0xad, 0xf8, 0x03, 0xa4, 0x77, 0xcf, 0x3f, 0xad, 0x61, 0x97, 0x2b, 0xff, - 0xb7, 0x12, 0xa4, 0x87, 0x16, 0xf2, 0x6b, 0x32, 0x4b, 0x2f, 0x7e, 0xe4, 0x6d, 0xc8, 0x0c, 0x6f, - 0x51, 0xa8, 0x0f, 0xe9, 0xc5, 0xf4, 0x51, 0xfc, 0x1e, 0xc4, 0xb8, 0x04, 0x21, 0xc8, 0x7c, 0x5c, - 0x6e, 0x6c, 0x36, 0xd6, 0x96, 0xb4, 0xc5, 0x75, 0x55, 0x5b, 0xaa, 0x2a, 0x13, 0x28, 0x05, 0x72, - 0xad, 0x7e, 0xbb, 0x4e, 0x85, 0x8a, 0x84, 0x92, 0x10, 0x67, 0x5f, 0xf5, 0x9a, 0x12, 0x29, 0x56, - 0x40, 0xe1, 0xd8, 0xdb, 0x98, 0x9a, 0x19, 0x1a, 0x45, 0xa0, 0x12, 0xcc, 0x30, 0x97, 0xbf, 0x4b, - 0x3d, 0x2b, 0x7a, 0xbc, 0xb5, 0x90, 0x2f, 0x9e, 0x0d, 0x8a, 0xe8, 0xe9, 0x5d, 0xd3, 0xbb, 0xb8, - 0xf8, 0xab, 0x28, 0x64, 0x07, 0x20, 0xbe, 0x91, 0xfd, 0x4b, 0x69, 0x10, 0xcf, 0xc4, 0xce, 0xbc, - 0x7d, 0x3a, 0xd2, 0x5e, 0x84, 0x36, 0xe2, 0xc2, 0xfc, 0x63, 0x7a, 0x68, 0x9e, 0x1e, 0x14, 0xb2, - 0xa3, 0x83, 0x25, 0xcf, 0x79, 0x93, 0xee, 0x0f, 0x91, 0x65, 0x5e, 0x2d, 0x7b, 0x4f, 0x1b, 0x3c, - 0x83, 0xe1, 0x99, 0x57, 0xcb, 0xde, 0xdb, 0x52, 0x1b, 0x6a, 0x9c, 0x16, 0x6e, 0xb9, 0x16, 0x6a, - 0x42, 0xd4, 0xe9, 0x79, 0x7e, 0x00, 0xfd, 0xdd, 0x73, 0x4d, 0x69, 0xbd, 0x27, 0xe6, 0xa3, 0x32, - 0x0c, 0xd4, 0xe4, 0x17, 0xaa, 0x83, 0x85, 0x66, 0x84, 0x3c, 0x26, 0x85, 0xa6, 0x87, 0x36, 0x22, - 0xbf, 0x03, 0xa9, 0xf0, 0x8a, 0x1d, 0x73, 0xcb, 0x52, 0x1e, 0x4e, 0x72, 0xbc, 0x39, 0xd6, 0xd0, - 0x45, 0x80, 0x19, 0xba, 0x0c, 0xf9, 0x1e, 0x24, 0x82, 0x79, 0x9c, 0xe7, 0x4e, 0x88, 0x73, 0x7c, - 0x90, 0xc1, 0x9b, 0x52, 0x62, 0xc5, 0xcf, 0x23, 0x90, 0x52, 0x31, 0x71, 0x3a, 0x0f, 0xb0, 0x49, - 0x3d, 0xa8, 0xe0, 0xd9, 0x97, 0x34, 0xfe, 0xb3, 0xaf, 0x32, 0x24, 0x06, 0x16, 0xe8, 0x1c, 0x4f, - 0x9f, 0x06, 0xad, 0xd0, 0x27, 0x90, 0x6e, 0x3b, 0x7d, 0xdb, 0xd4, 0xdd, 0x7d, 0xe6, 0x57, 0x31, - 0x0f, 0x24, 0xb3, 0xf0, 0xed, 0xd3, 0x7d, 0xc1, 0x60, 0xd4, 0xa5, 0x8a, 0x68, 0x4c, 0xfd, 0x27, - 0x35, 0xd5, 0x0e, 0x7d, 0x15, 0x3f, 0x80, 0x54, 0xb8, 0x14, 0xc9, 0x10, 0x5d, 0x5b, 0x5f, 0xab, - 0xf3, 0x33, 0x59, 0x29, 0x57, 0x57, 0x16, 0x1b, 0xb7, 0x6f, 0x2b, 0x12, 0x95, 0xd7, 0xef, 0x35, - 0x36, 0x95, 0x08, 0x3d, 0x9d, 0x6a, 0xbd, 0xb5, 0x59, 0x56, 0x37, 0xfd, 0x44, 0x67, 0x11, 0x43, - 0x3a, 0xdc, 0x1f, 0x65, 0x3e, 0xea, 0x76, 0x32, 0xc1, 0x50, 0xe4, 0xfd, 0xc6, 0x98, 0x23, 0xf6, - 0x35, 0xc8, 0x0d, 0xa3, 0x16, 0xff, 0x39, 0x02, 0x68, 0xb0, 0xf1, 0x01, 0x59, 0xdd, 0x03, 0x30, - 0x76, 0xb1, 0xb1, 0xd7, 0x73, 0x2c, 0xdb, 0x13, 0xb1, 0xe6, 0xbb, 0x63, 0xe9, 0x4e, 0x40, 0x56, - 0xd5, 0xa0, 0xbd, 0x1a, 0xc2, 0x42, 0x3f, 0x3d, 0x3d, 0x51, 0x3e, 0xc9, 0x12, 0xe5, 0xec, 0xe4, - 0xff, 0x76, 0x93, 0xe5, 0x65, 0x80, 0xc1, 0x88, 0xd1, 0x0d, 0x98, 0x3a, 0x47, 0x76, 0x83, 0xd7, - 0x0d, 0xeb, 0x7a, 0xf1, 0xbf, 0xa3, 0x80, 0xaa, 0x2e, 0xd6, 0x3d, 0x4c, 0x29, 0x9a, 0x9c, 0x96, - 0xe2, 0xa8, 0xc0, 0x14, 0x0f, 0xe9, 0x23, 0xe7, 0x09, 0xe9, 0xfd, 0xae, 0x59, 0x53, 0xf4, 0x43, - 0x48, 0x19, 0x4e, 0xa7, 0xdf, 0xb5, 0x35, 0xf6, 0x2c, 0x43, 0xc4, 0x1f, 0xdf, 0x39, 0x6d, 0xc7, - 0x8e, 0x0c, 0xae, 0x54, 0x75, 0x3a, 0xf4, 0x3b, 0x78, 0xc0, 0xc8, 0x00, 0x59, 0x0d, 0xf4, 0x32, - 0x24, 0x02, 0xe6, 0x61, 0xea, 0x90, 0x50, 0x07, 0x02, 0xb4, 0x00, 0x53, 0x3a, 0xd1, 0x9c, 0x6d, - 0xe6, 0x4c, 0x9f, 0x75, 0x14, 0xd5, 0xa8, 0x4e, 0xd6, 0xb7, 0xd1, 0x75, 0xc8, 0x76, 0xf5, 0x47, - 0xda, 0xb6, 0xab, 0x1b, 0xc2, 0x39, 0xee, 0x70, 0x26, 0x94, 0xd4, 0xe9, 0xae, 0xfe, 0x68, 0x51, - 0xc8, 0x1b, 0x66, 0x07, 0xa3, 0x1b, 0x90, 0xde, 0xbe, 0xcf, 0x43, 0x2b, 0x6e, 0x95, 0xf8, 0x1b, - 0x97, 0xe9, 0xc3, 0x83, 0x42, 0x72, 0xf1, 0x0e, 0x5b, 0x18, 0x6a, 0x93, 0xd4, 0xe4, 0xf6, 0xfd, - 0xe0, 0x23, 0xff, 0x5f, 0x12, 0xc4, 0xc5, 0x8c, 0x50, 0x0f, 0x40, 0x2c, 0x8f, 0x65, 0xf2, 0x3d, - 0x4d, 0x57, 0xee, 0x1c, 0x1e, 0x14, 0x12, 0x55, 0x26, 0x6d, 0xd4, 0xc8, 0xd3, 0x83, 0xc2, 0x47, - 0xcf, 0x6a, 0x51, 0x7c, 0x10, 0x35, 0xc1, 0x3b, 0x69, 0x98, 0x2c, 0x8f, 0xbb, 0xab, 0x13, 0x6d, - 0xd7, 0x22, 0x9e, 0xb3, 0xe3, 0xea, 0x5d, 0x71, 0xbf, 0x9c, 0xda, 0xd5, 0xc9, 0xb2, 0x2f, 0x43, - 0x79, 0xea, 0x9b, 0x3d, 0xe0, 0xaf, 0x6a, 0xf8, 0x6b, 0x83, 0xe0, 0x1b, 0x2d, 0xc0, 0x85, 0xa0, - 0xb1, 0x46, 0x57, 0xaa, 0xdd, 0x37, 0xf6, 0x30, 0xb3, 0x41, 0x94, 0xdc, 0x67, 0x82, 0xc2, 0x55, - 0xfd, 0x51, 0x85, 0x17, 0x15, 0x2f, 0xc0, 0x4c, 0x68, 0x5b, 0x03, 0x4f, 0x1a, 0x83, 0xc2, 0xaf, - 0xc1, 0x43, 0x4f, 0x72, 0xef, 0xc0, 0xf4, 0xc8, 0x8b, 0x73, 0xc1, 0xbf, 0xe1, 0xfc, 0xe3, 0xf0, - 0x13, 0xf5, 0x52, 0x95, 0x7f, 0xfa, 0xb1, 0x41, 0xc6, 0x18, 0xfa, 0x2e, 0xce, 0x40, 0x36, 0xe8, - 0x26, 0xe8, 0xfb, 0xd7, 0x29, 0x88, 0x6f, 0xe8, 0xfb, 0x1d, 0x47, 0x37, 0xd1, 0x1c, 0x24, 0xfd, - 0xe7, 0x30, 0x7e, 0x7f, 0x09, 0x35, 0x2c, 0x1a, 0x56, 0x33, 0x85, 0x5d, 0x04, 0x85, 0xd4, 0xcc, - 0x82, 0x4c, 0x9f, 0x60, 0x97, 0x6a, 0x80, 0xc6, 0x9e, 0xc7, 0x73, 0x73, 0x53, 0xa9, 0x3c, 0x3d, - 0x28, 0xdc, 0x1a, 0x6f, 0xf3, 0xb0, 0xd1, 0x77, 0x2d, 0x6f, 0xbf, 0xd4, 0xba, 0x73, 0x7b, 0x4b, - 0x40, 0x51, 0xae, 0x70, 0xd4, 0x74, 0x3f, 0xfc, 0x29, 0x5e, 0x3d, 0xd1, 0x8d, 0xd0, 0xba, 0x96, - 0xe1, 0x3a, 0xc4, 0xbf, 0x6e, 0x11, 0xd2, 0x55, 0x26, 0x44, 0x6f, 0xc0, 0xf4, 0xb6, 0x65, 0xb3, - 0x1b, 0x43, 0xbf, 0x1e, 0xbf, 0x69, 0xc9, 0xf8, 0x62, 0x51, 0xf1, 0x01, 0x64, 0x42, 0xcf, 0x8d, - 0xa8, 0x12, 0xc6, 0x98, 0x12, 0xae, 0x1f, 0x1e, 0x14, 0xd2, 0x83, 0x43, 0xcd, 0x15, 0xf1, 0x79, - 0x5c, 0x9b, 0xf4, 0xa0, 0x1b, 0xaa, 0x86, 0xb3, 0x30, 0xc5, 0xfe, 0x78, 0x82, 0xbf, 0xd7, 0x54, - 0xf9, 0x07, 0xaa, 0x43, 0x5a, 0xa4, 0x42, 0xf8, 0x5f, 0x56, 0x88, 0x37, 0x5a, 0x73, 0xa1, 0xad, - 0xf7, 0xff, 0xf6, 0xa2, 0x54, 0xb7, 0x0d, 0xc7, 0xc4, 0x66, 0x9d, 0x7e, 0xab, 0x22, 0xf3, 0xcb, - 0x3e, 0x08, 0x5a, 0x82, 0x8c, 0xd1, 0xc1, 0xba, 0xdd, 0xef, 0xf9, 0x38, 0x68, 0x4c, 0x9c, 0xb4, - 0x68, 0x27, 0x80, 0xd6, 0x00, 0x6d, 0xb3, 0x47, 0x33, 0xe1, 0x51, 0xb1, 0x9b, 0xc5, 0x71, 0xc0, - 0x14, 0xd6, 0x56, 0x1d, 0x8c, 0x0c, 0xbd, 0x06, 0x69, 0xdb, 0xb1, 0x0d, 0xdd, 0x36, 0x70, 0x87, - 0x31, 0x2b, 0xbf, 0x8c, 0x1c, 0x16, 0xa2, 0x0a, 0xc4, 0xf8, 0xb5, 0xb5, 0x88, 0x61, 0xaf, 0x8e, - 0xfb, 0xaa, 0x79, 0x79, 0x42, 0x15, 0x2d, 0x51, 0x1d, 0xe2, 0x2e, 0x7f, 0x42, 0xc1, 0xae, 0xb2, - 0xcf, 0xcc, 0x25, 0x85, 0x9e, 0xb1, 0x2c, 0x4f, 0xa8, 0x7e, 0x5b, 0xb4, 0xe9, 0xbf, 0x28, 0xe4, - 0x76, 0x54, 0x3c, 0x0a, 0x2b, 0x8d, 0x19, 0x21, 0x0c, 0x00, 0x87, 0x50, 0xe8, 0x04, 0x2d, 0x76, - 0x15, 0xc5, 0x2e, 0xb9, 0x4f, 0x9f, 0xe0, 0xd0, 0x63, 0x0a, 0x3a, 0x41, 0xde, 0x12, 0xad, 0x51, - 0x47, 0xc0, 0xb7, 0xed, 0xec, 0xfa, 0x3b, 0xb9, 0xf0, 0xd6, 0x79, 0xfc, 0xdf, 0xe5, 0x09, 0x35, - 0x84, 0x80, 0xee, 0x40, 0xd2, 0x18, 0x50, 0x54, 0x6e, 0x9a, 0x01, 0xbe, 0x7d, 0x2e, 0x3b, 0xb5, - 0x4c, 0x6d, 0xd3, 0x40, 0x8a, 0x3e, 0x85, 0x0c, 0x19, 0x8a, 0x97, 0x72, 0x17, 0x18, 0xea, 0x3b, - 0xe7, 0xcd, 0xd7, 0x2e, 0x4f, 0xa8, 0x23, 0x48, 0xe8, 0xff, 0x83, 0xe2, 0x8d, 0x5c, 0xea, 0xb0, - 0xfb, 0xeb, 0xd3, 0x5f, 0xec, 0x9d, 0x70, 0x75, 0xb5, 0x3c, 0xa1, 0x1e, 0x41, 0x43, 0x9f, 0xc1, - 0x34, 0x19, 0xfe, 0xeb, 0x83, 0xdc, 0x25, 0xd6, 0xc1, 0xb7, 0x4e, 0xbd, 0x99, 0x38, 0xee, 0xef, - 0x2c, 0x96, 0x27, 0xd4, 0x51, 0x2c, 0x0a, 0x6f, 0x0f, 0xdf, 0x0d, 0xb1, 0xd7, 0x11, 0xa7, 0xc3, - 0x1f, 0x7f, 0x57, 0x45, 0xe1, 0x47, 0xb0, 0xd0, 0x0a, 0x24, 0xba, 0x3e, 0xe7, 0xe7, 0x5e, 0x3a, - 0x33, 0xc4, 0x18, 0x35, 0x43, 0xcb, 0x13, 0xea, 0xa0, 0x7d, 0x25, 0x01, 0x71, 0x71, 0x87, 0x18, - 0x5c, 0xf0, 0xf3, 0xab, 0x7d, 0x7e, 0xa9, 0x9f, 0x57, 0xbe, 0x51, 0xfc, 0x59, 0x02, 0xe4, 0xc0, - 0x49, 0x9d, 0x07, 0x14, 0xb8, 0x0f, 0x83, 0x87, 0xac, 0xd4, 0xac, 0x44, 0x96, 0x27, 0xd4, 0xac, - 0x5f, 0x36, 0x78, 0xcb, 0x7a, 0x6b, 0xe8, 0x75, 0xd3, 0x38, 0x7f, 0x2d, 0x42, 0x07, 0x18, 0x3c, - 0x7f, 0xa2, 0x74, 0xdf, 0x75, 0x4c, 0x6b, 0xdb, 0x1a, 0xd0, 0x3d, 0xcf, 0x3e, 0x67, 0x7c, 0xb1, - 0xa0, 0xfb, 0x2b, 0x90, 0x71, 0xfb, 0x36, 0xbb, 0x3a, 0x14, 0x31, 0x3f, 0xf7, 0x99, 0xd2, 0x42, - 0x2a, 0xc2, 0xf6, 0xea, 0x08, 0x03, 0x5d, 0x3b, 0x93, 0x81, 0xfc, 0xb9, 0x2f, 0x4b, 0x01, 0x05, - 0x2d, 0x8e, 0x52, 0xd0, 0xf5, 0xb3, 0x29, 0x28, 0x04, 0x13, 0x70, 0xd0, 0xd6, 0xb1, 0x1c, 0x34, - 0x3f, 0xe6, 0x21, 0x0a, 0x21, 0x0e, 0x93, 0x50, 0x75, 0x84, 0x84, 0xae, 0x9d, 0x49, 0x42, 0xe1, - 0x39, 0x0a, 0x16, 0x5a, 0x3f, 0x86, 0x85, 0xde, 0x3e, 0x57, 0x38, 0xb2, 0x2c, 0x0d, 0xd1, 0x90, - 0x7a, 0x1c, 0x0d, 0x95, 0xc6, 0xa3, 0xa1, 0x10, 0xe4, 0x10, 0x0f, 0xfd, 0xe0, 0x08, 0x0f, 0x29, - 0x67, 0x1f, 0xe4, 0x63, 0x13, 0x3d, 0xcb, 0xd2, 0x11, 0x22, 0xd2, 0x8f, 0x21, 0xa2, 0x2c, 0x83, - 0xbf, 0x71, 0x0e, 0x22, 0x0a, 0x75, 0x70, 0x94, 0x89, 0xee, 0x41, 0x2a, 0xcc, 0x1e, 0xec, 0xc1, - 0xcf, 0xe9, 0x3c, 0x77, 0xc2, 0x9f, 0x4d, 0x31, 0x1d, 0x08, 0x15, 0xa1, 0x1f, 0x1e, 0x25, 0xa1, - 0x99, 0x33, 0xc1, 0x4f, 0xb8, 0xd2, 0x5e, 0x96, 0x8e, 0xb2, 0xd0, 0xed, 0x30, 0x0b, 0xcd, 0x9e, - 0x69, 0xa3, 0x8e, 0x78, 0xa9, 0xcb, 0x52, 0x88, 0x86, 0xd0, 0xeb, 0x20, 0x7b, 0xae, 0x6e, 0xb0, - 0x6b, 0x89, 0x0b, 0xec, 0xee, 0x89, 0x25, 0x85, 0x36, 0xa9, 0x8c, 0x25, 0x8f, 0xd8, 0x0f, 0xb3, - 0x02, 0x20, 0xfb, 0x2f, 0x2b, 0x42, 0xd4, 0x55, 0xfc, 0xb9, 0x04, 0x93, 0x4d, 0xa7, 0x8d, 0x5e, - 0x09, 0x65, 0x2a, 0xd3, 0x22, 0x9e, 0x9d, 0x6a, 0x3a, 0x6d, 0x91, 0x72, 0xfc, 0x70, 0xd0, 0x5a, - 0x04, 0x7e, 0xaf, 0x9e, 0x32, 0xe4, 0x20, 0xd1, 0x1b, 0x34, 0x42, 0xef, 0x43, 0xbc, 0xc7, 0x1d, - 0x6b, 0xc1, 0x64, 0xc5, 0xd3, 0xda, 0xf3, 0x9a, 0xaa, 0xdf, 0xe4, 0xfa, 0xb5, 0xf0, 0xdf, 0x4b, - 0xae, 0x3a, 0x26, 0x46, 0x19, 0x80, 0x0d, 0x9d, 0x90, 0xde, 0xae, 0xab, 0x13, 0xac, 0x4c, 0xa0, - 0x38, 0x4c, 0xae, 0xac, 0xb6, 0x14, 0xe9, 0xfa, 0xbd, 0x70, 0x9a, 0xb1, 0xa6, 0x96, 0x1b, 0x6b, - 0x8d, 0xb5, 0x25, 0x6d, 0xad, 0xbc, 0x5a, 0x6f, 0x29, 0x13, 0x28, 0x07, 0xb3, 0x1f, 0x97, 0x1b, - 0x9b, 0x22, 0xef, 0xa8, 0x35, 0xd6, 0x36, 0xeb, 0xea, 0xdd, 0xf2, 0x6d, 0x45, 0x42, 0x17, 0x01, - 0xa9, 0xeb, 0xd5, 0x95, 0x56, 0xad, 0xa2, 0x55, 0xd7, 0x57, 0x37, 0xca, 0xd5, 0xcd, 0xc6, 0xfa, - 0x9a, 0x12, 0x41, 0x32, 0x44, 0x6b, 0xeb, 0x6b, 0x75, 0x05, 0xae, 0xff, 0x34, 0x0a, 0x51, 0x96, - 0x21, 0x79, 0x0d, 0x92, 0x5b, 0x6b, 0xad, 0x8d, 0x7a, 0xb5, 0xb1, 0xd8, 0xa8, 0xd7, 0x94, 0x89, - 0xfc, 0xcc, 0xe3, 0x27, 0x73, 0xd3, 0xb4, 0x68, 0xcb, 0x26, 0x3d, 0x6c, 0x30, 0x6e, 0x45, 0x79, - 0x88, 0x55, 0xca, 0xd5, 0x95, 0xad, 0x0d, 0x45, 0xca, 0x67, 0x1e, 0x3f, 0x99, 0x03, 0x5a, 0x81, - 0xf3, 0x22, 0x7a, 0x99, 0x67, 0x50, 0xd6, 0xd5, 0xba, 0x12, 0xc9, 0x4f, 0x3f, 0x7e, 0x32, 0x97, - 0x64, 0x89, 0x19, 0xc1, 0x6d, 0x6f, 0x40, 0xba, 0x55, 0x5d, 0xae, 0xaf, 0x96, 0xb5, 0xea, 0x72, - 0x79, 0x6d, 0xa9, 0xae, 0x4c, 0xe6, 0x67, 0x1f, 0x3f, 0x99, 0x53, 0x46, 0xcf, 0x07, 0xed, 0xa2, - 0xb1, 0xba, 0xb1, 0xae, 0x6e, 0x2a, 0xd1, 0x41, 0x17, 0x9c, 0x96, 0x50, 0x11, 0x80, 0xb7, 0x5e, - 0xac, 0xd7, 0x6b, 0xca, 0x54, 0x1e, 0x3d, 0x7e, 0x32, 0x97, 0xa1, 0xe5, 0x03, 0xb6, 0x41, 0x57, - 0x20, 0x55, 0x55, 0xeb, 0xe5, 0xcd, 0xba, 0xd6, 0xda, 0x2c, 0x6f, 0xb6, 0x94, 0xd8, 0x60, 0x26, - 0x21, 0x06, 0x41, 0x25, 0xc8, 0x96, 0xb7, 0x36, 0xd7, 0xb5, 0xa1, 0xba, 0xf1, 0xfc, 0xa5, 0xc7, - 0x4f, 0xe6, 0x66, 0x68, 0xdd, 0x72, 0xdf, 0x73, 0xc2, 0xf5, 0xdf, 0x02, 0x65, 0x68, 0xfc, 0xda, - 0x52, 0x55, 0x91, 0xf3, 0x17, 0x1f, 0x3f, 0x99, 0x43, 0xa3, 0x53, 0x58, 0xaa, 0xa2, 0x6f, 0xc3, - 0xc5, 0xcd, 0x4f, 0x36, 0xea, 0xb5, 0x7a, 0xab, 0xaa, 0x0d, 0x4f, 0x3b, 0x91, 0xcf, 0x3d, 0x7e, - 0x32, 0x37, 0x4b, 0xdb, 0x1c, 0x99, 0xfa, 0xdb, 0xa0, 0xb4, 0x36, 0xd5, 0x7a, 0x79, 0x55, 0x6b, - 0xac, 0x2d, 0xd5, 0x5b, 0x6c, 0xb3, 0x60, 0x30, 0xa4, 0x91, 0xb3, 0x4e, 0xa7, 0xb0, 0x56, 0xff, - 0x78, 0x04, 0x3f, 0x39, 0xa8, 0x3f, 0x72, 0x7c, 0xd1, 0x1c, 0x24, 0x56, 0x1b, 0x4b, 0x6a, 0x99, - 0xe1, 0xa6, 0xf2, 0xd9, 0xc7, 0x4f, 0xe6, 0xd2, 0xb4, 0x5e, 0x70, 0x18, 0xf3, 0xf2, 0x1f, 0xfe, - 0xfc, 0xf2, 0xc4, 0x5f, 0x7c, 0x7e, 0x79, 0xa2, 0x72, 0xf5, 0x8b, 0xff, 0xb8, 0x3c, 0xf1, 0xc5, - 0xe1, 0x65, 0xe9, 0x37, 0x87, 0x97, 0xa5, 0x2f, 0x0f, 0x2f, 0x4b, 0xff, 0x7e, 0x78, 0x59, 0xfa, - 0xa3, 0xaf, 0x2e, 0x4f, 0xfc, 0xe6, 0xab, 0xcb, 0x13, 0x5f, 0x7e, 0x75, 0x79, 0xe2, 0xd3, 0x18, - 0xd7, 0xeb, 0x76, 0x8c, 0xc5, 0x81, 0x37, 0xfe, 0x37, 0x00, 0x00, 0xff, 0xff, 0xe3, 0xea, 0x53, - 0x2f, 0x5f, 0x3e, 0x00, 0x00, + 0xf3, 0xa6, 0xee, 0xe9, 0x42, 0x96, 0xf3, 0x65, 0x96, 0xf3, 0xd6, 0xb6, 0xe3, 0x76, 0x75, 0xcf, + 0xc7, 0xf8, 0x16, 0xb9, 0xdf, 0x99, 0x37, 0x74, 0x4f, 0xef, 0x38, 0x3b, 0xf3, 0x26, 0x26, 0x46, + 0xaf, 0x3d, 0x4f, 0x3c, 0xb7, 0x6f, 0x78, 0x7d, 0x17, 0x9b, 0xa2, 0x52, 0xe1, 0x98, 0x4a, 0x1e, + 0xb6, 0x75, 0xdb, 0xf3, 0xf1, 0xfb, 0x9e, 0xd5, 0x99, 0xdf, 0xed, 0x18, 0xf3, 0x9e, 0xd5, 0xc5, + 0xc4, 0xd3, 0xbb, 0x3d, 0x51, 0xf2, 0x4d, 0xda, 0x94, 0x18, 0xbb, 0xb8, 0xab, 0x1b, 0xbb, 0xba, + 0xbd, 0x83, 0xdd, 0x79, 0xde, 0x87, 0xd1, 0x6b, 0x8b, 0x2a, 0xaf, 0x1a, 0x9d, 0x3e, 0xf1, 0xb0, + 0xfb, 0x00, 0xbb, 0xc4, 0x72, 0xec, 0x79, 0xf1, 0xa9, 0x89, 0x6f, 0x5e, 0xab, 0xf8, 0x8b, 0x08, + 0x5c, 0xaa, 0xe8, 0xc6, 0x5e, 0xbf, 0x57, 0xb7, 0x0d, 0x77, 0xbf, 0xe7, 0x59, 0x8e, 0xbd, 0xce, + 0xfe, 0x25, 0x48, 0x81, 0xc9, 0x3d, 0xbc, 0x9f, 0x93, 0xe6, 0xa4, 0xab, 0x29, 0x95, 0xfe, 0x44, + 0xef, 0x43, 0xb4, 0xeb, 0x98, 0x38, 0x17, 0x99, 0x93, 0xae, 0x66, 0x16, 0xae, 0x95, 0x4e, 0x5c, + 0xdb, 0xd2, 0x00, 0x6d, 0xd5, 0x31, 0xb1, 0xca, 0x9a, 0xa1, 0x36, 0xc8, 0x7b, 0x5d, 0xa2, 0x59, + 0xf6, 0xb6, 0x93, 0x9b, 0x9c, 0x93, 0xae, 0x26, 0x17, 0x6e, 0x9e, 0x02, 0x71, 0xc2, 0xb0, 0x4a, + 0x2b, 0xab, 0xad, 0x86, 0xbd, 0xed, 0x54, 0x92, 0x87, 0x07, 0x85, 0xb8, 0xf8, 0x50, 0xe3, 0x7b, + 0x5d, 0x42, 0x7f, 0xe4, 0xd7, 0xc1, 0x97, 0xd1, 0xf1, 0xf7, 0x5d, 0x8b, 0x8d, 0x3f, 0xa1, 0xd2, + 0x9f, 0xe8, 0x4d, 0x40, 0x98, 0xe3, 0x61, 0x53, 0xa3, 0x1b, 0xa9, 0xd1, 0x09, 0x46, 0xd8, 0x04, + 0x95, 0xa0, 0xa4, 0xa6, 0x7b, 0xfa, 0x0a, 0xde, 0xbf, 0x19, 0xfd, 0xcf, 0x9f, 0x15, 0x24, 0xfe, + 0x6f, 0xf1, 0xf7, 0x27, 0x21, 0x33, 0x18, 0x0a, 0x83, 0x5f, 0x86, 0x18, 0xdb, 0x01, 0xcc, 0x7a, + 0xc8, 0x2c, 0xbc, 0x3d, 0xd6, 0x72, 0xd0, 0xa6, 0xa5, 0x16, 0x6b, 0xa7, 0x8a, 0xf6, 0x08, 0x41, + 0x94, 0xe8, 0x1d, 0x4f, 0x0c, 0x84, 0xfd, 0x46, 0x7f, 0x26, 0xc1, 0xdc, 0xe8, 0x88, 0x2a, 0xfb, + 0x2b, 0xab, 0xad, 0x55, 0x9d, 0x6e, 0xe3, 0x0a, 0xde, 0x6f, 0xd4, 0x72, 0x93, 0x73, 0x93, 0x57, + 0x93, 0x0b, 0xeb, 0xe3, 0x77, 0x5c, 0x3f, 0x03, 0xb1, 0x6e, 0x7b, 0xee, 0xbe, 0x7a, 0x66, 0xc7, + 0xf9, 0x16, 0x5c, 0x19, 0x0b, 0x2a, 0xac, 0x43, 0x09, 0xae, 0x43, 0xb3, 0x30, 0xf5, 0x40, 0xef, + 0xf4, 0xb1, 0x98, 0x2d, 0xff, 0xb8, 0x19, 0x79, 0x47, 0x2a, 0x5e, 0x82, 0x18, 0x5f, 0x18, 0x94, + 0x86, 0x44, 0xb9, 0xde, 0x5a, 0xf8, 0xee, 0xf7, 0x96, 0xaa, 0xab, 0xca, 0x84, 0xd8, 0x82, 0x5f, + 0x49, 0x70, 0xb1, 0xe5, 0xb9, 0x58, 0xef, 0x36, 0xec, 0x1d, 0x4c, 0xe8, 0x9c, 0x6a, 0xd8, 0xd3, + 0xad, 0x0e, 0x41, 0x57, 0x20, 0x43, 0x58, 0x89, 0xa6, 0x9b, 0xa6, 0x8b, 0x09, 0x11, 0x1d, 0xa6, + 0xb9, 0xb4, 0xcc, 0x85, 0xe8, 0xdb, 0x10, 0x25, 0x3d, 0xdd, 0x66, 0x3d, 0x27, 0x17, 0x2e, 0x85, + 0x96, 0x4d, 0x1c, 0xe4, 0x52, 0xab, 0xa7, 0xdb, 0x95, 0xe8, 0x17, 0x07, 0x85, 0x09, 0x95, 0x55, + 0x45, 0x15, 0x00, 0xe2, 0xe9, 0xae, 0xa7, 0xd1, 0x13, 0x28, 0x94, 0xf6, 0x95, 0x50, 0x43, 0x7a, + 0x42, 0x4b, 0xbb, 0x1d, 0xa3, 0xb4, 0xe9, 0x9f, 0x50, 0xd1, 0x3c, 0xc1, 0x9a, 0x51, 0x69, 0x51, + 0x87, 0x4b, 0x23, 0xe3, 0xde, 0x70, 0x9d, 0x1d, 0x36, 0xa2, 0x45, 0x48, 0x19, 0x7d, 0xcf, 0x79, + 0x80, 0x5d, 0xde, 0x81, 0x34, 0x7e, 0x07, 0x49, 0xd1, 0x90, 0x75, 0xf1, 0xf7, 0x31, 0x48, 0xf3, + 0xf3, 0xe2, 0x2f, 0xc9, 0xf0, 0xc0, 0xa5, 0x67, 0x19, 0x38, 0xba, 0x05, 0x32, 0xb6, 0x4d, 0x8e, + 0x10, 0x19, 0x1f, 0x21, 0x8e, 0x6d, 0x93, 0xb5, 0x7f, 0x89, 0x1f, 0x40, 0xba, 0x6a, 0x89, 0x4a, + 0xfc, 0xf0, 0xa0, 0x30, 0xb9, 0xa5, 0x36, 0xf8, 0x49, 0xfc, 0x89, 0x04, 0x33, 0x7d, 0xd7, 0x22, + 0x5a, 0x7b, 0x5f, 0xeb, 0x38, 0x86, 0xde, 0xb1, 0xbc, 0x7d, 0x6d, 0xef, 0x41, 0x6e, 0x8a, 0x69, + 0xf4, 0xad, 0x33, 0x69, 0x41, 0x4c, 0xb3, 0xb4, 0xe5, 0x5a, 0xa4, 0xb2, 0x7f, 0x5b, 0x20, 0xac, + 0x3c, 0x60, 0x5a, 0x57, 0x99, 0x3d, 0x3c, 0x28, 0x28, 0x5b, 0x6a, 0x23, 0x5c, 0x74, 0x57, 0x55, + 0xfa, 0x23, 0x95, 0xd1, 0x7b, 0x90, 0x37, 0x71, 0xcf, 0xc5, 0x86, 0x4e, 0x09, 0xa1, 0xcd, 0x90, + 0xb5, 0xae, 0x6e, 0x5b, 0xdb, 0x98, 0x78, 0xb9, 0x28, 0x53, 0xd0, 0xdc, 0xa0, 0x06, 0xef, 0x7a, + 0x55, 0x94, 0x23, 0x3d, 0x60, 0x13, 0xcb, 0xb1, 0x35, 0x87, 0xd3, 0x53, 0x2e, 0xc6, 0x16, 0x6a, + 0xe1, 0xfc, 0xc4, 0xa6, 0x66, 0xf1, 0x11, 0x0a, 0x56, 0x61, 0x3a, 0xd4, 0x05, 0x23, 0xce, 0x04, + 0xc3, 0xbf, 0x36, 0xf6, 0x99, 0x57, 0x33, 0x78, 0x98, 0xb7, 0xfe, 0x58, 0x82, 0x3c, 0x25, 0x7f, + 0x6c, 0xd0, 0x49, 0x07, 0x96, 0x45, 0x73, 0xb1, 0xe1, 0xb8, 0x66, 0x2e, 0x4e, 0x67, 0x5d, 0x69, + 0xfd, 0xeb, 0x41, 0xe1, 0xc6, 0x8e, 0xe5, 0xed, 0xf6, 0xdb, 0x25, 0xc3, 0xe9, 0xce, 0x07, 0xbd, + 0x99, 0xed, 0xc1, 0xef, 0xf9, 0xde, 0xde, 0xce, 0x3c, 0xb3, 0x51, 0xfd, 0xbe, 0x65, 0x96, 0xb6, + 0xb6, 0x1a, 0xb5, 0xc3, 0x83, 0x42, 0x6e, 0xc3, 0x07, 0x0f, 0x14, 0x43, 0x65, 0xd0, 0x6a, 0xae, + 0x77, 0x42, 0x09, 0x7a, 0x07, 0x32, 0x86, 0xd3, 0xe9, 0x60, 0x83, 0xcd, 0x73, 0x4b, 0x6d, 0xe4, + 0x64, 0xa6, 0x34, 0xd9, 0xc3, 0x83, 0x42, 0xba, 0x1a, 0x94, 0x50, 0xf5, 0x49, 0x1b, 0xe1, 0xcf, + 0x7c, 0x15, 0x2e, 0x1c, 0xab, 0x03, 0x67, 0x31, 0x4f, 0x22, 0xcc, 0x3c, 0x0a, 0x64, 0xf8, 0xa6, + 0xf8, 0x07, 0xb3, 0xf8, 0x0f, 0x08, 0x32, 0x2a, 0x26, 0x9e, 0xe3, 0x62, 0xff, 0x44, 0x85, 0x4f, + 0x43, 0xf4, 0x19, 0x4e, 0xc3, 0x2f, 0x25, 0x98, 0xa1, 0x56, 0xde, 0xb5, 0x7a, 0x9e, 0xe3, 0x6a, + 0x2e, 0x7e, 0xe8, 0x5a, 0x1e, 0x26, 0xb9, 0x08, 0x53, 0xf9, 0xf2, 0x29, 0x1b, 0x3a, 0x3c, 0x90, + 0x52, 0x2d, 0x00, 0x51, 0x05, 0x06, 0xd7, 0xfa, 0x5b, 0x3f, 0xfe, 0xb7, 0xc2, 0xcd, 0xb1, 0xf6, + 0xec, 0xa8, 0xe3, 0x51, 0x6a, 0xd4, 0x54, 0x64, 0x1e, 0x01, 0x46, 0x2f, 0x43, 0x94, 0x9e, 0x1a, + 0x66, 0x69, 0x12, 0x15, 0xf9, 0xf0, 0xa0, 0x10, 0xa5, 0xe7, 0x4a, 0x65, 0x52, 0xe4, 0xc1, 0xac, + 0x38, 0x34, 0xc1, 0x19, 0x66, 0x3a, 0x1a, 0x67, 0x53, 0x7a, 0x6f, 0xfc, 0x29, 0xf1, 0xd5, 0xf7, + 0xb7, 0x90, 0x99, 0x77, 0xbe, 0x7a, 0xa8, 0x7d, 0xa4, 0x04, 0x6d, 0x40, 0x86, 0xda, 0xee, 0xb6, + 0x4e, 0xb0, 0x46, 0x87, 0x4c, 0x72, 0x0a, 0xeb, 0x6f, 0xf4, 0x4c, 0x90, 0xfb, 0x1d, 0x5a, 0xa7, + 0x54, 0x13, 0x95, 0x43, 0xeb, 0x96, 0x36, 0x43, 0x32, 0x82, 0x96, 0x20, 0xe9, 0xe9, 0xed, 0x8e, + 0x0f, 0xc7, 0x49, 0xe8, 0xb5, 0x13, 0xe0, 0x36, 0x69, 0xcd, 0x10, 0x16, 0x78, 0xbe, 0x80, 0xa0, + 0x1a, 0x80, 0xb7, 0xdf, 0xf3, 0x71, 0x32, 0x0c, 0xe7, 0xca, 0x49, 0x38, 0xfb, 0xbd, 0x30, 0x4c, + 0xc2, 0x13, 0xdf, 0x04, 0x35, 0x21, 0xc5, 0x7d, 0x3b, 0x81, 0x33, 0xcd, 0x70, 0x5e, 0x3f, 0x01, + 0x87, 0xd9, 0x4c, 0x3d, 0x84, 0x94, 0x24, 0x81, 0x84, 0xa0, 0x32, 0xc4, 0xb9, 0x4f, 0x49, 0x72, + 0x69, 0x06, 0xf3, 0xcd, 0x93, 0x86, 0xc3, 0x6a, 0x85, 0x96, 0xde, 0x6f, 0x87, 0xe6, 0x21, 0x49, + 0x0d, 0x8d, 0x6b, 0x99, 0x58, 0x33, 0xdb, 0x8c, 0xe0, 0x12, 0x95, 0xcc, 0xe1, 0x41, 0x01, 0xd6, + 0x85, 0xb8, 0x56, 0x51, 0xc1, 0xaf, 0x52, 0x6b, 0xa3, 0x37, 0x20, 0xdb, 0x73, 0x71, 0x4f, 0x77, + 0xb1, 0x66, 0x38, 0xdd, 0x5e, 0x07, 0x7b, 0xd8, 0x64, 0x07, 0x5a, 0x56, 0x15, 0x51, 0x50, 0xf5, + 0xe5, 0xdc, 0x76, 0xeb, 0x1e, 0x75, 0x0b, 0x09, 0x76, 0x69, 0xcd, 0x04, 0xab, 0x99, 0x66, 0xd2, + 0x86, 0x10, 0xa2, 0x7d, 0xb8, 0x48, 0xf6, 0x89, 0x87, 0xbb, 0x1a, 0x5b, 0x6e, 0xa2, 0x75, 0xad, + 0x1d, 0x97, 0x92, 0x72, 0x2e, 0xcb, 0xa6, 0x55, 0x1d, 0x5f, 0xd9, 0x5a, 0x0c, 0x87, 0x6d, 0x23, + 0x59, 0x15, 0x28, 0xdc, 0xf1, 0x99, 0x25, 0xc7, 0x14, 0xa1, 0x1b, 0x70, 0x61, 0x70, 0x32, 0x88, + 0xd6, 0xeb, 0xb7, 0x3b, 0x16, 0xd9, 0xc5, 0x66, 0x0e, 0xd8, 0x40, 0x67, 0x43, 0x85, 0x1b, 0x7e, + 0x19, 0xda, 0x1f, 0x3a, 0xec, 0x06, 0x5d, 0x1d, 0x7d, 0x07, 0xe7, 0x92, 0x73, 0xd2, 0xd5, 0xa9, + 0xca, 0xf2, 0xd3, 0x83, 0x42, 0x6d, 0xec, 0x93, 0x4a, 0x70, 0x77, 0xde, 0x73, 0x31, 0x0e, 0x1d, + 0xfc, 0xaa, 0xc0, 0x0b, 0x9f, 0x59, 0x5f, 0x86, 0x54, 0x80, 0x01, 0xe5, 0xe7, 0x52, 0xcf, 0x6c, + 0x8f, 0x42, 0x28, 0xc8, 0x06, 0xe4, 0xe2, 0x07, 0x7a, 0xc7, 0x32, 0x75, 0x0f, 0x6b, 0x96, 0x6d, + 0xe2, 0x47, 0x98, 0xe4, 0x10, 0x5b, 0xfa, 0x77, 0xc7, 0x5f, 0x7a, 0x35, 0xc0, 0x68, 0x50, 0x08, + 0xa1, 0x69, 0x59, 0x77, 0x58, 0x8c, 0x49, 0xfe, 0x7f, 0x24, 0xc8, 0x1e, 0xe1, 0x39, 0xb4, 0x09, + 0x11, 0xcb, 0x64, 0x94, 0x9e, 0xae, 0x50, 0x53, 0x13, 0x69, 0xd4, 0x9e, 0x1e, 0x3c, 0x17, 0xe7, + 0x45, 0x2c, 0x13, 0xed, 0x40, 0x82, 0xaa, 0xa4, 0xed, 0x69, 0x96, 0xc9, 0x6c, 0x43, 0xba, 0xd2, + 0x3c, 0x3c, 0x28, 0xc8, 0x1b, 0x4c, 0xf8, 0xdc, 0x5d, 0xc8, 0x1c, 0xbc, 0x61, 0xa2, 0x02, 0x24, + 0x3d, 0x47, 0xc3, 0x8f, 0x2c, 0xe2, 0x59, 0xf6, 0x0e, 0xf3, 0x8b, 0x64, 0x15, 0x3c, 0xa7, 0x2e, + 0x24, 0xf9, 0x3f, 0x8f, 0x00, 0x3a, 0x4a, 0x85, 0xe8, 0xef, 0x24, 0x78, 0xd9, 0x77, 0x96, 0x1c, + 0xd7, 0xda, 0xb1, 0x6c, 0xbd, 0x33, 0xe4, 0x35, 0x49, 0x6c, 0x1f, 0x3e, 0x79, 0x1e, 0xbe, 0x15, + 0x9e, 0xd4, 0xba, 0x80, 0x1f, 0xf5, 0xa8, 0x5e, 0xa6, 0x86, 0x9d, 0x7b, 0x54, 0x47, 0xaa, 0xdc, + 0x55, 0x73, 0xfd, 0x13, 0x1a, 0xe7, 0x57, 0xe0, 0x95, 0x53, 0x81, 0xcf, 0x63, 0xa6, 0xf3, 0x3f, + 0x96, 0xe0, 0xd2, 0x09, 0xc6, 0x2f, 0x8c, 0x93, 0xe6, 0x38, 0x77, 0xc2, 0x38, 0xc9, 0x85, 0x1f, + 0x3c, 0x87, 0x81, 0x0d, 0x0f, 0x62, 0x09, 0x5e, 0x3a, 0x91, 0x40, 0xce, 0x9a, 0x8d, 0x1c, 0x06, + 0xfa, 0x17, 0x09, 0xa6, 0x47, 0xce, 0x03, 0xfa, 0x38, 0xa4, 0xe0, 0x0d, 0x1a, 0xdf, 0xb2, 0x4e, + 0x5e, 0x88, 0x96, 0xef, 0x1d, 0xd5, 0xf2, 0x35, 0xda, 0x03, 0xeb, 0x98, 0xf5, 0xf0, 0xc1, 0x33, + 0xf7, 0xc0, 0x21, 0x06, 0x9a, 0xde, 0x8c, 0xca, 0x92, 0x12, 0x29, 0xbe, 0x4d, 0x27, 0xc8, 0x56, + 0x36, 0x08, 0x78, 0x5e, 0x01, 0xd8, 0xb5, 0x76, 0x76, 0xb5, 0x87, 0xba, 0x87, 0x5d, 0x91, 0x5a, + 0x48, 0x50, 0xc9, 0x47, 0x54, 0x50, 0xfc, 0x53, 0x80, 0x74, 0xa3, 0xdb, 0x73, 0x5c, 0xcf, 0xf7, + 0xba, 0x6e, 0x43, 0x8c, 0x13, 0xbe, 0x50, 0xf2, 0xd2, 0x29, 0xdb, 0x38, 0xd4, 0x92, 0xdb, 0x69, + 0xc1, 0x30, 0x02, 0x03, 0xad, 0x43, 0x9c, 0x1b, 0x47, 0x92, 0xbb, 0xc4, 0xe0, 0xe6, 0xc7, 0x86, + 0xe3, 0x66, 0xd6, 0xb7, 0x8d, 0x02, 0x25, 0xf0, 0x8f, 0x22, 0xc7, 0xfa, 0x47, 0xef, 0x43, 0x8c, + 0xe7, 0x85, 0x44, 0xe4, 0x58, 0x38, 0x26, 0xe4, 0x6c, 0xac, 0x2f, 0x5a, 0x1d, 0xbc, 0xc8, 0xaa, + 0xf9, 0xa3, 0xe5, 0x8d, 0xd0, 0x6b, 0x20, 0x13, 0xe2, 0x69, 0xc4, 0xfa, 0x11, 0xf7, 0x38, 0x27, + 0x79, 0xce, 0xa3, 0xd5, 0xda, 0x6c, 0x59, 0x3f, 0xc2, 0x6a, 0x9c, 0x10, 0x8f, 0xfe, 0x40, 0x97, + 0x81, 0x59, 0x5f, 0xa2, 0x53, 0x9b, 0xca, 0xcc, 0xe7, 0xa4, 0x1a, 0x92, 0x30, 0x9c, 0x3d, 0xab, + 0xa7, 0x6d, 0xef, 0x11, 0x6e, 0xb3, 0x04, 0xce, 0x9e, 0xd5, 0x5b, 0x5c, 0x21, 0x6a, 0x9c, 0x16, + 0x2e, 0xee, 0x11, 0x94, 0x07, 0xf9, 0xa1, 0xde, 0xe9, 0x30, 0x0f, 0x77, 0x8a, 0xa1, 0x04, 0xdf, + 0xc3, 0x24, 0x19, 0xfb, 0x7a, 0x49, 0x52, 0xf8, 0x94, 0x3d, 0xdd, 0xdb, 0x65, 0xe1, 0x48, 0x42, + 0x05, 0x2e, 0xda, 0xd0, 0xbd, 0x5d, 0x94, 0x83, 0x38, 0x9f, 0x17, 0xc9, 0xc9, 0x73, 0x93, 0x57, + 0x53, 0xaa, 0xff, 0x89, 0x5e, 0x87, 0x69, 0x8b, 0x85, 0xd8, 0x9a, 0x69, 0xb9, 0xd8, 0xf0, 0x3a, + 0xfb, 0xcc, 0xde, 0xca, 0x6a, 0x86, 0x8b, 0x6b, 0x42, 0x8a, 0xae, 0x81, 0x32, 0xea, 0xa0, 0x30, + 0x3b, 0x29, 0xab, 0xd3, 0x23, 0xfe, 0x09, 0xf5, 0x65, 0xc4, 0x5e, 0x87, 0x0c, 0x7f, 0x8e, 0xfb, + 0x32, 0xa2, 0x60, 0x60, 0xf4, 0xaf, 0x81, 0x22, 0xbc, 0x93, 0x41, 0xdd, 0x34, 0xc7, 0xe5, 0xf2, + 0x41, 0xd5, 0x12, 0xcc, 0xf4, 0x74, 0x97, 0x60, 0xad, 0xdd, 0xb7, 0xcd, 0x0e, 0xd6, 0x38, 0x56, + 0x2e, 0xc3, 0x6a, 0x67, 0x59, 0x51, 0x85, 0x95, 0x70, 0xbd, 0x3b, 0x2b, 0x6a, 0xbb, 0xf8, 0x7f, + 0x10, 0xb5, 0xe5, 0x7f, 0x11, 0x81, 0x29, 0x76, 0xca, 0xd0, 0x4d, 0x88, 0xd2, 0xbd, 0x14, 0x79, + 0x86, 0x71, 0x3d, 0x67, 0xd6, 0x06, 0x21, 0x88, 0xda, 0x7a, 0x17, 0xe7, 0x10, 0xdb, 0x69, 0xf6, + 0x1b, 0x5d, 0x82, 0x38, 0xc1, 0xf7, 0xb5, 0x07, 0x7a, 0x27, 0x37, 0xc3, 0x14, 0x31, 0x46, 0xf0, + 0xfd, 0xbb, 0x7a, 0x07, 0x5d, 0x80, 0x98, 0x45, 0x34, 0x1b, 0x3f, 0xcc, 0xcd, 0x72, 0x3e, 0xb5, + 0xc8, 0x1a, 0x7e, 0x88, 0xbe, 0x01, 0x89, 0x87, 0x3a, 0xd1, 0x70, 0xb7, 0xe7, 0xed, 0xb3, 0xb5, + 0x90, 0xa9, 0xea, 0x92, 0x3a, 0xfd, 0x66, 0x66, 0x57, 0x77, 0x77, 0xb0, 0xa7, 0x19, 0x4e, 0x87, + 0xe4, 0x2e, 0xd0, 0xa3, 0x4a, 0xbd, 0x76, 0x2a, 0xaa, 0x3a, 0x1d, 0xd2, 0x8c, 0xca, 0x11, 0x65, + 0xb2, 0x19, 0x95, 0x27, 0x95, 0x68, 0x33, 0x2a, 0x47, 0x95, 0xa9, 0x66, 0x54, 0x9e, 0x52, 0x62, + 0xcd, 0xa8, 0x1c, 0x53, 0xe2, 0xcd, 0xa8, 0x1c, 0x57, 0xe4, 0x66, 0x54, 0x96, 0x95, 0x44, 0x33, + 0x2a, 0x27, 0x14, 0x68, 0x46, 0x65, 0x50, 0x92, 0xcd, 0xa8, 0x9c, 0x54, 0x52, 0xcd, 0xa8, 0x9c, + 0x52, 0xd2, 0xcd, 0xa8, 0x9c, 0x56, 0x32, 0xcd, 0xa8, 0x9c, 0x51, 0xa6, 0x9b, 0x51, 0x79, 0x5a, + 0x51, 0x9a, 0x51, 0x59, 0x51, 0xb2, 0xcd, 0xa8, 0x9c, 0x55, 0x50, 0xbe, 0x2e, 0x12, 0x5b, 0x3a, + 0xfa, 0xc1, 0xd0, 0x3a, 0x8d, 0xed, 0xd1, 0xb3, 0x46, 0xc5, 0x5f, 0x4a, 0xa0, 0xb4, 0xf0, 0xfd, + 0x3e, 0xb6, 0x0d, 0x7c, 0x57, 0xef, 0x54, 0x77, 0xfb, 0xf6, 0x1e, 0x7a, 0x0d, 0xa6, 0x0d, 0xfa, + 0x43, 0xe3, 0xd9, 0x1e, 0xba, 0x62, 0x12, 0x5b, 0xb1, 0x34, 0x13, 0xb7, 0xa8, 0x94, 0x2e, 0xdc, + 0x2b, 0x00, 0xa2, 0x1e, 0x65, 0x93, 0x08, 0xab, 0x92, 0xe0, 0x55, 0x28, 0x85, 0x8c, 0xc0, 0xb8, + 0xce, 0x43, 0x46, 0x59, 0x43, 0x30, 0xaa, 0xf3, 0x10, 0xcd, 0xc3, 0xac, 0x8d, 0x1f, 0x79, 0xda, + 0x68, 0x65, 0x46, 0x4f, 0x6a, 0x96, 0x96, 0x55, 0xc3, 0x0d, 0x8a, 0xff, 0x14, 0x81, 0x69, 0x7f, + 0xd0, 0x3e, 0xa7, 0x6f, 0x83, 0x42, 0x77, 0xd7, 0x32, 0x35, 0xcf, 0xe1, 0x48, 0x3e, 0xbb, 0xbf, + 0x7f, 0x0a, 0x1d, 0x8f, 0xa0, 0xd0, 0xef, 0x86, 0xb9, 0xe9, 0xb0, 0xee, 0xb8, 0x13, 0xa0, 0xa6, + 0x49, 0x58, 0x96, 0xdf, 0x82, 0x8c, 0xdf, 0x88, 0x4b, 0x50, 0x15, 0x62, 0x43, 0xfd, 0xbd, 0x31, + 0x46, 0x7f, 0xfe, 0x52, 0xab, 0xa2, 0x69, 0xfe, 0x77, 0x01, 0x1d, 0xed, 0x3b, 0x6c, 0xfa, 0xa7, + 0xb8, 0xe9, 0x5f, 0x1f, 0x76, 0x40, 0xde, 0x3d, 0xdf, 0xdc, 0x42, 0xc3, 0x0e, 0xa7, 0x2a, 0xfe, + 0x31, 0x02, 0x19, 0x6e, 0x98, 0x02, 0x9b, 0x4a, 0x29, 0x8a, 0x32, 0xa0, 0x65, 0xef, 0x68, 0x3d, + 0x21, 0x64, 0xf3, 0x8b, 0xa8, 0x8a, 0x5f, 0x10, 0x54, 0xfe, 0x16, 0xa4, 0x5d, 0xac, 0x9b, 0x83, + 0x8a, 0x11, 0x56, 0x31, 0x45, 0x85, 0x41, 0xa5, 0x2b, 0x90, 0x61, 0x7e, 0xcf, 0xa0, 0xd6, 0x24, + 0xab, 0x95, 0x66, 0xd2, 0xa0, 0x5a, 0x05, 0xd2, 0xa4, 0xa7, 0xdb, 0x83, 0x5a, 0x51, 0xb6, 0xa8, + 0x67, 0x24, 0x56, 0x53, 0xb4, 0x4d, 0xd8, 0x21, 0x70, 0x31, 0xe9, 0x77, 0xb1, 0xd6, 0x73, 0x78, + 0xe4, 0x3d, 0xa9, 0x26, 0xb8, 0x64, 0xc3, 0x21, 0x68, 0x8b, 0xa9, 0x0a, 0x5b, 0x0b, 0xcd, 0xe4, + 0x8b, 0x93, 0x8b, 0xb1, 0x5e, 0xae, 0x8f, 0xbf, 0x9c, 0xea, 0x34, 0x19, 0x16, 0x14, 0xff, 0x5a, + 0x82, 0x4b, 0x34, 0xfe, 0xe6, 0x27, 0xad, 0xca, 0xae, 0x50, 0x7c, 0xed, 0xd4, 0x21, 0xce, 0x62, + 0xf8, 0xc0, 0x11, 0x5b, 0x3e, 0x3c, 0x28, 0xc4, 0x68, 0xed, 0xe7, 0xb6, 0x72, 0x31, 0x0a, 0xdc, + 0x60, 0x11, 0xa5, 0xe7, 0xea, 0x36, 0xb1, 0x68, 0x6c, 0x45, 0xb7, 0xad, 0x8b, 0xbb, 0x6d, 0xec, + 0xf2, 0xcd, 0x48, 0xa9, 0xb3, 0x43, 0x85, 0xab, 0xbc, 0xac, 0x98, 0x87, 0xdc, 0xe8, 0x90, 0x83, + 0x74, 0xd5, 0xff, 0x83, 0x8b, 0x6b, 0xf8, 0xe1, 0x71, 0xb3, 0xa9, 0x40, 0x9c, 0x33, 0x9d, 0xaf, + 0xf2, 0x57, 0x47, 0x49, 0x27, 0x7c, 0x8b, 0x54, 0x62, 0x23, 0xdd, 0x64, 0x0d, 0x54, 0xbf, 0x61, + 0xf1, 0x53, 0xb8, 0x34, 0x82, 0x1e, 0x6c, 0xdf, 0x87, 0x10, 0xa3, 0x71, 0xba, 0x70, 0xcf, 0x32, + 0xe3, 0xa0, 0xb7, 0x3c, 0xdd, 0xeb, 0x13, 0x55, 0xb4, 0x2b, 0xaa, 0x2c, 0xd1, 0xd6, 0xef, 0x62, + 0xaa, 0x22, 0xb7, 0x2d, 0xe2, 0xa1, 0x0f, 0x21, 0x25, 0x54, 0x82, 0x6a, 0x8a, 0x3f, 0xee, 0x33, + 0xb4, 0x2a, 0xe9, 0x06, 0x20, 0xa4, 0xf8, 0x37, 0x12, 0xcc, 0xd4, 0x5c, 0xa7, 0xd7, 0xc3, 0xa6, + 0xb0, 0x39, 0x7c, 0x31, 0x7c, 0x53, 0x23, 0x85, 0x4c, 0xcd, 0x1a, 0x44, 0x1a, 0x35, 0xe1, 0x10, + 0xdf, 0x7a, 0x5e, 0x3f, 0xbb, 0x51, 0x43, 0xef, 0xf2, 0x15, 0xe9, 0x13, 0x46, 0xa0, 0x99, 0x23, + 0xf9, 0x96, 0x21, 0x3d, 0x0d, 0x2d, 0x45, 0x9f, 0x14, 0x3f, 0x8f, 0xc3, 0x85, 0xf0, 0x2a, 0x2f, + 0x55, 0xfd, 0x81, 0x7f, 0x06, 0x71, 0x3f, 0xe6, 0x1e, 0x83, 0x28, 0x8f, 0x83, 0x28, 0x89, 0xf5, + 0x08, 0xc7, 0xdd, 0x3e, 0x26, 0x6a, 0x41, 0xd6, 0xb2, 0x3d, 0xec, 0x76, 0xb0, 0xfe, 0x80, 0x7a, + 0x17, 0x74, 0xcd, 0x44, 0x8e, 0x73, 0x5c, 0x5b, 0xae, 0x84, 0x00, 0xb8, 0x4f, 0xf0, 0x19, 0xcc, + 0x84, 0x41, 0xfd, 0xf1, 0x9f, 0x9e, 0x5c, 0x63, 0xc3, 0x1b, 0xc0, 0xfa, 0x59, 0xc0, 0x10, 0x90, + 0xc8, 0x10, 0xa0, 0x7b, 0x41, 0x60, 0xc0, 0x13, 0xa8, 0x37, 0x9f, 0x79, 0x45, 0x6a, 0x23, 0x41, + 0xc2, 0x90, 0xab, 0xcb, 0xac, 0xe0, 0xd7, 0xe4, 0xea, 0xde, 0x85, 0x18, 0xcf, 0xb1, 0x89, 0x4b, + 0x83, 0x5b, 0xcf, 0x3a, 0x05, 0x9e, 0xbb, 0x53, 0x05, 0x5a, 0xfe, 0x4f, 0x24, 0x48, 0x85, 0xb7, + 0x1b, 0x59, 0x20, 0xb3, 0xe5, 0xf7, 0x39, 0x6d, 0xf2, 0x85, 0x87, 0x7e, 0x5c, 0x95, 0x1a, 0x26, + 0xf5, 0xc4, 0x4c, 0xd7, 0xe9, 0x0d, 0x2e, 0x8d, 0x26, 0x55, 0x99, 0x0a, 0xa8, 0xef, 0x98, 0xff, + 0x3d, 0x48, 0x04, 0x8b, 0x1e, 0x4a, 0xe6, 0x4c, 0xbe, 0xc0, 0x64, 0xce, 0xa9, 0xfd, 0xd7, 0x20, + 0x3d, 0xb4, 0x62, 0xe8, 0x62, 0x30, 0x86, 0x68, 0x25, 0xc6, 0xc7, 0x70, 0x26, 0x4a, 0xf1, 0xaf, + 0xe2, 0x30, 0x73, 0x1c, 0xd5, 0x7e, 0x0c, 0x4a, 0x88, 0xb7, 0xb4, 0x8e, 0x45, 0x3c, 0xa1, 0x9b, + 0xd7, 0x4e, 0xcf, 0x3d, 0x84, 0xc8, 0x4f, 0xa8, 0x62, 0xc6, 0x1d, 0xa6, 0xc4, 0x4f, 0x21, 0x63, + 0xf2, 0x81, 0x8b, 0xf4, 0xa7, 0xb8, 0xfa, 0x3d, 0x2d, 0x1a, 0x3e, 0x86, 0x00, 0x05, 0x7a, 0xda, + 0x0c, 0x15, 0x11, 0x64, 0x40, 0x3a, 0x00, 0xdf, 0xef, 0x89, 0xb0, 0xea, 0xf9, 0xc9, 0x30, 0xe5, + 0xf7, 0x42, 0x31, 0xd1, 0x0e, 0x4c, 0xfb, 0x9d, 0xf8, 0x11, 0x78, 0xe2, 0x85, 0x74, 0xe3, 0x2f, + 0x4c, 0x4b, 0x44, 0xe4, 0x3f, 0x91, 0x60, 0xc6, 0xef, 0x29, 0xb8, 0x26, 0xb0, 0x4c, 0x46, 0x67, + 0xe9, 0x4a, 0xeb, 0xf0, 0xa0, 0x90, 0x15, 0x2b, 0xe3, 0xdf, 0x0b, 0x3c, 0xb7, 0xde, 0x65, 0xcd, + 0x11, 0x40, 0x93, 0x3a, 0x11, 0xb4, 0x9c, 0x76, 0x3c, 0x35, 0x70, 0x22, 0x28, 0xb1, 0x3d, 0xbf, + 0x13, 0x41, 0x7f, 0x36, 0x4c, 0xf4, 0x07, 0x12, 0x64, 0xf9, 0xad, 0x45, 0xb7, 0xef, 0xe9, 0xfc, + 0x82, 0xd0, 0x0f, 0xcd, 0x3f, 0x3e, 0x3c, 0x28, 0x4c, 0xb3, 0xed, 0x5d, 0x15, 0x65, 0xac, 0xdb, + 0xca, 0xb3, 0x76, 0x3b, 0x40, 0x11, 0x91, 0x6c, 0x20, 0x30, 0xd1, 0x0a, 0x64, 0x78, 0xbe, 0xc2, + 0x7f, 0x5a, 0xc2, 0x62, 0xf6, 0x74, 0xe5, 0xd5, 0xa7, 0x07, 0x85, 0xb9, 0x63, 0xce, 0x09, 0x4f, + 0x75, 0xdc, 0xe5, 0x75, 0xd5, 0xf4, 0x76, 0xf8, 0x13, 0xdd, 0x86, 0x69, 0xee, 0x79, 0x06, 0x11, + 0x2e, 0xcb, 0x58, 0x8c, 0x79, 0xd7, 0xc6, 0xbd, 0xd6, 0x40, 0x2a, 0xd2, 0x50, 0x17, 0x61, 0xf6, + 0x58, 0xa7, 0xe9, 0xcb, 0x18, 0x5c, 0x1c, 0xa6, 0xd5, 0xc0, 0xad, 0xd1, 0x46, 0xed, 0xed, 0x07, + 0x63, 0x53, 0xb3, 0x8f, 0xc1, 0xa9, 0xd1, 0xff, 0x1a, 0xb5, 0xb8, 0x9f, 0x8d, 0x58, 0xaf, 0x67, + 0xc0, 0x67, 0xdb, 0x3b, 0x82, 0xef, 0x9b, 0xb0, 0x7b, 0x81, 0x65, 0xe1, 0x89, 0xa7, 0x0f, 0x9f, + 0x01, 0x9e, 0xb5, 0xf7, 0x3f, 0x03, 0xdb, 0xf2, 0x6b, 0x09, 0xd2, 0x43, 0x33, 0xfb, 0x6d, 0x1a, + 0x97, 0x8d, 0xc0, 0xb7, 0xe2, 0x2f, 0x90, 0xde, 0x39, 0xff, 0xb4, 0x86, 0x5d, 0xae, 0xfc, 0xdf, + 0x4a, 0x90, 0x1e, 0x5a, 0xc8, 0xaf, 0xc9, 0x2c, 0xbd, 0xf8, 0x91, 0xb7, 0x21, 0x33, 0xbc, 0x45, + 0xa1, 0x3e, 0xa4, 0x17, 0xd3, 0x47, 0xf1, 0xfb, 0x10, 0xe3, 0x12, 0x84, 0x20, 0xf3, 0x51, 0xb9, + 0xb1, 0xd9, 0x58, 0x5b, 0xd2, 0x16, 0xd7, 0x55, 0x6d, 0xa9, 0xaa, 0x4c, 0xa0, 0x14, 0xc8, 0xb5, + 0xfa, 0xed, 0x3a, 0x15, 0x2a, 0x12, 0x4a, 0x42, 0x9c, 0x7d, 0xd5, 0x6b, 0x4a, 0xa4, 0x58, 0x01, + 0x85, 0x63, 0x6f, 0x63, 0x6a, 0x66, 0x68, 0x18, 0x81, 0x4a, 0x30, 0xc3, 0x5c, 0xfe, 0x2e, 0xf5, + 0xac, 0xe8, 0xf1, 0xd6, 0x42, 0xbe, 0x78, 0x36, 0x28, 0xa2, 0xa7, 0x77, 0x4d, 0xef, 0xe2, 0xe2, + 0xaf, 0xa2, 0x90, 0x1d, 0x80, 0xf8, 0x46, 0xf6, 0x2f, 0xa5, 0x41, 0x40, 0x13, 0x3b, 0xf3, 0xfa, + 0xe9, 0x48, 0x7b, 0x11, 0xdb, 0x88, 0x1b, 0xf3, 0x8f, 0xe8, 0xa1, 0x79, 0x7a, 0x50, 0xc8, 0x8e, + 0x0e, 0x96, 0x3c, 0xe7, 0x55, 0xba, 0x3f, 0x44, 0x96, 0x7a, 0xb5, 0xec, 0x3d, 0x6d, 0xf0, 0x0e, + 0x86, 0xa7, 0x5e, 0x2d, 0x7b, 0x6f, 0x4b, 0x6d, 0xa8, 0x71, 0x5a, 0xb8, 0xe5, 0x5a, 0xa8, 0x09, + 0x51, 0xa7, 0xe7, 0xf9, 0x11, 0xf4, 0xf7, 0xce, 0x35, 0xa5, 0xf5, 0x9e, 0x98, 0x8f, 0xca, 0x30, + 0x50, 0x93, 0xdf, 0xa8, 0x0e, 0x16, 0x9a, 0x11, 0xf2, 0x98, 0x14, 0x9a, 0x1e, 0xda, 0x88, 0xfc, + 0x0e, 0xa4, 0xc2, 0x2b, 0x76, 0xcc, 0x35, 0x4b, 0x79, 0x38, 0xcb, 0xf1, 0xc6, 0x58, 0x43, 0x17, + 0x11, 0x66, 0xe8, 0x36, 0xe4, 0xfb, 0x90, 0x08, 0xe6, 0x71, 0x9e, 0x4b, 0x21, 0xce, 0xf1, 0x41, + 0x0a, 0x6f, 0x4a, 0x89, 0x15, 0x3f, 0x8f, 0x40, 0x4a, 0xc5, 0xc4, 0xe9, 0x3c, 0xc0, 0x26, 0xf5, + 0xa0, 0x82, 0x77, 0x5f, 0xd2, 0xf8, 0xef, 0xbe, 0xca, 0x90, 0x18, 0x58, 0xa0, 0x73, 0xbc, 0x7d, + 0x1a, 0xb4, 0x42, 0x1f, 0x43, 0xba, 0xed, 0xf4, 0x6d, 0x53, 0x77, 0xf7, 0x99, 0x5f, 0xc5, 0x3c, + 0x90, 0xcc, 0xc2, 0x77, 0x4e, 0xf7, 0x05, 0x83, 0x51, 0x97, 0x2a, 0xa2, 0x31, 0xf5, 0x9f, 0xd4, + 0x54, 0x3b, 0xf4, 0x55, 0x7c, 0x1f, 0x52, 0xe1, 0x52, 0x24, 0x43, 0x74, 0x6d, 0x7d, 0xad, 0xce, + 0xcf, 0x64, 0xa5, 0x5c, 0x5d, 0x59, 0x6c, 0xdc, 0xbe, 0xad, 0x48, 0x54, 0x5e, 0xbf, 0xd7, 0xd8, + 0x54, 0x22, 0xf4, 0x74, 0xaa, 0xf5, 0xd6, 0x66, 0x59, 0xdd, 0xf4, 0x33, 0x9d, 0x45, 0x0c, 0xe9, + 0x70, 0x7f, 0x94, 0xf9, 0xa8, 0xdb, 0xc9, 0x04, 0x43, 0x91, 0xf7, 0xeb, 0x63, 0x8e, 0xd8, 0xd7, + 0x20, 0x37, 0x8c, 0x5a, 0xfc, 0xe7, 0x08, 0xa0, 0xc1, 0xc6, 0x07, 0x64, 0x75, 0x0f, 0xc0, 0xd8, + 0xc5, 0xc6, 0x5e, 0xcf, 0xb1, 0x6c, 0x4f, 0xc4, 0x9a, 0xef, 0x8c, 0xa5, 0x3b, 0x01, 0x59, 0x55, + 0x83, 0xf6, 0x6a, 0x08, 0x0b, 0xfd, 0xf4, 0xf4, 0x4c, 0xf9, 0x24, 0xcb, 0x94, 0xb3, 0x93, 0xff, + 0xdb, 0xcd, 0x96, 0x97, 0x01, 0x06, 0x23, 0x46, 0x37, 0x60, 0xea, 0x1c, 0xd9, 0x0d, 0x5e, 0x37, + 0xac, 0xeb, 0xc5, 0xff, 0x8e, 0x02, 0xaa, 0xba, 0x58, 0xf7, 0x30, 0xa5, 0x68, 0x72, 0x5a, 0x8a, + 0xa3, 0x02, 0x53, 0x3c, 0xa4, 0x8f, 0x9c, 0x27, 0xa4, 0xf7, 0xbb, 0x66, 0x4d, 0xd1, 0x0f, 0x21, + 0x65, 0x38, 0x9d, 0x7e, 0xd7, 0xd6, 0xd8, 0xbb, 0x0c, 0x11, 0x7f, 0x7c, 0xf7, 0xb4, 0x1d, 0x3b, + 0x32, 0xb8, 0x52, 0xd5, 0xe9, 0xd0, 0xef, 0xe0, 0x05, 0x23, 0x03, 0x64, 0x35, 0xd0, 0xcb, 0x90, + 0x08, 0x98, 0x87, 0xa9, 0x43, 0x42, 0x1d, 0x08, 0xd0, 0x02, 0x4c, 0xe9, 0x44, 0x73, 0xb6, 0x99, + 0x33, 0x7d, 0xd6, 0x51, 0x54, 0xa3, 0x3a, 0x59, 0xdf, 0x46, 0xd7, 0x21, 0xdb, 0xd5, 0x1f, 0x69, + 0xdb, 0xae, 0x6e, 0x08, 0xe7, 0xb8, 0xc3, 0x99, 0x50, 0x52, 0xa7, 0xbb, 0xfa, 0xa3, 0x45, 0x21, + 0x6f, 0x98, 0x1d, 0x8c, 0x6e, 0x40, 0x7a, 0xfb, 0x3e, 0x0f, 0xad, 0xb8, 0x55, 0xe2, 0x8f, 0x5c, + 0xa6, 0x0f, 0x0f, 0x0a, 0xc9, 0xc5, 0x3b, 0x6c, 0x61, 0xa8, 0x4d, 0x52, 0x93, 0xdb, 0xf7, 0x83, + 0x8f, 0xfc, 0x7f, 0x49, 0x10, 0x17, 0x33, 0x42, 0x3d, 0x00, 0xb1, 0x3c, 0x96, 0xc9, 0xf7, 0x34, + 0x5d, 0xb9, 0x73, 0x78, 0x50, 0x48, 0x54, 0x99, 0xb4, 0x51, 0x23, 0x4f, 0x0f, 0x0a, 0x1f, 0x3e, + 0xab, 0x45, 0xf1, 0x41, 0xd4, 0x04, 0xef, 0xa4, 0x61, 0xb2, 0x44, 0xee, 0xae, 0x4e, 0xb4, 0x5d, + 0x8b, 0x78, 0xce, 0x8e, 0xab, 0x77, 0xc5, 0x05, 0x73, 0x6a, 0x57, 0x27, 0xcb, 0xbe, 0x0c, 0xe5, + 0xa9, 0x6f, 0xf6, 0x80, 0x3f, 0xab, 0xe1, 0xcf, 0x0d, 0x82, 0x6f, 0xb4, 0x00, 0x17, 0x82, 0xc6, + 0x1a, 0x5d, 0xa9, 0x76, 0xdf, 0xd8, 0xc3, 0xcc, 0x06, 0x51, 0x72, 0x9f, 0x09, 0x0a, 0x57, 0xf5, + 0x47, 0x15, 0x5e, 0x54, 0xbc, 0x00, 0x33, 0xa1, 0x6d, 0x0d, 0x3c, 0x69, 0x0c, 0x0a, 0xbf, 0x07, + 0x0f, 0xbd, 0xc9, 0xbd, 0x03, 0xd3, 0x23, 0x4f, 0xce, 0x05, 0xff, 0x86, 0x53, 0x84, 0xc3, 0x6f, + 0xd4, 0x4b, 0x55, 0xfe, 0xe9, 0xc7, 0x06, 0x19, 0x63, 0xe8, 0xbb, 0x38, 0x03, 0xd9, 0xa0, 0x9b, + 0xa0, 0xef, 0x5f, 0xa7, 0x20, 0xbe, 0xa1, 0xef, 0x77, 0x1c, 0xdd, 0x44, 0x73, 0x90, 0xf4, 0xdf, + 0xc3, 0xf8, 0xfd, 0x25, 0xd4, 0xb0, 0x68, 0x58, 0xcd, 0x14, 0x76, 0x13, 0x14, 0x52, 0x33, 0x0b, + 0x32, 0x7d, 0x82, 0x5d, 0xaa, 0x01, 0x1a, 0x7b, 0x1f, 0xcf, 0xcd, 0x4d, 0xa5, 0xf2, 0xf4, 0xa0, + 0x70, 0x6b, 0xbc, 0xcd, 0xc3, 0x46, 0xdf, 0xb5, 0xbc, 0xfd, 0x52, 0xeb, 0xce, 0xed, 0x2d, 0x01, + 0x45, 0xb9, 0xc2, 0x51, 0xd3, 0xfd, 0xf0, 0xa7, 0x78, 0xf6, 0x44, 0x37, 0x42, 0xeb, 0x5a, 0x86, + 0xeb, 0x10, 0xff, 0xbe, 0x45, 0x48, 0x57, 0x99, 0x10, 0xbd, 0x0e, 0xd3, 0xdb, 0x96, 0xcd, 0xae, + 0x0c, 0xfd, 0x7a, 0xfc, 0xaa, 0x25, 0xe3, 0x8b, 0x45, 0xc5, 0x07, 0x90, 0x09, 0xbd, 0x37, 0xa2, + 0x4a, 0x18, 0x63, 0x4a, 0xb8, 0x7e, 0x78, 0x50, 0x48, 0x0f, 0x0e, 0x35, 0x57, 0xc4, 0xe7, 0x71, + 0x6d, 0xd2, 0x83, 0x6e, 0xa8, 0x1a, 0xce, 0xc2, 0x14, 0xfb, 0xeb, 0x09, 0xfe, 0x60, 0x53, 0xe5, + 0x1f, 0xa8, 0x0e, 0x69, 0x91, 0x0a, 0xe1, 0x7f, 0x5a, 0x21, 0x1e, 0x69, 0xcd, 0x85, 0xb6, 0xde, + 0xff, 0xe3, 0x8b, 0x52, 0xdd, 0x36, 0x1c, 0x13, 0x9b, 0x75, 0xfa, 0xad, 0x8a, 0xcc, 0x2f, 0xfb, + 0x20, 0x68, 0x09, 0x32, 0x46, 0x07, 0xeb, 0x76, 0xbf, 0xe7, 0xe3, 0xa0, 0x31, 0x71, 0xd2, 0xa2, + 0x9d, 0x00, 0x5a, 0x03, 0xb4, 0xcd, 0x5e, 0xcd, 0x84, 0x47, 0xc5, 0xae, 0x16, 0xc7, 0x01, 0x53, + 0x58, 0x5b, 0x75, 0x30, 0x32, 0xf4, 0x2a, 0xa4, 0x6d, 0xc7, 0x36, 0x74, 0xdb, 0xc0, 0x1d, 0xc6, + 0xac, 0xfc, 0x36, 0x72, 0x58, 0x88, 0x2a, 0x10, 0xe3, 0xf7, 0xd6, 0x22, 0x86, 0xbd, 0x3a, 0xee, + 0xb3, 0xe6, 0xe5, 0x09, 0x55, 0xb4, 0x44, 0x75, 0x88, 0xbb, 0xfc, 0x0d, 0x05, 0xbb, 0xcb, 0x3e, + 0x33, 0x97, 0x14, 0x7a, 0xc7, 0xb2, 0x3c, 0xa1, 0xfa, 0x6d, 0xd1, 0xa6, 0xff, 0xa4, 0x90, 0xdb, + 0x51, 0xf1, 0x2a, 0xac, 0x34, 0x66, 0x84, 0x30, 0x00, 0x1c, 0x42, 0xa1, 0x13, 0xb4, 0xd8, 0x5d, + 0x14, 0xbb, 0xe5, 0x3e, 0x7d, 0x82, 0x43, 0xaf, 0x29, 0xe8, 0x04, 0x79, 0x4b, 0xb4, 0x46, 0x1d, + 0x01, 0xdf, 0xb6, 0xb3, 0xfb, 0xef, 0xe4, 0xc2, 0x9b, 0xe7, 0xf1, 0x7f, 0x97, 0x27, 0xd4, 0x10, + 0x02, 0xba, 0x03, 0x49, 0x63, 0x40, 0x51, 0xb9, 0x69, 0x06, 0xf8, 0xd6, 0xb9, 0xec, 0xd4, 0x32, + 0xb5, 0x4d, 0x03, 0x29, 0xfa, 0x04, 0x32, 0x64, 0x28, 0x5e, 0xca, 0x5d, 0x60, 0xa8, 0x6f, 0x9f, + 0x37, 0x5f, 0xbb, 0x3c, 0xa1, 0x8e, 0x20, 0xa1, 0xff, 0x0f, 0x8a, 0x37, 0x72, 0xab, 0xc3, 0x2e, + 0xb0, 0x4f, 0x7f, 0xb2, 0x77, 0xc2, 0xdd, 0xd5, 0xf2, 0x84, 0x7a, 0x04, 0x0d, 0x7d, 0x06, 0xd3, + 0x64, 0xf8, 0xcf, 0x0f, 0x72, 0x97, 0x58, 0x07, 0xdf, 0x3e, 0xf5, 0x66, 0xe2, 0xb8, 0x3f, 0xb4, + 0x58, 0x9e, 0x50, 0x47, 0xb1, 0x28, 0xbc, 0x3d, 0x7c, 0x39, 0xc4, 0x9e, 0x47, 0x9c, 0x0e, 0x7f, + 0xfc, 0x65, 0x15, 0x85, 0x1f, 0xc1, 0x42, 0x2b, 0x90, 0xe8, 0xfa, 0x9c, 0x9f, 0x7b, 0xe9, 0xcc, + 0x10, 0x63, 0xd4, 0x0c, 0x2d, 0x4f, 0xa8, 0x83, 0xf6, 0x95, 0x04, 0xc4, 0xc5, 0x25, 0x62, 0x70, + 0xc3, 0xcf, 0xef, 0xf6, 0xf9, 0xad, 0x7e, 0x5e, 0xf9, 0x46, 0xf1, 0x67, 0x09, 0x90, 0x03, 0x27, + 0x75, 0x1e, 0x50, 0xe0, 0x3e, 0x0c, 0x5e, 0xb2, 0x52, 0xb3, 0x12, 0x59, 0x9e, 0x50, 0xb3, 0x7e, + 0xd9, 0xe0, 0x31, 0xeb, 0xad, 0xa1, 0xe7, 0x4d, 0xe3, 0xfc, 0xb9, 0x08, 0x1d, 0x60, 0xf0, 0xfe, + 0x89, 0xd2, 0x7d, 0xd7, 0x31, 0xad, 0x6d, 0x6b, 0x40, 0xf7, 0x3c, 0xfb, 0x9c, 0xf1, 0xc5, 0x82, + 0xee, 0xaf, 0x40, 0xc6, 0xed, 0xdb, 0xec, 0xee, 0x50, 0xc4, 0xfc, 0xdc, 0x67, 0x4a, 0x0b, 0xa9, + 0x08, 0xdb, 0xab, 0x23, 0x0c, 0x74, 0xed, 0x4c, 0x06, 0xf2, 0xe7, 0xbe, 0x2c, 0x05, 0x14, 0xb4, + 0x38, 0x4a, 0x41, 0xd7, 0xcf, 0xa6, 0xa0, 0x10, 0x4c, 0xc0, 0x41, 0x5b, 0xc7, 0x72, 0xd0, 0xfc, + 0x98, 0x87, 0x28, 0x84, 0x38, 0x4c, 0x42, 0xd5, 0x11, 0x12, 0xba, 0x76, 0x26, 0x09, 0x85, 0xe7, + 0x28, 0x58, 0x68, 0xfd, 0x18, 0x16, 0x7a, 0xeb, 0x5c, 0xe1, 0xc8, 0xb2, 0x34, 0x44, 0x43, 0xea, + 0x71, 0x34, 0x54, 0x1a, 0x8f, 0x86, 0x42, 0x90, 0x43, 0x3c, 0xf4, 0xe9, 0x11, 0x1e, 0x52, 0xce, + 0x3e, 0xc8, 0xc7, 0x26, 0x7a, 0x96, 0xa5, 0x23, 0x44, 0xa4, 0x1f, 0x43, 0x44, 0x59, 0x06, 0x7f, + 0xe3, 0x1c, 0x44, 0x14, 0xea, 0xe0, 0x28, 0x13, 0xdd, 0x83, 0x54, 0x98, 0x3d, 0xd8, 0x8b, 0x9f, + 0xd3, 0x79, 0xee, 0x84, 0xbf, 0x9b, 0x62, 0x3a, 0x10, 0x2a, 0x42, 0x3f, 0x3c, 0x4a, 0x42, 0x33, + 0x67, 0x82, 0x9f, 0x70, 0xa7, 0xbd, 0x2c, 0x1d, 0x65, 0xa1, 0xdb, 0x61, 0x16, 0x9a, 0x3d, 0xd3, + 0x46, 0x1d, 0xf1, 0x52, 0x97, 0xa5, 0x10, 0x0d, 0xa1, 0xd7, 0x40, 0xf6, 0x5c, 0xdd, 0x60, 0xd7, + 0x12, 0x17, 0xd8, 0xdd, 0x13, 0x4b, 0x0a, 0x6d, 0x52, 0x19, 0x4b, 0x1e, 0xb1, 0x1f, 0x66, 0x05, + 0x40, 0xf6, 0x9f, 0x56, 0x84, 0xa8, 0xab, 0xf8, 0x73, 0x09, 0x26, 0x9b, 0x4e, 0x1b, 0xbd, 0x12, + 0xca, 0x54, 0xa6, 0x45, 0x3c, 0x3b, 0xd5, 0x74, 0xda, 0x22, 0xe5, 0xf8, 0xc1, 0xa0, 0xb5, 0x08, + 0xfc, 0xbe, 0x75, 0xca, 0x90, 0x83, 0x44, 0x6f, 0xd0, 0x08, 0xbd, 0x07, 0xf1, 0x1e, 0x77, 0xac, + 0x05, 0x93, 0x15, 0x4f, 0x6b, 0xcf, 0x6b, 0xaa, 0x7e, 0x93, 0xeb, 0xd7, 0xc2, 0x7f, 0x30, 0xb9, + 0xea, 0x98, 0x18, 0x65, 0x00, 0x36, 0x74, 0x42, 0x7a, 0xbb, 0xae, 0x4e, 0xb0, 0x32, 0x81, 0xe2, + 0x30, 0xb9, 0xb2, 0xda, 0x52, 0xa4, 0xeb, 0xf7, 0xc2, 0x69, 0xc6, 0x9a, 0x5a, 0x6e, 0xac, 0x35, + 0xd6, 0x96, 0xb4, 0xb5, 0xf2, 0x6a, 0xbd, 0xa5, 0x4c, 0xa0, 0x1c, 0xcc, 0x7e, 0x54, 0x6e, 0x6c, + 0x8a, 0xbc, 0xa3, 0xd6, 0x58, 0xdb, 0xac, 0xab, 0x77, 0xcb, 0xb7, 0x15, 0x09, 0x5d, 0x04, 0xa4, + 0xae, 0x57, 0x57, 0x5a, 0xb5, 0x8a, 0x56, 0x5d, 0x5f, 0xdd, 0x28, 0x57, 0x37, 0x1b, 0xeb, 0x6b, + 0x4a, 0x04, 0xc9, 0x10, 0xad, 0xad, 0xaf, 0xd5, 0x15, 0xb8, 0xfe, 0xd3, 0x28, 0x44, 0x59, 0x86, + 0xe4, 0x55, 0x48, 0x6e, 0xad, 0xb5, 0x36, 0xea, 0xd5, 0xc6, 0x62, 0xa3, 0x5e, 0x53, 0x26, 0xf2, + 0x33, 0x8f, 0x9f, 0xcc, 0x4d, 0xd3, 0xa2, 0x2d, 0x9b, 0xf4, 0xb0, 0xc1, 0xb8, 0x15, 0xe5, 0x21, + 0x56, 0x29, 0x57, 0x57, 0xb6, 0x36, 0x14, 0x29, 0x9f, 0x79, 0xfc, 0x64, 0x0e, 0x68, 0x05, 0xce, + 0x8b, 0xe8, 0x65, 0x9e, 0x41, 0x59, 0x57, 0xeb, 0x4a, 0x24, 0x3f, 0xfd, 0xf8, 0xc9, 0x5c, 0x92, + 0x25, 0x66, 0x04, 0xb7, 0xbd, 0x0e, 0xe9, 0x56, 0x75, 0xb9, 0xbe, 0x5a, 0xd6, 0xaa, 0xcb, 0xe5, + 0xb5, 0xa5, 0xba, 0x32, 0x99, 0x9f, 0x7d, 0xfc, 0x64, 0x4e, 0x19, 0x3d, 0x1f, 0xb4, 0x8b, 0xc6, + 0xea, 0xc6, 0xba, 0xba, 0xa9, 0x44, 0x07, 0x5d, 0x70, 0x5a, 0x42, 0x45, 0x00, 0xde, 0x7a, 0xb1, + 0x5e, 0xaf, 0x29, 0x53, 0x79, 0xf4, 0xf8, 0xc9, 0x5c, 0x86, 0x96, 0x0f, 0xd8, 0x06, 0x5d, 0x81, + 0x54, 0x55, 0xad, 0x97, 0x37, 0xeb, 0x5a, 0x6b, 0xb3, 0xbc, 0xd9, 0x52, 0x62, 0x83, 0x99, 0x84, + 0x18, 0x04, 0x95, 0x20, 0x5b, 0xde, 0xda, 0x5c, 0xd7, 0x86, 0xea, 0xc6, 0xf3, 0x97, 0x1e, 0x3f, + 0x99, 0x9b, 0xa1, 0x75, 0xcb, 0x7d, 0xcf, 0x09, 0xd7, 0x7f, 0x13, 0x94, 0xa1, 0xf1, 0x6b, 0x4b, + 0x55, 0x45, 0xce, 0x5f, 0x7c, 0xfc, 0x64, 0x0e, 0x8d, 0x4e, 0x61, 0xa9, 0x8a, 0xbe, 0x03, 0x17, + 0x37, 0x3f, 0xde, 0xa8, 0xd7, 0xea, 0xad, 0xaa, 0x36, 0x3c, 0xed, 0x44, 0x3e, 0xf7, 0xf8, 0xc9, + 0xdc, 0x2c, 0x6d, 0x73, 0x64, 0xea, 0x6f, 0x81, 0xd2, 0xda, 0x54, 0xeb, 0xe5, 0x55, 0xad, 0xb1, + 0xb6, 0x54, 0x6f, 0xb1, 0xcd, 0x82, 0xc1, 0x90, 0x46, 0xce, 0x3a, 0x9d, 0xc2, 0x5a, 0xfd, 0xa3, + 0x11, 0xfc, 0xe4, 0xa0, 0xfe, 0xc8, 0xf1, 0x45, 0x73, 0x90, 0x58, 0x6d, 0x2c, 0xa9, 0x65, 0x86, + 0x9b, 0xca, 0x67, 0x1f, 0x3f, 0x99, 0x4b, 0xd3, 0x7a, 0xc1, 0x61, 0xcc, 0xcb, 0x7f, 0xf8, 0xf3, + 0xcb, 0x13, 0x7f, 0xf1, 0xf9, 0xe5, 0x89, 0xca, 0xd5, 0x2f, 0xfe, 0xe3, 0xf2, 0xc4, 0x17, 0x87, + 0x97, 0xa5, 0xdf, 0x1c, 0x5e, 0x96, 0xbe, 0x3c, 0xbc, 0x2c, 0xfd, 0xfb, 0xe1, 0x65, 0xe9, 0x8f, + 0xbe, 0xba, 0x3c, 0xf1, 0x9b, 0xaf, 0x2e, 0x4f, 0x7c, 0xf9, 0xd5, 0xe5, 0x89, 0x4f, 0x62, 0x5c, + 0xaf, 0xdb, 0x31, 0x16, 0x07, 0xde, 0xf8, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x73, 0xe4, 0x81, + 0x90, 0x60, 0x3e, 0x00, 0x00, } func (this *BackupEncryptionOptions) Equal(that interface{}) bool { @@ -11962,7 +11962,7 @@ func (m *NewSchemaChangeProgress) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType == 0 { - var v scpb.State + var v scpb.Status for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowJobs @@ -11972,7 +11972,7 @@ func (m *NewSchemaChangeProgress) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= scpb.State(b&0x7F) << shift + v |= scpb.Status(b&0x7F) << shift if b < 0x80 { break } @@ -12006,10 +12006,10 @@ func (m *NewSchemaChangeProgress) Unmarshal(dAtA []byte) error { } var elementCount int if elementCount != 0 && len(m.States) == 0 { - m.States = make([]scpb.State, 0, elementCount) + m.States = make([]scpb.Status, 0, elementCount) } for iNdEx < postIndex { - var v scpb.State + var v scpb.Status for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowJobs @@ -12019,7 +12019,7 @@ func (m *NewSchemaChangeProgress) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= scpb.State(b&0x7F) << shift + v |= scpb.Status(b&0x7F) << shift if b < 0x80 { break } diff --git a/pkg/jobs/jobspb/jobs.proto b/pkg/jobs/jobspb/jobs.proto index 0909e905dd6c..73ea25c11b75 100644 --- a/pkg/jobs/jobspb/jobs.proto +++ b/pkg/jobs/jobspb/jobs.proto @@ -338,7 +338,7 @@ message NewSchemaChangeDetails { // NewSchemaChangeProgress is the persisted progress for the new schema change job. message NewSchemaChangeProgress { - repeated cockroach.sql.schemachanger.scpb.State states = 1; + repeated cockroach.sql.schemachanger.scpb.Status states = 1; } diff --git a/pkg/server/BUILD.bazel b/pkg/server/BUILD.bazel index 7b85d416c144..b2a93b31db2a 100644 --- a/pkg/server/BUILD.bazel +++ b/pkg/server/BUILD.bazel @@ -173,6 +173,7 @@ go_library( "//pkg/util/syncutil", "//pkg/util/timeutil", "//pkg/util/tracing", + "//pkg/util/tracing/collector", "//pkg/util/tracing/service", "//pkg/util/tracing/tracingpb", "//pkg/util/tracing/tracingservicepb:tracingservicepb_go_proto", diff --git a/pkg/server/server_sql.go b/pkg/server/server_sql.go index 4fe974aeea28..d74671449235 100644 --- a/pkg/server/server_sql.go +++ b/pkg/server/server_sql.go @@ -83,6 +83,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/util/stop" "github.com/cockroachdb/cockroach/pkg/util/syncutil" "github.com/cockroachdb/cockroach/pkg/util/timeutil" + "github.com/cockroachdb/cockroach/pkg/util/tracing/collector" "github.com/cockroachdb/cockroach/pkg/util/tracing/service" "github.com/cockroachdb/cockroach/pkg/util/tracing/tracingservicepb" "github.com/cockroachdb/errors" @@ -491,8 +492,8 @@ func newSQLServer(ctx context.Context, cfg sqlServerArgs) (*SQLServer, error) { } var isAvailable func(roachpb.NodeID) bool - nodeLiveness, ok := cfg.nodeLiveness.Optional(47900) - if ok { + nodeLiveness, hasNodeLiveness := cfg.nodeLiveness.Optional(47900) + if hasNodeLiveness { // TODO(erikgrinaker): We may want to use IsAvailableNotDraining instead, to // avoid scheduling long-running flows (e.g. rangefeeds or backups) on nodes // that are being drained/decommissioned. However, these nodes can still be @@ -507,6 +508,15 @@ func newSQLServer(ctx context.Context, cfg sqlServerArgs) (*SQLServer, error) { } } + // Setup the trace collector that is used to fetch inflight trace spans from + // all nodes in the cluster. + // The collector requires nodeliveness to get a list of all the nodes in the + // cluster. + var traceCollector *collector.TraceCollector + if hasNodeLiveness { + traceCollector = collector.New(cfg.nodeDialer, nodeLiveness, cfg.Settings.Tracer) + } + *execCfg = sql.ExecutorConfig{ Settings: cfg.Settings, NodeInfo: nodeInfo, @@ -537,6 +547,7 @@ func newSQLServer(ctx context.Context, cfg sqlServerArgs) (*SQLServer, error) { RootMemoryMonitor: rootSQLMemoryMonitor, TestingKnobs: sqlExecutorTestingKnobs, CompactEngineSpanFunc: compactEngineSpanFunc, + TraceCollector: traceCollector, DistSQLPlanner: sql.NewDistSQLPlanner( ctx, diff --git a/pkg/sql/BUILD.bazel b/pkg/sql/BUILD.bazel index 3edeb97c5ca5..7a7e772115b1 100644 --- a/pkg/sql/BUILD.bazel +++ b/pkg/sql/BUILD.bazel @@ -385,6 +385,7 @@ go_library( "//pkg/util/syncutil", "//pkg/util/timeutil", "//pkg/util/tracing", + "//pkg/util/tracing/collector", "//pkg/util/tracing/tracingpb", "//pkg/util/uint128", "//pkg/util/uuid", @@ -393,7 +394,6 @@ go_library( "@com_github_cockroachdb_errors//hintdetail", "@com_github_cockroachdb_logtags//:logtags", "@com_github_cockroachdb_redact//:redact", - "@com_github_gogo_protobuf//jsonpb", "@com_github_gogo_protobuf//proto", "@com_github_gogo_protobuf//types", "@com_github_lib_pq//:pq", diff --git a/pkg/sql/catalog/catconstants/constants.go b/pkg/sql/catalog/catconstants/constants.go index 83bfb5291349..e708b2d2ef12 100644 --- a/pkg/sql/catalog/catconstants/constants.go +++ b/pkg/sql/catalog/catconstants/constants.go @@ -88,6 +88,7 @@ const ( CrdbInternalInterleaved CrdbInternalCrossDbRefrences CrdbInternalLostTableDescriptors + CrdbInternalClusterInflightTracesTable InformationSchemaID InformationSchemaAdministrableRoleAuthorizationsID InformationSchemaApplicableRolesID diff --git a/pkg/sql/conn_executor.go b/pkg/sql/conn_executor.go index c2255253940f..5a9c916a8811 100644 --- a/pkg/sql/conn_executor.go +++ b/pkg/sql/conn_executor.go @@ -2699,7 +2699,7 @@ func (ex *connExecutor) notifyStatsRefresherOfNewTables(ctx context.Context) { // mutate descriptors prior to committing a SQL transaction. func (ex *connExecutor) runPreCommitStages(ctx context.Context) error { scs := &ex.extraTxnState.schemaChangerState - if len(scs.nodes) == 0 { + if len(scs.state) == 0 { return nil } executor := scexec.NewExecutor( @@ -2710,16 +2710,16 @@ func (ex *connExecutor) runPreCommitStages(ctx context.Context) error { after, err := runNewSchemaChanger( ctx, scplan.PreCommitPhase, - ex.extraTxnState.schemaChangerState.nodes, + ex.extraTxnState.schemaChangerState.state, executor, scs.stmts, ) if err != nil { return err } - scs.nodes = after - targetSlice := make([]*scpb.Target, len(scs.nodes)) - states := make([]scpb.State, len(scs.nodes)) + scs.state = after + targetSlice := make([]*scpb.Target, len(scs.state)) + states := make([]scpb.Status, len(scs.state)) // TODO(ajwerner): It may be better in the future to have the builder be // responsible for determining this set of descriptors. As of the time of // writing, the descriptors to be "locked," descriptors that need schema @@ -2727,12 +2727,12 @@ func (ex *connExecutor) runPreCommitStages(ctx context.Context) error { // there are future schema changes to be implemented in the new schema changer // (e.g., RENAME TABLE) for which this may no longer be true. descIDSet := catalog.MakeDescriptorIDSet() - for i := range scs.nodes { - targetSlice[i] = scs.nodes[i].Target - states[i] = scs.nodes[i].State + for i := range scs.state { + targetSlice[i] = scs.state[i].Target + states[i] = scs.state[i].Status // Depending on the element type either a single descriptor ID // will exist or multiple (i.e. foreign keys). - if id := scpb.GetDescID(scs.nodes[i].Element()); id != descpb.InvalidID { + if id := scpb.GetDescID(scs.state[i].Element()); id != descpb.InvalidID { descIDSet.Add(id) } } @@ -2765,18 +2765,18 @@ func (ex *connExecutor) runPreCommitStages(ctx context.Context) error { func runNewSchemaChanger( ctx context.Context, phase scplan.Phase, - nodes []*scpb.Node, + state scpb.State, executor *scexec.Executor, stmts []string, -) (after []*scpb.Node, _ error) { - sc, err := scplan.MakePlan(nodes, scplan.Params{ +) (after scpb.State, _ error) { + sc, err := scplan.MakePlan(state, scplan.Params{ ExecutionPhase: phase, // TODO(ajwerner): Populate the set of new descriptors }) if err != nil { return nil, err } - after = nodes + after = state for _, s := range sc.Stages { if err := executor.ExecuteOps(ctx, s.Ops, scexec.TestingKnobMetadata{ diff --git a/pkg/sql/crdb_internal.go b/pkg/sql/crdb_internal.go index da37b629a0e1..498b6a43c560 100644 --- a/pkg/sql/crdb_internal.go +++ b/pkg/sql/crdb_internal.go @@ -141,6 +141,7 @@ var crdbInternal = virtualSchema{ catconstants.CrdbInternalInterleaved: crdbInternalInterleaved, catconstants.CrdbInternalCrossDbRefrences: crdbInternalCrossDbReferences, catconstants.CrdbInternalLostTableDescriptors: crdbLostTableDescriptors, + catconstants.CrdbInternalClusterInflightTracesTable: crdbInternalClusterInflightTracesTable, }, validWithNoDatabaseContext: true, } @@ -1197,6 +1198,82 @@ CREATE TABLE crdb_internal.session_trace ( }, } +// crdbInternalClusterInflightTracesTable exposes cluster-wide inflight spans +// for a trace_id. +// +// crdbInternalClusterInflightTracesTable is an indexed, virtual table that only +// returns rows when accessed with an index constraint specifying the trace_id +// for which inflight spans need to be aggregated from all nodes in the cluster. +// +// Each row in the virtual table corresponds to a single `tracing.Recording` on +// a particular node. A `tracing.Recording` is the trace of a single operation +// rooted at a root span on that node. Under the hood, the virtual table +// contacts all "live" nodes in the cluster via the trace collector which +// streams back a recording at a time. +// +// The underlying trace collector only buffers recordings one node at a time. +// The virtual table also produces rows lazily, i.e. as and when they are +// consumed by the consumer. Therefore, the memory overhead of querying this +// table will be the size of all the `tracing.Recordings` of a particular +// `trace_id` on a single node in the cluster. Each `tracing.Recording` has its +// own memory protections via ring buffers, and so we do not expect this +// overhead to grow in an unbounded manner. +var crdbInternalClusterInflightTracesTable = virtualSchemaTable{ + comment: `traces for in-flight spans across all nodes in the cluster (cluster RPC; expensive!)`, + schema: ` +CREATE TABLE crdb_internal.cluster_inflight_traces ( + trace_id INT NOT NULL, -- The trace's ID. + node_id INT NOT NULL, -- The node's ID. + trace_json STRING NULL, -- JSON representation of the traced remote operation. + trace_str STRING NULL, -- human readable representation of the traced remote operation. + jaeger_json STRING NULL, -- Jaeger JSON representation of the traced remote operation. + INDEX(trace_id) +)`, + indexes: []virtualIndex{{populate: func(ctx context.Context, constraint tree.Datum, p *planner, + db catalog.DatabaseDescriptor, addRow func(...tree.Datum) error) (matched bool, err error) { + var traceID uint64 + d := tree.UnwrapDatum(p.EvalContext(), constraint) + if d == tree.DNull { + return false, nil + } + switch t := d.(type) { + case *tree.DInt: + traceID = uint64(*t) + default: + return false, errors.AssertionFailedf( + "unexpected type %T for trace_id column in virtual table crdb_internal.cluster_inflight_traces", d) + } + + traceCollector := p.ExecCfg().TraceCollector + for iter := traceCollector.StartIter(ctx, traceID); iter.Valid(); iter.Next() { + nodeID, recording := iter.Value() + traceJSON, err := tracing.TraceToJSON(recording) + if err != nil { + return false, err + } + traceString := recording.String() + traceJaegerJSON, err := recording.ToJaegerJSON("", "", fmt.Sprintf("node %d", nodeID)) + if err != nil { + return false, err + } + if err := addRow(tree.NewDInt(tree.DInt(traceID)), tree.NewDInt(tree.DInt(nodeID)), + tree.NewDString(traceJSON), tree.NewDString(traceString), + tree.NewDString(traceJaegerJSON)); err != nil { + return false, err + } + } + + return true, nil + }}}, + populate: func(ctx context.Context, p *planner, db catalog.DatabaseDescriptor, + addRow func(...tree.Datum) error) error { + // We only want to generate rows when an index constraint is provided on the + // query accessing this vtable. This index constraint will provide the + // trace_id for which we will collect inflight trace spans from the cluster. + return nil + }, +} + // crdbInternalInflightTraceSpanTable exposes the node-local registry of in-flight spans. var crdbInternalInflightTraceSpanTable = virtualSchemaTable{ comment: `in-flight spans (RAM; local node only)`, diff --git a/pkg/sql/crdb_internal_test.go b/pkg/sql/crdb_internal_test.go index 0e5528011562..aa9639c31fb5 100644 --- a/pkg/sql/crdb_internal_test.go +++ b/pkg/sql/crdb_internal_test.go @@ -44,6 +44,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/util/ctxgroup" "github.com/cockroachdb/cockroach/pkg/util/leaktest" "github.com/cockroachdb/cockroach/pkg/util/log" + "github.com/cockroachdb/cockroach/pkg/util/tracing" "github.com/cockroachdb/errors" "github.com/jackc/pgx/pgtype" "github.com/stretchr/testify/assert" @@ -808,3 +809,122 @@ func TestDistSQLFlowsVirtualTables(t *testing.T) { }) } } + +// setupTraces takes two tracers (potentially on different nodes), and creates +// two span hierarchies as depicted below. The method returns the traceIDs for +// both these span hierarchies, along with a cleanup method to Finish() all the +// opened spans. +// +// Traces on node1: +// ------------- +// root <-- traceID1 +// root.child <-- traceID1 +// root.child.remotechild <-- traceID1 +// +// Traces on node2: +// ------------- +// root.child.remotechild2 <-- traceID1 +// root.child.remotechilddone <-- traceID1 +// root2 <-- traceID2 +// root2.child <-- traceID2 +func setupTraces(t1, t2 *tracing.Tracer) (uint64, func()) { + // Start a root span on "node 1". + root := t1.StartSpan("root", tracing.WithForceRealSpan()) + root.SetVerbose(true) + + time.Sleep(10 * time.Millisecond) + + // Start a child span on "node 1". + child := t1.StartSpan("root.child", tracing.WithParentAndAutoCollection(root)) + + // Sleep a bit so that everything that comes afterwards has higher timestamps + // than the one we just assigned. Otherwise the sorting is not deterministic. + time.Sleep(10 * time.Millisecond) + + // Start a forked child span on "node 1". + childRemoteChild := t1.StartSpan("root.child.remotechild", tracing.WithParentAndManualCollection(child.Meta())) + + // Start a remote child span on "node 2". + childRemoteChild2 := t2.StartSpan("root.child.remotechild2", tracing.WithParentAndManualCollection(child.Meta())) + + time.Sleep(10 * time.Millisecond) + + // Start another remote child span on "node 2" that we finish. + childRemoteChildFinished := t2.StartSpan("root.child.remotechilddone", tracing.WithParentAndManualCollection(child.Meta())) + childRemoteChildFinished.Finish() + child.ImportRemoteSpans(childRemoteChildFinished.GetRecording()) + + // Start another remote child span on "node 2" that we finish. This will have + // a different trace_id from the spans created above. + root2 := t2.StartSpan("root2", tracing.WithForceRealSpan()) + root2.SetVerbose(true) + + // Start a child span on "node 2". + child2 := t2.StartSpan("root2.child", tracing.WithParentAndAutoCollection(root2)) + return root.TraceID(), func() { + for _, span := range []*tracing.Span{root, child, childRemoteChild, + childRemoteChild2, root2, child2} { + span.Finish() + } + } +} + +func TestClusterInflightTracesVirtualTable(t *testing.T) { + defer leaktest.AfterTest(t)() + defer log.Scope(t).Close(t) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + args := base.TestClusterArgs{} + tc := testcluster.StartTestCluster(t, 2 /* nodes */, args) + defer tc.Stopper().Stop(ctx) + sqlDB := sqlutils.MakeSQLRunner(tc.ServerConn(0)) + + node1Tracer := tc.Server(0).Tracer().(*tracing.Tracer) + node2Tracer := tc.Server(1).Tracer().(*tracing.Tracer) + + traceID, cleanup := setupTraces(node1Tracer, node2Tracer) + defer cleanup() + + t.Run("no-index-constraint", func(t *testing.T) { + sqlDB.CheckQueryResults(t, `SELECT * from crdb_internal.cluster_inflight_traces`, [][]string{}) + }) + + t.Run("with-index-constraint", func(t *testing.T) { + // We expect there to be 3 tracing.Recordings rooted at + // root, root.child.remotechild, root.child.remotechild2. + expectedRows := []struct { + traceID int + nodeID int + }{ + { + traceID: int(traceID), + nodeID: 1, + }, + { + traceID: int(traceID), + nodeID: 1, + }, + { + traceID: int(traceID), + nodeID: 2, + }, + } + var rowIdx int + rows := sqlDB.Query(t, `SELECT trace_id, node_id, trace_json, trace_str, jaeger_json from crdb_internal.cluster_inflight_traces WHERE trace_id=$1`, traceID) + defer rows.Close() + for rows.Next() { + var traceID, nodeID int + var traceJSON, traceStr, jaegarJSON string + require.NoError(t, rows.Scan(&traceID, &nodeID, &traceJSON, &traceStr, &jaegarJSON)) + require.Less(t, rowIdx, len(expectedRows)) + expected := expectedRows[rowIdx] + require.Equal(t, expected.nodeID, nodeID) + require.Equal(t, expected.traceID, traceID) + require.NotEmpty(t, traceJSON) + require.NotEmpty(t, traceStr) + require.NotEmpty(t, jaegarJSON) + rowIdx++ + } + }) +} diff --git a/pkg/sql/exec_util.go b/pkg/sql/exec_util.go index 28f1f14bdbd4..7ba316600843 100644 --- a/pkg/sql/exec_util.go +++ b/pkg/sql/exec_util.go @@ -84,6 +84,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/util/mon" "github.com/cockroachdb/cockroach/pkg/util/syncutil" "github.com/cockroachdb/cockroach/pkg/util/tracing" + "github.com/cockroachdb/cockroach/pkg/util/tracing/collector" "github.com/cockroachdb/cockroach/pkg/util/tracing/tracingpb" "github.com/cockroachdb/cockroach/pkg/util/uuid" "github.com/cockroachdb/errors" @@ -918,6 +919,10 @@ type ExecutorConfig struct { // CompactEngineSpanFunc is used to inform a storage engine of the need to // perform compaction over a key span. CompactEngineSpanFunc tree.CompactEngineSpanFunc + + // TraceCollector is used to contact all live nodes in the cluster, and + // collect trace spans from their inflight node registries. + TraceCollector *collector.TraceCollector } // VersionUpgradeHook is used to run migrations starting in v21.1. diff --git a/pkg/sql/explain_bundle.go b/pkg/sql/explain_bundle.go index 1c465525cbe9..72d480189ce7 100644 --- a/pkg/sql/explain_bundle.go +++ b/pkg/sql/explain_bundle.go @@ -31,9 +31,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/util/log" "github.com/cockroachdb/cockroach/pkg/util/timeutil" "github.com/cockroachdb/cockroach/pkg/util/tracing" - "github.com/cockroachdb/cockroach/pkg/util/tracing/tracingpb" "github.com/cockroachdb/errors" - "github.com/gogo/protobuf/jsonpb" ) // setExplainBundleResult sets the result of an EXPLAIN ANALYZE (DEBUG) @@ -88,39 +86,6 @@ func setExplainBundleResult( return nil } -// traceToJSON returns the string representation of the trace in JSON format. -// -// traceToJSON assumes that the first span in the recording contains all the -// other spans. -func traceToJSON(trace tracing.Recording) (string, error) { - root := normalizeSpan(trace[0], trace) - marshaller := jsonpb.Marshaler{ - Indent: "\t", - } - str, err := marshaller.MarshalToString(&root) - if err != nil { - return "", err - } - return str, nil -} - -func normalizeSpan(s tracingpb.RecordedSpan, trace tracing.Recording) tracingpb.NormalizedSpan { - var n tracingpb.NormalizedSpan - n.Operation = s.Operation - n.StartTime = s.StartTime - n.Duration = s.Duration - n.Tags = s.Tags - n.Logs = s.Logs - - for _, ss := range trace { - if ss.ParentSpanID != s.SpanID { - continue - } - n.Children = append(n.Children, normalizeSpan(ss, trace)) - } - return n -} - // diagnosticsBundle contains diagnostics information collected for a statement. type diagnosticsBundle struct { // Zip file binary data. @@ -322,7 +287,7 @@ func (b *stmtBundleBuilder) addExplainVec() { // trace (the default and the jaeger formats), the third one is a human-readable // representation. func (b *stmtBundleBuilder) addTrace() { - traceJSONStr, err := traceToJSON(b.trace) + traceJSONStr, err := tracing.TraceToJSON(b.trace) if err != nil { b.z.AddFile("trace.json", err.Error()) } else { @@ -343,7 +308,11 @@ func (b *stmtBundleBuilder) addTrace() { // Note that we're going to include the non-anonymized statement in the trace. // But then again, nothing in the trace is anonymized. - jaegerJSON, err := b.trace.ToJaegerJSON(stmt) + comment := fmt.Sprintf(`This is a trace for SQL statement: %s +This trace can be imported into Jaeger for visualization. From the Jaeger Search screen, select the JSON File. +Jaeger can be started using docker with: docker run -d --name jaeger -p 16686:16686 jaegertracing/all-in-one:1.17 +The UI can then be accessed at http://localhost:16686/search`, stmt) + jaegerJSON, err := b.trace.ToJaegerJSON(stmt, comment, "") if err != nil { b.z.AddFile("trace-jaeger.txt", err.Error()) } else { diff --git a/pkg/sql/logictest/testdata/logic_test/crdb_internal b/pkg/sql/logictest/testdata/logic_test/crdb_internal index 0eb4066e9189..21f226549a41 100644 --- a/pkg/sql/logictest/testdata/logic_test/crdb_internal +++ b/pkg/sql/logictest/testdata/logic_test/crdb_internal @@ -22,6 +22,7 @@ crdb_internal cluster_contended_tables view NULL NULL NULL crdb_internal cluster_contention_events table NULL NULL NULL crdb_internal cluster_database_privileges table NULL NULL NULL crdb_internal cluster_distsql_flows table NULL NULL NULL +crdb_internal cluster_inflight_traces table NULL NULL NULL crdb_internal cluster_queries table NULL NULL NULL crdb_internal cluster_sessions table NULL NULL NULL crdb_internal cluster_settings table NULL NULL NULL @@ -271,6 +272,12 @@ SELECT * FROM crdb_internal.zones WHERE false zone_id subzone_id target range_name database_name schema_name table_name index_name partition_name raw_config_yaml raw_config_sql raw_config_protobuf full_config_yaml full_config_sql + +query IITTT colnames +SELECT * FROM crdb_internal.cluster_inflight_traces WHERE trace_id=123 +---- +trace_id node_id trace_json trace_str jaeger_json + query IIIIBTIT colnames SELECT * FROM crdb_internal.node_inflight_trace_spans WHERE span_id < 0 ---- diff --git a/pkg/sql/logictest/testdata/logic_test/crdb_internal_tenant b/pkg/sql/logictest/testdata/logic_test/crdb_internal_tenant index ca8e33f75651..62851f51927e 100644 --- a/pkg/sql/logictest/testdata/logic_test/crdb_internal_tenant +++ b/pkg/sql/logictest/testdata/logic_test/crdb_internal_tenant @@ -35,6 +35,7 @@ crdb_internal cluster_contended_tables view NULL NULL NULL crdb_internal cluster_contention_events table NULL NULL NULL crdb_internal cluster_database_privileges table NULL NULL NULL crdb_internal cluster_distsql_flows table NULL NULL NULL +crdb_internal cluster_inflight_traces table NULL NULL NULL crdb_internal cluster_queries table NULL NULL NULL crdb_internal cluster_sessions table NULL NULL NULL crdb_internal cluster_settings table NULL NULL NULL diff --git a/pkg/sql/logictest/testdata/logic_test/create_statements b/pkg/sql/logictest/testdata/logic_test/create_statements index 77d2ae6f4b8f..3673bb6a2383 100644 --- a/pkg/sql/logictest/testdata/logic_test/create_statements +++ b/pkg/sql/logictest/testdata/logic_test/create_statements @@ -104,6 +104,21 @@ CREATE TABLE crdb_internal.cluster_distsql_flows ( since TIMESTAMPTZ NOT NULL, status STRING NOT NULL ) {} {} +CREATE TABLE crdb_internal.cluster_inflight_traces ( + trace_id INT8 NOT NULL, + node_id INT8 NOT NULL, + trace_json STRING NULL, + trace_str STRING NULL, + jaeger_json STRING NULL, + INDEX cluster_inflight_traces_trace_id_idx (trace_id ASC) STORING (node_id, trace_json, trace_str, jaeger_json) +) CREATE TABLE crdb_internal.cluster_inflight_traces ( + trace_id INT8 NOT NULL, + node_id INT8 NOT NULL, + trace_json STRING NULL, + trace_str STRING NULL, + jaeger_json STRING NULL, + INDEX cluster_inflight_traces_trace_id_idx (trace_id ASC) STORING (node_id, trace_json, trace_str, jaeger_json) +) {} {} CREATE TABLE crdb_internal.cluster_queries ( query_id STRING NULL, txn_id UUID NULL, diff --git a/pkg/sql/logictest/testdata/logic_test/grant_table b/pkg/sql/logictest/testdata/logic_test/grant_table index 2650792a1e8d..5b67ebcf5054 100644 --- a/pkg/sql/logictest/testdata/logic_test/grant_table +++ b/pkg/sql/logictest/testdata/logic_test/grant_table @@ -34,6 +34,7 @@ test crdb_internal cluster_contended_tables public test crdb_internal cluster_contention_events public SELECT test crdb_internal cluster_database_privileges public SELECT test crdb_internal cluster_distsql_flows public SELECT +test crdb_internal cluster_inflight_traces public SELECT test crdb_internal cluster_queries public SELECT test crdb_internal cluster_sessions public SELECT test crdb_internal cluster_settings public SELECT diff --git a/pkg/sql/logictest/testdata/logic_test/information_schema b/pkg/sql/logictest/testdata/logic_test/information_schema index e62485ad081f..00d71fdcd341 100644 --- a/pkg/sql/logictest/testdata/logic_test/information_schema +++ b/pkg/sql/logictest/testdata/logic_test/information_schema @@ -362,6 +362,7 @@ crdb_internal cluster_contended_tables crdb_internal cluster_contention_events crdb_internal cluster_database_privileges crdb_internal cluster_distsql_flows +crdb_internal cluster_inflight_traces crdb_internal cluster_queries crdb_internal cluster_sessions crdb_internal cluster_settings @@ -610,6 +611,7 @@ cluster_contended_tables cluster_contention_events cluster_database_privileges cluster_distsql_flows +cluster_inflight_traces cluster_queries cluster_sessions cluster_settings @@ -888,6 +890,7 @@ system crdb_internal cluster_contended_tables SYSTEM system crdb_internal cluster_contention_events SYSTEM VIEW NO 1 system crdb_internal cluster_database_privileges SYSTEM VIEW NO 1 system crdb_internal cluster_distsql_flows SYSTEM VIEW NO 1 +system crdb_internal cluster_inflight_traces SYSTEM VIEW NO 1 system crdb_internal cluster_queries SYSTEM VIEW NO 1 system crdb_internal cluster_sessions SYSTEM VIEW NO 1 system crdb_internal cluster_settings SYSTEM VIEW NO 1 @@ -2238,6 +2241,7 @@ NULL public system crdb_internal cluster_contended_tables NULL public system crdb_internal cluster_contention_events SELECT NULL YES NULL public system crdb_internal cluster_database_privileges SELECT NULL YES NULL public system crdb_internal cluster_distsql_flows SELECT NULL YES +NULL public system crdb_internal cluster_inflight_traces SELECT NULL YES NULL public system crdb_internal cluster_queries SELECT NULL YES NULL public system crdb_internal cluster_sessions SELECT NULL YES NULL public system crdb_internal cluster_settings SELECT NULL YES @@ -2727,6 +2731,7 @@ NULL public system crdb_internal cluster_contended_tables NULL public system crdb_internal cluster_contention_events SELECT NULL YES NULL public system crdb_internal cluster_database_privileges SELECT NULL YES NULL public system crdb_internal cluster_distsql_flows SELECT NULL YES +NULL public system crdb_internal cluster_inflight_traces SELECT NULL YES NULL public system crdb_internal cluster_queries SELECT NULL YES NULL public system crdb_internal cluster_sessions SELECT NULL YES NULL public system crdb_internal cluster_settings SELECT NULL YES diff --git a/pkg/sql/logictest/testdata/logic_test/pg_builtins b/pkg/sql/logictest/testdata/logic_test/pg_builtins index 1bf7610c1c67..151ba273df6d 100644 --- a/pkg/sql/logictest/testdata/logic_test/pg_builtins +++ b/pkg/sql/logictest/testdata/logic_test/pg_builtins @@ -182,42 +182,42 @@ is_updatable b 66 2 28 is_updatable c 66 3 28 false is_updatable_view a 67 1 0 false is_updatable_view b 67 2 0 false -pg_class oid 4294967161 1 0 false -pg_class relname 4294967161 2 0 false -pg_class relnamespace 4294967161 3 0 false -pg_class reltype 4294967161 4 0 false -pg_class reloftype 4294967161 5 0 false -pg_class relowner 4294967161 6 0 false -pg_class relam 4294967161 7 0 false -pg_class relfilenode 4294967161 8 0 false -pg_class reltablespace 4294967161 9 0 false -pg_class relpages 4294967161 10 0 false -pg_class reltuples 4294967161 11 0 false -pg_class relallvisible 4294967161 12 0 false -pg_class reltoastrelid 4294967161 13 0 false -pg_class relhasindex 4294967161 14 0 false -pg_class relisshared 4294967161 15 0 false -pg_class relpersistence 4294967161 16 0 false -pg_class relistemp 4294967161 17 0 false -pg_class relkind 4294967161 18 0 false -pg_class relnatts 4294967161 19 0 false -pg_class relchecks 4294967161 20 0 false -pg_class relhasoids 4294967161 21 0 false -pg_class relhaspkey 4294967161 22 0 false -pg_class relhasrules 4294967161 23 0 false -pg_class relhastriggers 4294967161 24 0 false -pg_class relhassubclass 4294967161 25 0 false -pg_class relfrozenxid 4294967161 26 0 false -pg_class relacl 4294967161 27 0 false -pg_class reloptions 4294967161 28 0 false -pg_class relforcerowsecurity 4294967161 29 0 false -pg_class relispartition 4294967161 30 0 false -pg_class relispopulated 4294967161 31 0 false -pg_class relreplident 4294967161 32 0 false -pg_class relrewrite 4294967161 33 0 false -pg_class relrowsecurity 4294967161 34 0 false -pg_class relpartbound 4294967161 35 0 false -pg_class relminmxid 4294967161 36 0 false +pg_class oid 4294967160 1 0 false +pg_class relname 4294967160 2 0 false +pg_class relnamespace 4294967160 3 0 false +pg_class reltype 4294967160 4 0 false +pg_class reloftype 4294967160 5 0 false +pg_class relowner 4294967160 6 0 false +pg_class relam 4294967160 7 0 false +pg_class relfilenode 4294967160 8 0 false +pg_class reltablespace 4294967160 9 0 false +pg_class relpages 4294967160 10 0 false +pg_class reltuples 4294967160 11 0 false +pg_class relallvisible 4294967160 12 0 false +pg_class reltoastrelid 4294967160 13 0 false +pg_class relhasindex 4294967160 14 0 false +pg_class relisshared 4294967160 15 0 false +pg_class relpersistence 4294967160 16 0 false +pg_class relistemp 4294967160 17 0 false +pg_class relkind 4294967160 18 0 false +pg_class relnatts 4294967160 19 0 false +pg_class relchecks 4294967160 20 0 false +pg_class relhasoids 4294967160 21 0 false +pg_class relhaspkey 4294967160 22 0 false +pg_class relhasrules 4294967160 23 0 false +pg_class relhastriggers 4294967160 24 0 false +pg_class relhassubclass 4294967160 25 0 false +pg_class relfrozenxid 4294967160 26 0 false +pg_class relacl 4294967160 27 0 false +pg_class reloptions 4294967160 28 0 false +pg_class relforcerowsecurity 4294967160 29 0 false +pg_class relispartition 4294967160 30 0 false +pg_class relispopulated 4294967160 31 0 false +pg_class relreplident 4294967160 32 0 false +pg_class relrewrite 4294967160 33 0 false +pg_class relrowsecurity 4294967160 34 0 false +pg_class relpartbound 4294967160 35 0 false +pg_class relminmxid 4294967160 36 0 false # Check that the oid does not exist. If this test fail, change the oid here and in # the next test at 'relation does not exist' value. diff --git a/pkg/sql/logictest/testdata/logic_test/pg_catalog b/pkg/sql/logictest/testdata/logic_test/pg_catalog index 0fb48343b9c7..97ff91ffb1aa 100644 --- a/pkg/sql/logictest/testdata/logic_test/pg_catalog +++ b/pkg/sql/logictest/testdata/logic_test/pg_catalog @@ -1206,14 +1206,14 @@ FROM pg_catalog.pg_depend ORDER BY objid ---- classid objid objsubid refclassid refobjid refobjsubid deptype -4294967158 2143281868 0 4294967161 450499961 0 n -4294967158 2355671820 0 4294967161 0 0 n -4294967158 3911002394 0 4294967161 0 0 n -4294967115 4079785839 0 4294967161 55 3 n -4294967115 4079785839 0 4294967161 55 4 n -4294967115 4079785839 0 4294967161 55 1 n -4294967115 4079785839 0 4294967161 55 2 n -4294967158 4089604113 0 4294967161 450499960 0 n +4294967157 2143281868 0 4294967160 450499961 0 n +4294967157 2355671820 0 4294967160 0 0 n +4294967157 3911002394 0 4294967160 0 0 n +4294967114 4079785839 0 4294967160 55 3 n +4294967114 4079785839 0 4294967160 55 4 n +4294967114 4079785839 0 4294967160 55 1 n +4294967114 4079785839 0 4294967160 55 2 n +4294967157 4089604113 0 4294967160 450499960 0 n # Some entries in pg_depend are dependency links from the pg_constraint system # table to the pg_class system table. Other entries are links to pg_class when it is @@ -1226,8 +1226,8 @@ JOIN pg_class cla ON classid=cla.oid JOIN pg_class refcla ON refclassid=refcla.oid ---- classid refclassid tablename reftablename -4294967115 4294967161 pg_rewrite pg_class -4294967158 4294967161 pg_constraint pg_class +4294967114 4294967160 pg_rewrite pg_class +4294967157 4294967160 pg_constraint pg_class # Some entries in pg_depend are foreign key constraints that reference an index # in pg_class. Other entries are table-view dependencies @@ -1410,164 +1410,165 @@ oid typname typnamespace typowner typ 100072 _newtype1 2332901747 1546506610 -1 false b 100073 newtype2 2332901747 1546506610 -1 false e 100074 _newtype2 2332901747 1546506610 -1 false b -4294967079 spatial_ref_sys 3553698885 3233629770 -1 false c -4294967080 geometry_columns 3553698885 3233629770 -1 false c -4294967081 geography_columns 3553698885 3233629770 -1 false c -4294967083 pg_views 1307062959 3233629770 -1 false c -4294967084 pg_user 1307062959 3233629770 -1 false c -4294967085 pg_user_mappings 1307062959 3233629770 -1 false c -4294967086 pg_user_mapping 1307062959 3233629770 -1 false c -4294967087 pg_type 1307062959 3233629770 -1 false c -4294967088 pg_ts_template 1307062959 3233629770 -1 false c -4294967089 pg_ts_parser 1307062959 3233629770 -1 false c -4294967090 pg_ts_dict 1307062959 3233629770 -1 false c -4294967091 pg_ts_config 1307062959 3233629770 -1 false c -4294967092 pg_ts_config_map 1307062959 3233629770 -1 false c -4294967093 pg_trigger 1307062959 3233629770 -1 false c -4294967094 pg_transform 1307062959 3233629770 -1 false c -4294967095 pg_timezone_names 1307062959 3233629770 -1 false c -4294967096 pg_timezone_abbrevs 1307062959 3233629770 -1 false c -4294967097 pg_tablespace 1307062959 3233629770 -1 false c -4294967098 pg_tables 1307062959 3233629770 -1 false c -4294967099 pg_subscription 1307062959 3233629770 -1 false c -4294967100 pg_subscription_rel 1307062959 3233629770 -1 false c -4294967101 pg_statistic_ext 1307062959 3233629770 -1 false c -4294967102 pg_stat_activity 1307062959 3233629770 -1 false c -4294967103 pg_shmem_allocations 1307062959 3233629770 -1 false c -4294967104 pg_shdepend 1307062959 3233629770 -1 false c -4294967105 pg_shseclabel 1307062959 3233629770 -1 false c -4294967106 pg_shdescription 1307062959 3233629770 -1 false c -4294967107 pg_shadow 1307062959 3233629770 -1 false c -4294967108 pg_settings 1307062959 3233629770 -1 false c -4294967109 pg_sequences 1307062959 3233629770 -1 false c -4294967110 pg_sequence 1307062959 3233629770 -1 false c -4294967111 pg_seclabel 1307062959 3233629770 -1 false c -4294967112 pg_seclabels 1307062959 3233629770 -1 false c -4294967113 pg_rules 1307062959 3233629770 -1 false c -4294967114 pg_roles 1307062959 3233629770 -1 false c -4294967115 pg_rewrite 1307062959 3233629770 -1 false c -4294967116 pg_replication_slots 1307062959 3233629770 -1 false c -4294967117 pg_replication_origin 1307062959 3233629770 -1 false c -4294967118 pg_replication_origin_status 1307062959 3233629770 -1 false c -4294967119 pg_range 1307062959 3233629770 -1 false c -4294967120 pg_publication_tables 1307062959 3233629770 -1 false c -4294967121 pg_publication 1307062959 3233629770 -1 false c -4294967122 pg_publication_rel 1307062959 3233629770 -1 false c -4294967123 pg_proc 1307062959 3233629770 -1 false c -4294967124 pg_prepared_xacts 1307062959 3233629770 -1 false c -4294967125 pg_prepared_statements 1307062959 3233629770 -1 false c -4294967126 pg_policy 1307062959 3233629770 -1 false c -4294967127 pg_policies 1307062959 3233629770 -1 false c -4294967128 pg_partitioned_table 1307062959 3233629770 -1 false c -4294967129 pg_opfamily 1307062959 3233629770 -1 false c -4294967130 pg_operator 1307062959 3233629770 -1 false c -4294967131 pg_opclass 1307062959 3233629770 -1 false c -4294967132 pg_namespace 1307062959 3233629770 -1 false c -4294967133 pg_matviews 1307062959 3233629770 -1 false c -4294967134 pg_locks 1307062959 3233629770 -1 false c -4294967135 pg_largeobject 1307062959 3233629770 -1 false c -4294967136 pg_largeobject_metadata 1307062959 3233629770 -1 false c -4294967137 pg_language 1307062959 3233629770 -1 false c -4294967138 pg_init_privs 1307062959 3233629770 -1 false c -4294967139 pg_inherits 1307062959 3233629770 -1 false c -4294967140 pg_indexes 1307062959 3233629770 -1 false c -4294967141 pg_index 1307062959 3233629770 -1 false c -4294967142 pg_hba_file_rules 1307062959 3233629770 -1 false c -4294967143 pg_group 1307062959 3233629770 -1 false c -4294967144 pg_foreign_table 1307062959 3233629770 -1 false c -4294967145 pg_foreign_server 1307062959 3233629770 -1 false c -4294967146 pg_foreign_data_wrapper 1307062959 3233629770 -1 false c -4294967147 pg_file_settings 1307062959 3233629770 -1 false c -4294967148 pg_extension 1307062959 3233629770 -1 false c -4294967149 pg_event_trigger 1307062959 3233629770 -1 false c -4294967150 pg_enum 1307062959 3233629770 -1 false c -4294967151 pg_description 1307062959 3233629770 -1 false c -4294967152 pg_depend 1307062959 3233629770 -1 false c -4294967153 pg_default_acl 1307062959 3233629770 -1 false c -4294967154 pg_db_role_setting 1307062959 3233629770 -1 false c -4294967155 pg_database 1307062959 3233629770 -1 false c -4294967156 pg_cursors 1307062959 3233629770 -1 false c -4294967157 pg_conversion 1307062959 3233629770 -1 false c -4294967158 pg_constraint 1307062959 3233629770 -1 false c -4294967159 pg_config 1307062959 3233629770 -1 false c -4294967160 pg_collation 1307062959 3233629770 -1 false c -4294967161 pg_class 1307062959 3233629770 -1 false c -4294967162 pg_cast 1307062959 3233629770 -1 false c -4294967163 pg_available_extensions 1307062959 3233629770 -1 false c -4294967164 pg_available_extension_versions 1307062959 3233629770 -1 false c -4294967165 pg_auth_members 1307062959 3233629770 -1 false c -4294967166 pg_authid 1307062959 3233629770 -1 false c -4294967167 pg_attribute 1307062959 3233629770 -1 false c -4294967168 pg_attrdef 1307062959 3233629770 -1 false c -4294967169 pg_amproc 1307062959 3233629770 -1 false c -4294967170 pg_amop 1307062959 3233629770 -1 false c -4294967171 pg_am 1307062959 3233629770 -1 false c -4294967172 pg_aggregate 1307062959 3233629770 -1 false c -4294967174 views 359535012 3233629770 -1 false c -4294967175 view_table_usage 359535012 3233629770 -1 false c -4294967176 view_routine_usage 359535012 3233629770 -1 false c -4294967177 view_column_usage 359535012 3233629770 -1 false c -4294967178 user_privileges 359535012 3233629770 -1 false c -4294967179 user_mappings 359535012 3233629770 -1 false c -4294967180 user_mapping_options 359535012 3233629770 -1 false c -4294967181 user_defined_types 359535012 3233629770 -1 false c -4294967182 usage_privileges 359535012 3233629770 -1 false c -4294967183 udt_privileges 359535012 3233629770 -1 false c -4294967184 type_privileges 359535012 3233629770 -1 false c -4294967185 triggers 359535012 3233629770 -1 false c -4294967186 triggered_update_columns 359535012 3233629770 -1 false c -4294967187 transforms 359535012 3233629770 -1 false c -4294967188 tables 359535012 3233629770 -1 false c -4294967189 table_privileges 359535012 3233629770 -1 false c -4294967190 table_constraints 359535012 3233629770 -1 false c -4294967191 statistics 359535012 3233629770 -1 false c -4294967192 sql_sizing 359535012 3233629770 -1 false c -4294967193 sql_parts 359535012 3233629770 -1 false c -4294967194 sql_implementation_info 359535012 3233629770 -1 false c -4294967195 sql_features 359535012 3233629770 -1 false c -4294967196 session_variables 359535012 3233629770 -1 false c -4294967197 sequences 359535012 3233629770 -1 false c -4294967198 schema_privileges 359535012 3233629770 -1 false c -4294967199 schemata 359535012 3233629770 -1 false c -4294967200 routines 359535012 3233629770 -1 false c -4294967201 routine_privileges 359535012 3233629770 -1 false c -4294967202 role_usage_grants 359535012 3233629770 -1 false c -4294967203 role_udt_grants 359535012 3233629770 -1 false c -4294967204 role_table_grants 359535012 3233629770 -1 false c -4294967205 role_routine_grants 359535012 3233629770 -1 false c -4294967206 role_column_grants 359535012 3233629770 -1 false c -4294967207 referential_constraints 359535012 3233629770 -1 false c -4294967208 parameters 359535012 3233629770 -1 false c -4294967209 key_column_usage 359535012 3233629770 -1 false c -4294967210 information_schema_catalog_name 359535012 3233629770 -1 false c -4294967211 foreign_tables 359535012 3233629770 -1 false c -4294967212 foreign_table_options 359535012 3233629770 -1 false c -4294967213 foreign_servers 359535012 3233629770 -1 false c -4294967214 foreign_server_options 359535012 3233629770 -1 false c -4294967215 foreign_data_wrappers 359535012 3233629770 -1 false c -4294967216 foreign_data_wrapper_options 359535012 3233629770 -1 false c -4294967217 enabled_roles 359535012 3233629770 -1 false c -4294967218 element_types 359535012 3233629770 -1 false c -4294967219 domains 359535012 3233629770 -1 false c -4294967220 domain_udt_usage 359535012 3233629770 -1 false c -4294967221 domain_constraints 359535012 3233629770 -1 false c -4294967222 data_type_privileges 359535012 3233629770 -1 false c -4294967223 constraint_table_usage 359535012 3233629770 -1 false c -4294967224 constraint_column_usage 359535012 3233629770 -1 false c -4294967225 columns 359535012 3233629770 -1 false c -4294967226 column_udt_usage 359535012 3233629770 -1 false c -4294967227 column_privileges 359535012 3233629770 -1 false c -4294967228 column_options 359535012 3233629770 -1 false c -4294967229 column_domain_usage 359535012 3233629770 -1 false c -4294967230 column_column_usage 359535012 3233629770 -1 false c -4294967231 collations 359535012 3233629770 -1 false c -4294967232 collation_character_set_applicability 359535012 3233629770 -1 false c -4294967233 check_constraints 359535012 3233629770 -1 false c -4294967234 check_constraint_routine_usage 359535012 3233629770 -1 false c -4294967235 character_sets 359535012 3233629770 -1 false c -4294967236 attributes 359535012 3233629770 -1 false c -4294967237 applicable_roles 359535012 3233629770 -1 false c -4294967238 administrable_role_authorizations 359535012 3233629770 -1 false c +4294967078 spatial_ref_sys 3553698885 3233629770 -1 false c +4294967079 geometry_columns 3553698885 3233629770 -1 false c +4294967080 geography_columns 3553698885 3233629770 -1 false c +4294967082 pg_views 1307062959 3233629770 -1 false c +4294967083 pg_user 1307062959 3233629770 -1 false c +4294967084 pg_user_mappings 1307062959 3233629770 -1 false c +4294967085 pg_user_mapping 1307062959 3233629770 -1 false c +4294967086 pg_type 1307062959 3233629770 -1 false c +4294967087 pg_ts_template 1307062959 3233629770 -1 false c +4294967088 pg_ts_parser 1307062959 3233629770 -1 false c +4294967089 pg_ts_dict 1307062959 3233629770 -1 false c +4294967090 pg_ts_config 1307062959 3233629770 -1 false c +4294967091 pg_ts_config_map 1307062959 3233629770 -1 false c +4294967092 pg_trigger 1307062959 3233629770 -1 false c +4294967093 pg_transform 1307062959 3233629770 -1 false c +4294967094 pg_timezone_names 1307062959 3233629770 -1 false c +4294967095 pg_timezone_abbrevs 1307062959 3233629770 -1 false c +4294967096 pg_tablespace 1307062959 3233629770 -1 false c +4294967097 pg_tables 1307062959 3233629770 -1 false c +4294967098 pg_subscription 1307062959 3233629770 -1 false c +4294967099 pg_subscription_rel 1307062959 3233629770 -1 false c +4294967100 pg_statistic_ext 1307062959 3233629770 -1 false c +4294967101 pg_stat_activity 1307062959 3233629770 -1 false c +4294967102 pg_shmem_allocations 1307062959 3233629770 -1 false c +4294967103 pg_shdepend 1307062959 3233629770 -1 false c +4294967104 pg_shseclabel 1307062959 3233629770 -1 false c +4294967105 pg_shdescription 1307062959 3233629770 -1 false c +4294967106 pg_shadow 1307062959 3233629770 -1 false c +4294967107 pg_settings 1307062959 3233629770 -1 false c +4294967108 pg_sequences 1307062959 3233629770 -1 false c +4294967109 pg_sequence 1307062959 3233629770 -1 false c +4294967110 pg_seclabel 1307062959 3233629770 -1 false c +4294967111 pg_seclabels 1307062959 3233629770 -1 false c +4294967112 pg_rules 1307062959 3233629770 -1 false c +4294967113 pg_roles 1307062959 3233629770 -1 false c +4294967114 pg_rewrite 1307062959 3233629770 -1 false c +4294967115 pg_replication_slots 1307062959 3233629770 -1 false c +4294967116 pg_replication_origin 1307062959 3233629770 -1 false c +4294967117 pg_replication_origin_status 1307062959 3233629770 -1 false c +4294967118 pg_range 1307062959 3233629770 -1 false c +4294967119 pg_publication_tables 1307062959 3233629770 -1 false c +4294967120 pg_publication 1307062959 3233629770 -1 false c +4294967121 pg_publication_rel 1307062959 3233629770 -1 false c +4294967122 pg_proc 1307062959 3233629770 -1 false c +4294967123 pg_prepared_xacts 1307062959 3233629770 -1 false c +4294967124 pg_prepared_statements 1307062959 3233629770 -1 false c +4294967125 pg_policy 1307062959 3233629770 -1 false c +4294967126 pg_policies 1307062959 3233629770 -1 false c +4294967127 pg_partitioned_table 1307062959 3233629770 -1 false c +4294967128 pg_opfamily 1307062959 3233629770 -1 false c +4294967129 pg_operator 1307062959 3233629770 -1 false c +4294967130 pg_opclass 1307062959 3233629770 -1 false c +4294967131 pg_namespace 1307062959 3233629770 -1 false c +4294967132 pg_matviews 1307062959 3233629770 -1 false c +4294967133 pg_locks 1307062959 3233629770 -1 false c +4294967134 pg_largeobject 1307062959 3233629770 -1 false c +4294967135 pg_largeobject_metadata 1307062959 3233629770 -1 false c +4294967136 pg_language 1307062959 3233629770 -1 false c +4294967137 pg_init_privs 1307062959 3233629770 -1 false c +4294967138 pg_inherits 1307062959 3233629770 -1 false c +4294967139 pg_indexes 1307062959 3233629770 -1 false c +4294967140 pg_index 1307062959 3233629770 -1 false c +4294967141 pg_hba_file_rules 1307062959 3233629770 -1 false c +4294967142 pg_group 1307062959 3233629770 -1 false c +4294967143 pg_foreign_table 1307062959 3233629770 -1 false c +4294967144 pg_foreign_server 1307062959 3233629770 -1 false c +4294967145 pg_foreign_data_wrapper 1307062959 3233629770 -1 false c +4294967146 pg_file_settings 1307062959 3233629770 -1 false c +4294967147 pg_extension 1307062959 3233629770 -1 false c +4294967148 pg_event_trigger 1307062959 3233629770 -1 false c +4294967149 pg_enum 1307062959 3233629770 -1 false c +4294967150 pg_description 1307062959 3233629770 -1 false c +4294967151 pg_depend 1307062959 3233629770 -1 false c +4294967152 pg_default_acl 1307062959 3233629770 -1 false c +4294967153 pg_db_role_setting 1307062959 3233629770 -1 false c +4294967154 pg_database 1307062959 3233629770 -1 false c +4294967155 pg_cursors 1307062959 3233629770 -1 false c +4294967156 pg_conversion 1307062959 3233629770 -1 false c +4294967157 pg_constraint 1307062959 3233629770 -1 false c +4294967158 pg_config 1307062959 3233629770 -1 false c +4294967159 pg_collation 1307062959 3233629770 -1 false c +4294967160 pg_class 1307062959 3233629770 -1 false c +4294967161 pg_cast 1307062959 3233629770 -1 false c +4294967162 pg_available_extensions 1307062959 3233629770 -1 false c +4294967163 pg_available_extension_versions 1307062959 3233629770 -1 false c +4294967164 pg_auth_members 1307062959 3233629770 -1 false c +4294967165 pg_authid 1307062959 3233629770 -1 false c +4294967166 pg_attribute 1307062959 3233629770 -1 false c +4294967167 pg_attrdef 1307062959 3233629770 -1 false c +4294967168 pg_amproc 1307062959 3233629770 -1 false c +4294967169 pg_amop 1307062959 3233629770 -1 false c +4294967170 pg_am 1307062959 3233629770 -1 false c +4294967171 pg_aggregate 1307062959 3233629770 -1 false c +4294967173 views 359535012 3233629770 -1 false c +4294967174 view_table_usage 359535012 3233629770 -1 false c +4294967175 view_routine_usage 359535012 3233629770 -1 false c +4294967176 view_column_usage 359535012 3233629770 -1 false c +4294967177 user_privileges 359535012 3233629770 -1 false c +4294967178 user_mappings 359535012 3233629770 -1 false c +4294967179 user_mapping_options 359535012 3233629770 -1 false c +4294967180 user_defined_types 359535012 3233629770 -1 false c +4294967181 usage_privileges 359535012 3233629770 -1 false c +4294967182 udt_privileges 359535012 3233629770 -1 false c +4294967183 type_privileges 359535012 3233629770 -1 false c +4294967184 triggers 359535012 3233629770 -1 false c +4294967185 triggered_update_columns 359535012 3233629770 -1 false c +4294967186 transforms 359535012 3233629770 -1 false c +4294967187 tables 359535012 3233629770 -1 false c +4294967188 table_privileges 359535012 3233629770 -1 false c +4294967189 table_constraints 359535012 3233629770 -1 false c +4294967190 statistics 359535012 3233629770 -1 false c +4294967191 sql_sizing 359535012 3233629770 -1 false c +4294967192 sql_parts 359535012 3233629770 -1 false c +4294967193 sql_implementation_info 359535012 3233629770 -1 false c +4294967194 sql_features 359535012 3233629770 -1 false c +4294967195 session_variables 359535012 3233629770 -1 false c +4294967196 sequences 359535012 3233629770 -1 false c +4294967197 schema_privileges 359535012 3233629770 -1 false c +4294967198 schemata 359535012 3233629770 -1 false c +4294967199 routines 359535012 3233629770 -1 false c +4294967200 routine_privileges 359535012 3233629770 -1 false c +4294967201 role_usage_grants 359535012 3233629770 -1 false c +4294967202 role_udt_grants 359535012 3233629770 -1 false c +4294967203 role_table_grants 359535012 3233629770 -1 false c +4294967204 role_routine_grants 359535012 3233629770 -1 false c +4294967205 role_column_grants 359535012 3233629770 -1 false c +4294967206 referential_constraints 359535012 3233629770 -1 false c +4294967207 parameters 359535012 3233629770 -1 false c +4294967208 key_column_usage 359535012 3233629770 -1 false c +4294967209 information_schema_catalog_name 359535012 3233629770 -1 false c +4294967210 foreign_tables 359535012 3233629770 -1 false c +4294967211 foreign_table_options 359535012 3233629770 -1 false c +4294967212 foreign_servers 359535012 3233629770 -1 false c +4294967213 foreign_server_options 359535012 3233629770 -1 false c +4294967214 foreign_data_wrappers 359535012 3233629770 -1 false c +4294967215 foreign_data_wrapper_options 359535012 3233629770 -1 false c +4294967216 enabled_roles 359535012 3233629770 -1 false c +4294967217 element_types 359535012 3233629770 -1 false c +4294967218 domains 359535012 3233629770 -1 false c +4294967219 domain_udt_usage 359535012 3233629770 -1 false c +4294967220 domain_constraints 359535012 3233629770 -1 false c +4294967221 data_type_privileges 359535012 3233629770 -1 false c +4294967222 constraint_table_usage 359535012 3233629770 -1 false c +4294967223 constraint_column_usage 359535012 3233629770 -1 false c +4294967224 columns 359535012 3233629770 -1 false c +4294967225 column_udt_usage 359535012 3233629770 -1 false c +4294967226 column_privileges 359535012 3233629770 -1 false c +4294967227 column_options 359535012 3233629770 -1 false c +4294967228 column_domain_usage 359535012 3233629770 -1 false c +4294967229 column_column_usage 359535012 3233629770 -1 false c +4294967230 collations 359535012 3233629770 -1 false c +4294967231 collation_character_set_applicability 359535012 3233629770 -1 false c +4294967232 check_constraints 359535012 3233629770 -1 false c +4294967233 check_constraint_routine_usage 359535012 3233629770 -1 false c +4294967234 character_sets 359535012 3233629770 -1 false c +4294967235 attributes 359535012 3233629770 -1 false c +4294967236 applicable_roles 359535012 3233629770 -1 false c +4294967237 administrable_role_authorizations 359535012 3233629770 -1 false c +4294967239 cluster_inflight_traces 1146641803 3233629770 -1 false c 4294967240 lost_descriptors_with_data 1146641803 3233629770 -1 false c 4294967241 cross_db_references 1146641803 3233629770 -1 false c 4294967242 interleaved 1146641803 3233629770 -1 false c @@ -1720,164 +1721,165 @@ oid typname typcategory typispreferred 100072 _newtype1 A false true , 0 100071 0 100073 newtype2 E false true , 0 0 100074 100074 _newtype2 A false true , 0 100073 0 -4294967079 spatial_ref_sys C false true , 4294967079 0 0 -4294967080 geometry_columns C false true , 4294967080 0 0 -4294967081 geography_columns C false true , 4294967081 0 0 -4294967083 pg_views C false true , 4294967083 0 0 -4294967084 pg_user C false true , 4294967084 0 0 -4294967085 pg_user_mappings C false true , 4294967085 0 0 -4294967086 pg_user_mapping C false true , 4294967086 0 0 -4294967087 pg_type C false true , 4294967087 0 0 -4294967088 pg_ts_template C false true , 4294967088 0 0 -4294967089 pg_ts_parser C false true , 4294967089 0 0 -4294967090 pg_ts_dict C false true , 4294967090 0 0 -4294967091 pg_ts_config C false true , 4294967091 0 0 -4294967092 pg_ts_config_map C false true , 4294967092 0 0 -4294967093 pg_trigger C false true , 4294967093 0 0 -4294967094 pg_transform C false true , 4294967094 0 0 -4294967095 pg_timezone_names C false true , 4294967095 0 0 -4294967096 pg_timezone_abbrevs C false true , 4294967096 0 0 -4294967097 pg_tablespace C false true , 4294967097 0 0 -4294967098 pg_tables C false true , 4294967098 0 0 -4294967099 pg_subscription C false true , 4294967099 0 0 -4294967100 pg_subscription_rel C false true , 4294967100 0 0 -4294967101 pg_statistic_ext C false true , 4294967101 0 0 -4294967102 pg_stat_activity C false true , 4294967102 0 0 -4294967103 pg_shmem_allocations C false true , 4294967103 0 0 -4294967104 pg_shdepend C false true , 4294967104 0 0 -4294967105 pg_shseclabel C false true , 4294967105 0 0 -4294967106 pg_shdescription C false true , 4294967106 0 0 -4294967107 pg_shadow C false true , 4294967107 0 0 -4294967108 pg_settings C false true , 4294967108 0 0 -4294967109 pg_sequences C false true , 4294967109 0 0 -4294967110 pg_sequence C false true , 4294967110 0 0 -4294967111 pg_seclabel C false true , 4294967111 0 0 -4294967112 pg_seclabels C false true , 4294967112 0 0 -4294967113 pg_rules C false true , 4294967113 0 0 -4294967114 pg_roles C false true , 4294967114 0 0 -4294967115 pg_rewrite C false true , 4294967115 0 0 -4294967116 pg_replication_slots C false true , 4294967116 0 0 -4294967117 pg_replication_origin C false true , 4294967117 0 0 -4294967118 pg_replication_origin_status C false true , 4294967118 0 0 -4294967119 pg_range C false true , 4294967119 0 0 -4294967120 pg_publication_tables C false true , 4294967120 0 0 -4294967121 pg_publication C false true , 4294967121 0 0 -4294967122 pg_publication_rel C false true , 4294967122 0 0 -4294967123 pg_proc C false true , 4294967123 0 0 -4294967124 pg_prepared_xacts C false true , 4294967124 0 0 -4294967125 pg_prepared_statements C false true , 4294967125 0 0 -4294967126 pg_policy C false true , 4294967126 0 0 -4294967127 pg_policies C false true , 4294967127 0 0 -4294967128 pg_partitioned_table C false true , 4294967128 0 0 -4294967129 pg_opfamily C false true , 4294967129 0 0 -4294967130 pg_operator C false true , 4294967130 0 0 -4294967131 pg_opclass C false true , 4294967131 0 0 -4294967132 pg_namespace C false true , 4294967132 0 0 -4294967133 pg_matviews C false true , 4294967133 0 0 -4294967134 pg_locks C false true , 4294967134 0 0 -4294967135 pg_largeobject C false true , 4294967135 0 0 -4294967136 pg_largeobject_metadata C false true , 4294967136 0 0 -4294967137 pg_language C false true , 4294967137 0 0 -4294967138 pg_init_privs C false true , 4294967138 0 0 -4294967139 pg_inherits C false true , 4294967139 0 0 -4294967140 pg_indexes C false true , 4294967140 0 0 -4294967141 pg_index C false true , 4294967141 0 0 -4294967142 pg_hba_file_rules C false true , 4294967142 0 0 -4294967143 pg_group C false true , 4294967143 0 0 -4294967144 pg_foreign_table C false true , 4294967144 0 0 -4294967145 pg_foreign_server C false true , 4294967145 0 0 -4294967146 pg_foreign_data_wrapper C false true , 4294967146 0 0 -4294967147 pg_file_settings C false true , 4294967147 0 0 -4294967148 pg_extension C false true , 4294967148 0 0 -4294967149 pg_event_trigger C false true , 4294967149 0 0 -4294967150 pg_enum C false true , 4294967150 0 0 -4294967151 pg_description C false true , 4294967151 0 0 -4294967152 pg_depend C false true , 4294967152 0 0 -4294967153 pg_default_acl C false true , 4294967153 0 0 -4294967154 pg_db_role_setting C false true , 4294967154 0 0 -4294967155 pg_database C false true , 4294967155 0 0 -4294967156 pg_cursors C false true , 4294967156 0 0 -4294967157 pg_conversion C false true , 4294967157 0 0 -4294967158 pg_constraint C false true , 4294967158 0 0 -4294967159 pg_config C false true , 4294967159 0 0 -4294967160 pg_collation C false true , 4294967160 0 0 -4294967161 pg_class C false true , 4294967161 0 0 -4294967162 pg_cast C false true , 4294967162 0 0 -4294967163 pg_available_extensions C false true , 4294967163 0 0 -4294967164 pg_available_extension_versions C false true , 4294967164 0 0 -4294967165 pg_auth_members C false true , 4294967165 0 0 -4294967166 pg_authid C false true , 4294967166 0 0 -4294967167 pg_attribute C false true , 4294967167 0 0 -4294967168 pg_attrdef C false true , 4294967168 0 0 -4294967169 pg_amproc C false true , 4294967169 0 0 -4294967170 pg_amop C false true , 4294967170 0 0 -4294967171 pg_am C false true , 4294967171 0 0 -4294967172 pg_aggregate C false true , 4294967172 0 0 -4294967174 views C false true , 4294967174 0 0 -4294967175 view_table_usage C false true , 4294967175 0 0 -4294967176 view_routine_usage C false true , 4294967176 0 0 -4294967177 view_column_usage C false true , 4294967177 0 0 -4294967178 user_privileges C false true , 4294967178 0 0 -4294967179 user_mappings C false true , 4294967179 0 0 -4294967180 user_mapping_options C false true , 4294967180 0 0 -4294967181 user_defined_types C false true , 4294967181 0 0 -4294967182 usage_privileges C false true , 4294967182 0 0 -4294967183 udt_privileges C false true , 4294967183 0 0 -4294967184 type_privileges C false true , 4294967184 0 0 -4294967185 triggers C false true , 4294967185 0 0 -4294967186 triggered_update_columns C false true , 4294967186 0 0 -4294967187 transforms C false true , 4294967187 0 0 -4294967188 tables C false true , 4294967188 0 0 -4294967189 table_privileges C false true , 4294967189 0 0 -4294967190 table_constraints C false true , 4294967190 0 0 -4294967191 statistics C false true , 4294967191 0 0 -4294967192 sql_sizing C false true , 4294967192 0 0 -4294967193 sql_parts C false true , 4294967193 0 0 -4294967194 sql_implementation_info C false true , 4294967194 0 0 -4294967195 sql_features C false true , 4294967195 0 0 -4294967196 session_variables C false true , 4294967196 0 0 -4294967197 sequences C false true , 4294967197 0 0 -4294967198 schema_privileges C false true , 4294967198 0 0 -4294967199 schemata C false true , 4294967199 0 0 -4294967200 routines C false true , 4294967200 0 0 -4294967201 routine_privileges C false true , 4294967201 0 0 -4294967202 role_usage_grants C false true , 4294967202 0 0 -4294967203 role_udt_grants C false true , 4294967203 0 0 -4294967204 role_table_grants C false true , 4294967204 0 0 -4294967205 role_routine_grants C false true , 4294967205 0 0 -4294967206 role_column_grants C false true , 4294967206 0 0 -4294967207 referential_constraints C false true , 4294967207 0 0 -4294967208 parameters C false true , 4294967208 0 0 -4294967209 key_column_usage C false true , 4294967209 0 0 -4294967210 information_schema_catalog_name C false true , 4294967210 0 0 -4294967211 foreign_tables C false true , 4294967211 0 0 -4294967212 foreign_table_options C false true , 4294967212 0 0 -4294967213 foreign_servers C false true , 4294967213 0 0 -4294967214 foreign_server_options C false true , 4294967214 0 0 -4294967215 foreign_data_wrappers C false true , 4294967215 0 0 -4294967216 foreign_data_wrapper_options C false true , 4294967216 0 0 -4294967217 enabled_roles C false true , 4294967217 0 0 -4294967218 element_types C false true , 4294967218 0 0 -4294967219 domains C false true , 4294967219 0 0 -4294967220 domain_udt_usage C false true , 4294967220 0 0 -4294967221 domain_constraints C false true , 4294967221 0 0 -4294967222 data_type_privileges C false true , 4294967222 0 0 -4294967223 constraint_table_usage C false true , 4294967223 0 0 -4294967224 constraint_column_usage C false true , 4294967224 0 0 -4294967225 columns C false true , 4294967225 0 0 -4294967226 column_udt_usage C false true , 4294967226 0 0 -4294967227 column_privileges C false true , 4294967227 0 0 -4294967228 column_options C false true , 4294967228 0 0 -4294967229 column_domain_usage C false true , 4294967229 0 0 -4294967230 column_column_usage C false true , 4294967230 0 0 -4294967231 collations C false true , 4294967231 0 0 -4294967232 collation_character_set_applicability C false true , 4294967232 0 0 -4294967233 check_constraints C false true , 4294967233 0 0 -4294967234 check_constraint_routine_usage C false true , 4294967234 0 0 -4294967235 character_sets C false true , 4294967235 0 0 -4294967236 attributes C false true , 4294967236 0 0 -4294967237 applicable_roles C false true , 4294967237 0 0 -4294967238 administrable_role_authorizations C false true , 4294967238 0 0 +4294967078 spatial_ref_sys C false true , 4294967078 0 0 +4294967079 geometry_columns C false true , 4294967079 0 0 +4294967080 geography_columns C false true , 4294967080 0 0 +4294967082 pg_views C false true , 4294967082 0 0 +4294967083 pg_user C false true , 4294967083 0 0 +4294967084 pg_user_mappings C false true , 4294967084 0 0 +4294967085 pg_user_mapping C false true , 4294967085 0 0 +4294967086 pg_type C false true , 4294967086 0 0 +4294967087 pg_ts_template C false true , 4294967087 0 0 +4294967088 pg_ts_parser C false true , 4294967088 0 0 +4294967089 pg_ts_dict C false true , 4294967089 0 0 +4294967090 pg_ts_config C false true , 4294967090 0 0 +4294967091 pg_ts_config_map C false true , 4294967091 0 0 +4294967092 pg_trigger C false true , 4294967092 0 0 +4294967093 pg_transform C false true , 4294967093 0 0 +4294967094 pg_timezone_names C false true , 4294967094 0 0 +4294967095 pg_timezone_abbrevs C false true , 4294967095 0 0 +4294967096 pg_tablespace C false true , 4294967096 0 0 +4294967097 pg_tables C false true , 4294967097 0 0 +4294967098 pg_subscription C false true , 4294967098 0 0 +4294967099 pg_subscription_rel C false true , 4294967099 0 0 +4294967100 pg_statistic_ext C false true , 4294967100 0 0 +4294967101 pg_stat_activity C false true , 4294967101 0 0 +4294967102 pg_shmem_allocations C false true , 4294967102 0 0 +4294967103 pg_shdepend C false true , 4294967103 0 0 +4294967104 pg_shseclabel C false true , 4294967104 0 0 +4294967105 pg_shdescription C false true , 4294967105 0 0 +4294967106 pg_shadow C false true , 4294967106 0 0 +4294967107 pg_settings C false true , 4294967107 0 0 +4294967108 pg_sequences C false true , 4294967108 0 0 +4294967109 pg_sequence C false true , 4294967109 0 0 +4294967110 pg_seclabel C false true , 4294967110 0 0 +4294967111 pg_seclabels C false true , 4294967111 0 0 +4294967112 pg_rules C false true , 4294967112 0 0 +4294967113 pg_roles C false true , 4294967113 0 0 +4294967114 pg_rewrite C false true , 4294967114 0 0 +4294967115 pg_replication_slots C false true , 4294967115 0 0 +4294967116 pg_replication_origin C false true , 4294967116 0 0 +4294967117 pg_replication_origin_status C false true , 4294967117 0 0 +4294967118 pg_range C false true , 4294967118 0 0 +4294967119 pg_publication_tables C false true , 4294967119 0 0 +4294967120 pg_publication C false true , 4294967120 0 0 +4294967121 pg_publication_rel C false true , 4294967121 0 0 +4294967122 pg_proc C false true , 4294967122 0 0 +4294967123 pg_prepared_xacts C false true , 4294967123 0 0 +4294967124 pg_prepared_statements C false true , 4294967124 0 0 +4294967125 pg_policy C false true , 4294967125 0 0 +4294967126 pg_policies C false true , 4294967126 0 0 +4294967127 pg_partitioned_table C false true , 4294967127 0 0 +4294967128 pg_opfamily C false true , 4294967128 0 0 +4294967129 pg_operator C false true , 4294967129 0 0 +4294967130 pg_opclass C false true , 4294967130 0 0 +4294967131 pg_namespace C false true , 4294967131 0 0 +4294967132 pg_matviews C false true , 4294967132 0 0 +4294967133 pg_locks C false true , 4294967133 0 0 +4294967134 pg_largeobject C false true , 4294967134 0 0 +4294967135 pg_largeobject_metadata C false true , 4294967135 0 0 +4294967136 pg_language C false true , 4294967136 0 0 +4294967137 pg_init_privs C false true , 4294967137 0 0 +4294967138 pg_inherits C false true , 4294967138 0 0 +4294967139 pg_indexes C false true , 4294967139 0 0 +4294967140 pg_index C false true , 4294967140 0 0 +4294967141 pg_hba_file_rules C false true , 4294967141 0 0 +4294967142 pg_group C false true , 4294967142 0 0 +4294967143 pg_foreign_table C false true , 4294967143 0 0 +4294967144 pg_foreign_server C false true , 4294967144 0 0 +4294967145 pg_foreign_data_wrapper C false true , 4294967145 0 0 +4294967146 pg_file_settings C false true , 4294967146 0 0 +4294967147 pg_extension C false true , 4294967147 0 0 +4294967148 pg_event_trigger C false true , 4294967148 0 0 +4294967149 pg_enum C false true , 4294967149 0 0 +4294967150 pg_description C false true , 4294967150 0 0 +4294967151 pg_depend C false true , 4294967151 0 0 +4294967152 pg_default_acl C false true , 4294967152 0 0 +4294967153 pg_db_role_setting C false true , 4294967153 0 0 +4294967154 pg_database C false true , 4294967154 0 0 +4294967155 pg_cursors C false true , 4294967155 0 0 +4294967156 pg_conversion C false true , 4294967156 0 0 +4294967157 pg_constraint C false true , 4294967157 0 0 +4294967158 pg_config C false true , 4294967158 0 0 +4294967159 pg_collation C false true , 4294967159 0 0 +4294967160 pg_class C false true , 4294967160 0 0 +4294967161 pg_cast C false true , 4294967161 0 0 +4294967162 pg_available_extensions C false true , 4294967162 0 0 +4294967163 pg_available_extension_versions C false true , 4294967163 0 0 +4294967164 pg_auth_members C false true , 4294967164 0 0 +4294967165 pg_authid C false true , 4294967165 0 0 +4294967166 pg_attribute C false true , 4294967166 0 0 +4294967167 pg_attrdef C false true , 4294967167 0 0 +4294967168 pg_amproc C false true , 4294967168 0 0 +4294967169 pg_amop C false true , 4294967169 0 0 +4294967170 pg_am C false true , 4294967170 0 0 +4294967171 pg_aggregate C false true , 4294967171 0 0 +4294967173 views C false true , 4294967173 0 0 +4294967174 view_table_usage C false true , 4294967174 0 0 +4294967175 view_routine_usage C false true , 4294967175 0 0 +4294967176 view_column_usage C false true , 4294967176 0 0 +4294967177 user_privileges C false true , 4294967177 0 0 +4294967178 user_mappings C false true , 4294967178 0 0 +4294967179 user_mapping_options C false true , 4294967179 0 0 +4294967180 user_defined_types C false true , 4294967180 0 0 +4294967181 usage_privileges C false true , 4294967181 0 0 +4294967182 udt_privileges C false true , 4294967182 0 0 +4294967183 type_privileges C false true , 4294967183 0 0 +4294967184 triggers C false true , 4294967184 0 0 +4294967185 triggered_update_columns C false true , 4294967185 0 0 +4294967186 transforms C false true , 4294967186 0 0 +4294967187 tables C false true , 4294967187 0 0 +4294967188 table_privileges C false true , 4294967188 0 0 +4294967189 table_constraints C false true , 4294967189 0 0 +4294967190 statistics C false true , 4294967190 0 0 +4294967191 sql_sizing C false true , 4294967191 0 0 +4294967192 sql_parts C false true , 4294967192 0 0 +4294967193 sql_implementation_info C false true , 4294967193 0 0 +4294967194 sql_features C false true , 4294967194 0 0 +4294967195 session_variables C false true , 4294967195 0 0 +4294967196 sequences C false true , 4294967196 0 0 +4294967197 schema_privileges C false true , 4294967197 0 0 +4294967198 schemata C false true , 4294967198 0 0 +4294967199 routines C false true , 4294967199 0 0 +4294967200 routine_privileges C false true , 4294967200 0 0 +4294967201 role_usage_grants C false true , 4294967201 0 0 +4294967202 role_udt_grants C false true , 4294967202 0 0 +4294967203 role_table_grants C false true , 4294967203 0 0 +4294967204 role_routine_grants C false true , 4294967204 0 0 +4294967205 role_column_grants C false true , 4294967205 0 0 +4294967206 referential_constraints C false true , 4294967206 0 0 +4294967207 parameters C false true , 4294967207 0 0 +4294967208 key_column_usage C false true , 4294967208 0 0 +4294967209 information_schema_catalog_name C false true , 4294967209 0 0 +4294967210 foreign_tables C false true , 4294967210 0 0 +4294967211 foreign_table_options C false true , 4294967211 0 0 +4294967212 foreign_servers C false true , 4294967212 0 0 +4294967213 foreign_server_options C false true , 4294967213 0 0 +4294967214 foreign_data_wrappers C false true , 4294967214 0 0 +4294967215 foreign_data_wrapper_options C false true , 4294967215 0 0 +4294967216 enabled_roles C false true , 4294967216 0 0 +4294967217 element_types C false true , 4294967217 0 0 +4294967218 domains C false true , 4294967218 0 0 +4294967219 domain_udt_usage C false true , 4294967219 0 0 +4294967220 domain_constraints C false true , 4294967220 0 0 +4294967221 data_type_privileges C false true , 4294967221 0 0 +4294967222 constraint_table_usage C false true , 4294967222 0 0 +4294967223 constraint_column_usage C false true , 4294967223 0 0 +4294967224 columns C false true , 4294967224 0 0 +4294967225 column_udt_usage C false true , 4294967225 0 0 +4294967226 column_privileges C false true , 4294967226 0 0 +4294967227 column_options C false true , 4294967227 0 0 +4294967228 column_domain_usage C false true , 4294967228 0 0 +4294967229 column_column_usage C false true , 4294967229 0 0 +4294967230 collations C false true , 4294967230 0 0 +4294967231 collation_character_set_applicability C false true , 4294967231 0 0 +4294967232 check_constraints C false true , 4294967232 0 0 +4294967233 check_constraint_routine_usage C false true , 4294967233 0 0 +4294967234 character_sets C false true , 4294967234 0 0 +4294967235 attributes C false true , 4294967235 0 0 +4294967236 applicable_roles C false true , 4294967236 0 0 +4294967237 administrable_role_authorizations C false true , 4294967237 0 0 +4294967239 cluster_inflight_traces C false true , 4294967239 0 0 4294967240 lost_descriptors_with_data C false true , 4294967240 0 0 4294967241 cross_db_references C false true , 4294967241 0 0 4294967242 interleaved C false true , 4294967242 0 0 @@ -2030,164 +2032,165 @@ oid typname typinput typoutput 100072 _newtype1 array_in array_out array_recv array_send 0 0 0 100073 newtype2 enum_in enum_out enum_recv enum_send 0 0 0 100074 _newtype2 array_in array_out array_recv array_send 0 0 0 -4294967079 spatial_ref_sys record_in record_out record_recv record_send 0 0 0 -4294967080 geometry_columns record_in record_out record_recv record_send 0 0 0 -4294967081 geography_columns record_in record_out record_recv record_send 0 0 0 -4294967083 pg_views record_in record_out record_recv record_send 0 0 0 -4294967084 pg_user record_in record_out record_recv record_send 0 0 0 -4294967085 pg_user_mappings record_in record_out record_recv record_send 0 0 0 -4294967086 pg_user_mapping record_in record_out record_recv record_send 0 0 0 -4294967087 pg_type record_in record_out record_recv record_send 0 0 0 -4294967088 pg_ts_template record_in record_out record_recv record_send 0 0 0 -4294967089 pg_ts_parser record_in record_out record_recv record_send 0 0 0 -4294967090 pg_ts_dict record_in record_out record_recv record_send 0 0 0 -4294967091 pg_ts_config record_in record_out record_recv record_send 0 0 0 -4294967092 pg_ts_config_map record_in record_out record_recv record_send 0 0 0 -4294967093 pg_trigger record_in record_out record_recv record_send 0 0 0 -4294967094 pg_transform record_in record_out record_recv record_send 0 0 0 -4294967095 pg_timezone_names record_in record_out record_recv record_send 0 0 0 -4294967096 pg_timezone_abbrevs record_in record_out record_recv record_send 0 0 0 -4294967097 pg_tablespace record_in record_out record_recv record_send 0 0 0 -4294967098 pg_tables record_in record_out record_recv record_send 0 0 0 -4294967099 pg_subscription record_in record_out record_recv record_send 0 0 0 -4294967100 pg_subscription_rel record_in record_out record_recv record_send 0 0 0 -4294967101 pg_statistic_ext record_in record_out record_recv record_send 0 0 0 -4294967102 pg_stat_activity record_in record_out record_recv record_send 0 0 0 -4294967103 pg_shmem_allocations record_in record_out record_recv record_send 0 0 0 -4294967104 pg_shdepend record_in record_out record_recv record_send 0 0 0 -4294967105 pg_shseclabel record_in record_out record_recv record_send 0 0 0 -4294967106 pg_shdescription record_in record_out record_recv record_send 0 0 0 -4294967107 pg_shadow record_in record_out record_recv record_send 0 0 0 -4294967108 pg_settings record_in record_out record_recv record_send 0 0 0 -4294967109 pg_sequences record_in record_out record_recv record_send 0 0 0 -4294967110 pg_sequence record_in record_out record_recv record_send 0 0 0 -4294967111 pg_seclabel record_in record_out record_recv record_send 0 0 0 -4294967112 pg_seclabels record_in record_out record_recv record_send 0 0 0 -4294967113 pg_rules record_in record_out record_recv record_send 0 0 0 -4294967114 pg_roles record_in record_out record_recv record_send 0 0 0 -4294967115 pg_rewrite record_in record_out record_recv record_send 0 0 0 -4294967116 pg_replication_slots record_in record_out record_recv record_send 0 0 0 -4294967117 pg_replication_origin record_in record_out record_recv record_send 0 0 0 -4294967118 pg_replication_origin_status record_in record_out record_recv record_send 0 0 0 -4294967119 pg_range record_in record_out record_recv record_send 0 0 0 -4294967120 pg_publication_tables record_in record_out record_recv record_send 0 0 0 -4294967121 pg_publication record_in record_out record_recv record_send 0 0 0 -4294967122 pg_publication_rel record_in record_out record_recv record_send 0 0 0 -4294967123 pg_proc record_in record_out record_recv record_send 0 0 0 -4294967124 pg_prepared_xacts record_in record_out record_recv record_send 0 0 0 -4294967125 pg_prepared_statements record_in record_out record_recv record_send 0 0 0 -4294967126 pg_policy record_in record_out record_recv record_send 0 0 0 -4294967127 pg_policies record_in record_out record_recv record_send 0 0 0 -4294967128 pg_partitioned_table record_in record_out record_recv record_send 0 0 0 -4294967129 pg_opfamily record_in record_out record_recv record_send 0 0 0 -4294967130 pg_operator record_in record_out record_recv record_send 0 0 0 -4294967131 pg_opclass record_in record_out record_recv record_send 0 0 0 -4294967132 pg_namespace record_in record_out record_recv record_send 0 0 0 -4294967133 pg_matviews record_in record_out record_recv record_send 0 0 0 -4294967134 pg_locks record_in record_out record_recv record_send 0 0 0 -4294967135 pg_largeobject record_in record_out record_recv record_send 0 0 0 -4294967136 pg_largeobject_metadata record_in record_out record_recv record_send 0 0 0 -4294967137 pg_language record_in record_out record_recv record_send 0 0 0 -4294967138 pg_init_privs record_in record_out record_recv record_send 0 0 0 -4294967139 pg_inherits record_in record_out record_recv record_send 0 0 0 -4294967140 pg_indexes record_in record_out record_recv record_send 0 0 0 -4294967141 pg_index record_in record_out record_recv record_send 0 0 0 -4294967142 pg_hba_file_rules record_in record_out record_recv record_send 0 0 0 -4294967143 pg_group record_in record_out record_recv record_send 0 0 0 -4294967144 pg_foreign_table record_in record_out record_recv record_send 0 0 0 -4294967145 pg_foreign_server record_in record_out record_recv record_send 0 0 0 -4294967146 pg_foreign_data_wrapper record_in record_out record_recv record_send 0 0 0 -4294967147 pg_file_settings record_in record_out record_recv record_send 0 0 0 -4294967148 pg_extension record_in record_out record_recv record_send 0 0 0 -4294967149 pg_event_trigger record_in record_out record_recv record_send 0 0 0 -4294967150 pg_enum record_in record_out record_recv record_send 0 0 0 -4294967151 pg_description record_in record_out record_recv record_send 0 0 0 -4294967152 pg_depend record_in record_out record_recv record_send 0 0 0 -4294967153 pg_default_acl record_in record_out record_recv record_send 0 0 0 -4294967154 pg_db_role_setting record_in record_out record_recv record_send 0 0 0 -4294967155 pg_database record_in record_out record_recv record_send 0 0 0 -4294967156 pg_cursors record_in record_out record_recv record_send 0 0 0 -4294967157 pg_conversion record_in record_out record_recv record_send 0 0 0 -4294967158 pg_constraint record_in record_out record_recv record_send 0 0 0 -4294967159 pg_config record_in record_out record_recv record_send 0 0 0 -4294967160 pg_collation record_in record_out record_recv record_send 0 0 0 -4294967161 pg_class record_in record_out record_recv record_send 0 0 0 -4294967162 pg_cast record_in record_out record_recv record_send 0 0 0 -4294967163 pg_available_extensions record_in record_out record_recv record_send 0 0 0 -4294967164 pg_available_extension_versions record_in record_out record_recv record_send 0 0 0 -4294967165 pg_auth_members record_in record_out record_recv record_send 0 0 0 -4294967166 pg_authid record_in record_out record_recv record_send 0 0 0 -4294967167 pg_attribute record_in record_out record_recv record_send 0 0 0 -4294967168 pg_attrdef record_in record_out record_recv record_send 0 0 0 -4294967169 pg_amproc record_in record_out record_recv record_send 0 0 0 -4294967170 pg_amop record_in record_out record_recv record_send 0 0 0 -4294967171 pg_am record_in record_out record_recv record_send 0 0 0 -4294967172 pg_aggregate record_in record_out record_recv record_send 0 0 0 -4294967174 views record_in record_out record_recv record_send 0 0 0 -4294967175 view_table_usage record_in record_out record_recv record_send 0 0 0 -4294967176 view_routine_usage record_in record_out record_recv record_send 0 0 0 -4294967177 view_column_usage record_in record_out record_recv record_send 0 0 0 -4294967178 user_privileges record_in record_out record_recv record_send 0 0 0 -4294967179 user_mappings record_in record_out record_recv record_send 0 0 0 -4294967180 user_mapping_options record_in record_out record_recv record_send 0 0 0 -4294967181 user_defined_types record_in record_out record_recv record_send 0 0 0 -4294967182 usage_privileges record_in record_out record_recv record_send 0 0 0 -4294967183 udt_privileges record_in record_out record_recv record_send 0 0 0 -4294967184 type_privileges record_in record_out record_recv record_send 0 0 0 -4294967185 triggers record_in record_out record_recv record_send 0 0 0 -4294967186 triggered_update_columns record_in record_out record_recv record_send 0 0 0 -4294967187 transforms record_in record_out record_recv record_send 0 0 0 -4294967188 tables record_in record_out record_recv record_send 0 0 0 -4294967189 table_privileges record_in record_out record_recv record_send 0 0 0 -4294967190 table_constraints record_in record_out record_recv record_send 0 0 0 -4294967191 statistics record_in record_out record_recv record_send 0 0 0 -4294967192 sql_sizing record_in record_out record_recv record_send 0 0 0 -4294967193 sql_parts record_in record_out record_recv record_send 0 0 0 -4294967194 sql_implementation_info record_in record_out record_recv record_send 0 0 0 -4294967195 sql_features record_in record_out record_recv record_send 0 0 0 -4294967196 session_variables record_in record_out record_recv record_send 0 0 0 -4294967197 sequences record_in record_out record_recv record_send 0 0 0 -4294967198 schema_privileges record_in record_out record_recv record_send 0 0 0 -4294967199 schemata record_in record_out record_recv record_send 0 0 0 -4294967200 routines record_in record_out record_recv record_send 0 0 0 -4294967201 routine_privileges record_in record_out record_recv record_send 0 0 0 -4294967202 role_usage_grants record_in record_out record_recv record_send 0 0 0 -4294967203 role_udt_grants record_in record_out record_recv record_send 0 0 0 -4294967204 role_table_grants record_in record_out record_recv record_send 0 0 0 -4294967205 role_routine_grants record_in record_out record_recv record_send 0 0 0 -4294967206 role_column_grants record_in record_out record_recv record_send 0 0 0 -4294967207 referential_constraints record_in record_out record_recv record_send 0 0 0 -4294967208 parameters record_in record_out record_recv record_send 0 0 0 -4294967209 key_column_usage record_in record_out record_recv record_send 0 0 0 -4294967210 information_schema_catalog_name record_in record_out record_recv record_send 0 0 0 -4294967211 foreign_tables record_in record_out record_recv record_send 0 0 0 -4294967212 foreign_table_options record_in record_out record_recv record_send 0 0 0 -4294967213 foreign_servers record_in record_out record_recv record_send 0 0 0 -4294967214 foreign_server_options record_in record_out record_recv record_send 0 0 0 -4294967215 foreign_data_wrappers record_in record_out record_recv record_send 0 0 0 -4294967216 foreign_data_wrapper_options record_in record_out record_recv record_send 0 0 0 -4294967217 enabled_roles record_in record_out record_recv record_send 0 0 0 -4294967218 element_types record_in record_out record_recv record_send 0 0 0 -4294967219 domains record_in record_out record_recv record_send 0 0 0 -4294967220 domain_udt_usage record_in record_out record_recv record_send 0 0 0 -4294967221 domain_constraints record_in record_out record_recv record_send 0 0 0 -4294967222 data_type_privileges record_in record_out record_recv record_send 0 0 0 -4294967223 constraint_table_usage record_in record_out record_recv record_send 0 0 0 -4294967224 constraint_column_usage record_in record_out record_recv record_send 0 0 0 -4294967225 columns record_in record_out record_recv record_send 0 0 0 -4294967226 column_udt_usage record_in record_out record_recv record_send 0 0 0 -4294967227 column_privileges record_in record_out record_recv record_send 0 0 0 -4294967228 column_options record_in record_out record_recv record_send 0 0 0 -4294967229 column_domain_usage record_in record_out record_recv record_send 0 0 0 -4294967230 column_column_usage record_in record_out record_recv record_send 0 0 0 -4294967231 collations record_in record_out record_recv record_send 0 0 0 -4294967232 collation_character_set_applicability record_in record_out record_recv record_send 0 0 0 -4294967233 check_constraints record_in record_out record_recv record_send 0 0 0 -4294967234 check_constraint_routine_usage record_in record_out record_recv record_send 0 0 0 -4294967235 character_sets record_in record_out record_recv record_send 0 0 0 -4294967236 attributes record_in record_out record_recv record_send 0 0 0 -4294967237 applicable_roles record_in record_out record_recv record_send 0 0 0 -4294967238 administrable_role_authorizations record_in record_out record_recv record_send 0 0 0 +4294967078 spatial_ref_sys record_in record_out record_recv record_send 0 0 0 +4294967079 geometry_columns record_in record_out record_recv record_send 0 0 0 +4294967080 geography_columns record_in record_out record_recv record_send 0 0 0 +4294967082 pg_views record_in record_out record_recv record_send 0 0 0 +4294967083 pg_user record_in record_out record_recv record_send 0 0 0 +4294967084 pg_user_mappings record_in record_out record_recv record_send 0 0 0 +4294967085 pg_user_mapping record_in record_out record_recv record_send 0 0 0 +4294967086 pg_type record_in record_out record_recv record_send 0 0 0 +4294967087 pg_ts_template record_in record_out record_recv record_send 0 0 0 +4294967088 pg_ts_parser record_in record_out record_recv record_send 0 0 0 +4294967089 pg_ts_dict record_in record_out record_recv record_send 0 0 0 +4294967090 pg_ts_config record_in record_out record_recv record_send 0 0 0 +4294967091 pg_ts_config_map record_in record_out record_recv record_send 0 0 0 +4294967092 pg_trigger record_in record_out record_recv record_send 0 0 0 +4294967093 pg_transform record_in record_out record_recv record_send 0 0 0 +4294967094 pg_timezone_names record_in record_out record_recv record_send 0 0 0 +4294967095 pg_timezone_abbrevs record_in record_out record_recv record_send 0 0 0 +4294967096 pg_tablespace record_in record_out record_recv record_send 0 0 0 +4294967097 pg_tables record_in record_out record_recv record_send 0 0 0 +4294967098 pg_subscription record_in record_out record_recv record_send 0 0 0 +4294967099 pg_subscription_rel record_in record_out record_recv record_send 0 0 0 +4294967100 pg_statistic_ext record_in record_out record_recv record_send 0 0 0 +4294967101 pg_stat_activity record_in record_out record_recv record_send 0 0 0 +4294967102 pg_shmem_allocations record_in record_out record_recv record_send 0 0 0 +4294967103 pg_shdepend record_in record_out record_recv record_send 0 0 0 +4294967104 pg_shseclabel record_in record_out record_recv record_send 0 0 0 +4294967105 pg_shdescription record_in record_out record_recv record_send 0 0 0 +4294967106 pg_shadow record_in record_out record_recv record_send 0 0 0 +4294967107 pg_settings record_in record_out record_recv record_send 0 0 0 +4294967108 pg_sequences record_in record_out record_recv record_send 0 0 0 +4294967109 pg_sequence record_in record_out record_recv record_send 0 0 0 +4294967110 pg_seclabel record_in record_out record_recv record_send 0 0 0 +4294967111 pg_seclabels record_in record_out record_recv record_send 0 0 0 +4294967112 pg_rules record_in record_out record_recv record_send 0 0 0 +4294967113 pg_roles record_in record_out record_recv record_send 0 0 0 +4294967114 pg_rewrite record_in record_out record_recv record_send 0 0 0 +4294967115 pg_replication_slots record_in record_out record_recv record_send 0 0 0 +4294967116 pg_replication_origin record_in record_out record_recv record_send 0 0 0 +4294967117 pg_replication_origin_status record_in record_out record_recv record_send 0 0 0 +4294967118 pg_range record_in record_out record_recv record_send 0 0 0 +4294967119 pg_publication_tables record_in record_out record_recv record_send 0 0 0 +4294967120 pg_publication record_in record_out record_recv record_send 0 0 0 +4294967121 pg_publication_rel record_in record_out record_recv record_send 0 0 0 +4294967122 pg_proc record_in record_out record_recv record_send 0 0 0 +4294967123 pg_prepared_xacts record_in record_out record_recv record_send 0 0 0 +4294967124 pg_prepared_statements record_in record_out record_recv record_send 0 0 0 +4294967125 pg_policy record_in record_out record_recv record_send 0 0 0 +4294967126 pg_policies record_in record_out record_recv record_send 0 0 0 +4294967127 pg_partitioned_table record_in record_out record_recv record_send 0 0 0 +4294967128 pg_opfamily record_in record_out record_recv record_send 0 0 0 +4294967129 pg_operator record_in record_out record_recv record_send 0 0 0 +4294967130 pg_opclass record_in record_out record_recv record_send 0 0 0 +4294967131 pg_namespace record_in record_out record_recv record_send 0 0 0 +4294967132 pg_matviews record_in record_out record_recv record_send 0 0 0 +4294967133 pg_locks record_in record_out record_recv record_send 0 0 0 +4294967134 pg_largeobject record_in record_out record_recv record_send 0 0 0 +4294967135 pg_largeobject_metadata record_in record_out record_recv record_send 0 0 0 +4294967136 pg_language record_in record_out record_recv record_send 0 0 0 +4294967137 pg_init_privs record_in record_out record_recv record_send 0 0 0 +4294967138 pg_inherits record_in record_out record_recv record_send 0 0 0 +4294967139 pg_indexes record_in record_out record_recv record_send 0 0 0 +4294967140 pg_index record_in record_out record_recv record_send 0 0 0 +4294967141 pg_hba_file_rules record_in record_out record_recv record_send 0 0 0 +4294967142 pg_group record_in record_out record_recv record_send 0 0 0 +4294967143 pg_foreign_table record_in record_out record_recv record_send 0 0 0 +4294967144 pg_foreign_server record_in record_out record_recv record_send 0 0 0 +4294967145 pg_foreign_data_wrapper record_in record_out record_recv record_send 0 0 0 +4294967146 pg_file_settings record_in record_out record_recv record_send 0 0 0 +4294967147 pg_extension record_in record_out record_recv record_send 0 0 0 +4294967148 pg_event_trigger record_in record_out record_recv record_send 0 0 0 +4294967149 pg_enum record_in record_out record_recv record_send 0 0 0 +4294967150 pg_description record_in record_out record_recv record_send 0 0 0 +4294967151 pg_depend record_in record_out record_recv record_send 0 0 0 +4294967152 pg_default_acl record_in record_out record_recv record_send 0 0 0 +4294967153 pg_db_role_setting record_in record_out record_recv record_send 0 0 0 +4294967154 pg_database record_in record_out record_recv record_send 0 0 0 +4294967155 pg_cursors record_in record_out record_recv record_send 0 0 0 +4294967156 pg_conversion record_in record_out record_recv record_send 0 0 0 +4294967157 pg_constraint record_in record_out record_recv record_send 0 0 0 +4294967158 pg_config record_in record_out record_recv record_send 0 0 0 +4294967159 pg_collation record_in record_out record_recv record_send 0 0 0 +4294967160 pg_class record_in record_out record_recv record_send 0 0 0 +4294967161 pg_cast record_in record_out record_recv record_send 0 0 0 +4294967162 pg_available_extensions record_in record_out record_recv record_send 0 0 0 +4294967163 pg_available_extension_versions record_in record_out record_recv record_send 0 0 0 +4294967164 pg_auth_members record_in record_out record_recv record_send 0 0 0 +4294967165 pg_authid record_in record_out record_recv record_send 0 0 0 +4294967166 pg_attribute record_in record_out record_recv record_send 0 0 0 +4294967167 pg_attrdef record_in record_out record_recv record_send 0 0 0 +4294967168 pg_amproc record_in record_out record_recv record_send 0 0 0 +4294967169 pg_amop record_in record_out record_recv record_send 0 0 0 +4294967170 pg_am record_in record_out record_recv record_send 0 0 0 +4294967171 pg_aggregate record_in record_out record_recv record_send 0 0 0 +4294967173 views record_in record_out record_recv record_send 0 0 0 +4294967174 view_table_usage record_in record_out record_recv record_send 0 0 0 +4294967175 view_routine_usage record_in record_out record_recv record_send 0 0 0 +4294967176 view_column_usage record_in record_out record_recv record_send 0 0 0 +4294967177 user_privileges record_in record_out record_recv record_send 0 0 0 +4294967178 user_mappings record_in record_out record_recv record_send 0 0 0 +4294967179 user_mapping_options record_in record_out record_recv record_send 0 0 0 +4294967180 user_defined_types record_in record_out record_recv record_send 0 0 0 +4294967181 usage_privileges record_in record_out record_recv record_send 0 0 0 +4294967182 udt_privileges record_in record_out record_recv record_send 0 0 0 +4294967183 type_privileges record_in record_out record_recv record_send 0 0 0 +4294967184 triggers record_in record_out record_recv record_send 0 0 0 +4294967185 triggered_update_columns record_in record_out record_recv record_send 0 0 0 +4294967186 transforms record_in record_out record_recv record_send 0 0 0 +4294967187 tables record_in record_out record_recv record_send 0 0 0 +4294967188 table_privileges record_in record_out record_recv record_send 0 0 0 +4294967189 table_constraints record_in record_out record_recv record_send 0 0 0 +4294967190 statistics record_in record_out record_recv record_send 0 0 0 +4294967191 sql_sizing record_in record_out record_recv record_send 0 0 0 +4294967192 sql_parts record_in record_out record_recv record_send 0 0 0 +4294967193 sql_implementation_info record_in record_out record_recv record_send 0 0 0 +4294967194 sql_features record_in record_out record_recv record_send 0 0 0 +4294967195 session_variables record_in record_out record_recv record_send 0 0 0 +4294967196 sequences record_in record_out record_recv record_send 0 0 0 +4294967197 schema_privileges record_in record_out record_recv record_send 0 0 0 +4294967198 schemata record_in record_out record_recv record_send 0 0 0 +4294967199 routines record_in record_out record_recv record_send 0 0 0 +4294967200 routine_privileges record_in record_out record_recv record_send 0 0 0 +4294967201 role_usage_grants record_in record_out record_recv record_send 0 0 0 +4294967202 role_udt_grants record_in record_out record_recv record_send 0 0 0 +4294967203 role_table_grants record_in record_out record_recv record_send 0 0 0 +4294967204 role_routine_grants record_in record_out record_recv record_send 0 0 0 +4294967205 role_column_grants record_in record_out record_recv record_send 0 0 0 +4294967206 referential_constraints record_in record_out record_recv record_send 0 0 0 +4294967207 parameters record_in record_out record_recv record_send 0 0 0 +4294967208 key_column_usage record_in record_out record_recv record_send 0 0 0 +4294967209 information_schema_catalog_name record_in record_out record_recv record_send 0 0 0 +4294967210 foreign_tables record_in record_out record_recv record_send 0 0 0 +4294967211 foreign_table_options record_in record_out record_recv record_send 0 0 0 +4294967212 foreign_servers record_in record_out record_recv record_send 0 0 0 +4294967213 foreign_server_options record_in record_out record_recv record_send 0 0 0 +4294967214 foreign_data_wrappers record_in record_out record_recv record_send 0 0 0 +4294967215 foreign_data_wrapper_options record_in record_out record_recv record_send 0 0 0 +4294967216 enabled_roles record_in record_out record_recv record_send 0 0 0 +4294967217 element_types record_in record_out record_recv record_send 0 0 0 +4294967218 domains record_in record_out record_recv record_send 0 0 0 +4294967219 domain_udt_usage record_in record_out record_recv record_send 0 0 0 +4294967220 domain_constraints record_in record_out record_recv record_send 0 0 0 +4294967221 data_type_privileges record_in record_out record_recv record_send 0 0 0 +4294967222 constraint_table_usage record_in record_out record_recv record_send 0 0 0 +4294967223 constraint_column_usage record_in record_out record_recv record_send 0 0 0 +4294967224 columns record_in record_out record_recv record_send 0 0 0 +4294967225 column_udt_usage record_in record_out record_recv record_send 0 0 0 +4294967226 column_privileges record_in record_out record_recv record_send 0 0 0 +4294967227 column_options record_in record_out record_recv record_send 0 0 0 +4294967228 column_domain_usage record_in record_out record_recv record_send 0 0 0 +4294967229 column_column_usage record_in record_out record_recv record_send 0 0 0 +4294967230 collations record_in record_out record_recv record_send 0 0 0 +4294967231 collation_character_set_applicability record_in record_out record_recv record_send 0 0 0 +4294967232 check_constraints record_in record_out record_recv record_send 0 0 0 +4294967233 check_constraint_routine_usage record_in record_out record_recv record_send 0 0 0 +4294967234 character_sets record_in record_out record_recv record_send 0 0 0 +4294967235 attributes record_in record_out record_recv record_send 0 0 0 +4294967236 applicable_roles record_in record_out record_recv record_send 0 0 0 +4294967237 administrable_role_authorizations record_in record_out record_recv record_send 0 0 0 +4294967239 cluster_inflight_traces record_in record_out record_recv record_send 0 0 0 4294967240 lost_descriptors_with_data record_in record_out record_recv record_send 0 0 0 4294967241 cross_db_references record_in record_out record_recv record_send 0 0 0 4294967242 interleaved record_in record_out record_recv record_send 0 0 0 @@ -2340,164 +2343,165 @@ oid typname typalign typstorage typnotn 100072 _newtype1 NULL NULL false 0 -1 100073 newtype2 NULL NULL false 0 -1 100074 _newtype2 NULL NULL false 0 -1 -4294967079 spatial_ref_sys NULL NULL false 0 -1 -4294967080 geometry_columns NULL NULL false 0 -1 -4294967081 geography_columns NULL NULL false 0 -1 -4294967083 pg_views NULL NULL false 0 -1 -4294967084 pg_user NULL NULL false 0 -1 -4294967085 pg_user_mappings NULL NULL false 0 -1 -4294967086 pg_user_mapping NULL NULL false 0 -1 -4294967087 pg_type NULL NULL false 0 -1 -4294967088 pg_ts_template NULL NULL false 0 -1 -4294967089 pg_ts_parser NULL NULL false 0 -1 -4294967090 pg_ts_dict NULL NULL false 0 -1 -4294967091 pg_ts_config NULL NULL false 0 -1 -4294967092 pg_ts_config_map NULL NULL false 0 -1 -4294967093 pg_trigger NULL NULL false 0 -1 -4294967094 pg_transform NULL NULL false 0 -1 -4294967095 pg_timezone_names NULL NULL false 0 -1 -4294967096 pg_timezone_abbrevs NULL NULL false 0 -1 -4294967097 pg_tablespace NULL NULL false 0 -1 -4294967098 pg_tables NULL NULL false 0 -1 -4294967099 pg_subscription NULL NULL false 0 -1 -4294967100 pg_subscription_rel NULL NULL false 0 -1 -4294967101 pg_statistic_ext NULL NULL false 0 -1 -4294967102 pg_stat_activity NULL NULL false 0 -1 -4294967103 pg_shmem_allocations NULL NULL false 0 -1 -4294967104 pg_shdepend NULL NULL false 0 -1 -4294967105 pg_shseclabel NULL NULL false 0 -1 -4294967106 pg_shdescription NULL NULL false 0 -1 -4294967107 pg_shadow NULL NULL false 0 -1 -4294967108 pg_settings NULL NULL false 0 -1 -4294967109 pg_sequences NULL NULL false 0 -1 -4294967110 pg_sequence NULL NULL false 0 -1 -4294967111 pg_seclabel NULL NULL false 0 -1 -4294967112 pg_seclabels NULL NULL false 0 -1 -4294967113 pg_rules NULL NULL false 0 -1 -4294967114 pg_roles NULL NULL false 0 -1 -4294967115 pg_rewrite NULL NULL false 0 -1 -4294967116 pg_replication_slots NULL NULL false 0 -1 -4294967117 pg_replication_origin NULL NULL false 0 -1 -4294967118 pg_replication_origin_status NULL NULL false 0 -1 -4294967119 pg_range NULL NULL false 0 -1 -4294967120 pg_publication_tables NULL NULL false 0 -1 -4294967121 pg_publication NULL NULL false 0 -1 -4294967122 pg_publication_rel NULL NULL false 0 -1 -4294967123 pg_proc NULL NULL false 0 -1 -4294967124 pg_prepared_xacts NULL NULL false 0 -1 -4294967125 pg_prepared_statements NULL NULL false 0 -1 -4294967126 pg_policy NULL NULL false 0 -1 -4294967127 pg_policies NULL NULL false 0 -1 -4294967128 pg_partitioned_table NULL NULL false 0 -1 -4294967129 pg_opfamily NULL NULL false 0 -1 -4294967130 pg_operator NULL NULL false 0 -1 -4294967131 pg_opclass NULL NULL false 0 -1 -4294967132 pg_namespace NULL NULL false 0 -1 -4294967133 pg_matviews NULL NULL false 0 -1 -4294967134 pg_locks NULL NULL false 0 -1 -4294967135 pg_largeobject NULL NULL false 0 -1 -4294967136 pg_largeobject_metadata NULL NULL false 0 -1 -4294967137 pg_language NULL NULL false 0 -1 -4294967138 pg_init_privs NULL NULL false 0 -1 -4294967139 pg_inherits NULL NULL false 0 -1 -4294967140 pg_indexes NULL NULL false 0 -1 -4294967141 pg_index NULL NULL false 0 -1 -4294967142 pg_hba_file_rules NULL NULL false 0 -1 -4294967143 pg_group NULL NULL false 0 -1 -4294967144 pg_foreign_table NULL NULL false 0 -1 -4294967145 pg_foreign_server NULL NULL false 0 -1 -4294967146 pg_foreign_data_wrapper NULL NULL false 0 -1 -4294967147 pg_file_settings NULL NULL false 0 -1 -4294967148 pg_extension NULL NULL false 0 -1 -4294967149 pg_event_trigger NULL NULL false 0 -1 -4294967150 pg_enum NULL NULL false 0 -1 -4294967151 pg_description NULL NULL false 0 -1 -4294967152 pg_depend NULL NULL false 0 -1 -4294967153 pg_default_acl NULL NULL false 0 -1 -4294967154 pg_db_role_setting NULL NULL false 0 -1 -4294967155 pg_database NULL NULL false 0 -1 -4294967156 pg_cursors NULL NULL false 0 -1 -4294967157 pg_conversion NULL NULL false 0 -1 -4294967158 pg_constraint NULL NULL false 0 -1 -4294967159 pg_config NULL NULL false 0 -1 -4294967160 pg_collation NULL NULL false 0 -1 -4294967161 pg_class NULL NULL false 0 -1 -4294967162 pg_cast NULL NULL false 0 -1 -4294967163 pg_available_extensions NULL NULL false 0 -1 -4294967164 pg_available_extension_versions NULL NULL false 0 -1 -4294967165 pg_auth_members NULL NULL false 0 -1 -4294967166 pg_authid NULL NULL false 0 -1 -4294967167 pg_attribute NULL NULL false 0 -1 -4294967168 pg_attrdef NULL NULL false 0 -1 -4294967169 pg_amproc NULL NULL false 0 -1 -4294967170 pg_amop NULL NULL false 0 -1 -4294967171 pg_am NULL NULL false 0 -1 -4294967172 pg_aggregate NULL NULL false 0 -1 -4294967174 views NULL NULL false 0 -1 -4294967175 view_table_usage NULL NULL false 0 -1 -4294967176 view_routine_usage NULL NULL false 0 -1 -4294967177 view_column_usage NULL NULL false 0 -1 -4294967178 user_privileges NULL NULL false 0 -1 -4294967179 user_mappings NULL NULL false 0 -1 -4294967180 user_mapping_options NULL NULL false 0 -1 -4294967181 user_defined_types NULL NULL false 0 -1 -4294967182 usage_privileges NULL NULL false 0 -1 -4294967183 udt_privileges NULL NULL false 0 -1 -4294967184 type_privileges NULL NULL false 0 -1 -4294967185 triggers NULL NULL false 0 -1 -4294967186 triggered_update_columns NULL NULL false 0 -1 -4294967187 transforms NULL NULL false 0 -1 -4294967188 tables NULL NULL false 0 -1 -4294967189 table_privileges NULL NULL false 0 -1 -4294967190 table_constraints NULL NULL false 0 -1 -4294967191 statistics NULL NULL false 0 -1 -4294967192 sql_sizing NULL NULL false 0 -1 -4294967193 sql_parts NULL NULL false 0 -1 -4294967194 sql_implementation_info NULL NULL false 0 -1 -4294967195 sql_features NULL NULL false 0 -1 -4294967196 session_variables NULL NULL false 0 -1 -4294967197 sequences NULL NULL false 0 -1 -4294967198 schema_privileges NULL NULL false 0 -1 -4294967199 schemata NULL NULL false 0 -1 -4294967200 routines NULL NULL false 0 -1 -4294967201 routine_privileges NULL NULL false 0 -1 -4294967202 role_usage_grants NULL NULL false 0 -1 -4294967203 role_udt_grants NULL NULL false 0 -1 -4294967204 role_table_grants NULL NULL false 0 -1 -4294967205 role_routine_grants NULL NULL false 0 -1 -4294967206 role_column_grants NULL NULL false 0 -1 -4294967207 referential_constraints NULL NULL false 0 -1 -4294967208 parameters NULL NULL false 0 -1 -4294967209 key_column_usage NULL NULL false 0 -1 -4294967210 information_schema_catalog_name NULL NULL false 0 -1 -4294967211 foreign_tables NULL NULL false 0 -1 -4294967212 foreign_table_options NULL NULL false 0 -1 -4294967213 foreign_servers NULL NULL false 0 -1 -4294967214 foreign_server_options NULL NULL false 0 -1 -4294967215 foreign_data_wrappers NULL NULL false 0 -1 -4294967216 foreign_data_wrapper_options NULL NULL false 0 -1 -4294967217 enabled_roles NULL NULL false 0 -1 -4294967218 element_types NULL NULL false 0 -1 -4294967219 domains NULL NULL false 0 -1 -4294967220 domain_udt_usage NULL NULL false 0 -1 -4294967221 domain_constraints NULL NULL false 0 -1 -4294967222 data_type_privileges NULL NULL false 0 -1 -4294967223 constraint_table_usage NULL NULL false 0 -1 -4294967224 constraint_column_usage NULL NULL false 0 -1 -4294967225 columns NULL NULL false 0 -1 -4294967226 column_udt_usage NULL NULL false 0 -1 -4294967227 column_privileges NULL NULL false 0 -1 -4294967228 column_options NULL NULL false 0 -1 -4294967229 column_domain_usage NULL NULL false 0 -1 -4294967230 column_column_usage NULL NULL false 0 -1 -4294967231 collations NULL NULL false 0 -1 -4294967232 collation_character_set_applicability NULL NULL false 0 -1 -4294967233 check_constraints NULL NULL false 0 -1 -4294967234 check_constraint_routine_usage NULL NULL false 0 -1 -4294967235 character_sets NULL NULL false 0 -1 -4294967236 attributes NULL NULL false 0 -1 -4294967237 applicable_roles NULL NULL false 0 -1 -4294967238 administrable_role_authorizations NULL NULL false 0 -1 +4294967078 spatial_ref_sys NULL NULL false 0 -1 +4294967079 geometry_columns NULL NULL false 0 -1 +4294967080 geography_columns NULL NULL false 0 -1 +4294967082 pg_views NULL NULL false 0 -1 +4294967083 pg_user NULL NULL false 0 -1 +4294967084 pg_user_mappings NULL NULL false 0 -1 +4294967085 pg_user_mapping NULL NULL false 0 -1 +4294967086 pg_type NULL NULL false 0 -1 +4294967087 pg_ts_template NULL NULL false 0 -1 +4294967088 pg_ts_parser NULL NULL false 0 -1 +4294967089 pg_ts_dict NULL NULL false 0 -1 +4294967090 pg_ts_config NULL NULL false 0 -1 +4294967091 pg_ts_config_map NULL NULL false 0 -1 +4294967092 pg_trigger NULL NULL false 0 -1 +4294967093 pg_transform NULL NULL false 0 -1 +4294967094 pg_timezone_names NULL NULL false 0 -1 +4294967095 pg_timezone_abbrevs NULL NULL false 0 -1 +4294967096 pg_tablespace NULL NULL false 0 -1 +4294967097 pg_tables NULL NULL false 0 -1 +4294967098 pg_subscription NULL NULL false 0 -1 +4294967099 pg_subscription_rel NULL NULL false 0 -1 +4294967100 pg_statistic_ext NULL NULL false 0 -1 +4294967101 pg_stat_activity NULL NULL false 0 -1 +4294967102 pg_shmem_allocations NULL NULL false 0 -1 +4294967103 pg_shdepend NULL NULL false 0 -1 +4294967104 pg_shseclabel NULL NULL false 0 -1 +4294967105 pg_shdescription NULL NULL false 0 -1 +4294967106 pg_shadow NULL NULL false 0 -1 +4294967107 pg_settings NULL NULL false 0 -1 +4294967108 pg_sequences NULL NULL false 0 -1 +4294967109 pg_sequence NULL NULL false 0 -1 +4294967110 pg_seclabel NULL NULL false 0 -1 +4294967111 pg_seclabels NULL NULL false 0 -1 +4294967112 pg_rules NULL NULL false 0 -1 +4294967113 pg_roles NULL NULL false 0 -1 +4294967114 pg_rewrite NULL NULL false 0 -1 +4294967115 pg_replication_slots NULL NULL false 0 -1 +4294967116 pg_replication_origin NULL NULL false 0 -1 +4294967117 pg_replication_origin_status NULL NULL false 0 -1 +4294967118 pg_range NULL NULL false 0 -1 +4294967119 pg_publication_tables NULL NULL false 0 -1 +4294967120 pg_publication NULL NULL false 0 -1 +4294967121 pg_publication_rel NULL NULL false 0 -1 +4294967122 pg_proc NULL NULL false 0 -1 +4294967123 pg_prepared_xacts NULL NULL false 0 -1 +4294967124 pg_prepared_statements NULL NULL false 0 -1 +4294967125 pg_policy NULL NULL false 0 -1 +4294967126 pg_policies NULL NULL false 0 -1 +4294967127 pg_partitioned_table NULL NULL false 0 -1 +4294967128 pg_opfamily NULL NULL false 0 -1 +4294967129 pg_operator NULL NULL false 0 -1 +4294967130 pg_opclass NULL NULL false 0 -1 +4294967131 pg_namespace NULL NULL false 0 -1 +4294967132 pg_matviews NULL NULL false 0 -1 +4294967133 pg_locks NULL NULL false 0 -1 +4294967134 pg_largeobject NULL NULL false 0 -1 +4294967135 pg_largeobject_metadata NULL NULL false 0 -1 +4294967136 pg_language NULL NULL false 0 -1 +4294967137 pg_init_privs NULL NULL false 0 -1 +4294967138 pg_inherits NULL NULL false 0 -1 +4294967139 pg_indexes NULL NULL false 0 -1 +4294967140 pg_index NULL NULL false 0 -1 +4294967141 pg_hba_file_rules NULL NULL false 0 -1 +4294967142 pg_group NULL NULL false 0 -1 +4294967143 pg_foreign_table NULL NULL false 0 -1 +4294967144 pg_foreign_server NULL NULL false 0 -1 +4294967145 pg_foreign_data_wrapper NULL NULL false 0 -1 +4294967146 pg_file_settings NULL NULL false 0 -1 +4294967147 pg_extension NULL NULL false 0 -1 +4294967148 pg_event_trigger NULL NULL false 0 -1 +4294967149 pg_enum NULL NULL false 0 -1 +4294967150 pg_description NULL NULL false 0 -1 +4294967151 pg_depend NULL NULL false 0 -1 +4294967152 pg_default_acl NULL NULL false 0 -1 +4294967153 pg_db_role_setting NULL NULL false 0 -1 +4294967154 pg_database NULL NULL false 0 -1 +4294967155 pg_cursors NULL NULL false 0 -1 +4294967156 pg_conversion NULL NULL false 0 -1 +4294967157 pg_constraint NULL NULL false 0 -1 +4294967158 pg_config NULL NULL false 0 -1 +4294967159 pg_collation NULL NULL false 0 -1 +4294967160 pg_class NULL NULL false 0 -1 +4294967161 pg_cast NULL NULL false 0 -1 +4294967162 pg_available_extensions NULL NULL false 0 -1 +4294967163 pg_available_extension_versions NULL NULL false 0 -1 +4294967164 pg_auth_members NULL NULL false 0 -1 +4294967165 pg_authid NULL NULL false 0 -1 +4294967166 pg_attribute NULL NULL false 0 -1 +4294967167 pg_attrdef NULL NULL false 0 -1 +4294967168 pg_amproc NULL NULL false 0 -1 +4294967169 pg_amop NULL NULL false 0 -1 +4294967170 pg_am NULL NULL false 0 -1 +4294967171 pg_aggregate NULL NULL false 0 -1 +4294967173 views NULL NULL false 0 -1 +4294967174 view_table_usage NULL NULL false 0 -1 +4294967175 view_routine_usage NULL NULL false 0 -1 +4294967176 view_column_usage NULL NULL false 0 -1 +4294967177 user_privileges NULL NULL false 0 -1 +4294967178 user_mappings NULL NULL false 0 -1 +4294967179 user_mapping_options NULL NULL false 0 -1 +4294967180 user_defined_types NULL NULL false 0 -1 +4294967181 usage_privileges NULL NULL false 0 -1 +4294967182 udt_privileges NULL NULL false 0 -1 +4294967183 type_privileges NULL NULL false 0 -1 +4294967184 triggers NULL NULL false 0 -1 +4294967185 triggered_update_columns NULL NULL false 0 -1 +4294967186 transforms NULL NULL false 0 -1 +4294967187 tables NULL NULL false 0 -1 +4294967188 table_privileges NULL NULL false 0 -1 +4294967189 table_constraints NULL NULL false 0 -1 +4294967190 statistics NULL NULL false 0 -1 +4294967191 sql_sizing NULL NULL false 0 -1 +4294967192 sql_parts NULL NULL false 0 -1 +4294967193 sql_implementation_info NULL NULL false 0 -1 +4294967194 sql_features NULL NULL false 0 -1 +4294967195 session_variables NULL NULL false 0 -1 +4294967196 sequences NULL NULL false 0 -1 +4294967197 schema_privileges NULL NULL false 0 -1 +4294967198 schemata NULL NULL false 0 -1 +4294967199 routines NULL NULL false 0 -1 +4294967200 routine_privileges NULL NULL false 0 -1 +4294967201 role_usage_grants NULL NULL false 0 -1 +4294967202 role_udt_grants NULL NULL false 0 -1 +4294967203 role_table_grants NULL NULL false 0 -1 +4294967204 role_routine_grants NULL NULL false 0 -1 +4294967205 role_column_grants NULL NULL false 0 -1 +4294967206 referential_constraints NULL NULL false 0 -1 +4294967207 parameters NULL NULL false 0 -1 +4294967208 key_column_usage NULL NULL false 0 -1 +4294967209 information_schema_catalog_name NULL NULL false 0 -1 +4294967210 foreign_tables NULL NULL false 0 -1 +4294967211 foreign_table_options NULL NULL false 0 -1 +4294967212 foreign_servers NULL NULL false 0 -1 +4294967213 foreign_server_options NULL NULL false 0 -1 +4294967214 foreign_data_wrappers NULL NULL false 0 -1 +4294967215 foreign_data_wrapper_options NULL NULL false 0 -1 +4294967216 enabled_roles NULL NULL false 0 -1 +4294967217 element_types NULL NULL false 0 -1 +4294967218 domains NULL NULL false 0 -1 +4294967219 domain_udt_usage NULL NULL false 0 -1 +4294967220 domain_constraints NULL NULL false 0 -1 +4294967221 data_type_privileges NULL NULL false 0 -1 +4294967222 constraint_table_usage NULL NULL false 0 -1 +4294967223 constraint_column_usage NULL NULL false 0 -1 +4294967224 columns NULL NULL false 0 -1 +4294967225 column_udt_usage NULL NULL false 0 -1 +4294967226 column_privileges NULL NULL false 0 -1 +4294967227 column_options NULL NULL false 0 -1 +4294967228 column_domain_usage NULL NULL false 0 -1 +4294967229 column_column_usage NULL NULL false 0 -1 +4294967230 collations NULL NULL false 0 -1 +4294967231 collation_character_set_applicability NULL NULL false 0 -1 +4294967232 check_constraints NULL NULL false 0 -1 +4294967233 check_constraint_routine_usage NULL NULL false 0 -1 +4294967234 character_sets NULL NULL false 0 -1 +4294967235 attributes NULL NULL false 0 -1 +4294967236 applicable_roles NULL NULL false 0 -1 +4294967237 administrable_role_authorizations NULL NULL false 0 -1 +4294967239 cluster_inflight_traces NULL NULL false 0 -1 4294967240 lost_descriptors_with_data NULL NULL false 0 -1 4294967241 cross_db_references NULL NULL false 0 -1 4294967242 interleaved NULL NULL false 0 -1 @@ -2650,164 +2654,165 @@ oid typname typndims typcollation typde 100072 _newtype1 0 0 NULL NULL NULL 100073 newtype2 0 0 NULL NULL NULL 100074 _newtype2 0 0 NULL NULL NULL -4294967079 spatial_ref_sys 0 0 NULL NULL NULL -4294967080 geometry_columns 0 0 NULL NULL NULL -4294967081 geography_columns 0 0 NULL NULL NULL -4294967083 pg_views 0 0 NULL NULL NULL -4294967084 pg_user 0 0 NULL NULL NULL -4294967085 pg_user_mappings 0 0 NULL NULL NULL -4294967086 pg_user_mapping 0 0 NULL NULL NULL -4294967087 pg_type 0 0 NULL NULL NULL -4294967088 pg_ts_template 0 0 NULL NULL NULL -4294967089 pg_ts_parser 0 0 NULL NULL NULL -4294967090 pg_ts_dict 0 0 NULL NULL NULL -4294967091 pg_ts_config 0 0 NULL NULL NULL -4294967092 pg_ts_config_map 0 0 NULL NULL NULL -4294967093 pg_trigger 0 0 NULL NULL NULL -4294967094 pg_transform 0 0 NULL NULL NULL -4294967095 pg_timezone_names 0 0 NULL NULL NULL -4294967096 pg_timezone_abbrevs 0 0 NULL NULL NULL -4294967097 pg_tablespace 0 0 NULL NULL NULL -4294967098 pg_tables 0 0 NULL NULL NULL -4294967099 pg_subscription 0 0 NULL NULL NULL -4294967100 pg_subscription_rel 0 0 NULL NULL NULL -4294967101 pg_statistic_ext 0 0 NULL NULL NULL -4294967102 pg_stat_activity 0 0 NULL NULL NULL -4294967103 pg_shmem_allocations 0 0 NULL NULL NULL -4294967104 pg_shdepend 0 0 NULL NULL NULL -4294967105 pg_shseclabel 0 0 NULL NULL NULL -4294967106 pg_shdescription 0 0 NULL NULL NULL -4294967107 pg_shadow 0 0 NULL NULL NULL -4294967108 pg_settings 0 0 NULL NULL NULL -4294967109 pg_sequences 0 0 NULL NULL NULL -4294967110 pg_sequence 0 0 NULL NULL NULL -4294967111 pg_seclabel 0 0 NULL NULL NULL -4294967112 pg_seclabels 0 0 NULL NULL NULL -4294967113 pg_rules 0 0 NULL NULL NULL -4294967114 pg_roles 0 0 NULL NULL NULL -4294967115 pg_rewrite 0 0 NULL NULL NULL -4294967116 pg_replication_slots 0 0 NULL NULL NULL -4294967117 pg_replication_origin 0 0 NULL NULL NULL -4294967118 pg_replication_origin_status 0 0 NULL NULL NULL -4294967119 pg_range 0 0 NULL NULL NULL -4294967120 pg_publication_tables 0 0 NULL NULL NULL -4294967121 pg_publication 0 0 NULL NULL NULL -4294967122 pg_publication_rel 0 0 NULL NULL NULL -4294967123 pg_proc 0 0 NULL NULL NULL -4294967124 pg_prepared_xacts 0 0 NULL NULL NULL -4294967125 pg_prepared_statements 0 0 NULL NULL NULL -4294967126 pg_policy 0 0 NULL NULL NULL -4294967127 pg_policies 0 0 NULL NULL NULL -4294967128 pg_partitioned_table 0 0 NULL NULL NULL -4294967129 pg_opfamily 0 0 NULL NULL NULL -4294967130 pg_operator 0 0 NULL NULL NULL -4294967131 pg_opclass 0 0 NULL NULL NULL -4294967132 pg_namespace 0 0 NULL NULL NULL -4294967133 pg_matviews 0 0 NULL NULL NULL -4294967134 pg_locks 0 0 NULL NULL NULL -4294967135 pg_largeobject 0 0 NULL NULL NULL -4294967136 pg_largeobject_metadata 0 0 NULL NULL NULL -4294967137 pg_language 0 0 NULL NULL NULL -4294967138 pg_init_privs 0 0 NULL NULL NULL -4294967139 pg_inherits 0 0 NULL NULL NULL -4294967140 pg_indexes 0 0 NULL NULL NULL -4294967141 pg_index 0 0 NULL NULL NULL -4294967142 pg_hba_file_rules 0 0 NULL NULL NULL -4294967143 pg_group 0 0 NULL NULL NULL -4294967144 pg_foreign_table 0 0 NULL NULL NULL -4294967145 pg_foreign_server 0 0 NULL NULL NULL -4294967146 pg_foreign_data_wrapper 0 0 NULL NULL NULL -4294967147 pg_file_settings 0 0 NULL NULL NULL -4294967148 pg_extension 0 0 NULL NULL NULL -4294967149 pg_event_trigger 0 0 NULL NULL NULL -4294967150 pg_enum 0 0 NULL NULL NULL -4294967151 pg_description 0 0 NULL NULL NULL -4294967152 pg_depend 0 0 NULL NULL NULL -4294967153 pg_default_acl 0 0 NULL NULL NULL -4294967154 pg_db_role_setting 0 0 NULL NULL NULL -4294967155 pg_database 0 0 NULL NULL NULL -4294967156 pg_cursors 0 0 NULL NULL NULL -4294967157 pg_conversion 0 0 NULL NULL NULL -4294967158 pg_constraint 0 0 NULL NULL NULL -4294967159 pg_config 0 0 NULL NULL NULL -4294967160 pg_collation 0 0 NULL NULL NULL -4294967161 pg_class 0 0 NULL NULL NULL -4294967162 pg_cast 0 0 NULL NULL NULL -4294967163 pg_available_extensions 0 0 NULL NULL NULL -4294967164 pg_available_extension_versions 0 0 NULL NULL NULL -4294967165 pg_auth_members 0 0 NULL NULL NULL -4294967166 pg_authid 0 0 NULL NULL NULL -4294967167 pg_attribute 0 0 NULL NULL NULL -4294967168 pg_attrdef 0 0 NULL NULL NULL -4294967169 pg_amproc 0 0 NULL NULL NULL -4294967170 pg_amop 0 0 NULL NULL NULL -4294967171 pg_am 0 0 NULL NULL NULL -4294967172 pg_aggregate 0 0 NULL NULL NULL -4294967174 views 0 0 NULL NULL NULL -4294967175 view_table_usage 0 0 NULL NULL NULL -4294967176 view_routine_usage 0 0 NULL NULL NULL -4294967177 view_column_usage 0 0 NULL NULL NULL -4294967178 user_privileges 0 0 NULL NULL NULL -4294967179 user_mappings 0 0 NULL NULL NULL -4294967180 user_mapping_options 0 0 NULL NULL NULL -4294967181 user_defined_types 0 0 NULL NULL NULL -4294967182 usage_privileges 0 0 NULL NULL NULL -4294967183 udt_privileges 0 0 NULL NULL NULL -4294967184 type_privileges 0 0 NULL NULL NULL -4294967185 triggers 0 0 NULL NULL NULL -4294967186 triggered_update_columns 0 0 NULL NULL NULL -4294967187 transforms 0 0 NULL NULL NULL -4294967188 tables 0 0 NULL NULL NULL -4294967189 table_privileges 0 0 NULL NULL NULL -4294967190 table_constraints 0 0 NULL NULL NULL -4294967191 statistics 0 0 NULL NULL NULL -4294967192 sql_sizing 0 0 NULL NULL NULL -4294967193 sql_parts 0 0 NULL NULL NULL -4294967194 sql_implementation_info 0 0 NULL NULL NULL -4294967195 sql_features 0 0 NULL NULL NULL -4294967196 session_variables 0 0 NULL NULL NULL -4294967197 sequences 0 0 NULL NULL NULL -4294967198 schema_privileges 0 0 NULL NULL NULL -4294967199 schemata 0 0 NULL NULL NULL -4294967200 routines 0 0 NULL NULL NULL -4294967201 routine_privileges 0 0 NULL NULL NULL -4294967202 role_usage_grants 0 0 NULL NULL NULL -4294967203 role_udt_grants 0 0 NULL NULL NULL -4294967204 role_table_grants 0 0 NULL NULL NULL -4294967205 role_routine_grants 0 0 NULL NULL NULL -4294967206 role_column_grants 0 0 NULL NULL NULL -4294967207 referential_constraints 0 0 NULL NULL NULL -4294967208 parameters 0 0 NULL NULL NULL -4294967209 key_column_usage 0 0 NULL NULL NULL -4294967210 information_schema_catalog_name 0 0 NULL NULL NULL -4294967211 foreign_tables 0 0 NULL NULL NULL -4294967212 foreign_table_options 0 0 NULL NULL NULL -4294967213 foreign_servers 0 0 NULL NULL NULL -4294967214 foreign_server_options 0 0 NULL NULL NULL -4294967215 foreign_data_wrappers 0 0 NULL NULL NULL -4294967216 foreign_data_wrapper_options 0 0 NULL NULL NULL -4294967217 enabled_roles 0 0 NULL NULL NULL -4294967218 element_types 0 0 NULL NULL NULL -4294967219 domains 0 0 NULL NULL NULL -4294967220 domain_udt_usage 0 0 NULL NULL NULL -4294967221 domain_constraints 0 0 NULL NULL NULL -4294967222 data_type_privileges 0 0 NULL NULL NULL -4294967223 constraint_table_usage 0 0 NULL NULL NULL -4294967224 constraint_column_usage 0 0 NULL NULL NULL -4294967225 columns 0 0 NULL NULL NULL -4294967226 column_udt_usage 0 0 NULL NULL NULL -4294967227 column_privileges 0 0 NULL NULL NULL -4294967228 column_options 0 0 NULL NULL NULL -4294967229 column_domain_usage 0 0 NULL NULL NULL -4294967230 column_column_usage 0 0 NULL NULL NULL -4294967231 collations 0 0 NULL NULL NULL -4294967232 collation_character_set_applicability 0 0 NULL NULL NULL -4294967233 check_constraints 0 0 NULL NULL NULL -4294967234 check_constraint_routine_usage 0 0 NULL NULL NULL -4294967235 character_sets 0 0 NULL NULL NULL -4294967236 attributes 0 0 NULL NULL NULL -4294967237 applicable_roles 0 0 NULL NULL NULL -4294967238 administrable_role_authorizations 0 0 NULL NULL NULL +4294967078 spatial_ref_sys 0 0 NULL NULL NULL +4294967079 geometry_columns 0 0 NULL NULL NULL +4294967080 geography_columns 0 0 NULL NULL NULL +4294967082 pg_views 0 0 NULL NULL NULL +4294967083 pg_user 0 0 NULL NULL NULL +4294967084 pg_user_mappings 0 0 NULL NULL NULL +4294967085 pg_user_mapping 0 0 NULL NULL NULL +4294967086 pg_type 0 0 NULL NULL NULL +4294967087 pg_ts_template 0 0 NULL NULL NULL +4294967088 pg_ts_parser 0 0 NULL NULL NULL +4294967089 pg_ts_dict 0 0 NULL NULL NULL +4294967090 pg_ts_config 0 0 NULL NULL NULL +4294967091 pg_ts_config_map 0 0 NULL NULL NULL +4294967092 pg_trigger 0 0 NULL NULL NULL +4294967093 pg_transform 0 0 NULL NULL NULL +4294967094 pg_timezone_names 0 0 NULL NULL NULL +4294967095 pg_timezone_abbrevs 0 0 NULL NULL NULL +4294967096 pg_tablespace 0 0 NULL NULL NULL +4294967097 pg_tables 0 0 NULL NULL NULL +4294967098 pg_subscription 0 0 NULL NULL NULL +4294967099 pg_subscription_rel 0 0 NULL NULL NULL +4294967100 pg_statistic_ext 0 0 NULL NULL NULL +4294967101 pg_stat_activity 0 0 NULL NULL NULL +4294967102 pg_shmem_allocations 0 0 NULL NULL NULL +4294967103 pg_shdepend 0 0 NULL NULL NULL +4294967104 pg_shseclabel 0 0 NULL NULL NULL +4294967105 pg_shdescription 0 0 NULL NULL NULL +4294967106 pg_shadow 0 0 NULL NULL NULL +4294967107 pg_settings 0 0 NULL NULL NULL +4294967108 pg_sequences 0 0 NULL NULL NULL +4294967109 pg_sequence 0 0 NULL NULL NULL +4294967110 pg_seclabel 0 0 NULL NULL NULL +4294967111 pg_seclabels 0 0 NULL NULL NULL +4294967112 pg_rules 0 0 NULL NULL NULL +4294967113 pg_roles 0 0 NULL NULL NULL +4294967114 pg_rewrite 0 0 NULL NULL NULL +4294967115 pg_replication_slots 0 0 NULL NULL NULL +4294967116 pg_replication_origin 0 0 NULL NULL NULL +4294967117 pg_replication_origin_status 0 0 NULL NULL NULL +4294967118 pg_range 0 0 NULL NULL NULL +4294967119 pg_publication_tables 0 0 NULL NULL NULL +4294967120 pg_publication 0 0 NULL NULL NULL +4294967121 pg_publication_rel 0 0 NULL NULL NULL +4294967122 pg_proc 0 0 NULL NULL NULL +4294967123 pg_prepared_xacts 0 0 NULL NULL NULL +4294967124 pg_prepared_statements 0 0 NULL NULL NULL +4294967125 pg_policy 0 0 NULL NULL NULL +4294967126 pg_policies 0 0 NULL NULL NULL +4294967127 pg_partitioned_table 0 0 NULL NULL NULL +4294967128 pg_opfamily 0 0 NULL NULL NULL +4294967129 pg_operator 0 0 NULL NULL NULL +4294967130 pg_opclass 0 0 NULL NULL NULL +4294967131 pg_namespace 0 0 NULL NULL NULL +4294967132 pg_matviews 0 0 NULL NULL NULL +4294967133 pg_locks 0 0 NULL NULL NULL +4294967134 pg_largeobject 0 0 NULL NULL NULL +4294967135 pg_largeobject_metadata 0 0 NULL NULL NULL +4294967136 pg_language 0 0 NULL NULL NULL +4294967137 pg_init_privs 0 0 NULL NULL NULL +4294967138 pg_inherits 0 0 NULL NULL NULL +4294967139 pg_indexes 0 0 NULL NULL NULL +4294967140 pg_index 0 0 NULL NULL NULL +4294967141 pg_hba_file_rules 0 0 NULL NULL NULL +4294967142 pg_group 0 0 NULL NULL NULL +4294967143 pg_foreign_table 0 0 NULL NULL NULL +4294967144 pg_foreign_server 0 0 NULL NULL NULL +4294967145 pg_foreign_data_wrapper 0 0 NULL NULL NULL +4294967146 pg_file_settings 0 0 NULL NULL NULL +4294967147 pg_extension 0 0 NULL NULL NULL +4294967148 pg_event_trigger 0 0 NULL NULL NULL +4294967149 pg_enum 0 0 NULL NULL NULL +4294967150 pg_description 0 0 NULL NULL NULL +4294967151 pg_depend 0 0 NULL NULL NULL +4294967152 pg_default_acl 0 0 NULL NULL NULL +4294967153 pg_db_role_setting 0 0 NULL NULL NULL +4294967154 pg_database 0 0 NULL NULL NULL +4294967155 pg_cursors 0 0 NULL NULL NULL +4294967156 pg_conversion 0 0 NULL NULL NULL +4294967157 pg_constraint 0 0 NULL NULL NULL +4294967158 pg_config 0 0 NULL NULL NULL +4294967159 pg_collation 0 0 NULL NULL NULL +4294967160 pg_class 0 0 NULL NULL NULL +4294967161 pg_cast 0 0 NULL NULL NULL +4294967162 pg_available_extensions 0 0 NULL NULL NULL +4294967163 pg_available_extension_versions 0 0 NULL NULL NULL +4294967164 pg_auth_members 0 0 NULL NULL NULL +4294967165 pg_authid 0 0 NULL NULL NULL +4294967166 pg_attribute 0 0 NULL NULL NULL +4294967167 pg_attrdef 0 0 NULL NULL NULL +4294967168 pg_amproc 0 0 NULL NULL NULL +4294967169 pg_amop 0 0 NULL NULL NULL +4294967170 pg_am 0 0 NULL NULL NULL +4294967171 pg_aggregate 0 0 NULL NULL NULL +4294967173 views 0 0 NULL NULL NULL +4294967174 view_table_usage 0 0 NULL NULL NULL +4294967175 view_routine_usage 0 0 NULL NULL NULL +4294967176 view_column_usage 0 0 NULL NULL NULL +4294967177 user_privileges 0 0 NULL NULL NULL +4294967178 user_mappings 0 0 NULL NULL NULL +4294967179 user_mapping_options 0 0 NULL NULL NULL +4294967180 user_defined_types 0 0 NULL NULL NULL +4294967181 usage_privileges 0 0 NULL NULL NULL +4294967182 udt_privileges 0 0 NULL NULL NULL +4294967183 type_privileges 0 0 NULL NULL NULL +4294967184 triggers 0 0 NULL NULL NULL +4294967185 triggered_update_columns 0 0 NULL NULL NULL +4294967186 transforms 0 0 NULL NULL NULL +4294967187 tables 0 0 NULL NULL NULL +4294967188 table_privileges 0 0 NULL NULL NULL +4294967189 table_constraints 0 0 NULL NULL NULL +4294967190 statistics 0 0 NULL NULL NULL +4294967191 sql_sizing 0 0 NULL NULL NULL +4294967192 sql_parts 0 0 NULL NULL NULL +4294967193 sql_implementation_info 0 0 NULL NULL NULL +4294967194 sql_features 0 0 NULL NULL NULL +4294967195 session_variables 0 0 NULL NULL NULL +4294967196 sequences 0 0 NULL NULL NULL +4294967197 schema_privileges 0 0 NULL NULL NULL +4294967198 schemata 0 0 NULL NULL NULL +4294967199 routines 0 0 NULL NULL NULL +4294967200 routine_privileges 0 0 NULL NULL NULL +4294967201 role_usage_grants 0 0 NULL NULL NULL +4294967202 role_udt_grants 0 0 NULL NULL NULL +4294967203 role_table_grants 0 0 NULL NULL NULL +4294967204 role_routine_grants 0 0 NULL NULL NULL +4294967205 role_column_grants 0 0 NULL NULL NULL +4294967206 referential_constraints 0 0 NULL NULL NULL +4294967207 parameters 0 0 NULL NULL NULL +4294967208 key_column_usage 0 0 NULL NULL NULL +4294967209 information_schema_catalog_name 0 0 NULL NULL NULL +4294967210 foreign_tables 0 0 NULL NULL NULL +4294967211 foreign_table_options 0 0 NULL NULL NULL +4294967212 foreign_servers 0 0 NULL NULL NULL +4294967213 foreign_server_options 0 0 NULL NULL NULL +4294967214 foreign_data_wrappers 0 0 NULL NULL NULL +4294967215 foreign_data_wrapper_options 0 0 NULL NULL NULL +4294967216 enabled_roles 0 0 NULL NULL NULL +4294967217 element_types 0 0 NULL NULL NULL +4294967218 domains 0 0 NULL NULL NULL +4294967219 domain_udt_usage 0 0 NULL NULL NULL +4294967220 domain_constraints 0 0 NULL NULL NULL +4294967221 data_type_privileges 0 0 NULL NULL NULL +4294967222 constraint_table_usage 0 0 NULL NULL NULL +4294967223 constraint_column_usage 0 0 NULL NULL NULL +4294967224 columns 0 0 NULL NULL NULL +4294967225 column_udt_usage 0 0 NULL NULL NULL +4294967226 column_privileges 0 0 NULL NULL NULL +4294967227 column_options 0 0 NULL NULL NULL +4294967228 column_domain_usage 0 0 NULL NULL NULL +4294967229 column_column_usage 0 0 NULL NULL NULL +4294967230 collations 0 0 NULL NULL NULL +4294967231 collation_character_set_applicability 0 0 NULL NULL NULL +4294967232 check_constraints 0 0 NULL NULL NULL +4294967233 check_constraint_routine_usage 0 0 NULL NULL NULL +4294967234 character_sets 0 0 NULL NULL NULL +4294967235 attributes 0 0 NULL NULL NULL +4294967236 applicable_roles 0 0 NULL NULL NULL +4294967237 administrable_role_authorizations 0 0 NULL NULL NULL +4294967239 cluster_inflight_traces 0 0 NULL NULL NULL 4294967240 lost_descriptors_with_data 0 0 NULL NULL NULL 4294967241 cross_db_references 0 0 NULL NULL NULL 4294967242 interleaved 0 0 NULL NULL NULL @@ -3069,215 +3074,216 @@ SELECT objoid, classoid, objsubid, regexp_replace(description, e'\n.*', '') AS d FROM pg_catalog.pg_description ---- objoid classoid objsubid description -4294967294 4294967161 0 backward inter-descriptor dependencies starting from tables accessible by current user in current database (KV scan) -4294967292 4294967161 0 built-in functions (RAM/static) -4294967288 4294967161 0 contention information (cluster RPC; expensive!) -4294967243 4294967161 0 virtual table with database privileges -4294967287 4294967161 0 DistSQL remote flows information (cluster RPC; expensive!) -4294967286 4294967161 0 running queries visible by current user (cluster RPC; expensive!) -4294967284 4294967161 0 running sessions visible to current user (cluster RPC; expensive!) -4294967283 4294967161 0 cluster settings (RAM) -4294967285 4294967161 0 running user transactions visible by the current user (cluster RPC; expensive!) -4294967282 4294967161 0 CREATE and ALTER statements for all tables accessible by current user in current database (KV scan) -4294967281 4294967161 0 CREATE statements for all user defined types accessible by the current user in current database (KV scan) -4294967241 4294967161 0 virtual table with cross db references -4294967280 4294967161 0 databases accessible by the current user (KV scan) -4294967279 4294967161 0 telemetry counters (RAM; local node only) -4294967278 4294967161 0 forward inter-descriptor dependencies starting from tables accessible by current user in current database (KV scan) -4294967275 4294967161 0 locally known gossiped health alerts (RAM; local node only) -4294967274 4294967161 0 locally known gossiped node liveness (RAM; local node only) -4294967273 4294967161 0 locally known edges in the gossip network (RAM; local node only) -4294967276 4294967161 0 locally known gossiped node details (RAM; local node only) -4294967272 4294967161 0 index columns for all indexes accessible by current user in current database (KV scan) -4294967242 4294967161 0 virtual table with interleaved table information -4294967244 4294967161 0 virtual table to validate descriptors -4294967270 4294967161 0 decoded job metadata from system.jobs (KV scan) -4294967277 4294967161 0 node liveness status, as seen by kv -4294967269 4294967161 0 node details across the entire cluster (cluster RPC; expensive!) -4294967268 4294967161 0 store details and status (cluster RPC; expensive!) -4294967267 4294967161 0 acquired table leases (RAM; local node only) -4294967240 4294967161 0 virtual table with table descriptors that still have data -4294967293 4294967161 0 detailed identification strings (RAM, local node only) -4294967266 4294967161 0 contention information (RAM; local node only) -4294967265 4294967161 0 DistSQL remote flows information (RAM; local node only) -4294967271 4294967161 0 in-flight spans (RAM; local node only) -4294967261 4294967161 0 current values for metrics (RAM; local node only) -4294967264 4294967161 0 running queries visible by current user (RAM; local node only) -4294967256 4294967161 0 server parameters, useful to construct connection URLs (RAM, local node only) -4294967262 4294967161 0 running sessions visible by current user (RAM; local node only) -4294967252 4294967161 0 statement statistics (in-memory, not durable; local node only). This table is wiped periodically (by default, at least every two hours) -4294967247 4294967161 0 finer-grained transaction statistics (in-memory, not durable; local node only). This table is wiped periodically (by default, at least every two hours) -4294967263 4294967161 0 running user transactions visible by the current user (RAM; local node only) -4294967246 4294967161 0 per-application transaction statistics (in-memory, not durable; local node only). This table is wiped periodically (by default, at least every two hours) -4294967260 4294967161 0 defined partitions for all tables/indexes accessible by the current user in the current database (KV scan) -4294967259 4294967161 0 comments for predefined virtual tables (RAM/static) -4294967258 4294967161 0 range metadata without leaseholder details (KV join; expensive!) -4294967255 4294967161 0 ongoing schema changes, across all descriptors accessible by current user (KV scan; expensive!) -4294967254 4294967161 0 session trace accumulated so far (RAM) -4294967253 4294967161 0 session variables (RAM) -4294967251 4294967161 0 details for all columns accessible by current user in current database (KV scan) -4294967250 4294967161 0 indexes accessible by current user in current database (KV scan) -4294967248 4294967161 0 stats for all tables accessible by current user in current database as of 10s ago -4294967249 4294967161 0 table descriptors accessible by current user, including non-public and virtual (KV scan; expensive!) -4294967245 4294967161 0 decoded zone configurations from system.zones (KV scan) -4294967238 4294967161 0 roles for which the current user has admin option -4294967237 4294967161 0 roles available to the current user -4294967236 4294967161 0 attributes was created for compatibility and is currently unimplemented -4294967235 4294967161 0 character sets available in the current database -4294967234 4294967161 0 check_constraint_routine_usage was created for compatibility and is currently unimplemented -4294967233 4294967161 0 check constraints -4294967232 4294967161 0 identifies which character set the available collations are -4294967231 4294967161 0 shows the collations available in the current database -4294967230 4294967161 0 column_column_usage was created for compatibility and is currently unimplemented -4294967229 4294967161 0 column_domain_usage was created for compatibility and is currently unimplemented -4294967228 4294967161 0 column_options was created for compatibility and is currently unimplemented -4294967227 4294967161 0 column privilege grants (incomplete) -4294967226 4294967161 0 columns with user defined types -4294967225 4294967161 0 table and view columns (incomplete) -4294967224 4294967161 0 columns usage by constraints -4294967223 4294967161 0 constraint_table_usage was created for compatibility and is currently unimplemented -4294967222 4294967161 0 data_type_privileges was created for compatibility and is currently unimplemented -4294967221 4294967161 0 domain_constraints was created for compatibility and is currently unimplemented -4294967220 4294967161 0 domain_udt_usage was created for compatibility and is currently unimplemented -4294967219 4294967161 0 domains was created for compatibility and is currently unimplemented -4294967218 4294967161 0 element_types was created for compatibility and is currently unimplemented -4294967217 4294967161 0 roles for the current user -4294967216 4294967161 0 foreign_data_wrapper_options was created for compatibility and is currently unimplemented -4294967215 4294967161 0 foreign_data_wrappers was created for compatibility and is currently unimplemented -4294967214 4294967161 0 foreign_server_options was created for compatibility and is currently unimplemented -4294967213 4294967161 0 foreign_servers was created for compatibility and is currently unimplemented -4294967212 4294967161 0 foreign_table_options was created for compatibility and is currently unimplemented -4294967211 4294967161 0 foreign_tables was created for compatibility and is currently unimplemented -4294967210 4294967161 0 information_schema_catalog_name was created for compatibility and is currently unimplemented -4294967209 4294967161 0 column usage by indexes and key constraints -4294967208 4294967161 0 built-in function parameters (empty - introspection not yet supported) -4294967207 4294967161 0 foreign key constraints -4294967206 4294967161 0 role_column_grants was created for compatibility and is currently unimplemented -4294967205 4294967161 0 role_routine_grants was created for compatibility and is currently unimplemented -4294967204 4294967161 0 privileges granted on table or views (incomplete; see also information_schema.table_privileges; may contain excess users or roles) -4294967203 4294967161 0 role_udt_grants was created for compatibility and is currently unimplemented -4294967202 4294967161 0 role_usage_grants was created for compatibility and is currently unimplemented -4294967201 4294967161 0 routine_privileges was created for compatibility and is currently unimplemented -4294967200 4294967161 0 built-in functions (empty - introspection not yet supported) -4294967198 4294967161 0 schema privileges (incomplete; may contain excess users or roles) -4294967199 4294967161 0 database schemas (may contain schemata without permission) -4294967197 4294967161 0 sequences -4294967196 4294967161 0 exposes the session variables. -4294967195 4294967161 0 sql_features was created for compatibility and is currently unimplemented -4294967194 4294967161 0 sql_implementation_info was created for compatibility and is currently unimplemented -4294967193 4294967161 0 sql_parts was created for compatibility and is currently unimplemented -4294967192 4294967161 0 sql_sizing was created for compatibility and is currently unimplemented -4294967191 4294967161 0 index metadata and statistics (incomplete) -4294967190 4294967161 0 table constraints -4294967189 4294967161 0 privileges granted on table or views (incomplete; may contain excess users or roles) -4294967188 4294967161 0 tables and views -4294967187 4294967161 0 transforms was created for compatibility and is currently unimplemented -4294967186 4294967161 0 triggered_update_columns was created for compatibility and is currently unimplemented -4294967185 4294967161 0 triggers was created for compatibility and is currently unimplemented -4294967184 4294967161 0 type privileges (incomplete; may contain excess users or roles) -4294967183 4294967161 0 udt_privileges was created for compatibility and is currently unimplemented -4294967182 4294967161 0 usage_privileges was created for compatibility and is currently unimplemented -4294967181 4294967161 0 user_defined_types was created for compatibility and is currently unimplemented -4294967180 4294967161 0 user_mapping_options was created for compatibility and is currently unimplemented -4294967179 4294967161 0 user_mappings was created for compatibility and is currently unimplemented -4294967178 4294967161 0 grantable privileges (incomplete) -4294967177 4294967161 0 view_column_usage was created for compatibility and is currently unimplemented -4294967176 4294967161 0 view_routine_usage was created for compatibility and is currently unimplemented -4294967175 4294967161 0 view_table_usage was created for compatibility and is currently unimplemented -4294967174 4294967161 0 views (incomplete) -4294967172 4294967161 0 aggregated built-in functions (incomplete) -4294967171 4294967161 0 index access methods (incomplete) -4294967170 4294967161 0 pg_amop was created for compatibility and is currently unimplemented -4294967169 4294967161 0 pg_amproc was created for compatibility and is currently unimplemented -4294967168 4294967161 0 column default values -4294967167 4294967161 0 table columns (incomplete - see also information_schema.columns) -4294967165 4294967161 0 role membership -4294967166 4294967161 0 authorization identifiers - differs from postgres as we do not display passwords, -4294967164 4294967161 0 pg_available_extension_versions was created for compatibility and is currently unimplemented -4294967163 4294967161 0 available extensions -4294967162 4294967161 0 casts (empty - needs filling out) -4294967161 4294967161 0 tables and relation-like objects (incomplete - see also information_schema.tables/sequences/views) -4294967160 4294967161 0 available collations (incomplete) -4294967159 4294967161 0 pg_config was created for compatibility and is currently unimplemented -4294967158 4294967161 0 table constraints (incomplete - see also information_schema.table_constraints) -4294967157 4294967161 0 encoding conversions (empty - unimplemented) -4294967156 4294967161 0 pg_cursors was created for compatibility and is currently unimplemented -4294967155 4294967161 0 available databases (incomplete) -4294967154 4294967161 0 pg_db_role_setting was created for compatibility and is currently unimplemented -4294967153 4294967161 0 default ACLs (empty - unimplemented) -4294967152 4294967161 0 dependency relationships (incomplete) -4294967151 4294967161 0 object comments -4294967150 4294967161 0 enum types and labels (empty - feature does not exist) -4294967149 4294967161 0 event triggers (empty - feature does not exist) -4294967148 4294967161 0 installed extensions (empty - feature does not exist) -4294967147 4294967161 0 pg_file_settings was created for compatibility and is currently unimplemented -4294967146 4294967161 0 foreign data wrappers (empty - feature does not exist) -4294967145 4294967161 0 foreign servers (empty - feature does not exist) -4294967144 4294967161 0 foreign tables (empty - feature does not exist) -4294967143 4294967161 0 pg_group was created for compatibility and is currently unimplemented -4294967142 4294967161 0 pg_hba_file_rules was created for compatibility and is currently unimplemented -4294967141 4294967161 0 indexes (incomplete) -4294967140 4294967161 0 index creation statements -4294967139 4294967161 0 table inheritance hierarchy (empty - feature does not exist) -4294967138 4294967161 0 pg_init_privs was created for compatibility and is currently unimplemented -4294967137 4294967161 0 available languages (empty - feature does not exist) -4294967135 4294967161 0 pg_largeobject was created for compatibility and is currently unimplemented -4294967136 4294967161 0 pg_largeobject_metadata was created for compatibility and is currently unimplemented -4294967134 4294967161 0 locks held by active processes (empty - feature does not exist) -4294967133 4294967161 0 available materialized views (empty - feature does not exist) -4294967132 4294967161 0 available namespaces (incomplete; namespaces and databases are congruent in CockroachDB) -4294967131 4294967161 0 opclass (empty - Operator classes not supported yet) -4294967130 4294967161 0 operators (incomplete) -4294967129 4294967161 0 pg_opfamily was created for compatibility and is currently unimplemented -4294967128 4294967161 0 pg_partitioned_table was created for compatibility and is currently unimplemented -4294967127 4294967161 0 pg_policies was created for compatibility and is currently unimplemented -4294967126 4294967161 0 pg_policy was created for compatibility and is currently unimplemented -4294967125 4294967161 0 prepared statements -4294967124 4294967161 0 prepared transactions (empty - feature does not exist) -4294967123 4294967161 0 built-in functions (incomplete) -4294967121 4294967161 0 pg_publication was created for compatibility and is currently unimplemented -4294967122 4294967161 0 pg_publication_rel was created for compatibility and is currently unimplemented -4294967120 4294967161 0 pg_publication_tables was created for compatibility and is currently unimplemented -4294967119 4294967161 0 range types (empty - feature does not exist) -4294967117 4294967161 0 pg_replication_origin was created for compatibility and is currently unimplemented -4294967118 4294967161 0 pg_replication_origin_status was created for compatibility and is currently unimplemented -4294967116 4294967161 0 pg_replication_slots was created for compatibility and is currently unimplemented -4294967115 4294967161 0 rewrite rules (only for referencing on pg_depend for table-view dependencies) -4294967114 4294967161 0 database roles -4294967113 4294967161 0 pg_rules was created for compatibility and is currently unimplemented -4294967111 4294967161 0 security labels (empty - feature does not exist) -4294967112 4294967161 0 security labels (empty) -4294967110 4294967161 0 sequences (see also information_schema.sequences) -4294967109 4294967161 0 pg_sequences is very similar as pg_sequence. -4294967108 4294967161 0 session variables (incomplete) -4294967107 4294967161 0 pg_shadow was created for compatibility and is currently unimplemented -4294967104 4294967161 0 shared dependencies (empty - not implemented) -4294967106 4294967161 0 shared object comments -4294967103 4294967161 0 pg_shmem_allocations was created for compatibility and is currently unimplemented -4294967105 4294967161 0 shared security labels (empty - feature not supported) -4294967102 4294967161 0 backend access statistics (empty - monitoring works differently in CockroachDB) -4294967101 4294967161 0 pg_statistic_ext was created for compatibility and is currently unimplemented -4294967099 4294967161 0 pg_subscription was created for compatibility and is currently unimplemented -4294967100 4294967161 0 pg_subscription_rel was created for compatibility and is currently unimplemented -4294967098 4294967161 0 tables summary (see also information_schema.tables, pg_catalog.pg_class) -4294967097 4294967161 0 available tablespaces (incomplete; concept inapplicable to CockroachDB) -4294967096 4294967161 0 pg_timezone_abbrevs was created for compatibility and is currently unimplemented -4294967095 4294967161 0 pg_timezone_names was created for compatibility and is currently unimplemented -4294967094 4294967161 0 pg_transform was created for compatibility and is currently unimplemented -4294967093 4294967161 0 triggers (empty - feature does not exist) -4294967091 4294967161 0 pg_ts_config was created for compatibility and is currently unimplemented -4294967092 4294967161 0 pg_ts_config_map was created for compatibility and is currently unimplemented -4294967090 4294967161 0 pg_ts_dict was created for compatibility and is currently unimplemented -4294967089 4294967161 0 pg_ts_parser was created for compatibility and is currently unimplemented -4294967088 4294967161 0 pg_ts_template was created for compatibility and is currently unimplemented -4294967087 4294967161 0 scalar types (incomplete) -4294967084 4294967161 0 database users -4294967086 4294967161 0 local to remote user mapping (empty - feature does not exist) -4294967085 4294967161 0 pg_user_mappings was created for compatibility and is currently unimplemented -4294967083 4294967161 0 view definitions (incomplete - see also information_schema.views) -4294967081 4294967161 0 Shows all defined geography columns. Matches PostGIS' geography_columns functionality. -4294967080 4294967161 0 Shows all defined geometry columns. Matches PostGIS' geometry_columns functionality. -4294967079 4294967161 0 Shows all defined Spatial Reference Identifiers (SRIDs). Matches PostGIS' spatial_ref_sys table. +4294967294 4294967160 0 backward inter-descriptor dependencies starting from tables accessible by current user in current database (KV scan) +4294967292 4294967160 0 built-in functions (RAM/static) +4294967288 4294967160 0 contention information (cluster RPC; expensive!) +4294967243 4294967160 0 virtual table with database privileges +4294967287 4294967160 0 DistSQL remote flows information (cluster RPC; expensive!) +4294967239 4294967160 0 traces for in-flight spans across all nodes in the cluster (cluster RPC; expensive!) +4294967286 4294967160 0 running queries visible by current user (cluster RPC; expensive!) +4294967284 4294967160 0 running sessions visible to current user (cluster RPC; expensive!) +4294967283 4294967160 0 cluster settings (RAM) +4294967285 4294967160 0 running user transactions visible by the current user (cluster RPC; expensive!) +4294967282 4294967160 0 CREATE and ALTER statements for all tables accessible by current user in current database (KV scan) +4294967281 4294967160 0 CREATE statements for all user defined types accessible by the current user in current database (KV scan) +4294967241 4294967160 0 virtual table with cross db references +4294967280 4294967160 0 databases accessible by the current user (KV scan) +4294967279 4294967160 0 telemetry counters (RAM; local node only) +4294967278 4294967160 0 forward inter-descriptor dependencies starting from tables accessible by current user in current database (KV scan) +4294967275 4294967160 0 locally known gossiped health alerts (RAM; local node only) +4294967274 4294967160 0 locally known gossiped node liveness (RAM; local node only) +4294967273 4294967160 0 locally known edges in the gossip network (RAM; local node only) +4294967276 4294967160 0 locally known gossiped node details (RAM; local node only) +4294967272 4294967160 0 index columns for all indexes accessible by current user in current database (KV scan) +4294967242 4294967160 0 virtual table with interleaved table information +4294967244 4294967160 0 virtual table to validate descriptors +4294967270 4294967160 0 decoded job metadata from system.jobs (KV scan) +4294967277 4294967160 0 node liveness status, as seen by kv +4294967269 4294967160 0 node details across the entire cluster (cluster RPC; expensive!) +4294967268 4294967160 0 store details and status (cluster RPC; expensive!) +4294967267 4294967160 0 acquired table leases (RAM; local node only) +4294967240 4294967160 0 virtual table with table descriptors that still have data +4294967293 4294967160 0 detailed identification strings (RAM, local node only) +4294967266 4294967160 0 contention information (RAM; local node only) +4294967265 4294967160 0 DistSQL remote flows information (RAM; local node only) +4294967271 4294967160 0 in-flight spans (RAM; local node only) +4294967261 4294967160 0 current values for metrics (RAM; local node only) +4294967264 4294967160 0 running queries visible by current user (RAM; local node only) +4294967256 4294967160 0 server parameters, useful to construct connection URLs (RAM, local node only) +4294967262 4294967160 0 running sessions visible by current user (RAM; local node only) +4294967252 4294967160 0 statement statistics (in-memory, not durable; local node only). This table is wiped periodically (by default, at least every two hours) +4294967247 4294967160 0 finer-grained transaction statistics (in-memory, not durable; local node only). This table is wiped periodically (by default, at least every two hours) +4294967263 4294967160 0 running user transactions visible by the current user (RAM; local node only) +4294967246 4294967160 0 per-application transaction statistics (in-memory, not durable; local node only). This table is wiped periodically (by default, at least every two hours) +4294967260 4294967160 0 defined partitions for all tables/indexes accessible by the current user in the current database (KV scan) +4294967259 4294967160 0 comments for predefined virtual tables (RAM/static) +4294967258 4294967160 0 range metadata without leaseholder details (KV join; expensive!) +4294967255 4294967160 0 ongoing schema changes, across all descriptors accessible by current user (KV scan; expensive!) +4294967254 4294967160 0 session trace accumulated so far (RAM) +4294967253 4294967160 0 session variables (RAM) +4294967251 4294967160 0 details for all columns accessible by current user in current database (KV scan) +4294967250 4294967160 0 indexes accessible by current user in current database (KV scan) +4294967248 4294967160 0 stats for all tables accessible by current user in current database as of 10s ago +4294967249 4294967160 0 table descriptors accessible by current user, including non-public and virtual (KV scan; expensive!) +4294967245 4294967160 0 decoded zone configurations from system.zones (KV scan) +4294967237 4294967160 0 roles for which the current user has admin option +4294967236 4294967160 0 roles available to the current user +4294967235 4294967160 0 attributes was created for compatibility and is currently unimplemented +4294967234 4294967160 0 character sets available in the current database +4294967233 4294967160 0 check_constraint_routine_usage was created for compatibility and is currently unimplemented +4294967232 4294967160 0 check constraints +4294967231 4294967160 0 identifies which character set the available collations are +4294967230 4294967160 0 shows the collations available in the current database +4294967229 4294967160 0 column_column_usage was created for compatibility and is currently unimplemented +4294967228 4294967160 0 column_domain_usage was created for compatibility and is currently unimplemented +4294967227 4294967160 0 column_options was created for compatibility and is currently unimplemented +4294967226 4294967160 0 column privilege grants (incomplete) +4294967225 4294967160 0 columns with user defined types +4294967224 4294967160 0 table and view columns (incomplete) +4294967223 4294967160 0 columns usage by constraints +4294967222 4294967160 0 constraint_table_usage was created for compatibility and is currently unimplemented +4294967221 4294967160 0 data_type_privileges was created for compatibility and is currently unimplemented +4294967220 4294967160 0 domain_constraints was created for compatibility and is currently unimplemented +4294967219 4294967160 0 domain_udt_usage was created for compatibility and is currently unimplemented +4294967218 4294967160 0 domains was created for compatibility and is currently unimplemented +4294967217 4294967160 0 element_types was created for compatibility and is currently unimplemented +4294967216 4294967160 0 roles for the current user +4294967215 4294967160 0 foreign_data_wrapper_options was created for compatibility and is currently unimplemented +4294967214 4294967160 0 foreign_data_wrappers was created for compatibility and is currently unimplemented +4294967213 4294967160 0 foreign_server_options was created for compatibility and is currently unimplemented +4294967212 4294967160 0 foreign_servers was created for compatibility and is currently unimplemented +4294967211 4294967160 0 foreign_table_options was created for compatibility and is currently unimplemented +4294967210 4294967160 0 foreign_tables was created for compatibility and is currently unimplemented +4294967209 4294967160 0 information_schema_catalog_name was created for compatibility and is currently unimplemented +4294967208 4294967160 0 column usage by indexes and key constraints +4294967207 4294967160 0 built-in function parameters (empty - introspection not yet supported) +4294967206 4294967160 0 foreign key constraints +4294967205 4294967160 0 role_column_grants was created for compatibility and is currently unimplemented +4294967204 4294967160 0 role_routine_grants was created for compatibility and is currently unimplemented +4294967203 4294967160 0 privileges granted on table or views (incomplete; see also information_schema.table_privileges; may contain excess users or roles) +4294967202 4294967160 0 role_udt_grants was created for compatibility and is currently unimplemented +4294967201 4294967160 0 role_usage_grants was created for compatibility and is currently unimplemented +4294967200 4294967160 0 routine_privileges was created for compatibility and is currently unimplemented +4294967199 4294967160 0 built-in functions (empty - introspection not yet supported) +4294967197 4294967160 0 schema privileges (incomplete; may contain excess users or roles) +4294967198 4294967160 0 database schemas (may contain schemata without permission) +4294967196 4294967160 0 sequences +4294967195 4294967160 0 exposes the session variables. +4294967194 4294967160 0 sql_features was created for compatibility and is currently unimplemented +4294967193 4294967160 0 sql_implementation_info was created for compatibility and is currently unimplemented +4294967192 4294967160 0 sql_parts was created for compatibility and is currently unimplemented +4294967191 4294967160 0 sql_sizing was created for compatibility and is currently unimplemented +4294967190 4294967160 0 index metadata and statistics (incomplete) +4294967189 4294967160 0 table constraints +4294967188 4294967160 0 privileges granted on table or views (incomplete; may contain excess users or roles) +4294967187 4294967160 0 tables and views +4294967186 4294967160 0 transforms was created for compatibility and is currently unimplemented +4294967185 4294967160 0 triggered_update_columns was created for compatibility and is currently unimplemented +4294967184 4294967160 0 triggers was created for compatibility and is currently unimplemented +4294967183 4294967160 0 type privileges (incomplete; may contain excess users or roles) +4294967182 4294967160 0 udt_privileges was created for compatibility and is currently unimplemented +4294967181 4294967160 0 usage_privileges was created for compatibility and is currently unimplemented +4294967180 4294967160 0 user_defined_types was created for compatibility and is currently unimplemented +4294967179 4294967160 0 user_mapping_options was created for compatibility and is currently unimplemented +4294967178 4294967160 0 user_mappings was created for compatibility and is currently unimplemented +4294967177 4294967160 0 grantable privileges (incomplete) +4294967176 4294967160 0 view_column_usage was created for compatibility and is currently unimplemented +4294967175 4294967160 0 view_routine_usage was created for compatibility and is currently unimplemented +4294967174 4294967160 0 view_table_usage was created for compatibility and is currently unimplemented +4294967173 4294967160 0 views (incomplete) +4294967171 4294967160 0 aggregated built-in functions (incomplete) +4294967170 4294967160 0 index access methods (incomplete) +4294967169 4294967160 0 pg_amop was created for compatibility and is currently unimplemented +4294967168 4294967160 0 pg_amproc was created for compatibility and is currently unimplemented +4294967167 4294967160 0 column default values +4294967166 4294967160 0 table columns (incomplete - see also information_schema.columns) +4294967164 4294967160 0 role membership +4294967165 4294967160 0 authorization identifiers - differs from postgres as we do not display passwords, +4294967163 4294967160 0 pg_available_extension_versions was created for compatibility and is currently unimplemented +4294967162 4294967160 0 available extensions +4294967161 4294967160 0 casts (empty - needs filling out) +4294967160 4294967160 0 tables and relation-like objects (incomplete - see also information_schema.tables/sequences/views) +4294967159 4294967160 0 available collations (incomplete) +4294967158 4294967160 0 pg_config was created for compatibility and is currently unimplemented +4294967157 4294967160 0 table constraints (incomplete - see also information_schema.table_constraints) +4294967156 4294967160 0 encoding conversions (empty - unimplemented) +4294967155 4294967160 0 pg_cursors was created for compatibility and is currently unimplemented +4294967154 4294967160 0 available databases (incomplete) +4294967153 4294967160 0 pg_db_role_setting was created for compatibility and is currently unimplemented +4294967152 4294967160 0 default ACLs (empty - unimplemented) +4294967151 4294967160 0 dependency relationships (incomplete) +4294967150 4294967160 0 object comments +4294967149 4294967160 0 enum types and labels (empty - feature does not exist) +4294967148 4294967160 0 event triggers (empty - feature does not exist) +4294967147 4294967160 0 installed extensions (empty - feature does not exist) +4294967146 4294967160 0 pg_file_settings was created for compatibility and is currently unimplemented +4294967145 4294967160 0 foreign data wrappers (empty - feature does not exist) +4294967144 4294967160 0 foreign servers (empty - feature does not exist) +4294967143 4294967160 0 foreign tables (empty - feature does not exist) +4294967142 4294967160 0 pg_group was created for compatibility and is currently unimplemented +4294967141 4294967160 0 pg_hba_file_rules was created for compatibility and is currently unimplemented +4294967140 4294967160 0 indexes (incomplete) +4294967139 4294967160 0 index creation statements +4294967138 4294967160 0 table inheritance hierarchy (empty - feature does not exist) +4294967137 4294967160 0 pg_init_privs was created for compatibility and is currently unimplemented +4294967136 4294967160 0 available languages (empty - feature does not exist) +4294967134 4294967160 0 pg_largeobject was created for compatibility and is currently unimplemented +4294967135 4294967160 0 pg_largeobject_metadata was created for compatibility and is currently unimplemented +4294967133 4294967160 0 locks held by active processes (empty - feature does not exist) +4294967132 4294967160 0 available materialized views (empty - feature does not exist) +4294967131 4294967160 0 available namespaces (incomplete; namespaces and databases are congruent in CockroachDB) +4294967130 4294967160 0 opclass (empty - Operator classes not supported yet) +4294967129 4294967160 0 operators (incomplete) +4294967128 4294967160 0 pg_opfamily was created for compatibility and is currently unimplemented +4294967127 4294967160 0 pg_partitioned_table was created for compatibility and is currently unimplemented +4294967126 4294967160 0 pg_policies was created for compatibility and is currently unimplemented +4294967125 4294967160 0 pg_policy was created for compatibility and is currently unimplemented +4294967124 4294967160 0 prepared statements +4294967123 4294967160 0 prepared transactions (empty - feature does not exist) +4294967122 4294967160 0 built-in functions (incomplete) +4294967120 4294967160 0 pg_publication was created for compatibility and is currently unimplemented +4294967121 4294967160 0 pg_publication_rel was created for compatibility and is currently unimplemented +4294967119 4294967160 0 pg_publication_tables was created for compatibility and is currently unimplemented +4294967118 4294967160 0 range types (empty - feature does not exist) +4294967116 4294967160 0 pg_replication_origin was created for compatibility and is currently unimplemented +4294967117 4294967160 0 pg_replication_origin_status was created for compatibility and is currently unimplemented +4294967115 4294967160 0 pg_replication_slots was created for compatibility and is currently unimplemented +4294967114 4294967160 0 rewrite rules (only for referencing on pg_depend for table-view dependencies) +4294967113 4294967160 0 database roles +4294967112 4294967160 0 pg_rules was created for compatibility and is currently unimplemented +4294967110 4294967160 0 security labels (empty - feature does not exist) +4294967111 4294967160 0 security labels (empty) +4294967109 4294967160 0 sequences (see also information_schema.sequences) +4294967108 4294967160 0 pg_sequences is very similar as pg_sequence. +4294967107 4294967160 0 session variables (incomplete) +4294967106 4294967160 0 pg_shadow was created for compatibility and is currently unimplemented +4294967103 4294967160 0 shared dependencies (empty - not implemented) +4294967105 4294967160 0 shared object comments +4294967102 4294967160 0 pg_shmem_allocations was created for compatibility and is currently unimplemented +4294967104 4294967160 0 shared security labels (empty - feature not supported) +4294967101 4294967160 0 backend access statistics (empty - monitoring works differently in CockroachDB) +4294967100 4294967160 0 pg_statistic_ext was created for compatibility and is currently unimplemented +4294967098 4294967160 0 pg_subscription was created for compatibility and is currently unimplemented +4294967099 4294967160 0 pg_subscription_rel was created for compatibility and is currently unimplemented +4294967097 4294967160 0 tables summary (see also information_schema.tables, pg_catalog.pg_class) +4294967096 4294967160 0 available tablespaces (incomplete; concept inapplicable to CockroachDB) +4294967095 4294967160 0 pg_timezone_abbrevs was created for compatibility and is currently unimplemented +4294967094 4294967160 0 pg_timezone_names was created for compatibility and is currently unimplemented +4294967093 4294967160 0 pg_transform was created for compatibility and is currently unimplemented +4294967092 4294967160 0 triggers (empty - feature does not exist) +4294967090 4294967160 0 pg_ts_config was created for compatibility and is currently unimplemented +4294967091 4294967160 0 pg_ts_config_map was created for compatibility and is currently unimplemented +4294967089 4294967160 0 pg_ts_dict was created for compatibility and is currently unimplemented +4294967088 4294967160 0 pg_ts_parser was created for compatibility and is currently unimplemented +4294967087 4294967160 0 pg_ts_template was created for compatibility and is currently unimplemented +4294967086 4294967160 0 scalar types (incomplete) +4294967083 4294967160 0 database users +4294967085 4294967160 0 local to remote user mapping (empty - feature does not exist) +4294967084 4294967160 0 pg_user_mappings was created for compatibility and is currently unimplemented +4294967082 4294967160 0 view definitions (incomplete - see also information_schema.views) +4294967080 4294967160 0 Shows all defined geography columns. Matches PostGIS' geography_columns functionality. +4294967079 4294967160 0 Shows all defined geometry columns. Matches PostGIS' geometry_columns functionality. +4294967078 4294967160 0 Shows all defined Spatial Reference Identifiers (SRIDs). Matches PostGIS' spatial_ref_sys table. ## pg_catalog.pg_shdescription @@ -4470,7 +4476,7 @@ indoption query TTI SELECT database_name, descriptor_name, descriptor_id from test.crdb_internal.create_statements where descriptor_name = 'pg_views' ---- -test pg_views 4294967083 +test pg_views 4294967082 # Verify INCLUDED columns appear in pg_index. See issue #59563 statement ok diff --git a/pkg/sql/logictest/testdata/logic_test/table b/pkg/sql/logictest/testdata/logic_test/table index 6d1e20732a2f..29a9cff86ee0 100644 --- a/pkg/sql/logictest/testdata/logic_test/table +++ b/pkg/sql/logictest/testdata/logic_test/table @@ -552,6 +552,7 @@ cluster_contended_tables NULL cluster_contention_events NULL cluster_database_privileges NULL cluster_distsql_flows NULL +cluster_inflight_traces NULL cluster_queries NULL cluster_sessions NULL cluster_settings NULL diff --git a/pkg/sql/schema_change_plan_node.go b/pkg/sql/schema_change_plan_node.go index 2a0d21ea38e1..d119a5740cac 100644 --- a/pkg/sql/schema_change_plan_node.go +++ b/pkg/sql/schema_change_plan_node.go @@ -46,7 +46,7 @@ func (p *planner) SchemaChange(ctx context.Context, stmt tree.Statement) (planNo Descs: p.Descriptors(), AuthAccessor: p, } - outputNodes, err := scbuild.Build(ctx, stmt, buildDeps, p.extendedEvalCtx.SchemaChangerState.nodes) + outputNodes, err := scbuild.Build(ctx, buildDeps, p.extendedEvalCtx.SchemaChangerState.state, stmt) if scbuild.HasNotImplemented(err) && mode == sessiondata.UseNewSchemaChangerOn { return nil, false, nil } @@ -114,9 +114,7 @@ type schemaChangePlanNode struct { // plannedState contains the set of states produced by the builder combining // the nodes that existed preceding the current statement with the output of // the built current statement. - // - // TODO(ajwerner): Give this a better name. - plannedState []*scpb.Node + plannedState scpb.State } func (s *schemaChangePlanNode) startExec(params runParams) error { @@ -131,7 +129,7 @@ func (s *schemaChangePlanNode) startExec(params runParams) error { if err != nil { return err } - scs.nodes = after + scs.state = after return nil } diff --git a/pkg/sql/schema_changer_state.go b/pkg/sql/schema_changer_state.go index 6a93da2345d2..9250dc906d7d 100644 --- a/pkg/sql/schema_changer_state.go +++ b/pkg/sql/schema_changer_state.go @@ -18,7 +18,7 @@ import ( // SchemaChangerState is state associated with the new schema changer. type SchemaChangerState struct { mode sessiondata.NewSchemaChangerMode - nodes []*scpb.Node + state scpb.State // stmts contains the SQL statements involved in the schema change. This is // the bare minimum of statement information we need for testing, but in the // future we may want sql.Statement or something. diff --git a/pkg/sql/schemachanger/scbuild/BUILD.bazel b/pkg/sql/schemachanger/scbuild/BUILD.bazel index c8780dd01ab9..81eaff9fb399 100644 --- a/pkg/sql/schemachanger/scbuild/BUILD.bazel +++ b/pkg/sql/schemachanger/scbuild/BUILD.bazel @@ -35,6 +35,7 @@ go_library( "//pkg/sql/sqltelemetry", "//pkg/sql/types", "//pkg/util/errorutil/unimplemented", + "//pkg/util/protoutil", "//pkg/util/sequence", "@com_github_cockroachdb_errors//:errors", "@com_github_lib_pq//oid", diff --git a/pkg/sql/schemachanger/scbuild/builder.go b/pkg/sql/schemachanger/scbuild/builder.go index ea3e9334faa0..fee74e7fb9cc 100644 --- a/pkg/sql/schemachanger/scbuild/builder.go +++ b/pkg/sql/schemachanger/scbuild/builder.go @@ -22,6 +22,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/privilege" "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" + "github.com/cockroachdb/cockroach/pkg/util/protoutil" "github.com/cockroachdb/errors" ) @@ -61,9 +62,9 @@ type Dependencies struct { type buildContext struct { Dependencies - // outputNodes contains the internal state when building targets for an individual + // output contains the internal state when building targets for an individual // statement. - outputNodes []*scpb.Node + output scpb.State } type notImplementedError struct { @@ -110,28 +111,31 @@ func (e *ConcurrentSchemaChangeError) DescriptorID() descpb.ID { return e.descID } -// Build builds targets and transforms the provided schema change nodes -// accordingly, given a statement. +// Build constructs a new set state from an initial state and a statement. func Build( - ctx context.Context, n tree.Statement, dependencies Dependencies, initialNodes []*scpb.Node, -) (outputNodes []*scpb.Node, err error) { + ctx context.Context, dependencies Dependencies, initial scpb.State, n tree.Statement, +) (built scpb.State, err error) { buildContext := &buildContext{ Dependencies: dependencies, - outputNodes: initialNodes, + output: cloneState(initial), } return buildContext.build(ctx, n) } +func cloneState(state scpb.State) scpb.State { + clone := make(scpb.State, len(state)) + for i, n := range state { + clone[i] = &scpb.Node{ + Target: protoutil.Clone(n.Target).(*scpb.Target), + Status: n.Status, + } + } + return clone +} + // build builds targets and transforms the provided schema change nodes // accordingly, given a statement. -// -// TODO(ajwerner): Clarify whether the nodes will be mutated. Potentially just -// clone them defensively here. Similarly, close the statement as some schema -// changes mutate the AST. It's best if this method had a clear contract that -// it did not mutate its arguments. -func (b *buildContext) build( - ctx context.Context, n tree.Statement, -) (outputNodes []*scpb.Node, err error) { +func (b *buildContext) build(ctx context.Context, n tree.Statement) (output scpb.State, err error) { defer func() { if recErr := recover(); recErr != nil { if errObj, ok := recErr.(error); ok { @@ -159,7 +163,7 @@ func (b *buildContext) build( default: return nil, ¬ImplementedError{n: n} } - return b.outputNodes, nil + return b.output, nil } // checkIfNodeExists checks if an existing node is already there, @@ -169,7 +173,7 @@ func (b *buildContext) checkIfNodeExists( ) (exists bool, index int) { // Check if any existing node matches the new node we are // trying to add. - for idx, node := range b.outputNodes { + for idx, node := range b.output { if scpb.EqualElements(node.Element(), elem) { return true, idx } @@ -178,12 +182,12 @@ func (b *buildContext) checkIfNodeExists( } func (b *buildContext) addNode(dir scpb.Target_Direction, elem scpb.Element) { - var s scpb.State + var s scpb.Status switch dir { case scpb.Target_ADD: - s = scpb.State_ABSENT + s = scpb.Status_ABSENT case scpb.Target_DROP: - s = scpb.State_PUBLIC + s = scpb.Status_PUBLIC default: panic(errors.Errorf("unknown direction %s", dir)) } @@ -191,9 +195,9 @@ func (b *buildContext) addNode(dir scpb.Target_Direction, elem scpb.Element) { if exists, _ := b.checkIfNodeExists(dir, elem); exists { panic(errors.Errorf("attempted to add duplicate element %s", elem)) } - b.outputNodes = append(b.outputNodes, &scpb.Node{ + b.output = append(b.output, &scpb.Node{ Target: scpb.NewTarget(dir, elem), - State: s, + Status: s, }) } diff --git a/pkg/sql/schemachanger/scbuild/builder_test.go b/pkg/sql/schemachanger/scbuild/builder_test.go index 3cb06e1cddc3..577df1db2c56 100644 --- a/pkg/sql/schemachanger/scbuild/builder_test.go +++ b/pkg/sql/schemachanger/scbuild/builder_test.go @@ -94,9 +94,9 @@ func TestBuilderAlterTable(t *testing.T) { stmts, err := parser.Parse(d.Input) require.NoError(t, err) - var outputNodes []*scpb.Node + var outputNodes scpb.State for i := range stmts { - outputNodes, err = scbuild.Build(ctx, stmts[i].AST, *deps, outputNodes) + outputNodes, err = scbuild.Build(ctx, *deps, outputNodes, stmts[i].AST) require.NoError(t, err) } @@ -112,7 +112,7 @@ func TestBuilderAlterTable(t *testing.T) { stmt := stmts[0] alter, ok := stmt.AST.(*tree.AlterTable) require.Truef(t, ok, "not an ALTER TABLE statement: %s", stmt.SQL) - _, err = scbuild.Build(ctx, alter, *deps, nil) + _, err = scbuild.Build(ctx, *deps, nil, alter) require.Truef(t, scbuild.HasNotImplemented(err), "expected unimplemented, got %v", err) return "" @@ -138,8 +138,8 @@ func indentText(input string, tab string) string { return result.String() } -// marshalNodes marshals a []*scpb.Node to YAML. -func marshalNodes(t *testing.T, nodes []*scpb.Node) string { +// marshalNodes marshals a scpb.State to YAML. +func marshalNodes(t *testing.T, nodes scpb.State) string { var sortedEntries []string for _, node := range nodes { var buf bytes.Buffer @@ -152,7 +152,7 @@ func marshalNodes(t *testing.T, nodes []*scpb.Node) string { entry.WriteString(" ") scpb.FormatAttributes(node.Element(), &entry) entry.WriteString("\n") - entry.WriteString(indentText(fmt.Sprintf("state: %s\n", node.State.String()), " ")) + entry.WriteString(indentText(fmt.Sprintf("state: %s\n", node.Status.String()), " ")) entry.WriteString(indentText("details:\n", " ")) out, err := yaml.Marshal(target) require.NoError(t, err) diff --git a/pkg/sql/schemachanger/scbuild/table.go b/pkg/sql/schemachanger/scbuild/table.go index 6a28bd1d52af..eb93866d8687 100644 --- a/pkg/sql/schemachanger/scbuild/table.go +++ b/pkg/sql/schemachanger/scbuild/table.go @@ -210,7 +210,7 @@ func (b *buildContext) validateColumnName( } panic(sqlerrors.NewColumnAlreadyExistsError(string(d.Name), table.GetName())) } - for _, n := range b.outputNodes { + for _, n := range b.output { switch t := n.Element().(type) { case *scpb.Column: if t.TableID != table.GetID() || t.Column.Name != string(d.Name) { @@ -251,7 +251,7 @@ func (b *buildContext) findOrAddColumnFamily( // TODO(ajwerner): Decide what to do if the only column in a family of this // name is being dropped and then if there is or isn't a create directive. nextFamilyID := table.GetNextFamilyID() - for _, n := range b.outputNodes { + for _, n := range b.output { switch col := n.Element().(type) { case *scpb.Column: if col.TableID != table.GetID() { @@ -293,7 +293,7 @@ func (b *buildContext) alterTableDropColumn( panic(err) } // Check whether the column is being dropped. - for _, n := range b.outputNodes { + for _, n := range b.output { switch col := n.Element().(type) { case *scpb.Column: if col.TableID != table.GetID() || @@ -423,9 +423,9 @@ func (b *buildContext) addOrUpdatePrimaryIndexTargetsForAddColumn( ) (idxID descpb.IndexID) { // Check whether a target to add a PK already exists. If so, update its // storing columns. - for i, n := range b.outputNodes { + for i, n := range b.output { if t, ok := n.Element().(*scpb.PrimaryIndex); ok && - b.outputNodes[i].Target.Direction == scpb.Target_ADD && + b.output[i].Target.Direction == scpb.Target_ADD && t.TableID == table.GetID() { t.Index.StoreColumnIDs = append(t.Index.StoreColumnIDs, colID) t.Index.StoreColumnNames = append(t.Index.StoreColumnNames, colName) @@ -475,7 +475,7 @@ func (b *buildContext) addOrUpdatePrimaryIndexTargetsForDropColumn( ) (idxID descpb.IndexID) { // Check whether a target to add a PK already exists. If so, update its // storing columns. - for _, n := range b.outputNodes { + for _, n := range b.output { if t, ok := n.Element().(*scpb.PrimaryIndex); ok && n.Target.Direction == scpb.Target_ADD && t.TableID == table.GetID() { @@ -542,7 +542,7 @@ func (b *buildContext) nextColumnID(table catalog.TableDescriptor) descpb.Column nextColID := table.GetNextColumnID() var maxColID descpb.ColumnID - for _, n := range b.outputNodes { + for _, n := range b.output { if n.Target.Direction != scpb.Target_ADD || scpb.GetDescID(n.Element()) != table.GetID() { continue } @@ -561,7 +561,7 @@ func (b *buildContext) nextColumnID(table catalog.TableDescriptor) descpb.Column func (b *buildContext) nextIndexID(table catalog.TableDescriptor) descpb.IndexID { nextMaxID := table.GetNextIndexID() var maxIdxID descpb.IndexID - for _, n := range b.outputNodes { + for _, n := range b.output { if n.Target.Direction != scpb.Target_ADD || scpb.GetDescID(n.Element()) != table.GetID() { continue } diff --git a/pkg/sql/schemachanger/scbuild/testdata/drop_database b/pkg/sql/schemachanger/scbuild/testdata/drop_database index 0aa1db7610bf..fc643dad08d3 100644 --- a/pkg/sql/schemachanger/scbuild/testdata/drop_database +++ b/pkg/sql/schemachanger/scbuild/testdata/drop_database @@ -93,12 +93,12 @@ DROP DATABASE db1 CASCADE tableId: 57 usesSequenceIDs: - 54 -- DROP RelationDependedOnBy:{DescID: 54, DepID: 57} +- DROP RelationDependedOnBy:{DescID: 54, ReferencedDescID: 57} state: PUBLIC details: dependedOn: 57 tableId: 54 -- DROP RelationDependedOnBy:{DescID: 55, DepID: 56} +- DROP RelationDependedOnBy:{DescID: 55, ReferencedDescID: 56} state: PUBLIC details: dependedOn: 56 @@ -141,12 +141,12 @@ DROP DATABASE db1 CASCADE state: PUBLIC details: typeId: 63 -- DROP TypeReference:{DescID: 64, DepID: 62} +- DROP TypeReference:{DescID: 64, ReferencedDescID: 62} state: PUBLIC details: descriptorId: 64 typeId: 62 -- DROP TypeReference:{DescID: 64, DepID: 63} +- DROP TypeReference:{DescID: 64, ReferencedDescID: 63} state: PUBLIC details: descriptorId: 64 diff --git a/pkg/sql/schemachanger/scbuild/testdata/drop_schema b/pkg/sql/schemachanger/scbuild/testdata/drop_schema index 3029fbe41093..ad8630a94e19 100644 --- a/pkg/sql/schemachanger/scbuild/testdata/drop_schema +++ b/pkg/sql/schemachanger/scbuild/testdata/drop_schema @@ -62,7 +62,7 @@ DROP SCHEMA defaultdb.SC1 CASCADE tableId: 55 usesSequenceIDs: - 54 -- DROP RelationDependedOnBy:{DescID: 54, DepID: 55} +- DROP RelationDependedOnBy:{DescID: 54, ReferencedDescID: 55} state: PUBLIC details: dependedOn: 55 @@ -97,22 +97,22 @@ DROP SCHEMA defaultdb.SC1 CASCADE state: PUBLIC details: typeId: 61 -- DROP TypeReference:{DescID: 62, DepID: 60} +- DROP TypeReference:{DescID: 62, ReferencedDescID: 60} state: PUBLIC details: descriptorId: 62 typeId: 60 -- DROP TypeReference:{DescID: 62, DepID: 61} +- DROP TypeReference:{DescID: 62, ReferencedDescID: 61} state: PUBLIC details: descriptorId: 62 typeId: 61 -- DROP TypeReference:{DescID: 63, DepID: 60} +- DROP TypeReference:{DescID: 63, ReferencedDescID: 60} state: PUBLIC details: descriptorId: 63 typeId: 60 -- DROP TypeReference:{DescID: 63, DepID: 61} +- DROP TypeReference:{DescID: 63, ReferencedDescID: 61} state: PUBLIC details: descriptorId: 63 diff --git a/pkg/sql/schemachanger/scbuild/testdata/drop_sequence b/pkg/sql/schemachanger/scbuild/testdata/drop_sequence index 315aefa7cb7b..cb576d32523d 100644 --- a/pkg/sql/schemachanger/scbuild/testdata/drop_sequence +++ b/pkg/sql/schemachanger/scbuild/testdata/drop_sequence @@ -54,7 +54,7 @@ DROP SEQUENCE defaultdb.SQ1 CASCADE state: PUBLIC details: sequenceId: 52 -- DROP TypeReference:{DescID: 57, DepID: 55} +- DROP TypeReference:{DescID: 57, ReferencedDescID: 55} state: PUBLIC details: descriptorId: 57 diff --git a/pkg/sql/schemachanger/scbuild/testdata/drop_table b/pkg/sql/schemachanger/scbuild/testdata/drop_table index ac7ea4135cd3..5cd3e25fc3a3 100644 --- a/pkg/sql/schemachanger/scbuild/testdata/drop_table +++ b/pkg/sql/schemachanger/scbuild/testdata/drop_table @@ -77,7 +77,7 @@ DROP TABLE defaultdb.shipments CASCADE; details: columnId: 6 tableId: 57 -- DROP InboundForeignKey:{DescID: 52, DepID: 57, ElementName: "fk_customers"} +- DROP InboundForeignKey:{DescID: 52, ReferencedDescID: 57, ElementName: "fk_customers"} state: PUBLIC details: name: fk_customers @@ -87,7 +87,7 @@ DROP TABLE defaultdb.shipments CASCADE; referenceColumns: - 4 referenceId: 57 -- DROP InboundForeignKey:{DescID: 53, DepID: 57, ElementName: "fk_orders"} +- DROP InboundForeignKey:{DescID: 53, ReferencedDescID: 57, ElementName: "fk_orders"} state: PUBLIC details: name: fk_orders @@ -97,7 +97,7 @@ DROP TABLE defaultdb.shipments CASCADE; referenceColumns: - 4 referenceId: 57 -- DROP OutboundForeignKey:{DescID: 57, DepID: 52, ElementName: "fk_customers"} +- DROP OutboundForeignKey:{DescID: 57, ReferencedDescID: 52, ElementName: "fk_customers"} state: PUBLIC details: name: fk_customers @@ -107,7 +107,7 @@ DROP TABLE defaultdb.shipments CASCADE; referenceColumns: - 1 referenceId: 52 -- DROP OutboundForeignKey:{DescID: 57, DepID: 53, ElementName: "fk_orders"} +- DROP OutboundForeignKey:{DescID: 57, ReferencedDescID: 53, ElementName: "fk_orders"} state: PUBLIC details: name: fk_orders @@ -117,7 +117,7 @@ DROP TABLE defaultdb.shipments CASCADE; referenceColumns: - 2 referenceId: 53 -- DROP RelationDependedOnBy:{DescID: 54, DepID: 57} +- DROP RelationDependedOnBy:{DescID: 54, ReferencedDescID: 57} state: PUBLIC details: dependedOn: 57 @@ -126,7 +126,7 @@ DROP TABLE defaultdb.shipments CASCADE; state: PUBLIC details: sequenceId: 58 -- DROP SequenceOwnedBy:{DescID: 58, DepID: 57} +- DROP SequenceOwnedBy:{DescID: 58, ReferencedDescID: 57} state: PUBLIC details: ownerTableId: 57 @@ -135,12 +135,12 @@ DROP TABLE defaultdb.shipments CASCADE; state: PUBLIC details: tableId: 57 -- DROP TypeReference:{DescID: 57, DepID: 55} +- DROP TypeReference:{DescID: 57, ReferencedDescID: 55} state: PUBLIC details: descriptorId: 57 typeId: 55 -- DROP TypeReference:{DescID: 57, DepID: 56} +- DROP TypeReference:{DescID: 57, ReferencedDescID: 56} state: PUBLIC details: descriptorId: 57 diff --git a/pkg/sql/schemachanger/scbuild/testdata/drop_view b/pkg/sql/schemachanger/scbuild/testdata/drop_view index 8ba748f9da97..1bbdce97f563 100644 --- a/pkg/sql/schemachanger/scbuild/testdata/drop_view +++ b/pkg/sql/schemachanger/scbuild/testdata/drop_view @@ -40,12 +40,12 @@ CREATE VIEW v5 AS (SELECT 'a'::defaultdb.typ::string AS k, n2, n1 from defaultdb build DROP VIEW defaultdb.v1 CASCADE ---- -- DROP TypeReference:{DescID: 59, DepID: 57} +- DROP TypeReference:{DescID: 59, ReferencedDescID: 57} state: PUBLIC details: descriptorId: 59 typeId: 57 -- DROP TypeReference:{DescID: 59, DepID: 58} +- DROP TypeReference:{DescID: 59, ReferencedDescID: 58} state: PUBLIC details: descriptorId: 59 diff --git a/pkg/sql/schemachanger/scexec/executor_external_test.go b/pkg/sql/schemachanger/scexec/executor_external_test.go index e55608e9d770..bf98abcc4c4f 100644 --- a/pkg/sql/schemachanger/scexec/executor_external_test.go +++ b/pkg/sql/schemachanger/scexec/executor_external_test.go @@ -219,7 +219,7 @@ func TestSchemaChanger(t *testing.T) { ti.tsql.Exec(t, `CREATE DATABASE db`) ti.tsql.Exec(t, `CREATE TABLE db.foo (i INT PRIMARY KEY)`) - var ts []*scpb.Node + var ts scpb.State var targetSlice []*scpb.Target require.NoError(t, ti.txn(ctx, func( ctx context.Context, txn *kv.Txn, descriptors *descs.Collection, @@ -277,18 +277,18 @@ func TestSchemaChanger(t *testing.T) { }), } - targetStates := []*scpb.Node{ + nodes := scpb.State{ { Target: targetSlice[0], - State: scpb.State_ABSENT, + Status: scpb.Status_ABSENT, }, { Target: targetSlice[1], - State: scpb.State_ABSENT, + Status: scpb.Status_ABSENT, }, { Target: targetSlice[2], - State: scpb.State_PUBLIC, + Status: scpb.Status_PUBLIC, }, } @@ -296,7 +296,7 @@ func TestSchemaChanger(t *testing.T) { scplan.StatementPhase, scplan.PreCommitPhase, } { - sc, err := scplan.MakePlan(targetStates, scplan.Params{ + sc, err := scplan.MakePlan(nodes, scplan.Params{ ExecutionPhase: phase, }) require.NoError(t, err) @@ -318,7 +318,7 @@ func TestSchemaChanger(t *testing.T) { } return nil })) - var after []*scpb.Node + var after scpb.State require.NoError(t, ti.txn(ctx, func( ctx context.Context, txn *kv.Txn, descriptors *descs.Collection, ) error { @@ -333,18 +333,18 @@ func TestSchemaChanger(t *testing.T) { } return nil })) - require.Equal(t, []*scpb.Node{ + require.Equal(t, scpb.State{ { Target: targetSlice[0], - State: scpb.State_PUBLIC, + Status: scpb.Status_PUBLIC, }, { Target: targetSlice[1], - State: scpb.State_PUBLIC, + Status: scpb.Status_PUBLIC, }, { Target: targetSlice[2], - State: scpb.State_ABSENT, + Status: scpb.Status_ABSENT, }, }, after) ti.tsql.Exec(t, "INSERT INTO db.foo VALUES (1, 1)") @@ -355,7 +355,7 @@ func TestSchemaChanger(t *testing.T) { ti.tsql.Exec(t, `CREATE DATABASE db`) ti.tsql.Exec(t, `CREATE TABLE db.foo (i INT PRIMARY KEY)`) - var ts []*scpb.Node + var ts scpb.State require.NoError(t, ti.txn(ctx, func( ctx context.Context, txn *kv.Txn, descriptors *descs.Collection, ) (err error) { @@ -385,7 +385,7 @@ func TestSchemaChanger(t *testing.T) { parsed, err := parser.Parse("ALTER TABLE db.foo ADD COLUMN j INT") require.NoError(t, err) require.Len(t, parsed, 1) - outputNodes, err := scbuild.Build(ctx, parsed[0].AST.(*tree.AlterTable), buildDeps, nil) + outputNodes, err := scbuild.Build(ctx, buildDeps, nil, parsed[0].AST.(*tree.AlterTable)) require.NoError(t, err) for _, phase := range []scplan.Phase{ diff --git a/pkg/sql/schemachanger/scgraph/graph.go b/pkg/sql/schemachanger/scgraph/graph.go index a376d709a99e..7633222340d3 100644 --- a/pkg/sql/schemachanger/scgraph/graph.go +++ b/pkg/sql/schemachanger/scgraph/graph.go @@ -18,15 +18,15 @@ import ( // Graph is a graph whose nodes are *scpb.Nodes. Graphs are constructed during // schema change planning. Edges in the graph represent dependencies between -// nodes, either due to the sequencing of states for a single target or due to -// inter-target dependencies between states. +// nodes, either due to the sequencing of statuses for a single target or due to +// inter-target dependencies between statuses. type Graph struct { // Targets is an interned slice of targets. targets []*scpb.Target // Interns the Node so that pointer equality can be used. - targetNodes []map[scpb.State]*scpb.Node + targetNodes []map[scpb.Status]*scpb.Node // Maps a target to its index in targetNodes. targetIdxMap map[*scpb.Target]int @@ -36,8 +36,8 @@ type Graph struct { nodeOpEdges map[*scpb.Node]*OpEdge // nodeDepEdges maps a Node to its dependencies. - // A Node dependency is another target state which must be - // reached before or concurrently with this targetState. + // A Node dependency is another target node which must be + // reached before or concurrently with this node. nodeDepEdges map[*scpb.Node][]*DepEdge // opToNode maps from an operation back to the @@ -49,50 +49,50 @@ type Graph struct { // New constructs a new Graph. All initial nodes ought to correspond to distinct // targets. If they do not, an error will be returned. -func New(initialNodes []*scpb.Node) (*Graph, error) { +func New(initial scpb.State) (*Graph, error) { g := Graph{ targetIdxMap: map[*scpb.Target]int{}, nodeOpEdges: map[*scpb.Node]*OpEdge{}, nodeDepEdges: map[*scpb.Node][]*DepEdge{}, opToNode: map[scop.Op]*scpb.Node{}, } - for _, n := range initialNodes { + for _, n := range initial { if existing, ok := g.targetIdxMap[n.Target]; ok { - return nil, errors.Errorf("invalid initial states contains duplicate target: %v and %v", n, initialNodes[existing]) + return nil, errors.Errorf("invalid initial state contains duplicate target: %v and %v", n, initial[existing]) } idx := len(g.targets) g.targetIdxMap[n.Target] = idx g.targets = append(g.targets, n.Target) - g.targetNodes = append(g.targetNodes, map[scpb.State]*scpb.Node{ - n.State: n, + g.targetNodes = append(g.targetNodes, map[scpb.Status]*scpb.Node{ + n.Status: n, }) } return &g, nil } -func (g *Graph) getNode(t *scpb.Target, s scpb.State) (*scpb.Node, bool) { - targetStates := g.getTargetStatesMap(t) - ts, ok := targetStates[s] +func (g *Graph) getNode(t *scpb.Target, s scpb.Status) (*scpb.Node, bool) { + targetStatuses := g.getTargetStatusMap(t) + ts, ok := targetStatuses[s] return ts, ok } // Suppress the linter. var _ = (*Graph)(nil).getNode -func (g *Graph) getOrCreateNode(t *scpb.Target, s scpb.State) *scpb.Node { - targetStates := g.getTargetStatesMap(t) - if ts, ok := targetStates[s]; ok { +func (g *Graph) getOrCreateNode(t *scpb.Target, s scpb.Status) *scpb.Node { + targetStatuses := g.getTargetStatusMap(t) + if ts, ok := targetStatuses[s]; ok { return ts } ts := &scpb.Node{ Target: t, - State: s, + Status: s, } - targetStates[s] = ts + targetStatuses[s] = ts return ts } -func (g *Graph) getTargetStatesMap(target *scpb.Target) map[scpb.State]*scpb.Node { +func (g *Graph) getTargetStatusMap(target *scpb.Target) map[scpb.Status]*scpb.Node { idx, ok := g.targetIdxMap[target] if !ok { panic(errors.Errorf("target %v does not exist", target)) @@ -122,8 +122,8 @@ func (g *Graph) GetDepEdgesFrom(n *scpb.Node) ([]*DepEdge, bool) { return de, ok } -// AddOpEdges adds an op edges connecting the nodes for two states of a target. -func (g *Graph) AddOpEdges(t *scpb.Target, from, to scpb.State, revertible bool, ops ...scop.Op) { +// AddOpEdges adds an op edges connecting the nodes for two statuses of a target. +func (g *Graph) AddOpEdges(t *scpb.Target, from, to scpb.Status, revertible bool, ops ...scop.Op) { oe := &OpEdge{ from: g.getOrCreateNode(t, from), to: g.getOrCreateNode(t, to), @@ -148,19 +148,19 @@ func (g *Graph) GetNodeFromOp(op scop.Op) *scpb.Node { } // AddDepEdge adds a dep edge connecting two nodes (specified by their targets -// and states). +// and statuses). func (g *Graph) AddDepEdge( - fromTarget *scpb.Target, fromState scpb.State, toTarget *scpb.Target, toState scpb.State, + fromTarget *scpb.Target, fromStatus scpb.Status, toTarget *scpb.Target, toStatus scpb.Status, ) { de := &DepEdge{ - from: g.getOrCreateNode(fromTarget, fromState), - to: g.getOrCreateNode(toTarget, toState), + from: g.getOrCreateNode(fromTarget, fromStatus), + to: g.getOrCreateNode(toTarget, toStatus), } g.edges = append(g.edges, de) g.nodeDepEdges[de.from] = append(g.nodeDepEdges[de.from], de) } -// Edge represents a relationship between two TargetStates. +// Edge represents a relationship between two Nodes. // // TODO(ajwerner): Consider hiding Node pointers behind an interface to clarify // mutability. @@ -188,8 +188,8 @@ func (oe *OpEdge) Op() []scop.Op { return oe.op } // Revertible returns if the dependency edge is revertible func (oe *OpEdge) Revertible() bool { return oe.revertible } -// DepEdge represents a dependency between two target states. A dependency -// implies that the To() state cannot be reached before the From() state. It +// DepEdge represents a dependency between two nodes. A dependency +// implies that the To() node cannot be reached before the From() node. It // can be reached concurrently. type DepEdge struct { from, to *scpb.Node diff --git a/pkg/sql/schemachanger/scgraph/iteration.go b/pkg/sql/schemachanger/scgraph/iteration.go index 7f90a36de070..511c165fbabc 100644 --- a/pkg/sql/schemachanger/scgraph/iteration.go +++ b/pkg/sql/schemachanger/scgraph/iteration.go @@ -39,8 +39,8 @@ type NodeIterator func(n *scpb.Node) error // ForEachNode iterates the nodes in the graph. func (g *Graph) ForEachNode(it NodeIterator) error { for _, m := range g.targetNodes { - for i := 0; i < scpb.NumStates; i++ { - if ts, ok := m[scpb.State(i)]; ok { + for i := 0; i < scpb.NumStatus; i++ { + if ts, ok := m[scpb.Status(i)]; ok { if err := it(ts); err != nil { if iterutil.Done(err) { err = nil diff --git a/pkg/sql/schemachanger/scgraphviz/graphviz.go b/pkg/sql/schemachanger/scgraphviz/graphviz.go index f4af57cc9d2a..ec2584f1ac3f 100644 --- a/pkg/sql/schemachanger/scgraphviz/graphviz.go +++ b/pkg/sql/schemachanger/scgraphviz/graphviz.go @@ -51,8 +51,8 @@ func drawStages(p *scplan.Plan) (*dot.Graph, error) { dg := dot.NewGraph() stagesSubgraph := dg.Subgraph("stages", dot.ClusterOption{}) targetsSubgraph := stagesSubgraph.Subgraph("targets", dot.ClusterOption{}) - targetNodes := make(map[*scpb.Target]dot.Node, len(p.InitialNodes)) - for idx, n := range p.InitialNodes { + targetNodes := make(map[*scpb.Target]dot.Node, len(p.Initial)) + for idx, n := range p.Initial { t := n.Target tn := targetsSubgraph.Node(strconv.Itoa(idx)) tn.Attr("label", htmlLabel(t.Element())) @@ -61,12 +61,12 @@ func drawStages(p *scplan.Plan) (*dot.Graph, error) { targetNodes[t] = tn } - // Want to draw an edge to the initial target states with some dots + // Want to draw an edge to the initial target statuses with some dots // or something. - curNodes := make([]dot.Node, len(p.InitialNodes)) - cur := p.InitialNodes - for i, n := range p.InitialNodes { - label := targetStateID(i, n.State) + curNodes := make([]dot.Node, len(p.Initial)) + cur := p.Initial + for i, n := range p.Initial { + label := targetStatusID(i, n.Status) tsn := stagesSubgraph.Node(fmt.Sprintf("initial %d", i)) tsn.Attr("label", label) tn := targetNodes[n.Target] @@ -82,7 +82,7 @@ func drawStages(p *scplan.Plan) (*dot.Graph, error) { nextNodes := make([]dot.Node, len(curNodes)) for i, st := range next { cst := sg.Node(fmt.Sprintf("stage %d: %d", id, i)) - cst.Attr("label", targetStateID(i, st.State)) + cst.Attr("label", targetStatusID(i, st.Status)) if st != cur[i] { ge := curNodes[i].Edge(cst) oe, ok := p.Graph.GetOpEdgeFrom(cur[i]) @@ -107,9 +107,9 @@ func drawDeps(p *scplan.Plan) (*dot.Graph, error) { depsSubgraph := dg.Subgraph("deps", dot.ClusterOption{}) targetsSubgraph := depsSubgraph.Subgraph("targets", dot.ClusterOption{}) - targetNodes := make(map[*scpb.Target]dot.Node, len(p.InitialNodes)) + targetNodes := make(map[*scpb.Target]dot.Node, len(p.Initial)) targetIdxMap := make(map[*scpb.Target]int) - for idx, n := range p.InitialNodes { + for idx, n := range p.Initial { t := n.Target tn := targetsSubgraph.Node(strconv.Itoa(idx)) tn.Attr("label", htmlLabel(t.Element())) @@ -121,11 +121,11 @@ func drawDeps(p *scplan.Plan) (*dot.Graph, error) { nodeNodes := make(map[*scpb.Node]dot.Node) _ = p.Graph.ForEachNode(func(n *scpb.Node) error { - nodeNodes[n] = depsSubgraph.Node(targetStateID(targetIdxMap[n.Target], n.State)) + nodeNodes[n] = depsSubgraph.Node(targetStatusID(targetIdxMap[n.Target], n.Status)) return nil }) - for _, n := range p.InitialNodes { + for _, n := range p.Initial { nn := nodeNodes[n] tn := targetNodes[n.Target] e := tn.Edge(nn) @@ -149,8 +149,8 @@ func drawDeps(p *scplan.Plan) (*dot.Graph, error) { return dg, nil } -func targetStateID(targetID int, state scpb.State) string { - return fmt.Sprintf("%d:%s", targetID, state) +func targetStatusID(targetID int, status scpb.Status) string { + return fmt.Sprintf("%d:%s", targetID, status) } func htmlLabel(o interface{}) dot.HTML { diff --git a/pkg/sql/schemachanger/scjob/job.go b/pkg/sql/schemachanger/scjob/job.go index d5aad0f70b0c..fa9a4e18572d 100644 --- a/pkg/sql/schemachanger/scjob/job.go +++ b/pkg/sql/schemachanger/scjob/job.go @@ -95,7 +95,7 @@ func (n *newSchemaChangeResumer) Resume(ctx context.Context, execCtxI interface{ lm := execCtx.LeaseMgr() db := lm.DB() ie := execCtx.ExtendedEvalContext().InternalExecutor.(sqlutil.InternalExecutor) - sc, err := scplan.MakePlan(makeTargetStates(ctx, settings, n.targets, states), scplan.Params{ + sc, err := scplan.MakePlan(makeState(ctx, settings, n.targets, states), scplan.Params{ ExecutionPhase: scplan.PostCommitPhase, }) if err != nil { @@ -132,7 +132,7 @@ func (n *newSchemaChangeResumer) Resume(ctx context.Context, execCtxI interface{ } return n.job.Update(ctx, txn, func(txn *kv.Txn, md jobs.JobMetadata, ju *jobs.JobUpdater) error { pg := md.Progress.GetNewSchemaChange() - pg.States = makeStates(s.After) + pg.States = makeStatuses(s.After) ju.UpdateProgress(md.Progress) return nil }) @@ -166,26 +166,26 @@ func (n *newSchemaChangeResumer) Resume(ctx context.Context, execCtxI interface{ return nil } -func makeStates(next []*scpb.Node) []scpb.State { - states := make([]scpb.State, len(next)) +func makeStatuses(next scpb.State) []scpb.Status { + states := make([]scpb.Status, len(next)) for i := range next { - states[i] = next[i].State + states[i] = next[i].Status } return states } -func makeTargetStates( - ctx context.Context, sv *cluster.Settings, protos []*scpb.Target, states []scpb.State, -) []*scpb.Node { +func makeState( + ctx context.Context, sv *cluster.Settings, protos []*scpb.Target, states []scpb.Status, +) scpb.State { if len(protos) != len(states) { logcrash.ReportOrPanic(ctx, &sv.SV, "unexpected slice size mismatch %d and %d", len(protos), len(states)) } - ts := make([]*scpb.Node, len(protos)) + ts := make(scpb.State, len(protos)) for i := range protos { ts[i] = &scpb.Node{ Target: protos[i], - State: states[i], + Status: states[i], } } return ts diff --git a/pkg/sql/schemachanger/scpb/attribute.go b/pkg/sql/schemachanger/scpb/attribute.go index d668f53de3e6..ae0e6344f057 100644 --- a/pkg/sql/schemachanger/scpb/attribute.go +++ b/pkg/sql/schemachanger/scpb/attribute.go @@ -25,17 +25,17 @@ type Attribute int //go:generate stringer -type=Attribute -trimprefix=Attribute const ( - // AttributeType type id of the element + // AttributeType type id of the element. AttributeType Attribute = iota - // AttributeDescID main descriptor ID + // AttributeDescID is the descriptor ID to which this element belongs. AttributeDescID - // AttributeDepID dependent descriptor ID - AttributeDepID - //AttributeColumnID column ID + // AttributeReferencedDescID is the descriptor ID to which this element refers. + AttributeReferencedDescID + //AttributeColumnID is the column ID to which this element corresponds. AttributeColumnID - // AttributeElementName name of the element + // AttributeElementName is the name of the element. AttributeElementName - // AttributeIndexID index ID + // AttributeIndexID is the index ID to which this element corresponds. AttributeIndexID numAttributes int = iota @@ -44,7 +44,7 @@ const ( var attributeOrder = [numAttributes]Attribute{ 0: AttributeType, 1: AttributeDescID, - 2: AttributeDepID, + 2: AttributeReferencedDescID, 3: AttributeColumnID, 4: AttributeElementName, 5: AttributeIndexID, diff --git a/pkg/sql/schemachanger/scpb/attribute_string.go b/pkg/sql/schemachanger/scpb/attribute_string.go index 5cb758b6969f..f46badb52590 100644 --- a/pkg/sql/schemachanger/scpb/attribute_string.go +++ b/pkg/sql/schemachanger/scpb/attribute_string.go @@ -10,15 +10,15 @@ func _() { var x [1]struct{} _ = x[AttributeType-0] _ = x[AttributeDescID-1] - _ = x[AttributeDepID-2] + _ = x[AttributeReferencedDescID-2] _ = x[AttributeColumnID-3] _ = x[AttributeElementName-4] _ = x[AttributeIndexID-5] } -const _Attribute_name = "TypeDescIDDepIDColumnIDElementNameIndexID" +const _Attribute_name = "TypeDescIDReferencedDescIDColumnIDElementNameIndexID" -var _Attribute_index = [...]uint8{0, 4, 10, 15, 23, 34, 41} +var _Attribute_index = [...]uint8{0, 4, 10, 26, 34, 45, 52} func (i Attribute) String() string { if i < 0 || i >= Attribute(len(_Attribute_index)-1) { diff --git a/pkg/sql/schemachanger/scpb/attribute_test.go b/pkg/sql/schemachanger/scpb/attribute_test.go index f73cc5966c10..fd780bc9eb4f 100644 --- a/pkg/sql/schemachanger/scpb/attribute_test.go +++ b/pkg/sql/schemachanger/scpb/attribute_test.go @@ -30,7 +30,7 @@ func TestGetAttribute(t *testing.T) { // Sanity: Validate basic string conversion, equality, // and inequality. - expectedStr := `SequenceDependency:{DescID: 3, DepID: 1, ColumnID: 2}` + expectedStr := `SequenceDependency:{DescID: 3, ReferencedDescID: 1, ColumnID: 2}` require.Equal(t, expectedStr, AttributesString(seqElem), "Attribute string conversion is broken.") require.True(t, EqualElements(seqElem, seqElem)) require.False(t, EqualElements(seqElem, seqElemDiff)) @@ -38,13 +38,13 @@ func TestGetAttribute(t *testing.T) { // Sanity: Validate type references, then check if type comparisons // work. typeBackRef := &TypeReference{DescID: 1, TypeID: 3} - expectedStr = `TypeReference:{DescID: 1, DepID: 3}` + expectedStr = `TypeReference:{DescID: 1, ReferencedDescID: 3}` require.Equal(t, expectedStr, AttributesString(typeBackRef), "Attribute string conversion is broken.") require.False(t, EqualElements(seqElem, typeBackRef)) require.False(t, EqualElements(typeBackRef, seqElem)) // Sanity: Validate attribute fetching for both types. - require.Equal(t, "3", typeBackRef.getAttribute(AttributeDepID).String()) + require.Equal(t, "3", typeBackRef.getAttribute(AttributeReferencedDescID).String()) require.Equal(t, "1", typeBackRef.getAttribute(AttributeDescID).String()) require.Equal(t, "TypeReference", typeBackRef.getAttribute(AttributeType).String()) require.Equal(t, "4", seqElemDiff.getAttribute(AttributeColumnID).String()) diff --git a/pkg/sql/schemachanger/scpb/elements.go b/pkg/sql/schemachanger/scpb/elements.go index 62f03b497470..561f636cba95 100644 --- a/pkg/sql/schemachanger/scpb/elements.go +++ b/pkg/sql/schemachanger/scpb/elements.go @@ -15,13 +15,17 @@ import ( "github.com/cockroachdb/errors" ) -// NumStates is the number of values which State may take on. -var NumStates = len(State_name) +// State represents a current or potential future state of the +// schema change system. +type State []*Node -// Node represents a Target in a given state. +// NumStatus is the number of values which Status may take on. +var NumStatus = len(Status_name) + +// Node represents a Target with a given status. type Node struct { Target *Target - State State + Status Status } // Element returns the target's element. @@ -107,7 +111,7 @@ func (e *SequenceDependency) getAttribute(attr Attribute) attributeValue { return getElementTypeID(e) case AttributeDescID: return (*descID)(&e.SequenceID) - case AttributeDepID: + case AttributeReferencedDescID: return (*descID)(&e.TableID) case AttributeColumnID: return (*columnID)(&e.ColumnID) @@ -183,7 +187,7 @@ func (e *TypeReference) getAttribute(attr Attribute) attributeValue { return getElementTypeID(e) case AttributeDescID: return (*descID)(&e.DescID) - case AttributeDepID: + case AttributeReferencedDescID: return (*descID)(&e.TypeID) default: return nil @@ -207,7 +211,7 @@ func (e *InboundForeignKey) getAttribute(attr Attribute) attributeValue { return getElementTypeID(e) case AttributeDescID: return (*descID)(&e.OriginID) - case AttributeDepID: + case AttributeReferencedDescID: return (*descID)(&e.ReferenceID) case AttributeElementName: return (*elementName)(&e.Name) @@ -222,7 +226,7 @@ func (e *OutboundForeignKey) getAttribute(attr Attribute) attributeValue { return getElementTypeID(e) case AttributeDescID: return (*descID)(&e.OriginID) - case AttributeDepID: + case AttributeReferencedDescID: return (*descID)(&e.ReferenceID) case AttributeElementName: return (*elementName)(&e.Name) @@ -237,7 +241,7 @@ func (e *RelationDependedOnBy) getAttribute(attr Attribute) attributeValue { return getElementTypeID(e) case AttributeDescID: return (*descID)(&e.TableID) - case AttributeDepID: + case AttributeReferencedDescID: return (*descID)(&e.DependedOnBy) default: return nil @@ -250,7 +254,7 @@ func (e *SequenceOwnedBy) getAttribute(attr Attribute) attributeValue { return getElementTypeID(e) case AttributeDescID: return (*descID)(&e.SequenceID) - case AttributeDepID: + case AttributeReferencedDescID: return (*descID)(&e.OwnerTableID) default: return nil diff --git a/pkg/sql/schemachanger/scpb/scpb.pb.go b/pkg/sql/schemachanger/scpb/scpb.pb.go index f2f5a49523e8..7d2614283a8d 100644 --- a/pkg/sql/schemachanger/scpb/scpb.pb.go +++ b/pkg/sql/schemachanger/scpb/scpb.pb.go @@ -25,19 +25,19 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -type State int32 +type Status int32 const ( - State_UNKNOWN State = 0 - State_ABSENT State = 1 - State_DELETE_ONLY State = 2 - State_DELETE_AND_WRITE_ONLY State = 3 - State_BACKFILLED State = 4 - State_VALIDATED State = 5 - State_PUBLIC State = 6 + Status_UNKNOWN Status = 0 + Status_ABSENT Status = 1 + Status_DELETE_ONLY Status = 2 + Status_DELETE_AND_WRITE_ONLY Status = 3 + Status_BACKFILLED Status = 4 + Status_VALIDATED Status = 5 + Status_PUBLIC Status = 6 ) -var State_name = map[int32]string{ +var Status_name = map[int32]string{ 0: "UNKNOWN", 1: "ABSENT", 2: "DELETE_ONLY", @@ -47,7 +47,7 @@ var State_name = map[int32]string{ 6: "PUBLIC", } -var State_value = map[string]int32{ +var Status_value = map[string]int32{ "UNKNOWN": 0, "ABSENT": 1, "DELETE_ONLY": 2, @@ -57,11 +57,11 @@ var State_value = map[string]int32{ "PUBLIC": 6, } -func (x State) String() string { - return proto.EnumName(State_name, int32(x)) +func (x Status) String() string { + return proto.EnumName(Status_name, int32(x)) } -func (State) EnumDescriptor() ([]byte, []int) { +func (Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor_5413c88842564e28, []int{0} } @@ -842,7 +842,7 @@ func (m *Database) XXX_DiscardUnknown() { var xxx_messageInfo_Database proto.InternalMessageInfo func init() { - proto.RegisterEnum("cockroach.sql.schemachanger.scpb.State", State_name, State_value) + proto.RegisterEnum("cockroach.sql.schemachanger.scpb.Status", Status_name, Status_value) proto.RegisterEnum("cockroach.sql.schemachanger.scpb.Target_Direction", Target_Direction_name, Target_Direction_value) proto.RegisterEnum("cockroach.sql.schemachanger.scpb.SequenceDependency_Type", SequenceDependency_Type_name, SequenceDependency_Type_value) proto.RegisterType((*ElementProto)(nil), "cockroach.sql.schemachanger.scpb.ElementProto") @@ -870,113 +870,114 @@ func init() { func init() { proto.RegisterFile("sql/schemachanger/scpb/scpb.proto", fileDescriptor_5413c88842564e28) } var fileDescriptor_5413c88842564e28 = []byte{ - // 1695 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xdf, 0x6f, 0xdb, 0x5e, - 0x15, 0xaf, 0x13, 0x27, 0x4d, 0x4e, 0x92, 0xc6, 0xbd, 0x1b, 0xc8, 0x4c, 0x90, 0x6c, 0x41, 0xda, - 0xa6, 0x21, 0x25, 0xb0, 0x21, 0x24, 0x2a, 0x21, 0xd6, 0xd4, 0xa9, 0x30, 0xed, 0x92, 0xe2, 0xb4, - 0x2b, 0x9b, 0x40, 0x91, 0x63, 0xdf, 0xa5, 0xde, 0x12, 0x3b, 0xb5, 0x9d, 0x75, 0x11, 0x08, 0x9e, - 0x78, 0x65, 0xfc, 0x09, 0x3c, 0xf3, 0xce, 0xff, 0x50, 0x89, 0x97, 0xf2, 0x36, 0x09, 0x29, 0x82, - 0x4c, 0x02, 0x5e, 0x41, 0x02, 0x09, 0x9e, 0xd0, 0xbd, 0xd7, 0xbf, 0xe2, 0x14, 0x25, 0x5a, 0xba, - 0x22, 0xf6, 0xfd, 0xbe, 0x54, 0xce, 0xb1, 0xcf, 0xe7, 0x73, 0xcf, 0xb9, 0xe7, 0xd7, 0xbd, 0x85, - 0x3b, 0xce, 0x69, 0xbf, 0xe6, 0x68, 0x27, 0x78, 0xa0, 0x6a, 0x27, 0xaa, 0xd9, 0xc3, 0x76, 0xcd, - 0xd1, 0x86, 0x5d, 0xfa, 0xa7, 0x3a, 0xb4, 0x2d, 0xd7, 0x42, 0xb7, 0x35, 0x4b, 0x7b, 0x65, 0x5b, - 0xaa, 0x76, 0x52, 0x75, 0x4e, 0xfb, 0xd5, 0x99, 0x8f, 0xab, 0xe4, 0xbb, 0x5b, 0x5f, 0x25, 0x20, - 0x9a, 0xea, 0xaa, 0x7d, 0xab, 0x57, 0xd3, 0x31, 0x03, 0x70, 0xed, 0x91, 0xe6, 0x8e, 0x6c, 0xac, - 0x33, 0x98, 0x5b, 0x37, 0x7b, 0x56, 0xcf, 0xa2, 0x8f, 0x35, 0xf2, 0xc4, 0xa4, 0x95, 0x49, 0x0e, - 0xf2, 0x8d, 0x3e, 0x1e, 0x60, 0xd3, 0x3d, 0xa0, 0x6c, 0x8f, 0x21, 0xad, 0x59, 0xfd, 0xd1, 0xc0, - 0x14, 0xb9, 0xdb, 0xdc, 0xfd, 0xdc, 0xc3, 0xfb, 0xd5, 0x45, 0xf4, 0xd5, 0x1d, 0xfa, 0xbd, 0xe2, - 0xe9, 0xa1, 0x36, 0x14, 0x86, 0xb6, 0x31, 0x50, 0xed, 0x71, 0xc7, 0x30, 0x75, 0xfc, 0x46, 0x4c, - 0x50, 0xa0, 0xea, 0x62, 0xa0, 0x03, 0xa6, 0x26, 0x13, 0x2d, 0x25, 0x3f, 0x8c, 0xfc, 0x42, 0xcf, - 0xa0, 0xe8, 0x60, 0xcd, 0x32, 0xf5, 0x10, 0x36, 0x49, 0x61, 0xbf, 0xbe, 0x18, 0xb6, 0xed, 0x2b, - 0x32, 0xe0, 0x0d, 0x67, 0xe6, 0x37, 0xc2, 0x70, 0xc3, 0xc1, 0xa7, 0x23, 0x6c, 0x6a, 0xb8, 0xa3, - 0xe3, 0x21, 0x36, 0x75, 0x6c, 0x6a, 0x63, 0x91, 0xa7, 0xf0, 0xdf, 0x5c, 0x06, 0x9e, 0x29, 0x4b, - 0x81, 0xae, 0x82, 0x9c, 0x39, 0x19, 0xea, 0xc0, 0xe6, 0xc8, 0x34, 0x4e, 0x47, 0xb8, 0xa3, 0x59, - 0xa6, 0xe3, 0xda, 0xaa, 0x61, 0xba, 0x62, 0x8a, 0x92, 0x3c, 0x5c, 0x4c, 0x72, 0x44, 0x55, 0x77, - 0x02, 0x4d, 0x45, 0x18, 0xc5, 0x24, 0xe8, 0x47, 0x20, 0x68, 0x27, 0x58, 0x7b, 0x15, 0xc5, 0x4f, - 0x53, 0xfc, 0x6f, 0x2c, 0xb1, 0x87, 0x44, 0x33, 0x02, 0x5f, 0xd4, 0x66, 0x05, 0x68, 0x17, 0x32, - 0xbe, 0x51, 0xe2, 0x3a, 0x45, 0x7d, 0xb0, 0xbc, 0x6b, 0x94, 0x40, 0x17, 0x75, 0x01, 0xe9, 0xf8, - 0x85, 0x3a, 0xea, 0xbb, 0x1d, 0xfc, 0x66, 0x68, 0x63, 0xc7, 0x31, 0x2c, 0x53, 0xcc, 0x50, 0xc4, - 0x47, 0x8b, 0x11, 0x25, 0xa6, 0xdb, 0x08, 0x54, 0x95, 0x4d, 0x3d, 0x2e, 0x42, 0x5b, 0xc0, 0xbf, - 0x36, 0xf0, 0x99, 0x98, 0xa5, 0xa8, 0x77, 0x17, 0xa3, 0x3e, 0x35, 0xf0, 0x99, 0x42, 0x75, 0x90, - 0x0c, 0xeb, 0xee, 0x78, 0x88, 0x15, 0xfc, 0x42, 0x04, 0xaa, 0x5e, 0x5b, 0xac, 0x7e, 0xc8, 0x14, - 0xb0, 0x4d, 0x6d, 0xf5, 0xf5, 0xd1, 0x77, 0x20, 0xe5, 0xaa, 0xdd, 0x3e, 0x16, 0x73, 0x14, 0xe8, - 0xde, 0x12, 0x40, 0xe4, 0x73, 0x85, 0x69, 0xa1, 0xe7, 0x50, 0xb0, 0x46, 0xee, 0xae, 0x65, 0x63, - 0xa3, 0x67, 0xee, 0xe1, 0xb1, 0x98, 0x5f, 0x36, 0x22, 0x5b, 0x23, 0xb7, 0x6b, 0x8d, 0x4c, 0x3d, - 0xd4, 0x55, 0x66, 0xa1, 0xd0, 0x31, 0xe4, 0x0d, 0x33, 0x02, 0x5d, 0x58, 0xd6, 0xff, 0xb2, 0x19, - 0x47, 0x9e, 0x01, 0x42, 0x2f, 0xe1, 0xa6, 0x8d, 0xfb, 0xaa, 0x6b, 0x58, 0xa6, 0x17, 0xfb, 0x7a, - 0xcb, 0xac, 0x8f, 0xc5, 0x0d, 0x4a, 0xf0, 0xad, 0xc5, 0x04, 0xca, 0x25, 0xda, 0xca, 0xa5, 0x98, - 0xe8, 0x18, 0x0a, 0x7e, 0x58, 0xb5, 0xce, 0x4c, 0x6c, 0x8b, 0xc5, 0x65, 0xa3, 0xbd, 0x1d, 0x51, - 0xd3, 0xeb, 0x63, 0x65, 0x16, 0x87, 0xc4, 0x0f, 0xd9, 0x43, 0x51, 0x58, 0x36, 0x7e, 0x68, 0x00, - 0x50, 0x1d, 0x52, 0x3f, 0xd9, 0x07, 0xe2, 0xe6, 0xb2, 0xf5, 0xb3, 0x4d, 0x45, 0x8a, 0xa7, 0x47, - 0x32, 0x4d, 0x57, 0x5d, 0xb5, 0xab, 0x3a, 0x58, 0x44, 0xcb, 0x66, 0x9a, 0xe4, 0x69, 0x28, 0x81, - 0xee, 0x16, 0x7f, 0xfe, 0xeb, 0x32, 0x57, 0xf9, 0x33, 0x07, 0xe9, 0x43, 0xd5, 0xee, 0x61, 0x17, - 0xfd, 0x18, 0x0a, 0x98, 0x95, 0xfa, 0x0e, 0x2d, 0xfe, 0x5e, 0x85, 0x5f, 0xa2, 0x30, 0x47, 0x3b, - 0x44, 0x3d, 0x73, 0x3e, 0x29, 0xaf, 0x5d, 0x4c, 0xca, 0x9c, 0x92, 0xc7, 0xd1, 0xce, 0x71, 0x00, - 0x59, 0xdd, 0xb0, 0xb1, 0x46, 0xf6, 0x89, 0xd6, 0xfc, 0x8d, 0x65, 0x0a, 0x1b, 0x5b, 0x5b, 0x55, - 0xf2, 0x35, 0x95, 0x10, 0xa4, 0xf2, 0x35, 0xc8, 0x06, 0x72, 0x94, 0x83, 0xf5, 0xa3, 0xe6, 0x5e, - 0xb3, 0x75, 0xdc, 0x14, 0xd6, 0xd0, 0x3a, 0x24, 0xb7, 0x25, 0x49, 0xe0, 0x50, 0x06, 0x78, 0x49, - 0x69, 0x1d, 0x08, 0x89, 0xca, 0xef, 0x12, 0x90, 0x66, 0x9d, 0x08, 0xe9, 0x90, 0xa1, 0x29, 0xd4, - 0x31, 0x74, 0x6a, 0x63, 0xa1, 0x2e, 0x4f, 0x27, 0xe5, 0x75, 0x9a, 0x5d, 0xb2, 0xf4, 0xef, 0x49, - 0x79, 0xab, 0x67, 0xb8, 0x27, 0xa3, 0x6e, 0x55, 0xb3, 0x06, 0xb5, 0x60, 0x85, 0x7a, 0x37, 0x7c, - 0xae, 0x0d, 0x5f, 0xf5, 0x6a, 0xf3, 0x5d, 0xb5, 0x2a, 0x4b, 0xca, 0x3a, 0x85, 0x96, 0x75, 0x34, - 0x80, 0xec, 0x0b, 0x75, 0x60, 0xf4, 0xc7, 0x84, 0x26, 0x41, 0x69, 0x0e, 0xa6, 0x93, 0x72, 0x66, - 0x97, 0x0a, 0x29, 0xcf, 0xe3, 0x0f, 0xe5, 0xf1, 0x31, 0x94, 0x0c, 0xa3, 0x90, 0x75, 0x54, 0x86, - 0x9c, 0x47, 0x67, 0xaa, 0x03, 0x4c, 0xbb, 0x5f, 0x56, 0x01, 0x26, 0x6a, 0xaa, 0x03, 0x8c, 0x1a, - 0x41, 0xe7, 0xe6, 0x2f, 0xaf, 0x37, 0xa7, 0x7d, 0x12, 0x17, 0x5e, 0xbb, 0x96, 0xb0, 0xa3, 0xd9, - 0xc6, 0xd0, 0xb5, 0xec, 0x3a, 0x4f, 0x36, 0xd4, 0x6f, 0xdf, 0x5b, 0xfc, 0x5f, 0x49, 0xd8, 0x5c, - 0x24, 0x20, 0x1f, 0x6d, 0xc7, 0xd7, 0xe4, 0xd3, 0x3a, 0xa4, 0xa2, 0x33, 0xc3, 0xdd, 0xff, 0x62, - 0x02, 0x5d, 0xd2, 0x9c, 0x05, 0x4c, 0x15, 0xbd, 0xe5, 0xe0, 0x8b, 0x96, 0x7b, 0x82, 0xed, 0xce, - 0xcc, 0x18, 0x42, 0x16, 0x9e, 0xa4, 0x0b, 0x7f, 0x3e, 0x9d, 0x94, 0x6f, 0xb4, 0xc8, 0x17, 0x51, - 0x0b, 0xa9, 0x11, 0xdf, 0xfd, 0x60, 0x23, 0x18, 0x84, 0x72, 0xc3, 0x9a, 0xc3, 0xd5, 0x3d, 0x97, - 0xfe, 0x26, 0x01, 0x1b, 0xb3, 0xa3, 0xc8, 0xff, 0x91, 0x53, 0x4f, 0xe2, 0x43, 0x1d, 0x73, 0xe5, - 0xce, 0x55, 0xf8, 0x6c, 0x66, 0xd2, 0xf3, 0x9c, 0xf5, 0x8f, 0x24, 0xa0, 0xf9, 0xc1, 0xea, 0xfa, - 0x32, 0x9b, 0x25, 0x43, 0x2c, 0xb3, 0x59, 0xe6, 0xac, 0x96, 0xd9, 0x3e, 0x86, 0x92, 0x61, 0x14, - 0x94, 0x2e, 0x17, 0x0c, 0xa0, 0x41, 0x90, 0xee, 0x4f, 0x27, 0x65, 0xf0, 0x3d, 0xb0, 0xb2, 0x69, - 0xe0, 0x13, 0xc8, 0x3a, 0x7a, 0xe2, 0x75, 0x37, 0x9e, 0x96, 0xe8, 0x6f, 0x7f, 0xc8, 0x80, 0x1b, - 0x6d, 0x78, 0x5f, 0x81, 0x54, 0x97, 0x96, 0x40, 0x32, 0xcb, 0x66, 0xea, 0x99, 0xe9, 0xa4, 0xcc, - 0xd7, 0x49, 0xe9, 0xe2, 0xbb, 0x63, 0x59, 0xaf, 0xdc, 0x03, 0x9e, 0x7c, 0x3c, 0x5b, 0xbe, 0x33, - 0xc0, 0x1f, 0xb5, 0x1b, 0x6d, 0x56, 0xbf, 0x5b, 0xc7, 0xcd, 0xb6, 0x90, 0xf0, 0xf6, 0xfd, 0x0f, - 0x09, 0x10, 0xe2, 0xb3, 0xee, 0x35, 0xed, 0xba, 0x01, 0x99, 0xa0, 0x50, 0xb0, 0x4d, 0x6f, 0x12, - 0x96, 0x2b, 0x2c, 0x0e, 0xeb, 0x06, 0x2b, 0x08, 0x68, 0x08, 0x10, 0x04, 0x98, 0x23, 0x26, 0x6f, - 0x27, 0xef, 0x17, 0xea, 0x3f, 0x98, 0x4e, 0xca, 0x59, 0x3f, 0x3a, 0x9c, 0x2b, 0x09, 0xb1, 0xac, - 0x1f, 0x62, 0x8e, 0xe7, 0xdd, 0xdf, 0x26, 0xa0, 0x18, 0x9b, 0xf4, 0xaf, 0xc9, 0xb9, 0x08, 0x78, - 0xda, 0xb6, 0x12, 0xb4, 0x6d, 0xd1, 0x67, 0x22, 0x23, 0x47, 0x00, 0xaf, 0x95, 0xd1, 0xe7, 0x98, - 0x67, 0xf8, 0x8f, 0xef, 0x19, 0xf4, 0x65, 0xc8, 0xbe, 0x56, 0xfb, 0x86, 0xae, 0xba, 0xd8, 0x8b, - 0x61, 0x25, 0x14, 0x78, 0x7e, 0xfb, 0x39, 0x64, 0xfc, 0x24, 0x88, 0x67, 0x2b, 0xf7, 0x71, 0xb3, - 0xd5, 0x5b, 0xc0, 0x2f, 0x93, 0xb0, 0x39, 0x77, 0xf4, 0xf9, 0x34, 0xab, 0xe1, 0x4f, 0xa0, 0x38, - 0x72, 0xb0, 0x13, 0x3a, 0x33, 0x9a, 0x20, 0xc5, 0xa3, 0xd9, 0x57, 0x2b, 0xda, 0x18, 0x67, 0x42, - 0x77, 0x20, 0x1f, 0x3d, 0x9d, 0xd2, 0x1a, 0x99, 0x55, 0x72, 0x91, 0x23, 0xa6, 0xb7, 0x21, 0xbf, - 0x4f, 0x00, 0x4f, 0x4e, 0x8d, 0xd7, 0xb4, 0x07, 0x36, 0x59, 0x57, 0xe4, 0x38, 0x95, 0xa0, 0x1e, - 0x21, 0xf5, 0x29, 0x1f, 0x3d, 0x12, 0xad, 0x48, 0x37, 0xc3, 0x81, 0x0c, 0xc8, 0xb2, 0xdf, 0x4e, - 0xcb, 0xf4, 0xb6, 0x60, 0x8f, 0x64, 0xa2, 0xe4, 0x0b, 0x57, 0x64, 0x0b, 0xd1, 0x3d, 0x9f, 0xfe, - 0x85, 0x83, 0x14, 0xf5, 0xdb, 0xa7, 0xeb, 0xd4, 0xd0, 0xd2, 0xc2, 0xcc, 0xa5, 0x01, 0x1a, 0x40, - 0x41, 0x0f, 0x46, 0xaf, 0x30, 0xd1, 0xbe, 0x37, 0x9d, 0x94, 0xd3, 0x64, 0x26, 0x5b, 0xd9, 0xea, - 0x7c, 0x08, 0x2f, 0xeb, 0x48, 0x65, 0xb7, 0x1c, 0xa1, 0x7f, 0x29, 0x11, 0x59, 0xd2, 0xca, 0x44, - 0x69, 0x02, 0x1c, 0x14, 0xae, 0xb7, 0x3c, 0xa0, 0xf9, 0xeb, 0x08, 0xd4, 0x83, 0xac, 0x65, 0x1b, - 0x3d, 0xc3, 0x0c, 0x57, 0xf0, 0x7d, 0x52, 0x53, 0x5a, 0x54, 0xb8, 0xf2, 0x1a, 0x32, 0x0c, 0x5c, - 0xd6, 0xd1, 0x4f, 0x61, 0xc3, 0x23, 0x62, 0x05, 0xc6, 0x2f, 0x26, 0x47, 0xd3, 0x49, 0xb9, 0xc0, - 0xd8, 0x58, 0x0d, 0xba, 0x9a, 0xbe, 0x52, 0xb0, 0xa2, 0x90, 0x68, 0x08, 0x79, 0xdb, 0xdf, 0x62, - 0x62, 0x29, 0x4f, 0x2d, 0x7d, 0x32, 0x9d, 0x94, 0x73, 0xc1, 0xd6, 0xaf, 0x6c, 0x6c, 0x2e, 0xa0, - 0x90, 0x75, 0xf4, 0x0b, 0x0e, 0x36, 0x43, 0x4a, 0xdf, 0xe6, 0x14, 0xb5, 0xf9, 0x87, 0xd3, 0x49, - 0x59, 0x08, 0x78, 0xaf, 0xd2, 0x6c, 0xc1, 0x8e, 0xa1, 0x06, 0xfd, 0x3e, 0x1d, 0xf6, 0x7b, 0xbf, - 0x95, 0xf1, 0xb0, 0x39, 0x77, 0x8b, 0xf4, 0x79, 0x40, 0x7c, 0x76, 0x03, 0xe2, 0x9f, 0x1c, 0x14, - 0x63, 0x17, 0x72, 0xd7, 0x3c, 0x64, 0x21, 0x17, 0x36, 0xac, 0x33, 0x13, 0xdb, 0x9d, 0xa0, 0xeb, - 0x84, 0x07, 0x80, 0x3c, 0xbd, 0x13, 0xbc, 0x9a, 0xd6, 0x93, 0xb7, 0x42, 0x2c, 0xbd, 0xf2, 0x77, - 0x0e, 0x6e, 0x5e, 0x76, 0xdd, 0x79, 0x4d, 0xed, 0xcf, 0x04, 0x08, 0x5b, 0x53, 0xd4, 0xe0, 0x2b, - 0x6c, 0x7e, 0x11, 0x06, 0x6f, 0xb7, 0x0d, 0xef, 0x3c, 0xf8, 0xf1, 0x3b, 0x50, 0xe5, 0x6f, 0x1c, - 0xa4, 0xd9, 0xdd, 0x2a, 0x29, 0x2f, 0xec, 0x60, 0x1b, 0x2b, 0x2f, 0xec, 0xf5, 0xea, 0xe5, 0x85, - 0x81, 0xcb, 0x3a, 0xfa, 0x19, 0x08, 0xfe, 0xff, 0x90, 0xdc, 0x56, 0xf7, 0x25, 0xd6, 0x5c, 0xc7, - 0x9b, 0x2b, 0x14, 0x92, 0x6c, 0x52, 0xec, 0xdd, 0x8a, 0xbc, 0x73, 0x5c, 0x95, 0x7f, 0x71, 0x90, - 0xf1, 0xef, 0x82, 0x49, 0x16, 0xf9, 0xb7, 0xc1, 0xb1, 0x2c, 0xf2, 0x3f, 0x59, 0x3d, 0x8b, 0x7c, - 0x82, 0xff, 0xbd, 0xed, 0x0f, 0xce, 0x20, 0xd5, 0x76, 0x55, 0x37, 0x76, 0xd7, 0x00, 0x90, 0xde, - 0xae, 0xb7, 0x1b, 0xcd, 0x43, 0x81, 0x43, 0x45, 0xc8, 0x49, 0x8d, 0xfd, 0xc6, 0x61, 0xa3, 0xd3, - 0x6a, 0xee, 0x3f, 0x13, 0x12, 0xe8, 0x4b, 0xf0, 0x05, 0x4f, 0xb0, 0xdd, 0x94, 0x3a, 0xc7, 0x8a, - 0xec, 0xbf, 0x4a, 0xa2, 0x0d, 0x80, 0xfa, 0xf6, 0xce, 0xde, 0xae, 0xbc, 0xbf, 0xdf, 0x90, 0x04, - 0x1e, 0x15, 0x20, 0xfb, 0x74, 0x7b, 0x5f, 0x96, 0xb6, 0x0f, 0x1b, 0x92, 0x90, 0x22, 0xb0, 0x07, - 0x47, 0xf5, 0x7d, 0x79, 0x47, 0x48, 0xd7, 0xef, 0x9e, 0xff, 0xa9, 0xb4, 0x76, 0x3e, 0x2d, 0x71, - 0x17, 0xd3, 0x12, 0xf7, 0x6e, 0x5a, 0xe2, 0xfe, 0x38, 0x2d, 0x71, 0xbf, 0x7a, 0x5f, 0x5a, 0xbb, - 0x78, 0x5f, 0x5a, 0x7b, 0xf7, 0xbe, 0xb4, 0xf6, 0x9c, 0x27, 0xab, 0xee, 0xa6, 0xe9, 0xb5, 0xfb, - 0xa3, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xd3, 0xf0, 0xd7, 0x93, 0xf5, 0x1d, 0x00, 0x00, + // 1701 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0x5f, 0x6f, 0xdb, 0xd6, + 0x15, 0x37, 0x25, 0x5a, 0x96, 0x8e, 0x24, 0x8b, 0xbe, 0xc9, 0x06, 0x2e, 0xd8, 0xa4, 0x44, 0x03, + 0x92, 0x20, 0x03, 0xa4, 0x2d, 0x19, 0x06, 0xcc, 0xc0, 0xb0, 0x58, 0xa6, 0x8c, 0x71, 0x76, 0x24, + 0x8f, 0xb2, 0xe3, 0x25, 0xd8, 0x20, 0x50, 0xe4, 0x8d, 0xcc, 0x44, 0x22, 0x65, 0x92, 0x8a, 0x23, + 0x6c, 0xd8, 0x9e, 0xfa, 0xda, 0xf4, 0x23, 0xf4, 0xb9, 0xef, 0xfd, 0x0e, 0x06, 0xfa, 0xe2, 0xbe, + 0x05, 0x28, 0x20, 0xb4, 0x0a, 0xd0, 0xf6, 0xb5, 0x05, 0x5a, 0xa0, 0x7d, 0x2a, 0xee, 0xbd, 0xfc, + 0x27, 0xc9, 0x85, 0x84, 0xc8, 0x71, 0xd1, 0xb4, 0x2f, 0x06, 0x75, 0xc8, 0xf3, 0xfb, 0xdd, 0x73, + 0xee, 0xf9, 0x77, 0xaf, 0xe1, 0x9a, 0x73, 0xd4, 0x29, 0x3b, 0xda, 0x21, 0xee, 0xaa, 0xda, 0xa1, + 0x6a, 0xb6, 0xb1, 0x5d, 0x76, 0xb4, 0x5e, 0x8b, 0xfe, 0x29, 0xf5, 0x6c, 0xcb, 0xb5, 0xd0, 0x55, + 0xcd, 0xd2, 0x9e, 0xd8, 0x96, 0xaa, 0x1d, 0x96, 0x9c, 0xa3, 0x4e, 0x69, 0xec, 0xe3, 0x12, 0xf9, + 0xee, 0xca, 0x6f, 0x09, 0x88, 0xa6, 0xba, 0x6a, 0xc7, 0x6a, 0x97, 0x75, 0xcc, 0x00, 0x5c, 0xbb, + 0xaf, 0xb9, 0x7d, 0x1b, 0xeb, 0x0c, 0xe6, 0xca, 0xe5, 0xb6, 0xd5, 0xb6, 0xe8, 0x63, 0x99, 0x3c, + 0x31, 0x69, 0x71, 0x98, 0x86, 0x4c, 0xb5, 0x83, 0xbb, 0xd8, 0x74, 0x77, 0x29, 0xdb, 0x5d, 0x48, + 0x68, 0x56, 0xa7, 0xdf, 0x35, 0x45, 0xee, 0x2a, 0x77, 0x33, 0x7d, 0xfb, 0x66, 0x69, 0x16, 0x7d, + 0x69, 0x93, 0x7e, 0xaf, 0x78, 0x7a, 0xa8, 0x01, 0xd9, 0x9e, 0x6d, 0x74, 0x55, 0x7b, 0xd0, 0x34, + 0x4c, 0x1d, 0x3f, 0x13, 0x63, 0x14, 0xa8, 0x34, 0x1b, 0x68, 0x97, 0xa9, 0xc9, 0x44, 0x4b, 0xc9, + 0xf4, 0x22, 0xbf, 0xd0, 0x03, 0xc8, 0x39, 0x58, 0xb3, 0x4c, 0x3d, 0x84, 0x8d, 0x53, 0xd8, 0xdf, + 0xcf, 0x86, 0x6d, 0xf8, 0x8a, 0x0c, 0x78, 0xd5, 0x19, 0xfb, 0x8d, 0x30, 0x5c, 0x72, 0xf0, 0x51, + 0x1f, 0x9b, 0x1a, 0x6e, 0xea, 0xb8, 0x87, 0x4d, 0x1d, 0x9b, 0xda, 0x40, 0xe4, 0x29, 0xfc, 0x1f, + 0xe7, 0x81, 0x67, 0xca, 0x52, 0xa0, 0xab, 0x20, 0x67, 0x4a, 0x86, 0x9a, 0xb0, 0xd6, 0x37, 0x8d, + 0xa3, 0x3e, 0x6e, 0x6a, 0x96, 0xe9, 0xb8, 0xb6, 0x6a, 0x98, 0xae, 0xb8, 0x4c, 0x49, 0x6e, 0xcf, + 0x26, 0xd9, 0xa7, 0xaa, 0x9b, 0x81, 0xa6, 0x22, 0xf4, 0x27, 0x24, 0xe8, 0x5f, 0x20, 0x68, 0x87, + 0x58, 0x7b, 0x12, 0xc5, 0x4f, 0x50, 0xfc, 0x3f, 0xcc, 0xb1, 0x87, 0x44, 0x33, 0x02, 0x9f, 0xd3, + 0xc6, 0x05, 0x68, 0x0b, 0x92, 0xbe, 0x51, 0xe2, 0x0a, 0x45, 0xbd, 0x35, 0xbf, 0x6b, 0x94, 0x40, + 0x17, 0xb5, 0x00, 0xe9, 0xf8, 0x91, 0xda, 0xef, 0xb8, 0x4d, 0xfc, 0xac, 0x67, 0x63, 0xc7, 0x31, + 0x2c, 0x53, 0x4c, 0x52, 0xc4, 0x3b, 0xb3, 0x11, 0x25, 0xa6, 0x5b, 0x0d, 0x54, 0x95, 0x35, 0x7d, + 0x52, 0x84, 0xd6, 0x81, 0x7f, 0x6a, 0xe0, 0x63, 0x31, 0x45, 0x51, 0xaf, 0xcf, 0x46, 0xbd, 0x6f, + 0xe0, 0x63, 0x85, 0xea, 0x20, 0x19, 0x56, 0xdc, 0x41, 0x0f, 0x2b, 0xf8, 0x91, 0x08, 0x54, 0xbd, + 0x3c, 0x5b, 0x7d, 0x8f, 0x29, 0x60, 0x9b, 0xda, 0xea, 0xeb, 0xa3, 0xbf, 0xc0, 0xb2, 0xab, 0xb6, + 0x3a, 0x58, 0x4c, 0x53, 0xa0, 0x1b, 0x73, 0x00, 0x91, 0xcf, 0x15, 0xa6, 0x85, 0x1e, 0x42, 0xd6, + 0xea, 0xbb, 0x5b, 0x96, 0x8d, 0x8d, 0xb6, 0xb9, 0x8d, 0x07, 0x62, 0x66, 0xde, 0x88, 0xac, 0xf7, + 0xdd, 0x96, 0xd5, 0x37, 0xf5, 0x50, 0x57, 0x19, 0x87, 0x42, 0x07, 0x90, 0x31, 0xcc, 0x08, 0x74, + 0x76, 0x5e, 0xff, 0xcb, 0xe6, 0x24, 0xf2, 0x18, 0x10, 0x7a, 0x0c, 0x97, 0x6d, 0xdc, 0x51, 0x5d, + 0xc3, 0x32, 0xbd, 0xd8, 0xd7, 0xeb, 0x66, 0x65, 0x20, 0xae, 0x52, 0x82, 0x3f, 0xcd, 0x26, 0x50, + 0xce, 0xd0, 0x56, 0xce, 0xc4, 0x44, 0x07, 0x90, 0xf5, 0xc3, 0xaa, 0x7e, 0x6c, 0x62, 0x5b, 0xcc, + 0xcd, 0x1b, 0xed, 0x8d, 0x88, 0x9a, 0x5e, 0x19, 0x28, 0xe3, 0x38, 0x24, 0x7e, 0xc8, 0x1e, 0x8a, + 0xc2, 0xbc, 0xf1, 0x43, 0x03, 0x80, 0xea, 0x90, 0xfa, 0xc9, 0x3e, 0x10, 0xd7, 0xe6, 0xad, 0x9f, + 0x0d, 0x2a, 0x52, 0x3c, 0x3d, 0x92, 0x69, 0xba, 0xea, 0xaa, 0x2d, 0xd5, 0xc1, 0x22, 0x9a, 0x37, + 0xd3, 0x24, 0x4f, 0x43, 0x09, 0x74, 0xd7, 0xf9, 0x93, 0x77, 0x0b, 0x5c, 0xf1, 0x53, 0x0e, 0x12, + 0x7b, 0xaa, 0xdd, 0xc6, 0x2e, 0xfa, 0x37, 0x64, 0x31, 0x2b, 0xf5, 0x4d, 0x5a, 0xfc, 0xbd, 0x0a, + 0x3f, 0x47, 0x61, 0x8e, 0x76, 0x88, 0x4a, 0xf2, 0x64, 0x58, 0x58, 0x3a, 0x1d, 0x16, 0x38, 0x25, + 0x83, 0xa3, 0x9d, 0x63, 0x17, 0x52, 0xba, 0x61, 0x63, 0x8d, 0xec, 0x13, 0xad, 0xf9, 0xab, 0xf3, + 0x14, 0x36, 0xb6, 0xb6, 0x92, 0xe4, 0x6b, 0x2a, 0x21, 0x48, 0xf1, 0x77, 0x90, 0x0a, 0xe4, 0x28, + 0x0d, 0x2b, 0xfb, 0xb5, 0xed, 0x5a, 0xfd, 0xa0, 0x26, 0x2c, 0xa1, 0x15, 0x88, 0x6f, 0x48, 0x92, + 0xc0, 0xa1, 0x24, 0xf0, 0x92, 0x52, 0xdf, 0x15, 0x62, 0xc5, 0x0f, 0x62, 0x90, 0x60, 0x9d, 0x08, + 0xe9, 0x90, 0xa4, 0x29, 0xd4, 0x34, 0x74, 0x6a, 0x63, 0xb6, 0x22, 0x8f, 0x86, 0x85, 0x15, 0x9a, + 0x5d, 0xb2, 0xf4, 0xed, 0xb0, 0xb0, 0xde, 0x36, 0xdc, 0xc3, 0x7e, 0xab, 0xa4, 0x59, 0xdd, 0x72, + 0xb0, 0x42, 0xbd, 0x15, 0x3e, 0x97, 0x7b, 0x4f, 0xda, 0xe5, 0xe9, 0xae, 0x5a, 0x92, 0x25, 0x65, + 0x85, 0x42, 0xcb, 0x3a, 0xea, 0x42, 0xea, 0x91, 0xda, 0x35, 0x3a, 0x03, 0x42, 0x13, 0xa3, 0x34, + 0xbb, 0xa3, 0x61, 0x21, 0xb9, 0x45, 0x85, 0x94, 0xe7, 0xee, 0xab, 0xf2, 0xf8, 0x18, 0x4a, 0x92, + 0x51, 0xc8, 0x3a, 0x2a, 0x40, 0xda, 0xa3, 0x33, 0xd5, 0x2e, 0xa6, 0xdd, 0x2f, 0xa5, 0x00, 0x13, + 0xd5, 0xd4, 0x2e, 0x46, 0xd5, 0xa0, 0x73, 0xf3, 0x67, 0xd7, 0x9b, 0xa3, 0x0e, 0x89, 0x0b, 0xaf, + 0x5d, 0x4b, 0xd8, 0xd1, 0x6c, 0xa3, 0xe7, 0x5a, 0x76, 0x85, 0x27, 0x1b, 0xea, 0xb7, 0xef, 0x75, + 0xfe, 0x73, 0x12, 0x36, 0xa7, 0x31, 0xc8, 0x44, 0xdb, 0xf1, 0x05, 0xf9, 0xb4, 0x02, 0xcb, 0xd1, + 0x99, 0xe1, 0xfa, 0xf7, 0x98, 0x40, 0x97, 0x34, 0x65, 0x01, 0x53, 0x45, 0xcf, 0x39, 0xf8, 0xa5, + 0xe5, 0x1e, 0x62, 0xbb, 0x39, 0x36, 0x86, 0x90, 0x85, 0xc7, 0xe9, 0xc2, 0x1f, 0x8e, 0x86, 0x85, + 0x4b, 0x75, 0xf2, 0x45, 0xd4, 0x42, 0x6a, 0xc4, 0x5f, 0x5f, 0xd9, 0x08, 0x06, 0xa1, 0x5c, 0xb2, + 0xa6, 0x70, 0x75, 0xcf, 0xa5, 0xef, 0xc5, 0x60, 0x75, 0x7c, 0x14, 0xf9, 0x11, 0x39, 0xf5, 0x70, + 0x72, 0xa8, 0x63, 0xae, 0xdc, 0x3c, 0x0f, 0x9f, 0x8d, 0x4d, 0x7a, 0x9e, 0xb3, 0xbe, 0x8a, 0x03, + 0x9a, 0x1e, 0xac, 0x2e, 0x2e, 0xb3, 0x59, 0x32, 0x4c, 0x64, 0x36, 0xcb, 0x9c, 0xc5, 0x32, 0xdb, + 0xc7, 0x50, 0x92, 0x8c, 0x82, 0xd2, 0xa5, 0x83, 0x01, 0x34, 0x08, 0xd2, 0x9d, 0xd1, 0xb0, 0x00, + 0xbe, 0x07, 0x16, 0x36, 0x0d, 0x7c, 0x02, 0x59, 0x47, 0xf7, 0xbc, 0xee, 0xc6, 0xd3, 0x12, 0xfd, + 0xe7, 0x57, 0x19, 0x70, 0xa3, 0x0d, 0xef, 0x37, 0xb0, 0xdc, 0xa2, 0x25, 0x90, 0xcc, 0xb2, 0xc9, + 0x4a, 0x72, 0x34, 0x2c, 0xf0, 0x15, 0x52, 0xba, 0xf8, 0xd6, 0x40, 0xd6, 0x8b, 0x37, 0x80, 0x27, + 0x1f, 0x8f, 0x97, 0xef, 0x24, 0xf0, 0xfb, 0x8d, 0x6a, 0x83, 0xd5, 0xef, 0xfa, 0x41, 0xad, 0x21, + 0xc4, 0xbc, 0x7d, 0xff, 0x28, 0x06, 0xc2, 0xe4, 0xac, 0x7b, 0x41, 0xbb, 0x6e, 0x40, 0x32, 0x28, + 0x14, 0x6c, 0xd3, 0x6b, 0x84, 0xe5, 0x1c, 0x8b, 0xc3, 0x8a, 0xc1, 0x0a, 0x02, 0xea, 0x01, 0x04, + 0x01, 0xe6, 0x88, 0xf1, 0xab, 0xf1, 0x9b, 0xd9, 0xca, 0x3f, 0x46, 0xc3, 0x42, 0xca, 0x8f, 0x0e, + 0xe7, 0x5c, 0x42, 0x2c, 0xe5, 0x87, 0x98, 0xe3, 0x79, 0xf7, 0xfd, 0x18, 0xe4, 0x26, 0x26, 0xfd, + 0x0b, 0x72, 0x2e, 0x02, 0x9e, 0xb6, 0xad, 0x18, 0x6d, 0x5b, 0xf4, 0x99, 0xc8, 0xc8, 0x11, 0xc0, + 0x6b, 0x65, 0xf4, 0x79, 0xc2, 0x33, 0xfc, 0xeb, 0xf7, 0x0c, 0xfa, 0x35, 0xa4, 0x9e, 0xaa, 0x1d, + 0x43, 0x57, 0x5d, 0xec, 0xc5, 0xb0, 0x12, 0x0a, 0x3c, 0xbf, 0xfd, 0x1f, 0x92, 0x7e, 0x12, 0x4c, + 0x66, 0x2b, 0xf7, 0x7a, 0xb3, 0xd5, 0x5b, 0xc0, 0xdb, 0x71, 0x58, 0x9b, 0x3a, 0xfa, 0xbc, 0x99, + 0xd5, 0xf0, 0x3f, 0x90, 0xeb, 0x3b, 0xd8, 0x09, 0x9d, 0x19, 0x4d, 0x90, 0xdc, 0xfe, 0xf8, 0xab, + 0x05, 0x6d, 0x9c, 0x64, 0x42, 0xd7, 0x20, 0x13, 0x3d, 0x9d, 0xd2, 0x1a, 0x99, 0x52, 0xd2, 0x91, + 0x23, 0xa6, 0xb7, 0x21, 0x1f, 0xc6, 0x80, 0x27, 0xa7, 0xc6, 0x0b, 0xda, 0x03, 0x9b, 0xac, 0x2b, + 0x72, 0x9c, 0x8a, 0x51, 0x8f, 0x90, 0xfa, 0x94, 0x89, 0x1e, 0x89, 0x16, 0xa4, 0x1b, 0xe3, 0x40, + 0x06, 0xa4, 0xd8, 0x6f, 0xa7, 0x6e, 0x7a, 0x5b, 0xb0, 0x4d, 0x32, 0x51, 0xf2, 0x85, 0x0b, 0xb2, + 0x85, 0xe8, 0x9e, 0x4f, 0x3f, 0xe3, 0x60, 0x99, 0xfa, 0xed, 0xcd, 0x75, 0x6a, 0x68, 0x69, 0x76, + 0xec, 0xd2, 0x00, 0x75, 0x21, 0xab, 0x07, 0xa3, 0x57, 0x98, 0x68, 0x7f, 0x1b, 0x0d, 0x0b, 0x09, + 0x32, 0x93, 0x2d, 0x6c, 0x75, 0x26, 0x84, 0x97, 0x75, 0xa4, 0xb2, 0x5b, 0x8e, 0xd0, 0xbf, 0x94, + 0x88, 0x2c, 0x69, 0x61, 0xa2, 0x04, 0x01, 0x0e, 0x0a, 0xd7, 0x73, 0x1e, 0xd0, 0xf4, 0x75, 0x04, + 0x6a, 0x43, 0xca, 0xb2, 0x8d, 0xb6, 0x61, 0x86, 0x2b, 0xf8, 0x3b, 0xa9, 0x29, 0x75, 0x2a, 0x5c, + 0x78, 0x0d, 0x49, 0x06, 0x2e, 0xeb, 0xe8, 0xbf, 0xb0, 0xea, 0x11, 0xb1, 0x02, 0xe3, 0x17, 0x93, + 0xfd, 0xd1, 0xb0, 0x90, 0x65, 0x6c, 0xac, 0x06, 0x9d, 0x4f, 0x5f, 0xc9, 0x5a, 0x51, 0x48, 0xd4, + 0x83, 0x8c, 0xed, 0x6f, 0x31, 0xb1, 0x94, 0xa7, 0x96, 0xde, 0x1b, 0x0d, 0x0b, 0xe9, 0x60, 0xeb, + 0x17, 0x36, 0x36, 0x1d, 0x50, 0xc8, 0x3a, 0x7a, 0x8b, 0x83, 0xb5, 0x90, 0xd2, 0xb7, 0x79, 0x99, + 0xda, 0xfc, 0xcf, 0xd1, 0xb0, 0x20, 0x04, 0xbc, 0xe7, 0x69, 0xb6, 0x60, 0x4f, 0xa0, 0x06, 0xfd, + 0x3e, 0x11, 0xf6, 0x7b, 0xbf, 0x95, 0xf1, 0xb0, 0x36, 0x75, 0x8b, 0xf4, 0x73, 0x40, 0xfc, 0x74, + 0x03, 0xe2, 0x6b, 0x0e, 0x72, 0x13, 0x17, 0x72, 0x17, 0x3c, 0x64, 0x21, 0x17, 0x56, 0xad, 0x63, + 0x13, 0xdb, 0xcd, 0xa0, 0xeb, 0x84, 0x07, 0x80, 0x0c, 0xbd, 0x13, 0x3c, 0x9f, 0xd6, 0x93, 0xb1, + 0x42, 0x2c, 0xbd, 0xf8, 0x25, 0x07, 0x97, 0xcf, 0xba, 0xee, 0xbc, 0xa0, 0xf6, 0x67, 0x02, 0x84, + 0xad, 0x29, 0x6a, 0xf0, 0x39, 0x36, 0xbf, 0x08, 0x83, 0xb7, 0xdb, 0x86, 0x77, 0x1e, 0x7c, 0xfd, + 0x1d, 0xa8, 0xf8, 0x05, 0x07, 0x09, 0x76, 0xb7, 0x4a, 0xca, 0x0b, 0x3b, 0xd8, 0x4e, 0x94, 0x17, + 0xf6, 0x7a, 0xf1, 0xf2, 0xc2, 0xc0, 0x65, 0x1d, 0xfd, 0x0f, 0x04, 0xff, 0x7f, 0x48, 0x6e, 0xbd, + 0xf5, 0x18, 0x6b, 0xae, 0xe3, 0xcd, 0x15, 0x0a, 0x49, 0x36, 0x69, 0xe2, 0xdd, 0x82, 0xbc, 0x53, + 0x5c, 0xc5, 0x6f, 0x38, 0x48, 0xfa, 0x77, 0xc1, 0x24, 0x8b, 0xfc, 0xdb, 0xe0, 0x89, 0x2c, 0xf2, + 0x3f, 0x59, 0x3c, 0x8b, 0x7c, 0x82, 0x1f, 0xde, 0xf6, 0x5b, 0xcf, 0x20, 0xd1, 0x70, 0x55, 0xb7, + 0xef, 0x8c, 0x5f, 0x36, 0x00, 0x24, 0x36, 0x2a, 0x8d, 0x6a, 0x6d, 0x4f, 0xe0, 0x50, 0x0e, 0xd2, + 0x52, 0x75, 0xa7, 0xba, 0x57, 0x6d, 0xd6, 0x6b, 0x3b, 0x0f, 0x84, 0x18, 0xfa, 0x15, 0xfc, 0xc2, + 0x13, 0x6c, 0xd4, 0xa4, 0xe6, 0x81, 0x22, 0xfb, 0xaf, 0xe2, 0x68, 0x15, 0xa0, 0xb2, 0xb1, 0xb9, + 0xbd, 0x25, 0xef, 0xec, 0x54, 0x25, 0x81, 0x47, 0x59, 0x48, 0xdd, 0xdf, 0xd8, 0x91, 0xa5, 0x8d, + 0xbd, 0xaa, 0x24, 0x2c, 0x13, 0xd8, 0xdd, 0xfd, 0xca, 0x8e, 0xbc, 0x29, 0x24, 0x2a, 0xd7, 0x4f, + 0x3e, 0xc9, 0x2f, 0x9d, 0x8c, 0xf2, 0xdc, 0xe9, 0x28, 0xcf, 0xbd, 0x18, 0xe5, 0xb9, 0x8f, 0x47, + 0x79, 0xee, 0x9d, 0x97, 0xf9, 0xa5, 0xd3, 0x97, 0xf9, 0xa5, 0x17, 0x2f, 0xf3, 0x4b, 0x0f, 0x79, + 0xb2, 0xec, 0x56, 0x82, 0xde, 0xbb, 0xdf, 0xf9, 0x2e, 0x00, 0x00, 0xff, 0xff, 0x89, 0x37, 0x8e, + 0xfe, 0xf6, 0x1d, 0x00, 0x00, } func (this *Column) Equal(that interface{}) bool { diff --git a/pkg/sql/schemachanger/scpb/scpb.proto b/pkg/sql/schemachanger/scpb/scpb.proto index ef929bfb8236..3367f0265744 100644 --- a/pkg/sql/schemachanger/scpb/scpb.proto +++ b/pkg/sql/schemachanger/scpb/scpb.proto @@ -48,7 +48,7 @@ message Target { Direction direction = 2; } -enum State { +enum Status { UNKNOWN = 0; ABSENT = 1; DELETE_ONLY = 2; @@ -78,7 +78,7 @@ message SecondaryIndex { uint32 table_id = 1 [(gogoproto.customname) = "TableID", (gogoproto.casttype) = "github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb.ID"]; cockroach.sql.sqlbase.IndexDescriptor index = 2 [(gogoproto.nullable) = false]; uint32 primary_index = 3 [(gogoproto.casttype) = "github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb.IndexID"]; - } +} message SequenceDependency { option (gogoproto.equal) = true; diff --git a/pkg/sql/schemachanger/scplan/declarative.go b/pkg/sql/schemachanger/scplan/declarative.go index 4c961b316d4e..c42451a8ba1d 100644 --- a/pkg/sql/schemachanger/scplan/declarative.go +++ b/pkg/sql/schemachanger/scplan/declarative.go @@ -21,12 +21,12 @@ import ( type depMatcher struct { dirPredicate func(thisDir, thatDir scpb.Target_Direction) bool - thatState scpb.State + thatStatus scpb.Status predicate interface{} } type decOpEdge struct { - nextState scpb.State + nextStatus scpb.Status predicate interface{} op interface{} nonRevertible bool @@ -37,14 +37,14 @@ type targetRules struct { forward, backwards targetOpRules } -type targetDepRules map[scpb.State][]depMatcher +type targetDepRules map[scpb.Status][]depMatcher -type targetOpRules map[scpb.State][]decOpEdge +type targetOpRules map[scpb.Status][]decOpEdge var p = buildSchemaChangePlanner(rules) -type opGenFunc func(builder *scgraph.Graph, t *scpb.Target, s scpb.State, flags Params) -type depGenFunc func(g *scgraph.Graph, t *scpb.Target, s scpb.State) +type opGenFunc func(builder *scgraph.Graph, t *scpb.Target, s scpb.Status, flags Params) +type depGenFunc func(g *scgraph.Graph, t *scpb.Target, s scpb.Status) type schemaChangeTargetPlanner struct { ops opGenFunc @@ -69,11 +69,11 @@ func buildSchemaChangeDepGenFunc(e scpb.Element, deps targetDepRules) depGenFunc // signature. tTyp := reflect.TypeOf(e) type matcher struct { - dirPred func(thisDir, thatDir scpb.Target_Direction) bool - pred func(this, that scpb.Element) bool - thatState scpb.State + dirPred func(thisDir, thatDir scpb.Target_Direction) bool + pred func(this, that scpb.Element) bool + thatStatus scpb.Status } - matchers := map[scpb.State]map[reflect.Type][]matcher{} + matchers := map[scpb.Status]map[reflect.Type][]matcher{} for s, rules := range deps { for i, rule := range rules { mt := reflect.TypeOf(rule.predicate) @@ -108,14 +108,14 @@ func buildSchemaChangeDepGenFunc(e scpb.Element, deps targetDepRules) depGenFunc return out[0].Bool() } matchers[s][other] = append(matchers[s][other], matcher{ - dirPred: rule.dirPredicate, - pred: f, - thatState: rule.thatState, + dirPred: rule.dirPredicate, + pred: f, + thatStatus: rule.thatStatus, }) } } - return func(g *scgraph.Graph, this *scpb.Target, thisState scpb.State) { - for t, matchers := range matchers[thisState] { + return func(g *scgraph.Graph, this *scpb.Target, thisStatus scpb.Status) { + for t, matchers := range matchers[thisStatus] { if err := g.ForEachTarget(func(that *scpb.Target) error { if reflect.TypeOf(that.Element()) != t { return nil @@ -123,7 +123,7 @@ func buildSchemaChangeDepGenFunc(e scpb.Element, deps targetDepRules) depGenFunc for _, m := range matchers { if m.dirPred(this.Direction, that.Direction) && m.pred(this.Element(), that.Element()) { - g.AddDepEdge(this, thisState, that, m.thatState) + g.AddDepEdge(this, thisStatus, that, m.thatStatus) } } return nil @@ -163,22 +163,22 @@ func buildSchemaChangeOpGenFunc(e scpb.Element, forward, backwards targetOpRules ) for s, rules := range forward { for i, rule := range rules { - if rule.nextState == s { - panic(errors.Errorf("detected rule into same state: %s for %T[%d]", s, e, i)) + if rule.nextStatus == s { + panic(errors.Errorf("detected rule into same status: %s for %T[%d]", s, e, i)) } if rule.predicate != nil { if pt := reflect.TypeOf(rule.predicate); pt != predicateTyp { panic(errors.Errorf("invalid predicate with signature %v != %v for %T[%d]", pt, predicateTyp, e, i)) } } - if rule.nextState == scpb.State_UNKNOWN { + if rule.nextStatus == scpb.Status_UNKNOWN { if rule.op != nil { panic(errors.Errorf("invalid stopping rule with non-nil op func for %T[%d]", e, i)) } continue } - if rule.nextState != scpb.State_UNKNOWN && rule.op == nil { - panic(errors.Errorf("invalid nil op with next state %s for %T[%d]", rule.nextState, e, i)) + if rule.nextStatus != scpb.Status_UNKNOWN && rule.op == nil { + panic(errors.Errorf("invalid nil op with next status %s for %T[%d]", rule.nextStatus, e, i)) } if ot := reflect.TypeOf(rule.op); ot != opType || ot != opSliceType { panic(errors.Errorf("invalid ops with signature %v != (%v || %v) %p %p for (%T, %s)[%d]", ot, opType, opSliceType, ot, opsType, e, s, i)) @@ -186,39 +186,39 @@ func buildSchemaChangeOpGenFunc(e scpb.Element, forward, backwards targetOpRules } } - return func(builder *scgraph.Graph, t *scpb.Target, s scpb.State, flags Params) { + return func(builder *scgraph.Graph, t *scpb.Target, s scpb.Status, flags Params) { cur := s tv := reflect.ValueOf(t.Element()) flagsV := reflect.ValueOf(flags) predicateArgs := []reflect.Value{tv, flagsV} opsArgs := []reflect.Value{tv} - var stateRules targetOpRules + var statusRules targetOpRules if t.Direction == scpb.Target_ADD { - stateRules = forward + statusRules = forward } else { - stateRules = backwards + statusRules = backwards } outer: for { - rules := stateRules[cur] + rules := statusRules[cur] for _, rule := range rules { if rule.predicate != nil { if out := reflect.ValueOf(rule.predicate).Call(predicateArgs); !out[0].Bool() { continue } } - if rule.nextState == scpb.State_UNKNOWN { + if rule.nextStatus == scpb.Status_UNKNOWN { return } out := reflect.ValueOf(rule.op).Call(opsArgs) if op, ok := out[0].Interface().(scop.Op); ok { - builder.AddOpEdges(t, cur, rule.nextState, !rule.nonRevertible, op) + builder.AddOpEdges(t, cur, rule.nextStatus, !rule.nonRevertible, op) } else if opArray, ok := out[0].Interface().([]scop.Op); ok { - builder.AddOpEdges(t, cur, rule.nextState, !rule.nonRevertible, opArray...) + builder.AddOpEdges(t, cur, rule.nextStatus, !rule.nonRevertible, opArray...) } - cur = rule.nextState + cur = rule.nextStatus continue outer } break diff --git a/pkg/sql/schemachanger/scplan/plan.go b/pkg/sql/schemachanger/scplan/plan.go index d01b7fc5f03e..82a5a4114b51 100644 --- a/pkg/sql/schemachanger/scplan/plan.go +++ b/pkg/sql/schemachanger/scplan/plan.go @@ -58,27 +58,27 @@ type Params struct { // A Plan is a schema change plan, primarily containing ops to be executed that // are partitioned into stages. type Plan struct { - Params Params - InitialNodes []*scpb.Node - Graph *scgraph.Graph - Stages []Stage + Params Params + Initial scpb.State + Graph *scgraph.Graph + Stages []Stage } // A Stage is a sequence of ops to be executed "together" as part of a schema // change. // -// Stages also contain their corresponding targets and states before and after -// the execution of the ops in the stage, reflecting the fact that any set of -// ops can be thought of as a transition from a set of target states to another. +// Stages also contain the state before and after the execution of the ops in +// the stage, reflecting the fact that any set of ops can be thought of as a +// transition from one state to another. type Stage struct { - Before, After []*scpb.Node + Before, After scpb.State Ops scop.Ops Revertible bool } // MakePlan generates a Plan for a particular phase of a schema change, given -// the initial states for a set of targets. -func MakePlan(initialStates []*scpb.Node, params Params) (_ Plan, err error) { +// the initial state for a set of targets. +func MakePlan(initial scpb.State, params Params) (_ Plan, err error) { defer func() { if r := recover(); r != nil { rAsErr, ok := r.(error) @@ -89,36 +89,36 @@ func MakePlan(initialStates []*scpb.Node, params Params) (_ Plan, err error) { } }() - g, err := scgraph.New(initialStates) + g, err := scgraph.New(initial) if err != nil { return Plan{}, err } // TODO(ajwerner): Generate the stages for all of the phases as it will make // debugging easier. - for _, ts := range initialStates { - p[reflect.TypeOf(ts.Element())].ops(g, ts.Target, ts.State, params) + for _, ts := range initial { + p[reflect.TypeOf(ts.Element())].ops(g, ts.Target, ts.Status, params) } if err := g.ForEachNode(func(n *scpb.Node) error { d, ok := p[reflect.TypeOf(n.Element())] if !ok { return errors.Errorf("not implemented for %T", n.Target) } - d.deps(g, n.Target, n.State) + d.deps(g, n.Target, n.Status) return nil }); err != nil { return Plan{}, err } - stages := buildStages(initialStates, g, params) + stages := buildStages(initial, g, params) return Plan{ - Params: params, - InitialNodes: initialStates, - Graph: g, - Stages: stages, + Params: params, + Initial: initial, + Graph: g, + Stages: stages, }, nil } -func buildStages(init []*scpb.Node, g *scgraph.Graph, params Params) []Stage { - // TODO(ajwerner): deal with the case where the target state was +func buildStages(init scpb.State, g *scgraph.Graph, params Params) []Stage { + // TODO(ajwerner): deal with the case where the target status was // fulfilled by something that preceded the initial state. cur := init fulfilled := map[*scpb.Node]struct{}{} diff --git a/pkg/sql/schemachanger/scplan/plan_test.go b/pkg/sql/schemachanger/scplan/plan_test.go index 8079eeaffad9..4c94bd38ece7 100644 --- a/pkg/sql/schemachanger/scplan/plan_test.go +++ b/pkg/sql/schemachanger/scplan/plan_test.go @@ -94,9 +94,9 @@ func TestPlanAlterTable(t *testing.T) { stmts, err := parser.Parse(d.Input) require.NoError(t, err) - var outputNodes []*scpb.Node + var outputNodes scpb.State for i := range stmts { - outputNodes, err = scbuild.Build(ctx, stmts[i].AST, *deps, outputNodes) + outputNodes, err = scbuild.Build(ctx, *deps, outputNodes, stmts[i].AST) require.NoError(t, err) } @@ -121,7 +121,7 @@ func TestPlanAlterTable(t *testing.T) { stmt := stmts[0] alter, ok := stmt.AST.(*tree.AlterTable) require.Truef(t, ok, "not an ALTER TABLE statement: %s", stmt.SQL) - _, err = scbuild.Build(ctx, alter, *deps, nil) + _, err = scbuild.Build(ctx, *deps, nil, alter) require.Truef(t, scbuild.HasNotImplemented(err), "expected unimplemented, got %v", err) return "" @@ -154,9 +154,9 @@ func marshalDeps(t *testing.T, plan *scplan.Plan) string { return plan.Graph.ForEachDepEdgeFrom(n, func(de *scgraph.DepEdge) error { var deps strings.Builder fmt.Fprintf(&deps, "- from: [%s, %s]\n", - scpb.AttributesString(de.From().Element()), de.From().State) + scpb.AttributesString(de.From().Element()), de.From().Status) fmt.Fprintf(&deps, " to: [%s, %s]\n", - scpb.AttributesString(de.To().Element()), de.To().State) + scpb.AttributesString(de.To().Element()), de.To().Status) sortedDeps = append(sortedDeps, deps.String()) return nil }) diff --git a/pkg/sql/schemachanger/scplan/rules.go b/pkg/sql/schemachanger/scplan/rules.go index a0d4d71f3836..303176c0a739 100644 --- a/pkg/sql/schemachanger/scplan/rules.go +++ b/pkg/sql/schemachanger/scplan/rules.go @@ -206,36 +206,36 @@ func directionsMatch(thisDir, thatDir scpb.Target_Direction) func(a, b scpb.Targ var rules = map[scpb.Element]targetRules{ (*scpb.Database)(nil): { deps: targetDepRules{ - scpb.State_DELETE_ONLY: { + scpb.Status_DELETE_ONLY: { { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: databaseDependsOnTable, }, { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: databaseDependsOnView, }, { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: databaseDependsOnSequence, }, { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: databaseDependsOnType, }, { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: databaseDependsOnSchema, }, }, }, backwards: targetOpRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { predicate: func(this *scpb.Database, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -243,7 +243,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_DELETE_ONLY, + nextStatus: scpb.Status_DELETE_ONLY, op: func(this *scpb.Database) []scop.Op { ops := []scop.Op{ &scop.MarkDescriptorAsDropped{ @@ -254,7 +254,7 @@ var rules = map[scpb.Element]targetRules{ }, }, }, - scpb.State_DELETE_ONLY: { + scpb.Status_DELETE_ONLY: { { predicate: func(this *scpb.Database, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -262,7 +262,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_ABSENT, + nextStatus: scpb.Status_ABSENT, nonRevertible: true, op: func(this *scpb.Database) []scop.Op { ops := []scop.Op{ @@ -277,31 +277,31 @@ var rules = map[scpb.Element]targetRules{ }, (*scpb.Schema)(nil): { deps: targetDepRules{ - scpb.State_DELETE_ONLY: { + scpb.Status_DELETE_ONLY: { { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: schemaDependsOnTable, }, { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: schemaDependsOnView, }, { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: schemaDependsOnSequence, }, { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: schemaDependsOnType, }, }, }, backwards: targetOpRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { predicate: func(this *scpb.Schema, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -309,7 +309,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_DELETE_ONLY, + nextStatus: scpb.Status_DELETE_ONLY, op: func(this *scpb.Schema) []scop.Op { ops := []scop.Op{ &scop.MarkDescriptorAsDropped{ @@ -320,7 +320,7 @@ var rules = map[scpb.Element]targetRules{ }, }, }, - scpb.State_DELETE_ONLY: { + scpb.Status_DELETE_ONLY: { { predicate: func(this *scpb.Schema, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -328,7 +328,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_ABSENT, + nextStatus: scpb.Status_ABSENT, nonRevertible: true, op: func(this *scpb.Schema) []scop.Op { ops := []scop.Op{ @@ -343,16 +343,16 @@ var rules = map[scpb.Element]targetRules{ }, (*scpb.SequenceOwnedBy)(nil): { deps: targetDepRules{ - scpb.State_ABSENT: { + scpb.Status_ABSENT: { { dirPredicate: sameDirection, - thatState: scpb.State_DELETE_ONLY, + thatStatus: scpb.Status_DELETE_ONLY, predicate: seqOwnedByReferencesSeq, }, }, }, backwards: targetOpRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { predicate: func(this *scpb.SequenceOwnedBy, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -360,7 +360,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_ABSENT, + nextStatus: scpb.Status_ABSENT, op: func(this *scpb.SequenceOwnedBy) scop.Op { return &scop.RemoveSequenceOwnedBy{ TableID: this.SequenceID, @@ -374,7 +374,7 @@ var rules = map[scpb.Element]targetRules{ (*scpb.RelationDependedOnBy)(nil): { deps: targetDepRules{}, backwards: targetOpRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { predicate: func(this *scpb.RelationDependedOnBy, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -382,7 +382,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_ABSENT, + nextStatus: scpb.Status_ABSENT, op: func(this *scpb.RelationDependedOnBy) scop.Op { return &scop.RemoveRelationDependedOnBy{ TableID: this.TableID, @@ -397,7 +397,7 @@ var rules = map[scpb.Element]targetRules{ (*scpb.TypeReference)(nil): { deps: targetDepRules{}, backwards: targetOpRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { predicate: func(this *scpb.TypeReference, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -406,7 +406,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_ABSENT, + nextStatus: scpb.Status_ABSENT, op: func(this *scpb.TypeReference) scop.Op { return &scop.RemoveTypeBackRef{ TypeID: this.TypeID, @@ -417,7 +417,7 @@ var rules = map[scpb.Element]targetRules{ }, }, forward: targetOpRules{ - scpb.State_ABSENT: { + scpb.Status_ABSENT: { { predicate: func(this *scpb.TypeReference, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -426,7 +426,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_PUBLIC, + nextStatus: scpb.Status_PUBLIC, op: func(this *scpb.TypeReference) scop.Op { return &scop.AddTypeBackRef{ TypeID: this.TypeID, @@ -440,7 +440,7 @@ var rules = map[scpb.Element]targetRules{ (*scpb.DefaultExpression)(nil): { deps: targetDepRules{}, backwards: targetOpRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { predicate: func(this *scpb.DefaultExpression, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -448,7 +448,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_ABSENT, + nextStatus: scpb.Status_ABSENT, op: func(this *scpb.DefaultExpression) []scop.Op { return []scop.Op{ &scop.RemoveColumnDefaultExpression{ @@ -467,16 +467,16 @@ var rules = map[scpb.Element]targetRules{ }, (*scpb.Type)(nil): { deps: targetDepRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { dirPredicate: sameDirection, - thatState: scpb.State_DELETE_ONLY, + thatStatus: scpb.Status_DELETE_ONLY, predicate: typeHasReference, }, }, }, backwards: targetOpRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { predicate: func(this *scpb.Type, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -484,7 +484,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_DELETE_ONLY, + nextStatus: scpb.Status_DELETE_ONLY, op: func(this *scpb.Type) []scop.Op { ops := []scop.Op{ &scop.MarkDescriptorAsDropped{ @@ -495,7 +495,7 @@ var rules = map[scpb.Element]targetRules{ }, }, }, - scpb.State_DELETE_ONLY: { + scpb.Status_DELETE_ONLY: { { predicate: func(this *scpb.Type, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -503,7 +503,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_ABSENT, + nextStatus: scpb.Status_ABSENT, nonRevertible: true, op: func(this *scpb.Type) []scop.Op { ops := []scop.Op{ @@ -518,17 +518,17 @@ var rules = map[scpb.Element]targetRules{ }, (*scpb.Sequence)(nil): { deps: targetDepRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: defaultExprReferencesColumn, }, }, }, backwards: targetOpRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { predicate: func(this *scpb.Sequence, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -536,7 +536,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_ABSENT, + nextStatus: scpb.Status_ABSENT, nonRevertible: true, op: func(this *scpb.Sequence) []scop.Op { ops := []scop.Op{ @@ -559,22 +559,22 @@ var rules = map[scpb.Element]targetRules{ }, (*scpb.View)(nil): { deps: targetDepRules{ - scpb.State_ABSENT: { + scpb.Status_ABSENT: { { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: thatViewDependsOnThisView, }, { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: typeReferenceIsFromThisView, }, }, }, backwards: targetOpRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { predicate: func(this *scpb.View, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -582,7 +582,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_ABSENT, + nextStatus: scpb.Status_ABSENT, nonRevertible: true, op: func(this *scpb.View) []scop.Op { ops := []scop.Op{ @@ -604,7 +604,7 @@ var rules = map[scpb.Element]targetRules{ (*scpb.OutboundForeignKey)(nil): { deps: nil, backwards: targetOpRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { predicate: func(this *scpb.OutboundForeignKey, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -612,7 +612,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_ABSENT, + nextStatus: scpb.Status_ABSENT, op: func(this *scpb.OutboundForeignKey) scop.Op { return &scop.DropForeignKeyRef{ TableID: this.OriginID, @@ -628,7 +628,7 @@ var rules = map[scpb.Element]targetRules{ (*scpb.InboundForeignKey)(nil): { deps: nil, backwards: targetOpRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { predicate: func(this *scpb.InboundForeignKey, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -636,7 +636,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_ABSENT, + nextStatus: scpb.Status_ABSENT, op: func(this *scpb.InboundForeignKey) scop.Op { return &scop.DropForeignKeyRef{ TableID: this.OriginID, @@ -651,52 +651,52 @@ var rules = map[scpb.Element]targetRules{ }, (*scpb.Table)(nil): { deps: targetDepRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: indexReferencesTable, }, { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: outFkOriginatesFromTable, }, { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: inFkReferencesTable, }, { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: tableReferencesView, }, { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: tableReferencesType, }, { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: seqOwnedByReferencesTable, }, { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: tableReferencesDefaultExpression, }, { dirPredicate: sameDirection, - thatState: scpb.State_ABSENT, + thatStatus: scpb.Status_ABSENT, predicate: tableReferencedByDependedOnBy, }, }, }, backwards: targetOpRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { predicate: func(this *scpb.Table, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -704,7 +704,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_ABSENT, + nextStatus: scpb.Status_ABSENT, nonRevertible: true, op: func(this *scpb.Table) []scop.Op { ops := []scop.Op{ @@ -725,33 +725,33 @@ var rules = map[scpb.Element]targetRules{ }, (*scpb.Column)(nil): { deps: targetDepRules{ - scpb.State_DELETE_AND_WRITE_ONLY: { + scpb.Status_DELETE_AND_WRITE_ONLY: { { dirPredicate: sameDirection, - thatState: scpb.State_DELETE_AND_WRITE_ONLY, + thatStatus: scpb.Status_DELETE_AND_WRITE_ONLY, predicate: columnInSecondaryIndex, }, { dirPredicate: sameDirection, - thatState: scpb.State_DELETE_AND_WRITE_ONLY, + thatStatus: scpb.Status_DELETE_AND_WRITE_ONLY, predicate: columnInPrimaryIndex, }, }, - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { dirPredicate: bothDirectionsEqual(scpb.Target_ADD), - thatState: scpb.State_PUBLIC, + thatStatus: scpb.Status_PUBLIC, predicate: columnInSecondaryIndex, }, { dirPredicate: bothDirectionsEqual(scpb.Target_ADD), - thatState: scpb.State_PUBLIC, + thatStatus: scpb.Status_PUBLIC, predicate: columnInPrimaryIndex, }, }, }, forward: targetOpRules{ - scpb.State_ABSENT: { + scpb.Status_ABSENT: { { predicate: func(this *scpb.Column, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -759,7 +759,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_DELETE_ONLY, + nextStatus: scpb.Status_DELETE_ONLY, op: func(this *scpb.Column) scop.Op { return &scop.MakeAddedColumnDeleteOnly{ TableID: this.TableID, @@ -770,7 +770,7 @@ var rules = map[scpb.Element]targetRules{ }, }, }, - scpb.State_DELETE_ONLY: { + scpb.Status_DELETE_ONLY: { { predicate: func(this *scpb.Column, flags Params) bool { return flags.ExecutionPhase == PreCommitPhase && @@ -778,7 +778,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_DELETE_AND_WRITE_ONLY, + nextStatus: scpb.Status_DELETE_AND_WRITE_ONLY, nonRevertible: true, op: func(this *scpb.Column) scop.Op { return &scop.MakeAddedColumnDeleteAndWriteOnly{ @@ -788,9 +788,9 @@ var rules = map[scpb.Element]targetRules{ }, }, }, - scpb.State_DELETE_AND_WRITE_ONLY: { + scpb.Status_DELETE_AND_WRITE_ONLY: { { - nextState: scpb.State_PUBLIC, + nextStatus: scpb.Status_PUBLIC, op: func(this *scpb.Column) scop.Op { return &scop.MakeColumnPublic{ TableID: this.TableID, @@ -801,9 +801,9 @@ var rules = map[scpb.Element]targetRules{ }, }, backwards: targetOpRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { - nextState: scpb.State_DELETE_AND_WRITE_ONLY, + nextStatus: scpb.Status_DELETE_AND_WRITE_ONLY, op: func(this *scpb.Column) scop.Op { return &scop.MakeDroppedColumnDeleteAndWriteOnly{ TableID: this.TableID, @@ -812,7 +812,7 @@ var rules = map[scpb.Element]targetRules{ }, }, }, - scpb.State_DELETE_AND_WRITE_ONLY: { + scpb.Status_DELETE_AND_WRITE_ONLY: { { predicate: func(this *scpb.Column, flags Params) bool { return !flags.CreatedDescriptorIDs.Contains(this.TableID) && @@ -821,7 +821,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_DELETE_ONLY, + nextStatus: scpb.Status_DELETE_ONLY, op: func(this *scpb.Column) scop.Op { return &scop.MakeDroppedColumnDeleteOnly{ TableID: this.TableID, @@ -830,9 +830,9 @@ var rules = map[scpb.Element]targetRules{ }, }, }, - scpb.State_DELETE_ONLY: { + scpb.Status_DELETE_ONLY: { { - nextState: scpb.State_ABSENT, + nextStatus: scpb.Status_ABSENT, op: func(this *scpb.Column) scop.Op { return &scop.MakeColumnAbsent{ TableID: this.TableID, @@ -845,28 +845,28 @@ var rules = map[scpb.Element]targetRules{ }, (*scpb.PrimaryIndex)(nil): { deps: targetDepRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { dirPredicate: directionsMatch(scpb.Target_ADD, scpb.Target_DROP), - thatState: scpb.State_DELETE_AND_WRITE_ONLY, + thatStatus: scpb.Status_DELETE_AND_WRITE_ONLY, predicate: primaryIndexesReferenceEachOther, }, }, - scpb.State_DELETE_AND_WRITE_ONLY: { + scpb.Status_DELETE_AND_WRITE_ONLY: { { dirPredicate: directionsMatch(scpb.Target_DROP, scpb.Target_ADD), - thatState: scpb.State_PUBLIC, + thatStatus: scpb.Status_PUBLIC, predicate: primaryIndexesReferenceEachOther, }, { dirPredicate: bothDirectionsEqual(scpb.Target_DROP), - thatState: scpb.State_DELETE_AND_WRITE_ONLY, + thatStatus: scpb.Status_DELETE_AND_WRITE_ONLY, predicate: primaryIndexContainsColumn, }, }, }, forward: targetOpRules{ - scpb.State_ABSENT: { + scpb.Status_ABSENT: { { predicate: func(this *scpb.PrimaryIndex, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -874,7 +874,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_DELETE_ONLY, + nextStatus: scpb.Status_DELETE_ONLY, op: func(this *scpb.PrimaryIndex) scop.Op { return &scop.MakeAddedIndexDeleteOnly{ TableID: this.TableID, @@ -883,7 +883,7 @@ var rules = map[scpb.Element]targetRules{ }, }, }, - scpb.State_DELETE_ONLY: { + scpb.Status_DELETE_ONLY: { { predicate: func(this *scpb.PrimaryIndex, flags Params) bool { return flags.ExecutionPhase == PreCommitPhase && @@ -891,7 +891,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_DELETE_AND_WRITE_ONLY, + nextStatus: scpb.Status_DELETE_AND_WRITE_ONLY, op: func(this *scpb.PrimaryIndex) scop.Op { return &scop.MakeAddedIndexDeleteAndWriteOnly{ TableID: this.TableID, @@ -900,7 +900,7 @@ var rules = map[scpb.Element]targetRules{ }, }, }, - scpb.State_DELETE_AND_WRITE_ONLY: { + scpb.Status_DELETE_AND_WRITE_ONLY: { { // If this index is unique (which primary indexes should be) and // there's not already a covering primary index, then we'll need to @@ -910,7 +910,7 @@ var rules = map[scpb.Element]targetRules{ predicate: func(this *scpb.PrimaryIndex, flags Params) bool { return this.Index.Unique }, - nextState: scpb.State_BACKFILLED, + nextStatus: scpb.Status_BACKFILLED, op: func(this *scpb.PrimaryIndex) scop.Op { return &scop.BackfillIndex{ TableID: this.TableID, @@ -919,7 +919,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_VALIDATED, + nextStatus: scpb.Status_VALIDATED, op: func(this *scpb.PrimaryIndex) scop.Op { return &scop.BackfillIndex{ TableID: this.TableID, @@ -928,9 +928,9 @@ var rules = map[scpb.Element]targetRules{ }, }, }, - scpb.State_BACKFILLED: { + scpb.Status_BACKFILLED: { { - nextState: scpb.State_VALIDATED, + nextStatus: scpb.Status_VALIDATED, op: func(this *scpb.PrimaryIndex) scop.Op { return &scop.ValidateUniqueIndex{ TableID: this.TableID, @@ -940,9 +940,9 @@ var rules = map[scpb.Element]targetRules{ }, }, }, - scpb.State_VALIDATED: { + scpb.Status_VALIDATED: { { - nextState: scpb.State_PUBLIC, + nextStatus: scpb.Status_PUBLIC, op: func(this *scpb.PrimaryIndex) scop.Op { return &scop.MakeAddedPrimaryIndexPublic{ TableID: this.TableID, @@ -953,7 +953,7 @@ var rules = map[scpb.Element]targetRules{ }, }, backwards: targetOpRules{ - scpb.State_PUBLIC: { + scpb.Status_PUBLIC: { { predicate: func(this *scpb.PrimaryIndex, flags Params) bool { return flags.ExecutionPhase == StatementPhase && @@ -961,7 +961,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_DELETE_AND_WRITE_ONLY, + nextStatus: scpb.Status_DELETE_AND_WRITE_ONLY, op: func(this *scpb.PrimaryIndex) scop.Op { // Most of this logic is taken from MakeMutationComplete(). return &scop.MakeDroppedPrimaryIndexDeleteAndWriteOnly{ @@ -971,7 +971,7 @@ var rules = map[scpb.Element]targetRules{ }, }, }, - scpb.State_DELETE_AND_WRITE_ONLY: { + scpb.Status_DELETE_AND_WRITE_ONLY: { { predicate: func(this *scpb.PrimaryIndex, flags Params) bool { return flags.ExecutionPhase == PreCommitPhase && @@ -979,7 +979,7 @@ var rules = map[scpb.Element]targetRules{ }, }, { - nextState: scpb.State_DELETE_ONLY, + nextStatus: scpb.Status_DELETE_ONLY, op: func(this *scpb.PrimaryIndex) scop.Op { return &scop.MakeDroppedIndexDeleteOnly{ TableID: this.TableID, @@ -988,9 +988,9 @@ var rules = map[scpb.Element]targetRules{ }, }, }, - scpb.State_DELETE_ONLY: { + scpb.Status_DELETE_ONLY: { { - nextState: scpb.State_ABSENT, + nextStatus: scpb.Status_ABSENT, op: func(this *scpb.PrimaryIndex) scop.Op { return &scop.MakeIndexAbsent{ TableID: this.TableID, diff --git a/pkg/sql/schemachanger/scplan/testdata/drop_database b/pkg/sql/schemachanger/scplan/testdata/drop_database index 8f002bc152b3..3bf9fb6b88cc 100644 --- a/pkg/sql/schemachanger/scplan/testdata/drop_database +++ b/pkg/sql/schemachanger/scplan/testdata/drop_database @@ -202,7 +202,7 @@ DROP DATABASE db1 CASCADE - from: [Table:{DescID: 56}, PUBLIC] to: [DefaultExpression:{DescID: 56, ColumnID: 3}, ABSENT] - from: [Table:{DescID: 56}, PUBLIC] - to: [RelationDependedOnBy:{DescID: 55, DepID: 56}, ABSENT] + to: [RelationDependedOnBy:{DescID: 55, ReferencedDescID: 56}, ABSENT] - from: [Table:{DescID: 56}, PUBLIC] to: [View:{DescID: 58}, ABSENT] - from: [Table:{DescID: 57}, PUBLIC] @@ -212,11 +212,11 @@ DROP DATABASE db1 CASCADE - from: [Table:{DescID: 57}, PUBLIC] to: [DefaultExpression:{DescID: 57, ColumnID: 3}, ABSENT] - from: [Table:{DescID: 57}, PUBLIC] - to: [RelationDependedOnBy:{DescID: 54, DepID: 57}, ABSENT] + to: [RelationDependedOnBy:{DescID: 54, ReferencedDescID: 57}, ABSENT] - from: [Type:{DescID: 62}, PUBLIC] - to: [TypeReference:{DescID: 64, DepID: 62}, DELETE_ONLY] + to: [TypeReference:{DescID: 64, ReferencedDescID: 62}, DELETE_ONLY] - from: [Type:{DescID: 63}, PUBLIC] - to: [TypeReference:{DescID: 64, DepID: 63}, DELETE_ONLY] + to: [TypeReference:{DescID: 64, ReferencedDescID: 63}, DELETE_ONLY] - from: [View:{DescID: 58}, ABSENT] to: [View:{DescID: 59}, ABSENT] - from: [View:{DescID: 58}, ABSENT] @@ -228,6 +228,6 @@ DROP DATABASE db1 CASCADE - from: [View:{DescID: 61}, ABSENT] to: [View:{DescID: 64}, ABSENT] - from: [View:{DescID: 64}, ABSENT] - to: [TypeReference:{DescID: 64, DepID: 62}, ABSENT] + to: [TypeReference:{DescID: 64, ReferencedDescID: 62}, ABSENT] - from: [View:{DescID: 64}, ABSENT] - to: [TypeReference:{DescID: 64, DepID: 63}, ABSENT] + to: [TypeReference:{DescID: 64, ReferencedDescID: 63}, ABSENT] diff --git a/pkg/sql/schemachanger/scplan/testdata/drop_schema b/pkg/sql/schemachanger/scplan/testdata/drop_schema index 713e18ba03d5..b1de71fd3d2b 100644 --- a/pkg/sql/schemachanger/scplan/testdata/drop_schema +++ b/pkg/sql/schemachanger/scplan/testdata/drop_schema @@ -64,13 +64,13 @@ DROP SCHEMA defaultdb.SC1 CASCADE - from: [Table:{DescID: 54}, PUBLIC] to: [DefaultExpression:{DescID: 54, ColumnID: 3}, ABSENT] - from: [Table:{DescID: 54}, PUBLIC] - to: [RelationDependedOnBy:{DescID: 53, DepID: 54}, ABSENT] + to: [RelationDependedOnBy:{DescID: 53, ReferencedDescID: 54}, ABSENT] - from: [Table:{DescID: 54}, PUBLIC] to: [View:{DescID: 55}, ABSENT] - from: [Type:{DescID: 59}, PUBLIC] - to: [TypeReference:{DescID: 61, DepID: 59}, DELETE_ONLY] + to: [TypeReference:{DescID: 61, ReferencedDescID: 59}, DELETE_ONLY] - from: [Type:{DescID: 60}, PUBLIC] - to: [TypeReference:{DescID: 61, DepID: 60}, DELETE_ONLY] + to: [TypeReference:{DescID: 61, ReferencedDescID: 60}, DELETE_ONLY] - from: [View:{DescID: 55}, ABSENT] to: [View:{DescID: 56}, ABSENT] - from: [View:{DescID: 55}, ABSENT] @@ -82,9 +82,9 @@ DROP SCHEMA defaultdb.SC1 CASCADE - from: [View:{DescID: 58}, ABSENT] to: [View:{DescID: 61}, ABSENT] - from: [View:{DescID: 61}, ABSENT] - to: [TypeReference:{DescID: 61, DepID: 59}, ABSENT] + to: [TypeReference:{DescID: 61, ReferencedDescID: 59}, ABSENT] - from: [View:{DescID: 61}, ABSENT] - to: [TypeReference:{DescID: 61, DepID: 60}, ABSENT] + to: [TypeReference:{DescID: 61, ReferencedDescID: 60}, ABSENT] ops DROP SCHEMA defaultdb.SC1 CASCADE diff --git a/pkg/sql/schemachanger/scplan/testdata/drop_table b/pkg/sql/schemachanger/scplan/testdata/drop_table index 5c83e40cbc01..c4953a083bcf 100644 --- a/pkg/sql/schemachanger/scplan/testdata/drop_table +++ b/pkg/sql/schemachanger/scplan/testdata/drop_table @@ -104,7 +104,7 @@ Stage 1 deps DROP TABLE defaultdb.shipments CASCADE; ---- -- from: [SequenceOwnedBy:{DescID: 56, DepID: 55}, ABSENT] +- from: [SequenceOwnedBy:{DescID: 56, ReferencedDescID: 55}, ABSENT] to: [Sequence:{DescID: 56}, DELETE_ONLY] - from: [Table:{DescID: 55}, PUBLIC] to: [DefaultExpression:{DescID: 55, ColumnID: 1}, ABSENT] @@ -117,12 +117,12 @@ DROP TABLE defaultdb.shipments CASCADE; - from: [Table:{DescID: 55}, PUBLIC] to: [DefaultExpression:{DescID: 55, ColumnID: 5}, ABSENT] - from: [Table:{DescID: 55}, PUBLIC] - to: [OutboundForeignKey:{DescID: 55, DepID: 52, ElementName: "fk_customers"}, ABSENT] + to: [OutboundForeignKey:{DescID: 55, ReferencedDescID: 52, ElementName: "fk_customers"}, ABSENT] - from: [Table:{DescID: 55}, PUBLIC] - to: [OutboundForeignKey:{DescID: 55, DepID: 53, ElementName: "fk_orders"}, ABSENT] + to: [OutboundForeignKey:{DescID: 55, ReferencedDescID: 53, ElementName: "fk_orders"}, ABSENT] - from: [Table:{DescID: 55}, PUBLIC] - to: [RelationDependedOnBy:{DescID: 54, DepID: 55}, ABSENT] + to: [RelationDependedOnBy:{DescID: 54, ReferencedDescID: 55}, ABSENT] - from: [Table:{DescID: 55}, PUBLIC] - to: [SequenceOwnedBy:{DescID: 56, DepID: 55}, ABSENT] + to: [SequenceOwnedBy:{DescID: 56, ReferencedDescID: 55}, ABSENT] - from: [Table:{DescID: 55}, PUBLIC] to: [View:{DescID: 57}, ABSENT] diff --git a/pkg/sql/schemachanger/scplan/testdata/drop_view b/pkg/sql/schemachanger/scplan/testdata/drop_view index 48913ece0144..79680a2c1503 100644 --- a/pkg/sql/schemachanger/scplan/testdata/drop_view +++ b/pkg/sql/schemachanger/scplan/testdata/drop_view @@ -97,6 +97,6 @@ DROP VIEW defaultdb.v1 CASCADE - from: [View:{DescID: 56}, ABSENT] to: [View:{DescID: 59}, ABSENT] - from: [View:{DescID: 59}, ABSENT] - to: [TypeReference:{DescID: 59, DepID: 57}, ABSENT] + to: [TypeReference:{DescID: 59, ReferencedDescID: 57}, ABSENT] - from: [View:{DescID: 59}, ABSENT] - to: [TypeReference:{DescID: 59, DepID: 58}, ABSENT] + to: [TypeReference:{DescID: 59, ReferencedDescID: 58}, ABSENT] diff --git a/pkg/util/tracing/BUILD.bazel b/pkg/util/tracing/BUILD.bazel index f5c0b4be8f16..28b6a5233fd3 100644 --- a/pkg/util/tracing/BUILD.bazel +++ b/pkg/util/tracing/BUILD.bazel @@ -16,6 +16,7 @@ go_library( "tags.go", "test_utils.go", "tracer.go", + "utils.go", ], importpath = "github.com/cockroachdb/cockroach/pkg/util/tracing", visibility = ["//visibility:public"], @@ -31,6 +32,8 @@ go_library( "//pkg/util/tracing/tracingpb", "@com_github_cockroachdb_errors//:errors", "@com_github_cockroachdb_logtags//:logtags", + "@com_github_gogo_protobuf//jsonpb", + "@com_github_gogo_protobuf//proto", "@com_github_gogo_protobuf//types", "@com_github_grpc_ecosystem_grpc_opentracing//go/otgrpc", "@com_github_jaegertracing_jaeger//model/json", diff --git a/pkg/util/tracing/collector/collector.go b/pkg/util/tracing/collector/collector.go index 712098b3f303..10753aa8edd5 100644 --- a/pkg/util/tracing/collector/collector.go +++ b/pkg/util/tracing/collector/collector.go @@ -190,6 +190,7 @@ func (t *TraceCollector) getTraceSpanRecordingsForNode( } res = append(res, recording.RecordedSpans) } + resp.Recordings = nil // This sort ensures that if a node has multiple trace.Recordings then they // are ordered relative to each other by StartTime. diff --git a/pkg/util/tracing/recording.go b/pkg/util/tracing/recording.go index 2192aaa15629..cae39839ddff 100644 --- a/pkg/util/tracing/recording.go +++ b/pkg/util/tracing/recording.go @@ -21,6 +21,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/util/tracing/tracingpb" "github.com/cockroachdb/errors" + "github.com/gogo/protobuf/types" jaegerjson "github.com/jaegertracing/jaeger/model/json" "github.com/opentracing/opentracing-go" otlog "github.com/opentracing/opentracing-go/log" @@ -213,6 +214,24 @@ func (r Recording) visitSpan(sp tracingpb.RecordedSpan, depth int) []traceLogDat ownLogs = append(ownLogs, conv(lr, lastLog.Timestamp)) } + // If the span was verbose then the Structured events would have been + // stringified and included in the Logs above. If the span was not verbose + // we should add the Structured events now. + if !isVerbose(sp) { + sp.Structured(func(sr *types.Any, t time.Time) { + lr := opentracing.LogRecord{ + Timestamp: t, + } + str, err := MessageToJSONString(sr, true /* emitDefaults */) + if err != nil { + return + } + lr.Fields = append(lr.Fields, otlog.String("structured", str)) + lastLog := ownLogs[len(ownLogs)-1] + ownLogs = append(ownLogs, conv(lr, lastLog.Timestamp)) + }) + } + childSpans := make([][]traceLogData, 0) for _, osp := range r { if osp.ParentSpanID != sp.SpanID { @@ -261,7 +280,7 @@ func (r Recording) visitSpan(sp tracingpb.RecordedSpan, depth int) []traceLogDat // The format is described here: https://github.com/jaegertracing/jaeger-ui/issues/381#issuecomment-494150826 // // The statement is passed in so it can be included in the trace. -func (r Recording) ToJaegerJSON(stmt string) (string, error) { +func (r Recording) ToJaegerJSON(stmt, comment, nodeStr string) (string, error) { if len(r) == 0 { return "", nil } @@ -295,6 +314,10 @@ func (r Recording) ToJaegerJSON(stmt string) (string, error) { break } } + // If we have passed in an explicit nodeStr then use that as a processID. + if nodeStr != "" { + node = nodeStr + } pid := jaegerjson.ProcessID(node) if _, ok := processes[pid]; !ok { processes[pid] = jaegerjson.Process{ @@ -345,6 +368,26 @@ func (r Recording) ToJaegerJSON(stmt string) (string, error) { } s.Logs = append(s.Logs, jl) } + + // If the span was verbose then the Structured events would have been + // stringified and included in the Logs above. If the span was not verbose + // we should add the Structured events now. + if !isVerbose(sp) { + sp.Structured(func(sr *types.Any, t time.Time) { + jl := jaegerjson.Log{Timestamp: uint64(t.UnixNano() / 1000)} + jsonStr, err := MessageToJSONString(sr, true /* emitDefaults */) + if err != nil { + return + } + jl.Fields = append(jl.Fields, jaegerjson.KeyValue{ + Key: "structured", + Value: jsonStr, + Type: "STRING", + }) + s.Logs = append(s.Logs, jl) + }) + } + t.Spans = append(t.Spans, s) } @@ -353,11 +396,7 @@ func (r Recording) ToJaegerJSON(stmt string) (string, error) { // Add a comment that will show-up at the top of the JSON file, is someone opens the file. // NOTE: This comment is scarce on newlines because they appear as \n in the // generated file doing more harm than good. - Comment: fmt.Sprintf(`This is a trace for SQL statement: %s -This trace can be imported into Jaeger for visualization. From the Jaeger Search screen, select JSON File. -Jaeger can be started using docker with: docker run -d --name jaeger -p 16686:16686 jaegertracing/all-in-one:1.17 -The UI can then be accessed at http://localhost:16686/search`, - stmt), + Comment: comment, } json, err := json.MarshalIndent(data, "" /* prefix */, "\t" /* indent */) if err != nil { @@ -374,6 +413,15 @@ type TraceCollection struct { Data []jaegerjson.Trace `json:"data"` } +// isVerbose returns true if the RecordedSpan was started is a verbose mode. +func isVerbose(s tracingpb.RecordedSpan) bool { + if s.Baggage == nil { + return false + } + _, isVerbose := s.Baggage[verboseTracingBaggageKey] + return isVerbose +} + // TestingCheckRecordedSpans checks whether a recording looks like an expected // one represented by a string with one line per expected span and one line per // expected event (i.e. log message), with a tab-indentation for child spans. diff --git a/pkg/util/tracing/span_test.go b/pkg/util/tracing/span_test.go index d92436f2e450..9dec66c52f3c 100644 --- a/pkg/util/tracing/span_test.go +++ b/pkg/util/tracing/span_test.go @@ -225,6 +225,7 @@ func TestSpanRecordStructured(t *testing.T) { `)) require.NoError(t, TestingCheckRecording(rec, ` === operation:root + structured:{"@type":"type.googleapis.com/google.protobuf.Int32Value","value":4} `)) } diff --git a/pkg/util/tracing/tracingpb/recorded_span.pb.go b/pkg/util/tracing/tracingpb/recorded_span.pb.go index 466cb9c3d234..f554bb383cb6 100644 --- a/pkg/util/tracing/tracingpb/recorded_span.pb.go +++ b/pkg/util/tracing/tracingpb/recorded_span.pb.go @@ -216,12 +216,13 @@ var xxx_messageInfo_RecordedSpan proto.InternalMessageInfo // // See RecordedSpan for the description of the fields. type NormalizedSpan struct { - Operation string `protobuf:"bytes,1,opt,name=operation,proto3" json:"operation,omitempty"` - Tags map[string]string `protobuf:"bytes,2,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - StartTime time.Time `protobuf:"bytes,3,opt,name=start_time,json=startTime,proto3,stdtime" json:"start_time"` - Duration time.Duration `protobuf:"bytes,4,opt,name=duration,proto3,stdduration" json:"duration"` - Logs []LogRecord `protobuf:"bytes,5,rep,name=logs,proto3" json:"logs"` - Children []NormalizedSpan `protobuf:"bytes,6,rep,name=children,proto3" json:"children"` + Operation string `protobuf:"bytes,1,opt,name=operation,proto3" json:"operation,omitempty"` + Tags map[string]string `protobuf:"bytes,2,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + StartTime time.Time `protobuf:"bytes,3,opt,name=start_time,json=startTime,proto3,stdtime" json:"start_time"` + Duration time.Duration `protobuf:"bytes,4,opt,name=duration,proto3,stdduration" json:"duration"` + Logs []LogRecord `protobuf:"bytes,5,rep,name=logs,proto3" json:"logs"` + StructuredRecords []StructuredRecord `protobuf:"bytes,7,rep,name=structured_records,json=structuredRecords,proto3" json:"structured_records"` + Children []NormalizedSpan `protobuf:"bytes,6,rep,name=children,proto3" json:"children"` } func (m *NormalizedSpan) Reset() { *m = NormalizedSpan{} } @@ -269,55 +270,55 @@ func init() { } var fileDescriptor_e9b7b35ae7ab4ca8 = []byte{ - // 759 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x41, 0x6f, 0xda, 0x48, - 0x14, 0xc6, 0x60, 0xc0, 0x8c, 0xd9, 0x2c, 0x3b, 0xca, 0xc1, 0x41, 0x91, 0x8d, 0x58, 0x69, 0x15, - 0x6d, 0x24, 0xb3, 0xcb, 0x4a, 0xbb, 0x11, 0x7b, 0xa8, 0x4a, 0x49, 0x2b, 0xaa, 0x28, 0xad, 0x9c, - 0xf4, 0x92, 0x0b, 0x1a, 0xec, 0x89, 0x63, 0xc5, 0xf1, 0x58, 0xe3, 0xa1, 0x12, 0x55, 0x7f, 0x44, - 0x8e, 0x39, 0xf6, 0x6f, 0xf4, 0x17, 0x34, 0xc7, 0x1c, 0x73, 0xa2, 0xad, 0xf3, 0x47, 0x2a, 0x8f, - 0xc7, 0x26, 0x21, 0x95, 0x28, 0xe5, 0x64, 0xcf, 0x7b, 0xdf, 0xf7, 0xcd, 0x9b, 0xf7, 0xbe, 0x19, - 0xf0, 0xe7, 0x84, 0x79, 0x7e, 0x87, 0x51, 0x64, 0x7b, 0x81, 0x9b, 0x7d, 0xc3, 0x71, 0x87, 0x62, - 0x9b, 0x50, 0x07, 0x3b, 0xa3, 0x28, 0x44, 0x81, 0x19, 0x52, 0xc2, 0x08, 0x6c, 0xd9, 0xc4, 0x3e, - 0xa7, 0x04, 0xd9, 0x67, 0x66, 0xc2, 0x32, 0x05, 0xda, 0xcc, 0x59, 0xcd, 0x4d, 0x97, 0xb8, 0x84, - 0x83, 0x3b, 0xc9, 0x5f, 0xca, 0x6b, 0x6e, 0xb9, 0x84, 0xb8, 0x3e, 0xee, 0xf0, 0xd5, 0x78, 0x72, - 0xda, 0x41, 0xc1, 0x54, 0xa4, 0x8c, 0xc5, 0x14, 0xf3, 0x2e, 0x70, 0xc4, 0xd0, 0x45, 0x28, 0x00, - 0xfa, 0x22, 0xc0, 0x99, 0x50, 0xc4, 0x3c, 0x22, 0x6a, 0x6a, 0x7f, 0x92, 0x40, 0xed, 0x80, 0xb8, - 0x16, 0x2f, 0x17, 0xee, 0x01, 0x39, 0x11, 0xd0, 0xa4, 0x96, 0xb4, 0xa3, 0x76, 0x9b, 0x66, 0x4a, - 0x36, 0x33, 0xb2, 0x79, 0x9c, 0xa9, 0xf7, 0x95, 0xeb, 0x99, 0x51, 0xb8, 0xfc, 0x6c, 0x48, 0x16, - 0x67, 0xc0, 0x57, 0xa0, 0x72, 0xea, 0x61, 0xdf, 0x89, 0xb4, 0x62, 0xab, 0xb4, 0xa3, 0x76, 0xff, - 0x36, 0x97, 0x1d, 0xd6, 0xcc, 0xb7, 0x35, 0x9f, 0x27, 0xcc, 0xbe, 0x9c, 0x48, 0x5a, 0x42, 0xa6, - 0xd9, 0x01, 0x65, 0x1e, 0x86, 0x0d, 0x50, 0x3a, 0xc7, 0x53, 0x5e, 0x52, 0xcd, 0x4a, 0x7e, 0xe1, - 0x26, 0x28, 0xbf, 0x45, 0xfe, 0x04, 0x6b, 0x45, 0x1e, 0x4b, 0x17, 0xed, 0xf7, 0xa0, 0x71, 0xc4, - 0xe8, 0xc4, 0x66, 0x13, 0x8a, 0x9d, 0xb5, 0xcf, 0x63, 0x82, 0x6a, 0x88, 0xa6, 0x3e, 0x41, 0x0e, - 0xdf, 0x45, 0xed, 0x6e, 0x3e, 0x22, 0x3f, 0x0d, 0xa6, 0x56, 0x06, 0x6a, 0x7f, 0xac, 0x82, 0xba, - 0x25, 0x66, 0x7e, 0x14, 0xa2, 0x00, 0xfe, 0x01, 0x94, 0xe4, 0xa8, 0x78, 0xe4, 0x39, 0x7c, 0x7b, - 0xb9, 0xaf, 0xc6, 0x33, 0xa3, 0x7a, 0x9c, 0xc4, 0x86, 0x03, 0xab, 0xca, 0x93, 0x43, 0x07, 0xfe, - 0x0e, 0xaa, 0x89, 0x45, 0x12, 0x58, 0x91, 0xc3, 0x40, 0x3c, 0x33, 0x2a, 0x89, 0xc4, 0x70, 0x60, - 0x55, 0x92, 0xd4, 0xd0, 0x81, 0xff, 0x82, 0x8d, 0x10, 0x51, 0x1c, 0xb0, 0x51, 0x86, 0x2d, 0x71, - 0x6c, 0x23, 0x9e, 0x19, 0xf5, 0xd7, 0x3c, 0x23, 0x18, 0xf5, 0x70, 0xbe, 0x72, 0xe0, 0x36, 0xa8, - 0x91, 0x10, 0xa7, 0x03, 0xd7, 0x64, 0xde, 0xad, 0x79, 0x00, 0xbe, 0x01, 0xd5, 0x31, 0x72, 0x5d, - 0xe4, 0x62, 0xad, 0xcc, 0x87, 0xf6, 0xff, 0xf2, 0xa1, 0xdd, 0x3f, 0xa3, 0xd9, 0x4f, 0xd9, 0xfb, - 0x01, 0xa3, 0x53, 0x2b, 0xd3, 0x82, 0x07, 0x40, 0x66, 0xc8, 0x8d, 0xb4, 0x0a, 0xd7, 0xdc, 0x5b, - 0x51, 0xf3, 0x18, 0xb9, 0x51, 0x2a, 0xc8, 0x55, 0xe0, 0x33, 0x00, 0x22, 0x86, 0x28, 0x1b, 0xf1, - 0x41, 0x56, 0x57, 0x18, 0x64, 0x8d, 0xf3, 0x92, 0x0c, 0x7c, 0x02, 0x94, 0xcc, 0xf7, 0x9a, 0xc2, - 0x25, 0xb6, 0x1e, 0x49, 0x0c, 0x04, 0x20, 0x55, 0xb8, 0x4a, 0x14, 0x72, 0x12, 0xdc, 0x07, 0xb2, - 0x4f, 0xdc, 0x48, 0xab, 0xf1, 0x33, 0xed, 0xae, 0x60, 0x6e, 0x61, 0x6b, 0x4e, 0x87, 0x27, 0x40, - 0x77, 0x70, 0x48, 0xb1, 0x8d, 0x18, 0x76, 0x46, 0x5e, 0xc0, 0x30, 0x0d, 0x90, 0x3f, 0x8a, 0x72, - 0xdf, 0x6a, 0x2a, 0xdf, 0xe0, 0xfb, 0x66, 0xdb, 0x9e, 0x73, 0x87, 0x82, 0x3a, 0x77, 0x3c, 0xec, - 0x82, 0xba, 0x4b, 0x28, 0x99, 0x30, 0x2f, 0xe0, 0xa6, 0xab, 0x73, 0x87, 0xfc, 0x1a, 0xcf, 0x0c, - 0xf5, 0x45, 0x16, 0x1f, 0x0e, 0x2c, 0x35, 0x07, 0x0d, 0x1d, 0xd8, 0x04, 0xca, 0xa9, 0x17, 0x78, - 0xd1, 0x19, 0x76, 0xb4, 0x5f, 0x5a, 0xd2, 0x8e, 0x62, 0xe5, 0x6b, 0xe8, 0x02, 0x38, 0xaf, 0x6b, - 0x94, 0xbe, 0x67, 0x91, 0xb6, 0xc1, 0xeb, 0xeb, 0x2e, 0x6f, 0xc0, 0xe2, 0x5d, 0x14, 0x7d, 0xf8, - 0x2d, 0x5a, 0x88, 0x47, 0xcd, 0x1e, 0xa8, 0xdf, 0x37, 0xd2, 0x8f, 0x5e, 0xf8, 0x5e, 0x71, 0x4f, - 0x6a, 0xfe, 0x07, 0x6a, 0xb9, 0x61, 0x56, 0x21, 0xf6, 0xe4, 0xab, 0x0f, 0x46, 0xe1, 0xa5, 0xac, - 0x80, 0x86, 0xda, 0xbe, 0x2d, 0x81, 0x8d, 0x43, 0x42, 0x2f, 0x90, 0xef, 0xbd, 0x13, 0xb7, 0xf7, - 0xc1, 0xc5, 0x91, 0x16, 0x2f, 0xce, 0xa1, 0x70, 0x78, 0xfa, 0xd4, 0xf5, 0x96, 0x37, 0xe3, 0xa1, - 0xfa, 0x12, 0x8f, 0x97, 0xd6, 0xf7, 0xb8, 0xbc, 0x8e, 0xc7, 0xcb, 0xeb, 0x79, 0xdc, 0x02, 0x8a, - 0x7d, 0xe6, 0xf9, 0x0e, 0xc5, 0x81, 0x78, 0x02, 0xfe, 0x5a, 0xb5, 0x41, 0x42, 0x2f, 0xd7, 0xf9, - 0xe9, 0x31, 0xf7, 0x77, 0xaf, 0xbf, 0xea, 0x85, 0xeb, 0x58, 0x97, 0x6e, 0x62, 0x5d, 0xba, 0x8d, - 0x75, 0xe9, 0x4b, 0xac, 0x4b, 0x97, 0x77, 0x7a, 0xe1, 0xe6, 0x4e, 0x2f, 0xdc, 0xde, 0xe9, 0x85, - 0x93, 0x5a, 0x5e, 0xc4, 0xb8, 0xc2, 0xfb, 0xf4, 0xcf, 0xb7, 0x00, 0x00, 0x00, 0xff, 0xff, 0xda, - 0x64, 0x6e, 0x5e, 0xd4, 0x07, 0x00, 0x00, + // 767 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xcf, 0x4f, 0xdb, 0x48, + 0x14, 0x8e, 0x13, 0x27, 0x76, 0xc6, 0x59, 0x36, 0x3b, 0xe2, 0x60, 0x22, 0x64, 0x47, 0x59, 0x69, + 0x85, 0x16, 0xc9, 0xd9, 0xcd, 0x4a, 0x5b, 0x94, 0x1e, 0xaa, 0xa6, 0xa1, 0x55, 0x2a, 0x44, 0x2b, + 0x43, 0x2f, 0x5c, 0xa2, 0x89, 0x3d, 0x18, 0x0b, 0xe3, 0xb1, 0xc6, 0x93, 0x4a, 0xa9, 0xfa, 0x47, + 0x70, 0xe4, 0xd8, 0x7f, 0xa3, 0xc7, 0x9e, 0xca, 0x91, 0x23, 0xa7, 0xb4, 0x35, 0xff, 0x48, 0xe5, + 0xf1, 0x8f, 0x40, 0x40, 0x4a, 0xd3, 0xf4, 0x64, 0xcf, 0x7b, 0xdf, 0xf7, 0xcd, 0x9b, 0x79, 0xdf, + 0x1b, 0xf0, 0xf7, 0x98, 0xb9, 0x5e, 0x9b, 0x51, 0x64, 0xb9, 0xbe, 0x93, 0x7d, 0x83, 0x51, 0x9b, + 0x62, 0x8b, 0x50, 0x1b, 0xdb, 0xc3, 0x30, 0x40, 0xbe, 0x11, 0x50, 0xc2, 0x08, 0x6c, 0x5a, 0xc4, + 0x3a, 0xa5, 0x04, 0x59, 0x27, 0x46, 0xcc, 0x32, 0x52, 0xb4, 0x91, 0xb3, 0x1a, 0xeb, 0x0e, 0x71, + 0x08, 0x07, 0xb7, 0xe3, 0xbf, 0x84, 0xd7, 0xd8, 0x70, 0x08, 0x71, 0x3c, 0xdc, 0xe6, 0xab, 0xd1, + 0xf8, 0xb8, 0x8d, 0xfc, 0x49, 0x9a, 0xd2, 0xe7, 0x53, 0xcc, 0x3d, 0xc3, 0x21, 0x43, 0x67, 0x41, + 0x0a, 0xd0, 0xe6, 0x01, 0xf6, 0x98, 0x22, 0xe6, 0x92, 0xb4, 0xa6, 0xd6, 0x67, 0x01, 0x54, 0xf7, + 0x88, 0x63, 0xf2, 0x72, 0xe1, 0x0e, 0x10, 0x63, 0x01, 0x55, 0x68, 0x0a, 0x5b, 0x4a, 0xa7, 0x61, + 0x24, 0x64, 0x23, 0x23, 0x1b, 0x87, 0x99, 0x7a, 0x4f, 0xbe, 0x9c, 0xea, 0x85, 0xf3, 0x2f, 0xba, + 0x60, 0x72, 0x06, 0x7c, 0x05, 0x2a, 0xc7, 0x2e, 0xf6, 0xec, 0x50, 0x2d, 0x36, 0x4b, 0x5b, 0x4a, + 0xe7, 0x5f, 0x63, 0xd1, 0x61, 0x8d, 0x7c, 0x5b, 0xe3, 0x79, 0xcc, 0xec, 0x89, 0xb1, 0xa4, 0x99, + 0xca, 0x34, 0xda, 0xa0, 0xcc, 0xc3, 0xb0, 0x0e, 0x4a, 0xa7, 0x78, 0xc2, 0x4b, 0xaa, 0x9a, 0xf1, + 0x2f, 0x5c, 0x07, 0xe5, 0xb7, 0xc8, 0x1b, 0x63, 0xb5, 0xc8, 0x63, 0xc9, 0xa2, 0xf5, 0x1e, 0xd4, + 0x0f, 0x18, 0x1d, 0x5b, 0x6c, 0x4c, 0xb1, 0xbd, 0xf2, 0x79, 0x0c, 0x20, 0x05, 0x68, 0xe2, 0x11, + 0x64, 0xf3, 0x5d, 0x94, 0xce, 0xfa, 0x3d, 0xf2, 0x53, 0x7f, 0x62, 0x66, 0xa0, 0xd6, 0x47, 0x09, + 0xd4, 0xcc, 0xb4, 0xe7, 0x07, 0x01, 0xf2, 0xe1, 0x5f, 0x40, 0x8e, 0x8f, 0x8a, 0x87, 0xae, 0xcd, + 0xb7, 0x17, 0x7b, 0x4a, 0x34, 0xd5, 0xa5, 0xc3, 0x38, 0x36, 0xe8, 0x9b, 0x12, 0x4f, 0x0e, 0x6c, + 0xf8, 0x27, 0x90, 0x62, 0x8b, 0xc4, 0xb0, 0x22, 0x87, 0x81, 0x68, 0xaa, 0x57, 0x62, 0x89, 0x41, + 0xdf, 0xac, 0xc4, 0xa9, 0x81, 0x0d, 0xff, 0x07, 0x6b, 0x01, 0xa2, 0xd8, 0x67, 0xc3, 0x0c, 0x5b, + 0xe2, 0xd8, 0x7a, 0x34, 0xd5, 0x6b, 0xaf, 0x79, 0x26, 0x65, 0xd4, 0x82, 0xd9, 0xca, 0x86, 0x9b, + 0xa0, 0x4a, 0x02, 0x9c, 0x34, 0x5c, 0x15, 0xf9, 0x6d, 0xcd, 0x02, 0xf0, 0x0d, 0x90, 0x46, 0xc8, + 0x71, 0x90, 0x83, 0xd5, 0x32, 0x6f, 0xda, 0xe3, 0xc5, 0x4d, 0xbb, 0x7d, 0x46, 0xa3, 0x97, 0xb0, + 0x77, 0x7d, 0x46, 0x27, 0x66, 0xa6, 0x05, 0xf7, 0x80, 0xc8, 0x90, 0x13, 0xaa, 0x15, 0xae, 0xb9, + 0xb3, 0xa4, 0xe6, 0x21, 0x72, 0xc2, 0x44, 0x90, 0xab, 0xc0, 0x67, 0x00, 0x84, 0x0c, 0x51, 0x36, + 0xe4, 0x8d, 0x94, 0x96, 0x68, 0x64, 0x95, 0xf3, 0xe2, 0x0c, 0x7c, 0x02, 0xe4, 0xcc, 0xf7, 0xaa, + 0xcc, 0x25, 0x36, 0xee, 0x49, 0xf4, 0x53, 0x40, 0xa2, 0x70, 0x11, 0x2b, 0xe4, 0x24, 0xb8, 0x0b, + 0x44, 0x8f, 0x38, 0xa1, 0x5a, 0xe5, 0x67, 0xda, 0x5e, 0xc2, 0xdc, 0xa9, 0xad, 0x39, 0x1d, 0x1e, + 0x01, 0xcd, 0xc6, 0x01, 0xc5, 0x16, 0x62, 0xd8, 0x1e, 0xba, 0x3e, 0xc3, 0xd4, 0x47, 0xde, 0x30, + 0xcc, 0x7d, 0xab, 0x2a, 0x7c, 0x83, 0x87, 0xcd, 0xb6, 0x39, 0xe3, 0x0e, 0x52, 0xea, 0xcc, 0xf1, + 0xb0, 0x03, 0x6a, 0x0e, 0xa1, 0x64, 0xcc, 0x5c, 0x9f, 0x9b, 0xae, 0xc6, 0x1d, 0xf2, 0x7b, 0x34, + 0xd5, 0x95, 0x17, 0x59, 0x7c, 0xd0, 0x37, 0x95, 0x1c, 0x34, 0xb0, 0x61, 0x03, 0xc8, 0xc7, 0xae, + 0xef, 0x86, 0x27, 0xd8, 0x56, 0x7f, 0x6b, 0x0a, 0x5b, 0xb2, 0x99, 0xaf, 0xa1, 0x03, 0xe0, 0xac, + 0xae, 0x61, 0xf2, 0x9e, 0x85, 0xea, 0x1a, 0xaf, 0xaf, 0xb3, 0xf8, 0x02, 0xe6, 0x67, 0x31, 0xbd, + 0x87, 0x3f, 0xc2, 0xb9, 0x78, 0xd8, 0xe8, 0x82, 0xda, 0x6d, 0x23, 0xfd, 0xe8, 0xc0, 0x77, 0x8b, + 0x3b, 0x42, 0xe3, 0x11, 0xa8, 0xe6, 0x86, 0x59, 0x86, 0xd8, 0x15, 0x2f, 0x3e, 0xe8, 0x85, 0x97, + 0xa2, 0x0c, 0xea, 0x4a, 0xeb, 0x93, 0x08, 0xd6, 0xf6, 0x09, 0x3d, 0x43, 0x9e, 0xfb, 0x2e, 0x9d, + 0xde, 0x3b, 0x83, 0x23, 0xcc, 0x0f, 0xce, 0x7e, 0xea, 0xf0, 0xe4, 0xa9, 0xeb, 0x2e, 0xbe, 0x8c, + 0xbb, 0xea, 0x0b, 0x3c, 0x5e, 0x5a, 0xdd, 0xe3, 0xe2, 0x2a, 0x1e, 0x2f, 0xaf, 0xe6, 0xf1, 0x87, + 0x7d, 0x23, 0xfd, 0x72, 0xdf, 0x40, 0x13, 0xc8, 0xd6, 0x89, 0xeb, 0xd9, 0x14, 0xfb, 0xe9, 0x5b, + 0xf3, 0xcf, 0xb2, 0x9d, 0x48, 0xc5, 0x73, 0x9d, 0x9f, 0xf6, 0x53, 0x6f, 0xfb, 0xf2, 0x9b, 0x56, + 0xb8, 0x8c, 0x34, 0xe1, 0x2a, 0xd2, 0x84, 0xeb, 0x48, 0x13, 0xbe, 0x46, 0x9a, 0x70, 0x7e, 0xa3, + 0x15, 0xae, 0x6e, 0xb4, 0xc2, 0xf5, 0x8d, 0x56, 0x38, 0xaa, 0xe6, 0x45, 0x8c, 0x2a, 0xbc, 0x21, + 0xff, 0x7d, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x95, 0x4d, 0x31, 0x78, 0x3d, 0x08, 0x00, 0x00, } func (m *LogRecord) Marshal() (dAtA []byte, err error) { @@ -631,6 +632,20 @@ func (m *NormalizedSpan) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.StructuredRecords) > 0 { + for iNdEx := len(m.StructuredRecords) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.StructuredRecords[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRecordedSpan(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + } if len(m.Children) > 0 { for iNdEx := len(m.Children) - 1; iNdEx >= 0; iNdEx-- { { @@ -869,6 +884,12 @@ func (m *NormalizedSpan) Size() (n int) { n += 1 + l + sovRecordedSpan(uint64(l)) } } + if len(m.StructuredRecords) > 0 { + for _, e := range m.StructuredRecords { + l = e.Size() + n += 1 + l + sovRecordedSpan(uint64(l)) + } + } return n } @@ -2150,6 +2171,40 @@ func (m *NormalizedSpan) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StructuredRecords", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecordedSpan + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRecordedSpan + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRecordedSpan + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.StructuredRecords = append(m.StructuredRecords, StructuredRecord{}) + if err := m.StructuredRecords[len(m.StructuredRecords)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipRecordedSpan(dAtA[iNdEx:]) diff --git a/pkg/util/tracing/tracingpb/recorded_span.proto b/pkg/util/tracing/tracingpb/recorded_span.proto index e3a0df8ecb4f..deb3643f3ead 100644 --- a/pkg/util/tracing/tracingpb/recorded_span.proto +++ b/pkg/util/tracing/tracingpb/recorded_span.proto @@ -109,5 +109,6 @@ message NormalizedSpan { google.protobuf.Duration duration = 4 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; repeated LogRecord logs = 5 [(gogoproto.nullable) = false]; + repeated StructuredRecord structured_records = 7 [(gogoproto.nullable) = false]; repeated NormalizedSpan children = 6 [(gogoproto.nullable) = false]; } diff --git a/pkg/util/tracing/utils.go b/pkg/util/tracing/utils.go new file mode 100644 index 000000000000..aa7961313070 --- /dev/null +++ b/pkg/util/tracing/utils.go @@ -0,0 +1,67 @@ +// Copyright 2021 The Cockroach Authors. +// +// Use of this software is governed by the Business Source License +// included in the file licenses/BSL.txt. +// +// As of the Change Date specified in that file, in accordance with +// the Business Source License, use of this software will be governed +// by the Apache License, Version 2.0, included in the file +// licenses/APL.txt. + +package tracing + +import ( + "github.com/cockroachdb/cockroach/pkg/util/protoutil" + "github.com/cockroachdb/cockroach/pkg/util/tracing/tracingpb" + "github.com/cockroachdb/errors" + "github.com/gogo/protobuf/jsonpb" + "github.com/gogo/protobuf/proto" +) + +// TraceToJSON returns the string representation of the trace in JSON format. +// +// TraceToJSON assumes that the first span in the recording contains all the +// other spans. +func TraceToJSON(trace Recording) (string, error) { + root := normalizeSpan(trace[0], trace) + marshaller := jsonpb.Marshaler{ + Indent: "\t", + } + str, err := marshaller.MarshalToString(&root) + if err != nil { + return "", err + } + return str, nil +} + +func normalizeSpan(s tracingpb.RecordedSpan, trace Recording) tracingpb.NormalizedSpan { + var n tracingpb.NormalizedSpan + n.Operation = s.Operation + n.StartTime = s.StartTime + n.Duration = s.Duration + n.Tags = s.Tags + n.Logs = s.Logs + n.StructuredRecords = s.StructuredRecords + + for _, ss := range trace { + if ss.ParentSpanID != s.SpanID { + continue + } + n.Children = append(n.Children, normalizeSpan(ss, trace)) + } + return n +} + +// MessageToJSONString converts a protocol message into a JSON string. The +// emitDefaults flag dictates whether fields with zero values are rendered or +// not. +func MessageToJSONString(msg protoutil.Message, emitDefaults bool) (string, error) { + // Convert to json. + jsonEncoder := jsonpb.Marshaler{EmitDefaults: emitDefaults} + msgJSON, err := jsonEncoder.MarshalToString(msg) + if err != nil { + return "", errors.Newf("error when converting %s to JSON string", proto.MessageName(msg)) + } + + return msgJSON, nil +}