1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-08 05:47:07 +09:00

Merge pull request #1577 from anytypeio/feat-kanban-subscr-GO-90

kanban subscription on groups
This commit is contained in:
pzavyalov 2022-11-25 09:28:22 +06:00 committed by GitHub
commit abf5bda3a3
Signed by: github
GPG key ID: 4AEE18F83AFDEB23
28 changed files with 2957 additions and 1829 deletions

1
.gitignore vendored
View file

@ -7,6 +7,7 @@ package-lock.json
.vscode
/vendor/
*_mock.go
*gomock_reflect*
lib-server/service.pb.go
dist/cli
grpc-web

View file

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

View file

@ -2,6 +2,7 @@ package anytype
import (
"context"
"github.com/anytypeio/go-anytype-middleware/core/kanban"
"os"
"github.com/anytypeio/go-anytype-middleware/core/account"
@ -134,6 +135,7 @@ func Bootstrap(a *app.App, components ...app.Component) {
Register(bookmark.New()).
Register(session.New()).
Register(importer.New()).
Register(decorator.New())
Register(decorator.New()).
Register(kanban.New())
return
}

View file

@ -247,18 +247,22 @@ func (s *State) applyEvent(ev *pb.EventMessage) (err error) {
return
}
case *pb.EventMessageValueOfBlockDataViewObjectOrderUpdate:
if err = apply(o.BlockDataViewObjectOrderUpdate.Id, func(b simple.Block) error {
if f, ok := b.(dataview.Block); ok {
for _, order := range b.Model().GetDataview().ObjectOrders {
if order.ViewId == o.BlockDataViewObjectOrderUpdate.ViewId && order.GroupId == o.BlockDataViewObjectOrderUpdate.GroupId {
changes := o.BlockDataViewObjectOrderUpdate.GetSliceChanges()
changedIds := slice.ApplyChanges(order.ObjectIds, pbtypes.EventsToSliceChange(changes))
order.ObjectIds = changedIds
event := o.BlockDataViewObjectOrderUpdate
if err = apply(event.Id, func(b simple.Block) error {
if dvBlock, ok := b.(dataview.Block); ok {
var existOrder []string
for _, order := range dvBlock.Model().GetDataview().ObjectOrders {
if order.ViewId == event.ViewId && order.GroupId == event.GroupId {
existOrder = order.ObjectIds
}
}
f.SetViewObjectOrder(b.Model().GetDataview().ObjectOrders)
changes := o.BlockDataViewObjectOrderUpdate.GetSliceChanges()
changedIds := slice.ApplyChanges(existOrder, pbtypes.EventsToSliceChange(changes))
dvBlock.SetViewObjectOrder([]*model.BlockContentDataviewObjectOrder{
{ViewId: event.ViewId, GroupId: event.GroupId, ObjectIds: changedIds},
})
return nil
}

27
core/kanban/group.go Normal file
View file

@ -0,0 +1,27 @@
package kanban
type GroupSlice []Group
func(gs GroupSlice) Len() int {
return len(gs)
}
func (gs GroupSlice) Less(i, j int) bool {
return len(gs[i].Id) > len(gs[j].Id)
}
func (gs GroupSlice) Swap(i, j int) {
gs[i], gs[j] = gs[j], gs[i]
}
type Group struct {
Id string
Data GroupData
}
type GroupData struct {
Ids []string
}

View file

@ -0,0 +1,37 @@
package kanban
import (
"github.com/anytypeio/go-anytype-middleware/pkg/lib/database"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
)
type GroupCheckBox struct {
}
func (gCh *GroupCheckBox) InitGroups(f *database.Filters) error {
return nil
}
func (gCh *GroupCheckBox) MakeGroups() (GroupSlice, error) {
return []Group{{Id: "true"}, {Id: "false"}}, nil
}
func (gCh *GroupCheckBox) MakeDataViewGroups() ([]*model.BlockContentDataviewGroup, error) {
var result []*model.BlockContentDataviewGroup
result = []*model.BlockContentDataviewGroup{{
Id: "true",
Value: &model.BlockContentDataviewGroupValueOfCheckbox{
Checkbox: &model.BlockContentDataviewCheckbox{
Checked: true,
}},
}, {
Id: "false",
Value: &model.BlockContentDataviewGroupValueOfCheckbox{
Checkbox: &model.BlockContentDataviewCheckbox{
Checked: false,
}},
}}
return result, nil
}

View file

@ -0,0 +1,76 @@
package kanban
import (
"github.com/anytypeio/go-anytype-middleware/pkg/lib/bundle"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/database"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/localstore/objectstore"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
"sort"
)
type GroupStatus struct {
store objectstore.ObjectStore
Options []*model.RelationOption
}
func (gs *GroupStatus) InitGroups(f *database.Filters) error {
options, err := gs.store.GetAggregatedOptions(bundle.RelationKeyStatus.String())
if err != nil {
return err
}
gs.Options = options
return nil
}
func (gs *GroupStatus) MakeGroups() (GroupSlice, error) {
var groups GroupSlice
uniqMap := make(map[string]bool)
for _, rel := range gs.Options {
if !uniqMap[rel.Text] {
uniqMap[rel.Text] = true
groups = append(groups, Group{
Id: rel.Id,
Data: GroupData{Ids: []string{rel.Id}},
})
}
}
return groups, nil
}
func (gs *GroupStatus) MakeDataViewGroups() ([]*model.BlockContentDataviewGroup, error) {
var result []*model.BlockContentDataviewGroup
groups, err := gs.MakeGroups()
if err != nil {
return nil, err
}
for _, g := range groups {
if len(g.Data.Ids) < 1 {
continue
}
result = append(result, &model.BlockContentDataviewGroup{
Id: g.Id,
Value: &model.BlockContentDataviewGroupValueOfStatus{
Status: &model.BlockContentDataviewStatus{
Id: g.Data.Ids[0],
}},
})
}
sort.Slice(groups[:], func(i, j int) bool {
return groups[i].Id < groups[j].Id
})
result = append([]*model.BlockContentDataviewGroup{{
Id: "empty",
Value: &model.BlockContentDataviewGroupValueOfStatus{Status: &model.BlockContentDataviewStatus{}},
}}, result...)
return result, nil
}

95
core/kanban/group_tag.go Normal file
View file

@ -0,0 +1,95 @@
package kanban
import (
"crypto/md5"
"encoding/hex"
"fmt"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/bundle"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/database"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/database/filter"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/localstore/objectstore"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
"github.com/anytypeio/go-anytype-middleware/util/pbtypes"
"github.com/ipfs/go-datastore/query"
"sort"
"strings"
)
type GroupTag struct {
store objectstore.ObjectStore
Records []database.Record
}
func (t *GroupTag) InitGroups(f *database.Filters) error {
filterTag := filter.Not{Filter: filter.Empty{Key: string(bundle.RelationKeyTag)}}
if f == nil {
f = &database.Filters{FilterObj: filterTag}
} else {
f.FilterObj = filter.AndFilters{f.FilterObj, filterTag}
}
records, err := t.store.QueryRaw(query.Query{
Filters: []query.Filter{f},
})
if err != nil {
return fmt.Errorf("init kanban by tag, objectStore query error: %v", err)
}
t.Records = records
return nil
}
func (t *GroupTag) MakeGroups() (GroupSlice, error) {
var groups GroupSlice
uniqMap := make(map[string]bool)
for _, v := range t.Records {
if tags := pbtypes.GetStringList(v.Details, bundle.RelationKeyTag.String()); len(tags) > 0 {
sort.Strings(tags)
hash := strings.Join(tags, "")
if !uniqMap[hash] {
uniqMap[hash] = true
groups = append(groups, Group{
Id: hash,
Data: GroupData{Ids: tags},
})
}
}
}
return groups, nil
}
func (t *GroupTag) MakeDataViewGroups() ([]*model.BlockContentDataviewGroup, error) {
var result []*model.BlockContentDataviewGroup
groups, err := t.MakeGroups()
if err != nil {
return nil, err
}
sort.Sort(groups)
for _, g := range groups {
hash := md5.Sum([]byte(g.Id))
result = append(result, &model.BlockContentDataviewGroup{
Id: hex.EncodeToString(hash[:]),
Value: &model.BlockContentDataviewGroupValueOfTag{
Tag: &model.BlockContentDataviewTag{
Ids: g.Data.Ids,
}},
})
}
result = append([]*model.BlockContentDataviewGroup{{
Id: "empty",
Value: &model.BlockContentDataviewGroupValueOfTag{
Tag: &model.BlockContentDataviewTag{
Ids: make([]string, 0),
}},
}}, result...)
return result, nil
}

73
core/kanban/service.go Normal file
View file

@ -0,0 +1,73 @@
package kanban
import (
"errors"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/database"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/localstore/objectstore"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
)
import "github.com/anytypeio/go-anytype-middleware/app"
const (
CName = "kanban"
)
func New() Service{
return &service{groupColumns: make(map[model.RelationFormat]Grouper)}
}
type Grouper interface {
InitGroups(f *database.Filters) error
MakeGroups() (GroupSlice, error)
MakeDataViewGroups() ([]*model.BlockContentDataviewGroup, error)
}
type Service interface {
Grouper(key string) (Grouper, error)
app.Component
}
type service struct {
objectStore objectstore.ObjectStore
groupColumns map[model.RelationFormat]Grouper
}
func (s *service) Init(a *app.App) (err error) {
s.objectStore = a.MustComponent(objectstore.CName).(objectstore.ObjectStore)
s.groupColumns[model.RelationFormat_status] = &GroupStatus{store: s.objectStore}
s.groupColumns[model.RelationFormat_tag] = &GroupTag{store: s.objectStore}
s.groupColumns[model.RelationFormat_checkbox] = &GroupCheckBox{}
return nil
}
func (s *service) Name() (name string) {
return CName
}
func (s *service) Grouper(key string) (Grouper, error) {
rel, err := s.objectStore.GetRelation(key)
if err != nil {
return nil, err
}
grouper, ok := s.groupColumns[rel.Format]
if !ok {
return nil, errors.New("unsupported relation format")
}
return grouper, nil
}
func GroupsToStrSlice(groups []*model.BlockContentDataviewGroup) []string {
res := make([]string, len(groups))
for i, g := range groups {
res[i] = g.Id
}
return res
}

View file

@ -0,0 +1,87 @@
package kanban
import (
"context"
"github.com/anytypeio/go-anytype-middleware/app/testapp"
"github.com/anytypeio/go-anytype-middleware/core/anytype/config"
"github.com/anytypeio/go-anytype-middleware/core/wallet"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/core/smartblock"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/database"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/database/filter"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/datastore/clientds"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/localstore/ftsearch"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/localstore/objectstore"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/logging"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/threads"
"github.com/anytypeio/go-anytype-middleware/util/pbtypes"
"github.com/gogo/protobuf/types"
"github.com/stretchr/testify/require"
"github.com/textileio/go-threads/core/thread"
"io/ioutil"
"os"
"testing"
)
func getId() string {
thrdId, err := threads.ThreadCreateID(thread.AccessControlled, smartblock.SmartBlockTypePage)
if err != nil {
panic(err)
}
return thrdId.String()
}
func Test_GrouperTags(t *testing.T) {
tmpDir, _ := ioutil.TempDir("", "")
defer os.RemoveAll(tmpDir)
logging.ApplyLevelsFromEnv()
app := testapp.New()
defer app.Close()
ds := objectstore.New()
kanbanSrv := New()
err := app.With(&config.DefaultConfig).
With(wallet.NewWithRepoPathAndKeys(tmpDir, nil, nil)).
With(clientds.New()).
With(ftsearch.New()).
With(ds).
With(kanbanSrv).
Start(context.Background())
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"}),
},
}, 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"}),
}}, 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, "s3"))
grouper, err := kanbanSrv.Grouper("tag")
require.NoError(t, err)
err = grouper.InitGroups(nil)
require.NoError(t, err)
groups, err := grouper.MakeDataViewGroups()
require.NoError(t, err)
require.Len(t, groups, 3)
f := &database.Filters{FilterObj: filter.Eq{Key: "name", Cond: 1, Value: pbtypes.String("three")}}
err = grouper.InitGroups(f)
require.NoError(t, err)
groups, err = grouper.MakeDataViewGroups()
require.NoError(t, err)
require.Len(t, groups, 2) // because results should always contain an option with empty tags set
}

View file

@ -280,11 +280,11 @@ func (mw *Middleware) ObjectSearchSubscribe(cctx context.Context, req *pb.RpcObj
return resp
}
func (mw *Middleware) ObjectRelationSearchDistinct(_ context.Context, req *pb.RpcObjectRelationSearchDistinctRequest) *pb.RpcObjectRelationSearchDistinctResponse {
errResponse := func(err error) *pb.RpcObjectRelationSearchDistinctResponse {
r := &pb.RpcObjectRelationSearchDistinctResponse{
Error: &pb.RpcObjectRelationSearchDistinctResponseError{
Code: pb.RpcObjectRelationSearchDistinctResponseError_UNKNOWN_ERROR,
func (mw *Middleware) ObjectGroupsSubscribe(_ context.Context, req *pb.RpcObjectGroupsSubscribeRequest) *pb.RpcObjectGroupsSubscribeResponse {
errResponse := func(err error) *pb.RpcObjectGroupsSubscribeResponse {
r := &pb.RpcObjectGroupsSubscribeResponse{
Error: &pb.RpcObjectGroupsSubscribeResponseError{
Code: pb.RpcObjectGroupsSubscribeResponseError_UNKNOWN_ERROR,
},
}
if err != nil {
@ -300,15 +300,14 @@ func (mw *Middleware) ObjectRelationSearchDistinct(_ context.Context, req *pb.Rp
return errResponse(errors.New("app must be started"))
}
store := mw.app.MustComponent(objectstore.CName).(objectstore.ObjectStore)
groups, err := store.RelationSearchDistinct(req.RelationKey, req.Filters)
subService := mw.app.MustComponent(subscription.CName).(subscription.Service)
resp, err := subService.SubscribeGroups(*req)
if err != nil {
return errResponse(err)
}
return &pb.RpcObjectRelationSearchDistinctResponse{Error: &pb.RpcObjectRelationSearchDistinctResponseError{
Code: pb.RpcObjectRelationSearchDistinctResponseError_NULL,
}, Groups: groups}
return resp
}
func (mw *Middleware) ObjectSubscribeIds(_ context.Context, req *pb.RpcObjectSubscribeIdsRequest) *pb.RpcObjectSubscribeIdsResponse {

View file

@ -3,6 +3,7 @@ package subscription
import (
"github.com/anytypeio/go-anytype-middleware/core/block/editor/state"
"github.com/anytypeio/go-anytype-middleware/pb"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
"github.com/anytypeio/go-anytype-middleware/util/pbtypes"
"github.com/anytypeio/go-anytype-middleware/util/slice"
"github.com/gogo/protobuf/types"
@ -34,6 +35,12 @@ type opCounter struct {
nextCount int
}
type opGroup struct {
subId string
group *model.BlockContentDataviewGroup
remove bool
}
type opCtx struct {
// subIds for remove
remove []opRemove
@ -41,6 +48,7 @@ type opCtx struct {
position []opPosition
counters []opCounter
entries []*entry
groups []opGroup
keysBuf []struct {
id string
@ -123,6 +131,18 @@ func (ctx *opCtx) apply() (event *pb.Event) {
}
}
for _, opGroup := range ctx.groups {
subMsgs = append(subMsgs, &pb.EventMessage{
Value: &pb.EventMessageValueOfSubscriptionGroups{
SubscriptionGroups: &pb.EventObjectSubscriptionGroups{
SubId: opGroup.subId,
Group: opGroup.group,
Remove: opGroup.remove,
},
},
})
}
return &pb.Event{
Messages: append(eventMsgs, subMsgs...),
}
@ -208,4 +228,5 @@ func (ctx *opCtx) reset() {
ctx.counters = ctx.counters[:0]
ctx.keysBuf = ctx.keysBuf[:0]
ctx.entries = ctx.entries[:0]
ctx.groups = ctx.groups[:0]
}

124
core/subscription/group.go Normal file
View file

@ -0,0 +1,124 @@
package subscription
import (
"github.com/anytypeio/go-anytype-middleware/core/kanban"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/database"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
"github.com/anytypeio/go-anytype-middleware/util/pbtypes"
"github.com/anytypeio/go-anytype-middleware/util/slice"
"github.com/gogo/protobuf/types"
)
func (s *service) newGroupSub(id string, relKey string, groups []*model.BlockContentDataviewGroup) *groupSub {
sub := &groupSub{
id: id,
relKey: relKey,
cache: s.cache,
set: make(map[string]struct{}),
groups: groups,
}
return sub
}
type groupSub struct {
id string
relKey string
cache *cache
set map[string]struct{}
groups []*model.BlockContentDataviewGroup
}
func (gs *groupSub) init(entries []*entry) (err error) {
for _, e := range entries {
e = gs.cache.GetOrSet(e)
e.SetSub(gs.id, true)
gs.set[e.id] = struct{}{}
}
return
}
func (gs *groupSub) counters() (prev, next int) {
return 0, 0
}
func (gs *groupSub) onChange(ctx *opCtx) {
checkGroups := false
for _, ctxEntry := range ctx.entries {
if _, inSet := gs.set[ctxEntry.id]; inSet {
cacheEntry := gs.cache.Get(ctxEntry.id)
if !checkGroups && cacheEntry != nil {
oldList := pbtypes.GetStringList(cacheEntry.data, gs.relKey)
newList := pbtypes.GetStringList(ctxEntry.data, gs.relKey)
checkGroups = !slice.UnsortedEquals(oldList, newList)
}
if cacheEntry == nil || len(pbtypes.GetStringList(ctxEntry.data, gs.relKey)) == 0 { // if tags became nil
gs.cache.RemoveSubId(ctxEntry.id, gs.id)
delete(gs.set, ctxEntry.id)
}
} else if len(pbtypes.GetStringList(ctxEntry.data, gs.relKey)) > 0 { // if not in cache but has been added new tags
gs.cache.Set(ctxEntry)
gs.set[ctxEntry.id] = struct{}{}
checkGroups = true
}
}
if checkGroups {
var records []database.Record
for id := range gs.set {
if e := ctx.getEntry(id); e != nil {
records = append(records, database.Record{Details: e.data})
}else {
records = append(records, database.Record{Details: gs.cache.Get(id).data})
}
}
tag := kanban.GroupTag{Records: records}
newGroups, err := tag.MakeDataViewGroups()
if err != nil {
log.Errorf("fail to make groups for kanban: %s", err)
}
oldIds := kanban.GroupsToStrSlice(gs.groups)
newIds := kanban.GroupsToStrSlice(newGroups)
removedIds, addedIds := slice.DifferenceRemovedAdded(oldIds, newIds)
if len(removedIds) > 0 || len(addedIds) > 0 {
for _, removedGroup := range removedIds {
for _, g := range gs.groups {
if removedGroup == g.Id {
ctx.groups = append(ctx.groups, opGroup{subId: gs.id, group: g, remove: true})
}
}
}
for _, addGroupId := range addedIds {
for _, g := range newGroups {
if addGroupId == g.Id {
ctx.groups = append(ctx.groups, opGroup{subId: gs.id, group: g})
}
}
}
gs.groups = newGroups
}
}
}
func (gs *groupSub) getActiveRecords() (res []*types.Struct) {
return
}
func (gs *groupSub) hasDep() bool {
return false
}
func (gs *groupSub) close() {
for id := range gs.set {
gs.cache.RemoveSubId(id, gs.id)
}
return
}

View file

@ -0,0 +1,94 @@
package subscription
import (
"github.com/anytypeio/go-anytype-middleware/core/kanban"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/bundle"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/database"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
"github.com/anytypeio/go-anytype-middleware/util/pbtypes"
"github.com/gogo/protobuf/types"
"testing"
"github.com/stretchr/testify/require"
)
func genTagEntries() []*entry {
return []*entry{
{id: "id_one", data: &types.Struct{Fields: map[string]*types.Value{
bundle.RelationKeyTag.String(): pbtypes.StringList([]string{"tag_1"}),
}}},
{id: "id_two", data: &types.Struct{Fields: map[string]*types.Value{
bundle.RelationKeyTag.String(): pbtypes.StringList([]string{"tag_2"}),
}}},
{id: "id_three", data: &types.Struct{Fields: map[string]*types.Value{
bundle.RelationKeyTag.String(): pbtypes.StringList([]string{"tag_1", "tag_2", "tag_3"}),
}}},
}
}
func tagEntriesToGroups(entries []*entry) []*model.BlockContentDataviewGroup {
recs := make([]database.Record, len(entries))
for _, e := range entries {
recs = append(recs, database.Record{Details: e.data})
}
tags := kanban.GroupTag{Records: recs}
groups, err := tags.MakeDataViewGroups()
if err != nil {
panic(err)
}
return groups
}
func TestGroupTag(t *testing.T) {
entries := genTagEntries()
groups := tagEntriesToGroups(entries)
t.Run("change existing groups", func(t *testing.T) {
entries := genTagEntries()
sub := groupSub{relKey: bundle.RelationKeyTag.String(), groups: groups, set: make(map[string]struct{}), cache: newCache()}
require.NoError(t, sub.init(entries))
ctx := &opCtx{c: sub.cache}
ctx.entries = append(ctx.entries, &entry{
id: "id_three", data: &types.Struct{Fields: map[string]*types.Value{
bundle.RelationKeyTag.String(): pbtypes.StringList([]string{"tag_1", "tag_2"}),
}}})
sub.onChange(ctx)
assertCtxGroup(t, ctx, 1, 1)
})
t.Run("add new group", func(t *testing.T) {
entries := genTagEntries()
sub := groupSub{relKey: bundle.RelationKeyTag.String(), groups: groups, set: make(map[string]struct{}), cache: newCache()}
require.NoError(t, sub.init(entries))
ctx := &opCtx{c: sub.cache}
ctx.entries = append(ctx.entries, &entry{
id: "id_four", data: &types.Struct{Fields: map[string]*types.Value{
bundle.RelationKeyTag.String(): pbtypes.StringList([]string{"tag_4"}),
}}})
sub.onChange(ctx)
assertCtxGroup(t, ctx, 1, 0)
})
t.Run("remove existing group", func(t *testing.T) {
entries := genTagEntries()
sub := groupSub{relKey: bundle.RelationKeyTag.String(), groups: groups, set: make(map[string]struct{}), cache: newCache()}
require.NoError(t, sub.init(entries))
ctx := &opCtx{c: sub.cache}
ctx.entries = append(ctx.entries, &entry{
id: "id_one", data: &types.Struct{Fields: map[string]*types.Value{
bundle.RelationKeyTag.String(): pbtypes.StringList([]string{}),
}}})
sub.onChange(ctx)
assertCtxGroup(t, ctx, 0, 1)
})
}

View file

@ -3,6 +3,7 @@ package subscription
import (
"context"
"fmt"
"github.com/anytypeio/go-anytype-middleware/core/kanban"
"sync"
"time"
@ -38,6 +39,7 @@ type Service interface {
Search(req pb.RpcObjectSearchSubscribeRequest) (resp *pb.RpcObjectSearchSubscribeResponse, err error)
SubscribeIdsReq(req pb.RpcObjectSubscribeIdsRequest) (resp *pb.RpcObjectSubscribeIdsResponse, err error)
SubscribeIds(subId string, ids []string) (records []*types.Struct, err error)
SubscribeGroups(req pb.RpcObjectGroupsSubscribeRequest) (*pb.RpcObjectGroupsSubscribeResponse, error)
Unsubscribe(subIds ...string) (err error)
UnsubscribeAll() (err error)
@ -60,6 +62,7 @@ type service struct {
recBatch *mb.MB
objectStore objectstore.ObjectStore
kanban kanban.Service
sendEvent func(e *pb.Event)
m sync.Mutex
@ -71,6 +74,7 @@ func (s *service) Init(a *app.App) (err error) {
s.ds = newDependencyService(s)
s.subscriptions = make(map[string]subscription)
s.objectStore = a.MustComponent(objectstore.CName).(objectstore.ObjectStore)
s.kanban = a.MustComponent(kanban.CName).(kanban.Service)
s.recBatch = mb.New(0)
s.sendEvent = a.MustComponent(event.CName).(event.Sender).Send
s.ctxBuf = &opCtx{c: s.cache}
@ -214,6 +218,76 @@ func (s *service) SubscribeIdsReq(req pb.RpcObjectSubscribeIdsRequest) (resp *pb
}, nil
}
func (s *service) SubscribeGroups(req pb.RpcObjectGroupsSubscribeRequest) (*pb.RpcObjectGroupsSubscribeResponse, error) {
subId := ""
s.m.Lock()
defer s.m.Unlock()
q := database.Query{
Filters: req.Filters,
}
f, err := database.NewFilters(q, nil, time.Now().Location())
if err != nil {
return nil, err
}
if len(req.Source) > 0 {
sourceFilter, err := s.filtersFromSource(req.Source)
if err != nil {
return nil, fmt.Errorf("can't make filter from source: %v", err)
}
f.FilterObj = filter.AndFilters{f.FilterObj, sourceFilter}
}
grouper, err := s.kanban.Grouper(req.RelationKey)
if err != nil {
return nil, err
}
if err := grouper.InitGroups(f); err != nil {
return nil, err
}
dataViewGroups, err := grouper.MakeDataViewGroups()
if err != nil {
return nil, err
}
if tagGrouper, ok := grouper.(*kanban.GroupTag); ok {
groups, err := tagGrouper.MakeDataViewGroups()
if err != nil {
return nil, err
}
subId = req.SubId
if subId == "" {
subId = bson.NewObjectId().Hex()
}
sub := s.newGroupSub(subId, req.RelationKey, groups)
entries := make([]*entry, 0, len(tagGrouper.Records))
for _, r := range tagGrouper.Records {
entries = append(entries, &entry{
id: pbtypes.GetString(r.Details, "id"),
data: r.Details,
})
}
if err := sub.init(entries); err != nil {
return nil, err
}
s.subscriptions[sub.id] = sub
}
return &pb.RpcObjectGroupsSubscribeResponse{
Error: &pb.RpcObjectGroupsSubscribeResponseError{},
Groups: dataViewGroups,
SubId: subId,
}, nil
}
func (s *service) SubscribeIds(subId string, ids []string) (records []*types.Struct, err error) {
return
}

View file

@ -305,6 +305,7 @@ func newFixture(t *testing.T) *fixture {
ctrl := gomock.NewController(t)
a := testapp.New()
testMock.RegisterMockObjectStore(ctrl, a)
testMock.RegisterMockKanban(ctrl, a)
fx := &fixture{
Service: New(),
a: a,
@ -316,6 +317,7 @@ func newFixture(t *testing.T) *fixture {
}}
a.Register(fx.Service)
a.Register(fx.sender)
fx.store.EXPECT().SubscribeForAll(gomock.Any())
require.NoError(t, a.Start(context.Background()))
return fx

View file

@ -100,3 +100,21 @@ func assertCtxEmpty(t *testing.T, ctx *opCtx) {
assert.Len(t, ctx.change, 0, "change not empty")
assert.Len(t, ctx.position, 0, "position not empty")
}
func assertCtxGroup(t *testing.T, ctx *opCtx, added, removed int) {
foundAdded := 0
for _, g := range ctx.groups {
if !g.remove {
foundAdded++
}
}
assert.Equal(t, foundAdded, added)
foundRemoved := 0
for _, g := range ctx.groups {
if g.remove {
foundRemoved++
}
}
assert.Equal(t, foundRemoved, removed)
}

View file

@ -528,6 +528,10 @@
- [Rpc.Object.Graph.Request](#anytype-Rpc-Object-Graph-Request)
- [Rpc.Object.Graph.Response](#anytype-Rpc-Object-Graph-Response)
- [Rpc.Object.Graph.Response.Error](#anytype-Rpc-Object-Graph-Response-Error)
- [Rpc.Object.GroupsSubscribe](#anytype-Rpc-Object-GroupsSubscribe)
- [Rpc.Object.GroupsSubscribe.Request](#anytype-Rpc-Object-GroupsSubscribe-Request)
- [Rpc.Object.GroupsSubscribe.Response](#anytype-Rpc-Object-GroupsSubscribe-Response)
- [Rpc.Object.GroupsSubscribe.Response.Error](#anytype-Rpc-Object-GroupsSubscribe-Response-Error)
- [Rpc.Object.Import](#anytype-Rpc-Object-Import)
- [Rpc.Object.Import.Request](#anytype-Rpc-Object-Import-Request)
- [Rpc.Object.Import.Request.BookmarksParams](#anytype-Rpc-Object-Import-Request-BookmarksParams)
@ -576,10 +580,6 @@
- [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)
@ -890,6 +890,7 @@
- [Rpc.Object.Duplicate.Response.Error.Code](#anytype-Rpc-Object-Duplicate-Response-Error-Code)
- [Rpc.Object.Graph.Edge.Type](#anytype-Rpc-Object-Graph-Edge-Type)
- [Rpc.Object.Graph.Response.Error.Code](#anytype-Rpc-Object-Graph-Response-Error-Code)
- [Rpc.Object.GroupsSubscribe.Response.Error.Code](#anytype-Rpc-Object-GroupsSubscribe-Response-Error-Code)
- [Rpc.Object.Import.Request.Mode](#anytype-Rpc-Object-Import-Request-Mode)
- [Rpc.Object.Import.Request.Type](#anytype-Rpc-Object-Import-Request-Type)
- [Rpc.Object.Import.Response.Error.Code](#anytype-Rpc-Object-Import-Response-Error-Code)
@ -905,7 +906,6 @@
- [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)
@ -1079,6 +1079,7 @@
- [Event.Object.Subscription](#anytype-Event-Object-Subscription)
- [Event.Object.Subscription.Add](#anytype-Event-Object-Subscription-Add)
- [Event.Object.Subscription.Counters](#anytype-Event-Object-Subscription-Counters)
- [Event.Object.Subscription.Groups](#anytype-Event-Object-Subscription-Groups)
- [Event.Object.Subscription.Position](#anytype-Event-Object-Subscription-Position)
- [Event.Object.Subscription.Remove](#anytype-Event-Object-Subscription-Remove)
- [Event.Ping](#anytype-Event-Ping)
@ -1268,8 +1269,8 @@
| 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) | |
| ObjectGroupsSubscribe | [Rpc.Object.GroupsSubscribe.Request](#anytype-Rpc-Object-GroupsSubscribe-Request) | [Rpc.Object.GroupsSubscribe.Response](#anytype-Rpc-Object-GroupsSubscribe-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) | |
| ObjectDuplicate | [Rpc.Object.Duplicate.Request](#anytype-Rpc-Object-Duplicate-Request) | [Rpc.Object.Duplicate.Response](#anytype-Rpc-Object-Duplicate-Response) | |
@ -9060,6 +9061,67 @@ Get the info for page alongside with info for all inbound and outbound links fro
<a name="anytype-Rpc-Object-GroupsSubscribe"></a>
### Rpc.Object.GroupsSubscribe
<a name="anytype-Rpc-Object-GroupsSubscribe-Request"></a>
### Rpc.Object.GroupsSubscribe.Request
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| subId | [string](#string) | | |
| relationKey | [string](#string) | | |
| filters | [model.Block.Content.Dataview.Filter](#anytype-model-Block-Content-Dataview-Filter) | repeated | |
| source | [string](#string) | repeated | |
<a name="anytype-Rpc-Object-GroupsSubscribe-Response"></a>
### Rpc.Object.GroupsSubscribe.Response
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| error | [Rpc.Object.GroupsSubscribe.Response.Error](#anytype-Rpc-Object-GroupsSubscribe-Response-Error) | | |
| groups | [model.Block.Content.Dataview.Group](#anytype-model-Block-Content-Dataview-Group) | repeated | |
| subId | [string](#string) | | |
<a name="anytype-Rpc-Object-GroupsSubscribe-Response-Error"></a>
### Rpc.Object.GroupsSubscribe.Response.Error
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| code | [Rpc.Object.GroupsSubscribe.Response.Error.Code](#anytype-Rpc-Object-GroupsSubscribe-Response-Error-Code) | | |
| description | [string](#string) | | |
<a name="anytype-Rpc-Object-Import"></a>
### Rpc.Object.Import
@ -9763,64 +9825,6 @@ 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
@ -14165,6 +14169,19 @@ Middleware-to-front-end response, that can contain a NULL error or a non-NULL er
<a name="anytype-Rpc-Object-GroupsSubscribe-Response-Error-Code"></a>
### Rpc.Object.GroupsSubscribe.Response.Error.Code
| Name | Number | Description |
| ---- | ------ | ----------- |
| NULL | 0 | |
| UNKNOWN_ERROR | 1 | |
| BAD_INPUT | 2 | |
<a name="anytype-Rpc-Object-Import-Request-Mode"></a>
### Rpc.Object.Import.Request.Mode
@ -14364,19 +14381,6 @@ 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
@ -16733,6 +16737,7 @@ Precondition: user A opened a block
| subscriptionRemove | [Event.Object.Subscription.Remove](#anytype-Event-Object-Subscription-Remove) | | |
| subscriptionPosition | [Event.Object.Subscription.Position](#anytype-Event-Object-Subscription-Position) | | |
| subscriptionCounters | [Event.Object.Subscription.Counters](#anytype-Event-Object-Subscription-Counters) | | |
| subscriptionGroups | [Event.Object.Subscription.Groups](#anytype-Event-Object-Subscription-Groups) | | |
| blockAdd | [Event.Block.Add](#anytype-Event-Block-Add) | | |
| blockDelete | [Event.Block.Delete](#anytype-Event-Block-Delete) | | |
| filesUpload | [Event.Block.FilesUpload](#anytype-Event-Block-FilesUpload) | | |
@ -16981,6 +16986,23 @@ Adds new document to subscriptions
<a name="anytype-Event-Object-Subscription-Groups"></a>
### Event.Object.Subscription.Groups
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| subId | [string](#string) | | |
| group | [model.Block.Content.Dataview.Group](#anytype-model-Block-Content-Dataview-Group) | | |
| remove | [bool](#bool) | | |
<a name="anytype-Event-Object-Subscription-Position"></a>
### Event.Object.Subscription.Position

File diff suppressed because it is too large Load diff

View file

@ -246,6 +246,7 @@ type EventMessage struct {
// *EventMessageValueOfSubscriptionRemove
// *EventMessageValueOfSubscriptionPosition
// *EventMessageValueOfSubscriptionCounters
// *EventMessageValueOfSubscriptionGroups
// *EventMessageValueOfBlockAdd
// *EventMessageValueOfBlockDelete
// *EventMessageValueOfFilesUpload
@ -367,6 +368,9 @@ type EventMessageValueOfSubscriptionPosition struct {
type EventMessageValueOfSubscriptionCounters struct {
SubscriptionCounters *EventObjectSubscriptionCounters `protobuf:"bytes,63,opt,name=subscriptionCounters,proto3,oneof" json:"subscriptionCounters,omitempty"`
}
type EventMessageValueOfSubscriptionGroups struct {
SubscriptionGroups *EventObjectSubscriptionGroups `protobuf:"bytes,64,opt,name=subscriptionGroups,proto3,oneof" json:"subscriptionGroups,omitempty"`
}
type EventMessageValueOfBlockAdd struct {
BlockAdd *EventBlockAdd `protobuf:"bytes,2,opt,name=blockAdd,proto3,oneof" json:"blockAdd,omitempty"`
}
@ -493,6 +497,7 @@ func (*EventMessageValueOfSubscriptionAdd) IsEventMessageValue()
func (*EventMessageValueOfSubscriptionRemove) IsEventMessageValue() {}
func (*EventMessageValueOfSubscriptionPosition) IsEventMessageValue() {}
func (*EventMessageValueOfSubscriptionCounters) IsEventMessageValue() {}
func (*EventMessageValueOfSubscriptionGroups) IsEventMessageValue() {}
func (*EventMessageValueOfBlockAdd) IsEventMessageValue() {}
func (*EventMessageValueOfBlockDelete) IsEventMessageValue() {}
func (*EventMessageValueOfFilesUpload) IsEventMessageValue() {}
@ -636,6 +641,13 @@ func (m *EventMessage) GetSubscriptionCounters() *EventObjectSubscriptionCounter
return nil
}
func (m *EventMessage) GetSubscriptionGroups() *EventObjectSubscriptionGroups {
if x, ok := m.GetValue().(*EventMessageValueOfSubscriptionGroups); ok {
return x.SubscriptionGroups
}
return nil
}
func (m *EventMessage) GetBlockAdd() *EventBlockAdd {
if x, ok := m.GetValue().(*EventMessageValueOfBlockAdd); ok {
return x.BlockAdd
@ -912,6 +924,7 @@ func (*EventMessage) XXX_OneofWrappers() []interface{} {
(*EventMessageValueOfSubscriptionRemove)(nil),
(*EventMessageValueOfSubscriptionPosition)(nil),
(*EventMessageValueOfSubscriptionCounters)(nil),
(*EventMessageValueOfSubscriptionGroups)(nil),
(*EventMessageValueOfBlockAdd)(nil),
(*EventMessageValueOfBlockDelete)(nil),
(*EventMessageValueOfFilesUpload)(nil),
@ -1823,6 +1836,66 @@ func (m *EventObjectSubscriptionCounters) GetSubId() string {
return ""
}
type EventObjectSubscriptionGroups struct {
SubId string `protobuf:"bytes,1,opt,name=subId,proto3" json:"subId,omitempty"`
Group *model.BlockContentDataviewGroup `protobuf:"bytes,2,opt,name=group,proto3" json:"group,omitempty"`
Remove bool `protobuf:"varint,3,opt,name=remove,proto3" json:"remove,omitempty"`
}
func (m *EventObjectSubscriptionGroups) Reset() { *m = EventObjectSubscriptionGroups{} }
func (m *EventObjectSubscriptionGroups) String() string { return proto.CompactTextString(m) }
func (*EventObjectSubscriptionGroups) ProtoMessage() {}
func (*EventObjectSubscriptionGroups) Descriptor() ([]byte, []int) {
return fileDescriptor_a966342d378ae5f5, []int{0, 2, 1, 4}
}
func (m *EventObjectSubscriptionGroups) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *EventObjectSubscriptionGroups) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_EventObjectSubscriptionGroups.Marshal(b, m, deterministic)
} else {
b = b[:cap(b)]
n, err := m.MarshalToSizedBuffer(b)
if err != nil {
return nil, err
}
return b[:n], nil
}
}
func (m *EventObjectSubscriptionGroups) XXX_Merge(src proto.Message) {
xxx_messageInfo_EventObjectSubscriptionGroups.Merge(m, src)
}
func (m *EventObjectSubscriptionGroups) XXX_Size() int {
return m.Size()
}
func (m *EventObjectSubscriptionGroups) XXX_DiscardUnknown() {
xxx_messageInfo_EventObjectSubscriptionGroups.DiscardUnknown(m)
}
var xxx_messageInfo_EventObjectSubscriptionGroups proto.InternalMessageInfo
func (m *EventObjectSubscriptionGroups) GetSubId() string {
if m != nil {
return m.SubId
}
return ""
}
func (m *EventObjectSubscriptionGroups) GetGroup() *model.BlockContentDataviewGroup {
if m != nil {
return m.Group
}
return nil
}
func (m *EventObjectSubscriptionGroups) GetRemove() bool {
if m != nil {
return m.Remove
}
return false
}
type EventObjectRelations struct {
}
@ -8457,6 +8530,7 @@ func init() {
proto.RegisterType((*EventObjectSubscriptionRemove)(nil), "anytype.Event.Object.Subscription.Remove")
proto.RegisterType((*EventObjectSubscriptionPosition)(nil), "anytype.Event.Object.Subscription.Position")
proto.RegisterType((*EventObjectSubscriptionCounters)(nil), "anytype.Event.Object.Subscription.Counters")
proto.RegisterType((*EventObjectSubscriptionGroups)(nil), "anytype.Event.Object.Subscription.Groups")
proto.RegisterType((*EventObjectRelations)(nil), "anytype.Event.Object.Relations")
proto.RegisterType((*EventObjectRelationsAmend)(nil), "anytype.Event.Object.Relations.Amend")
proto.RegisterType((*EventObjectRelationsRemove)(nil), "anytype.Event.Object.Relations.Remove")
@ -8592,269 +8666,273 @@ func init() {
func init() { proto.RegisterFile("pb/protos/events.proto", fileDescriptor_a966342d378ae5f5) }
var fileDescriptor_a966342d378ae5f5 = []byte{
// 4186 bytes of a gzipped FileDescriptorProto
// 4242 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x4b, 0x6c, 0x1c, 0x47,
0x7a, 0x9e, 0xf7, 0xe3, 0xa7, 0x48, 0x8d, 0xcb, 0xb2, 0xdc, 0x6e, 0x51, 0xb4, 0x44, 0x3d, 0x6d,
0xcb, 0x23, 0xaf, 0x64, 0x59, 0x5a, 0xad, 0x1e, 0xa6, 0x48, 0x2a, 0x33, 0x7a, 0x91, 0x29, 0x8a,
0xce, 0xae, 0x37, 0x58, 0x6c, 0x73, 0xba, 0x38, 0xec, 0xe5, 0xb0, 0x7b, 0xd2, 0xdd, 0x33, 0x14,
0x77, 0x73, 0x08, 0xb2, 0x39, 0x04, 0x41, 0x02, 0x24, 0x97, 0x24, 0x97, 0x20, 0x87, 0x24, 0x87,
0x00, 0x7b, 0x58, 0x20, 0x97, 0x9c, 0x72, 0x09, 0x16, 0xc8, 0xe3, 0xe2, 0x63, 0x6e, 0x09, 0xec,
0x4b, 0x2e, 0x39, 0xe4, 0x92, 0x5b, 0x80, 0xa0, 0x5e, 0xdd, 0x55, 0x3d, 0xdd, 0xd3, 0x43, 0x68,
0x17, 0x9b, 0x20, 0x3e, 0xa9, 0xab, 0xea, 0xff, 0xbe, 0x7a, 0xff, 0x55, 0xf5, 0xcd, 0x4f, 0xc1,
0xe9, 0xe1, 0xce, 0xf5, 0xa1, 0xef, 0x85, 0x5e, 0x70, 0x9d, 0x8c, 0x89, 0x1b, 0x06, 0x6d, 0x96,
0x42, 0x75, 0xcb, 0x3d, 0x0a, 0x8f, 0x86, 0xc4, 0xbc, 0x38, 0xdc, 0xef, 0x5f, 0x1f, 0x38, 0x3b,
0xd7, 0x87, 0x3b, 0xd7, 0x0f, 0x3c, 0x9b, 0x0c, 0xa4, 0x39, 0x4b, 0x08, 0x73, 0x73, 0xb1, 0xef,
0x79, 0xfd, 0x01, 0xe1, 0x65, 0x3b, 0xa3, 0xdd, 0xeb, 0x41, 0xe8, 0x8f, 0x7a, 0x21, 0x2f, 0x5d,
0xfe, 0xb3, 0x1f, 0x17, 0xa1, 0xba, 0x4e, 0xe9, 0xd1, 0x0d, 0x68, 0x1c, 0x90, 0x20, 0xb0, 0xfa,
0x24, 0x30, 0x8a, 0xe7, 0xca, 0x57, 0xe7, 0x6e, 0x9c, 0x6e, 0x8b, 0xaa, 0xda, 0xcc, 0xa2, 0xfd,
0x9c, 0x17, 0xe3, 0xc8, 0x0e, 0x2d, 0x42, 0xb3, 0xe7, 0xb9, 0x21, 0x79, 0x15, 0x76, 0x6d, 0xa3,
0x74, 0xae, 0x78, 0xb5, 0x89, 0xe3, 0x0c, 0xf4, 0x31, 0x34, 0x1d, 0xd7, 0x09, 0x1d, 0x2b, 0xf4,
0x7c, 0xa3, 0x7c, 0xae, 0xa8, 0x51, 0xb2, 0x46, 0xb6, 0x57, 0x7a, 0x3d, 0x6f, 0xe4, 0x86, 0x38,
0x36, 0x44, 0x06, 0xd4, 0x43, 0xdf, 0xea, 0x91, 0xae, 0x6d, 0x54, 0x18, 0xa3, 0x4c, 0x9a, 0x5f,
0x9c, 0x87, 0xba, 0x68, 0x03, 0x7a, 0x08, 0x73, 0x16, 0xc7, 0x6e, 0xed, 0x79, 0x87, 0x46, 0x91,
0xb1, 0x9f, 0x49, 0x34, 0x58, 0xb0, 0xb7, 0xa9, 0x49, 0xa7, 0x80, 0x55, 0x04, 0xea, 0xc2, 0x82,
0x48, 0xae, 0x91, 0xd0, 0x72, 0x06, 0x81, 0xf1, 0x8f, 0x9c, 0x64, 0x29, 0x83, 0x44, 0x98, 0x75,
0x0a, 0x38, 0x01, 0x44, 0xdf, 0x81, 0x37, 0x45, 0xce, 0xaa, 0xe7, 0xee, 0x3a, 0xfd, 0xed, 0xa1,
0x6d, 0x85, 0xc4, 0xf8, 0x27, 0xce, 0x77, 0x31, 0x83, 0x8f, 0xdb, 0xb6, 0xb9, 0x71, 0xa7, 0x80,
0xd3, 0x38, 0xd0, 0x63, 0x98, 0x17, 0xd9, 0x82, 0xf4, 0x9f, 0x39, 0xe9, 0xd9, 0x0c, 0xd2, 0x88,
0x4d, 0x87, 0xa1, 0x0d, 0x68, 0x79, 0x3b, 0x3f, 0x20, 0x3d, 0xd9, 0xe6, 0x2d, 0x12, 0x1a, 0x2d,
0xc6, 0x74, 0x3e, 0xc1, 0xb4, 0xc1, 0xcc, 0x64, 0x6f, 0xdb, 0x5b, 0x24, 0xec, 0x14, 0xf0, 0x04,
0x18, 0x6d, 0x03, 0xd2, 0xf2, 0x56, 0x0e, 0x88, 0x6b, 0x1b, 0x37, 0x18, 0xe5, 0x85, 0xe9, 0x94,
0xcc, 0xb4, 0x53, 0xc0, 0x29, 0x04, 0x13, 0xb4, 0xdb, 0x6e, 0x40, 0x42, 0xe3, 0xe6, 0x2c, 0xb4,
0xcc, 0x74, 0x82, 0x96, 0xe5, 0xa2, 0xef, 0xc2, 0x29, 0x9e, 0x8b, 0xc9, 0xc0, 0x0a, 0x1d, 0xcf,
0x15, 0xed, 0xfd, 0x98, 0x11, 0x5f, 0x4a, 0x27, 0x8e, 0x6c, 0xa3, 0x16, 0xa7, 0x92, 0xa0, 0xef,
0xc1, 0x5b, 0x89, 0x7c, 0x4c, 0x0e, 0xbc, 0x31, 0x31, 0x6e, 0x31, 0xf6, 0xcb, 0x79, 0xec, 0xdc,
0xba, 0x53, 0xc0, 0xe9, 0x34, 0xe8, 0x11, 0x9c, 0x90, 0x05, 0x8c, 0xf6, 0x13, 0x46, 0xbb, 0x98,
0x45, 0x2b, 0xc8, 0x34, 0x0c, 0xc2, 0x70, 0x32, 0x18, 0xed, 0x04, 0x3d, 0xdf, 0x19, 0x52, 0xea,
0x15, 0xdb, 0x36, 0xee, 0x4d, 0x6b, 0xdd, 0x96, 0x62, 0xdc, 0x5e, 0xb1, 0x69, 0xe7, 0x93, 0x04,
0xe8, 0xbb, 0x80, 0xd4, 0x2c, 0xd1, 0xba, 0xfb, 0x8c, 0xf6, 0xbd, 0x19, 0x68, 0xa3, 0xa6, 0xa6,
0xd0, 0x20, 0x0b, 0x4e, 0xa9, 0xb9, 0x9b, 0x5e, 0xe0, 0xd0, 0x7f, 0x8d, 0x07, 0x8c, 0xfe, 0x83,
0x19, 0xe8, 0x25, 0x84, 0xce, 0x5b, 0x1a, 0x55, 0xb2, 0x8a, 0x55, 0xba, 0x5d, 0x88, 0x1f, 0x18,
0x0f, 0x67, 0xae, 0x42, 0x42, 0x92, 0x55, 0xc8, 0x7c, 0xf4, 0x09, 0x34, 0x76, 0x06, 0x5e, 0x6f,
0x9f, 0x8e, 0x77, 0x89, 0xd1, 0x1a, 0x09, 0xda, 0x47, 0xb4, 0x58, 0x8c, 0x70, 0x64, 0x4b, 0xbd,
0x1b, 0xfb, 0x5e, 0x23, 0x03, 0x12, 0x12, 0xe1, 0x3b, 0xcf, 0xa4, 0x42, 0xb9, 0x09, 0xf5, 0x6e,
0x0a, 0x02, 0xad, 0xc1, 0xdc, 0xae, 0x33, 0x20, 0xc1, 0xf6, 0x70, 0xe0, 0x59, 0xdc, 0x91, 0xce,
0xdd, 0x38, 0x97, 0x4a, 0xf0, 0x38, 0xb6, 0xa3, 0x2c, 0x0a, 0x0c, 0x3d, 0x80, 0xe6, 0x81, 0xe5,
0xef, 0x07, 0x5d, 0x77, 0xd7, 0x33, 0xaa, 0xa9, 0xde, 0x91, 0x73, 0x3c, 0x97, 0x56, 0x9d, 0x02,
0x8e, 0x21, 0xd4, 0xc7, 0xb2, 0x46, 0x6d, 0x91, 0xf0, 0xb1, 0x43, 0x06, 0x76, 0x60, 0xd4, 0x18,
0xc9, 0xbb, 0xa9, 0x24, 0x5b, 0x24, 0x6c, 0x73, 0x33, 0xea, 0x63, 0x75, 0x20, 0xfa, 0x36, 0xbc,
0x29, 0x73, 0x56, 0xf7, 0x9c, 0x81, 0xed, 0x13, 0xb7, 0x6b, 0x07, 0x46, 0x3d, 0xd5, 0xc5, 0xc6,
0x7c, 0x8a, 0x2d, 0x75, 0xb1, 0x29, 0x14, 0xd4, 0x37, 0xc8, 0x6c, 0x4c, 0x82, 0xd0, 0x77, 0x7a,
0x6c, 0xf3, 0x19, 0x8d, 0x54, 0xdf, 0x10, 0x53, 0xab, 0xc6, 0x74, 0x01, 0xa4, 0x91, 0x20, 0x1b,
0xde, 0x96, 0xf9, 0x8f, 0xac, 0xde, 0x7e, 0xdf, 0xf7, 0x46, 0xae, 0xbd, 0xea, 0x0d, 0x3c, 0xdf,
0x68, 0x32, 0xfe, 0xab, 0x99, 0xfc, 0x09, 0xfb, 0x4e, 0x01, 0x67, 0x51, 0xa1, 0x55, 0x38, 0x21,
0x8b, 0x5e, 0x92, 0x57, 0xa1, 0x01, 0xa9, 0x67, 0x44, 0x4c, 0x4d, 0x8d, 0xa8, 0x8b, 0x50, 0x41,
0x2a, 0x09, 0x5d, 0x12, 0xc6, 0x5c, 0x0e, 0x09, 0x35, 0x52, 0x49, 0x68, 0x5a, 0x25, 0x79, 0xe6,
0xb8, 0xfb, 0xc6, 0x7c, 0x0e, 0x09, 0x35, 0x52, 0x49, 0x68, 0x9a, 0x1e, 0x56, 0x51, 0x4f, 0x3d,
0x6f, 0x9f, 0xae, 0x27, 0x63, 0x21, 0xf5, 0xb0, 0x52, 0x46, 0x4b, 0x18, 0xd2, 0xc3, 0x2a, 0x09,
0xa6, 0xa7, 0xa8, 0xcc, 0x5b, 0x19, 0x38, 0x7d, 0xd7, 0x38, 0x39, 0x65, 0x2d, 0x53, 0x36, 0x66,
0x45, 0x4f, 0x51, 0x0d, 0x86, 0x3e, 0x15, 0xdb, 0x72, 0x8b, 0x84, 0x6b, 0xce, 0xd8, 0x78, 0x23,
0xd5, 0x11, 0xc7, 0x2c, 0x6b, 0xce, 0x38, 0xda, 0x97, 0x1c, 0xa2, 0x76, 0x4d, 0xba, 0x79, 0xe3,
0xad, 0x9c, 0xae, 0x49, 0x43, 0xb5, 0x6b, 0x32, 0x4f, 0xed, 0xda, 0x33, 0x2b, 0x24, 0xaf, 0x8c,
0x77, 0x72, 0xba, 0xc6, 0xac, 0xd4, 0xae, 0xb1, 0x0c, 0x7a, 0x88, 0xc9, 0x8c, 0xcf, 0x88, 0x1f,
0x3a, 0x3d, 0x6b, 0xc0, 0x87, 0xea, 0x62, 0xea, 0x31, 0x11, 0xf3, 0x69, 0xd6, 0xf4, 0x10, 0x4b,
0xa5, 0x51, 0x3b, 0xfe, 0xd2, 0xda, 0x19, 0x10, 0xec, 0x1d, 0x1a, 0x97, 0x72, 0x3a, 0x2e, 0x0d,
0xd5, 0x8e, 0xcb, 0xbc, 0x68, 0xdb, 0xae, 0x59, 0xa1, 0x35, 0x76, 0xc8, 0xe1, 0x67, 0x0e, 0x39,
0xa4, 0xb7, 0x9a, 0x37, 0xa7, 0x6c, 0x5b, 0x69, 0xdb, 0x16, 0xc6, 0xd1, 0xb6, 0x4d, 0x90, 0x44,
0xdb, 0x56, 0xcd, 0x17, 0xbe, 0xf8, 0xd4, 0x94, 0x6d, 0xab, 0xf1, 0x47, 0x8e, 0x39, 0x8b, 0x0a,
0x59, 0x70, 0x7a, 0xa2, 0x68, 0xc3, 0xb7, 0x89, 0x6f, 0x9c, 0x65, 0x95, 0x5c, 0xc9, 0xaf, 0x84,
0x99, 0x77, 0x0a, 0x38, 0x83, 0x68, 0xa2, 0x8a, 0x2d, 0x6f, 0xe4, 0xf7, 0x08, 0x1d, 0xa7, 0x0b,
0xb3, 0x54, 0x11, 0x99, 0x4f, 0x54, 0x11, 0x95, 0xa0, 0x31, 0x9c, 0x8d, 0x4a, 0x68, 0xc5, 0xbf,
0xe2, 0x7b, 0xa3, 0x21, 0xab, 0x5d, 0x5c, 0x59, 0x2f, 0xb3, 0x9a, 0xda, 0xd3, 0x6b, 0x4a, 0xa2,
0x3a, 0x05, 0x3c, 0x9d, 0x16, 0x1d, 0xc1, 0x92, 0x66, 0xc0, 0x0f, 0x68, 0xb5, 0xe2, 0x2b, 0xac,
0xe2, 0xeb, 0xd3, 0x2b, 0x9e, 0x80, 0x75, 0x0a, 0x38, 0x87, 0x18, 0x0d, 0xe1, 0x8c, 0x36, 0x18,
0x72, 0x37, 0x8a, 0x25, 0xf2, 0x9b, 0xac, 0xde, 0x6b, 0xd3, 0xeb, 0xd5, 0x31, 0x9d, 0x02, 0x9e,
0x46, 0x89, 0xfa, 0x60, 0xa4, 0x16, 0xd3, 0x99, 0xfc, 0x51, 0xea, 0x8d, 0x2b, 0xa3, 0x3a, 0x3e,
0x97, 0x99, 0x64, 0xda, 0xa8, 0xd2, 0xb2, 0x8d, 0x81, 0x9d, 0xe8, 0x9d, 0x31, 0xd3, 0xa8, 0x26,
0x61, 0xda, 0xa8, 0xa6, 0x12, 0x4f, 0x8c, 0xaa, 0x62, 0x41, 0xbb, 0xf9, 0xf6, 0x2c, 0xa3, 0xaa,
0x63, 0x26, 0x46, 0x55, 0x2f, 0xa6, 0xce, 0x73, 0x14, 0x10, 0x9f, 0x71, 0x3c, 0xf1, 0x1c, 0xd7,
0x78, 0x37, 0xd5, 0x79, 0x6e, 0x07, 0xc4, 0x17, 0x15, 0x51, 0x2b, 0xea, 0x3c, 0x35, 0x98, 0xc6,
0xf3, 0x8c, 0xec, 0x86, 0xc6, 0xb9, 0x3c, 0x1e, 0x6a, 0xa5, 0xf1, 0xd0, 0x0c, 0xea, 0xd3, 0xa2,
0x8c, 0x2d, 0x32, 0xa0, 0xd7, 0x77, 0xcb, 0xed, 0x13, 0xe3, 0x7c, 0xaa, 0x4f, 0x53, 0xe8, 0x14,
0x63, 0xea, 0xd3, 0xd2, 0x48, 0xe8, 0xd3, 0x2a, 0xca, 0xa7, 0x07, 0x3e, 0xa7, 0x5e, 0x4e, 0x7d,
0x5a, 0x29, 0xd4, 0x91, 0x29, 0xbd, 0xa8, 0x4f, 0x12, 0xa0, 0xf7, 0xa0, 0x32, 0x74, 0xdc, 0xbe,
0x61, 0x33, 0xa2, 0x37, 0x13, 0x44, 0x9b, 0x8e, 0xdb, 0xef, 0x14, 0x30, 0x33, 0x41, 0xf7, 0x00,
0x86, 0xbe, 0xd7, 0x23, 0x41, 0xf0, 0x82, 0x1c, 0x1a, 0x84, 0x01, 0xcc, 0x24, 0x80, 0x1b, 0xb4,
0x5f, 0x10, 0xea, 0xf6, 0x15, 0x7b, 0xb4, 0x0e, 0xf3, 0x22, 0x25, 0xb6, 0xf7, 0x6e, 0xea, 0xdd,
0x42, 0x12, 0xc4, 0x2f, 0x61, 0x0d, 0x45, 0xaf, 0xd6, 0x22, 0x63, 0xcd, 0x73, 0x89, 0xd1, 0x4f,
0xbd, 0x5a, 0x4b, 0x12, 0x6a, 0x42, 0x8f, 0x70, 0x05, 0x41, 0x9f, 0x63, 0xe1, 0x9e, 0x4f, 0x2c,
0x7b, 0x2b, 0xb4, 0xc2, 0x51, 0x60, 0xb8, 0xa9, 0xb7, 0x00, 0x5e, 0xd8, 0x7e, 0xc9, 0x2c, 0xe9,
0x0d, 0x47, 0xc5, 0x3c, 0xaa, 0x43, 0x75, 0x6c, 0x0d, 0x46, 0xc4, 0xfc, 0x69, 0x19, 0xea, 0xe2,
0xed, 0x6e, 0xbe, 0x80, 0x0a, 0x53, 0x26, 0x4e, 0x41, 0xd5, 0x71, 0x6d, 0xf2, 0x8a, 0x89, 0x1a,
0x55, 0xcc, 0x13, 0xe8, 0x23, 0xa8, 0x8b, 0x27, 0xbd, 0x78, 0x49, 0x64, 0x49, 0x29, 0xd2, 0xcc,
0xfc, 0x1c, 0xea, 0x52, 0xa1, 0x58, 0x84, 0xe6, 0xd0, 0xf7, 0xe8, 0xd5, 0xbe, 0x6b, 0x33, 0xda,
0x26, 0x8e, 0x33, 0xd0, 0x37, 0xa0, 0x6e, 0x0b, 0x0d, 0x84, 0x53, 0xbf, 0xdd, 0xe6, 0xa2, 0x51,
0x5b, 0x8a, 0x46, 0xed, 0x2d, 0x26, 0x1a, 0x61, 0x69, 0x67, 0xfe, 0x56, 0x11, 0x6a, 0x5c, 0xa8,
0x30, 0xc7, 0x50, 0x13, 0x43, 0x7b, 0x0b, 0x6a, 0x3d, 0x96, 0x67, 0x24, 0x45, 0x0a, 0xad, 0x85,
0x42, 0xf9, 0xc0, 0xc2, 0x98, 0xc2, 0x02, 0x3e, 0x94, 0xa5, 0xa9, 0x30, 0x3e, 0x76, 0x58, 0x18,
0xff, 0xd2, 0xea, 0xfd, 0x8f, 0x3a, 0xd4, 0xf8, 0x91, 0x60, 0xfe, 0x57, 0x29, 0x1a, 0x62, 0xf3,
0xef, 0x8b, 0x50, 0xe5, 0x7a, 0xc0, 0x02, 0x94, 0x1c, 0x39, 0xca, 0x25, 0xc7, 0x46, 0x8f, 0xd5,
0xe1, 0x2d, 0xa7, 0xf8, 0xb0, 0x34, 0x7d, 0xa4, 0xfd, 0x94, 0x1c, 0x7d, 0x46, 0x97, 0x48, 0x34,
0xe6, 0xe8, 0x34, 0xd4, 0x82, 0xd1, 0x0e, 0x7d, 0xf5, 0x94, 0xcf, 0x95, 0xaf, 0x36, 0xb1, 0x48,
0x99, 0x4f, 0xa0, 0x21, 0x8d, 0x51, 0x0b, 0xca, 0xfb, 0xe4, 0x48, 0x54, 0x4e, 0x3f, 0xd1, 0x35,
0xb1, 0xd4, 0xa2, 0x55, 0x93, 0x9c, 0x5a, 0x5e, 0x8b, 0x58, 0x8f, 0xdf, 0x87, 0x32, 0x75, 0x8c,
0xc9, 0x2e, 0x1c, 0x7f, 0x85, 0x64, 0xb6, 0x76, 0x15, 0xaa, 0x5c, 0x93, 0x49, 0xd6, 0x81, 0xa0,
0xb2, 0x4f, 0x8e, 0xf8, 0x18, 0x35, 0x31, 0xfb, 0xce, 0x24, 0xf9, 0x59, 0x09, 0x4e, 0xa8, 0x2f,
0x71, 0x73, 0x1d, 0xca, 0xf4, 0xdd, 0x9c, 0xe4, 0x34, 0xa0, 0x6e, 0xed, 0x86, 0xc4, 0x8f, 0xd4,
0x49, 0x99, 0xa4, 0x9b, 0x8c, 0x71, 0xb1, 0xb7, 0x75, 0x13, 0xf3, 0x84, 0xd9, 0x86, 0x9a, 0xd0,
0x1f, 0x92, 0x4c, 0x91, 0x7d, 0x49, 0xb5, 0x7f, 0x02, 0x8d, 0x48, 0x4e, 0x78, 0xdd, 0xba, 0x7d,
0x68, 0x44, 0xba, 0xc1, 0x29, 0xa8, 0x86, 0x5e, 0x68, 0x0d, 0x18, 0x5d, 0x19, 0xf3, 0x04, 0xdd,
0xc5, 0x2e, 0x79, 0x15, 0xae, 0x46, 0x4e, 0xa0, 0x8c, 0xe3, 0x0c, 0xbe, 0xc7, 0xc9, 0x98, 0x97,
0x96, 0x79, 0x69, 0x94, 0x11, 0xd7, 0x59, 0x51, 0xeb, 0xfc, 0xab, 0x22, 0x34, 0x23, 0xb9, 0xc9,
0xfc, 0x3c, 0x6b, 0x05, 0xaf, 0xc0, 0xbc, 0x2f, 0xac, 0xe8, 0x03, 0x4d, 0xae, 0xe3, 0x33, 0x89,
0x0d, 0x83, 0x15, 0x1b, 0xac, 0x23, 0xcc, 0x7b, 0x99, 0x23, 0xbb, 0x0c, 0x27, 0xa4, 0xe9, 0xd3,
0x78, 0xfe, 0xb5, 0x3c, 0xd3, 0x8c, 0xd0, 0x2d, 0x28, 0x3b, 0x36, 0x17, 0xa8, 0x9b, 0x98, 0x7e,
0x9a, 0xdf, 0x83, 0x39, 0xe5, 0xc9, 0x3d, 0x41, 0xff, 0x90, 0xd2, 0x2b, 0xcf, 0xfa, 0x52, 0xc2,
0xe1, 0xcb, 0xa6, 0xc7, 0x26, 0x58, 0x03, 0x98, 0x7f, 0xd1, 0x81, 0x2a, 0x3b, 0xf3, 0xcc, 0x9b,
0x7c, 0x91, 0x5d, 0x83, 0x1a, 0xbb, 0x54, 0x48, 0x99, 0xfc, 0x54, 0x82, 0x8b, 0x19, 0x63, 0x61,
0x63, 0xae, 0xc2, 0x9c, 0xa2, 0xb0, 0xd0, 0x55, 0xc1, 0x0a, 0x22, 0x3f, 0x2c, 0x93, 0xc8, 0x84,
0x06, 0xf5, 0xc7, 0x9b, 0x56, 0xb8, 0x27, 0xc6, 0x20, 0x4a, 0x9b, 0x17, 0xa1, 0x26, 0x2e, 0x49,
0xa6, 0x50, 0x94, 0xba, 0xd1, 0x20, 0x44, 0x69, 0xf3, 0xd7, 0xa1, 0x19, 0x09, 0x31, 0x68, 0x03,
0x4e, 0x08, 0x21, 0x86, 0x1f, 0xf4, 0xd4, 0x78, 0x41, 0x51, 0xb5, 0x94, 0xb6, 0x52, 0xc7, 0x18,
0x52, 0x47, 0x44, 0x4f, 0x75, 0xa6, 0xe5, 0xb4, 0x5f, 0x1e, 0x0d, 0x09, 0xd6, 0x08, 0xcc, 0xdf,
0xbb, 0xc0, 0x7c, 0x83, 0x39, 0x84, 0x46, 0xf4, 0xfa, 0x4c, 0x0e, 0xf6, 0x6d, 0xee, 0x7e, 0x4a,
0xb9, 0xd2, 0x09, 0xc7, 0x53, 0x27, 0xc7, 0xbc, 0x94, 0x79, 0x06, 0xca, 0x4f, 0xc9, 0x11, 0x5d,
0xa5, 0xdc, 0x59, 0x71, 0x4a, 0xe1, 0x94, 0xba, 0x50, 0x13, 0x2a, 0x50, 0xb2, 0xbe, 0xeb, 0x50,
0xdb, 0xe5, 0xc2, 0x52, 0x8e, 0x5b, 0x12, 0x66, 0xe6, 0x43, 0x98, 0x53, 0xb5, 0x9f, 0x24, 0xdf,
0x39, 0x98, 0xeb, 0x29, 0xea, 0x12, 0x9f, 0x06, 0x35, 0xcb, 0x24, 0x70, 0x42, 0x13, 0x78, 0x92,
0x0c, 0xeb, 0xa9, 0xcb, 0xed, 0x7c, 0xea, 0xb0, 0x4f, 0x59, 0x74, 0x4f, 0xe1, 0x64, 0x52, 0xe4,
0x49, 0xd6, 0x74, 0x15, 0x4e, 0xee, 0x24, 0x24, 0x25, 0xee, 0x67, 0x92, 0xd9, 0x66, 0x17, 0xaa,
0xfc, 0x11, 0x9e, 0xa4, 0xf8, 0x08, 0xaa, 0x16, 0x7b, 0xe4, 0x53, 0xe0, 0x82, 0x72, 0x17, 0x53,
0x5b, 0xc9, 0xa0, 0x98, 0x1b, 0x9a, 0x0e, 0xcc, 0xeb, 0xef, 0xfa, 0x24, 0x65, 0x07, 0xe6, 0xc7,
0x9a, 0x7e, 0xc0, 0xa9, 0x97, 0x53, 0xa9, 0x35, 0x2a, 0xac, 0x03, 0xcd, 0xdf, 0xae, 0x41, 0x85,
0x09, 0x53, 0xc9, 0x2a, 0x3e, 0x81, 0x4a, 0x48, 0x5e, 0xc9, 0x6b, 0xd0, 0xf2, 0x54, 0x95, 0x8b,
0x5f, 0x5f, 0x99, 0x3d, 0xfa, 0x26, 0x54, 0x83, 0xf0, 0x68, 0x20, 0xe5, 0xd4, 0x0b, 0xd3, 0x81,
0x5b, 0xd4, 0x14, 0x73, 0x04, 0x85, 0xb2, 0xbd, 0x20, 0x84, 0xd4, 0x1c, 0x28, 0xdb, 0x84, 0x98,
0x23, 0xd0, 0x43, 0xa8, 0xf7, 0xf6, 0x48, 0x6f, 0x9f, 0xd8, 0x42, 0x41, 0xbd, 0x34, 0x1d, 0xbc,
0xca, 0x8d, 0xb1, 0x44, 0xd1, 0xba, 0x7b, 0x6c, 0x76, 0x6b, 0xb3, 0xd4, 0xcd, 0x66, 0x1c, 0x73,
0x04, 0x5a, 0x87, 0xa6, 0xd3, 0xf3, 0xdc, 0xf5, 0x03, 0xef, 0x07, 0x8e, 0x90, 0x4a, 0xaf, 0x4c,
0x87, 0x77, 0xa5, 0x39, 0x8e, 0x91, 0x92, 0xa6, 0x7b, 0x60, 0xf5, 0x89, 0x90, 0x45, 0x67, 0xa0,
0x61, 0xe6, 0x38, 0x46, 0x9a, 0x8b, 0x62, 0x3e, 0xd3, 0x37, 0xf9, 0x63, 0xa8, 0xb2, 0x21, 0x47,
0xf7, 0xd5, 0xe2, 0x05, 0xa5, 0xa6, 0x4c, 0x8f, 0x25, 0xa6, 0x2a, 0xe2, 0x61, 0xe3, 0xaf, 0xf3,
0xcc, 0xcd, 0xc2, 0x23, 0xe6, 0x8d, 0xf3, 0xbc, 0x0b, 0x75, 0x31, 0x15, 0x7a, 0x83, 0x1b, 0xd2,
0xe0, 0x2c, 0x54, 0xf9, 0xc6, 0x4c, 0xef, 0xcf, 0x79, 0x68, 0x46, 0x83, 0x39, 0xdd, 0x84, 0x8d,
0x4e, 0x86, 0x89, 0x0b, 0x55, 0xae, 0xcf, 0x4d, 0x7a, 0x5a, 0x75, 0x13, 0x5c, 0x98, 0x2e, 0xf7,
0x29, 0xbb, 0x20, 0x67, 0x16, 0xfe, 0xb8, 0x08, 0xe5, 0x35, 0x67, 0x3c, 0x51, 0xdd, 0x1d, 0xb9,
0x77, 0xf2, 0x36, 0xdd, 0x9a, 0x33, 0xd6, 0xb6, 0x8e, 0xb9, 0x2e, 0xe7, 0xf5, 0x9e, 0x3e, 0xaf,
0x97, 0xa7, 0xce, 0x87, 0x42, 0xc3, 0x1b, 0xf6, 0x47, 0x35, 0xa8, 0x30, 0x85, 0x39, 0xcd, 0x1b,
0x1c, 0x0d, 0xf3, 0x1b, 0x46, 0xc1, 0xfc, 0x58, 0x63, 0xf6, 0xdc, 0x1b, 0x58, 0x61, 0xbe, 0x37,
0x60, 0x40, 0xfa, 0x06, 0x60, 0x5d, 0xa2, 0xef, 0x8d, 0x4f, 0xa0, 0x72, 0xe0, 0x1c, 0x10, 0xe1,
0x0c, 0x72, 0xaa, 0x7c, 0xee, 0x1c, 0x10, 0xcc, 0xec, 0x29, 0x6e, 0xcf, 0x0a, 0xf6, 0x84, 0x1f,
0xc8, 0xc1, 0x75, 0xac, 0x60, 0x0f, 0x33, 0x7b, 0x8a, 0x73, 0xad, 0x03, 0x22, 0x1c, 0x40, 0x0e,
0xee, 0x85, 0x45, 0xeb, 0xa3, 0xf6, 0x14, 0x17, 0x38, 0x3f, 0x24, 0x62, 0xe7, 0xe7, 0xe0, 0xb6,
0x9c, 0x1f, 0x12, 0xcc, 0xec, 0x63, 0x47, 0xd9, 0x98, 0x6d, 0x68, 0x94, 0xd9, 0x5e, 0x84, 0x0a,
0x6d, 0x40, 0xc6, 0xea, 0x3a, 0x0b, 0xd5, 0x5f, 0x73, 0xec, 0x70, 0x4f, 0x2f, 0xae, 0x6a, 0x2e,
0x80, 0x0e, 0xf0, 0xb1, 0x5c, 0x80, 0x3a, 0x3f, 0x9c, 0x67, 0x0d, 0x2a, 0x74, 0xa2, 0x8f, 0xb7,
0xe2, 0xe2, 0xf5, 0xf1, 0x5a, 0x0e, 0x49, 0x1d, 0x12, 0xce, 0xb3, 0x08, 0x15, 0x3a, 0x97, 0x19,
0x43, 0xb2, 0x08, 0x15, 0xba, 0x42, 0xb2, 0x4b, 0xe9, 0xbc, 0xe8, 0xa5, 0x65, 0x59, 0xfa, 0x77,
0x75, 0xa8, 0xb0, 0x1f, 0x4c, 0x92, 0x7b, 0xe2, 0x57, 0x61, 0x3e, 0xb4, 0xfc, 0x3e, 0x09, 0x1f,
0x89, 0xab, 0x66, 0x29, 0xf5, 0x27, 0x4d, 0xfd, 0x67, 0x98, 0xf6, 0x4b, 0x15, 0x82, 0x75, 0x86,
0xd9, 0x0f, 0x4f, 0x46, 0xa5, 0x1d, 0x9e, 0xf7, 0xa2, 0x4b, 0x5a, 0x25, 0xe7, 0xd7, 0x3a, 0x86,
0xe5, 0x57, 0x3d, 0x79, 0x63, 0x43, 0x8f, 0xa0, 0x41, 0x8f, 0x10, 0x3a, 0x0c, 0x62, 0xe3, 0x5c,
0x9e, 0x8e, 0xef, 0x0a, 0x6b, 0x1c, 0xe1, 0xe8, 0x01, 0xd6, 0xb3, 0x7c, 0x9b, 0xb5, 0x4a, 0xec,
0xa2, 0x2b, 0xd3, 0x49, 0x56, 0xa5, 0x39, 0x8e, 0x91, 0xe8, 0x29, 0xcc, 0xd9, 0x24, 0x7a, 0x73,
0x8a, 0x6d, 0xf5, 0xde, 0x74, 0xa2, 0xb5, 0x18, 0x80, 0x55, 0x34, 0x6d, 0x93, 0x7c, 0xe2, 0x04,
0xb9, 0x87, 0x2a, 0xa3, 0x8a, 0xe3, 0x02, 0x62, 0xa4, 0x79, 0x09, 0xe6, 0xb5, 0x79, 0xfb, 0xb9,
0x9e, 0xae, 0xea, 0x5c, 0x72, 0x9e, 0xdb, 0xd1, 0x55, 0xfc, 0x43, 0xfd, 0x78, 0xcd, 0xbc, 0x79,
0x0b, 0xe0, 0x33, 0x68, 0xc8, 0x89, 0x41, 0x9f, 0xea, 0x6d, 0x78, 0x3f, 0xbf, 0x0d, 0xd1, 0x9c,
0x0a, 0xb6, 0x17, 0xd0, 0x8c, 0x66, 0x08, 0xad, 0xe8, 0x74, 0x1f, 0xe4, 0xd3, 0xc5, 0xb3, 0x2b,
0xf8, 0x30, 0xcc, 0x29, 0x13, 0x85, 0x56, 0x75, 0xc6, 0x0f, 0xf3, 0x19, 0xd5, 0x69, 0x8e, 0x4f,
0xf7, 0x68, 0xc6, 0xd4, 0x59, 0x29, 0xc7, 0xb3, 0xf2, 0xd3, 0x3a, 0x34, 0xa2, 0x1f, 0x29, 0x53,
0xde, 0x52, 0x23, 0x7f, 0x90, 0xfb, 0x96, 0x92, 0xf8, 0xf6, 0xb6, 0x3f, 0xc0, 0x14, 0x41, 0xa7,
0x38, 0x74, 0xc2, 0x68, 0xab, 0x5e, 0xc9, 0x87, 0xbe, 0xa4, 0xe6, 0x98, 0xa3, 0xd0, 0x86, 0xbe,
0xca, 0xf9, 0x9e, 0xfd, 0x30, 0x9f, 0x24, 0x73, 0xa5, 0x77, 0xa1, 0xe9, 0xd0, 0x2b, 0x4e, 0x27,
0x3e, 0xfb, 0x3e, 0xc8, 0xa7, 0xeb, 0x4a, 0x08, 0x8e, 0xd1, 0xb4, 0x6d, 0xbb, 0xd6, 0x98, 0xee,
0x6b, 0x46, 0x56, 0x9b, 0xb5, 0x6d, 0x8f, 0x63, 0x10, 0x56, 0x19, 0xd0, 0x5d, 0x71, 0x7b, 0xa8,
0xe7, 0x78, 0x96, 0x78, 0xa8, 0xe2, 0x1b, 0xc4, 0xb7, 0x61, 0x81, 0xfb, 0x48, 0xae, 0xdf, 0x75,
0x6d, 0xb1, 0x8d, 0x3f, 0x9a, 0x81, 0x45, 0xc3, 0xe1, 0x04, 0x0f, 0x9d, 0x41, 0x7e, 0x37, 0x69,
0xce, 0x3a, 0x83, 0xea, 0xfd, 0x84, 0x3e, 0xa6, 0xb7, 0xfd, 0x41, 0xf6, 0x19, 0xcc, 0xa6, 0x3b,
0xa3, 0xf8, 0x82, 0xbe, 0x13, 0xb2, 0x2f, 0xae, 0xd1, 0x9c, 0x64, 0xf2, 0x28, 0x83, 0x9e, 0x61,
0x74, 0x5f, 0x1c, 0xd4, 0xb7, 0xf4, 0xfd, 0xf6, 0x6e, 0x62, 0xbf, 0xd1, 0x1d, 0xb6, 0xe9, 0x13,
0xf6, 0x03, 0x8f, 0x7a, 0x42, 0x5f, 0x86, 0x05, 0x7d, 0x20, 0x33, 0xaa, 0x79, 0x22, 0xef, 0x15,
0xc7, 0xf2, 0x14, 0xc9, 0xb1, 0xe5, 0x5c, 0xbf, 0x53, 0x84, 0x46, 0xf4, 0x1b, 0xf4, 0xa4, 0xd2,
0xdb, 0x70, 0x82, 0x0e, 0xb1, 0x6c, 0xe2, 0x8b, 0x7d, 0xfb, 0x7e, 0xee, 0x8f, 0xdb, 0xed, 0xae,
0x40, 0xe0, 0x08, 0x6b, 0x9e, 0x83, 0x86, 0xcc, 0xcd, 0x78, 0x7c, 0xfc, 0xeb, 0x3b, 0xec, 0x3a,
0x3c, 0x30, 0x9f, 0xc5, 0x22, 0xff, 0xeb, 0x8b, 0xb6, 0xe6, 0x4b, 0x38, 0xb9, 0x66, 0x85, 0xd6,
0x8e, 0x15, 0x10, 0x4c, 0x7a, 0x9e, 0x6f, 0xa7, 0xb2, 0xfa, 0xbc, 0x48, 0xa8, 0x80, 0xd9, 0xac,
0xc2, 0xee, 0x6b, 0xfd, 0xe6, 0x7f, 0x8f, 0x7e, 0xf3, 0x37, 0x95, 0x0c, 0x51, 0x65, 0x96, 0xf7,
0x24, 0x5d, 0x70, 0x13, 0xaa, 0xca, 0x5d, 0xfd, 0x62, 0x78, 0x31, 0x07, 0xa9, 0xdd, 0x0c, 0xef,
0xea, 0xb2, 0x4a, 0x1e, 0x56, 0xd3, 0x55, 0x3e, 0x4d, 0xea, 0x2a, 0x97, 0x73, 0xd0, 0x13, 0xc2,
0xca, 0x5d, 0x5d, 0x58, 0xc9, 0xab, 0x5d, 0x55, 0x56, 0xfe, 0x9f, 0x69, 0x19, 0x7f, 0x92, 0xa1,
0x0a, 0x7c, 0x53, 0x57, 0x05, 0xa6, 0xac, 0x9a, 0x5f, 0x94, 0x2c, 0xf0, 0xa7, 0x59, 0xb2, 0xc0,
0x6d, 0x4d, 0x16, 0x98, 0xd2, 0xb2, 0xa4, 0x2e, 0x70, 0x57, 0xd7, 0x05, 0x2e, 0xe6, 0x20, 0x35,
0x61, 0xe0, 0xb6, 0x26, 0x0c, 0xe4, 0x55, 0xaa, 0x28, 0x03, 0xb7, 0x35, 0x65, 0x20, 0x0f, 0xa8,
0x48, 0x03, 0xb7, 0x35, 0x69, 0x20, 0x0f, 0xa8, 0x68, 0x03, 0xb7, 0x35, 0x6d, 0x20, 0x0f, 0xa8,
0x88, 0x03, 0x77, 0x75, 0x71, 0x20, 0x7f, 0x7c, 0xbe, 0x56, 0x07, 0x7e, 0x39, 0xea, 0xc0, 0x1f,
0x94, 0x33, 0xd4, 0x01, 0x9c, 0xae, 0x0e, 0x5c, 0xcb, 0x9e, 0xc9, 0x7c, 0x79, 0x60, 0xf6, 0x53,
0x60, 0x52, 0x1f, 0xb8, 0x9f, 0xd0, 0x07, 0x2e, 0xe5, 0x80, 0x75, 0x81, 0xe0, 0xff, 0xcc, 0x0b,
0xf8, 0x27, 0xb5, 0x29, 0x8f, 0xbd, 0x3b, 0xea, 0x63, 0x6f, 0xca, 0x49, 0x36, 0xf9, 0xda, 0x7b,
0xa0, 0xbf, 0xf6, 0xae, 0xce, 0x80, 0xd5, 0x9e, 0x7b, 0x9b, 0x69, 0xcf, 0xbd, 0xf6, 0x0c, 0x2c,
0x99, 0xef, 0xbd, 0x27, 0x93, 0xef, 0xbd, 0x6b, 0x33, 0xf0, 0xa5, 0x3e, 0xf8, 0x36, 0xd3, 0x1e,
0x7c, 0xb3, 0xb4, 0x2e, 0xf3, 0xc5, 0xf7, 0x2d, 0xed, 0xc5, 0x77, 0x65, 0x96, 0xe1, 0x8a, 0x0f,
0x87, 0xef, 0x64, 0x3c, 0xf9, 0xbe, 0x31, 0x0b, 0xcd, 0xd4, 0x37, 0xdf, 0xd7, 0x8f, 0xb6, 0x44,
0x35, 0x3f, 0x69, 0x42, 0x43, 0x86, 0xed, 0x99, 0xbf, 0x01, 0x75, 0x19, 0x9a, 0x9b, 0xdc, 0x39,
0xa7, 0xa1, 0x46, 0x4d, 0xa2, 0x28, 0x0b, 0x91, 0x42, 0x0f, 0xa0, 0x42, 0xbf, 0xc4, 0xb6, 0x98,
0xae, 0x31, 0x69, 0x21, 0xb5, 0x98, 0xe1, 0xcc, 0x8f, 0x01, 0x94, 0x50, 0xdd, 0x19, 0x6b, 0x35,
0x6f, 0x41, 0x33, 0x0e, 0xbe, 0x4d, 0x89, 0x08, 0xe1, 0x66, 0xf2, 0x65, 0x22, 0x93, 0xe6, 0x4d,
0x68, 0xc6, 0x01, 0xb5, 0x29, 0x75, 0x05, 0xac, 0x50, 0xa0, 0x44, 0xca, 0x5c, 0x87, 0x37, 0x26,
0x83, 0x28, 0x53, 0x5e, 0x44, 0x4a, 0x24, 0x85, 0x68, 0xad, 0x9a, 0x65, 0x1e, 0xc2, 0x42, 0x22,
0x2c, 0xf2, 0xd8, 0x1c, 0xe8, 0x26, 0x34, 0x64, 0x52, 0x0c, 0xf8, 0xdb, 0x19, 0xb1, 0x21, 0x38,
0x32, 0x34, 0xd7, 0x60, 0x21, 0xa7, 0xf1, 0xb3, 0x84, 0x86, 0x7c, 0x1f, 0xe6, 0xa6, 0xb5, 0xfd,
0xe7, 0x10, 0xba, 0x12, 0x42, 0x6b, 0x22, 0xf8, 0x38, 0x59, 0xcd, 0x26, 0x40, 0x3f, 0xb2, 0x11,
0x6e, 0xfc, 0xa3, 0xd9, 0xd6, 0x5c, 0xcc, 0x8d, 0x15, 0x0e, 0xf3, 0x2f, 0x8b, 0xf0, 0xc6, 0x64,
0xe4, 0xf1, 0xac, 0xab, 0xdf, 0x80, 0x3a, 0xe3, 0x8a, 0x82, 0x8c, 0x64, 0x12, 0x3d, 0x87, 0x13,
0xc1, 0xc0, 0xe9, 0x91, 0xd5, 0x3d, 0xcb, 0xed, 0x13, 0x7a, 0xe6, 0x96, 0xf3, 0xa3, 0x87, 0xb7,
0x62, 0x04, 0xd6, 0xe0, 0xe6, 0x21, 0xcc, 0x29, 0x85, 0xe8, 0x1e, 0x94, 0xbc, 0xa1, 0xf0, 0x08,
0xd7, 0x66, 0xe0, 0xdc, 0x18, 0x12, 0x9f, 0xaf, 0x8b, 0x92, 0x37, 0x94, 0xc1, 0x3d, 0xa5, 0x28,
0xb8, 0x47, 0x0d, 0xa2, 0x2a, 0x6b, 0x41, 0x54, 0xcb, 0xbf, 0x5f, 0x84, 0x05, 0x9d, 0x02, 0x9d,
0x06, 0xa4, 0xe7, 0xbc, 0xf0, 0x5c, 0xd2, 0x2a, 0xa0, 0xb7, 0xe0, 0x0d, 0x3d, 0x7f, 0xc5, 0xb6,
0x5b, 0xc5, 0x49, 0xf3, 0xe7, 0xde, 0x98, 0xb4, 0x4a, 0xc8, 0x80, 0x53, 0x89, 0xb6, 0xb1, 0xd0,
0xa3, 0x56, 0x19, 0xbd, 0x03, 0x6f, 0x25, 0x4b, 0x86, 0x03, 0xab, 0x47, 0x5a, 0x15, 0xf3, 0x3f,
0x4b, 0x50, 0xd9, 0x0e, 0x88, 0x6f, 0xfe, 0x7b, 0x49, 0x86, 0x0b, 0xdd, 0x81, 0x0a, 0x8b, 0x0e,
0x56, 0x22, 0x37, 0x8b, 0x89, 0xc8, 0x4d, 0xed, 0x8f, 0x37, 0xe3, 0xc8, 0xcd, 0x3b, 0x50, 0x61,
0xf1, 0xc0, 0xc7, 0x47, 0xfe, 0xb8, 0x08, 0xcd, 0x38, 0x36, 0xf7, 0xd8, 0x78, 0x35, 0x3c, 0xa9,
0xa4, 0x87, 0x27, 0xbd, 0x0f, 0x55, 0x9f, 0x05, 0x12, 0xf1, 0xfd, 0x9d, 0x0c, 0x7a, 0x62, 0x15,
0x62, 0x6e, 0x62, 0x12, 0x98, 0x53, 0x23, 0x8f, 0x8f, 0xdf, 0x8c, 0x8b, 0xe2, 0xaf, 0x5a, 0xba,
0x76, 0xb0, 0xe2, 0xfb, 0xd6, 0x91, 0x58, 0x12, 0x7a, 0x26, 0xbd, 0xff, 0x6e, 0x3a, 0x6e, 0x3f,
0x3d, 0x60, 0xd6, 0xfc, 0xdb, 0x22, 0xd4, 0x45, 0x1c, 0xaf, 0x79, 0x1b, 0xca, 0x2f, 0xc8, 0x21,
0x6d, 0x88, 0x88, 0xe4, 0x9d, 0x68, 0xc8, 0x73, 0xd6, 0x0b, 0x61, 0x8f, 0xa5, 0x99, 0x79, 0x37,
0x0a, 0x32, 0x3d, 0x3e, 0xf6, 0x0e, 0x54, 0x58, 0xc0, 0xf0, 0xf1, 0x91, 0xbf, 0xdb, 0x80, 0x1a,
0x8f, 0x3a, 0x35, 0xff, 0xbb, 0x0e, 0x35, 0x1e, 0x44, 0x8c, 0x1e, 0x40, 0x3d, 0x18, 0x1d, 0x1c,
0x58, 0xfe, 0x91, 0x91, 0xfe, 0x97, 0xc5, 0x5a, 0xcc, 0x71, 0x7b, 0x8b, 0xdb, 0x62, 0x09, 0x42,
0xb7, 0xa0, 0xd2, 0xb3, 0x76, 0xc9, 0x84, 0xa4, 0x95, 0x06, 0x5e, 0xb5, 0x76, 0x09, 0x66, 0xe6,
0xe8, 0x53, 0x68, 0x88, 0x69, 0xe1, 0x51, 0x98, 0x79, 0xf5, 0xca, 0xc9, 0x8c, 0x50, 0xe6, 0x13,
0xa8, 0x8b, 0xc6, 0xa0, 0x87, 0x51, 0xcc, 0x6d, 0xf2, 0xf6, 0x9d, 0xda, 0x85, 0x23, 0xb7, 0x97,
0x88, 0xbe, 0xfd, 0x59, 0x09, 0x2a, 0xb4, 0x71, 0xaf, 0xcd, 0x84, 0x96, 0x00, 0x06, 0x56, 0x10,
0x6e, 0x8e, 0x06, 0x03, 0x62, 0x8b, 0x70, 0x4a, 0x25, 0x07, 0x5d, 0x85, 0x93, 0x3c, 0x15, 0xec,
0x6d, 0x8d, 0x7a, 0x3d, 0x42, 0xb8, 0x0b, 0x6a, 0xe0, 0x64, 0x36, 0x5a, 0x81, 0x2a, 0xfb, 0xab,
0x49, 0x71, 0x79, 0xfe, 0x20, 0x77, 0x64, 0xdb, 0x9b, 0x8e, 0x2b, 0x5a, 0xc3, 0x91, 0xa6, 0x07,
0xcd, 0x28, 0x8f, 0x6e, 0xc2, 0xa1, 0xe3, 0xba, 0x8e, 0xdb, 0x17, 0x2b, 0x5a, 0x26, 0xa9, 0xbb,
0xa7, 0x9f, 0xa2, 0xbd, 0x55, 0x2c, 0x52, 0x34, 0x7f, 0xd7, 0x72, 0x06, 0xa2, 0x89, 0x55, 0x2c,
0x52, 0x94, 0x69, 0xc4, 0x96, 0x2f, 0x8f, 0xfb, 0x2c, 0x63, 0x99, 0x34, 0xbf, 0x2c, 0x46, 0x81,
0xe7, 0x69, 0x91, 0xb8, 0x4c, 0x54, 0xe0, 0x1e, 0x80, 0xeb, 0x05, 0x8b, 0xea, 0xa5, 0x9e, 0xbb,
0x62, 0xe5, 0x9a, 0x7e, 0x1a, 0x6a, 0x9e, 0x3b, 0x70, 0x5c, 0x2e, 0x7d, 0x34, 0xb0, 0x48, 0x25,
0xc6, 0xb8, 0x3a, 0x31, 0xc6, 0xa2, 0x7c, 0xdd, 0x76, 0x68, 0x13, 0x6b, 0x71, 0x39, 0xcf, 0x41,
0xf7, 0xa1, 0x6e, 0x93, 0xb1, 0xd3, 0x23, 0x81, 0x51, 0x67, 0x4b, 0xef, 0xc2, 0xd4, 0xb1, 0x5d,
0x63, 0xb6, 0x58, 0x62, 0xcc, 0x10, 0x6a, 0x3c, 0x2b, 0xea, 0x52, 0x51, 0xe9, 0x52, 0xdc, 0xe8,
0xd2, 0x94, 0x46, 0x97, 0x73, 0x1a, 0x5d, 0x49, 0x36, 0x7a, 0xf9, 0x29, 0x40, 0xbc, 0xdc, 0xd0,
0x1c, 0xd4, 0xb7, 0xdd, 0x7d, 0xd7, 0x3b, 0x74, 0x5b, 0x05, 0x9a, 0xd8, 0xd8, 0xdd, 0xa5, 0xb5,
0xb4, 0x8a, 0x34, 0x41, 0xed, 0x1c, 0xb7, 0xdf, 0x2a, 0x21, 0x80, 0x1a, 0x4d, 0x10, 0xbb, 0x55,
0xa6, 0xdf, 0x8f, 0xd9, 0xfc, 0xb5, 0x2a, 0xcb, 0x3f, 0x82, 0x79, 0x4c, 0x82, 0xa1, 0xe7, 0x06,
0xe4, 0x17, 0xf5, 0xdf, 0x34, 0x64, 0xfe, 0x87, 0x0b, 0xcb, 0x7f, 0x5d, 0x86, 0x2a, 0x73, 0x51,
0xe6, 0x9f, 0x97, 0x23, 0x67, 0x9a, 0x22, 0xe2, 0xc7, 0x52, 0xdb, 0x82, 0x72, 0xb3, 0xd2, 0x9c,
0x9b, 0xfa, 0x8a, 0xba, 0xa1, 0x4a, 0x6c, 0x0b, 0xca, 0x9f, 0x4e, 0xe8, 0x08, 0x4d, 0x5a, 0xfb,
0x16, 0x34, 0x86, 0xbe, 0xd7, 0xf7, 0xa9, 0x17, 0xad, 0x24, 0xfe, 0x88, 0x58, 0x87, 0x6d, 0x0a,
0x33, 0x1c, 0x01, 0xcc, 0x17, 0xd0, 0x90, 0xb9, 0x19, 0xa1, 0xd5, 0x08, 0x2a, 0xb6, 0x27, 0x56,
0x42, 0x19, 0xb3, 0x6f, 0x3a, 0x2e, 0x62, 0x04, 0xe5, 0xdd, 0x43, 0x24, 0x97, 0x37, 0xc4, 0x13,
0x68, 0x1e, 0x9a, 0x6b, 0xbe, 0x37, 0x64, 0xf1, 0xbd, 0xad, 0x02, 0x9d, 0xb7, 0xee, 0xc1, 0xd0,
0xf3, 0xc3, 0x56, 0x91, 0x7e, 0xaf, 0xbf, 0x62, 0xdf, 0x25, 0x74, 0x02, 0x1a, 0x5b, 0xd6, 0x98,
0x50, 0xb3, 0x56, 0x19, 0x21, 0x7a, 0xed, 0xed, 0x79, 0x63, 0xe2, 0x8b, 0xfd, 0xd7, 0xaa, 0x2c,
0xaf, 0x48, 0x6d, 0xab, 0x01, 0x15, 0x71, 0x69, 0x99, 0x83, 0x3a, 0x1e, 0xb1, 0x5d, 0xdf, 0x2a,
0xd2, 0x6c, 0x7a, 0x94, 0x70, 0xae, 0x55, 0xcb, 0xed, 0x91, 0x01, 0x5b, 0x29, 0x4d, 0xa8, 0xae,
0xfb, 0xbe, 0xe7, 0xb7, 0x2a, 0x8f, 0x16, 0xff, 0xe1, 0xcb, 0xa5, 0xe2, 0x17, 0x5f, 0x2e, 0x15,
0xff, 0xed, 0xcb, 0xa5, 0xe2, 0x1f, 0x7e, 0xb5, 0x54, 0xf8, 0xe2, 0xab, 0xa5, 0xc2, 0xbf, 0x7c,
0xb5, 0x54, 0xf8, 0xbc, 0x34, 0xdc, 0xd9, 0xa9, 0x31, 0x51, 0xe2, 0xe6, 0xff, 0x04, 0x00, 0x00,
0xff, 0xff, 0x07, 0x94, 0xfb, 0x4e, 0x55, 0x44, 0x00, 0x00,
0x7a, 0x9e, 0xf7, 0xe3, 0xa7, 0x48, 0x8d, 0xcb, 0xb2, 0xdc, 0x6e, 0x51, 0xb4, 0x4c, 0x3d, 0x6d,
0xc9, 0x23, 0xaf, 0x64, 0x59, 0x5a, 0xad, 0x5e, 0x14, 0x49, 0x65, 0x46, 0x2f, 0x32, 0x45, 0xd1,
0xd9, 0xf5, 0x06, 0x8b, 0x6d, 0x4e, 0x17, 0x87, 0xbd, 0x1c, 0x76, 0x4f, 0xba, 0x7b, 0x86, 0xe2,
0x6e, 0x0e, 0x41, 0xb2, 0x87, 0x20, 0x48, 0x80, 0xe4, 0x92, 0xe4, 0x96, 0x43, 0x92, 0x43, 0x80,
0x0d, 0xb0, 0x40, 0x2e, 0x39, 0x05, 0x01, 0x82, 0x00, 0x79, 0x5c, 0xf6, 0x98, 0x5b, 0x02, 0xfb,
0xb2, 0xd7, 0x1c, 0x92, 0x5b, 0x80, 0xa0, 0x5e, 0xdd, 0x55, 0x3d, 0xdd, 0xd3, 0x43, 0x78, 0x17,
0x9b, 0x60, 0x7d, 0xf2, 0x54, 0xd5, 0xff, 0x7d, 0x55, 0x5d, 0x55, 0xff, 0x5f, 0x55, 0x1f, 0x7f,
0x19, 0x4e, 0x0f, 0x77, 0xae, 0x0f, 0x7d, 0x2f, 0xf4, 0x82, 0xeb, 0x64, 0x4c, 0xdc, 0x30, 0x68,
0xb3, 0x12, 0xaa, 0x5b, 0xee, 0x51, 0x78, 0x34, 0x24, 0xe6, 0x85, 0xe1, 0x7e, 0xff, 0xfa, 0xc0,
0xd9, 0xb9, 0x3e, 0xdc, 0xb9, 0x7e, 0xe0, 0xd9, 0x64, 0x20, 0xcd, 0x59, 0x41, 0x98, 0x9b, 0x8b,
0x7d, 0xcf, 0xeb, 0x0f, 0x08, 0x6f, 0xdb, 0x19, 0xed, 0x5e, 0x0f, 0x42, 0x7f, 0xd4, 0x0b, 0x79,
0xeb, 0xf2, 0x7f, 0xfd, 0xb0, 0x08, 0xd5, 0x75, 0x4a, 0x8f, 0x6e, 0x40, 0xe3, 0x80, 0x04, 0x81,
0xd5, 0x27, 0x81, 0x51, 0x3c, 0x57, 0xbe, 0x32, 0x77, 0xe3, 0x74, 0x5b, 0x74, 0xd5, 0x66, 0x16,
0xed, 0x17, 0xbc, 0x19, 0x47, 0x76, 0x68, 0x11, 0x9a, 0x3d, 0xcf, 0x0d, 0xc9, 0xeb, 0xb0, 0x6b,
0x1b, 0xa5, 0x73, 0xc5, 0x2b, 0x4d, 0x1c, 0x57, 0xa0, 0x8f, 0xa1, 0xe9, 0xb8, 0x4e, 0xe8, 0x58,
0xa1, 0xe7, 0x1b, 0xe5, 0x73, 0x45, 0x8d, 0x92, 0x0d, 0xb2, 0xbd, 0xd2, 0xeb, 0x79, 0x23, 0x37,
0xc4, 0xb1, 0x21, 0x32, 0xa0, 0x1e, 0xfa, 0x56, 0x8f, 0x74, 0x6d, 0xa3, 0xc2, 0x18, 0x65, 0xd1,
0xfc, 0xeb, 0x65, 0xa8, 0x8b, 0x31, 0xa0, 0x87, 0x30, 0x67, 0x71, 0xec, 0xd6, 0x9e, 0x77, 0x68,
0x14, 0x19, 0xfb, 0x99, 0xc4, 0x80, 0x05, 0x7b, 0x9b, 0x9a, 0x74, 0x0a, 0x58, 0x45, 0xa0, 0x2e,
0x2c, 0x88, 0xe2, 0x1a, 0x09, 0x2d, 0x67, 0x10, 0x18, 0xff, 0xcc, 0x49, 0x96, 0x32, 0x48, 0x84,
0x59, 0xa7, 0x80, 0x13, 0x40, 0xf4, 0x2d, 0x78, 0x53, 0xd4, 0xac, 0x7a, 0xee, 0xae, 0xd3, 0xdf,
0x1e, 0xda, 0x56, 0x48, 0x8c, 0x7f, 0xe1, 0x7c, 0x17, 0x32, 0xf8, 0xb8, 0x6d, 0x9b, 0x1b, 0x77,
0x0a, 0x38, 0x8d, 0x03, 0x3d, 0x81, 0x79, 0x51, 0x2d, 0x48, 0xff, 0x95, 0x93, 0x9e, 0xcd, 0x20,
0x8d, 0xd8, 0x74, 0x18, 0xda, 0x80, 0x96, 0xb7, 0xf3, 0x3d, 0xd2, 0x93, 0x63, 0xde, 0x22, 0xa1,
0xd1, 0x62, 0x4c, 0xef, 0x25, 0x98, 0x36, 0x98, 0x99, 0xfc, 0xda, 0xf6, 0x16, 0x09, 0x3b, 0x05,
0x3c, 0x01, 0x46, 0xdb, 0x80, 0xb4, 0xba, 0x95, 0x03, 0xe2, 0xda, 0xc6, 0x0d, 0x46, 0x79, 0x7e,
0x3a, 0x25, 0x33, 0xed, 0x14, 0x70, 0x0a, 0xc1, 0x04, 0xed, 0xb6, 0x1b, 0x90, 0xd0, 0xb8, 0x39,
0x0b, 0x2d, 0x33, 0x9d, 0xa0, 0x65, 0xb5, 0xe8, 0xdb, 0x70, 0x8a, 0xd7, 0x62, 0x32, 0xb0, 0x42,
0xc7, 0x73, 0xc5, 0x78, 0x3f, 0x66, 0xc4, 0x17, 0xd3, 0x89, 0x23, 0xdb, 0x68, 0xc4, 0xa9, 0x24,
0xe8, 0x3b, 0xf0, 0x56, 0xa2, 0x1e, 0x93, 0x03, 0x6f, 0x4c, 0x8c, 0x5b, 0x8c, 0xfd, 0x52, 0x1e,
0x3b, 0xb7, 0xee, 0x14, 0x70, 0x3a, 0x0d, 0x7a, 0x0c, 0x27, 0x64, 0x03, 0xa3, 0xfd, 0x84, 0xd1,
0x2e, 0x66, 0xd1, 0x0a, 0x32, 0x0d, 0x83, 0x30, 0x9c, 0x0c, 0x46, 0x3b, 0x41, 0xcf, 0x77, 0x86,
0x94, 0x7a, 0xc5, 0xb6, 0x8d, 0x7b, 0xd3, 0x46, 0xb7, 0xa5, 0x18, 0xb7, 0x57, 0x6c, 0xfa, 0xf1,
0x49, 0x02, 0xf4, 0x6d, 0x40, 0x6a, 0x95, 0x18, 0xdd, 0x7d, 0x46, 0xfb, 0xfe, 0x0c, 0xb4, 0xd1,
0x50, 0x53, 0x68, 0x90, 0x05, 0xa7, 0xd4, 0xda, 0x4d, 0x2f, 0x70, 0xe8, 0x7f, 0x8d, 0x07, 0x8c,
0xfe, 0xea, 0x0c, 0xf4, 0x12, 0x42, 0xd7, 0x2d, 0x8d, 0x2a, 0xd9, 0xc5, 0x2a, 0x75, 0x17, 0xe2,
0x07, 0xc6, 0xc3, 0x99, 0xbb, 0x90, 0x90, 0x64, 0x17, 0xb2, 0x3e, 0x39, 0x45, 0xbf, 0xe2, 0x7b,
0xa3, 0x61, 0x60, 0x3c, 0x9a, 0x79, 0x8a, 0x38, 0x20, 0x39, 0x45, 0xbc, 0x16, 0x7d, 0x02, 0x8d,
0x9d, 0x81, 0xd7, 0xdb, 0xa7, 0x8b, 0x59, 0x62, 0x94, 0x46, 0x82, 0xf2, 0x31, 0x6d, 0x16, 0xcb,
0x17, 0xd9, 0xd2, 0xd0, 0xc9, 0x7e, 0xaf, 0x91, 0x01, 0x09, 0x89, 0x08, 0xcc, 0x67, 0x52, 0xa1,
0xdc, 0x84, 0x86, 0x4e, 0x05, 0x81, 0xd6, 0x60, 0x6e, 0xd7, 0x19, 0x90, 0x60, 0x7b, 0x38, 0xf0,
0x2c, 0x1e, 0xa5, 0xe7, 0x6e, 0x9c, 0x4b, 0x25, 0x78, 0x12, 0xdb, 0x51, 0x16, 0x05, 0x86, 0x1e,
0x40, 0xf3, 0xc0, 0xf2, 0xf7, 0x83, 0xae, 0xbb, 0xeb, 0x19, 0xd5, 0xd4, 0xd0, 0xcb, 0x39, 0x5e,
0x48, 0xab, 0x4e, 0x01, 0xc7, 0x10, 0x1a, 0xc0, 0xd9, 0xa0, 0xb6, 0x48, 0xf8, 0xc4, 0x21, 0x03,
0x3b, 0x30, 0x6a, 0x8c, 0xe4, 0xdd, 0x54, 0x92, 0x2d, 0x12, 0xb6, 0xb9, 0x19, 0x0d, 0xe0, 0x3a,
0x10, 0x7d, 0x13, 0xde, 0x94, 0x35, 0xab, 0x7b, 0xce, 0xc0, 0xf6, 0x89, 0xdb, 0xb5, 0x03, 0xa3,
0x9e, 0x1a, 0xbf, 0x63, 0x3e, 0xc5, 0x96, 0xc6, 0xef, 0x14, 0x0a, 0x1a, 0x78, 0x64, 0x35, 0x26,
0x41, 0xe8, 0x3b, 0x3d, 0xe6, 0xd9, 0x46, 0x23, 0x35, 0xf0, 0xc4, 0xd4, 0xaa, 0x31, 0xdd, 0x5d,
0x69, 0x24, 0xc8, 0x86, 0xb7, 0x65, 0xfd, 0x63, 0xab, 0xb7, 0xdf, 0xf7, 0xbd, 0x91, 0x6b, 0xaf,
0x7a, 0x03, 0xcf, 0x37, 0x9a, 0x8c, 0xff, 0x4a, 0x26, 0x7f, 0xc2, 0xbe, 0x53, 0xc0, 0x59, 0x54,
0x68, 0x15, 0x4e, 0xc8, 0xa6, 0x57, 0xe4, 0x75, 0x68, 0x40, 0xea, 0x01, 0x14, 0x53, 0x53, 0x23,
0x1a, 0x7f, 0x54, 0x90, 0x4a, 0x42, 0xb7, 0x84, 0x31, 0x97, 0x43, 0x42, 0x8d, 0x54, 0x12, 0x5a,
0x56, 0x49, 0x9e, 0x3b, 0xee, 0xbe, 0x31, 0x9f, 0x43, 0x42, 0x8d, 0x54, 0x12, 0x5a, 0xa6, 0x27,
0x61, 0xf4, 0xa5, 0x9e, 0xb7, 0x4f, 0xf7, 0x93, 0xb1, 0x90, 0x7a, 0x12, 0x2a, 0xb3, 0x25, 0x0c,
0xe9, 0x49, 0x98, 0x04, 0xd3, 0x23, 0x5a, 0xd6, 0xad, 0x0c, 0x9c, 0xbe, 0x6b, 0x9c, 0x9c, 0xb2,
0x97, 0x29, 0x1b, 0xb3, 0xa2, 0x47, 0xb4, 0x06, 0x43, 0x8f, 0x84, 0x5b, 0x6e, 0x91, 0x70, 0xcd,
0x19, 0x1b, 0x6f, 0xa4, 0x46, 0xf9, 0x98, 0x65, 0xcd, 0x19, 0x47, 0x7e, 0xc9, 0x21, 0xea, 0xa7,
0xc9, 0x33, 0xc4, 0x78, 0x2b, 0xe7, 0xd3, 0xa4, 0xa1, 0xfa, 0x69, 0xb2, 0x4e, 0xfd, 0xb4, 0xe7,
0x56, 0x48, 0x5e, 0x1b, 0xef, 0xe4, 0x7c, 0x1a, 0xb3, 0x52, 0x3f, 0x8d, 0x55, 0xd0, 0x13, 0x52,
0x56, 0x7c, 0x4a, 0xfc, 0xd0, 0xe9, 0x59, 0x03, 0x3e, 0x55, 0x17, 0x52, 0xcf, 0xa0, 0x98, 0x4f,
0xb3, 0xa6, 0x27, 0x64, 0x2a, 0x8d, 0xfa, 0xe1, 0xaf, 0xac, 0x9d, 0x01, 0xc1, 0xde, 0xa1, 0x71,
0x31, 0xe7, 0xc3, 0xa5, 0xa1, 0xfa, 0xe1, 0xb2, 0x2e, 0x72, 0xdb, 0x35, 0x2b, 0xb4, 0xc6, 0x0e,
0x39, 0xfc, 0xd4, 0x21, 0x87, 0xf4, 0xca, 0xf4, 0xe6, 0x14, 0xb7, 0x95, 0xb6, 0x6d, 0x61, 0x1c,
0xb9, 0x6d, 0x82, 0x24, 0x72, 0x5b, 0xb5, 0x5e, 0xc4, 0xe2, 0x53, 0x53, 0xdc, 0x56, 0xe3, 0x8f,
0x02, 0x73, 0x16, 0x15, 0xb2, 0xe0, 0xf4, 0x44, 0xd3, 0x86, 0x6f, 0x13, 0xdf, 0x38, 0xcb, 0x3a,
0xb9, 0x9c, 0xdf, 0x09, 0x33, 0xef, 0x14, 0x70, 0x06, 0xd1, 0x44, 0x17, 0x5b, 0xde, 0xc8, 0xef,
0x11, 0x3a, 0x4f, 0xe7, 0x67, 0xe9, 0x22, 0x32, 0x9f, 0xe8, 0x22, 0x6a, 0x41, 0x63, 0x38, 0x1b,
0xb5, 0xd0, 0x8e, 0xd9, 0xd1, 0xc7, 0x7a, 0x17, 0xf7, 0xe1, 0x4b, 0xac, 0xa7, 0xf6, 0xf4, 0x9e,
0x92, 0xa8, 0x4e, 0x01, 0x4f, 0xa7, 0x45, 0x47, 0xb0, 0xa4, 0x19, 0xf0, 0xc3, 0x59, 0xed, 0xf8,
0x32, 0xeb, 0xf8, 0xfa, 0xf4, 0x8e, 0x27, 0x60, 0x9d, 0x02, 0xce, 0x21, 0x46, 0x43, 0x38, 0xa3,
0x4d, 0x86, 0xf4, 0x46, 0xb1, 0x45, 0x7e, 0x93, 0xf5, 0x7b, 0x6d, 0x7a, 0xbf, 0x3a, 0xa6, 0x53,
0xc0, 0xd3, 0x28, 0x51, 0x1f, 0x8c, 0xd4, 0x66, 0xba, 0x92, 0x3f, 0x48, 0xbd, 0xab, 0x64, 0x74,
0xc7, 0xd7, 0x32, 0x93, 0x4c, 0x9b, 0x55, 0xda, 0xb6, 0x31, 0xb0, 0x13, 0x5f, 0x67, 0xcc, 0x34,
0xab, 0x49, 0x98, 0x36, 0xab, 0xa9, 0xc4, 0x13, 0xb3, 0xaa, 0x58, 0xd0, 0xcf, 0x7c, 0x7b, 0x96,
0x59, 0xd5, 0x31, 0x13, 0xb3, 0xaa, 0x37, 0xd3, 0xe0, 0x39, 0x0a, 0x88, 0xcf, 0x38, 0x9e, 0x7a,
0x8e, 0x6b, 0xbc, 0x9b, 0x1a, 0x3c, 0xb7, 0x03, 0xe2, 0x8b, 0x8e, 0xa8, 0x15, 0x0d, 0x9e, 0x1a,
0x4c, 0xe3, 0x79, 0x4e, 0x76, 0x43, 0xe3, 0x5c, 0x1e, 0x0f, 0xb5, 0xd2, 0x78, 0x68, 0x05, 0x8d,
0x69, 0x51, 0xc5, 0x16, 0x19, 0xd0, 0xb7, 0x81, 0xe5, 0xf6, 0x89, 0xf1, 0x5e, 0x6a, 0x4c, 0x53,
0xe8, 0x14, 0x63, 0x1a, 0xd3, 0xd2, 0x48, 0xe8, 0xbb, 0x2d, 0xaa, 0xa7, 0x07, 0x3e, 0xa7, 0x5e,
0x4e, 0x7d, 0xb7, 0x29, 0xd4, 0x91, 0x29, 0xbd, 0xe2, 0x4e, 0x12, 0xa0, 0xf7, 0xa1, 0x32, 0x74,
0xdc, 0xbe, 0x61, 0x33, 0xa2, 0x37, 0x13, 0x44, 0x9b, 0x8e, 0xdb, 0xef, 0x14, 0x30, 0x33, 0x41,
0xf7, 0x00, 0x86, 0xbe, 0xd7, 0x23, 0x41, 0xf0, 0x92, 0x1c, 0x1a, 0x84, 0x01, 0xcc, 0x24, 0x80,
0x1b, 0xb4, 0x5f, 0x12, 0x1a, 0xf6, 0x15, 0x7b, 0xb4, 0x0e, 0xf3, 0xa2, 0x24, 0xdc, 0x7b, 0x37,
0xf5, 0x6e, 0x21, 0x09, 0xe2, 0x67, 0xb6, 0x86, 0xa2, 0x57, 0x6b, 0x51, 0xb1, 0xe6, 0xb9, 0xc4,
0xe8, 0xa7, 0x5e, 0xad, 0x25, 0x09, 0x35, 0xa1, 0x47, 0xb8, 0x82, 0xa0, 0x6f, 0xbd, 0x70, 0xcf,
0x27, 0x96, 0xbd, 0x15, 0x5a, 0xe1, 0x28, 0x30, 0xdc, 0xd4, 0x5b, 0x00, 0x6f, 0x6c, 0xbf, 0x62,
0x96, 0xf4, 0x86, 0xa3, 0x62, 0x1e, 0xd7, 0xa1, 0x3a, 0xb6, 0x06, 0x23, 0x62, 0xfe, 0xb8, 0x0c,
0x75, 0x21, 0x0c, 0x98, 0x2f, 0xa1, 0xc2, 0x64, 0x8f, 0x53, 0x50, 0x75, 0x5c, 0x9b, 0xbc, 0x66,
0x8a, 0x49, 0x15, 0xf3, 0x02, 0xfa, 0x08, 0xea, 0x42, 0x2f, 0x10, 0x2f, 0x89, 0x2c, 0x9d, 0x46,
0x9a, 0x99, 0x9f, 0x41, 0x5d, 0xca, 0x1f, 0x8b, 0xd0, 0x1c, 0xfa, 0x1e, 0xbd, 0xda, 0x77, 0x6d,
0x46, 0xdb, 0xc4, 0x71, 0x05, 0xfa, 0x1a, 0xd4, 0x6d, 0x21, 0xb0, 0x70, 0xea, 0xb7, 0xdb, 0x5c,
0x91, 0x6a, 0x4b, 0x45, 0xaa, 0xbd, 0xc5, 0x14, 0x29, 0x2c, 0xed, 0xcc, 0xdf, 0x2a, 0x42, 0x8d,
0xab, 0x20, 0xe6, 0x18, 0x6a, 0x62, 0x6a, 0x6f, 0x41, 0xad, 0xc7, 0xea, 0x8c, 0xa4, 0x02, 0xa2,
0x8d, 0x50, 0xc8, 0x2a, 0x58, 0x18, 0x53, 0x58, 0xc0, 0xa7, 0xb2, 0x34, 0x15, 0xc6, 0xe7, 0x0e,
0x0b, 0xe3, 0x5f, 0x58, 0xbf, 0x3f, 0x6d, 0x40, 0x8d, 0x1f, 0x09, 0xe6, 0x7f, 0x97, 0xa2, 0x29,
0x36, 0xff, 0xa1, 0x08, 0x55, 0x2e, 0x36, 0x2c, 0x40, 0xc9, 0x91, 0xb3, 0x5c, 0x72, 0x6c, 0xf4,
0x44, 0x9d, 0xde, 0x72, 0x4a, 0x0c, 0x4b, 0x13, 0x5f, 0xda, 0xcf, 0xc8, 0xd1, 0xa7, 0x74, 0x8b,
0x44, 0x73, 0x8e, 0x4e, 0x43, 0x2d, 0x18, 0xed, 0xd0, 0x57, 0x4f, 0xf9, 0x5c, 0xf9, 0x4a, 0x13,
0x8b, 0x92, 0xf9, 0x14, 0x1a, 0xd2, 0x18, 0xb5, 0xa0, 0xbc, 0x4f, 0x8e, 0x44, 0xe7, 0xf4, 0x27,
0xba, 0x26, 0xb6, 0x5a, 0xb4, 0x6b, 0x92, 0x4b, 0xcb, 0x7b, 0x11, 0xfb, 0xf1, 0xbb, 0x50, 0xa6,
0x81, 0x31, 0xf9, 0x09, 0xc7, 0xdf, 0x21, 0x99, 0xa3, 0x5d, 0x85, 0x2a, 0x17, 0x7c, 0x92, 0x7d,
0x20, 0xa8, 0xec, 0x93, 0x23, 0x3e, 0x47, 0x4d, 0xcc, 0x7e, 0x67, 0x92, 0xfc, 0x7d, 0x19, 0x4e,
0xa8, 0xaf, 0x70, 0x73, 0x1d, 0xca, 0xf4, 0xdd, 0x9c, 0xe4, 0x34, 0xa0, 0x6e, 0xed, 0x86, 0xc4,
0x8f, 0xa4, 0x4f, 0x59, 0xa4, 0x4e, 0xc6, 0xb8, 0xd8, 0xdb, 0xba, 0x89, 0x79, 0xc1, 0x6c, 0x43,
0x4d, 0x88, 0x1b, 0x49, 0xa6, 0xc8, 0xbe, 0xa4, 0xda, 0x3f, 0x85, 0x46, 0xa4, 0x55, 0x7c, 0xd9,
0xbe, 0x7d, 0x68, 0x44, 0xa2, 0xc4, 0x29, 0xa8, 0x86, 0x5e, 0x68, 0x0d, 0x18, 0x5d, 0x19, 0xf3,
0x02, 0xf5, 0x62, 0x97, 0xbc, 0x0e, 0x57, 0xa3, 0x20, 0x50, 0xc6, 0x71, 0x05, 0xf7, 0x71, 0x32,
0xe6, 0xad, 0x65, 0xde, 0x1a, 0x55, 0xc4, 0x7d, 0x56, 0xd4, 0x3e, 0x8f, 0xa0, 0x26, 0x94, 0x8a,
0xa8, 0xbd, 0xa8, 0xb4, 0xa3, 0x15, 0xa8, 0xd2, 0x77, 0xe6, 0x50, 0xac, 0xfa, 0xd5, 0x84, 0x87,
0xf0, 0x13, 0x62, 0xd5, 0x73, 0x43, 0xba, 0x8d, 0xf5, 0xbb, 0x1c, 0xe6, 0x48, 0xba, 0x84, 0x3e,
0x97, 0x9d, 0xe8, 0x98, 0x1a, 0x58, 0x94, 0xcc, 0xbf, 0x2c, 0x42, 0x33, 0x92, 0xd1, 0xcc, 0xcf,
0xb2, 0x9c, 0x67, 0x05, 0xe6, 0x7d, 0x61, 0x45, 0xdf, 0x86, 0xd2, 0x85, 0xce, 0x24, 0x46, 0x82,
0x15, 0x1b, 0xac, 0x23, 0xcc, 0x7b, 0x99, 0x8b, 0xba, 0x0c, 0x27, 0xa4, 0xe9, 0xb3, 0x78, 0xeb,
0x69, 0x75, 0xa6, 0x19, 0xa1, 0x5b, 0x50, 0x76, 0x6c, 0x2e, 0xbc, 0x37, 0x31, 0xfd, 0x69, 0x7e,
0x07, 0xe6, 0x94, 0xd7, 0xfe, 0x04, 0xfd, 0x43, 0x4a, 0xaf, 0x28, 0x0a, 0xa5, 0xc4, 0x59, 0x23,
0x87, 0x1e, 0x9b, 0x60, 0x0d, 0x60, 0xfe, 0x79, 0x07, 0xaa, 0x6c, 0x8e, 0xcd, 0x9b, 0x7c, 0x7f,
0x5f, 0x83, 0x1a, 0xbb, 0xcf, 0x48, 0xf9, 0xff, 0x54, 0xda, 0x82, 0x60, 0x61, 0x63, 0xae, 0xc2,
0x9c, 0x22, 0xee, 0xd0, 0x0d, 0xc9, 0x1a, 0xa2, 0x45, 0x96, 0x45, 0x64, 0x42, 0x83, 0x1e, 0x05,
0x9b, 0x56, 0xb8, 0x27, 0xe6, 0x20, 0x2a, 0x9b, 0x17, 0xa0, 0x26, 0xee, 0x67, 0xa6, 0x10, 0xb3,
0xba, 0xd1, 0x24, 0x44, 0x65, 0xf3, 0xd7, 0xa1, 0x19, 0x69, 0x40, 0x68, 0x03, 0x4e, 0x08, 0x0d,
0x88, 0xdf, 0x31, 0xa8, 0xf1, 0x42, 0xce, 0xe6, 0xa1, 0x17, 0x0a, 0x26, 0x23, 0xb5, 0x5f, 0x1d,
0x0d, 0x09, 0xd6, 0x08, 0xcc, 0xdf, 0x3b, 0xcf, 0xc2, 0x92, 0x39, 0x84, 0x46, 0xf4, 0xf0, 0x4d,
0x4e, 0xf6, 0x6d, 0x1e, 0xf9, 0x4a, 0xb9, 0xaa, 0x0d, 0xc7, 0xd3, 0xf8, 0xca, 0x02, 0xa4, 0x79,
0x06, 0xca, 0xcf, 0xc8, 0x11, 0x75, 0x00, 0x1e, 0x27, 0x85, 0x03, 0xf0, 0x78, 0xd8, 0x85, 0x9a,
0x10, 0xa0, 0x92, 0xfd, 0x5d, 0x87, 0xda, 0x2e, 0xd7, 0xb4, 0x72, 0x22, 0xa2, 0x30, 0x33, 0x1f,
0xc2, 0x9c, 0x2a, 0x3b, 0x25, 0xf9, 0xce, 0xc1, 0x5c, 0x4f, 0x11, 0xb6, 0xf8, 0x32, 0xa8, 0x55,
0x26, 0x81, 0x13, 0x9a, 0xb6, 0x94, 0x64, 0x58, 0x4f, 0xdd, 0x6e, 0xef, 0xa5, 0x4e, 0xfb, 0x94,
0x4d, 0xf7, 0x0c, 0x4e, 0x26, 0xf5, 0xa5, 0x64, 0x4f, 0x57, 0xe0, 0xe4, 0x4e, 0x42, 0xcd, 0xe2,
0x21, 0x2e, 0x59, 0x6d, 0x76, 0xa1, 0xca, 0xdf, 0xff, 0x49, 0x8a, 0x8f, 0xa0, 0x6a, 0x31, 0x7d,
0x81, 0x02, 0x17, 0x94, 0x6b, 0xa0, 0x3a, 0x4a, 0x06, 0xc5, 0xdc, 0xd0, 0x74, 0x60, 0x5e, 0x97,
0x14, 0x92, 0x94, 0x1d, 0x98, 0x1f, 0x6b, 0xd2, 0x05, 0xa7, 0x5e, 0x4e, 0xa5, 0xd6, 0xa8, 0xb0,
0x0e, 0x34, 0x7f, 0xbb, 0x06, 0x15, 0xa6, 0x89, 0x25, 0xbb, 0xf8, 0x04, 0x2a, 0x21, 0x79, 0x2d,
0x6f, 0x60, 0xcb, 0x53, 0x05, 0x36, 0x7e, 0x73, 0x66, 0xf6, 0xe8, 0xeb, 0x50, 0x0d, 0xc2, 0xa3,
0x81, 0x54, 0x72, 0xcf, 0x4f, 0x07, 0x6e, 0x51, 0x53, 0xcc, 0x11, 0x14, 0xca, 0x7c, 0x41, 0x68,
0xb8, 0x39, 0x50, 0xe6, 0x84, 0x98, 0x23, 0xd0, 0x43, 0xa8, 0xf7, 0xf6, 0x48, 0x6f, 0x9f, 0xd8,
0x42, 0xbc, 0xbd, 0x38, 0x1d, 0xbc, 0xca, 0x8d, 0xb1, 0x44, 0xd1, 0xbe, 0x7b, 0x6c, 0x75, 0x6b,
0xb3, 0xf4, 0xcd, 0x56, 0x1c, 0x73, 0x04, 0x5a, 0x87, 0xa6, 0xd3, 0xf3, 0xdc, 0xf5, 0x03, 0xef,
0x7b, 0x8e, 0x50, 0x69, 0x2f, 0x4f, 0x87, 0x77, 0xa5, 0x39, 0x8e, 0x91, 0x92, 0xa6, 0x7b, 0x60,
0xf5, 0x89, 0x50, 0x64, 0x67, 0xa0, 0x61, 0xe6, 0x38, 0x46, 0x9a, 0x8b, 0x62, 0x3d, 0xd3, 0x9d,
0xfc, 0x09, 0x54, 0xd9, 0x94, 0xa3, 0xfb, 0x6a, 0xf3, 0x82, 0xd2, 0x53, 0x66, 0xc4, 0x12, 0x4b,
0x15, 0xf1, 0xb0, 0xf9, 0xd7, 0x79, 0xe6, 0x66, 0xe1, 0x11, 0xeb, 0xc6, 0x79, 0xde, 0x85, 0xba,
0x58, 0x0a, 0x7d, 0xc0, 0x0d, 0x69, 0x70, 0x16, 0xaa, 0xdc, 0x31, 0xd3, 0xbf, 0xe7, 0x3d, 0x68,
0x46, 0x93, 0x39, 0xdd, 0x84, 0xcd, 0x4e, 0x86, 0x89, 0x0b, 0x55, 0x2e, 0x0d, 0x4e, 0x46, 0x5a,
0xd5, 0x09, 0xce, 0x4f, 0x57, 0x1a, 0x15, 0x2f, 0xc8, 0x59, 0x85, 0x3f, 0x2e, 0x42, 0x79, 0xcd,
0x19, 0x4f, 0x74, 0x77, 0x47, 0xfa, 0x4e, 0x9e, 0xd3, 0xad, 0x39, 0x63, 0xcd, 0x75, 0xcc, 0x75,
0xb9, 0xae, 0xf7, 0xf4, 0x75, 0xbd, 0x34, 0xfd, 0x1a, 0x13, 0xd3, 0xf0, 0x81, 0xfd, 0x51, 0x0d,
0x2a, 0x4c, 0xdc, 0x4e, 0x8b, 0x06, 0x47, 0xc3, 0xfc, 0x81, 0x51, 0x30, 0x3f, 0xd6, 0x98, 0x3d,
0x8f, 0x06, 0x56, 0x98, 0x1f, 0x0d, 0x18, 0x90, 0x3e, 0x3f, 0xd8, 0x27, 0xd1, 0xa7, 0xce, 0x27,
0x50, 0x39, 0x70, 0x0e, 0x88, 0x08, 0x06, 0x39, 0x5d, 0xbe, 0x70, 0x0e, 0x08, 0x66, 0xf6, 0x14,
0xb7, 0x67, 0x05, 0x7b, 0x22, 0x0e, 0xe4, 0xe0, 0x3a, 0x56, 0xb0, 0x87, 0x99, 0x3d, 0xc5, 0xb9,
0xd6, 0x01, 0x11, 0x01, 0x20, 0x07, 0xf7, 0xd2, 0xa2, 0xfd, 0x51, 0x7b, 0x8a, 0x0b, 0x9c, 0xef,
0x13, 0xe1, 0xf9, 0x39, 0xb8, 0x2d, 0xe7, 0xfb, 0x04, 0x33, 0xfb, 0x38, 0x50, 0x36, 0x66, 0x9b,
0x1a, 0x65, 0xb5, 0x17, 0xa1, 0x42, 0x07, 0x90, 0xb1, 0xbb, 0xce, 0x42, 0xf5, 0xd7, 0x1c, 0x3b,
0xdc, 0xd3, 0x9b, 0xab, 0x5a, 0x08, 0xa0, 0x13, 0x7c, 0xac, 0x10, 0xa0, 0xae, 0x0f, 0xe7, 0x59,
0x83, 0x0a, 0x5d, 0xe8, 0xe3, 0xed, 0xb8, 0x78, 0x7f, 0x7c, 0xa9, 0x80, 0xa4, 0x4e, 0x09, 0xe7,
0x59, 0x84, 0x0a, 0x5d, 0xcb, 0x8c, 0x29, 0x59, 0x84, 0x0a, 0xdd, 0x21, 0xd9, 0xad, 0x74, 0x5d,
0xf4, 0xd6, 0xb2, 0x6c, 0xfd, 0xbb, 0x3a, 0x54, 0xd8, 0xdf, 0x6a, 0x92, 0x3e, 0xf1, 0xab, 0x30,
0x1f, 0x5a, 0x7e, 0x9f, 0x84, 0x8f, 0xc5, 0x55, 0xb3, 0x94, 0xfa, 0xa7, 0x5a, 0xfd, 0x2f, 0x40,
0xed, 0x57, 0x2a, 0x04, 0xeb, 0x0c, 0xb3, 0x1f, 0x9e, 0x8c, 0x4a, 0x3b, 0x3c, 0xef, 0x45, 0x97,
0xb4, 0x4a, 0xce, 0x1f, 0x0a, 0x19, 0x96, 0x5f, 0xf5, 0xe4, 0x8d, 0x0d, 0x3d, 0x86, 0x06, 0x3d,
0x42, 0xe8, 0x34, 0x08, 0xc7, 0xb9, 0x34, 0x1d, 0xdf, 0x15, 0xd6, 0x38, 0xc2, 0xd1, 0x03, 0xac,
0x67, 0xf9, 0x36, 0x1b, 0x95, 0xf0, 0xa2, 0xcb, 0xd3, 0x49, 0x56, 0xa5, 0x39, 0x8e, 0x91, 0xe8,
0x19, 0xcc, 0xd9, 0x24, 0x7a, 0xee, 0x0a, 0xb7, 0x7a, 0x7f, 0x3a, 0xd1, 0x5a, 0x0c, 0xc0, 0x2a,
0x9a, 0x8e, 0x49, 0x3e, 0x71, 0x82, 0xdc, 0x43, 0x95, 0x51, 0xc5, 0xf9, 0x0e, 0x31, 0xd2, 0xbc,
0x08, 0xf3, 0xda, 0xba, 0xfd, 0x4c, 0x4f, 0x57, 0x75, 0x2d, 0x39, 0xcf, 0xed, 0xe8, 0x2a, 0xfe,
0xa1, 0x7e, 0xbc, 0x66, 0xde, 0xbc, 0x05, 0xf0, 0x39, 0x34, 0xe4, 0xc2, 0xa0, 0x47, 0xfa, 0x18,
0x3e, 0xc8, 0x1f, 0x43, 0xb4, 0xa6, 0x82, 0xed, 0x25, 0x34, 0xa3, 0x15, 0xa2, 0xef, 0x63, 0x95,
0xee, 0x6a, 0x3e, 0x5d, 0xbc, 0xba, 0x82, 0x0f, 0xc3, 0x9c, 0xb2, 0x50, 0x68, 0x55, 0x67, 0xfc,
0x30, 0x9f, 0x51, 0x5d, 0xe6, 0xf8, 0x74, 0x8f, 0x56, 0x4c, 0x5d, 0x95, 0x72, 0xbc, 0x2a, 0x3f,
0xae, 0x43, 0x23, 0xfa, 0xfb, 0x68, 0xca, 0x5b, 0x6a, 0xe4, 0x0f, 0x72, 0xdf, 0x52, 0x12, 0xdf,
0xde, 0xf6, 0x07, 0x98, 0x22, 0xe8, 0x12, 0x87, 0x4e, 0x18, 0xb9, 0xea, 0xe5, 0x7c, 0xe8, 0x2b,
0x6a, 0x8e, 0x39, 0x0a, 0x6d, 0xe8, 0xbb, 0x9c, 0xfb, 0xec, 0x87, 0xf9, 0x24, 0x99, 0x3b, 0xbd,
0x0b, 0x4d, 0x87, 0x5e, 0x71, 0x3a, 0xf1, 0xd9, 0x77, 0x35, 0x9f, 0xae, 0x2b, 0x21, 0x38, 0x46,
0xd3, 0xb1, 0xed, 0x5a, 0x63, 0xea, 0xd7, 0x8c, 0xac, 0x36, 0xeb, 0xd8, 0x9e, 0xc4, 0x20, 0xac,
0x32, 0xa0, 0xbb, 0xe2, 0xf6, 0x50, 0xcf, 0x89, 0x2c, 0xf1, 0x54, 0xc5, 0x37, 0x88, 0x6f, 0xc2,
0x02, 0x8f, 0x91, 0x5c, 0x3a, 0xec, 0xda, 0xc2, 0x8d, 0x3f, 0x9a, 0x81, 0x45, 0xc3, 0xe1, 0x04,
0x0f, 0x5d, 0x41, 0x7e, 0x37, 0x69, 0xce, 0xba, 0x82, 0xea, 0xfd, 0x84, 0x3e, 0xa6, 0xb7, 0xfd,
0x41, 0xf6, 0x19, 0xcc, 0x96, 0x3b, 0xa3, 0xf9, 0xbc, 0xee, 0x09, 0xd9, 0x17, 0xd7, 0x68, 0x4d,
0x32, 0x79, 0x94, 0x49, 0xcf, 0x30, 0xba, 0x2f, 0x0e, 0xea, 0x5b, 0xba, 0xbf, 0xbd, 0x9b, 0xf0,
0x37, 0xea, 0x61, 0x9b, 0x3e, 0x61, 0xb2, 0x96, 0x7a, 0x42, 0x5f, 0x82, 0x05, 0x7d, 0x22, 0x33,
0xba, 0x79, 0x2a, 0xef, 0x15, 0xc7, 0x8a, 0x14, 0xc9, 0xb9, 0xe5, 0x5c, 0x3f, 0x2c, 0x42, 0x23,
0xfa, 0xf3, 0xf7, 0xa4, 0xc8, 0xdc, 0x70, 0x82, 0x0e, 0xb1, 0x6c, 0xe2, 0x0b, 0xbf, 0xfd, 0x20,
0xf7, 0xef, 0xea, 0xed, 0xae, 0x40, 0xe0, 0x08, 0x6b, 0x9e, 0x83, 0x86, 0xac, 0xcd, 0x78, 0x7c,
0xfc, 0xfb, 0x3b, 0xec, 0x3a, 0x3c, 0x30, 0x9f, 0xc7, 0x7f, 0x5f, 0xf8, 0xf2, 0x7a, 0xb1, 0xf9,
0x0a, 0x4e, 0xae, 0x59, 0xa1, 0xb5, 0x63, 0x05, 0x04, 0x93, 0x9e, 0xe7, 0xdb, 0xa9, 0xac, 0x3e,
0x6f, 0x12, 0x2a, 0x60, 0x36, 0xab, 0xb0, 0xfb, 0x4a, 0xbf, 0xf9, 0xbf, 0xa3, 0xdf, 0xfc, 0x4d,
0x25, 0x43, 0x54, 0x99, 0xe5, 0x3d, 0x49, 0x37, 0xdc, 0x84, 0xaa, 0x72, 0x57, 0xbf, 0x18, 0x5e,
0xc8, 0x41, 0x6a, 0x37, 0xc3, 0xbb, 0xba, 0xac, 0x92, 0x87, 0xd5, 0x74, 0x95, 0x47, 0x49, 0x5d,
0xe5, 0x52, 0x0e, 0x7a, 0x42, 0x58, 0xb9, 0xab, 0x0b, 0x2b, 0x79, 0xbd, 0xab, 0xca, 0xca, 0x2f,
0x99, 0x96, 0xf1, 0x27, 0x19, 0xaa, 0xc0, 0xd7, 0x75, 0x55, 0x60, 0xca, 0xae, 0xf9, 0x79, 0xc9,
0x02, 0x7f, 0x9a, 0x25, 0x0b, 0xdc, 0xd6, 0x64, 0x81, 0x29, 0x23, 0x4b, 0xea, 0x02, 0x77, 0x75,
0x5d, 0xe0, 0x42, 0x0e, 0x52, 0x13, 0x06, 0x6e, 0x6b, 0xc2, 0x40, 0x5e, 0xa7, 0x8a, 0x32, 0x70,
0x5b, 0x53, 0x06, 0xf2, 0x80, 0x8a, 0x34, 0x70, 0x5b, 0x93, 0x06, 0xf2, 0x80, 0x8a, 0x36, 0x70,
0x5b, 0xd3, 0x06, 0xf2, 0x80, 0x8a, 0x38, 0x70, 0x57, 0x17, 0x07, 0xf2, 0xe7, 0xe7, 0x2b, 0x75,
0xe0, 0x17, 0xa3, 0x0e, 0xfc, 0x41, 0x39, 0x43, 0x1d, 0xc0, 0xe9, 0xea, 0xc0, 0xb5, 0xec, 0x95,
0xcc, 0x97, 0x07, 0x66, 0x3f, 0x05, 0x26, 0xf5, 0x81, 0xfb, 0x09, 0x7d, 0xe0, 0x62, 0x0e, 0x58,
0x17, 0x08, 0xfe, 0xdf, 0xbc, 0x80, 0x7f, 0x54, 0x9b, 0xf2, 0xd8, 0xbb, 0xa3, 0x3e, 0xf6, 0xa6,
0x9c, 0x64, 0x93, 0xaf, 0xbd, 0x07, 0xfa, 0x6b, 0xef, 0xca, 0x0c, 0x58, 0xed, 0xb9, 0xb7, 0x99,
0xf6, 0xdc, 0x6b, 0xcf, 0xc0, 0x92, 0xf9, 0xde, 0x7b, 0x3a, 0xf9, 0xde, 0xbb, 0x36, 0x03, 0x5f,
0xea, 0x83, 0x6f, 0x33, 0xed, 0xc1, 0x37, 0xcb, 0xe8, 0x32, 0x5f, 0x7c, 0xdf, 0xd0, 0x5e, 0x7c,
0x97, 0x67, 0x99, 0xae, 0xf8, 0x70, 0xf8, 0x56, 0xc6, 0x93, 0xef, 0x6b, 0xb3, 0xd0, 0x4c, 0x7d,
0xf3, 0x7d, 0xf5, 0x68, 0x4b, 0x74, 0xf3, 0xa3, 0x26, 0x34, 0x64, 0x32, 0x83, 0xf9, 0x1b, 0x50,
0x97, 0x59, 0xc1, 0x49, 0xcf, 0x39, 0x0d, 0x35, 0x6a, 0x12, 0x25, 0x78, 0x88, 0x12, 0x7a, 0x00,
0x15, 0xfa, 0x4b, 0xb8, 0xc5, 0x07, 0xb3, 0x25, 0x4d, 0xd0, 0x4e, 0x30, 0xc3, 0x99, 0x1f, 0x03,
0x28, 0x59, 0xc2, 0x33, 0xf6, 0x6a, 0xde, 0x82, 0x66, 0x9c, 0xf7, 0x9b, 0x92, 0x8c, 0xc2, 0xcd,
0xe4, 0xcb, 0x44, 0x16, 0xcd, 0x9b, 0xd0, 0x8c, 0x73, 0x79, 0x53, 0xfa, 0x0a, 0x58, 0xa3, 0x40,
0x89, 0x92, 0xb9, 0x0e, 0x6f, 0x4c, 0xe6, 0x6f, 0xa6, 0xbc, 0x88, 0x94, 0x4c, 0x0a, 0x31, 0x5a,
0xb5, 0xca, 0x3c, 0x84, 0x85, 0x44, 0x46, 0xe6, 0xb1, 0x39, 0xd0, 0x4d, 0x68, 0xc8, 0xa2, 0x98,
0xf0, 0xb7, 0x33, 0x72, 0x43, 0x70, 0x64, 0x68, 0xae, 0xc1, 0x42, 0xce, 0xe0, 0x67, 0x49, 0x0d,
0xf9, 0x2e, 0xcc, 0x4d, 0x1b, 0xfb, 0xcf, 0x20, 0x75, 0x25, 0x84, 0xd6, 0x44, 0xde, 0x73, 0xb2,
0x9b, 0x4d, 0x80, 0x7e, 0x64, 0x23, 0xc2, 0xf8, 0x47, 0xc7, 0x48, 0xd4, 0x61, 0x38, 0xac, 0x70,
0x98, 0x7f, 0x51, 0x84, 0x37, 0x26, 0x93, 0x9e, 0x67, 0xdd, 0xfd, 0x06, 0xd4, 0x19, 0x57, 0x94,
0xdf, 0x24, 0x8b, 0xe8, 0x05, 0x9c, 0x08, 0x06, 0x4e, 0x8f, 0xac, 0xee, 0x59, 0x6e, 0x9f, 0xd0,
0x33, 0xb7, 0x9c, 0x9f, 0xb8, 0xbc, 0x15, 0x23, 0xb0, 0x06, 0x37, 0x0f, 0x61, 0x4e, 0x69, 0x44,
0xf7, 0xa0, 0xe4, 0x0d, 0x45, 0x44, 0xb8, 0x36, 0x03, 0xe7, 0xc6, 0x90, 0xf8, 0x7c, 0x5f, 0x94,
0xbc, 0xa1, 0x4c, 0xee, 0x29, 0x45, 0xc9, 0x3d, 0x6a, 0xfe, 0x56, 0x59, 0xcb, 0xdf, 0x5a, 0xfe,
0xfd, 0x22, 0x2c, 0xe8, 0x14, 0xe8, 0x34, 0x20, 0xbd, 0xe6, 0xa5, 0xe7, 0x92, 0x56, 0x01, 0xbd,
0x05, 0x6f, 0xe8, 0xf5, 0x2b, 0xb6, 0xdd, 0x2a, 0x4e, 0x9a, 0xbf, 0xf0, 0xc6, 0xa4, 0x55, 0x42,
0x06, 0x9c, 0x4a, 0x8c, 0x8d, 0xa5, 0x1e, 0xb5, 0xca, 0xe8, 0x1d, 0x78, 0x2b, 0xd9, 0x32, 0x1c,
0x58, 0x3d, 0xd2, 0xaa, 0x98, 0xff, 0x59, 0x82, 0xca, 0x76, 0x40, 0x7c, 0xf3, 0xa7, 0x25, 0x99,
0x2e, 0x74, 0x07, 0x2a, 0x2c, 0x31, 0x59, 0x49, 0x1a, 0x2d, 0x26, 0x92, 0x46, 0xb5, 0x7f, 0x94,
0x1a, 0x27, 0x8d, 0xde, 0x81, 0x0a, 0x4b, 0x45, 0x3e, 0x3e, 0xf2, 0x77, 0x8a, 0xd0, 0x8c, 0xd3,
0x82, 0x8f, 0x8d, 0x57, 0xd3, 0x93, 0x4a, 0x7a, 0x7a, 0xd2, 0x07, 0x50, 0xf5, 0x59, 0x22, 0x11,
0xf7, 0xef, 0x64, 0xd2, 0x13, 0xeb, 0x10, 0x73, 0x13, 0x93, 0xc0, 0x9c, 0x9a, 0xf4, 0x7c, 0xfc,
0x61, 0x5c, 0x10, 0xff, 0xa0, 0xa6, 0x6b, 0x07, 0x2b, 0xbe, 0x6f, 0x1d, 0x89, 0x2d, 0xa1, 0x57,
0xd2, 0xfb, 0xef, 0xa6, 0xe3, 0xf6, 0xd3, 0x73, 0x75, 0xcd, 0xbf, 0x2d, 0x42, 0x5d, 0xa4, 0x10,
0x9b, 0xb7, 0xa1, 0xfc, 0x92, 0x1c, 0xd2, 0x81, 0x88, 0x24, 0xe2, 0x89, 0x81, 0xbc, 0x60, 0x5f,
0x21, 0xec, 0xb1, 0x34, 0x33, 0xef, 0x46, 0xf9, 0xad, 0xc7, 0xc7, 0xde, 0x81, 0x0a, 0xcb, 0x55,
0x3e, 0x3e, 0xf2, 0x77, 0x1b, 0x50, 0xe3, 0x09, 0xaf, 0xe6, 0xff, 0xd4, 0xa1, 0xc6, 0xf3, 0x97,
0xd1, 0x03, 0xa8, 0x07, 0xa3, 0x83, 0x03, 0xcb, 0x3f, 0x32, 0xd2, 0xff, 0xc5, 0xb4, 0x96, 0xee,
0xdc, 0xde, 0xe2, 0xb6, 0x58, 0x82, 0xd0, 0x2d, 0xa8, 0xf4, 0xac, 0x5d, 0x32, 0x21, 0x69, 0xa5,
0x81, 0x57, 0xad, 0x5d, 0x82, 0x99, 0x39, 0x7a, 0x04, 0x0d, 0xb1, 0x2c, 0x3c, 0x01, 0x34, 0xaf,
0x5f, 0xb9, 0x98, 0x11, 0xca, 0x7c, 0x0a, 0x75, 0x31, 0x18, 0xf4, 0x30, 0x4a, 0xf7, 0x4d, 0xde,
0xbe, 0x53, 0x3f, 0xe1, 0xc8, 0xed, 0x25, 0x12, 0x7f, 0xff, 0xb1, 0x04, 0x15, 0x3a, 0xb8, 0x2f,
0xcd, 0x84, 0x96, 0x00, 0x06, 0x56, 0x10, 0x6e, 0x8e, 0x06, 0x03, 0x62, 0x8b, 0x4c, 0x4e, 0xa5,
0x06, 0x5d, 0x81, 0x93, 0xbc, 0x14, 0xec, 0x6d, 0x8d, 0x7a, 0x3d, 0x42, 0x6c, 0x91, 0x3c, 0x99,
0xac, 0x46, 0x2b, 0x50, 0x65, 0xff, 0x60, 0x53, 0x5c, 0x9e, 0xaf, 0xe6, 0xce, 0x6c, 0x7b, 0xd3,
0x71, 0xc5, 0x68, 0x38, 0xd2, 0xf4, 0xa0, 0x19, 0xd5, 0x51, 0x27, 0x1c, 0x3a, 0xae, 0xeb, 0xb8,
0x7d, 0xb1, 0xa3, 0x65, 0x91, 0x86, 0x7b, 0xfa, 0x53, 0x8c, 0xb7, 0x8a, 0x45, 0x89, 0xd6, 0xef,
0x5a, 0xce, 0x40, 0x0c, 0xb1, 0x8a, 0x45, 0x89, 0x32, 0x8d, 0xd8, 0xf6, 0xe5, 0x29, 0xa7, 0x65,
0x2c, 0x8b, 0xe6, 0xe7, 0xc5, 0x28, 0xe7, 0x3d, 0x2d, 0x09, 0x98, 0x89, 0x0a, 0x3c, 0x02, 0x70,
0xbd, 0x60, 0x51, 0xbd, 0xd4, 0xf3, 0x50, 0xac, 0x5c, 0xd3, 0x4f, 0x43, 0xcd, 0x73, 0x07, 0x8e,
0xcb, 0xa5, 0x8f, 0x06, 0x16, 0xa5, 0xc4, 0x1c, 0x57, 0x27, 0xe6, 0x58, 0xb4, 0xaf, 0xdb, 0x0e,
0x1d, 0x62, 0x2d, 0x6e, 0xe7, 0x35, 0xe8, 0x3e, 0xd4, 0x6d, 0x32, 0x76, 0x7a, 0x24, 0x30, 0xea,
0x6c, 0xeb, 0x9d, 0x9f, 0x3a, 0xb7, 0x6b, 0xcc, 0x16, 0x4b, 0x8c, 0x19, 0x42, 0x8d, 0x57, 0x45,
0x9f, 0x54, 0x54, 0x3e, 0x29, 0x1e, 0x74, 0x69, 0xca, 0xa0, 0xcb, 0x39, 0x83, 0xae, 0x24, 0x07,
0xbd, 0xfc, 0x0c, 0x20, 0xde, 0x6e, 0x68, 0x0e, 0xea, 0xdb, 0xee, 0xbe, 0xeb, 0x1d, 0xba, 0xad,
0x02, 0x2d, 0x6c, 0xec, 0xee, 0xd2, 0x5e, 0x5a, 0x45, 0x5a, 0xa0, 0x76, 0x8e, 0xdb, 0x6f, 0x95,
0x10, 0x40, 0x8d, 0x16, 0x88, 0xdd, 0x2a, 0xd3, 0xdf, 0x4f, 0xd8, 0xfa, 0xb5, 0x2a, 0xcb, 0x3f,
0x80, 0x79, 0x4c, 0x82, 0xa1, 0xe7, 0x06, 0xe4, 0xe7, 0xf5, 0xbf, 0x9f, 0xc8, 0xfc, 0x1f, 0x49,
0x2c, 0xff, 0x55, 0x19, 0xaa, 0x2c, 0x44, 0x99, 0x7f, 0x56, 0x8e, 0x82, 0x69, 0x8a, 0x88, 0x1f,
0x4b, 0x6d, 0x0b, 0xca, 0xcd, 0x4a, 0x0b, 0x6e, 0xea, 0x2b, 0xea, 0x86, 0x2a, 0xb1, 0x2d, 0x28,
0xff, 0x6a, 0x43, 0x47, 0x68, 0xd2, 0xda, 0x37, 0xa0, 0x31, 0xf4, 0xbd, 0xbe, 0x4f, 0xa3, 0x68,
0x25, 0xf1, 0xef, 0x97, 0x75, 0xd8, 0xa6, 0x30, 0xc3, 0x11, 0xc0, 0x7c, 0x09, 0x0d, 0x59, 0x9b,
0x91, 0xd5, 0x8d, 0xa0, 0x62, 0x7b, 0x62, 0x27, 0x94, 0x31, 0xfb, 0x4d, 0xe7, 0x45, 0xcc, 0xa0,
0xbc, 0x7b, 0x88, 0xe2, 0xf2, 0x86, 0x78, 0x02, 0xcd, 0x43, 0x73, 0xcd, 0xf7, 0x86, 0x2c, 0xbf,
0xb7, 0x55, 0xa0, 0xeb, 0xd6, 0x3d, 0x18, 0x7a, 0x7e, 0xd8, 0x2a, 0xd2, 0xdf, 0xeb, 0xaf, 0xd9,
0xef, 0x12, 0x3a, 0x01, 0x8d, 0x2d, 0x6b, 0x4c, 0xa8, 0x59, 0xab, 0x8c, 0x10, 0xbd, 0xf6, 0xf6,
0xbc, 0x31, 0xf1, 0x85, 0xff, 0xb5, 0x2a, 0xcb, 0x2b, 0x52, 0xdb, 0x6a, 0x40, 0x45, 0x5c, 0x5a,
0xe6, 0xa0, 0x8e, 0x47, 0xcc, 0xeb, 0x5b, 0x45, 0x5a, 0x4d, 0x8f, 0x12, 0xce, 0xb5, 0x6a, 0xb9,
0x3d, 0x32, 0x60, 0x3b, 0xa5, 0x09, 0xd5, 0x75, 0xdf, 0xf7, 0xfc, 0x56, 0xe5, 0xf1, 0xe2, 0x3f,
0x7d, 0xbe, 0x54, 0xfc, 0xc9, 0xe7, 0x4b, 0xc5, 0xff, 0xf8, 0x7c, 0xa9, 0xf8, 0x87, 0x5f, 0x2c,
0x15, 0x7e, 0xf2, 0xc5, 0x52, 0xe1, 0xdf, 0xbe, 0x58, 0x2a, 0x7c, 0x56, 0x1a, 0xee, 0xec, 0xd4,
0x98, 0x28, 0x71, 0xf3, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x79, 0x72, 0xb0, 0x57, 0x2d, 0x45,
0x00, 0x00,
}
func (m *Event) Marshal() (dAtA []byte, err error) {
@ -9867,6 +9945,29 @@ func (m *EventMessageValueOfSubscriptionCounters) MarshalToSizedBuffer(dAtA []by
}
return len(dAtA) - i, nil
}
func (m *EventMessageValueOfSubscriptionGroups) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *EventMessageValueOfSubscriptionGroups) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
if m.SubscriptionGroups != nil {
{
size, err := m.SubscriptionGroups.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintEvents(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x4
i--
dAtA[i] = 0x82
}
return len(dAtA) - i, nil
}
func (m *EventMessageValueOfPing) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
@ -10752,6 +10853,58 @@ func (m *EventObjectSubscriptionCounters) MarshalToSizedBuffer(dAtA []byte) (int
return len(dAtA) - i, nil
}
func (m *EventObjectSubscriptionGroups) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *EventObjectSubscriptionGroups) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *EventObjectSubscriptionGroups) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if m.Remove {
i--
if m.Remove {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
i--
dAtA[i] = 0x18
}
if m.Group != nil {
{
size, err := m.Group.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintEvents(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x12
}
if len(m.SubId) > 0 {
i -= len(m.SubId)
copy(dAtA[i:], m.SubId)
i = encodeVarintEvents(dAtA, i, uint64(len(m.SubId)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
func (m *EventObjectRelations) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@ -11084,20 +11237,20 @@ func (m *EventBlockMarksInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) {
var l int
_ = l
if len(m.MarksInRange) > 0 {
dAtA63 := make([]byte, len(m.MarksInRange)*10)
var j62 int
dAtA65 := make([]byte, len(m.MarksInRange)*10)
var j64 int
for _, num := range m.MarksInRange {
for num >= 1<<7 {
dAtA63[j62] = uint8(uint64(num)&0x7f | 0x80)
dAtA65[j64] = uint8(uint64(num)&0x7f | 0x80)
num >>= 7
j62++
j64++
}
dAtA63[j62] = uint8(num)
j62++
dAtA65[j64] = uint8(num)
j64++
}
i -= j62
copy(dAtA[i:], dAtA63[:j62])
i = encodeVarintEvents(dAtA, i, uint64(j62))
i -= j64
copy(dAtA[i:], dAtA65[:j64])
i = encodeVarintEvents(dAtA, i, uint64(j64))
i--
dAtA[i] = 0xa
}
@ -16366,6 +16519,18 @@ func (m *EventMessageValueOfSubscriptionCounters) Size() (n int) {
}
return n
}
func (m *EventMessageValueOfSubscriptionGroups) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
if m.SubscriptionGroups != nil {
l = m.SubscriptionGroups.Size()
n += 2 + l + sovEvents(uint64(l))
}
return n
}
func (m *EventMessageValueOfPing) Size() (n int) {
if m == nil {
return 0
@ -16769,6 +16934,26 @@ func (m *EventObjectSubscriptionCounters) Size() (n int) {
return n
}
func (m *EventObjectSubscriptionGroups) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
l = len(m.SubId)
if l > 0 {
n += 1 + l + sovEvents(uint64(l))
}
if m.Group != nil {
l = m.Group.Size()
n += 1 + l + sovEvents(uint64(l))
}
if m.Remove {
n += 2
}
return n
}
func (m *EventObjectRelations) Size() (n int) {
if m == nil {
return 0
@ -20532,6 +20717,41 @@ func (m *EventMessage) Unmarshal(dAtA []byte) error {
}
m.Value = &EventMessageValueOfSubscriptionCounters{v}
iNdEx = postIndex
case 64:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field SubscriptionGroups", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvents
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthEvents
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthEvents
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
v := &EventObjectSubscriptionGroups{}
if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
m.Value = &EventMessageValueOfSubscriptionGroups{v}
iNdEx = postIndex
case 100:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Ping", wireType)
@ -22727,6 +22947,144 @@ func (m *EventObjectSubscriptionCounters) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *EventObjectSubscriptionGroups) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvents
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: Groups: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: Groups: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field SubId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvents
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthEvents
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthEvents
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.SubId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvents
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthEvents
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthEvents
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.Group == nil {
m.Group = &model.BlockContentDataviewGroup{}
}
if err := m.Group.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 3:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Remove", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvents
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
m.Remove = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipEvents(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthEvents
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *EventObjectRelations) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0

View file

@ -1215,10 +1215,12 @@ message Rpc {
}
}
message RelationSearchDistinct {
message GroupsSubscribe {
message Request {
string relationKey = 1;
repeated anytype.model.Block.Content.Dataview.Filter filters = 2;
string subId = 1;
string relationKey = 2;
repeated anytype.model.Block.Content.Dataview.Filter filters = 3;
repeated string source = 4;
}
message Response {
@ -1226,6 +1228,8 @@ message Rpc {
repeated anytype.model.Block.Content.Dataview.Group groups = 2;
string subId = 3;
message Error {
Code code = 1;
string description = 2;

View file

@ -33,6 +33,7 @@ message Event {
Object.Subscription.Remove subscriptionRemove = 61;
Object.Subscription.Position subscriptionPosition = 62;
Object.Subscription.Counters subscriptionCounters = 63;
Object.Subscription.Groups subscriptionGroups = 64;
Block.Add blockAdd = 2;
Block.Delete blockDelete = 3;
@ -174,6 +175,11 @@ message Event {
string subId = 4; // subscription id
}
message Groups {
string subId = 1;
anytype.model.Block.Content.Dataview.Group group = 2;
bool remove = 3;
}
}
message Relations {

View file

@ -50,8 +50,8 @@ 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 ObjectGroupsSubscribe (anytype.Rpc.Object.GroupsSubscribe.Request) returns (anytype.Rpc.Object.GroupsSubscribe.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);
rpc ObjectDuplicate (anytype.Rpc.Object.Duplicate.Request) returns (anytype.Rpc.Object.Duplicate.Response);

View file

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

View file

@ -2,13 +2,10 @@ package objectstore
import (
"context"
"crypto/md5"
"encoding/binary"
"errors"
"fmt"
"github.com/anytypeio/go-anytype-middleware/core/relation/relationutils"
"runtime/debug"
"sort"
"strings"
"sync"
"time"
@ -253,8 +250,6 @@ type ObjectStore interface {
GetDetails(id string) (*model.ObjectDetails, error)
GetAggregatedOptions(relationKey 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)
@ -709,118 +704,7 @@ func (m *dsObjectStore) GetAggregatedOptions(relationKey string) (options []*mod
return
}
func (m *dsObjectStore) RelationSearchDistinct(relationKey string, reqFilters []*model.BlockContentDataviewFilter) ([]*model.BlockContentDataviewGroup, error) {
// todo: should pass workspace
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
})
groups = append([]*model.BlockContentDataviewGroup{{
Id: "empty",
Value: &model.BlockContentDataviewGroupValueOfStatus{Status: &model.BlockContentDataviewStatus{}},
}}, groups...)
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 := strings.Join(tags, "")
if !uniqMap[hash] {
uniqMap[hash] = true
groups = append(groups, &model.BlockContentDataviewGroup{
Id: hash,
Value: &model.BlockContentDataviewGroupValueOfTag{
Tag: &model.BlockContentDataviewTag{
Ids: tags,
}},
})
}
}
}
sort.Slice(groups[:], func(i, j int) bool {
return len(groups[i].Id) > len(groups[j].Id)
})
for i := range groups {
groups[i].Id = fmt.Sprintf("%x", md5.Sum([]byte(groups[i].Id)))
}
groups = append([]*model.BlockContentDataviewGroup{{
Id: "empty",
Value: &model.BlockContentDataviewGroupValueOfTag{
Tag: &model.BlockContentDataviewTag{
Ids: make([]string, 0),
}},
}}, groups...)
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 {
func (m *dsObjectStore) objectTypeFilter(ots ...string) query.Filter {
var filter filterSmartblockTypes
for _, otUrl := range ots {
if ot, err := bundle.GetTypeByUrl(otUrl); err == nil {

View file

@ -295,45 +295,4 @@ func Test_removeByPrefix(t *testing.T) {
got, err = removeByPrefix(ds2.ds, pagesOutboundLinksBase.String())
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(context.Background())
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"}),
},
}, 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"}),
}}, 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, "s3"))
statusOpts, err := ds.RelationSearchDistinct("tag", nil)
require.NoError(t, err)
require.Len(t, statusOpts, 3)
tagsOptsFilter, err := ds.RelationSearchDistinct("tag", []*model.BlockContentDataviewFilter{{RelationKey: "name", Condition: 1, Value: pbtypes.String("three")}})
require.NoError(t, err)
require.Len(t, tagsOptsFilter, 2) // because results should always contain an option with empty tags set
}
}

View file

@ -7,8 +7,10 @@ import (
"context"
"github.com/anytypeio/go-anytype-middleware/app"
"github.com/anytypeio/go-anytype-middleware/app/testapp"
"github.com/anytypeio/go-anytype-middleware/core/kanban"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/core"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/localstore/objectstore"
"github.com/anytypeio/go-anytype-middleware/util/testMock/mockKanban"
"github.com/golang/mock/gomock"
)
@ -38,6 +40,14 @@ func RegisterMockObjectStore(ctrl *gomock.Controller, ta App) *MockObjectStore {
return ms
}
func RegisterMockKanban(ctrl *gomock.Controller, ta App) *mockKanban.MockService {
ms := mockKanban.NewMockService(ctrl)
ms.EXPECT().Name().AnyTimes().Return(kanban.CName)
ms.EXPECT().Init(gomock.Any()).AnyTimes()
ta.Register(ms)
return ms
}
func GetMockAnytype(ta *testapp.TestApp) *MockService {
return ta.MustComponent(core.CName).(*MockService)
}

View file

@ -0,0 +1,2 @@
//go:generate mockgen -package mockKanban -destination kanban_mock.go github.com/anytypeio/go-anytype-middleware/core/kanban Service
package mockKanban