1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-11 02:13:41 +09:00

Merge pull request #1442 from anytypeio/feat-kanban-groups-2a6zuez

[feat-kanban-groups-2a6zuez] kanban groups - statuses and tags only
This commit is contained in:
pzavyalov 2022-07-12 19:04:26 +06:00 committed by GitHub
commit 3c72012afd
Signed by: github
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 8266 additions and 1837 deletions

View file

@ -24,207 +24,211 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) }
var fileDescriptor_93a29dc403579097 = []byte{
// 3190 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x9c, 0xdb, 0x6f, 0x1c, 0x49,
0xf5, 0xc7, 0x77, 0x5e, 0x7e, 0xfb, 0xa3, 0xf7, 0x02, 0x34, 0xb0, 0x2c, 0x66, 0xd7, 0xc9, 0x66,
0x13, 0x5f, 0xe2, 0x78, 0xec, 0xc4, 0x08, 0xc4, 0x45, 0xac, 0xc6, 0x76, 0x9c, 0x58, 0x1b, 0x27,
0xc6, 0xe3, 0x6c, 0xa4, 0x95, 0x90, 0x68, 0xf7, 0x54, 0x66, 0x1a, 0xf7, 0x74, 0x35, 0xdd, 0x35,
0x63, 0x0f, 0x08, 0x24, 0x04, 0x02, 0x81, 0x78, 0x40, 0xe2, 0x91, 0x27, 0x5e, 0xf9, 0x4b, 0x78,
0xdc, 0x47, 0x78, 0x43, 0xbb, 0xff, 0x08, 0xea, 0xee, 0x53, 0x55, 0x5d, 0xa7, 0xeb, 0x54, 0xf7,
0xe4, 0x69, 0x37, 0x73, 0x3e, 0xe7, 0x7c, 0xab, 0xba, 0x4f, 0xdd, 0x4e, 0x75, 0xe2, 0xdd, 0x48,
0x2f, 0x76, 0xd2, 0x8c, 0x0b, 0x9e, 0xef, 0xe4, 0x2c, 0x9b, 0x47, 0x21, 0x93, 0xff, 0xed, 0x97,
0x3f, 0xfb, 0xaf, 0x07, 0xc9, 0x42, 0x2c, 0x52, 0xb6, 0xf2, 0xae, 0x26, 0x43, 0x3e, 0x9d, 0x06,
0xc9, 0x28, 0xaf, 0x90, 0x95, 0x77, 0xb4, 0x85, 0xcd, 0x59, 0x22, 0xe0, 0xf7, 0x07, 0xff, 0xf9,
0x4b, 0xcf, 0x7b, 0xfb, 0x20, 0x8e, 0x58, 0x22, 0x0e, 0xc0, 0xc3, 0xff, 0xd4, 0x7b, 0x6b, 0x90,
0xa6, 0x8f, 0x98, 0xf8, 0x84, 0x65, 0x79, 0xc4, 0x13, 0xff, 0xc3, 0x3e, 0x08, 0xf4, 0xcf, 0xd2,
0xb0, 0x3f, 0x48, 0xd3, 0xbe, 0x36, 0xf6, 0xcf, 0xd8, 0x2f, 0x66, 0x2c, 0x17, 0x2b, 0xb7, 0xdd,
0x50, 0x9e, 0xf2, 0x24, 0x67, 0xfe, 0x4b, 0xef, 0xab, 0x83, 0x34, 0x1d, 0x32, 0x71, 0xc8, 0x8a,
0x0e, 0x0c, 0x45, 0x20, 0x98, 0xbf, 0xde, 0x70, 0x35, 0x01, 0xa5, 0xb1, 0xd1, 0x0e, 0x82, 0xce,
0xb9, 0xf7, 0x46, 0xa1, 0x33, 0x99, 0x89, 0x11, 0xbf, 0x4a, 0xfc, 0x0f, 0x9a, 0x8e, 0x60, 0x52,
0xb1, 0x6f, 0xb9, 0x10, 0x88, 0xfa, 0xc2, 0x7b, 0xf3, 0x45, 0x10, 0xc7, 0x4c, 0x1c, 0x64, 0xac,
0x68, 0xb8, 0xe9, 0x53, 0x99, 0xfa, 0x95, 0x4d, 0xc5, 0xfd, 0xd0, 0xc9, 0x40, 0xe0, 0x4f, 0xbd,
0xb7, 0x2a, 0xcb, 0x19, 0x0b, 0xf9, 0x9c, 0x65, 0xbe, 0xd5, 0x0b, 0x8c, 0xc4, 0x23, 0x6f, 0x40,
0x38, 0xf6, 0x01, 0x4f, 0xe6, 0x2c, 0x13, 0xf6, 0xd8, 0x60, 0x74, 0xc7, 0xd6, 0x10, 0xc4, 0xfe,
0x99, 0xf7, 0xe5, 0x17, 0x3c, 0xbb, 0xcc, 0xd3, 0x20, 0x64, 0xf0, 0x4c, 0xee, 0x98, 0x8e, 0xd2,
0x8a, 0x1f, 0xcb, 0x5a, 0x1b, 0x66, 0x51, 0x18, 0xb2, 0x98, 0x85, 0x82, 0x54, 0xa8, 0xcc, 0xad,
0x0a, 0x0a, 0x03, 0x85, 0xd8, 0xfb, 0x9a, 0x32, 0x3e, 0x62, 0xe2, 0x60, 0x96, 0x65, 0x2c, 0x11,
0xfe, 0x26, 0xe1, 0xae, 0x11, 0xa5, 0x74, 0xb7, 0x0b, 0x6a, 0xe9, 0xcf, 0x23, 0x26, 0x06, 0x71,
0x4c, 0xf6, 0xa7, 0x32, 0xb7, 0xf6, 0x47, 0x61, 0xa0, 0xf0, 0x1b, 0xef, 0x5b, 0xb5, 0x27, 0x26,
0x8e, 0xf3, 0xc7, 0xd1, 0x78, 0x12, 0x47, 0xe3, 0x89, 0x60, 0x23, 0x7f, 0x87, 0x7c, 0x28, 0x26,
0xa8, 0x54, 0x77, 0xbb, 0x3b, 0x58, 0x7a, 0xf8, 0xf0, 0x3a, 0xe5, 0x19, 0xfd, 0xc6, 0x2a, 0x73,
0x6b, 0x0f, 0x15, 0x06, 0x0a, 0x3f, 0xf5, 0xde, 0x1e, 0x84, 0x21, 0x9f, 0x25, 0x6a, 0xb8, 0xa0,
0xc9, 0xa7, 0x32, 0x36, 0xc6, 0xcb, 0x9d, 0x16, 0x4a, 0x0f, 0x18, 0xb0, 0x41, 0x4a, 0x7f, 0x68,
0xf5, 0x43, 0x09, 0x7d, 0xdb, 0x0d, 0x35, 0x62, 0x1f, 0xb2, 0x98, 0x91, 0xb1, 0x2b, 0x63, 0x4b,
0x6c, 0x05, 0x35, 0x62, 0xc3, 0x40, 0xb1, 0xc7, 0x46, 0xc3, 0xe4, 0xb6, 0x1b, 0xaa, 0xcd, 0xa7,
0x10, 0x5b, 0xf0, 0x14, 0xcf, 0xa7, 0xd2, 0x49, 0xf0, 0x94, 0x9a, 0x4f, 0x4d, 0xa4, 0x11, 0xf5,
0x84, 0xcf, 0x19, 0x11, 0xb5, 0x30, 0xb5, 0x44, 0x05, 0x44, 0x0f, 0x68, 0xf9, 0xfe, 0x78, 0xf2,
0x32, 0x1a, 0x3f, 0x4f, 0x47, 0xc5, 0x5b, 0xdc, 0xb4, 0xbf, 0xa0, 0x1a, 0x42, 0x0c, 0x68, 0x02,
0x05, 0xb5, 0x9f, 0x78, 0xde, 0xb3, 0x8b, 0x9f, 0xb3, 0x50, 0x3c, 0x4b, 0x59, 0xe2, 0xdf, 0x34,
0x3c, 0x2b, 0x43, 0xbf, 0xb0, 0xa8, 0xd8, 0x1f, 0x38, 0x08, 0xfd, 0x58, 0xaa, 0xdf, 0x0f, 0x62,
0x9e, 0xe3, 0xc7, 0x02, 0x1e, 0xa5, 0x89, 0x78, 0x2c, 0x08, 0xc1, 0x0d, 0x1d, 0x4e, 0xf8, 0x95,
0xbd, 0xa1, 0x85, 0xc5, 0xdd, 0x50, 0x20, 0xf4, 0x7a, 0x08, 0x0d, 0xb5, 0xad, 0x87, 0xb2, 0x19,
0xae, 0xf5, 0x10, 0x33, 0x10, 0x98, 0x7b, 0x5f, 0xaf, 0x07, 0xde, 0xe7, 0xfc, 0x72, 0x1a, 0x64,
0x97, 0xfe, 0x5d, 0xda, 0x59, 0x32, 0x4a, 0x68, 0xab, 0x13, 0xab, 0x27, 0xad, 0xba, 0xe0, 0x90,
0xe1, 0x49, 0xcb, 0xf0, 0x1f, 0x32, 0x6a, 0xd2, 0xb2, 0x60, 0xf8, 0xa5, 0x3e, 0xca, 0x82, 0x74,
0x62, 0x7f, 0xa9, 0xa5, 0xc9, 0xfd, 0x52, 0x25, 0x82, 0xdf, 0xc0, 0x90, 0x05, 0x59, 0x38, 0xb1,
0xbf, 0x81, 0xca, 0xe6, 0x7e, 0x03, 0x8a, 0x81, 0xc0, 0x99, 0xf7, 0x8d, 0x7a, 0xe0, 0xe1, 0xec,
0x22, 0x0f, 0xb3, 0xe8, 0x82, 0xf9, 0x5b, 0xb4, 0xb7, 0x82, 0x94, 0xd4, 0xbd, 0x6e, 0x30, 0x68,
0x46, 0x9e, 0x0f, 0x9a, 0xd2, 0x76, 0x3c, 0xca, 0xfd, 0x0d, 0x6b, 0x8c, 0x1a, 0xa1, 0xd4, 0x36,
0x3b, 0x90, 0x20, 0x75, 0xed, 0x7d, 0xb3, 0xde, 0xbd, 0xe7, 0x49, 0xae, 0x3a, 0xb8, 0x4d, 0xb7,
0xb9, 0x86, 0x29, 0xd1, 0x7e, 0x57, 0x1c, 0x94, 0x43, 0xef, 0x2b, 0x52, 0x59, 0x1c, 0x32, 0x11,
0x44, 0x71, 0xee, 0xaf, 0xd9, 0x63, 0x48, 0xbb, 0xd2, 0x5a, 0x6f, 0xe5, 0x70, 0x3a, 0x1f, 0xce,
0xd2, 0x38, 0x0a, 0x9b, 0xfb, 0x32, 0xf0, 0x55, 0x66, 0x77, 0x3a, 0xd7, 0x31, 0x3d, 0xc9, 0xaa,
0x6e, 0x54, 0xff, 0x73, 0xbe, 0x48, 0xf1, 0x24, 0xab, 0x5b, 0xa8, 0x11, 0x62, 0x92, 0x25, 0x50,
0xdc, 0x9f, 0x21, 0x13, 0x4f, 0x82, 0x05, 0x9f, 0x11, 0xc3, 0x53, 0x99, 0xdd, 0xfd, 0xa9, 0x63,
0x96, 0xfe, 0x1c, 0xe7, 0x47, 0xc1, 0x9c, 0x67, 0x91, 0xa0, 0xfb, 0xa3, 0x91, 0xd6, 0xfe, 0x18,
0xa8, 0x55, 0x6d, 0x90, 0x85, 0x93, 0x68, 0xce, 0x46, 0x0e, 0x35, 0x89, 0x74, 0x50, 0xab, 0xa1,
0x58, 0xed, 0x49, 0x94, 0xd7, 0x32, 0xc2, 0xaa, 0x66, 0x20, 0x6e, 0x35, 0x8c, 0xe2, 0x04, 0x2f,
0xed, 0xd5, 0x2e, 0x67, 0x8d, 0xf4, 0x37, 0x37, 0x3a, 0xeb, 0xad, 0x1c, 0x1e, 0xbf, 0x85, 0xd1,
0x7c, 0x88, 0xdb, 0x54, 0x0c, 0xfb, 0x83, 0xec, 0x77, 0xc5, 0x49, 0x65, 0x95, 0x2c, 0x6e, 0xe5,
0x46, 0xc2, 0xf4, 0xbb, 0xe2, 0xf8, 0x35, 0x0e, 0xd2, 0x34, 0x5e, 0x9c, 0xb3, 0x69, 0x1a, 0x93,
0xaf, 0xd1, 0x40, 0xdc, 0xaf, 0x11, 0xa3, 0x78, 0xbd, 0x3a, 0xe7, 0xc5, 0x6a, 0x68, 0x5d, 0xaf,
0x4a, 0x93, 0x7b, 0xbd, 0x92, 0x08, 0x5e, 0x56, 0x06, 0xa3, 0xd1, 0x8b, 0x48, 0x4c, 0xaa, 0x3f,
0x1c, 0x8f, 0xec, 0xcb, 0x0a, 0x82, 0xdc, 0xcb, 0x4a, 0x13, 0xd6, 0x35, 0x07, 0xb9, 0xf1, 0x09,
0x32, 0xb6, 0xbf, 0x78, 0x12, 0x25, 0x97, 0xbe, 0x7d, 0x2a, 0xd5, 0x00, 0x51, 0x73, 0xb0, 0x82,
0xb8, 0x6f, 0xc5, 0x6e, 0x6e, 0x3f, 0x63, 0xc1, 0x28, 0xcc, 0x66, 0xd3, 0x8b, 0xdc, 0xde, 0x37,
0x04, 0xb9, 0xfb, 0xd6, 0x84, 0xf1, 0x46, 0x69, 0xc8, 0x44, 0x5d, 0x92, 0x9a, 0x1e, 0x6c, 0x8a,
0x5b, 0x9d, 0x58, 0xbc, 0x8b, 0x7c, 0x9e, 0x8c, 0xb8, 0x7d, 0x17, 0x59, 0x58, 0xdc, 0xbb, 0x48,
0x20, 0x70, 0xc8, 0x33, 0x46, 0x85, 0x2c, 0x2c, 0xee, 0x90, 0x40, 0xe0, 0xc7, 0x72, 0x3c, 0x2d,
0x8e, 0x8e, 0x27, 0x41, 0x76, 0x59, 0xd6, 0x81, 0xac, 0x8f, 0xc5, 0x64, 0xdc, 0x8f, 0xa5, 0xc1,
0xda, 0x26, 0x3d, 0x38, 0xf5, 0x92, 0x93, 0x1e, 0x3a, 0xf6, 0xae, 0xb7, 0x72, 0x78, 0x02, 0x90,
0xfb, 0xd7, 0x23, 0x26, 0xc2, 0x89, 0x7d, 0x02, 0x30, 0x10, 0xf7, 0x04, 0x80, 0x51, 0xdc, 0xa5,
0x73, 0xae, 0xf6, 0xdf, 0x6b, 0xf6, 0x21, 0xde, 0xd8, 0x7b, 0xaf, 0xb7, 0x72, 0x78, 0x6c, 0x9e,
0xb1, 0x38, 0x10, 0x11, 0x4f, 0x06, 0xa3, 0x91, 0x75, 0x6c, 0x4a, 0x7b, 0x31, 0xcc, 0x9d, 0x63,
0x13, 0x81, 0x38, 0x21, 0xa4, 0x19, 0x0e, 0x85, 0x77, 0x5d, 0x11, 0xd0, 0xa9, 0x70, 0xab, 0x13,
0x4b, 0x09, 0xc2, 0x4a, 0xe8, 0x14, 0x44, 0xab, 0xe1, 0x56, 0x27, 0x56, 0x97, 0x7d, 0x1a, 0x4f,
0xf2, 0x88, 0x05, 0x62, 0x96, 0x35, 0xca, 0x3e, 0xcd, 0x07, 0x25, 0x41, 0xa2, 0xec, 0xe3, 0x74,
0x00, 0xfd, 0x3f, 0xf6, 0xbc, 0xf7, 0x4c, 0xee, 0x8c, 0x4d, 0xf9, 0x9c, 0xa9, 0x36, 0x3c, 0x70,
0x85, 0x34, 0x59, 0xd5, 0x8c, 0xbd, 0xa5, 0x7c, 0xa0, 0x25, 0xbf, 0xef, 0x79, 0xdf, 0x36, 0xd1,
0x62, 0x30, 0x0d, 0xe6, 0x41, 0x14, 0x07, 0x17, 0x31, 0xf3, 0xef, 0xbb, 0x82, 0x1a, 0xa8, 0x6a,
0xc7, 0x83, 0x65, 0x5c, 0xf0, 0x46, 0x41, 0x82, 0xcf, 0x52, 0x99, 0xe0, 0xdb, 0x8e, 0x70, 0x15,
0x65, 0xa4, 0x79, 0xbf, 0x2b, 0x0e, 0xca, 0xbf, 0xed, 0x79, 0x2b, 0x36, 0x0a, 0x72, 0x7e, 0xb7,
0x3d, 0x1c, 0xca, 0xfc, 0xfb, 0x4b, 0x78, 0xb4, 0xb4, 0x01, 0x86, 0x41, 0x87, 0x36, 0xa0, 0xc1,
0x70, 0x7f, 0x09, 0x8f, 0xc6, 0x0c, 0xb6, 0x48, 0x65, 0x79, 0xda, 0x36, 0x83, 0x95, 0x67, 0x0d,
0x54, 0xa6, 0x58, 0x6f, 0xe5, 0x74, 0x31, 0x52, 0x5b, 0x8b, 0x54, 0x40, 0xc5, 0xc8, 0x9a, 0x6b,
0x61, 0x25, 0x8a, 0x91, 0x4d, 0x0a, 0xc2, 0x5f, 0x79, 0xef, 0x68, 0x5b, 0x3d, 0x9f, 0xad, 0x49,
0x04, 0xa7, 0xa6, 0x5a, 0x62, 0x3a, 0x93, 0xc8, 0x8a, 0x83, 0xb0, 0x90, 0xbb, 0x99, 0xba, 0x70,
0x91, 0xbc, 0xf7, 0x5a, 0x03, 0xd5, 0x73, 0x77, 0xbb, 0x23, 0x0d, 0xaa, 0xbf, 0xf6, 0xde, 0x6d,
0xaa, 0x42, 0xde, 0xee, 0xb4, 0x86, 0x42, 0x69, 0xbb, 0xdb, 0xdd, 0xc1, 0x25, 0x5f, 0xcd, 0x33,
0x1d, 0xe4, 0x2b, 0x70, 0x09, 0x79, 0xe5, 0xa0, 0x0b, 0x20, 0x8f, 0xa3, 0x5c, 0xf0, 0x6c, 0x31,
0x9c, 0xf0, 0x2b, 0x79, 0xfd, 0x66, 0xae, 0x72, 0x00, 0xf4, 0x6b, 0x04, 0x51, 0x00, 0xb1, 0x93,
0x0d, 0x29, 0x7d, 0x4d, 0x97, 0x13, 0x52, 0x35, 0xa2, 0x45, 0xca, 0x24, 0xf5, 0x1a, 0x2f, 0x7b,
0xa5, 0xef, 0x14, 0xd7, 0xed, 0x4d, 0x6d, 0xde, 0x2b, 0x6e, 0xb4, 0x83, 0xfa, 0xc4, 0x72, 0x14,
0xc5, 0xec, 0xd9, 0xcb, 0x97, 0x31, 0x0f, 0x46, 0xe8, 0xc4, 0x52, 0x58, 0xfa, 0x60, 0x22, 0x4e,
0x2c, 0x08, 0xd1, 0xa5, 0x87, 0xc2, 0x50, 0x0c, 0x0e, 0x19, 0xf9, 0x4e, 0xd3, 0xad, 0x66, 0x26,
0x4a, 0x0f, 0x16, 0x4c, 0xef, 0x7f, 0x0b, 0xe3, 0xf3, 0xb4, 0x0c, 0x7e, 0xb3, 0xe9, 0x55, 0x59,
0x88, 0xfd, 0xaf, 0x49, 0xe8, 0xb2, 0x60, 0xf1, 0xfb, 0x21, 0xbf, 0x4a, 0xca, 0xa0, 0x96, 0x8e,
0x4a, 0x1b, 0x51, 0x16, 0xc4, 0x0c, 0x04, 0xfe, 0xd8, 0xfb, 0xff, 0x32, 0x70, 0xc6, 0x53, 0x7f,
0xd5, 0xe2, 0x90, 0xd5, 0x6e, 0x00, 0x6e, 0x90, 0x76, 0x7d, 0x60, 0x7a, 0x1a, 0xcc, 0xa3, 0xb1,
0x9a, 0xd3, 0xaa, 0x31, 0x82, 0x0f, 0x4c, 0x9a, 0xe9, 0xd7, 0x20, 0xe2, 0xc0, 0x44, 0xc2, 0xa0,
0xf9, 0xb7, 0x9e, 0x77, 0x53, 0x33, 0x8f, 0x64, 0xb9, 0xe9, 0x38, 0x79, 0xc9, 0x8b, 0xd3, 0x63,
0x71, 0xa2, 0xcb, 0xfd, 0xef, 0x52, 0x21, 0xed, 0xbc, 0x6a, 0xca, 0xf7, 0x96, 0xf6, 0x83, 0x56,
0xfd, 0xca, 0x7b, 0x57, 0x9e, 0xc0, 0xab, 0xf5, 0xe5, 0x28, 0xe3, 0xd3, 0xca, 0xc3, 0x37, 0x27,
0x6e, 0x75, 0x50, 0xc7, 0x9c, 0x6a, 0xc4, 0x4e, 0x67, 0xbe, 0xb6, 0x73, 0xa3, 0xd4, 0xcb, 0xa2,
0xde, 0x83, 0x6e, 0x11, 0x8d, 0xea, 0xde, 0xde, 0x52, 0x3e, 0xfa, 0x06, 0x4b, 0x35, 0x24, 0xe6,
0x09, 0xbe, 0x1d, 0xd3, 0x51, 0x0a, 0x23, 0x71, 0x83, 0xd5, 0x80, 0xf4, 0x2c, 0x24, 0x4d, 0xd5,
0xb9, 0x6a, 0x10, 0xc7, 0x68, 0x16, 0x52, 0xae, 0x0a, 0x20, 0x66, 0x21, 0x2b, 0x08, 0x3a, 0x67,
0xde, 0x1b, 0xc5, 0xcb, 0x3d, 0xcd, 0xd8, 0x3c, 0x62, 0xf8, 0x9e, 0xa5, 0x66, 0x21, 0x86, 0xb3,
0x49, 0xe8, 0x3d, 0xc6, 0xf3, 0x24, 0x4f, 0xe3, 0x20, 0x9f, 0x40, 0x9d, 0xdf, 0xec, 0xb3, 0x34,
0xe2, 0x4a, 0xff, 0x9d, 0x16, 0x4a, 0xef, 0x93, 0xa4, 0x4d, 0xcd, 0x18, 0x6b, 0x76, 0xd7, 0xc6,
0xac, 0xb1, 0xde, 0xca, 0xe9, 0xd9, 0x79, 0x3f, 0xe6, 0xe1, 0x25, 0x4c, 0x73, 0x66, 0xaf, 0x4b,
0x0b, 0x9e, 0xe7, 0x6e, 0xb9, 0x10, 0x3d, 0xd1, 0x95, 0x86, 0x33, 0x96, 0xc6, 0x41, 0x88, 0x6f,
0xa0, 0x2a, 0x1f, 0xb0, 0x11, 0x13, 0x1d, 0x66, 0x50, 0x73, 0x61, 0xdb, 0x68, 0x6b, 0x2e, 0xda,
0x31, 0xde, 0x72, 0x21, 0x7a, 0xaa, 0x2f, 0x0d, 0xc3, 0x34, 0x8e, 0x04, 0xca, 0x8d, 0xca, 0xa3,
0xb4, 0x10, 0xb9, 0x61, 0x12, 0x28, 0xe4, 0x09, 0xcb, 0xc6, 0xcc, 0x1a, 0xb2, 0xb4, 0x38, 0x43,
0x4a, 0x02, 0x42, 0x3e, 0xf5, 0xbe, 0x54, 0xf5, 0x9d, 0xa7, 0x0b, 0xff, 0x86, 0xad, 0x5b, 0x3c,
0x5d, 0xa8, 0x80, 0x37, 0x69, 0x00, 0x35, 0xf1, 0x34, 0xc8, 0x85, 0xbd, 0x89, 0xa5, 0xc5, 0xd9,
0x44, 0x49, 0xe8, 0x75, 0xa8, 0x6a, 0xe2, 0x4c, 0xa0, 0x75, 0x08, 0x1a, 0x50, 0xbb, 0x02, 0xb8,
0x41, 0xda, 0xf5, 0xf0, 0xaa, 0xde, 0x0a, 0x13, 0x47, 0x11, 0x8b, 0x47, 0x39, 0x1a, 0x5e, 0xf0,
0xdc, 0xa5, 0x95, 0x18, 0x5e, 0x4d, 0x0a, 0xa5, 0x12, 0x94, 0x85, 0x6c, 0xbd, 0x43, 0x15, 0xa1,
0x5b, 0x2e, 0x44, 0xef, 0x4b, 0x4a, 0x43, 0xad, 0xca, 0x6e, 0x6b, 0x8f, 0xa5, 0xc8, 0xbe, 0xd6,
0x86, 0x81, 0xc2, 0x9f, 0x7b, 0xde, 0xfb, 0x4a, 0xe2, 0x84, 0xcf, 0xd9, 0x39, 0x7f, 0x78, 0x1d,
0xe5, 0x22, 0x4a, 0xc6, 0xb0, 0x34, 0xed, 0x11, 0x91, 0x6c, 0xb0, 0x92, 0xff, 0xce, 0x72, 0x4e,
0x7a, 0x85, 0x44, 0x6d, 0x79, 0xca, 0xae, 0xac, 0x2b, 0x24, 0x8e, 0xa8, 0x38, 0x62, 0x85, 0x74,
0xf1, 0xba, 0xb6, 0xa2, 0xc4, 0xe1, 0x1b, 0xa8, 0x73, 0x2e, 0x37, 0x2b, 0x54, 0x34, 0x0c, 0x12,
0xe7, 0x02, 0xa7, 0x83, 0xde, 0xac, 0x2b, 0x7d, 0x9d, 0xa4, 0x1b, 0x44, 0x9c, 0x66, 0xa2, 0x6e,
0x76, 0x20, 0x2d, 0x52, 0xfa, 0xaa, 0x88, 0x92, 0x6a, 0xde, 0x14, 0x6d, 0x76, 0x20, 0x6b, 0x75,
0x9a, 0x7a, 0xb7, 0xf6, 0x83, 0xf0, 0x72, 0x9c, 0xf1, 0x59, 0x32, 0x3a, 0xe0, 0x31, 0xcf, 0x50,
0x9d, 0xc6, 0x68, 0x35, 0x42, 0x89, 0x3a, 0x4d, 0x8b, 0x8b, 0xde, 0x18, 0xd4, 0x5b, 0x31, 0x88,
0xa3, 0x31, 0x3e, 0x9e, 0x18, 0x81, 0x4a, 0x80, 0xd8, 0x18, 0x58, 0x41, 0x4b, 0x12, 0x55, 0xc7,
0x17, 0x11, 0x85, 0x41, 0x5c, 0xe9, 0xed, 0xd0, 0x61, 0x0c, 0xb0, 0x35, 0x89, 0x2c, 0x0e, 0x96,
0x7e, 0x9e, 0xcf, 0xb2, 0xe4, 0x38, 0x11, 0x9c, 0xec, 0xa7, 0x04, 0x5a, 0xfb, 0x59, 0x03, 0xf5,
0x6e, 0xa2, 0x34, 0x9f, 0xb3, 0xeb, 0xa2, 0x35, 0xc5, 0x7f, 0x7c, 0xcb, 0x94, 0x53, 0xfc, 0xde,
0x07, 0x3b, 0xb1, 0x9b, 0xb0, 0x71, 0xa8, 0x33, 0x20, 0x52, 0x25, 0x8c, 0xc3, 0xdb, 0x4c, 0x93,
0x8d, 0x76, 0xd0, 0xae, 0x33, 0x14, 0x8b, 0x98, 0xb9, 0x74, 0x4a, 0xa0, 0x8b, 0x8e, 0x04, 0x75,
0x69, 0xdf, 0xe8, 0xcf, 0x84, 0x85, 0x97, 0x8d, 0x0b, 0x61, 0xb3, 0xa1, 0x15, 0x42, 0x94, 0xf6,
0x09, 0xd4, 0xfe, 0x8a, 0x8e, 0x43, 0x9e, 0xb8, 0x5e, 0x51, 0x61, 0xef, 0xf2, 0x8a, 0x80, 0xd3,
0xa7, 0x3b, 0x65, 0x85, 0xcc, 0xac, 0x5e, 0xd3, 0x16, 0x11, 0xa1, 0x0e, 0x11, 0xa7, 0x3b, 0x12,
0xd6, 0x55, 0x77, 0xac, 0x79, 0xd2, 0xfc, 0x6e, 0xa8, 0x11, 0xe5, 0x84, 0xfe, 0x6e, 0x88, 0x62,
0xe9, 0x4e, 0x56, 0x39, 0xd2, 0x12, 0xc5, 0xcc, 0x93, 0x7b, 0xdd, 0x60, 0x5d, 0x58, 0x36, 0x34,
0x0f, 0x62, 0x16, 0x64, 0x95, 0xea, 0xb6, 0x23, 0x90, 0xc6, 0x88, 0x9a, 0xa0, 0x03, 0x47, 0x53,
0x98, 0xa1, 0x7c, 0xc0, 0x13, 0xc1, 0x12, 0x61, 0x9b, 0xc2, 0xcc, 0x60, 0x00, 0xba, 0xa6, 0x30,
0xca, 0x01, 0xe5, 0xed, 0x51, 0x14, 0xb3, 0x21, 0x13, 0x4f, 0x83, 0x29, 0xb3, 0xe5, 0x6d, 0x59,
0x6a, 0x00, 0xbb, 0x2b, 0x6f, 0x11, 0x87, 0x86, 0xfc, 0xf1, 0x34, 0x18, 0x2b, 0x15, 0x8b, 0x77,
0x69, 0x6f, 0xc8, 0x6c, 0xb4, 0x83, 0x48, 0xe7, 0x93, 0x68, 0xc4, 0xb8, 0x43, 0xa7, 0xb4, 0x77,
0xd1, 0xc1, 0x20, 0xda, 0x39, 0x15, 0xbd, 0xad, 0xce, 0x23, 0x83, 0x64, 0x04, 0xa7, 0xb0, 0x3e,
0xf1, 0x50, 0x10, 0xe7, 0xda, 0x39, 0x11, 0x3c, 0x1a, 0x1f, 0xb2, 0x84, 0xe6, 0x1a, 0x1f, 0xaa,
0x42, 0xd6, 0x65, 0x7c, 0xd8, 0x60, 0xd0, 0xfc, 0x25, 0x8c, 0x8f, 0xc3, 0x40, 0x04, 0xc5, 0x39,
0xfa, 0x93, 0x88, 0x5d, 0xc1, 0x31, 0xce, 0xd2, 0x5f, 0x49, 0xf5, 0x0b, 0x0c, 0x9f, 0xe9, 0x76,
0x3a, 0xf3, 0x0e, 0x6d, 0xd8, 0x9d, 0xb7, 0x6a, 0xa3, 0x6d, 0xfa, 0x4e, 0x67, 0xde, 0xa1, 0x0d,
0xa5, 0xf3, 0x56, 0x6d, 0x54, 0x39, 0xdf, 0xe9, 0xcc, 0x83, 0xf6, 0xef, 0x7a, 0xde, 0x4a, 0x43,
0xbc, 0xd8, 0x03, 0x85, 0x22, 0x9a, 0x33, 0xdb, 0x56, 0xce, 0x8c, 0xa7, 0x50, 0xd7, 0x56, 0x8e,
0x76, 0x81, 0x56, 0xfc, 0xa9, 0xe7, 0xbd, 0x67, 0x6b, 0xc5, 0x29, 0xcf, 0x23, 0x11, 0xf1, 0xc4,
0x76, 0x60, 0x69, 0x04, 0x95, 0xb0, 0xeb, 0xc0, 0xe2, 0x72, 0x82, 0xb6, 0xcc, 0xbc, 0x77, 0x0c,
0xb4, 0xc8, 0x53, 0x3e, 0xcb, 0x42, 0xe6, 0xdf, 0x73, 0xc4, 0x53, 0x14, 0x71, 0x81, 0x42, 0xd3,
0xfa, 0x06, 0xc3, 0x60, 0xea, 0x37, 0x37, 0xae, 0xb7, 0x6a, 0xbd, 0xbc, 0xd9, 0xed, 0xee, 0x00,
0xf2, 0x7f, 0x90, 0x7b, 0x7a, 0xac, 0x0f, 0x89, 0xf8, 0xa0, 0x4b, 0x44, 0x94, 0x8c, 0x7b, 0x4b,
0xf9, 0xb4, 0x35, 0x04, 0x46, 0x63, 0xa7, 0x86, 0xa0, 0x11, 0xb9, 0xb7, 0x94, 0x0f, 0x34, 0xe4,
0xef, 0x3d, 0xef, 0x96, 0xb5, 0x21, 0xe6, 0xa5, 0xf4, 0xf7, 0xbb, 0xc4, 0xb6, 0x5f, 0x4e, 0xff,
0xe0, 0x55, 0x5c, 0xd1, 0x8a, 0xae, 0x1b, 0x17, 0xf2, 0x6c, 0x04, 0xb3, 0xa5, 0x23, 0x5f, 0x2a,
0x0e, 0x4f, 0x97, 0xbb, 0xdd, 0x1d, 0x9c, 0xfa, 0xd6, 0x0b, 0x3f, 0x5b, 0x38, 0xe7, 0x85, 0x9f,
0xd3, 0xc1, 0xa9, 0x0f, 0x39, 0xd2, 0xae, 0x8f, 0x12, 0x64, 0xb7, 0xbb, 0x03, 0xe8, 0xff, 0xa3,
0xe7, 0xdd, 0xb6, 0x70, 0xcd, 0x4f, 0x06, 0x7e, 0xd8, 0x1a, 0xda, 0xf1, 0x01, 0xc1, 0x8f, 0x5e,
0xcd, 0x19, 0xda, 0xf8, 0xcf, 0x9e, 0xb7, 0xde, 0xda, 0x46, 0x78, 0x65, 0x3f, 0x5e, 0x56, 0x09,
0xbd, 0xc1, 0x8f, 0x5e, 0xd9, 0x7f, 0x99, 0xc6, 0xc2, 0xfb, 0x5d, 0xba, 0xb1, 0xe8, 0x75, 0x7f,
0xf4, 0xca, 0xfe, 0xf8, 0x1c, 0x56, 0x0c, 0x4a, 0xeb, 0x07, 0x0a, 0xda, 0xec, 0xfe, 0x40, 0xc1,
0xc6, 0xd9, 0x44, 0x1e, 0x5e, 0xa7, 0x41, 0x32, 0xa2, 0x45, 0x2a, 0x7b, 0xbb, 0x88, 0xe2, 0xf0,
0xf9, 0xb5, 0xb0, 0x9e, 0x71, 0xb9, 0xdf, 0xda, 0xa4, 0xfc, 0x15, 0xe2, 0x3c, 0xbf, 0x36, 0x50,
0x42, 0x0d, 0xde, 0xa7, 0x4b, 0x0d, 0xbd, 0xba, 0xbb, 0x5d, 0x50, 0xb4, 0x92, 0x2b, 0x35, 0x55,
0x16, 0xbb, 0xe7, 0x8a, 0xd2, 0x28, 0x8d, 0x6d, 0x77, 0xa4, 0x09, 0xd9, 0x21, 0x13, 0x8f, 0x59,
0x30, 0x62, 0x99, 0x53, 0x56, 0x51, 0x9d, 0x64, 0xeb, 0xb4, 0x4d, 0xf6, 0x80, 0xc7, 0xb3, 0x69,
0x02, 0x2f, 0x93, 0x94, 0xad, 0x53, 0xed, 0xb2, 0x88, 0xc6, 0x27, 0x77, 0x2d, 0x5b, 0xfe, 0x9d,
0xb0, 0xbb, 0xee, 0x30, 0xc6, 0x5f, 0x0e, 0xdb, 0xea, 0xc4, 0xd2, 0xfd, 0x84, 0x34, 0x6a, 0xe9,
0x27, 0xca, 0xa4, 0xed, 0x8e, 0x34, 0x3e, 0x42, 0xd7, 0x64, 0x55, 0x3e, 0xed, 0xb4, 0xc4, 0x6a,
0xa4, 0xd4, 0x6e, 0x77, 0x07, 0x5c, 0xb0, 0x80, 0xac, 0x2a, 0xf6, 0x05, 0x47, 0x51, 0x1c, 0xfb,
0x5b, 0x8e, 0x34, 0x91, 0x90, 0xb3, 0x60, 0x61, 0x81, 0x89, 0x4c, 0x96, 0x07, 0xfc, 0xc4, 0x6f,
0x8b, 0x53, 0x52, 0x9d, 0x32, 0xb9, 0x4e, 0xa3, 0x83, 0x6f, 0xed, 0x51, 0xab, 0xde, 0xf6, 0xdd,
0x0f, 0xae, 0xd1, 0xe1, 0x9d, 0xce, 0x3c, 0xba, 0x53, 0x2a, 0xa9, 0x21, 0xcf, 0x84, 0xed, 0x4e,
0xa9, 0x0a, 0x31, 0xac, 0x5f, 0xfd, 0xdc, 0x69, 0xa1, 0x1a, 0xc5, 0xe4, 0x04, 0xae, 0x28, 0xf5,
0xb7, 0xef, 0xb6, 0x34, 0x2a, 0xbf, 0x54, 0xc7, 0xa0, 0x2b, 0x8d, 0x28, 0x87, 0xda, 0xe7, 0x7d,
0x8a, 0x93, 0xf5, 0xee, 0x34, 0x65, 0x41, 0x16, 0x24, 0x21, 0xfe, 0xbc, 0x4f, 0x07, 0x6c, 0x90,
0xc4, 0xe7, 0x7d, 0x6e, 0x0f, 0x74, 0x55, 0x61, 0x7e, 0x0d, 0x6d, 0x29, 0x8c, 0xa8, 0xcf, 0x8e,
0xcd, 0x8f, 0xa1, 0x37, 0x3b, 0x90, 0xf8, 0xaa, 0x42, 0x02, 0xaa, 0xe0, 0x51, 0x89, 0xde, 0x77,
0x84, 0x32, 0x51, 0xd7, 0xf9, 0x96, 0x76, 0x41, 0xeb, 0x9e, 0xdc, 0x56, 0x0c, 0x99, 0xf8, 0x98,
0x2d, 0x6c, 0xeb, 0x9e, 0xda, 0xf7, 0x57, 0x88, 0x6b, 0xdd, 0x6b, 0xa2, 0x68, 0xe3, 0x50, 0x3f,
0x42, 0xae, 0x39, 0xfc, 0xeb, 0x3b, 0xce, 0xf5, 0x56, 0x0e, 0xcd, 0xfb, 0x87, 0xd1, 0xdc, 0xa8,
0x0f, 0x59, 0x1a, 0x7a, 0x18, 0xcd, 0xed, 0xe5, 0xa1, 0xad, 0x4e, 0x2c, 0xbe, 0x06, 0x09, 0x04,
0xbb, 0x96, 0xf7, 0x13, 0x96, 0xe6, 0x96, 0xf6, 0xc6, 0x05, 0xc5, 0x46, 0x3b, 0xa8, 0xbf, 0x65,
0x39, 0xcd, 0x78, 0xc8, 0xf2, 0xfc, 0xa0, 0x48, 0xdb, 0x18, 0x7d, 0xcb, 0x02, 0xb6, 0x7e, 0x65,
0x24, 0xbe, 0x65, 0x69, 0x40, 0x10, 0xfb, 0xb1, 0xf7, 0xfa, 0x13, 0x3e, 0x1e, 0xb2, 0x64, 0xe4,
0xbf, 0x6f, 0x7e, 0x3d, 0xc2, 0xc7, 0xfd, 0xe2, 0x67, 0x15, 0x6f, 0x95, 0x32, 0xeb, 0xab, 0xfe,
0x43, 0x76, 0x31, 0x1b, 0x0f, 0x17, 0x49, 0x88, 0xae, 0xfa, 0xcb, 0xdf, 0xfb, 0x85, 0x81, 0xb8,
0xea, 0x37, 0x00, 0x7d, 0xd7, 0x5d, 0xfe, 0x7c, 0x3e, 0xc9, 0x58, 0xe3, 0x2b, 0x8f, 0xca, 0xa1,
0x32, 0x11, 0x77, 0xdd, 0x08, 0x41, 0xad, 0x3c, 0xcf, 0x18, 0xb3, 0xb6, 0xb2, 0x30, 0x38, 0x5b,
0x09, 0x80, 0x5e, 0x04, 0xcb, 0x9f, 0xab, 0x3b, 0xf5, 0x27, 0x3c, 0x0c, 0xe2, 0x5c, 0xf0, 0x0c,
0x57, 0x25, 0x2b, 0x57, 0x0c, 0x11, 0x8b, 0x20, 0x09, 0xa3, 0x3e, 0x9c, 0x46, 0xc9, 0xd8, 0xda,
0x87, 0xc2, 0xe0, 0xec, 0x03, 0x00, 0x7a, 0xe0, 0x9c, 0x30, 0x91, 0x45, 0x61, 0x3e, 0x64, 0xe2,
0x34, 0xc8, 0x82, 0x29, 0x13, 0x2c, 0xc3, 0x7f, 0xf3, 0x07, 0x90, 0xbe, 0xc1, 0x10, 0x03, 0x87,
0x62, 0x41, 0x70, 0xd7, 0x7b, 0xb3, 0x18, 0x51, 0x2c, 0x79, 0x58, 0xfe, 0x03, 0x32, 0xfe, 0xdb,
0xca, 0xf9, 0xe1, 0x34, 0x15, 0x8b, 0x95, 0xda, 0x9f, 0x0b, 0x60, 0xb7, 0xb7, 0xff, 0xc1, 0xbf,
0x3e, 0x5f, 0xed, 0x7d, 0xf6, 0xf9, 0x6a, 0xef, 0xbf, 0x9f, 0xaf, 0xf6, 0xfe, 0xfa, 0xc5, 0xea,
0x6b, 0x9f, 0x7d, 0xb1, 0xfa, 0xda, 0xbf, 0xbf, 0x58, 0x7d, 0xed, 0xd3, 0xd7, 0xe1, 0x1f, 0xb0,
0xb9, 0xf8, 0xbf, 0xf2, 0x9f, 0xa1, 0xd9, 0xfb, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x86, 0x03,
0xd1, 0x93, 0xe4, 0x46, 0x00, 0x00,
// 3263 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x9c, 0x5b, 0x6f, 0x1c, 0x49,
0xf5, 0xc0, 0x77, 0x5e, 0xfe, 0xfb, 0xa7, 0xf7, 0x02, 0x34, 0xb0, 0x2c, 0x61, 0xd7, 0xc9, 0x66,
0x13, 0x5f, 0xe2, 0x78, 0xec, 0x24, 0xb0, 0x88, 0x8b, 0x58, 0x8d, 0xed, 0xd8, 0xb1, 0x36, 0x4e,
0x8c, 0xc7, 0xd9, 0x48, 0x2b, 0x21, 0xd1, 0xee, 0xa9, 0xcc, 0x34, 0xee, 0xe9, 0x6a, 0xba, 0x6b,
0xc6, 0x1e, 0x10, 0x48, 0x88, 0x15, 0x08, 0x84, 0xc4, 0x4a, 0x3c, 0xf2, 0xc4, 0x2b, 0x9f, 0x84,
0xc7, 0x7d, 0xe4, 0x11, 0xed, 0x7e, 0x11, 0xd4, 0xdd, 0xa7, 0xaa, 0xba, 0x4e, 0xd7, 0xa9, 0xee,
0xc9, 0x13, 0xec, 0x9c, 0xdf, 0xb9, 0x54, 0xd7, 0xa9, 0xdb, 0xa9, 0x72, 0xbc, 0xeb, 0xe9, 0xf9,
0x76, 0x9a, 0x71, 0xc1, 0xf3, 0xed, 0x9c, 0x65, 0xf3, 0x28, 0x64, 0xf2, 0x7f, 0xfb, 0xe5, 0xcf,
0xfe, 0xab, 0x41, 0xb2, 0x10, 0x8b, 0x94, 0x5d, 0x7b, 0x5b, 0x93, 0x21, 0x9f, 0x4e, 0x83, 0x64,
0x94, 0x57, 0xc8, 0xb5, 0xb7, 0xb4, 0x84, 0xcd, 0x59, 0x22, 0xe0, 0xf7, 0xfb, 0x9f, 0x7e, 0xd6,
0xf3, 0xde, 0xdc, 0x8b, 0x23, 0x96, 0x88, 0x3d, 0xd0, 0xf0, 0x3f, 0xf1, 0xde, 0x18, 0xa4, 0xe9,
0x21, 0x13, 0x1f, 0xb3, 0x2c, 0x8f, 0x78, 0xe2, 0xbf, 0xdf, 0x07, 0x07, 0xfd, 0xd3, 0x34, 0xec,
0x0f, 0xd2, 0xb4, 0xaf, 0x85, 0xfd, 0x53, 0xf6, 0xab, 0x19, 0xcb, 0xc5, 0xb5, 0x5b, 0x6e, 0x28,
0x4f, 0x79, 0x92, 0x33, 0xff, 0x85, 0xf7, 0xf5, 0x41, 0x9a, 0x0e, 0x99, 0xd8, 0x67, 0x45, 0x03,
0x86, 0x22, 0x10, 0xcc, 0x5f, 0x6b, 0xa8, 0x9a, 0x80, 0xf2, 0xb1, 0xde, 0x0e, 0x82, 0x9f, 0x33,
0xef, 0xb5, 0xc2, 0xcf, 0x64, 0x26, 0x46, 0xfc, 0x32, 0xf1, 0xdf, 0x6b, 0x2a, 0x82, 0x48, 0xd9,
0xbe, 0xe9, 0x42, 0xc0, 0xea, 0x73, 0xef, 0xf5, 0xe7, 0x41, 0x1c, 0x33, 0xb1, 0x97, 0xb1, 0x22,
0x70, 0x53, 0xa7, 0x12, 0xf5, 0x2b, 0x99, 0xb2, 0xfb, 0xbe, 0x93, 0x01, 0xc3, 0x9f, 0x78, 0x6f,
0x54, 0x92, 0x53, 0x16, 0xf2, 0x39, 0xcb, 0x7c, 0xab, 0x16, 0x08, 0x89, 0x4f, 0xde, 0x80, 0xb0,
0xed, 0x3d, 0x9e, 0xcc, 0x59, 0x26, 0xec, 0xb6, 0x41, 0xe8, 0xb6, 0xad, 0x21, 0xb0, 0xfd, 0x0b,
0xef, 0xab, 0xcf, 0x79, 0x76, 0x91, 0xa7, 0x41, 0xc8, 0xe0, 0x9b, 0xdc, 0x36, 0x15, 0xa5, 0x14,
0x7f, 0x96, 0xd5, 0x36, 0xcc, 0xe2, 0x61, 0xc8, 0x62, 0x16, 0x0a, 0xd2, 0x43, 0x25, 0x6e, 0xf5,
0xa0, 0x30, 0xf0, 0x10, 0x7b, 0xdf, 0x50, 0xc2, 0x43, 0x26, 0xf6, 0x66, 0x59, 0xc6, 0x12, 0xe1,
0x6f, 0x10, 0xea, 0x1a, 0x51, 0x9e, 0xee, 0x74, 0x41, 0x2d, 0xed, 0x39, 0x64, 0x62, 0x10, 0xc7,
0x64, 0x7b, 0x2a, 0x71, 0x6b, 0x7b, 0x14, 0x06, 0x1e, 0x7e, 0xe7, 0x7d, 0xa7, 0xf6, 0xc5, 0xc4,
0x51, 0xfe, 0x28, 0x1a, 0x4f, 0xe2, 0x68, 0x3c, 0x11, 0x6c, 0xe4, 0x6f, 0x93, 0x1f, 0xc5, 0x04,
0x95, 0xd7, 0x9d, 0xee, 0x0a, 0x96, 0x16, 0x3e, 0xbc, 0x4a, 0x79, 0x46, 0xf7, 0x58, 0x25, 0x6e,
0x6d, 0xa1, 0xc2, 0xc0, 0xc3, 0xcf, 0xbd, 0x37, 0x07, 0x61, 0xc8, 0x67, 0x89, 0x1a, 0x2e, 0x68,
0xf2, 0xa9, 0x84, 0x8d, 0xf1, 0x72, 0xbb, 0x85, 0xd2, 0x03, 0x06, 0x64, 0x90, 0xd2, 0xef, 0x5b,
0xf5, 0x50, 0x42, 0xdf, 0x72, 0x43, 0x0d, 0xdb, 0xfb, 0x2c, 0x66, 0xa4, 0xed, 0x4a, 0xd8, 0x62,
0x5b, 0x41, 0x0d, 0xdb, 0x30, 0x50, 0xec, 0xb6, 0xd1, 0x30, 0xb9, 0xe5, 0x86, 0x6a, 0xf3, 0x29,
0xd8, 0x16, 0x3c, 0xc5, 0xf3, 0xa9, 0x54, 0x12, 0x3c, 0xa5, 0xe6, 0x53, 0x13, 0x69, 0x58, 0x3d,
0xe6, 0x73, 0x46, 0x58, 0x2d, 0x44, 0x2d, 0x56, 0x01, 0xd1, 0x03, 0x5a, 0xf6, 0x1f, 0x4f, 0x5e,
0x44, 0xe3, 0x67, 0xe9, 0xa8, 0xe8, 0xc5, 0x0d, 0x7b, 0x07, 0xd5, 0x10, 0x62, 0x40, 0x13, 0x28,
0x78, 0xfb, 0x99, 0xe7, 0x3d, 0x3d, 0xff, 0x25, 0x0b, 0xc5, 0xd3, 0x94, 0x25, 0xfe, 0x0d, 0x43,
0xb3, 0x12, 0xf4, 0x0b, 0x89, 0xb2, 0xfd, 0x9e, 0x83, 0xd0, 0x9f, 0xa5, 0xfa, 0x7d, 0x2f, 0xe6,
0x39, 0xfe, 0x2c, 0xa0, 0x51, 0x8a, 0x88, 0xcf, 0x82, 0x10, 0x1c, 0xe8, 0x70, 0xc2, 0x2f, 0xed,
0x81, 0x16, 0x12, 0x77, 0xa0, 0x40, 0xe8, 0xf5, 0x10, 0x02, 0xb5, 0xad, 0x87, 0x32, 0x0c, 0xd7,
0x7a, 0x88, 0x19, 0x30, 0xcc, 0xbd, 0x6f, 0xd6, 0x0d, 0xef, 0x72, 0x7e, 0x31, 0x0d, 0xb2, 0x0b,
0xff, 0x0e, 0xad, 0x2c, 0x19, 0xe5, 0x68, 0xb3, 0x13, 0xab, 0x27, 0xad, 0xba, 0xc3, 0x21, 0xc3,
0x93, 0x96, 0xa1, 0x3f, 0x64, 0xd4, 0xa4, 0x65, 0xc1, 0x70, 0xa7, 0x1e, 0x66, 0x41, 0x3a, 0xb1,
0x77, 0x6a, 0x29, 0x72, 0x77, 0xaa, 0x44, 0x70, 0x0f, 0x0c, 0x59, 0x90, 0x85, 0x13, 0x7b, 0x0f,
0x54, 0x32, 0x77, 0x0f, 0x28, 0x06, 0x0c, 0x67, 0xde, 0xb7, 0xea, 0x86, 0x87, 0xb3, 0xf3, 0x3c,
0xcc, 0xa2, 0x73, 0xe6, 0x6f, 0xd2, 0xda, 0x0a, 0x52, 0xae, 0xee, 0x76, 0x83, 0xc1, 0xe7, 0x9f,
0x7a, 0xde, 0x3b, 0x15, 0x73, 0xca, 0xe2, 0x40, 0x44, 0x3c, 0xa9, 0xd0, 0xfd, 0x28, 0x17, 0x51,
0x12, 0x0a, 0xff, 0xbe, 0xcd, 0x9c, 0x9d, 0x55, 0x21, 0x3c, 0x58, 0x4a, 0x07, 0x22, 0x89, 0x3c,
0x1f, 0x5a, 0x2f, 0xa3, 0x3c, 0x1a, 0xe5, 0xfe, 0xba, 0xb5, 0x35, 0x35, 0x42, 0x39, 0xdd, 0xe8,
0x40, 0x82, 0xab, 0x2b, 0xef, 0xdb, 0xf5, 0x0f, 0xfd, 0x2c, 0xc9, 0xd5, 0xa7, 0xde, 0xa2, 0xbf,
0x5e, 0x0d, 0x53, 0x4e, 0xfb, 0x5d, 0x71, 0xf0, 0x1c, 0x7a, 0x5f, 0x93, 0x9e, 0xc5, 0x3e, 0x13,
0x41, 0x14, 0xe7, 0xfe, 0xaa, 0xdd, 0x86, 0x94, 0x2b, 0x5f, 0x6b, 0xad, 0x1c, 0x1e, 0x58, 0xfb,
0xb3, 0x34, 0x8e, 0xc2, 0xe6, 0x0e, 0x11, 0x74, 0x95, 0xd8, 0x3d, 0xb0, 0xea, 0x98, 0x9e, 0xee,
0x55, 0x33, 0xaa, 0xff, 0x73, 0xb6, 0x48, 0xf1, 0x74, 0xaf, 0x23, 0xd4, 0x08, 0x31, 0xdd, 0x13,
0x28, 0x6e, 0xcf, 0x90, 0x89, 0xc7, 0xc1, 0x82, 0xcf, 0x88, 0x89, 0x42, 0x89, 0xdd, 0xed, 0xa9,
0x63, 0x96, 0xf6, 0x1c, 0xe5, 0x07, 0xc1, 0x9c, 0x67, 0x91, 0xa0, 0xdb, 0xa3, 0x91, 0xd6, 0xf6,
0x18, 0xa8, 0xd5, 0xdb, 0x20, 0x0b, 0x27, 0xd1, 0x9c, 0x8d, 0x1c, 0xde, 0x24, 0xd2, 0xc1, 0x5b,
0x0d, 0xc5, 0xde, 0x1e, 0x47, 0x79, 0x2d, 0x23, 0xac, 0xde, 0x0c, 0xc4, 0xed, 0x0d, 0xa3, 0x38,
0xc1, 0x4b, 0x79, 0xb5, 0xdf, 0x5a, 0x25, 0xf5, 0xcd, 0x2d, 0xd7, 0x5a, 0x2b, 0x87, 0xc7, 0x6f,
0x21, 0x34, 0x3f, 0xe2, 0x16, 0x65, 0xc3, 0xfe, 0x21, 0xfb, 0x5d, 0x71, 0xd2, 0xb3, 0x4a, 0x16,
0xb7, 0xe7, 0x46, 0xc2, 0xf4, 0xbb, 0xe2, 0xb8, 0x1b, 0x07, 0x69, 0x1a, 0x2f, 0xce, 0xd8, 0x34,
0x8d, 0xc9, 0x6e, 0x34, 0x10, 0x77, 0x37, 0x62, 0x14, 0xaf, 0x9c, 0x67, 0xbc, 0x58, 0x97, 0xad,
0x2b, 0x67, 0x29, 0x72, 0xaf, 0x9c, 0x12, 0xc1, 0x0b, 0xdc, 0x60, 0x34, 0x7a, 0x1e, 0x89, 0x49,
0xf5, 0x1f, 0x47, 0x23, 0xfb, 0x02, 0x87, 0x20, 0xf7, 0x02, 0xd7, 0x84, 0x75, 0xf5, 0x43, 0x6e,
0xc1, 0x82, 0x8c, 0xed, 0x2e, 0x1e, 0x47, 0xc9, 0x85, 0x6f, 0x9f, 0x4a, 0x35, 0x40, 0x54, 0x3f,
0xac, 0x20, 0x6e, 0x5b, 0xb1, 0xaf, 0xdc, 0xcd, 0x58, 0x30, 0x0a, 0xb3, 0xd9, 0xf4, 0x3c, 0xb7,
0xb7, 0x0d, 0x41, 0xee, 0xb6, 0x35, 0x61, 0xbc, 0x65, 0x1b, 0x32, 0x51, 0x77, 0x49, 0x4d, 0x0f,
0x36, 0x8f, 0x9b, 0x9d, 0x58, 0xbc, 0x9f, 0x7d, 0x96, 0x8c, 0xb8, 0x7d, 0x3f, 0x5b, 0x48, 0xdc,
0xfb, 0x59, 0x20, 0xb0, 0xc9, 0x53, 0x46, 0x99, 0x2c, 0x24, 0x6e, 0x93, 0x40, 0xe0, 0xcf, 0x72,
0x34, 0x2d, 0x0e, 0xb1, 0xc7, 0x41, 0x76, 0x51, 0x56, 0xa4, 0xac, 0x9f, 0xc5, 0x64, 0xdc, 0x9f,
0xa5, 0xc1, 0xda, 0x26, 0x3d, 0x38, 0x7f, 0x93, 0x93, 0x1e, 0x3a, 0x80, 0xaf, 0xb5, 0x72, 0x78,
0x02, 0x90, 0x3b, 0xe9, 0x03, 0x26, 0xc2, 0x89, 0x7d, 0x02, 0x30, 0x10, 0xf7, 0x04, 0x80, 0x51,
0xdc, 0xa4, 0x33, 0xae, 0x4e, 0x02, 0xab, 0xf6, 0x21, 0xde, 0x38, 0x05, 0xac, 0xb5, 0x72, 0x78,
0x6c, 0xca, 0xbd, 0xe1, 0x60, 0x34, 0xb2, 0x8e, 0x4d, 0x29, 0x2f, 0x86, 0xb9, 0x73, 0x6c, 0x22,
0x10, 0x27, 0x84, 0x14, 0xc3, 0xf1, 0xf4, 0x8e, 0xcb, 0x02, 0x3a, 0x9f, 0x6e, 0x76, 0x62, 0x29,
0x87, 0xb0, 0x12, 0x3a, 0x1d, 0xa2, 0xd5, 0x70, 0xb3, 0x13, 0xab, 0x0b, 0x50, 0x8d, 0x2f, 0x79,
0xc0, 0x02, 0x31, 0xcb, 0x1a, 0x05, 0xa8, 0xe6, 0x87, 0x92, 0x20, 0x51, 0x80, 0x72, 0x2a, 0x90,
0xc7, 0x88, 0x53, 0x36, 0xe5, 0x73, 0xa6, 0x62, 0xb8, 0xef, 0x32, 0x69, 0xb2, 0xce, 0x63, 0x04,
0xad, 0x03, 0x91, 0x7c, 0xda, 0xf3, 0xbe, 0x6b, 0xa2, 0xc5, 0x60, 0x1a, 0xcc, 0x83, 0x28, 0x0e,
0xce, 0x63, 0xe6, 0xdf, 0x73, 0x19, 0x35, 0x50, 0x15, 0xc7, 0xfd, 0x65, 0x54, 0xf0, 0x46, 0x41,
0x82, 0x4f, 0x53, 0x99, 0xe0, 0x5b, 0x0e, 0x73, 0x15, 0x65, 0xa4, 0x79, 0xbf, 0x2b, 0x0e, 0x9e,
0x7f, 0xdf, 0xf3, 0xae, 0xd9, 0x28, 0xc8, 0xf9, 0x9d, 0x76, 0x73, 0x28, 0xf3, 0xef, 0x2d, 0xa1,
0xd1, 0x12, 0x03, 0x0c, 0x83, 0x0e, 0x31, 0xa0, 0xc1, 0x70, 0x6f, 0x09, 0x8d, 0xc6, 0x0c, 0xb6,
0x48, 0x65, 0xa1, 0xdc, 0x36, 0x83, 0x95, 0x67, 0x0d, 0x54, 0x30, 0x59, 0x6b, 0xe5, 0x74, 0x59,
0x54, 0x4b, 0x8b, 0x54, 0x40, 0x65, 0xd1, 0x9a, 0x6a, 0x21, 0x25, 0xca, 0xa2, 0x4d, 0x0a, 0xcc,
0x5f, 0x7a, 0x6f, 0x69, 0x59, 0x3d, 0x9f, 0xad, 0x49, 0x04, 0xa7, 0xa6, 0x5a, 0x62, 0x3a, 0x93,
0xc8, 0x8a, 0x83, 0x63, 0x21, 0x77, 0x33, 0x75, 0xc7, 0x45, 0xf2, 0xde, 0x6d, 0x35, 0x54, 0xcf,
0xdd, 0xad, 0x8e, 0x34, 0x78, 0xfd, 0xad, 0xf7, 0x76, 0xd3, 0x2b, 0xe4, 0xed, 0x76, 0xab, 0x29,
0x94, 0xb6, 0x3b, 0xdd, 0x15, 0x5c, 0xee, 0xab, 0x79, 0xa6, 0x83, 0xfb, 0x0a, 0x5c, 0xc2, 0xbd,
0x52, 0xd0, 0x05, 0x90, 0x47, 0x51, 0x2e, 0x78, 0xb6, 0x18, 0x4e, 0xf8, 0xa5, 0xbc, 0x08, 0x34,
0x57, 0x39, 0x00, 0xfa, 0x35, 0x82, 0x28, 0x80, 0xd8, 0xc9, 0x86, 0x2b, 0x7d, 0x61, 0x98, 0x13,
0xae, 0x6a, 0x44, 0x8b, 0x2b, 0x93, 0xd4, 0x6b, 0xbc, 0x6c, 0x95, 0xbe, 0xdd, 0x5c, 0xb3, 0x87,
0xda, 0xbc, 0xe1, 0x5c, 0x6f, 0x07, 0xf5, 0x89, 0xe5, 0x20, 0x8a, 0xd9, 0xd3, 0x17, 0x2f, 0x62,
0x1e, 0x8c, 0xd0, 0x89, 0xa5, 0x90, 0xf4, 0x41, 0x44, 0x9c, 0x58, 0x10, 0xa2, 0x4b, 0x0f, 0x85,
0xa0, 0x18, 0x1c, 0xd2, 0xf2, 0xed, 0xa6, 0x5a, 0x4d, 0x4c, 0x94, 0x1e, 0x2c, 0x98, 0xde, 0xff,
0x16, 0xc2, 0x67, 0x69, 0x69, 0xfc, 0x46, 0x53, 0xab, 0x92, 0x10, 0xfb, 0x5f, 0x93, 0xd0, 0x05,
0xca, 0xe2, 0xf7, 0x7d, 0x7e, 0x99, 0x94, 0x46, 0x2d, 0x0d, 0x95, 0x32, 0xa2, 0x40, 0x89, 0x19,
0x30, 0xfc, 0x91, 0xf7, 0xff, 0xa5, 0xe1, 0x8c, 0xa7, 0xfe, 0x8a, 0x45, 0x21, 0xab, 0xdd, 0x45,
0x5c, 0x27, 0xe5, 0xfa, 0xc0, 0xf4, 0x24, 0x98, 0x47, 0x63, 0x35, 0xa7, 0x55, 0x63, 0x04, 0x1f,
0x98, 0x34, 0xd3, 0xaf, 0x41, 0xc4, 0x81, 0x89, 0x84, 0xc1, 0xe7, 0xdf, 0x7b, 0xde, 0x0d, 0xcd,
0x1c, 0xca, 0x72, 0xd3, 0x51, 0xf2, 0x82, 0x17, 0xa7, 0xc7, 0xe2, 0x44, 0x97, 0xfb, 0x1f, 0x50,
0x26, 0xed, 0xbc, 0x0a, 0xe5, 0x07, 0x4b, 0xeb, 0x41, 0x54, 0xbf, 0xf1, 0xde, 0x96, 0x27, 0xf0,
0x6a, 0x7d, 0x39, 0xc8, 0xf8, 0xb4, 0xd2, 0xf0, 0xcd, 0x89, 0x5b, 0x1d, 0xd4, 0x31, 0xa7, 0x82,
0xd8, 0xee, 0xcc, 0xd7, 0x76, 0x6e, 0x94, 0xf7, 0xb2, 0xa8, 0x77, 0xbf, 0x9b, 0x45, 0xa3, 0xba,
0xf7, 0x60, 0x29, 0x1d, 0x7d, 0x97, 0xa6, 0x02, 0x89, 0x79, 0x82, 0xef, 0xe9, 0xb4, 0x95, 0x42,
0x48, 0xdc, 0xa5, 0x35, 0x20, 0x3d, 0x0b, 0x49, 0x51, 0x75, 0xae, 0x1a, 0xc4, 0x31, 0x9a, 0x85,
0x94, 0xaa, 0x02, 0x88, 0x59, 0xc8, 0x0a, 0x82, 0x9f, 0x53, 0xef, 0xb5, 0xa2, 0x73, 0x4f, 0x32,
0x36, 0x8f, 0x18, 0xbe, 0xf1, 0xa9, 0x49, 0x88, 0xe1, 0x6c, 0x12, 0x7a, 0x8f, 0xf1, 0x2c, 0xc9,
0xd3, 0x38, 0xc8, 0x27, 0x70, 0xe3, 0x60, 0xb6, 0x59, 0x0a, 0xf1, 0x9d, 0xc3, 0xed, 0x16, 0x4a,
0xef, 0x93, 0xa4, 0x4c, 0xcd, 0x18, 0xab, 0x76, 0xd5, 0xc6, 0xac, 0xb1, 0xd6, 0xca, 0xe9, 0xd9,
0x79, 0x37, 0xe6, 0xe1, 0x05, 0x4c, 0x73, 0x66, 0xab, 0x4b, 0x09, 0x9e, 0xe7, 0x6e, 0xba, 0x10,
0x3d, 0xd1, 0x95, 0x82, 0x53, 0x96, 0xc6, 0x41, 0x88, 0xef, 0xc2, 0x2a, 0x1d, 0x90, 0x11, 0x13,
0x1d, 0x66, 0x50, 0xb8, 0xb0, 0x6d, 0xb4, 0x85, 0x8b, 0x76, 0x8c, 0x37, 0x5d, 0x88, 0x9e, 0xea,
0x4b, 0xc1, 0x30, 0x8d, 0x23, 0x81, 0x72, 0xa3, 0xd2, 0x28, 0x25, 0x44, 0x6e, 0x98, 0x04, 0x32,
0x79, 0xcc, 0xb2, 0x31, 0xb3, 0x9a, 0x2c, 0x25, 0x4e, 0x93, 0x92, 0x00, 0x93, 0x4f, 0xbc, 0xaf,
0x54, 0x6d, 0xe7, 0xe9, 0xc2, 0xbf, 0x6e, 0x6b, 0x16, 0x4f, 0x17, 0xca, 0xe0, 0x0d, 0x1a, 0x40,
0x21, 0x9e, 0x04, 0xb9, 0xb0, 0x87, 0x58, 0x4a, 0x9c, 0x21, 0x4a, 0x42, 0xaf, 0x43, 0x55, 0x88,
0x33, 0x81, 0xd6, 0x21, 0x08, 0xa0, 0x76, 0x05, 0x70, 0x9d, 0x94, 0xeb, 0xe1, 0x55, 0xf5, 0x0a,
0x13, 0x07, 0x11, 0x8b, 0x47, 0x39, 0x1a, 0x5e, 0xf0, 0xdd, 0xa5, 0x94, 0x18, 0x5e, 0x4d, 0x0a,
0xa5, 0x12, 0x94, 0x85, 0x6c, 0xad, 0x43, 0x15, 0xa1, 0x9b, 0x2e, 0x44, 0xef, 0x4b, 0x4a, 0x41,
0xad, 0xca, 0x6e, 0x8b, 0xc7, 0x52, 0x64, 0x5f, 0x6d, 0xc3, 0xc0, 0xc3, 0x5f, 0x7a, 0xde, 0xbb,
0xca, 0xc5, 0x31, 0x9f, 0xb3, 0x33, 0xfe, 0xf0, 0xaa, 0xbc, 0xb4, 0x1b, 0xc3, 0xd2, 0xf4, 0x80,
0xb0, 0x64, 0x83, 0x95, 0xfb, 0xef, 0x2d, 0xa7, 0xa4, 0x57, 0x48, 0x14, 0xcb, 0x13, 0x76, 0x69,
0x5d, 0x21, 0xb1, 0x45, 0xc5, 0x11, 0x2b, 0xa4, 0x8b, 0xd7, 0xb5, 0x15, 0xe5, 0x1c, 0x5e, 0x63,
0x9d, 0x71, 0xb9, 0x59, 0xa1, 0xac, 0x61, 0x90, 0x38, 0x17, 0x38, 0x15, 0xf4, 0x66, 0x5d, 0xf9,
0xd7, 0x49, 0xba, 0x4e, 0xd8, 0x69, 0x26, 0xea, 0x46, 0x07, 0xd2, 0xe2, 0x4a, 0x5f, 0x15, 0x51,
0xae, 0x9a, 0x37, 0x45, 0x1b, 0x1d, 0xc8, 0x5a, 0x9d, 0xa6, 0xde, 0xac, 0xdd, 0x20, 0xbc, 0x18,
0x67, 0x7c, 0x96, 0x8c, 0xf6, 0x78, 0xcc, 0x33, 0x54, 0xa7, 0x31, 0xa2, 0x46, 0x28, 0x51, 0xa7,
0x69, 0x51, 0xd1, 0x1b, 0x83, 0x7a, 0x14, 0x83, 0x38, 0x1a, 0xe3, 0xe3, 0x89, 0x61, 0xa8, 0x04,
0x88, 0x8d, 0x81, 0x15, 0xb4, 0x24, 0x51, 0x75, 0x7c, 0x11, 0x51, 0x18, 0xc4, 0x95, 0xbf, 0x6d,
0xda, 0x8c, 0x01, 0xb6, 0x26, 0x91, 0x45, 0xc1, 0xd2, 0xce, 0xb3, 0x59, 0x96, 0x1c, 0x25, 0x82,
0x93, 0xed, 0x94, 0x40, 0x6b, 0x3b, 0x6b, 0xa0, 0xde, 0x4d, 0x94, 0xe2, 0x33, 0x76, 0x55, 0x44,
0x53, 0xfc, 0x8f, 0x6f, 0x99, 0x72, 0x8a, 0xdf, 0xfb, 0x20, 0x27, 0x76, 0x13, 0x36, 0x0e, 0x35,
0x06, 0x9c, 0x54, 0x09, 0xe3, 0xd0, 0x36, 0xd3, 0x64, 0xbd, 0x1d, 0xb4, 0xfb, 0x19, 0x8a, 0x45,
0xcc, 0x5c, 0x7e, 0x4a, 0xa0, 0x8b, 0x1f, 0x09, 0xea, 0xd2, 0xbe, 0xd1, 0x9e, 0x09, 0x0b, 0x2f,
0x1a, 0x17, 0xc2, 0x66, 0xa0, 0x15, 0x42, 0x94, 0xf6, 0x09, 0xd4, 0xde, 0x45, 0x47, 0x21, 0x4f,
0x5c, 0x5d, 0x54, 0xc8, 0xbb, 0x74, 0x11, 0x70, 0xfa, 0x74, 0xa7, 0xa4, 0x90, 0x99, 0x55, 0x37,
0x6d, 0x12, 0x16, 0xea, 0x10, 0x71, 0xba, 0x23, 0x61, 0x5d, 0x75, 0xc7, 0x3e, 0x8f, 0x9b, 0x2f,
0x98, 0x1a, 0x56, 0x8e, 0xe9, 0x17, 0x4c, 0x14, 0x4b, 0x37, 0xb2, 0xca, 0x91, 0x16, 0x2b, 0x66,
0x9e, 0xdc, 0xed, 0x06, 0xeb, 0xc2, 0xb2, 0xe1, 0x73, 0x2f, 0x66, 0x41, 0x56, 0x79, 0xdd, 0x72,
0x18, 0xd2, 0x18, 0x51, 0x13, 0x74, 0xe0, 0x68, 0x0a, 0x33, 0x3c, 0xef, 0xf1, 0x44, 0xb0, 0x44,
0xd8, 0xa6, 0x30, 0xd3, 0x18, 0x80, 0xae, 0x29, 0x8c, 0x52, 0x40, 0x79, 0x7b, 0x10, 0xc5, 0x6c,
0xc8, 0xc4, 0x93, 0x60, 0xca, 0x6c, 0x79, 0x5b, 0x96, 0x1a, 0x40, 0xee, 0xca, 0x5b, 0xc4, 0xa1,
0x21, 0x7f, 0x34, 0x0d, 0xc6, 0xca, 0x8b, 0x45, 0xbb, 0x94, 0x37, 0xdc, 0xac, 0xb7, 0x83, 0xc8,
0xcf, 0xc7, 0xd1, 0x88, 0x71, 0x87, 0x9f, 0x52, 0xde, 0xc5, 0x0f, 0x06, 0xd1, 0xce, 0xa9, 0x68,
0x6d, 0x75, 0x1e, 0x19, 0x24, 0x23, 0x38, 0x85, 0xf5, 0x89, 0x8f, 0x82, 0x38, 0xd7, 0xce, 0x89,
0xe0, 0xd1, 0xf8, 0x90, 0x25, 0x34, 0xd7, 0xf8, 0x50, 0x15, 0xb2, 0x2e, 0xe3, 0xc3, 0x06, 0x83,
0xcf, 0x5f, 0xc3, 0xf8, 0xd8, 0x0f, 0x44, 0x50, 0x9c, 0xa3, 0x3f, 0x8e, 0xd8, 0x25, 0x1c, 0xe3,
0x2c, 0xed, 0x95, 0x54, 0xbf, 0xc0, 0xf0, 0x99, 0x6e, 0xbb, 0x33, 0xef, 0xf0, 0x0d, 0xbb, 0xf3,
0x56, 0xdf, 0x68, 0x9b, 0xbe, 0xdd, 0x99, 0x77, 0xf8, 0x86, 0xd2, 0x79, 0xab, 0x6f, 0x54, 0x39,
0xdf, 0xee, 0xcc, 0x83, 0xef, 0x3f, 0xf4, 0xbc, 0x6b, 0x0d, 0xe7, 0xc5, 0x1e, 0x28, 0x14, 0xd1,
0x9c, 0xd9, 0xb6, 0x72, 0xa6, 0x3d, 0x85, 0xba, 0xb6, 0x72, 0xb4, 0x0a, 0x44, 0xf1, 0xe7, 0x9e,
0xf7, 0x8e, 0x2d, 0x8a, 0x13, 0x9e, 0x47, 0x22, 0xe2, 0x89, 0xed, 0xc0, 0xd2, 0x30, 0x2a, 0x61,
0xd7, 0x81, 0xc5, 0xa5, 0x04, 0xb1, 0xcc, 0xbc, 0xb7, 0x0c, 0xb4, 0xc8, 0x53, 0x3e, 0xcb, 0x42,
0xe6, 0xdf, 0x75, 0xd8, 0x53, 0x14, 0x71, 0x81, 0x42, 0xd3, 0xfa, 0x06, 0xc3, 0x60, 0xea, 0x37,
0x37, 0xae, 0x5e, 0xb5, 0x5e, 0xde, 0xec, 0x74, 0x57, 0x00, 0xf7, 0x7f, 0x94, 0x7b, 0x7a, 0xec,
0x1f, 0x12, 0xf1, 0x7e, 0x17, 0x8b, 0x28, 0x19, 0x1f, 0x2c, 0xa5, 0xd3, 0x16, 0x08, 0x8c, 0xc6,
0x4e, 0x81, 0xa0, 0x11, 0xf9, 0x60, 0x29, 0x1d, 0x08, 0xe4, 0x1f, 0x3d, 0xef, 0xa6, 0x35, 0x10,
0xf3, 0x52, 0xfa, 0x87, 0x5d, 0x6c, 0xdb, 0x2f, 0xa7, 0x7f, 0xf4, 0x32, 0xaa, 0x10, 0xdd, 0x5f,
0xe5, 0x19, 0x5f, 0x6a, 0x1c, 0x66, 0x7c, 0x96, 0x3e, 0xcd, 0x46, 0x2c, 0x83, 0x1e, 0x73, 0x65,
0xbf, 0x86, 0x71, 0x9f, 0x7d, 0x7f, 0x49, 0x2d, 0x08, 0xe7, 0x6f, 0x3d, 0x6f, 0xc5, 0x80, 0xe1,
0x41, 0x55, 0x2d, 0x1e, 0x97, 0xe5, 0x1a, 0x8d, 0x03, 0xfa, 0x60, 0x59, 0x35, 0xb4, 0xe5, 0xd1,
0xbd, 0x17, 0xf2, 0x6c, 0x04, 0xcb, 0x89, 0x63, 0x40, 0x55, 0x1c, 0x5e, 0x4f, 0x76, 0xba, 0x2b,
0x38, 0xfd, 0x5b, 0x6f, 0x44, 0x6d, 0xe6, 0x9c, 0x37, 0xa2, 0x4e, 0x05, 0xa7, 0x7f, 0x18, 0x44,
0xed, 0xfe, 0xd1, 0x08, 0xda, 0xe9, 0xae, 0x00, 0xfe, 0xff, 0xd9, 0xf3, 0x6e, 0x59, 0xb8, 0xe6,
0x9b, 0x8a, 0x1f, 0xb7, 0x9a, 0x76, 0xbc, 0xb0, 0xf8, 0xc9, 0xcb, 0x29, 0x43, 0x8c, 0xff, 0xea,
0x79, 0x6b, 0xad, 0x31, 0x42, 0x97, 0xfd, 0x74, 0x59, 0x4f, 0xa8, 0x07, 0x3f, 0x7c, 0x69, 0xfd,
0x65, 0x82, 0x85, 0xfe, 0x5d, 0x3a, 0x58, 0xd4, 0xdd, 0x1f, 0xbe, 0xb4, 0x3e, 0x3e, 0xa8, 0x16,
0xb3, 0x96, 0xf5, 0x05, 0x87, 0x16, 0xbb, 0x5f, 0x70, 0xd8, 0x38, 0x9b, 0x93, 0x87, 0x57, 0x69,
0x90, 0x8c, 0x68, 0x27, 0x95, 0xbc, 0xdd, 0x89, 0xe2, 0xf0, 0x01, 0xbf, 0x90, 0x9e, 0x72, 0xb9,
0x21, 0xdd, 0xa0, 0xf4, 0x15, 0xe2, 0x3c, 0xe0, 0x37, 0x50, 0xc2, 0x1b, 0xf4, 0xa7, 0xcb, 0x1b,
0xea, 0xba, 0x3b, 0x5d, 0x50, 0xb4, 0xd5, 0x51, 0xde, 0x54, 0xdd, 0xf0, 0xae, 0xcb, 0x4a, 0xa3,
0x76, 0xb8, 0xd5, 0x91, 0x26, 0xdc, 0x0e, 0x99, 0x78, 0xc4, 0x82, 0x11, 0xcb, 0x9c, 0x6e, 0x15,
0xd5, 0xc9, 0x6d, 0x9d, 0xb6, 0xb9, 0xdd, 0xe3, 0xf1, 0x6c, 0x9a, 0x40, 0x67, 0x92, 0x6e, 0xeb,
0x54, 0xbb, 0x5b, 0x44, 0xe3, 0xd2, 0x86, 0x76, 0x5b, 0xfe, 0xf9, 0xde, 0x1d, 0xb7, 0x19, 0xe3,
0xef, 0xf8, 0x36, 0x3b, 0xb1, 0x74, 0x3b, 0x21, 0x8d, 0x5a, 0xda, 0x89, 0x32, 0x69, 0xab, 0x23,
0x8d, 0x6b, 0x0c, 0x35, 0xb7, 0x2a, 0x9f, 0xb6, 0x5b, 0x6c, 0x35, 0x52, 0x6a, 0xa7, 0xbb, 0x02,
0xae, 0xe8, 0x40, 0x56, 0x15, 0x1b, 0xa7, 0x83, 0x28, 0x8e, 0xfd, 0x4d, 0x47, 0x9a, 0x48, 0xc8,
0x59, 0xd1, 0xb1, 0xc0, 0x44, 0x26, 0xcb, 0x0a, 0x48, 0xe2, 0xb7, 0xd9, 0x29, 0xa9, 0x4e, 0x99,
0x5c, 0xa7, 0x51, 0x65, 0xa0, 0xf6, 0xa9, 0x55, 0x6b, 0xfb, 0xee, 0x0f, 0xd7, 0x68, 0xf0, 0x76,
0x67, 0x1e, 0x5d, 0xba, 0x95, 0xd4, 0x90, 0x67, 0xc2, 0x76, 0xe9, 0x56, 0x99, 0x18, 0xd6, 0xef,
0xc6, 0x6e, 0xb7, 0x50, 0x8d, 0x6a, 0x7b, 0x02, 0x77, 0xb8, 0xfa, 0x8f, 0x03, 0x6c, 0x69, 0x54,
0x3e, 0xe5, 0xc7, 0xa0, 0x2b, 0x8d, 0x28, 0x85, 0xda, 0xfb, 0x47, 0xc5, 0xc9, 0x0b, 0x81, 0x34,
0x65, 0x41, 0x16, 0x24, 0x21, 0x7e, 0xff, 0xa8, 0x0d, 0x36, 0x48, 0xe2, 0xfd, 0xa3, 0x5b, 0x03,
0xdd, 0xe5, 0x98, 0xcf, 0xc5, 0x2d, 0x95, 0x23, 0xf5, 0x2e, 0xdb, 0x7c, 0x2d, 0xbe, 0xd1, 0x81,
0xc4, 0x77, 0x39, 0x12, 0x50, 0x15, 0xa1, 0xca, 0xe9, 0x3d, 0x87, 0x29, 0x13, 0x75, 0x15, 0x00,
0x68, 0x15, 0xb4, 0xee, 0xe9, 0xbf, 0x34, 0x14, 0x1f, 0xb1, 0x85, 0x6d, 0xdd, 0x53, 0x07, 0xa3,
0x0a, 0x71, 0xad, 0x7b, 0x4d, 0x14, 0x6d, 0x1c, 0xea, 0x67, 0xec, 0x55, 0x87, 0x7e, 0x7d, 0xc7,
0xb9, 0xd6, 0xca, 0xa1, 0x79, 0x7f, 0x3f, 0x9a, 0x1b, 0x05, 0x34, 0x4b, 0xa0, 0xfb, 0xd1, 0xdc,
0x5e, 0x3f, 0xdb, 0xec, 0xc4, 0xe2, 0x7b, 0xa2, 0x40, 0xb0, 0x2b, 0x79, 0x81, 0x63, 0x09, 0xb7,
0x94, 0x37, 0x6e, 0x70, 0xd6, 0xdb, 0x41, 0xfd, 0xd8, 0xe7, 0x24, 0xe3, 0x21, 0xcb, 0xf3, 0xbd,
0x22, 0x6d, 0x63, 0xf4, 0xd8, 0x07, 0x64, 0xfd, 0x4a, 0x48, 0x3c, 0xf6, 0x69, 0x40, 0x60, 0xfb,
0x91, 0xf7, 0xea, 0x63, 0x3e, 0x1e, 0xb2, 0x64, 0xe4, 0xbf, 0x6b, 0x3e, 0xaf, 0xe1, 0xe3, 0x7e,
0xf1, 0xb3, 0xb2, 0xb7, 0x42, 0x89, 0xf5, 0x5b, 0x88, 0x7d, 0x76, 0x3e, 0x1b, 0x0f, 0x17, 0x49,
0x88, 0xde, 0x42, 0x94, 0xbf, 0xf7, 0x0b, 0x01, 0xf1, 0x16, 0xc2, 0x00, 0xf4, 0x63, 0x80, 0xf2,
0xe7, 0xb3, 0x49, 0xc6, 0x1a, 0xcf, 0x60, 0x2a, 0x85, 0x4a, 0x44, 0x3c, 0x06, 0x40, 0x08, 0x8a,
0xf2, 0x2c, 0x63, 0xcc, 0x1a, 0x65, 0x21, 0x70, 0x46, 0x09, 0x80, 0x5e, 0x04, 0xcb, 0x9f, 0xab,
0x47, 0x07, 0x8f, 0x79, 0x18, 0xc4, 0xb9, 0xe0, 0x19, 0x2e, 0xdb, 0x56, 0xaa, 0x18, 0x22, 0x16,
0x41, 0x12, 0x46, 0x6d, 0x38, 0x89, 0x92, 0xb1, 0xb5, 0x0d, 0x85, 0xc0, 0xd9, 0x06, 0x00, 0xf4,
0xc0, 0x39, 0x66, 0x22, 0x8b, 0xc2, 0x7c, 0xc8, 0xc4, 0x49, 0x90, 0x05, 0x53, 0x26, 0x58, 0x86,
0xff, 0x34, 0x0a, 0x90, 0xbe, 0xc1, 0x10, 0x03, 0x87, 0x62, 0xc1, 0xe1, 0x8e, 0xf7, 0x7a, 0x31,
0xa2, 0x58, 0xf2, 0xb0, 0xfc, 0xb7, 0x7e, 0xfc, 0x37, 0x95, 0xf2, 0xc3, 0x69, 0x2a, 0x16, 0xd7,
0x6a, 0xff, 0x5d, 0x00, 0x3b, 0xbd, 0xdd, 0xf7, 0xfe, 0xfd, 0xc5, 0x4a, 0xef, 0xf3, 0x2f, 0x56,
0x7a, 0xff, 0xfd, 0x62, 0xa5, 0xf7, 0xd9, 0x97, 0x2b, 0xaf, 0x7c, 0xfe, 0xe5, 0xca, 0x2b, 0xff,
0xf9, 0x72, 0xe5, 0x95, 0x4f, 0x5e, 0x85, 0x7f, 0x6b, 0xe8, 0xfc, 0xff, 0xca, 0x7f, 0x31, 0xe8,
0xc1, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x7d, 0xf5, 0x8e, 0xfa, 0x8f, 0x48, 0x00, 0x00,
}
// This is a compile-time assertion to ensure that this generated file
@ -272,6 +276,7 @@ type ClientCommandsHandler interface {
ObjectGraph(*pb.RpcObjectGraphRequest) *pb.RpcObjectGraphResponse
ObjectSearch(*pb.RpcObjectSearchRequest) *pb.RpcObjectSearchResponse
ObjectSearchSubscribe(*pb.RpcObjectSearchSubscribeRequest) *pb.RpcObjectSearchSubscribeResponse
ObjectRelationSearchDistinct(*pb.RpcObjectRelationSearchDistinctRequest) *pb.RpcObjectRelationSearchDistinctResponse
ObjectSubscribeIds(*pb.RpcObjectSubscribeIdsRequest) *pb.RpcObjectSubscribeIdsResponse
ObjectSearchUnsubscribe(*pb.RpcObjectSearchUnsubscribeRequest) *pb.RpcObjectSearchUnsubscribeResponse
ObjectSetDetails(*pb.RpcObjectSetDetailsRequest) *pb.RpcObjectSetDetailsResponse
@ -392,6 +397,8 @@ type ClientCommandsHandler interface {
BlockDataviewRelationUpdate(*pb.RpcBlockDataviewRelationUpdateRequest) *pb.RpcBlockDataviewRelationUpdateResponse
BlockDataviewRelationDelete(*pb.RpcBlockDataviewRelationDeleteRequest) *pb.RpcBlockDataviewRelationDeleteResponse
BlockDataviewRelationListAvailable(*pb.RpcBlockDataviewRelationListAvailableRequest) *pb.RpcBlockDataviewRelationListAvailableResponse
BlockDataviewGroupOrderUpdate(*pb.RpcBlockDataviewGroupOrderUpdateRequest) *pb.RpcBlockDataviewGroupOrderUpdateResponse
BlockDataviewObjectOrderUpdate(*pb.RpcBlockDataviewObjectOrderUpdateRequest) *pb.RpcBlockDataviewObjectOrderUpdateResponse
BlockDataviewRecordCreate(*pb.RpcBlockDataviewRecordCreateRequest) *pb.RpcBlockDataviewRecordCreateResponse
BlockDataviewRecordUpdate(*pb.RpcBlockDataviewRecordUpdateRequest) *pb.RpcBlockDataviewRecordUpdateResponse
BlockDataviewRecordDelete(*pb.RpcBlockDataviewRecordDeleteRequest) *pb.RpcBlockDataviewRecordDeleteResponse
@ -1000,6 +1007,26 @@ func ObjectSearchSubscribe(b []byte) (resp []byte) {
return resp
}
func ObjectRelationSearchDistinct(b []byte) (resp []byte) {
defer func() {
if PanicHandler != nil {
if r := recover(); r != nil {
resp, _ = (&pb.RpcObjectRelationSearchDistinctResponse{Error: &pb.RpcObjectRelationSearchDistinctResponseError{Code: pb.RpcObjectRelationSearchDistinctResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal()
PanicHandler(r)
}
}
}()
in := new(pb.RpcObjectRelationSearchDistinctRequest)
if err := in.Unmarshal(b); err != nil {
resp, _ = (&pb.RpcObjectRelationSearchDistinctResponse{Error: &pb.RpcObjectRelationSearchDistinctResponseError{Code: pb.RpcObjectRelationSearchDistinctResponseError_BAD_INPUT, Description: err.Error()}}).Marshal()
return resp
}
resp, _ = clientCommandsHandler.ObjectRelationSearchDistinct(in).Marshal()
return resp
}
func ObjectSubscribeIds(b []byte) (resp []byte) {
defer func() {
if PanicHandler != nil {
@ -3020,6 +3047,46 @@ func BlockDataviewRelationListAvailable(b []byte) (resp []byte) {
return resp
}
func BlockDataviewGroupOrderUpdate(b []byte) (resp []byte) {
defer func() {
if PanicHandler != nil {
if r := recover(); r != nil {
resp, _ = (&pb.RpcBlockDataviewGroupOrderUpdateResponse{Error: &pb.RpcBlockDataviewGroupOrderUpdateResponseError{Code: pb.RpcBlockDataviewGroupOrderUpdateResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal()
PanicHandler(r)
}
}
}()
in := new(pb.RpcBlockDataviewGroupOrderUpdateRequest)
if err := in.Unmarshal(b); err != nil {
resp, _ = (&pb.RpcBlockDataviewGroupOrderUpdateResponse{Error: &pb.RpcBlockDataviewGroupOrderUpdateResponseError{Code: pb.RpcBlockDataviewGroupOrderUpdateResponseError_BAD_INPUT, Description: err.Error()}}).Marshal()
return resp
}
resp, _ = clientCommandsHandler.BlockDataviewGroupOrderUpdate(in).Marshal()
return resp
}
func BlockDataviewObjectOrderUpdate(b []byte) (resp []byte) {
defer func() {
if PanicHandler != nil {
if r := recover(); r != nil {
resp, _ = (&pb.RpcBlockDataviewObjectOrderUpdateResponse{Error: &pb.RpcBlockDataviewObjectOrderUpdateResponseError{Code: pb.RpcBlockDataviewObjectOrderUpdateResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal()
PanicHandler(r)
}
}
}()
in := new(pb.RpcBlockDataviewObjectOrderUpdateRequest)
if err := in.Unmarshal(b); err != nil {
resp, _ = (&pb.RpcBlockDataviewObjectOrderUpdateResponse{Error: &pb.RpcBlockDataviewObjectOrderUpdateResponseError{Code: pb.RpcBlockDataviewObjectOrderUpdateResponseError_BAD_INPUT, Description: err.Error()}}).Marshal()
return resp
}
resp, _ = clientCommandsHandler.BlockDataviewObjectOrderUpdate(in).Marshal()
return resp
}
func BlockDataviewRecordCreate(b []byte) (resp []byte) {
defer func() {
if PanicHandler != nil {
@ -3802,6 +3869,8 @@ func CommandAsync(cmd string, data []byte, callback func(data []byte)) {
cd = ObjectSearch(data)
case "ObjectSearchSubscribe":
cd = ObjectSearchSubscribe(data)
case "ObjectRelationSearchDistinct":
cd = ObjectRelationSearchDistinct(data)
case "ObjectSubscribeIds":
cd = ObjectSubscribeIds(data)
case "ObjectSearchUnsubscribe":
@ -4004,6 +4073,10 @@ func CommandAsync(cmd string, data []byte, callback func(data []byte)) {
cd = BlockDataviewRelationDelete(data)
case "BlockDataviewRelationListAvailable":
cd = BlockDataviewRelationListAvailable(data)
case "BlockDataviewGroupOrderUpdate":
cd = BlockDataviewGroupOrderUpdate(data)
case "BlockDataviewObjectOrderUpdate":
cd = BlockDataviewObjectOrderUpdate(data)
case "BlockDataviewRecordCreate":
cd = BlockDataviewRecordCreate(data)
case "BlockDataviewRecordUpdate":

View file

@ -167,6 +167,18 @@ func (s *service) UpdateDataviewView(ctx *state.Context, req pb.RpcBlockDataview
})
}
func (s *service) UpdateDataviewGroupOrder(ctx *state.Context, req pb.RpcBlockDataviewGroupOrderUpdateRequest) error {
return s.DoDataview(req.ContextId, func(b dataview.Dataview) error {
return b.UpdateViewGroupOrder(ctx, req.BlockId, req.GroupOrder)
})
}
func (s *service) UpdateDataviewObjectOrder(ctx *state.Context, req pb.RpcBlockDataviewObjectOrderUpdateRequest) error {
return s.DoDataview(req.ContextId, func(b dataview.Dataview) error {
return b.UpdateViewObjectOrder(ctx, req.BlockId, req.ObjectOrders)
})
}
func (s *service) DeleteDataviewView(ctx *state.Context, req pb.RpcBlockDataviewViewDeleteRequest) error {
return s.DoDataview(req.ContextId, func(b dataview.Dataview) error {
return b.DeleteView(ctx, req.BlockId, req.ViewId, true)

View file

@ -67,6 +67,8 @@ type Dataview interface {
UpdateRelationOption(ctx *state.Context, blockId string, recordId string, relationKey string, option model.RelationOption, showEvent bool) error
DeleteRelationOption(ctx *state.Context, allowMultiupdate bool, blockId string, recordId string, relationKey string, optionId string, showEvent bool) error
FillAggregatedOptions(ctx *state.Context) error
UpdateViewGroupOrder(ctx *state.Context, blockId string, order *model.BlockContentDataviewGroupOrder) error
UpdateViewObjectOrder(ctx *state.Context, blockId string, orders []*model.BlockContentDataviewObjectOrder) error
CreateRecord(ctx *state.Context, blockId string, rec model.ObjectDetails, templateId string) (*model.ObjectDetails, error)
UpdateRecord(ctx *state.Context, blockId string, recID string, rec model.ObjectDetails) error
@ -886,6 +888,30 @@ func (d *dataviewCollectionImpl) FillAggregatedOptions(ctx *state.Context) error
return d.Apply(st)
}
func (d *dataviewCollectionImpl) UpdateViewGroupOrder(ctx *state.Context, blockId string, order *model.BlockContentDataviewGroupOrder) error {
st := d.NewStateCtx(ctx)
dvBlock, err := getDataviewBlock(st, blockId)
if err != nil {
return err
}
dvBlock.SetViewGroupOrder(order)
return d.Apply(st)
}
func (d *dataviewCollectionImpl) UpdateViewObjectOrder(ctx *state.Context, blockId string, orders []*model.BlockContentDataviewObjectOrder) error {
st := d.NewStateCtx(ctx)
dvBlock, err := getDataviewBlock(st, blockId)
if err != nil {
return err
}
dvBlock.SetViewObjectOrder(orders)
return d.Apply(st)
}
func (d *dataviewCollectionImpl) fillAggregatedOptions(b dataview.Block) {
dvc := b.Model().GetDataview()
ot := d.getObjectTypeSource(b)

View file

@ -1014,6 +1014,11 @@ func (sb *smartBlock) addExtraRelations(s *state.State, relations []*model.Relat
log.With("thread", sb.Id()).Errorf("failed to get getAggregatedOptions: %s", err.Error())
} else {
s.SetAggregatedRelationsOptions(rel.Key, opts)
for _, copyRel := range copy {
if copyRel.Key == rel.Key {
copyRel.SelectDict = opts
}
}
}
}
@ -1029,7 +1034,9 @@ func (sb *smartBlock) addExtraRelations(s *state.State, relations []*model.Relat
c := pbtypes.CopyRelation(rel)
if existingRelation != nil && (existingRelation.ReadOnlyRelation || rel.Name == "") {
dict := c.SelectDict
c = existingRelation
c.SelectDict = dict
} else if existingRelation != nil && !pbtypes.RelationCompatible(existingRelation, rel) {
return nil, fmt.Errorf("provided relation not compatible with the same-key existing aggregated relation")
}

View file

@ -406,6 +406,8 @@ func (s *State) fillChanges(msgs []simple.EventMessage) {
updMsgs = append(updMsgs, msg.Msg)
case *pb.EventMessageValueOfBlockDataviewRelationDelete:
updMsgs = append(updMsgs, msg.Msg)
case *pb.EventMessageValueOfBlockDataViewGroupOrderUpdate:
updMsgs = append(updMsgs, msg.Msg)
default:
log.Errorf("unexpected event - can't convert to changes: %v", msg.Msg)
}

View file

@ -194,6 +194,16 @@ func (s *State) applyEvent(ev *pb.EventMessage) (err error) {
}); err != nil {
return
}
case *pb.EventMessageValueOfBlockDataViewGroupOrderUpdate:
if err = apply(o.BlockDataViewGroupOrderUpdate.Id, func(b simple.Block) error {
if f, ok := b.(dataview.Block); ok {
f.SetViewGroupOrder(o.BlockDataViewGroupOrderUpdate.GroupOrder)
return nil
}
return fmt.Errorf("not a dataview block")
}); err != nil {
return
}
}
return nil

View file

@ -192,6 +192,8 @@ type Service interface {
AddDataviewRecordRelationOption(ctx *state.Context, req pb.RpcBlockDataviewRecordRelationOptionAddRequest) (opt *model.RelationOption, err error)
UpdateDataviewRecordRelationOption(ctx *state.Context, req pb.RpcBlockDataviewRecordRelationOptionUpdateRequest) error
DeleteDataviewRecordRelationOption(ctx *state.Context, req pb.RpcBlockDataviewRecordRelationOptionDeleteRequest) error
UpdateDataviewGroupOrder(ctx *state.Context, req pb.RpcBlockDataviewGroupOrderUpdateRequest) error
UpdateDataviewObjectOrder(ctx *state.Context, req pb.RpcBlockDataviewObjectOrderUpdateRequest) error
CreateDataviewRecord(ctx *state.Context, req pb.RpcBlockDataviewRecordCreateRequest) (*types.Struct, error)
UpdateDataviewRecord(ctx *state.Context, req pb.RpcBlockDataviewRecordUpdateRequest) error

View file

@ -42,6 +42,8 @@ type Block interface {
AddView(view model.BlockContentDataviewView)
DeleteView(viewID string) error
SetViewOrder(ids []string)
SetViewGroupOrder(order *model.BlockContentDataviewGroupOrder)
SetViewObjectOrder(order []*model.BlockContentDataviewObjectOrder)
AddRelation(relation model.Relation) error
GetRelation(relationKey string) (*model.Relation, error)
@ -87,6 +89,28 @@ func (d *Dataview) Diff(b simple.Block) (msgs []simple.EventMessage, err error)
return
}
for _, order2 := range dv.content.GroupOrders {
var found bool
var changed bool
for _, order1 := range d.content.GroupOrders {
if order1.ViewId == order2.ViewId {
found = true
changed = !proto.Equal(order1, order2)
break
}
}
if !found || changed {
msgs = append(msgs,
simple.EventMessage{
Msg: &pb.EventMessage{Value: &pb.EventMessageValueOfBlockDataViewGroupOrderUpdate{
&pb.EventBlockDataviewGroupOrderUpdate{
Id: dv.Id,
GroupOrder: order2,
}}}})
}
}
// @TODO: rewrite for optimised compare
for _, view2 := range dv.content.Views {
var found bool
@ -247,6 +271,7 @@ func (s *Dataview) SetView(viewID string, view model.BlockContentDataviewView) e
v.Name = view.Name
v.Type = view.Type
v.CoverRelationKey = view.CoverRelationKey
v.GroupRelationKey = view.GroupRelationKey
v.HideIcon = view.HideIcon
v.CoverFit = view.CoverFit
v.CardSize = view.CardSize
@ -569,6 +594,36 @@ func (d *Dataview) SetViewOrder(viewIds []string) {
d.content.Views = newViews
}
func (d *Dataview) SetViewGroupOrder(order *model.BlockContentDataviewGroupOrder) {
isExist := false;
for _, groupOrder := range d.Model().GetDataview().GroupOrders {
if groupOrder.ViewId == order.ViewId {
isExist = true
groupOrder.ViewGroups = order.ViewGroups
break
}
}
if !isExist {
d.Model().GetDataview().GroupOrders = append(d.Model().GetDataview().GroupOrders, order)
}
}
func (d *Dataview) SetViewObjectOrder(orders []*model.BlockContentDataviewObjectOrder) {
for _, reqOrder := range orders {
isExist := false
for _, existOrder := range d.Model().GetDataview().ObjectOrders {
if reqOrder.ViewId == existOrder.ViewId && reqOrder.GroupId == existOrder.GroupId {
isExist = true
existOrder.ObjectIds = reqOrder.ObjectIds
break
}
}
if !isExist {
d.Model().GetDataview().ObjectOrders = append(d.Model().GetDataview().ObjectOrders, reqOrder)
}
}
}
func mergeSelectOptions(opts1, opts2 []*model.RelationOption) []*model.RelationOption {
var opts []*model.RelationOption
for _, opt1 := range opts1 {

View file

@ -32,6 +32,46 @@ func (mw *Middleware) BlockDataviewRelationListAvailable(req *pb.RpcBlockDatavie
return response(pb.RpcBlockDataviewRelationListAvailableResponseError_NULL, relations, nil)
}
func (mw *Middleware) BlockDataviewGroupOrderUpdate(req *pb.RpcBlockDataviewGroupOrderUpdateRequest) *pb.RpcBlockDataviewGroupOrderUpdateResponse {
ctx := state.NewContext(nil)
response := func(code pb.RpcBlockDataviewGroupOrderUpdateResponseErrorCode, err error) *pb.RpcBlockDataviewGroupOrderUpdateResponse {
m := &pb.RpcBlockDataviewGroupOrderUpdateResponse{Error: &pb.RpcBlockDataviewGroupOrderUpdateResponseError{Code: code}}
if err != nil {
m.Error.Description = err.Error()
} else {
m.Event = ctx.GetResponseEvent()
}
return m
}
err := mw.doBlockService(func(bs block.Service) (err error) {
return bs.UpdateDataviewGroupOrder(ctx, *req)
})
if err != nil {
return response(pb.RpcBlockDataviewGroupOrderUpdateResponseError_UNKNOWN_ERROR, err)
}
return response(pb.RpcBlockDataviewGroupOrderUpdateResponseError_NULL, nil)
}
func (mw *Middleware) BlockDataviewObjectOrderUpdate(req *pb.RpcBlockDataviewObjectOrderUpdateRequest) *pb.RpcBlockDataviewObjectOrderUpdateResponse {
ctx := state.NewContext(nil)
response := func(code pb.RpcBlockDataviewObjectOrderUpdateResponseErrorCode, err error) *pb.RpcBlockDataviewObjectOrderUpdateResponse {
m := &pb.RpcBlockDataviewObjectOrderUpdateResponse{Error: &pb.RpcBlockDataviewObjectOrderUpdateResponseError{Code: code}}
if err != nil {
m.Error.Description = err.Error()
} else {
m.Event = ctx.GetResponseEvent()
}
return m
}
err := mw.doBlockService(func(bs block.Service) (err error) {
return bs.UpdateDataviewObjectOrder(ctx, *req)
})
if err != nil {
return response(pb.RpcBlockDataviewObjectOrderUpdateResponseError_UNKNOWN_ERROR, err)
}
return response(pb.RpcBlockDataviewObjectOrderUpdateResponseError_NULL, nil)
}
func (mw *Middleware) BlockDataviewViewUpdate(req *pb.RpcBlockDataviewViewUpdateRequest) *pb.RpcBlockDataviewViewUpdateResponse {
ctx := state.NewContext(nil)
response := func(code pb.RpcBlockDataviewViewUpdateResponseErrorCode, err error) *pb.RpcBlockDataviewViewUpdateResponse {

View file

@ -1,6 +1,7 @@
package core
import (
"errors"
"fmt"
"strconv"
"strings"
@ -277,6 +278,37 @@ func (mw *Middleware) ObjectSearchSubscribe(req *pb.RpcObjectSearchSubscribeRequ
return resp
}
func (mw *Middleware) ObjectRelationSearchDistinct(req *pb.RpcObjectRelationSearchDistinctRequest) *pb.RpcObjectRelationSearchDistinctResponse {
errResponse := func(err error) *pb.RpcObjectRelationSearchDistinctResponse {
r := &pb.RpcObjectRelationSearchDistinctResponse{
Error: &pb.RpcObjectRelationSearchDistinctResponseError{
Code: pb.RpcObjectRelationSearchDistinctResponseError_UNKNOWN_ERROR,
},
}
if err != nil {
r.Error.Description = err.Error()
}
return r
}
mw.m.RLock()
defer mw.m.RUnlock()
if mw.app == nil {
return errResponse(errors.New("app must be started"))
}
store := mw.app.MustComponent(objectstore.CName).(objectstore.ObjectStore)
groups, err := store.RelationSearchDistinct(req.RelationKey, req.Filters)
if err != nil {
return errResponse(err)
}
return &pb.RpcObjectRelationSearchDistinctResponse{Error: &pb.RpcObjectRelationSearchDistinctResponseError{
Code: pb.RpcObjectRelationSearchDistinctResponseError_NULL,
}, Groups: groups}
}
func (mw *Middleware) ObjectSubscribeIds(req *pb.RpcObjectSubscribeIdsRequest) *pb.RpcObjectSubscribeIdsResponse {
errResponse := func(err error) *pb.RpcObjectSubscribeIdsResponse {
r := &pb.RpcObjectSubscribeIdsResponse{

View file

@ -183,6 +183,16 @@
- [Rpc.BlockDataview.CreateBookmark.Request](#anytype-Rpc-BlockDataview-CreateBookmark-Request)
- [Rpc.BlockDataview.CreateBookmark.Response](#anytype-Rpc-BlockDataview-CreateBookmark-Response)
- [Rpc.BlockDataview.CreateBookmark.Response.Error](#anytype-Rpc-BlockDataview-CreateBookmark-Response-Error)
- [Rpc.BlockDataview.GroupOrder](#anytype-Rpc-BlockDataview-GroupOrder)
- [Rpc.BlockDataview.GroupOrder.Update](#anytype-Rpc-BlockDataview-GroupOrder-Update)
- [Rpc.BlockDataview.GroupOrder.Update.Request](#anytype-Rpc-BlockDataview-GroupOrder-Update-Request)
- [Rpc.BlockDataview.GroupOrder.Update.Response](#anytype-Rpc-BlockDataview-GroupOrder-Update-Response)
- [Rpc.BlockDataview.GroupOrder.Update.Response.Error](#anytype-Rpc-BlockDataview-GroupOrder-Update-Response-Error)
- [Rpc.BlockDataview.ObjectOrder](#anytype-Rpc-BlockDataview-ObjectOrder)
- [Rpc.BlockDataview.ObjectOrder.Update](#anytype-Rpc-BlockDataview-ObjectOrder-Update)
- [Rpc.BlockDataview.ObjectOrder.Update.Request](#anytype-Rpc-BlockDataview-ObjectOrder-Update-Request)
- [Rpc.BlockDataview.ObjectOrder.Update.Response](#anytype-Rpc-BlockDataview-ObjectOrder-Update-Response)
- [Rpc.BlockDataview.ObjectOrder.Update.Response.Error](#anytype-Rpc-BlockDataview-ObjectOrder-Update-Response-Error)
- [Rpc.BlockDataview.Relation](#anytype-Rpc-BlockDataview-Relation)
- [Rpc.BlockDataview.Relation.Add](#anytype-Rpc-BlockDataview-Relation-Add)
- [Rpc.BlockDataview.Relation.Add.Request](#anytype-Rpc-BlockDataview-Relation-Add-Request)
@ -570,6 +580,10 @@
- [Rpc.Object.Redo.Request](#anytype-Rpc-Object-Redo-Request)
- [Rpc.Object.Redo.Response](#anytype-Rpc-Object-Redo-Response)
- [Rpc.Object.Redo.Response.Error](#anytype-Rpc-Object-Redo-Response-Error)
- [Rpc.Object.RelationSearchDistinct](#anytype-Rpc-Object-RelationSearchDistinct)
- [Rpc.Object.RelationSearchDistinct.Request](#anytype-Rpc-Object-RelationSearchDistinct-Request)
- [Rpc.Object.RelationSearchDistinct.Response](#anytype-Rpc-Object-RelationSearchDistinct-Response)
- [Rpc.Object.RelationSearchDistinct.Response.Error](#anytype-Rpc-Object-RelationSearchDistinct-Response-Error)
- [Rpc.Object.Search](#anytype-Rpc-Object-Search)
- [Rpc.Object.Search.Request](#anytype-Rpc-Object-Search-Request)
- [Rpc.Object.Search.Response](#anytype-Rpc-Object-Search-Response)
@ -804,6 +818,8 @@
- [Rpc.BlockBookmark.CreateAndFetch.Response.Error.Code](#anytype-Rpc-BlockBookmark-CreateAndFetch-Response-Error-Code)
- [Rpc.BlockBookmark.Fetch.Response.Error.Code](#anytype-Rpc-BlockBookmark-Fetch-Response-Error-Code)
- [Rpc.BlockDataview.CreateBookmark.Response.Error.Code](#anytype-Rpc-BlockDataview-CreateBookmark-Response-Error-Code)
- [Rpc.BlockDataview.GroupOrder.Update.Response.Error.Code](#anytype-Rpc-BlockDataview-GroupOrder-Update-Response-Error-Code)
- [Rpc.BlockDataview.ObjectOrder.Update.Response.Error.Code](#anytype-Rpc-BlockDataview-ObjectOrder-Update-Response-Error-Code)
- [Rpc.BlockDataview.Relation.Add.Response.Error.Code](#anytype-Rpc-BlockDataview-Relation-Add-Response-Error-Code)
- [Rpc.BlockDataview.Relation.Delete.Response.Error.Code](#anytype-Rpc-BlockDataview-Relation-Delete-Response-Error-Code)
- [Rpc.BlockDataview.Relation.ListAvailable.Response.Error.Code](#anytype-Rpc-BlockDataview-Relation-ListAvailable-Response-Error-Code)
@ -899,6 +915,7 @@
- [Rpc.Object.Open.Response.Error.Code](#anytype-Rpc-Object-Open-Response-Error-Code)
- [Rpc.Object.OpenBreadcrumbs.Response.Error.Code](#anytype-Rpc-Object-OpenBreadcrumbs-Response-Error-Code)
- [Rpc.Object.Redo.Response.Error.Code](#anytype-Rpc-Object-Redo-Response-Error-Code)
- [Rpc.Object.RelationSearchDistinct.Response.Error.Code](#anytype-Rpc-Object-RelationSearchDistinct-Response-Error-Code)
- [Rpc.Object.Search.Response.Error.Code](#anytype-Rpc-Object-Search-Response-Error-Code)
- [Rpc.Object.SearchSubscribe.Response.Error.Code](#anytype-Rpc-Object-SearchSubscribe-Response-Error-Code)
- [Rpc.Object.SearchUnsubscribe.Response.Error.Code](#anytype-Rpc-Object-SearchUnsubscribe-Response-Error-Code)
@ -957,6 +974,7 @@
- [Event.Block](#anytype-Event-Block)
- [Event.Block.Add](#anytype-Event-Block-Add)
- [Event.Block.Dataview](#anytype-Event-Block-Dataview)
- [Event.Block.Dataview.GroupOrderUpdate](#anytype-Event-Block-Dataview-GroupOrderUpdate)
- [Event.Block.Dataview.RecordsDelete](#anytype-Event-Block-Dataview-RecordsDelete)
- [Event.Block.Dataview.RecordsInsert](#anytype-Event-Block-Dataview-RecordsInsert)
- [Event.Block.Dataview.RecordsSet](#anytype-Event-Block-Dataview-RecordsSet)
@ -1126,10 +1144,18 @@
- [Block.Content](#anytype-model-Block-Content)
- [Block.Content.Bookmark](#anytype-model-Block-Content-Bookmark)
- [Block.Content.Dataview](#anytype-model-Block-Content-Dataview)
- [Block.Content.Dataview.Checkbox](#anytype-model-Block-Content-Dataview-Checkbox)
- [Block.Content.Dataview.Date](#anytype-model-Block-Content-Dataview-Date)
- [Block.Content.Dataview.Filter](#anytype-model-Block-Content-Dataview-Filter)
- [Block.Content.Dataview.Group](#anytype-model-Block-Content-Dataview-Group)
- [Block.Content.Dataview.GroupOrder](#anytype-model-Block-Content-Dataview-GroupOrder)
- [Block.Content.Dataview.ObjectOrder](#anytype-model-Block-Content-Dataview-ObjectOrder)
- [Block.Content.Dataview.Relation](#anytype-model-Block-Content-Dataview-Relation)
- [Block.Content.Dataview.Sort](#anytype-model-Block-Content-Dataview-Sort)
- [Block.Content.Dataview.Status](#anytype-model-Block-Content-Dataview-Status)
- [Block.Content.Dataview.Tag](#anytype-model-Block-Content-Dataview-Tag)
- [Block.Content.Dataview.View](#anytype-model-Block-Content-Dataview-View)
- [Block.Content.Dataview.ViewGroup](#anytype-model-Block-Content-Dataview-ViewGroup)
- [Block.Content.Div](#anytype-model-Block-Content-Div)
- [Block.Content.FeaturedRelations](#anytype-model-Block-Content-FeaturedRelations)
- [Block.Content.File](#anytype-model-Block-Content-File)
@ -1251,6 +1277,7 @@
| ObjectGraph | [Rpc.Object.Graph.Request](#anytype-Rpc-Object-Graph-Request) | [Rpc.Object.Graph.Response](#anytype-Rpc-Object-Graph-Response) | |
| ObjectSearch | [Rpc.Object.Search.Request](#anytype-Rpc-Object-Search-Request) | [Rpc.Object.Search.Response](#anytype-Rpc-Object-Search-Response) | |
| ObjectSearchSubscribe | [Rpc.Object.SearchSubscribe.Request](#anytype-Rpc-Object-SearchSubscribe-Request) | [Rpc.Object.SearchSubscribe.Response](#anytype-Rpc-Object-SearchSubscribe-Response) | |
| ObjectRelationSearchDistinct | [Rpc.Object.RelationSearchDistinct.Request](#anytype-Rpc-Object-RelationSearchDistinct-Request) | [Rpc.Object.RelationSearchDistinct.Response](#anytype-Rpc-Object-RelationSearchDistinct-Response) | |
| ObjectSubscribeIds | [Rpc.Object.SubscribeIds.Request](#anytype-Rpc-Object-SubscribeIds-Request) | [Rpc.Object.SubscribeIds.Response](#anytype-Rpc-Object-SubscribeIds-Response) | |
| ObjectSearchUnsubscribe | [Rpc.Object.SearchUnsubscribe.Request](#anytype-Rpc-Object-SearchUnsubscribe-Request) | [Rpc.Object.SearchUnsubscribe.Response](#anytype-Rpc-Object-SearchUnsubscribe-Response) | |
| ObjectSetDetails | [Rpc.Object.SetDetails.Request](#anytype-Rpc-Object-SetDetails-Request) | [Rpc.Object.SetDetails.Response](#anytype-Rpc-Object-SetDetails-Response) | |
@ -1352,6 +1379,8 @@
| BlockDataviewRelationUpdate | [Rpc.BlockDataview.Relation.Update.Request](#anytype-Rpc-BlockDataview-Relation-Update-Request) | [Rpc.BlockDataview.Relation.Update.Response](#anytype-Rpc-BlockDataview-Relation-Update-Response) | |
| BlockDataviewRelationDelete | [Rpc.BlockDataview.Relation.Delete.Request](#anytype-Rpc-BlockDataview-Relation-Delete-Request) | [Rpc.BlockDataview.Relation.Delete.Response](#anytype-Rpc-BlockDataview-Relation-Delete-Response) | |
| BlockDataviewRelationListAvailable | [Rpc.BlockDataview.Relation.ListAvailable.Request](#anytype-Rpc-BlockDataview-Relation-ListAvailable-Request) | [Rpc.BlockDataview.Relation.ListAvailable.Response](#anytype-Rpc-BlockDataview-Relation-ListAvailable-Response) | |
| BlockDataviewGroupOrderUpdate | [Rpc.BlockDataview.GroupOrder.Update.Request](#anytype-Rpc-BlockDataview-GroupOrder-Update-Request) | [Rpc.BlockDataview.GroupOrder.Update.Response](#anytype-Rpc-BlockDataview-GroupOrder-Update-Response) | |
| BlockDataviewObjectOrderUpdate | [Rpc.BlockDataview.ObjectOrder.Update.Request](#anytype-Rpc-BlockDataview-ObjectOrder-Update-Request) | [Rpc.BlockDataview.ObjectOrder.Update.Response](#anytype-Rpc-BlockDataview-ObjectOrder-Update-Response) | |
| BlockDataviewRecordCreate | [Rpc.BlockDataviewRecord.Create.Request](#anytype-Rpc-BlockDataviewRecord-Create-Request) | [Rpc.BlockDataviewRecord.Create.Response](#anytype-Rpc-BlockDataviewRecord-Create-Response) | |
| BlockDataviewRecordUpdate | [Rpc.BlockDataviewRecord.Update.Request](#anytype-Rpc-BlockDataviewRecord-Update-Request) | [Rpc.BlockDataviewRecord.Update.Response](#anytype-Rpc-BlockDataviewRecord-Update-Response) | |
| BlockDataviewRecordDelete | [Rpc.BlockDataviewRecord.Delete.Request](#anytype-Rpc-BlockDataviewRecord-Delete-Request) | [Rpc.BlockDataviewRecord.Delete.Response](#anytype-Rpc-BlockDataviewRecord-Delete-Response) | |
@ -4003,6 +4032,144 @@ Makes blocks copy by given ids and paste it to shown place
<a name="anytype-Rpc-BlockDataview-GroupOrder"></a>
### Rpc.BlockDataview.GroupOrder
<a name="anytype-Rpc-BlockDataview-GroupOrder-Update"></a>
### Rpc.BlockDataview.GroupOrder.Update
<a name="anytype-Rpc-BlockDataview-GroupOrder-Update-Request"></a>
### Rpc.BlockDataview.GroupOrder.Update.Request
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| contextId | [string](#string) | | |
| blockId | [string](#string) | | |
| groupOrder | [model.Block.Content.Dataview.GroupOrder](#anytype-model-Block-Content-Dataview-GroupOrder) | | |
<a name="anytype-Rpc-BlockDataview-GroupOrder-Update-Response"></a>
### Rpc.BlockDataview.GroupOrder.Update.Response
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| error | [Rpc.BlockDataview.GroupOrder.Update.Response.Error](#anytype-Rpc-BlockDataview-GroupOrder-Update-Response-Error) | | |
| event | [ResponseEvent](#anytype-ResponseEvent) | | |
<a name="anytype-Rpc-BlockDataview-GroupOrder-Update-Response-Error"></a>
### Rpc.BlockDataview.GroupOrder.Update.Response.Error
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| code | [Rpc.BlockDataview.GroupOrder.Update.Response.Error.Code](#anytype-Rpc-BlockDataview-GroupOrder-Update-Response-Error-Code) | | |
| description | [string](#string) | | |
<a name="anytype-Rpc-BlockDataview-ObjectOrder"></a>
### Rpc.BlockDataview.ObjectOrder
<a name="anytype-Rpc-BlockDataview-ObjectOrder-Update"></a>
### Rpc.BlockDataview.ObjectOrder.Update
<a name="anytype-Rpc-BlockDataview-ObjectOrder-Update-Request"></a>
### Rpc.BlockDataview.ObjectOrder.Update.Request
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| contextId | [string](#string) | | |
| blockId | [string](#string) | | |
| objectOrders | [model.Block.Content.Dataview.ObjectOrder](#anytype-model-Block-Content-Dataview-ObjectOrder) | repeated | |
<a name="anytype-Rpc-BlockDataview-ObjectOrder-Update-Response"></a>
### Rpc.BlockDataview.ObjectOrder.Update.Response
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| error | [Rpc.BlockDataview.ObjectOrder.Update.Response.Error](#anytype-Rpc-BlockDataview-ObjectOrder-Update-Response-Error) | | |
| event | [ResponseEvent](#anytype-ResponseEvent) | | |
<a name="anytype-Rpc-BlockDataview-ObjectOrder-Update-Response-Error"></a>
### Rpc.BlockDataview.ObjectOrder.Update.Response.Error
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| code | [Rpc.BlockDataview.ObjectOrder.Update.Response.Error.Code](#anytype-Rpc-BlockDataview-ObjectOrder-Update-Response-Error-Code) | | |
| description | [string](#string) | | |
<a name="anytype-Rpc-BlockDataview-Relation"></a>
### Rpc.BlockDataview.Relation
@ -9667,6 +9834,64 @@ Deletes the object, keys from the local store and unsubscribe from remote change
<a name="anytype-Rpc-Object-RelationSearchDistinct"></a>
### Rpc.Object.RelationSearchDistinct
<a name="anytype-Rpc-Object-RelationSearchDistinct-Request"></a>
### Rpc.Object.RelationSearchDistinct.Request
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| relationKey | [string](#string) | | |
| filters | [model.Block.Content.Dataview.Filter](#anytype-model-Block-Content-Dataview-Filter) | repeated | |
<a name="anytype-Rpc-Object-RelationSearchDistinct-Response"></a>
### Rpc.Object.RelationSearchDistinct.Response
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| error | [Rpc.Object.RelationSearchDistinct.Response.Error](#anytype-Rpc-Object-RelationSearchDistinct-Response-Error) | | |
| groups | [model.Block.Content.Dataview.Group](#anytype-model-Block-Content-Dataview-Group) | repeated | |
<a name="anytype-Rpc-Object-RelationSearchDistinct-Response-Error"></a>
### Rpc.Object.RelationSearchDistinct.Response.Error
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| code | [Rpc.Object.RelationSearchDistinct.Response.Error.Code](#anytype-Rpc-Object-RelationSearchDistinct-Response-Error-Code) | | |
| description | [string](#string) | | |
<a name="anytype-Rpc-Object-Search"></a>
### Rpc.Object.Search
@ -13026,6 +13251,32 @@ Middleware-to-front-end response, that can contain a NULL error or a non-NULL er
<a name="anytype-Rpc-BlockDataview-GroupOrder-Update-Response-Error-Code"></a>
### Rpc.BlockDataview.GroupOrder.Update.Response.Error.Code
| Name | Number | Description |
| ---- | ------ | ----------- |
| NULL | 0 | |
| UNKNOWN_ERROR | 1 | |
| BAD_INPUT | 2 | |
<a name="anytype-Rpc-BlockDataview-ObjectOrder-Update-Response-Error-Code"></a>
### Rpc.BlockDataview.ObjectOrder.Update.Response.Error.Code
| Name | Number | Description |
| ---- | ------ | ----------- |
| NULL | 0 | |
| UNKNOWN_ERROR | 1 | |
| BAD_INPUT | 2 | |
<a name="anytype-Rpc-BlockDataview-Relation-Add-Response-Error-Code"></a>
### Rpc.BlockDataview.Relation.Add.Response.Error.Code
@ -14277,6 +14528,19 @@ Middleware-to-front-end response, that can contain a NULL error or a non-NULL er
<a name="anytype-Rpc-Object-RelationSearchDistinct-Response-Error-Code"></a>
### Rpc.Object.RelationSearchDistinct.Response.Error.Code
| Name | Number | Description |
| ---- | ------ | ----------- |
| NULL | 0 | |
| UNKNOWN_ERROR | 1 | |
| BAD_INPUT | 2 | |
<a name="anytype-Rpc-Object-Search-Response-Error-Code"></a>
### Rpc.Object.Search.Response.Error.Code
@ -15052,6 +15316,22 @@ B. Partial block load
<a name="anytype-Event-Block-Dataview-GroupOrderUpdate"></a>
### Event.Block.Dataview.GroupOrderUpdate
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| id | [string](#string) | | dataview block&#39;s id |
| groupOrder | [model.Block.Content.Dataview.GroupOrder](#anytype-model-Block-Content-Dataview-GroupOrder) | | |
<a name="anytype-Event-Block-Dataview-RecordsDelete"></a>
### Event.Block.Dataview.RecordsDelete
@ -16672,6 +16952,7 @@ Precondition: user A opened a block
| blockDataviewViewOrder | [Event.Block.Dataview.ViewOrder](#anytype-Event-Block-Dataview-ViewOrder) | | |
| blockDataviewRelationDelete | [Event.Block.Dataview.RelationDelete](#anytype-Event-Block-Dataview-RelationDelete) | | |
| blockDataviewRelationSet | [Event.Block.Dataview.RelationSet](#anytype-Event-Block-Dataview-RelationSet) | | |
| blockDataViewGroupOrderUpdate | [Event.Block.Dataview.GroupOrderUpdate](#anytype-Event-Block-Dataview-GroupOrderUpdate) | | |
| userBlockJoin | [Event.User.Block.Join](#anytype-Event-User-Block-Join) | | |
| userBlockLeft | [Event.User.Block.Left](#anytype-Event-User-Block-Left) | | |
| userBlockSelectRange | [Event.User.Block.SelectRange](#anytype-Event-User-Block-SelectRange) | | |
@ -17762,6 +18043,33 @@ Bookmark is to keep a web-link and to preview a content.
| views | [Block.Content.Dataview.View](#anytype-model-Block-Content-Dataview-View) | repeated | |
| relations | [Relation](#anytype-model-Relation) | repeated | index 3 is deprecated, was used for schemaURL in old-format sets |
| activeView | [string](#string) | | saved within a session |
| groupOrders | [Block.Content.Dataview.GroupOrder](#anytype-model-Block-Content-Dataview-GroupOrder) | repeated | |
| objectOrders | [Block.Content.Dataview.ObjectOrder](#anytype-model-Block-Content-Dataview-ObjectOrder) | repeated | |
<a name="anytype-model-Block-Content-Dataview-Checkbox"></a>
### Block.Content.Dataview.Checkbox
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| checked | [bool](#bool) | | |
<a name="anytype-model-Block-Content-Dataview-Date"></a>
### Block.Content.Dataview.Date
@ -17788,6 +18096,58 @@ Bookmark is to keep a web-link and to preview a content.
<a name="anytype-model-Block-Content-Dataview-Group"></a>
### Block.Content.Dataview.Group
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| id | [string](#string) | | |
| status | [Block.Content.Dataview.Status](#anytype-model-Block-Content-Dataview-Status) | | |
| tag | [Block.Content.Dataview.Tag](#anytype-model-Block-Content-Dataview-Tag) | | |
| checkbox | [Block.Content.Dataview.Checkbox](#anytype-model-Block-Content-Dataview-Checkbox) | | |
| date | [Block.Content.Dataview.Date](#anytype-model-Block-Content-Dataview-Date) | | |
<a name="anytype-model-Block-Content-Dataview-GroupOrder"></a>
### Block.Content.Dataview.GroupOrder
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| viewId | [string](#string) | | |
| viewGroups | [Block.Content.Dataview.ViewGroup](#anytype-model-Block-Content-Dataview-ViewGroup) | repeated | |
<a name="anytype-model-Block-Content-Dataview-ObjectOrder"></a>
### Block.Content.Dataview.ObjectOrder
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| viewId | [string](#string) | | |
| groupId | [string](#string) | | |
| objectIds | [string](#string) | repeated | |
<a name="anytype-model-Block-Content-Dataview-Relation"></a>
### Block.Content.Dataview.Relation
@ -17824,6 +18184,36 @@ Bookmark is to keep a web-link and to preview a content.
<a name="anytype-model-Block-Content-Dataview-Status"></a>
### Block.Content.Dataview.Status
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| id | [string](#string) | | |
<a name="anytype-model-Block-Content-Dataview-Tag"></a>
### Block.Content.Dataview.Tag
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| ids | [string](#string) | repeated | |
<a name="anytype-model-Block-Content-Dataview-View"></a>
### Block.Content.Dataview.View
@ -17842,6 +18232,24 @@ Bookmark is to keep a web-link and to preview a content.
| hideIcon | [bool](#bool) | | Hide icon near name |
| cardSize | [Block.Content.Dataview.View.Size](#anytype-model-Block-Content-Dataview-View-Size) | | Gallery card size |
| coverFit | [bool](#bool) | | Image fits container |
| groupRelationKey | [string](#string) | | |
<a name="anytype-model-Block-Content-Dataview-ViewGroup"></a>
### Block.Content.Dataview.ViewGroup
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| groupId | [string](#string) | | |
| index | [int32](#int32) | | |
| hidden | [bool](#bool) | | |
@ -18458,6 +18866,8 @@ scope from which this relation have been aggregated |
| NotEmpty | 12 | |
| AllIn | 13 | |
| NotAllIn | 14 | |
| ExactIn | 15 | |
| NotExactIn | 16 | |

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1076,6 +1076,30 @@ message Rpc {
}
}
message RelationSearchDistinct {
message Request {
string relationKey = 1;
repeated anytype.model.Block.Content.Dataview.Filter filters = 2;
}
message Response {
Error error = 1;
repeated anytype.model.Block.Content.Dataview.Group groups = 2;
message Error {
Code code = 1;
string description = 2;
enum Code {
NULL = 0;
UNKNOWN_ERROR = 1;
BAD_INPUT = 2;
}
}
}
}
message SubscribeIds {
message Request {
// (optional) subscription identifier
@ -4208,6 +4232,56 @@ message Rpc {
}
}
}
message GroupOrder {
message Update {
message Request {
string contextId = 1;
string blockId = 2;
anytype.model.Block.Content.Dataview.GroupOrder groupOrder = 3;
}
message Response {
Error error = 1;
ResponseEvent event = 2;
message Error {
Code code = 1;
string description = 2;
enum Code {
NULL = 0;
UNKNOWN_ERROR = 1;
BAD_INPUT = 2;
}
}
}
}
}
message ObjectOrder {
message Update {
message Request {
string contextId = 1;
string blockId = 2;
repeated anytype.model.Block.Content.Dataview.ObjectOrder objectOrders = 3;
}
message Response {
Error error = 1;
ResponseEvent event = 2;
message Error {
Code code = 1;
string description = 2;
enum Code {
NULL = 0;
UNKNOWN_ERROR = 1;
BAD_INPUT = 2;
}
}
}
}
}
message CreateBookmark {
message Request {

View file

@ -68,6 +68,7 @@ message Event {
Block.Dataview.ViewOrder blockDataviewViewOrder = 29;
Block.Dataview.RelationDelete blockDataviewRelationDelete = 24;
Block.Dataview.RelationSet blockDataviewRelationSet = 23;
Block.Dataview.GroupOrderUpdate blockDataViewGroupOrderUpdate = 38;
User.Block.Join userBlockJoin = 31;
@ -760,6 +761,11 @@ message Event {
string viewId = 2; // view id, client should double check this to make sure client doesn't switch the active view in the middle
repeated string removed = 6;
}
message GroupOrderUpdate {
string id = 1; // dataview block's id
anytype.model.Block.Content.Dataview.GroupOrder groupOrder = 2;
}
}
}

View file

@ -48,6 +48,7 @@ service ClientCommands {
rpc ObjectGraph (anytype.Rpc.Object.Graph.Request) returns (anytype.Rpc.Object.Graph.Response);
rpc ObjectSearch (anytype.Rpc.Object.Search.Request) returns (anytype.Rpc.Object.Search.Response);
rpc ObjectSearchSubscribe (anytype.Rpc.Object.SearchSubscribe.Request) returns (anytype.Rpc.Object.SearchSubscribe.Response);
rpc ObjectRelationSearchDistinct (anytype.Rpc.Object.RelationSearchDistinct.Request) returns (anytype.Rpc.Object.RelationSearchDistinct.Response);
rpc ObjectSubscribeIds (anytype.Rpc.Object.SubscribeIds.Request) returns (anytype.Rpc.Object.SubscribeIds.Response);
rpc ObjectSearchUnsubscribe (anytype.Rpc.Object.SearchUnsubscribe.Request) returns (anytype.Rpc.Object.SearchUnsubscribe.Response);
rpc ObjectSetDetails (anytype.Rpc.Object.SetDetails.Request) returns (anytype.Rpc.Object.SetDetails.Response);
@ -181,6 +182,8 @@ service ClientCommands {
rpc BlockDataviewRelationUpdate (anytype.Rpc.BlockDataview.Relation.Update.Request) returns (anytype.Rpc.BlockDataview.Relation.Update.Response);
rpc BlockDataviewRelationDelete (anytype.Rpc.BlockDataview.Relation.Delete.Request) returns (anytype.Rpc.BlockDataview.Relation.Delete.Response);
rpc BlockDataviewRelationListAvailable (anytype.Rpc.BlockDataview.Relation.ListAvailable.Request) returns (anytype.Rpc.BlockDataview.Relation.ListAvailable.Response);
rpc BlockDataviewGroupOrderUpdate (anytype.Rpc.BlockDataview.GroupOrder.Update.Request) returns (anytype.Rpc.BlockDataview.GroupOrder.Update.Response);
rpc BlockDataviewObjectOrderUpdate (anytype.Rpc.BlockDataview.ObjectOrder.Update.Request) returns (anytype.Rpc.BlockDataview.ObjectOrder.Update.Response);
rpc BlockDataviewRecordCreate (anytype.Rpc.BlockDataviewRecord.Create.Request) returns (anytype.Rpc.BlockDataviewRecord.Create.Response);
rpc BlockDataviewRecordUpdate (anytype.Rpc.BlockDataviewRecord.Update.Request) returns (anytype.Rpc.BlockDataviewRecord.Update.Response);

View file

@ -26,207 +26,211 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) }
var fileDescriptor_93a29dc403579097 = []byte{
// 3190 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x9c, 0xdb, 0x6f, 0x1c, 0x49,
0xf5, 0xc7, 0x77, 0x5e, 0x7e, 0xfb, 0xa3, 0xf7, 0x02, 0x34, 0xb0, 0x2c, 0x66, 0xd7, 0xc9, 0x66,
0x13, 0x5f, 0xe2, 0x78, 0xec, 0xc4, 0x08, 0xc4, 0x45, 0xac, 0xc6, 0x76, 0x9c, 0x58, 0x1b, 0x27,
0xc6, 0xe3, 0x6c, 0xa4, 0x95, 0x90, 0x68, 0xf7, 0x54, 0x66, 0x1a, 0xf7, 0x74, 0x35, 0xdd, 0x35,
0x63, 0x0f, 0x08, 0x24, 0x04, 0x02, 0x81, 0x78, 0x40, 0xe2, 0x91, 0x27, 0x5e, 0xf9, 0x4b, 0x78,
0xdc, 0x47, 0x78, 0x43, 0xbb, 0xff, 0x08, 0xea, 0xee, 0x53, 0x55, 0x5d, 0xa7, 0xeb, 0x54, 0xf7,
0xe4, 0x69, 0x37, 0x73, 0x3e, 0xe7, 0x7c, 0xab, 0xba, 0x4f, 0xdd, 0x4e, 0x75, 0xe2, 0xdd, 0x48,
0x2f, 0x76, 0xd2, 0x8c, 0x0b, 0x9e, 0xef, 0xe4, 0x2c, 0x9b, 0x47, 0x21, 0x93, 0xff, 0xed, 0x97,
0x3f, 0xfb, 0xaf, 0x07, 0xc9, 0x42, 0x2c, 0x52, 0xb6, 0xf2, 0xae, 0x26, 0x43, 0x3e, 0x9d, 0x06,
0xc9, 0x28, 0xaf, 0x90, 0x95, 0x77, 0xb4, 0x85, 0xcd, 0x59, 0x22, 0xe0, 0xf7, 0x07, 0xff, 0xf9,
0x4b, 0xcf, 0x7b, 0xfb, 0x20, 0x8e, 0x58, 0x22, 0x0e, 0xc0, 0xc3, 0xff, 0xd4, 0x7b, 0x6b, 0x90,
0xa6, 0x8f, 0x98, 0xf8, 0x84, 0x65, 0x79, 0xc4, 0x13, 0xff, 0xc3, 0x3e, 0x08, 0xf4, 0xcf, 0xd2,
0xb0, 0x3f, 0x48, 0xd3, 0xbe, 0x36, 0xf6, 0xcf, 0xd8, 0x2f, 0x66, 0x2c, 0x17, 0x2b, 0xb7, 0xdd,
0x50, 0x9e, 0xf2, 0x24, 0x67, 0xfe, 0x4b, 0xef, 0xab, 0x83, 0x34, 0x1d, 0x32, 0x71, 0xc8, 0x8a,
0x0e, 0x0c, 0x45, 0x20, 0x98, 0xbf, 0xde, 0x70, 0x35, 0x01, 0xa5, 0xb1, 0xd1, 0x0e, 0x82, 0xce,
0xb9, 0xf7, 0x46, 0xa1, 0x33, 0x99, 0x89, 0x11, 0xbf, 0x4a, 0xfc, 0x0f, 0x9a, 0x8e, 0x60, 0x52,
0xb1, 0x6f, 0xb9, 0x10, 0x88, 0xfa, 0xc2, 0x7b, 0xf3, 0x45, 0x10, 0xc7, 0x4c, 0x1c, 0x64, 0xac,
0x68, 0xb8, 0xe9, 0x53, 0x99, 0xfa, 0x95, 0x4d, 0xc5, 0xfd, 0xd0, 0xc9, 0x40, 0xe0, 0x4f, 0xbd,
0xb7, 0x2a, 0xcb, 0x19, 0x0b, 0xf9, 0x9c, 0x65, 0xbe, 0xd5, 0x0b, 0x8c, 0xc4, 0x23, 0x6f, 0x40,
0x38, 0xf6, 0x01, 0x4f, 0xe6, 0x2c, 0x13, 0xf6, 0xd8, 0x60, 0x74, 0xc7, 0xd6, 0x10, 0xc4, 0xfe,
0x99, 0xf7, 0xe5, 0x17, 0x3c, 0xbb, 0xcc, 0xd3, 0x20, 0x64, 0xf0, 0x4c, 0xee, 0x98, 0x8e, 0xd2,
0x8a, 0x1f, 0xcb, 0x5a, 0x1b, 0x66, 0x51, 0x18, 0xb2, 0x98, 0x85, 0x82, 0x54, 0xa8, 0xcc, 0xad,
0x0a, 0x0a, 0x03, 0x85, 0xd8, 0xfb, 0x9a, 0x32, 0x3e, 0x62, 0xe2, 0x60, 0x96, 0x65, 0x2c, 0x11,
0xfe, 0x26, 0xe1, 0xae, 0x11, 0xa5, 0x74, 0xb7, 0x0b, 0x6a, 0xe9, 0xcf, 0x23, 0x26, 0x06, 0x71,
0x4c, 0xf6, 0xa7, 0x32, 0xb7, 0xf6, 0x47, 0x61, 0xa0, 0xf0, 0x1b, 0xef, 0x5b, 0xb5, 0x27, 0x26,
0x8e, 0xf3, 0xc7, 0xd1, 0x78, 0x12, 0x47, 0xe3, 0x89, 0x60, 0x23, 0x7f, 0x87, 0x7c, 0x28, 0x26,
0xa8, 0x54, 0x77, 0xbb, 0x3b, 0x58, 0x7a, 0xf8, 0xf0, 0x3a, 0xe5, 0x19, 0xfd, 0xc6, 0x2a, 0x73,
0x6b, 0x0f, 0x15, 0x06, 0x0a, 0x3f, 0xf5, 0xde, 0x1e, 0x84, 0x21, 0x9f, 0x25, 0x6a, 0xb8, 0xa0,
0xc9, 0xa7, 0x32, 0x36, 0xc6, 0xcb, 0x9d, 0x16, 0x4a, 0x0f, 0x18, 0xb0, 0x41, 0x4a, 0x7f, 0x68,
0xf5, 0x43, 0x09, 0x7d, 0xdb, 0x0d, 0x35, 0x62, 0x1f, 0xb2, 0x98, 0x91, 0xb1, 0x2b, 0x63, 0x4b,
0x6c, 0x05, 0x35, 0x62, 0xc3, 0x40, 0xb1, 0xc7, 0x46, 0xc3, 0xe4, 0xb6, 0x1b, 0xaa, 0xcd, 0xa7,
0x10, 0x5b, 0xf0, 0x14, 0xcf, 0xa7, 0xd2, 0x49, 0xf0, 0x94, 0x9a, 0x4f, 0x4d, 0xa4, 0x11, 0xf5,
0x84, 0xcf, 0x19, 0x11, 0xb5, 0x30, 0xb5, 0x44, 0x05, 0x44, 0x0f, 0x68, 0xf9, 0xfe, 0x78, 0xf2,
0x32, 0x1a, 0x3f, 0x4f, 0x47, 0xc5, 0x5b, 0xdc, 0xb4, 0xbf, 0xa0, 0x1a, 0x42, 0x0c, 0x68, 0x02,
0x05, 0xb5, 0x9f, 0x78, 0xde, 0xb3, 0x8b, 0x9f, 0xb3, 0x50, 0x3c, 0x4b, 0x59, 0xe2, 0xdf, 0x34,
0x3c, 0x2b, 0x43, 0xbf, 0xb0, 0xa8, 0xd8, 0x1f, 0x38, 0x08, 0xfd, 0x58, 0xaa, 0xdf, 0x0f, 0x62,
0x9e, 0xe3, 0xc7, 0x02, 0x1e, 0xa5, 0x89, 0x78, 0x2c, 0x08, 0xc1, 0x0d, 0x1d, 0x4e, 0xf8, 0x95,
0xbd, 0xa1, 0x85, 0xc5, 0xdd, 0x50, 0x20, 0xf4, 0x7a, 0x08, 0x0d, 0xb5, 0xad, 0x87, 0xb2, 0x19,
0xae, 0xf5, 0x10, 0x33, 0x10, 0x98, 0x7b, 0x5f, 0xaf, 0x07, 0xde, 0xe7, 0xfc, 0x72, 0x1a, 0x64,
0x97, 0xfe, 0x5d, 0xda, 0x59, 0x32, 0x4a, 0x68, 0xab, 0x13, 0xab, 0x27, 0xad, 0xba, 0xe0, 0x90,
0xe1, 0x49, 0xcb, 0xf0, 0x1f, 0x32, 0x6a, 0xd2, 0xb2, 0x60, 0xf8, 0xa5, 0x3e, 0xca, 0x82, 0x74,
0x62, 0x7f, 0xa9, 0xa5, 0xc9, 0xfd, 0x52, 0x25, 0x82, 0xdf, 0xc0, 0x90, 0x05, 0x59, 0x38, 0xb1,
0xbf, 0x81, 0xca, 0xe6, 0x7e, 0x03, 0x8a, 0x81, 0xc0, 0x99, 0xf7, 0x8d, 0x7a, 0xe0, 0xe1, 0xec,
0x22, 0x0f, 0xb3, 0xe8, 0x82, 0xf9, 0x5b, 0xb4, 0xb7, 0x82, 0x94, 0xd4, 0xbd, 0x6e, 0x30, 0x68,
0x46, 0x9e, 0x0f, 0x9a, 0xd2, 0x76, 0x3c, 0xca, 0xfd, 0x0d, 0x6b, 0x8c, 0x1a, 0xa1, 0xd4, 0x36,
0x3b, 0x90, 0x20, 0x75, 0xed, 0x7d, 0xb3, 0xde, 0xbd, 0xe7, 0x49, 0xae, 0x3a, 0xb8, 0x4d, 0xb7,
0xb9, 0x86, 0x29, 0xd1, 0x7e, 0x57, 0x1c, 0x94, 0x43, 0xef, 0x2b, 0x52, 0x59, 0x1c, 0x32, 0x11,
0x44, 0x71, 0xee, 0xaf, 0xd9, 0x63, 0x48, 0xbb, 0xd2, 0x5a, 0x6f, 0xe5, 0x70, 0x3a, 0x1f, 0xce,
0xd2, 0x38, 0x0a, 0x9b, 0xfb, 0x32, 0xf0, 0x55, 0x66, 0x77, 0x3a, 0xd7, 0x31, 0x3d, 0xc9, 0xaa,
0x6e, 0x54, 0xff, 0x73, 0xbe, 0x48, 0xf1, 0x24, 0xab, 0x5b, 0xa8, 0x11, 0x62, 0x92, 0x25, 0x50,
0xdc, 0x9f, 0x21, 0x13, 0x4f, 0x82, 0x05, 0x9f, 0x11, 0xc3, 0x53, 0x99, 0xdd, 0xfd, 0xa9, 0x63,
0x96, 0xfe, 0x1c, 0xe7, 0x47, 0xc1, 0x9c, 0x67, 0x91, 0xa0, 0xfb, 0xa3, 0x91, 0xd6, 0xfe, 0x18,
0xa8, 0x55, 0x6d, 0x90, 0x85, 0x93, 0x68, 0xce, 0x46, 0x0e, 0x35, 0x89, 0x74, 0x50, 0xab, 0xa1,
0x58, 0xed, 0x49, 0x94, 0xd7, 0x32, 0xc2, 0xaa, 0x66, 0x20, 0x6e, 0x35, 0x8c, 0xe2, 0x04, 0x2f,
0xed, 0xd5, 0x2e, 0x67, 0x8d, 0xf4, 0x37, 0x37, 0x3a, 0xeb, 0xad, 0x1c, 0x1e, 0xbf, 0x85, 0xd1,
0x7c, 0x88, 0xdb, 0x54, 0x0c, 0xfb, 0x83, 0xec, 0x77, 0xc5, 0x49, 0x65, 0x95, 0x2c, 0x6e, 0xe5,
0x46, 0xc2, 0xf4, 0xbb, 0xe2, 0xf8, 0x35, 0x0e, 0xd2, 0x34, 0x5e, 0x9c, 0xb3, 0x69, 0x1a, 0x93,
0xaf, 0xd1, 0x40, 0xdc, 0xaf, 0x11, 0xa3, 0x78, 0xbd, 0x3a, 0xe7, 0xc5, 0x6a, 0x68, 0x5d, 0xaf,
0x4a, 0x93, 0x7b, 0xbd, 0x92, 0x08, 0x5e, 0x56, 0x06, 0xa3, 0xd1, 0x8b, 0x48, 0x4c, 0xaa, 0x3f,
0x1c, 0x8f, 0xec, 0xcb, 0x0a, 0x82, 0xdc, 0xcb, 0x4a, 0x13, 0xd6, 0x35, 0x07, 0xb9, 0xf1, 0x09,
0x32, 0xb6, 0xbf, 0x78, 0x12, 0x25, 0x97, 0xbe, 0x7d, 0x2a, 0xd5, 0x00, 0x51, 0x73, 0xb0, 0x82,
0xb8, 0x6f, 0xc5, 0x6e, 0x6e, 0x3f, 0x63, 0xc1, 0x28, 0xcc, 0x66, 0xd3, 0x8b, 0xdc, 0xde, 0x37,
0x04, 0xb9, 0xfb, 0xd6, 0x84, 0xf1, 0x46, 0x69, 0xc8, 0x44, 0x5d, 0x92, 0x9a, 0x1e, 0x6c, 0x8a,
0x5b, 0x9d, 0x58, 0xbc, 0x8b, 0x7c, 0x9e, 0x8c, 0xb8, 0x7d, 0x17, 0x59, 0x58, 0xdc, 0xbb, 0x48,
0x20, 0x70, 0xc8, 0x33, 0x46, 0x85, 0x2c, 0x2c, 0xee, 0x90, 0x40, 0xe0, 0xc7, 0x72, 0x3c, 0x2d,
0x8e, 0x8e, 0x27, 0x41, 0x76, 0x59, 0xd6, 0x81, 0xac, 0x8f, 0xc5, 0x64, 0xdc, 0x8f, 0xa5, 0xc1,
0xda, 0x26, 0x3d, 0x38, 0xf5, 0x92, 0x93, 0x1e, 0x3a, 0xf6, 0xae, 0xb7, 0x72, 0x78, 0x02, 0x90,
0xfb, 0xd7, 0x23, 0x26, 0xc2, 0x89, 0x7d, 0x02, 0x30, 0x10, 0xf7, 0x04, 0x80, 0x51, 0xdc, 0xa5,
0x73, 0xae, 0xf6, 0xdf, 0x6b, 0xf6, 0x21, 0xde, 0xd8, 0x7b, 0xaf, 0xb7, 0x72, 0x78, 0x6c, 0x9e,
0xb1, 0x38, 0x10, 0x11, 0x4f, 0x06, 0xa3, 0x91, 0x75, 0x6c, 0x4a, 0x7b, 0x31, 0xcc, 0x9d, 0x63,
0x13, 0x81, 0x38, 0x21, 0xa4, 0x19, 0x0e, 0x85, 0x77, 0x5d, 0x11, 0xd0, 0xa9, 0x70, 0xab, 0x13,
0x4b, 0x09, 0xc2, 0x4a, 0xe8, 0x14, 0x44, 0xab, 0xe1, 0x56, 0x27, 0x56, 0x97, 0x7d, 0x1a, 0x4f,
0xf2, 0x88, 0x05, 0x62, 0x96, 0x35, 0xca, 0x3e, 0xcd, 0x07, 0x25, 0x41, 0xa2, 0xec, 0xe3, 0x74,
0x00, 0xfd, 0x3f, 0xf6, 0xbc, 0xf7, 0x4c, 0xee, 0x8c, 0x4d, 0xf9, 0x9c, 0xa9, 0x36, 0x3c, 0x70,
0x85, 0x34, 0x59, 0xd5, 0x8c, 0xbd, 0xa5, 0x7c, 0xa0, 0x25, 0xbf, 0xef, 0x79, 0xdf, 0x36, 0xd1,
0x62, 0x30, 0x0d, 0xe6, 0x41, 0x14, 0x07, 0x17, 0x31, 0xf3, 0xef, 0xbb, 0x82, 0x1a, 0xa8, 0x6a,
0xc7, 0x83, 0x65, 0x5c, 0xf0, 0x46, 0x41, 0x82, 0xcf, 0x52, 0x99, 0xe0, 0xdb, 0x8e, 0x70, 0x15,
0x65, 0xa4, 0x79, 0xbf, 0x2b, 0x0e, 0xca, 0xbf, 0xed, 0x79, 0x2b, 0x36, 0x0a, 0x72, 0x7e, 0xb7,
0x3d, 0x1c, 0xca, 0xfc, 0xfb, 0x4b, 0x78, 0xb4, 0xb4, 0x01, 0x86, 0x41, 0x87, 0x36, 0xa0, 0xc1,
0x70, 0x7f, 0x09, 0x8f, 0xc6, 0x0c, 0xb6, 0x48, 0x65, 0x79, 0xda, 0x36, 0x83, 0x95, 0x67, 0x0d,
0x54, 0xa6, 0x58, 0x6f, 0xe5, 0x74, 0x31, 0x52, 0x5b, 0x8b, 0x54, 0x40, 0xc5, 0xc8, 0x9a, 0x6b,
0x61, 0x25, 0x8a, 0x91, 0x4d, 0x0a, 0xc2, 0x5f, 0x79, 0xef, 0x68, 0x5b, 0x3d, 0x9f, 0xad, 0x49,
0x04, 0xa7, 0xa6, 0x5a, 0x62, 0x3a, 0x93, 0xc8, 0x8a, 0x83, 0xb0, 0x90, 0xbb, 0x99, 0xba, 0x70,
0x91, 0xbc, 0xf7, 0x5a, 0x03, 0xd5, 0x73, 0x77, 0xbb, 0x23, 0x0d, 0xaa, 0xbf, 0xf6, 0xde, 0x6d,
0xaa, 0x42, 0xde, 0xee, 0xb4, 0x86, 0x42, 0x69, 0xbb, 0xdb, 0xdd, 0xc1, 0x25, 0x5f, 0xcd, 0x33,
0x1d, 0xe4, 0x2b, 0x70, 0x09, 0x79, 0xe5, 0xa0, 0x0b, 0x20, 0x8f, 0xa3, 0x5c, 0xf0, 0x6c, 0x31,
0x9c, 0xf0, 0x2b, 0x79, 0xfd, 0x66, 0xae, 0x72, 0x00, 0xf4, 0x6b, 0x04, 0x51, 0x00, 0xb1, 0x93,
0x0d, 0x29, 0x7d, 0x4d, 0x97, 0x13, 0x52, 0x35, 0xa2, 0x45, 0xca, 0x24, 0xf5, 0x1a, 0x2f, 0x7b,
0xa5, 0xef, 0x14, 0xd7, 0xed, 0x4d, 0x6d, 0xde, 0x2b, 0x6e, 0xb4, 0x83, 0xfa, 0xc4, 0x72, 0x14,
0xc5, 0xec, 0xd9, 0xcb, 0x97, 0x31, 0x0f, 0x46, 0xe8, 0xc4, 0x52, 0x58, 0xfa, 0x60, 0x22, 0x4e,
0x2c, 0x08, 0xd1, 0xa5, 0x87, 0xc2, 0x50, 0x0c, 0x0e, 0x19, 0xf9, 0x4e, 0xd3, 0xad, 0x66, 0x26,
0x4a, 0x0f, 0x16, 0x4c, 0xef, 0x7f, 0x0b, 0xe3, 0xf3, 0xb4, 0x0c, 0x7e, 0xb3, 0xe9, 0x55, 0x59,
0x88, 0xfd, 0xaf, 0x49, 0xe8, 0xb2, 0x60, 0xf1, 0xfb, 0x21, 0xbf, 0x4a, 0xca, 0xa0, 0x96, 0x8e,
0x4a, 0x1b, 0x51, 0x16, 0xc4, 0x0c, 0x04, 0xfe, 0xd8, 0xfb, 0xff, 0x32, 0x70, 0xc6, 0x53, 0x7f,
0xd5, 0xe2, 0x90, 0xd5, 0x6e, 0x00, 0x6e, 0x90, 0x76, 0x7d, 0x60, 0x7a, 0x1a, 0xcc, 0xa3, 0xb1,
0x9a, 0xd3, 0xaa, 0x31, 0x82, 0x0f, 0x4c, 0x9a, 0xe9, 0xd7, 0x20, 0xe2, 0xc0, 0x44, 0xc2, 0xa0,
0xf9, 0xb7, 0x9e, 0x77, 0x53, 0x33, 0x8f, 0x64, 0xb9, 0xe9, 0x38, 0x79, 0xc9, 0x8b, 0xd3, 0x63,
0x71, 0xa2, 0xcb, 0xfd, 0xef, 0x52, 0x21, 0xed, 0xbc, 0x6a, 0xca, 0xf7, 0x96, 0xf6, 0x83, 0x56,
0xfd, 0xca, 0x7b, 0x57, 0x9e, 0xc0, 0xab, 0xf5, 0xe5, 0x28, 0xe3, 0xd3, 0xca, 0xc3, 0x37, 0x27,
0x6e, 0x75, 0x50, 0xc7, 0x9c, 0x6a, 0xc4, 0x4e, 0x67, 0xbe, 0xb6, 0x73, 0xa3, 0xd4, 0xcb, 0xa2,
0xde, 0x83, 0x6e, 0x11, 0x8d, 0xea, 0xde, 0xde, 0x52, 0x3e, 0xfa, 0x06, 0x4b, 0x35, 0x24, 0xe6,
0x09, 0xbe, 0x1d, 0xd3, 0x51, 0x0a, 0x23, 0x71, 0x83, 0xd5, 0x80, 0xf4, 0x2c, 0x24, 0x4d, 0xd5,
0xb9, 0x6a, 0x10, 0xc7, 0x68, 0x16, 0x52, 0xae, 0x0a, 0x20, 0x66, 0x21, 0x2b, 0x08, 0x3a, 0x67,
0xde, 0x1b, 0xc5, 0xcb, 0x3d, 0xcd, 0xd8, 0x3c, 0x62, 0xf8, 0x9e, 0xa5, 0x66, 0x21, 0x86, 0xb3,
0x49, 0xe8, 0x3d, 0xc6, 0xf3, 0x24, 0x4f, 0xe3, 0x20, 0x9f, 0x40, 0x9d, 0xdf, 0xec, 0xb3, 0x34,
0xe2, 0x4a, 0xff, 0x9d, 0x16, 0x4a, 0xef, 0x93, 0xa4, 0x4d, 0xcd, 0x18, 0x6b, 0x76, 0xd7, 0xc6,
0xac, 0xb1, 0xde, 0xca, 0xe9, 0xd9, 0x79, 0x3f, 0xe6, 0xe1, 0x25, 0x4c, 0x73, 0x66, 0xaf, 0x4b,
0x0b, 0x9e, 0xe7, 0x6e, 0xb9, 0x10, 0x3d, 0xd1, 0x95, 0x86, 0x33, 0x96, 0xc6, 0x41, 0x88, 0x6f,
0xa0, 0x2a, 0x1f, 0xb0, 0x11, 0x13, 0x1d, 0x66, 0x50, 0x73, 0x61, 0xdb, 0x68, 0x6b, 0x2e, 0xda,
0x31, 0xde, 0x72, 0x21, 0x7a, 0xaa, 0x2f, 0x0d, 0xc3, 0x34, 0x8e, 0x04, 0xca, 0x8d, 0xca, 0xa3,
0xb4, 0x10, 0xb9, 0x61, 0x12, 0x28, 0xe4, 0x09, 0xcb, 0xc6, 0xcc, 0x1a, 0xb2, 0xb4, 0x38, 0x43,
0x4a, 0x02, 0x42, 0x3e, 0xf5, 0xbe, 0x54, 0xf5, 0x9d, 0xa7, 0x0b, 0xff, 0x86, 0xad, 0x5b, 0x3c,
0x5d, 0xa8, 0x80, 0x37, 0x69, 0x00, 0x35, 0xf1, 0x34, 0xc8, 0x85, 0xbd, 0x89, 0xa5, 0xc5, 0xd9,
0x44, 0x49, 0xe8, 0x75, 0xa8, 0x6a, 0xe2, 0x4c, 0xa0, 0x75, 0x08, 0x1a, 0x50, 0xbb, 0x02, 0xb8,
0x41, 0xda, 0xf5, 0xf0, 0xaa, 0xde, 0x0a, 0x13, 0x47, 0x11, 0x8b, 0x47, 0x39, 0x1a, 0x5e, 0xf0,
0xdc, 0xa5, 0x95, 0x18, 0x5e, 0x4d, 0x0a, 0xa5, 0x12, 0x94, 0x85, 0x6c, 0xbd, 0x43, 0x15, 0xa1,
0x5b, 0x2e, 0x44, 0xef, 0x4b, 0x4a, 0x43, 0xad, 0xca, 0x6e, 0x6b, 0x8f, 0xa5, 0xc8, 0xbe, 0xd6,
0x86, 0x81, 0xc2, 0x9f, 0x7b, 0xde, 0xfb, 0x4a, 0xe2, 0x84, 0xcf, 0xd9, 0x39, 0x7f, 0x78, 0x1d,
0xe5, 0x22, 0x4a, 0xc6, 0xb0, 0x34, 0xed, 0x11, 0x91, 0x6c, 0xb0, 0x92, 0xff, 0xce, 0x72, 0x4e,
0x7a, 0x85, 0x44, 0x6d, 0x79, 0xca, 0xae, 0xac, 0x2b, 0x24, 0x8e, 0xa8, 0x38, 0x62, 0x85, 0x74,
0xf1, 0xba, 0xb6, 0xa2, 0xc4, 0xe1, 0x1b, 0xa8, 0x73, 0x2e, 0x37, 0x2b, 0x54, 0x34, 0x0c, 0x12,
0xe7, 0x02, 0xa7, 0x83, 0xde, 0xac, 0x2b, 0x7d, 0x9d, 0xa4, 0x1b, 0x44, 0x9c, 0x66, 0xa2, 0x6e,
0x76, 0x20, 0x2d, 0x52, 0xfa, 0xaa, 0x88, 0x92, 0x6a, 0xde, 0x14, 0x6d, 0x76, 0x20, 0x6b, 0x75,
0x9a, 0x7a, 0xb7, 0xf6, 0x83, 0xf0, 0x72, 0x9c, 0xf1, 0x59, 0x32, 0x3a, 0xe0, 0x31, 0xcf, 0x50,
0x9d, 0xc6, 0x68, 0x35, 0x42, 0x89, 0x3a, 0x4d, 0x8b, 0x8b, 0xde, 0x18, 0xd4, 0x5b, 0x31, 0x88,
0xa3, 0x31, 0x3e, 0x9e, 0x18, 0x81, 0x4a, 0x80, 0xd8, 0x18, 0x58, 0x41, 0x4b, 0x12, 0x55, 0xc7,
0x17, 0x11, 0x85, 0x41, 0x5c, 0xe9, 0xed, 0xd0, 0x61, 0x0c, 0xb0, 0x35, 0x89, 0x2c, 0x0e, 0x96,
0x7e, 0x9e, 0xcf, 0xb2, 0xe4, 0x38, 0x11, 0x9c, 0xec, 0xa7, 0x04, 0x5a, 0xfb, 0x59, 0x03, 0xf5,
0x6e, 0xa2, 0x34, 0x9f, 0xb3, 0xeb, 0xa2, 0x35, 0xc5, 0x7f, 0x7c, 0xcb, 0x94, 0x53, 0xfc, 0xde,
0x07, 0x3b, 0xb1, 0x9b, 0xb0, 0x71, 0xa8, 0x33, 0x20, 0x52, 0x25, 0x8c, 0xc3, 0xdb, 0x4c, 0x93,
0x8d, 0x76, 0xd0, 0xae, 0x33, 0x14, 0x8b, 0x98, 0xb9, 0x74, 0x4a, 0xa0, 0x8b, 0x8e, 0x04, 0x75,
0x69, 0xdf, 0xe8, 0xcf, 0x84, 0x85, 0x97, 0x8d, 0x0b, 0x61, 0xb3, 0xa1, 0x15, 0x42, 0x94, 0xf6,
0x09, 0xd4, 0xfe, 0x8a, 0x8e, 0x43, 0x9e, 0xb8, 0x5e, 0x51, 0x61, 0xef, 0xf2, 0x8a, 0x80, 0xd3,
0xa7, 0x3b, 0x65, 0x85, 0xcc, 0xac, 0x5e, 0xd3, 0x16, 0x11, 0xa1, 0x0e, 0x11, 0xa7, 0x3b, 0x12,
0xd6, 0x55, 0x77, 0xac, 0x79, 0xd2, 0xfc, 0x6e, 0xa8, 0x11, 0xe5, 0x84, 0xfe, 0x6e, 0x88, 0x62,
0xe9, 0x4e, 0x56, 0x39, 0xd2, 0x12, 0xc5, 0xcc, 0x93, 0x7b, 0xdd, 0x60, 0x5d, 0x58, 0x36, 0x34,
0x0f, 0x62, 0x16, 0x64, 0x95, 0xea, 0xb6, 0x23, 0x90, 0xc6, 0x88, 0x9a, 0xa0, 0x03, 0x47, 0x53,
0x98, 0xa1, 0x7c, 0xc0, 0x13, 0xc1, 0x12, 0x61, 0x9b, 0xc2, 0xcc, 0x60, 0x00, 0xba, 0xa6, 0x30,
0xca, 0x01, 0xe5, 0xed, 0x51, 0x14, 0xb3, 0x21, 0x13, 0x4f, 0x83, 0x29, 0xb3, 0xe5, 0x6d, 0x59,
0x6a, 0x00, 0xbb, 0x2b, 0x6f, 0x11, 0x87, 0x86, 0xfc, 0xf1, 0x34, 0x18, 0x2b, 0x15, 0x8b, 0x77,
0x69, 0x6f, 0xc8, 0x6c, 0xb4, 0x83, 0x48, 0xe7, 0x93, 0x68, 0xc4, 0xb8, 0x43, 0xa7, 0xb4, 0x77,
0xd1, 0xc1, 0x20, 0xda, 0x39, 0x15, 0xbd, 0xad, 0xce, 0x23, 0x83, 0x64, 0x04, 0xa7, 0xb0, 0x3e,
0xf1, 0x50, 0x10, 0xe7, 0xda, 0x39, 0x11, 0x3c, 0x1a, 0x1f, 0xb2, 0x84, 0xe6, 0x1a, 0x1f, 0xaa,
0x42, 0xd6, 0x65, 0x7c, 0xd8, 0x60, 0xd0, 0xfc, 0x25, 0x8c, 0x8f, 0xc3, 0x40, 0x04, 0xc5, 0x39,
0xfa, 0x93, 0x88, 0x5d, 0xc1, 0x31, 0xce, 0xd2, 0x5f, 0x49, 0xf5, 0x0b, 0x0c, 0x9f, 0xe9, 0x76,
0x3a, 0xf3, 0x0e, 0x6d, 0xd8, 0x9d, 0xb7, 0x6a, 0xa3, 0x6d, 0xfa, 0x4e, 0x67, 0xde, 0xa1, 0x0d,
0xa5, 0xf3, 0x56, 0x6d, 0x54, 0x39, 0xdf, 0xe9, 0xcc, 0x83, 0xf6, 0xef, 0x7a, 0xde, 0x4a, 0x43,
0xbc, 0xd8, 0x03, 0x85, 0x22, 0x9a, 0x33, 0xdb, 0x56, 0xce, 0x8c, 0xa7, 0x50, 0xd7, 0x56, 0x8e,
0x76, 0x81, 0x56, 0xfc, 0xa9, 0xe7, 0xbd, 0x67, 0x6b, 0xc5, 0x29, 0xcf, 0x23, 0x11, 0xf1, 0xc4,
0x76, 0x60, 0x69, 0x04, 0x95, 0xb0, 0xeb, 0xc0, 0xe2, 0x72, 0x82, 0xb6, 0xcc, 0xbc, 0x77, 0x0c,
0xb4, 0xc8, 0x53, 0x3e, 0xcb, 0x42, 0xe6, 0xdf, 0x73, 0xc4, 0x53, 0x14, 0x71, 0x81, 0x42, 0xd3,
0xfa, 0x06, 0xc3, 0x60, 0xea, 0x37, 0x37, 0xae, 0xb7, 0x6a, 0xbd, 0xbc, 0xd9, 0xed, 0xee, 0x00,
0xf2, 0x7f, 0x90, 0x7b, 0x7a, 0xac, 0x0f, 0x89, 0xf8, 0xa0, 0x4b, 0x44, 0x94, 0x8c, 0x7b, 0x4b,
0xf9, 0xb4, 0x35, 0x04, 0x46, 0x63, 0xa7, 0x86, 0xa0, 0x11, 0xb9, 0xb7, 0x94, 0x0f, 0x34, 0xe4,
0xef, 0x3d, 0xef, 0x96, 0xb5, 0x21, 0xe6, 0xa5, 0xf4, 0xf7, 0xbb, 0xc4, 0xb6, 0x5f, 0x4e, 0xff,
0xe0, 0x55, 0x5c, 0xd1, 0x8a, 0xae, 0x1b, 0x17, 0xf2, 0x6c, 0x04, 0xb3, 0xa5, 0x23, 0x5f, 0x2a,
0x0e, 0x4f, 0x97, 0xbb, 0xdd, 0x1d, 0x9c, 0xfa, 0xd6, 0x0b, 0x3f, 0x5b, 0x38, 0xe7, 0x85, 0x9f,
0xd3, 0xc1, 0xa9, 0x0f, 0x39, 0xd2, 0xae, 0x8f, 0x12, 0x64, 0xb7, 0xbb, 0x03, 0xe8, 0xff, 0xa3,
0xe7, 0xdd, 0xb6, 0x70, 0xcd, 0x4f, 0x06, 0x7e, 0xd8, 0x1a, 0xda, 0xf1, 0x01, 0xc1, 0x8f, 0x5e,
0xcd, 0x19, 0xda, 0xf8, 0xcf, 0x9e, 0xb7, 0xde, 0xda, 0x46, 0x78, 0x65, 0x3f, 0x5e, 0x56, 0x09,
0xbd, 0xc1, 0x8f, 0x5e, 0xd9, 0x7f, 0x99, 0xc6, 0xc2, 0xfb, 0x5d, 0xba, 0xb1, 0xe8, 0x75, 0x7f,
0xf4, 0xca, 0xfe, 0xf8, 0x1c, 0x56, 0x0c, 0x4a, 0xeb, 0x07, 0x0a, 0xda, 0xec, 0xfe, 0x40, 0xc1,
0xc6, 0xd9, 0x44, 0x1e, 0x5e, 0xa7, 0x41, 0x32, 0xa2, 0x45, 0x2a, 0x7b, 0xbb, 0x88, 0xe2, 0xf0,
0xf9, 0xb5, 0xb0, 0x9e, 0x71, 0xb9, 0xdf, 0xda, 0xa4, 0xfc, 0x15, 0xe2, 0x3c, 0xbf, 0x36, 0x50,
0x42, 0x0d, 0xde, 0xa7, 0x4b, 0x0d, 0xbd, 0xba, 0xbb, 0x5d, 0x50, 0xb4, 0x92, 0x2b, 0x35, 0x55,
0x16, 0xbb, 0xe7, 0x8a, 0xd2, 0x28, 0x8d, 0x6d, 0x77, 0xa4, 0x09, 0xd9, 0x21, 0x13, 0x8f, 0x59,
0x30, 0x62, 0x99, 0x53, 0x56, 0x51, 0x9d, 0x64, 0xeb, 0xb4, 0x4d, 0xf6, 0x80, 0xc7, 0xb3, 0x69,
0x02, 0x2f, 0x93, 0x94, 0xad, 0x53, 0xed, 0xb2, 0x88, 0xc6, 0x27, 0x77, 0x2d, 0x5b, 0xfe, 0x9d,
0xb0, 0xbb, 0xee, 0x30, 0xc6, 0x5f, 0x0e, 0xdb, 0xea, 0xc4, 0xd2, 0xfd, 0x84, 0x34, 0x6a, 0xe9,
0x27, 0xca, 0xa4, 0xed, 0x8e, 0x34, 0x3e, 0x42, 0xd7, 0x64, 0x55, 0x3e, 0xed, 0xb4, 0xc4, 0x6a,
0xa4, 0xd4, 0x6e, 0x77, 0x07, 0x5c, 0xb0, 0x80, 0xac, 0x2a, 0xf6, 0x05, 0x47, 0x51, 0x1c, 0xfb,
0x5b, 0x8e, 0x34, 0x91, 0x90, 0xb3, 0x60, 0x61, 0x81, 0x89, 0x4c, 0x96, 0x07, 0xfc, 0xc4, 0x6f,
0x8b, 0x53, 0x52, 0x9d, 0x32, 0xb9, 0x4e, 0xa3, 0x83, 0x6f, 0xed, 0x51, 0xab, 0xde, 0xf6, 0xdd,
0x0f, 0xae, 0xd1, 0xe1, 0x9d, 0xce, 0x3c, 0xba, 0x53, 0x2a, 0xa9, 0x21, 0xcf, 0x84, 0xed, 0x4e,
0xa9, 0x0a, 0x31, 0xac, 0x5f, 0xfd, 0xdc, 0x69, 0xa1, 0x1a, 0xc5, 0xe4, 0x04, 0xae, 0x28, 0xf5,
0xb7, 0xef, 0xb6, 0x34, 0x2a, 0xbf, 0x54, 0xc7, 0xa0, 0x2b, 0x8d, 0x28, 0x87, 0xda, 0xe7, 0x7d,
0x8a, 0x93, 0xf5, 0xee, 0x34, 0x65, 0x41, 0x16, 0x24, 0x21, 0xfe, 0xbc, 0x4f, 0x07, 0x6c, 0x90,
0xc4, 0xe7, 0x7d, 0x6e, 0x0f, 0x74, 0x55, 0x61, 0x7e, 0x0d, 0x6d, 0x29, 0x8c, 0xa8, 0xcf, 0x8e,
0xcd, 0x8f, 0xa1, 0x37, 0x3b, 0x90, 0xf8, 0xaa, 0x42, 0x02, 0xaa, 0xe0, 0x51, 0x89, 0xde, 0x77,
0x84, 0x32, 0x51, 0xd7, 0xf9, 0x96, 0x76, 0x41, 0xeb, 0x9e, 0xdc, 0x56, 0x0c, 0x99, 0xf8, 0x98,
0x2d, 0x6c, 0xeb, 0x9e, 0xda, 0xf7, 0x57, 0x88, 0x6b, 0xdd, 0x6b, 0xa2, 0x68, 0xe3, 0x50, 0x3f,
0x42, 0xae, 0x39, 0xfc, 0xeb, 0x3b, 0xce, 0xf5, 0x56, 0x0e, 0xcd, 0xfb, 0x87, 0xd1, 0xdc, 0xa8,
0x0f, 0x59, 0x1a, 0x7a, 0x18, 0xcd, 0xed, 0xe5, 0xa1, 0xad, 0x4e, 0x2c, 0xbe, 0x06, 0x09, 0x04,
0xbb, 0x96, 0xf7, 0x13, 0x96, 0xe6, 0x96, 0xf6, 0xc6, 0x05, 0xc5, 0x46, 0x3b, 0xa8, 0xbf, 0x65,
0x39, 0xcd, 0x78, 0xc8, 0xf2, 0xfc, 0xa0, 0x48, 0xdb, 0x18, 0x7d, 0xcb, 0x02, 0xb6, 0x7e, 0x65,
0x24, 0xbe, 0x65, 0x69, 0x40, 0x10, 0xfb, 0xb1, 0xf7, 0xfa, 0x13, 0x3e, 0x1e, 0xb2, 0x64, 0xe4,
0xbf, 0x6f, 0x7e, 0x3d, 0xc2, 0xc7, 0xfd, 0xe2, 0x67, 0x15, 0x6f, 0x95, 0x32, 0xeb, 0xab, 0xfe,
0x43, 0x76, 0x31, 0x1b, 0x0f, 0x17, 0x49, 0x88, 0xae, 0xfa, 0xcb, 0xdf, 0xfb, 0x85, 0x81, 0xb8,
0xea, 0x37, 0x00, 0x7d, 0xd7, 0x5d, 0xfe, 0x7c, 0x3e, 0xc9, 0x58, 0xe3, 0x2b, 0x8f, 0xca, 0xa1,
0x32, 0x11, 0x77, 0xdd, 0x08, 0x41, 0xad, 0x3c, 0xcf, 0x18, 0xb3, 0xb6, 0xb2, 0x30, 0x38, 0x5b,
0x09, 0x80, 0x5e, 0x04, 0xcb, 0x9f, 0xab, 0x3b, 0xf5, 0x27, 0x3c, 0x0c, 0xe2, 0x5c, 0xf0, 0x0c,
0x57, 0x25, 0x2b, 0x57, 0x0c, 0x11, 0x8b, 0x20, 0x09, 0xa3, 0x3e, 0x9c, 0x46, 0xc9, 0xd8, 0xda,
0x87, 0xc2, 0xe0, 0xec, 0x03, 0x00, 0x7a, 0xe0, 0x9c, 0x30, 0x91, 0x45, 0x61, 0x3e, 0x64, 0xe2,
0x34, 0xc8, 0x82, 0x29, 0x13, 0x2c, 0xc3, 0x7f, 0xf3, 0x07, 0x90, 0xbe, 0xc1, 0x10, 0x03, 0x87,
0x62, 0x41, 0x70, 0xd7, 0x7b, 0xb3, 0x18, 0x51, 0x2c, 0x79, 0x58, 0xfe, 0x03, 0x32, 0xfe, 0xdb,
0xca, 0xf9, 0xe1, 0x34, 0x15, 0x8b, 0x95, 0xda, 0x9f, 0x0b, 0x60, 0xb7, 0xb7, 0xff, 0xc1, 0xbf,
0x3e, 0x5f, 0xed, 0x7d, 0xf6, 0xf9, 0x6a, 0xef, 0xbf, 0x9f, 0xaf, 0xf6, 0xfe, 0xfa, 0xc5, 0xea,
0x6b, 0x9f, 0x7d, 0xb1, 0xfa, 0xda, 0xbf, 0xbf, 0x58, 0x7d, 0xed, 0xd3, 0xd7, 0xe1, 0x1f, 0xb0,
0xb9, 0xf8, 0xbf, 0xf2, 0x9f, 0xa1, 0xd9, 0xfb, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x86, 0x03,
0xd1, 0x93, 0xe4, 0x46, 0x00, 0x00,
// 3263 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x9c, 0x5b, 0x6f, 0x1c, 0x49,
0xf5, 0xc0, 0x77, 0x5e, 0xfe, 0xfb, 0xa7, 0xf7, 0x02, 0x34, 0xb0, 0x2c, 0x61, 0xd7, 0xc9, 0x66,
0x13, 0x5f, 0xe2, 0x78, 0xec, 0x24, 0xb0, 0x88, 0x8b, 0x58, 0x8d, 0xed, 0xd8, 0xb1, 0x36, 0x4e,
0x8c, 0xc7, 0xd9, 0x48, 0x2b, 0x21, 0xd1, 0xee, 0xa9, 0xcc, 0x34, 0xee, 0xe9, 0x6a, 0xba, 0x6b,
0xc6, 0x1e, 0x10, 0x48, 0x88, 0x15, 0x08, 0x84, 0xc4, 0x4a, 0x3c, 0xf2, 0xc4, 0x2b, 0x9f, 0x84,
0xc7, 0x7d, 0xe4, 0x11, 0xed, 0x7e, 0x11, 0xd4, 0xdd, 0xa7, 0xaa, 0xba, 0x4e, 0xd7, 0xa9, 0xee,
0xc9, 0x13, 0xec, 0x9c, 0xdf, 0xb9, 0x54, 0xd7, 0xa9, 0xdb, 0xa9, 0x72, 0xbc, 0xeb, 0xe9, 0xf9,
0x76, 0x9a, 0x71, 0xc1, 0xf3, 0xed, 0x9c, 0x65, 0xf3, 0x28, 0x64, 0xf2, 0x7f, 0xfb, 0xe5, 0xcf,
0xfe, 0xab, 0x41, 0xb2, 0x10, 0x8b, 0x94, 0x5d, 0x7b, 0x5b, 0x93, 0x21, 0x9f, 0x4e, 0x83, 0x64,
0x94, 0x57, 0xc8, 0xb5, 0xb7, 0xb4, 0x84, 0xcd, 0x59, 0x22, 0xe0, 0xf7, 0xfb, 0x9f, 0x7e, 0xd6,
0xf3, 0xde, 0xdc, 0x8b, 0x23, 0x96, 0x88, 0x3d, 0xd0, 0xf0, 0x3f, 0xf1, 0xde, 0x18, 0xa4, 0xe9,
0x21, 0x13, 0x1f, 0xb3, 0x2c, 0x8f, 0x78, 0xe2, 0xbf, 0xdf, 0x07, 0x07, 0xfd, 0xd3, 0x34, 0xec,
0x0f, 0xd2, 0xb4, 0xaf, 0x85, 0xfd, 0x53, 0xf6, 0xab, 0x19, 0xcb, 0xc5, 0xb5, 0x5b, 0x6e, 0x28,
0x4f, 0x79, 0x92, 0x33, 0xff, 0x85, 0xf7, 0xf5, 0x41, 0x9a, 0x0e, 0x99, 0xd8, 0x67, 0x45, 0x03,
0x86, 0x22, 0x10, 0xcc, 0x5f, 0x6b, 0xa8, 0x9a, 0x80, 0xf2, 0xb1, 0xde, 0x0e, 0x82, 0x9f, 0x33,
0xef, 0xb5, 0xc2, 0xcf, 0x64, 0x26, 0x46, 0xfc, 0x32, 0xf1, 0xdf, 0x6b, 0x2a, 0x82, 0x48, 0xd9,
0xbe, 0xe9, 0x42, 0xc0, 0xea, 0x73, 0xef, 0xf5, 0xe7, 0x41, 0x1c, 0x33, 0xb1, 0x97, 0xb1, 0x22,
0x70, 0x53, 0xa7, 0x12, 0xf5, 0x2b, 0x99, 0xb2, 0xfb, 0xbe, 0x93, 0x01, 0xc3, 0x9f, 0x78, 0x6f,
0x54, 0x92, 0x53, 0x16, 0xf2, 0x39, 0xcb, 0x7c, 0xab, 0x16, 0x08, 0x89, 0x4f, 0xde, 0x80, 0xb0,
0xed, 0x3d, 0x9e, 0xcc, 0x59, 0x26, 0xec, 0xb6, 0x41, 0xe8, 0xb6, 0xad, 0x21, 0xb0, 0xfd, 0x0b,
0xef, 0xab, 0xcf, 0x79, 0x76, 0x91, 0xa7, 0x41, 0xc8, 0xe0, 0x9b, 0xdc, 0x36, 0x15, 0xa5, 0x14,
0x7f, 0x96, 0xd5, 0x36, 0xcc, 0xe2, 0x61, 0xc8, 0x62, 0x16, 0x0a, 0xd2, 0x43, 0x25, 0x6e, 0xf5,
0xa0, 0x30, 0xf0, 0x10, 0x7b, 0xdf, 0x50, 0xc2, 0x43, 0x26, 0xf6, 0x66, 0x59, 0xc6, 0x12, 0xe1,
0x6f, 0x10, 0xea, 0x1a, 0x51, 0x9e, 0xee, 0x74, 0x41, 0x2d, 0xed, 0x39, 0x64, 0x62, 0x10, 0xc7,
0x64, 0x7b, 0x2a, 0x71, 0x6b, 0x7b, 0x14, 0x06, 0x1e, 0x7e, 0xe7, 0x7d, 0xa7, 0xf6, 0xc5, 0xc4,
0x51, 0xfe, 0x28, 0x1a, 0x4f, 0xe2, 0x68, 0x3c, 0x11, 0x6c, 0xe4, 0x6f, 0x93, 0x1f, 0xc5, 0x04,
0x95, 0xd7, 0x9d, 0xee, 0x0a, 0x96, 0x16, 0x3e, 0xbc, 0x4a, 0x79, 0x46, 0xf7, 0x58, 0x25, 0x6e,
0x6d, 0xa1, 0xc2, 0xc0, 0xc3, 0xcf, 0xbd, 0x37, 0x07, 0x61, 0xc8, 0x67, 0x89, 0x1a, 0x2e, 0x68,
0xf2, 0xa9, 0x84, 0x8d, 0xf1, 0x72, 0xbb, 0x85, 0xd2, 0x03, 0x06, 0x64, 0x90, 0xd2, 0xef, 0x5b,
0xf5, 0x50, 0x42, 0xdf, 0x72, 0x43, 0x0d, 0xdb, 0xfb, 0x2c, 0x66, 0xa4, 0xed, 0x4a, 0xd8, 0x62,
0x5b, 0x41, 0x0d, 0xdb, 0x30, 0x50, 0xec, 0xb6, 0xd1, 0x30, 0xb9, 0xe5, 0x86, 0x6a, 0xf3, 0x29,
0xd8, 0x16, 0x3c, 0xc5, 0xf3, 0xa9, 0x54, 0x12, 0x3c, 0xa5, 0xe6, 0x53, 0x13, 0x69, 0x58, 0x3d,
0xe6, 0x73, 0x46, 0x58, 0x2d, 0x44, 0x2d, 0x56, 0x01, 0xd1, 0x03, 0x5a, 0xf6, 0x1f, 0x4f, 0x5e,
0x44, 0xe3, 0x67, 0xe9, 0xa8, 0xe8, 0xc5, 0x0d, 0x7b, 0x07, 0xd5, 0x10, 0x62, 0x40, 0x13, 0x28,
0x78, 0xfb, 0x99, 0xe7, 0x3d, 0x3d, 0xff, 0x25, 0x0b, 0xc5, 0xd3, 0x94, 0x25, 0xfe, 0x0d, 0x43,
0xb3, 0x12, 0xf4, 0x0b, 0x89, 0xb2, 0xfd, 0x9e, 0x83, 0xd0, 0x9f, 0xa5, 0xfa, 0x7d, 0x2f, 0xe6,
0x39, 0xfe, 0x2c, 0xa0, 0x51, 0x8a, 0x88, 0xcf, 0x82, 0x10, 0x1c, 0xe8, 0x70, 0xc2, 0x2f, 0xed,
0x81, 0x16, 0x12, 0x77, 0xa0, 0x40, 0xe8, 0xf5, 0x10, 0x02, 0xb5, 0xad, 0x87, 0x32, 0x0c, 0xd7,
0x7a, 0x88, 0x19, 0x30, 0xcc, 0xbd, 0x6f, 0xd6, 0x0d, 0xef, 0x72, 0x7e, 0x31, 0x0d, 0xb2, 0x0b,
0xff, 0x0e, 0xad, 0x2c, 0x19, 0xe5, 0x68, 0xb3, 0x13, 0xab, 0x27, 0xad, 0xba, 0xc3, 0x21, 0xc3,
0x93, 0x96, 0xa1, 0x3f, 0x64, 0xd4, 0xa4, 0x65, 0xc1, 0x70, 0xa7, 0x1e, 0x66, 0x41, 0x3a, 0xb1,
0x77, 0x6a, 0x29, 0x72, 0x77, 0xaa, 0x44, 0x70, 0x0f, 0x0c, 0x59, 0x90, 0x85, 0x13, 0x7b, 0x0f,
0x54, 0x32, 0x77, 0x0f, 0x28, 0x06, 0x0c, 0x67, 0xde, 0xb7, 0xea, 0x86, 0x87, 0xb3, 0xf3, 0x3c,
0xcc, 0xa2, 0x73, 0xe6, 0x6f, 0xd2, 0xda, 0x0a, 0x52, 0xae, 0xee, 0x76, 0x83, 0xc1, 0xe7, 0x9f,
0x7a, 0xde, 0x3b, 0x15, 0x73, 0xca, 0xe2, 0x40, 0x44, 0x3c, 0xa9, 0xd0, 0xfd, 0x28, 0x17, 0x51,
0x12, 0x0a, 0xff, 0xbe, 0xcd, 0x9c, 0x9d, 0x55, 0x21, 0x3c, 0x58, 0x4a, 0x07, 0x22, 0x89, 0x3c,
0x1f, 0x5a, 0x2f, 0xa3, 0x3c, 0x1a, 0xe5, 0xfe, 0xba, 0xb5, 0x35, 0x35, 0x42, 0x39, 0xdd, 0xe8,
0x40, 0x82, 0xab, 0x2b, 0xef, 0xdb, 0xf5, 0x0f, 0xfd, 0x2c, 0xc9, 0xd5, 0xa7, 0xde, 0xa2, 0xbf,
0x5e, 0x0d, 0x53, 0x4e, 0xfb, 0x5d, 0x71, 0xf0, 0x1c, 0x7a, 0x5f, 0x93, 0x9e, 0xc5, 0x3e, 0x13,
0x41, 0x14, 0xe7, 0xfe, 0xaa, 0xdd, 0x86, 0x94, 0x2b, 0x5f, 0x6b, 0xad, 0x1c, 0x1e, 0x58, 0xfb,
0xb3, 0x34, 0x8e, 0xc2, 0xe6, 0x0e, 0x11, 0x74, 0x95, 0xd8, 0x3d, 0xb0, 0xea, 0x98, 0x9e, 0xee,
0x55, 0x33, 0xaa, 0xff, 0x73, 0xb6, 0x48, 0xf1, 0x74, 0xaf, 0x23, 0xd4, 0x08, 0x31, 0xdd, 0x13,
0x28, 0x6e, 0xcf, 0x90, 0x89, 0xc7, 0xc1, 0x82, 0xcf, 0x88, 0x89, 0x42, 0x89, 0xdd, 0xed, 0xa9,
0x63, 0x96, 0xf6, 0x1c, 0xe5, 0x07, 0xc1, 0x9c, 0x67, 0x91, 0xa0, 0xdb, 0xa3, 0x91, 0xd6, 0xf6,
0x18, 0xa8, 0xd5, 0xdb, 0x20, 0x0b, 0x27, 0xd1, 0x9c, 0x8d, 0x1c, 0xde, 0x24, 0xd2, 0xc1, 0x5b,
0x0d, 0xc5, 0xde, 0x1e, 0x47, 0x79, 0x2d, 0x23, 0xac, 0xde, 0x0c, 0xc4, 0xed, 0x0d, 0xa3, 0x38,
0xc1, 0x4b, 0x79, 0xb5, 0xdf, 0x5a, 0x25, 0xf5, 0xcd, 0x2d, 0xd7, 0x5a, 0x2b, 0x87, 0xc7, 0x6f,
0x21, 0x34, 0x3f, 0xe2, 0x16, 0x65, 0xc3, 0xfe, 0x21, 0xfb, 0x5d, 0x71, 0xd2, 0xb3, 0x4a, 0x16,
0xb7, 0xe7, 0x46, 0xc2, 0xf4, 0xbb, 0xe2, 0xb8, 0x1b, 0x07, 0x69, 0x1a, 0x2f, 0xce, 0xd8, 0x34,
0x8d, 0xc9, 0x6e, 0x34, 0x10, 0x77, 0x37, 0x62, 0x14, 0xaf, 0x9c, 0x67, 0xbc, 0x58, 0x97, 0xad,
0x2b, 0x67, 0x29, 0x72, 0xaf, 0x9c, 0x12, 0xc1, 0x0b, 0xdc, 0x60, 0x34, 0x7a, 0x1e, 0x89, 0x49,
0xf5, 0x1f, 0x47, 0x23, 0xfb, 0x02, 0x87, 0x20, 0xf7, 0x02, 0xd7, 0x84, 0x75, 0xf5, 0x43, 0x6e,
0xc1, 0x82, 0x8c, 0xed, 0x2e, 0x1e, 0x47, 0xc9, 0x85, 0x6f, 0x9f, 0x4a, 0x35, 0x40, 0x54, 0x3f,
0xac, 0x20, 0x6e, 0x5b, 0xb1, 0xaf, 0xdc, 0xcd, 0x58, 0x30, 0x0a, 0xb3, 0xd9, 0xf4, 0x3c, 0xb7,
0xb7, 0x0d, 0x41, 0xee, 0xb6, 0x35, 0x61, 0xbc, 0x65, 0x1b, 0x32, 0x51, 0x77, 0x49, 0x4d, 0x0f,
0x36, 0x8f, 0x9b, 0x9d, 0x58, 0xbc, 0x9f, 0x7d, 0x96, 0x8c, 0xb8, 0x7d, 0x3f, 0x5b, 0x48, 0xdc,
0xfb, 0x59, 0x20, 0xb0, 0xc9, 0x53, 0x46, 0x99, 0x2c, 0x24, 0x6e, 0x93, 0x40, 0xe0, 0xcf, 0x72,
0x34, 0x2d, 0x0e, 0xb1, 0xc7, 0x41, 0x76, 0x51, 0x56, 0xa4, 0xac, 0x9f, 0xc5, 0x64, 0xdc, 0x9f,
0xa5, 0xc1, 0xda, 0x26, 0x3d, 0x38, 0x7f, 0x93, 0x93, 0x1e, 0x3a, 0x80, 0xaf, 0xb5, 0x72, 0x78,
0x02, 0x90, 0x3b, 0xe9, 0x03, 0x26, 0xc2, 0x89, 0x7d, 0x02, 0x30, 0x10, 0xf7, 0x04, 0x80, 0x51,
0xdc, 0xa4, 0x33, 0xae, 0x4e, 0x02, 0xab, 0xf6, 0x21, 0xde, 0x38, 0x05, 0xac, 0xb5, 0x72, 0x78,
0x6c, 0xca, 0xbd, 0xe1, 0x60, 0x34, 0xb2, 0x8e, 0x4d, 0x29, 0x2f, 0x86, 0xb9, 0x73, 0x6c, 0x22,
0x10, 0x27, 0x84, 0x14, 0xc3, 0xf1, 0xf4, 0x8e, 0xcb, 0x02, 0x3a, 0x9f, 0x6e, 0x76, 0x62, 0x29,
0x87, 0xb0, 0x12, 0x3a, 0x1d, 0xa2, 0xd5, 0x70, 0xb3, 0x13, 0xab, 0x0b, 0x50, 0x8d, 0x2f, 0x79,
0xc0, 0x02, 0x31, 0xcb, 0x1a, 0x05, 0xa8, 0xe6, 0x87, 0x92, 0x20, 0x51, 0x80, 0x72, 0x2a, 0x90,
0xc7, 0x88, 0x53, 0x36, 0xe5, 0x73, 0xa6, 0x62, 0xb8, 0xef, 0x32, 0x69, 0xb2, 0xce, 0x63, 0x04,
0xad, 0x03, 0x91, 0x7c, 0xda, 0xf3, 0xbe, 0x6b, 0xa2, 0xc5, 0x60, 0x1a, 0xcc, 0x83, 0x28, 0x0e,
0xce, 0x63, 0xe6, 0xdf, 0x73, 0x19, 0x35, 0x50, 0x15, 0xc7, 0xfd, 0x65, 0x54, 0xf0, 0x46, 0x41,
0x82, 0x4f, 0x53, 0x99, 0xe0, 0x5b, 0x0e, 0x73, 0x15, 0x65, 0xa4, 0x79, 0xbf, 0x2b, 0x0e, 0x9e,
0x7f, 0xdf, 0xf3, 0xae, 0xd9, 0x28, 0xc8, 0xf9, 0x9d, 0x76, 0x73, 0x28, 0xf3, 0xef, 0x2d, 0xa1,
0xd1, 0x12, 0x03, 0x0c, 0x83, 0x0e, 0x31, 0xa0, 0xc1, 0x70, 0x6f, 0x09, 0x8d, 0xc6, 0x0c, 0xb6,
0x48, 0x65, 0xa1, 0xdc, 0x36, 0x83, 0x95, 0x67, 0x0d, 0x54, 0x30, 0x59, 0x6b, 0xe5, 0x74, 0x59,
0x54, 0x4b, 0x8b, 0x54, 0x40, 0x65, 0xd1, 0x9a, 0x6a, 0x21, 0x25, 0xca, 0xa2, 0x4d, 0x0a, 0xcc,
0x5f, 0x7a, 0x6f, 0x69, 0x59, 0x3d, 0x9f, 0xad, 0x49, 0x04, 0xa7, 0xa6, 0x5a, 0x62, 0x3a, 0x93,
0xc8, 0x8a, 0x83, 0x63, 0x21, 0x77, 0x33, 0x75, 0xc7, 0x45, 0xf2, 0xde, 0x6d, 0x35, 0x54, 0xcf,
0xdd, 0xad, 0x8e, 0x34, 0x78, 0xfd, 0xad, 0xf7, 0x76, 0xd3, 0x2b, 0xe4, 0xed, 0x76, 0xab, 0x29,
0x94, 0xb6, 0x3b, 0xdd, 0x15, 0x5c, 0xee, 0xab, 0x79, 0xa6, 0x83, 0xfb, 0x0a, 0x5c, 0xc2, 0xbd,
0x52, 0xd0, 0x05, 0x90, 0x47, 0x51, 0x2e, 0x78, 0xb6, 0x18, 0x4e, 0xf8, 0xa5, 0xbc, 0x08, 0x34,
0x57, 0x39, 0x00, 0xfa, 0x35, 0x82, 0x28, 0x80, 0xd8, 0xc9, 0x86, 0x2b, 0x7d, 0x61, 0x98, 0x13,
0xae, 0x6a, 0x44, 0x8b, 0x2b, 0x93, 0xd4, 0x6b, 0xbc, 0x6c, 0x95, 0xbe, 0xdd, 0x5c, 0xb3, 0x87,
0xda, 0xbc, 0xe1, 0x5c, 0x6f, 0x07, 0xf5, 0x89, 0xe5, 0x20, 0x8a, 0xd9, 0xd3, 0x17, 0x2f, 0x62,
0x1e, 0x8c, 0xd0, 0x89, 0xa5, 0x90, 0xf4, 0x41, 0x44, 0x9c, 0x58, 0x10, 0xa2, 0x4b, 0x0f, 0x85,
0xa0, 0x18, 0x1c, 0xd2, 0xf2, 0xed, 0xa6, 0x5a, 0x4d, 0x4c, 0x94, 0x1e, 0x2c, 0x98, 0xde, 0xff,
0x16, 0xc2, 0x67, 0x69, 0x69, 0xfc, 0x46, 0x53, 0xab, 0x92, 0x10, 0xfb, 0x5f, 0x93, 0xd0, 0x05,
0xca, 0xe2, 0xf7, 0x7d, 0x7e, 0x99, 0x94, 0x46, 0x2d, 0x0d, 0x95, 0x32, 0xa2, 0x40, 0x89, 0x19,
0x30, 0xfc, 0x91, 0xf7, 0xff, 0xa5, 0xe1, 0x8c, 0xa7, 0xfe, 0x8a, 0x45, 0x21, 0xab, 0xdd, 0x45,
0x5c, 0x27, 0xe5, 0xfa, 0xc0, 0xf4, 0x24, 0x98, 0x47, 0x63, 0x35, 0xa7, 0x55, 0x63, 0x04, 0x1f,
0x98, 0x34, 0xd3, 0xaf, 0x41, 0xc4, 0x81, 0x89, 0x84, 0xc1, 0xe7, 0xdf, 0x7b, 0xde, 0x0d, 0xcd,
0x1c, 0xca, 0x72, 0xd3, 0x51, 0xf2, 0x82, 0x17, 0xa7, 0xc7, 0xe2, 0x44, 0x97, 0xfb, 0x1f, 0x50,
0x26, 0xed, 0xbc, 0x0a, 0xe5, 0x07, 0x4b, 0xeb, 0x41, 0x54, 0xbf, 0xf1, 0xde, 0x96, 0x27, 0xf0,
0x6a, 0x7d, 0x39, 0xc8, 0xf8, 0xb4, 0xd2, 0xf0, 0xcd, 0x89, 0x5b, 0x1d, 0xd4, 0x31, 0xa7, 0x82,
0xd8, 0xee, 0xcc, 0xd7, 0x76, 0x6e, 0x94, 0xf7, 0xb2, 0xa8, 0x77, 0xbf, 0x9b, 0x45, 0xa3, 0xba,
0xf7, 0x60, 0x29, 0x1d, 0x7d, 0x97, 0xa6, 0x02, 0x89, 0x79, 0x82, 0xef, 0xe9, 0xb4, 0x95, 0x42,
0x48, 0xdc, 0xa5, 0x35, 0x20, 0x3d, 0x0b, 0x49, 0x51, 0x75, 0xae, 0x1a, 0xc4, 0x31, 0x9a, 0x85,
0x94, 0xaa, 0x02, 0x88, 0x59, 0xc8, 0x0a, 0x82, 0x9f, 0x53, 0xef, 0xb5, 0xa2, 0x73, 0x4f, 0x32,
0x36, 0x8f, 0x18, 0xbe, 0xf1, 0xa9, 0x49, 0x88, 0xe1, 0x6c, 0x12, 0x7a, 0x8f, 0xf1, 0x2c, 0xc9,
0xd3, 0x38, 0xc8, 0x27, 0x70, 0xe3, 0x60, 0xb6, 0x59, 0x0a, 0xf1, 0x9d, 0xc3, 0xed, 0x16, 0x4a,
0xef, 0x93, 0xa4, 0x4c, 0xcd, 0x18, 0xab, 0x76, 0xd5, 0xc6, 0xac, 0xb1, 0xd6, 0xca, 0xe9, 0xd9,
0x79, 0x37, 0xe6, 0xe1, 0x05, 0x4c, 0x73, 0x66, 0xab, 0x4b, 0x09, 0x9e, 0xe7, 0x6e, 0xba, 0x10,
0x3d, 0xd1, 0x95, 0x82, 0x53, 0x96, 0xc6, 0x41, 0x88, 0xef, 0xc2, 0x2a, 0x1d, 0x90, 0x11, 0x13,
0x1d, 0x66, 0x50, 0xb8, 0xb0, 0x6d, 0xb4, 0x85, 0x8b, 0x76, 0x8c, 0x37, 0x5d, 0x88, 0x9e, 0xea,
0x4b, 0xc1, 0x30, 0x8d, 0x23, 0x81, 0x72, 0xa3, 0xd2, 0x28, 0x25, 0x44, 0x6e, 0x98, 0x04, 0x32,
0x79, 0xcc, 0xb2, 0x31, 0xb3, 0x9a, 0x2c, 0x25, 0x4e, 0x93, 0x92, 0x00, 0x93, 0x4f, 0xbc, 0xaf,
0x54, 0x6d, 0xe7, 0xe9, 0xc2, 0xbf, 0x6e, 0x6b, 0x16, 0x4f, 0x17, 0xca, 0xe0, 0x0d, 0x1a, 0x40,
0x21, 0x9e, 0x04, 0xb9, 0xb0, 0x87, 0x58, 0x4a, 0x9c, 0x21, 0x4a, 0x42, 0xaf, 0x43, 0x55, 0x88,
0x33, 0x81, 0xd6, 0x21, 0x08, 0xa0, 0x76, 0x05, 0x70, 0x9d, 0x94, 0xeb, 0xe1, 0x55, 0xf5, 0x0a,
0x13, 0x07, 0x11, 0x8b, 0x47, 0x39, 0x1a, 0x5e, 0xf0, 0xdd, 0xa5, 0x94, 0x18, 0x5e, 0x4d, 0x0a,
0xa5, 0x12, 0x94, 0x85, 0x6c, 0xad, 0x43, 0x15, 0xa1, 0x9b, 0x2e, 0x44, 0xef, 0x4b, 0x4a, 0x41,
0xad, 0xca, 0x6e, 0x8b, 0xc7, 0x52, 0x64, 0x5f, 0x6d, 0xc3, 0xc0, 0xc3, 0x5f, 0x7a, 0xde, 0xbb,
0xca, 0xc5, 0x31, 0x9f, 0xb3, 0x33, 0xfe, 0xf0, 0xaa, 0xbc, 0xb4, 0x1b, 0xc3, 0xd2, 0xf4, 0x80,
0xb0, 0x64, 0x83, 0x95, 0xfb, 0xef, 0x2d, 0xa7, 0xa4, 0x57, 0x48, 0x14, 0xcb, 0x13, 0x76, 0x69,
0x5d, 0x21, 0xb1, 0x45, 0xc5, 0x11, 0x2b, 0xa4, 0x8b, 0xd7, 0xb5, 0x15, 0xe5, 0x1c, 0x5e, 0x63,
0x9d, 0x71, 0xb9, 0x59, 0xa1, 0xac, 0x61, 0x90, 0x38, 0x17, 0x38, 0x15, 0xf4, 0x66, 0x5d, 0xf9,
0xd7, 0x49, 0xba, 0x4e, 0xd8, 0x69, 0x26, 0xea, 0x46, 0x07, 0xd2, 0xe2, 0x4a, 0x5f, 0x15, 0x51,
0xae, 0x9a, 0x37, 0x45, 0x1b, 0x1d, 0xc8, 0x5a, 0x9d, 0xa6, 0xde, 0xac, 0xdd, 0x20, 0xbc, 0x18,
0x67, 0x7c, 0x96, 0x8c, 0xf6, 0x78, 0xcc, 0x33, 0x54, 0xa7, 0x31, 0xa2, 0x46, 0x28, 0x51, 0xa7,
0x69, 0x51, 0xd1, 0x1b, 0x83, 0x7a, 0x14, 0x83, 0x38, 0x1a, 0xe3, 0xe3, 0x89, 0x61, 0xa8, 0x04,
0x88, 0x8d, 0x81, 0x15, 0xb4, 0x24, 0x51, 0x75, 0x7c, 0x11, 0x51, 0x18, 0xc4, 0x95, 0xbf, 0x6d,
0xda, 0x8c, 0x01, 0xb6, 0x26, 0x91, 0x45, 0xc1, 0xd2, 0xce, 0xb3, 0x59, 0x96, 0x1c, 0x25, 0x82,
0x93, 0xed, 0x94, 0x40, 0x6b, 0x3b, 0x6b, 0xa0, 0xde, 0x4d, 0x94, 0xe2, 0x33, 0x76, 0x55, 0x44,
0x53, 0xfc, 0x8f, 0x6f, 0x99, 0x72, 0x8a, 0xdf, 0xfb, 0x20, 0x27, 0x76, 0x13, 0x36, 0x0e, 0x35,
0x06, 0x9c, 0x54, 0x09, 0xe3, 0xd0, 0x36, 0xd3, 0x64, 0xbd, 0x1d, 0xb4, 0xfb, 0x19, 0x8a, 0x45,
0xcc, 0x5c, 0x7e, 0x4a, 0xa0, 0x8b, 0x1f, 0x09, 0xea, 0xd2, 0xbe, 0xd1, 0x9e, 0x09, 0x0b, 0x2f,
0x1a, 0x17, 0xc2, 0x66, 0xa0, 0x15, 0x42, 0x94, 0xf6, 0x09, 0xd4, 0xde, 0x45, 0x47, 0x21, 0x4f,
0x5c, 0x5d, 0x54, 0xc8, 0xbb, 0x74, 0x11, 0x70, 0xfa, 0x74, 0xa7, 0xa4, 0x90, 0x99, 0x55, 0x37,
0x6d, 0x12, 0x16, 0xea, 0x10, 0x71, 0xba, 0x23, 0x61, 0x5d, 0x75, 0xc7, 0x3e, 0x8f, 0x9b, 0x2f,
0x98, 0x1a, 0x56, 0x8e, 0xe9, 0x17, 0x4c, 0x14, 0x4b, 0x37, 0xb2, 0xca, 0x91, 0x16, 0x2b, 0x66,
0x9e, 0xdc, 0xed, 0x06, 0xeb, 0xc2, 0xb2, 0xe1, 0x73, 0x2f, 0x66, 0x41, 0x56, 0x79, 0xdd, 0x72,
0x18, 0xd2, 0x18, 0x51, 0x13, 0x74, 0xe0, 0x68, 0x0a, 0x33, 0x3c, 0xef, 0xf1, 0x44, 0xb0, 0x44,
0xd8, 0xa6, 0x30, 0xd3, 0x18, 0x80, 0xae, 0x29, 0x8c, 0x52, 0x40, 0x79, 0x7b, 0x10, 0xc5, 0x6c,
0xc8, 0xc4, 0x93, 0x60, 0xca, 0x6c, 0x79, 0x5b, 0x96, 0x1a, 0x40, 0xee, 0xca, 0x5b, 0xc4, 0xa1,
0x21, 0x7f, 0x34, 0x0d, 0xc6, 0xca, 0x8b, 0x45, 0xbb, 0x94, 0x37, 0xdc, 0xac, 0xb7, 0x83, 0xc8,
0xcf, 0xc7, 0xd1, 0x88, 0x71, 0x87, 0x9f, 0x52, 0xde, 0xc5, 0x0f, 0x06, 0xd1, 0xce, 0xa9, 0x68,
0x6d, 0x75, 0x1e, 0x19, 0x24, 0x23, 0x38, 0x85, 0xf5, 0x89, 0x8f, 0x82, 0x38, 0xd7, 0xce, 0x89,
0xe0, 0xd1, 0xf8, 0x90, 0x25, 0x34, 0xd7, 0xf8, 0x50, 0x15, 0xb2, 0x2e, 0xe3, 0xc3, 0x06, 0x83,
0xcf, 0x5f, 0xc3, 0xf8, 0xd8, 0x0f, 0x44, 0x50, 0x9c, 0xa3, 0x3f, 0x8e, 0xd8, 0x25, 0x1c, 0xe3,
0x2c, 0xed, 0x95, 0x54, 0xbf, 0xc0, 0xf0, 0x99, 0x6e, 0xbb, 0x33, 0xef, 0xf0, 0x0d, 0xbb, 0xf3,
0x56, 0xdf, 0x68, 0x9b, 0xbe, 0xdd, 0x99, 0x77, 0xf8, 0x86, 0xd2, 0x79, 0xab, 0x6f, 0x54, 0x39,
0xdf, 0xee, 0xcc, 0x83, 0xef, 0x3f, 0xf4, 0xbc, 0x6b, 0x0d, 0xe7, 0xc5, 0x1e, 0x28, 0x14, 0xd1,
0x9c, 0xd9, 0xb6, 0x72, 0xa6, 0x3d, 0x85, 0xba, 0xb6, 0x72, 0xb4, 0x0a, 0x44, 0xf1, 0xe7, 0x9e,
0xf7, 0x8e, 0x2d, 0x8a, 0x13, 0x9e, 0x47, 0x22, 0xe2, 0x89, 0xed, 0xc0, 0xd2, 0x30, 0x2a, 0x61,
0xd7, 0x81, 0xc5, 0xa5, 0x04, 0xb1, 0xcc, 0xbc, 0xb7, 0x0c, 0xb4, 0xc8, 0x53, 0x3e, 0xcb, 0x42,
0xe6, 0xdf, 0x75, 0xd8, 0x53, 0x14, 0x71, 0x81, 0x42, 0xd3, 0xfa, 0x06, 0xc3, 0x60, 0xea, 0x37,
0x37, 0xae, 0x5e, 0xb5, 0x5e, 0xde, 0xec, 0x74, 0x57, 0x00, 0xf7, 0x7f, 0x94, 0x7b, 0x7a, 0xec,
0x1f, 0x12, 0xf1, 0x7e, 0x17, 0x8b, 0x28, 0x19, 0x1f, 0x2c, 0xa5, 0xd3, 0x16, 0x08, 0x8c, 0xc6,
0x4e, 0x81, 0xa0, 0x11, 0xf9, 0x60, 0x29, 0x1d, 0x08, 0xe4, 0x1f, 0x3d, 0xef, 0xa6, 0x35, 0x10,
0xf3, 0x52, 0xfa, 0x87, 0x5d, 0x6c, 0xdb, 0x2f, 0xa7, 0x7f, 0xf4, 0x32, 0xaa, 0x10, 0xdd, 0x5f,
0xe5, 0x19, 0x5f, 0x6a, 0x1c, 0x66, 0x7c, 0x96, 0x3e, 0xcd, 0x46, 0x2c, 0x83, 0x1e, 0x73, 0x65,
0xbf, 0x86, 0x71, 0x9f, 0x7d, 0x7f, 0x49, 0x2d, 0x08, 0xe7, 0x6f, 0x3d, 0x6f, 0xc5, 0x80, 0xe1,
0x41, 0x55, 0x2d, 0x1e, 0x97, 0xe5, 0x1a, 0x8d, 0x03, 0xfa, 0x60, 0x59, 0x35, 0xb4, 0xe5, 0xd1,
0xbd, 0x17, 0xf2, 0x6c, 0x04, 0xcb, 0x89, 0x63, 0x40, 0x55, 0x1c, 0x5e, 0x4f, 0x76, 0xba, 0x2b,
0x38, 0xfd, 0x5b, 0x6f, 0x44, 0x6d, 0xe6, 0x9c, 0x37, 0xa2, 0x4e, 0x05, 0xa7, 0x7f, 0x18, 0x44,
0xed, 0xfe, 0xd1, 0x08, 0xda, 0xe9, 0xae, 0x00, 0xfe, 0xff, 0xd9, 0xf3, 0x6e, 0x59, 0xb8, 0xe6,
0x9b, 0x8a, 0x1f, 0xb7, 0x9a, 0x76, 0xbc, 0xb0, 0xf8, 0xc9, 0xcb, 0x29, 0x43, 0x8c, 0xff, 0xea,
0x79, 0x6b, 0xad, 0x31, 0x42, 0x97, 0xfd, 0x74, 0x59, 0x4f, 0xa8, 0x07, 0x3f, 0x7c, 0x69, 0xfd,
0x65, 0x82, 0x85, 0xfe, 0x5d, 0x3a, 0x58, 0xd4, 0xdd, 0x1f, 0xbe, 0xb4, 0x3e, 0x3e, 0xa8, 0x16,
0xb3, 0x96, 0xf5, 0x05, 0x87, 0x16, 0xbb, 0x5f, 0x70, 0xd8, 0x38, 0x9b, 0x93, 0x87, 0x57, 0x69,
0x90, 0x8c, 0x68, 0x27, 0x95, 0xbc, 0xdd, 0x89, 0xe2, 0xf0, 0x01, 0xbf, 0x90, 0x9e, 0x72, 0xb9,
0x21, 0xdd, 0xa0, 0xf4, 0x15, 0xe2, 0x3c, 0xe0, 0x37, 0x50, 0xc2, 0x1b, 0xf4, 0xa7, 0xcb, 0x1b,
0xea, 0xba, 0x3b, 0x5d, 0x50, 0xb4, 0xd5, 0x51, 0xde, 0x54, 0xdd, 0xf0, 0xae, 0xcb, 0x4a, 0xa3,
0x76, 0xb8, 0xd5, 0x91, 0x26, 0xdc, 0x0e, 0x99, 0x78, 0xc4, 0x82, 0x11, 0xcb, 0x9c, 0x6e, 0x15,
0xd5, 0xc9, 0x6d, 0x9d, 0xb6, 0xb9, 0xdd, 0xe3, 0xf1, 0x6c, 0x9a, 0x40, 0x67, 0x92, 0x6e, 0xeb,
0x54, 0xbb, 0x5b, 0x44, 0xe3, 0xd2, 0x86, 0x76, 0x5b, 0xfe, 0xf9, 0xde, 0x1d, 0xb7, 0x19, 0xe3,
0xef, 0xf8, 0x36, 0x3b, 0xb1, 0x74, 0x3b, 0x21, 0x8d, 0x5a, 0xda, 0x89, 0x32, 0x69, 0xab, 0x23,
0x8d, 0x6b, 0x0c, 0x35, 0xb7, 0x2a, 0x9f, 0xb6, 0x5b, 0x6c, 0x35, 0x52, 0x6a, 0xa7, 0xbb, 0x02,
0xae, 0xe8, 0x40, 0x56, 0x15, 0x1b, 0xa7, 0x83, 0x28, 0x8e, 0xfd, 0x4d, 0x47, 0x9a, 0x48, 0xc8,
0x59, 0xd1, 0xb1, 0xc0, 0x44, 0x26, 0xcb, 0x0a, 0x48, 0xe2, 0xb7, 0xd9, 0x29, 0xa9, 0x4e, 0x99,
0x5c, 0xa7, 0x51, 0x65, 0xa0, 0xf6, 0xa9, 0x55, 0x6b, 0xfb, 0xee, 0x0f, 0xd7, 0x68, 0xf0, 0x76,
0x67, 0x1e, 0x5d, 0xba, 0x95, 0xd4, 0x90, 0x67, 0xc2, 0x76, 0xe9, 0x56, 0x99, 0x18, 0xd6, 0xef,
0xc6, 0x6e, 0xb7, 0x50, 0x8d, 0x6a, 0x7b, 0x02, 0x77, 0xb8, 0xfa, 0x8f, 0x03, 0x6c, 0x69, 0x54,
0x3e, 0xe5, 0xc7, 0xa0, 0x2b, 0x8d, 0x28, 0x85, 0xda, 0xfb, 0x47, 0xc5, 0xc9, 0x0b, 0x81, 0x34,
0x65, 0x41, 0x16, 0x24, 0x21, 0x7e, 0xff, 0xa8, 0x0d, 0x36, 0x48, 0xe2, 0xfd, 0xa3, 0x5b, 0x03,
0xdd, 0xe5, 0x98, 0xcf, 0xc5, 0x2d, 0x95, 0x23, 0xf5, 0x2e, 0xdb, 0x7c, 0x2d, 0xbe, 0xd1, 0x81,
0xc4, 0x77, 0x39, 0x12, 0x50, 0x15, 0xa1, 0xca, 0xe9, 0x3d, 0x87, 0x29, 0x13, 0x75, 0x15, 0x00,
0x68, 0x15, 0xb4, 0xee, 0xe9, 0xbf, 0x34, 0x14, 0x1f, 0xb1, 0x85, 0x6d, 0xdd, 0x53, 0x07, 0xa3,
0x0a, 0x71, 0xad, 0x7b, 0x4d, 0x14, 0x6d, 0x1c, 0xea, 0x67, 0xec, 0x55, 0x87, 0x7e, 0x7d, 0xc7,
0xb9, 0xd6, 0xca, 0xa1, 0x79, 0x7f, 0x3f, 0x9a, 0x1b, 0x05, 0x34, 0x4b, 0xa0, 0xfb, 0xd1, 0xdc,
0x5e, 0x3f, 0xdb, 0xec, 0xc4, 0xe2, 0x7b, 0xa2, 0x40, 0xb0, 0x2b, 0x79, 0x81, 0x63, 0x09, 0xb7,
0x94, 0x37, 0x6e, 0x70, 0xd6, 0xdb, 0x41, 0xfd, 0xd8, 0xe7, 0x24, 0xe3, 0x21, 0xcb, 0xf3, 0xbd,
0x22, 0x6d, 0x63, 0xf4, 0xd8, 0x07, 0x64, 0xfd, 0x4a, 0x48, 0x3c, 0xf6, 0x69, 0x40, 0x60, 0xfb,
0x91, 0xf7, 0xea, 0x63, 0x3e, 0x1e, 0xb2, 0x64, 0xe4, 0xbf, 0x6b, 0x3e, 0xaf, 0xe1, 0xe3, 0x7e,
0xf1, 0xb3, 0xb2, 0xb7, 0x42, 0x89, 0xf5, 0x5b, 0x88, 0x7d, 0x76, 0x3e, 0x1b, 0x0f, 0x17, 0x49,
0x88, 0xde, 0x42, 0x94, 0xbf, 0xf7, 0x0b, 0x01, 0xf1, 0x16, 0xc2, 0x00, 0xf4, 0x63, 0x80, 0xf2,
0xe7, 0xb3, 0x49, 0xc6, 0x1a, 0xcf, 0x60, 0x2a, 0x85, 0x4a, 0x44, 0x3c, 0x06, 0x40, 0x08, 0x8a,
0xf2, 0x2c, 0x63, 0xcc, 0x1a, 0x65, 0x21, 0x70, 0x46, 0x09, 0x80, 0x5e, 0x04, 0xcb, 0x9f, 0xab,
0x47, 0x07, 0x8f, 0x79, 0x18, 0xc4, 0xb9, 0xe0, 0x19, 0x2e, 0xdb, 0x56, 0xaa, 0x18, 0x22, 0x16,
0x41, 0x12, 0x46, 0x6d, 0x38, 0x89, 0x92, 0xb1, 0xb5, 0x0d, 0x85, 0xc0, 0xd9, 0x06, 0x00, 0xf4,
0xc0, 0x39, 0x66, 0x22, 0x8b, 0xc2, 0x7c, 0xc8, 0xc4, 0x49, 0x90, 0x05, 0x53, 0x26, 0x58, 0x86,
0xff, 0x34, 0x0a, 0x90, 0xbe, 0xc1, 0x10, 0x03, 0x87, 0x62, 0xc1, 0xe1, 0x8e, 0xf7, 0x7a, 0x31,
0xa2, 0x58, 0xf2, 0xb0, 0xfc, 0xb7, 0x7e, 0xfc, 0x37, 0x95, 0xf2, 0xc3, 0x69, 0x2a, 0x16, 0xd7,
0x6a, 0xff, 0x5d, 0x00, 0x3b, 0xbd, 0xdd, 0xf7, 0xfe, 0xfd, 0xc5, 0x4a, 0xef, 0xf3, 0x2f, 0x56,
0x7a, 0xff, 0xfd, 0x62, 0xa5, 0xf7, 0xd9, 0x97, 0x2b, 0xaf, 0x7c, 0xfe, 0xe5, 0xca, 0x2b, 0xff,
0xf9, 0x72, 0xe5, 0x95, 0x4f, 0x5e, 0x85, 0x7f, 0x6b, 0xe8, 0xfc, 0xff, 0xca, 0x7f, 0x31, 0xe8,
0xc1, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x7d, 0xf5, 0x8e, 0xfa, 0x8f, 0x48, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -279,6 +283,7 @@ type ClientCommandsClient interface {
ObjectGraph(ctx context.Context, in *pb.RpcObjectGraphRequest, opts ...grpc.CallOption) (*pb.RpcObjectGraphResponse, error)
ObjectSearch(ctx context.Context, in *pb.RpcObjectSearchRequest, opts ...grpc.CallOption) (*pb.RpcObjectSearchResponse, error)
ObjectSearchSubscribe(ctx context.Context, in *pb.RpcObjectSearchSubscribeRequest, opts ...grpc.CallOption) (*pb.RpcObjectSearchSubscribeResponse, error)
ObjectRelationSearchDistinct(ctx context.Context, in *pb.RpcObjectRelationSearchDistinctRequest, opts ...grpc.CallOption) (*pb.RpcObjectRelationSearchDistinctResponse, error)
ObjectSubscribeIds(ctx context.Context, in *pb.RpcObjectSubscribeIdsRequest, opts ...grpc.CallOption) (*pb.RpcObjectSubscribeIdsResponse, error)
ObjectSearchUnsubscribe(ctx context.Context, in *pb.RpcObjectSearchUnsubscribeRequest, opts ...grpc.CallOption) (*pb.RpcObjectSearchUnsubscribeResponse, error)
ObjectSetDetails(ctx context.Context, in *pb.RpcObjectSetDetailsRequest, opts ...grpc.CallOption) (*pb.RpcObjectSetDetailsResponse, error)
@ -399,6 +404,8 @@ type ClientCommandsClient interface {
BlockDataviewRelationUpdate(ctx context.Context, in *pb.RpcBlockDataviewRelationUpdateRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewRelationUpdateResponse, error)
BlockDataviewRelationDelete(ctx context.Context, in *pb.RpcBlockDataviewRelationDeleteRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewRelationDeleteResponse, error)
BlockDataviewRelationListAvailable(ctx context.Context, in *pb.RpcBlockDataviewRelationListAvailableRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewRelationListAvailableResponse, error)
BlockDataviewGroupOrderUpdate(ctx context.Context, in *pb.RpcBlockDataviewGroupOrderUpdateRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewGroupOrderUpdateResponse, error)
BlockDataviewObjectOrderUpdate(ctx context.Context, in *pb.RpcBlockDataviewObjectOrderUpdateRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewObjectOrderUpdateResponse, error)
BlockDataviewRecordCreate(ctx context.Context, in *pb.RpcBlockDataviewRecordCreateRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewRecordCreateResponse, error)
BlockDataviewRecordUpdate(ctx context.Context, in *pb.RpcBlockDataviewRecordUpdateRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewRecordUpdateResponse, error)
BlockDataviewRecordDelete(ctx context.Context, in *pb.RpcBlockDataviewRecordDeleteRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewRecordDeleteResponse, error)
@ -703,6 +710,15 @@ func (c *clientCommandsClient) ObjectSearchSubscribe(ctx context.Context, in *pb
return out, nil
}
func (c *clientCommandsClient) ObjectRelationSearchDistinct(ctx context.Context, in *pb.RpcObjectRelationSearchDistinctRequest, opts ...grpc.CallOption) (*pb.RpcObjectRelationSearchDistinctResponse, error) {
out := new(pb.RpcObjectRelationSearchDistinctResponse)
err := c.cc.Invoke(ctx, "/anytype.ClientCommands/ObjectRelationSearchDistinct", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *clientCommandsClient) ObjectSubscribeIds(ctx context.Context, in *pb.RpcObjectSubscribeIdsRequest, opts ...grpc.CallOption) (*pb.RpcObjectSubscribeIdsResponse, error) {
out := new(pb.RpcObjectSubscribeIdsResponse)
err := c.cc.Invoke(ctx, "/anytype.ClientCommands/ObjectSubscribeIds", in, out, opts...)
@ -1612,6 +1628,24 @@ func (c *clientCommandsClient) BlockDataviewRelationListAvailable(ctx context.Co
return out, nil
}
func (c *clientCommandsClient) BlockDataviewGroupOrderUpdate(ctx context.Context, in *pb.RpcBlockDataviewGroupOrderUpdateRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewGroupOrderUpdateResponse, error) {
out := new(pb.RpcBlockDataviewGroupOrderUpdateResponse)
err := c.cc.Invoke(ctx, "/anytype.ClientCommands/BlockDataviewGroupOrderUpdate", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *clientCommandsClient) BlockDataviewObjectOrderUpdate(ctx context.Context, in *pb.RpcBlockDataviewObjectOrderUpdateRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewObjectOrderUpdateResponse, error) {
out := new(pb.RpcBlockDataviewObjectOrderUpdateResponse)
err := c.cc.Invoke(ctx, "/anytype.ClientCommands/BlockDataviewObjectOrderUpdate", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *clientCommandsClient) BlockDataviewRecordCreate(ctx context.Context, in *pb.RpcBlockDataviewRecordCreateRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewRecordCreateResponse, error) {
out := new(pb.RpcBlockDataviewRecordCreateResponse)
err := c.cc.Invoke(ctx, "/anytype.ClientCommands/BlockDataviewRecordCreate", in, out, opts...)
@ -2008,6 +2042,7 @@ type ClientCommandsServer interface {
ObjectGraph(*pb.RpcObjectGraphRequest) *pb.RpcObjectGraphResponse
ObjectSearch(*pb.RpcObjectSearchRequest) *pb.RpcObjectSearchResponse
ObjectSearchSubscribe(*pb.RpcObjectSearchSubscribeRequest) *pb.RpcObjectSearchSubscribeResponse
ObjectRelationSearchDistinct(*pb.RpcObjectRelationSearchDistinctRequest) *pb.RpcObjectRelationSearchDistinctResponse
ObjectSubscribeIds(*pb.RpcObjectSubscribeIdsRequest) *pb.RpcObjectSubscribeIdsResponse
ObjectSearchUnsubscribe(*pb.RpcObjectSearchUnsubscribeRequest) *pb.RpcObjectSearchUnsubscribeResponse
ObjectSetDetails(*pb.RpcObjectSetDetailsRequest) *pb.RpcObjectSetDetailsResponse
@ -2128,6 +2163,8 @@ type ClientCommandsServer interface {
BlockDataviewRelationUpdate(*pb.RpcBlockDataviewRelationUpdateRequest) *pb.RpcBlockDataviewRelationUpdateResponse
BlockDataviewRelationDelete(*pb.RpcBlockDataviewRelationDeleteRequest) *pb.RpcBlockDataviewRelationDeleteResponse
BlockDataviewRelationListAvailable(*pb.RpcBlockDataviewRelationListAvailableRequest) *pb.RpcBlockDataviewRelationListAvailableResponse
BlockDataviewGroupOrderUpdate(*pb.RpcBlockDataviewGroupOrderUpdateRequest) *pb.RpcBlockDataviewGroupOrderUpdateResponse
BlockDataviewObjectOrderUpdate(*pb.RpcBlockDataviewObjectOrderUpdateRequest) *pb.RpcBlockDataviewObjectOrderUpdateResponse
BlockDataviewRecordCreate(*pb.RpcBlockDataviewRecordCreateRequest) *pb.RpcBlockDataviewRecordCreateResponse
BlockDataviewRecordUpdate(*pb.RpcBlockDataviewRecordUpdateRequest) *pb.RpcBlockDataviewRecordUpdateResponse
BlockDataviewRecordDelete(*pb.RpcBlockDataviewRecordDeleteRequest) *pb.RpcBlockDataviewRecordDeleteResponse
@ -2260,6 +2297,9 @@ func (*UnimplementedClientCommandsServer) ObjectSearch(req *pb.RpcObjectSearchRe
func (*UnimplementedClientCommandsServer) ObjectSearchSubscribe(req *pb.RpcObjectSearchSubscribeRequest) *pb.RpcObjectSearchSubscribeResponse {
return nil
}
func (*UnimplementedClientCommandsServer) ObjectRelationSearchDistinct(req *pb.RpcObjectRelationSearchDistinctRequest) *pb.RpcObjectRelationSearchDistinctResponse {
return nil
}
func (*UnimplementedClientCommandsServer) ObjectSubscribeIds(req *pb.RpcObjectSubscribeIdsRequest) *pb.RpcObjectSubscribeIdsResponse {
return nil
}
@ -2563,6 +2603,12 @@ func (*UnimplementedClientCommandsServer) BlockDataviewRelationDelete(req *pb.Rp
func (*UnimplementedClientCommandsServer) BlockDataviewRelationListAvailable(req *pb.RpcBlockDataviewRelationListAvailableRequest) *pb.RpcBlockDataviewRelationListAvailableResponse {
return nil
}
func (*UnimplementedClientCommandsServer) BlockDataviewGroupOrderUpdate(req *pb.RpcBlockDataviewGroupOrderUpdateRequest) *pb.RpcBlockDataviewGroupOrderUpdateResponse {
return nil
}
func (*UnimplementedClientCommandsServer) BlockDataviewObjectOrderUpdate(req *pb.RpcBlockDataviewObjectOrderUpdateRequest) *pb.RpcBlockDataviewObjectOrderUpdateResponse {
return nil
}
func (*UnimplementedClientCommandsServer) BlockDataviewRecordCreate(req *pb.RpcBlockDataviewRecordCreateRequest) *pb.RpcBlockDataviewRecordCreateResponse {
return nil
}
@ -3183,6 +3229,24 @@ func _ClientCommands_ObjectSearchSubscribe_Handler(srv interface{}, ctx context.
return interceptor(ctx, in, info, handler)
}
func _ClientCommands_ObjectRelationSearchDistinct_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(pb.RpcObjectRelationSearchDistinctRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ClientCommandsServer).ObjectRelationSearchDistinct(in), nil
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/anytype.ClientCommands/ObjectRelationSearchDistinct",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ClientCommandsServer).ObjectRelationSearchDistinct(req.(*pb.RpcObjectRelationSearchDistinctRequest)), nil
}
return interceptor(ctx, in, info, handler)
}
func _ClientCommands_ObjectSubscribeIds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(pb.RpcObjectSubscribeIdsRequest)
if err := dec(in); err != nil {
@ -5001,6 +5065,42 @@ func _ClientCommands_BlockDataviewRelationListAvailable_Handler(srv interface{},
return interceptor(ctx, in, info, handler)
}
func _ClientCommands_BlockDataviewGroupOrderUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(pb.RpcBlockDataviewGroupOrderUpdateRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ClientCommandsServer).BlockDataviewGroupOrderUpdate(in), nil
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/anytype.ClientCommands/BlockDataviewGroupOrderUpdate",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ClientCommandsServer).BlockDataviewGroupOrderUpdate(req.(*pb.RpcBlockDataviewGroupOrderUpdateRequest)), nil
}
return interceptor(ctx, in, info, handler)
}
func _ClientCommands_BlockDataviewObjectOrderUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(pb.RpcBlockDataviewObjectOrderUpdateRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ClientCommandsServer).BlockDataviewObjectOrderUpdate(in), nil
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/anytype.ClientCommands/BlockDataviewObjectOrderUpdate",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ClientCommandsServer).BlockDataviewObjectOrderUpdate(req.(*pb.RpcBlockDataviewObjectOrderUpdateRequest)), nil
}
return interceptor(ctx, in, info, handler)
}
func _ClientCommands_BlockDataviewRecordCreate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(pb.RpcBlockDataviewRecordCreateRequest)
if err := dec(in); err != nil {
@ -5787,6 +5887,10 @@ var _ClientCommands_serviceDesc = grpc.ServiceDesc{
MethodName: "ObjectSearchSubscribe",
Handler: _ClientCommands_ObjectSearchSubscribe_Handler,
},
{
MethodName: "ObjectRelationSearchDistinct",
Handler: _ClientCommands_ObjectRelationSearchDistinct_Handler,
},
{
MethodName: "ObjectSubscribeIds",
Handler: _ClientCommands_ObjectSubscribeIds_Handler,
@ -6191,6 +6295,14 @@ var _ClientCommands_serviceDesc = grpc.ServiceDesc{
MethodName: "BlockDataviewRelationListAvailable",
Handler: _ClientCommands_BlockDataviewRelationListAvailable_Handler,
},
{
MethodName: "BlockDataviewGroupOrderUpdate",
Handler: _ClientCommands_BlockDataviewGroupOrderUpdate_Handler,
},
{
MethodName: "BlockDataviewObjectOrderUpdate",
Handler: _ClientCommands_BlockDataviewObjectOrderUpdate_Handler,
},
{
MethodName: "BlockDataviewRecordCreate",
Handler: _ClientCommands_BlockDataviewRecordCreate_Handler,

View file

@ -118,6 +118,24 @@ func MakeFilter(proto *model.BlockContentDataviewFilter) (Filter, error) {
Key: proto.RelationKey,
Value: list,
}}, nil
case model.BlockContentDataviewFilter_ExactIn:
list := proto.Value.GetListValue()
if list == nil {
return nil, ErrValueMustBeList
}
return ExactIn{
Key: proto.RelationKey,
Value: list,
}, nil
case model.BlockContentDataviewFilter_NotExactIn:
list := proto.Value.GetListValue()
if list == nil {
return nil, ErrValueMustBeList
}
return Not{ExactIn{
Key: proto.RelationKey,
Value: list,
}}, nil
default:
return nil, fmt.Errorf("unexpected filter cond: %v", proto.Condition)
}
@ -364,3 +382,40 @@ func (l AllIn) FilterObject(g Getter) bool {
func (l AllIn) String() string {
return fmt.Sprintf("%s ALLIN(%v)", l.Key, l.Value)
}
type ExactIn struct {
Key string
Value *types.ListValue
}
func (exIn ExactIn) FilterObject(g Getter) bool {
val := g.Get(exIn.Key)
if val == nil {
return false
}
list := val.GetListValue()
if list == nil {
return false
}
if len(list.GetValues()) != len(exIn.Value.GetValues()) {
return false
}
exist := func(v *types.Value) bool {
for _, lv := range list.Values {
if v.Equal(lv) {
return true
}
}
return false
}
for _, ev := range exIn.Value.GetValues() {
if !exist(ev) {
return false
}
}
return true
}
func (exIn ExactIn) String() string {
return fmt.Sprintf("%s EXACTINN(%v)", exIn.Key, exIn.Value)
}

View file

@ -2,8 +2,11 @@ package objectstore
import (
"encoding/binary"
"errors"
"fmt"
textutil "github.com/anytypeio/go-anytype-middleware/util/text"
"runtime/debug"
"sort"
"strings"
"sync"
"time"
@ -251,6 +254,8 @@ type ObjectStore interface {
GetDetails(id string) (*model.ObjectDetails, error)
GetAggregatedOptions(relationKey string, objectType string) (options []*model.RelationOption, err error)
RelationSearchDistinct(relationKey string, reqFilters []*model.BlockContentDataviewFilter) ([]*model.BlockContentDataviewGroup, error)
HasIDs(ids ...string) (exists []string, err error)
GetByIDs(ids ...string) ([]*model.ObjectInfo, error)
List() ([]*model.ObjectInfo, error)
@ -718,6 +723,95 @@ func (m *dsObjectStore) GetAggregatedOptions(relationKey string, objectType stri
return
}
func (m *dsObjectStore) RelationSearchDistinct(relationKey string, reqFilters []*model.BlockContentDataviewFilter) ([]*model.BlockContentDataviewGroup, error) {
rel, err := m.GetRelation(relationKey)
if err != nil {
return nil, err
}
var groups []*model.BlockContentDataviewGroup
switch rel.Format {
case model.RelationFormat_status:
options, err := m.GetAggregatedOptions(relationKey, "")
if err != nil {
return nil, err
}
uniqMap := make(map[string]bool)
for _, rel := range options {
if !uniqMap[rel.Text] {
uniqMap[rel.Text] = true
groups = append(groups, &model.BlockContentDataviewGroup{
Id: rel.Id,
Value: &model.BlockContentDataviewGroupValueOfStatus{
Status: &model.BlockContentDataviewStatus{
Id: rel.Id,
}},
})
}
}
sort.Slice(groups[:], func(i, j int) bool {
return groups[i].Id < groups[j].Id
})
case model.RelationFormat_tag:
filters := []*model.BlockContentDataviewFilter{
{RelationKey: string(bundle.RelationKeyIsDeleted), Condition: model.BlockContentDataviewFilter_Equal},
{RelationKey: string(bundle.RelationKeyIsArchived), Condition: model.BlockContentDataviewFilter_Equal},
{RelationKey: string(bundle.RelationKeyType), Condition: model.BlockContentDataviewFilter_NotIn, Value: pbtypes.StringList([]string{
bundle.TypeKeyFile.URL(),
bundle.TypeKeyImage.URL(),
bundle.TypeKeyVideo.URL(),
bundle.TypeKeyAudio.URL(),
})},
}
filters = append(filters, reqFilters...)
records, _, err := m.Query(nil, database.Query{
Filters: filters,
})
if err != nil {
return nil, err
}
uniqMap := make(map[string]bool)
for _, v := range records {
if tags := pbtypes.GetStringList(v.Details, bundle.RelationKeyTag.String()); len(tags) > 0 {
sort.Strings(tags)
hash := textutil.SliceHash(tags)
if !uniqMap[hash] {
uniqMap[hash] = true
groups = append(groups, &model.BlockContentDataviewGroup{
Id: hash,
Value: &model.BlockContentDataviewGroupValueOfTag{
Tag: &model.BlockContentDataviewTag{
Ids: tags,
}},
})
}
}
}
case model.RelationFormat_checkbox:
groups = append(groups, &model.BlockContentDataviewGroup{
Id: "true",
Value: &model.BlockContentDataviewGroupValueOfCheckbox{
Checkbox: &model.BlockContentDataviewCheckbox{
Checked: true,
}},
}, &model.BlockContentDataviewGroup{
Id: "false",
Value: &model.BlockContentDataviewGroupValueOfCheckbox{
Checkbox: &model.BlockContentDataviewCheckbox{
Checked: false,
}},
})
case model.RelationFormat_date:
// TODO
default:
return nil, errors.New("unsupported relation format")
}
return groups, nil
}
func (m *dsObjectStore) objectTypeFilter(ots ...string) query.Filter {
var filter filterSmartblockTypes
for _, otUrl := range ots {

View file

@ -392,3 +392,93 @@ func Test_removeByPrefix(t *testing.T) {
require.NoError(t, err)
require.Equal(t, 10*8000, got)
}
func Test_SearchRelationDistinct(t *testing.T) {
tmpDir, _ := ioutil.TempDir("", "")
defer os.RemoveAll(tmpDir)
logging.ApplyLevelsFromEnv()
app := testapp.New()
defer app.Close()
ds := New()
err := app.With(&config.DefaultConfig).With(wallet.NewWithRepoPathAndKeys(tmpDir, nil, nil)).With(clientds.New()).With(ftsearch.New()).With(ds).Start()
require.NoError(t, err)
id1 := getId()
id2 := getId()
id3 := getId()
require.NoError(t, ds.CreateObject(id1, &types.Struct{
Fields: map[string]*types.Value{
"name": pbtypes.String("one"),
"type": pbtypes.StringList([]string{"_ota1"}),
},
}, &model.Relations{Relations: []*model.Relation{
{
Key: "rel1",
Format: model.RelationFormat_status,
Name: "rel 1",
DefaultValue: nil,
SelectDict: []*model.RelationOption{
{"id1", "option1", "red", model.RelationOption_local},
{"id2", "option2", "red", model.RelationOption_local},
{"id3", "option3", "red", model.RelationOption_local},
},
},
}}, nil, "s1"))
require.NoError(t, ds.CreateObject(id2, &types.Struct{Fields: map[string]*types.Value{
"name": pbtypes.String("two"),
"type": pbtypes.StringList([]string{"_ota2"}),
"tag": pbtypes.StringList([]string{"tag1"}),
},
}, &model.Relations{Relations: []*model.Relation{
{
Key: "rel1",
Format: model.RelationFormat_status,
Name: "rel 1",
DefaultValue: nil,
SelectDict: []*model.RelationOption{
{"id3", "option3", "yellow", model.RelationOption_local},
{"id4", "option4", "red", model.RelationOption_local},
{"id5", "option5", "red", model.RelationOption_local},
},
},
{
Key: "rel3",
Format: model.RelationFormat_status,
Name: "rel 3",
DefaultValue: nil,
SelectDict: []*model.RelationOption{
{"id4", "option4", "red", model.RelationOption_local},
{"id5", "option5", "red", model.RelationOption_local},
{"id6", "option6", "red", model.RelationOption_local},
},
},
{
Key: "rel4",
Format: model.RelationFormat_tag,
Name: "rel 4",
DefaultValue: nil,
SelectDict: []*model.RelationOption{
{"id7", "option7", "red", model.RelationOption_local},
},
},
}}, nil, "s2"))
require.NoError(t, ds.CreateObject(id3, &types.Struct{Fields: map[string]*types.Value{
"name": pbtypes.String("three"),
"type": pbtypes.StringList([]string{"_ota2"}),
"tag": pbtypes.StringList([]string{"tag1", "tag2", "tag3"}),
}}, nil, nil,"s3"))
statusOpts, err := ds.RelationSearchDistinct("rel1", nil)
require.NoError(t, err)
require.Len(t, statusOpts, 5)
tagsOptsAll, err := ds.RelationSearchDistinct("rel4", nil)
require.NoError(t, err)
require.Len(t, tagsOptsAll, 2)
tagsOptsFilter, err := ds.RelationSearchDistinct("rel4", []*model.BlockContentDataviewFilter{{RelationKey: "name", Condition: 1, Value: pbtypes.String("three")}})
require.NoError(t, err)
require.Len(t, tagsOptsFilter, 1)
}

File diff suppressed because it is too large Load diff

View file

@ -304,6 +304,8 @@ message Block {
// index 3 is deprecated, was used for schemaURL in old-format sets
repeated model.Relation relations = 4;
string activeView = 3; // saved within a session
repeated GroupOrder groupOrders = 12;
repeated ObjectOrder objectOrders = 13;
message View {
string id = 1;
@ -312,10 +314,11 @@ message Block {
repeated Sort sorts = 4;
repeated Filter filters = 5;
repeated Relation relations = 6; // relations fields/columns options, also used to provide the order
string coverRelationKey = 7; // Relation used for cover in gallery
string coverRelationKey = 7; // Relation used for cover in gallery
bool hideIcon = 8; // Hide icon near name
Size cardSize = 9; // Gallery card size
bool coverFit = 10; // Image fits container
string groupRelationKey = 11;
enum Type {
Table = 0;
@ -394,6 +397,8 @@ message Block {
NotEmpty = 12;
AllIn = 13;
NotAllIn = 14;
ExactIn = 15;
NotExactIn = 16;
}
enum QuickOption {
@ -411,6 +416,48 @@ message Block {
NumberOfDaysNow = 11;
}
}
message GroupOrder {
string viewId = 1;
repeated ViewGroup viewGroups = 2;
}
message ViewGroup {
string groupId = 1;
int32 index = 2;
bool hidden = 3;
}
message ObjectOrder {
string viewId = 1;
string groupId = 2;
repeated string objectIds = 3;
}
message Group {
string id = 1;
oneof Value {
Status status = 2;
Tag tag = 3;
Checkbox checkbox = 4;
Date date = 5;
}
}
message Status {
string id = 1;
}
message Tag {
repeated string ids = 1;
}
message Checkbox {
bool checked = 1;
}
message Date {
}
}
message Relation {

View file

@ -1,6 +1,9 @@
package text
import (
"crypto/md5"
"fmt"
"strings"
"unicode"
"unicode/utf16"
)
@ -51,3 +54,9 @@ func StrToUTF16(str string) []uint16 {
func UTF16ToStr(b []uint16) string {
return string(utf16.Decode(b))
}
func SliceHash(keys []string) string {
s := strings.Join(keys, "_")
sum := md5.Sum([]byte(s))
return fmt.Sprintf("%x", sum)
}