From fb760dc2677abf3ae021aa05559b9505f909bc7a Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Wed, 4 Dec 2024 10:30:11 -0800 Subject: [PATCH 01/25] Add UpsertTrustedClusterV2 rpc This supersedes UpsertTrustedCluster rpc. V2 performs resource name validation. --- api/client/client.go | 27 +- api/client/proto/authservice.pb.go | 1934 +++++++++-------- .../legacy/client/proto/authservice.proto | 8 +- api/types/trustedcluster.go | 14 +- integration/integration_test.go | 30 +- lib/auth/auth_with_roles.go | 18 + lib/auth/grpcserver.go | 22 + lib/auth/trustedcluster.go | 28 +- 8 files changed, 1117 insertions(+), 964 deletions(-) diff --git a/api/client/client.go b/api/client/client.go index c9a89cfdf820e..71b4d82a39f0c 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -2277,16 +2277,29 @@ func (c *Client) GetTrustedClusters(ctx context.Context) ([]types.TrustedCluster } // UpsertTrustedCluster creates or updates a Trusted Cluster. -func (c *Client) UpsertTrustedCluster(ctx context.Context, trusedCluster types.TrustedCluster) (types.TrustedCluster, error) { - trustedCluster, ok := trusedCluster.(*types.TrustedClusterV2) +func (c *Client) UpsertTrustedCluster(ctx context.Context, trustedCluster types.TrustedCluster) (types.TrustedCluster, error) { + trustedClusterV2, ok := trustedCluster.(*types.TrustedClusterV2) if !ok { - return nil, trace.BadParameter("invalid type %T", trusedCluster) + return nil, trace.BadParameter("invalid type %T", trustedCluster) } - resp, err := c.grpc.UpsertTrustedCluster(ctx, trustedCluster) - if err != nil { - return nil, trace.Wrap(err) + if trustedCluster.Origin() != types.OriginKubernetes { + resp, err := c.grpc.UpsertTrustedCluster(ctx, trustedClusterV2) + return resp, trace.Wrap(err) } - return resp, nil + // The Kubernetes Operator must use UpsertTrustedClusterV2 to ensure that + // the trusted_cluster resource name is valid before it is created. + resp, err := c.grpc.UpsertTrustedClusterV2(ctx, trustedClusterV2) + if trace.IsNotImplemented(err) { + // Try to print a nicer error message when newer clients connect to + // older auth servers that don't recognize the new gRPC. + authVersion := "unknown" + if pingResp, err := c.Ping(ctx); err == nil && pingResp.ServerVersion != "" { + authVersion = pingResp.ServerVersion + } + return resp, trace.Wrap(err, "client version (%s) is likely newer than your auth server version (%s), "+ + "consider upgrading your auth server", api.Version, authVersion) + } + return resp, trace.Wrap(err) } // DeleteTrustedCluster deletes a Trusted Cluster by name. diff --git a/api/client/proto/authservice.pb.go b/api/client/proto/authservice.pb.go index ea0cb89fb6621..5eaddd944ea3b 100644 --- a/api/client/proto/authservice.pb.go +++ b/api/client/proto/authservice.pb.go @@ -15836,955 +15836,956 @@ func init() { } var fileDescriptor_0ffcffcda38ae159 = []byte{ - // 15156 bytes of a gzipped FileDescriptorProto + // 15169 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0xbd, 0x5b, 0x6c, 0x5c, 0x59, 0x76, 0x18, 0xaa, 0x2a, 0xbe, 0x17, 0x1f, 0x2a, 0x6d, 0x92, 0x62, 0x89, 0x7a, 0x94, 0x74, 0xd4, 0xea, 0x51, 0x6b, 0x7a, 0xf4, 0x60, 0x3f, 0xa6, 0x5f, 0xd3, 0xdd, 0x55, 0x24, 0x25, 0x52, 0xe2, 0xab, 0x4f, 0x91, 0x54, 0xbf, 0x3c, 0x35, 0x47, 0x55, 0x5b, 0xe4, 0xb1, 0x8a, 0xe7, 0xd4, 0x9c, - 0x73, 0x4a, 0x6a, 0x8d, 0xaf, 0x7d, 0x61, 0xfb, 0x3e, 0x7c, 0x71, 0x71, 0x6f, 0x6c, 0x20, 0x09, - 0x9c, 0xe4, 0xc3, 0x09, 0x90, 0x00, 0x41, 0x80, 0x00, 0xfe, 0x09, 0xfc, 0x13, 0x23, 0xc8, 0x57, - 0x26, 0x06, 0x82, 0xc4, 0xb0, 0xfd, 0x13, 0x20, 0x74, 0x32, 0x80, 0x7f, 0x88, 0xe4, 0xc3, 0x08, - 0x12, 0x20, 0x03, 0x18, 0x08, 0xf6, 0xda, 0x8f, 0xb3, 0xf7, 0x79, 0x54, 0x91, 0x92, 0x7a, 0x9c, - 0x1f, 0x89, 0xb5, 0xf6, 0x5a, 0x6b, 0x3f, 0xcf, 0xde, 0x6b, 0xad, 0xbd, 0xf6, 0x5a, 0x70, 0x33, - 0xa2, 0x6d, 0xda, 0xf1, 0x83, 0xe8, 0x56, 0x9b, 0xee, 0x39, 0xcd, 0xe7, 0xb7, 0x9a, 0x6d, 0x97, - 0x7a, 0xd1, 0xad, 0x4e, 0xe0, 0x47, 0xfe, 0x2d, 0xa7, 0x1b, 0xed, 0x87, 0x34, 0x78, 0xea, 0x36, - 0xe9, 0x4d, 0x84, 0x90, 0x21, 0xfc, 0x6f, 0x7e, 0x66, 0xcf, 0xdf, 0xf3, 0x39, 0x0e, 0xfb, 0x8b, - 0x17, 0xce, 0x9f, 0xdf, 0xf3, 0xfd, 0xbd, 0x36, 0xe5, 0xc4, 0x8f, 0xba, 0x8f, 0x6f, 0xd1, 0x83, - 0x4e, 0xf4, 0x5c, 0x14, 0x56, 0x92, 0x85, 0x91, 0x7b, 0x40, 0xc3, 0xc8, 0x39, 0xe8, 0x08, 0x84, - 0x37, 0x54, 0x53, 0x9c, 0x28, 0x62, 0x25, 0x91, 0xeb, 0x7b, 0xb7, 0x9e, 0xde, 0xd1, 0x7f, 0x0a, - 0xd4, 0xeb, 0x3d, 0x5b, 0xdd, 0xa4, 0x41, 0x14, 0x1e, 0x0b, 0x93, 0x3e, 0xa5, 0x5e, 0x94, 0xaa, - 0x5e, 0x60, 0x46, 0xcf, 0x3b, 0x34, 0xe4, 0x28, 0xf2, 0x3f, 0x81, 0x7a, 0x25, 0x1b, 0x15, 0xff, - 0x15, 0x28, 0xdf, 0xcb, 0x46, 0x79, 0x46, 0x1f, 0xb1, 0x31, 0xf5, 0xd4, 0x1f, 0x7d, 0xd0, 0x03, - 0xa7, 0xd3, 0xa1, 0x41, 0xfc, 0x87, 0x40, 0x3f, 0xa7, 0xd0, 0x0f, 0x1e, 0x3b, 0x6c, 0x88, 0x0e, - 0x1e, 0x3b, 0xa9, 0x6e, 0x74, 0x43, 0x67, 0x8f, 0x8a, 0xe6, 0x3f, 0xbd, 0xa3, 0xff, 0xe4, 0xa8, - 0xd6, 0xef, 0x15, 0x60, 0xe8, 0xa1, 0x13, 0x35, 0xf7, 0xc9, 0x27, 0x30, 0xf4, 0xc0, 0xf5, 0x5a, - 0x61, 0xb9, 0x70, 0x79, 0xe0, 0xfa, 0xf8, 0x42, 0xe9, 0x26, 0xef, 0x0a, 0x16, 0xb2, 0x82, 0xda, - 0xdc, 0x4f, 0x0f, 0x2b, 0xa7, 0x8e, 0x0e, 0x2b, 0xa7, 0x9f, 0x30, 0xb4, 0x37, 0xfd, 0x03, 0x37, - 0xc2, 0xb9, 0xb5, 0x39, 0x1d, 0xd9, 0x81, 0xe9, 0x6a, 0xbb, 0xed, 0x3f, 0xdb, 0x72, 0x82, 0xc8, - 0x75, 0xda, 0xf5, 0x6e, 0xb3, 0x49, 0xc3, 0xb0, 0x5c, 0xbc, 0x5c, 0xb8, 0x3e, 0x5a, 0xbb, 0x7a, - 0x74, 0x58, 0xa9, 0x38, 0xac, 0xb8, 0xd1, 0xe1, 0xe5, 0x8d, 0x90, 0x23, 0x68, 0x8c, 0xb2, 0xe8, - 0xad, 0x3f, 0x1a, 0x86, 0xd2, 0x8a, 0x1f, 0x46, 0x8b, 0x6c, 0x46, 0x6d, 0xfa, 0xe3, 0x2e, 0x0d, - 0x23, 0x72, 0x15, 0x86, 0x19, 0x6c, 0x75, 0xa9, 0x5c, 0xb8, 0x5c, 0xb8, 0x3e, 0x56, 0x1b, 0x3f, - 0x3a, 0xac, 0x8c, 0xec, 0xfb, 0x61, 0xd4, 0x70, 0x5b, 0xb6, 0x28, 0x22, 0x6f, 0xc0, 0xe8, 0x86, - 0xdf, 0xa2, 0x1b, 0xce, 0x01, 0xc5, 0x56, 0x8c, 0xd5, 0x26, 0x8f, 0x0e, 0x2b, 0x63, 0x9e, 0xdf, - 0xa2, 0x0d, 0xcf, 0x39, 0xa0, 0xb6, 0x2a, 0x26, 0xbb, 0x30, 0x68, 0xfb, 0x6d, 0x5a, 0x1e, 0x40, - 0xb4, 0xda, 0xd1, 0x61, 0x65, 0x30, 0xf0, 0xdb, 0xf4, 0xe7, 0x87, 0x95, 0x77, 0xf7, 0xdc, 0x68, - 0xbf, 0xfb, 0xe8, 0x66, 0xd3, 0x3f, 0xb8, 0xb5, 0x17, 0x38, 0x4f, 0x5d, 0xbe, 0x08, 0x9d, 0xf6, - 0xad, 0x78, 0xa9, 0x76, 0x5c, 0x31, 0xef, 0xf5, 0xe7, 0x61, 0x44, 0x0f, 0x18, 0x27, 0x1b, 0xf9, - 0x91, 0x87, 0x30, 0x53, 0x6d, 0xb5, 0x5c, 0x4e, 0xb1, 0x15, 0xb8, 0x5e, 0xd3, 0xed, 0x38, 0xed, - 0xb0, 0x3c, 0x78, 0x79, 0xe0, 0xfa, 0x98, 0x18, 0x14, 0x55, 0xde, 0xe8, 0x28, 0x04, 0x6d, 0x50, - 0x32, 0x19, 0x90, 0xb7, 0x60, 0x74, 0x69, 0xa3, 0xce, 0xda, 0x1e, 0x96, 0x87, 0x90, 0xd9, 0xdc, - 0xd1, 0x61, 0x65, 0xba, 0xe5, 0x85, 0xd8, 0x35, 0x9d, 0x81, 0x42, 0x24, 0xef, 0xc2, 0xc4, 0x56, - 0xf7, 0x51, 0xdb, 0x6d, 0x6e, 0xaf, 0xd5, 0x1f, 0xd0, 0xe7, 0xe5, 0xe1, 0xcb, 0x85, 0xeb, 0x13, - 0x35, 0x72, 0x74, 0x58, 0x99, 0xea, 0x20, 0xbc, 0x11, 0xb5, 0xc3, 0xc6, 0x13, 0xfa, 0xdc, 0x36, - 0xf0, 0x62, 0xba, 0x7a, 0x7d, 0x85, 0xd1, 0x8d, 0xa4, 0xe8, 0xc2, 0x70, 0x5f, 0xa7, 0xe3, 0x78, - 0xe4, 0x16, 0x80, 0x4d, 0x0f, 0xfc, 0x88, 0x56, 0x5b, 0xad, 0xa0, 0x3c, 0x8a, 0x63, 0x7b, 0xfa, - 0xe8, 0xb0, 0x32, 0x1e, 0x20, 0xb4, 0xe1, 0xb4, 0x5a, 0x81, 0xad, 0xa1, 0x90, 0x45, 0x18, 0xb5, - 0x7d, 0x3e, 0xc0, 0xe5, 0xb1, 0xcb, 0x85, 0xeb, 0xe3, 0x0b, 0xa7, 0xc5, 0x32, 0x94, 0xe0, 0xda, - 0xd9, 0xa3, 0xc3, 0x0a, 0x09, 0xc4, 0x2f, 0xbd, 0x97, 0x12, 0x83, 0x54, 0x60, 0x64, 0xc3, 0x5f, - 0x74, 0x9a, 0xfb, 0xb4, 0x0c, 0xb8, 0xf6, 0x86, 0x8e, 0x0e, 0x2b, 0x85, 0xef, 0xd9, 0x12, 0x4a, - 0x9e, 0xc2, 0x78, 0x3c, 0x51, 0x61, 0x79, 0x1c, 0x87, 0x6f, 0xfb, 0xe8, 0xb0, 0x72, 0x36, 0x44, - 0x70, 0x83, 0x4d, 0xbd, 0x36, 0x82, 0x2f, 0xb1, 0x0a, 0xf4, 0x8a, 0xc8, 0xd7, 0x30, 0x1b, 0xff, - 0xac, 0x86, 0x21, 0x0d, 0x18, 0x8f, 0xd5, 0xa5, 0xf2, 0x24, 0x8e, 0xcc, 0xeb, 0x47, 0x87, 0x15, - 0x4b, 0x6b, 0x41, 0xc3, 0x91, 0x28, 0x0d, 0xb7, 0xa5, 0xf5, 0x34, 0x9b, 0xc9, 0xfd, 0xc1, 0xd1, - 0x89, 0xd2, 0xa4, 0x7d, 0x71, 0xc7, 0x0b, 0x23, 0xe7, 0x51, 0x9b, 0x66, 0x22, 0x59, 0x7f, 0x55, - 0x00, 0xb2, 0xd9, 0xa1, 0x5e, 0xbd, 0xbe, 0xc2, 0xbe, 0x27, 0xf9, 0x39, 0xbd, 0x09, 0x63, 0x7c, - 0xe2, 0xd8, 0xec, 0x16, 0x71, 0x76, 0xa7, 0x8e, 0x0e, 0x2b, 0x20, 0x66, 0x97, 0xcd, 0x6c, 0x8c, - 0x40, 0xae, 0xc1, 0xc0, 0xf6, 0xf6, 0x1a, 0x7e, 0x2b, 0x03, 0xb5, 0xe9, 0xa3, 0xc3, 0xca, 0x40, - 0x14, 0xb5, 0x7f, 0x7e, 0x58, 0x19, 0x5d, 0xea, 0x06, 0x38, 0x2c, 0x36, 0x2b, 0x27, 0xd7, 0x60, - 0x64, 0xb1, 0xdd, 0x0d, 0x23, 0x1a, 0x94, 0x07, 0xe3, 0x8f, 0xb4, 0xc9, 0x41, 0xb6, 0x2c, 0x23, - 0xdf, 0x85, 0xc1, 0x9d, 0x90, 0x06, 0xe5, 0x21, 0x9c, 0xef, 0x49, 0x31, 0xdf, 0x0c, 0xb4, 0xbb, - 0x50, 0x1b, 0x65, 0x5f, 0x62, 0x37, 0xa4, 0x81, 0x8d, 0x48, 0xe4, 0x26, 0x0c, 0xf1, 0x49, 0x1b, - 0xc6, 0x4d, 0x6a, 0x52, 0xad, 0x8e, 0x36, 0xdd, 0x7d, 0xb7, 0x36, 0x76, 0x74, 0x58, 0x19, 0xc2, - 0xc9, 0xb3, 0x39, 0xda, 0xfd, 0xc1, 0xd1, 0x42, 0xa9, 0x68, 0x8f, 0x32, 0x5a, 0xf6, 0x59, 0x58, - 0xdf, 0x85, 0x71, 0xad, 0xfb, 0xe4, 0x02, 0x0c, 0xb2, 0xff, 0x71, 0x13, 0x99, 0xe0, 0x95, 0xb1, - 0x83, 0xc3, 0x46, 0xa8, 0xf5, 0xf7, 0xa7, 0xa1, 0xc4, 0x28, 0x8d, 0x9d, 0xe7, 0xa6, 0x3e, 0x54, - 0x9c, 0xae, 0x64, 0x0e, 0x55, 0xb9, 0xa0, 0x0f, 0xd6, 0x75, 0x50, 0xb5, 0x8b, 0x4d, 0x68, 0xe2, - 0xe8, 0xb0, 0x32, 0xda, 0x15, 0xb0, 0xb8, 0x6d, 0xa4, 0x0e, 0x23, 0xcb, 0xdf, 0x74, 0xdc, 0x80, - 0x86, 0x38, 0xb4, 0xe3, 0x0b, 0xf3, 0x37, 0xf9, 0x71, 0x79, 0x53, 0x1e, 0x97, 0x37, 0xb7, 0xe5, - 0x71, 0x59, 0xbb, 0x28, 0x36, 0xe3, 0x33, 0x94, 0x93, 0xc4, 0xeb, 0xe3, 0xb7, 0xff, 0xbc, 0x52, - 0xb0, 0x25, 0x27, 0xf2, 0x26, 0x0c, 0xdf, 0xf5, 0x83, 0x03, 0x27, 0x12, 0x73, 0x30, 0x73, 0x74, - 0x58, 0x29, 0x3d, 0x46, 0x88, 0xb6, 0xa4, 0x04, 0x0e, 0xb9, 0x0b, 0x53, 0xb6, 0xdf, 0x8d, 0xe8, - 0xb6, 0x2f, 0x67, 0x6e, 0x08, 0xa9, 0x2e, 0x1d, 0x1d, 0x56, 0xe6, 0x03, 0x56, 0xd2, 0x88, 0xfc, - 0x86, 0x98, 0x42, 0x8d, 0x3e, 0x41, 0x45, 0x96, 0x61, 0xaa, 0x8a, 0xbb, 0xb7, 0x18, 0x35, 0x3e, - 0x5f, 0x63, 0xb5, 0x8b, 0x47, 0x87, 0x95, 0x73, 0x0e, 0x96, 0x34, 0x02, 0x51, 0xa4, 0xb3, 0x31, - 0x89, 0xc8, 0x06, 0x9c, 0x79, 0xd0, 0x7d, 0x44, 0x03, 0x8f, 0x46, 0x34, 0x94, 0x2d, 0x1a, 0xc1, - 0x16, 0x5d, 0x3e, 0x3a, 0xac, 0x5c, 0x78, 0xa2, 0x0a, 0x33, 0xda, 0x94, 0x26, 0x25, 0x14, 0x4e, - 0x8b, 0x86, 0x2e, 0x39, 0x91, 0xf3, 0xc8, 0x09, 0x29, 0x6e, 0x4a, 0xe3, 0x0b, 0x67, 0xf9, 0x10, - 0xdf, 0x4c, 0x94, 0xd6, 0xae, 0x8a, 0x51, 0x3e, 0xaf, 0xfa, 0xde, 0x12, 0x45, 0x5a, 0x45, 0x49, - 0x9e, 0x6c, 0x6f, 0x56, 0xe7, 0xce, 0x18, 0xb6, 0x16, 0xf7, 0x66, 0x75, 0xee, 0xe8, 0xbb, 0x96, - 0x3a, 0x81, 0xd6, 0x60, 0x68, 0x87, 0x9d, 0xce, 0xb8, 0x67, 0x4d, 0x2d, 0x5c, 0x11, 0x2d, 0x4a, - 0xae, 0xbf, 0x9b, 0xec, 0x07, 0x22, 0xe2, 0x97, 0x77, 0x1a, 0x4f, 0x74, 0xfd, 0x2c, 0xc6, 0x32, - 0xf2, 0x19, 0x80, 0x68, 0x55, 0xb5, 0xd3, 0x29, 0x8f, 0x63, 0x27, 0xcf, 0x98, 0x9d, 0xac, 0x76, - 0x3a, 0xb5, 0x4b, 0xa2, 0x7f, 0x67, 0x55, 0xff, 0x9c, 0x4e, 0x47, 0xe3, 0xa6, 0x31, 0x21, 0x9f, - 0xc0, 0x04, 0x6e, 0x69, 0x72, 0x46, 0x27, 0x70, 0x46, 0xcf, 0x1f, 0x1d, 0x56, 0xe6, 0x70, 0xb7, - 0xca, 0x98, 0x4f, 0x83, 0x80, 0xfc, 0x1a, 0xcc, 0x0a, 0x76, 0x0f, 0x5d, 0xaf, 0xe5, 0x3f, 0x0b, - 0x97, 0x68, 0xf8, 0x24, 0xf2, 0x3b, 0xb8, 0xfd, 0x8d, 0x2f, 0x5c, 0x30, 0x9b, 0x67, 0xe2, 0xd4, - 0x6e, 0x88, 0x96, 0x5a, 0xaa, 0xa5, 0xcf, 0x38, 0x42, 0xa3, 0xc5, 0x31, 0xf4, 0x0d, 0x32, 0x93, - 0x05, 0x59, 0x85, 0xd3, 0x3b, 0x21, 0x35, 0xfa, 0x30, 0x85, 0xe7, 0x43, 0x85, 0xcd, 0x70, 0x37, - 0xa4, 0x8d, 0xbc, 0x7e, 0x24, 0xe9, 0x88, 0x0d, 0x64, 0x29, 0xf0, 0x3b, 0x89, 0x35, 0x7e, 0x1a, - 0x47, 0xc4, 0x3a, 0x3a, 0xac, 0x5c, 0x6a, 0x05, 0x7e, 0xa7, 0x91, 0xbf, 0xd0, 0x33, 0xa8, 0xc9, - 0x0f, 0xe1, 0xec, 0xa2, 0xef, 0x79, 0xb4, 0xc9, 0x76, 0xd0, 0x25, 0xd7, 0xd9, 0xf3, 0xfc, 0x30, - 0x72, 0x9b, 0xab, 0x4b, 0xe5, 0x52, 0x7c, 0x3c, 0x34, 0x15, 0x46, 0xa3, 0xa5, 0x50, 0xcc, 0xe3, - 0x21, 0x87, 0x0b, 0xf9, 0x0a, 0x26, 0x45, 0x5d, 0x34, 0xc0, 0xa5, 0x79, 0xa6, 0xf7, 0x42, 0x53, - 0xc8, 0xfc, 0xa0, 0x0f, 0xe4, 0x4f, 0x2e, 0x3a, 0x99, 0xbc, 0xc8, 0xd7, 0x30, 0xbe, 0x7e, 0xb7, - 0x6a, 0xd3, 0xb0, 0xe3, 0x7b, 0x21, 0x2d, 0x13, 0x9c, 0xd1, 0x4b, 0x82, 0xf5, 0xfa, 0xdd, 0x6a, - 0xb5, 0x1b, 0xed, 0x53, 0x2f, 0x72, 0x9b, 0x4e, 0x44, 0x25, 0x56, 0x6d, 0x9e, 0xad, 0xbc, 0x83, - 0xc7, 0x4e, 0x23, 0x10, 0x10, 0xad, 0x17, 0x3a, 0x3b, 0x32, 0x0f, 0xa3, 0xf5, 0xfa, 0xca, 0x9a, - 0xbf, 0xe7, 0x7a, 0xe5, 0x69, 0x36, 0x18, 0xb6, 0xfa, 0x4d, 0x1e, 0xc3, 0xac, 0xa6, 0x1b, 0x34, - 0xd8, 0xff, 0xf4, 0x80, 0x7a, 0x51, 0x79, 0x06, 0xdb, 0xf0, 0x3d, 0xa5, 0xdc, 0xdc, 0xd4, 0x55, - 0x88, 0xa7, 0x77, 0x6e, 0x56, 0xe3, 0x9f, 0x75, 0x49, 0x54, 0x2b, 0x96, 0x0b, 0xf6, 0x8c, 0x93, - 0x51, 0x42, 0xb6, 0x61, 0x64, 0xab, 0x1b, 0x74, 0xfc, 0x90, 0x96, 0x67, 0x71, 0xe0, 0xae, 0xf6, - 0xfa, 0x42, 0x05, 0x6a, 0x6d, 0x96, 0x6d, 0xd1, 0x1d, 0xfe, 0x43, 0xeb, 0x9d, 0x64, 0x45, 0x3e, - 0x85, 0x89, 0x7a, 0x7d, 0x25, 0x3e, 0x50, 0xce, 0xe2, 0x81, 0x72, 0xe1, 0xe8, 0xb0, 0x52, 0x66, - 0x22, 0x55, 0x7c, 0xa8, 0xe8, 0x5f, 0x95, 0x4e, 0xc1, 0x38, 0x6c, 0xaf, 0xd5, 0x63, 0x0e, 0x73, - 0x31, 0x07, 0x26, 0xcc, 0x65, 0x73, 0xd0, 0x29, 0xc8, 0x3f, 0x2d, 0xc0, 0x65, 0x9d, 0x65, 0xd6, - 0xc0, 0x94, 0xcf, 0xbd, 0xc8, 0x68, 0x2e, 0x1c, 0x1d, 0x56, 0x6e, 0x9a, 0xfd, 0x68, 0x64, 0x4e, - 0x96, 0xd6, 0xb6, 0xbe, 0x4d, 0xc1, 0xf6, 0xea, 0x1d, 0xc8, 0x6c, 0xef, 0xfc, 0x0b, 0xb7, 0xd7, - 0x1c, 0xb5, 0xfe, 0xed, 0xed, 0xd7, 0x14, 0xeb, 0x73, 0x18, 0x53, 0x9b, 0x36, 0x19, 0x81, 0x81, - 0x6a, 0xbb, 0x5d, 0x3a, 0xc5, 0xfe, 0xa8, 0xd7, 0x57, 0x4a, 0x05, 0x32, 0x05, 0x10, 0x9f, 0x54, - 0xa5, 0x22, 0x99, 0x80, 0x51, 0x79, 0x92, 0x94, 0x06, 0x10, 0xbf, 0xd3, 0x29, 0x0d, 0x12, 0x02, - 0x53, 0xe6, 0x7e, 0x56, 0x1a, 0xb2, 0x7e, 0xa7, 0x00, 0x63, 0xea, 0x3b, 0x24, 0xa7, 0x61, 0x7c, - 0x67, 0xa3, 0xbe, 0xb5, 0xbc, 0xb8, 0x7a, 0x77, 0x75, 0x79, 0xa9, 0x74, 0x8a, 0x5c, 0x84, 0x73, - 0xdb, 0xf5, 0x95, 0xc6, 0x52, 0xad, 0xb1, 0xb6, 0xb9, 0x58, 0x5d, 0x6b, 0x6c, 0xd9, 0x9b, 0x9f, - 0x7f, 0xd1, 0xd8, 0xde, 0xd9, 0xd8, 0x58, 0x5e, 0x2b, 0x15, 0x48, 0x19, 0x66, 0x58, 0xf1, 0x83, - 0x9d, 0xda, 0xb2, 0x8e, 0x50, 0x2a, 0x92, 0x2b, 0x70, 0x31, 0xab, 0xa4, 0xb1, 0xb2, 0x5c, 0x5d, - 0x5a, 0x5b, 0xae, 0xd7, 0x4b, 0x03, 0x64, 0x0e, 0xa6, 0x19, 0x4a, 0x75, 0x6b, 0xcb, 0xa0, 0x1d, - 0xb4, 0xda, 0x30, 0xae, 0x7d, 0x00, 0xe4, 0x02, 0x94, 0x17, 0x97, 0xed, 0xed, 0xc6, 0xd6, 0x8e, - 0xbd, 0xb5, 0x59, 0x5f, 0x6e, 0x98, 0x2d, 0x4c, 0x96, 0xae, 0x6d, 0xde, 0x5b, 0xdd, 0x68, 0x30, - 0x50, 0xbd, 0x54, 0x60, 0xcd, 0x30, 0x4a, 0xeb, 0xab, 0x1b, 0xf7, 0xd6, 0x96, 0x1b, 0x3b, 0xf5, - 0x65, 0x81, 0x52, 0xb4, 0x7e, 0xa3, 0x98, 0x3a, 0xd2, 0xc9, 0x02, 0x8c, 0xd7, 0xb9, 0xbd, 0x02, - 0xb7, 0x39, 0xae, 0x20, 0x32, 0x19, 0x6d, 0x42, 0x98, 0x31, 0xf8, 0x0e, 0xa6, 0x23, 0x31, 0x29, - 0x6d, 0x8b, 0x7d, 0xcd, 0x4d, 0xbf, 0xad, 0x4b, 0x69, 0x1d, 0x01, 0xb3, 0x55, 0x29, 0x59, 0xd0, - 0xe4, 0x39, 0xae, 0x2d, 0xa2, 0x46, 0x22, 0xe5, 0x39, 0xfd, 0x6c, 0x57, 0x92, 0xdd, 0x42, 0x3c, - 0xa5, 0x42, 0x0c, 0x43, 0x9a, 0x0c, 0x59, 0x42, 0xe1, 0x91, 0x37, 0xa4, 0xa4, 0xcb, 0xb5, 0x3b, - 0x3c, 0xec, 0x13, 0x7a, 0x89, 0x10, 0x72, 0xad, 0x6e, 0xce, 0xc1, 0x4a, 0x3e, 0x4c, 0xae, 0x19, - 0x31, 0x18, 0xc8, 0x2c, 0x71, 0x7e, 0xda, 0x09, 0x54, 0x52, 0x81, 0x21, 0xbe, 0xe3, 0xf2, 0xf1, - 0x40, 0xd9, 0xba, 0xcd, 0x00, 0x36, 0x87, 0x5b, 0x7f, 0x3c, 0xa0, 0x0b, 0x19, 0x4c, 0x96, 0xd6, - 0xc6, 0x1b, 0x65, 0x69, 0x1c, 0x67, 0x84, 0x32, 0x55, 0x90, 0x7f, 0x25, 0xa8, 0x0a, 0x0e, 0xc4, - 0xaa, 0xa0, 0xf8, 0xd4, 0xb8, 0x2a, 0x18, 0xa3, 0xb0, 0x59, 0x14, 0x62, 0x1b, 0x72, 0x1d, 0x8c, - 0x67, 0x51, 0x88, 0x7a, 0x62, 0x16, 0x35, 0x24, 0xf2, 0x01, 0x40, 0xf5, 0x61, 0x1d, 0x75, 0x1e, - 0x7b, 0x43, 0x88, 0xae, 0x78, 0xc8, 0x38, 0xcf, 0x42, 0xa1, 0x52, 0x05, 0xba, 0xce, 0xa8, 0x61, - 0x93, 0x1a, 0x4c, 0x56, 0x7f, 0xd2, 0x0d, 0xe8, 0x6a, 0x8b, 0x9d, 0x53, 0x11, 0x57, 0x8e, 0xc7, - 0xf8, 0x46, 0xea, 0xb0, 0x82, 0x86, 0x2b, 0x4a, 0x34, 0x06, 0x26, 0x09, 0xd9, 0x84, 0x33, 0xf7, - 0x16, 0xb7, 0xc4, 0xba, 0xaa, 0x36, 0x9b, 0x7e, 0xd7, 0x8b, 0x84, 0xbc, 0x7a, 0xe5, 0xe8, 0xb0, - 0x72, 0x71, 0xaf, 0xd9, 0x69, 0xc8, 0x35, 0xe8, 0xf0, 0x62, 0x5d, 0x60, 0x4d, 0xd1, 0x92, 0xab, - 0x30, 0xb0, 0x63, 0xaf, 0x0a, 0xcd, 0xf9, 0xcc, 0xd1, 0x61, 0x65, 0xb2, 0x1b, 0xb8, 0x1a, 0x09, - 0x2b, 0x25, 0xef, 0x03, 0x6c, 0x3b, 0xc1, 0x1e, 0x8d, 0xb6, 0xfc, 0x20, 0x42, 0x81, 0x73, 0xb2, - 0x76, 0xee, 0xe8, 0xb0, 0x32, 0x1b, 0x21, 0xb4, 0xc1, 0xb6, 0x3f, 0xbd, 0xd3, 0x31, 0xf2, 0xfd, - 0xc1, 0xd1, 0x62, 0x69, 0xc0, 0x1e, 0xab, 0xd3, 0x30, 0xe4, 0xfa, 0x61, 0x1b, 0xa6, 0xee, 0xd1, - 0x88, 0x2d, 0x5c, 0xa9, 0xef, 0xf4, 0x9e, 0xd6, 0x8f, 0x60, 0xfc, 0xa1, 0x1b, 0xed, 0xd7, 0x69, - 0x33, 0xa0, 0x91, 0xb4, 0xf5, 0xe0, 0x90, 0x3f, 0x73, 0xa3, 0xfd, 0x46, 0xc8, 0xe1, 0xfa, 0xb9, - 0xae, 0xa1, 0x5b, 0xcb, 0x70, 0x5a, 0xd4, 0xa6, 0xd4, 0xab, 0x05, 0x93, 0x61, 0x01, 0x19, 0xe2, - 0xb4, 0xeb, 0x0c, 0x4d, 0x36, 0xff, 0xac, 0x08, 0xb3, 0x8b, 0xfb, 0x8e, 0xb7, 0x47, 0xb7, 0x9c, - 0x30, 0x7c, 0xe6, 0x07, 0x2d, 0xad, 0xf1, 0xa8, 0x5b, 0xa6, 0x1a, 0x8f, 0xca, 0xe4, 0x02, 0x8c, - 0x6f, 0xb6, 0x5b, 0x92, 0x46, 0xe8, 0xbd, 0x58, 0x97, 0xdf, 0x6e, 0x35, 0x3a, 0x92, 0x97, 0x8e, - 0xc4, 0x68, 0x36, 0xe8, 0x33, 0x45, 0x33, 0x10, 0xd3, 0x78, 0xf4, 0x99, 0x46, 0xa3, 0x21, 0x91, - 0x65, 0x38, 0x53, 0xa7, 0x4d, 0xdf, 0x6b, 0xdd, 0x75, 0x9a, 0x91, 0x1f, 0x6c, 0xfb, 0x4f, 0xa8, - 0x27, 0x16, 0x34, 0x2a, 0x06, 0x21, 0x16, 0x36, 0x1e, 0x63, 0x69, 0x23, 0x62, 0xc5, 0x76, 0x9a, - 0x82, 0x6c, 0xc2, 0xe8, 0x43, 0x61, 0x31, 0x14, 0xca, 0xf2, 0xb5, 0x9b, 0xca, 0x84, 0xb8, 0x18, - 0x50, 0x5c, 0x85, 0x4e, 0x5b, 0xa9, 0xfb, 0x4a, 0xce, 0xc2, 0xad, 0x4c, 0x62, 0xda, 0x8a, 0x89, - 0xb5, 0x03, 0x93, 0x5b, 0xed, 0xee, 0x9e, 0xeb, 0xb1, 0x4d, 0xa7, 0x4e, 0x7f, 0x4c, 0x96, 0x00, - 0x62, 0x80, 0xb0, 0x03, 0x4e, 0x0b, 0x15, 0x3b, 0x2e, 0xd8, 0x7d, 0x4b, 0x7c, 0xb9, 0x08, 0x41, - 0x8d, 0xc8, 0xd6, 0xe8, 0xac, 0xff, 0x31, 0x00, 0x44, 0x4c, 0x00, 0x1e, 0x82, 0x75, 0x1a, 0xb1, - 0xe3, 0xe9, 0x2c, 0x14, 0x95, 0xb9, 0x6e, 0xf8, 0xe8, 0xb0, 0x52, 0x74, 0x5b, 0x76, 0x71, 0x75, - 0x89, 0xbc, 0x0d, 0x43, 0x88, 0x86, 0xe3, 0x3f, 0xa5, 0xea, 0xd3, 0x39, 0xf0, 0xcd, 0x07, 0x4f, - 0x5f, 0x9b, 0x23, 0x93, 0x77, 0x60, 0x6c, 0x89, 0xb6, 0xe9, 0x9e, 0x13, 0xf9, 0x72, 0x3b, 0xe1, - 0x06, 0x30, 0x09, 0xd4, 0xd6, 0x5c, 0x8c, 0xc9, 0xd4, 0x61, 0x9b, 0x3a, 0xa1, 0xef, 0xe9, 0xea, - 0x70, 0x80, 0x10, 0x5d, 0x1d, 0xe6, 0x38, 0xe4, 0x6f, 0x15, 0x60, 0xbc, 0xea, 0x79, 0xc2, 0xb0, - 0x14, 0x8a, 0x51, 0x9f, 0xbd, 0xa9, 0x2c, 0xb1, 0x6b, 0xce, 0x23, 0xda, 0xde, 0x75, 0xda, 0x5d, - 0x1a, 0xd6, 0xbe, 0x66, 0x1a, 0xca, 0xbf, 0x3f, 0xac, 0x7c, 0x78, 0x02, 0x53, 0x51, 0x6c, 0xd3, - 0xdd, 0x0e, 0x1c, 0x37, 0x0a, 0xd9, 0x57, 0xeb, 0xc4, 0x15, 0xea, 0xdf, 0x8d, 0xd6, 0x8e, 0xf8, - 0x6c, 0x18, 0xee, 0x77, 0x36, 0x90, 0x03, 0x38, 0x5d, 0x0d, 0xc3, 0xee, 0x01, 0xad, 0x47, 0x4e, - 0x10, 0x6d, 0xbb, 0x07, 0x14, 0x37, 0xa4, 0xde, 0xc6, 0x85, 0xef, 0xfc, 0xf4, 0xb0, 0x52, 0x60, - 0x4a, 0x91, 0x83, 0xa4, 0x4c, 0xee, 0x09, 0xa2, 0x46, 0xe4, 0xea, 0xc7, 0x1b, 0x9a, 0x19, 0x92, - 0xbc, 0xad, 0xab, 0x4a, 0x20, 0x59, 0x5d, 0xca, 0x9b, 0x71, 0x6b, 0x11, 0x2e, 0xdc, 0xa3, 0x91, - 0x4d, 0x43, 0x1a, 0xc9, 0x6f, 0x04, 0x57, 0x78, 0x6c, 0xdc, 0x1d, 0xc1, 0xdf, 0x8a, 0x18, 0xa7, - 0x9f, 0x7f, 0x17, 0xb2, 0xc4, 0xfa, 0x3f, 0x0a, 0x50, 0x59, 0x0c, 0x28, 0xd7, 0x27, 0x72, 0x18, - 0xf5, 0xde, 0xbb, 0x2e, 0xc0, 0xe0, 0xf6, 0xf3, 0x8e, 0xb4, 0xca, 0x60, 0x29, 0x9b, 0x14, 0x1b, - 0xa1, 0xc7, 0x34, 0x72, 0x59, 0x8f, 0x61, 0xd6, 0xa6, 0x1e, 0x7d, 0xe6, 0x3c, 0x6a, 0x53, 0xc3, - 0x4e, 0x54, 0x81, 0x21, 0xfe, 0xa1, 0xa7, 0xba, 0xc0, 0xe1, 0x27, 0xb3, 0xb9, 0x59, 0x93, 0x30, - 0xbe, 0xe5, 0x7a, 0x7b, 0x82, 0xbb, 0xf5, 0x17, 0x83, 0x30, 0xc1, 0x7f, 0x0b, 0x15, 0x29, 0x71, - 0x5c, 0x16, 0x8e, 0x73, 0x5c, 0xbe, 0x07, 0x93, 0xec, 0xbc, 0xa1, 0xc1, 0x2e, 0x0d, 0xd8, 0xfe, - 0x2f, 0x46, 0x02, 0xd5, 0xbd, 0x10, 0x0b, 0x1a, 0x4f, 0x79, 0x89, 0x6d, 0x22, 0x92, 0x35, 0x98, - 0xe2, 0x80, 0xbb, 0xd4, 0x89, 0xba, 0xb1, 0xc5, 0xea, 0xb4, 0xd0, 0x89, 0x24, 0x98, 0x2f, 0x4d, - 0xc1, 0xeb, 0xb1, 0x00, 0xda, 0x09, 0x5a, 0xf2, 0x09, 0x9c, 0xde, 0x0a, 0xfc, 0x6f, 0x9e, 0x6b, - 0x02, 0x02, 0xff, 0x3a, 0xb9, 0xf6, 0xc4, 0x8a, 0x1a, 0xba, 0x98, 0x90, 0xc4, 0x26, 0x6f, 0xc0, - 0xe8, 0x6a, 0x58, 0xf3, 0x03, 0xd7, 0xdb, 0xc3, 0x6f, 0x74, 0x94, 0x1b, 0xfa, 0xdd, 0xb0, 0xf1, - 0x08, 0x81, 0xb6, 0x2a, 0x4e, 0x98, 0xa4, 0x47, 0xfa, 0x9b, 0xa4, 0x6f, 0x03, 0xac, 0xf9, 0x4e, - 0xab, 0xda, 0x6e, 0x2f, 0x56, 0x43, 0x3c, 0x89, 0xc5, 0x79, 0xd4, 0xf6, 0x9d, 0x56, 0xc3, 0x69, - 0xb7, 0x1b, 0x4d, 0x27, 0xb4, 0x35, 0x1c, 0xf2, 0x25, 0x9c, 0x0b, 0xdd, 0x3d, 0x0f, 0x3b, 0xd7, - 0x70, 0xda, 0x7b, 0x7e, 0xe0, 0x46, 0xfb, 0x07, 0x8d, 0xb0, 0xeb, 0x46, 0xdc, 0x1e, 0x34, 0xb5, - 0x70, 0x49, 0x6c, 0x72, 0x75, 0x89, 0x57, 0x95, 0x68, 0x75, 0x86, 0x65, 0xcf, 0x85, 0xd9, 0x05, - 0xe4, 0x21, 0x4c, 0xae, 0xb9, 0x4d, 0xea, 0x85, 0x14, 0x0d, 0x7c, 0xcf, 0xd1, 0x5a, 0xd4, 0xfb, - 0x63, 0x66, 0x83, 0x38, 0xd9, 0xd6, 0x89, 0xf0, 0xd3, 0x35, 0xf9, 0xdc, 0x1f, 0x1c, 0x1d, 0x2e, - 0x8d, 0xd8, 0xa7, 0x05, 0xf0, 0xa1, 0x13, 0x78, 0xae, 0xb7, 0x17, 0x5a, 0xff, 0x2f, 0x81, 0x51, - 0x35, 0x4f, 0x37, 0x75, 0x4d, 0x45, 0x1c, 0xcd, 0xb8, 0x64, 0x63, 0x3b, 0x9c, 0xad, 0x61, 0x90, - 0x73, 0xa8, 0xbb, 0x08, 0xa1, 0x60, 0x84, 0x7d, 0x42, 0x4e, 0xa7, 0x63, 0x33, 0x18, 0xdb, 0x1a, - 0x96, 0x6a, 0xb8, 0x68, 0x46, 0xf9, 0xd6, 0xd0, 0x7a, 0x64, 0x17, 0x97, 0x6a, 0xec, 0x9b, 0xdc, - 0x5c, 0x5d, 0x5a, 0xc4, 0xf9, 0x1f, 0xe5, 0xdf, 0xa4, 0xef, 0xb6, 0x9a, 0x36, 0x42, 0x59, 0x69, - 0xbd, 0xba, 0xbe, 0x26, 0xe6, 0x18, 0x4b, 0x43, 0xe7, 0xa0, 0x6d, 0x23, 0x94, 0x49, 0xbb, 0xdc, - 0xa4, 0xb2, 0xe8, 0x7b, 0x51, 0xe0, 0xb7, 0x43, 0x14, 0xe1, 0x46, 0xf9, 0x1a, 0x14, 0xb6, 0x98, - 0xa6, 0x28, 0xb2, 0x13, 0xa8, 0xe4, 0x21, 0xcc, 0x55, 0x5b, 0x4f, 0x1d, 0xaf, 0x49, 0x5b, 0xbc, - 0xe4, 0xa1, 0x1f, 0x3c, 0x79, 0xdc, 0xf6, 0x9f, 0x85, 0xb8, 0x48, 0x46, 0x85, 0xe9, 0x52, 0xa0, - 0x48, 0xd3, 0xce, 0x33, 0x89, 0x64, 0xe7, 0x51, 0xb3, 0x7d, 0x60, 0xb1, 0xed, 0x77, 0x5b, 0x62, - 0xe9, 0xe0, 0x3e, 0xd0, 0x64, 0x00, 0x9b, 0xc3, 0xd9, 0x28, 0xad, 0xd4, 0xd7, 0x71, 0x61, 0x88, - 0x51, 0xda, 0x0f, 0x0f, 0x6c, 0x06, 0x23, 0xd7, 0x60, 0x44, 0x0a, 0xee, 0xfc, 0x26, 0x03, 0x2d, - 0xe8, 0x52, 0x60, 0x97, 0x65, 0xec, 0x3b, 0xb6, 0x69, 0xd3, 0x7f, 0x4a, 0x83, 0xe7, 0x8b, 0x7e, - 0x8b, 0x4a, 0xb3, 0x96, 0x30, 0xdb, 0xf0, 0x82, 0x46, 0x93, 0x95, 0xd8, 0x26, 0x22, 0xab, 0x80, - 0x1f, 0xdc, 0x61, 0xf9, 0x74, 0x5c, 0x01, 0x3f, 0xd8, 0x43, 0x5b, 0x96, 0x91, 0x25, 0x38, 0x53, - 0xed, 0x46, 0xfe, 0x81, 0x13, 0xb9, 0xcd, 0x9d, 0xce, 0x5e, 0xe0, 0xb0, 0x4a, 0x4a, 0x48, 0x80, - 0x8a, 0x8c, 0x23, 0x0b, 0x1b, 0x5d, 0x51, 0x6a, 0xa7, 0x09, 0xc8, 0xbb, 0x30, 0xb1, 0x1a, 0x72, - 0xd3, 0xa5, 0x13, 0xd2, 0x16, 0xda, 0x9f, 0x44, 0x2b, 0xdd, 0xb0, 0x81, 0x86, 0xcc, 0x06, 0x53, - 0x7d, 0x5a, 0xb6, 0x81, 0x47, 0x2c, 0x18, 0xae, 0x86, 0xa1, 0x1b, 0x46, 0x68, 0x56, 0x1a, 0xad, - 0xc1, 0xd1, 0x61, 0x65, 0xd8, 0x41, 0x88, 0x2d, 0x4a, 0xc8, 0x43, 0x18, 0x5f, 0xa2, 0x4c, 0x72, - 0xde, 0x0e, 0xba, 0x61, 0x84, 0x46, 0xa2, 0xf1, 0x85, 0x73, 0x62, 0x37, 0xd2, 0x4a, 0xc4, 0x5a, - 0xe6, 0x22, 0x6a, 0x0b, 0xe1, 0x8d, 0x88, 0x15, 0xe8, 0x47, 0xad, 0x86, 0xcf, 0xd4, 0x02, 0x41, - 0xb3, 0xe2, 0xb6, 0xd8, 0xfe, 0x32, 0x83, 0x6d, 0x40, 0xb5, 0x40, 0x6c, 0x68, 0x8d, 0x7d, 0x2c, - 0xd1, 0xd5, 0x02, 0x83, 0x84, 0x34, 0x53, 0xd6, 0xf0, 0x59, 0xc3, 0xe2, 0x69, 0x16, 0xca, 0x26, - 0x9e, 0xd0, 0x56, 0xfe, 0x11, 0x8c, 0x2f, 0x76, 0xc3, 0xc8, 0x3f, 0xd8, 0xde, 0xa7, 0x07, 0x14, - 0x0d, 0x49, 0x42, 0xf9, 0x69, 0x22, 0xb8, 0x11, 0x31, 0xb8, 0xde, 0x4d, 0x0d, 0x9d, 0x7c, 0x06, - 0x44, 0x6a, 0x31, 0xf7, 0xd8, 0xfa, 0xf0, 0xd8, 0x5a, 0x46, 0x5b, 0xd2, 0x28, 0x57, 0x5d, 0xa4, - 0xf2, 0xd3, 0xd8, 0x53, 0xc5, 0xba, 0x3d, 0x33, 0x4d, 0xcc, 0x1a, 0xc4, 0x9b, 0x78, 0x2f, 0x70, - 0x3a, 0xfb, 0xe5, 0x72, 0xac, 0x1a, 0x88, 0x4e, 0xed, 0x31, 0xb8, 0x21, 0xe2, 0xc4, 0xe8, 0xa4, - 0x0e, 0xc0, 0x7f, 0xae, 0xb1, 0x89, 0xe7, 0xd6, 0xa7, 0xb2, 0x31, 0x5e, 0xac, 0x40, 0x8e, 0x15, - 0xaa, 0x3b, 0x82, 0x6d, 0xdb, 0x35, 0x66, 0x53, 0x63, 0x43, 0x9e, 0x40, 0x89, 0xff, 0x5a, 0xf7, - 0x3d, 0x37, 0xe2, 0xe7, 0xc5, 0xbc, 0x61, 0xaa, 0x4c, 0x16, 0xcb, 0x0a, 0xd0, 0x44, 0x2c, 0x2a, - 0x38, 0x50, 0xa5, 0x5a, 0x35, 0x29, 0xc6, 0x64, 0x0b, 0xc6, 0xb7, 0x02, 0xbf, 0xd5, 0x6d, 0x46, - 0x28, 0x65, 0x9c, 0xc7, 0x8d, 0x9f, 0x88, 0x7a, 0xb4, 0x12, 0x3e, 0x26, 0x1d, 0x0e, 0x68, 0xb0, - 0x73, 0x41, 0x1f, 0x13, 0x0d, 0x91, 0xd4, 0x60, 0x78, 0xcb, 0x6f, 0xbb, 0xcd, 0xe7, 0xe5, 0x0b, - 0xd8, 0xe8, 0x19, 0xc9, 0x0c, 0x81, 0xb2, 0xa9, 0x28, 0xd2, 0x76, 0x10, 0xa4, 0x8b, 0xb4, 0x1c, - 0x89, 0x54, 0x61, 0xf2, 0x33, 0xb6, 0x60, 0x5c, 0xdf, 0xf3, 0x1c, 0x37, 0xa0, 0xe5, 0x8b, 0x38, - 0x2f, 0x68, 0xc6, 0xff, 0xb1, 0x5e, 0xa0, 0x2f, 0x67, 0x83, 0x82, 0xac, 0xc2, 0xe9, 0xd5, 0xb0, - 0x1e, 0x05, 0x6e, 0x87, 0xae, 0x3b, 0x9e, 0xb3, 0x47, 0x5b, 0xe5, 0x4b, 0xb1, 0x1d, 0xdd, 0x0d, - 0x1b, 0x21, 0x96, 0x35, 0x0e, 0x78, 0xa1, 0x6e, 0x47, 0x4f, 0xd0, 0x91, 0xcf, 0x61, 0x66, 0xf9, - 0x9b, 0x88, 0xad, 0x98, 0x76, 0xb5, 0xdb, 0x72, 0xa3, 0x7a, 0xe4, 0x07, 0xce, 0x1e, 0x2d, 0x57, - 0x90, 0xdf, 0x6b, 0x47, 0x87, 0x95, 0xcb, 0x54, 0x94, 0x37, 0x1c, 0x86, 0xd0, 0x08, 0x39, 0x86, - 0x7e, 0x3f, 0x9e, 0xc5, 0x81, 0x8d, 0x7e, 0xbd, 0xdb, 0x61, 0xd2, 0x36, 0x8e, 0xfe, 0x65, 0x63, - 0xf4, 0xb5, 0x12, 0x3e, 0xfa, 0x21, 0x07, 0xa4, 0x46, 0x5f, 0x43, 0x24, 0x36, 0x90, 0xfb, 0xbe, - 0xeb, 0x55, 0x9b, 0x91, 0xfb, 0x94, 0x0a, 0x8d, 0x39, 0x2c, 0x5f, 0xc1, 0x96, 0xa2, 0xcd, 0xff, - 0x97, 0x7d, 0xd7, 0x6b, 0x38, 0x58, 0xdc, 0x08, 0x45, 0xb9, 0xfe, 0x8d, 0xa4, 0xa9, 0xc9, 0x0f, - 0xe1, 0xec, 0xba, 0xff, 0xc8, 0x6d, 0x53, 0xbe, 0xe5, 0xf0, 0x61, 0x41, 0xfb, 0xa5, 0x85, 0x7c, - 0xd1, 0xe6, 0x7f, 0x80, 0x18, 0x0d, 0xb1, 0x5b, 0x1d, 0x28, 0x1c, 0xdd, 0xe6, 0x9f, 0xcd, 0x85, - 0x2c, 0xc3, 0x04, 0x7e, 0x97, 0x6d, 0xfc, 0x19, 0x96, 0xaf, 0xa2, 0x4a, 0x77, 0x25, 0x21, 0xa5, - 0xdd, 0x5c, 0xd6, 0x70, 0x96, 0xbd, 0x28, 0x78, 0x6e, 0x1b, 0x64, 0xe4, 0x63, 0x98, 0x4f, 0x2e, - 0xef, 0x45, 0xdf, 0x7b, 0xec, 0xee, 0x75, 0x03, 0xda, 0x2a, 0xbf, 0xc6, 0x9a, 0x6a, 0xf7, 0xc0, - 0x20, 0x5f, 0xc1, 0x2c, 0x9e, 0x75, 0x55, 0xcf, 0xf7, 0x9e, 0x1f, 0xb8, 0x3f, 0x41, 0xf9, 0x99, - 0x89, 0xbd, 0xd7, 0x50, 0xec, 0xbd, 0x76, 0x74, 0x58, 0xb9, 0x82, 0x67, 0x62, 0xc3, 0xd1, 0x31, - 0x12, 0x56, 0xeb, 0x6c, 0x1e, 0xf3, 0x0f, 0xe1, 0x4c, 0xaa, 0xfd, 0xa4, 0x04, 0x03, 0x4f, 0xc4, - 0xfd, 0xec, 0x98, 0xcd, 0xfe, 0x24, 0x6f, 0xc2, 0xd0, 0x53, 0xa6, 0xa8, 0xa1, 0x38, 0x12, 0xdf, - 0xf8, 0x69, 0xa4, 0xab, 0xde, 0x63, 0xdf, 0xe6, 0x48, 0x1f, 0x14, 0xdf, 0x2b, 0xdc, 0x1f, 0x1c, - 0x1d, 0x2f, 0x4d, 0xf0, 0x6b, 0xf5, 0xfb, 0x83, 0xa3, 0x93, 0xa5, 0x29, 0xab, 0x0a, 0xa7, 0x13, - 0xf8, 0xa4, 0x0c, 0x23, 0xd4, 0x63, 0xc2, 0x7f, 0x8b, 0x0b, 0x44, 0xb6, 0xfc, 0x49, 0x66, 0x60, - 0xa8, 0xed, 0x1e, 0xb8, 0x11, 0x56, 0x38, 0x64, 0xf3, 0x1f, 0xd6, 0xef, 0x16, 0x80, 0xa4, 0xcf, - 0x23, 0x72, 0x2b, 0xc1, 0x86, 0x8b, 0xbe, 0x02, 0xa4, 0x5f, 0x1c, 0x48, 0xee, 0x9f, 0xc1, 0x34, - 0x5f, 0x10, 0xf2, 0xe4, 0xd4, 0xea, 0xe2, 0x3b, 0x76, 0x46, 0xb1, 0x6e, 0x6c, 0x12, 0xc5, 0x78, - 0xce, 0xae, 0x61, 0xd3, 0xba, 0x30, 0x9b, 0x79, 0x12, 0x91, 0x75, 0x98, 0x3d, 0xf0, 0xbd, 0x68, - 0xbf, 0xfd, 0x5c, 0x1e, 0x44, 0xa2, 0xb6, 0x02, 0xd6, 0x86, 0x9b, 0x6f, 0x26, 0x82, 0x3d, 0x2d, - 0xc0, 0x82, 0x23, 0xd6, 0x23, 0x8c, 0x4e, 0xb2, 0x27, 0x96, 0x0d, 0x67, 0x52, 0x1b, 0x3a, 0xf9, - 0x01, 0x4c, 0x34, 0x51, 0xb9, 0x33, 0x6a, 0xe2, 0xc7, 0x99, 0x06, 0xd7, 0xbf, 0x55, 0x0e, 0xe7, - 0x5d, 0xf9, 0x47, 0x05, 0x98, 0xcb, 0xd9, 0xca, 0x4f, 0x3e, 0xd4, 0x5f, 0xc0, 0xd9, 0x03, 0xe7, - 0x9b, 0x46, 0x80, 0xba, 0x7b, 0x23, 0x70, 0xbc, 0xc4, 0x68, 0xe3, 0x36, 0x95, 0x8d, 0xa1, 0xfb, - 0x36, 0x1d, 0x38, 0xdf, 0xd8, 0x88, 0x60, 0xb3, 0x72, 0xde, 0xce, 0x4f, 0x61, 0xd2, 0xd8, 0xbc, - 0x4f, 0xdc, 0x38, 0xeb, 0x0e, 0x9c, 0x59, 0xa2, 0x6d, 0x1a, 0xd1, 0x63, 0xdb, 0xec, 0xac, 0x2d, - 0x80, 0x3a, 0x3d, 0x70, 0x3a, 0xfb, 0x3e, 0x13, 0xea, 0x6b, 0xfa, 0x2f, 0x61, 0xf3, 0x21, 0x52, - 0x3d, 0x91, 0x05, 0xbb, 0x6f, 0x71, 0x41, 0x3f, 0x54, 0x98, 0xb6, 0x46, 0x65, 0xfd, 0x9b, 0x22, - 0x10, 0xb1, 0xfb, 0x06, 0xd4, 0x39, 0x90, 0xcd, 0x78, 0x1f, 0x26, 0xb8, 0x86, 0xce, 0xc1, 0xd8, - 0x9c, 0xf1, 0x85, 0x69, 0xf1, 0xe5, 0xe9, 0x45, 0x2b, 0xa7, 0x6c, 0x03, 0x95, 0x91, 0xda, 0x94, - 0x9b, 0x16, 0x90, 0xb4, 0x68, 0x90, 0xea, 0x45, 0x8c, 0x54, 0xff, 0x4d, 0x3e, 0x81, 0xa9, 0x45, - 0xff, 0xa0, 0xc3, 0xc6, 0x44, 0x10, 0x0f, 0x08, 0xb3, 0x8d, 0xa8, 0xd7, 0x28, 0x5c, 0x39, 0x65, - 0x27, 0xd0, 0xc9, 0x06, 0x4c, 0xdf, 0x6d, 0x77, 0xc3, 0xfd, 0xaa, 0xd7, 0x5a, 0x6c, 0xfb, 0xa1, - 0xe4, 0x32, 0x28, 0x34, 0x2d, 0xb1, 0x77, 0xa6, 0x31, 0x56, 0x4e, 0xd9, 0x59, 0x84, 0xe4, 0x1a, - 0x0c, 0x2d, 0x3f, 0x65, 0x7b, 0xba, 0xf4, 0x70, 0x11, 0x0e, 0x78, 0x9b, 0x1e, 0xdd, 0x7c, 0xbc, - 0x72, 0xca, 0xe6, 0xa5, 0xb5, 0x31, 0x18, 0x91, 0xda, 0xfd, 0x2d, 0x26, 0x6f, 0xab, 0xe1, 0xac, - 0x47, 0x4e, 0xd4, 0x0d, 0xc9, 0x3c, 0x8c, 0xee, 0x74, 0x98, 0xd2, 0x29, 0xcd, 0x22, 0xb6, 0xfa, - 0x6d, 0xbd, 0x69, 0x8e, 0x34, 0xb9, 0x00, 0xb1, 0x4d, 0x57, 0x20, 0x6b, 0x46, 0xde, 0x15, 0x73, - 0x70, 0x7b, 0x63, 0x1b, 0xf5, 0x16, 0x13, 0xf5, 0x96, 0x92, 0x63, 0x6d, 0xcd, 0x66, 0x0e, 0x9e, - 0xf5, 0x39, 0x5c, 0xda, 0xe9, 0x84, 0x34, 0x88, 0xaa, 0x9d, 0x4e, 0xdb, 0x6d, 0xf2, 0x1b, 0x32, - 0xb4, 0x02, 0xc8, 0xc5, 0xf2, 0x2e, 0x0c, 0x73, 0x80, 0x58, 0x26, 0x72, 0x0d, 0x56, 0x3b, 0x1d, - 0x61, 0x7b, 0x78, 0x8b, 0x4b, 0xfe, 0xdc, 0x9a, 0x60, 0x0b, 0x6c, 0xeb, 0xb7, 0x0b, 0x70, 0x89, - 0x7f, 0x01, 0xb9, 0xac, 0xbf, 0x0b, 0x63, 0xe8, 0xff, 0xd6, 0x71, 0x9a, 0xf2, 0x9b, 0xe0, 0x8e, - 0x80, 0x12, 0x68, 0xc7, 0xe5, 0x9a, 0x67, 0x61, 0x31, 0xdf, 0xb3, 0x50, 0x7e, 0x60, 0x03, 0x99, - 0x1f, 0xd8, 0x67, 0x60, 0x89, 0x16, 0xb5, 0xdb, 0xa9, 0x46, 0x85, 0x2f, 0xd2, 0x2a, 0xeb, 0xbf, - 0x14, 0x61, 0xee, 0x1e, 0xf5, 0x68, 0xe0, 0x60, 0x3f, 0x0d, 0x2b, 0x97, 0xee, 0x61, 0x54, 0xe8, - 0xe9, 0x61, 0x54, 0x91, 0x76, 0xc3, 0x22, 0xda, 0x0d, 0x53, 0xee, 0x52, 0x4c, 0x17, 0xdd, 0xb1, - 0x57, 0x45, 0xb7, 0x50, 0x17, 0xed, 0x06, 0x2e, 0xbf, 0x65, 0x58, 0x8d, 0xbd, 0x93, 0x06, 0xfb, - 0xda, 0x1c, 0xa6, 0x85, 0xb7, 0xc6, 0x88, 0xf0, 0x4e, 0x32, 0x7d, 0x92, 0x36, 0x60, 0x98, 0x9b, - 0x3b, 0xf1, 0x6e, 0x6b, 0x7c, 0xe1, 0x86, 0xf8, 0xa6, 0x72, 0x3a, 0x28, 0x6c, 0xa3, 0x78, 0xb0, - 0xf3, 0x25, 0x10, 0x21, 0xc0, 0x16, 0x5c, 0xe6, 0x3f, 0x83, 0x71, 0x0d, 0xe5, 0x38, 0x67, 0xbf, - 0x32, 0xbb, 0x32, 0x71, 0xd4, 0xdb, 0xe3, 0x16, 0x5c, 0xed, 0xec, 0xb7, 0x3e, 0x84, 0x72, 0xba, - 0x35, 0xc2, 0xd4, 0xd6, 0xcf, 0xb2, 0x67, 0x2d, 0xc1, 0xcc, 0x3d, 0x1a, 0xe1, 0xc2, 0xc5, 0x8f, - 0x48, 0xf3, 0xb2, 0x4b, 0x7c, 0x67, 0x72, 0x57, 0x45, 0x20, 0x5b, 0x60, 0xda, 0x57, 0x5a, 0x87, - 0xd9, 0x04, 0x17, 0x51, 0xff, 0x07, 0x30, 0x22, 0x40, 0x6a, 0x47, 0x15, 0xae, 0xba, 0xf4, 0x91, - 0x28, 0xd8, 0x5d, 0xe0, 0xeb, 0x56, 0x70, 0xb6, 0x25, 0x81, 0xb5, 0x0f, 0x67, 0xd9, 0x31, 0x1b, - 0x73, 0x55, 0xcb, 0xf1, 0x3c, 0x8c, 0x75, 0x98, 0xa0, 0x10, 0xba, 0x3f, 0xe1, 0xcb, 0x68, 0xc8, - 0x1e, 0x65, 0x80, 0xba, 0xfb, 0x13, 0x4a, 0x2e, 0x02, 0x60, 0x21, 0x76, 0x53, 0xec, 0x02, 0x88, - 0xce, 0x4d, 0x99, 0x04, 0xd0, 0x47, 0x8f, 0xaf, 0x1b, 0x1b, 0xff, 0xb6, 0x02, 0x98, 0x4b, 0xd5, - 0x24, 0x3a, 0x70, 0x0b, 0x46, 0xa5, 0x7c, 0x9c, 0xb8, 0x64, 0xd0, 0x7b, 0x60, 0x2b, 0x24, 0xf2, - 0x3a, 0x9c, 0xf6, 0xe8, 0x37, 0x51, 0x23, 0xd5, 0x86, 0x49, 0x06, 0xde, 0x92, 0xed, 0xb0, 0x7e, - 0x09, 0x0d, 0xcb, 0x75, 0xcf, 0x7f, 0xf6, 0xb8, 0xed, 0x3c, 0xa1, 0xa9, 0x8a, 0x7f, 0x00, 0xa3, - 0xf5, 0xfe, 0x15, 0xf3, 0xcf, 0x47, 0x56, 0x6e, 0x2b, 0x12, 0xab, 0x0d, 0xf3, 0xac, 0x4b, 0xf5, - 0xea, 0xfa, 0xda, 0x6a, 0x6b, 0xeb, 0xdb, 0x1e, 0xc0, 0xa7, 0x70, 0x3e, 0xb3, 0xb6, 0x6f, 0x7b, - 0x10, 0xff, 0x70, 0x10, 0xe6, 0xf8, 0x61, 0x92, 0x5e, 0xc1, 0xc7, 0xdf, 0x6a, 0x7e, 0x21, 0xf7, - 0xbd, 0xb7, 0x33, 0xee, 0x7b, 0x91, 0x44, 0xbf, 0xef, 0x35, 0x6e, 0x79, 0xdf, 0xcb, 0xbe, 0xe5, - 0x45, 0x23, 0x94, 0x79, 0xcb, 0x9b, 0xbc, 0xdb, 0x5d, 0xce, 0xbf, 0xdb, 0xc5, 0x8b, 0xa7, 0x8c, - 0xbb, 0xdd, 0xac, 0x1b, 0xdd, 0x84, 0xa3, 0xd4, 0xe8, 0xab, 0x75, 0x94, 0x7a, 0x1d, 0x46, 0xaa, - 0x9d, 0x8e, 0xe6, 0x78, 0x88, 0xd3, 0xe3, 0x74, 0x3a, 0x7c, 0xf0, 0x64, 0xa1, 0xdc, 0xe7, 0x21, - 0x63, 0x9f, 0x7f, 0x1f, 0x60, 0x11, 0x9f, 0x47, 0xe0, 0xc4, 0x8d, 0x23, 0x06, 0x4a, 0xf8, 0xfc, - 0xd1, 0x04, 0x4e, 0x9c, 0x6e, 0x5e, 0x89, 0x91, 0xb9, 0x60, 0x6f, 0xed, 0x42, 0x39, 0xbd, 0x7c, - 0x5e, 0xc1, 0xd6, 0xf5, 0x07, 0x05, 0xb8, 0x28, 0x84, 0x9c, 0xc4, 0x07, 0x7e, 0xf2, 0xd5, 0xf9, - 0x0e, 0x4c, 0x08, 0xda, 0xed, 0xf8, 0x43, 0xe0, 0x17, 0xec, 0x72, 0x33, 0xe6, 0x3b, 0xba, 0x81, - 0x46, 0xde, 0x81, 0x51, 0xfc, 0x23, 0xbe, 0x18, 0x62, 0x23, 0x33, 0x86, 0xa8, 0x8d, 0xe4, 0xf5, - 0x90, 0x42, 0xb5, 0xbe, 0x86, 0x4b, 0x79, 0x0d, 0x7f, 0x05, 0xe3, 0xf2, 0x2f, 0x0b, 0x70, 0x5e, - 0xb0, 0x37, 0xb6, 0x8a, 0x17, 0x3a, 0x75, 0x4e, 0xe0, 0xae, 0x7c, 0x1f, 0xc6, 0x59, 0x85, 0xb2, - 0xdd, 0x03, 0xe2, 0x68, 0x15, 0x9a, 0x43, 0x5c, 0xb2, 0xe4, 0x44, 0x8e, 0x70, 0xbf, 0x71, 0x0e, - 0xda, 0xd2, 0x32, 0x62, 0xeb, 0xc4, 0xd6, 0x97, 0x70, 0x21, 0xbb, 0x0b, 0xaf, 0x60, 0x7c, 0xee, - 0xc3, 0x7c, 0xc6, 0xa1, 0xf0, 0x62, 0x67, 0xf2, 0x17, 0x70, 0x3e, 0x93, 0xd7, 0x2b, 0x68, 0xe6, - 0x0a, 0x93, 0x38, 0xa2, 0x57, 0x30, 0x85, 0xd6, 0x43, 0x38, 0x97, 0xc1, 0xe9, 0x15, 0x34, 0xf1, - 0x1e, 0xcc, 0x29, 0x49, 0xfb, 0xa5, 0x5a, 0xb8, 0x0e, 0x17, 0x39, 0xa3, 0x57, 0x33, 0x2b, 0x0f, - 0xe0, 0xbc, 0x60, 0xf7, 0x0a, 0x46, 0x6f, 0x05, 0x2e, 0xc4, 0x0a, 0x75, 0x86, 0x9c, 0x74, 0xec, - 0x4d, 0xc6, 0x5a, 0x83, 0xcb, 0x31, 0xa7, 0x1c, 0xa1, 0xe1, 0xf8, 0xdc, 0xb8, 0x38, 0x18, 0xcf, - 0xd2, 0x2b, 0x99, 0xd1, 0x87, 0x70, 0xd6, 0x60, 0xfa, 0xca, 0x44, 0xa5, 0x55, 0x98, 0xe6, 0x8c, - 0x4d, 0xd1, 0x79, 0x41, 0x17, 0x9d, 0xc7, 0x17, 0xce, 0xc4, 0x2c, 0x11, 0xbc, 0xfb, 0x56, 0x86, - 0x34, 0xbd, 0x8e, 0xd2, 0xb4, 0x44, 0x89, 0x5b, 0xf8, 0x0e, 0x0c, 0x73, 0x88, 0x68, 0x5f, 0x06, - 0x33, 0xae, 0x2c, 0x70, 0x32, 0x81, 0x6c, 0xfd, 0x10, 0x2e, 0x72, 0x4d, 0x34, 0xbe, 0xa8, 0x34, - 0xb5, 0xc5, 0x1f, 0x24, 0x14, 0xd1, 0x73, 0x82, 0x6f, 0x12, 0x3f, 0x47, 0x1f, 0x7d, 0x24, 0xd7, - 0x76, 0x1e, 0xff, 0x63, 0x3d, 0x5d, 0x93, 0x0a, 0x66, 0x31, 0x53, 0xc1, 0xbc, 0x0a, 0x57, 0x94, - 0x82, 0x99, 0xac, 0x46, 0x2e, 0x2d, 0xeb, 0x4b, 0x38, 0xcf, 0x3b, 0x2a, 0x5d, 0x0a, 0xcd, 0x66, - 0x7c, 0x98, 0xe8, 0xe6, 0x9c, 0xe8, 0xa6, 0x89, 0x9d, 0xd3, 0xc9, 0xff, 0xaf, 0x20, 0x3f, 0xb9, - 0x6c, 0xe6, 0xbf, 0x68, 0x8d, 0x7b, 0x03, 0x2a, 0x6a, 0x40, 0xcc, 0x16, 0xbd, 0x98, 0xba, 0xbd, - 0x0e, 0xb3, 0x3a, 0x1b, 0xb7, 0x49, 0x77, 0xef, 0xe0, 0x0d, 0xd2, 0xdb, 0xec, 0xb3, 0x40, 0x80, - 0x5c, 0x76, 0xe5, 0x8c, 0x71, 0x43, 0x7c, 0x5b, 0x61, 0x5a, 0x0d, 0xb8, 0x90, 0x9e, 0x0a, 0xb7, - 0x29, 0xdf, 0x13, 0x90, 0x4f, 0xd8, 0x27, 0x8c, 0x10, 0x31, 0x19, 0xb9, 0x4c, 0xe5, 0x77, 0xcc, - 0xc9, 0x25, 0x95, 0x65, 0xc9, 0xad, 0x26, 0xd1, 0x7f, 0x56, 0xbb, 0x5c, 0x0f, 0xbf, 0x0a, 0x44, - 0x16, 0x2d, 0xd6, 0x6d, 0x59, 0xf5, 0x39, 0x18, 0x58, 0xac, 0xdb, 0xe2, 0x21, 0x13, 0x4a, 0x82, - 0xcd, 0x30, 0xb0, 0x19, 0x2c, 0x29, 0x91, 0x17, 0x8f, 0x21, 0x91, 0xdf, 0x1f, 0x1c, 0x1d, 0x28, - 0x0d, 0xda, 0xa4, 0xee, 0xee, 0x79, 0x0f, 0xdd, 0x68, 0x5f, 0x55, 0x58, 0xb5, 0xbe, 0x82, 0x69, - 0xa3, 0x7a, 0xf1, 0x15, 0xf7, 0x7c, 0x81, 0xc5, 0xe4, 0xd9, 0xc5, 0x2a, 0xba, 0xd5, 0xa0, 0xc9, - 0x62, 0x82, 0xef, 0x37, 0x4d, 0xa7, 0x81, 0xcf, 0x7b, 0x6d, 0x59, 0x68, 0xfd, 0xc3, 0x41, 0x8d, - 0xbb, 0xf6, 0xae, 0xad, 0x47, 0xef, 0xee, 0x00, 0xf0, 0x15, 0xa2, 0x75, 0x8e, 0x09, 0x80, 0xe3, - 0xc2, 0x5b, 0x85, 0x6f, 0xc9, 0xb6, 0x86, 0x74, 0xdc, 0x77, 0x6f, 0xc2, 0xff, 0x98, 0x13, 0xc9, - 0xa7, 0x9e, 0xca, 0xff, 0x58, 0xb0, 0x0e, 0x6d, 0x1d, 0x89, 0xfc, 0x30, 0xf9, 0x38, 0x63, 0x08, - 0x2f, 0xac, 0x5e, 0x93, 0x37, 0xd8, 0xe9, 0xbe, 0x9d, 0xec, 0x7d, 0xc6, 0x33, 0x98, 0x65, 0xb4, - 0xee, 0x63, 0x54, 0x2c, 0x96, 0xbf, 0x89, 0xa8, 0xc7, 0xf7, 0xf6, 0x61, 0xac, 0xe7, 0x5a, 0x8f, - 0x7a, 0x62, 0x64, 0x61, 0x7f, 0x8f, 0xf9, 0x34, 0xa8, 0x2a, 0xb3, 0xb3, 0xf9, 0xe3, 0x22, 0xb2, - 0xd7, 0x96, 0xbd, 0x56, 0xc7, 0x77, 0x95, 0xc2, 0xc4, 0x17, 0x51, 0xd0, 0x6e, 0x50, 0x01, 0xb7, - 0x75, 0x24, 0xeb, 0xf5, 0x9e, 0x5e, 0xed, 0xa3, 0x30, 0xb8, 0xbd, 0xb8, 0xbd, 0x56, 0x2a, 0x58, - 0xb7, 0x00, 0xb4, 0x9a, 0x00, 0x86, 0x37, 0x36, 0xed, 0xf5, 0xea, 0x5a, 0xe9, 0x14, 0x99, 0x85, - 0x33, 0x0f, 0x57, 0x37, 0x96, 0x36, 0x1f, 0xd6, 0x1b, 0xf5, 0xf5, 0xaa, 0xbd, 0xbd, 0x58, 0xb5, - 0x97, 0x4a, 0x05, 0xeb, 0x6b, 0x98, 0x31, 0x7b, 0xf8, 0x4a, 0x17, 0x61, 0x04, 0xd3, 0x4a, 0x9e, - 0xb9, 0xff, 0x70, 0x5b, 0xf3, 0x68, 0x15, 0xca, 0x5f, 0xd2, 0x33, 0x4b, 0xa8, 0x89, 0xe2, 0x33, - 0xd2, 0x90, 0xc8, 0x1b, 0x5c, 0x2c, 0x48, 0xbe, 0x5c, 0x66, 0x62, 0x41, 0x23, 0x96, 0x0b, 0x70, - 0xeb, 0xfb, 0x3e, 0xcc, 0x98, 0xb5, 0x1e, 0xd7, 0x4a, 0xf5, 0x1a, 0xba, 0xfa, 0x6a, 0xcf, 0x9a, - 0x08, 0xd1, 0xaf, 0x0d, 0xc4, 0xce, 0xfa, 0x7d, 0x28, 0x09, 0xac, 0xf8, 0xe4, 0xbd, 0x2a, 0xcd, - 0x88, 0x85, 0x8c, 0x47, 0x98, 0xd2, 0x29, 0xdd, 0x87, 0x12, 0xdb, 0x31, 0x05, 0x25, 0xaf, 0x60, - 0x06, 0x86, 0xd6, 0xe2, 0xeb, 0x1c, 0x9b, 0xff, 0xc0, 0xd7, 0x3d, 0x91, 0x13, 0x44, 0xd2, 0x0f, - 0x6e, 0xcc, 0x56, 0xbf, 0xc9, 0x1b, 0x30, 0x7c, 0xd7, 0x6d, 0x47, 0xc2, 0x34, 0x12, 0x1f, 0xf2, - 0x8c, 0x2d, 0x2f, 0xb0, 0x05, 0x82, 0x65, 0xc3, 0x19, 0xad, 0xc2, 0x13, 0x34, 0x95, 0x94, 0x61, - 0x64, 0x83, 0x7e, 0xa3, 0xd5, 0x2f, 0x7f, 0x5a, 0xef, 0xc2, 0x19, 0xe1, 0x63, 0xa8, 0x0d, 0xd3, - 0x15, 0xf1, 0x56, 0xbc, 0x60, 0x3c, 0x58, 0x15, 0x2c, 0xb1, 0x88, 0xd1, 0xed, 0x74, 0x5a, 0x2f, - 0x48, 0xc7, 0x0e, 0x8a, 0x13, 0xd2, 0x7d, 0x47, 0xde, 0x02, 0xf5, 0x9b, 0xce, 0xff, 0xab, 0x08, - 0xe5, 0x84, 0x95, 0x61, 0x71, 0xdf, 0x69, 0xb7, 0xa9, 0xb7, 0x47, 0xc9, 0x75, 0x18, 0xdc, 0xde, - 0xdc, 0xde, 0x12, 0x56, 0x52, 0xe9, 0x5d, 0xc0, 0x40, 0x0a, 0xc7, 0x46, 0x0c, 0xf2, 0x00, 0xce, - 0x48, 0x2f, 0x62, 0x55, 0x24, 0x66, 0xe8, 0x62, 0x6f, 0x9f, 0xe4, 0x34, 0x1d, 0x79, 0x5b, 0x98, - 0x44, 0x7e, 0xdc, 0x75, 0x03, 0xda, 0x42, 0xcb, 0x4f, 0x7c, 0x55, 0xaf, 0x95, 0xd8, 0x3a, 0x1a, - 0xf9, 0x3e, 0x4c, 0xd4, 0xeb, 0x9b, 0x71, 0xed, 0x43, 0xc6, 0x0d, 0x91, 0x5e, 0x64, 0x1b, 0x88, - 0xfc, 0x49, 0xb0, 0xf5, 0x87, 0x05, 0x98, 0xcb, 0x31, 0xb7, 0x90, 0x37, 0x8c, 0x71, 0x98, 0xd6, - 0xc6, 0x41, 0xa2, 0xac, 0x9c, 0x12, 0x03, 0xb1, 0xa8, 0xf9, 0x64, 0x0f, 0x9c, 0xc0, 0x27, 0x7b, - 0xe5, 0x54, 0xec, 0x87, 0x4d, 0x5e, 0x87, 0x81, 0x7a, 0x7d, 0x53, 0x98, 0xd5, 0x49, 0xdc, 0x03, - 0x0d, 0x99, 0x21, 0xd4, 0x00, 0x46, 0x25, 0xc8, 0x3a, 0x0d, 0x93, 0xc6, 0xc4, 0x58, 0x16, 0x4c, - 0xe8, 0x2d, 0x64, 0xb3, 0xbf, 0xe8, 0xb7, 0xd4, 0xec, 0xb3, 0xbf, 0xad, 0x5f, 0x35, 0xc7, 0x8c, - 0x5c, 0x04, 0x90, 0xf7, 0xb5, 0x6e, 0x4b, 0xde, 0xfc, 0x08, 0xc8, 0x6a, 0x8b, 0x5c, 0x81, 0x89, - 0x80, 0xb6, 0xdc, 0x80, 0x36, 0xa3, 0x46, 0x37, 0x10, 0x0f, 0x63, 0xec, 0x71, 0x09, 0xdb, 0x09, - 0xda, 0xe4, 0xbb, 0x30, 0xcc, 0x2f, 0x92, 0x45, 0xef, 0xa5, 0x92, 0x50, 0xaf, 0x6f, 0xae, 0xdf, - 0xad, 0xf2, 0x8b, 0x6e, 0x5b, 0xa0, 0x58, 0x35, 0x18, 0xd7, 0x7a, 0xd5, 0xaf, 0xf6, 0x19, 0x18, - 0xd2, 0xad, 0x94, 0xfc, 0x87, 0xf5, 0x3b, 0x05, 0x98, 0xc1, 0x65, 0xb0, 0xe7, 0xb2, 0xe3, 0x21, - 0xee, 0xcb, 0x82, 0x31, 0x69, 0x17, 0x8c, 0x49, 0x4b, 0xe0, 0xaa, 0xd9, 0xfb, 0x20, 0x35, 0x7b, - 0x17, 0xb2, 0x66, 0x0f, 0xb7, 0x00, 0xd7, 0xf7, 0xf4, 0x49, 0xd3, 0xaf, 0xeb, 0x7e, 0xb7, 0x00, - 0xd3, 0x5a, 0x9b, 0x54, 0x07, 0xef, 0x18, 0x4d, 0x3a, 0x9f, 0xd1, 0xa4, 0xd4, 0x7a, 0xaa, 0xa5, - 0x5a, 0xf4, 0x5a, 0xaf, 0x16, 0x65, 0x2d, 0x27, 0x63, 0x99, 0xfc, 0x45, 0x01, 0x66, 0x33, 0xc7, - 0x80, 0x9c, 0x65, 0xf2, 0x7f, 0x33, 0xa0, 0x91, 0x18, 0x79, 0xf1, 0x8b, 0xc1, 0x57, 0xc3, 0xb0, - 0x4b, 0x03, 0x31, 0xee, 0xe2, 0x17, 0x79, 0x0d, 0x26, 0xb7, 0x68, 0xe0, 0xfa, 0x2d, 0xfe, 0x30, - 0x81, 0x7b, 0xfc, 0x4e, 0xda, 0x26, 0x90, 0x5c, 0x80, 0x31, 0xe5, 0xb1, 0xca, 0x6d, 0xb8, 0x76, - 0x0c, 0x60, 0xbc, 0x97, 0xdc, 0x3d, 0x7e, 0xf1, 0xc3, 0x88, 0xc5, 0x2f, 0xb6, 0x01, 0x4b, 0x8b, - 0xea, 0x30, 0xdf, 0x80, 0xa5, 0xb9, 0xf4, 0x2c, 0x0c, 0x7f, 0x66, 0xe3, 0x3a, 0xc6, 0x98, 0x13, - 0xb6, 0xf8, 0x45, 0xa6, 0xd0, 0xb5, 0x1c, 0xdf, 0xc5, 0xa0, 0x4b, 0xf9, 0x07, 0x30, 0x93, 0x35, - 0xae, 0x59, 0x5f, 0x81, 0xa0, 0x2d, 0x2a, 0xda, 0x2f, 0x61, 0xba, 0xda, 0x6a, 0xc5, 0xcb, 0x95, - 0xcf, 0x2a, 0xdf, 0x27, 0xb8, 0x4d, 0x53, 0x88, 0xb5, 0x83, 0xab, 0x9e, 0x1b, 0xd9, 0xd3, 0xcb, - 0xdf, 0xb8, 0x61, 0xe4, 0x7a, 0x7b, 0x9a, 0xe1, 0xd5, 0x3e, 0xbb, 0x41, 0x9f, 0x65, 0x2c, 0x01, - 0x26, 0x71, 0x98, 0xbc, 0x39, 0x3c, 0x83, 0xf9, 0x8c, 0xc6, 0x36, 0xde, 0xba, 0xe6, 0x4c, 0xbe, - 0x71, 0xc1, 0x40, 0xb5, 0xf9, 0xc4, 0xfa, 0x3e, 0x9c, 0xe5, 0xdb, 0x7e, 0xaf, 0xc6, 0x8b, 0x66, - 0xeb, 0x76, 0x62, 0xeb, 0x3d, 0x69, 0xc9, 0xe9, 0xd9, 0x32, 0x7b, 0xc2, 0x68, 0x0b, 0x56, 0xf9, - 0x9f, 0x0b, 0x30, 0x9f, 0x20, 0xad, 0x3f, 0xf7, 0x9a, 0xf2, 0xcc, 0x79, 0x3d, 0xe9, 0xba, 0x8f, - 0xb2, 0x12, 0x37, 0x90, 0xba, 0x2d, 0xe5, 0xbd, 0x4f, 0x6e, 0x01, 0x70, 0x62, 0x4d, 0xc4, 0xc1, - 0xeb, 0x01, 0xe1, 0xe5, 0x84, 0x42, 0x8e, 0x86, 0x42, 0xba, 0x90, 0x35, 0xee, 0xe2, 0x1b, 0xe9, - 0x67, 0x3f, 0xc7, 0x38, 0x2b, 0x54, 0x90, 0x37, 0x72, 0x0c, 0xe9, 0x59, 0xfc, 0xad, 0xff, 0x7f, - 0x00, 0xe6, 0xf4, 0x09, 0x7c, 0x91, 0xbe, 0x6e, 0xc1, 0xf8, 0xa2, 0xef, 0x45, 0xf4, 0x9b, 0x48, - 0x8b, 0x73, 0x41, 0x94, 0x37, 0x82, 0x2a, 0x11, 0xe2, 0x35, 0x07, 0x34, 0x98, 0xac, 0x67, 0x78, - 0x6b, 0xc6, 0x88, 0x64, 0x11, 0x26, 0x37, 0xe8, 0xb3, 0xd4, 0x00, 0xa2, 0xc7, 0xa8, 0x47, 0x9f, - 0x35, 0xb4, 0x41, 0xd4, 0xdd, 0xf8, 0x0c, 0x1a, 0xf2, 0x08, 0xa6, 0xe4, 0xe2, 0x32, 0x06, 0x73, - 0x5e, 0x3f, 0x79, 0xcd, 0xe5, 0xcc, 0xe3, 0x40, 0xb0, 0x1a, 0x72, 0xc6, 0x30, 0xc1, 0x91, 0x75, - 0x9d, 0xd7, 0xc8, 0x43, 0x1b, 0x98, 0x47, 0xbb, 0x56, 0x62, 0xf8, 0xe3, 0x26, 0x43, 0x1a, 0xe8, - 0x2c, 0xac, 0x2d, 0x28, 0xa7, 0xe7, 0x43, 0xd4, 0xf6, 0x36, 0x0c, 0x73, 0xa8, 0x10, 0x95, 0x64, - 0x08, 0x23, 0x85, 0xcd, 0x6d, 0x19, 0x2d, 0x71, 0x2a, 0x71, 0x98, 0xb5, 0x82, 0xf6, 0x25, 0x85, - 0xa3, 0x84, 0xd5, 0xdb, 0xc9, 0xe9, 0x45, 0x57, 0x67, 0x39, 0xbd, 0xba, 0x2f, 0x8e, 0x7c, 0x92, - 0xb2, 0x88, 0x26, 0x3a, 0x9d, 0x93, 0x68, 0xd8, 0x0d, 0x18, 0x11, 0xa0, 0x44, 0x70, 0xa5, 0xf8, - 0xf3, 0x93, 0x08, 0xd6, 0x07, 0x70, 0x0e, 0xed, 0x85, 0xae, 0xb7, 0xd7, 0xa6, 0x3b, 0xa1, 0xf1, - 0xa8, 0xa4, 0xdf, 0x67, 0xfd, 0x11, 0xcc, 0x67, 0xd1, 0xf6, 0xfd, 0xb2, 0x79, 0xb8, 0x93, 0x3f, - 0x2b, 0xc2, 0xcc, 0x6a, 0xa8, 0x0b, 0x5c, 0x2a, 0xe4, 0x49, 0x46, 0x18, 0x0e, 0x1c, 0x93, 0x95, - 0x53, 0x59, 0x61, 0x36, 0xde, 0xd6, 0x9e, 0xbb, 0x16, 0x7b, 0xc5, 0xd7, 0x60, 0xc7, 0x96, 0x7a, - 0xf0, 0xfa, 0x3a, 0x0c, 0x6e, 0xb0, 0xad, 0x7a, 0x40, 0xcc, 0x1d, 0xa7, 0x60, 0x20, 0x7c, 0x6e, - 0xca, 0x8e, 0x48, 0xf6, 0x83, 0xdc, 0x4d, 0x3d, 0x6a, 0x1d, 0xec, 0x1f, 0x3f, 0x62, 0xe5, 0x54, - 0xea, 0x7d, 0xeb, 0xbb, 0x30, 0x5e, 0x6d, 0x1d, 0x70, 0x97, 0x4c, 0xdf, 0x4b, 0x7c, 0x96, 0x5a, - 0xc9, 0xca, 0x29, 0x5b, 0x47, 0x24, 0xd7, 0xf8, 0xab, 0x86, 0xe1, 0x9c, 0x98, 0x1a, 0x4c, 0x58, - 0xab, 0x76, 0x3a, 0xb5, 0x51, 0x18, 0xe6, 0x0f, 0x2d, 0xad, 0x2f, 0x61, 0x5e, 0x38, 0xf2, 0x70, - 0xeb, 0x28, 0xba, 0xfb, 0x84, 0xb1, 0xaf, 0x56, 0x2f, 0xe7, 0x9b, 0x4b, 0x00, 0xa8, 0x0b, 0xad, - 0x7a, 0x2d, 0xfa, 0x8d, 0xf0, 0x24, 0xd4, 0x20, 0xd6, 0x3b, 0x30, 0xa6, 0x46, 0x08, 0x05, 0x7e, - 0xed, 0xb0, 0xc3, 0xd1, 0x9a, 0x31, 0x5e, 0xf1, 0xca, 0xa7, 0xbb, 0xe7, 0x8c, 0xbe, 0x8b, 0x28, - 0x39, 0x5c, 0x43, 0x70, 0x61, 0x36, 0xb1, 0x08, 0xe2, 0x20, 0x0c, 0x4a, 0x46, 0xe7, 0xae, 0x8e, - 0xea, 0x77, 0x52, 0x84, 0x2f, 0x1e, 0x4b, 0x84, 0xb7, 0xfe, 0x49, 0x11, 0x95, 0xcb, 0xd4, 0x78, - 0x24, 0xec, 0x74, 0xba, 0xad, 0xb0, 0x06, 0x63, 0xd8, 0xfb, 0x25, 0xf9, 0x60, 0xb0, 0xb7, 0x1f, - 0xca, 0xe8, 0x4f, 0x0f, 0x2b, 0xa7, 0xd0, 0xf9, 0x24, 0x26, 0x23, 0x1f, 0xc3, 0xc8, 0xb2, 0xd7, - 0x42, 0x0e, 0x03, 0x27, 0xe0, 0x20, 0x89, 0xd8, 0x9c, 0x60, 0x93, 0xb7, 0xd9, 0x27, 0xcc, 0xcd, - 0x3b, 0xb6, 0x06, 0x89, 0xb5, 0xdc, 0xa1, 0x3c, 0x2d, 0x77, 0x38, 0xa1, 0xe5, 0x5a, 0x30, 0xb4, - 0x19, 0xb4, 0x44, 0x6c, 0x9b, 0xa9, 0x85, 0x09, 0x31, 0x70, 0x08, 0xb3, 0x79, 0x91, 0xf5, 0x5f, - 0x0b, 0x30, 0x77, 0x8f, 0x46, 0x99, 0x6b, 0xc8, 0x18, 0x95, 0xc2, 0x4b, 0x8f, 0x4a, 0xf1, 0x45, - 0x46, 0x45, 0xf5, 0x7a, 0x20, 0xaf, 0xd7, 0x83, 0x79, 0xbd, 0x1e, 0xca, 0xef, 0xf5, 0x3d, 0x18, - 0xe6, 0x5d, 0x65, 0x9a, 0xfc, 0x6a, 0x44, 0x0f, 0x62, 0x4d, 0x5e, 0xf7, 0xa2, 0xb3, 0x79, 0x19, - 0x13, 0x24, 0xd7, 0x9c, 0x50, 0xd7, 0xe4, 0xc5, 0x4f, 0xeb, 0x47, 0xf8, 0xd4, 0x78, 0xcd, 0x6f, - 0x3e, 0xd1, 0x2c, 0xc2, 0x23, 0xfc, 0x0b, 0x4d, 0xde, 0x20, 0x30, 0x2c, 0x5e, 0x62, 0x4b, 0x0c, - 0x72, 0x19, 0xc6, 0x57, 0xbd, 0xbb, 0x7e, 0xd0, 0xa4, 0x9b, 0x5e, 0x9b, 0x73, 0x1f, 0xb5, 0x75, - 0x90, 0xb0, 0x94, 0x88, 0x1a, 0x62, 0xf3, 0x03, 0x02, 0x12, 0xe6, 0x07, 0x06, 0xdb, 0x5d, 0xb0, - 0x79, 0x99, 0x30, 0xc4, 0xb0, 0xbf, 0x7b, 0x69, 0xee, 0x4a, 0xc5, 0xef, 0x87, 0xf8, 0x08, 0xce, - 0xd9, 0xb4, 0xd3, 0x76, 0x98, 0x4c, 0x77, 0xe0, 0x73, 0x7c, 0xd5, 0xe7, 0xcb, 0x19, 0xcf, 0x04, - 0x4d, 0x9f, 0x0a, 0xd5, 0xe4, 0x62, 0x8f, 0x26, 0x1f, 0xc0, 0x95, 0x7b, 0x34, 0x32, 0x37, 0xd4, - 0xd8, 0xde, 0x2c, 0x3a, 0xbf, 0x02, 0xa3, 0xa1, 0x69, 0x2b, 0x97, 0xcf, 0xde, 0x32, 0x09, 0x77, - 0xdf, 0x92, 0xb7, 0x49, 0x82, 0x8f, 0xfa, 0xcb, 0xfa, 0x04, 0x2a, 0x79, 0xd5, 0x1d, 0xcf, 0xe5, - 0xd5, 0x85, 0xcb, 0xf9, 0x0c, 0x44, 0x73, 0x97, 0x41, 0xda, 0xd5, 0xc5, 0x27, 0xd4, 0xaf, 0xb5, - 0xa6, 0x29, 0x5e, 0xfc, 0x61, 0xd5, 0xa4, 0xf3, 0xdf, 0x4b, 0x34, 0xb7, 0x81, 0x57, 0xd6, 0x26, - 0x83, 0x78, 0x5c, 0xab, 0x30, 0x2a, 0x61, 0x62, 0x5c, 0xe7, 0x32, 0x5b, 0x2a, 0x07, 0xb4, 0x25, - 0x19, 0x28, 0x32, 0xeb, 0x47, 0xf2, 0xfa, 0xc6, 0xa4, 0x38, 0xde, 0xbb, 0xd9, 0xe3, 0xdc, 0xd7, - 0x58, 0x3e, 0x9c, 0x33, 0x79, 0xeb, 0x66, 0xf9, 0x92, 0x66, 0x96, 0xe7, 0xd6, 0xf8, 0xcb, 0xa6, - 0x99, 0x58, 0x58, 0x1a, 0x34, 0x10, 0xb9, 0xa4, 0x1b, 0xdf, 0x27, 0xd2, 0x0f, 0x71, 0x6f, 0xc3, - 0x7c, 0x56, 0x85, 0x9a, 0x1e, 0xa8, 0x2c, 0xbc, 0x42, 0xde, 0x59, 0x82, 0x4b, 0x32, 0xba, 0x94, - 0xef, 0x47, 0x61, 0x14, 0x38, 0x9d, 0x7a, 0x33, 0x70, 0x3b, 0x31, 0x95, 0x05, 0xc3, 0x1c, 0x22, - 0x46, 0x82, 0x5f, 0x85, 0x71, 0x1c, 0x51, 0x62, 0xfd, 0x7a, 0x01, 0x2c, 0xc3, 0x4f, 0x0b, 0xe7, - 0x79, 0x2b, 0xf0, 0x9f, 0xba, 0x2d, 0xed, 0xfa, 0xe9, 0x0d, 0xc3, 0xf4, 0xc9, 0xdf, 0x24, 0x26, - 0x5d, 0xc4, 0xc5, 0x9e, 0x79, 0x3b, 0x61, 0x8e, 0xe4, 0x82, 0x27, 0xfa, 0x6e, 0x99, 0x0f, 0x22, - 0x94, 0x99, 0xf2, 0xbf, 0x17, 0xe0, 0x6a, 0xcf, 0x36, 0x88, 0xfe, 0x3c, 0x82, 0x52, 0xb2, 0x4c, - 0xac, 0xa0, 0x8a, 0xe6, 0xb7, 0x91, 0xe6, 0xb0, 0x7b, 0x87, 0xfb, 0xa1, 0x4b, 0xff, 0xa6, 0x8e, - 0xe2, 0x9c, 0xe2, 0x77, 0xf2, 0xd6, 0x63, 0xfc, 0x0a, 0x3f, 0x72, 0xda, 0x8b, 0x68, 0x00, 0x18, - 0x88, 0xdf, 0x14, 0x44, 0x0c, 0xda, 0x48, 0x86, 0xc9, 0xd0, 0x90, 0xad, 0x4f, 0xf1, 0xbb, 0xce, - 0x6e, 0xf4, 0xf1, 0x3e, 0xb5, 0x45, 0xb8, 0x9a, 0xf0, 0x1d, 0x78, 0x01, 0x26, 0x11, 0xcc, 0xb2, - 0xe1, 0x67, 0xb2, 0xf7, 0xbd, 0xc0, 0xef, 0x76, 0x7e, 0x31, 0xb3, 0xfe, 0x47, 0x05, 0xee, 0xcc, - 0xa9, 0x57, 0x2b, 0x26, 0x7a, 0x11, 0x20, 0x86, 0x26, 0x9c, 0xfa, 0x55, 0xc1, 0xee, 0x1d, 0xae, - 0x72, 0xe3, 0xad, 0xc2, 0x1e, 0x67, 0xa0, 0x91, 0xfd, 0x62, 0x67, 0xf2, 0x2d, 0x74, 0x18, 0x50, - 0xb5, 0x1f, 0x6f, 0xdc, 0xdf, 0x95, 0xf6, 0x8f, 0x13, 0xd2, 0xed, 0xc3, 0x0c, 0xdb, 0x01, 0xaa, - 0xdd, 0x68, 0xdf, 0x0f, 0xdc, 0x48, 0x3e, 0x4f, 0x21, 0x5b, 0x22, 0x22, 0x00, 0xa7, 0xfa, 0xe8, - 0xe7, 0x87, 0x95, 0xf7, 0x4e, 0x12, 0xf7, 0x53, 0xf2, 0xdc, 0x56, 0x51, 0x04, 0xac, 0x39, 0x18, - 0x58, 0xb4, 0xd7, 0x70, 0xc3, 0xb3, 0xd7, 0xd4, 0x86, 0x67, 0xaf, 0x59, 0x7f, 0x59, 0x84, 0x0a, - 0x8f, 0x59, 0x82, 0x7e, 0x26, 0xb1, 0xd5, 0x42, 0x73, 0x5c, 0x39, 0xae, 0x81, 0x21, 0x11, 0x93, - 0xa4, 0x78, 0x9c, 0x98, 0x24, 0xbf, 0x02, 0x39, 0x26, 0xab, 0x63, 0x58, 0x01, 0xbe, 0x73, 0x74, - 0x58, 0xb9, 0x1a, 0x5b, 0x01, 0x78, 0x69, 0x96, 0x39, 0x20, 0xa7, 0x8a, 0xb4, 0xfd, 0x62, 0xf0, - 0x05, 0xec, 0x17, 0xb7, 0x61, 0x04, 0x95, 0x99, 0xd5, 0x2d, 0xe1, 0xf9, 0x89, 0xcb, 0x13, 0x23, - 0x14, 0x35, 0x5c, 0x3d, 0x1c, 0xa0, 0x44, 0xb3, 0xfe, 0x76, 0x11, 0x2e, 0xe7, 0x8f, 0xb9, 0x68, - 0xdb, 0x12, 0x40, 0xec, 0xe1, 0xd2, 0xcb, 0xa3, 0x06, 0xbf, 0x9d, 0x67, 0xf4, 0x91, 0xf2, 0x68, - 0xd3, 0xe8, 0x98, 0xec, 0x23, 0x5f, 0x5a, 0x27, 0xae, 0x53, 0x8c, 0x07, 0xd8, 0x22, 0x9a, 0xad, - 0x00, 0x19, 0xd1, 0x6c, 0x05, 0x8c, 0x3c, 0x82, 0xb9, 0xad, 0xc0, 0x7d, 0xea, 0x44, 0xf4, 0x01, - 0x7d, 0xce, 0x1f, 0x0b, 0x2d, 0x8b, 0x17, 0x42, 0xfc, 0xf9, 0xfc, 0xf5, 0xa3, 0xc3, 0xca, 0x6b, - 0x1d, 0x8e, 0x82, 0x11, 0xcb, 0xf8, 0xdb, 0xcf, 0x46, 0xfa, 0xd1, 0x50, 0x1e, 0x23, 0xeb, 0x5f, - 0x17, 0xe0, 0x3c, 0x8a, 0xe5, 0xc2, 0xec, 0x2a, 0x2b, 0x7f, 0x21, 0xc7, 0x4a, 0xbd, 0x83, 0x62, - 0x2d, 0xa2, 0x63, 0xa5, 0xf1, 0x12, 0xdd, 0x36, 0xd0, 0xc8, 0x2a, 0x8c, 0x8b, 0xdf, 0xf8, 0xfd, - 0x0d, 0xa0, 0x42, 0x30, 0xab, 0x6d, 0x58, 0xb8, 0xd4, 0xb9, 0xa9, 0x08, 0x17, 0xb6, 0x60, 0x86, - 0x0f, 0x36, 0x6d, 0x9d, 0xd6, 0xfa, 0x59, 0x11, 0x2e, 0xec, 0xd2, 0xc0, 0x7d, 0xfc, 0x3c, 0xa7, - 0x33, 0x9b, 0x30, 0x23, 0x41, 0x3c, 0x6e, 0x89, 0xf1, 0x89, 0xf1, 0x78, 0x96, 0xb2, 0xa9, 0x22, - 0xf0, 0x89, 0xfc, 0xe2, 0x32, 0x09, 0x4f, 0xe0, 0x32, 0xf9, 0x36, 0x8c, 0x26, 0x22, 0x07, 0xe1, - 0xfc, 0xcb, 0x2f, 0x34, 0x9e, 0xaa, 0x95, 0x53, 0xb6, 0xc2, 0x24, 0xbf, 0x99, 0x7f, 0x55, 0x25, - 0x4c, 0x1f, 0xfd, 0xec, 0x9f, 0xf8, 0xc1, 0xb2, 0x8f, 0xd5, 0xd1, 0x4a, 0x33, 0x3e, 0xd8, 0x95, - 0x53, 0x76, 0x5e, 0x4d, 0xb5, 0x71, 0x18, 0xab, 0xe2, 0xbd, 0x1d, 0xd3, 0xdc, 0xff, 0x5b, 0x11, - 0x2e, 0xc9, 0x87, 0x3f, 0x39, 0xc3, 0xfc, 0x39, 0xcc, 0x49, 0x50, 0xb5, 0xc3, 0x04, 0x06, 0xda, - 0x32, 0x47, 0x9a, 0xc7, 0x94, 0x95, 0x23, 0xed, 0x08, 0x9c, 0x78, 0xb0, 0xf3, 0xc8, 0x5f, 0x8d, - 0xf5, 0xf3, 0xe3, 0xac, 0x38, 0x4e, 0x68, 0x85, 0xd4, 0xf7, 0x4c, 0x63, 0x68, 0x8c, 0xfd, 0xb3, - 0x95, 0xb2, 0x9e, 0x0e, 0xbe, 0xac, 0xf5, 0x74, 0xe5, 0x54, 0xd2, 0x7e, 0x5a, 0x9b, 0x82, 0x89, - 0x0d, 0xfa, 0x2c, 0x1e, 0xf7, 0xff, 0xb3, 0x90, 0x08, 0xf5, 0xc0, 0x24, 0x0c, 0x1e, 0xf3, 0xa1, - 0x10, 0x87, 0x02, 0xc2, 0x50, 0x0f, 0xba, 0x84, 0xc1, 0x51, 0x57, 0x61, 0x84, 0x5f, 0x66, 0xb7, - 0x8e, 0xa1, 0xe1, 0xab, 0x17, 0x3c, 0xfc, 0x59, 0x65, 0x8b, 0x2b, 0xfb, 0x82, 0xde, 0x7a, 0x00, - 0x57, 0x84, 0x8f, 0xb7, 0x39, 0xf9, 0x58, 0xd1, 0x09, 0x8f, 0x2f, 0xcb, 0x81, 0x4b, 0xf7, 0x68, - 0x72, 0xeb, 0x31, 0x5e, 0x38, 0x7d, 0x02, 0xa7, 0x0d, 0xb8, 0xe2, 0x88, 0x52, 0xa9, 0x5a, 0x43, - 0x8a, 0x75, 0x12, 0xdb, 0xba, 0x9c, 0x55, 0x85, 0xde, 0x58, 0x8b, 0x62, 0x70, 0xd8, 0x20, 0xbe, - 0x62, 0x0b, 0x4f, 0xb0, 0xeb, 0x5d, 0xd7, 0xbe, 0x6b, 0xbe, 0xe3, 0xf1, 0xe8, 0x81, 0xf2, 0xe4, - 0x55, 0xa5, 0xd6, 0xa4, 0x71, 0x17, 0x60, 0x4d, 0xc1, 0x84, 0x2c, 0x6a, 0xd3, 0x30, 0xb4, 0xfe, - 0xc3, 0x10, 0x58, 0x62, 0x60, 0xb3, 0x6e, 0xe8, 0xe5, 0x78, 0x3c, 0x4a, 0x35, 0x56, 0x1c, 0x54, - 0x67, 0xf5, 0x98, 0xa4, 0x71, 0x29, 0x5f, 0x79, 0x28, 0xe7, 0x35, 0x63, 0xa8, 0xb1, 0xf2, 0x52, - 0xbd, 0xff, 0x2a, 0x67, 0x9b, 0xe4, 0x1f, 0x1b, 0x3e, 0xd9, 0xce, 0xd9, 0x26, 0x0d, 0xbe, 0xd9, - 0x5b, 0xa6, 0x6d, 0x5e, 0x89, 0x0c, 0xbc, 0xc8, 0x95, 0x08, 0xfb, 0x22, 0xf5, 0x4b, 0x91, 0x1d, - 0x73, 0x2c, 0xc5, 0xf7, 0x28, 0x6f, 0xef, 0xf5, 0x22, 0x11, 0x71, 0x41, 0x83, 0x18, 0x5c, 0x0d, - 0x36, 0xc4, 0x85, 0x92, 0x66, 0xb3, 0x5c, 0xdc, 0xa7, 0xcd, 0x27, 0xc2, 0x56, 0x2c, 0x2f, 0x74, - 0xb3, 0x6c, 0xe6, 0x3c, 0x3e, 0x35, 0xff, 0xce, 0x79, 0x41, 0xa3, 0xc9, 0x48, 0xf5, 0x88, 0x11, - 0x49, 0xb6, 0xe4, 0x27, 0x30, 0xad, 0xa6, 0x3a, 0xe1, 0xa2, 0x35, 0xbe, 0xf0, 0x5a, 0x1c, 0xca, - 0xf4, 0xe0, 0xb1, 0x73, 0xf3, 0xe9, 0x9d, 0x9b, 0x19, 0xb8, 0x3c, 0x10, 0x41, 0x53, 0x16, 0x68, - 0xfe, 0x59, 0xfa, 0x45, 0x57, 0x06, 0x21, 0xf9, 0x02, 0x66, 0xea, 0xf5, 0x4d, 0xfe, 0x98, 0xc3, - 0x96, 0x17, 0xfc, 0xf6, 0x9a, 0x70, 0xd8, 0xc2, 0xe9, 0x0e, 0x43, 0xbf, 0x21, 0x1e, 0x81, 0xe8, - 0x6e, 0x01, 0x7a, 0x28, 0x86, 0x2c, 0x16, 0xfa, 0x4d, 0xf9, 0xdf, 0x54, 0x6f, 0x15, 0x98, 0x28, - 0xe2, 0xb6, 0xa9, 0x78, 0x74, 0x24, 0x17, 0x76, 0xce, 0x2d, 0x5f, 0xe1, 0x5b, 0xbe, 0xe5, 0xfb, - 0xfd, 0xa2, 0x7c, 0xa1, 0x91, 0xbe, 0x68, 0x3d, 0xf1, 0x65, 0x5f, 0x66, 0x0f, 0x8e, 0x75, 0x4e, - 0x67, 0x36, 0x8e, 0xd4, 0xe4, 0x55, 0xa9, 0x0a, 0x56, 0x36, 0xa5, 0xae, 0x1d, 0xe2, 0x02, 0xe3, - 0xf6, 0x14, 0xa5, 0x22, 0x8d, 0x2a, 0x79, 0x0f, 0x37, 0xf0, 0xf2, 0xf7, 0x70, 0xff, 0x7c, 0x0c, - 0xce, 0x6c, 0x39, 0x7b, 0xae, 0xc7, 0xce, 0x03, 0x9b, 0x86, 0x7e, 0x37, 0x68, 0x52, 0x52, 0x85, - 0x29, 0xd3, 0xfd, 0xb6, 0x8f, 0x73, 0x31, 0x3b, 0xf2, 0x4c, 0x18, 0x59, 0x80, 0x31, 0xf5, 0xe4, - 0x57, 0x9c, 0x53, 0x19, 0x4f, 0x81, 0x57, 0x4e, 0xd9, 0x31, 0x1a, 0x79, 0xdf, 0xb8, 0x3a, 0x3a, - 0xad, 0x5e, 0xaf, 0x23, 0xee, 0x02, 0xf7, 0x8f, 0xf4, 0xfc, 0x96, 0x79, 0xd6, 0xf2, 0xfb, 0x91, - 0x1f, 0xa5, 0x6e, 0x93, 0x86, 0x8c, 0x16, 0xa7, 0x4c, 0x6a, 0x28, 0x66, 0xe4, 0xc6, 0x1e, 0xcf, - 0xb8, 0x67, 0xfa, 0x12, 0xc6, 0x1f, 0x74, 0x1f, 0x51, 0x79, 0x6f, 0x36, 0x2c, 0x8e, 0xde, 0xa4, - 0x53, 0xb9, 0x28, 0xdf, 0x7d, 0x8b, 0xcf, 0xc1, 0x93, 0xee, 0x23, 0x9a, 0x0e, 0x6a, 0xcf, 0xf6, - 0x3c, 0x8d, 0x19, 0xd9, 0x87, 0x52, 0xd2, 0xff, 0x5b, 0x84, 0xf7, 0xeb, 0xe1, 0xb5, 0x8e, 0x61, - 0x5a, 0xb4, 0xd0, 0xf9, 0xdc, 0x2b, 0xd5, 0xa8, 0x24, 0xc5, 0x95, 0xfc, 0x2a, 0xcc, 0x66, 0x1a, - 0x34, 0xd5, 0x0b, 0xb6, 0xde, 0xb6, 0x52, 0xdc, 0x40, 0x12, 0xa3, 0x26, 0x9f, 0xcb, 0x19, 0x35, - 0x67, 0xd7, 0x42, 0x5a, 0x70, 0x3a, 0xe1, 0xd7, 0x2c, 0xf2, 0x83, 0xe4, 0x7b, 0x4a, 0xe3, 0x99, - 0x27, 0x43, 0xec, 0x66, 0xd6, 0x95, 0x64, 0x49, 0xd6, 0x60, 0x4c, 0x59, 0x12, 0x44, 0x64, 0xb5, - 0x2c, 0xab, 0x49, 0xf9, 0xe8, 0xb0, 0x32, 0x13, 0x5b, 0x4d, 0x0c, 0x9e, 0x31, 0x03, 0xf2, 0x6b, - 0x70, 0x45, 0x2d, 0xd1, 0xcd, 0x20, 0xdb, 0xbe, 0x24, 0x42, 0xf3, 0xdf, 0x48, 0xae, 0xf0, 0x3c, - 0xfc, 0xdd, 0x3b, 0xb5, 0x62, 0xb9, 0xb0, 0x72, 0xca, 0xee, 0xcf, 0x9a, 0xfc, 0x46, 0x01, 0xce, - 0xe6, 0xd4, 0x3a, 0x81, 0xb5, 0xf6, 0x35, 0xfa, 0xa1, 0xde, 0x80, 0xaf, 0xb6, 0xdc, 0x56, 0xfc, - 0xba, 0x51, 0x5a, 0xff, 0x8c, 0x7e, 0xe7, 0xd4, 0x44, 0xde, 0x84, 0x61, 0x54, 0xbf, 0xc3, 0xf2, - 0x24, 0x0a, 0xa8, 0x18, 0x9d, 0x08, 0x95, 0x74, 0xfd, 0x48, 0x12, 0x38, 0x64, 0x85, 0x09, 0x7a, - 0x78, 0x24, 0x4a, 0xc1, 0x4c, 0xc4, 0x32, 0x13, 0xca, 0x02, 0x2f, 0x92, 0x41, 0x46, 0x8c, 0x1c, - 0x0c, 0x26, 0x59, 0x0d, 0x60, 0x34, 0x10, 0xbb, 0xd2, 0xfd, 0xc1, 0xd1, 0xc1, 0xd2, 0x10, 0xff, - 0x70, 0xa4, 0xc3, 0xfc, 0x6f, 0x8d, 0xf2, 0xd7, 0xb5, 0x3b, 0x9e, 0xfb, 0xd8, 0x8d, 0x37, 0x30, - 0xdd, 0x70, 0x17, 0x27, 0x43, 0x12, 0x62, 0x75, 0x4e, 0xda, 0x23, 0x65, 0xe3, 0x2b, 0xf6, 0xb5, - 0xf1, 0xbd, 0xa5, 0xdd, 0x86, 0x69, 0x31, 0x4b, 0xb9, 0xf8, 0x64, 0xda, 0xd4, 0xe2, 0x6b, 0xb2, - 0xaf, 0x61, 0x18, 0xc3, 0x8c, 0xf2, 0xab, 0xc6, 0xf1, 0x85, 0x9b, 0x62, 0xdb, 0xee, 0xd1, 0x7c, - 0x1e, 0x97, 0x54, 0xbc, 0x98, 0xe7, 0x23, 0x8e, 0x00, 0x63, 0xc4, 0x11, 0x42, 0xb6, 0x61, 0x7a, - 0x8b, 0x9d, 0xe6, 0xdc, 0x6d, 0xbb, 0x13, 0x08, 0xbb, 0x07, 0xb7, 0xa8, 0xa0, 0x34, 0xd1, 0x91, - 0xc5, 0x0d, 0xaa, 0xca, 0xf5, 0x03, 0x35, 0x83, 0x9c, 0x2c, 0xc3, 0x54, 0x9d, 0x3a, 0x41, 0x73, - 0xff, 0x01, 0x7d, 0xce, 0x24, 0x29, 0x23, 0xff, 0x47, 0x88, 0x25, 0xac, 0xbf, 0x58, 0xa4, 0xbb, - 0x8f, 0x98, 0x44, 0xe4, 0x53, 0x18, 0xae, 0xfb, 0x41, 0x54, 0x7b, 0x2e, 0x36, 0x35, 0x79, 0x19, - 0xc5, 0x81, 0xb5, 0x73, 0x32, 0x07, 0x4a, 0xe8, 0x07, 0x51, 0xe3, 0x91, 0x11, 0xee, 0x8a, 0xa3, - 0x90, 0xe7, 0x30, 0x63, 0x6e, 0x28, 0xc2, 0x9b, 0x78, 0x54, 0x48, 0x70, 0x59, 0xbb, 0x16, 0x47, - 0xa9, 0x5d, 0x17, 0xdc, 0x2f, 0x27, 0xb7, 0xad, 0xc7, 0x58, 0xae, 0x8b, 0x3d, 0x59, 0xf4, 0x64, - 0x1d, 0x93, 0xc7, 0xf0, 0x1e, 0x55, 0x43, 0xee, 0x85, 0x3c, 0x16, 0x07, 0x54, 0xeb, 0xe2, 0xa6, - 0x84, 0x23, 0xe1, 0x84, 0xc9, 0x8c, 0x43, 0x76, 0x8a, 0x94, 0x6c, 0xc1, 0x99, 0x9d, 0x90, 0x6e, - 0x05, 0xf4, 0xa9, 0x4b, 0x9f, 0x49, 0x7e, 0x10, 0x47, 0x9f, 0x62, 0xfc, 0x3a, 0xbc, 0x34, 0x8b, - 0x61, 0x9a, 0x98, 0xbc, 0x0f, 0xb0, 0xe5, 0x7a, 0x1e, 0x6d, 0xe1, 0x8d, 0xe6, 0x38, 0xb2, 0x42, - 0x6b, 0x6d, 0x07, 0xa1, 0x0d, 0xdf, 0x6b, 0xeb, 0x43, 0xaa, 0x21, 0x93, 0x1a, 0x4c, 0xae, 0x7a, - 0xcd, 0x76, 0x57, 0x78, 0x1e, 0x84, 0xb8, 0xa1, 0x88, 0xa8, 0x78, 0x2e, 0x2f, 0x68, 0xa4, 0x3e, - 0x72, 0x93, 0x84, 0x3c, 0x00, 0x22, 0x00, 0x62, 0xd5, 0x3a, 0x8f, 0xda, 0x54, 0x7c, 0xee, 0x68, - 0x85, 0x91, 0x8c, 0x70, 0xb9, 0x1b, 0xc1, 0xe6, 0x52, 0x64, 0xf3, 0xef, 0xc3, 0xb8, 0xb6, 0xe6, - 0x33, 0x42, 0x40, 0xcc, 0xe8, 0x21, 0x20, 0xc6, 0xf4, 0x50, 0x0f, 0xff, 0xa0, 0x00, 0x17, 0xb2, - 0xbf, 0x25, 0x21, 0x80, 0x6d, 0xc2, 0x98, 0x02, 0xaa, 0x47, 0x3f, 0x52, 0xab, 0x48, 0x48, 0x40, - 0xfc, 0x83, 0x96, 0x3b, 0x8f, 0xde, 0xfb, 0x98, 0xc7, 0x0b, 0x98, 0xfa, 0xff, 0xef, 0x51, 0x98, - 0x41, 0xe7, 0xf6, 0xe4, 0x3e, 0xf5, 0x09, 0x86, 0x72, 0x41, 0x98, 0x66, 0xb9, 0x16, 0x46, 0x2c, - 0x0e, 0x4f, 0x06, 0x35, 0x33, 0x08, 0xc8, 0x3b, 0xba, 0xbb, 0x45, 0x51, 0x4b, 0x56, 0x23, 0x81, - 0x7a, 0x17, 0x62, 0x3f, 0x8c, 0x37, 0x8c, 0xdb, 0xfe, 0x63, 0x6f, 0x7a, 0x83, 0xc7, 0xdd, 0xf4, - 0x76, 0xd4, 0xa6, 0xc7, 0x43, 0x84, 0x7c, 0x47, 0xdb, 0xf4, 0x5e, 0xfd, 0x6e, 0x37, 0xfc, 0xaa, - 0x77, 0xbb, 0x91, 0x97, 0xdb, 0xed, 0x46, 0x5f, 0x70, 0xb7, 0xbb, 0x0b, 0x53, 0x1b, 0x94, 0xb6, - 0xb4, 0x3b, 0x98, 0xb1, 0xf8, 0xf4, 0xf4, 0x28, 0x5a, 0xd7, 0xb2, 0x2e, 0x62, 0x12, 0x54, 0xb9, - 0xbb, 0x26, 0xfc, 0xf5, 0xec, 0x9a, 0xe3, 0xaf, 0x78, 0xd7, 0x9c, 0x78, 0x99, 0x5d, 0x33, 0xb5, - 0xf5, 0x4d, 0x9e, 0x78, 0xeb, 0x7b, 0x99, 0xdd, 0xea, 0x63, 0xf4, 0x56, 0xac, 0xd7, 0x57, 0x84, - 0x63, 0x8a, 0xe6, 0x09, 0xb2, 0xe2, 0x87, 0xd2, 0x99, 0x1b, 0xff, 0x66, 0x30, 0x4c, 0x09, 0xc0, - 0x99, 0xe0, 0xdf, 0x56, 0x0d, 0x7d, 0x14, 0x75, 0x7a, 0xf5, 0xe8, 0x61, 0x44, 0xbc, 0x98, 0x14, - 0x7b, 0x5c, 0x52, 0x8d, 0xb2, 0x65, 0xb9, 0xf5, 0x67, 0x05, 0x7e, 0xdf, 0xf9, 0xbf, 0xe2, 0x56, - 0xf9, 0x32, 0x77, 0x90, 0xbf, 0x19, 0x47, 0x52, 0x10, 0x51, 0x1f, 0x02, 0xa7, 0xf9, 0x24, 0xbe, - 0x04, 0xfe, 0x21, 0xfb, 0xce, 0xf5, 0x02, 0x0c, 0x9a, 0x1b, 0xeb, 0x8a, 0x66, 0xe1, 0xee, 0x1d, - 0xb9, 0x01, 0x88, 0x80, 0x12, 0x1c, 0x6c, 0x6e, 0x00, 0x3a, 0x01, 0xba, 0xe1, 0x9d, 0xb6, 0x6c, - 0x1e, 0x08, 0x20, 0xb3, 0x05, 0xef, 0xa6, 0x9f, 0xb2, 0xa3, 0x32, 0x12, 0x3f, 0x65, 0xd7, 0x87, - 0x31, 0x7e, 0xd4, 0xbe, 0x03, 0xe7, 0x6d, 0x7a, 0xe0, 0x3f, 0xa5, 0xaf, 0x96, 0xed, 0x57, 0x70, - 0xce, 0x64, 0xc8, 0x1f, 0x3d, 0xf1, 0x08, 0xfd, 0x1f, 0x67, 0xc7, 0xf5, 0x17, 0x04, 0x3c, 0xae, - 0x3f, 0x0f, 0x0f, 0xce, 0xfe, 0xd4, 0xcf, 0x0d, 0x2c, 0xb3, 0x7c, 0xb8, 0x60, 0x32, 0xaf, 0xb6, - 0x5a, 0x98, 0x1a, 0xb4, 0xe9, 0x76, 0x1c, 0x2f, 0x22, 0x9b, 0x30, 0xae, 0xfd, 0x4c, 0x98, 0x0a, - 0xb4, 0x12, 0x21, 0xd3, 0xc4, 0x00, 0x23, 0xbc, 0x6a, 0x0c, 0xb6, 0x28, 0x54, 0x92, 0xc3, 0xc3, - 0x86, 0x4c, 0xaf, 0xb3, 0x06, 0x93, 0xda, 0x4f, 0x65, 0x0d, 0xc5, 0x8f, 0x5f, 0xab, 0xc1, 0x1c, - 0x30, 0x93, 0xc4, 0x6a, 0xc2, 0x7c, 0xd6, 0xa0, 0xf1, 0x38, 0xdc, 0x64, 0x39, 0x0e, 0xb3, 0xd5, - 0xdf, 0x91, 0xef, 0x74, 0x5e, 0x88, 0x2d, 0xeb, 0x6f, 0x0c, 0xc2, 0x79, 0x31, 0x19, 0xaf, 0x72, - 0xc6, 0xc9, 0x8f, 0x60, 0x5c, 0x9b, 0x63, 0x31, 0xe8, 0x97, 0xe5, 0x93, 0xa5, 0xbc, 0xb5, 0xc0, - 0x4d, 0x1a, 0x5d, 0x04, 0x34, 0x12, 0xd3, 0xbd, 0x72, 0xca, 0xd6, 0x59, 0x92, 0x36, 0x4c, 0x99, - 0x13, 0x2d, 0xac, 0x3a, 0x57, 0x33, 0x2b, 0x31, 0x51, 0x65, 0x90, 0xee, 0x56, 0x23, 0x73, 0xba, - 0x57, 0x4e, 0xd9, 0x09, 0xde, 0xe4, 0x1b, 0x38, 0x93, 0x9a, 0x65, 0x61, 0xac, 0x7b, 0x3d, 0xb3, - 0xc2, 0x14, 0x36, 0xb7, 0xf4, 0x06, 0x08, 0xce, 0xad, 0x36, 0x5d, 0x09, 0x69, 0xc1, 0x84, 0x3e, - 0xf1, 0xc2, 0xec, 0x74, 0xa5, 0xc7, 0x50, 0x72, 0x44, 0x2e, 0xdc, 0x89, 0xb1, 0xc4, 0xb9, 0x7f, - 0x6e, 0x5a, 0xaf, 0x0d, 0xe4, 0x51, 0x18, 0xe6, 0xbf, 0xad, 0xdf, 0x2f, 0xc0, 0xf9, 0xad, 0x80, - 0x86, 0xd4, 0x6b, 0x52, 0xc3, 0xf9, 0xfb, 0x25, 0x57, 0x44, 0x9e, 0xe1, 0xb8, 0xf8, 0xd2, 0x86, - 0x63, 0xeb, 0x5f, 0x15, 0xa0, 0x9c, 0xd5, 0xe4, 0x3a, 0xf5, 0x5a, 0x64, 0x0b, 0x4a, 0xc9, 0x3e, - 0x88, 0x2f, 0xc6, 0x52, 0x31, 0x96, 0x73, 0x7b, 0xbb, 0x72, 0xca, 0x4e, 0x51, 0x93, 0x0d, 0x38, - 0xa3, 0xc1, 0x84, 0xe1, 0xb6, 0x78, 0x1c, 0xc3, 0x2d, 0x9b, 0xe1, 0x14, 0xa9, 0x6e, 0xf7, 0x5e, - 0xc1, 0x53, 0x77, 0xc9, 0x3f, 0x70, 0x5c, 0x8f, 0x09, 0xd1, 0x5a, 0x14, 0x2f, 0x88, 0xa1, 0x62, - 0xd8, 0xb9, 0x25, 0x17, 0xa1, 0xf2, 0x1d, 0x8c, 0x42, 0xb1, 0x3e, 0xc2, 0xd3, 0x41, 0xd8, 0xff, - 0xf8, 0xcb, 0x63, 0xc5, 0xec, 0x32, 0x0c, 0x6d, 0xaf, 0xd5, 0x17, 0xab, 0xe2, 0x1d, 0x33, 0x8f, - 0x7e, 0xd1, 0x0e, 0x1b, 0x4d, 0xc7, 0xe6, 0x05, 0xd6, 0x87, 0x40, 0xee, 0xd1, 0x48, 0x04, 0xf9, - 0x57, 0x74, 0xd7, 0x60, 0x44, 0x80, 0x04, 0x25, 0x7a, 0xf4, 0x89, 0x94, 0x01, 0xb6, 0x2c, 0xb3, - 0xb6, 0xa4, 0x0e, 0xd2, 0xa6, 0x4e, 0xa8, 0x1d, 0xfa, 0xef, 0xc1, 0x68, 0x20, 0x60, 0xe2, 0xcc, - 0x9f, 0x52, 0x39, 0x5c, 0x10, 0xcc, 0x6d, 0xe5, 0x12, 0xc7, 0x56, 0x7f, 0x59, 0x6b, 0x18, 0xa9, - 0x66, 0x73, 0x75, 0x69, 0x91, 0x8d, 0xaa, 0x18, 0x2c, 0x39, 0x1d, 0xb7, 0xd0, 0xf5, 0x3d, 0xa2, - 0xfa, 0x2b, 0x66, 0x1c, 0x1a, 0xdc, 0x40, 0x44, 0x7c, 0x26, 0x0d, 0xc5, 0x7a, 0x4b, 0xc5, 0xbd, - 0xc9, 0xe0, 0x96, 0x97, 0x8b, 0x64, 0x03, 0x23, 0xfa, 0xdc, 0x43, 0x2f, 0x9f, 0x57, 0xd1, 0x08, - 0x07, 0xe6, 0xb9, 0x08, 0xc1, 0x7a, 0x25, 0x32, 0x31, 0xfa, 0x6a, 0xdb, 0x5d, 0x84, 0x31, 0x05, - 0x53, 0x57, 0x76, 0x7c, 0xac, 0x0c, 0xfc, 0xdd, 0xb7, 0xf8, 0x83, 0xef, 0xa6, 0x62, 0x10, 0xd3, - 0xb1, 0x2a, 0xf8, 0x37, 0xfd, 0x2d, 0x57, 0x11, 0xd2, 0x20, 0xfa, 0x56, 0xab, 0x88, 0x43, 0x3e, - 0x9d, 0xa4, 0x0a, 0x03, 0x7f, 0x77, 0xe1, 0x38, 0x03, 0xf5, 0x2d, 0x57, 0xc1, 0x06, 0xea, 0xdb, - 0xab, 0x82, 0xca, 0xd8, 0x58, 0x7c, 0x91, 0xa6, 0x2a, 0x59, 0x4e, 0x57, 0x22, 0x8d, 0xe2, 0x09, - 0x8a, 0x9e, 0xf3, 0x41, 0xe1, 0x02, 0x1f, 0xac, 0x5f, 0x40, 0x35, 0x6c, 0xc0, 0xbe, 0xdd, 0x6a, - 0xfe, 0x4e, 0x81, 0x47, 0xea, 0xaa, 0x6f, 0x6a, 0x39, 0x50, 0xbd, 0xc7, 0xbe, 0xe6, 0x51, 0xa0, - 0x7d, 0xed, 0x0f, 0x5c, 0xaf, 0xa5, 0x7b, 0x14, 0x38, 0xdd, 0x68, 0x5f, 0x45, 0xb2, 0x7e, 0xe2, - 0x7a, 0x2d, 0x3b, 0x89, 0x4d, 0xde, 0x87, 0x49, 0x0d, 0xa4, 0x24, 0x41, 0x9e, 0x6b, 0x44, 0x27, - 0x77, 0x5b, 0xb6, 0x89, 0x69, 0xfd, 0x55, 0x01, 0xa6, 0x33, 0xb2, 0x73, 0xa3, 0xa1, 0x04, 0x35, - 0x2c, 0xb5, 0x51, 0x89, 0xec, 0x60, 0x18, 0x34, 0xc4, 0x38, 0x7f, 0x15, 0x22, 0x66, 0x59, 0xd0, - 0x32, 0x89, 0x17, 0xb5, 0x9c, 0x77, 0xd9, 0xd9, 0xc3, 0x75, 0x74, 0x12, 0x02, 0xc4, 0x2d, 0x11, - 0x26, 0xe9, 0x3a, 0x13, 0x97, 0xb5, 0x34, 0xe4, 0xaf, 0x24, 0x0f, 0xba, 0x56, 0x8d, 0xf5, 0x9b, - 0x45, 0x38, 0x9b, 0xd1, 0xff, 0x3a, 0x8d, 0xfe, 0x3a, 0x86, 0x20, 0x91, 0x0c, 0x7e, 0xe0, 0x17, - 0x94, 0x0c, 0xde, 0xfa, 0xe3, 0x22, 0x9c, 0xdd, 0xe9, 0x84, 0xf8, 0x30, 0x6c, 0xd5, 0x7b, 0x4a, - 0xbd, 0xc8, 0x0f, 0x9e, 0xe3, 0x63, 0x16, 0xf2, 0x0e, 0x0c, 0xad, 0xd0, 0x76, 0xdb, 0x17, 0xeb, - 0xff, 0xa2, 0x74, 0xea, 0x48, 0x62, 0x23, 0xd2, 0xca, 0x29, 0x9b, 0x63, 0x93, 0xf7, 0x61, 0x6c, - 0x85, 0x3a, 0x41, 0xf4, 0x88, 0x3a, 0x52, 0x1d, 0x92, 0x19, 0x50, 0x34, 0x12, 0x81, 0xb0, 0x72, - 0xca, 0x8e, 0xb1, 0xc9, 0x02, 0x0c, 0x6e, 0xf9, 0xde, 0x9e, 0x7a, 0x04, 0x9f, 0x53, 0x21, 0xc3, - 0x59, 0x39, 0x65, 0x23, 0x2e, 0x59, 0x87, 0xc9, 0xea, 0x1e, 0xf5, 0xa2, 0x75, 0x1a, 0x39, 0x2d, - 0x27, 0x72, 0x84, 0xd8, 0x7c, 0x2d, 0x8f, 0xd8, 0x40, 0x5e, 0x39, 0x65, 0x9b, 0xd4, 0xe4, 0x43, - 0x18, 0xb9, 0xe7, 0xfb, 0xad, 0x47, 0xcf, 0x65, 0x28, 0x87, 0x4a, 0x1e, 0x23, 0x81, 0xb6, 0x72, - 0xca, 0x96, 0x14, 0xb5, 0x21, 0x18, 0x58, 0x0f, 0xf7, 0xac, 0xc3, 0x02, 0x94, 0x97, 0xfc, 0x67, - 0x5e, 0xe6, 0xa8, 0x7e, 0xdf, 0x1c, 0x55, 0xc9, 0x3e, 0x03, 0x3f, 0x31, 0xae, 0x6f, 0xc3, 0xe0, - 0x96, 0xeb, 0xed, 0x25, 0x44, 0xc1, 0x0c, 0x3a, 0x86, 0x85, 0xc3, 0xe3, 0x7a, 0x7b, 0x64, 0x4d, - 0xca, 0xf7, 0xc2, 0x8e, 0x39, 0x60, 0x28, 0x15, 0x19, 0xd4, 0x3a, 0x76, 0x2c, 0xc7, 0xf3, 0xdf, - 0xb2, 0x83, 0x6f, 0xc0, 0x5c, 0x4e, 0xbd, 0xe2, 0x55, 0x3b, 0xeb, 0xdb, 0x20, 0x0a, 0x36, 0xff, - 0x4f, 0x01, 0x66, 0x33, 0x27, 0x30, 0x89, 0xc9, 0x74, 0x3a, 0xbe, 0x30, 0x17, 0xdb, 0x7e, 0xf3, - 0xc9, 0x31, 0x7c, 0xc3, 0x2c, 0x99, 0x35, 0x5c, 0x7c, 0x21, 0x4d, 0x46, 0x97, 0xc8, 0x0c, 0xa7, - 0xb3, 0xb4, 0xfe, 0x71, 0xd6, 0x5a, 0xe7, 0x83, 0x5b, 0x86, 0x11, 0x99, 0x7d, 0x8c, 0x9b, 0xae, - 0xe4, 0x4f, 0x7c, 0x3a, 0x26, 0xf7, 0x02, 0x19, 0x16, 0x46, 0x7e, 0xf2, 0xbb, 0x5a, 0x18, 0x2e, - 0xfe, 0xc5, 0x7e, 0xf0, 0x12, 0xdf, 0xa5, 0xe2, 0xc5, 0xea, 0x5c, 0xf1, 0xc3, 0xc8, 0x53, 0x3e, - 0xc9, 0xb6, 0xfa, 0x4d, 0x6e, 0x40, 0x49, 0x66, 0x1a, 0x11, 0x29, 0x8d, 0x44, 0x76, 0x7c, 0x3b, - 0x05, 0x27, 0xef, 0xc1, 0x5c, 0x12, 0x26, 0x7b, 0xc9, 0xdf, 0xfe, 0xe5, 0x15, 0x5b, 0x7f, 0x5a, - 0xc4, 0x48, 0xe9, 0x3d, 0x3e, 0x1d, 0x36, 0x7f, 0x9b, 0x75, 0x31, 0x5a, 0xc5, 0xcd, 0x3a, 0xb9, - 0x00, 0x63, 0x9b, 0x75, 0x23, 0x85, 0x9b, 0x1d, 0x03, 0x58, 0xb3, 0x59, 0x17, 0xaa, 0x41, 0x73, - 0xdf, 0x8d, 0x68, 0x33, 0xea, 0x06, 0x62, 0xa3, 0xb7, 0x53, 0x70, 0x62, 0xc1, 0xc4, 0xbd, 0xb6, - 0xfb, 0xa8, 0x29, 0x99, 0xf1, 0x21, 0x30, 0x60, 0xe4, 0x75, 0x98, 0x5a, 0xf5, 0xc2, 0xc8, 0x69, - 0xb7, 0xd7, 0x69, 0xb4, 0xef, 0xb7, 0x44, 0x82, 0x5a, 0x3b, 0x01, 0x65, 0xf5, 0x2e, 0xfa, 0x5e, - 0xe4, 0xb8, 0x1e, 0x0d, 0xec, 0xae, 0x17, 0xb9, 0x07, 0x54, 0xf4, 0x3d, 0x05, 0x27, 0x6f, 0xc3, - 0xac, 0x82, 0x6d, 0x06, 0xcd, 0x7d, 0x1a, 0x46, 0x01, 0x26, 0x76, 0x44, 0xef, 0x23, 0x3b, 0xbb, - 0x10, 0x6b, 0x68, 0xfb, 0xdd, 0xd6, 0xb2, 0xf7, 0xd4, 0x0d, 0x7c, 0x0f, 0xd3, 0xa6, 0x8c, 0x8a, - 0x1a, 0x12, 0x70, 0xeb, 0xf7, 0x46, 0x33, 0x77, 0x86, 0x97, 0x59, 0x83, 0x5f, 0xc0, 0xc4, 0xa2, - 0xd3, 0x71, 0x1e, 0xb9, 0x6d, 0x37, 0x72, 0x55, 0x06, 0xbc, 0x77, 0xfa, 0x6c, 0x2b, 0x32, 0xf7, - 0x0c, 0x6d, 0xe9, 0xc4, 0xb6, 0xc1, 0x6a, 0xfe, 0x2f, 0x87, 0x61, 0x36, 0x13, 0x8f, 0x5c, 0x17, - 0xa9, 0xf2, 0xd4, 0xd6, 0x2d, 0xf2, 0xb0, 0xd9, 0x49, 0x30, 0x9b, 0x4b, 0x04, 0x2d, 0xb6, 0xa9, - 0xe3, 0x75, 0x45, 0x16, 0x36, 0xdb, 0x80, 0xb1, 0xb9, 0x64, 0xa2, 0x89, 0xc6, 0x0c, 0x5d, 0xca, - 0xed, 0x04, 0x94, 0x5c, 0x86, 0x71, 0x06, 0x91, 0xac, 0x06, 0xf9, 0xe3, 0x47, 0x0d, 0xc4, 0x38, - 0x6d, 0xf8, 0x2d, 0xaa, 0x71, 0x1a, 0xe2, 0x9c, 0x4c, 0x28, 0xe3, 0xc4, 0x20, 0x92, 0xd3, 0x30, - 0xe7, 0xa4, 0x81, 0xc8, 0x6b, 0x30, 0x59, 0xed, 0x74, 0x34, 0x46, 0x98, 0x7e, 0xcd, 0x36, 0x81, - 0xe4, 0x12, 0x40, 0xb5, 0xd3, 0x91, 0x6c, 0x30, 0xb5, 0x9a, 0xad, 0x41, 0xc8, 0xcd, 0x38, 0xd8, - 0x9d, 0xc6, 0x0a, 0x6f, 0x43, 0xec, 0x8c, 0x12, 0x36, 0xae, 0x2a, 0x32, 0x98, 0x60, 0x0a, 0x7c, - 0x5c, 0x13, 0x60, 0xf2, 0x11, 0x9c, 0x4b, 0xb8, 0x8d, 0x68, 0x15, 0xe0, 0x4d, 0x85, 0x9d, 0x8f, - 0x40, 0xde, 0x85, 0xb3, 0x89, 0x42, 0x59, 0x1d, 0x5e, 0x4a, 0xd8, 0x39, 0xa5, 0xe4, 0x03, 0x28, - 0x27, 0x1e, 0xb4, 0xc7, 0x95, 0xe2, 0x05, 0x84, 0x9d, 0x5b, 0xce, 0xbe, 0xae, 0xc4, 0xcb, 0x38, - 0x51, 0x25, 0xde, 0xb5, 0xda, 0xd9, 0x85, 0x64, 0x05, 0x2a, 0x99, 0xae, 0x38, 0x5a, 0xc5, 0x98, - 0x32, 0xce, 0xee, 0x87, 0x46, 0x6a, 0x70, 0x21, 0x13, 0x45, 0x36, 0x03, 0x13, 0xc9, 0xd9, 0x3d, - 0x71, 0xc8, 0x02, 0xcc, 0xc4, 0x2e, 0x49, 0x5a, 0x13, 0x30, 0x87, 0x9c, 0x9d, 0x59, 0x46, 0xde, - 0x34, 0xc3, 0x16, 0xf0, 0xca, 0x30, 0x85, 0x9c, 0x9d, 0x2e, 0xb0, 0x8e, 0x0a, 0x70, 0x21, 0xf3, - 0x2c, 0x96, 0x2a, 0xc3, 0x7c, 0x52, 0x36, 0xd5, 0xf6, 0x82, 0x1b, 0x30, 0x88, 0x3a, 0x04, 0x37, - 0x75, 0x4b, 0x2f, 0x5c, 0xa4, 0xe7, 0xac, 0x58, 0xa9, 0x8d, 0x38, 0xe4, 0x9e, 0xba, 0xda, 0x1c, - 0x40, 0x63, 0xc9, 0xad, 0xa4, 0x8c, 0x96, 0x51, 0xb9, 0x7e, 0xc5, 0x29, 0x2f, 0x33, 0x5f, 0xe6, - 0x16, 0xe9, 0x4f, 0x0b, 0x50, 0xe9, 0x23, 0x82, 0xa8, 0x3e, 0x15, 0x8e, 0xd1, 0xa7, 0xfb, 0xaa, - 0x4f, 0xfc, 0xd5, 0xf0, 0xc2, 0xf1, 0xc4, 0x9c, 0x57, 0xdd, 0xad, 0xbf, 0x2a, 0x00, 0x49, 0x8b, - 0xba, 0xe4, 0x7b, 0x30, 0x56, 0xaf, 0xaf, 0x18, 0x0e, 0x89, 0xa9, 0xcb, 0xad, 0x18, 0x83, 0xdc, - 0x3e, 0x96, 0x07, 0xa2, 0xee, 0x7f, 0xf8, 0x49, 0xca, 0xed, 0x71, 0xa0, 0xa7, 0xdb, 0x63, 0xca, - 0xe9, 0x71, 0x39, 0xc3, 0x8f, 0x6f, 0xb0, 0x8f, 0x1f, 0x5f, 0xda, 0x49, 0xcf, 0x5a, 0x82, 0x72, - 0x9e, 0xb4, 0x8c, 0x3b, 0x1c, 0x0f, 0x11, 0xa7, 0x5d, 0xd0, 0xf1, 0x1d, 0xce, 0x04, 0x5b, 0xef, - 0xc2, 0x59, 0x45, 0xcd, 0x73, 0xcf, 0x68, 0xb1, 0x19, 0x84, 0x8a, 0xad, 0x62, 0x40, 0xc4, 0x00, - 0xeb, 0x4f, 0x06, 0x53, 0x84, 0xf5, 0xee, 0xc1, 0x81, 0x13, 0x3c, 0x27, 0x55, 0x93, 0x70, 0xa0, - 0xaf, 0x56, 0x53, 0x1b, 0x64, 0x32, 0xa6, 0xc6, 0x9d, 0x9d, 0x0b, 0x28, 0x61, 0x78, 0x4d, 0xca, - 0xaf, 0xf6, 0x8a, 0x3c, 0xfe, 0x94, 0x01, 0x24, 0xbb, 0x30, 0x29, 0xce, 0x6e, 0xfc, 0x2d, 0xbf, - 0xb1, 0xdb, 0xc9, 0x6f, 0xcc, 0x68, 0xde, 0x4d, 0x83, 0x84, 0xaf, 0x46, 0x93, 0x0d, 0xf9, 0x02, - 0xa6, 0xa4, 0xa4, 0x26, 0x18, 0x73, 0x67, 0xac, 0x3b, 0xbd, 0x19, 0x9b, 0x34, 0x9c, 0x73, 0x82, - 0x11, 0x6b, 0xb2, 0xdc, 0xec, 0x38, 0xe7, 0xa1, 0xe3, 0x34, 0xd9, 0x20, 0x11, 0x4d, 0x36, 0x60, - 0xf3, 0x9f, 0x02, 0x49, 0xf7, 0xab, 0xdf, 0xe7, 0x34, 0xa9, 0x7d, 0x4e, 0xf3, 0x55, 0x98, 0xce, - 0xe8, 0xc0, 0x89, 0x58, 0x7c, 0x0a, 0x24, 0xdd, 0xd2, 0x93, 0x70, 0xb0, 0xae, 0xc3, 0xeb, 0x6a, - 0x08, 0xd4, 0x6a, 0x30, 0x78, 0x4a, 0x23, 0xfb, 0xaf, 0x17, 0xa1, 0xd2, 0x07, 0x95, 0xfc, 0xbd, - 0x42, 0x72, 0xb4, 0xf9, 0x6a, 0x7c, 0x3f, 0x39, 0xda, 0xd9, 0xf4, 0x19, 0xc3, 0x5e, 0xfb, 0xe0, - 0x37, 0xfe, 0xfc, 0x85, 0x35, 0x8f, 0xf4, 0x94, 0x9d, 0x7c, 0xb4, 0x06, 0xf5, 0xd1, 0xda, 0x85, - 0x19, 0x43, 0x2d, 0x3c, 0xce, 0xe1, 0x65, 0x01, 0x88, 0x34, 0xb8, 0x6b, 0xfe, 0x9e, 0xc8, 0xd6, - 0x5b, 0x2c, 0x17, 0x6c, 0x0d, 0x6a, 0xdd, 0x85, 0xd9, 0x04, 0x5f, 0x61, 0xfc, 0xff, 0x1e, 0xa8, - 0x77, 0xf8, 0xc8, 0x78, 0xa0, 0x76, 0xe6, 0xe7, 0x87, 0x95, 0x49, 0x26, 0xd6, 0xdf, 0x8c, 0x53, - 0x21, 0xc8, 0xbf, 0xac, 0x75, 0xfd, 0xfa, 0xa2, 0xda, 0xd6, 0xe3, 0x13, 0x91, 0x3b, 0x30, 0xcc, - 0x21, 0x89, 0x80, 0xe3, 0x3a, 0xb6, 0xd8, 0x17, 0x04, 0xa2, 0x35, 0x8b, 0xaf, 0x86, 0xf1, 0x47, - 0x35, 0x8e, 0x72, 0x61, 0xed, 0xf0, 0x04, 0x3c, 0x31, 0x58, 0x05, 0x35, 0x1f, 0xac, 0xc6, 0xd1, - 0x38, 0xa4, 0x1f, 0x8b, 0xc4, 0xf3, 0xfc, 0x67, 0x6d, 0xda, 0xe2, 0x99, 0x13, 0x6b, 0x13, 0x42, - 0xc7, 0x1d, 0x74, 0x18, 0x03, 0x24, 0xb3, 0x3e, 0x81, 0x59, 0x26, 0x2d, 0x04, 0xc9, 0xfa, 0x30, - 0xed, 0x06, 0x83, 0x99, 0x8f, 0x03, 0x1c, 0x06, 0xc2, 0xc7, 0x01, 0xa2, 0xd0, 0x5a, 0x83, 0x73, - 0xdc, 0xf8, 0xa9, 0x77, 0x29, 0xbe, 0x6a, 0x18, 0xc2, 0xdf, 0x89, 0x37, 0xa7, 0x19, 0xbd, 0xe7, - 0x78, 0xd6, 0xc7, 0xf8, 0xa8, 0x49, 0x2c, 0x54, 0xd7, 0xf7, 0x62, 0x4b, 0xe7, 0xf1, 0x5e, 0x41, - 0xff, 0xef, 0x70, 0xa1, 0xda, 0xe9, 0x50, 0xaf, 0x15, 0x13, 0x6e, 0x07, 0xce, 0x31, 0x63, 0x54, - 0x90, 0x2a, 0x0c, 0x21, 0xb6, 0xba, 0x03, 0x16, 0xcd, 0xcd, 0x68, 0x0e, 0xe2, 0x89, 0x08, 0xb4, - 0x58, 0x01, 0xa7, 0xb4, 0x5a, 0x30, 0x57, 0xef, 0x3e, 0x3a, 0x70, 0x23, 0x7c, 0x52, 0x80, 0x71, - 0x5e, 0x64, 0xdd, 0xab, 0x32, 0x67, 0x1a, 0x1f, 0x8c, 0xeb, 0xf1, 0xe3, 0x17, 0x7c, 0x95, 0x20, - 0x62, 0xbf, 0x3c, 0xbd, 0x73, 0x33, 0x26, 0x45, 0x2b, 0x0f, 0xaf, 0x05, 0x8b, 0x45, 0x5e, 0x35, - 0x6b, 0x1a, 0xce, 0xe8, 0x77, 0x5e, 0x7c, 0x85, 0xcc, 0xc2, 0xb4, 0x79, 0x97, 0xc5, 0xc1, 0x5f, - 0xc3, 0x0c, 0xb7, 0xb5, 0xf3, 0x08, 0xf2, 0x0b, 0x71, 0xb0, 0xf4, 0xe2, 0xee, 0x42, 0xe2, 0x2d, - 0x03, 0xba, 0x38, 0xab, 0xdc, 0x20, 0xbb, 0x0b, 0xfc, 0x61, 0xea, 0xd3, 0x05, 0xe3, 0x36, 0xb6, - 0xb8, 0xbb, 0x50, 0x1b, 0x11, 0x91, 0x78, 0x19, 0x77, 0x3e, 0xfd, 0xdf, 0x0a, 0xf7, 0x05, 0x8c, - 0x85, 0xb0, 0x42, 0x1d, 0x7c, 0xb7, 0x94, 0xfd, 0xa2, 0x7c, 0x0a, 0x8a, 0x2a, 0xd4, 0x66, 0xd1, - 0x6d, 0x59, 0x7f, 0x50, 0x80, 0xeb, 0x5c, 0x20, 0xcb, 0xa6, 0xc3, 0x8b, 0xad, 0x1c, 0x62, 0xf2, - 0x1e, 0x0c, 0x85, 0x9a, 0x83, 0x87, 0x25, 0x5a, 0xde, 0x8b, 0x13, 0x27, 0x20, 0x55, 0x98, 0xd0, - 0x9f, 0xe7, 0x1c, 0x2f, 0x8a, 0x9f, 0x3d, 0x7e, 0xf0, 0xd8, 0x51, 0x4f, 0x76, 0x9e, 0xc0, 0xf9, - 0xe5, 0x6f, 0xd8, 0x82, 0x10, 0x27, 0x94, 0xd0, 0x1e, 0xe2, 0x17, 0xcb, 0xa7, 0xb7, 0xc5, 0x8a, - 0x31, 0x55, 0xfb, 0x24, 0x98, 0xe9, 0xc9, 0xf2, 0x90, 0x53, 0x22, 0xfc, 0x98, 0x6d, 0xc0, 0xac, - 0x3f, 0x29, 0xc0, 0x85, 0xec, 0xda, 0xc4, 0xc6, 0xb2, 0x0a, 0x67, 0x16, 0x1d, 0xcf, 0xf7, 0xdc, - 0xa6, 0xd3, 0xae, 0x37, 0xf7, 0x69, 0xab, 0xab, 0xe2, 0xf5, 0xaa, 0x5d, 0x66, 0x8f, 0x7a, 0x92, - 0x5c, 0xa2, 0xd8, 0x69, 0x2a, 0xa6, 0x21, 0xe2, 0x0b, 0x0f, 0xbe, 0xf7, 0xb6, 0x69, 0xa0, 0xf8, - 0xf1, 0x96, 0xe5, 0x94, 0x92, 0xdb, 0xf2, 0x52, 0xa1, 0xb5, 0xe3, 0xb9, 0x91, 0x22, 0xe2, 0xa6, - 0x9e, 0xac, 0x22, 0xeb, 0xdf, 0x16, 0xe0, 0x1c, 0xa6, 0xe8, 0x32, 0x92, 0x7e, 0xc6, 0x61, 0xab, - 0x65, 0xe4, 0xe5, 0x82, 0xf1, 0x62, 0xc5, 0xc0, 0x36, 0x43, 0x30, 0x93, 0x37, 0x61, 0xb0, 0x2e, - 0x1d, 0xce, 0xa6, 0x12, 0xe9, 0x9a, 0x05, 0x05, 0x2b, 0xb7, 0x11, 0x8b, 0xe9, 0xf0, 0x4b, 0x34, - 0x6c, 0x52, 0x0f, 0xf3, 0x6a, 0x73, 0xcb, 0x83, 0x06, 0x89, 0x23, 0x4a, 0x0d, 0xe6, 0x45, 0x94, - 0x1a, 0x32, 0x23, 0x4a, 0x59, 0x4f, 0x79, 0x82, 0xae, 0x64, 0x87, 0xc4, 0x24, 0x7d, 0x9c, 0x4a, - 0xc3, 0xcd, 0xcf, 0x81, 0xb3, 0x59, 0x3d, 0x63, 0x42, 0x7a, 0x22, 0xc3, 0x76, 0x7e, 0x98, 0xe8, - 0x2d, 0x78, 0xcd, 0xc0, 0xad, 0xb6, 0xdb, 0xfe, 0x33, 0xda, 0xda, 0x0a, 0xfc, 0x03, 0x3f, 0x32, - 0x12, 0x14, 0x89, 0x3c, 0xf4, 0xf1, 0xb5, 0x91, 0x58, 0x95, 0x09, 0xb0, 0xf5, 0xbf, 0xc1, 0xb5, - 0x3e, 0x1c, 0x45, 0xa7, 0xea, 0x70, 0xc6, 0x49, 0x94, 0x49, 0xcf, 0xa1, 0x6b, 0x59, 0xfd, 0x4a, - 0x32, 0x0a, 0xed, 0x34, 0xfd, 0x8d, 0x6d, 0x23, 0x75, 0x35, 0x29, 0xc3, 0xcc, 0x96, 0xbd, 0xb9, - 0xb4, 0xb3, 0xb8, 0xdd, 0xd8, 0xfe, 0x62, 0x6b, 0xb9, 0xb1, 0xb3, 0xf1, 0x60, 0x63, 0xf3, 0xe1, - 0x06, 0x8f, 0xb3, 0x6e, 0x94, 0x6c, 0x2f, 0x57, 0xd7, 0x4b, 0x05, 0x32, 0x03, 0x25, 0x03, 0xbc, - 0xbc, 0x53, 0x2b, 0x15, 0x6f, 0x7c, 0x6d, 0xa4, 0x64, 0x26, 0x17, 0xa0, 0x5c, 0xdf, 0xd9, 0xda, - 0xda, 0xb4, 0x15, 0x57, 0x3d, 0xca, 0xfb, 0x2c, 0x9c, 0x31, 0x4a, 0xef, 0xda, 0xcb, 0xcb, 0xa5, - 0x02, 0x6b, 0x8a, 0x01, 0xde, 0xb2, 0x97, 0xd7, 0x57, 0x77, 0xd6, 0x4b, 0xc5, 0x1b, 0x0d, 0xfd, - 0x99, 0x1c, 0x39, 0x0f, 0x73, 0x4b, 0xcb, 0xbb, 0xab, 0x8b, 0xcb, 0x59, 0xbc, 0x67, 0xa0, 0xa4, - 0x17, 0x6e, 0x6f, 0x6e, 0x6f, 0x71, 0xd6, 0x3a, 0xf4, 0xe1, 0x72, 0xad, 0xba, 0xb3, 0xbd, 0xb2, - 0x51, 0x1a, 0xb0, 0x06, 0x47, 0x8b, 0xa5, 0xe2, 0x8d, 0x1f, 0x19, 0x6f, 0xe8, 0x58, 0xf3, 0x05, - 0xfa, 0x4e, 0xbd, 0x7a, 0x2f, 0xbf, 0x0a, 0x5e, 0xba, 0x7e, 0xb7, 0x5a, 0x2a, 0x90, 0x8b, 0x70, - 0xce, 0x80, 0x6e, 0x55, 0xeb, 0xf5, 0x87, 0x9b, 0xf6, 0xd2, 0xda, 0x72, 0xbd, 0x5e, 0x2a, 0xde, - 0xd8, 0x35, 0xa2, 0xe8, 0xb1, 0x1a, 0xd6, 0xef, 0x56, 0x1b, 0xf6, 0xf2, 0x67, 0x3b, 0xab, 0xf6, - 0xf2, 0x52, 0xba, 0x06, 0xa3, 0xf4, 0x8b, 0xe5, 0x7a, 0xa9, 0x40, 0xa6, 0xe1, 0xb4, 0x01, 0xdd, - 0xd8, 0x2c, 0x15, 0x6f, 0xbc, 0x2e, 0x02, 0xad, 0x91, 0x29, 0x80, 0xa5, 0xe5, 0xfa, 0xe2, 0xf2, - 0xc6, 0xd2, 0xea, 0xc6, 0xbd, 0xd2, 0x29, 0x32, 0x09, 0x63, 0x55, 0xf5, 0xb3, 0x70, 0xe3, 0x03, - 0x38, 0x9d, 0x50, 0xef, 0x19, 0x86, 0x52, 0x8c, 0x4b, 0xa7, 0x70, 0xf8, 0xe5, 0x4f, 0xb4, 0xb1, - 0x72, 0x4d, 0xbd, 0x54, 0xb8, 0x51, 0x93, 0x59, 0x7c, 0xb5, 0xef, 0x9c, 0x8c, 0xc3, 0xc8, 0xd2, - 0xf2, 0xdd, 0xea, 0xce, 0xda, 0x76, 0xe9, 0x14, 0xfb, 0xb1, 0x68, 0x2f, 0x57, 0xb7, 0x97, 0x97, - 0x4a, 0x05, 0x32, 0x06, 0x43, 0xf5, 0xed, 0xea, 0xf6, 0x72, 0xa9, 0x48, 0x46, 0x61, 0x70, 0xa7, - 0xbe, 0x6c, 0x97, 0x06, 0x16, 0xfe, 0xc5, 0xdf, 0x2d, 0x70, 0x43, 0xa3, 0x7c, 0x8f, 0xf5, 0xb5, - 0xa6, 0x50, 0x8a, 0x2d, 0x4f, 0xa4, 0x2c, 0xcd, 0xd5, 0x1e, 0x51, 0x0a, 0x98, 0xef, 0x71, 0xb9, - 0x83, 0x08, 0xd7, 0x0b, 0xb7, 0x0b, 0xc4, 0x46, 0x67, 0x98, 0x84, 0x7e, 0xa5, 0x38, 0x67, 0xab, - 0xc0, 0xf3, 0x17, 0x7b, 0xaa, 0x65, 0xe4, 0x57, 0xc0, 0xd2, 0x79, 0xe6, 0x68, 0x21, 0xdf, 0x3b, - 0x9e, 0xb6, 0x21, 0xeb, 0x7c, 0xfd, 0x78, 0xe8, 0xe4, 0x3e, 0x4c, 0x32, 0xd9, 0x5c, 0xa1, 0x91, - 0xf3, 0x49, 0x42, 0x4d, 0x25, 0x98, 0xbf, 0x90, 0x5d, 0xa8, 0xb2, 0x0a, 0x4d, 0x60, 0x47, 0xb8, - 0x72, 0x1d, 0x12, 0x19, 0x8c, 0x43, 0x42, 0xf8, 0x8e, 0x3f, 0x7f, 0x26, 0x01, 0xde, 0xbd, 0x73, - 0xbb, 0x40, 0xea, 0x18, 0x09, 0xcf, 0x10, 0xf2, 0x89, 0x7c, 0x20, 0x98, 0x96, 0xfe, 0x79, 0x6b, - 0x2a, 0x2a, 0x07, 0x68, 0x8e, 0x76, 0xb0, 0x01, 0x24, 0x2d, 0x3b, 0x93, 0xcb, 0xf1, 0x3a, 0xc8, - 0x16, 0xab, 0xe7, 0xcf, 0xa6, 0x2e, 0xb2, 0x96, 0x99, 0xf4, 0x44, 0x96, 0x61, 0x4a, 0xbc, 0xb4, - 0x17, 0xd2, 0x3c, 0xe9, 0xa5, 0x0f, 0xe4, 0xb2, 0xb9, 0x87, 0xe3, 0xa4, 0x34, 0x02, 0x32, 0x1f, - 0xf7, 0x23, 0xa9, 0x26, 0xcc, 0x9f, 0xcf, 0x2c, 0x13, 0xfd, 0xbb, 0x0b, 0x53, 0xa6, 0x72, 0x41, - 0xe4, 0x04, 0x65, 0xea, 0x1c, 0xb9, 0x0d, 0x6a, 0xc0, 0xdc, 0xba, 0xe3, 0xe2, 0x7d, 0x89, 0x70, - 0xd2, 0x93, 0x7e, 0x70, 0xa4, 0xd2, 0xc3, 0x31, 0xae, 0x4e, 0xbd, 0x96, 0x9a, 0x84, 0xbc, 0x0c, - 0x01, 0xf8, 0xd9, 0xd4, 0xa5, 0x8c, 0x6c, 0xfa, 0x28, 0x12, 0xcb, 0xcc, 0xeb, 0x9c, 0xe5, 0x76, - 0x3a, 0x9f, 0xe7, 0x29, 0x4d, 0xd6, 0x51, 0x48, 0x4f, 0x70, 0xd4, 0xd6, 0xc4, 0x89, 0xd9, 0x95, - 0x31, 0xde, 0x83, 0x96, 0x6c, 0x5f, 0x14, 0x86, 0x24, 0x67, 0xe0, 0x72, 0x99, 0xdd, 0x2e, 0x90, - 0xaf, 0xf1, 0xab, 0xce, 0x64, 0xf7, 0xd0, 0x8d, 0xf6, 0x85, 0xf4, 0x73, 0x3e, 0x93, 0x81, 0xf8, - 0x50, 0x7a, 0x70, 0xb7, 0x61, 0x26, 0xcb, 0x39, 0x5b, 0x0d, 0x68, 0x0f, 0xcf, 0xed, 0xdc, 0x55, - 0x60, 0x33, 0x55, 0xa3, 0x95, 0x3f, 0x49, 0x3d, 0x7c, 0x83, 0x73, 0x79, 0x7e, 0x04, 0x53, 0x6c, - 0x95, 0x3c, 0xa0, 0xb4, 0x53, 0x6d, 0xbb, 0x4f, 0x69, 0x48, 0x64, 0x18, 0x63, 0x05, 0xca, 0xa3, - 0xbd, 0x5e, 0x20, 0xdf, 0x85, 0xf1, 0x87, 0x4e, 0xd4, 0xdc, 0x17, 0xe1, 0x3c, 0x65, 0xb4, 0x4f, - 0x84, 0xcd, 0xcb, 0x5f, 0x58, 0x78, 0xbb, 0x40, 0x7e, 0x00, 0x23, 0xf7, 0x68, 0x84, 0x0f, 0xb4, - 0xaf, 0x28, 0x5f, 0x42, 0x6e, 0x9f, 0x5c, 0xf5, 0xd4, 0x2b, 0x24, 0xd9, 0xe0, 0xa4, 0x31, 0x97, - 0xdc, 0x02, 0xe0, 0x1b, 0x02, 0x72, 0x48, 0x16, 0xcf, 0xa7, 0x9a, 0x4d, 0xee, 0x31, 0xe1, 0xa1, - 0x4d, 0x23, 0x7a, 0xdc, 0x2a, 0xf3, 0xc6, 0x68, 0x0d, 0xa6, 0x54, 0x22, 0xa6, 0x0d, 0x8c, 0xba, - 0x62, 0x25, 0x98, 0x85, 0x27, 0xe0, 0xf6, 0x01, 0xfb, 0x2a, 0x78, 0x16, 0x62, 0x0c, 0xcf, 0x81, - 0x3b, 0xe9, 0x9c, 0x1e, 0xe3, 0x43, 0xdf, 0x42, 0xe5, 0x20, 0x72, 0x34, 0x8d, 0x76, 0xc5, 0x0f, - 0x23, 0x93, 0x56, 0x41, 0xb2, 0x69, 0x7f, 0x19, 0xe6, 0xf5, 0x7a, 0xcd, 0x78, 0xd2, 0xf1, 0x9e, - 0x9b, 0x17, 0xa6, 0x7a, 0xfe, 0x4a, 0x0f, 0x0c, 0xa1, 0xbf, 0x0d, 0xfc, 0x56, 0xb1, 0x80, 0xdb, - 0xc9, 0x12, 0x4c, 0xcb, 0xba, 0x36, 0x3b, 0xd4, 0xab, 0xd7, 0x57, 0x30, 0xe9, 0x8e, 0xf4, 0x5c, - 0xd1, 0x60, 0x92, 0x3b, 0x49, 0x17, 0xb1, 0xa3, 0xcf, 0x08, 0xc3, 0x41, 0x7a, 0x05, 0xe7, 0x88, - 0x8f, 0xbe, 0xcc, 0x40, 0xc7, 0x0f, 0xb8, 0x51, 0xc9, 0x10, 0xfe, 0x77, 0x17, 0x48, 0x0f, 0x05, - 0x68, 0x3e, 0x47, 0x85, 0xb8, 0x5d, 0x20, 0x5f, 0x00, 0x49, 0xab, 0x24, 0x6a, 0x08, 0x73, 0xd5, - 0x2f, 0x35, 0x84, 0x3d, 0xf4, 0x99, 0x7b, 0x30, 0xab, 0x82, 0xf0, 0x68, 0xb5, 0x2e, 0x90, 0x9c, - 0xd6, 0xe4, 0xb5, 0x92, 0x7c, 0x02, 0xd3, 0x62, 0xd1, 0xea, 0x05, 0xa4, 0xa4, 0xf6, 0x1f, 0xa1, - 0x95, 0xe4, 0xae, 0xd3, 0xfb, 0x30, 0x5b, 0x4f, 0x8c, 0x18, 0x77, 0xe6, 0x3f, 0x67, 0xb2, 0x40, - 0x60, 0x9d, 0x46, 0x7c, 0xc8, 0xb2, 0x79, 0x3d, 0x00, 0xc2, 0x8d, 0x42, 0x92, 0xdd, 0x53, 0x97, - 0x3e, 0x23, 0x17, 0x13, 0x4d, 0x67, 0x40, 0x44, 0xc3, 0x0d, 0x2c, 0xb7, 0x67, 0xdb, 0x3c, 0x87, - 0x36, 0x42, 0x8d, 0x7b, 0xf4, 0xcb, 0x06, 0x81, 0x71, 0x15, 0x2f, 0x26, 0xe0, 0x5c, 0x2e, 0x06, - 0xf9, 0x35, 0x8c, 0x7e, 0xdb, 0x5b, 0xad, 0x22, 0xdf, 0xcd, 0xd2, 0x7e, 0x73, 0x14, 0xc3, 0xf9, - 0x37, 0x8f, 0x87, 0xac, 0x14, 0xd9, 0xc9, 0x7b, 0x34, 0xda, 0x6a, 0x77, 0xf7, 0x5c, 0xcc, 0xae, - 0x4a, 0x94, 0xd1, 0x48, 0x81, 0xc4, 0xba, 0x94, 0x41, 0xe7, 0xe2, 0x82, 0x3a, 0xfd, 0x31, 0x59, - 0x85, 0x12, 0xdf, 0xff, 0x35, 0x16, 0x17, 0x53, 0x2c, 0x04, 0x8a, 0x13, 0x38, 0x07, 0x61, 0xee, - 0x6c, 0xdd, 0xe2, 0xbe, 0x51, 0x44, 0x7e, 0x93, 0xba, 0x80, 0x39, 0x6d, 0xc0, 0x54, 0x46, 0x00, - 0x36, 0x23, 0x36, 0x0d, 0x69, 0x24, 0xc3, 0xec, 0xf0, 0xdc, 0xba, 0x57, 0xe3, 0xc3, 0x3e, 0x5d, - 0x1a, 0x7f, 0xfa, 0x89, 0x90, 0x70, 0xbb, 0x6f, 0x11, 0x95, 0x6f, 0x38, 0x83, 0xe9, 0xeb, 0x86, - 0x4c, 0x72, 0x32, 0xbe, 0x6f, 0xe3, 0x19, 0x84, 0xa1, 0x85, 0x66, 0xe3, 0xb6, 0xb1, 0xdf, 0x92, - 0x6a, 0x52, 0xa3, 0xda, 0x5d, 0xc0, 0x2d, 0x8d, 0x1d, 0x92, 0x4c, 0x84, 0xed, 0x06, 0x01, 0xf5, - 0x38, 0x71, 0x9e, 0xbc, 0x91, 0x45, 0xfd, 0x31, 0x6e, 0x3d, 0x1a, 0x35, 0x7f, 0x73, 0xd8, 0x8f, - 0x05, 0xcf, 0x05, 0x75, 0xbb, 0x40, 0xde, 0x83, 0x51, 0xd1, 0x46, 0x46, 0x64, 0x34, 0x3a, 0xec, - 0xd1, 0x6a, 0xa4, 0x04, 0x3e, 0x48, 0xd8, 0x66, 0x13, 0x27, 0x6f, 0xf6, 0x79, 0x9b, 0xdf, 0x63, - 0x87, 0x6d, 0xeb, 0x45, 0x28, 0x17, 0xe5, 0xa9, 0x8b, 0x94, 0x65, 0x15, 0x8e, 0x46, 0x82, 0xfa, - 0x1c, 0x8f, 0x9c, 0x09, 0x93, 0x9b, 0x31, 0xa6, 0xa3, 0x0a, 0xcd, 0xa6, 0xe4, 0x66, 0x03, 0xdc, - 0xef, 0xac, 0x5d, 0x85, 0x52, 0xb5, 0x89, 0x27, 0x41, 0x9d, 0x1e, 0x38, 0x9d, 0x7d, 0x3f, 0xa0, - 0x4a, 0x69, 0x49, 0x16, 0x48, 0x5e, 0xb3, 0x4a, 0xb2, 0x10, 0x05, 0x6b, 0xd4, 0xc1, 0xc0, 0xd7, - 0x73, 0x4a, 0xb4, 0x48, 0x14, 0x65, 0x53, 0xf4, 0x50, 0x52, 0x66, 0x16, 0x99, 0x5a, 0xd5, 0x7e, - 0x39, 0x36, 0x1f, 0xe0, 0x86, 0xa1, 0x90, 0x43, 0x75, 0x42, 0x28, 0x90, 0x52, 0xe7, 0xe4, 0xf3, - 0x23, 0x85, 0x5a, 0x95, 0xf7, 0xc6, 0xf1, 0xb0, 0xe4, 0x51, 0xe7, 0x55, 0xff, 0x7d, 0x98, 0x5a, - 0x66, 0x1b, 0x7a, 0xb7, 0xe5, 0xf2, 0x60, 0xff, 0xc4, 0x8c, 0xde, 0x9e, 0x4b, 0xb8, 0x22, 0xd3, - 0xaf, 0x21, 0xa9, 0x50, 0xfd, 0xe5, 0x99, 0xa2, 0xc1, 0xe4, 0x7c, 0xcc, 0x48, 0xb6, 0x22, 0xdf, - 0x02, 0xaa, 0xe6, 0x42, 0xd7, 0x9f, 0xe3, 0x12, 0x61, 0xb5, 0xd3, 0x69, 0x4b, 0x93, 0x34, 0xbf, - 0x7b, 0xbf, 0x66, 0xa8, 0x90, 0xa9, 0x72, 0xc9, 0x3b, 0x2d, 0x34, 0x7e, 0xae, 0xa5, 0x43, 0xce, - 0xe1, 0x99, 0x53, 0xde, 0x6f, 0x2d, 0xaa, 0xf0, 0xdc, 0xd5, 0x76, 0x3b, 0x45, 0x1c, 0x92, 0x37, - 0x4c, 0xee, 0x59, 0x38, 0xfd, 0x6a, 0x40, 0x15, 0x9d, 0x4b, 0x5d, 0xd5, 0x4e, 0x87, 0x6f, 0x96, - 0x97, 0xd4, 0x86, 0x61, 0x16, 0xa4, 0x55, 0xf4, 0x64, 0xb9, 0xd8, 0xdb, 0xef, 0xe3, 0x32, 0x8b, - 0x73, 0x26, 0x13, 0x5d, 0xe1, 0x4d, 0xa6, 0x8c, 0x56, 0x42, 0x58, 0xa2, 0x50, 0x9d, 0x13, 0xa7, - 0x51, 0xf4, 0x89, 0x13, 0x30, 0x2b, 0xcb, 0x4c, 0x02, 0x2e, 0xf9, 0x5d, 0xca, 0x2b, 0x56, 0x96, - 0xd2, 0x52, 0x32, 0x2f, 0xbd, 0xea, 0x72, 0x3a, 0x61, 0xbd, 0xd9, 0xe5, 0xdc, 0x84, 0xf6, 0xf7, - 0xa1, 0x94, 0x4c, 0x89, 0xad, 0x98, 0xe6, 0xe4, 0xca, 0xce, 0x9d, 0x93, 0xbb, 0x30, 0xa3, 0xcf, - 0xa8, 0xea, 0x77, 0xde, 0xee, 0x9f, 0xc7, 0x67, 0x1b, 0x66, 0x33, 0x33, 0x58, 0xab, 0x23, 0xb6, - 0x57, 0x7e, 0xeb, 0x5c, 0xae, 0x14, 0xce, 0x66, 0x27, 0xb1, 0x27, 0xaf, 0x99, 0x8a, 0x7f, 0x76, - 0x4a, 0xef, 0xf9, 0x6b, 0x7d, 0xb0, 0xc4, 0x80, 0x7e, 0x8d, 0x27, 0x60, 0xaa, 0x8e, 0x2b, 0x9a, - 0x29, 0x20, 0xa7, 0x02, 0xab, 0x17, 0x8a, 0x5a, 0x03, 0x33, 0x19, 0xc5, 0xf9, 0x43, 0x7c, 0x35, - 0x9f, 0x67, 0xbc, 0xb0, 0x76, 0x65, 0x14, 0xea, 0xdc, 0x91, 0xe9, 0x99, 0xec, 0xbc, 0x87, 0x2e, - 0x39, 0xaf, 0xd6, 0xc3, 0xf1, 0x9b, 0x9c, 0xc7, 0xad, 0xa5, 0xcc, 0x36, 0x46, 0x26, 0xf2, 0xa4, - 0xd9, 0x26, 0x2b, 0x83, 0xba, 0x1a, 0x86, 0x5e, 0x39, 0xfa, 0xf9, 0x69, 0xfc, 0x15, 0xb7, 0xe3, - 0x98, 0x55, 0xe8, 0x76, 0x9c, 0x4c, 0xfe, 0x97, 0xf3, 0x11, 0x74, 0xe6, 0x0e, 0xbf, 0xb4, 0x4d, - 0xa4, 0x52, 0x27, 0xba, 0xaa, 0x94, 0x9d, 0x66, 0x5d, 0xad, 0x8d, 0x4c, 0x14, 0xbd, 0x8a, 0x87, - 0xf2, 0x1b, 0xcc, 0x19, 0xa5, 0x1e, 0x79, 0xe6, 0x7b, 0x8b, 0x29, 0x9b, 0x50, 0x8e, 0x27, 0x33, - 0xd1, 0x81, 0x13, 0x4e, 0xa5, 0x1c, 0x8c, 0x73, 0xb9, 0xd9, 0xe5, 0xc9, 0x77, 0x52, 0x5f, 0x7a, - 0xce, 0xc0, 0xf4, 0xac, 0x82, 0xef, 0xe7, 0x5a, 0x54, 0xeb, 0xf3, 0xb1, 0x11, 0x57, 0x4f, 0x44, - 0x9f, 0xda, 0xcf, 0x33, 0xb2, 0xd4, 0xdf, 0x43, 0xb9, 0x58, 0xcb, 0x34, 0x9f, 0xdb, 0xeb, 0x8b, - 0x59, 0x7c, 0xc2, 0xf4, 0x8e, 0xab, 0xb5, 0x4b, 0xca, 0x69, 0xc9, 0x82, 0x93, 0xec, 0xb8, 0xc7, - 0x69, 0x5a, 0x1e, 0x9f, 0x25, 0x18, 0xd7, 0x52, 0xd4, 0x93, 0x73, 0xc6, 0x30, 0x19, 0x67, 0xe8, - 0xbc, 0xd1, 0x39, 0xf3, 0xf8, 0x5c, 0x44, 0x53, 0xb2, 0x4a, 0x74, 0x9f, 0xdb, 0x8a, 0xf3, 0x69, - 0x1e, 0x86, 0x19, 0x59, 0x8d, 0x02, 0x6f, 0xcd, 0x85, 0xe4, 0xe0, 0x18, 0x0d, 0xca, 0xef, 0x12, - 0xd1, 0x87, 0xa6, 0x4f, 0x93, 0xf2, 0xe5, 0xd7, 0x69, 0x91, 0x07, 0x17, 0x53, 0xd1, 0xc8, 0xb0, - 0x85, 0x67, 0x95, 0x4d, 0x4c, 0x83, 0xa2, 0x81, 0x22, 0x9b, 0xcd, 0x16, 0x3e, 0x1f, 0xc9, 0xc8, - 0xd9, 0xaf, 0x76, 0xd8, 0x9e, 0x29, 0xfd, 0x33, 0x64, 0x37, 0xb5, 0x67, 0xe7, 0x72, 0xec, 0x99, - 0xc4, 0x3f, 0xb7, 0xa5, 0x3f, 0xd4, 0xf6, 0xec, 0x54, 0x66, 0x7e, 0x72, 0x3d, 0x29, 0xb8, 0xe5, - 0x25, 0xef, 0xef, 0x71, 0x26, 0xcc, 0x64, 0x25, 0xf5, 0xd7, 0xec, 0xba, 0xb9, 0x19, 0xff, 0x33, - 0x46, 0xc1, 0x96, 0xeb, 0x3f, 0x87, 0x5b, 0x8f, 0x14, 0xff, 0xb9, 0x2d, 0xfc, 0x52, 0xdb, 0xe8, - 0x12, 0xa9, 0xf8, 0x95, 0x3a, 0xde, 0x27, 0x57, 0x7f, 0x2e, 0xef, 0x0d, 0x7c, 0xd2, 0x94, 0xce, - 0xa3, 0xaf, 0x24, 0x9b, 0x5e, 0x59, 0xf6, 0x33, 0xcd, 0xbe, 0xb3, 0xe9, 0x2e, 0x32, 0x7e, 0x67, - 0x13, 0x46, 0xdb, 0x7e, 0x0d, 0xfb, 0x5a, 0x6e, 0xc6, 0x19, 0xf9, 0xf7, 0x13, 0x9b, 0x71, 0x7e, - 0x86, 0xfe, 0x1e, 0x6a, 0xd0, 0xe9, 0xba, 0xbb, 0xe7, 0x69, 0xe9, 0xf3, 0x95, 0x12, 0x94, 0xce, - 0xe8, 0xaf, 0xb6, 0x98, 0xac, 0x6c, 0xfb, 0x9b, 0x4c, 0xfe, 0xe1, 0xd2, 0xbb, 0x9e, 0x08, 0x9d, - 0xcc, 0xe7, 0xe7, 0x7f, 0x57, 0xdb, 0x4d, 0x66, 0xe6, 0x74, 0x8d, 0xa1, 0x9e, 0x85, 0x5c, 0x31, - 0xcc, 0x48, 0x88, 0xae, 0x18, 0x66, 0xa6, 0x2d, 0xbf, 0x85, 0x56, 0x17, 0xdb, 0x6f, 0x53, 0xdd, - 0xea, 0xa2, 0xa5, 0xb5, 0x4e, 0x18, 0x3d, 0xc8, 0xc7, 0x30, 0xa6, 0xd2, 0x7e, 0x2b, 0xfb, 0x76, - 0x32, 0xf3, 0xf8, 0x7c, 0x39, 0x5d, 0x20, 0x2a, 0x7c, 0x47, 0x1a, 0x3e, 0xb0, 0xce, 0xb2, 0x69, - 0x30, 0xca, 0xaf, 0xf6, 0x1d, 0x69, 0xf5, 0x30, 0xc8, 0x52, 0x49, 0xbf, 0x93, 0x64, 0xdf, 0x87, - 0x89, 0x38, 0xc1, 0xf7, 0xee, 0x82, 0x46, 0x98, 0xc8, 0xfa, 0x9d, 0x24, 0x7c, 0x4f, 0x5e, 0x69, - 0x60, 0x7d, 0x66, 0x61, 0xef, 0x53, 0xfc, 0x63, 0x69, 0x65, 0x31, 0x5a, 0x9a, 0x4a, 0x17, 0xde, - 0x63, 0xf3, 0x9d, 0xd0, 0x33, 0x6e, 0xaa, 0xa9, 0xcd, 0xc8, 0x99, 0xab, 0xa6, 0x36, 0x2b, 0xe7, - 0x6d, 0x6c, 0xf2, 0xff, 0x42, 0x9a, 0x14, 0x62, 0xa6, 0x17, 0x8d, 0x66, 0xa5, 0xf8, 0x5e, 0xca, - 0x2b, 0x4e, 0xb2, 0xae, 0x43, 0x29, 0x99, 0x1e, 0x54, 0xe9, 0x63, 0x39, 0x79, 0x5c, 0x95, 0x92, - 0x97, 0x9b, 0x57, 0x74, 0x4b, 0xda, 0xc7, 0x4d, 0xbe, 0x57, 0xb2, 0x1b, 0xa5, 0xb3, 0xce, 0x37, - 0x98, 0x4f, 0x1a, 0x99, 0x42, 0x75, 0x4d, 0x39, 0x95, 0x89, 0x54, 0x97, 0xac, 0x32, 0x92, 0x8b, - 0xba, 0x32, 0x68, 0x55, 0x76, 0x52, 0xf7, 0x37, 0x4c, 0x15, 0xb6, 0x47, 0x58, 0xf9, 0xbe, 0xd7, - 0xbf, 0xe4, 0x97, 0x60, 0x2e, 0x27, 0x4c, 0x36, 0xb9, 0x96, 0xb0, 0xb4, 0x66, 0x87, 0xd1, 0x56, - 0x0b, 0x24, 0x33, 0x85, 0xf7, 0x3a, 0xfa, 0x0d, 0x18, 0x21, 0x24, 0x52, 0x77, 0x71, 0x0f, 0xdd, - 0x68, 0x9f, 0x67, 0xaa, 0xd6, 0xb6, 0xcd, 0xcc, 0xd8, 0x13, 0xa4, 0x8e, 0xba, 0x88, 0x01, 0xcd, - 0xb8, 0x8e, 0xcb, 0x60, 0x38, 0x9f, 0xcd, 0x90, 0xed, 0x1d, 0x6c, 0x2d, 0x64, 0xc4, 0xf7, 0x50, - 0x6b, 0x21, 0x3f, 0xf6, 0x47, 0x6e, 0x33, 0xb7, 0xa4, 0x8c, 0x94, 0xcd, 0x31, 0x3f, 0xd4, 0x47, - 0x2e, 0xc7, 0xfb, 0x8c, 0x63, 0x2a, 0x7a, 0x07, 0xc9, 0x41, 0xef, 0xbd, 0x7b, 0xd8, 0xf2, 0xc8, - 0x35, 0xa9, 0x16, 0xb4, 0xf6, 0xe5, 0xc5, 0x09, 0xc9, 0x6d, 0xdf, 0xb2, 0xfc, 0x9e, 0xb2, 0xdb, - 0x77, 0xdc, 0x43, 0x57, 0xdd, 0x7f, 0x25, 0x02, 0xc8, 0x18, 0x1d, 0xd5, 0xe0, 0xf3, 0x39, 0x70, - 0xb2, 0x81, 0x8e, 0x40, 0x49, 0xa8, 0xa6, 0x94, 0x66, 0x47, 0xa8, 0xc9, 0xe5, 0xc7, 0xd7, 0xb1, - 0x11, 0xe1, 0xe3, 0x24, 0xeb, 0x38, 0x11, 0x1a, 0x44, 0xac, 0x63, 0x03, 0x7a, 0xb2, 0x75, 0x9c, - 0x60, 0x68, 0xae, 0xe3, 0x64, 0x33, 0x93, 0x9a, 0x7e, 0xee, 0xac, 0x26, 0x9b, 0xa9, 0xd6, 0x71, - 0x36, 0xc7, 0xfc, 0x48, 0x2c, 0xb9, 0x1c, 0xd5, 0x3a, 0x36, 0x39, 0xe6, 0xa0, 0x1f, 0x73, 0x1d, - 0x27, 0x2b, 0x31, 0xd7, 0xf1, 0x89, 0xda, 0xa7, 0xd6, 0x71, 0x76, 0xfb, 0x4e, 0xbc, 0x8e, 0x13, - 0xa1, 0x8b, 0x8c, 0x8e, 0x66, 0xad, 0xe3, 0x24, 0x3e, 0x5f, 0xc7, 0x49, 0x68, 0xc2, 0xb8, 0xd2, - 0x63, 0x1d, 0x27, 0x29, 0x3f, 0x43, 0x7e, 0x89, 0xb0, 0x2b, 0xc7, 0x59, 0xc9, 0xb9, 0x11, 0x5b, - 0xc8, 0x43, 0x34, 0xef, 0x25, 0xe0, 0xc7, 0x5b, 0xcd, 0x17, 0xf2, 0x98, 0xe2, 0x7a, 0xde, 0x95, - 0x83, 0x98, 0x6c, 0xae, 0x69, 0xbb, 0xca, 0x8e, 0x3a, 0xd3, 0xa3, 0xc1, 0xbb, 0x6c, 0xdd, 0xb4, - 0x7a, 0xf0, 0xed, 0x15, 0x34, 0xa7, 0x07, 0x5f, 0xa5, 0xca, 0x24, 0xf9, 0xe6, 0x92, 0xf4, 0x5e, - 0xdf, 0x9f, 0xcb, 0x0b, 0x8e, 0x24, 0xdd, 0x42, 0x42, 0x39, 0x3a, 0x71, 0x4b, 0x95, 0x92, 0x94, - 0x6c, 0xe9, 0x49, 0xd7, 0xf9, 0xba, 0x94, 0x1e, 0x52, 0xd1, 0xb6, 0x12, 0x9d, 0xd6, 0xd7, 0x7a, - 0x6e, 0x09, 0xd9, 0x46, 0x5b, 0x6e, 0x1a, 0xae, 0xd9, 0x81, 0xf3, 0xc2, 0x7a, 0xf5, 0xe5, 0x9a, - 0x8a, 0x1b, 0xa4, 0x73, 0xcd, 0x0b, 0x2a, 0xa4, 0xb8, 0xa6, 0xa9, 0x3f, 0x41, 0xeb, 0x97, 0x78, - 0x71, 0xe5, 0x3d, 0xf6, 0xf3, 0x2d, 0x29, 0xd3, 0x86, 0xb3, 0x12, 0xc3, 0x45, 0x1f, 0xb1, 0x8f, - 0xc4, 0x0d, 0x9e, 0x04, 0xe6, 0x0e, 0x7e, 0x16, 0x3d, 0xf9, 0x04, 0x4a, 0x62, 0x7b, 0x8b, 0x19, - 0x64, 0x21, 0xe6, 0x4e, 0x5d, 0x4d, 0x1a, 0xdd, 0x8e, 0xd1, 0x82, 0xe3, 0x18, 0xdb, 0x8e, 0x33, - 0x12, 0xf9, 0x96, 0x29, 0x76, 0x1c, 0x6e, 0x07, 0xdd, 0x30, 0xa2, 0xad, 0xb4, 0x45, 0xc9, 0x6c, - 0x8c, 0xf4, 0x8c, 0x30, 0xd1, 0x77, 0x17, 0xc8, 0x2a, 0xee, 0x6d, 0x26, 0xb8, 0x97, 0xc9, 0x2d, - 0x9b, 0x0d, 0x6e, 0x3d, 0x2b, 0xea, 0x59, 0x8f, 0xd9, 0xa6, 0xbc, 0xba, 0xf3, 0x1b, 0xa5, 0x86, - 0xe8, 0x98, 0xbd, 0xcb, 0x1b, 0xa2, 0x0f, 0xd1, 0x0d, 0x80, 0x9b, 0xff, 0xfa, 0x8d, 0x4c, 0xf2, - 0xa1, 0x11, 0xf9, 0x14, 0xc6, 0x24, 0x71, 0xff, 0x01, 0x49, 0x52, 0xe3, 0x80, 0x2c, 0xc1, 0xa4, - 0xf1, 0x8a, 0x4a, 0x69, 0x37, 0x59, 0x6f, 0xab, 0x7a, 0xcc, 0xf3, 0xa4, 0xf1, 0x5a, 0x4a, 0x71, - 0xc9, 0x7a, 0x43, 0x95, 0xcb, 0xe5, 0x07, 0x30, 0x2e, 0x86, 0xb4, 0xe7, 0x68, 0xe4, 0xdb, 0xdb, - 0x66, 0x35, 0x8f, 0xe4, 0x6e, 0xcb, 0x8d, 0x16, 0x7d, 0xef, 0xb1, 0xbb, 0xd7, 0x77, 0x60, 0xd2, - 0x24, 0xbb, 0x0b, 0xe4, 0x2b, 0xcc, 0xeb, 0x2c, 0xb3, 0x6d, 0xd3, 0xe8, 0x99, 0x1f, 0x3c, 0x71, - 0xbd, 0xbd, 0x3e, 0x2c, 0x2f, 0x9b, 0x2c, 0x93, 0x74, 0xd2, 0x77, 0xe4, 0x2b, 0x98, 0xaf, 0xe7, - 0x33, 0xef, 0xcb, 0xa4, 0xf7, 0xf1, 0x52, 0x87, 0x0b, 0xe8, 0x3d, 0x73, 0xd2, 0xb6, 0xf7, 0x64, - 0xfa, 0x05, 0x0f, 0xd8, 0x28, 0x6d, 0xf5, 0x4d, 0x3f, 0x68, 0xf5, 0xe7, 0x58, 0x31, 0x1d, 0x69, - 0x13, 0x64, 0x72, 0x30, 0xbe, 0x80, 0x73, 0xf5, 0x5c, 0xd6, 0xfd, 0x58, 0xf4, 0x93, 0x24, 0xcf, - 0xe3, 0x50, 0x9c, 0xb0, 0xdd, 0x3d, 0x79, 0xae, 0xe2, 0x9e, 0xc6, 0xce, 0xa1, 0xad, 0x80, 0x3e, - 0xa6, 0x01, 0xba, 0x6b, 0xf7, 0x73, 0x54, 0x36, 0xd1, 0x65, 0xcf, 0x57, 0xe1, 0x4c, 0x3d, 0xc5, - 0x2a, 0x8f, 0xa4, 0xdf, 0xfd, 0xcf, 0x34, 0xf6, 0xf4, 0x98, 0xed, 0xea, 0xe3, 0x25, 0x34, 0x7e, - 0x8f, 0x46, 0x3b, 0xab, 0x7d, 0x46, 0x49, 0xbe, 0x27, 0x90, 0x88, 0xbb, 0x77, 0x18, 0x65, 0x5d, - 0xa3, 0x4c, 0x63, 0xe4, 0x7e, 0xbc, 0x9f, 0xca, 0xbb, 0x90, 0xbe, 0xd5, 0xe6, 0x71, 0x78, 0x0b, - 0xf7, 0x42, 0xe1, 0xb2, 0x3c, 0x17, 0x8b, 0x00, 0x1c, 0x12, 0x9b, 0xea, 0x34, 0xef, 0xe5, 0x90, - 0x54, 0xb9, 0xfa, 0xc7, 0x97, 0x87, 0x80, 0x5d, 0x4a, 0xb9, 0xb2, 0xf7, 0x64, 0xc1, 0xad, 0xa0, - 0x6b, 0x7e, 0xf3, 0x89, 0x6e, 0x05, 0xd5, 0x32, 0xff, 0xcf, 0x9b, 0x79, 0xf9, 0xc5, 0x8e, 0x8f, - 0xc9, 0xf9, 0x75, 0xc7, 0x2f, 0x3d, 0xf7, 0xff, 0xfc, 0x5c, 0x0a, 0x2e, 0x2c, 0x48, 0x6f, 0x49, - 0xdb, 0x22, 0x56, 0x68, 0x72, 0xce, 0x1d, 0x1a, 0x65, 0x56, 0x44, 0x22, 0xd3, 0xac, 0xa8, 0x37, - 0x34, 0xdf, 0x96, 0x4f, 0x6c, 0xda, 0x69, 0xa3, 0x17, 0xf4, 0x81, 0xcf, 0x69, 0x62, 0xc7, 0xd8, - 0x74, 0x51, 0x7f, 0xff, 0xad, 0x69, 0xe1, 0xf5, 0x63, 0x0c, 0xbc, 0x0a, 0xa8, 0x9c, 0x2e, 0x8b, - 0x87, 0x52, 0x77, 0x46, 0xba, 0x5d, 0x20, 0x1b, 0x70, 0xf6, 0x1e, 0x8d, 0xc4, 0x1e, 0x67, 0xd3, - 0x30, 0x0a, 0xdc, 0x66, 0xd4, 0xf3, 0x62, 0x50, 0xea, 0x26, 0x19, 0x34, 0xbb, 0x6f, 0x33, 0x7e, - 0xf5, 0x6c, 0x7e, 0x3d, 0xe9, 0x7a, 0xb8, 0xc8, 0x8a, 0xdb, 0x86, 0x93, 0x34, 0x31, 0x7f, 0x89, - 0x8f, 0x70, 0x0f, 0x9c, 0x7c, 0xd2, 0x52, 0x1c, 0xfd, 0x44, 0x68, 0x5b, 0x37, 0x61, 0x98, 0x13, - 0xe5, 0x1e, 0xa8, 0x13, 0x3a, 0x0d, 0xb9, 0x03, 0x63, 0xca, 0x85, 0x86, 0x18, 0x45, 0xb9, 0xed, - 0xba, 0x03, 0x63, 0x5c, 0xb5, 0x3a, 0x3e, 0xc9, 0x87, 0x30, 0xa6, 0x7c, 0x6e, 0x4e, 0x7c, 0xd2, - 0x7f, 0x02, 0x93, 0xba, 0xf7, 0xcd, 0xc9, 0x07, 0xf2, 0x07, 0x78, 0x7d, 0x2b, 0x6f, 0x49, 0xf2, - 0xe9, 0x67, 0x13, 0x41, 0x61, 0xc4, 0x90, 0xf2, 0x0d, 0x52, 0x02, 0x73, 0x9b, 0x7f, 0x26, 0x45, - 0x4d, 0x3e, 0x94, 0x2f, 0x99, 0x14, 0x71, 0x1a, 0xa9, 0xc7, 0x98, 0x4d, 0xf1, 0x61, 0x7e, 0x11, - 0x62, 0xb5, 0xc1, 0xf6, 0x6d, 0xf6, 0x71, 0xae, 0x99, 0xfb, 0x0f, 0x5d, 0x1e, 0x97, 0x4d, 0x94, - 0xd2, 0x52, 0xb9, 0xf4, 0xf2, 0x19, 0x5d, 0xca, 0x4f, 0xbf, 0x87, 0x93, 0x71, 0x1f, 0xb5, 0xc0, - 0x54, 0x69, 0x6e, 0xf7, 0x7a, 0xa4, 0xf3, 0x8b, 0xd5, 0xde, 0x34, 0xbb, 0x1e, 0x64, 0xbd, 0xb4, - 0x68, 0xf1, 0x3e, 0xf3, 0x95, 0xb0, 0x5b, 0x95, 0x4e, 0x8c, 0xc7, 0xef, 0x6c, 0x7e, 0xcb, 0xce, - 0x67, 0x5c, 0x6c, 0xf7, 0x9d, 0x8b, 0x3c, 0x76, 0xbf, 0x84, 0xd2, 0x61, 0x66, 0x54, 0xb0, 0x7c, - 0x66, 0xd7, 0x35, 0xdf, 0x88, 0x4c, 0x4a, 0x75, 0xe8, 0x3d, 0xc1, 0x27, 0x62, 0xd9, 0xd9, 0x06, - 0x5f, 0xef, 0xc3, 0x45, 0x8e, 0xc4, 0x77, 0xfa, 0xe2, 0xa9, 0x6b, 0xd2, 0xf3, 0xfc, 0x84, 0xcd, - 0xae, 0xaf, 0x4f, 0xf6, 0xc4, 0x8c, 0x9b, 0x6b, 0xe5, 0x21, 0x9a, 0xcd, 0xd0, 0xf4, 0x10, 0xed, - 0xd9, 0x87, 0xbc, 0xe1, 0xff, 0x0c, 0x2a, 0xb1, 0x03, 0xc8, 0xc9, 0x26, 0x21, 0xdf, 0x31, 0x91, - 0xa4, 0x46, 0x2a, 0x24, 0xbd, 0xd2, 0x09, 0xcd, 0x5f, 0xc9, 0x1b, 0x61, 0xfd, 0x19, 0x8c, 0x70, - 0x6c, 0x4b, 0xe4, 0xdd, 0xcc, 0xcb, 0xe0, 0xd9, 0xc3, 0x0e, 0x2b, 0xde, 0xcc, 0xbd, 0x12, 0x46, - 0xe9, 0xd9, 0x3e, 0x39, 0x23, 0xe5, 0x9f, 0x91, 0x60, 0x64, 0xf5, 0x98, 0xde, 0xfe, 0x57, 0x8f, - 0xe5, 0x9c, 0x79, 0x3d, 0xf9, 0x84, 0x3a, 0xf1, 0x3b, 0xb1, 0x44, 0x10, 0x41, 0xfd, 0x6d, 0x6e, - 0xba, 0x28, 0xf9, 0xc8, 0x29, 0x0b, 0x43, 0x39, 0x45, 0x95, 0x65, 0x15, 0x0c, 0xce, 0x54, 0x11, - 0x3f, 0x70, 0xa3, 0xe7, 0x8b, 0xf6, 0x5a, 0x6c, 0x56, 0xd0, 0x0b, 0x24, 0x6f, 0x90, 0x85, 0xf6, - 0x1a, 0xf9, 0x12, 0xb7, 0x12, 0xc1, 0xbe, 0xe6, 0xfb, 0x51, 0x18, 0x05, 0x4e, 0xa7, 0xde, 0x0c, - 0xdc, 0x4e, 0x94, 0xdb, 0xe9, 0xd8, 0x87, 0x3b, 0x8b, 0x4c, 0x73, 0x29, 0x15, 0x71, 0xec, 0xb3, - 0x22, 0xdf, 0xa8, 0x67, 0x35, 0x59, 0x85, 0x3d, 0x34, 0x97, 0xba, 0x8c, 0x5c, 0xff, 0x2a, 0x99, - 0x36, 0x60, 0x2e, 0x27, 0x5e, 0x90, 0xba, 0xbd, 0xed, 0x1d, 0x4f, 0x68, 0xbe, 0x77, 0xc5, 0xe4, - 0x2b, 0x98, 0xcd, 0x0c, 0x28, 0xa4, 0x2c, 0xd0, 0xbd, 0xc2, 0x0d, 0xf5, 0x63, 0xfe, 0x04, 0xca, - 0xfc, 0x41, 0x07, 0xfa, 0x2d, 0x1b, 0xb1, 0x65, 0xe2, 0x67, 0x3e, 0x39, 0x08, 0xc9, 0xfd, 0x3a, - 0x1f, 0x4f, 0x3d, 0x36, 0x9f, 0xc1, 0xa0, 0x22, 0x89, 0x8c, 0xf1, 0xea, 0xc3, 0xcb, 0x2a, 0xec, - 0xf5, 0x96, 0x68, 0x0b, 0x66, 0x77, 0x69, 0xe0, 0x3e, 0x7e, 0x9e, 0x64, 0x28, 0x47, 0x26, 0xb3, - 0xb4, 0x17, 0xc7, 0xcf, 0x61, 0x6e, 0xd1, 0x3f, 0xe8, 0x88, 0x57, 0x7b, 0x06, 0x4f, 0x75, 0x15, - 0x9f, 0x5d, 0xde, 0xdf, 0x97, 0x69, 0x3e, 0x3f, 0xb7, 0xbf, 0x72, 0x61, 0xeb, 0x9b, 0xfe, 0x5f, - 0xbd, 0x3d, 0x33, 0xe9, 0xb7, 0x71, 0x11, 0x66, 0x25, 0xfb, 0xd7, 0x17, 0x61, 0x56, 0x79, 0xef, - 0x37, 0x60, 0x73, 0x39, 0xf9, 0xfd, 0x7b, 0x70, 0x3d, 0x46, 0x6b, 0x37, 0xe4, 0xd9, 0x62, 0xa6, - 0x2b, 0x4f, 0x38, 0x4d, 0x67, 0xe6, 0x32, 0xcf, 0x6c, 0xa7, 0x16, 0x55, 0xa1, 0xdd, 0xee, 0x21, - 0x62, 0x11, 0x3d, 0xac, 0x02, 0xc3, 0x44, 0x23, 0xfe, 0xa4, 0x4e, 0xdb, 0x6b, 0xb7, 0x4e, 0x11, - 0xa3, 0x50, 0xfb, 0x01, 0x4c, 0xd4, 0xf5, 0xca, 0x33, 0x2a, 0xc9, 0x5d, 0x14, 0xea, 0x15, 0x50, - 0xff, 0xb6, 0xf7, 0xf0, 0x05, 0x55, 0x07, 0xcf, 0xb1, 0x7a, 0x91, 0xeb, 0x3a, 0x63, 0xe4, 0x9e, - 0x53, 0xa7, 0x40, 0x56, 0x6a, 0x48, 0xe5, 0x3a, 0x93, 0x9d, 0xae, 0xae, 0xc1, 0x33, 0xda, 0x24, - 0x33, 0x7f, 0x12, 0xab, 0x7f, 0x8a, 0x5d, 0xe5, 0x13, 0xdf, 0x33, 0x75, 0x28, 0xf7, 0xf3, 0x89, - 0xb3, 0xed, 0xe9, 0x7e, 0x3e, 0xa9, 0x1c, 0x7e, 0xba, 0x9f, 0x4f, 0x46, 0x82, 0xbe, 0x65, 0xe4, - 0x15, 0xa7, 0x02, 0xea, 0x61, 0x8c, 0x50, 0x6c, 0x32, 0x32, 0x0e, 0x3d, 0xd0, 0x83, 0x73, 0xf0, - 0x04, 0x42, 0x3d, 0x6c, 0xad, 0xc9, 0xa0, 0x1c, 0x89, 0x8c, 0x43, 0x77, 0xa1, 0xc4, 0x73, 0x29, - 0xc4, 0x31, 0x0d, 0x63, 0xd7, 0xbf, 0x74, 0x8a, 0x87, 0x1e, 0x93, 0x5a, 0x4a, 0x46, 0x82, 0x53, - 0x26, 0xb3, 0x9c, 0x10, 0x71, 0x3d, 0x96, 0x2a, 0xc4, 0xf1, 0xde, 0x94, 0x61, 0x2a, 0x15, 0x02, - 0x6e, 0xfe, 0x5c, 0x46, 0x89, 0x12, 0x29, 0x27, 0xf4, 0xe8, 0x70, 0xaa, 0x4b, 0x19, 0x21, 0xe3, - 0xe6, 0xcf, 0x67, 0x96, 0x09, 0x46, 0x11, 0xcf, 0x32, 0x9d, 0x9d, 0x1b, 0x3b, 0x7e, 0xc8, 0xd5, - 0x03, 0x47, 0x56, 0x73, 0xe3, 0x38, 0xa8, 0xa2, 0x56, 0xaa, 0x12, 0x21, 0x65, 0x24, 0xe4, 0xfe, - 0x4e, 0xc6, 0x5b, 0x0b, 0x03, 0x23, 0xf6, 0x06, 0xeb, 0x9d, 0x1d, 0x9c, 0x3c, 0x94, 0x89, 0x69, - 0x72, 0x6a, 0xea, 0xc7, 0x20, 0x77, 0x06, 0x1f, 0xca, 0x54, 0x34, 0xaf, 0x9a, 0xf1, 0x23, 0xb8, - 0x90, 0x78, 0xc0, 0x61, 0x32, 0xbe, 0x91, 0xfd, 0xca, 0x23, 0x73, 0x78, 0xf2, 0x65, 0xf6, 0xcb, - 0xe9, 0x87, 0x1e, 0x89, 0x79, 0x3f, 0xe9, 0x9e, 0xb7, 0x0e, 0x53, 0xb8, 0xcd, 0xc8, 0xd4, 0xf2, - 0x71, 0x6c, 0x18, 0x13, 0x9c, 0x0c, 0x52, 0x94, 0x2c, 0x55, 0xef, 0xc7, 0x27, 0xc4, 0xa3, 0x60, - 0x9e, 0xa8, 0x7e, 0xde, 0x7c, 0x29, 0x8c, 0xc0, 0xac, 0x53, 0x4c, 0xe4, 0xbf, 0x27, 0x3f, 0x80, - 0xd3, 0xf1, 0x5b, 0x61, 0xce, 0x22, 0x03, 0xad, 0x87, 0xa1, 0xec, 0x74, 0xfc, 0x60, 0xf8, 0xe4, - 0xe4, 0x2b, 0xf2, 0x28, 0x8a, 0xc9, 0x2f, 0xa6, 0x9e, 0xbb, 0x18, 0x7d, 0x38, 0xce, 0x89, 0xa4, - 0x8d, 0xed, 0x49, 0x67, 0xa7, 0x89, 0x9f, 0x5b, 0x76, 0xd8, 0x43, 0xfd, 0x73, 0xeb, 0x19, 0x9a, - 0x51, 0x89, 0xbf, 0x39, 0x7c, 0xd6, 0xe1, 0x2a, 0x86, 0x4a, 0xd9, 0xe2, 0xc1, 0xf1, 0xb2, 0xb1, - 0xf2, 0xdb, 0x9e, 0x0c, 0xb0, 0xd2, 0x86, 0x2b, 0x7d, 0xe3, 0x3e, 0x92, 0x5b, 0x86, 0x8b, 0x4b, - 0xff, 0x08, 0x91, 0x3d, 0x34, 0x8f, 0x99, 0xac, 0xf0, 0x89, 0xea, 0x9c, 0xed, 0x11, 0xc9, 0x51, - 0x9d, 0xb3, 0x3d, 0xe3, 0x2f, 0x7e, 0x8e, 0xd9, 0x9e, 0xc4, 0x19, 0x85, 0xe1, 0x8f, 0xa8, 0xc7, - 0x83, 0x42, 0xf7, 0xbc, 0xf6, 0xb9, 0x62, 0x5e, 0x8a, 0xa6, 0x08, 0x51, 0xa7, 0xb9, 0x24, 0x34, - 0xb1, 0x3c, 0xe6, 0xfd, 0x99, 0xf4, 0x70, 0xad, 0xbe, 0xc4, 0x17, 0xe0, 0x89, 0x5b, 0x9e, 0x03, - 0xaf, 0x2d, 0xfd, 0xf4, 0x3f, 0x5d, 0x2a, 0xfc, 0xf4, 0x67, 0x97, 0x0a, 0xff, 0xee, 0x67, 0x97, - 0x0a, 0xff, 0xf1, 0x67, 0x97, 0x0a, 0x5f, 0x2e, 0x1c, 0x2f, 0x34, 0x31, 0xcf, 0xcf, 0x78, 0x8b, - 0xb3, 0x1b, 0xc6, 0xff, 0xde, 0xfa, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x6f, 0xa1, 0x18, 0xaf, - 0x19, 0xec, 0x00, 0x00, + 0x73, 0x4a, 0x6a, 0x8d, 0xaf, 0x7d, 0x61, 0xfb, 0x3e, 0x7c, 0x71, 0x91, 0xc4, 0x06, 0x92, 0xc0, + 0x81, 0x3f, 0x9c, 0x00, 0x09, 0x10, 0x04, 0x08, 0xe0, 0x9f, 0xc0, 0x3f, 0xf1, 0x47, 0xbe, 0x32, + 0x31, 0x10, 0x24, 0x86, 0xed, 0x9f, 0x00, 0xa1, 0x93, 0x01, 0xfc, 0x43, 0x24, 0x1f, 0x46, 0x90, + 0x00, 0x19, 0xc0, 0x40, 0xb0, 0xd7, 0x7e, 0x9c, 0xbd, 0xcf, 0xa3, 0x8a, 0x94, 0xd4, 0xe3, 0xfc, + 0x48, 0xac, 0xb5, 0xd7, 0x5a, 0xfb, 0x79, 0xf6, 0x5e, 0x6b, 0xed, 0xb5, 0xd7, 0x82, 0x9b, 0x11, + 0x6d, 0xd3, 0x8e, 0x1f, 0x44, 0xb7, 0xda, 0x74, 0xcf, 0x69, 0x3e, 0xbf, 0xd5, 0x6c, 0xbb, 0xd4, + 0x8b, 0x6e, 0x75, 0x02, 0x3f, 0xf2, 0x6f, 0x39, 0xdd, 0x68, 0x3f, 0xa4, 0xc1, 0x53, 0xb7, 0x49, + 0x6f, 0x22, 0x84, 0x0c, 0xe1, 0x7f, 0xf3, 0x33, 0x7b, 0xfe, 0x9e, 0xcf, 0x71, 0xd8, 0x5f, 0xbc, + 0x70, 0xfe, 0xfc, 0x9e, 0xef, 0xef, 0xb5, 0x29, 0x27, 0x7e, 0xd4, 0x7d, 0x7c, 0x8b, 0x1e, 0x74, + 0xa2, 0xe7, 0xa2, 0xb0, 0x92, 0x2c, 0x8c, 0xdc, 0x03, 0x1a, 0x46, 0xce, 0x41, 0x47, 0x20, 0xbc, + 0xa1, 0x9a, 0xe2, 0x44, 0x11, 0x2b, 0x89, 0x5c, 0xdf, 0xbb, 0xf5, 0xf4, 0x8e, 0xfe, 0x53, 0xa0, + 0x5e, 0xef, 0xd9, 0xea, 0x26, 0x0d, 0xa2, 0xf0, 0x58, 0x98, 0xf4, 0x29, 0xf5, 0xa2, 0x54, 0xf5, + 0x02, 0x33, 0x7a, 0xde, 0xa1, 0x21, 0x47, 0x91, 0xff, 0x09, 0xd4, 0x2b, 0xd9, 0xa8, 0xf8, 0xaf, + 0x40, 0xf9, 0x5e, 0x36, 0xca, 0x33, 0xfa, 0x88, 0x8d, 0xa9, 0xa7, 0xfe, 0xe8, 0x83, 0x1e, 0x38, + 0x9d, 0x0e, 0x0d, 0xe2, 0x3f, 0x04, 0xfa, 0x39, 0x85, 0x7e, 0xf0, 0xd8, 0x61, 0x43, 0x74, 0xf0, + 0xd8, 0x49, 0x75, 0xa3, 0x1b, 0x3a, 0x7b, 0x54, 0x34, 0xff, 0xe9, 0x1d, 0xfd, 0x27, 0x47, 0xb5, + 0x7e, 0xbf, 0x00, 0x43, 0x0f, 0x9d, 0xa8, 0xb9, 0x4f, 0x3e, 0x81, 0xa1, 0x07, 0xae, 0xd7, 0x0a, + 0xcb, 0x85, 0xcb, 0x03, 0xd7, 0xc7, 0x17, 0x4a, 0x37, 0x79, 0x57, 0xb0, 0x90, 0x15, 0xd4, 0xe6, + 0x7e, 0x7a, 0x58, 0x39, 0x75, 0x74, 0x58, 0x39, 0xfd, 0x84, 0xa1, 0xbd, 0xe9, 0x1f, 0xb8, 0x11, + 0xce, 0xad, 0xcd, 0xe9, 0xc8, 0x0e, 0x4c, 0x57, 0xdb, 0x6d, 0xff, 0xd9, 0x96, 0x13, 0x44, 0xae, + 0xd3, 0xae, 0x77, 0x9b, 0x4d, 0x1a, 0x86, 0xe5, 0xe2, 0xe5, 0xc2, 0xf5, 0xd1, 0xda, 0xd5, 0xa3, + 0xc3, 0x4a, 0xc5, 0x61, 0xc5, 0x8d, 0x0e, 0x2f, 0x6f, 0x84, 0x1c, 0x41, 0x63, 0x94, 0x45, 0x6f, + 0xfd, 0xf1, 0x30, 0x94, 0x56, 0xfc, 0x30, 0x5a, 0x64, 0x33, 0x6a, 0xd3, 0x1f, 0x77, 0x69, 0x18, + 0x91, 0xab, 0x30, 0xcc, 0x60, 0xab, 0x4b, 0xe5, 0xc2, 0xe5, 0xc2, 0xf5, 0xb1, 0xda, 0xf8, 0xd1, + 0x61, 0x65, 0x64, 0xdf, 0x0f, 0xa3, 0x86, 0xdb, 0xb2, 0x45, 0x11, 0x79, 0x03, 0x46, 0x37, 0xfc, + 0x16, 0xdd, 0x70, 0x0e, 0x28, 0xb6, 0x62, 0xac, 0x36, 0x79, 0x74, 0x58, 0x19, 0xf3, 0xfc, 0x16, + 0x6d, 0x78, 0xce, 0x01, 0xb5, 0x55, 0x31, 0xd9, 0x85, 0x41, 0xdb, 0x6f, 0xd3, 0xf2, 0x00, 0xa2, + 0xd5, 0x8e, 0x0e, 0x2b, 0x83, 0x81, 0xdf, 0xa6, 0x3f, 0x3f, 0xac, 0xbc, 0xbb, 0xe7, 0x46, 0xfb, + 0xdd, 0x47, 0x37, 0x9b, 0xfe, 0xc1, 0xad, 0xbd, 0xc0, 0x79, 0xea, 0xf2, 0x45, 0xe8, 0xb4, 0x6f, + 0xc5, 0x4b, 0xb5, 0xe3, 0x8a, 0x79, 0xaf, 0x3f, 0x0f, 0x23, 0x7a, 0xc0, 0x38, 0xd9, 0xc8, 0x8f, + 0x3c, 0x84, 0x99, 0x6a, 0xab, 0xe5, 0x72, 0x8a, 0xad, 0xc0, 0xf5, 0x9a, 0x6e, 0xc7, 0x69, 0x87, + 0xe5, 0xc1, 0xcb, 0x03, 0xd7, 0xc7, 0xc4, 0xa0, 0xa8, 0xf2, 0x46, 0x47, 0x21, 0x68, 0x83, 0x92, + 0xc9, 0x80, 0xbc, 0x05, 0xa3, 0x4b, 0x1b, 0x75, 0xd6, 0xf6, 0xb0, 0x3c, 0x84, 0xcc, 0xe6, 0x8e, + 0x0e, 0x2b, 0xd3, 0x2d, 0x2f, 0xc4, 0xae, 0xe9, 0x0c, 0x14, 0x22, 0x79, 0x17, 0x26, 0xb6, 0xba, + 0x8f, 0xda, 0x6e, 0x73, 0x7b, 0xad, 0xfe, 0x80, 0x3e, 0x2f, 0x0f, 0x5f, 0x2e, 0x5c, 0x9f, 0xa8, + 0x91, 0xa3, 0xc3, 0xca, 0x54, 0x07, 0xe1, 0x8d, 0xa8, 0x1d, 0x36, 0x9e, 0xd0, 0xe7, 0xb6, 0x81, + 0x17, 0xd3, 0xd5, 0xeb, 0x2b, 0x8c, 0x6e, 0x24, 0x45, 0x17, 0x86, 0xfb, 0x3a, 0x1d, 0xc7, 0x23, + 0xb7, 0x00, 0x6c, 0x7a, 0xe0, 0x47, 0xb4, 0xda, 0x6a, 0x05, 0xe5, 0x51, 0x1c, 0xdb, 0xd3, 0x47, + 0x87, 0x95, 0xf1, 0x00, 0xa1, 0x0d, 0xa7, 0xd5, 0x0a, 0x6c, 0x0d, 0x85, 0x2c, 0xc2, 0xa8, 0xed, + 0xf3, 0x01, 0x2e, 0x8f, 0x5d, 0x2e, 0x5c, 0x1f, 0x5f, 0x38, 0x2d, 0x96, 0xa1, 0x04, 0xd7, 0xce, + 0x1e, 0x1d, 0x56, 0x48, 0x20, 0x7e, 0xe9, 0xbd, 0x94, 0x18, 0xa4, 0x02, 0x23, 0x1b, 0xfe, 0xa2, + 0xd3, 0xdc, 0xa7, 0x65, 0xc0, 0xb5, 0x37, 0x74, 0x74, 0x58, 0x29, 0x7c, 0xcf, 0x96, 0x50, 0xf2, + 0x14, 0xc6, 0xe3, 0x89, 0x0a, 0xcb, 0xe3, 0x38, 0x7c, 0xdb, 0x47, 0x87, 0x95, 0xb3, 0x21, 0x82, + 0x1b, 0x6c, 0xea, 0xb5, 0x11, 0x7c, 0x89, 0x55, 0xa0, 0x57, 0x44, 0xbe, 0x86, 0xd9, 0xf8, 0x67, + 0x35, 0x0c, 0x69, 0xc0, 0x78, 0xac, 0x2e, 0x95, 0x27, 0x71, 0x64, 0x5e, 0x3f, 0x3a, 0xac, 0x58, + 0x5a, 0x0b, 0x1a, 0x8e, 0x44, 0x69, 0xb8, 0x2d, 0xad, 0xa7, 0xd9, 0x4c, 0xee, 0x0f, 0x8e, 0x4e, + 0x94, 0x26, 0xed, 0x8b, 0x3b, 0x5e, 0x18, 0x39, 0x8f, 0xda, 0x34, 0x13, 0xc9, 0xfa, 0xeb, 0x02, + 0x90, 0xcd, 0x0e, 0xf5, 0xea, 0xf5, 0x15, 0xf6, 0x3d, 0xc9, 0xcf, 0xe9, 0x4d, 0x18, 0xe3, 0x13, + 0xc7, 0x66, 0xb7, 0x88, 0xb3, 0x3b, 0x75, 0x74, 0x58, 0x01, 0x31, 0xbb, 0x6c, 0x66, 0x63, 0x04, + 0x72, 0x0d, 0x06, 0xb6, 0xb7, 0xd7, 0xf0, 0x5b, 0x19, 0xa8, 0x4d, 0x1f, 0x1d, 0x56, 0x06, 0xa2, + 0xa8, 0xfd, 0xf3, 0xc3, 0xca, 0xe8, 0x52, 0x37, 0xc0, 0x61, 0xb1, 0x59, 0x39, 0xb9, 0x06, 0x23, + 0x8b, 0xed, 0x6e, 0x18, 0xd1, 0xa0, 0x3c, 0x18, 0x7f, 0xa4, 0x4d, 0x0e, 0xb2, 0x65, 0x19, 0xf9, + 0x2e, 0x0c, 0xee, 0x84, 0x34, 0x28, 0x0f, 0xe1, 0x7c, 0x4f, 0x8a, 0xf9, 0x66, 0xa0, 0xdd, 0x85, + 0xda, 0x28, 0xfb, 0x12, 0xbb, 0x21, 0x0d, 0x6c, 0x44, 0x22, 0x37, 0x61, 0x88, 0x4f, 0xda, 0x30, + 0x6e, 0x52, 0x93, 0x6a, 0x75, 0xb4, 0xe9, 0xee, 0xbb, 0xb5, 0xb1, 0xa3, 0xc3, 0xca, 0x10, 0x4e, + 0x9e, 0xcd, 0xd1, 0xee, 0x0f, 0x8e, 0x16, 0x4a, 0x45, 0x7b, 0x94, 0xd1, 0xb2, 0xcf, 0xc2, 0xfa, + 0x2e, 0x8c, 0x6b, 0xdd, 0x27, 0x17, 0x60, 0x90, 0xfd, 0x8f, 0x9b, 0xc8, 0x04, 0xaf, 0x8c, 0x1d, + 0x1c, 0x36, 0x42, 0xad, 0x7f, 0x38, 0x0d, 0x25, 0x46, 0x69, 0xec, 0x3c, 0x37, 0xf5, 0xa1, 0xe2, + 0x74, 0x25, 0x73, 0xa8, 0xca, 0x05, 0x7d, 0xb0, 0xae, 0x83, 0xaa, 0x5d, 0x6c, 0x42, 0x13, 0x47, + 0x87, 0x95, 0xd1, 0xae, 0x80, 0xc5, 0x6d, 0x23, 0x75, 0x18, 0x59, 0xfe, 0xa6, 0xe3, 0x06, 0x34, + 0xc4, 0xa1, 0x1d, 0x5f, 0x98, 0xbf, 0xc9, 0x8f, 0xcb, 0x9b, 0xf2, 0xb8, 0xbc, 0xb9, 0x2d, 0x8f, + 0xcb, 0xda, 0x45, 0xb1, 0x19, 0x9f, 0xa1, 0x9c, 0x24, 0x5e, 0x1f, 0xbf, 0xfd, 0x17, 0x95, 0x82, + 0x2d, 0x39, 0x91, 0x37, 0x61, 0xf8, 0xae, 0x1f, 0x1c, 0x38, 0x91, 0x98, 0x83, 0x99, 0xa3, 0xc3, + 0x4a, 0xe9, 0x31, 0x42, 0xb4, 0x25, 0x25, 0x70, 0xc8, 0x5d, 0x98, 0xb2, 0xfd, 0x6e, 0x44, 0xb7, + 0x7d, 0x39, 0x73, 0x43, 0x48, 0x75, 0xe9, 0xe8, 0xb0, 0x32, 0x1f, 0xb0, 0x92, 0x46, 0xe4, 0x37, + 0xc4, 0x14, 0x6a, 0xf4, 0x09, 0x2a, 0xb2, 0x0c, 0x53, 0x55, 0xdc, 0xbd, 0xc5, 0xa8, 0xf1, 0xf9, + 0x1a, 0xab, 0x5d, 0x3c, 0x3a, 0xac, 0x9c, 0x73, 0xb0, 0xa4, 0x11, 0x88, 0x22, 0x9d, 0x8d, 0x49, + 0x44, 0x36, 0xe0, 0xcc, 0x83, 0xee, 0x23, 0x1a, 0x78, 0x34, 0xa2, 0xa1, 0x6c, 0xd1, 0x08, 0xb6, + 0xe8, 0xf2, 0xd1, 0x61, 0xe5, 0xc2, 0x13, 0x55, 0x98, 0xd1, 0xa6, 0x34, 0x29, 0xa1, 0x70, 0x5a, + 0x34, 0x74, 0xc9, 0x89, 0x9c, 0x47, 0x4e, 0x48, 0x71, 0x53, 0x1a, 0x5f, 0x38, 0xcb, 0x87, 0xf8, + 0x66, 0xa2, 0xb4, 0x76, 0x55, 0x8c, 0xf2, 0x79, 0xd5, 0xf7, 0x96, 0x28, 0xd2, 0x2a, 0x4a, 0xf2, + 0x64, 0x7b, 0xb3, 0x3a, 0x77, 0xc6, 0xb0, 0xb5, 0xb8, 0x37, 0xab, 0x73, 0x47, 0xdf, 0xb5, 0xd4, + 0x09, 0xb4, 0x06, 0x43, 0x3b, 0xec, 0x74, 0xc6, 0x3d, 0x6b, 0x6a, 0xe1, 0x8a, 0x68, 0x51, 0x72, + 0xfd, 0xdd, 0x64, 0x3f, 0x10, 0x11, 0xbf, 0xbc, 0xd3, 0x78, 0xa2, 0xeb, 0x67, 0x31, 0x96, 0x91, + 0xcf, 0x00, 0x44, 0xab, 0xaa, 0x9d, 0x4e, 0x79, 0x1c, 0x3b, 0x79, 0xc6, 0xec, 0x64, 0xb5, 0xd3, + 0xa9, 0x5d, 0x12, 0xfd, 0x3b, 0xab, 0xfa, 0xe7, 0x74, 0x3a, 0x1a, 0x37, 0x8d, 0x09, 0xf9, 0x04, + 0x26, 0x70, 0x4b, 0x93, 0x33, 0x3a, 0x81, 0x33, 0x7a, 0xfe, 0xe8, 0xb0, 0x32, 0x87, 0xbb, 0x55, + 0xc6, 0x7c, 0x1a, 0x04, 0xe4, 0xd7, 0x60, 0x56, 0xb0, 0x7b, 0xe8, 0x7a, 0x2d, 0xff, 0x59, 0xb8, + 0x44, 0xc3, 0x27, 0x91, 0xdf, 0xc1, 0xed, 0x6f, 0x7c, 0xe1, 0x82, 0xd9, 0x3c, 0x13, 0xa7, 0x76, + 0x43, 0xb4, 0xd4, 0x52, 0x2d, 0x7d, 0xc6, 0x11, 0x1a, 0x2d, 0x8e, 0xa1, 0x6f, 0x90, 0x99, 0x2c, + 0xc8, 0x2a, 0x9c, 0xde, 0x09, 0xa9, 0xd1, 0x87, 0x29, 0x3c, 0x1f, 0x2a, 0x6c, 0x86, 0xbb, 0x21, + 0x6d, 0xe4, 0xf5, 0x23, 0x49, 0x47, 0x6c, 0x20, 0x4b, 0x81, 0xdf, 0x49, 0xac, 0xf1, 0xd3, 0x38, + 0x22, 0xd6, 0xd1, 0x61, 0xe5, 0x52, 0x2b, 0xf0, 0x3b, 0x8d, 0xfc, 0x85, 0x9e, 0x41, 0x4d, 0x7e, + 0x08, 0x67, 0x17, 0x7d, 0xcf, 0xa3, 0x4d, 0xb6, 0x83, 0x2e, 0xb9, 0xce, 0x9e, 0xe7, 0x87, 0x91, + 0xdb, 0x5c, 0x5d, 0x2a, 0x97, 0xe2, 0xe3, 0xa1, 0xa9, 0x30, 0x1a, 0x2d, 0x85, 0x62, 0x1e, 0x0f, + 0x39, 0x5c, 0xc8, 0x57, 0x30, 0x29, 0xea, 0xa2, 0x01, 0x2e, 0xcd, 0x33, 0xbd, 0x17, 0x9a, 0x42, + 0xe6, 0x07, 0x7d, 0x20, 0x7f, 0x72, 0xd1, 0xc9, 0xe4, 0x45, 0xbe, 0x86, 0xf1, 0xf5, 0xbb, 0x55, + 0x9b, 0x86, 0x1d, 0xdf, 0x0b, 0x69, 0x99, 0xe0, 0x8c, 0x5e, 0x12, 0xac, 0xd7, 0xef, 0x56, 0xab, + 0xdd, 0x68, 0x9f, 0x7a, 0x91, 0xdb, 0x74, 0x22, 0x2a, 0xb1, 0x6a, 0xf3, 0x6c, 0xe5, 0x1d, 0x3c, + 0x76, 0x1a, 0x81, 0x80, 0x68, 0xbd, 0xd0, 0xd9, 0x91, 0x79, 0x18, 0xad, 0xd7, 0x57, 0xd6, 0xfc, + 0x3d, 0xd7, 0x2b, 0x4f, 0xb3, 0xc1, 0xb0, 0xd5, 0x6f, 0xf2, 0x18, 0x66, 0x35, 0xdd, 0xa0, 0xc1, + 0xfe, 0xa7, 0x07, 0xd4, 0x8b, 0xca, 0x33, 0xd8, 0x86, 0xef, 0x29, 0xe5, 0xe6, 0xa6, 0xae, 0x42, + 0x3c, 0xbd, 0x73, 0xb3, 0x1a, 0xff, 0xac, 0x4b, 0xa2, 0x5a, 0xb1, 0x5c, 0xb0, 0x67, 0x9c, 0x8c, + 0x12, 0xb2, 0x0d, 0x23, 0x5b, 0xdd, 0xa0, 0xe3, 0x87, 0xb4, 0x3c, 0x8b, 0x03, 0x77, 0xb5, 0xd7, + 0x17, 0x2a, 0x50, 0x6b, 0xb3, 0x6c, 0x8b, 0xee, 0xf0, 0x1f, 0x5a, 0xef, 0x24, 0x2b, 0xf2, 0x29, + 0x4c, 0xd4, 0xeb, 0x2b, 0xf1, 0x81, 0x72, 0x16, 0x0f, 0x94, 0x0b, 0x47, 0x87, 0x95, 0x32, 0x13, + 0xa9, 0xe2, 0x43, 0x45, 0xff, 0xaa, 0x74, 0x0a, 0xc6, 0x61, 0x7b, 0xad, 0x1e, 0x73, 0x98, 0x8b, + 0x39, 0x30, 0x61, 0x2e, 0x9b, 0x83, 0x4e, 0x41, 0xfe, 0x79, 0x01, 0x2e, 0xeb, 0x2c, 0xb3, 0x06, + 0xa6, 0x7c, 0xee, 0x45, 0x46, 0x73, 0xe1, 0xe8, 0xb0, 0x72, 0xd3, 0xec, 0x47, 0x23, 0x73, 0xb2, + 0xb4, 0xb6, 0xf5, 0x6d, 0x0a, 0xb6, 0x57, 0xef, 0x40, 0x66, 0x7b, 0xe7, 0x5f, 0xb8, 0xbd, 0xe6, + 0xa8, 0xf5, 0x6f, 0x6f, 0xbf, 0xa6, 0x58, 0x9f, 0xc3, 0x98, 0xda, 0xb4, 0xc9, 0x08, 0x0c, 0x54, + 0xdb, 0xed, 0xd2, 0x29, 0xf6, 0x47, 0xbd, 0xbe, 0x52, 0x2a, 0x90, 0x29, 0x80, 0xf8, 0xa4, 0x2a, + 0x15, 0xc9, 0x04, 0x8c, 0xca, 0x93, 0xa4, 0x34, 0x80, 0xf8, 0x9d, 0x4e, 0x69, 0x90, 0x10, 0x98, + 0x32, 0xf7, 0xb3, 0xd2, 0x90, 0xf5, 0x3b, 0x05, 0x18, 0x53, 0xdf, 0x21, 0x39, 0x0d, 0xe3, 0x3b, + 0x1b, 0xf5, 0xad, 0xe5, 0xc5, 0xd5, 0xbb, 0xab, 0xcb, 0x4b, 0xa5, 0x53, 0xe4, 0x22, 0x9c, 0xdb, + 0xae, 0xaf, 0x34, 0x96, 0x6a, 0x8d, 0xb5, 0xcd, 0xc5, 0xea, 0x5a, 0x63, 0xcb, 0xde, 0xfc, 0xfc, + 0x8b, 0xc6, 0xf6, 0xce, 0xc6, 0xc6, 0xf2, 0x5a, 0xa9, 0x40, 0xca, 0x30, 0xc3, 0x8a, 0x1f, 0xec, + 0xd4, 0x96, 0x75, 0x84, 0x52, 0x91, 0x5c, 0x81, 0x8b, 0x59, 0x25, 0x8d, 0x95, 0xe5, 0xea, 0xd2, + 0xda, 0x72, 0xbd, 0x5e, 0x1a, 0x20, 0x73, 0x30, 0xcd, 0x50, 0xaa, 0x5b, 0x5b, 0x06, 0xed, 0xa0, + 0xd5, 0x86, 0x71, 0xed, 0x03, 0x20, 0x17, 0xa0, 0xbc, 0xb8, 0x6c, 0x6f, 0x37, 0xb6, 0x76, 0xec, + 0xad, 0xcd, 0xfa, 0x72, 0xc3, 0x6c, 0x61, 0xb2, 0x74, 0x6d, 0xf3, 0xde, 0xea, 0x46, 0x83, 0x81, + 0xea, 0xa5, 0x02, 0x6b, 0x86, 0x51, 0x5a, 0x5f, 0xdd, 0xb8, 0xb7, 0xb6, 0xdc, 0xd8, 0xa9, 0x2f, + 0x0b, 0x94, 0xa2, 0xf5, 0x1b, 0xc5, 0xd4, 0x91, 0x4e, 0x16, 0x60, 0xbc, 0xce, 0xed, 0x15, 0xb8, + 0xcd, 0x71, 0x05, 0x91, 0xc9, 0x68, 0x13, 0xc2, 0x8c, 0xc1, 0x77, 0x30, 0x1d, 0x89, 0x49, 0x69, + 0x5b, 0xec, 0x6b, 0x6e, 0xfa, 0x6d, 0x5d, 0x4a, 0xeb, 0x08, 0x98, 0xad, 0x4a, 0xc9, 0x82, 0x26, + 0xcf, 0x71, 0x6d, 0x11, 0x35, 0x12, 0x29, 0xcf, 0xe9, 0x67, 0xbb, 0x92, 0xec, 0x16, 0xe2, 0x29, + 0x15, 0x62, 0x18, 0xd2, 0x64, 0xc8, 0x12, 0x0a, 0x8f, 0xbc, 0x21, 0x25, 0x5d, 0xae, 0xdd, 0xe1, + 0x61, 0x9f, 0xd0, 0x4b, 0x84, 0x90, 0x6b, 0x75, 0x73, 0x0e, 0x56, 0xf2, 0x61, 0x72, 0xcd, 0x88, + 0xc1, 0x40, 0x66, 0x89, 0xf3, 0xd3, 0x4e, 0xa0, 0x92, 0x0a, 0x0c, 0xf1, 0x1d, 0x97, 0x8f, 0x07, + 0xca, 0xd6, 0x6d, 0x06, 0xb0, 0x39, 0xdc, 0xfa, 0x93, 0x01, 0x5d, 0xc8, 0x60, 0xb2, 0xb4, 0x36, + 0xde, 0x28, 0x4b, 0xe3, 0x38, 0x23, 0x94, 0xa9, 0x82, 0xfc, 0x2b, 0x41, 0x55, 0x70, 0x20, 0x56, + 0x05, 0xc5, 0xa7, 0xc6, 0x55, 0xc1, 0x18, 0x85, 0xcd, 0xa2, 0x10, 0xdb, 0x90, 0xeb, 0x60, 0x3c, + 0x8b, 0x42, 0xd4, 0x13, 0xb3, 0xa8, 0x21, 0x91, 0x0f, 0x00, 0xaa, 0x0f, 0xeb, 0xa8, 0xf3, 0xd8, + 0x1b, 0x42, 0x74, 0xc5, 0x43, 0xc6, 0x79, 0x16, 0x0a, 0x95, 0x2a, 0xd0, 0x75, 0x46, 0x0d, 0x9b, + 0xd4, 0x60, 0xb2, 0xfa, 0x93, 0x6e, 0x40, 0x57, 0x5b, 0xec, 0x9c, 0x8a, 0xb8, 0x72, 0x3c, 0xc6, + 0x37, 0x52, 0x87, 0x15, 0x34, 0x5c, 0x51, 0xa2, 0x31, 0x30, 0x49, 0xc8, 0x26, 0x9c, 0xb9, 0xb7, + 0xb8, 0x25, 0xd6, 0x55, 0xb5, 0xd9, 0xf4, 0xbb, 0x5e, 0x24, 0xe4, 0xd5, 0x2b, 0x47, 0x87, 0x95, + 0x8b, 0x7b, 0xcd, 0x4e, 0x43, 0xae, 0x41, 0x87, 0x17, 0xeb, 0x02, 0x6b, 0x8a, 0x96, 0x5c, 0x85, + 0x81, 0x1d, 0x7b, 0x55, 0x68, 0xce, 0x67, 0x8e, 0x0e, 0x2b, 0x93, 0xdd, 0xc0, 0xd5, 0x48, 0x58, + 0x29, 0x79, 0x1f, 0x60, 0xdb, 0x09, 0xf6, 0x68, 0xb4, 0xe5, 0x07, 0x11, 0x0a, 0x9c, 0x93, 0xb5, + 0x73, 0x47, 0x87, 0x95, 0xd9, 0x08, 0xa1, 0x0d, 0xb6, 0xfd, 0xe9, 0x9d, 0x8e, 0x91, 0xef, 0x0f, + 0x8e, 0x16, 0x4b, 0x03, 0xf6, 0x58, 0x9d, 0x86, 0x21, 0xd7, 0x0f, 0xdb, 0x30, 0x75, 0x8f, 0x46, + 0x6c, 0xe1, 0x4a, 0x7d, 0xa7, 0xf7, 0xb4, 0x7e, 0x04, 0xe3, 0x0f, 0xdd, 0x68, 0xbf, 0x4e, 0x9b, + 0x01, 0x8d, 0xa4, 0xad, 0x07, 0x87, 0xfc, 0x99, 0x1b, 0xed, 0x37, 0x42, 0x0e, 0xd7, 0xcf, 0x75, + 0x0d, 0xdd, 0x5a, 0x86, 0xd3, 0xa2, 0x36, 0xa5, 0x5e, 0x2d, 0x98, 0x0c, 0x0b, 0xc8, 0x10, 0xa7, + 0x5d, 0x67, 0x68, 0xb2, 0xf9, 0x17, 0x45, 0x98, 0x5d, 0xdc, 0x77, 0xbc, 0x3d, 0xba, 0xe5, 0x84, + 0xe1, 0x33, 0x3f, 0x68, 0x69, 0x8d, 0x47, 0xdd, 0x32, 0xd5, 0x78, 0x54, 0x26, 0x17, 0x60, 0x7c, + 0xb3, 0xdd, 0x92, 0x34, 0x42, 0xef, 0xc5, 0xba, 0xfc, 0x76, 0xab, 0xd1, 0x91, 0xbc, 0x74, 0x24, + 0x46, 0xb3, 0x41, 0x9f, 0x29, 0x9a, 0x81, 0x98, 0xc6, 0xa3, 0xcf, 0x34, 0x1a, 0x0d, 0x89, 0x2c, + 0xc3, 0x99, 0x3a, 0x6d, 0xfa, 0x5e, 0xeb, 0xae, 0xd3, 0x8c, 0xfc, 0x60, 0xdb, 0x7f, 0x42, 0x3d, + 0xb1, 0xa0, 0x51, 0x31, 0x08, 0xb1, 0xb0, 0xf1, 0x18, 0x4b, 0x1b, 0x11, 0x2b, 0xb6, 0xd3, 0x14, + 0x64, 0x13, 0x46, 0x1f, 0x0a, 0x8b, 0xa1, 0x50, 0x96, 0xaf, 0xdd, 0x54, 0x26, 0xc4, 0xc5, 0x80, + 0xe2, 0x2a, 0x74, 0xda, 0x4a, 0xdd, 0x57, 0x72, 0x16, 0x6e, 0x65, 0x12, 0xd3, 0x56, 0x4c, 0xac, + 0x1d, 0x98, 0xdc, 0x6a, 0x77, 0xf7, 0x5c, 0x8f, 0x6d, 0x3a, 0x75, 0xfa, 0x63, 0xb2, 0x04, 0x10, + 0x03, 0x84, 0x1d, 0x70, 0x5a, 0xa8, 0xd8, 0x71, 0xc1, 0xee, 0x5b, 0xe2, 0xcb, 0x45, 0x08, 0x6a, + 0x44, 0xb6, 0x46, 0x67, 0xfd, 0xcf, 0x01, 0x20, 0x62, 0x02, 0xf0, 0x10, 0xac, 0xd3, 0x88, 0x1d, + 0x4f, 0x67, 0xa1, 0xa8, 0xcc, 0x75, 0xc3, 0x47, 0x87, 0x95, 0xa2, 0xdb, 0xb2, 0x8b, 0xab, 0x4b, + 0xe4, 0x6d, 0x18, 0x42, 0x34, 0x1c, 0xff, 0x29, 0x55, 0x9f, 0xce, 0x81, 0x6f, 0x3e, 0x78, 0xfa, + 0xda, 0x1c, 0x99, 0xbc, 0x03, 0x63, 0x4b, 0xb4, 0x4d, 0xf7, 0x9c, 0xc8, 0x97, 0xdb, 0x09, 0x37, + 0x80, 0x49, 0xa0, 0xb6, 0xe6, 0x62, 0x4c, 0xa6, 0x0e, 0xdb, 0xd4, 0x09, 0x7d, 0x4f, 0x57, 0x87, + 0x03, 0x84, 0xe8, 0xea, 0x30, 0xc7, 0x21, 0x7f, 0xaf, 0x00, 0xe3, 0x55, 0xcf, 0x13, 0x86, 0xa5, + 0x50, 0x8c, 0xfa, 0xec, 0x4d, 0x65, 0x89, 0x5d, 0x73, 0x1e, 0xd1, 0xf6, 0xae, 0xd3, 0xee, 0xd2, + 0xb0, 0xf6, 0x35, 0xd3, 0x50, 0xfe, 0xc3, 0x61, 0xe5, 0xc3, 0x13, 0x98, 0x8a, 0x62, 0x9b, 0xee, + 0x76, 0xe0, 0xb8, 0x51, 0xc8, 0xbe, 0x5a, 0x27, 0xae, 0x50, 0xff, 0x6e, 0xb4, 0x76, 0xc4, 0x67, + 0xc3, 0x70, 0xbf, 0xb3, 0x81, 0x1c, 0xc0, 0xe9, 0x6a, 0x18, 0x76, 0x0f, 0x68, 0x3d, 0x72, 0x82, + 0x68, 0xdb, 0x3d, 0xa0, 0xb8, 0x21, 0xf5, 0x36, 0x2e, 0x7c, 0xe7, 0xa7, 0x87, 0x95, 0x02, 0x53, + 0x8a, 0x1c, 0x24, 0x65, 0x72, 0x4f, 0x10, 0x35, 0x22, 0x57, 0x3f, 0xde, 0xd0, 0xcc, 0x90, 0xe4, + 0x6d, 0x5d, 0x55, 0x02, 0xc9, 0xea, 0x52, 0xde, 0x8c, 0x5b, 0x8b, 0x70, 0xe1, 0x1e, 0x8d, 0x6c, + 0x1a, 0xd2, 0x48, 0x7e, 0x23, 0xb8, 0xc2, 0x63, 0xe3, 0xee, 0x08, 0xfe, 0x56, 0xc4, 0x38, 0xfd, + 0xfc, 0xbb, 0x90, 0x25, 0xd6, 0xff, 0x55, 0x80, 0xca, 0x62, 0x40, 0xb9, 0x3e, 0x91, 0xc3, 0xa8, + 0xf7, 0xde, 0x75, 0x01, 0x06, 0xb7, 0x9f, 0x77, 0xa4, 0x55, 0x06, 0x4b, 0xd9, 0xa4, 0xd8, 0x08, + 0x3d, 0xa6, 0x91, 0xcb, 0x7a, 0x0c, 0xb3, 0x36, 0xf5, 0xe8, 0x33, 0xe7, 0x51, 0x9b, 0x1a, 0x76, + 0xa2, 0x0a, 0x0c, 0xf1, 0x0f, 0x3d, 0xd5, 0x05, 0x0e, 0x3f, 0x99, 0xcd, 0xcd, 0x9a, 0x84, 0xf1, + 0x2d, 0xd7, 0xdb, 0x13, 0xdc, 0xad, 0xbf, 0x1c, 0x84, 0x09, 0xfe, 0x5b, 0xa8, 0x48, 0x89, 0xe3, + 0xb2, 0x70, 0x9c, 0xe3, 0xf2, 0x3d, 0x98, 0x64, 0xe7, 0x0d, 0x0d, 0x76, 0x69, 0xc0, 0xf6, 0x7f, + 0x31, 0x12, 0xa8, 0xee, 0x85, 0x58, 0xd0, 0x78, 0xca, 0x4b, 0x6c, 0x13, 0x91, 0xac, 0xc1, 0x14, + 0x07, 0xdc, 0xa5, 0x4e, 0xd4, 0x8d, 0x2d, 0x56, 0xa7, 0x85, 0x4e, 0x24, 0xc1, 0x7c, 0x69, 0x0a, + 0x5e, 0x8f, 0x05, 0xd0, 0x4e, 0xd0, 0x92, 0x4f, 0xe0, 0xf4, 0x56, 0xe0, 0x7f, 0xf3, 0x5c, 0x13, + 0x10, 0xf8, 0xd7, 0xc9, 0xb5, 0x27, 0x56, 0xd4, 0xd0, 0xc5, 0x84, 0x24, 0x36, 0x79, 0x03, 0x46, + 0x57, 0xc3, 0x9a, 0x1f, 0xb8, 0xde, 0x1e, 0x7e, 0xa3, 0xa3, 0xdc, 0xd0, 0xef, 0x86, 0x8d, 0x47, + 0x08, 0xb4, 0x55, 0x71, 0xc2, 0x24, 0x3d, 0xd2, 0xdf, 0x24, 0x7d, 0x1b, 0x60, 0xcd, 0x77, 0x5a, + 0xd5, 0x76, 0x7b, 0xb1, 0x1a, 0xe2, 0x49, 0x2c, 0xce, 0xa3, 0xb6, 0xef, 0xb4, 0x1a, 0x4e, 0xbb, + 0xdd, 0x68, 0x3a, 0xa1, 0xad, 0xe1, 0x90, 0x2f, 0xe1, 0x5c, 0xe8, 0xee, 0x79, 0xd8, 0xb9, 0x86, + 0xd3, 0xde, 0xf3, 0x03, 0x37, 0xda, 0x3f, 0x68, 0x84, 0x5d, 0x37, 0xe2, 0xf6, 0xa0, 0xa9, 0x85, + 0x4b, 0x62, 0x93, 0xab, 0x4b, 0xbc, 0xaa, 0x44, 0xab, 0x33, 0x2c, 0x7b, 0x2e, 0xcc, 0x2e, 0x20, + 0x0f, 0x61, 0x72, 0xcd, 0x6d, 0x52, 0x2f, 0xa4, 0x68, 0xe0, 0x7b, 0x8e, 0xd6, 0xa2, 0xde, 0x1f, + 0x33, 0x1b, 0xc4, 0xc9, 0xb6, 0x4e, 0x84, 0x9f, 0xae, 0xc9, 0xe7, 0xfe, 0xe0, 0xe8, 0x70, 0x69, + 0xc4, 0x3e, 0x2d, 0x80, 0x0f, 0x9d, 0xc0, 0x73, 0xbd, 0xbd, 0xd0, 0xfa, 0xff, 0x09, 0x8c, 0xaa, + 0x79, 0xba, 0xa9, 0x6b, 0x2a, 0xe2, 0x68, 0xc6, 0x25, 0x1b, 0xdb, 0xe1, 0x6c, 0x0d, 0x83, 0x9c, + 0x43, 0xdd, 0x45, 0x08, 0x05, 0x23, 0xec, 0x13, 0x72, 0x3a, 0x1d, 0x9b, 0xc1, 0xd8, 0xd6, 0xb0, + 0x54, 0xc3, 0x45, 0x33, 0xca, 0xb7, 0x86, 0xd6, 0x23, 0xbb, 0xb8, 0x54, 0x63, 0xdf, 0xe4, 0xe6, + 0xea, 0xd2, 0x22, 0xce, 0xff, 0x28, 0xff, 0x26, 0x7d, 0xb7, 0xd5, 0xb4, 0x11, 0xca, 0x4a, 0xeb, + 0xd5, 0xf5, 0x35, 0x31, 0xc7, 0x58, 0x1a, 0x3a, 0x07, 0x6d, 0x1b, 0xa1, 0x4c, 0xda, 0xe5, 0x26, + 0x95, 0x45, 0xdf, 0x8b, 0x02, 0xbf, 0x1d, 0xa2, 0x08, 0x37, 0xca, 0xd7, 0xa0, 0xb0, 0xc5, 0x34, + 0x45, 0x91, 0x9d, 0x40, 0x25, 0x0f, 0x61, 0xae, 0xda, 0x7a, 0xea, 0x78, 0x4d, 0xda, 0xe2, 0x25, + 0x0f, 0xfd, 0xe0, 0xc9, 0xe3, 0xb6, 0xff, 0x2c, 0xc4, 0x45, 0x32, 0x2a, 0x4c, 0x97, 0x02, 0x45, + 0x9a, 0x76, 0x9e, 0x49, 0x24, 0x3b, 0x8f, 0x9a, 0xed, 0x03, 0x8b, 0x6d, 0xbf, 0xdb, 0x12, 0x4b, + 0x07, 0xf7, 0x81, 0x26, 0x03, 0xd8, 0x1c, 0xce, 0x46, 0x69, 0xa5, 0xbe, 0x8e, 0x0b, 0x43, 0x8c, + 0xd2, 0x7e, 0x78, 0x60, 0x33, 0x18, 0xb9, 0x06, 0x23, 0x52, 0x70, 0xe7, 0x37, 0x19, 0x68, 0x41, + 0x97, 0x02, 0xbb, 0x2c, 0x63, 0xdf, 0xb1, 0x4d, 0x9b, 0xfe, 0x53, 0x1a, 0x3c, 0x5f, 0xf4, 0x5b, + 0x54, 0x9a, 0xb5, 0x84, 0xd9, 0x86, 0x17, 0x34, 0x9a, 0xac, 0xc4, 0x36, 0x11, 0x59, 0x05, 0xfc, + 0xe0, 0x0e, 0xcb, 0xa7, 0xe3, 0x0a, 0xf8, 0xc1, 0x1e, 0xda, 0xb2, 0x8c, 0x2c, 0xc1, 0x99, 0x6a, + 0x37, 0xf2, 0x0f, 0x9c, 0xc8, 0x6d, 0xee, 0x74, 0xf6, 0x02, 0x87, 0x55, 0x52, 0x42, 0x02, 0x54, + 0x64, 0x1c, 0x59, 0xd8, 0xe8, 0x8a, 0x52, 0x3b, 0x4d, 0x40, 0xde, 0x85, 0x89, 0xd5, 0x90, 0x9b, + 0x2e, 0x9d, 0x90, 0xb6, 0xd0, 0xfe, 0x24, 0x5a, 0xe9, 0x86, 0x0d, 0x34, 0x64, 0x36, 0x98, 0xea, + 0xd3, 0xb2, 0x0d, 0x3c, 0x62, 0xc1, 0x70, 0x35, 0x0c, 0xdd, 0x30, 0x42, 0xb3, 0xd2, 0x68, 0x0d, + 0x8e, 0x0e, 0x2b, 0xc3, 0x0e, 0x42, 0x6c, 0x51, 0x42, 0x1e, 0xc2, 0xf8, 0x12, 0x65, 0x92, 0xf3, + 0x76, 0xd0, 0x0d, 0x23, 0x34, 0x12, 0x8d, 0x2f, 0x9c, 0x13, 0xbb, 0x91, 0x56, 0x22, 0xd6, 0x32, + 0x17, 0x51, 0x5b, 0x08, 0x6f, 0x44, 0xac, 0x40, 0x3f, 0x6a, 0x35, 0x7c, 0xa6, 0x16, 0x08, 0x9a, + 0x15, 0xb7, 0xc5, 0xf6, 0x97, 0x19, 0x6c, 0x03, 0xaa, 0x05, 0x62, 0x43, 0x6b, 0xec, 0x63, 0x89, + 0xae, 0x16, 0x18, 0x24, 0xa4, 0x99, 0xb2, 0x86, 0xcf, 0x1a, 0x16, 0x4f, 0xb3, 0x50, 0x36, 0xf1, + 0x84, 0xb6, 0xf2, 0x8f, 0x60, 0x7c, 0xb1, 0x1b, 0x46, 0xfe, 0xc1, 0xf6, 0x3e, 0x3d, 0xa0, 0x68, + 0x48, 0x12, 0xca, 0x4f, 0x13, 0xc1, 0x8d, 0x88, 0xc1, 0xf5, 0x6e, 0x6a, 0xe8, 0xe4, 0x33, 0x20, + 0x52, 0x8b, 0xb9, 0xc7, 0xd6, 0x87, 0xc7, 0xd6, 0x32, 0xda, 0x92, 0x46, 0xb9, 0xea, 0x22, 0x95, + 0x9f, 0xc6, 0x9e, 0x2a, 0xd6, 0xed, 0x99, 0x69, 0x62, 0xd6, 0x20, 0xde, 0xc4, 0x7b, 0x81, 0xd3, + 0xd9, 0x2f, 0x97, 0x63, 0xd5, 0x40, 0x74, 0x6a, 0x8f, 0xc1, 0x0d, 0x11, 0x27, 0x46, 0x27, 0x75, + 0x00, 0xfe, 0x73, 0x8d, 0x4d, 0x3c, 0xb7, 0x3e, 0x95, 0x8d, 0xf1, 0x62, 0x05, 0x72, 0xac, 0x50, + 0xdd, 0x11, 0x6c, 0xdb, 0xae, 0x31, 0x9b, 0x1a, 0x1b, 0xf2, 0x04, 0x4a, 0xfc, 0xd7, 0xba, 0xef, + 0xb9, 0x11, 0x3f, 0x2f, 0xe6, 0x0d, 0x53, 0x65, 0xb2, 0x58, 0x56, 0x80, 0x26, 0x62, 0x51, 0xc1, + 0x81, 0x2a, 0xd5, 0xaa, 0x49, 0x31, 0x26, 0x5b, 0x30, 0xbe, 0x15, 0xf8, 0xad, 0x6e, 0x33, 0x42, + 0x29, 0xe3, 0x3c, 0x6e, 0xfc, 0x44, 0xd4, 0xa3, 0x95, 0xf0, 0x31, 0xe9, 0x70, 0x40, 0x83, 0x9d, + 0x0b, 0xfa, 0x98, 0x68, 0x88, 0xa4, 0x06, 0xc3, 0x5b, 0x7e, 0xdb, 0x6d, 0x3e, 0x2f, 0x5f, 0xc0, + 0x46, 0xcf, 0x48, 0x66, 0x08, 0x94, 0x4d, 0x45, 0x91, 0xb6, 0x83, 0x20, 0x5d, 0xa4, 0xe5, 0x48, + 0xa4, 0x0a, 0x93, 0x9f, 0xb1, 0x05, 0xe3, 0xfa, 0x9e, 0xe7, 0xb8, 0x01, 0x2d, 0x5f, 0xc4, 0x79, + 0x41, 0x33, 0xfe, 0x8f, 0xf5, 0x02, 0x7d, 0x39, 0x1b, 0x14, 0x64, 0x15, 0x4e, 0xaf, 0x86, 0xf5, + 0x28, 0x70, 0x3b, 0x74, 0xdd, 0xf1, 0x9c, 0x3d, 0xda, 0x2a, 0x5f, 0x8a, 0xed, 0xe8, 0x6e, 0xd8, + 0x08, 0xb1, 0xac, 0x71, 0xc0, 0x0b, 0x75, 0x3b, 0x7a, 0x82, 0x8e, 0x7c, 0x0e, 0x33, 0xcb, 0xdf, + 0x44, 0x6c, 0xc5, 0xb4, 0xab, 0xdd, 0x96, 0x1b, 0xd5, 0x23, 0x3f, 0x70, 0xf6, 0x68, 0xb9, 0x82, + 0xfc, 0x5e, 0x3b, 0x3a, 0xac, 0x5c, 0xa6, 0xa2, 0xbc, 0xe1, 0x30, 0x84, 0x46, 0xc8, 0x31, 0xf4, + 0xfb, 0xf1, 0x2c, 0x0e, 0x6c, 0xf4, 0xeb, 0xdd, 0x0e, 0x93, 0xb6, 0x71, 0xf4, 0x2f, 0x1b, 0xa3, + 0xaf, 0x95, 0xf0, 0xd1, 0x0f, 0x39, 0x20, 0x35, 0xfa, 0x1a, 0x22, 0xb1, 0x81, 0xdc, 0xf7, 0x5d, + 0xaf, 0xda, 0x8c, 0xdc, 0xa7, 0x54, 0x68, 0xcc, 0x61, 0xf9, 0x0a, 0xb6, 0x14, 0x6d, 0xfe, 0xbf, + 0xec, 0xbb, 0x5e, 0xc3, 0xc1, 0xe2, 0x46, 0x28, 0xca, 0xf5, 0x6f, 0x24, 0x4d, 0x4d, 0x7e, 0x08, + 0x67, 0xd7, 0xfd, 0x47, 0x6e, 0x9b, 0xf2, 0x2d, 0x87, 0x0f, 0x0b, 0xda, 0x2f, 0x2d, 0xe4, 0x8b, + 0x36, 0xff, 0x03, 0xc4, 0x68, 0x88, 0xdd, 0xea, 0x40, 0xe1, 0xe8, 0x36, 0xff, 0x6c, 0x2e, 0x64, + 0x19, 0x26, 0xf0, 0xbb, 0x6c, 0xe3, 0xcf, 0xb0, 0x7c, 0x15, 0x55, 0xba, 0x2b, 0x09, 0x29, 0xed, + 0xe6, 0xb2, 0x86, 0xb3, 0xec, 0x45, 0xc1, 0x73, 0xdb, 0x20, 0x23, 0x1f, 0xc3, 0x7c, 0x72, 0x79, + 0x2f, 0xfa, 0xde, 0x63, 0x77, 0xaf, 0x1b, 0xd0, 0x56, 0xf9, 0x35, 0xd6, 0x54, 0xbb, 0x07, 0x06, + 0xf9, 0x0a, 0x66, 0xf1, 0xac, 0xab, 0x7a, 0xbe, 0xf7, 0xfc, 0xc0, 0xfd, 0x09, 0xca, 0xcf, 0x4c, + 0xec, 0xbd, 0x86, 0x62, 0xef, 0xb5, 0xa3, 0xc3, 0xca, 0x15, 0x3c, 0x13, 0x1b, 0x8e, 0x8e, 0x91, + 0xb0, 0x5a, 0x67, 0xf3, 0x98, 0x7f, 0x08, 0x67, 0x52, 0xed, 0x27, 0x25, 0x18, 0x78, 0x22, 0xee, + 0x67, 0xc7, 0x6c, 0xf6, 0x27, 0x79, 0x13, 0x86, 0x9e, 0x32, 0x45, 0x0d, 0xc5, 0x91, 0xf8, 0xc6, + 0x4f, 0x23, 0x5d, 0xf5, 0x1e, 0xfb, 0x36, 0x47, 0xfa, 0xa0, 0xf8, 0x5e, 0xe1, 0xfe, 0xe0, 0xe8, + 0x78, 0x69, 0x82, 0x5f, 0xab, 0xdf, 0x1f, 0x1c, 0x9d, 0x2c, 0x4d, 0x59, 0x55, 0x38, 0x9d, 0xc0, + 0x27, 0x65, 0x18, 0xa1, 0x1e, 0x13, 0xfe, 0x5b, 0x5c, 0x20, 0xb2, 0xe5, 0x4f, 0x32, 0x03, 0x43, + 0x6d, 0xf7, 0xc0, 0x8d, 0xb0, 0xc2, 0x21, 0x9b, 0xff, 0xb0, 0x7e, 0xb7, 0x00, 0x24, 0x7d, 0x1e, + 0x91, 0x5b, 0x09, 0x36, 0x5c, 0xf4, 0x15, 0x20, 0xfd, 0xe2, 0x40, 0x72, 0xff, 0x0c, 0xa6, 0xf9, + 0x82, 0x90, 0x27, 0xa7, 0x56, 0x17, 0xdf, 0xb1, 0x33, 0x8a, 0x75, 0x63, 0x93, 0x28, 0xc6, 0x73, + 0x76, 0x0d, 0x9b, 0xd6, 0x85, 0xd9, 0xcc, 0x93, 0x88, 0xac, 0xc3, 0xec, 0x81, 0xef, 0x45, 0xfb, + 0xed, 0xe7, 0xf2, 0x20, 0x12, 0xb5, 0x15, 0xb0, 0x36, 0xdc, 0x7c, 0x33, 0x11, 0xec, 0x69, 0x01, + 0x16, 0x1c, 0xb1, 0x1e, 0x61, 0x74, 0x92, 0x3d, 0xb1, 0x6c, 0x38, 0x93, 0xda, 0xd0, 0xc9, 0x0f, + 0x60, 0xa2, 0x89, 0xca, 0x9d, 0x51, 0x13, 0x3f, 0xce, 0x34, 0xb8, 0xfe, 0xad, 0x72, 0x38, 0xef, + 0xca, 0x3f, 0x29, 0xc0, 0x5c, 0xce, 0x56, 0x7e, 0xf2, 0xa1, 0xfe, 0x02, 0xce, 0x1e, 0x38, 0xdf, + 0x34, 0x02, 0xd4, 0xdd, 0x1b, 0x81, 0xe3, 0x25, 0x46, 0x1b, 0xb7, 0xa9, 0x6c, 0x0c, 0xdd, 0xb7, + 0xe9, 0xc0, 0xf9, 0xc6, 0x46, 0x04, 0x9b, 0x95, 0xf3, 0x76, 0x7e, 0x0a, 0x93, 0xc6, 0xe6, 0x7d, + 0xe2, 0xc6, 0x59, 0x77, 0xe0, 0xcc, 0x12, 0x6d, 0xd3, 0x88, 0x1e, 0xdb, 0x66, 0x67, 0x6d, 0x01, + 0xd4, 0xe9, 0x81, 0xd3, 0xd9, 0xf7, 0x99, 0x50, 0x5f, 0xd3, 0x7f, 0x09, 0x9b, 0x0f, 0x91, 0xea, + 0x89, 0x2c, 0xd8, 0x7d, 0x8b, 0x0b, 0xfa, 0xa1, 0xc2, 0xb4, 0x35, 0x2a, 0xeb, 0xdf, 0x16, 0x81, + 0x88, 0xdd, 0x37, 0xa0, 0xce, 0x81, 0x6c, 0xc6, 0xfb, 0x30, 0xc1, 0x35, 0x74, 0x0e, 0xc6, 0xe6, + 0x8c, 0x2f, 0x4c, 0x8b, 0x2f, 0x4f, 0x2f, 0x5a, 0x39, 0x65, 0x1b, 0xa8, 0x8c, 0xd4, 0xa6, 0xdc, + 0xb4, 0x80, 0xa4, 0x45, 0x83, 0x54, 0x2f, 0x62, 0xa4, 0xfa, 0x6f, 0xf2, 0x09, 0x4c, 0x2d, 0xfa, + 0x07, 0x1d, 0x36, 0x26, 0x82, 0x78, 0x40, 0x98, 0x6d, 0x44, 0xbd, 0x46, 0xe1, 0xca, 0x29, 0x3b, + 0x81, 0x4e, 0x36, 0x60, 0xfa, 0x6e, 0xbb, 0x1b, 0xee, 0x57, 0xbd, 0xd6, 0x62, 0xdb, 0x0f, 0x25, + 0x97, 0x41, 0xa1, 0x69, 0x89, 0xbd, 0x33, 0x8d, 0xb1, 0x72, 0xca, 0xce, 0x22, 0x24, 0xd7, 0x60, + 0x68, 0xf9, 0x29, 0xdb, 0xd3, 0xa5, 0x87, 0x8b, 0x70, 0xc0, 0xdb, 0xf4, 0xe8, 0xe6, 0xe3, 0x95, + 0x53, 0x36, 0x2f, 0xad, 0x8d, 0xc1, 0x88, 0xd4, 0xee, 0x6f, 0x31, 0x79, 0x5b, 0x0d, 0x67, 0x3d, + 0x72, 0xa2, 0x6e, 0x48, 0xe6, 0x61, 0x74, 0xa7, 0xc3, 0x94, 0x4e, 0x69, 0x16, 0xb1, 0xd5, 0x6f, + 0xeb, 0x4d, 0x73, 0xa4, 0xc9, 0x05, 0x88, 0x6d, 0xba, 0x02, 0x59, 0x33, 0xf2, 0xae, 0x98, 0x83, + 0xdb, 0x1b, 0xdb, 0xa8, 0xb7, 0x98, 0xa8, 0xb7, 0x94, 0x1c, 0x6b, 0x6b, 0x36, 0x73, 0xf0, 0xac, + 0xcf, 0xe1, 0xd2, 0x4e, 0x27, 0xa4, 0x41, 0x54, 0xed, 0x74, 0xda, 0x6e, 0x93, 0xdf, 0x90, 0xa1, + 0x15, 0x40, 0x2e, 0x96, 0x77, 0x61, 0x98, 0x03, 0xc4, 0x32, 0x91, 0x6b, 0xb0, 0xda, 0xe9, 0x08, + 0xdb, 0xc3, 0x5b, 0x5c, 0xf2, 0xe7, 0xd6, 0x04, 0x5b, 0x60, 0x5b, 0xbf, 0x5d, 0x80, 0x4b, 0xfc, + 0x0b, 0xc8, 0x65, 0xfd, 0x5d, 0x18, 0x43, 0xff, 0xb7, 0x8e, 0xd3, 0x94, 0xdf, 0x04, 0x77, 0x04, + 0x94, 0x40, 0x3b, 0x2e, 0xd7, 0x3c, 0x0b, 0x8b, 0xf9, 0x9e, 0x85, 0xf2, 0x03, 0x1b, 0xc8, 0xfc, + 0xc0, 0x3e, 0x03, 0x4b, 0xb4, 0xa8, 0xdd, 0x4e, 0x35, 0x2a, 0x7c, 0x91, 0x56, 0x59, 0xff, 0xb5, + 0x08, 0x73, 0xf7, 0xa8, 0x47, 0x03, 0x07, 0xfb, 0x69, 0x58, 0xb9, 0x74, 0x0f, 0xa3, 0x42, 0x4f, + 0x0f, 0xa3, 0x8a, 0xb4, 0x1b, 0x16, 0xd1, 0x6e, 0x98, 0x72, 0x97, 0x62, 0xba, 0xe8, 0x8e, 0xbd, + 0x2a, 0xba, 0x85, 0xba, 0x68, 0x37, 0x70, 0xf9, 0x2d, 0xc3, 0x6a, 0xec, 0x9d, 0x34, 0xd8, 0xd7, + 0xe6, 0x30, 0x2d, 0xbc, 0x35, 0x46, 0x84, 0x77, 0x92, 0xe9, 0x93, 0xb4, 0x01, 0xc3, 0xdc, 0xdc, + 0x89, 0x77, 0x5b, 0xe3, 0x0b, 0x37, 0xc4, 0x37, 0x95, 0xd3, 0x41, 0x61, 0x1b, 0xc5, 0x83, 0x9d, + 0x2f, 0x81, 0x08, 0x01, 0xb6, 0xe0, 0x32, 0xff, 0x19, 0x8c, 0x6b, 0x28, 0xc7, 0x39, 0xfb, 0x95, + 0xd9, 0x95, 0x89, 0xa3, 0xde, 0x1e, 0xb7, 0xe0, 0x6a, 0x67, 0xbf, 0xf5, 0x21, 0x94, 0xd3, 0xad, + 0x11, 0xa6, 0xb6, 0x7e, 0x96, 0x3d, 0x6b, 0x09, 0x66, 0xee, 0xd1, 0x08, 0x17, 0x2e, 0x7e, 0x44, + 0x9a, 0x97, 0x5d, 0xe2, 0x3b, 0x93, 0xbb, 0x2a, 0x02, 0xd9, 0x02, 0xd3, 0xbe, 0xd2, 0x3a, 0xcc, + 0x26, 0xb8, 0x88, 0xfa, 0x3f, 0x80, 0x11, 0x01, 0x52, 0x3b, 0xaa, 0x70, 0xd5, 0xa5, 0x8f, 0x44, + 0xc1, 0xee, 0x02, 0x5f, 0xb7, 0x82, 0xb3, 0x2d, 0x09, 0xac, 0x7d, 0x38, 0xcb, 0x8e, 0xd9, 0x98, + 0xab, 0x5a, 0x8e, 0xe7, 0x61, 0xac, 0xc3, 0x04, 0x85, 0xd0, 0xfd, 0x09, 0x5f, 0x46, 0x43, 0xf6, + 0x28, 0x03, 0xd4, 0xdd, 0x9f, 0x50, 0x72, 0x11, 0x00, 0x0b, 0xb1, 0x9b, 0x62, 0x17, 0x40, 0x74, + 0x6e, 0xca, 0x24, 0x80, 0x3e, 0x7a, 0x7c, 0xdd, 0xd8, 0xf8, 0xb7, 0x15, 0xc0, 0x5c, 0xaa, 0x26, + 0xd1, 0x81, 0x5b, 0x30, 0x2a, 0xe5, 0xe3, 0xc4, 0x25, 0x83, 0xde, 0x03, 0x5b, 0x21, 0x91, 0xd7, + 0xe1, 0xb4, 0x47, 0xbf, 0x89, 0x1a, 0xa9, 0x36, 0x4c, 0x32, 0xf0, 0x96, 0x6c, 0x87, 0xf5, 0x4b, + 0x68, 0x58, 0xae, 0x7b, 0xfe, 0xb3, 0xc7, 0x6d, 0xe7, 0x09, 0x4d, 0x55, 0xfc, 0x03, 0x18, 0xad, + 0xf7, 0xaf, 0x98, 0x7f, 0x3e, 0xb2, 0x72, 0x5b, 0x91, 0x58, 0x6d, 0x98, 0x67, 0x5d, 0xaa, 0x57, + 0xd7, 0xd7, 0x56, 0x5b, 0x5b, 0xdf, 0xf6, 0x00, 0x3e, 0x85, 0xf3, 0x99, 0xb5, 0x7d, 0xdb, 0x83, + 0xf8, 0x47, 0x83, 0x30, 0xc7, 0x0f, 0x93, 0xf4, 0x0a, 0x3e, 0xfe, 0x56, 0xf3, 0x0b, 0xb9, 0xef, + 0xbd, 0x9d, 0x71, 0xdf, 0x8b, 0x24, 0xfa, 0x7d, 0xaf, 0x71, 0xcb, 0xfb, 0x5e, 0xf6, 0x2d, 0x2f, + 0x1a, 0xa1, 0xcc, 0x5b, 0xde, 0xe4, 0xdd, 0xee, 0x72, 0xfe, 0xdd, 0x2e, 0x5e, 0x3c, 0x65, 0xdc, + 0xed, 0x66, 0xdd, 0xe8, 0x26, 0x1c, 0xa5, 0x46, 0x5f, 0xad, 0xa3, 0xd4, 0xeb, 0x30, 0x52, 0xed, + 0x74, 0x34, 0xc7, 0x43, 0x9c, 0x1e, 0xa7, 0xd3, 0xe1, 0x83, 0x27, 0x0b, 0xe5, 0x3e, 0x0f, 0x19, + 0xfb, 0xfc, 0xfb, 0x00, 0x8b, 0xf8, 0x3c, 0x02, 0x27, 0x6e, 0x1c, 0x31, 0x50, 0xc2, 0xe7, 0x8f, + 0x26, 0x70, 0xe2, 0x74, 0xf3, 0x4a, 0x8c, 0xcc, 0x05, 0x7b, 0x6b, 0x17, 0xca, 0xe9, 0xe5, 0xf3, + 0x0a, 0xb6, 0xae, 0x3f, 0x2c, 0xc0, 0x45, 0x21, 0xe4, 0x24, 0x3e, 0xf0, 0x93, 0xaf, 0xce, 0x77, + 0x60, 0x42, 0xd0, 0x6e, 0xc7, 0x1f, 0x02, 0xbf, 0x60, 0x97, 0x9b, 0x31, 0xdf, 0xd1, 0x0d, 0x34, + 0xf2, 0x0e, 0x8c, 0xe2, 0x1f, 0xf1, 0xc5, 0x10, 0x1b, 0x99, 0x31, 0x44, 0x6d, 0x24, 0xaf, 0x87, + 0x14, 0xaa, 0xf5, 0x35, 0x5c, 0xca, 0x6b, 0xf8, 0x2b, 0x18, 0x97, 0x7f, 0x55, 0x80, 0xf3, 0x82, + 0xbd, 0xb1, 0x55, 0xbc, 0xd0, 0xa9, 0x73, 0x02, 0x77, 0xe5, 0xfb, 0x30, 0xce, 0x2a, 0x94, 0xed, + 0x1e, 0x10, 0x47, 0xab, 0xd0, 0x1c, 0xe2, 0x92, 0x25, 0x27, 0x72, 0x84, 0xfb, 0x8d, 0x73, 0xd0, + 0x96, 0x96, 0x11, 0x5b, 0x27, 0xb6, 0xbe, 0x84, 0x0b, 0xd9, 0x5d, 0x78, 0x05, 0xe3, 0x73, 0x1f, + 0xe6, 0x33, 0x0e, 0x85, 0x17, 0x3b, 0x93, 0xbf, 0x80, 0xf3, 0x99, 0xbc, 0x5e, 0x41, 0x33, 0x57, + 0x98, 0xc4, 0x11, 0xbd, 0x82, 0x29, 0xb4, 0x1e, 0xc2, 0xb9, 0x0c, 0x4e, 0xaf, 0xa0, 0x89, 0xf7, + 0x60, 0x4e, 0x49, 0xda, 0x2f, 0xd5, 0xc2, 0x75, 0xb8, 0xc8, 0x19, 0xbd, 0x9a, 0x59, 0x79, 0x00, + 0xe7, 0x05, 0xbb, 0x57, 0x30, 0x7a, 0x2b, 0x70, 0x21, 0x56, 0xa8, 0x33, 0xe4, 0xa4, 0x63, 0x6f, + 0x32, 0xd6, 0x1a, 0x5c, 0x8e, 0x39, 0xe5, 0x08, 0x0d, 0xc7, 0xe7, 0xc6, 0xc5, 0xc1, 0x78, 0x96, + 0x5e, 0xc9, 0x8c, 0x3e, 0x84, 0xb3, 0x06, 0xd3, 0x57, 0x26, 0x2a, 0xad, 0xc2, 0x34, 0x67, 0x6c, + 0x8a, 0xce, 0x0b, 0xba, 0xe8, 0x3c, 0xbe, 0x70, 0x26, 0x66, 0x89, 0xe0, 0xdd, 0xb7, 0x32, 0xa4, + 0xe9, 0x75, 0x94, 0xa6, 0x25, 0x4a, 0xdc, 0xc2, 0x77, 0x60, 0x98, 0x43, 0x44, 0xfb, 0x32, 0x98, + 0x71, 0x65, 0x81, 0x93, 0x09, 0x64, 0xeb, 0x87, 0x70, 0x91, 0x6b, 0xa2, 0xf1, 0x45, 0xa5, 0xa9, + 0x2d, 0xfe, 0x20, 0xa1, 0x88, 0x9e, 0x13, 0x7c, 0x93, 0xf8, 0x39, 0xfa, 0xe8, 0x23, 0xb9, 0xb6, + 0xf3, 0xf8, 0x1f, 0xeb, 0xe9, 0x9a, 0x54, 0x30, 0x8b, 0x99, 0x0a, 0xe6, 0x55, 0xb8, 0xa2, 0x14, + 0xcc, 0x64, 0x35, 0x72, 0x69, 0x59, 0x5f, 0xc2, 0x79, 0xde, 0x51, 0xe9, 0x52, 0x68, 0x36, 0xe3, + 0xc3, 0x44, 0x37, 0xe7, 0x44, 0x37, 0x4d, 0xec, 0x9c, 0x4e, 0xfe, 0xad, 0x82, 0xfc, 0xe4, 0xb2, + 0x99, 0xff, 0xa2, 0x35, 0xee, 0x0d, 0xa8, 0xa8, 0x01, 0x31, 0x5b, 0xf4, 0x62, 0xea, 0xf6, 0x3a, + 0xcc, 0xea, 0x6c, 0xdc, 0x26, 0xdd, 0xbd, 0x83, 0x37, 0x48, 0x6f, 0xb3, 0xcf, 0x02, 0x01, 0x72, + 0xd9, 0x95, 0x33, 0xc6, 0x0d, 0xf1, 0x6d, 0x85, 0x69, 0x35, 0xe0, 0x42, 0x7a, 0x2a, 0xdc, 0xa6, + 0x7c, 0x4f, 0x40, 0x3e, 0x61, 0x9f, 0x30, 0x42, 0xc4, 0x64, 0xe4, 0x32, 0x95, 0xdf, 0x31, 0x27, + 0x97, 0x54, 0x96, 0x25, 0xb7, 0x9a, 0x44, 0xff, 0x59, 0xed, 0x72, 0x3d, 0xfc, 0x2a, 0x10, 0x59, + 0xb4, 0x58, 0xb7, 0x65, 0xd5, 0xe7, 0x60, 0x60, 0xb1, 0x6e, 0x8b, 0x87, 0x4c, 0x28, 0x09, 0x36, + 0xc3, 0xc0, 0x66, 0xb0, 0xa4, 0x44, 0x5e, 0x3c, 0x86, 0x44, 0x7e, 0x7f, 0x70, 0x74, 0xa0, 0x34, + 0x68, 0x93, 0xba, 0xbb, 0xe7, 0x3d, 0x74, 0xa3, 0x7d, 0x55, 0x61, 0xd5, 0xfa, 0x0a, 0xa6, 0x8d, + 0xea, 0xc5, 0x57, 0xdc, 0xf3, 0x05, 0x16, 0x93, 0x67, 0x17, 0xab, 0xe8, 0x56, 0x83, 0x26, 0x8b, + 0x09, 0xbe, 0xdf, 0x34, 0x9d, 0x06, 0x3e, 0xef, 0xb5, 0x65, 0xa1, 0xf5, 0x8f, 0x07, 0x35, 0xee, + 0xda, 0xbb, 0xb6, 0x1e, 0xbd, 0xbb, 0x03, 0xc0, 0x57, 0x88, 0xd6, 0x39, 0x26, 0x00, 0x8e, 0x0b, + 0x6f, 0x15, 0xbe, 0x25, 0xdb, 0x1a, 0xd2, 0x71, 0xdf, 0xbd, 0x09, 0xff, 0x63, 0x4e, 0x24, 0x9f, + 0x7a, 0x2a, 0xff, 0x63, 0xc1, 0x3a, 0xb4, 0x75, 0x24, 0xf2, 0xc3, 0xe4, 0xe3, 0x8c, 0x21, 0xbc, + 0xb0, 0x7a, 0x4d, 0xde, 0x60, 0xa7, 0xfb, 0x76, 0xb2, 0xf7, 0x19, 0xcf, 0x60, 0x96, 0xd1, 0xba, + 0x8f, 0x51, 0xb1, 0x58, 0xfe, 0x26, 0xa2, 0x1e, 0xdf, 0xdb, 0x87, 0xb1, 0x9e, 0x6b, 0x3d, 0xea, + 0x89, 0x91, 0x85, 0xfd, 0x3d, 0xe6, 0xd3, 0xa0, 0xaa, 0xcc, 0xce, 0xe6, 0x8f, 0x8b, 0xc8, 0x5e, + 0x5b, 0xf6, 0x5a, 0x1d, 0xdf, 0x55, 0x0a, 0x13, 0x5f, 0x44, 0x41, 0xbb, 0x41, 0x05, 0xdc, 0xd6, + 0x91, 0xac, 0xd7, 0x7b, 0x7a, 0xb5, 0x8f, 0xc2, 0xe0, 0xf6, 0xe2, 0xf6, 0x5a, 0xa9, 0x60, 0xdd, + 0x02, 0xd0, 0x6a, 0x02, 0x18, 0xde, 0xd8, 0xb4, 0xd7, 0xab, 0x6b, 0xa5, 0x53, 0x64, 0x16, 0xce, + 0x3c, 0x5c, 0xdd, 0x58, 0xda, 0x7c, 0x58, 0x6f, 0xd4, 0xd7, 0xab, 0xf6, 0xf6, 0x62, 0xd5, 0x5e, + 0x2a, 0x15, 0xac, 0xaf, 0x61, 0xc6, 0xec, 0xe1, 0x2b, 0x5d, 0x84, 0x11, 0x4c, 0x2b, 0x79, 0xe6, + 0xfe, 0xc3, 0x6d, 0xcd, 0xa3, 0x55, 0x28, 0x7f, 0x49, 0xcf, 0x2c, 0xa1, 0x26, 0x8a, 0xcf, 0x48, + 0x43, 0x22, 0x6f, 0x70, 0xb1, 0x20, 0xf9, 0x72, 0x99, 0x89, 0x05, 0x8d, 0x58, 0x2e, 0xc0, 0xad, + 0xef, 0xfb, 0x30, 0x63, 0xd6, 0x7a, 0x5c, 0x2b, 0xd5, 0x6b, 0xe8, 0xea, 0xab, 0x3d, 0x6b, 0x22, + 0x44, 0xbf, 0x36, 0x10, 0x3b, 0xeb, 0xf7, 0xa1, 0x24, 0xb0, 0xe2, 0x93, 0xf7, 0xaa, 0x34, 0x23, + 0x16, 0x32, 0x1e, 0x61, 0x4a, 0xa7, 0x74, 0x1f, 0x4a, 0x6c, 0xc7, 0x14, 0x94, 0xbc, 0x82, 0x19, + 0x18, 0x5a, 0x8b, 0xaf, 0x73, 0x6c, 0xfe, 0x03, 0x5f, 0xf7, 0x44, 0x4e, 0x10, 0x49, 0x3f, 0xb8, + 0x31, 0x5b, 0xfd, 0x26, 0x6f, 0xc0, 0xf0, 0x5d, 0xb7, 0x1d, 0x09, 0xd3, 0x48, 0x7c, 0xc8, 0x33, + 0xb6, 0xbc, 0xc0, 0x16, 0x08, 0x96, 0x0d, 0x67, 0xb4, 0x0a, 0x4f, 0xd0, 0x54, 0x52, 0x86, 0x91, + 0x0d, 0xfa, 0x8d, 0x56, 0xbf, 0xfc, 0x69, 0xbd, 0x0b, 0x67, 0x84, 0x8f, 0xa1, 0x36, 0x4c, 0x57, + 0xc4, 0x5b, 0xf1, 0x82, 0xf1, 0x60, 0x55, 0xb0, 0xc4, 0x22, 0x46, 0xb7, 0xd3, 0x69, 0xbd, 0x20, + 0x1d, 0x3b, 0x28, 0x4e, 0x48, 0xf7, 0x1d, 0x79, 0x0b, 0xd4, 0x6f, 0x3a, 0xff, 0x9f, 0x22, 0x94, + 0x13, 0x56, 0x86, 0xc5, 0x7d, 0xa7, 0xdd, 0xa6, 0xde, 0x1e, 0x25, 0xd7, 0x61, 0x70, 0x7b, 0x73, + 0x7b, 0x4b, 0x58, 0x49, 0xa5, 0x77, 0x01, 0x03, 0x29, 0x1c, 0x1b, 0x31, 0xc8, 0x03, 0x38, 0x23, + 0xbd, 0x88, 0x55, 0x91, 0x98, 0xa1, 0x8b, 0xbd, 0x7d, 0x92, 0xd3, 0x74, 0xe4, 0x6d, 0x61, 0x12, + 0xf9, 0x71, 0xd7, 0x0d, 0x68, 0x0b, 0x2d, 0x3f, 0xf1, 0x55, 0xbd, 0x56, 0x62, 0xeb, 0x68, 0xe4, + 0xfb, 0x30, 0x51, 0xaf, 0x6f, 0xc6, 0xb5, 0x0f, 0x19, 0x37, 0x44, 0x7a, 0x91, 0x6d, 0x20, 0xf2, + 0x27, 0xc1, 0xd6, 0x1f, 0x15, 0x60, 0x2e, 0xc7, 0xdc, 0x42, 0xde, 0x30, 0xc6, 0x61, 0x5a, 0x1b, + 0x07, 0x89, 0xb2, 0x72, 0x4a, 0x0c, 0xc4, 0xa2, 0xe6, 0x93, 0x3d, 0x70, 0x02, 0x9f, 0xec, 0x95, + 0x53, 0xb1, 0x1f, 0x36, 0x79, 0x1d, 0x06, 0xea, 0xf5, 0x4d, 0x61, 0x56, 0x27, 0x71, 0x0f, 0x34, + 0x64, 0x86, 0x50, 0x03, 0x18, 0x95, 0x20, 0xeb, 0x34, 0x4c, 0x1a, 0x13, 0x63, 0x59, 0x30, 0xa1, + 0xb7, 0x90, 0xcd, 0xfe, 0xa2, 0xdf, 0x52, 0xb3, 0xcf, 0xfe, 0xb6, 0x7e, 0xd5, 0x1c, 0x33, 0x72, + 0x11, 0x40, 0xde, 0xd7, 0xba, 0x2d, 0x79, 0xf3, 0x23, 0x20, 0xab, 0x2d, 0x72, 0x05, 0x26, 0x02, + 0xda, 0x72, 0x03, 0xda, 0x8c, 0x1a, 0xdd, 0x40, 0x3c, 0x8c, 0xb1, 0xc7, 0x25, 0x6c, 0x27, 0x68, + 0x93, 0xef, 0xc2, 0x30, 0xbf, 0x48, 0x16, 0xbd, 0x97, 0x4a, 0x42, 0xbd, 0xbe, 0xb9, 0x7e, 0xb7, + 0xca, 0x2f, 0xba, 0x6d, 0x81, 0x62, 0xd5, 0x60, 0x5c, 0xeb, 0x55, 0xbf, 0xda, 0x67, 0x60, 0x48, + 0xb7, 0x52, 0xf2, 0x1f, 0xd6, 0xef, 0x14, 0x60, 0x06, 0x97, 0xc1, 0x9e, 0xcb, 0x8e, 0x87, 0xb8, + 0x2f, 0x0b, 0xc6, 0xa4, 0x5d, 0x30, 0x26, 0x2d, 0x81, 0xab, 0x66, 0xef, 0x83, 0xd4, 0xec, 0x5d, + 0xc8, 0x9a, 0x3d, 0xdc, 0x02, 0x5c, 0xdf, 0xd3, 0x27, 0x4d, 0xbf, 0xae, 0xfb, 0xdd, 0x02, 0x4c, + 0x6b, 0x6d, 0x52, 0x1d, 0xbc, 0x63, 0x34, 0xe9, 0x7c, 0x46, 0x93, 0x52, 0xeb, 0xa9, 0x96, 0x6a, + 0xd1, 0x6b, 0xbd, 0x5a, 0x94, 0xb5, 0x9c, 0x8c, 0x65, 0xf2, 0x97, 0x05, 0x98, 0xcd, 0x1c, 0x03, + 0x72, 0x96, 0xc9, 0xff, 0xcd, 0x80, 0x46, 0x62, 0xe4, 0xc5, 0x2f, 0x06, 0x5f, 0x0d, 0xc3, 0x2e, + 0x0d, 0xc4, 0xb8, 0x8b, 0x5f, 0xe4, 0x35, 0x98, 0xdc, 0xa2, 0x81, 0xeb, 0xb7, 0xf8, 0xc3, 0x04, + 0xee, 0xf1, 0x3b, 0x69, 0x9b, 0x40, 0x72, 0x01, 0xc6, 0x94, 0xc7, 0x2a, 0xb7, 0xe1, 0xda, 0x31, + 0x80, 0xf1, 0x5e, 0x72, 0xf7, 0xf8, 0xc5, 0x0f, 0x23, 0x16, 0xbf, 0xd8, 0x06, 0x2c, 0x2d, 0xaa, + 0xc3, 0x7c, 0x03, 0x96, 0xe6, 0xd2, 0xb3, 0x30, 0xfc, 0x99, 0x8d, 0xeb, 0x18, 0x63, 0x4e, 0xd8, + 0xe2, 0x17, 0x99, 0x42, 0xd7, 0x72, 0x7c, 0x17, 0x83, 0x2e, 0xe5, 0x1f, 0xc0, 0x4c, 0xd6, 0xb8, + 0x66, 0x7d, 0x05, 0x82, 0xb6, 0xa8, 0x68, 0xbf, 0x84, 0xe9, 0x6a, 0xab, 0x15, 0x2f, 0x57, 0x3e, + 0xab, 0x7c, 0x9f, 0xe0, 0x36, 0x4d, 0x21, 0xd6, 0x0e, 0xae, 0x7a, 0x6e, 0x64, 0x4f, 0x2f, 0x7f, + 0xe3, 0x86, 0x91, 0xeb, 0xed, 0x69, 0x86, 0x57, 0xfb, 0xec, 0x06, 0x7d, 0x96, 0xb1, 0x04, 0x98, + 0xc4, 0x61, 0xf2, 0xe6, 0xf0, 0x0c, 0xe6, 0x33, 0x1a, 0xdb, 0x78, 0xeb, 0x9a, 0x33, 0xf9, 0xc6, + 0x05, 0x03, 0xd5, 0xe6, 0x13, 0xeb, 0xfb, 0x70, 0x96, 0x6f, 0xfb, 0xbd, 0x1a, 0x2f, 0x9a, 0xad, + 0xdb, 0x89, 0xad, 0xf7, 0xa4, 0x25, 0xa7, 0x67, 0xcb, 0xec, 0x09, 0xa3, 0x2d, 0x58, 0xe5, 0x7f, + 0x29, 0xc0, 0x7c, 0x82, 0xb4, 0xfe, 0xdc, 0x6b, 0xca, 0x33, 0xe7, 0xf5, 0xa4, 0xeb, 0x3e, 0xca, + 0x4a, 0xdc, 0x40, 0xea, 0xb6, 0x94, 0xf7, 0x3e, 0xb9, 0x05, 0xc0, 0x89, 0x35, 0x11, 0x07, 0xaf, + 0x07, 0x84, 0x97, 0x13, 0x0a, 0x39, 0x1a, 0x0a, 0xe9, 0x42, 0xd6, 0xb8, 0x8b, 0x6f, 0xa4, 0x9f, + 0xfd, 0x1c, 0xe3, 0xac, 0x50, 0x41, 0xde, 0xc8, 0x31, 0xa4, 0x67, 0xf1, 0xb7, 0xfe, 0xf6, 0x00, + 0xcc, 0xe9, 0x13, 0xf8, 0x22, 0x7d, 0xdd, 0x82, 0xf1, 0x45, 0xdf, 0x8b, 0xe8, 0x37, 0x91, 0x16, + 0xe7, 0x82, 0x28, 0x6f, 0x04, 0x55, 0x22, 0xc4, 0x6b, 0x0e, 0x68, 0x30, 0x59, 0xcf, 0xf0, 0xd6, + 0x8c, 0x11, 0xc9, 0x22, 0x4c, 0x6e, 0xd0, 0x67, 0xa9, 0x01, 0x44, 0x8f, 0x51, 0x8f, 0x3e, 0x6b, + 0x68, 0x83, 0xa8, 0xbb, 0xf1, 0x19, 0x34, 0xe4, 0x11, 0x4c, 0xc9, 0xc5, 0x65, 0x0c, 0xe6, 0xbc, + 0x7e, 0xf2, 0x9a, 0xcb, 0x99, 0xc7, 0x81, 0x60, 0x35, 0xe4, 0x8c, 0x61, 0x82, 0x23, 0xeb, 0x3a, + 0xaf, 0x91, 0x87, 0x36, 0x30, 0x8f, 0x76, 0xad, 0xc4, 0xf0, 0xc7, 0x4d, 0x86, 0x34, 0xd0, 0x59, + 0x58, 0x5b, 0x50, 0x4e, 0xcf, 0x87, 0xa8, 0xed, 0x6d, 0x18, 0xe6, 0x50, 0x21, 0x2a, 0xc9, 0x10, + 0x46, 0x0a, 0x9b, 0xdb, 0x32, 0x5a, 0xe2, 0x54, 0xe2, 0x30, 0x6b, 0x05, 0xed, 0x4b, 0x0a, 0x47, + 0x09, 0xab, 0xb7, 0x93, 0xd3, 0x8b, 0xae, 0xce, 0x72, 0x7a, 0x75, 0x5f, 0x1c, 0xf9, 0x24, 0x65, + 0x11, 0x4d, 0x74, 0x3a, 0x27, 0xd1, 0xb0, 0x1b, 0x30, 0x22, 0x40, 0x89, 0xe0, 0x4a, 0xf1, 0xe7, + 0x27, 0x11, 0xac, 0x0f, 0xe0, 0x1c, 0xda, 0x0b, 0x5d, 0x6f, 0xaf, 0x4d, 0x77, 0x42, 0xe3, 0x51, + 0x49, 0xbf, 0xcf, 0xfa, 0x23, 0x98, 0xcf, 0xa2, 0xed, 0xfb, 0x65, 0xf3, 0x70, 0x27, 0x7f, 0x5e, + 0x84, 0x99, 0xd5, 0x50, 0x17, 0xb8, 0x54, 0xc8, 0x93, 0x8c, 0x30, 0x1c, 0x38, 0x26, 0x2b, 0xa7, + 0xb2, 0xc2, 0x6c, 0xbc, 0xad, 0x3d, 0x77, 0x2d, 0xf6, 0x8a, 0xaf, 0xc1, 0x8e, 0x2d, 0xf5, 0xe0, + 0xf5, 0x75, 0x18, 0xdc, 0x60, 0x5b, 0xf5, 0x80, 0x98, 0x3b, 0x4e, 0xc1, 0x40, 0xf8, 0xdc, 0x94, + 0x1d, 0x91, 0xec, 0x07, 0xb9, 0x9b, 0x7a, 0xd4, 0x3a, 0xd8, 0x3f, 0x7e, 0xc4, 0xca, 0xa9, 0xd4, + 0xfb, 0xd6, 0x77, 0x61, 0xbc, 0xda, 0x3a, 0xe0, 0x2e, 0x99, 0xbe, 0x97, 0xf8, 0x2c, 0xb5, 0x92, + 0x95, 0x53, 0xb6, 0x8e, 0x48, 0xae, 0xf1, 0x57, 0x0d, 0xc3, 0x39, 0x31, 0x35, 0x98, 0xb0, 0x56, + 0xed, 0x74, 0x6a, 0xa3, 0x30, 0xcc, 0x1f, 0x5a, 0x5a, 0x5f, 0xc2, 0xbc, 0x70, 0xe4, 0xe1, 0xd6, + 0x51, 0x74, 0xf7, 0x09, 0x63, 0x5f, 0xad, 0x5e, 0xce, 0x37, 0x97, 0x00, 0x50, 0x17, 0x5a, 0xf5, + 0x5a, 0xf4, 0x1b, 0xe1, 0x49, 0xa8, 0x41, 0xac, 0x77, 0x60, 0x4c, 0x8d, 0x10, 0x0a, 0xfc, 0xda, + 0x61, 0x87, 0xa3, 0x35, 0x63, 0xbc, 0xe2, 0x95, 0x4f, 0x77, 0xcf, 0x19, 0x7d, 0x17, 0x51, 0x72, + 0xb8, 0x86, 0xe0, 0xc2, 0x6c, 0x62, 0x11, 0xc4, 0x41, 0x18, 0x94, 0x8c, 0xce, 0x5d, 0x1d, 0xd5, + 0xef, 0xa4, 0x08, 0x5f, 0x3c, 0x96, 0x08, 0x6f, 0xfd, 0xb3, 0x22, 0x2a, 0x97, 0xa9, 0xf1, 0x48, + 0xd8, 0xe9, 0x74, 0x5b, 0x61, 0x0d, 0xc6, 0xb0, 0xf7, 0x4b, 0xf2, 0xc1, 0x60, 0x6f, 0x3f, 0x94, + 0xd1, 0x9f, 0x1e, 0x56, 0x4e, 0xa1, 0xf3, 0x49, 0x4c, 0x46, 0x3e, 0x86, 0x91, 0x65, 0xaf, 0x85, + 0x1c, 0x06, 0x4e, 0xc0, 0x41, 0x12, 0xb1, 0x39, 0xc1, 0x26, 0x6f, 0xb3, 0x4f, 0x98, 0x9b, 0x77, + 0x6c, 0x0d, 0x12, 0x6b, 0xb9, 0x43, 0x79, 0x5a, 0xee, 0x70, 0x42, 0xcb, 0xb5, 0x60, 0x68, 0x33, + 0x68, 0x89, 0xd8, 0x36, 0x53, 0x0b, 0x13, 0x62, 0xe0, 0x10, 0x66, 0xf3, 0x22, 0xeb, 0xbf, 0x15, + 0x60, 0xee, 0x1e, 0x8d, 0x32, 0xd7, 0x90, 0x31, 0x2a, 0x85, 0x97, 0x1e, 0x95, 0xe2, 0x8b, 0x8c, + 0x8a, 0xea, 0xf5, 0x40, 0x5e, 0xaf, 0x07, 0xf3, 0x7a, 0x3d, 0x94, 0xdf, 0xeb, 0x7b, 0x30, 0xcc, + 0xbb, 0xca, 0x34, 0xf9, 0xd5, 0x88, 0x1e, 0xc4, 0x9a, 0xbc, 0xee, 0x45, 0x67, 0xf3, 0x32, 0x26, + 0x48, 0xae, 0x39, 0xa1, 0xae, 0xc9, 0x8b, 0x9f, 0xd6, 0x8f, 0xf0, 0xa9, 0xf1, 0x9a, 0xdf, 0x7c, + 0xa2, 0x59, 0x84, 0x47, 0xf8, 0x17, 0x9a, 0xbc, 0x41, 0x60, 0x58, 0xbc, 0xc4, 0x96, 0x18, 0xe4, + 0x32, 0x8c, 0xaf, 0x7a, 0x77, 0xfd, 0xa0, 0x49, 0x37, 0xbd, 0x36, 0xe7, 0x3e, 0x6a, 0xeb, 0x20, + 0x61, 0x29, 0x11, 0x35, 0xc4, 0xe6, 0x07, 0x04, 0x24, 0xcc, 0x0f, 0x0c, 0xb6, 0xbb, 0x60, 0xf3, + 0x32, 0x61, 0x88, 0x61, 0x7f, 0xf7, 0xd2, 0xdc, 0x95, 0x8a, 0xdf, 0x0f, 0xf1, 0x11, 0x9c, 0xb3, + 0x69, 0xa7, 0xed, 0x30, 0x99, 0xee, 0xc0, 0xe7, 0xf8, 0xaa, 0xcf, 0x97, 0x33, 0x9e, 0x09, 0x9a, + 0x3e, 0x15, 0xaa, 0xc9, 0xc5, 0x1e, 0x4d, 0x3e, 0x80, 0x2b, 0xf7, 0x68, 0x64, 0x6e, 0xa8, 0xb1, + 0xbd, 0x59, 0x74, 0x7e, 0x05, 0x46, 0x43, 0xd3, 0x56, 0x2e, 0x9f, 0xbd, 0x65, 0x12, 0xee, 0xbe, + 0x25, 0x6f, 0x93, 0x04, 0x1f, 0xf5, 0x97, 0xf5, 0x09, 0x54, 0xf2, 0xaa, 0x3b, 0x9e, 0xcb, 0xab, + 0x0b, 0x97, 0xf3, 0x19, 0x88, 0xe6, 0x2e, 0x83, 0xb4, 0xab, 0x8b, 0x4f, 0xa8, 0x5f, 0x6b, 0x4d, + 0x53, 0xbc, 0xf8, 0xc3, 0xaa, 0x49, 0xe7, 0xbf, 0x97, 0x68, 0x6e, 0x03, 0xaf, 0xac, 0x4d, 0x06, + 0xf1, 0xb8, 0x56, 0x61, 0x54, 0xc2, 0xc4, 0xb8, 0xce, 0x65, 0xb6, 0x54, 0x0e, 0x68, 0x4b, 0x32, + 0x50, 0x64, 0xd6, 0x8f, 0xe4, 0xf5, 0x8d, 0x49, 0x71, 0xbc, 0x77, 0xb3, 0xc7, 0xb9, 0xaf, 0xb1, + 0x7c, 0x38, 0x67, 0xf2, 0xd6, 0xcd, 0xf2, 0x25, 0xcd, 0x2c, 0xcf, 0xad, 0xf1, 0x97, 0x4d, 0x33, + 0xb1, 0xb0, 0x34, 0x68, 0x20, 0x72, 0x49, 0x37, 0xbe, 0x4f, 0xa4, 0x1f, 0xe2, 0xde, 0x86, 0xf9, + 0xac, 0x0a, 0x35, 0x3d, 0x50, 0x59, 0x78, 0x85, 0xbc, 0xb3, 0x04, 0x97, 0x64, 0x74, 0x29, 0xdf, + 0x8f, 0xc2, 0x28, 0x70, 0x3a, 0xf5, 0x66, 0xe0, 0x76, 0x62, 0x2a, 0x0b, 0x86, 0x39, 0x44, 0x8c, + 0x04, 0xbf, 0x0a, 0xe3, 0x38, 0xa2, 0xc4, 0xfa, 0xf5, 0x02, 0x58, 0x86, 0x9f, 0x16, 0xce, 0xf3, + 0x56, 0xe0, 0x3f, 0x75, 0x5b, 0xda, 0xf5, 0xd3, 0x1b, 0x86, 0xe9, 0x93, 0xbf, 0x49, 0x4c, 0xba, + 0x88, 0x8b, 0x3d, 0xf3, 0x76, 0xc2, 0x1c, 0xc9, 0x05, 0x4f, 0xf4, 0xdd, 0x32, 0x1f, 0x44, 0x28, + 0x33, 0xe5, 0xff, 0x28, 0xc0, 0xd5, 0x9e, 0x6d, 0x10, 0xfd, 0x79, 0x04, 0xa5, 0x64, 0x99, 0x58, + 0x41, 0x15, 0xcd, 0x6f, 0x23, 0xcd, 0x61, 0xf7, 0x0e, 0xf7, 0x43, 0x97, 0xfe, 0x4d, 0x1d, 0xc5, + 0x39, 0xc5, 0xef, 0xe4, 0xad, 0xc7, 0xf8, 0x15, 0x7e, 0xe4, 0xb4, 0x17, 0xd1, 0x00, 0x30, 0x10, + 0xbf, 0x29, 0x88, 0x18, 0xb4, 0x91, 0x0c, 0x93, 0xa1, 0x21, 0x5b, 0x9f, 0xe2, 0x77, 0x9d, 0xdd, + 0xe8, 0xe3, 0x7d, 0x6a, 0x8b, 0x70, 0x35, 0xe1, 0x3b, 0xf0, 0x02, 0x4c, 0x22, 0x98, 0x65, 0xc3, + 0xcf, 0x64, 0xef, 0x7b, 0x81, 0xdf, 0xed, 0xfc, 0x62, 0x66, 0xfd, 0x8f, 0x0b, 0xdc, 0x99, 0x53, + 0xaf, 0x56, 0x4c, 0xf4, 0x22, 0x40, 0x0c, 0x4d, 0x38, 0xf5, 0xab, 0x82, 0xdd, 0x3b, 0x5c, 0xe5, + 0xc6, 0x5b, 0x85, 0x3d, 0xce, 0x40, 0x23, 0xfb, 0xc5, 0xce, 0xe4, 0x5b, 0xe8, 0x30, 0xa0, 0x6a, + 0x3f, 0xde, 0xb8, 0xbf, 0x2b, 0xed, 0x1f, 0x27, 0xa4, 0xdb, 0x87, 0x19, 0xb6, 0x03, 0x54, 0xbb, + 0xd1, 0xbe, 0x1f, 0xb8, 0x91, 0x7c, 0x9e, 0x42, 0xb6, 0x44, 0x44, 0x00, 0x4e, 0xf5, 0xd1, 0xcf, + 0x0f, 0x2b, 0xef, 0x9d, 0x24, 0xee, 0xa7, 0xe4, 0xb9, 0xad, 0xa2, 0x08, 0x58, 0x73, 0x30, 0xb0, + 0x68, 0xaf, 0xe1, 0x86, 0x67, 0xaf, 0xa9, 0x0d, 0xcf, 0x5e, 0xb3, 0xfe, 0xaa, 0x08, 0x15, 0x1e, + 0xb3, 0x04, 0xfd, 0x4c, 0x62, 0xab, 0x85, 0xe6, 0xb8, 0x72, 0x5c, 0x03, 0x43, 0x22, 0x26, 0x49, + 0xf1, 0x38, 0x31, 0x49, 0x7e, 0x05, 0x72, 0x4c, 0x56, 0xc7, 0xb0, 0x02, 0x7c, 0xe7, 0xe8, 0xb0, + 0x72, 0x35, 0xb6, 0x02, 0xf0, 0xd2, 0x2c, 0x73, 0x40, 0x4e, 0x15, 0x69, 0xfb, 0xc5, 0xe0, 0x0b, + 0xd8, 0x2f, 0x6e, 0xc3, 0x08, 0x2a, 0x33, 0xab, 0x5b, 0xc2, 0xf3, 0x13, 0x97, 0x27, 0x46, 0x28, + 0x6a, 0xb8, 0x7a, 0x38, 0x40, 0x89, 0x66, 0xfd, 0xfd, 0x22, 0x5c, 0xce, 0x1f, 0x73, 0xd1, 0xb6, + 0x25, 0x80, 0xd8, 0xc3, 0xa5, 0x97, 0x47, 0x0d, 0x7e, 0x3b, 0xcf, 0xe8, 0x23, 0xe5, 0xd1, 0xa6, + 0xd1, 0x31, 0xd9, 0x47, 0xbe, 0xb4, 0x4e, 0x5c, 0xa7, 0x18, 0x0f, 0xb0, 0x45, 0x34, 0x5b, 0x01, + 0x32, 0xa2, 0xd9, 0x0a, 0x18, 0x79, 0x04, 0x73, 0x5b, 0x81, 0xfb, 0xd4, 0x89, 0xe8, 0x03, 0xfa, + 0x9c, 0x3f, 0x16, 0x5a, 0x16, 0x2f, 0x84, 0xf8, 0xf3, 0xf9, 0xeb, 0x47, 0x87, 0x95, 0xd7, 0x3a, + 0x1c, 0x05, 0x23, 0x96, 0xf1, 0xb7, 0x9f, 0x8d, 0xf4, 0xa3, 0xa1, 0x3c, 0x46, 0xd6, 0xbf, 0x29, + 0xc0, 0x79, 0x14, 0xcb, 0x85, 0xd9, 0x55, 0x56, 0xfe, 0x42, 0x8e, 0x95, 0x7a, 0x07, 0xc5, 0x5a, + 0x44, 0xc7, 0x4a, 0xe3, 0x25, 0xba, 0x6d, 0xa0, 0x91, 0x55, 0x18, 0x17, 0xbf, 0xf1, 0xfb, 0x1b, + 0x40, 0x85, 0x60, 0x56, 0xdb, 0xb0, 0x70, 0xa9, 0x73, 0x53, 0x11, 0x2e, 0x6c, 0xc1, 0x0c, 0x1f, + 0x6c, 0xda, 0x3a, 0xad, 0xf5, 0xb3, 0x22, 0x5c, 0xd8, 0xa5, 0x81, 0xfb, 0xf8, 0x79, 0x4e, 0x67, + 0x36, 0x61, 0x46, 0x82, 0x78, 0xdc, 0x12, 0xe3, 0x13, 0xe3, 0xf1, 0x2c, 0x65, 0x53, 0x45, 0xe0, + 0x13, 0xf9, 0xc5, 0x65, 0x12, 0x9e, 0xc0, 0x65, 0xf2, 0x6d, 0x18, 0x4d, 0x44, 0x0e, 0xc2, 0xf9, + 0x97, 0x5f, 0x68, 0x3c, 0x55, 0x2b, 0xa7, 0x6c, 0x85, 0x49, 0x7e, 0x33, 0xff, 0xaa, 0x4a, 0x98, + 0x3e, 0xfa, 0xd9, 0x3f, 0xf1, 0x83, 0x65, 0x1f, 0xab, 0xa3, 0x95, 0x66, 0x7c, 0xb0, 0x2b, 0xa7, + 0xec, 0xbc, 0x9a, 0x6a, 0xe3, 0x30, 0x56, 0xc5, 0x7b, 0x3b, 0xa6, 0xb9, 0xff, 0xf7, 0x22, 0x5c, + 0x92, 0x0f, 0x7f, 0x72, 0x86, 0xf9, 0x73, 0x98, 0x93, 0xa0, 0x6a, 0x87, 0x09, 0x0c, 0xb4, 0x65, + 0x8e, 0x34, 0x8f, 0x29, 0x2b, 0x47, 0xda, 0x11, 0x38, 0xf1, 0x60, 0xe7, 0x91, 0xbf, 0x1a, 0xeb, + 0xe7, 0xc7, 0x59, 0x71, 0x9c, 0xd0, 0x0a, 0xa9, 0xef, 0x99, 0xc6, 0xd0, 0x18, 0xfb, 0x67, 0x2b, + 0x65, 0x3d, 0x1d, 0x7c, 0x59, 0xeb, 0xe9, 0xca, 0xa9, 0xa4, 0xfd, 0xb4, 0x36, 0x05, 0x13, 0x1b, + 0xf4, 0x59, 0x3c, 0xee, 0xff, 0x77, 0x21, 0x11, 0xea, 0x81, 0x49, 0x18, 0x3c, 0xe6, 0x43, 0x21, + 0x0e, 0x05, 0x84, 0xa1, 0x1e, 0x74, 0x09, 0x83, 0xa3, 0xae, 0xc2, 0x08, 0xbf, 0xcc, 0x6e, 0x1d, + 0x43, 0xc3, 0x57, 0x2f, 0x78, 0xf8, 0xb3, 0xca, 0x16, 0x57, 0xf6, 0x05, 0xbd, 0xf5, 0x00, 0xae, + 0x08, 0x1f, 0x6f, 0x73, 0xf2, 0xb1, 0xa2, 0x13, 0x1e, 0x5f, 0x96, 0x03, 0x97, 0xee, 0xd1, 0xe4, + 0xd6, 0x63, 0xbc, 0x70, 0xfa, 0x04, 0x4e, 0x1b, 0x70, 0xc5, 0x11, 0xa5, 0x52, 0xb5, 0x86, 0x14, + 0xeb, 0x24, 0xb6, 0x75, 0x39, 0xab, 0x0a, 0xbd, 0xb1, 0x16, 0xc5, 0xe0, 0xb0, 0x41, 0x7c, 0xc5, + 0x16, 0x9e, 0x60, 0xd7, 0xbb, 0xae, 0x7d, 0xd7, 0x7c, 0xc7, 0xe3, 0xd1, 0x03, 0xe5, 0xc9, 0xab, + 0x4a, 0xad, 0x49, 0xe3, 0x2e, 0xc0, 0x9a, 0x82, 0x09, 0x59, 0xd4, 0xa6, 0x61, 0x68, 0xfd, 0xc7, + 0x21, 0xb0, 0xc4, 0xc0, 0x66, 0xdd, 0xd0, 0xcb, 0xf1, 0x78, 0x94, 0x6a, 0xac, 0x38, 0xa8, 0xce, + 0xea, 0x31, 0x49, 0xe3, 0x52, 0xbe, 0xf2, 0x50, 0xce, 0x6b, 0xc6, 0x50, 0x63, 0xe5, 0xa5, 0x7a, + 0xff, 0x55, 0xce, 0x36, 0xc9, 0x3f, 0x36, 0x7c, 0xb2, 0x9d, 0xb3, 0x4d, 0x1a, 0x7c, 0xb3, 0xb7, + 0x4c, 0xdb, 0xbc, 0x12, 0x19, 0x78, 0x91, 0x2b, 0x11, 0xf6, 0x45, 0xea, 0x97, 0x22, 0x3b, 0xe6, + 0x58, 0x8a, 0xef, 0x51, 0xde, 0xde, 0xeb, 0x45, 0x22, 0xe2, 0x82, 0x06, 0x31, 0xb8, 0x1a, 0x6c, + 0x88, 0x0b, 0x25, 0xcd, 0x66, 0xb9, 0xb8, 0x4f, 0x9b, 0x4f, 0x84, 0xad, 0x58, 0x5e, 0xe8, 0x66, + 0xd9, 0xcc, 0x79, 0x7c, 0x6a, 0xfe, 0x9d, 0xf3, 0x82, 0x46, 0x93, 0x91, 0xea, 0x11, 0x23, 0x92, + 0x6c, 0xc9, 0x4f, 0x60, 0x5a, 0x4d, 0x75, 0xc2, 0x45, 0x6b, 0x7c, 0xe1, 0xb5, 0x38, 0x94, 0xe9, + 0xc1, 0x63, 0xe7, 0xe6, 0xd3, 0x3b, 0x37, 0x33, 0x70, 0x79, 0x20, 0x82, 0xa6, 0x2c, 0xd0, 0xfc, + 0xb3, 0xf4, 0x8b, 0xae, 0x0c, 0x42, 0xf2, 0x05, 0xcc, 0xd4, 0xeb, 0x9b, 0xfc, 0x31, 0x87, 0x2d, + 0x2f, 0xf8, 0xed, 0x35, 0xe1, 0xb0, 0x85, 0xd3, 0x1d, 0x86, 0x7e, 0x43, 0x3c, 0x02, 0xd1, 0xdd, + 0x02, 0xf4, 0x50, 0x0c, 0x59, 0x2c, 0xf4, 0x9b, 0xf2, 0xbf, 0xab, 0xde, 0x2a, 0x30, 0x51, 0xc4, + 0x6d, 0x53, 0xf1, 0xe8, 0x48, 0x2e, 0xec, 0x9c, 0x5b, 0xbe, 0xc2, 0xb7, 0x7c, 0xcb, 0xf7, 0x07, + 0x45, 0xf9, 0x42, 0x23, 0x7d, 0xd1, 0x7a, 0xe2, 0xcb, 0xbe, 0xcc, 0x1e, 0x1c, 0xeb, 0x9c, 0xce, + 0x6c, 0x1c, 0xa9, 0xc9, 0xab, 0x52, 0x15, 0xac, 0x6c, 0x4a, 0x5d, 0x3b, 0xc4, 0x05, 0xc6, 0xed, + 0x29, 0x4a, 0x45, 0x1a, 0x55, 0xf2, 0x1e, 0x6e, 0xe0, 0xe5, 0xef, 0xe1, 0xfe, 0xe5, 0x18, 0x9c, + 0xd9, 0x72, 0xf6, 0x5c, 0x8f, 0x9d, 0x07, 0x36, 0x0d, 0xfd, 0x6e, 0xd0, 0xa4, 0xa4, 0x0a, 0x53, + 0xa6, 0xfb, 0x6d, 0x1f, 0xe7, 0x62, 0x76, 0xe4, 0x99, 0x30, 0xb2, 0x00, 0x63, 0xea, 0xc9, 0xaf, + 0x38, 0xa7, 0x32, 0x9e, 0x02, 0xaf, 0x9c, 0xb2, 0x63, 0x34, 0xf2, 0xbe, 0x71, 0x75, 0x74, 0x5a, + 0xbd, 0x5e, 0x47, 0xdc, 0x05, 0xee, 0x1f, 0xe9, 0xf9, 0x2d, 0xf3, 0xac, 0xe5, 0xf7, 0x23, 0x3f, + 0x4a, 0xdd, 0x26, 0x0d, 0x19, 0x2d, 0x4e, 0x99, 0xd4, 0x50, 0xcc, 0xc8, 0x8d, 0x3d, 0x9e, 0x71, + 0xcf, 0xf4, 0x25, 0x8c, 0x3f, 0xe8, 0x3e, 0xa2, 0xf2, 0xde, 0x6c, 0x58, 0x1c, 0xbd, 0x49, 0xa7, + 0x72, 0x51, 0xbe, 0xfb, 0x16, 0x9f, 0x83, 0x27, 0xdd, 0x47, 0x34, 0x1d, 0xd4, 0x9e, 0xed, 0x79, + 0x1a, 0x33, 0xb2, 0x0f, 0xa5, 0xa4, 0xff, 0xb7, 0x08, 0xef, 0xd7, 0xc3, 0x6b, 0x1d, 0xc3, 0xb4, + 0x68, 0xa1, 0xf3, 0xb9, 0x57, 0xaa, 0x51, 0x49, 0x8a, 0x2b, 0xf9, 0x55, 0x98, 0xcd, 0x34, 0x68, + 0xaa, 0x17, 0x6c, 0xbd, 0x6d, 0xa5, 0xb8, 0x81, 0x24, 0x46, 0x4d, 0x3e, 0x97, 0x33, 0x6a, 0xce, + 0xae, 0x85, 0xb4, 0xe0, 0x74, 0xc2, 0xaf, 0x59, 0xe4, 0x07, 0xc9, 0xf7, 0x94, 0xc6, 0x33, 0x4f, + 0x86, 0xd8, 0xcd, 0xac, 0x2b, 0xc9, 0x92, 0xac, 0xc1, 0x98, 0xb2, 0x24, 0x88, 0xc8, 0x6a, 0x59, + 0x56, 0x93, 0xf2, 0xd1, 0x61, 0x65, 0x26, 0xb6, 0x9a, 0x18, 0x3c, 0x63, 0x06, 0xe4, 0xd7, 0xe0, + 0x8a, 0x5a, 0xa2, 0x9b, 0x41, 0xb6, 0x7d, 0x49, 0x84, 0xe6, 0xbf, 0x91, 0x5c, 0xe1, 0x79, 0xf8, + 0xbb, 0x77, 0x6a, 0xc5, 0x72, 0x61, 0xe5, 0x94, 0xdd, 0x9f, 0x35, 0xf9, 0x8d, 0x02, 0x9c, 0xcd, + 0xa9, 0x75, 0x02, 0x6b, 0xed, 0x6b, 0xf4, 0x43, 0xbd, 0x01, 0x5f, 0x6d, 0xb9, 0xad, 0xf8, 0x75, + 0xa3, 0xb4, 0xfe, 0x19, 0xfd, 0xce, 0xa9, 0x89, 0xbc, 0x09, 0xc3, 0xa8, 0x7e, 0x87, 0xe5, 0x49, + 0x14, 0x50, 0x31, 0x3a, 0x11, 0x2a, 0xe9, 0xfa, 0x91, 0x24, 0x70, 0xc8, 0x0a, 0x13, 0xf4, 0xf0, + 0x48, 0x94, 0x82, 0x99, 0x88, 0x65, 0x26, 0x94, 0x05, 0x5e, 0x24, 0x83, 0x8c, 0x18, 0x39, 0x18, + 0x4c, 0xb2, 0x1a, 0xc0, 0x68, 0x20, 0x76, 0xa5, 0xfb, 0x83, 0xa3, 0x83, 0xa5, 0x21, 0xfe, 0xe1, + 0x48, 0x87, 0xf9, 0xdf, 0x1a, 0xe5, 0xaf, 0x6b, 0x77, 0x3c, 0xf7, 0xb1, 0x1b, 0x6f, 0x60, 0xba, + 0xe1, 0x2e, 0x4e, 0x86, 0x24, 0xc4, 0xea, 0x9c, 0xb4, 0x47, 0xca, 0xc6, 0x57, 0xec, 0x6b, 0xe3, + 0x7b, 0x4b, 0xbb, 0x0d, 0xd3, 0x62, 0x96, 0x72, 0xf1, 0xc9, 0xb4, 0xa9, 0xc5, 0xd7, 0x64, 0x5f, + 0xc3, 0x30, 0x86, 0x19, 0xe5, 0x57, 0x8d, 0xe3, 0x0b, 0x37, 0xc5, 0xb6, 0xdd, 0xa3, 0xf9, 0x3c, + 0x2e, 0xa9, 0x78, 0x31, 0xcf, 0x47, 0x1c, 0x01, 0xc6, 0x88, 0x23, 0x84, 0x6c, 0xc3, 0xf4, 0x16, + 0x3b, 0xcd, 0xb9, 0xdb, 0x76, 0x27, 0x10, 0x76, 0x0f, 0x6e, 0x51, 0x41, 0x69, 0xa2, 0x23, 0x8b, + 0x1b, 0x54, 0x95, 0xeb, 0x07, 0x6a, 0x06, 0x39, 0x59, 0x86, 0xa9, 0x3a, 0x75, 0x82, 0xe6, 0xfe, + 0x03, 0xfa, 0x9c, 0x49, 0x52, 0x46, 0xfe, 0x8f, 0x10, 0x4b, 0x58, 0x7f, 0xb1, 0x48, 0x77, 0x1f, + 0x31, 0x89, 0xc8, 0xa7, 0x30, 0x5c, 0xf7, 0x83, 0xa8, 0xf6, 0x5c, 0x6c, 0x6a, 0xf2, 0x32, 0x8a, + 0x03, 0x6b, 0xe7, 0x64, 0x0e, 0x94, 0xd0, 0x0f, 0xa2, 0xc6, 0x23, 0x23, 0xdc, 0x15, 0x47, 0x21, + 0xcf, 0x61, 0xc6, 0xdc, 0x50, 0x84, 0x37, 0xf1, 0xa8, 0x90, 0xe0, 0xb2, 0x76, 0x2d, 0x8e, 0x52, + 0xbb, 0x2e, 0xb8, 0x5f, 0x4e, 0x6e, 0x5b, 0x8f, 0xb1, 0x5c, 0x17, 0x7b, 0xb2, 0xe8, 0xc9, 0x3a, + 0x26, 0x8f, 0xe1, 0x3d, 0xaa, 0x86, 0xdc, 0x0b, 0x79, 0x2c, 0x0e, 0xa8, 0xd6, 0xc5, 0x4d, 0x09, + 0x47, 0xc2, 0x09, 0x93, 0x19, 0x87, 0xec, 0x14, 0x29, 0xd9, 0x82, 0x33, 0x3b, 0x21, 0xdd, 0x0a, + 0xe8, 0x53, 0x97, 0x3e, 0x93, 0xfc, 0x20, 0x8e, 0x3e, 0xc5, 0xf8, 0x75, 0x78, 0x69, 0x16, 0xc3, + 0x34, 0x31, 0x79, 0x1f, 0x60, 0xcb, 0xf5, 0x3c, 0xda, 0xc2, 0x1b, 0xcd, 0x71, 0x64, 0x85, 0xd6, + 0xda, 0x0e, 0x42, 0x1b, 0xbe, 0xd7, 0xd6, 0x87, 0x54, 0x43, 0x26, 0x35, 0x98, 0x5c, 0xf5, 0x9a, + 0xed, 0xae, 0xf0, 0x3c, 0x08, 0x71, 0x43, 0x11, 0x51, 0xf1, 0x5c, 0x5e, 0xd0, 0x48, 0x7d, 0xe4, + 0x26, 0x09, 0x79, 0x00, 0x44, 0x00, 0xc4, 0xaa, 0x75, 0x1e, 0xb5, 0xa9, 0xf8, 0xdc, 0xd1, 0x0a, + 0x23, 0x19, 0xe1, 0x72, 0x37, 0x82, 0xcd, 0xa5, 0xc8, 0xe6, 0xdf, 0x87, 0x71, 0x6d, 0xcd, 0x67, + 0x84, 0x80, 0x98, 0xd1, 0x43, 0x40, 0x8c, 0xe9, 0xa1, 0x1e, 0xfe, 0x51, 0x01, 0x2e, 0x64, 0x7f, + 0x4b, 0x42, 0x00, 0xdb, 0x84, 0x31, 0x05, 0x54, 0x8f, 0x7e, 0xa4, 0x56, 0x91, 0x90, 0x80, 0xf8, + 0x07, 0x2d, 0x77, 0x1e, 0xbd, 0xf7, 0x31, 0x8f, 0x17, 0x30, 0xf5, 0xff, 0xbf, 0xa3, 0x30, 0x83, + 0xce, 0xed, 0xc9, 0x7d, 0xea, 0x13, 0x0c, 0xe5, 0x82, 0x30, 0xcd, 0x72, 0x2d, 0x8c, 0x58, 0x1c, + 0x9e, 0x0c, 0x6a, 0x66, 0x10, 0x90, 0x77, 0x74, 0x77, 0x8b, 0xa2, 0x96, 0xac, 0x46, 0x02, 0xf5, + 0x2e, 0xc4, 0x7e, 0x18, 0x6f, 0x18, 0xb7, 0xfd, 0xc7, 0xde, 0xf4, 0x06, 0x8f, 0xbb, 0xe9, 0xed, + 0xa8, 0x4d, 0x8f, 0x87, 0x08, 0xf9, 0x8e, 0xb6, 0xe9, 0xbd, 0xfa, 0xdd, 0x6e, 0xf8, 0x55, 0xef, + 0x76, 0x23, 0x2f, 0xb7, 0xdb, 0x8d, 0xbe, 0xe0, 0x6e, 0x77, 0x17, 0xa6, 0x36, 0x28, 0x6d, 0x69, + 0x77, 0x30, 0x63, 0xf1, 0xe9, 0xe9, 0x51, 0xb4, 0xae, 0x65, 0x5d, 0xc4, 0x24, 0xa8, 0x72, 0x77, + 0x4d, 0xf8, 0x9b, 0xd9, 0x35, 0xc7, 0x5f, 0xf1, 0xae, 0x39, 0xf1, 0x32, 0xbb, 0x66, 0x6a, 0xeb, + 0x9b, 0x3c, 0xf1, 0xd6, 0xf7, 0x32, 0xbb, 0xd5, 0xc7, 0xe8, 0xad, 0x58, 0xaf, 0xaf, 0x08, 0xc7, + 0x14, 0xcd, 0x13, 0x64, 0xc5, 0x0f, 0xa5, 0x33, 0x37, 0xfe, 0xcd, 0x60, 0x98, 0x12, 0x80, 0x33, + 0xc1, 0xbf, 0xad, 0x1a, 0xfa, 0x28, 0xea, 0xf4, 0xea, 0xd1, 0xc3, 0x88, 0x78, 0x31, 0x29, 0xf6, + 0xb8, 0xa4, 0x1a, 0x65, 0xcb, 0x72, 0xeb, 0xcf, 0x0b, 0xfc, 0xbe, 0xf3, 0x7f, 0xc7, 0xad, 0xf2, + 0x65, 0xee, 0x20, 0x7f, 0x33, 0x8e, 0xa4, 0x20, 0xa2, 0x3e, 0x04, 0x4e, 0xf3, 0x49, 0x7c, 0x09, + 0xfc, 0x43, 0xf6, 0x9d, 0xeb, 0x05, 0x18, 0x34, 0x37, 0xd6, 0x15, 0xcd, 0xc2, 0xdd, 0x3b, 0x72, + 0x03, 0x10, 0x01, 0x25, 0x38, 0xd8, 0xdc, 0x00, 0x74, 0x02, 0x74, 0xc3, 0x3b, 0x6d, 0xd9, 0x3c, + 0x10, 0x40, 0x66, 0x0b, 0xde, 0x4d, 0x3f, 0x65, 0x47, 0x65, 0x24, 0x7e, 0xca, 0xae, 0x0f, 0x63, + 0xfc, 0xa8, 0x7d, 0x07, 0xce, 0xdb, 0xf4, 0xc0, 0x7f, 0x4a, 0x5f, 0x2d, 0xdb, 0xaf, 0xe0, 0x9c, + 0xc9, 0x90, 0x3f, 0x7a, 0xe2, 0x11, 0xfa, 0x3f, 0xce, 0x8e, 0xeb, 0x2f, 0x08, 0x78, 0x5c, 0x7f, + 0x1e, 0x1e, 0x9c, 0xfd, 0xa9, 0x9f, 0x1b, 0x58, 0x66, 0xf9, 0x70, 0xc1, 0x64, 0x5e, 0x6d, 0xb5, + 0x30, 0x35, 0x68, 0xd3, 0xed, 0x38, 0x5e, 0x44, 0x36, 0x61, 0x5c, 0xfb, 0x99, 0x30, 0x15, 0x68, + 0x25, 0x42, 0xa6, 0x89, 0x01, 0x46, 0x78, 0xd5, 0x18, 0x6c, 0x51, 0xa8, 0x24, 0x87, 0x87, 0x0d, + 0x99, 0x5e, 0x67, 0x0d, 0x26, 0xb5, 0x9f, 0xca, 0x1a, 0x8a, 0x1f, 0xbf, 0x56, 0x83, 0x39, 0x60, + 0x26, 0x89, 0xd5, 0x84, 0xf9, 0xac, 0x41, 0xe3, 0x71, 0xb8, 0xc9, 0x72, 0x1c, 0x66, 0xab, 0xbf, + 0x23, 0xdf, 0xe9, 0xbc, 0x10, 0x5b, 0xd6, 0xdf, 0x19, 0x84, 0xf3, 0x62, 0x32, 0x5e, 0xe5, 0x8c, + 0x93, 0x1f, 0xc1, 0xb8, 0x36, 0xc7, 0x62, 0xd0, 0x2f, 0xcb, 0x27, 0x4b, 0x79, 0x6b, 0x81, 0x9b, + 0x34, 0xba, 0x08, 0x68, 0x24, 0xa6, 0x7b, 0xe5, 0x94, 0xad, 0xb3, 0x24, 0x6d, 0x98, 0x32, 0x27, + 0x5a, 0x58, 0x75, 0xae, 0x66, 0x56, 0x62, 0xa2, 0xca, 0x20, 0xdd, 0xad, 0x46, 0xe6, 0x74, 0xaf, + 0x9c, 0xb2, 0x13, 0xbc, 0xc9, 0x37, 0x70, 0x26, 0x35, 0xcb, 0xc2, 0x58, 0xf7, 0x7a, 0x66, 0x85, + 0x29, 0x6c, 0x6e, 0xe9, 0x0d, 0x10, 0x9c, 0x5b, 0x6d, 0xba, 0x12, 0xd2, 0x82, 0x09, 0x7d, 0xe2, + 0x85, 0xd9, 0xe9, 0x4a, 0x8f, 0xa1, 0xe4, 0x88, 0x5c, 0xb8, 0x13, 0x63, 0x89, 0x73, 0xff, 0xdc, + 0xb4, 0x5e, 0x1b, 0xc8, 0xa3, 0x30, 0xcc, 0x7f, 0x5b, 0x7f, 0x50, 0x80, 0xf3, 0x5b, 0x01, 0x0d, + 0xa9, 0xd7, 0xa4, 0x86, 0xf3, 0xf7, 0x4b, 0xae, 0x88, 0x3c, 0xc3, 0x71, 0xf1, 0xa5, 0x0d, 0xc7, + 0xd6, 0xbf, 0x2e, 0x40, 0x39, 0xab, 0xc9, 0x75, 0xea, 0xb5, 0xc8, 0x16, 0x94, 0x92, 0x7d, 0x10, + 0x5f, 0x8c, 0xa5, 0x62, 0x2c, 0xe7, 0xf6, 0x76, 0xe5, 0x94, 0x9d, 0xa2, 0x26, 0x1b, 0x70, 0x46, + 0x83, 0x09, 0xc3, 0x6d, 0xf1, 0x38, 0x86, 0x5b, 0x36, 0xc3, 0x29, 0x52, 0xdd, 0xee, 0xbd, 0x82, + 0xa7, 0xee, 0x92, 0x7f, 0xe0, 0xb8, 0x1e, 0x13, 0xa2, 0xb5, 0x28, 0x5e, 0x10, 0x43, 0xc5, 0xb0, + 0x73, 0x4b, 0x2e, 0x42, 0xe5, 0x3b, 0x18, 0x85, 0x62, 0x7d, 0x84, 0xa7, 0x83, 0xb0, 0xff, 0xf1, + 0x97, 0xc7, 0x8a, 0xd9, 0x65, 0x18, 0xda, 0x5e, 0xab, 0x2f, 0x56, 0xc5, 0x3b, 0x66, 0x1e, 0xfd, + 0xa2, 0x1d, 0x36, 0x9a, 0x8e, 0xcd, 0x0b, 0xac, 0x0f, 0x81, 0xdc, 0xa3, 0x91, 0x08, 0xf2, 0xaf, + 0xe8, 0xae, 0xc1, 0x88, 0x00, 0x09, 0x4a, 0xf4, 0xe8, 0x13, 0x29, 0x03, 0x6c, 0x59, 0x66, 0x6d, + 0x49, 0x1d, 0xa4, 0x4d, 0x9d, 0x50, 0x3b, 0xf4, 0xdf, 0x83, 0xd1, 0x40, 0xc0, 0xc4, 0x99, 0x3f, + 0xa5, 0x72, 0xb8, 0x20, 0x98, 0xdb, 0xca, 0x25, 0x8e, 0xad, 0xfe, 0xb2, 0xd6, 0x30, 0x52, 0xcd, + 0xe6, 0xea, 0xd2, 0x22, 0x1b, 0x55, 0x31, 0x58, 0x72, 0x3a, 0x6e, 0xa1, 0xeb, 0x7b, 0x44, 0xf5, + 0x57, 0xcc, 0x38, 0x34, 0xb8, 0x81, 0x88, 0xf8, 0x4c, 0x1a, 0x8a, 0xf5, 0x96, 0x8a, 0x7b, 0x93, + 0xc1, 0x2d, 0x2f, 0x17, 0xc9, 0x06, 0x46, 0xf4, 0xb9, 0x87, 0x5e, 0x3e, 0xaf, 0xa2, 0x11, 0x0e, + 0xcc, 0x73, 0x11, 0x82, 0xf5, 0x4a, 0x64, 0x62, 0xf4, 0xd5, 0xb6, 0xbb, 0x08, 0x63, 0x0a, 0xa6, + 0xae, 0xec, 0xf8, 0x58, 0x19, 0xf8, 0xbb, 0x6f, 0xf1, 0x07, 0xdf, 0x4d, 0xc5, 0x20, 0xa6, 0x63, + 0x55, 0xf0, 0x6f, 0xfa, 0x5b, 0xae, 0x22, 0xa4, 0x41, 0xf4, 0xad, 0x56, 0x11, 0x87, 0x7c, 0x3a, + 0x49, 0x15, 0x06, 0xfe, 0xee, 0xc2, 0x71, 0x06, 0xea, 0x5b, 0xae, 0x82, 0x0d, 0xd4, 0xb7, 0x57, + 0x05, 0x95, 0xb1, 0xb1, 0xf8, 0x22, 0x4d, 0x55, 0xb2, 0x9c, 0xae, 0x44, 0x1a, 0xc5, 0x13, 0x14, + 0x3d, 0xe7, 0x83, 0xc2, 0x05, 0x3e, 0x58, 0xbf, 0x80, 0x6a, 0xd8, 0x80, 0x7d, 0xbb, 0xd5, 0xfc, + 0x83, 0x02, 0x8f, 0xd4, 0x55, 0xdf, 0xd4, 0x72, 0xa0, 0x7a, 0x8f, 0x7d, 0xcd, 0xa3, 0x40, 0xfb, + 0xda, 0x1f, 0xb8, 0x5e, 0x4b, 0xf7, 0x28, 0x70, 0xba, 0xd1, 0xbe, 0x8a, 0x64, 0xfd, 0xc4, 0xf5, + 0x5a, 0x76, 0x12, 0x9b, 0xbc, 0x0f, 0x93, 0x1a, 0x48, 0x49, 0x82, 0x3c, 0xd7, 0x88, 0x4e, 0xee, + 0xb6, 0x6c, 0x13, 0xd3, 0xfa, 0xeb, 0x02, 0x4c, 0x67, 0x64, 0xe7, 0x46, 0x43, 0x09, 0x6a, 0x58, + 0x6a, 0xa3, 0x12, 0xd9, 0xc1, 0x30, 0x68, 0x88, 0x71, 0xfe, 0x2a, 0x44, 0xcc, 0xb2, 0xa0, 0x65, + 0x12, 0x2f, 0x6a, 0x39, 0xef, 0xb2, 0xb3, 0x87, 0xeb, 0xe8, 0x24, 0x04, 0x88, 0x5b, 0x22, 0x4c, + 0xd2, 0x75, 0x26, 0x2e, 0x6b, 0x69, 0xc8, 0x5f, 0x49, 0x1e, 0x74, 0xad, 0x1a, 0xeb, 0x37, 0x8b, + 0x70, 0x36, 0xa3, 0xff, 0x75, 0x1a, 0xfd, 0x4d, 0x0c, 0x41, 0x22, 0x19, 0xfc, 0xc0, 0x2f, 0x28, + 0x19, 0xbc, 0xf5, 0x27, 0x45, 0x38, 0xbb, 0xd3, 0x09, 0xf1, 0x61, 0xd8, 0xaa, 0xf7, 0x94, 0x7a, + 0x91, 0x1f, 0x3c, 0xc7, 0xc7, 0x2c, 0xe4, 0x1d, 0x18, 0x5a, 0xa1, 0xed, 0xb6, 0x2f, 0xd6, 0xff, + 0x45, 0xe9, 0xd4, 0x91, 0xc4, 0x46, 0xa4, 0x95, 0x53, 0x36, 0xc7, 0x26, 0xef, 0xc3, 0xd8, 0x0a, + 0x75, 0x82, 0xe8, 0x11, 0x75, 0xa4, 0x3a, 0x24, 0x33, 0xa0, 0x68, 0x24, 0x02, 0x61, 0xe5, 0x94, + 0x1d, 0x63, 0x93, 0x05, 0x18, 0xdc, 0xf2, 0xbd, 0x3d, 0xf5, 0x08, 0x3e, 0xa7, 0x42, 0x86, 0xb3, + 0x72, 0xca, 0x46, 0x5c, 0xb2, 0x0e, 0x93, 0xd5, 0x3d, 0xea, 0x45, 0xeb, 0x34, 0x72, 0x5a, 0x4e, + 0xe4, 0x08, 0xb1, 0xf9, 0x5a, 0x1e, 0xb1, 0x81, 0xbc, 0x72, 0xca, 0x36, 0xa9, 0xc9, 0x87, 0x30, + 0x72, 0xcf, 0xf7, 0x5b, 0x8f, 0x9e, 0xcb, 0x50, 0x0e, 0x95, 0x3c, 0x46, 0x02, 0x6d, 0xe5, 0x94, + 0x2d, 0x29, 0x6a, 0x43, 0x30, 0xb0, 0x1e, 0xee, 0x59, 0x87, 0x05, 0x28, 0x2f, 0xf9, 0xcf, 0xbc, + 0xcc, 0x51, 0xfd, 0xbe, 0x39, 0xaa, 0x92, 0x7d, 0x06, 0x7e, 0x62, 0x5c, 0xdf, 0x86, 0xc1, 0x2d, + 0xd7, 0xdb, 0x4b, 0x88, 0x82, 0x19, 0x74, 0x0c, 0x0b, 0x87, 0xc7, 0xf5, 0xf6, 0xc8, 0x9a, 0x94, + 0xef, 0x85, 0x1d, 0x73, 0xc0, 0x50, 0x2a, 0x32, 0xa8, 0x75, 0xec, 0x58, 0x8e, 0xe7, 0xbf, 0x65, + 0x07, 0xdf, 0x80, 0xb9, 0x9c, 0x7a, 0xc5, 0xab, 0x76, 0xd6, 0xb7, 0x41, 0x14, 0x6c, 0xfe, 0xbf, + 0x02, 0xcc, 0x66, 0x4e, 0x60, 0x12, 0x93, 0xe9, 0x74, 0x7c, 0x61, 0x2e, 0xb6, 0xfd, 0xe6, 0x93, + 0x63, 0xf8, 0x86, 0x59, 0x32, 0x6b, 0xb8, 0xf8, 0x42, 0x9a, 0x8c, 0x2e, 0x91, 0x19, 0x4e, 0x67, + 0x69, 0xfd, 0xd3, 0xac, 0xb5, 0xce, 0x07, 0xb7, 0x0c, 0x23, 0x32, 0xfb, 0x18, 0x37, 0x5d, 0xc9, + 0x9f, 0xf8, 0x74, 0x4c, 0xee, 0x05, 0x32, 0x2c, 0x8c, 0xfc, 0xe4, 0x77, 0xb5, 0x30, 0x5c, 0xfc, + 0x8b, 0xfd, 0xe0, 0x25, 0xbe, 0x4b, 0xc5, 0x8b, 0xd5, 0xb9, 0xe2, 0x87, 0x91, 0xa7, 0x7c, 0x92, + 0x6d, 0xf5, 0x9b, 0xdc, 0x80, 0x92, 0xcc, 0x34, 0x22, 0x52, 0x1a, 0x89, 0xec, 0xf8, 0x76, 0x0a, + 0x4e, 0xde, 0x83, 0xb9, 0x24, 0x4c, 0xf6, 0x92, 0xbf, 0xfd, 0xcb, 0x2b, 0xb6, 0xfe, 0xac, 0x88, + 0x91, 0xd2, 0x7b, 0x7c, 0x3a, 0x6c, 0xfe, 0x36, 0xeb, 0x62, 0xb4, 0x8a, 0x9b, 0x75, 0x72, 0x01, + 0xc6, 0x36, 0xeb, 0x46, 0x0a, 0x37, 0x3b, 0x06, 0xb0, 0x66, 0xb3, 0x2e, 0x54, 0x83, 0xe6, 0xbe, + 0x1b, 0xd1, 0x66, 0xd4, 0x0d, 0xc4, 0x46, 0x6f, 0xa7, 0xe0, 0xc4, 0x82, 0x89, 0x7b, 0x6d, 0xf7, + 0x51, 0x53, 0x32, 0xe3, 0x43, 0x60, 0xc0, 0xc8, 0xeb, 0x30, 0xb5, 0xea, 0x85, 0x91, 0xd3, 0x6e, + 0xaf, 0xd3, 0x68, 0xdf, 0x6f, 0x89, 0x04, 0xb5, 0x76, 0x02, 0xca, 0xea, 0x5d, 0xf4, 0xbd, 0xc8, + 0x71, 0x3d, 0x1a, 0xd8, 0x5d, 0x2f, 0x72, 0x0f, 0xa8, 0xe8, 0x7b, 0x0a, 0x4e, 0xde, 0x86, 0x59, + 0x05, 0xdb, 0x0c, 0x9a, 0xfb, 0x34, 0x8c, 0x02, 0x4c, 0xec, 0x88, 0xde, 0x47, 0x76, 0x76, 0x21, + 0xd6, 0xd0, 0xf6, 0xbb, 0xad, 0x65, 0xef, 0xa9, 0x1b, 0xf8, 0x1e, 0xa6, 0x4d, 0x19, 0x15, 0x35, + 0x24, 0xe0, 0xd6, 0xef, 0x8f, 0x66, 0xee, 0x0c, 0x2f, 0xb3, 0x06, 0xbf, 0x80, 0x89, 0x45, 0xa7, + 0xe3, 0x3c, 0x72, 0xdb, 0x6e, 0xe4, 0xaa, 0x0c, 0x78, 0xef, 0xf4, 0xd9, 0x56, 0x64, 0xee, 0x19, + 0xda, 0xd2, 0x89, 0x6d, 0x83, 0xd5, 0xfc, 0x5f, 0x0d, 0xc3, 0x6c, 0x26, 0x1e, 0xb9, 0x2e, 0x52, + 0xe5, 0xa9, 0xad, 0x5b, 0xe4, 0x61, 0xb3, 0x93, 0x60, 0x36, 0x97, 0x08, 0x5a, 0x6c, 0x53, 0xc7, + 0xeb, 0x8a, 0x2c, 0x6c, 0xb6, 0x01, 0x63, 0x73, 0xc9, 0x44, 0x13, 0x8d, 0x19, 0xba, 0x94, 0xdb, + 0x09, 0x28, 0xb9, 0x0c, 0xe3, 0x0c, 0x22, 0x59, 0x0d, 0xf2, 0xc7, 0x8f, 0x1a, 0x88, 0x71, 0xda, + 0xf0, 0x5b, 0x54, 0xe3, 0x34, 0xc4, 0x39, 0x99, 0x50, 0xc6, 0x89, 0x41, 0x24, 0xa7, 0x61, 0xce, + 0x49, 0x03, 0x91, 0xd7, 0x60, 0xb2, 0xda, 0xe9, 0x68, 0x8c, 0x30, 0xfd, 0x9a, 0x6d, 0x02, 0xc9, + 0x25, 0x80, 0x6a, 0xa7, 0x23, 0xd9, 0x60, 0x6a, 0x35, 0x5b, 0x83, 0x90, 0x9b, 0x71, 0xb0, 0x3b, + 0x8d, 0x15, 0xde, 0x86, 0xd8, 0x19, 0x25, 0x6c, 0x5c, 0x55, 0x64, 0x30, 0xc1, 0x14, 0xf8, 0xb8, + 0x26, 0xc0, 0xe4, 0x23, 0x38, 0x97, 0x70, 0x1b, 0xd1, 0x2a, 0xc0, 0x9b, 0x0a, 0x3b, 0x1f, 0x81, + 0xbc, 0x0b, 0x67, 0x13, 0x85, 0xb2, 0x3a, 0xbc, 0x94, 0xb0, 0x73, 0x4a, 0xc9, 0x07, 0x50, 0x4e, + 0x3c, 0x68, 0x8f, 0x2b, 0xc5, 0x0b, 0x08, 0x3b, 0xb7, 0x9c, 0x7d, 0x5d, 0x89, 0x97, 0x71, 0xa2, + 0x4a, 0xbc, 0x6b, 0xb5, 0xb3, 0x0b, 0xc9, 0x0a, 0x54, 0x32, 0x5d, 0x71, 0xb4, 0x8a, 0x31, 0x65, + 0x9c, 0xdd, 0x0f, 0x8d, 0xd4, 0xe0, 0x42, 0x26, 0x8a, 0x6c, 0x06, 0x26, 0x92, 0xb3, 0x7b, 0xe2, + 0x90, 0x05, 0x98, 0x89, 0x5d, 0x92, 0xb4, 0x26, 0x60, 0x0e, 0x39, 0x3b, 0xb3, 0x8c, 0xbc, 0x69, + 0x86, 0x2d, 0xe0, 0x95, 0x61, 0x0a, 0x39, 0x3b, 0x5d, 0x60, 0x1d, 0x15, 0xe0, 0x42, 0xe6, 0x59, + 0x2c, 0x55, 0x86, 0xf9, 0xa4, 0x6c, 0xaa, 0xed, 0x05, 0x37, 0x60, 0x10, 0x75, 0x08, 0x6e, 0xea, + 0x96, 0x5e, 0xb8, 0x48, 0xcf, 0x59, 0xb1, 0x52, 0x1b, 0x71, 0xc8, 0x3d, 0x75, 0xb5, 0x39, 0x80, + 0xc6, 0x92, 0x5b, 0x49, 0x19, 0x2d, 0xa3, 0x72, 0xfd, 0x8a, 0x53, 0x5e, 0x66, 0xbe, 0xcc, 0x2d, + 0xd2, 0x9f, 0x15, 0xa0, 0xd2, 0x47, 0x04, 0x51, 0x7d, 0x2a, 0x1c, 0xa3, 0x4f, 0xf7, 0x55, 0x9f, + 0xf8, 0xab, 0xe1, 0x85, 0xe3, 0x89, 0x39, 0xaf, 0xba, 0x5b, 0x7f, 0x5d, 0x00, 0x92, 0x16, 0x75, + 0xc9, 0xf7, 0x60, 0xac, 0x5e, 0x5f, 0x31, 0x1c, 0x12, 0x53, 0x97, 0x5b, 0x31, 0x06, 0xb9, 0x7d, + 0x2c, 0x0f, 0x44, 0xdd, 0xff, 0xf0, 0x93, 0x94, 0xdb, 0xe3, 0x40, 0x4f, 0xb7, 0xc7, 0x94, 0xd3, + 0xe3, 0x72, 0x86, 0x1f, 0xdf, 0x60, 0x1f, 0x3f, 0xbe, 0xb4, 0x93, 0x9e, 0xb5, 0x04, 0xe5, 0x3c, + 0x69, 0x19, 0x77, 0x38, 0x1e, 0x22, 0x4e, 0xbb, 0xa0, 0xe3, 0x3b, 0x9c, 0x09, 0xb6, 0xde, 0x85, + 0xb3, 0x8a, 0x9a, 0xe7, 0x9e, 0xd1, 0x62, 0x33, 0x08, 0x15, 0x5b, 0xc5, 0x80, 0x88, 0x01, 0xd6, + 0x9f, 0x0e, 0xa6, 0x08, 0xeb, 0xdd, 0x83, 0x03, 0x27, 0x78, 0x4e, 0xaa, 0x26, 0xe1, 0x40, 0x5f, + 0xad, 0xa6, 0x36, 0xc8, 0x64, 0x4c, 0x8d, 0x3b, 0x3b, 0x17, 0x50, 0xc2, 0xf0, 0x9a, 0x94, 0x5f, + 0xed, 0x15, 0x79, 0xfc, 0x29, 0x03, 0x48, 0x76, 0x61, 0x52, 0x9c, 0xdd, 0xf8, 0x5b, 0x7e, 0x63, + 0xb7, 0x93, 0xdf, 0x98, 0xd1, 0xbc, 0x9b, 0x06, 0x09, 0x5f, 0x8d, 0x26, 0x1b, 0xf2, 0x05, 0x4c, + 0x49, 0x49, 0x4d, 0x30, 0xe6, 0xce, 0x58, 0x77, 0x7a, 0x33, 0x36, 0x69, 0x38, 0xe7, 0x04, 0x23, + 0xd6, 0x64, 0xb9, 0xd9, 0x71, 0xce, 0x43, 0xc7, 0x69, 0xb2, 0x41, 0x22, 0x9a, 0x6c, 0xc0, 0xe6, + 0x3f, 0x05, 0x92, 0xee, 0x57, 0xbf, 0xcf, 0x69, 0x52, 0xfb, 0x9c, 0xe6, 0xab, 0x30, 0x9d, 0xd1, + 0x81, 0x13, 0xb1, 0xf8, 0x14, 0x48, 0xba, 0xa5, 0x27, 0xe1, 0x60, 0x5d, 0x87, 0xd7, 0xd5, 0x10, + 0xa8, 0xd5, 0x60, 0xf0, 0x94, 0x46, 0xf6, 0x5f, 0x2f, 0x42, 0xa5, 0x0f, 0x2a, 0xf9, 0xbd, 0x42, + 0x72, 0xb4, 0xf9, 0x6a, 0x7c, 0x3f, 0x39, 0xda, 0xd9, 0xf4, 0x19, 0xc3, 0x5e, 0xfb, 0xe0, 0x37, + 0xfe, 0xe2, 0x85, 0x35, 0x8f, 0xf4, 0x94, 0x9d, 0x7c, 0xb4, 0x06, 0xf5, 0xd1, 0xda, 0x85, 0x19, + 0x43, 0x2d, 0x3c, 0xce, 0xe1, 0x65, 0x01, 0x88, 0x34, 0xb8, 0x6b, 0xfe, 0x9e, 0xc8, 0xd6, 0x5b, + 0x2c, 0x17, 0x6c, 0x0d, 0x6a, 0xdd, 0x85, 0xd9, 0x04, 0x5f, 0x61, 0xfc, 0xff, 0x1e, 0xa8, 0x77, + 0xf8, 0xc8, 0x78, 0xa0, 0x76, 0xe6, 0xe7, 0x87, 0x95, 0x49, 0x26, 0xd6, 0xdf, 0x8c, 0x53, 0x21, + 0xc8, 0xbf, 0xac, 0x75, 0xfd, 0xfa, 0xa2, 0xda, 0xd6, 0xe3, 0x13, 0x91, 0x3b, 0x30, 0xcc, 0x21, + 0x89, 0x80, 0xe3, 0x3a, 0xb6, 0xd8, 0x17, 0x04, 0xa2, 0x35, 0x8b, 0xaf, 0x86, 0xf1, 0x47, 0x35, + 0x8e, 0x72, 0x61, 0xed, 0xf0, 0x04, 0x3c, 0x31, 0x58, 0x05, 0x35, 0x1f, 0xac, 0xc6, 0xd1, 0x38, + 0xa4, 0x1f, 0x8b, 0xc4, 0xf3, 0xfc, 0x67, 0x6d, 0xda, 0xe2, 0x99, 0x13, 0x6b, 0x13, 0x42, 0xc7, + 0x1d, 0x74, 0x18, 0x03, 0x24, 0xb3, 0x3e, 0x81, 0x59, 0x26, 0x2d, 0x04, 0xc9, 0xfa, 0x30, 0xed, + 0x06, 0x83, 0x99, 0x8f, 0x03, 0x1c, 0x06, 0xc2, 0xc7, 0x01, 0xa2, 0xd0, 0x5a, 0x83, 0x73, 0xdc, + 0xf8, 0xa9, 0x77, 0x29, 0xbe, 0x6a, 0x18, 0xc2, 0xdf, 0x89, 0x37, 0xa7, 0x19, 0xbd, 0xe7, 0x78, + 0xd6, 0xc7, 0xf8, 0xa8, 0x49, 0x2c, 0x54, 0xd7, 0xf7, 0x62, 0x4b, 0xe7, 0xf1, 0x5e, 0x41, 0xff, + 0x9f, 0x70, 0xa1, 0xda, 0xe9, 0x50, 0xaf, 0x15, 0x13, 0x6e, 0x07, 0xce, 0x31, 0x63, 0x54, 0x90, + 0x2a, 0x0c, 0x21, 0xb6, 0xba, 0x03, 0x16, 0xcd, 0xcd, 0x68, 0x0e, 0xe2, 0x89, 0x08, 0xb4, 0x58, + 0x01, 0xa7, 0xb4, 0x5a, 0x30, 0x57, 0xef, 0x3e, 0x3a, 0x70, 0x23, 0x7c, 0x52, 0x80, 0x71, 0x5e, + 0x64, 0xdd, 0xab, 0x32, 0x67, 0x1a, 0x1f, 0x8c, 0xeb, 0xf1, 0xe3, 0x17, 0x7c, 0x95, 0x20, 0x62, + 0xbf, 0x3c, 0xbd, 0x73, 0x33, 0x26, 0x45, 0x2b, 0x0f, 0xaf, 0x05, 0x8b, 0x45, 0x5e, 0x35, 0x6b, + 0x1a, 0xce, 0xe8, 0x77, 0x5e, 0x7c, 0x85, 0xcc, 0xc2, 0xb4, 0x79, 0x97, 0xc5, 0xc1, 0x5f, 0xc3, + 0x0c, 0xb7, 0xb5, 0xf3, 0x08, 0xf2, 0x0b, 0x71, 0xb0, 0xf4, 0xe2, 0xee, 0x42, 0xe2, 0x2d, 0x03, + 0xba, 0x38, 0xab, 0xdc, 0x20, 0xbb, 0x0b, 0xfc, 0x61, 0xea, 0xd3, 0x05, 0xe3, 0x36, 0xb6, 0xb8, + 0xbb, 0x50, 0x1b, 0x11, 0x91, 0x78, 0x19, 0x77, 0x3e, 0xfd, 0xdf, 0x0a, 0xf7, 0x05, 0x8c, 0x85, + 0xb0, 0x42, 0x1d, 0x7c, 0xb7, 0x94, 0xfd, 0xa2, 0x7c, 0x0a, 0x8a, 0x2a, 0xd4, 0x66, 0xd1, 0x6d, + 0x59, 0x7f, 0x58, 0x80, 0xeb, 0x5c, 0x20, 0xcb, 0xa6, 0xc3, 0x8b, 0xad, 0x1c, 0x62, 0xf2, 0x1e, + 0x0c, 0x85, 0x9a, 0x83, 0x87, 0x25, 0x5a, 0xde, 0x8b, 0x13, 0x27, 0x20, 0x55, 0x98, 0xd0, 0x9f, + 0xe7, 0x1c, 0x2f, 0x8a, 0x9f, 0x3d, 0x7e, 0xf0, 0xd8, 0x51, 0x4f, 0x76, 0x9e, 0xc0, 0xf9, 0xe5, + 0x6f, 0xd8, 0x82, 0x10, 0x27, 0x94, 0xd0, 0x1e, 0xe2, 0x17, 0xcb, 0xa7, 0xb7, 0xc5, 0x8a, 0x31, + 0x55, 0xfb, 0x24, 0x98, 0xe9, 0xc9, 0xf2, 0x90, 0x53, 0x22, 0xfc, 0x98, 0x6d, 0xc0, 0xac, 0x3f, + 0x2d, 0xc0, 0x85, 0xec, 0xda, 0xc4, 0xc6, 0xb2, 0x0a, 0x67, 0x16, 0x1d, 0xcf, 0xf7, 0xdc, 0xa6, + 0xd3, 0xae, 0x37, 0xf7, 0x69, 0xab, 0xab, 0xe2, 0xf5, 0xaa, 0x5d, 0x66, 0x8f, 0x7a, 0x92, 0x5c, + 0xa2, 0xd8, 0x69, 0x2a, 0xa6, 0x21, 0xe2, 0x0b, 0x0f, 0xbe, 0xf7, 0xb6, 0x69, 0xa0, 0xf8, 0xf1, + 0x96, 0xe5, 0x94, 0x92, 0xdb, 0xf2, 0x52, 0xa1, 0xb5, 0xe3, 0xb9, 0x91, 0x22, 0xe2, 0xa6, 0x9e, + 0xac, 0x22, 0xeb, 0xdf, 0x15, 0xe0, 0x1c, 0xa6, 0xe8, 0x32, 0x92, 0x7e, 0xc6, 0x61, 0xab, 0x65, + 0xe4, 0xe5, 0x82, 0xf1, 0x62, 0xc5, 0xc0, 0x36, 0x43, 0x30, 0x93, 0x37, 0x61, 0xb0, 0x2e, 0x1d, + 0xce, 0xa6, 0x12, 0xe9, 0x9a, 0x05, 0x05, 0x2b, 0xb7, 0x11, 0x8b, 0xe9, 0xf0, 0x4b, 0x34, 0x6c, + 0x52, 0x0f, 0xf3, 0x6a, 0x73, 0xcb, 0x83, 0x06, 0x89, 0x23, 0x4a, 0x0d, 0xe6, 0x45, 0x94, 0x1a, + 0x32, 0x23, 0x4a, 0x59, 0x4f, 0x79, 0x82, 0xae, 0x64, 0x87, 0xc4, 0x24, 0x7d, 0x9c, 0x4a, 0xc3, + 0xcd, 0xcf, 0x81, 0xb3, 0x59, 0x3d, 0x63, 0x42, 0x7a, 0x22, 0xc3, 0x76, 0x7e, 0x98, 0xe8, 0x2d, + 0x78, 0xcd, 0xc0, 0xad, 0xb6, 0xdb, 0xfe, 0x33, 0xda, 0xda, 0x0a, 0xfc, 0x03, 0x3f, 0x32, 0x12, + 0x14, 0x89, 0x3c, 0xf4, 0xf1, 0xb5, 0x91, 0x58, 0x95, 0x09, 0xb0, 0xf5, 0x7f, 0xc0, 0xb5, 0x3e, + 0x1c, 0x45, 0xa7, 0xea, 0x70, 0xc6, 0x49, 0x94, 0x49, 0xcf, 0xa1, 0x6b, 0x59, 0xfd, 0x4a, 0x32, + 0x0a, 0xed, 0x34, 0xfd, 0x8d, 0x6d, 0x23, 0x75, 0x35, 0x29, 0xc3, 0xcc, 0x96, 0xbd, 0xb9, 0xb4, + 0xb3, 0xb8, 0xdd, 0xd8, 0xfe, 0x62, 0x6b, 0xb9, 0xb1, 0xb3, 0xf1, 0x60, 0x63, 0xf3, 0xe1, 0x06, + 0x8f, 0xb3, 0x6e, 0x94, 0x6c, 0x2f, 0x57, 0xd7, 0x4b, 0x05, 0x32, 0x03, 0x25, 0x03, 0xbc, 0xbc, + 0x53, 0x2b, 0x15, 0x6f, 0x7c, 0x6d, 0xa4, 0x64, 0x26, 0x17, 0xa0, 0x5c, 0xdf, 0xd9, 0xda, 0xda, + 0xb4, 0x15, 0x57, 0x3d, 0xca, 0xfb, 0x2c, 0x9c, 0x31, 0x4a, 0xef, 0xda, 0xcb, 0xcb, 0xa5, 0x02, + 0x6b, 0x8a, 0x01, 0xde, 0xb2, 0x97, 0xd7, 0x57, 0x77, 0xd6, 0x4b, 0xc5, 0x1b, 0x0d, 0xfd, 0x99, + 0x1c, 0x39, 0x0f, 0x73, 0x4b, 0xcb, 0xbb, 0xab, 0x8b, 0xcb, 0x59, 0xbc, 0x67, 0xa0, 0xa4, 0x17, + 0x6e, 0x6f, 0x6e, 0x6f, 0x71, 0xd6, 0x3a, 0xf4, 0xe1, 0x72, 0xad, 0xba, 0xb3, 0xbd, 0xb2, 0x51, + 0x1a, 0xb0, 0x06, 0x47, 0x8b, 0xa5, 0xe2, 0x8d, 0x1f, 0x19, 0x6f, 0xe8, 0x58, 0xf3, 0x05, 0xfa, + 0x4e, 0xbd, 0x7a, 0x2f, 0xbf, 0x0a, 0x5e, 0xba, 0x7e, 0xb7, 0x5a, 0x2a, 0x90, 0x8b, 0x70, 0xce, + 0x80, 0x6e, 0x55, 0xeb, 0xf5, 0x87, 0x9b, 0xf6, 0xd2, 0xda, 0x72, 0xbd, 0x5e, 0x2a, 0xde, 0xd8, + 0x35, 0xa2, 0xe8, 0xb1, 0x1a, 0xd6, 0xef, 0x56, 0x1b, 0xf6, 0xf2, 0x67, 0x3b, 0xab, 0xf6, 0xf2, + 0x52, 0xba, 0x06, 0xa3, 0xf4, 0x8b, 0xe5, 0x7a, 0xa9, 0x40, 0xa6, 0xe1, 0xb4, 0x01, 0xdd, 0xd8, + 0x2c, 0x15, 0x6f, 0xbc, 0x2e, 0x02, 0xad, 0x91, 0x29, 0x80, 0xa5, 0xe5, 0xfa, 0xe2, 0xf2, 0xc6, + 0xd2, 0xea, 0xc6, 0xbd, 0xd2, 0x29, 0x32, 0x09, 0x63, 0x55, 0xf5, 0xb3, 0x70, 0xe3, 0x03, 0x38, + 0x9d, 0x50, 0xef, 0x19, 0x86, 0x52, 0x8c, 0x4b, 0xa7, 0x70, 0xf8, 0xe5, 0x4f, 0xb4, 0xb1, 0x72, + 0x4d, 0xbd, 0x54, 0xb8, 0x51, 0x93, 0x59, 0x7c, 0xb5, 0xef, 0x9c, 0x8c, 0xc3, 0xc8, 0xd2, 0xf2, + 0xdd, 0xea, 0xce, 0xda, 0x76, 0xe9, 0x14, 0xfb, 0xb1, 0x68, 0x2f, 0x57, 0xb7, 0x97, 0x97, 0x4a, + 0x05, 0x32, 0x06, 0x43, 0xf5, 0xed, 0xea, 0xf6, 0x72, 0xa9, 0x48, 0x46, 0x61, 0x70, 0xa7, 0xbe, + 0x6c, 0x97, 0x06, 0x16, 0x7e, 0xfb, 0xf7, 0x0a, 0xdc, 0xd0, 0x28, 0xdf, 0x63, 0x7d, 0xad, 0x29, + 0x94, 0x62, 0xcb, 0x13, 0x29, 0x4b, 0x73, 0xb5, 0x47, 0x94, 0x02, 0xe6, 0x7b, 0x5c, 0xee, 0x20, + 0xc2, 0xf5, 0xc2, 0xed, 0x02, 0xb1, 0xd1, 0x19, 0x26, 0xa1, 0x5f, 0x29, 0xce, 0xd9, 0x2a, 0xf0, + 0xfc, 0xc5, 0x9e, 0x6a, 0x19, 0xf9, 0x15, 0xb0, 0x74, 0x9e, 0x39, 0x5a, 0xc8, 0xf7, 0x8e, 0xa7, + 0x6d, 0xc8, 0x3a, 0x5f, 0x3f, 0x1e, 0x3a, 0xb9, 0x0f, 0x93, 0x4c, 0x36, 0x57, 0x68, 0xe4, 0x7c, + 0x92, 0x50, 0x53, 0x09, 0xe6, 0x2f, 0x64, 0x17, 0xaa, 0xac, 0x42, 0x13, 0xd8, 0x11, 0xae, 0x5c, + 0x87, 0x44, 0x06, 0xe3, 0x90, 0x10, 0xbe, 0xe3, 0xcf, 0x9f, 0x49, 0x80, 0x77, 0xef, 0xdc, 0x2e, + 0x90, 0x3a, 0x46, 0xc2, 0x33, 0x84, 0x7c, 0x22, 0x1f, 0x08, 0xa6, 0xa5, 0x7f, 0xde, 0x9a, 0x8a, + 0xca, 0x01, 0x9a, 0xa3, 0x1d, 0x6c, 0x00, 0x49, 0xcb, 0xce, 0xe4, 0x72, 0xbc, 0x0e, 0xb2, 0xc5, + 0xea, 0xf9, 0xb3, 0xa9, 0x8b, 0xac, 0x65, 0x26, 0x3d, 0x91, 0x65, 0x98, 0x12, 0x2f, 0xed, 0x85, + 0x34, 0x4f, 0x7a, 0xe9, 0x03, 0xb9, 0x6c, 0xee, 0xe1, 0x38, 0x29, 0x8d, 0x80, 0xcc, 0xc7, 0xfd, + 0x48, 0xaa, 0x09, 0xf3, 0xe7, 0x33, 0xcb, 0x44, 0xff, 0xee, 0xc2, 0x94, 0xa9, 0x5c, 0x10, 0x39, + 0x41, 0x99, 0x3a, 0x47, 0x6e, 0x83, 0x1a, 0x30, 0xb7, 0xee, 0xb8, 0x78, 0x5f, 0x22, 0x9c, 0xf4, + 0xa4, 0x1f, 0x1c, 0xa9, 0xf4, 0x70, 0x8c, 0xab, 0x53, 0xaf, 0xa5, 0x26, 0x21, 0x2f, 0x43, 0x00, + 0x7e, 0x36, 0x75, 0x29, 0x23, 0x9b, 0x3e, 0x8a, 0xc4, 0x32, 0xf3, 0x3a, 0x67, 0xb9, 0x9d, 0xce, + 0xe7, 0x79, 0x4a, 0x93, 0x75, 0x14, 0xd2, 0x13, 0x1c, 0xb5, 0x35, 0x71, 0x62, 0x76, 0x65, 0x8c, + 0xf7, 0xa0, 0x25, 0xdb, 0x17, 0x85, 0x21, 0xc9, 0x19, 0xb8, 0x5c, 0x66, 0xb7, 0x0b, 0xe4, 0x6b, + 0xfc, 0xaa, 0x33, 0xd9, 0x3d, 0x74, 0xa3, 0x7d, 0x21, 0xfd, 0x9c, 0xcf, 0x64, 0x20, 0x3e, 0x94, + 0x1e, 0xdc, 0x6d, 0x98, 0xc9, 0x72, 0xce, 0x56, 0x03, 0xda, 0xc3, 0x73, 0x3b, 0x77, 0x15, 0xd8, + 0x4c, 0xd5, 0x68, 0xe5, 0x4f, 0x52, 0x0f, 0xdf, 0xe0, 0x5c, 0x9e, 0x1f, 0xc1, 0x14, 0x5b, 0x25, + 0x0f, 0x28, 0xed, 0x54, 0xdb, 0xee, 0x53, 0x1a, 0x12, 0x19, 0xc6, 0x58, 0x81, 0xf2, 0x68, 0xaf, + 0x17, 0xc8, 0x77, 0x61, 0xfc, 0xa1, 0x13, 0x35, 0xf7, 0x45, 0x38, 0x4f, 0x19, 0xed, 0x13, 0x61, + 0xf3, 0xf2, 0x17, 0x16, 0xde, 0x2e, 0x90, 0x1f, 0xc0, 0xc8, 0x3d, 0x1a, 0xe1, 0x03, 0xed, 0x2b, + 0xca, 0x97, 0x90, 0xdb, 0x27, 0x57, 0x3d, 0xf5, 0x0a, 0x49, 0x36, 0x38, 0x69, 0xcc, 0x25, 0xb7, + 0x00, 0xf8, 0x86, 0x80, 0x1c, 0x92, 0xc5, 0xf3, 0xa9, 0x66, 0x93, 0x7b, 0x4c, 0x78, 0x68, 0xd3, + 0x88, 0x1e, 0xb7, 0xca, 0xbc, 0x31, 0x5a, 0x83, 0x29, 0x95, 0x88, 0x69, 0x03, 0xa3, 0xae, 0x58, + 0x09, 0x66, 0xe1, 0x09, 0xb8, 0x7d, 0xc0, 0xbe, 0x0a, 0x9e, 0x85, 0x18, 0xc3, 0x73, 0xe0, 0x4e, + 0x3a, 0xa7, 0xc7, 0xf8, 0xd0, 0xb7, 0x50, 0x39, 0x88, 0x1c, 0x4d, 0xa3, 0x5d, 0xf1, 0xc3, 0xc8, + 0xa4, 0x55, 0x90, 0x6c, 0xda, 0x5f, 0x86, 0x79, 0xbd, 0x5e, 0x33, 0x9e, 0x74, 0xbc, 0xe7, 0xe6, + 0x85, 0xa9, 0x9e, 0xbf, 0xd2, 0x03, 0x43, 0xe8, 0x6f, 0x03, 0xbf, 0x55, 0x2c, 0xe0, 0x76, 0xb2, + 0x04, 0xd3, 0xb2, 0xae, 0xcd, 0x0e, 0xf5, 0xea, 0xf5, 0x15, 0x4c, 0xba, 0x23, 0x3d, 0x57, 0x34, + 0x98, 0xe4, 0x4e, 0xd2, 0x45, 0xec, 0xe8, 0x33, 0xc2, 0x70, 0x90, 0x5e, 0xc1, 0x39, 0xe2, 0xa3, + 0x2f, 0x33, 0xd0, 0xf1, 0x03, 0x6e, 0x54, 0x32, 0x84, 0xff, 0xdd, 0x05, 0xd2, 0x43, 0x01, 0x9a, + 0xcf, 0x51, 0x21, 0x6e, 0x17, 0xc8, 0x17, 0x40, 0xd2, 0x2a, 0x89, 0x1a, 0xc2, 0x5c, 0xf5, 0x4b, + 0x0d, 0x61, 0x0f, 0x7d, 0xe6, 0x1e, 0xcc, 0xaa, 0x20, 0x3c, 0x5a, 0xad, 0x0b, 0x24, 0xa7, 0x35, + 0x79, 0xad, 0x24, 0x9f, 0xc0, 0xb4, 0x58, 0xb4, 0x7a, 0x01, 0x29, 0xa9, 0xfd, 0x47, 0x68, 0x25, + 0xb9, 0xeb, 0xf4, 0x3e, 0xcc, 0xd6, 0x13, 0x23, 0xc6, 0x9d, 0xf9, 0xcf, 0x99, 0x2c, 0x10, 0x58, + 0xa7, 0x11, 0x1f, 0xb2, 0x6c, 0x5e, 0x0f, 0x80, 0x70, 0xa3, 0x90, 0x64, 0xf7, 0xd4, 0xa5, 0xcf, + 0xc8, 0xc5, 0x44, 0xd3, 0x19, 0x10, 0xd1, 0x70, 0x03, 0xcb, 0xed, 0xd9, 0x36, 0xcf, 0xa1, 0x8d, + 0x50, 0xe3, 0x1e, 0xfd, 0xb2, 0x41, 0x60, 0x5c, 0xc5, 0x8b, 0x09, 0x38, 0x97, 0x8b, 0x41, 0x7e, + 0x0d, 0xa3, 0xdf, 0xf6, 0x56, 0xab, 0xc8, 0x77, 0xb3, 0xb4, 0xdf, 0x1c, 0xc5, 0x70, 0xfe, 0xcd, + 0xe3, 0x21, 0x2b, 0x45, 0x76, 0xf2, 0x1e, 0x8d, 0xb6, 0xda, 0xdd, 0x3d, 0x17, 0xb3, 0xab, 0x12, + 0x65, 0x34, 0x52, 0x20, 0xb1, 0x2e, 0x65, 0xd0, 0xb9, 0xb8, 0xa0, 0x4e, 0x7f, 0x4c, 0x56, 0xa1, + 0xc4, 0xf7, 0x7f, 0x8d, 0xc5, 0xc5, 0x14, 0x0b, 0x81, 0xe2, 0x04, 0xce, 0x41, 0x98, 0x3b, 0x5b, + 0xb7, 0xb8, 0x6f, 0x14, 0x91, 0xdf, 0xa4, 0x2e, 0x60, 0x4e, 0x1b, 0x30, 0x95, 0x11, 0x80, 0xcd, + 0x88, 0x4d, 0x43, 0x1a, 0xc9, 0x30, 0x3b, 0x3c, 0xb7, 0xee, 0xd5, 0xf8, 0xb0, 0x4f, 0x97, 0xc6, + 0x9f, 0x7e, 0x22, 0x24, 0xdc, 0xee, 0x5b, 0x44, 0xe5, 0x1b, 0xce, 0x60, 0xfa, 0xba, 0x21, 0x93, + 0x9c, 0x8c, 0xef, 0xdb, 0x78, 0x06, 0x61, 0x68, 0xa1, 0xd9, 0xb8, 0x6d, 0xec, 0xb7, 0xa4, 0x9a, + 0xd4, 0xa8, 0x76, 0x17, 0x70, 0x4b, 0x63, 0x87, 0x24, 0x13, 0x61, 0xbb, 0x41, 0x40, 0x3d, 0x4e, + 0x9c, 0x27, 0x6f, 0x64, 0x51, 0x7f, 0x8c, 0x5b, 0x8f, 0x46, 0xcd, 0xdf, 0x1c, 0xf6, 0x63, 0xc1, + 0x73, 0x41, 0xdd, 0x2e, 0x90, 0xf7, 0x60, 0x54, 0xb4, 0x91, 0x11, 0x19, 0x8d, 0x0e, 0x7b, 0xb4, + 0x1a, 0x29, 0x81, 0x0f, 0x12, 0xb6, 0xd9, 0xc4, 0xc9, 0x9b, 0x7d, 0xde, 0xe6, 0xf7, 0xd8, 0x61, + 0xdb, 0x7a, 0x11, 0xca, 0x45, 0x79, 0xea, 0x22, 0x65, 0x59, 0x85, 0xa3, 0x91, 0xa0, 0x3e, 0xc7, + 0x23, 0x67, 0xc2, 0xe4, 0x66, 0x8c, 0xe9, 0xa8, 0x42, 0xb3, 0x29, 0xb9, 0xd9, 0x00, 0xf7, 0x3b, + 0x6b, 0x57, 0xa1, 0x54, 0x6d, 0xe2, 0x49, 0x50, 0xa7, 0x07, 0x4e, 0x67, 0xdf, 0x0f, 0xa8, 0x52, + 0x5a, 0x92, 0x05, 0x92, 0xd7, 0xac, 0x92, 0x2c, 0x44, 0xc1, 0x1a, 0x75, 0x30, 0xf0, 0xf5, 0x9c, + 0x12, 0x2d, 0x12, 0x45, 0xd9, 0x14, 0x3d, 0x94, 0x94, 0x99, 0x45, 0xa6, 0x56, 0xb5, 0x5f, 0x8e, + 0xcd, 0x07, 0xb8, 0x61, 0x28, 0xe4, 0x50, 0x9d, 0x10, 0x0a, 0xa4, 0xd4, 0x39, 0xf9, 0xfc, 0x48, + 0xa1, 0x56, 0xe5, 0xbd, 0x71, 0x3c, 0x2c, 0x79, 0xd4, 0x79, 0xd5, 0x7f, 0x1f, 0xa6, 0x96, 0xd9, + 0x86, 0xde, 0x6d, 0xb9, 0x3c, 0xd8, 0x3f, 0x31, 0xa3, 0xb7, 0xe7, 0x12, 0xae, 0xc8, 0xf4, 0x6b, + 0x48, 0x2a, 0x54, 0x7f, 0x79, 0xa6, 0x68, 0x30, 0x39, 0x1f, 0x33, 0x92, 0xad, 0xc8, 0xb7, 0x80, + 0xaa, 0xb9, 0xd0, 0xf5, 0xe7, 0xb8, 0x44, 0x58, 0xed, 0x74, 0xda, 0xd2, 0x24, 0xcd, 0xef, 0xde, + 0xaf, 0x19, 0x2a, 0x64, 0xaa, 0x5c, 0xf2, 0x4e, 0x0b, 0x8d, 0x9f, 0x6b, 0xe9, 0x90, 0x73, 0x78, + 0xe6, 0x94, 0xf7, 0x5b, 0x8b, 0x2a, 0x3c, 0x77, 0xb5, 0xdd, 0x4e, 0x11, 0x87, 0xe4, 0x0d, 0x93, + 0x7b, 0x16, 0x4e, 0xbf, 0x1a, 0x50, 0x45, 0xe7, 0x52, 0x57, 0xb5, 0xd3, 0xe1, 0x9b, 0xe5, 0x25, + 0xb5, 0x61, 0x98, 0x05, 0x69, 0x15, 0x3d, 0x59, 0x2e, 0xf6, 0xf6, 0xfb, 0xb8, 0xcc, 0xe2, 0x9c, + 0xc9, 0x44, 0x57, 0x78, 0x93, 0x29, 0xa3, 0x95, 0x10, 0x96, 0x28, 0x54, 0xe7, 0xc4, 0x69, 0x14, + 0x7d, 0xe2, 0x04, 0xcc, 0xca, 0x32, 0x93, 0x80, 0x4b, 0x7e, 0x97, 0xf2, 0x8a, 0x95, 0xa5, 0xb4, + 0x94, 0xcc, 0x4b, 0xaf, 0xba, 0x9c, 0x4e, 0x58, 0x6f, 0x76, 0x39, 0x37, 0xa1, 0xfd, 0x7d, 0x28, + 0x25, 0x53, 0x62, 0x2b, 0xa6, 0x39, 0xb9, 0xb2, 0x73, 0xe7, 0xe4, 0x2e, 0xcc, 0xe8, 0x33, 0xaa, + 0xfa, 0x9d, 0xb7, 0xfb, 0xe7, 0xf1, 0xd9, 0x86, 0xd9, 0xcc, 0x0c, 0xd6, 0xea, 0x88, 0xed, 0x95, + 0xdf, 0x3a, 0x97, 0x2b, 0x85, 0xb3, 0xd9, 0x49, 0xec, 0xc9, 0x6b, 0xa6, 0xe2, 0x9f, 0x9d, 0xd2, + 0x7b, 0xfe, 0x5a, 0x1f, 0x2c, 0x31, 0xa0, 0x5f, 0xe3, 0x09, 0x98, 0xaa, 0xe3, 0x8a, 0x66, 0x0a, + 0xc8, 0xa9, 0xc0, 0xea, 0x85, 0xa2, 0xd6, 0xc0, 0x4c, 0x46, 0x71, 0xfe, 0x10, 0x5f, 0xcd, 0xe7, + 0x19, 0x2f, 0xac, 0x5d, 0x19, 0x85, 0x3a, 0x77, 0x64, 0x7a, 0x26, 0x3b, 0xef, 0xa1, 0x4b, 0xce, + 0xab, 0xf5, 0x70, 0xfc, 0x26, 0xe7, 0x71, 0x6b, 0x29, 0xb3, 0x8d, 0x91, 0x89, 0x3c, 0x69, 0xb6, + 0xc9, 0xca, 0xa0, 0xae, 0x86, 0xa1, 0x57, 0x8e, 0x7e, 0x7e, 0x1a, 0x7f, 0xc5, 0xed, 0x38, 0x66, + 0x15, 0xba, 0x1d, 0x27, 0x93, 0xff, 0xe5, 0x7c, 0x04, 0x9d, 0xb9, 0xc3, 0x2f, 0x6d, 0x13, 0xa9, + 0xd4, 0x89, 0xae, 0x2a, 0x65, 0xa7, 0x59, 0x57, 0x6b, 0x23, 0x13, 0x45, 0xaf, 0xe2, 0xa1, 0xfc, + 0x06, 0x73, 0x46, 0xa9, 0x47, 0x9e, 0xf9, 0xde, 0x62, 0xca, 0x26, 0x94, 0xe3, 0xc9, 0x4c, 0x74, + 0xe0, 0x84, 0x53, 0x29, 0x07, 0xe3, 0x5c, 0x6e, 0x76, 0x79, 0xf2, 0x9d, 0xd4, 0x97, 0x9e, 0x33, + 0x30, 0x3d, 0xab, 0xe0, 0xfb, 0xb9, 0x16, 0xd5, 0xfa, 0x7c, 0x6c, 0xc4, 0xd5, 0x13, 0xd1, 0xa7, + 0xf6, 0xf3, 0x8c, 0x2c, 0xf5, 0xf7, 0x50, 0x2e, 0xd6, 0x32, 0xcd, 0xe7, 0xf6, 0xfa, 0x62, 0x16, + 0x9f, 0x30, 0xbd, 0xe3, 0x6a, 0xed, 0x92, 0x72, 0x5a, 0xb2, 0xe0, 0x24, 0x3b, 0xee, 0x71, 0x9a, + 0x96, 0xc7, 0x67, 0x09, 0xc6, 0xb5, 0x14, 0xf5, 0xe4, 0x9c, 0x31, 0x4c, 0xc6, 0x19, 0x3a, 0x6f, + 0x74, 0xce, 0x3c, 0x3e, 0x17, 0xd1, 0x94, 0xac, 0x12, 0xdd, 0xe7, 0xb6, 0xe2, 0x7c, 0x9a, 0x87, + 0x61, 0x46, 0x56, 0xa3, 0xc0, 0x5b, 0x73, 0x21, 0x39, 0x38, 0x46, 0x83, 0xf2, 0xbb, 0x44, 0xf4, + 0xa1, 0xe9, 0xd3, 0xa4, 0x7c, 0xf9, 0x75, 0x5a, 0xe4, 0xc1, 0xc5, 0x54, 0x34, 0x32, 0x6c, 0xe1, + 0x59, 0x65, 0x13, 0xd3, 0xa0, 0x68, 0xa0, 0xc8, 0x66, 0xb3, 0x85, 0xcf, 0x47, 0x32, 0x72, 0xf6, + 0xab, 0x1d, 0xb6, 0x67, 0x4a, 0xff, 0x0c, 0xd9, 0x4d, 0xed, 0xd9, 0xb9, 0x1c, 0x7b, 0x26, 0xf1, + 0xcf, 0x6d, 0xe9, 0x0f, 0xb5, 0x3d, 0x3b, 0x95, 0x99, 0x9f, 0x5c, 0x4f, 0x0a, 0x6e, 0x79, 0xc9, + 0xfb, 0x7b, 0x9c, 0x09, 0x33, 0x59, 0x49, 0xfd, 0x35, 0xbb, 0x6e, 0x6e, 0xc6, 0xff, 0x8c, 0x51, + 0xb0, 0xe5, 0xfa, 0xcf, 0xe1, 0xd6, 0x23, 0xc5, 0x7f, 0x6e, 0x0b, 0xbf, 0xd4, 0x36, 0xba, 0x44, + 0x2a, 0x7e, 0xa5, 0x8e, 0xf7, 0xc9, 0xd5, 0x9f, 0xcb, 0x7b, 0x03, 0x9f, 0x34, 0xa5, 0xf3, 0xe8, + 0x2b, 0xc9, 0xa6, 0x57, 0x96, 0xfd, 0x4c, 0xb3, 0xef, 0x6c, 0xba, 0x8b, 0x8c, 0xdf, 0xd9, 0x84, + 0xd1, 0xb6, 0x5f, 0xc3, 0xbe, 0x96, 0x9b, 0x71, 0x46, 0xfe, 0xfd, 0xc4, 0x66, 0x9c, 0x9f, 0xa1, + 0xbf, 0x87, 0x1a, 0x74, 0xba, 0xee, 0xee, 0x79, 0x5a, 0xfa, 0x7c, 0xa5, 0x04, 0xa5, 0x33, 0xfa, + 0xab, 0x2d, 0x26, 0x2b, 0xdb, 0xfe, 0x26, 0x93, 0x7f, 0xb8, 0xf4, 0xae, 0x27, 0x42, 0x27, 0xf3, + 0xf9, 0xf9, 0xdf, 0xd5, 0x76, 0x93, 0x99, 0x39, 0x5d, 0x63, 0xa8, 0x67, 0x21, 0x57, 0x0c, 0x33, + 0x12, 0xa2, 0x2b, 0x86, 0x99, 0x69, 0xcb, 0x6f, 0xa1, 0xd5, 0xc5, 0xf6, 0xdb, 0x54, 0xb7, 0xba, + 0x68, 0x69, 0xad, 0x13, 0x46, 0x0f, 0xf2, 0x31, 0x8c, 0xa9, 0xb4, 0xdf, 0xca, 0xbe, 0x9d, 0xcc, + 0x3c, 0x3e, 0x5f, 0x4e, 0x17, 0x88, 0x0a, 0xdf, 0x91, 0x86, 0x0f, 0xac, 0xb3, 0x6c, 0x1a, 0x8c, + 0xf2, 0xab, 0x7d, 0x47, 0x5a, 0x3d, 0x0c, 0xb2, 0x54, 0xd2, 0xef, 0x24, 0xd9, 0xf7, 0x61, 0x22, + 0x4e, 0xf0, 0xbd, 0xbb, 0xa0, 0x11, 0x26, 0xb2, 0x7e, 0x27, 0x09, 0xdf, 0x93, 0x57, 0x1a, 0x58, + 0x9f, 0x59, 0xd8, 0xfb, 0x14, 0xff, 0x58, 0x5a, 0x59, 0x8c, 0x96, 0xa6, 0xd2, 0x85, 0xf7, 0xd8, + 0x7c, 0x27, 0xf4, 0x8c, 0x9b, 0x6a, 0x6a, 0x33, 0x72, 0xe6, 0xaa, 0xa9, 0xcd, 0xca, 0x79, 0x1b, + 0x9b, 0xfc, 0xbf, 0x90, 0x26, 0x85, 0x98, 0xe9, 0x45, 0xa3, 0x59, 0x29, 0xbe, 0x97, 0xf2, 0x8a, + 0x93, 0xac, 0xeb, 0x50, 0x4a, 0xa6, 0x07, 0x55, 0xfa, 0x58, 0x4e, 0x1e, 0x57, 0xa5, 0xe4, 0xe5, + 0xe6, 0x15, 0xdd, 0x92, 0xf6, 0x71, 0x93, 0xef, 0x95, 0xec, 0x46, 0xe9, 0xac, 0xf3, 0x0d, 0xe6, + 0x93, 0x46, 0xa6, 0x50, 0x5d, 0x53, 0x4e, 0x65, 0x22, 0xd5, 0x25, 0xab, 0x8c, 0xe4, 0xa2, 0xae, + 0x0c, 0x5a, 0x95, 0x9d, 0xd4, 0xfd, 0x0d, 0x53, 0x85, 0xed, 0x11, 0x56, 0xbe, 0xef, 0xf5, 0x2f, + 0xf9, 0x25, 0x98, 0xcb, 0x09, 0x93, 0x4d, 0xae, 0x25, 0x2c, 0xad, 0xd9, 0x61, 0xb4, 0xd5, 0x02, + 0xc9, 0x4c, 0xe1, 0xbd, 0x8e, 0x7e, 0x03, 0x46, 0x08, 0x89, 0xd4, 0x5d, 0xdc, 0x43, 0x37, 0xda, + 0xe7, 0x99, 0xaa, 0xb5, 0x6d, 0x33, 0x33, 0xf6, 0x04, 0xa9, 0xa3, 0x2e, 0x62, 0x40, 0x33, 0xae, + 0xe3, 0x32, 0x18, 0xce, 0x67, 0x33, 0x64, 0x7b, 0x07, 0x5b, 0x0b, 0x19, 0xf1, 0x3d, 0xd4, 0x5a, + 0xc8, 0x8f, 0xfd, 0x91, 0xdb, 0xcc, 0x2d, 0x29, 0x23, 0x65, 0x73, 0xcc, 0x0f, 0xf5, 0x91, 0xcb, + 0xf1, 0x3e, 0xe3, 0x98, 0x8a, 0xde, 0x41, 0x72, 0xd0, 0x7b, 0xef, 0x1e, 0xb6, 0x3c, 0x72, 0x4d, + 0xaa, 0x05, 0xad, 0x7d, 0x79, 0x71, 0x42, 0x72, 0xdb, 0xb7, 0x2c, 0xbf, 0xa7, 0xec, 0xf6, 0x1d, + 0xf7, 0xd0, 0x55, 0xf7, 0x5f, 0x89, 0x00, 0x32, 0x46, 0x47, 0x35, 0xf8, 0x7c, 0x0e, 0x9c, 0x6c, + 0xa0, 0x23, 0x50, 0x12, 0xaa, 0x29, 0xa5, 0xd9, 0x11, 0x6a, 0x72, 0xf9, 0xf1, 0x75, 0x6c, 0x44, + 0xf8, 0x38, 0xc9, 0x3a, 0x4e, 0x84, 0x06, 0x11, 0xeb, 0xd8, 0x80, 0x9e, 0x6c, 0x1d, 0x27, 0x18, + 0x9a, 0xeb, 0x38, 0xd9, 0xcc, 0xa4, 0xa6, 0x9f, 0x3b, 0xab, 0xc9, 0x66, 0xaa, 0x75, 0x9c, 0xcd, + 0x31, 0x3f, 0x12, 0x4b, 0x2e, 0x47, 0xb5, 0x8e, 0x4d, 0x8e, 0x39, 0xe8, 0xc7, 0x5c, 0xc7, 0xc9, + 0x4a, 0xcc, 0x75, 0x7c, 0xa2, 0xf6, 0xa9, 0x75, 0x9c, 0xdd, 0xbe, 0x13, 0xaf, 0xe3, 0x44, 0xe8, + 0x22, 0xa3, 0xa3, 0x59, 0xeb, 0x38, 0x89, 0xcf, 0xd7, 0x71, 0x12, 0x9a, 0x30, 0xae, 0xf4, 0x58, + 0xc7, 0x49, 0xca, 0xcf, 0x90, 0x5f, 0x22, 0xec, 0xca, 0x71, 0x56, 0x72, 0x6e, 0xc4, 0x16, 0xf2, + 0x10, 0xcd, 0x7b, 0x09, 0xf8, 0xf1, 0x56, 0xf3, 0x85, 0x3c, 0xa6, 0xb8, 0x9e, 0x77, 0xe5, 0x20, + 0x26, 0x9b, 0x6b, 0xda, 0xae, 0xb2, 0xa3, 0xce, 0xf4, 0x68, 0xf0, 0x2e, 0x5b, 0x37, 0xad, 0x1e, + 0x7c, 0x7b, 0x05, 0xcd, 0xe9, 0xc1, 0x57, 0xa9, 0x32, 0x49, 0xbe, 0xb9, 0x24, 0xbd, 0xd7, 0xf7, + 0xe7, 0xf2, 0x82, 0x23, 0x49, 0xb7, 0x90, 0x50, 0x8e, 0x4e, 0xdc, 0x52, 0xa5, 0x24, 0x25, 0x5b, + 0x7a, 0xd2, 0x75, 0xbe, 0x2e, 0xa5, 0x87, 0x54, 0xb4, 0xad, 0x44, 0xa7, 0xf5, 0xb5, 0x9e, 0x5b, + 0x42, 0xb6, 0xd1, 0x96, 0x9b, 0x86, 0x6b, 0x76, 0xe0, 0xbc, 0xb0, 0x5e, 0x7d, 0xb9, 0xa6, 0xe2, + 0x06, 0xe9, 0x5c, 0xf3, 0x82, 0x0a, 0x29, 0xae, 0x69, 0xea, 0x4f, 0xd0, 0xfa, 0x25, 0x5e, 0x5c, + 0x79, 0x8f, 0xfd, 0x7c, 0x4b, 0xca, 0xb4, 0xe1, 0xac, 0xc4, 0x70, 0xd1, 0x47, 0xec, 0x23, 0x71, + 0x83, 0x27, 0x81, 0xb9, 0x83, 0x9f, 0x45, 0x4f, 0x3e, 0x81, 0x92, 0xd8, 0xde, 0x62, 0x06, 0x59, + 0x88, 0xb9, 0x53, 0x57, 0x93, 0x46, 0xb7, 0x63, 0xb4, 0xe0, 0x38, 0xc6, 0xb6, 0xe3, 0x8c, 0x44, + 0xbe, 0x65, 0x8a, 0x1d, 0x87, 0xdb, 0x41, 0x37, 0x8c, 0x68, 0x2b, 0x6d, 0x51, 0x32, 0x1b, 0x23, + 0x3d, 0x23, 0x4c, 0xf4, 0xdd, 0x05, 0xb2, 0x8a, 0x7b, 0x9b, 0x09, 0xee, 0x65, 0x72, 0xcb, 0x66, + 0x83, 0x5b, 0xcf, 0xba, 0x7a, 0xd6, 0x63, 0xb6, 0x29, 0xaf, 0xee, 0xdc, 0x46, 0x49, 0xab, 0xeb, + 0xd9, 0x2c, 0x76, 0xbb, 0x0b, 0x27, 0x67, 0x18, 0x8f, 0xf9, 0x31, 0x87, 0x2b, 0x6f, 0xcc, 0x3f, + 0x44, 0xbf, 0x02, 0x6e, 0x4f, 0xec, 0x37, 0xd4, 0xc9, 0x97, 0x4b, 0xe4, 0x53, 0x18, 0x93, 0xc4, + 0xfd, 0x47, 0x38, 0x49, 0x8d, 0x23, 0xbc, 0x04, 0x93, 0xc6, 0xb3, 0x2c, 0xa5, 0x2e, 0x65, 0x3d, + 0xd6, 0xea, 0xb1, 0x70, 0x26, 0x8d, 0xe7, 0x57, 0x8a, 0x4b, 0xd6, 0xa3, 0xac, 0x5c, 0x2e, 0x3f, + 0x80, 0x71, 0x31, 0xa4, 0x3d, 0x47, 0x23, 0xdf, 0x80, 0x37, 0xab, 0xb9, 0x38, 0x77, 0x5b, 0x6e, + 0xb4, 0xe8, 0x7b, 0x8f, 0xdd, 0xbd, 0xbe, 0x03, 0x93, 0x26, 0xd9, 0x5d, 0x20, 0x5f, 0x61, 0xa2, + 0x68, 0x99, 0xbe, 0x9b, 0x46, 0xcf, 0xfc, 0xe0, 0x89, 0xeb, 0xed, 0xf5, 0x61, 0x79, 0xd9, 0x64, + 0x99, 0xa4, 0x93, 0x0b, 0xf1, 0x2b, 0x98, 0xaf, 0xe7, 0x33, 0xef, 0xcb, 0xa4, 0xf7, 0x79, 0x55, + 0x87, 0x0b, 0xe8, 0x8e, 0x73, 0xd2, 0xb6, 0xf7, 0x64, 0xfa, 0x05, 0x8f, 0x00, 0x29, 0x8d, 0xff, + 0x4d, 0x3f, 0x68, 0xf5, 0xe7, 0x58, 0x31, 0x3d, 0x73, 0x13, 0x64, 0x72, 0x30, 0xbe, 0x80, 0x73, + 0xf5, 0x5c, 0xd6, 0xfd, 0x58, 0xf4, 0x13, 0x4d, 0xcf, 0xe3, 0x50, 0x9c, 0xb0, 0xdd, 0x3d, 0x79, + 0xae, 0xe2, 0x26, 0xc9, 0x0e, 0xb6, 0xad, 0x80, 0x3e, 0xa6, 0x01, 0xfa, 0x7f, 0xf7, 0xf3, 0x7c, + 0x36, 0xd1, 0x65, 0xcf, 0x57, 0xe1, 0x4c, 0x3d, 0xc5, 0x2a, 0x8f, 0xa4, 0xdf, 0x85, 0xd2, 0x34, + 0xf6, 0xf4, 0x98, 0xed, 0xea, 0xe3, 0x76, 0x34, 0x7e, 0x8f, 0x46, 0x3b, 0xab, 0x7d, 0x46, 0x49, + 0x3e, 0x50, 0x90, 0x88, 0xbb, 0x77, 0x18, 0x65, 0x5d, 0xa3, 0x4c, 0x63, 0xe4, 0x7e, 0xbc, 0x9f, + 0xca, 0xcb, 0x95, 0xbe, 0xd5, 0xe6, 0x71, 0x78, 0x0b, 0xf7, 0x42, 0xe1, 0x03, 0x3d, 0x17, 0xcb, + 0x14, 0x1c, 0x12, 0xdb, 0xfe, 0x34, 0x77, 0xe8, 0x90, 0x54, 0xb9, 0x3e, 0xc9, 0x97, 0x87, 0x80, + 0x5d, 0x4a, 0xf9, 0xc6, 0xf7, 0x64, 0xc1, 0xcd, 0xaa, 0x6b, 0x7e, 0xf3, 0x89, 0x6e, 0x56, 0x65, + 0xbf, 0x93, 0xf6, 0x46, 0x9e, 0xe8, 0x5f, 0xec, 0xf8, 0x98, 0xed, 0x5f, 0xf7, 0x24, 0x43, 0x40, + 0xbc, 0xe3, 0x27, 0xe1, 0xc2, 0x24, 0xf5, 0x96, 0x34, 0x56, 0x62, 0x85, 0x26, 0xe7, 0xdc, 0xa1, + 0x51, 0x76, 0x4a, 0x24, 0x32, 0xed, 0x94, 0x7a, 0x43, 0xf3, 0x2f, 0x07, 0x88, 0x4d, 0x3b, 0x6d, + 0x74, 0xab, 0x3e, 0xf0, 0x39, 0x4d, 0xec, 0x69, 0x9b, 0x2e, 0xea, 0xef, 0x10, 0x36, 0x2d, 0xdc, + 0x88, 0x8c, 0x81, 0x57, 0x11, 0x9a, 0xd3, 0x65, 0xf1, 0x50, 0xea, 0xde, 0x4d, 0xb7, 0x0b, 0x64, + 0x03, 0xce, 0xde, 0xa3, 0x91, 0xd8, 0xe3, 0x6c, 0x1a, 0x46, 0x81, 0xdb, 0x8c, 0x7a, 0xde, 0x34, + 0x4a, 0x65, 0x27, 0x83, 0x66, 0xf7, 0x6d, 0xc6, 0xaf, 0x9e, 0xcd, 0xaf, 0x27, 0x5d, 0x0f, 0x9f, + 0x5b, 0x71, 0x7d, 0x71, 0x92, 0x26, 0xe6, 0x2f, 0xf1, 0x11, 0xee, 0xd2, 0x93, 0x4f, 0x5a, 0x8a, + 0xc3, 0xa9, 0x08, 0xf5, 0xed, 0x26, 0x0c, 0x73, 0xa2, 0xdc, 0x03, 0x75, 0x42, 0xa7, 0x21, 0x77, + 0x60, 0x4c, 0xf9, 0xe4, 0x10, 0xa3, 0x28, 0xb7, 0x5d, 0x77, 0x60, 0x8c, 0xeb, 0x6a, 0xc7, 0x27, + 0xf9, 0x10, 0xc6, 0x94, 0x13, 0xcf, 0x89, 0x4f, 0xfa, 0x4f, 0x60, 0x52, 0x77, 0xe7, 0x39, 0xf9, + 0x40, 0xfe, 0x00, 0xef, 0x83, 0xe5, 0xb5, 0x4b, 0x3e, 0xfd, 0x6c, 0x22, 0xca, 0x8c, 0x18, 0x52, + 0xbe, 0x41, 0x4a, 0x60, 0x6e, 0xf3, 0xcf, 0xa4, 0xa8, 0xc9, 0x87, 0xf2, 0x69, 0x94, 0x22, 0x4e, + 0x23, 0xf5, 0x18, 0xb3, 0x29, 0x3e, 0xcc, 0x2f, 0x42, 0xac, 0x36, 0xd8, 0xbe, 0xcd, 0x3e, 0xce, + 0xbd, 0x75, 0xff, 0xa1, 0xcb, 0xe3, 0xb2, 0x89, 0x52, 0x5a, 0x2a, 0x39, 0x5f, 0x3e, 0xa3, 0x4b, + 0xf9, 0xf9, 0xfc, 0x70, 0x32, 0xee, 0xa3, 0x5a, 0x99, 0x2a, 0xcd, 0xed, 0x5e, 0x8f, 0xfc, 0x80, + 0xb1, 0x1e, 0x9d, 0x66, 0xd7, 0x83, 0xac, 0x97, 0x5a, 0x2e, 0x1e, 0x7c, 0xbe, 0x12, 0x76, 0xab, + 0xd2, 0x2b, 0xf2, 0xf8, 0x9d, 0xcd, 0x6f, 0xd9, 0xf9, 0x8c, 0x9b, 0xf2, 0xbe, 0x73, 0x91, 0xc7, + 0xee, 0x97, 0x50, 0x3a, 0xcc, 0x0c, 0x33, 0x96, 0xcf, 0xec, 0xba, 0xe6, 0x6c, 0x91, 0x49, 0xa9, + 0x0e, 0xbd, 0x27, 0xf8, 0xe6, 0x2c, 0x3b, 0x7d, 0xe1, 0xeb, 0x7d, 0xb8, 0xc8, 0x91, 0xf8, 0x4e, + 0x5f, 0x3c, 0x75, 0xef, 0x7a, 0x9e, 0x9f, 0xb0, 0xd9, 0xf5, 0xf5, 0x49, 0xc7, 0x98, 0x71, 0x15, + 0xae, 0x5c, 0x4e, 0xb3, 0x19, 0x9a, 0x2e, 0xa7, 0x3d, 0xfb, 0x90, 0x37, 0xfc, 0x9f, 0x41, 0x25, + 0xf6, 0x28, 0x39, 0xd9, 0x24, 0xe4, 0x7b, 0x3a, 0x92, 0xd4, 0x48, 0x85, 0xa4, 0x57, 0x7e, 0xa2, + 0xf9, 0x2b, 0x79, 0x23, 0xac, 0xbf, 0xab, 0x11, 0x9e, 0x72, 0x89, 0x44, 0x9e, 0x79, 0x29, 0x41, + 0x7b, 0x18, 0x76, 0xc5, 0x23, 0xbc, 0x57, 0xc2, 0x28, 0x3d, 0xdb, 0x27, 0x67, 0xa4, 0x1c, 0x3e, + 0x12, 0x8c, 0xac, 0x1e, 0xd3, 0xdb, 0xff, 0x2e, 0xb3, 0x9c, 0x33, 0xaf, 0x27, 0x9f, 0x50, 0x27, + 0x7e, 0x78, 0x96, 0x88, 0x4a, 0xa8, 0x3f, 0xf6, 0x4d, 0x17, 0x25, 0x5f, 0x4d, 0x65, 0x61, 0x28, + 0x2f, 0xab, 0xb2, 0xac, 0x82, 0xc1, 0x99, 0x2a, 0xe2, 0x07, 0x6e, 0xf4, 0x7c, 0xd1, 0x5e, 0x8b, + 0xcd, 0x0a, 0x7a, 0x81, 0xe4, 0x0d, 0xb2, 0xd0, 0x5e, 0x23, 0x5f, 0xe2, 0x56, 0x22, 0xd8, 0xd7, + 0x7c, 0x3f, 0x0a, 0xa3, 0xc0, 0xe9, 0xd4, 0x9b, 0x81, 0xdb, 0x89, 0x72, 0x3b, 0x1d, 0x3b, 0x85, + 0x67, 0x91, 0x69, 0x3e, 0xaa, 0x22, 0x30, 0x7e, 0x56, 0x28, 0x1d, 0xf5, 0x4e, 0x27, 0xab, 0xb0, + 0x87, 0xe6, 0x52, 0x97, 0xa1, 0xf0, 0x5f, 0x25, 0xd3, 0x06, 0xcc, 0xe5, 0x04, 0x20, 0x52, 0xd7, + 0xc1, 0xbd, 0x03, 0x14, 0xcd, 0xf7, 0xae, 0x98, 0x7c, 0x05, 0xb3, 0x99, 0x11, 0x8a, 0x94, 0x49, + 0xbb, 0x57, 0xfc, 0xa2, 0x7e, 0xcc, 0x9f, 0x40, 0x99, 0xbf, 0x10, 0x41, 0x47, 0x68, 0x23, 0x58, + 0x4d, 0xfc, 0x6e, 0x28, 0x07, 0x21, 0xb9, 0x5f, 0xe7, 0xe3, 0xa9, 0xd7, 0xeb, 0x33, 0x18, 0xa5, + 0x24, 0x91, 0x82, 0x5e, 0x7d, 0x78, 0x59, 0x85, 0xbd, 0x1e, 0x27, 0x6d, 0xc1, 0xec, 0x2e, 0x0d, + 0xdc, 0xc7, 0xcf, 0x93, 0x0c, 0xe5, 0xc8, 0x64, 0x96, 0xf6, 0xe2, 0xf8, 0x39, 0xcc, 0x2d, 0xfa, + 0x07, 0x1d, 0xf1, 0x0c, 0xd0, 0xe0, 0xa9, 0xee, 0xf6, 0xb3, 0xcb, 0xfb, 0x3b, 0x47, 0xcd, 0xab, + 0x77, 0x8a, 0xa9, 0xfc, 0xfb, 0xca, 0x27, 0x2e, 0x1f, 0x25, 0x7e, 0xdd, 0x21, 0x55, 0x39, 0x9d, + 0x7e, 0x1b, 0x17, 0x61, 0x82, 0x8e, 0xdb, 0xe6, 0xb4, 0x45, 0x98, 0x55, 0xde, 0xfb, 0x51, 0x59, + 0x06, 0x57, 0x5e, 0x61, 0x3e, 0xd7, 0x63, 0xb4, 0x76, 0x43, 0x9e, 0x2d, 0x66, 0xfe, 0xf3, 0x84, + 0x17, 0x76, 0x66, 0x72, 0xf4, 0xcc, 0x76, 0x6a, 0x61, 0x1a, 0xda, 0xed, 0x1e, 0x22, 0x16, 0xd1, + 0xe3, 0x34, 0x30, 0x4c, 0xbc, 0x15, 0x98, 0xd4, 0x69, 0x7b, 0xed, 0xd6, 0x29, 0x62, 0x14, 0x6a, + 0x3f, 0x80, 0x89, 0xba, 0x5e, 0x79, 0x46, 0x25, 0xb9, 0x8b, 0x42, 0x3d, 0x2b, 0xea, 0xdf, 0xf6, + 0x1e, 0xce, 0xa5, 0xea, 0xe0, 0x39, 0x56, 0x2f, 0x72, 0x7d, 0x71, 0x8c, 0x64, 0x76, 0xea, 0x14, + 0xc8, 0xca, 0x35, 0xa9, 0x7c, 0x71, 0xb2, 0xf3, 0xdf, 0x35, 0x78, 0x8a, 0x9c, 0x64, 0x2a, 0x51, + 0x62, 0xf5, 0xcf, 0xd9, 0xab, 0x9c, 0xec, 0x7b, 0xe6, 0x22, 0xe5, 0x8e, 0x43, 0x71, 0xfa, 0x3e, + 0xdd, 0x71, 0x28, 0x95, 0x14, 0x50, 0x77, 0x1c, 0xca, 0xc8, 0xf8, 0xb7, 0x8c, 0xbc, 0xe2, 0xdc, + 0x42, 0x3d, 0x8c, 0x11, 0x8a, 0x4d, 0x46, 0x0a, 0xa3, 0x07, 0x7a, 0xb4, 0x0f, 0x9e, 0x91, 0xa8, + 0x87, 0xad, 0x35, 0x19, 0xe5, 0x23, 0x91, 0xc2, 0xe8, 0x2e, 0x94, 0x78, 0x72, 0x86, 0x38, 0x48, + 0x62, 0xec, 0x4b, 0x98, 0xce, 0x19, 0xd1, 0x63, 0x52, 0x4b, 0xc9, 0xd0, 0x72, 0xca, 0x64, 0x96, + 0x13, 0x73, 0xae, 0xc7, 0x52, 0x85, 0x38, 0x80, 0x9c, 0x32, 0x4c, 0xa5, 0x62, 0xca, 0xcd, 0x9f, + 0xcb, 0x28, 0x51, 0x22, 0xe5, 0x84, 0x1e, 0x6e, 0x4e, 0x75, 0x29, 0x23, 0x06, 0xdd, 0xfc, 0xf9, + 0xcc, 0x32, 0xc1, 0x28, 0xe2, 0x69, 0xab, 0xb3, 0x93, 0x6d, 0xc7, 0x2f, 0xc3, 0x7a, 0xe0, 0xc8, + 0x6a, 0x6e, 0x1c, 0x07, 0x55, 0xd4, 0x4a, 0x55, 0x66, 0xa5, 0x8c, 0x0c, 0xdf, 0xdf, 0xc9, 0x78, + 0xbc, 0x61, 0x60, 0xc4, 0xee, 0x65, 0xbd, 0xd3, 0x8d, 0x93, 0x87, 0x32, 0xd3, 0x4d, 0x4e, 0x4d, + 0xfd, 0x18, 0xe4, 0xce, 0xe0, 0x43, 0x99, 0xdb, 0xe6, 0x55, 0x33, 0x7e, 0x04, 0x17, 0x12, 0x2f, + 0x42, 0x4c, 0xc6, 0x37, 0xb2, 0x9f, 0x8d, 0x64, 0x0e, 0x4f, 0xbe, 0xcc, 0x7e, 0x39, 0xfd, 0x72, + 0x24, 0x31, 0xef, 0x27, 0xdd, 0xf3, 0xd6, 0x61, 0x0a, 0xb7, 0x19, 0x99, 0xab, 0x3e, 0x0e, 0x36, + 0x63, 0x82, 0x93, 0x51, 0x8f, 0x92, 0xa5, 0xea, 0x41, 0xfa, 0x84, 0x78, 0x65, 0xcc, 0x33, 0xdf, + 0xcf, 0x9b, 0x4f, 0x8f, 0x11, 0x98, 0x75, 0x8a, 0x89, 0x84, 0xfa, 0xe4, 0x07, 0x70, 0x3a, 0x7e, + 0x7c, 0xcc, 0x59, 0x64, 0xa0, 0xf5, 0x30, 0x94, 0x9d, 0x8e, 0x5f, 0x20, 0x9f, 0x9c, 0x7c, 0x45, + 0x1e, 0x45, 0x31, 0xf9, 0xc5, 0xd4, 0xfb, 0x19, 0xa3, 0x0f, 0xc7, 0x39, 0x91, 0xb4, 0xb1, 0x3d, + 0xe9, 0xec, 0x34, 0xf1, 0x73, 0xcb, 0x8e, 0xa3, 0xa8, 0x7f, 0x6e, 0x3d, 0x63, 0x3d, 0x2a, 0xf1, + 0x37, 0x87, 0xcf, 0x3a, 0x5c, 0xc5, 0xd8, 0x2b, 0x5b, 0x3c, 0xda, 0x5e, 0x36, 0x56, 0x7e, 0xdb, + 0x93, 0x11, 0x5b, 0xda, 0x70, 0xa5, 0x6f, 0x20, 0x49, 0x72, 0xcb, 0xf0, 0x99, 0xe9, 0x1f, 0x72, + 0xb2, 0x87, 0xe6, 0x31, 0x93, 0x15, 0x8f, 0x51, 0x9d, 0xb3, 0x3d, 0x42, 0x43, 0xaa, 0x73, 0xb6, + 0x67, 0x40, 0xc7, 0xcf, 0x31, 0x7d, 0x94, 0x38, 0xa3, 0x30, 0x9e, 0x12, 0xf5, 0x78, 0x94, 0xe9, + 0x9e, 0xd7, 0x3e, 0x57, 0xcc, 0x4b, 0xd1, 0x14, 0x21, 0xea, 0x34, 0x97, 0x84, 0x26, 0x96, 0xc7, + 0xbc, 0x3f, 0x93, 0x1e, 0xbe, 0xda, 0x97, 0xf8, 0x02, 0x3c, 0x71, 0xcb, 0x73, 0xe0, 0xb5, 0xa5, + 0x9f, 0xfe, 0xe7, 0x4b, 0x85, 0x9f, 0xfe, 0xec, 0x52, 0xe1, 0xdf, 0xff, 0xec, 0x52, 0xe1, 0x3f, + 0xfd, 0xec, 0x52, 0xe1, 0xcb, 0x85, 0xe3, 0xc5, 0x3a, 0xe6, 0x09, 0x1f, 0x6f, 0x71, 0x76, 0xc3, + 0xf8, 0xdf, 0x5b, 0xff, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x0c, 0x8d, 0x4f, 0x36, 0x6a, 0xec, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -17169,7 +17170,11 @@ type AuthServiceClient interface { // GetTrustedClusters gets all current Trusted Cluster resources. GetTrustedClusters(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*types.TrustedClusterV2List, error) // UpsertTrustedCluster upserts a Trusted Cluster in a backend. + // + // Deprecated: Use UpsertTrustedClusterV2 instead. UpsertTrustedCluster(ctx context.Context, in *types.TrustedClusterV2, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) + // UpsertTrustedClusterV2 upserts a Trusted Cluster in a backend. + UpsertTrustedClusterV2(ctx context.Context, in *types.TrustedClusterV2, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) // DeleteTrustedCluster deletes an existing Trusted Cluster in a backend by name. DeleteTrustedCluster(ctx context.Context, in *types.ResourceRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // GetToken retrieves a token described by the given request. @@ -19148,6 +19153,7 @@ func (c *authServiceClient) GetTrustedClusters(ctx context.Context, in *emptypb. return out, nil } +// Deprecated: Do not use. func (c *authServiceClient) UpsertTrustedCluster(ctx context.Context, in *types.TrustedClusterV2, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) { out := new(types.TrustedClusterV2) err := c.cc.Invoke(ctx, "/proto.AuthService/UpsertTrustedCluster", in, out, opts...) @@ -19157,6 +19163,15 @@ func (c *authServiceClient) UpsertTrustedCluster(ctx context.Context, in *types. return out, nil } +func (c *authServiceClient) UpsertTrustedClusterV2(ctx context.Context, in *types.TrustedClusterV2, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) { + out := new(types.TrustedClusterV2) + err := c.cc.Invoke(ctx, "/proto.AuthService/UpsertTrustedClusterV2", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *authServiceClient) DeleteTrustedCluster(ctx context.Context, in *types.ResourceRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/proto.AuthService/DeleteTrustedCluster", in, out, opts...) @@ -20547,7 +20562,11 @@ type AuthServiceServer interface { // GetTrustedClusters gets all current Trusted Cluster resources. GetTrustedClusters(context.Context, *emptypb.Empty) (*types.TrustedClusterV2List, error) // UpsertTrustedCluster upserts a Trusted Cluster in a backend. + // + // Deprecated: Use UpsertTrustedClusterV2 instead. UpsertTrustedCluster(context.Context, *types.TrustedClusterV2) (*types.TrustedClusterV2, error) + // UpsertTrustedClusterV2 upserts a Trusted Cluster in a backend. + UpsertTrustedClusterV2(context.Context, *types.TrustedClusterV2) (*types.TrustedClusterV2, error) // DeleteTrustedCluster deletes an existing Trusted Cluster in a backend by name. DeleteTrustedCluster(context.Context, *types.ResourceRequest) (*emptypb.Empty, error) // GetToken retrieves a token described by the given request. @@ -21283,6 +21302,9 @@ func (*UnimplementedAuthServiceServer) GetTrustedClusters(ctx context.Context, r func (*UnimplementedAuthServiceServer) UpsertTrustedCluster(ctx context.Context, req *types.TrustedClusterV2) (*types.TrustedClusterV2, error) { return nil, status.Errorf(codes.Unimplemented, "method UpsertTrustedCluster not implemented") } +func (*UnimplementedAuthServiceServer) UpsertTrustedClusterV2(ctx context.Context, req *types.TrustedClusterV2) (*types.TrustedClusterV2, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpsertTrustedClusterV2 not implemented") +} func (*UnimplementedAuthServiceServer) DeleteTrustedCluster(ctx context.Context, req *types.ResourceRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteTrustedCluster not implemented") } @@ -24353,6 +24375,24 @@ func _AuthService_UpsertTrustedCluster_Handler(srv interface{}, ctx context.Cont return interceptor(ctx, in, info, handler) } +func _AuthService_UpsertTrustedClusterV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(types.TrustedClusterV2) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServiceServer).UpsertTrustedClusterV2(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/proto.AuthService/UpsertTrustedClusterV2", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServiceServer).UpsertTrustedClusterV2(ctx, req.(*types.TrustedClusterV2)) + } + return interceptor(ctx, in, info, handler) +} + func _AuthService_DeleteTrustedCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(types.ResourceRequest) if err := dec(in); err != nil { @@ -26821,6 +26861,10 @@ var _AuthService_serviceDesc = grpc.ServiceDesc{ MethodName: "UpsertTrustedCluster", Handler: _AuthService_UpsertTrustedCluster_Handler, }, + { + MethodName: "UpsertTrustedClusterV2", + Handler: _AuthService_UpsertTrustedClusterV2_Handler, + }, { MethodName: "DeleteTrustedCluster", Handler: _AuthService_DeleteTrustedCluster_Handler, diff --git a/api/proto/teleport/legacy/client/proto/authservice.proto b/api/proto/teleport/legacy/client/proto/authservice.proto index 9caaaafaee775..3f63e98a4c602 100644 --- a/api/proto/teleport/legacy/client/proto/authservice.proto +++ b/api/proto/teleport/legacy/client/proto/authservice.proto @@ -3218,7 +3218,13 @@ service AuthService { // GetTrustedClusters gets all current Trusted Cluster resources. rpc GetTrustedClusters(google.protobuf.Empty) returns (types.TrustedClusterV2List); // UpsertTrustedCluster upserts a Trusted Cluster in a backend. - rpc UpsertTrustedCluster(types.TrustedClusterV2) returns (types.TrustedClusterV2); + // + // Deprecated: Use UpsertTrustedClusterV2 instead. + rpc UpsertTrustedCluster(types.TrustedClusterV2) returns (types.TrustedClusterV2) { + option deprecated = true; + } + // UpsertTrustedClusterV2 upserts a Trusted Cluster in a backend. + rpc UpsertTrustedClusterV2(types.TrustedClusterV2) returns (types.TrustedClusterV2); // DeleteTrustedCluster deletes an existing Trusted Cluster in a backend by name. rpc DeleteTrustedCluster(types.ResourceRequest) returns (google.protobuf.Empty); diff --git a/api/types/trustedcluster.go b/api/types/trustedcluster.go index 27d8129f70cfe..ea7b309228427 100644 --- a/api/types/trustedcluster.go +++ b/api/types/trustedcluster.go @@ -29,8 +29,8 @@ import ( // TrustedCluster holds information needed for a cluster that can not be directly // accessed (maybe be behind firewall without any open ports) to join a parent cluster. type TrustedCluster interface { - // Resource provides common resource properties - Resource + // ResourceWithOrigin provides common resource properties + ResourceWithOrigin // SetMetadata sets object metadata SetMetadata(meta Metadata) // GetEnabled returns the state of the TrustedCluster. @@ -184,6 +184,16 @@ func (c *TrustedClusterV2) SetName(e string) { c.Metadata.Name = e } +// Origin returns the origin value of the resource. +func (c *TrustedClusterV2) Origin() string { + return c.Metadata.Origin() +} + +// SetOrigin sets the origin value of the resource. +func (c *TrustedClusterV2) SetOrigin(origin string) { + c.Metadata.SetOrigin(origin) +} + // GetEnabled returns the state of the TrustedCluster. func (c *TrustedClusterV2) GetEnabled() bool { return c.Spec.Enabled diff --git a/integration/integration_test.go b/integration/integration_test.go index b00e47d7fa404..8874615f6034d 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -196,6 +196,7 @@ func TestIntegrations(t *testing.T) { t.Run("TrustedDisabledClusters", suite.bind(testDisabledTrustedClusters)) t.Run("TrustedClustersRoleMapChanges", suite.bind(testTrustedClustersRoleMapChanges)) t.Run("TrustedClustersWithLabels", suite.bind(testTrustedClustersWithLabels)) + t.Run("ValidatedTrustedClusters", suite.bind(testValidatedTrustedClusters)) t.Run("TrustedTunnelNode", suite.bind(testTrustedTunnelNode)) t.Run("TwoClustersProxy", suite.bind(testTwoClustersProxy)) t.Run("TwoClustersTunnel", suite.bind(testTwoClustersTunnel)) @@ -2946,6 +2947,9 @@ type trustedClusterTest struct { // useLabels turns on trusted cluster labels and // verifies RBAC useLabels bool + // validateName uses UpsertValidatedTrustedCluster and ensures that a + // valid cluster name is provided before upserting the trusted cluster. + validateName bool } // TestTrustedClusters tests remote clusters scenarios @@ -3009,6 +3013,15 @@ func testMultiplexingTrustedClusters(t *testing.T, suite *integrationTestSuite) trustedClusters(t, suite, trustedClusterTest{multiplex: true}) } +// TestValidatedTrustedClusters tests remote clusters scenarios +// using validated trusted clusters +func testValidatedTrustedClusters(t *testing.T, suite *integrationTestSuite) { + tr := utils.NewTracer(utils.ThisFunction()).Start() + defer tr.Stop() + + trustedClusters(t, suite, trustedClusterTest{validateName: true}) +} + func standardPortsOrMuxSetup(t *testing.T, mux bool, fds *[]*servicecfg.FileDescriptor) *helpers.InstanceListeners { if mux { return helpers.WebReverseTunnelMuxPortSetup(t, fds) @@ -3212,8 +3225,21 @@ func trustedClusters(t *testing.T, suite *integrationTestSuite, test trustedClus require.Error(t, err, "expected tunnel to close and SSH client to start failing") // recreating the trusted cluster should re-establish connection - _, err = aux.Process.GetAuthServer().UpsertTrustedCluster(ctx, trustedCluster) - require.NoError(t, err) + if test.validateName { + // Note that the trusted cluster resource name must match the cluster name. + // Modify the trusted cluster resource name and expect the upsert to fail. + trustedCluster.SetName(main.Secrets.SiteName + "-cluster") + _, err = aux.Process.GetAuthServer().UpsertValidatedTrustedCluster(ctx, trustedCluster) + require.Error(t, err, "expected failure due to tc name mismatch") + + // Modify the trusted cluster resource name back to what it was orignally. + trustedCluster.SetName(main.Secrets.SiteName) + _, err = aux.Process.GetAuthServer().UpsertValidatedTrustedCluster(ctx, trustedCluster) + require.NoError(t, err) + } else { + _, err = aux.Process.GetAuthServer().UpsertTrustedCluster(ctx, trustedCluster) + require.NoError(t, err) + } // check that remote cluster has been re-provisioned remoteClusters, err = main.Process.GetAuthServer().GetRemoteClusters(ctx) diff --git a/lib/auth/auth_with_roles.go b/lib/auth/auth_with_roles.go index 5f24f86247aae..4701b3dcd733c 100644 --- a/lib/auth/auth_with_roles.go +++ b/lib/auth/auth_with_roles.go @@ -4925,6 +4925,24 @@ func (a *ServerWithRoles) UpsertTrustedCluster(ctx context.Context, tc types.Tru return a.authServer.UpsertTrustedCluster(ctx, tc) } +// UpsertValidatedTrustedCluster creates or updates a trusted cluster. +func (a *ServerWithRoles) UpsertValidatedTrustedCluster(ctx context.Context, tc types.TrustedCluster) (types.TrustedCluster, error) { + // Don't allow a Cloud tenant to be a leaf cluster. + if modules.GetModules().Features().Cloud { + return nil, trace.NotImplemented("cloud tenants cannot be leaf clusters") + } + + if err := a.action(types.KindTrustedCluster, types.VerbCreate, types.VerbUpdate); err != nil { + return nil, trace.Wrap(err) + } + + if err := a.context.AuthorizeAdminActionAllowReusedMFA(); err != nil { + return nil, trace.Wrap(err) + } + + return a.authServer.UpsertValidatedTrustedCluster(ctx, tc) +} + func (a *ServerWithRoles) ValidateTrustedCluster(ctx context.Context, validateRequest *authclient.ValidateTrustedClusterRequest) (*authclient.ValidateTrustedClusterResponse, error) { // Don't allow a leaf cluster to be added to a Cloud tenant. if modules.GetModules().Features().Cloud { diff --git a/lib/auth/grpcserver.go b/lib/auth/grpcserver.go index 07ba460d29e91..c350998c94049 100644 --- a/lib/auth/grpcserver.go +++ b/lib/auth/grpcserver.go @@ -2935,6 +2935,8 @@ func (g *GRPCServer) GetTrustedClusters(ctx context.Context, _ *emptypb.Empty) ( } // UpsertTrustedCluster upserts a Trusted Cluster. +// +// Deprecated: Use [GRPCServer.UpsertTrustedClusterV2] instead. func (g *GRPCServer) UpsertTrustedCluster(ctx context.Context, cluster *types.TrustedClusterV2) (*types.TrustedClusterV2, error) { auth, err := g.authenticate(ctx) if err != nil { @@ -2955,6 +2957,26 @@ func (g *GRPCServer) UpsertTrustedCluster(ctx context.Context, cluster *types.Tr return trustedClusterV2, nil } +// UpsertTrustedClusterV2 upserts a Trusted Cluster. +func (g *GRPCServer) UpsertTrustedClusterV2(ctx context.Context, cluster *types.TrustedClusterV2) (*types.TrustedClusterV2, error) { + auth, err := g.authenticate(ctx) + if err != nil { + return nil, trace.Wrap(err) + } + if err = services.ValidateTrustedCluster(cluster); err != nil { + return nil, trace.Wrap(err) + } + tc, err := auth.ServerWithRoles.UpsertValidatedTrustedCluster(ctx, cluster) + if err != nil { + return nil, trace.Wrap(err) + } + trustedClusterV2, ok := tc.(*types.TrustedClusterV2) + if !ok { + return nil, trace.Errorf("encountered unexpected Trusted Cluster type: %T", tc) + } + return trustedClusterV2, nil +} + // DeleteTrustedCluster deletes a Trusted Cluster by name. func (g *GRPCServer) DeleteTrustedCluster(ctx context.Context, req *types.ResourceRequest) (*emptypb.Empty, error) { auth, err := g.authenticate(ctx) diff --git a/lib/auth/trustedcluster.go b/lib/auth/trustedcluster.go index 784d6aad010dc..89cc132e0e1bc 100644 --- a/lib/auth/trustedcluster.go +++ b/lib/auth/trustedcluster.go @@ -46,6 +46,19 @@ import ( // UpsertTrustedCluster creates or toggles a Trusted Cluster relationship. func (a *Server) UpsertTrustedCluster(ctx context.Context, tc types.TrustedCluster) (newTrustedCluster types.TrustedCluster, returnErr error) { + upserted, err := a.upsertTrustedCluster(ctx, tc, false) + return upserted, trace.Wrap(err) +} + +// UpsertValidatedTrustedCluster creates or toggles a Trusted Cluster relationship. +// The trusted cluster resource name must match the cluster name. +func (a *Server) UpsertValidatedTrustedCluster(ctx context.Context, tc types.TrustedCluster) (newTrustedCluster types.TrustedCluster, returnErr error) { + upserted, err := a.upsertTrustedCluster(ctx, tc, true) + return upserted, trace.Wrap(err) +} + +// upsertTrustedCluster creates or toggles a Trusted Cluster relationship. +func (a *Server) upsertTrustedCluster(ctx context.Context, tc types.TrustedCluster, validateName bool) (newTrustedCluster types.TrustedCluster, returnErr error) { // verify that trusted cluster role map does not reference non-existent roles if err := a.checkLocalRoles(ctx, tc.GetRoleMap()); err != nil { return nil, trace.Wrap(err) @@ -67,7 +80,7 @@ func (a *Server) UpsertTrustedCluster(ctx context.Context, tc types.TrustedClust // if there is no existing cluster, switch to the create case if existingCluster == nil { - return a.createTrustedCluster(ctx, tc) + return a.createTrustedCluster(ctx, tc, validateName) } if err := existingCluster.CanChangeStateTo(tc); err != nil { @@ -103,8 +116,8 @@ func (a *Server) UpsertTrustedCluster(ctx context.Context, tc types.TrustedClust return tc, nil } -func (a *Server) createTrustedCluster(ctx context.Context, tc types.TrustedCluster) (types.TrustedCluster, error) { - remoteCAs, err := a.establishTrust(ctx, tc) +func (a *Server) createTrustedCluster(ctx context.Context, tc types.TrustedCluster, validateName bool) (types.TrustedCluster, error) { + remoteCAs, err := a.establishTrust(ctx, tc, validateName) if err != nil { return nil, trace.Wrap(err) } @@ -267,7 +280,7 @@ func (a *Server) DeleteTrustedCluster(ctx context.Context, name string) error { return nil } -func (a *Server) establishTrust(ctx context.Context, trustedCluster types.TrustedCluster) ([]types.CertAuthority, error) { +func (a *Server) establishTrust(ctx context.Context, trustedCluster types.TrustedCluster, validateName bool) ([]types.CertAuthority, error) { var localCertAuthorities []types.CertAuthority domainName, err := a.GetDomainName() @@ -322,9 +335,10 @@ func (a *Server) establishTrust(ctx context.Context, trustedCluster types.Truste if remoteClusterName == domainName { return nil, trace.BadParameter("remote cluster name can not be the same as local cluster name") } - // TODO(klizhentas) in 2.5.0 prohibit adding trusted cluster resource name - // different from cluster name (we had no way of checking this before x509, - // because SSH CA was a public key, not a cert with metadata) + if validateName && trustedCluster.GetName() != remoteClusterName { + return nil, trace.CompareFailed("trusted cluster resource name must be the same as the remote cluster name. got: %q, expected: %q", + trustedCluster.GetName(), remoteClusterName) + } } } From bc9e0fba90adb33660089dc2728dc1170c54c36d Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Wed, 4 Dec 2024 16:37:19 -0800 Subject: [PATCH 02/25] Replace confusing UpsertValidationTrustedCluster name --- api/client/client.go | 16 +++++++++++----- integration/integration_test.go | 14 +++++++------- lib/auth/auth_with_roles.go | 7 ++++--- lib/auth/grpcserver.go | 2 +- lib/auth/trustedcluster.go | 4 ++-- 5 files changed, 25 insertions(+), 18 deletions(-) diff --git a/api/client/client.go b/api/client/client.go index 71b4d82a39f0c..281d7d476ce71 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -2277,17 +2277,23 @@ func (c *Client) GetTrustedClusters(ctx context.Context) ([]types.TrustedCluster } // UpsertTrustedCluster creates or updates a Trusted Cluster. +// +// Deprecated: Use [Client.UpsertTrustedClusterV2] instead. func (c *Client) UpsertTrustedCluster(ctx context.Context, trustedCluster types.TrustedCluster) (types.TrustedCluster, error) { trustedClusterV2, ok := trustedCluster.(*types.TrustedClusterV2) if !ok { return nil, trace.BadParameter("invalid type %T", trustedCluster) } - if trustedCluster.Origin() != types.OriginKubernetes { - resp, err := c.grpc.UpsertTrustedCluster(ctx, trustedClusterV2) - return resp, trace.Wrap(err) + resp, err := c.grpc.UpsertTrustedCluster(ctx, trustedClusterV2) + return resp, trace.Wrap(err) +} + +// UpsertTrustedClusterV2 creates or updates a Trusted Cluster. +func (c *Client) UpsertTrustedClusterV2(ctx context.Context, trustedCluster types.TrustedCluster) (types.TrustedCluster, error) { + trustedClusterV2, ok := trustedCluster.(*types.TrustedClusterV2) + if !ok { + return nil, trace.BadParameter("invalid type %T", trustedCluster) } - // The Kubernetes Operator must use UpsertTrustedClusterV2 to ensure that - // the trusted_cluster resource name is valid before it is created. resp, err := c.grpc.UpsertTrustedClusterV2(ctx, trustedClusterV2) if trace.IsNotImplemented(err) { // Try to print a nicer error message when newer clients connect to diff --git a/integration/integration_test.go b/integration/integration_test.go index 8874615f6034d..7d66bff624602 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -196,7 +196,7 @@ func TestIntegrations(t *testing.T) { t.Run("TrustedDisabledClusters", suite.bind(testDisabledTrustedClusters)) t.Run("TrustedClustersRoleMapChanges", suite.bind(testTrustedClustersRoleMapChanges)) t.Run("TrustedClustersWithLabels", suite.bind(testTrustedClustersWithLabels)) - t.Run("ValidatedTrustedClusters", suite.bind(testValidatedTrustedClusters)) + t.Run("TrustedClustersV2", suite.bind(testTrustedClustersV2)) t.Run("TrustedTunnelNode", suite.bind(testTrustedTunnelNode)) t.Run("TwoClustersProxy", suite.bind(testTwoClustersProxy)) t.Run("TwoClustersTunnel", suite.bind(testTwoClustersTunnel)) @@ -3013,9 +3013,9 @@ func testMultiplexingTrustedClusters(t *testing.T, suite *integrationTestSuite) trustedClusters(t, suite, trustedClusterTest{multiplex: true}) } -// TestValidatedTrustedClusters tests remote clusters scenarios -// using validated trusted clusters -func testValidatedTrustedClusters(t *testing.T, suite *integrationTestSuite) { +// TestTrustedClustersV2 tests remote clusters scenarios +// using UpsertTrustedClusterV2 rpc. +func testTrustedClustersV2(t *testing.T, suite *integrationTestSuite) { tr := utils.NewTracer(utils.ThisFunction()).Start() defer tr.Stop() @@ -3229,12 +3229,12 @@ func trustedClusters(t *testing.T, suite *integrationTestSuite, test trustedClus // Note that the trusted cluster resource name must match the cluster name. // Modify the trusted cluster resource name and expect the upsert to fail. trustedCluster.SetName(main.Secrets.SiteName + "-cluster") - _, err = aux.Process.GetAuthServer().UpsertValidatedTrustedCluster(ctx, trustedCluster) - require.Error(t, err, "expected failure due to tc name mismatch") + _, err = aux.Process.GetAuthServer().UpsertTrustedClusterV2(ctx, trustedCluster) + require.ErrorContains(t, err, "trusted cluster resource name must be the same as the remote cluster name", "expected failure due to tc name mismatch") // Modify the trusted cluster resource name back to what it was orignally. trustedCluster.SetName(main.Secrets.SiteName) - _, err = aux.Process.GetAuthServer().UpsertValidatedTrustedCluster(ctx, trustedCluster) + _, err = aux.Process.GetAuthServer().UpsertTrustedClusterV2(ctx, trustedCluster) require.NoError(t, err) } else { _, err = aux.Process.GetAuthServer().UpsertTrustedCluster(ctx, trustedCluster) diff --git a/lib/auth/auth_with_roles.go b/lib/auth/auth_with_roles.go index 4701b3dcd733c..6dbe1d5ed8f35 100644 --- a/lib/auth/auth_with_roles.go +++ b/lib/auth/auth_with_roles.go @@ -4925,8 +4925,9 @@ func (a *ServerWithRoles) UpsertTrustedCluster(ctx context.Context, tc types.Tru return a.authServer.UpsertTrustedCluster(ctx, tc) } -// UpsertValidatedTrustedCluster creates or updates a trusted cluster. -func (a *ServerWithRoles) UpsertValidatedTrustedCluster(ctx context.Context, tc types.TrustedCluster) (types.TrustedCluster, error) { +// UpsertTrustedClusterV2 creates or updates a trusted cluster while also ensuring that the +// resource name and cluster name match. +func (a *ServerWithRoles) UpsertTrustedClusterV2(ctx context.Context, tc types.TrustedCluster) (types.TrustedCluster, error) { // Don't allow a Cloud tenant to be a leaf cluster. if modules.GetModules().Features().Cloud { return nil, trace.NotImplemented("cloud tenants cannot be leaf clusters") @@ -4940,7 +4941,7 @@ func (a *ServerWithRoles) UpsertValidatedTrustedCluster(ctx context.Context, tc return nil, trace.Wrap(err) } - return a.authServer.UpsertValidatedTrustedCluster(ctx, tc) + return a.authServer.UpsertTrustedClusterV2(ctx, tc) } func (a *ServerWithRoles) ValidateTrustedCluster(ctx context.Context, validateRequest *authclient.ValidateTrustedClusterRequest) (*authclient.ValidateTrustedClusterResponse, error) { diff --git a/lib/auth/grpcserver.go b/lib/auth/grpcserver.go index c350998c94049..c0d3c194e909e 100644 --- a/lib/auth/grpcserver.go +++ b/lib/auth/grpcserver.go @@ -2966,7 +2966,7 @@ func (g *GRPCServer) UpsertTrustedClusterV2(ctx context.Context, cluster *types. if err = services.ValidateTrustedCluster(cluster); err != nil { return nil, trace.Wrap(err) } - tc, err := auth.ServerWithRoles.UpsertValidatedTrustedCluster(ctx, cluster) + tc, err := auth.ServerWithRoles.UpsertTrustedClusterV2(ctx, cluster) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/auth/trustedcluster.go b/lib/auth/trustedcluster.go index 89cc132e0e1bc..b5ae710d603b8 100644 --- a/lib/auth/trustedcluster.go +++ b/lib/auth/trustedcluster.go @@ -50,9 +50,9 @@ func (a *Server) UpsertTrustedCluster(ctx context.Context, tc types.TrustedClust return upserted, trace.Wrap(err) } -// UpsertValidatedTrustedCluster creates or toggles a Trusted Cluster relationship. +// UpsertTrustedClusterV2 creates or toggles a Trusted Cluster relationship. // The trusted cluster resource name must match the cluster name. -func (a *Server) UpsertValidatedTrustedCluster(ctx context.Context, tc types.TrustedCluster) (newTrustedCluster types.TrustedCluster, returnErr error) { +func (a *Server) UpsertTrustedClusterV2(ctx context.Context, tc types.TrustedCluster) (newTrustedCluster types.TrustedCluster, returnErr error) { upserted, err := a.upsertTrustedCluster(ctx, tc, true) return upserted, trace.Wrap(err) } From 415d72ec62f3c0090a8e93539e567c78d04ae161 Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Wed, 4 Dec 2024 18:05:19 -0800 Subject: [PATCH 03/25] Use UpsertTrustedClusterV2 in tests --- integration/helpers/trustedclusters.go | 9 ++- integration/integration_test.go | 96 ++++++++++---------------- integration/kube_integration_test.go | 4 +- integration/proxy/proxy_helpers.go | 2 +- lib/auth/auth_test.go | 4 +- lib/auth/trustedcluster_test.go | 14 ++-- tool/teleport/testenv/test_server.go | 4 +- tool/tsh/common/tsh_helper_test.go | 2 +- tool/tsh/common/tsh_test.go | 2 +- 9 files changed, 61 insertions(+), 76 deletions(-) diff --git a/integration/helpers/trustedclusters.go b/integration/helpers/trustedclusters.go index a883fb8635a9e..8570df2ad98f2 100644 --- a/integration/helpers/trustedclusters.go +++ b/integration/helpers/trustedclusters.go @@ -58,12 +58,17 @@ func WaitForTunnelConnections(t *testing.T, authServer *auth.Server, clusterName // propagate and services to start // // Duplicated in tool/tsh/tsh_test.go -func TryCreateTrustedCluster(t *testing.T, authServer *auth.Server, trustedCluster types.TrustedCluster) { +func TryCreateTrustedCluster(t *testing.T, authServer *auth.Server, trustedCluster types.TrustedCluster, skipNameValidation bool) { t.Helper() ctx := context.TODO() for i := 0; i < 10; i++ { log.Debugf("Will create trusted cluster %v, attempt %v.", trustedCluster, i) - _, err := authServer.UpsertTrustedCluster(ctx, trustedCluster) + var err error + if skipNameValidation { + _, err = authServer.UpsertTrustedCluster(ctx, trustedCluster) + } else { + _, err = authServer.UpsertTrustedClusterV2(ctx, trustedCluster) + } if err == nil { return } diff --git a/integration/integration_test.go b/integration/integration_test.go index 7d66bff624602..7ef07dca0188d 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -196,7 +196,7 @@ func TestIntegrations(t *testing.T) { t.Run("TrustedDisabledClusters", suite.bind(testDisabledTrustedClusters)) t.Run("TrustedClustersRoleMapChanges", suite.bind(testTrustedClustersRoleMapChanges)) t.Run("TrustedClustersWithLabels", suite.bind(testTrustedClustersWithLabels)) - t.Run("TrustedClustersV2", suite.bind(testTrustedClustersV2)) + t.Run("TrustedClustersSkipNameValidation", suite.bind(testTrustedClustersSkipNameValidation)) t.Run("TrustedTunnelNode", suite.bind(testTrustedTunnelNode)) t.Run("TwoClustersProxy", suite.bind(testTwoClustersProxy)) t.Run("TwoClustersTunnel", suite.bind(testTwoClustersTunnel)) @@ -2797,7 +2797,7 @@ func testMapRoles(t *testing.T, suite *integrationTestSuite) { require.NoError(t, services.CheckAndSetDefaults(trustedCluster)) // try and upsert a trusted cluster - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster) + helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, false) helpers.WaitForTunnelConnections(t, main.Process.GetAuthServer(), clusterAux, 1) sshPort, _, _ := aux.StartNodeAndProxy(t, "aux-node") @@ -2947,9 +2947,9 @@ type trustedClusterTest struct { // useLabels turns on trusted cluster labels and // verifies RBAC useLabels bool - // validateName uses UpsertValidatedTrustedCluster and ensures that a - // valid cluster name is provided before upserting the trusted cluster. - validateName bool + // skipNameValidation uses the deprecated UpsertTrustedCluster and skips + // cluster name validation. + skipNameValidation bool } // TestTrustedClusters tests remote clusters scenarios @@ -2986,6 +2986,15 @@ func testTrustedClustersWithLabels(t *testing.T, suite *integrationTestSuite) { trustedClusters(t, suite, trustedClusterTest{multiplex: false, useLabels: true}) } +// TestTrustedClustersSkipNameValidation tests remote clusters scenarios +// skipping name validation. +func testTrustedClustersSkipNameValidation(t *testing.T, suite *integrationTestSuite) { + tr := utils.NewTracer(utils.ThisFunction()).Start() + defer tr.Stop() + + trustedClusters(t, suite, trustedClusterTest{skipNameValidation: true}) +} + // TestJumpTrustedClusters tests remote clusters scenarios // using trusted clusters feature using jumphost connection func testJumpTrustedClusters(t *testing.T, suite *integrationTestSuite) { @@ -3013,15 +3022,6 @@ func testMultiplexingTrustedClusters(t *testing.T, suite *integrationTestSuite) trustedClusters(t, suite, trustedClusterTest{multiplex: true}) } -// TestTrustedClustersV2 tests remote clusters scenarios -// using UpsertTrustedClusterV2 rpc. -func testTrustedClustersV2(t *testing.T, suite *integrationTestSuite) { - tr := utils.NewTracer(utils.ThisFunction()).Start() - defer tr.Stop() - - trustedClusters(t, suite, trustedClusterTest{validateName: true}) -} - func standardPortsOrMuxSetup(t *testing.T, mux bool, fds *[]*servicecfg.FileDescriptor) *helpers.InstanceListeners { if mux { return helpers.WebReverseTunnelMuxPortSetup(t, fds) @@ -3132,17 +3132,25 @@ func trustedClusters(t *testing.T, suite *integrationTestSuite, test trustedClus {Remote: mainOps, Local: []string{auxDevs}}, }) - // modify trusted cluster resource name, so it would not - // match the cluster name to check that it does not matter - trustedCluster.SetName(main.Secrets.SiteName + "-cluster") - require.NoError(t, main.Start()) require.NoError(t, aux.Start()) require.NoError(t, services.CheckAndSetDefaults(trustedCluster)) + // Note that the trusted cluster resource name must match the cluster name. + // Modify the trusted cluster resource name and expect the upsert to fail. + trustedCluster.SetName(main.Secrets.SiteName + "-cluster") + + _, err = aux.Process.GetAuthServer().UpsertTrustedClusterV2(ctx, trustedCluster) + require.ErrorContains(t, err, "trusted cluster resource name must be the same as the remote cluster name", "expected failure due to tc name mismatch") + + if !test.skipNameValidation { + // Modify the trusted cluster resource name back to what it was orignally. + trustedCluster.SetName(main.Secrets.SiteName) + } + // try and upsert a trusted cluster - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster) + helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) helpers.WaitForTunnelConnections(t, main.Process.GetAuthServer(), clusterAux, 1) sshPort, _, _ := aux.StartNodeAndProxy(t, "aux-node") @@ -3225,21 +3233,8 @@ func trustedClusters(t *testing.T, suite *integrationTestSuite, test trustedClus require.Error(t, err, "expected tunnel to close and SSH client to start failing") // recreating the trusted cluster should re-establish connection - if test.validateName { - // Note that the trusted cluster resource name must match the cluster name. - // Modify the trusted cluster resource name and expect the upsert to fail. - trustedCluster.SetName(main.Secrets.SiteName + "-cluster") - _, err = aux.Process.GetAuthServer().UpsertTrustedClusterV2(ctx, trustedCluster) - require.ErrorContains(t, err, "trusted cluster resource name must be the same as the remote cluster name", "expected failure due to tc name mismatch") - - // Modify the trusted cluster resource name back to what it was orignally. - trustedCluster.SetName(main.Secrets.SiteName) - _, err = aux.Process.GetAuthServer().UpsertTrustedClusterV2(ctx, trustedCluster) - require.NoError(t, err) - } else { - _, err = aux.Process.GetAuthServer().UpsertTrustedCluster(ctx, trustedCluster) - require.NoError(t, err) - } + _, err = aux.Process.GetAuthServer().UpsertTrustedClusterV2(ctx, trustedCluster) + require.NoError(t, err) // check that remote cluster has been re-provisioned remoteClusters, err = main.Process.GetAuthServer().GetRemoteClusters(ctx) @@ -3380,9 +3375,6 @@ func trustedDisabledCluster(t *testing.T, suite *integrationTestSuite, test trus {Remote: mainOps, Local: []string{auxDevs}}, }) - // modify trusted cluster resource name, so it would not - // match the cluster name to check that it does not matter - trustedCluster.SetName(main.Secrets.SiteName + "-cluster") // disable cluster trustedCluster.SetEnabled(false) @@ -3392,11 +3384,11 @@ func trustedDisabledCluster(t *testing.T, suite *integrationTestSuite, test trus require.NoError(t, services.CheckAndSetDefaults(trustedCluster)) // try and upsert a trusted cluster while disabled - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster) + helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) // try to enable disabled cluster trustedCluster.SetEnabled(true) - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster) + helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) helpers.WaitForTunnelConnections(t, main.Process.GetAuthServer(), clusterAux, 1) helpers.CheckTrustedClustersCanConnect(ctx, t, helpers.TrustedClusterSetup{ @@ -3520,16 +3512,12 @@ func trustedClustersRoleMapChanges(t *testing.T, suite *integrationTestSuite, te {Remote: mainOps, Local: []string{auxDevs}}, }) - // modify trusted cluster resource name, so it would not - // match the cluster name to check that it does not matter - trustedCluster.SetName(main.Secrets.SiteName + "-cluster") - require.NoError(t, main.Start()) require.NoError(t, aux.Start()) require.NoError(t, services.CheckAndSetDefaults(trustedCluster)) - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster) + helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) helpers.WaitForTunnelConnections(t, main.Process.GetAuthServer(), clusterAux, 1) // change role mapping to ensure updating works @@ -3537,7 +3525,7 @@ func trustedClustersRoleMapChanges(t *testing.T, suite *integrationTestSuite, te {Remote: mainDevs, Local: []string{auxDevs}}, }) - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster) + helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) helpers.WaitForTunnelConnections(t, main.Process.GetAuthServer(), clusterAux, 1) helpers.CheckTrustedClustersCanConnect(ctx, t, helpers.TrustedClusterSetup{ @@ -3550,7 +3538,7 @@ func trustedClustersRoleMapChanges(t *testing.T, suite *integrationTestSuite, te // disable the enabled trusted cluster and ensure it no longer works trustedCluster.SetEnabled(false) - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster) + helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) // Wait for both cluster to no longer see each other via reverse tunnels. require.Eventually(t, helpers.WaitForClusters(main.Tunnel, 0), 10*time.Second, 1*time.Second, @@ -3621,17 +3609,13 @@ func testTrustedTunnelNode(t *testing.T, suite *integrationTestSuite) { {Remote: mainDevs, Local: []string{auxDevs}}, }) - // modify trusted cluster resource name, so it would not - // match the cluster name to check that it does not matter - trustedCluster.SetName(main.Secrets.SiteName + "-cluster") - require.NoError(t, main.Start()) require.NoError(t, aux.Start()) require.NoError(t, services.CheckAndSetDefaults(trustedCluster)) // try and upsert a trusted cluster - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster) + helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, false) helpers.WaitForTunnelConnections(t, main.Process.GetAuthServer(), clusterAux, 1) // Create a Teleport instance with a node that dials back to the aux cluster. @@ -3805,17 +3789,13 @@ func testTrustedClusterAgentless(t *testing.T, suite *integrationTestSuite) { {Remote: devsRoleName, Local: []string{devsRoleName}}, }) - // modify trusted cluster resource name, so it would not - // match the cluster name to check that it does not matter - trustedCluster.SetName(main.Secrets.SiteName + "-cluster") - require.NoError(t, main.Start()) require.NoError(t, leaf.Start()) require.NoError(t, services.CheckAndSetDefaults(trustedCluster)) // try and upsert a trusted cluster - helpers.TryCreateTrustedCluster(t, leaf.Process.GetAuthServer(), trustedCluster) + helpers.TryCreateTrustedCluster(t, leaf.Process.GetAuthServer(), trustedCluster, false) helpers.WaitForTunnelConnections(t, main.Process.GetAuthServer(), clusterAux, 1) // Wait for both cluster to see each other via reverse tunnels. @@ -5638,7 +5618,7 @@ func testRotateTrustedClusters(t *testing.T, suite *integrationTestSuite) { lib.SetInsecureDevMode(true) defer lib.SetInsecureDevMode(false) - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster) + helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, false) helpers.WaitForTunnelConnections(t, svc.GetAuthServer(), aux.Secrets.SiteName, 1) // capture credentials before reload has started to simulate old client @@ -7569,7 +7549,7 @@ func createTrustedClusterPair(t *testing.T, suite *integrationTestSuite, extraSe t.Cleanup(func() { leaf.StopAll() }) require.NoError(t, services.CheckAndSetDefaults(trustedCluster)) - helpers.TryCreateTrustedCluster(t, leaf.Process.GetAuthServer(), trustedCluster) + helpers.TryCreateTrustedCluster(t, leaf.Process.GetAuthServer(), trustedCluster, false) helpers.WaitForTunnelConnections(t, root.Process.GetAuthServer(), leafName, 1) _, _, rootProxySSHPort := root.StartNodeAndProxy(t, "root-zero") diff --git a/integration/kube_integration_test.go b/integration/kube_integration_test.go index ad7d745d89452..ceef0b6e3f8af 100644 --- a/integration/kube_integration_test.go +++ b/integration/kube_integration_test.go @@ -695,7 +695,7 @@ func testKubeTrustedClustersClientCert(t *testing.T, suite *KubeSuite) { var upsertSuccess bool for i := 0; i < 10; i++ { log.Debugf("Will create trusted cluster %v, attempt %v", trustedCluster, i) - _, err = aux.Process.GetAuthServer().UpsertTrustedCluster(ctx, trustedCluster) + _, err = aux.Process.GetAuthServer().UpsertTrustedClusterV2(ctx, trustedCluster) if err != nil { if trace.IsConnectionProblem(err) { log.Debugf("retrying on connection problem: %v", err) @@ -971,7 +971,7 @@ func testKubeTrustedClustersSNI(t *testing.T, suite *KubeSuite) { var upsertSuccess bool for i := 0; i < 10; i++ { log.Debugf("Will create trusted cluster %v, attempt %v", trustedCluster, i) - _, err = aux.Process.GetAuthServer().UpsertTrustedCluster(ctx, trustedCluster) + _, err = aux.Process.GetAuthServer().UpsertTrustedClusterV2(ctx, trustedCluster) if err != nil { if trace.IsConnectionProblem(err) { log.Debugf("retrying on connection problem: %v", err) diff --git a/integration/proxy/proxy_helpers.go b/integration/proxy/proxy_helpers.go index 422695a363d45..7a735f5f8f191 100644 --- a/integration/proxy/proxy_helpers.go +++ b/integration/proxy/proxy_helpers.go @@ -184,7 +184,7 @@ func newSuite(t *testing.T, opts ...proxySuiteOptionsFunc) *Suite { } if options.trustedCluster != nil { - helpers.TryCreateTrustedCluster(t, suite.leaf.Process.GetAuthServer(), options.trustedCluster) + helpers.TryCreateTrustedCluster(t, suite.leaf.Process.GetAuthServer(), options.trustedCluster, false) helpers.WaitForTunnelConnections(t, suite.root.Process.GetAuthServer(), suite.leaf.Secrets.SiteName, 1) } diff --git a/lib/auth/auth_test.go b/lib/auth/auth_test.go index e4978e32e358a..b7f9e2203754e 100644 --- a/lib/auth/auth_test.go +++ b/lib/auth/auth_test.go @@ -1262,7 +1262,7 @@ func TestTrustedClusterCRUDEventEmitted(t *testing.T) { // test create event for switch case: when tc exists but enabled is false tc.SetEnabled(false) - _, err = s.a.UpsertTrustedCluster(ctx, tc) + _, err = s.a.UpsertTrustedClusterV2(ctx, tc) require.NoError(t, err) require.Equal(t, events.TrustedClusterCreateEvent, s.mockEmitter.LastEvent().GetType()) createEvt := s.mockEmitter.LastEvent().(*apievents.TrustedClusterCreate) @@ -1272,7 +1272,7 @@ func TestTrustedClusterCRUDEventEmitted(t *testing.T) { // test create event for switch case: when tc exists but enabled is true tc.SetEnabled(true) - _, err = s.a.UpsertTrustedCluster(ctx, tc) + _, err = s.a.UpsertTrustedClusterV2(ctx, tc) require.NoError(t, err) require.Equal(t, events.TrustedClusterCreateEvent, s.mockEmitter.LastEvent().GetType()) createEvt = s.mockEmitter.LastEvent().(*apievents.TrustedClusterCreate) diff --git a/lib/auth/trustedcluster_test.go b/lib/auth/trustedcluster_test.go index c65287c5064ff..426e30171001c 100644 --- a/lib/auth/trustedcluster_test.go +++ b/lib/auth/trustedcluster_test.go @@ -489,7 +489,7 @@ func TestUpsertTrustedCluster(t *testing.T) { ProxyAddress: "localhost", }) require.NoError(t, err) - _, err = a.UpsertTrustedCluster(ctx, trustedCluster) + _, err = a.UpsertTrustedClusterV2(ctx, trustedCluster) require.ErrorContains(t, err, "someNewRole") }) t.Run("Change role map of existing enabled trusted cluster", func(t *testing.T) { @@ -505,7 +505,7 @@ func TestUpsertTrustedCluster(t *testing.T) { ProxyAddress: "localhost", }) require.NoError(t, err) - _, err = a.UpsertTrustedCluster(ctx, trustedCluster) + _, err = a.UpsertTrustedClusterV2(ctx, trustedCluster) require.NoError(t, err) }) t.Run("Disable existing trusted cluster", func(t *testing.T) { @@ -521,7 +521,7 @@ func TestUpsertTrustedCluster(t *testing.T) { ProxyAddress: "localhost", }) require.NoError(t, err) - _, err = a.UpsertTrustedCluster(ctx, trustedCluster) + _, err = a.UpsertTrustedClusterV2(ctx, trustedCluster) require.NoError(t, err) }) t.Run("Change role map of existing disabled trusted cluster", func(t *testing.T) { @@ -537,7 +537,7 @@ func TestUpsertTrustedCluster(t *testing.T) { ProxyAddress: "localhost", }) require.NoError(t, err) - _, err = a.UpsertTrustedCluster(ctx, trustedCluster) + _, err = a.UpsertTrustedClusterV2(ctx, trustedCluster) require.NoError(t, err) }) t.Run("Enable existing trusted cluster", func(t *testing.T) { @@ -553,7 +553,7 @@ func TestUpsertTrustedCluster(t *testing.T) { ProxyAddress: "localhost", }) require.NoError(t, err) - _, err = a.UpsertTrustedCluster(ctx, trustedCluster) + _, err = a.UpsertTrustedClusterV2(ctx, trustedCluster) require.NoError(t, err) }) t.Run("Cloud prohibits being a leaf cluster", func(t *testing.T) { @@ -569,7 +569,7 @@ func TestUpsertTrustedCluster(t *testing.T) { require.NoError(t, err, "creating trusted cluster resource") server := ServerWithRoles{authServer: a} - _, err = server.UpsertTrustedCluster(ctx, tc) - require.True(t, trace.IsNotImplemented(err), "UpsertTrustedCluster returned an unexpected error, got = %v (%T), want trace.NotImplementedError", err, err) + _, err = server.UpsertTrustedClusterV2(ctx, tc) + require.True(t, trace.IsNotImplemented(err), "UpsertTrustedClusterV2 returned an unexpected error, got = %v (%T), want trace.NotImplementedError", err, err) }) } diff --git a/tool/teleport/testenv/test_server.go b/tool/teleport/testenv/test_server.go index 5d4607223c292..3e034d9fdf0d6 100644 --- a/tool/teleport/testenv/test_server.go +++ b/tool/teleport/testenv/test_server.go @@ -417,7 +417,7 @@ func SetupTrustedCluster(ctx context.Context, t *testing.T, rootServer, leafServ rootProxyTunnelAddr, err := rootServer.ProxyTunnelAddr() require.NoError(t, err) - tc, err := types.NewTrustedCluster("root-cluster", types.TrustedClusterSpecV2{ + tc, err := types.NewTrustedCluster(rootServer.Config.Auth.ClusterName.GetClusterName(), types.TrustedClusterSpecV2{ Enabled: true, Token: StaticToken, ProxyAddress: rootProxyAddr.String(), @@ -431,7 +431,7 @@ func SetupTrustedCluster(ctx context.Context, t *testing.T, rootServer, leafServ }) require.NoError(t, err) - _, err = leafServer.GetAuthServer().UpsertTrustedCluster(ctx, tc) + _, err = leafServer.GetAuthServer().UpsertTrustedClusterV2(ctx, tc) require.NoError(t, err) require.EventuallyWithT(t, func(t *assert.CollectT) { diff --git a/tool/tsh/common/tsh_helper_test.go b/tool/tsh/common/tsh_helper_test.go index 380b012805d3c..dad5c19bc5913 100644 --- a/tool/tsh/common/tsh_helper_test.go +++ b/tool/tsh/common/tsh_helper_test.go @@ -249,7 +249,7 @@ func (s *suite) setupLeafCluster(t *testing.T, options testSuiteOptions) { } s.leaf = runTeleport(t, cfg) - _, err = s.leaf.GetAuthServer().UpsertTrustedCluster(s.leaf.ExitContext(), tc) + _, err = s.leaf.GetAuthServer().UpsertTrustedClusterV2(s.leaf.ExitContext(), tc) require.NoError(t, err) } diff --git a/tool/tsh/common/tsh_test.go b/tool/tsh/common/tsh_test.go index d8c58df31ec99..c40130f02e0ad 100644 --- a/tool/tsh/common/tsh_test.go +++ b/tool/tsh/common/tsh_test.go @@ -2543,7 +2543,7 @@ func tryCreateTrustedCluster(t *testing.T, authServer *auth.Server, trustedClust ctx := context.TODO() for i := 0; i < 10; i++ { log.Debugf("Will create trusted cluster %v, attempt %v.", trustedCluster, i) - _, err := authServer.UpsertTrustedCluster(ctx, trustedCluster) + _, err := authServer.UpsertTrustedClusterV2(ctx, trustedCluster) if err == nil { return } From 7049271b58e974f0ce28ee2aa3bc799f9eb44563 Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Thu, 5 Dec 2024 10:01:46 -0800 Subject: [PATCH 04/25] Address feedback - Remove unnecessary ping - Update error messages - Use skipNameValidation consts - Validate cluster name before establishing trust - Do not reveal cluster name in error message - Use BadParameter instead of CompareFailed --- api/client/client.go | 19 +++--- integration/integration_test.go | 16 +++-- integration/proxy/proxy_helpers.go | 3 +- lib/auth/trustedcluster.go | 96 +++++++++++++++++++++--------- 4 files changed, 88 insertions(+), 46 deletions(-) diff --git a/api/client/client.go b/api/client/client.go index 281d7d476ce71..fed570dc0539a 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -2285,7 +2285,10 @@ func (c *Client) UpsertTrustedCluster(ctx context.Context, trustedCluster types. return nil, trace.BadParameter("invalid type %T", trustedCluster) } resp, err := c.grpc.UpsertTrustedCluster(ctx, trustedClusterV2) - return resp, trace.Wrap(err) + if err != nil { + return nil, trace.Wrap(err) + } + return resp, nil } // UpsertTrustedClusterV2 creates or updates a Trusted Cluster. @@ -2295,17 +2298,11 @@ func (c *Client) UpsertTrustedClusterV2(ctx context.Context, trustedCluster type return nil, trace.BadParameter("invalid type %T", trustedCluster) } resp, err := c.grpc.UpsertTrustedClusterV2(ctx, trustedClusterV2) - if trace.IsNotImplemented(err) { - // Try to print a nicer error message when newer clients connect to - // older auth servers that don't recognize the new gRPC. - authVersion := "unknown" - if pingResp, err := c.Ping(ctx); err == nil && pingResp.ServerVersion != "" { - authVersion = pingResp.ServerVersion - } - return resp, trace.Wrap(err, "client version (%s) is likely newer than your auth server version (%s), "+ - "consider upgrading your auth server", api.Version, authVersion) + if err != nil && trace.IsNotImplemented(err) { + return nil, trace.Wrap(err, "control plane does not support this operation, "+ + "consider upgrading your control plane") } - return resp, trace.Wrap(err) + return resp, nil } // DeleteTrustedCluster deletes a Trusted Cluster by name. diff --git a/integration/integration_test.go b/integration/integration_test.go index 7ef07dca0188d..11f4f66377a2d 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -2797,7 +2797,8 @@ func testMapRoles(t *testing.T, suite *integrationTestSuite) { require.NoError(t, services.CheckAndSetDefaults(trustedCluster)) // try and upsert a trusted cluster - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, false) + const skipNameValidation = false + helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, skipNameValidation) helpers.WaitForTunnelConnections(t, main.Process.GetAuthServer(), clusterAux, 1) sshPort, _, _ := aux.StartNodeAndProxy(t, "aux-node") @@ -3615,7 +3616,8 @@ func testTrustedTunnelNode(t *testing.T, suite *integrationTestSuite) { require.NoError(t, services.CheckAndSetDefaults(trustedCluster)) // try and upsert a trusted cluster - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, false) + const skipNameValidation = false + helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, skipNameValidation) helpers.WaitForTunnelConnections(t, main.Process.GetAuthServer(), clusterAux, 1) // Create a Teleport instance with a node that dials back to the aux cluster. @@ -3795,7 +3797,8 @@ func testTrustedClusterAgentless(t *testing.T, suite *integrationTestSuite) { require.NoError(t, services.CheckAndSetDefaults(trustedCluster)) // try and upsert a trusted cluster - helpers.TryCreateTrustedCluster(t, leaf.Process.GetAuthServer(), trustedCluster, false) + const skipNameValidation = false + helpers.TryCreateTrustedCluster(t, leaf.Process.GetAuthServer(), trustedCluster, skipNameValidation) helpers.WaitForTunnelConnections(t, main.Process.GetAuthServer(), clusterAux, 1) // Wait for both cluster to see each other via reverse tunnels. @@ -5618,7 +5621,8 @@ func testRotateTrustedClusters(t *testing.T, suite *integrationTestSuite) { lib.SetInsecureDevMode(true) defer lib.SetInsecureDevMode(false) - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, false) + const skipNameValidation = false + helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, skipNameValidation) helpers.WaitForTunnelConnections(t, svc.GetAuthServer(), aux.Secrets.SiteName, 1) // capture credentials before reload has started to simulate old client @@ -7549,7 +7553,9 @@ func createTrustedClusterPair(t *testing.T, suite *integrationTestSuite, extraSe t.Cleanup(func() { leaf.StopAll() }) require.NoError(t, services.CheckAndSetDefaults(trustedCluster)) - helpers.TryCreateTrustedCluster(t, leaf.Process.GetAuthServer(), trustedCluster, false) + + const skipNameValidation = false + helpers.TryCreateTrustedCluster(t, leaf.Process.GetAuthServer(), trustedCluster, skipNameValidation) helpers.WaitForTunnelConnections(t, root.Process.GetAuthServer(), leafName, 1) _, _, rootProxySSHPort := root.StartNodeAndProxy(t, "root-zero") diff --git a/integration/proxy/proxy_helpers.go b/integration/proxy/proxy_helpers.go index 7a735f5f8f191..fa459c415a55b 100644 --- a/integration/proxy/proxy_helpers.go +++ b/integration/proxy/proxy_helpers.go @@ -184,7 +184,8 @@ func newSuite(t *testing.T, opts ...proxySuiteOptionsFunc) *Suite { } if options.trustedCluster != nil { - helpers.TryCreateTrustedCluster(t, suite.leaf.Process.GetAuthServer(), options.trustedCluster, false) + const skipNameValidation = false + helpers.TryCreateTrustedCluster(t, suite.leaf.Process.GetAuthServer(), options.trustedCluster, skipNameValidation) helpers.WaitForTunnelConnections(t, suite.root.Process.GetAuthServer(), suite.leaf.Secrets.SiteName, 1) } diff --git a/lib/auth/trustedcluster.go b/lib/auth/trustedcluster.go index b5ae710d603b8..1f316dd428b47 100644 --- a/lib/auth/trustedcluster.go +++ b/lib/auth/trustedcluster.go @@ -30,6 +30,7 @@ import ( "github.com/gravitational/trace" "github.com/gravitational/teleport" + "github.com/gravitational/teleport/api/client/webclient" tracehttp "github.com/gravitational/teleport/api/observability/tracing/http" "github.com/gravitational/teleport/api/types" apievents "github.com/gravitational/teleport/api/types/events" @@ -46,13 +47,15 @@ import ( // UpsertTrustedCluster creates or toggles a Trusted Cluster relationship. func (a *Server) UpsertTrustedCluster(ctx context.Context, tc types.TrustedCluster) (newTrustedCluster types.TrustedCluster, returnErr error) { - upserted, err := a.upsertTrustedCluster(ctx, tc, false) + const validateName = false + upserted, err := a.upsertTrustedCluster(ctx, tc, validateName) return upserted, trace.Wrap(err) } // UpsertTrustedClusterV2 creates or toggles a Trusted Cluster relationship. // The trusted cluster resource name must match the cluster name. func (a *Server) UpsertTrustedClusterV2(ctx context.Context, tc types.TrustedCluster) (newTrustedCluster types.TrustedCluster, returnErr error) { + const validateName = true upserted, err := a.upsertTrustedCluster(ctx, tc, true) return upserted, trace.Wrap(err) } @@ -299,6 +302,19 @@ func (a *Server) establishTrust(ctx context.Context, trustedCluster types.Truste } } + clt, err := a.trustedClusterClient(trustedCluster) + if err != nil { + return nil, trace.Wrap(err) + } + + // Validate cluster names before establishing trust to avoid unnecessarily + // creating a remote_cluster resource on the root cluster. + if validateName { + if err := a.validateTrustedClusterName(ctx, clt, trustedCluster); err != nil { + return nil, trace.Wrap(err) + } + } + // create a request to validate a trusted cluster (token and local certificate authorities) validateRequest := authclient.ValidateTrustedClusterRequest{ Token: trustedCluster.GetToken(), @@ -310,7 +326,7 @@ func (a *Server) establishTrust(ctx context.Context, trustedCluster types.Truste log.Infof("Sending validate request; token=%s, CAs=%v", backend.MaskKeyName(validateRequest.Token), validateRequest.CAs) // send the request to the remote auth server via the proxy - validateResponse, err := a.sendValidateRequestToProxy(trustedCluster.GetProxyAddress(), &validateRequest) + validateResponse, err := a.sendValidateRequestToProxy(ctx, clt, &validateRequest) if err != nil { log.Error(err) if strings.Contains(err.Error(), "x509") { @@ -336,8 +352,8 @@ func (a *Server) establishTrust(ctx context.Context, trustedCluster types.Truste return nil, trace.BadParameter("remote cluster name can not be the same as local cluster name") } if validateName && trustedCluster.GetName() != remoteClusterName { - return nil, trace.CompareFailed("trusted cluster resource name must be the same as the remote cluster name. got: %q, expected: %q", - trustedCluster.GetName(), remoteClusterName) + return nil, trace.BadParameter("trusted cluster resource name must be the same as the remote cluster name. got: %q", + trustedCluster.GetName()) } } } @@ -564,10 +580,54 @@ func (a *Server) validateTrustedClusterToken(ctx context.Context, tokenName stri return provisionToken.GetMetadata().Labels, nil } -func (a *Server) sendValidateRequestToProxy(host string, validateRequest *authclient.ValidateTrustedClusterRequest) (*authclient.ValidateTrustedClusterResponse, error) { +func (a *Server) sendValidateRequestToProxy(ctx context.Context, clt *roundtrip.Client, validateRequest *authclient.ValidateTrustedClusterRequest) (*authclient.ValidateTrustedClusterResponse, error) { + validateRequestRaw, err := validateRequest.ToRaw() + if err != nil { + return nil, trace.Wrap(err) + } + + out, err := httplib.ConvertResponse(clt.PostJSON(ctx, clt.Endpoint("webapi", "trustedclusters", "validate"), validateRequestRaw)) + if err != nil { + return nil, trace.Wrap(err) + } + + var validateResponseRaw authclient.ValidateTrustedClusterResponseRaw + err = json.Unmarshal(out.Bytes(), &validateResponseRaw) + if err != nil { + return nil, trace.Wrap(err) + } + + validateResponse, err := validateResponseRaw.ToNative() + if err != nil { + return nil, trace.Wrap(err) + } + + return validateResponse, nil +} + +// validateTrustedClusterName validates that the trusted cluster resource name +// matches the cluster name. +func (a *Server) validateTrustedClusterName(ctx context.Context, clt *roundtrip.Client, trustedCluster types.TrustedCluster) error { + out, err := httplib.ConvertResponse(clt.Get(ctx, clt.Endpoint("webapi", "ping"), nil)) + if err != nil { + return trace.Wrap(err) + } + var pingResponse webclient.PingResponse + if err = json.Unmarshal(out.Bytes(), &pingResponse); err != nil { + return trace.Wrap(err) + } + if trustedCluster.GetName() != pingResponse.ClusterName { + return trace.BadParameter("trusted cluster resource name must be the same as the remote cluster name. got: %q", + trustedCluster.GetName()) + } + return nil +} + +// trustedClusterClient returns a roundtrip client for the trusted cluster. +func (a *Server) trustedClusterClient(trustedCluster types.TrustedCluster) (*roundtrip.Client, error) { proxyAddr := url.URL{ Scheme: "https", - Host: host, + Host: trustedCluster.GetProxyAddress(), } opts := []roundtrip.ClientParam{ @@ -600,29 +660,7 @@ func (a *Server) sendValidateRequestToProxy(host string, validateRequest *authcl if err != nil { return nil, trace.Wrap(err) } - - validateRequestRaw, err := validateRequest.ToRaw() - if err != nil { - return nil, trace.Wrap(err) - } - - out, err := httplib.ConvertResponse(clt.PostJSON(context.TODO(), clt.Endpoint("webapi", "trustedclusters", "validate"), validateRequestRaw)) - if err != nil { - return nil, trace.Wrap(err) - } - - var validateResponseRaw authclient.ValidateTrustedClusterResponseRaw - err = json.Unmarshal(out.Bytes(), &validateResponseRaw) - if err != nil { - return nil, trace.Wrap(err) - } - - validateResponse, err := validateResponseRaw.ToNative() - if err != nil { - return nil, trace.Wrap(err) - } - - return validateResponse, nil + return clt, err } // createReverseTunnel will create a services.ReverseTunnel givenin the From 1933ba6897a3423f2656fc6f8cedc92727bfba41 Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Thu, 5 Dec 2024 15:30:09 -0800 Subject: [PATCH 05/25] Use webclient.Find --- lib/auth/trustedcluster.go | 106 +++++++++++++++++-------------------- 1 file changed, 48 insertions(+), 58 deletions(-) diff --git a/lib/auth/trustedcluster.go b/lib/auth/trustedcluster.go index 1f316dd428b47..1be35eb74f134 100644 --- a/lib/auth/trustedcluster.go +++ b/lib/auth/trustedcluster.go @@ -47,16 +47,16 @@ import ( // UpsertTrustedCluster creates or toggles a Trusted Cluster relationship. func (a *Server) UpsertTrustedCluster(ctx context.Context, tc types.TrustedCluster) (newTrustedCluster types.TrustedCluster, returnErr error) { - const validateName = false - upserted, err := a.upsertTrustedCluster(ctx, tc, validateName) + const validateNameFalse = false + upserted, err := a.upsertTrustedCluster(ctx, tc, validateNameFalse) return upserted, trace.Wrap(err) } // UpsertTrustedClusterV2 creates or toggles a Trusted Cluster relationship. // The trusted cluster resource name must match the cluster name. func (a *Server) UpsertTrustedClusterV2(ctx context.Context, tc types.TrustedCluster) (newTrustedCluster types.TrustedCluster, returnErr error) { - const validateName = true - upserted, err := a.upsertTrustedCluster(ctx, tc, true) + const validateNameTrue = true + upserted, err := a.upsertTrustedCluster(ctx, tc, validateNameTrue) return upserted, trace.Wrap(err) } @@ -302,15 +302,10 @@ func (a *Server) establishTrust(ctx context.Context, trustedCluster types.Truste } } - clt, err := a.trustedClusterClient(trustedCluster) - if err != nil { - return nil, trace.Wrap(err) - } - // Validate cluster names before establishing trust to avoid unnecessarily // creating a remote_cluster resource on the root cluster. if validateName { - if err := a.validateTrustedClusterName(ctx, clt, trustedCluster); err != nil { + if err := a.validateTrustedClusterName(ctx, trustedCluster); err != nil { return nil, trace.Wrap(err) } } @@ -326,7 +321,7 @@ func (a *Server) establishTrust(ctx context.Context, trustedCluster types.Truste log.Infof("Sending validate request; token=%s, CAs=%v", backend.MaskKeyName(validateRequest.Token), validateRequest.CAs) // send the request to the remote auth server via the proxy - validateResponse, err := a.sendValidateRequestToProxy(ctx, clt, &validateRequest) + validateResponse, err := a.sendValidateRequestToProxy(trustedCluster.GetProxyAddress(), &validateRequest) if err != nil { log.Error(err) if strings.Contains(err.Error(), "x509") { @@ -580,54 +575,10 @@ func (a *Server) validateTrustedClusterToken(ctx context.Context, tokenName stri return provisionToken.GetMetadata().Labels, nil } -func (a *Server) sendValidateRequestToProxy(ctx context.Context, clt *roundtrip.Client, validateRequest *authclient.ValidateTrustedClusterRequest) (*authclient.ValidateTrustedClusterResponse, error) { - validateRequestRaw, err := validateRequest.ToRaw() - if err != nil { - return nil, trace.Wrap(err) - } - - out, err := httplib.ConvertResponse(clt.PostJSON(ctx, clt.Endpoint("webapi", "trustedclusters", "validate"), validateRequestRaw)) - if err != nil { - return nil, trace.Wrap(err) - } - - var validateResponseRaw authclient.ValidateTrustedClusterResponseRaw - err = json.Unmarshal(out.Bytes(), &validateResponseRaw) - if err != nil { - return nil, trace.Wrap(err) - } - - validateResponse, err := validateResponseRaw.ToNative() - if err != nil { - return nil, trace.Wrap(err) - } - - return validateResponse, nil -} - -// validateTrustedClusterName validates that the trusted cluster resource name -// matches the cluster name. -func (a *Server) validateTrustedClusterName(ctx context.Context, clt *roundtrip.Client, trustedCluster types.TrustedCluster) error { - out, err := httplib.ConvertResponse(clt.Get(ctx, clt.Endpoint("webapi", "ping"), nil)) - if err != nil { - return trace.Wrap(err) - } - var pingResponse webclient.PingResponse - if err = json.Unmarshal(out.Bytes(), &pingResponse); err != nil { - return trace.Wrap(err) - } - if trustedCluster.GetName() != pingResponse.ClusterName { - return trace.BadParameter("trusted cluster resource name must be the same as the remote cluster name. got: %q", - trustedCluster.GetName()) - } - return nil -} - -// trustedClusterClient returns a roundtrip client for the trusted cluster. -func (a *Server) trustedClusterClient(trustedCluster types.TrustedCluster) (*roundtrip.Client, error) { +func (a *Server) sendValidateRequestToProxy(host string, validateRequest *authclient.ValidateTrustedClusterRequest) (*authclient.ValidateTrustedClusterResponse, error) { proxyAddr := url.URL{ Scheme: "https", - Host: trustedCluster.GetProxyAddress(), + Host: host, } opts := []roundtrip.ClientParam{ @@ -660,7 +611,46 @@ func (a *Server) trustedClusterClient(trustedCluster types.TrustedCluster) (*rou if err != nil { return nil, trace.Wrap(err) } - return clt, err + validateRequestRaw, err := validateRequest.ToRaw() + if err != nil { + return nil, trace.Wrap(err) + } + + out, err := httplib.ConvertResponse(clt.PostJSON(context.TODO(), clt.Endpoint("webapi", "trustedclusters", "validate"), validateRequestRaw)) + if err != nil { + return nil, trace.Wrap(err) + } + + var validateResponseRaw authclient.ValidateTrustedClusterResponseRaw + err = json.Unmarshal(out.Bytes(), &validateResponseRaw) + if err != nil { + return nil, trace.Wrap(err) + } + + validateResponse, err := validateResponseRaw.ToNative() + if err != nil { + return nil, trace.Wrap(err) + } + + return validateResponse, nil +} + +// validateTrustedClusterName validates that the trusted cluster resource name +// matches the cluster name. +func (a *Server) validateTrustedClusterName(ctx context.Context, trustedCluster types.TrustedCluster) error { + resp, err := webclient.Find(&webclient.Config{ + Context: ctx, + ProxyAddr: trustedCluster.GetProxyAddress(), + Insecure: lib.IsInsecureDevMode(), + }) + if err != nil { + return trace.Wrap(err) + } + if trustedCluster.GetName() != resp.ClusterName { + return trace.BadParameter("trusted cluster resource name must be the same as the remote cluster name. got: %q", + trustedCluster.GetName()) + } + return nil } // createReverseTunnel will create a services.ReverseTunnel givenin the From cb1f827d90504137b6855e18ebd4552cb77692a6 Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Thu, 5 Dec 2024 15:44:04 -0800 Subject: [PATCH 06/25] Fix test/lint --- integration/integration_test.go | 6 +----- tool/tctl/common/resource_command.go | 2 ++ 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/integration/integration_test.go b/integration/integration_test.go index 11f4f66377a2d..672b2cb247a5a 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -2787,10 +2787,6 @@ func testMapRoles(t *testing.T, suite *integrationTestSuite) { {Remote: mainDevs, Local: []string{auxDevs}}, }) - // modify trusted cluster resource name so it would not - // match the cluster name to check that it does not matter - trustedCluster.SetName(main.Secrets.SiteName + "-cluster") - require.NoError(t, main.Start()) require.NoError(t, aux.Start()) @@ -3146,7 +3142,7 @@ func trustedClusters(t *testing.T, suite *integrationTestSuite, test trustedClus require.ErrorContains(t, err, "trusted cluster resource name must be the same as the remote cluster name", "expected failure due to tc name mismatch") if !test.skipNameValidation { - // Modify the trusted cluster resource name back to what it was orignally. + // Modify the trusted cluster resource name back to what it was originally. trustedCluster.SetName(main.Secrets.SiteName) } diff --git a/tool/tctl/common/resource_command.go b/tool/tctl/common/resource_command.go index e8d798d8c7896..5d93425a53fbe 100644 --- a/tool/tctl/common/resource_command.go +++ b/tool/tctl/common/resource_command.go @@ -395,6 +395,8 @@ func (rc *ResourceCommand) createTrustedCluster(ctx context.Context, client *aut return trace.AlreadyExists("trusted cluster %q already exists", name) } + //nolint:staticcheck // SA1019. UpsertTrustedCluster is deprecated but will + // continue being supported for tctl clients. out, err := client.UpsertTrustedCluster(ctx, tc) if err != nil { // If force is used and UpsertTrustedCluster returns trace.AlreadyExists, From 6243ff2009e9143c33e099934d409e1ea7f881ae Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Fri, 6 Dec 2024 12:20:42 -0800 Subject: [PATCH 07/25] Allow label updates --- api/types/trustedcluster.go | 8 -------- lib/auth/trustedcluster_test.go | 32 ++++++++++++++++++++++---------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/api/types/trustedcluster.go b/api/types/trustedcluster.go index ea7b309228427..17d397525a7df 100644 --- a/api/types/trustedcluster.go +++ b/api/types/trustedcluster.go @@ -262,14 +262,6 @@ func (c *TrustedClusterV2) CanChangeStateTo(t TrustedCluster) error { if !slices.Equal(c.GetRoles(), t.GetRoles()) { return immutableFieldErr("roles") } - - if c.GetEnabled() == t.GetEnabled() && c.GetRoleMap().IsEqual(t.GetRoleMap()) { - if t.GetEnabled() { - return trace.AlreadyExists("leaf cluster is already enabled, this update would have no effect") - } - return trace.AlreadyExists("leaf cluster is already disabled, this update would have no effect") - } - return nil } diff --git a/lib/auth/trustedcluster_test.go b/lib/auth/trustedcluster_test.go index 426e30171001c..7de239088552b 100644 --- a/lib/auth/trustedcluster_test.go +++ b/lib/auth/trustedcluster_test.go @@ -453,17 +453,23 @@ func TestUpsertTrustedCluster(t *testing.T) { err = a.SetStaticTokens(tks) require.NoError(t, err) - trustedCluster, err := types.NewTrustedCluster("trustedcluster", - types.TrustedClusterSpecV2{ - Enabled: true, - RoleMap: []types.RoleMapping{ - { - Local: []string{"someRole"}, - Remote: "someRole", - }, + role, err := types.NewRole("test-role", types.RoleSpecV6{}) + require.NoError(t, err) + _, err = a.UpsertRole(ctx, role) + require.NoError(t, err) + + trustedClusterSpec := types.TrustedClusterSpecV2{ + Enabled: true, + RoleMap: []types.RoleMapping{ + { + Local: []string{"test-role"}, + Remote: "someRole", }, - ProxyAddress: "localhost", - }) + }, + ProxyAddress: "localhost", + } + + trustedCluster, err := types.NewTrustedCluster("trustedcluster", trustedClusterSpec) require.NoError(t, err) ca := suite.NewTestCA(types.UserCA, "trustedcluster") @@ -572,4 +578,10 @@ func TestUpsertTrustedCluster(t *testing.T) { _, err = server.UpsertTrustedClusterV2(ctx, tc) require.True(t, trace.IsNotImplemented(err), "UpsertTrustedClusterV2 returned an unexpected error, got = %v (%T), want trace.NotImplementedError", err, err) }) + t.Run("Upsert unmodified trusted cluster", func(t *testing.T) { + trustedCluster, err := types.NewTrustedCluster("trustedcluster", trustedClusterSpec) + require.NoError(t, err) + _, err = a.UpsertTrustedClusterV2(ctx, trustedCluster) + require.NoError(t, err) + }) } From 4142256a1982e2721132a338955a20caeb929bcb Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Fri, 6 Dec 2024 13:23:01 -0800 Subject: [PATCH 08/25] Fix test --- tool/tsh/common/tsh_helper_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tool/tsh/common/tsh_helper_test.go b/tool/tsh/common/tsh_helper_test.go index dad5c19bc5913..85ec86097b3bd 100644 --- a/tool/tsh/common/tsh_helper_test.go +++ b/tool/tsh/common/tsh_helper_test.go @@ -230,7 +230,7 @@ func (s *suite) setupLeafCluster(t *testing.T, options testSuiteOptions) { tunnelAddr = s.root.Config.Proxy.ReverseTunnelListenAddr.String() } - tc, err := types.NewTrustedCluster("root-cluster", types.TrustedClusterSpecV2{ + tc, err := types.NewTrustedCluster(s.root.Config.Auth.ClusterName.GetClusterName(), types.TrustedClusterSpecV2{ Enabled: true, Token: staticToken, ProxyAddress: s.root.Config.Proxy.WebAddr.String(), From fb595da0e28a70cc84ec2fe03a389cf65367174b Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Wed, 4 Dec 2024 13:05:46 -0800 Subject: [PATCH 09/25] Update CRDs 1. Run `make manifests`. 2. Run `make -C crdgen update-protos`. 3. Run `make -C crdgen update-snapshot`. --- ...ces.teleport.dev_openssheiceserversv2.yaml | 14 +++ ...sources.teleport.dev_opensshserversv2.yaml | 14 +++ .../golden/resources.teleport.dev_roles.yaml | 48 ++++++++ .../resources.teleport.dev_rolesv6.yaml | 24 ++++ .../resources.teleport.dev_rolesv7.yaml | 24 ++++ .../legacy/client/proto/authservice.proto | 33 ++++-- .../teleport/legacy/client/proto/event.proto | 2 + .../teleport/legacy/types/events/events.proto | 111 ++++++++++++++++++ .../teleport/legacy/types/types.proto | 99 ++++++++++++++-- 9 files changed, 348 insertions(+), 21 deletions(-) diff --git a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_openssheiceserversv2.yaml b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_openssheiceserversv2.yaml index 3617909ae6a67..bad8469a76fb6 100644 --- a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_openssheiceserversv2.yaml +++ b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_openssheiceserversv2.yaml @@ -88,6 +88,20 @@ spec: type: string type: object type: object + github: + description: GitHub contains info about GitHub proxies where each + server represents a GitHub organization. + nullable: true + properties: + integration: + description: Integration is the integration that is associated + with this Server. + type: string + organization: + description: Organization specifies the name of the organization + for the GitHub integration. + type: string + type: object hostname: description: Hostname is server hostname type: string diff --git a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_opensshserversv2.yaml b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_opensshserversv2.yaml index ad7dfd4174776..fe3d76a8db7a4 100644 --- a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_opensshserversv2.yaml +++ b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_opensshserversv2.yaml @@ -87,6 +87,20 @@ spec: type: string type: object type: object + github: + description: GitHub contains info about GitHub proxies where each + server represents a GitHub organization. + nullable: true + properties: + integration: + description: Integration is the integration that is associated + with this Server. + type: string + organization: + description: Organization specifies the name of the organization + for the GitHub integration. + type: string + type: object hostname: description: Hostname is server hostname type: string diff --git a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_roles.yaml b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_roles.yaml index 5d1c5ddfb9809..1cafc3ae4534a 100644 --- a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_roles.yaml +++ b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_roles.yaml @@ -157,6 +157,18 @@ spec: type: string nullable: true type: array + github_permissions: + description: GitHubPermissions defines GitHub integration related + permissions. + items: + properties: + orgs: + items: + type: string + nullable: true + type: array + type: object + type: array group_labels: additionalProperties: x-kubernetes-preserve-unknown-fields: true @@ -722,6 +734,18 @@ spec: type: string nullable: true type: array + github_permissions: + description: GitHubPermissions defines GitHub integration related + permissions. + items: + properties: + orgs: + items: + type: string + nullable: true + type: array + type: object + type: array group_labels: additionalProperties: x-kubernetes-preserve-unknown-fields: true @@ -1584,6 +1608,18 @@ spec: type: string nullable: true type: array + github_permissions: + description: GitHubPermissions defines GitHub integration related + permissions. + items: + properties: + orgs: + items: + type: string + nullable: true + type: array + type: object + type: array group_labels: additionalProperties: x-kubernetes-preserve-unknown-fields: true @@ -2149,6 +2185,18 @@ spec: type: string nullable: true type: array + github_permissions: + description: GitHubPermissions defines GitHub integration related + permissions. + items: + properties: + orgs: + items: + type: string + nullable: true + type: array + type: object + type: array group_labels: additionalProperties: x-kubernetes-preserve-unknown-fields: true diff --git a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_rolesv6.yaml b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_rolesv6.yaml index f0af70fc7cf2f..652c82fc05f7d 100644 --- a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_rolesv6.yaml +++ b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_rolesv6.yaml @@ -160,6 +160,18 @@ spec: type: string nullable: true type: array + github_permissions: + description: GitHubPermissions defines GitHub integration related + permissions. + items: + properties: + orgs: + items: + type: string + nullable: true + type: array + type: object + type: array group_labels: additionalProperties: x-kubernetes-preserve-unknown-fields: true @@ -725,6 +737,18 @@ spec: type: string nullable: true type: array + github_permissions: + description: GitHubPermissions defines GitHub integration related + permissions. + items: + properties: + orgs: + items: + type: string + nullable: true + type: array + type: object + type: array group_labels: additionalProperties: x-kubernetes-preserve-unknown-fields: true diff --git a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_rolesv7.yaml b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_rolesv7.yaml index 88056b0b54a53..53f89036374f4 100644 --- a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_rolesv7.yaml +++ b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_rolesv7.yaml @@ -160,6 +160,18 @@ spec: type: string nullable: true type: array + github_permissions: + description: GitHubPermissions defines GitHub integration related + permissions. + items: + properties: + orgs: + items: + type: string + nullable: true + type: array + type: object + type: array group_labels: additionalProperties: x-kubernetes-preserve-unknown-fields: true @@ -725,6 +737,18 @@ spec: type: string nullable: true type: array + github_permissions: + description: GitHubPermissions defines GitHub integration related + permissions. + items: + properties: + orgs: + items: + type: string + nullable: true + type: array + type: object + type: array group_labels: additionalProperties: x-kubernetes-preserve-unknown-fields: true diff --git a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/authservice.proto b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/authservice.proto index 03b6f9ac35439..3f63e98a4c602 100644 --- a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/authservice.proto +++ b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/authservice.proto @@ -333,7 +333,13 @@ message RouteToApp { // GCPServiceAccount is the GCP service account to assume when accessing GCP API. string GCPServiceAccount = 7 [(gogoproto.jsontag) = "gcp_service_account,omitempty"]; // URI is the URI of the app. This is the internal endpoint where the application is running and isn't user-facing. + // Used merely for audit events and mirrors the URI from the app spec. Not used as a source of + // truth when routing connections. string URI = 8 [(gogoproto.jsontag) = "uri,omitempty"]; + // TargetPort signifies that the cert grants access to a specific port in a multi-port TCP app, as + // long as the port is defined in the app spec. When specified, it must be between 1 and 65535. + // Used only for routing, should not be used in other contexts (e.g., access requests). + uint32 TargetPort = 9 [(gogoproto.jsontag) = "target_port,omitempty"]; } // GetUserRequest specifies parameters for the GetUser method. @@ -2349,16 +2355,21 @@ message DownstreamInventoryOneOf { } } -// DownstreamInventoryPing is sent down the inventory control stream for testing/debug -// purposes. +// DownstreamInventoryPing is sent down the inventory control stream. message DownstreamInventoryPing { uint64 ID = 1; } // UpstreamInventoryPong is sent up the inventory control stream in response to a downstream -// ping (used for testing/debug purposes). +// ping including the system clock of the downstream. message UpstreamInventoryPong { uint64 ID = 1; + // SystemClock advertises the system clock of the upstream. + google.protobuf.Timestamp SystemClock = 2 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "system_clock,omitempty" + ]; } // UpstreamInventoryHello is the hello message sent up the inventory control stream. @@ -2553,10 +2564,10 @@ message InventoryPingRequest { // ServerID is the ID of the instance to ping. string ServerID = 1; - // ControlLog forces the ping to use the standard "commit then act" model of control log synchronization - // for the ping. This significantly increases the amount of time it takes for the ping request to - // complete, but is useful for testing/debugging control log issues. - bool ControlLog = 2; + // ControlLog used to signal that the ping should use the control log synchronization. + // + // Deprecated: the control log is unsupported and unsound to use. + bool ControlLog = 2 [deprecated = true]; } // InventoryPingResponse returns the result of an inventory ping initiated via an @@ -3207,7 +3218,13 @@ service AuthService { // GetTrustedClusters gets all current Trusted Cluster resources. rpc GetTrustedClusters(google.protobuf.Empty) returns (types.TrustedClusterV2List); // UpsertTrustedCluster upserts a Trusted Cluster in a backend. - rpc UpsertTrustedCluster(types.TrustedClusterV2) returns (types.TrustedClusterV2); + // + // Deprecated: Use UpsertTrustedClusterV2 instead. + rpc UpsertTrustedCluster(types.TrustedClusterV2) returns (types.TrustedClusterV2) { + option deprecated = true; + } + // UpsertTrustedClusterV2 upserts a Trusted Cluster in a backend. + rpc UpsertTrustedClusterV2(types.TrustedClusterV2) returns (types.TrustedClusterV2); // DeleteTrustedCluster deletes an existing Trusted Cluster in a backend by name. rpc DeleteTrustedCluster(types.ResourceRequest) returns (google.protobuf.Empty); diff --git a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/event.proto b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/event.proto index 7c0cd043eb13d..4c790ce6fdbc3 100644 --- a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/event.proto +++ b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/event.proto @@ -206,5 +206,7 @@ message Event { // IdentityCenterAccountlAssignment is a resource representing a potential // Permission Set grant on a specific AWS account. teleport.identitycenter.v1.AccountAssignment IdentityCenterAccountAssignment = 74; + // PluginStaticCredentials is filled in PluginStaticCredentials related events + types.PluginStaticCredentialsV1 PluginStaticCredentials = 75; } } diff --git a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto index bd61c99381b62..e7a7bc0440546 100644 --- a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto +++ b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto @@ -2675,6 +2675,9 @@ message AppMetadata { ]; // AppName is the configured application name. string AppName = 4 [(gogoproto.jsontag) = "app_name,omitempty"]; + // AppTargetPort signifies that the app is a multi-port TCP app and says which port was used to + // access the app. This field is not set for other types of apps, including single-port TCP apps. + uint32 AppTargetPort = 5 [(gogoproto.jsontag) = "app_target_port,omitempty"]; } // AppCreate is emitted when a new application resource is created. @@ -4330,6 +4333,8 @@ message IntegrationMetadata { AWSOIDCIntegrationMetadata AWSOIDC = 2 [(gogoproto.jsontag) = "aws_oidc,omitempty"]; // AzureOIDC contains metadata for Azure OIDC integrations. AzureOIDCIntegrationMetadata AzureOIDC = 3 [(gogoproto.jsontag) = "azure_oidc,omitempty"]; + // GitHub contains metadata for GitHub integrations. + GitHubIntegrationMetadata GitHub = 4 [(gogoproto.jsontag) = "github,omitempty"]; } // AWSOIDCIntegrationMetadata contains metadata for AWS OIDC integrations. @@ -4351,6 +4356,12 @@ message AzureOIDCIntegrationMetadata { string ClientID = 2 [(gogoproto.jsontag) = "client_id,omitempty"]; } +// GitHubIntegrationMetadata contains metadata for GitHub integrations. +message GitHubIntegrationMetadata { + // Organization specifies the name of the organization for the GitHub integration. + string Organization = 1 [(gogoproto.jsontag) = "organization,omitempty"]; +} + // PluginCreate is emitted when a plugin resource is created. message PluginCreate { // Metadata is a common event metadata. @@ -4676,6 +4687,8 @@ message OneOf { events.UserTaskUpdate UserTaskUpdate = 189; events.UserTaskDelete UserTaskDelete = 190; events.SFTPSummary SFTPSummary = 191; + events.ContactCreate ContactCreate = 192; + events.ContactDelete ContactDelete = 193; } } @@ -4829,6 +4842,9 @@ message RouteToApp { string GCPServiceAccount = 7 [(gogoproto.jsontag) = "gcp_service_account,omitempty"]; // URI is the application URI. string URI = 8 [(gogoproto.jsontag) = "uri,omitempty"]; + // TargetPort signifies that the user accessed a specific port in a multi-port TCP app. The value + // must be between 1 and 65535. + uint32 TargetPort = 9 [(gogoproto.jsontag) = "target_port,omitempty"]; } // RouteToDatabase combines parameters for database service routing information. @@ -7566,3 +7582,98 @@ message UserTaskDelete { (gogoproto.jsontag) = "" ]; } + +// ContactCreate is emitted when a contact is created. +message ContactCreate { + // Metadata is a common event metadata + Metadata Metadata = 1 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ResourceMetadata is a common resource event metadata + ResourceMetadata Resource = 2 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // User is a common user event metadata + UserMetadata User = 3 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ConnectionMetadata holds information about the connection + ConnectionMetadata Connection = 4 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // Status indicates whether the creation was successful. + Status Status = 5 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // Email is the Email of the contact being deleted + string Email = 6 [(gogoproto.jsontag) = "email"]; + + // ContactType is the type of the contact being deleted ('Business' or 'Security') + ContactType ContactType = 7 [(gogoproto.jsontag) = "contact_type"]; +} + +// ContactDelete is emitted when a contact is deleted. +message ContactDelete { + // Metadata is a common event metadata + Metadata Metadata = 1 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ResourceMetadata is a common resource event metadata + ResourceMetadata Resource = 2 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // User is a common user event metadata + UserMetadata User = 3 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ConnectionMetadata holds information about the connection + ConnectionMetadata Connection = 4 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // Status indicates whether the deletion was successful. + Status Status = 5 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // Email is the Email of the contact being deleted + string Email = 6 [(gogoproto.jsontag) = "email"]; + + // ContactType is the type of the contact being deleted ('Business' or 'Security') + ContactType ContactType = 7 [(gogoproto.jsontag) = "contact_type"]; +} + +// ContactType is the type of contact being added. +enum ContactType { + CONTACT_TYPE_UNSPECIFIED = 0; + CONTACT_TYPE_BUSINESS = 1; + CONTACT_TYPE_SECURITY = 2; +} diff --git a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/types.proto b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/types.proto index 7739ecad6c7a0..47461bb37b53c 100644 --- a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/types.proto +++ b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/types.proto @@ -21,6 +21,7 @@ import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; import "teleport/attestation/v1/attestation.proto"; +import "teleport/legacy/types/trusted_device_requirement.proto"; import "teleport/legacy/types/wrappers/wrappers.proto"; option go_package = "github.com/gravitational/teleport/api/types"; @@ -711,6 +712,31 @@ message InstanceSpecV1 { // ExternalUpgraderVersion identifies the external upgrader version. Empty if no upgrader is defined. string ExternalUpgraderVersion = 8 [(gogoproto.jsontag) = "ext_upgrader_version,omitempty"]; + + // LastMeasurement stores information about the latest measurement between services. + SystemClockMeasurement LastMeasurement = 9; +} + +// SystemClockMeasurement represents the measurement state of the systems clock difference. +message SystemClockMeasurement { + // ControllerSystemClock is the system clock of the inventory controller. + google.protobuf.Timestamp ControllerSystemClock = 1 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "controller_system_clock,omitempty" + ]; + // SystemClock is the system clock of the upstream. + google.protobuf.Timestamp SystemClock = 2 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "system_clock,omitempty" + ]; + // RequestDuration stores information about the request duration between auth and remote service. + google.protobuf.Duration RequestDuration = 3 [ + (gogoproto.jsontag) = "request_duration", + (gogoproto.nullable) = false, + (gogoproto.stdduration) = true + ]; } // InstanceControlLogEntry represents an entry in a given instance's control log. The control log of @@ -842,6 +868,9 @@ message ServerSpecV2 { // CloudMetadata contains info about the cloud instance the server is running // on, if any. CloudMetadata CloudMetadata = 14 [(gogoproto.jsontag) = "cloud_metadata,omitempty"]; + // GitHub contains info about GitHub proxies where each server represents a + // GitHub organization. + GitHubServerMetadata git_hub = 15 [(gogoproto.jsontag) = "github,omitempty"]; reserved 8; reserved 10; @@ -875,6 +904,15 @@ message CloudMetadata { AWSInfo AWS = 1 [(gogoproto.jsontag) = "aws,omitempty"]; } +// GitHubServerMetadata contains info about GitHub proxies where each server +// represents a GitHub organization. +message GitHubServerMetadata { + // Organization specifies the name of the organization for the GitHub integration. + string organization = 1 [(gogoproto.jsontag) = "organization,omitempty"]; + // Integration is the integration that is associated with this Server. + string integration = 2 [(gogoproto.jsontag) = "integration,omitempty"]; +} + // AppServerV3 represents a single proxied web app. message AppServerV3 { option (gogoproto.goproto_stringer) = false; @@ -1016,6 +1054,11 @@ message AppSpecV3 { // IdentityCenter encasulates AWS identity-center specific information. Only // valid for Identity Center account apps. AppIdentityCenter IdentityCenter = 12 [(gogoproto.jsontag) = "identity_center,omitempty"]; + // TCPPorts is a list of ports and port ranges that an app agent can forward connections to. + // Only applicable to TCP App Access. + // If this field is not empty, URI is expected to contain no port number and start with the tcp + // protocol. + repeated PortRange TCPPorts = 13 [(gogoproto.jsontag) = "tcp_ports,omitempty"]; } // AppServerOrSAMLIdPServiceProviderV1 holds either an AppServerV3 or a SAMLIdPServiceProviderV1 resource (never both). @@ -1057,6 +1100,18 @@ message Header { string Value = 2 [(gogoproto.jsontag) = "value"]; } +// PortRange describes a port range for TCP apps. The range starts with Port and ends with EndPort. +// PortRange can be used to describe a single port in which case the Port field is the port and the +// EndPort field is 0. +message PortRange { + // Port describes the start of the range. It must be between 1 and 65535. + uint32 Port = 1 [(gogoproto.jsontag) = "port"]; + // EndPort describes the end of the range, inclusive. If set, it must be between 2 and 65535 and + // be greater than Port when describing a port range. When omitted or set to zero, it signifies + // that the port range defines a single port. + uint32 EndPort = 2 [(gogoproto.jsontag) = "end_port,omitempty"]; +} + // CommandLabelV2 is a label that has a value as a result of the // output generated by running command, e.g. hostname message CommandLabelV2 { @@ -3372,6 +3427,12 @@ message RoleConditions { (gogoproto.nullable) = false, (gogoproto.jsontag) = "account_assignments,omitempty" ]; + + // GitHubPermissions defines GitHub integration related permissions. + repeated GitHubPermission git_hub_permissions = 43 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "github_permissions,omitempty" + ]; } // IdentityCenterAccountAssignment captures an AWS Identity Center account @@ -3381,6 +3442,11 @@ message IdentityCenterAccountAssignment { string Account = 2 [(gogoproto.jsontag) = "account,omitempty"]; } +// GitHubPermission defines GitHub integration related permissions. +message GitHubPermission { + repeated string organizations = 1 [(gogoproto.jsontag) = "orgs,omitempty"]; +} + // SPIFFERoleCondition sets out which SPIFFE identities this role is allowed or // denied to generate. The Path matcher is required, and is evaluated first. If, // the Path does not match then the other matcher fields are not evaluated. @@ -4246,19 +4312,6 @@ message WebSessionSpecV2 { bytes TLSPriv = 15 [(gogoproto.jsontag) = "tls_priv,omitempty"]; } -// TrustedDeviceRequirement indicates whether access may be hindered by the lack -// of a trusted device. -enum TrustedDeviceRequirement { - // Device requirement not determined. - // Does not mean that a device is not required, only that the necessary data - // was not considered. - TRUSTED_DEVICE_REQUIREMENT_UNSPECIFIED = 0; - // Trusted device not required. - TRUSTED_DEVICE_REQUIREMENT_NOT_REQUIRED = 1; - // Trusted device required by either cluster mode or user roles. - TRUSTED_DEVICE_REQUIREMENT_REQUIRED = 2; -} - // Web-focused view of teleport.devicetrust.v1.DeviceWebToken. message DeviceWebToken { // Opaque token identifier. @@ -7119,6 +7172,7 @@ message PluginStaticCredentialsSpecV1 { string APIToken = 1; PluginStaticCredentialsBasicAuth BasicAuth = 2; PluginStaticCredentialsOAuthClientSecret OAuthClientSecret = 3; + PluginStaticCredentialsSSHCertAuthorities SSHCertAuthorities = 4; } } @@ -7140,6 +7194,14 @@ message PluginStaticCredentialsOAuthClientSecret { string ClientSecret = 2 [(gogoproto.jsontag) = "client_secret"]; } +// PluginStaticCredentialsSSHCertAuthorities contains the active SSH CAs used +// for the integration or plugin. +message PluginStaticCredentialsSSHCertAuthorities { + // CertAuthorities contains the active SSH CAs used for the integration or + // plugin. + repeated SSHKeyPair cert_authorities = 1; +} + // SAMLIdPServiceProviderV1 is the representation of a SAML IdP service provider. message SAMLIdPServiceProviderV1 { option (gogoproto.goproto_stringer) = false; @@ -7487,7 +7549,12 @@ message IntegrationSpecV1 { AWSOIDCIntegrationSpecV1 AWSOIDC = 1 [(gogoproto.jsontag) = "aws_oidc,omitempty"]; // AzureOIDC contains the specific fields to handle the Azure OIDC Integration subkind AzureOIDCIntegrationSpecV1 AzureOIDC = 2 [(gogoproto.jsontag) = "azure_oidc,omitempty"]; + // GitHub contains the specific fields to handle the GitHub integration subkind. + GitHubIntegrationSpecV1 GitHub = 3 [(gogoproto.jsontag) = "github,omitempty"]; } + + // Credentials contains credentials for the integration. + PluginCredentialsV1 credentials = 4; } // AWSOIDCIntegrationSpecV1 contains the spec properties for the AWS OIDC SubKind Integration. @@ -7532,6 +7599,12 @@ message AzureOIDCIntegrationSpecV1 { string ClientID = 2 [(gogoproto.jsontag) = "client_id,omitempty"]; } +// GitHubIntegrationSpecV1 contains the specific fields to handle the GitHub integration subkind. +message GitHubIntegrationSpecV1 { + // Organization specifies the name of the organization for the GitHub integration. + string Organization = 1 [(gogoproto.jsontag) = "organization,omitempty"]; +} + // HeadlessAuthentication holds data for an ongoing headless authentication attempt. message HeadlessAuthentication { // Header is the resource header. From 22c6756f333e4afb29e096046fe4503eda56be3d Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Wed, 4 Dec 2024 13:12:27 -0800 Subject: [PATCH 10/25] Implement trusted_cluster CRD --- ...sources.teleport.dev_trustedclustersv2.mdx | 41 +++++ ...ources.teleport.dev_trustedclustersv2.yaml | 148 ++++++++++++++++++ .../teleport-operator/templates/role.yaml | 2 + .../templates/auth/config.yaml | 8 + integrations/operator/README.md | 4 + .../resources/v1/trusted_cluster_types.go | 96 ++++++++++++ .../resources/v1/zz_generated.deepcopy.go | 69 ++++++++ ...ources.teleport.dev_trustedclustersv2.yaml | 148 ++++++++++++++++++ .../operator/controllers/resources/setup.go | 1 + .../controllers/resources/testlib/env.go | 1 + .../resources/trusted_cluster_controller.go | 75 +++++++++ .../trusted_clusterv2_controller_test.go | 141 +++++++++++++++++ integrations/operator/crdgen/handlerequest.go | 1 + integrations/operator/crdgen/ignored.go | 3 + ...ources.teleport.dev_trustedclustersv2.yaml | 148 ++++++++++++++++++ .../operator/hack/fixture-operator-role.yaml | 8 + 16 files changed, 894 insertions(+) create mode 100644 docs/pages/reference/operator-resources/resources.teleport.dev_trustedclustersv2.mdx create mode 100644 examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_trustedclustersv2.yaml create mode 100644 integrations/operator/apis/resources/v1/trusted_cluster_types.go create mode 100644 integrations/operator/config/crd/bases/resources.teleport.dev_trustedclustersv2.yaml create mode 100644 integrations/operator/controllers/resources/trusted_cluster_controller.go create mode 100644 integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go create mode 100644 integrations/operator/crdgen/testdata/golden/resources.teleport.dev_trustedclustersv2.yaml diff --git a/docs/pages/reference/operator-resources/resources.teleport.dev_trustedclustersv2.mdx b/docs/pages/reference/operator-resources/resources.teleport.dev_trustedclustersv2.mdx new file mode 100644 index 0000000000000..9a467ea871f74 --- /dev/null +++ b/docs/pages/reference/operator-resources/resources.teleport.dev_trustedclustersv2.mdx @@ -0,0 +1,41 @@ +--- +title: TeleportTrustedClusterV2 +description: Provides a comprehensive list of fields in the TeleportTrustedClusterV2 resource available through the Teleport Kubernetes operator +tocDepth: 3 +--- + +{/*Auto-generated file. Do not edit.*/} +{/*To regenerate, navigate to integrations/operator and run "make crd-docs".*/} + +This guide is a comprehensive reference to the fields in the `TeleportTrustedClusterV2` +resource, which you can apply after installing the Teleport Kubernetes operator. + + +## resources.teleport.dev/v1 + +**apiVersion:** resources.teleport.dev/v1 + +|Field|Type|Description| +|---|---|---| +|apiVersion|string|APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources| +|kind|string|Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds| +|metadata|object|| +|spec|[object](#spec)|TrustedCluster resource definition v2 from Teleport| + +### spec + +|Field|Type|Description| +|---|---|---| +|enabled|boolean|Enabled is a bool that indicates if the TrustedCluster is enabled or disabled. Setting Enabled to false has a side effect of deleting the user and host certificate authority (CA).| +|role_map|[][object](#specrole_map-items)|RoleMap specifies role mappings to remote roles.| +|token|string|Token is the authorization token provided by another cluster needed by this cluster to join.| +|tunnel_addr|string|ReverseTunnelAddress is the address of the SSH proxy server of the cluster to join. If not set, it is derived from `:`.| +|web_proxy_addr|string|ProxyAddress is the address of the web proxy server of the cluster to join. If not set, it is derived from `:`.| + +### spec.role_map items + +|Field|Type|Description| +|---|---|---| +|local|[]string|Local specifies local roles to map to| +|remote|string|Remote specifies remote role name to map from| + diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_trustedclustersv2.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_trustedclustersv2.yaml new file mode 100644 index 0000000000000..35310b3b2f70a --- /dev/null +++ b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_trustedclustersv2.yaml @@ -0,0 +1,148 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + creationTimestamp: null + name: teleporttrustedclustersv2.resources.teleport.dev +spec: + group: resources.teleport.dev + names: + kind: TeleportTrustedClusterV2 + listKind: TeleportTrustedClusterV2List + plural: teleporttrustedclustersv2 + shortNames: + - trustedclusterv2 + - trustedclustersv2 + singular: teleporttrustedclusterv2 + scope: Namespaced + versions: + - name: v1 + schema: + openAPIV3Schema: + description: TrustedClusterV2 is the Schema for the trustedclustersv2 API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: TrustedCluster resource definition v2 from Teleport + properties: + enabled: + description: Enabled is a bool that indicates if the TrustedCluster + is enabled or disabled. Setting Enabled to false has a side effect + of deleting the user and host certificate authority (CA). + type: boolean + role_map: + description: RoleMap specifies role mappings to remote roles. + items: + properties: + local: + description: Local specifies local roles to map to + items: + type: string + nullable: true + type: array + remote: + description: Remote specifies remote role name to map from + type: string + type: object + type: array + token: + description: Token is the authorization token provided by another + cluster needed by this cluster to join. + type: string + tunnel_addr: + description: ReverseTunnelAddress is the address of the SSH proxy + server of the cluster to join. If not set, it is derived from `:`. + type: string + web_proxy_addr: + description: ProxyAddress is the address of the web proxy server of + the cluster to join. If not set, it is derived from `:`. + type: string + type: object + status: + description: Status defines the observed state of the Teleport resource + properties: + conditions: + description: Conditions represent the latest available observations + of an object's state + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + teleportResourceID: + format: int64 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/templates/role.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/templates/role.yaml index 25b8c72416dc6..1b7c21935ce5c 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/templates/role.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/templates/role.yaml @@ -36,6 +36,8 @@ rules: - teleportopensshserversv2/status - teleportopenssheiceserversv2 - teleportopenssheiceserversv2/status + - teleporttrustedclustersv2 + - teleporttrustedclustersv2/status verbs: - get - list diff --git a/examples/chart/teleport-cluster/templates/auth/config.yaml b/examples/chart/teleport-cluster/templates/auth/config.yaml index 99fe59e061c9c..d1c4bffcb5cf6 100644 --- a/examples/chart/teleport-cluster/templates/auth/config.yaml +++ b/examples/chart/teleport-cluster/templates/auth/config.yaml @@ -131,6 +131,14 @@ data: - read - update - delete + - resources: + - trusted_cluster + verbs: + - list + - create + - read + - update + - delete deny: {} version: v7 --- diff --git a/integrations/operator/README.md b/integrations/operator/README.md index 8e91c62d6d46c..d240ca82da84b 100644 --- a/integrations/operator/README.md +++ b/integrations/operator/README.md @@ -20,6 +20,10 @@ The operator supports reconciling the following Kubernetes CRs: - TeleportRoleV7 (creates role v7) - TeleportProvisionToken - TeleportGithubConnector +- TeleportAccessList +- TeleportOpenSSHEICEServerV2 +- TeleportOpenSSHServerV2 +- TeleportTrustedClusterV2 - TeleportSAMLConnector [1] - TeleportOIDCConnector [1] - TeleportLoginRule [1] diff --git a/integrations/operator/apis/resources/v1/trusted_cluster_types.go b/integrations/operator/apis/resources/v1/trusted_cluster_types.go new file mode 100644 index 0000000000000..707106359e30c --- /dev/null +++ b/integrations/operator/apis/resources/v1/trusted_cluster_types.go @@ -0,0 +1,96 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/integrations/operator/apis/resources" +) + +func init() { + SchemeBuilder.Register(&TeleportTrustedClusterV2{}, &TeleportTrustedClusterV2List{}) +} + +//+kubebuilder:object:root=true +//+kubebuilder:subresource:status + +// TeleportTrustedClusterV2 is the Schema for the trusted_clusters API +type TeleportTrustedClusterV2 struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec TeleportTrustedClusterV2Spec `json:"spec,omitempty"` + Status resources.Status `json:"status,omitempty"` +} + +//+kubebuilder:object:root=true + +// TeleportTrustedClusterV2List contains a list of TeleportTrustedClusterV2 +type TeleportTrustedClusterV2List struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []TeleportTrustedClusterV2 `json:"items"` +} + +// ToTeleport converts the resource to the teleport trusted_cluster API type. +func (r TeleportTrustedClusterV2) ToTeleport() types.TrustedCluster { + return &types.TrustedClusterV2{ + Kind: types.KindTrustedCluster, + Version: types.V2, + Metadata: types.Metadata{ + Name: r.Name, + Labels: r.Labels, + Description: r.Annotations[resources.DescriptionKey], + }, + Spec: types.TrustedClusterSpecV2(r.Spec), + } +} + +// TeleportTrustedClusterV2Spec defines the desired state of TeleportTrustedClusterV2 +type TeleportTrustedClusterV2Spec types.TrustedClusterSpecV2 + +// Marshal serializes a spec into binary data. +func (spec *TeleportTrustedClusterV2Spec) Marshal() ([]byte, error) { + return (*types.TrustedClusterSpecV2)(spec).Marshal() +} + +// Unmarshal deserializes a spec from binary data. +func (spec *TeleportTrustedClusterV2Spec) Unmarshal(data []byte) error { + return (*types.TrustedClusterSpecV2)(spec).Unmarshal(data) +} + +// DeepCopyInto deep-copies one trusted_cluster spec into another. +// Required to satisfy runtime.Object interface. +func (spec *TeleportTrustedClusterV2Spec) DeepCopyInto(out *TeleportTrustedClusterV2Spec) { + data, err := spec.Marshal() + if err != nil { + panic(err) + } + *out = TeleportTrustedClusterV2Spec{} + if err = out.Unmarshal(data); err != nil { + panic(err) + } +} + +// StatusConditions returns a pointer to Status.Conditions slice. +func (r *TeleportTrustedClusterV2) StatusConditions() *[]metav1.Condition { + return &r.Status.Conditions +} diff --git a/integrations/operator/apis/resources/v1/zz_generated.deepcopy.go b/integrations/operator/apis/resources/v1/zz_generated.deepcopy.go index e2f6b7ce932c1..6b803d79d2577 100644 --- a/integrations/operator/apis/resources/v1/zz_generated.deepcopy.go +++ b/integrations/operator/apis/resources/v1/zz_generated.deepcopy.go @@ -605,3 +605,72 @@ func (in *TeleportRoleV7Spec) DeepCopy() *TeleportRoleV7Spec { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TeleportTrustedClusterV2) DeepCopyInto(out *TeleportTrustedClusterV2) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TeleportTrustedClusterV2. +func (in *TeleportTrustedClusterV2) DeepCopy() *TeleportTrustedClusterV2 { + if in == nil { + return nil + } + out := new(TeleportTrustedClusterV2) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *TeleportTrustedClusterV2) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TeleportTrustedClusterV2List) DeepCopyInto(out *TeleportTrustedClusterV2List) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]TeleportTrustedClusterV2, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TeleportTrustedClusterV2List. +func (in *TeleportTrustedClusterV2List) DeepCopy() *TeleportTrustedClusterV2List { + if in == nil { + return nil + } + out := new(TeleportTrustedClusterV2List) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *TeleportTrustedClusterV2List) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TeleportTrustedClusterV2Spec. +func (in *TeleportTrustedClusterV2Spec) DeepCopy() *TeleportTrustedClusterV2Spec { + if in == nil { + return nil + } + out := new(TeleportTrustedClusterV2Spec) + in.DeepCopyInto(out) + return out +} diff --git a/integrations/operator/config/crd/bases/resources.teleport.dev_trustedclustersv2.yaml b/integrations/operator/config/crd/bases/resources.teleport.dev_trustedclustersv2.yaml new file mode 100644 index 0000000000000..35310b3b2f70a --- /dev/null +++ b/integrations/operator/config/crd/bases/resources.teleport.dev_trustedclustersv2.yaml @@ -0,0 +1,148 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + creationTimestamp: null + name: teleporttrustedclustersv2.resources.teleport.dev +spec: + group: resources.teleport.dev + names: + kind: TeleportTrustedClusterV2 + listKind: TeleportTrustedClusterV2List + plural: teleporttrustedclustersv2 + shortNames: + - trustedclusterv2 + - trustedclustersv2 + singular: teleporttrustedclusterv2 + scope: Namespaced + versions: + - name: v1 + schema: + openAPIV3Schema: + description: TrustedClusterV2 is the Schema for the trustedclustersv2 API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: TrustedCluster resource definition v2 from Teleport + properties: + enabled: + description: Enabled is a bool that indicates if the TrustedCluster + is enabled or disabled. Setting Enabled to false has a side effect + of deleting the user and host certificate authority (CA). + type: boolean + role_map: + description: RoleMap specifies role mappings to remote roles. + items: + properties: + local: + description: Local specifies local roles to map to + items: + type: string + nullable: true + type: array + remote: + description: Remote specifies remote role name to map from + type: string + type: object + type: array + token: + description: Token is the authorization token provided by another + cluster needed by this cluster to join. + type: string + tunnel_addr: + description: ReverseTunnelAddress is the address of the SSH proxy + server of the cluster to join. If not set, it is derived from `:`. + type: string + web_proxy_addr: + description: ProxyAddress is the address of the web proxy server of + the cluster to join. If not set, it is derived from `:`. + type: string + type: object + status: + description: Status defines the observed state of the Teleport resource + properties: + conditions: + description: Conditions represent the latest available observations + of an object's state + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + teleportResourceID: + format: int64 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/integrations/operator/controllers/resources/setup.go b/integrations/operator/controllers/resources/setup.go index a2e78a8cdc68c..fffceccbf8c39 100644 --- a/integrations/operator/controllers/resources/setup.go +++ b/integrations/operator/controllers/resources/setup.go @@ -47,6 +47,7 @@ func SetupAllControllers(log logr.Logger, mgr manager.Manager, teleportClient *c {"TeleportProvisionToken", NewProvisionTokenReconciler}, {"TeleportOpenSSHServerV2", NewOpenSSHServerV2Reconciler}, {"TeleportOpenSSHEICEServerV2", NewOpenSSHEICEServerV2Reconciler}, + {"TeleportTrustedClusterV2", NewTrustedClusterV2Reconciler}, } oidc := modules.GetProtoEntitlement(features, entitlements.OIDC) diff --git a/integrations/operator/controllers/resources/testlib/env.go b/integrations/operator/controllers/resources/testlib/env.go index df04115401b59..f049806d7df3f 100644 --- a/integrations/operator/controllers/resources/testlib/env.go +++ b/integrations/operator/controllers/resources/testlib/env.go @@ -139,6 +139,7 @@ func defaultTeleportServiceConfig(t *testing.T) (*helpers.TeleInstance, string) types.NewRule(types.KindOktaImportRule, unrestricted), types.NewRule(types.KindAccessList, unrestricted), types.NewRule(types.KindNode, unrestricted), + types.NewRule(types.KindTrustedCluster, unrestricted), }, }, }) diff --git a/integrations/operator/controllers/resources/trusted_cluster_controller.go b/integrations/operator/controllers/resources/trusted_cluster_controller.go new file mode 100644 index 0000000000000..cac5b489609ef --- /dev/null +++ b/integrations/operator/controllers/resources/trusted_cluster_controller.go @@ -0,0 +1,75 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package resources + +import ( + "context" + + "github.com/gravitational/trace" + kclient "sigs.k8s.io/controller-runtime/pkg/client" + + "github.com/gravitational/teleport/api/client" + "github.com/gravitational/teleport/api/types" + resourcesv1 "github.com/gravitational/teleport/integrations/operator/apis/resources/v1" + "github.com/gravitational/teleport/integrations/operator/controllers" + "github.com/gravitational/teleport/integrations/operator/controllers/reconcilers" +) + +// trustedClusterClient implements TeleportResourceClient and offers CRUD +// methods needed to reconcile trusted_clusters. +type trustedClusterClient struct { + teleportClient *client.Client +} + +// Get gets the Teleport trusted_cluster of a given name. +func (r trustedClusterClient) Get(ctx context.Context, name string) (types.TrustedCluster, error) { + trustedCluster, err := r.teleportClient.GetTrustedCluster(ctx, name) + return trustedCluster, trace.Wrap(err) +} + +// Create creates a Teleport trusted_cluster. +func (r trustedClusterClient) Create(ctx context.Context, trustedCluster types.TrustedCluster) error { + _, err := r.teleportClient.UpsertTrustedCluster(ctx, trustedCluster) + return trace.Wrap(err) +} + +// Update updates a Teleport trusted_cluster. +func (r trustedClusterClient) Update(ctx context.Context, trustedCluster types.TrustedCluster) error { + _, err := r.teleportClient.UpsertTrustedCluster(ctx, trustedCluster) + return trace.Wrap(err) +} + +// Delete deletes a Teleport trusted_cluster. +func (r trustedClusterClient) Delete(ctx context.Context, name string) error { + return trace.Wrap(r.teleportClient.DeleteTrustedCluster(ctx, name)) +} + +// NewTrustedClusterV2Reconciler instantiates a new Kubernetes controller reconciling trusted_cluster v2 resources +func NewTrustedClusterV2Reconciler(client kclient.Client, tClient *client.Client) (controllers.Reconciler, error) { + trustedClusterClient := &trustedClusterClient{ + teleportClient: tClient, + } + + resourceReconciler, err := reconcilers.NewTeleportResourceWithoutLabelsReconciler[types.TrustedCluster, *resourcesv1.TeleportTrustedClusterV2]( + client, + trustedClusterClient, + ) + + return resourceReconciler, trace.Wrap(err, "building teleport resource reconciler") +} diff --git a/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go b/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go new file mode 100644 index 0000000000000..450c6b572d704 --- /dev/null +++ b/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go @@ -0,0 +1,141 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package resources_test + +import ( + "context" + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/gravitational/trace" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + kclient "sigs.k8s.io/controller-runtime/pkg/client" + + "github.com/gravitational/teleport/api/types" + resourcesv1 "github.com/gravitational/teleport/integrations/operator/apis/resources/v1" + "github.com/gravitational/teleport/integrations/operator/controllers/reconcilers" + "github.com/gravitational/teleport/integrations/operator/controllers/resources/testlib" +) + +var trustedClusterV2Spec = types.TrustedClusterSpecV2{ + Enabled: true, + Token: "secret_token", + ProxyAddress: "root.example.com:443", + ReverseTunnelAddress: "root.example.com:443", + RoleMap: []types.RoleMapping{ + { + Remote: "remote-role", + Local: []string{"local-role"}, + }, + }, +} + +type trustedClusterV2TestingPrimitives struct { + setup *testSetup + reconcilers.ResourceWithoutLabelsAdapter[types.TrustedCluster] +} + +func (r *trustedClusterV2TestingPrimitives) Init(setup *testSetup) { + r.setup = setup +} + +func (r *trustedClusterV2TestingPrimitives) SetupTeleportFixtures(ctx context.Context) error { + return nil +} + +func (r *trustedClusterV2TestingPrimitives) CreateTeleportResource(ctx context.Context, name string) error { + trustedCluster, err := types.NewTrustedCluster(name, trustedClusterV2Spec) + if err != nil { + return trace.Wrap(err) + } + trustedCluster.SetOrigin(types.OriginKubernetes) + _, err = r.setup.TeleportClient.UpsertTrustedCluster(ctx, trustedCluster) + return trace.Wrap(err) +} + +func (r *trustedClusterV2TestingPrimitives) GetTeleportResource(ctx context.Context, name string) (types.TrustedCluster, error) { + return r.setup.TeleportClient.GetTrustedCluster(ctx, name) +} + +func (r *trustedClusterV2TestingPrimitives) DeleteTeleportResource(ctx context.Context, name string) error { + return trace.Wrap(r.setup.TeleportClient.DeleteTrustedCluster(ctx, name)) +} + +func (r *trustedClusterV2TestingPrimitives) CreateKubernetesResource(ctx context.Context, name string) error { + trustedCluster := &resourcesv1.TeleportTrustedClusterV2{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: r.setup.Namespace.Name, + }, + Spec: resourcesv1.TeleportTrustedClusterV2Spec(trustedClusterV2Spec), + } + return trace.Wrap(r.setup.K8sClient.Create(ctx, trustedCluster)) +} + +func (r *trustedClusterV2TestingPrimitives) DeleteKubernetesResource(ctx context.Context, name string) error { + trustedCluster := &resourcesv1.TeleportTrustedClusterV2{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: r.setup.Namespace.Name, + }, + } + return trace.Wrap(r.setup.K8sClient.Delete(ctx, trustedCluster)) +} + +func (r *trustedClusterV2TestingPrimitives) GetKubernetesResource(ctx context.Context, name string) (*resourcesv1.TeleportTrustedClusterV2, error) { + trustedCluster := &resourcesv1.TeleportTrustedClusterV2{} + obj := kclient.ObjectKey{ + Name: name, + Namespace: r.setup.Namespace.Name, + } + err := r.setup.K8sClient.Get(ctx, obj, trustedCluster) + return trustedCluster, trace.Wrap(err) +} + +func (r *trustedClusterV2TestingPrimitives) ModifyKubernetesResource(ctx context.Context, name string) error { + trustedCluster, err := r.GetKubernetesResource(ctx, name) + if err != nil { + return trace.Wrap(err) + } + trustedCluster.Spec.RoleMap[0] = types.RoleMapping{ + Remote: "remote-role-2", + Local: []string{"local-role-2"}, + } + return trace.Wrap(r.setup.K8sClient.Create(ctx, trustedCluster)) +} + +func (r *trustedClusterV2TestingPrimitives) CompareTeleportAndKubernetesResource(tResource types.TrustedCluster, kubeResource *resourcesv1.TeleportTrustedClusterV2) (bool, string) { + diff := cmp.Diff(tResource, kubeResource.ToTeleport(), testlib.CompareOptions()...) + return diff == "", diff +} + +func TestTrustedClusterV2Creation(t *testing.T) { + test := &trustedClusterV2TestingPrimitives{} + testlib.ResourceCreationTest(t, test) +} + +func TestTrustedClusterV2DeletionDrift(t *testing.T) { + test := &trustedClusterV2TestingPrimitives{} + testlib.ResourceDeletionDriftTest(t, test) +} + +func TestTrustedClusterV2Update(t *testing.T) { + test := &trustedClusterV2TestingPrimitives{} + testlib.ResourceUpdateTest(t, test) +} diff --git a/integrations/operator/crdgen/handlerequest.go b/integrations/operator/crdgen/handlerequest.go index 669211d76e3bd..86c77b6b22efc 100644 --- a/integrations/operator/crdgen/handlerequest.go +++ b/integrations/operator/crdgen/handlerequest.go @@ -214,6 +214,7 @@ func generateSchema(file *File, groupName string, format crdFormatFunc, resp *go withAdditionalColumns(serverColumns), }, }, + {name: "TrustedClusterV2", opts: []resourceSchemaOption{withVersionInKindOverride()}}, } for _, resource := range resources { diff --git a/integrations/operator/crdgen/ignored.go b/integrations/operator/crdgen/ignored.go index 596e79b4d291a..7b647756f12cc 100644 --- a/integrations/operator/crdgen/ignored.go +++ b/integrations/operator/crdgen/ignored.go @@ -44,4 +44,7 @@ var ignoredFields = map[string]stringSet{ // allows remote exec on agentful nodes. "CmdLabels": struct{}{}, }, + "TrustedClusterSpecV2": { + "Roles": struct{}{}, // Deprecated, use RoleMap instead. + }, } diff --git a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_trustedclustersv2.yaml b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_trustedclustersv2.yaml new file mode 100644 index 0000000000000..35310b3b2f70a --- /dev/null +++ b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_trustedclustersv2.yaml @@ -0,0 +1,148 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + creationTimestamp: null + name: teleporttrustedclustersv2.resources.teleport.dev +spec: + group: resources.teleport.dev + names: + kind: TeleportTrustedClusterV2 + listKind: TeleportTrustedClusterV2List + plural: teleporttrustedclustersv2 + shortNames: + - trustedclusterv2 + - trustedclustersv2 + singular: teleporttrustedclusterv2 + scope: Namespaced + versions: + - name: v1 + schema: + openAPIV3Schema: + description: TrustedClusterV2 is the Schema for the trustedclustersv2 API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: TrustedCluster resource definition v2 from Teleport + properties: + enabled: + description: Enabled is a bool that indicates if the TrustedCluster + is enabled or disabled. Setting Enabled to false has a side effect + of deleting the user and host certificate authority (CA). + type: boolean + role_map: + description: RoleMap specifies role mappings to remote roles. + items: + properties: + local: + description: Local specifies local roles to map to + items: + type: string + nullable: true + type: array + remote: + description: Remote specifies remote role name to map from + type: string + type: object + type: array + token: + description: Token is the authorization token provided by another + cluster needed by this cluster to join. + type: string + tunnel_addr: + description: ReverseTunnelAddress is the address of the SSH proxy + server of the cluster to join. If not set, it is derived from `:`. + type: string + web_proxy_addr: + description: ProxyAddress is the address of the web proxy server of + the cluster to join. If not set, it is derived from `:`. + type: string + type: object + status: + description: Status defines the observed state of the Teleport resource + properties: + conditions: + description: Conditions represent the latest available observations + of an object's state + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + teleportResourceID: + format: int64 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/integrations/operator/hack/fixture-operator-role.yaml b/integrations/operator/hack/fixture-operator-role.yaml index e9925b19a106c..ac6e88a6dfbd1 100644 --- a/integrations/operator/hack/fixture-operator-role.yaml +++ b/integrations/operator/hack/fixture-operator-role.yaml @@ -73,5 +73,13 @@ spec: - read - update - delete + - resources: + - trusted_cluster + verbs: + - list + - create + - read + - update + - delete deny: {} version: v7 From 59ba288d1d62f738307a1f3ea5a237443cdbae3d Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Wed, 4 Dec 2024 13:33:11 -0800 Subject: [PATCH 11/25] Update docs --- .../teleport-operator/teleport-operator.mdx | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/docs/pages/admin-guides/infrastructure-as-code/teleport-operator/teleport-operator.mdx b/docs/pages/admin-guides/infrastructure-as-code/teleport-operator/teleport-operator.mdx index e8dec4b877a13..890421acf2742 100644 --- a/docs/pages/admin-guides/infrastructure-as-code/teleport-operator/teleport-operator.mdx +++ b/docs/pages/admin-guides/infrastructure-as-code/teleport-operator/teleport-operator.mdx @@ -26,16 +26,21 @@ could cause instability and non-deterministic behaviour. Currently supported Teleport resources are: -- users (`TeleportUser`) -- roles +- Users (`TeleportUser`) +- Roles - `TeleportRole` creates role v5 - `TeleportRoleV6` creates role v6 - `TeleportRoleV7` creates role v7 -- OIDC connectors (`TeleportOIDCConnector`) -- SAML connectors (`TeleportSAMLConnector`) -- GitHub connectors (`TeleportGithubConnector`) -- provision tokens (`TeleportProvisionToken`) -- Login Rules (`TeleportLoginRules`) +- OIDC Connectors (`TeleportOIDCConnector`) +- SAML Connectors (`TeleportSAMLConnector`) +- GitHub Connectors (`TeleportGithubConnector`) +- Provision Tokens (`TeleportProvisionToken`) +- Login Rules (`TeleportLoginRule`) +- Access Lists (`TeleportAccessList`) +- Okta Import Rules (`TeleportOktaImportRule`) +- OpenSSHEICE Servers (`TeleportOpenSSHEICEServerV2`) +- OpenSSH Servers (`TeleportOpenSSHServerV2`) +- Trusted Clusters (`TeleportTrustedClusterV2`) ### Setting up the operator From ecaba63d325b249731af427138f5c99c1c9b0bf8 Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Fri, 6 Dec 2024 16:54:45 -0800 Subject: [PATCH 12/25] Support secret lookup --- ...sources.teleport.dev_trustedclustersv2.mdx | 2 +- ...ources.teleport.dev_trustedclustersv2.yaml | 3 +- ...ources.teleport.dev_trustedclustersv2.yaml | 3 +- .../legacy_resource_without_labels.go | 2 +- .../resources/trusted_cluster_controller.go | 20 +++++++- .../trusted_clusterv2_controller_test.go | 50 +++++++++++++++++++ .../operator/crdgen/additional_doc.go | 3 ++ ...ources.teleport.dev_trustedclustersv2.yaml | 3 +- 8 files changed, 79 insertions(+), 7 deletions(-) diff --git a/docs/pages/reference/operator-resources/resources.teleport.dev_trustedclustersv2.mdx b/docs/pages/reference/operator-resources/resources.teleport.dev_trustedclustersv2.mdx index 9a467ea871f74..8728b51b2ab5c 100644 --- a/docs/pages/reference/operator-resources/resources.teleport.dev_trustedclustersv2.mdx +++ b/docs/pages/reference/operator-resources/resources.teleport.dev_trustedclustersv2.mdx @@ -28,7 +28,7 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |---|---|---| |enabled|boolean|Enabled is a bool that indicates if the TrustedCluster is enabled or disabled. Setting Enabled to false has a side effect of deleting the user and host certificate authority (CA).| |role_map|[][object](#specrole_map-items)|RoleMap specifies role mappings to remote roles.| -|token|string|Token is the authorization token provided by another cluster needed by this cluster to join.| +|token|string|Token is the authorization token provided by another cluster needed by this cluster to join. This field supports secret lookup. See the operator documentation for more details.| |tunnel_addr|string|ReverseTunnelAddress is the address of the SSH proxy server of the cluster to join. If not set, it is derived from `:`.| |web_proxy_addr|string|ProxyAddress is the address of the web proxy server of the cluster to join. If not set, it is derived from `:`.| diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_trustedclustersv2.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_trustedclustersv2.yaml index 35310b3b2f70a..4cf1410472b64 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_trustedclustersv2.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_trustedclustersv2.yaml @@ -57,7 +57,8 @@ spec: type: array token: description: Token is the authorization token provided by another - cluster needed by this cluster to join. + cluster needed by this cluster to join. This field supports secret + lookup. See the operator documentation for more details. type: string tunnel_addr: description: ReverseTunnelAddress is the address of the SSH proxy diff --git a/integrations/operator/config/crd/bases/resources.teleport.dev_trustedclustersv2.yaml b/integrations/operator/config/crd/bases/resources.teleport.dev_trustedclustersv2.yaml index 35310b3b2f70a..4cf1410472b64 100644 --- a/integrations/operator/config/crd/bases/resources.teleport.dev_trustedclustersv2.yaml +++ b/integrations/operator/config/crd/bases/resources.teleport.dev_trustedclustersv2.yaml @@ -57,7 +57,8 @@ spec: type: array token: description: Token is the authorization token provided by another - cluster needed by this cluster to join. + cluster needed by this cluster to join. This field supports secret + lookup. See the operator documentation for more details. type: string tunnel_addr: description: ReverseTunnelAddress is the address of the SSH proxy diff --git a/integrations/operator/controllers/reconcilers/legacy_resource_without_labels.go b/integrations/operator/controllers/reconcilers/legacy_resource_without_labels.go index c7079240a9d7b..307c1283ee398 100644 --- a/integrations/operator/controllers/reconcilers/legacy_resource_without_labels.go +++ b/integrations/operator/controllers/reconcilers/legacy_resource_without_labels.go @@ -62,7 +62,7 @@ func (a ResourceWithoutLabelsAdapter[T]) SetResourceRevision(res T, revision str } // SetResourceLabels implements the Adapter interface. As the resource does not -// // support labels, it only sets the origin label. +// support labels, it only sets the origin label. func (a ResourceWithoutLabelsAdapter[T]) SetResourceLabels(res T, labels map[string]string) { // We don't set all labels as the Resource doesn't support them // Only the origin diff --git a/integrations/operator/controllers/resources/trusted_cluster_controller.go b/integrations/operator/controllers/resources/trusted_cluster_controller.go index cac5b489609ef..011034b545f4e 100644 --- a/integrations/operator/controllers/resources/trusted_cluster_controller.go +++ b/integrations/operator/controllers/resources/trusted_cluster_controller.go @@ -29,12 +29,14 @@ import ( resourcesv1 "github.com/gravitational/teleport/integrations/operator/apis/resources/v1" "github.com/gravitational/teleport/integrations/operator/controllers" "github.com/gravitational/teleport/integrations/operator/controllers/reconcilers" + "github.com/gravitational/teleport/integrations/operator/controllers/resources/secretlookup" ) // trustedClusterClient implements TeleportResourceClient and offers CRUD // methods needed to reconcile trusted_clusters. type trustedClusterClient struct { teleportClient *client.Client + kubeClient kclient.Client } // Get gets the Teleport trusted_cluster of a given name. @@ -45,13 +47,13 @@ func (r trustedClusterClient) Get(ctx context.Context, name string) (types.Trust // Create creates a Teleport trusted_cluster. func (r trustedClusterClient) Create(ctx context.Context, trustedCluster types.TrustedCluster) error { - _, err := r.teleportClient.UpsertTrustedCluster(ctx, trustedCluster) + _, err := r.teleportClient.UpsertTrustedClusterV2(ctx, trustedCluster) return trace.Wrap(err) } // Update updates a Teleport trusted_cluster. func (r trustedClusterClient) Update(ctx context.Context, trustedCluster types.TrustedCluster) error { - _, err := r.teleportClient.UpsertTrustedCluster(ctx, trustedCluster) + _, err := r.teleportClient.UpsertTrustedClusterV2(ctx, trustedCluster) return trace.Wrap(err) } @@ -60,10 +62,24 @@ func (r trustedClusterClient) Delete(ctx context.Context, name string) error { return trace.Wrap(r.teleportClient.DeleteTrustedCluster(ctx, name)) } +// Mutate mutates a Teleport trusted_cluster. +func (r trustedClusterClient) Mutate(ctx context.Context, new, existing types.TrustedCluster, crKey kclient.ObjectKey) error { + secret := new.GetToken() + if secretlookup.IsNeeded(secret) { + resolvedSecret, err := secretlookup.Try(ctx, r.kubeClient, crKey.Name, crKey.Namespace, secret) + if err != nil { + return trace.Wrap(err) + } + new.SetToken(resolvedSecret) + } + return nil +} + // NewTrustedClusterV2Reconciler instantiates a new Kubernetes controller reconciling trusted_cluster v2 resources func NewTrustedClusterV2Reconciler(client kclient.Client, tClient *client.Client) (controllers.Reconciler, error) { trustedClusterClient := &trustedClusterClient{ teleportClient: tClient, + kubeClient: client, } resourceReconciler, err := reconcilers.NewTeleportResourceWithoutLabelsReconciler[types.TrustedCluster, *resourcesv1.TeleportTrustedClusterV2]( diff --git a/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go b/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go index 450c6b572d704..4f060874d34cd 100644 --- a/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go +++ b/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go @@ -24,12 +24,15 @@ import ( "github.com/google/go-cmp/cmp" "github.com/gravitational/trace" + "github.com/stretchr/testify/require" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kclient "sigs.k8s.io/controller-runtime/pkg/client" "github.com/gravitational/teleport/api/types" resourcesv1 "github.com/gravitational/teleport/integrations/operator/apis/resources/v1" "github.com/gravitational/teleport/integrations/operator/controllers/reconcilers" + "github.com/gravitational/teleport/integrations/operator/controllers/resources/secretlookup" "github.com/gravitational/teleport/integrations/operator/controllers/resources/testlib" ) @@ -139,3 +142,50 @@ func TestTrustedClusterV2Update(t *testing.T) { test := &trustedClusterV2TestingPrimitives{} testlib.ResourceUpdateTest(t, test) } + +func TestTrustedClusterV2SecretLookup(t *testing.T) { + test := &trustedClusterV2TestingPrimitives{} + setup := testlib.SetupTestEnv(t) + test.Init(setup) + ctx := context.Background() + + crName := validRandomResourceName("trusted-cluster") + secretName := validRandomResourceName("trusted-cluster-secret") + secretKey := "token" + secretValue := validRandomResourceName("secret-value") + + secret := &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: secretName, + Namespace: setup.Namespace.Name, + Annotations: map[string]string{ + secretlookup.AllowLookupAnnotation: crName, + }, + }, + StringData: map[string]string{ + secretKey: secretValue, + }, + Type: v1.SecretTypeOpaque, + } + kubeClient := setup.K8sClient + require.NoError(t, kubeClient.Create(ctx, secret)) + + trustedCluster := &resourcesv1.TeleportTrustedClusterV2{ + ObjectMeta: metav1.ObjectMeta{ + Name: crName, + Namespace: setup.Namespace.Name, + }, + Spec: resourcesv1.TeleportTrustedClusterV2Spec(trustedClusterV2Spec), + } + trustedCluster.Spec.Token = "secret://" + secretName + "/" + secretKey + + require.NoError(t, kubeClient.Create(ctx, trustedCluster)) + + testlib.FastEventually(t, func() bool { + trustedCluster, err := test.GetTeleportResource(ctx, crName) + if err != nil { + return false + } + return trustedCluster.GetToken() == secretValue + }) +} diff --git a/integrations/operator/crdgen/additional_doc.go b/integrations/operator/crdgen/additional_doc.go index 2458af6779bbc..396c94410808f 100644 --- a/integrations/operator/crdgen/additional_doc.go +++ b/integrations/operator/crdgen/additional_doc.go @@ -29,4 +29,7 @@ var additionalDescription = map[string]map[string]string{ "OIDCConnectorSpecV3": { "ClientSecret": supportsSecretLookupDescription, }, + "TrustedClusterSpecV2": { + "Token": supportsSecretLookupDescription, + }, } diff --git a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_trustedclustersv2.yaml b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_trustedclustersv2.yaml index 35310b3b2f70a..4cf1410472b64 100644 --- a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_trustedclustersv2.yaml +++ b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_trustedclustersv2.yaml @@ -57,7 +57,8 @@ spec: type: array token: description: Token is the authorization token provided by another - cluster needed by this cluster to join. + cluster needed by this cluster to join. This field supports secret + lookup. See the operator documentation for more details. type: string tunnel_addr: description: ReverseTunnelAddress is the address of the SSH proxy From 6b86dd14d578685b135cb698269bf65284af537e Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Fri, 6 Dec 2024 17:10:48 -0800 Subject: [PATCH 13/25] Update secret lookup docs --- .../teleport-operator/secret-lookup.mdx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/pages/admin-guides/infrastructure-as-code/teleport-operator/secret-lookup.mdx b/docs/pages/admin-guides/infrastructure-as-code/teleport-operator/secret-lookup.mdx index a23e4935c5051..ca8f2b20e5b60 100644 --- a/docs/pages/admin-guides/infrastructure-as-code/teleport-operator/secret-lookup.mdx +++ b/docs/pages/admin-guides/infrastructure-as-code/teleport-operator/secret-lookup.mdx @@ -11,7 +11,10 @@ of the Teleport Kubernetes operator CRs. Some Teleport resources might contain sensitive values. Select CR fields can reference an existing Kubernetes secret and the operator will retrieve the value from the secret when reconciling. -Currently only the GithubConnector and OIDCConnector `client_secret` field support secret lookup. +Currently supported fields for secret lookup: +- GithubConnector `client_secret` +- OIDCConnector `client_secret` +- TrustedClusterV2 `token` ## Prerequisites From 330a663fb8ccd45eb0dd90744eee35ceb2401c20 Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Fri, 6 Dec 2024 18:09:38 -0800 Subject: [PATCH 14/25] Fix error handling --- api/client/client.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/api/client/client.go b/api/client/client.go index 3dc3a46b01433..737c1e9ec4234 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -2299,9 +2299,12 @@ func (c *Client) UpsertTrustedClusterV2(ctx context.Context, trustedCluster type return nil, trace.BadParameter("invalid type %T", trustedCluster) } resp, err := c.grpc.UpsertTrustedClusterV2(ctx, trustedClusterV2) - if err != nil && trace.IsNotImplemented(err) { - return nil, trace.Wrap(err, "control plane does not support this operation, "+ - "consider upgrading your control plane") + if err != nil { + if trace.IsNotImplemented(err) { + return nil, trace.Wrap(err, "control plane does not support this operation, "+ + "consider upgrading your control plane") + } + return nil, trace.Wrap(err) } return resp, nil } From da215a711193c6b4794f4edc89fc874da2dbad5d Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Fri, 6 Dec 2024 18:12:37 -0800 Subject: [PATCH 15/25] Use V2 --- .../controllers/resources/trusted_clusterv2_controller_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go b/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go index 4f060874d34cd..b48b782041051 100644 --- a/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go +++ b/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go @@ -68,7 +68,7 @@ func (r *trustedClusterV2TestingPrimitives) CreateTeleportResource(ctx context.C return trace.Wrap(err) } trustedCluster.SetOrigin(types.OriginKubernetes) - _, err = r.setup.TeleportClient.UpsertTrustedCluster(ctx, trustedCluster) + _, err = r.setup.TeleportClient.UpsertTrustedClusterV2(ctx, trustedCluster) return trace.Wrap(err) } From 456a2fed202e98d23e3ffa88a2b7294f36977876 Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Tue, 10 Dec 2024 13:45:08 -0800 Subject: [PATCH 16/25] Implement CreateTrustedClusterV2 and UpdateTrustedClusterV2 --- api/client/client.go | 26 + api/client/proto/authservice.pb.go | 1971 +++++++++-------- .../legacy/client/proto/authservice.proto | 5 + integration/helpers/trustedclusters.go | 56 +- integration/integration_test.go | 142 +- integration/proxy/proxy_helpers.go | 2 +- lib/auth/auth_with_roles.go | 36 + lib/auth/grpcserver.go | 40 + lib/auth/trustedcluster.go | 84 +- lib/auth/trustedcluster_test.go | 154 ++ 10 files changed, 1535 insertions(+), 981 deletions(-) diff --git a/api/client/client.go b/api/client/client.go index 737c1e9ec4234..cf7b61dbc15d8 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -2309,6 +2309,32 @@ func (c *Client) UpsertTrustedClusterV2(ctx context.Context, trustedCluster type return resp, nil } +// CreateTrustedClusterV2 creates a Trusted Cluster. +func (c *Client) CreateTrustedClusterV2(ctx context.Context, trustedCluster types.TrustedCluster) (types.TrustedCluster, error) { + trustedClusterV2, ok := trustedCluster.(*types.TrustedClusterV2) + if !ok { + return nil, trace.BadParameter("invalid type %T", trustedCluster) + } + resp, err := c.grpc.CreateTrustedClusterV2(ctx, trustedClusterV2) + if err != nil { + return nil, trace.Wrap(err) + } + return resp, nil +} + +// UpdateTrustedClusterV2 updates a Trusted Cluster. +func (c *Client) UpdateTrustedClusterV2(ctx context.Context, trustedCluster types.TrustedCluster) (types.TrustedCluster, error) { + trustedClusterV2, ok := trustedCluster.(*types.TrustedClusterV2) + if !ok { + return nil, trace.BadParameter("invalid type %T", trustedCluster) + } + resp, err := c.grpc.UpdateTrustedClusterV2(ctx, trustedClusterV2) + if err != nil { + return nil, trace.Wrap(err) + } + return resp, nil +} + // DeleteTrustedCluster deletes a Trusted Cluster by name. func (c *Client) DeleteTrustedCluster(ctx context.Context, name string) error { if name == "" { diff --git a/api/client/proto/authservice.pb.go b/api/client/proto/authservice.pb.go index 2a6460972ffd2..d204fcc4430ac 100644 --- a/api/client/proto/authservice.pb.go +++ b/api/client/proto/authservice.pb.go @@ -15849,957 +15849,958 @@ func init() { } var fileDescriptor_0ffcffcda38ae159 = []byte{ - // 15186 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0xbd, 0x6b, 0x6c, 0x5c, 0x49, - 0x76, 0x18, 0xac, 0x6e, 0xbe, 0x0f, 0x1f, 0x6a, 0x15, 0x49, 0xb1, 0x45, 0x3d, 0x5a, 0xba, 0x1a, - 0xcd, 0x6a, 0xb4, 0xb3, 0x7a, 0x70, 0x1e, 0x3b, 0xaf, 0x9d, 0x99, 0x6e, 0x92, 0x12, 0x29, 0xf1, - 0x35, 0xb7, 0x49, 0x6a, 0x5e, 0xde, 0xde, 0xab, 0xee, 0x12, 0x79, 0xad, 0xe6, 0xbd, 0xbd, 0xf7, - 0xde, 0x96, 0x46, 0xeb, 0xcf, 0xfe, 0x60, 0xfb, 0x7b, 0xf8, 0xc3, 0x87, 0x24, 0x36, 0x90, 0x04, - 0x0e, 0xfc, 0xc3, 0x09, 0x90, 0x00, 0x41, 0x80, 0x00, 0xfe, 0x13, 0xf8, 0x97, 0x7f, 0xe4, 0x57, - 0x36, 0x06, 0x82, 0xc4, 0xb0, 0xfd, 0x27, 0x40, 0xe8, 0x64, 0x01, 0xff, 0x21, 0x92, 0x00, 0x46, - 0x90, 0x00, 0x59, 0xc0, 0x40, 0x50, 0xa7, 0x1e, 0xb7, 0xea, 0x3e, 0xba, 0x49, 0x49, 0xb3, 0xce, - 0x1f, 0x89, 0x7d, 0xea, 0x9c, 0x53, 0x55, 0xa7, 0xea, 0x56, 0x9d, 0x3a, 0x75, 0xea, 0x1c, 0xb8, - 0x19, 0xd1, 0x36, 0xed, 0xf8, 0x41, 0x74, 0xab, 0x4d, 0xf7, 0x9c, 0xe6, 0xf3, 0x5b, 0xcd, 0xb6, - 0x4b, 0xbd, 0xe8, 0x56, 0x27, 0xf0, 0x23, 0xff, 0x96, 0xd3, 0x8d, 0xf6, 0x43, 0x1a, 0x3c, 0x75, - 0x9b, 0xf4, 0x26, 0x42, 0xc8, 0x10, 0xfe, 0x37, 0x3f, 0xb3, 0xe7, 0xef, 0xf9, 0x1c, 0x87, 0xfd, - 0xc5, 0x0b, 0xe7, 0xcf, 0xef, 0xf9, 0xfe, 0x5e, 0x9b, 0x72, 0xe2, 0x47, 0xdd, 0xc7, 0xb7, 0xe8, - 0x41, 0x27, 0x7a, 0x2e, 0x0a, 0x2b, 0xc9, 0xc2, 0xc8, 0x3d, 0xa0, 0x61, 0xe4, 0x1c, 0x74, 0x04, - 0xc2, 0x1b, 0xaa, 0x29, 0x4e, 0x14, 0xb1, 0x92, 0xc8, 0xf5, 0xbd, 0x5b, 0x4f, 0xef, 0xe8, 0x3f, - 0x05, 0xea, 0xf5, 0x9e, 0xad, 0x6e, 0xd2, 0x20, 0x0a, 0x8f, 0x85, 0x49, 0x9f, 0x52, 0x2f, 0x4a, - 0x55, 0x2f, 0x30, 0xa3, 0xe7, 0x1d, 0x1a, 0x72, 0x14, 0xf9, 0x9f, 0x40, 0xbd, 0x92, 0x8d, 0x8a, - 0xff, 0x0a, 0x94, 0xef, 0x65, 0xa3, 0x3c, 0xa3, 0x8f, 0x98, 0x4c, 0x3d, 0xf5, 0x47, 0x1f, 0xf4, - 0xc0, 0xe9, 0x74, 0x68, 0x10, 0xff, 0x21, 0xd0, 0xcf, 0x29, 0xf4, 0x83, 0xc7, 0x0e, 0x13, 0xd1, - 0xc1, 0x63, 0x27, 0xd5, 0x8d, 0x6e, 0xe8, 0xec, 0x51, 0xd1, 0xfc, 0xa7, 0x77, 0xf4, 0x9f, 0x1c, - 0xd5, 0xfa, 0xfd, 0x02, 0x0c, 0x3d, 0x74, 0xa2, 0xe6, 0x3e, 0xf9, 0x04, 0x86, 0x1e, 0xb8, 0x5e, - 0x2b, 0x2c, 0x17, 0x2e, 0x0f, 0x5c, 0x1f, 0x5f, 0x28, 0xdd, 0xe4, 0x5d, 0xc1, 0x42, 0x56, 0x50, - 0x9b, 0xfb, 0xe9, 0x61, 0xe5, 0xd4, 0xd1, 0x61, 0xe5, 0xf4, 0x13, 0x86, 0xf6, 0xa6, 0x7f, 0xe0, - 0x46, 0x38, 0xb6, 0x36, 0xa7, 0x23, 0x3b, 0x30, 0x5d, 0x6d, 0xb7, 0xfd, 0x67, 0x5b, 0x4e, 0x10, - 0xb9, 0x4e, 0xbb, 0xde, 0x6d, 0x36, 0x69, 0x18, 0x96, 0x8b, 0x97, 0x0b, 0xd7, 0x47, 0x6b, 0x57, - 0x8f, 0x0e, 0x2b, 0x15, 0x87, 0x15, 0x37, 0x3a, 0xbc, 0xbc, 0x11, 0x72, 0x04, 0x8d, 0x51, 0x16, - 0xbd, 0xf5, 0xc7, 0xc3, 0x50, 0x5a, 0xf1, 0xc3, 0x68, 0x91, 0x8d, 0xa8, 0x4d, 0x7f, 0xdc, 0xa5, - 0x61, 0x44, 0xae, 0xc2, 0x30, 0x83, 0xad, 0x2e, 0x95, 0x0b, 0x97, 0x0b, 0xd7, 0xc7, 0x6a, 0xe3, - 0x47, 0x87, 0x95, 0x91, 0x7d, 0x3f, 0x8c, 0x1a, 0x6e, 0xcb, 0x16, 0x45, 0xe4, 0x0d, 0x18, 0xdd, - 0xf0, 0x5b, 0x74, 0xc3, 0x39, 0xa0, 0xd8, 0x8a, 0xb1, 0xda, 0xe4, 0xd1, 0x61, 0x65, 0xcc, 0xf3, - 0x5b, 0xb4, 0xe1, 0x39, 0x07, 0xd4, 0x56, 0xc5, 0x64, 0x17, 0x06, 0x6d, 0xbf, 0x4d, 0xcb, 0x03, - 0x88, 0x56, 0x3b, 0x3a, 0xac, 0x0c, 0x06, 0x7e, 0x9b, 0xfe, 0xfc, 0xb0, 0xf2, 0xee, 0x9e, 0x1b, - 0xed, 0x77, 0x1f, 0xdd, 0x6c, 0xfa, 0x07, 0xb7, 0xf6, 0x02, 0xe7, 0xa9, 0xcb, 0x27, 0xa1, 0xd3, - 0xbe, 0x15, 0x4f, 0xd5, 0x8e, 0x2b, 0xc6, 0xbd, 0xfe, 0x3c, 0x8c, 0xe8, 0x01, 0xe3, 0x64, 0x23, - 0x3f, 0xf2, 0x10, 0x66, 0xaa, 0xad, 0x96, 0xcb, 0x29, 0xb6, 0x02, 0xd7, 0x6b, 0xba, 0x1d, 0xa7, - 0x1d, 0x96, 0x07, 0x2f, 0x0f, 0x5c, 0x1f, 0x13, 0x42, 0x51, 0xe5, 0x8d, 0x8e, 0x42, 0xd0, 0x84, - 0x92, 0xc9, 0x80, 0xbc, 0x05, 0xa3, 0x4b, 0x1b, 0x75, 0xd6, 0xf6, 0xb0, 0x3c, 0x84, 0xcc, 0xe6, - 0x8e, 0x0e, 0x2b, 0xd3, 0x2d, 0x2f, 0xc4, 0xae, 0xe9, 0x0c, 0x14, 0x22, 0x79, 0x17, 0x26, 0xb6, - 0xba, 0x8f, 0xda, 0x6e, 0x73, 0x7b, 0xad, 0xfe, 0x80, 0x3e, 0x2f, 0x0f, 0x5f, 0x2e, 0x5c, 0x9f, - 0xa8, 0x91, 0xa3, 0xc3, 0xca, 0x54, 0x07, 0xe1, 0x8d, 0xa8, 0x1d, 0x36, 0x9e, 0xd0, 0xe7, 0xb6, - 0x81, 0x17, 0xd3, 0xd5, 0xeb, 0x2b, 0x8c, 0x6e, 0x24, 0x45, 0x17, 0x86, 0xfb, 0x3a, 0x1d, 0xc7, - 0x23, 0xb7, 0x00, 0x6c, 0x7a, 0xe0, 0x47, 0xb4, 0xda, 0x6a, 0x05, 0xe5, 0x51, 0x94, 0xed, 0xe9, - 0xa3, 0xc3, 0xca, 0x78, 0x80, 0xd0, 0x86, 0xd3, 0x6a, 0x05, 0xb6, 0x86, 0x42, 0x16, 0x61, 0xd4, - 0xf6, 0xb9, 0x80, 0xcb, 0x63, 0x97, 0x0b, 0xd7, 0xc7, 0x17, 0x4e, 0x8b, 0x69, 0x28, 0xc1, 0xb5, - 0xb3, 0x47, 0x87, 0x15, 0x12, 0x88, 0x5f, 0x7a, 0x2f, 0x25, 0x06, 0xa9, 0xc0, 0xc8, 0x86, 0xbf, - 0xe8, 0x34, 0xf7, 0x69, 0x19, 0x70, 0xee, 0x0d, 0x1d, 0x1d, 0x56, 0x0a, 0xdf, 0xb3, 0x25, 0x94, - 0x3c, 0x85, 0xf1, 0x78, 0xa0, 0xc2, 0xf2, 0x38, 0x8a, 0x6f, 0xfb, 0xe8, 0xb0, 0x72, 0x36, 0x44, - 0x70, 0x83, 0x0d, 0xbd, 0x26, 0xc1, 0x97, 0x98, 0x05, 0x7a, 0x45, 0xe4, 0x6b, 0x98, 0x8d, 0x7f, - 0x56, 0xc3, 0x90, 0x06, 0x8c, 0xc7, 0xea, 0x52, 0x79, 0x12, 0x25, 0xf3, 0xfa, 0xd1, 0x61, 0xc5, + // 15203 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0xbd, 0x5b, 0x6c, 0x5c, 0x59, + 0x76, 0x18, 0xaa, 0x2a, 0xbe, 0x17, 0x1f, 0x2a, 0x6d, 0x92, 0x62, 0x89, 0x7a, 0x94, 0x74, 0xd4, + 0xea, 0x51, 0x6b, 0x7a, 0xf4, 0x60, 0x3f, 0xa6, 0x5f, 0xd3, 0xdd, 0x55, 0x24, 0x25, 0x52, 0xe2, + 0xab, 0x4f, 0x91, 0x54, 0xbf, 0x3c, 0x35, 0x47, 0x55, 0x5b, 0xe4, 0xb1, 0x8a, 0xe7, 0xd4, 0x9c, + 0x73, 0x4a, 0x6a, 0x8d, 0xaf, 0x7d, 0x61, 0xfb, 0x3e, 0x7c, 0x71, 0x71, 0x6f, 0x6c, 0x20, 0x09, + 0x1c, 0x24, 0x80, 0x13, 0x20, 0x01, 0x8c, 0x00, 0x01, 0xfc, 0x13, 0xf8, 0xcb, 0x1f, 0xf9, 0xca, + 0xc4, 0x40, 0x90, 0x18, 0xb6, 0x7f, 0x02, 0x84, 0x4e, 0x06, 0xf0, 0x0f, 0x91, 0x04, 0x30, 0x82, + 0x04, 0xc8, 0x00, 0x06, 0x82, 0xbd, 0xf6, 0xe3, 0xec, 0x7d, 0x1e, 0x55, 0xa4, 0xa4, 0x1e, 0xe7, + 0x47, 0x62, 0xad, 0xbd, 0xd6, 0xda, 0xcf, 0xb3, 0xf7, 0x5a, 0x6b, 0xaf, 0xbd, 0x16, 0xdc, 0x8c, + 0x68, 0x9b, 0x76, 0xfc, 0x20, 0xba, 0xd5, 0xa6, 0x7b, 0x4e, 0xf3, 0xf9, 0xad, 0x66, 0xdb, 0xa5, + 0x5e, 0x74, 0xab, 0x13, 0xf8, 0x91, 0x7f, 0xcb, 0xe9, 0x46, 0xfb, 0x21, 0x0d, 0x9e, 0xba, 0x4d, + 0x7a, 0x13, 0x21, 0x64, 0x08, 0xff, 0x9b, 0x9f, 0xd9, 0xf3, 0xf7, 0x7c, 0x8e, 0xc3, 0xfe, 0xe2, + 0x85, 0xf3, 0xe7, 0xf7, 0x7c, 0x7f, 0xaf, 0x4d, 0x39, 0xf1, 0xa3, 0xee, 0xe3, 0x5b, 0xf4, 0xa0, + 0x13, 0x3d, 0x17, 0x85, 0x95, 0x64, 0x61, 0xe4, 0x1e, 0xd0, 0x30, 0x72, 0x0e, 0x3a, 0x02, 0xe1, + 0x0d, 0xd5, 0x14, 0x27, 0x8a, 0x58, 0x49, 0xe4, 0xfa, 0xde, 0xad, 0xa7, 0x77, 0xf4, 0x9f, 0x02, + 0xf5, 0x7a, 0xcf, 0x56, 0x37, 0x69, 0x10, 0x85, 0xc7, 0xc2, 0xa4, 0x4f, 0xa9, 0x17, 0xa5, 0xaa, + 0x17, 0x98, 0xd1, 0xf3, 0x0e, 0x0d, 0x39, 0x8a, 0xfc, 0x4f, 0xa0, 0x5e, 0xc9, 0x46, 0xc5, 0x7f, + 0x05, 0xca, 0xf7, 0xb2, 0x51, 0x9e, 0xd1, 0x47, 0x6c, 0x4c, 0x3d, 0xf5, 0x47, 0x1f, 0xf4, 0xc0, + 0xe9, 0x74, 0x68, 0x10, 0xff, 0x21, 0xd0, 0xcf, 0x29, 0xf4, 0x83, 0xc7, 0x0e, 0x1b, 0xa2, 0x83, + 0xc7, 0x4e, 0xaa, 0x1b, 0xdd, 0xd0, 0xd9, 0xa3, 0xa2, 0xf9, 0x4f, 0xef, 0xe8, 0x3f, 0x39, 0xaa, + 0xf5, 0x7b, 0x05, 0x18, 0x7a, 0xe8, 0x44, 0xcd, 0x7d, 0xf2, 0x09, 0x0c, 0x3d, 0x70, 0xbd, 0x56, + 0x58, 0x2e, 0x5c, 0x1e, 0xb8, 0x3e, 0xbe, 0x50, 0xba, 0xc9, 0xbb, 0x82, 0x85, 0xac, 0xa0, 0x36, + 0xf7, 0xd3, 0xc3, 0xca, 0xa9, 0xa3, 0xc3, 0xca, 0xe9, 0x27, 0x0c, 0xed, 0x4d, 0xff, 0xc0, 0x8d, + 0x70, 0x6e, 0x6d, 0x4e, 0x47, 0x76, 0x60, 0xba, 0xda, 0x6e, 0xfb, 0xcf, 0xb6, 0x9c, 0x20, 0x72, + 0x9d, 0x76, 0xbd, 0xdb, 0x6c, 0xd2, 0x30, 0x2c, 0x17, 0x2f, 0x17, 0xae, 0x8f, 0xd6, 0xae, 0x1e, + 0x1d, 0x56, 0x2a, 0x0e, 0x2b, 0x6e, 0x74, 0x78, 0x79, 0x23, 0xe4, 0x08, 0x1a, 0xa3, 0x2c, 0x7a, + 0xeb, 0x8f, 0x87, 0xa1, 0xb4, 0xe2, 0x87, 0xd1, 0x22, 0x9b, 0x51, 0x9b, 0xfe, 0xb8, 0x4b, 0xc3, + 0x88, 0x5c, 0x85, 0x61, 0x06, 0x5b, 0x5d, 0x2a, 0x17, 0x2e, 0x17, 0xae, 0x8f, 0xd5, 0xc6, 0x8f, + 0x0e, 0x2b, 0x23, 0xfb, 0x7e, 0x18, 0x35, 0xdc, 0x96, 0x2d, 0x8a, 0xc8, 0x1b, 0x30, 0xba, 0xe1, + 0xb7, 0xe8, 0x86, 0x73, 0x40, 0xb1, 0x15, 0x63, 0xb5, 0xc9, 0xa3, 0xc3, 0xca, 0x98, 0xe7, 0xb7, + 0x68, 0xc3, 0x73, 0x0e, 0xa8, 0xad, 0x8a, 0xc9, 0x2e, 0x0c, 0xda, 0x7e, 0x9b, 0x96, 0x07, 0x10, + 0xad, 0x76, 0x74, 0x58, 0x19, 0x0c, 0xfc, 0x36, 0xfd, 0xf9, 0x61, 0xe5, 0xdd, 0x3d, 0x37, 0xda, + 0xef, 0x3e, 0xba, 0xd9, 0xf4, 0x0f, 0x6e, 0xed, 0x05, 0xce, 0x53, 0x97, 0x2f, 0x42, 0xa7, 0x7d, + 0x2b, 0x5e, 0xaa, 0x1d, 0x57, 0xcc, 0x7b, 0xfd, 0x79, 0x18, 0xd1, 0x03, 0xc6, 0xc9, 0x46, 0x7e, + 0xe4, 0x21, 0xcc, 0x54, 0x5b, 0x2d, 0x97, 0x53, 0x6c, 0x05, 0xae, 0xd7, 0x74, 0x3b, 0x4e, 0x3b, + 0x2c, 0x0f, 0x5e, 0x1e, 0xb8, 0x3e, 0x26, 0x06, 0x45, 0x95, 0x37, 0x3a, 0x0a, 0x41, 0x1b, 0x94, + 0x4c, 0x06, 0xe4, 0x2d, 0x18, 0x5d, 0xda, 0xa8, 0xb3, 0xb6, 0x87, 0xe5, 0x21, 0x64, 0x36, 0x77, + 0x74, 0x58, 0x99, 0x6e, 0x79, 0x21, 0x76, 0x4d, 0x67, 0xa0, 0x10, 0xc9, 0xbb, 0x30, 0xb1, 0xd5, + 0x7d, 0xd4, 0x76, 0x9b, 0xdb, 0x6b, 0xf5, 0x07, 0xf4, 0x79, 0x79, 0xf8, 0x72, 0xe1, 0xfa, 0x44, + 0x8d, 0x1c, 0x1d, 0x56, 0xa6, 0x3a, 0x08, 0x6f, 0x44, 0xed, 0xb0, 0xf1, 0x84, 0x3e, 0xb7, 0x0d, + 0xbc, 0x98, 0xae, 0x5e, 0x5f, 0x61, 0x74, 0x23, 0x29, 0xba, 0x30, 0xdc, 0xd7, 0xe9, 0x38, 0x1e, + 0xb9, 0x05, 0x60, 0xd3, 0x03, 0x3f, 0xa2, 0xd5, 0x56, 0x2b, 0x28, 0x8f, 0xe2, 0xd8, 0x9e, 0x3e, + 0x3a, 0xac, 0x8c, 0x07, 0x08, 0x6d, 0x38, 0xad, 0x56, 0x60, 0x6b, 0x28, 0x64, 0x11, 0x46, 0x6d, + 0x9f, 0x0f, 0x70, 0x79, 0xec, 0x72, 0xe1, 0xfa, 0xf8, 0xc2, 0x69, 0xb1, 0x0c, 0x25, 0xb8, 0x76, + 0xf6, 0xe8, 0xb0, 0x42, 0x02, 0xf1, 0x4b, 0xef, 0xa5, 0xc4, 0x20, 0x15, 0x18, 0xd9, 0xf0, 0x17, + 0x9d, 0xe6, 0x3e, 0x2d, 0x03, 0xae, 0xbd, 0xa1, 0xa3, 0xc3, 0x4a, 0xe1, 0x7b, 0xb6, 0x84, 0x92, + 0xa7, 0x30, 0x1e, 0x4f, 0x54, 0x58, 0x1e, 0xc7, 0xe1, 0xdb, 0x3e, 0x3a, 0xac, 0x9c, 0x0d, 0x11, + 0xdc, 0x60, 0x53, 0xaf, 0x8d, 0xe0, 0x4b, 0xac, 0x02, 0xbd, 0x22, 0xf2, 0x35, 0xcc, 0xc6, 0x3f, + 0xab, 0x61, 0x48, 0x03, 0xc6, 0x63, 0x75, 0xa9, 0x3c, 0x89, 0x23, 0xf3, 0xfa, 0xd1, 0x61, 0xc5, 0xd2, 0x5a, 0xd0, 0x70, 0x24, 0x4a, 0xc3, 0x6d, 0x69, 0x3d, 0xcd, 0x66, 0x72, 0x7f, 0x70, 0x74, 0xa2, 0x34, 0x69, 0x5f, 0xdc, 0xf1, 0xc2, 0xc8, 0x79, 0xd4, 0xa6, 0x99, 0x48, 0xd6, 0x5f, 0x17, - 0x80, 0x6c, 0x76, 0xa8, 0x57, 0xaf, 0xaf, 0xb0, 0xef, 0x49, 0x7e, 0x4e, 0x6f, 0xc2, 0x18, 0x1f, - 0x38, 0x36, 0xba, 0x45, 0x1c, 0xdd, 0xa9, 0xa3, 0xc3, 0x0a, 0x88, 0xd1, 0x65, 0x23, 0x1b, 0x23, + 0x80, 0x6c, 0x76, 0xa8, 0x57, 0xaf, 0xaf, 0xb0, 0xef, 0x49, 0x7e, 0x4e, 0x6f, 0xc2, 0x18, 0x9f, + 0x38, 0x36, 0xbb, 0x45, 0x9c, 0xdd, 0xa9, 0xa3, 0xc3, 0x0a, 0x88, 0xd9, 0x65, 0x33, 0x1b, 0x23, 0x90, 0x6b, 0x30, 0xb0, 0xbd, 0xbd, 0x86, 0xdf, 0xca, 0x40, 0x6d, 0xfa, 0xe8, 0xb0, 0x32, 0x10, - 0x45, 0xed, 0x9f, 0x1f, 0x56, 0x46, 0x97, 0xba, 0x01, 0x8a, 0xc5, 0x66, 0xe5, 0xe4, 0x1a, 0x8c, - 0x2c, 0xb6, 0xbb, 0x61, 0x44, 0x83, 0xf2, 0x60, 0xfc, 0x91, 0x36, 0x39, 0xc8, 0x96, 0x65, 0xe4, - 0xbb, 0x30, 0xb8, 0x13, 0xd2, 0xa0, 0x3c, 0x84, 0xe3, 0x3d, 0x29, 0xc6, 0x9b, 0x81, 0x76, 0x17, - 0x6a, 0xa3, 0xec, 0x4b, 0xec, 0x86, 0x34, 0xb0, 0x11, 0x89, 0xdc, 0x84, 0x21, 0x3e, 0x68, 0xc3, - 0xb8, 0x48, 0x4d, 0xaa, 0xd9, 0xd1, 0xa6, 0xbb, 0xef, 0xd6, 0xc6, 0x8e, 0x0e, 0x2b, 0x43, 0x38, - 0x78, 0x36, 0x47, 0xbb, 0x3f, 0x38, 0x5a, 0x28, 0x15, 0xed, 0x51, 0x46, 0xcb, 0x3e, 0x0b, 0xeb, - 0xbb, 0x30, 0xae, 0x75, 0x9f, 0x5c, 0x80, 0x41, 0xf6, 0x3f, 0x2e, 0x22, 0x13, 0xbc, 0x32, 0xb6, - 0x71, 0xd8, 0x08, 0xb5, 0xfe, 0xe1, 0x34, 0x94, 0x18, 0xa5, 0xb1, 0xf2, 0xdc, 0xd4, 0x45, 0xc5, - 0xe9, 0x4a, 0xa6, 0xa8, 0xca, 0x05, 0x5d, 0x58, 0xd7, 0x41, 0xd5, 0x2e, 0x16, 0xa1, 0x89, 0xa3, - 0xc3, 0xca, 0x68, 0x57, 0xc0, 0xe2, 0xb6, 0x91, 0x3a, 0x8c, 0x2c, 0x7f, 0xd3, 0x71, 0x03, 0x1a, - 0xa2, 0x68, 0xc7, 0x17, 0xe6, 0x6f, 0xf2, 0xed, 0xf2, 0xa6, 0xdc, 0x2e, 0x6f, 0x6e, 0xcb, 0xed, - 0xb2, 0x76, 0x51, 0x2c, 0xc6, 0x67, 0x28, 0x27, 0x89, 0xe7, 0xc7, 0x6f, 0xff, 0x45, 0xa5, 0x60, - 0x4b, 0x4e, 0xe4, 0x4d, 0x18, 0xbe, 0xeb, 0x07, 0x07, 0x4e, 0x24, 0xc6, 0x60, 0xe6, 0xe8, 0xb0, - 0x52, 0x7a, 0x8c, 0x10, 0x6d, 0x4a, 0x09, 0x1c, 0x72, 0x17, 0xa6, 0x6c, 0xbf, 0x1b, 0xd1, 0x6d, - 0x5f, 0x8e, 0xdc, 0x10, 0x52, 0x5d, 0x3a, 0x3a, 0xac, 0xcc, 0x07, 0xac, 0xa4, 0x11, 0xf9, 0x0d, - 0x31, 0x84, 0x1a, 0x7d, 0x82, 0x8a, 0x2c, 0xc3, 0x54, 0x15, 0x57, 0x6f, 0x21, 0x35, 0x3e, 0x5e, - 0x63, 0xb5, 0x8b, 0x47, 0x87, 0x95, 0x73, 0x0e, 0x96, 0x34, 0x02, 0x51, 0xa4, 0xb3, 0x31, 0x89, - 0xc8, 0x06, 0x9c, 0x79, 0xd0, 0x7d, 0x44, 0x03, 0x8f, 0x46, 0x34, 0x94, 0x2d, 0x1a, 0xc1, 0x16, - 0x5d, 0x3e, 0x3a, 0xac, 0x5c, 0x78, 0xa2, 0x0a, 0x33, 0xda, 0x94, 0x26, 0x25, 0x14, 0x4e, 0x8b, - 0x86, 0x2e, 0x39, 0x91, 0xf3, 0xc8, 0x09, 0x29, 0x2e, 0x4a, 0xe3, 0x0b, 0x67, 0xb9, 0x88, 0x6f, - 0x26, 0x4a, 0x6b, 0x57, 0x85, 0x94, 0xcf, 0xab, 0xbe, 0xb7, 0x44, 0x91, 0x56, 0x51, 0x92, 0x27, - 0x5b, 0x9b, 0xd5, 0xbe, 0x33, 0x86, 0xad, 0xc5, 0xb5, 0x59, 0xed, 0x3b, 0xfa, 0xaa, 0xa5, 0x76, - 0xa0, 0x35, 0x18, 0xda, 0x61, 0xbb, 0x33, 0xae, 0x59, 0x53, 0x0b, 0x57, 0x44, 0x8b, 0x92, 0xf3, - 0xef, 0x26, 0xfb, 0x81, 0x88, 0xf8, 0xe5, 0x9d, 0xc6, 0x1d, 0x5d, 0xdf, 0x8b, 0xb1, 0x8c, 0x7c, - 0x06, 0x20, 0x5a, 0x55, 0xed, 0x74, 0xca, 0xe3, 0xd8, 0xc9, 0x33, 0x66, 0x27, 0xab, 0x9d, 0x4e, - 0xed, 0x92, 0xe8, 0xdf, 0x59, 0xd5, 0x3f, 0xa7, 0xd3, 0xd1, 0xb8, 0x69, 0x4c, 0xc8, 0x27, 0x30, - 0x81, 0x4b, 0x9a, 0x1c, 0xd1, 0x09, 0x1c, 0xd1, 0xf3, 0x47, 0x87, 0x95, 0x39, 0x5c, 0xad, 0x32, - 0xc6, 0xd3, 0x20, 0x20, 0xbf, 0x06, 0xb3, 0x82, 0xdd, 0x43, 0xd7, 0x6b, 0xf9, 0xcf, 0xc2, 0x25, - 0x1a, 0x3e, 0x89, 0xfc, 0x0e, 0x2e, 0x7f, 0xe3, 0x0b, 0x17, 0xcc, 0xe6, 0x99, 0x38, 0xb5, 0x1b, - 0xa2, 0xa5, 0x96, 0x6a, 0xe9, 0x33, 0x8e, 0xd0, 0x68, 0x71, 0x0c, 0x7d, 0x81, 0xcc, 0x64, 0x41, - 0x56, 0xe1, 0xf4, 0x4e, 0x48, 0x8d, 0x3e, 0x4c, 0xe1, 0xfe, 0x50, 0x61, 0x23, 0xdc, 0x0d, 0x69, - 0x23, 0xaf, 0x1f, 0x49, 0x3a, 0x62, 0x03, 0x59, 0x0a, 0xfc, 0x4e, 0x62, 0x8e, 0x9f, 0x46, 0x89, - 0x58, 0x47, 0x87, 0x95, 0x4b, 0xad, 0xc0, 0xef, 0x34, 0xf2, 0x27, 0x7a, 0x06, 0x35, 0xf9, 0x21, - 0x9c, 0x5d, 0xf4, 0x3d, 0x8f, 0x36, 0xd9, 0x0a, 0xba, 0xe4, 0x3a, 0x7b, 0x9e, 0x1f, 0x46, 0x6e, - 0x73, 0x75, 0xa9, 0x5c, 0x8a, 0xb7, 0x87, 0xa6, 0xc2, 0x68, 0xb4, 0x14, 0x8a, 0xb9, 0x3d, 0xe4, - 0x70, 0x21, 0x5f, 0xc1, 0xa4, 0xa8, 0x8b, 0x06, 0x38, 0x35, 0xcf, 0xf4, 0x9e, 0x68, 0x0a, 0x99, - 0x6f, 0xf4, 0x81, 0xfc, 0xc9, 0x55, 0x27, 0x93, 0x17, 0xf9, 0x1a, 0xc6, 0xd7, 0xef, 0x56, 0x6d, - 0x1a, 0x76, 0x7c, 0x2f, 0xa4, 0x65, 0x82, 0x23, 0x7a, 0x49, 0xb0, 0x5e, 0xbf, 0x5b, 0xad, 0x76, - 0xa3, 0x7d, 0xea, 0x45, 0x6e, 0xd3, 0x89, 0xa8, 0xc4, 0xaa, 0xcd, 0xb3, 0x99, 0x77, 0xf0, 0xd8, - 0x69, 0x04, 0x02, 0xa2, 0xf5, 0x42, 0x67, 0x47, 0xe6, 0x61, 0xb4, 0x5e, 0x5f, 0x59, 0xf3, 0xf7, - 0x5c, 0xaf, 0x3c, 0xcd, 0x84, 0x61, 0xab, 0xdf, 0xe4, 0x31, 0xcc, 0x6a, 0x67, 0x83, 0x06, 0xfb, - 0x9f, 0x1e, 0x50, 0x2f, 0x2a, 0xcf, 0x60, 0x1b, 0xbe, 0xa7, 0x0e, 0x37, 0x37, 0xf5, 0x23, 0xc4, - 0xd3, 0x3b, 0x37, 0xab, 0xf1, 0xcf, 0xba, 0x24, 0xaa, 0x15, 0xcb, 0x05, 0x7b, 0xc6, 0xc9, 0x28, - 0x21, 0xdb, 0x30, 0xb2, 0xd5, 0x0d, 0x3a, 0x7e, 0x48, 0xcb, 0xb3, 0x28, 0xb8, 0xab, 0xbd, 0xbe, - 0x50, 0x81, 0x5a, 0x9b, 0x65, 0x4b, 0x74, 0x87, 0xff, 0xd0, 0x7a, 0x27, 0x59, 0x91, 0x4f, 0x61, - 0xa2, 0x5e, 0x5f, 0x89, 0x37, 0x94, 0xb3, 0xb8, 0xa1, 0x5c, 0x38, 0x3a, 0xac, 0x94, 0x99, 0x4a, - 0x15, 0x6f, 0x2a, 0xfa, 0x57, 0xa5, 0x53, 0x30, 0x0e, 0xdb, 0x6b, 0xf5, 0x98, 0xc3, 0x5c, 0xcc, - 0x81, 0x29, 0x73, 0xd9, 0x1c, 0x74, 0x0a, 0xf2, 0xcf, 0x0b, 0x70, 0x59, 0x67, 0x99, 0x25, 0x98, - 0xf2, 0xb9, 0x17, 0x91, 0xe6, 0xc2, 0xd1, 0x61, 0xe5, 0xa6, 0xd9, 0x8f, 0x46, 0xe6, 0x60, 0x69, - 0x6d, 0xeb, 0xdb, 0x14, 0x6c, 0xaf, 0xde, 0x81, 0xcc, 0xf6, 0xce, 0xbf, 0x70, 0x7b, 0x4d, 0xa9, - 0xf5, 0x6f, 0x6f, 0xbf, 0xa6, 0x58, 0x9f, 0xc3, 0x98, 0x5a, 0xb4, 0xc9, 0x08, 0x0c, 0x54, 0xdb, - 0xed, 0xd2, 0x29, 0xf6, 0x47, 0xbd, 0xbe, 0x52, 0x2a, 0x90, 0x29, 0x80, 0x78, 0xa7, 0x2a, 0x15, - 0xc9, 0x04, 0x8c, 0xca, 0x9d, 0xa4, 0x34, 0x80, 0xf8, 0x9d, 0x4e, 0x69, 0x90, 0x10, 0x98, 0x32, - 0xd7, 0xb3, 0xd2, 0x90, 0xf5, 0x3b, 0x05, 0x18, 0x53, 0xdf, 0x21, 0x39, 0x0d, 0xe3, 0x3b, 0x1b, - 0xf5, 0xad, 0xe5, 0xc5, 0xd5, 0xbb, 0xab, 0xcb, 0x4b, 0xa5, 0x53, 0xe4, 0x22, 0x9c, 0xdb, 0xae, - 0xaf, 0x34, 0x96, 0x6a, 0x8d, 0xb5, 0xcd, 0xc5, 0xea, 0x5a, 0x63, 0xcb, 0xde, 0xfc, 0xfc, 0x8b, - 0xc6, 0xf6, 0xce, 0xc6, 0xc6, 0xf2, 0x5a, 0xa9, 0x40, 0xca, 0x30, 0xc3, 0x8a, 0x1f, 0xec, 0xd4, - 0x96, 0x75, 0x84, 0x52, 0x91, 0x5c, 0x81, 0x8b, 0x59, 0x25, 0x8d, 0x95, 0xe5, 0xea, 0xd2, 0xda, - 0x72, 0xbd, 0x5e, 0x1a, 0x20, 0x73, 0x30, 0xcd, 0x50, 0xaa, 0x5b, 0x5b, 0x06, 0xed, 0xa0, 0xd5, - 0x86, 0x71, 0xed, 0x03, 0x20, 0x17, 0xa0, 0xbc, 0xb8, 0x6c, 0x6f, 0x37, 0xb6, 0x76, 0xec, 0xad, - 0xcd, 0xfa, 0x72, 0xc3, 0x6c, 0x61, 0xb2, 0x74, 0x6d, 0xf3, 0xde, 0xea, 0x46, 0x83, 0x81, 0xea, - 0xa5, 0x02, 0x6b, 0x86, 0x51, 0x5a, 0x5f, 0xdd, 0xb8, 0xb7, 0xb6, 0xdc, 0xd8, 0xa9, 0x2f, 0x0b, - 0x94, 0xa2, 0xf5, 0x1b, 0xc5, 0xd4, 0x96, 0x4e, 0x16, 0x60, 0xbc, 0xce, 0xed, 0x15, 0xb8, 0xcc, - 0xf1, 0x03, 0x22, 0xd3, 0xd1, 0x26, 0x84, 0x19, 0x83, 0xaf, 0x60, 0x3a, 0x12, 0xd3, 0xd2, 0xb6, - 0xd8, 0xd7, 0xdc, 0xf4, 0xdb, 0xba, 0x96, 0xd6, 0x11, 0x30, 0x5b, 0x95, 0x92, 0x05, 0x4d, 0x9f, - 0xe3, 0xa7, 0x45, 0x3c, 0x91, 0x48, 0x7d, 0x4e, 0xdf, 0xdb, 0x95, 0x66, 0xb7, 0x10, 0x0f, 0xa9, - 0x50, 0xc3, 0x90, 0x26, 0x43, 0x97, 0x50, 0x78, 0xe4, 0x0d, 0xa9, 0xe9, 0xf2, 0xd3, 0x1d, 0x6e, - 0xf6, 0x89, 0x73, 0x89, 0x50, 0x72, 0xad, 0x6e, 0xce, 0xc6, 0x4a, 0x3e, 0x4c, 0xce, 0x19, 0x21, - 0x0c, 0x64, 0x96, 0xd8, 0x3f, 0xed, 0x04, 0x2a, 0xa9, 0xc0, 0x10, 0x5f, 0x71, 0xb9, 0x3c, 0x50, - 0xb7, 0x6e, 0x33, 0x80, 0xcd, 0xe1, 0xd6, 0x9f, 0x0c, 0xe8, 0x4a, 0x06, 0xd3, 0xa5, 0x35, 0x79, - 0xa3, 0x2e, 0x8d, 0x72, 0x46, 0x28, 0x3b, 0x0a, 0xf2, 0xaf, 0x04, 0x8f, 0x82, 0x03, 0xf1, 0x51, - 0x50, 0x7c, 0x6a, 0xfc, 0x28, 0x18, 0xa3, 0xb0, 0x51, 0x14, 0x6a, 0x1b, 0x72, 0x1d, 0x8c, 0x47, - 0x51, 0xa8, 0x7a, 0x62, 0x14, 0x35, 0x24, 0xf2, 0x01, 0x40, 0xf5, 0x61, 0x1d, 0xcf, 0x3c, 0xf6, - 0x86, 0x50, 0x5d, 0x71, 0x93, 0x71, 0x9e, 0x85, 0xe2, 0x48, 0x15, 0xe8, 0x67, 0x46, 0x0d, 0x9b, - 0xd4, 0x60, 0xb2, 0xfa, 0x93, 0x6e, 0x40, 0x57, 0x5b, 0x6c, 0x9f, 0x8a, 0xf8, 0xe1, 0x78, 0x8c, - 0x2f, 0xa4, 0x0e, 0x2b, 0x68, 0xb8, 0xa2, 0x44, 0x63, 0x60, 0x92, 0x90, 0x4d, 0x38, 0x73, 0x6f, - 0x71, 0x4b, 0xcc, 0xab, 0x6a, 0xb3, 0xe9, 0x77, 0xbd, 0x48, 0xe8, 0xab, 0x57, 0x8e, 0x0e, 0x2b, - 0x17, 0xf7, 0x9a, 0x9d, 0x86, 0x9c, 0x83, 0x0e, 0x2f, 0xd6, 0x15, 0xd6, 0x14, 0x2d, 0xb9, 0x0a, - 0x03, 0x3b, 0xf6, 0xaa, 0x38, 0x39, 0x9f, 0x39, 0x3a, 0xac, 0x4c, 0x76, 0x03, 0x57, 0x23, 0x61, - 0xa5, 0xe4, 0x7d, 0x80, 0x6d, 0x27, 0xd8, 0xa3, 0xd1, 0x96, 0x1f, 0x44, 0xa8, 0x70, 0x4e, 0xd6, - 0xce, 0x1d, 0x1d, 0x56, 0x66, 0x23, 0x84, 0x36, 0xd8, 0xf2, 0xa7, 0x77, 0x3a, 0x46, 0xbe, 0x3f, - 0x38, 0x5a, 0x2c, 0x0d, 0xd8, 0x63, 0x75, 0x1a, 0x86, 0xfc, 0x7c, 0xd8, 0x86, 0xa9, 0x7b, 0x34, - 0x62, 0x13, 0x57, 0x9e, 0x77, 0x7a, 0x0f, 0xeb, 0x47, 0x30, 0xfe, 0xd0, 0x8d, 0xf6, 0xeb, 0xb4, - 0x19, 0xd0, 0x48, 0xda, 0x7a, 0x50, 0xe4, 0xcf, 0xdc, 0x68, 0xbf, 0x11, 0x72, 0xb8, 0xbe, 0xaf, - 0x6b, 0xe8, 0xd6, 0x32, 0x9c, 0x16, 0xb5, 0xa9, 0xe3, 0xd5, 0x82, 0xc9, 0xb0, 0x80, 0x0c, 0x71, - 0xd8, 0x75, 0x86, 0x26, 0x9b, 0x7f, 0x51, 0x84, 0xd9, 0xc5, 0x7d, 0xc7, 0xdb, 0xa3, 0x5b, 0x4e, - 0x18, 0x3e, 0xf3, 0x83, 0x96, 0xd6, 0x78, 0x3c, 0x5b, 0xa6, 0x1a, 0x8f, 0x87, 0xc9, 0x05, 0x18, - 0xdf, 0x6c, 0xb7, 0x24, 0x8d, 0x38, 0xf7, 0x62, 0x5d, 0x7e, 0xbb, 0xd5, 0xe8, 0x48, 0x5e, 0x3a, - 0x12, 0xa3, 0xd9, 0xa0, 0xcf, 0x14, 0xcd, 0x40, 0x4c, 0xe3, 0xd1, 0x67, 0x1a, 0x8d, 0x86, 0x44, - 0x96, 0xe1, 0x4c, 0x9d, 0x36, 0x7d, 0xaf, 0x75, 0xd7, 0x69, 0x46, 0x7e, 0xb0, 0xed, 0x3f, 0xa1, - 0x9e, 0x98, 0xd0, 0x78, 0x30, 0x08, 0xb1, 0xb0, 0xf1, 0x18, 0x4b, 0x1b, 0x11, 0x2b, 0xb6, 0xd3, - 0x14, 0x64, 0x13, 0x46, 0x1f, 0x0a, 0x8b, 0xa1, 0x38, 0x2c, 0x5f, 0xbb, 0xa9, 0x4c, 0x88, 0x8b, - 0x01, 0xc5, 0x59, 0xe8, 0xb4, 0xd5, 0x71, 0x5f, 0xe9, 0x59, 0xb8, 0x94, 0x49, 0x4c, 0x5b, 0x31, - 0xb1, 0x76, 0x60, 0x72, 0xab, 0xdd, 0xdd, 0x73, 0x3d, 0xb6, 0xe8, 0xd4, 0xe9, 0x8f, 0xc9, 0x12, - 0x40, 0x0c, 0x10, 0x76, 0xc0, 0x69, 0x71, 0xc4, 0x8e, 0x0b, 0x76, 0xdf, 0x12, 0x5f, 0x2e, 0x42, - 0xf0, 0x44, 0x64, 0x6b, 0x74, 0xd6, 0xff, 0x1c, 0x00, 0x22, 0x06, 0x00, 0x37, 0xc1, 0x3a, 0x8d, - 0xd8, 0xf6, 0x74, 0x16, 0x8a, 0xca, 0x5c, 0x37, 0x7c, 0x74, 0x58, 0x29, 0xba, 0x2d, 0xbb, 0xb8, - 0xba, 0x44, 0xde, 0x86, 0x21, 0x44, 0x43, 0xf9, 0x4f, 0xa9, 0xfa, 0x74, 0x0e, 0x7c, 0xf1, 0xc1, - 0xdd, 0xd7, 0xe6, 0xc8, 0xe4, 0x1d, 0x18, 0x5b, 0xa2, 0x6d, 0xba, 0xe7, 0x44, 0xbe, 0x5c, 0x4e, - 0xb8, 0x01, 0x4c, 0x02, 0xb5, 0x39, 0x17, 0x63, 0xb2, 0xe3, 0xb0, 0x4d, 0x9d, 0xd0, 0xf7, 0xf4, - 0xe3, 0x70, 0x80, 0x10, 0xfd, 0x38, 0xcc, 0x71, 0xc8, 0xdf, 0x2b, 0xc0, 0x78, 0xd5, 0xf3, 0x84, - 0x61, 0x29, 0x14, 0x52, 0x9f, 0xbd, 0xa9, 0x2c, 0xb1, 0x6b, 0xce, 0x23, 0xda, 0xde, 0x75, 0xda, - 0x5d, 0x1a, 0xd6, 0xbe, 0x66, 0x27, 0x94, 0x7f, 0x7f, 0x58, 0xf9, 0xf0, 0x04, 0xa6, 0xa2, 0xd8, - 0xa6, 0xbb, 0x1d, 0x38, 0x6e, 0x14, 0xb2, 0xaf, 0xd6, 0x89, 0x2b, 0xd4, 0xbf, 0x1b, 0xad, 0x1d, - 0xf1, 0xde, 0x30, 0xdc, 0x6f, 0x6f, 0x20, 0x07, 0x70, 0xba, 0x1a, 0x86, 0xdd, 0x03, 0x5a, 0x8f, - 0x9c, 0x20, 0xda, 0x76, 0x0f, 0x28, 0x2e, 0x48, 0xbd, 0x8d, 0x0b, 0xdf, 0xf9, 0xe9, 0x61, 0xa5, - 0xc0, 0x0e, 0x45, 0x0e, 0x92, 0x32, 0xbd, 0x27, 0x88, 0x1a, 0x91, 0xab, 0x6f, 0x6f, 0x68, 0x66, - 0x48, 0xf2, 0xb6, 0xae, 0x2a, 0x85, 0x64, 0x75, 0x29, 0x6f, 0xc4, 0xad, 0x45, 0xb8, 0x70, 0x8f, - 0x46, 0x36, 0x0d, 0x69, 0x24, 0xbf, 0x11, 0x9c, 0xe1, 0xb1, 0x71, 0x77, 0x04, 0x7f, 0x2b, 0x62, - 0x1c, 0x7e, 0xfe, 0x5d, 0xc8, 0x12, 0xeb, 0xff, 0x2a, 0x40, 0x65, 0x31, 0xa0, 0xfc, 0x3c, 0x91, - 0xc3, 0xa8, 0xf7, 0xda, 0x75, 0x01, 0x06, 0xb7, 0x9f, 0x77, 0xa4, 0x55, 0x06, 0x4b, 0xd9, 0xa0, - 0xd8, 0x08, 0x3d, 0xa6, 0x91, 0xcb, 0x7a, 0x0c, 0xb3, 0x36, 0xf5, 0xe8, 0x33, 0xe7, 0x51, 0x9b, - 0x1a, 0x76, 0xa2, 0x0a, 0x0c, 0xf1, 0x0f, 0x3d, 0xd5, 0x05, 0x0e, 0x3f, 0x99, 0xcd, 0xcd, 0x9a, - 0x84, 0xf1, 0x2d, 0xd7, 0xdb, 0x13, 0xdc, 0xad, 0xbf, 0x1c, 0x84, 0x09, 0xfe, 0x5b, 0x1c, 0x91, - 0x12, 0xdb, 0x65, 0xe1, 0x38, 0xdb, 0xe5, 0x7b, 0x30, 0xc9, 0xf6, 0x1b, 0x1a, 0xec, 0xd2, 0x80, - 0xad, 0xff, 0x42, 0x12, 0x78, 0xdc, 0x0b, 0xb1, 0xa0, 0xf1, 0x94, 0x97, 0xd8, 0x26, 0x22, 0x59, - 0x83, 0x29, 0x0e, 0xb8, 0x4b, 0x9d, 0xa8, 0x1b, 0x5b, 0xac, 0x4e, 0x8b, 0x33, 0x91, 0x04, 0xf3, - 0xa9, 0x29, 0x78, 0x3d, 0x16, 0x40, 0x3b, 0x41, 0x4b, 0x3e, 0x81, 0xd3, 0x5b, 0x81, 0xff, 0xcd, - 0x73, 0x4d, 0x41, 0xe0, 0x5f, 0x27, 0x3f, 0x3d, 0xb1, 0xa2, 0x86, 0xae, 0x26, 0x24, 0xb1, 0xc9, - 0x1b, 0x30, 0xba, 0x1a, 0xd6, 0xfc, 0xc0, 0xf5, 0xf6, 0xf0, 0x1b, 0x1d, 0xe5, 0x86, 0x7e, 0x37, - 0x6c, 0x3c, 0x42, 0xa0, 0xad, 0x8a, 0x13, 0x26, 0xe9, 0x91, 0xfe, 0x26, 0xe9, 0xdb, 0x00, 0x6b, - 0xbe, 0xd3, 0xaa, 0xb6, 0xdb, 0x8b, 0xd5, 0x10, 0x77, 0x62, 0xb1, 0x1f, 0xb5, 0x7d, 0xa7, 0xd5, - 0x70, 0xda, 0xed, 0x46, 0xd3, 0x09, 0x6d, 0x0d, 0x87, 0x7c, 0x09, 0xe7, 0x42, 0x77, 0xcf, 0xc3, - 0xce, 0x35, 0x9c, 0xf6, 0x9e, 0x1f, 0xb8, 0xd1, 0xfe, 0x41, 0x23, 0xec, 0xba, 0x11, 0xb7, 0x07, - 0x4d, 0x2d, 0x5c, 0x12, 0x8b, 0x5c, 0x5d, 0xe2, 0x55, 0x25, 0x5a, 0x9d, 0x61, 0xd9, 0x73, 0x61, - 0x76, 0x01, 0x79, 0x08, 0x93, 0x6b, 0x6e, 0x93, 0x7a, 0x21, 0x45, 0x03, 0xdf, 0x73, 0xb4, 0x16, - 0xf5, 0xfe, 0x98, 0x99, 0x10, 0x27, 0xdb, 0x3a, 0x11, 0x7e, 0xba, 0x26, 0x9f, 0xfb, 0x83, 0xa3, - 0xc3, 0xa5, 0x11, 0xfb, 0xb4, 0x00, 0x3e, 0x74, 0x02, 0xcf, 0xf5, 0xf6, 0x42, 0xeb, 0xff, 0x27, - 0x30, 0xaa, 0xc6, 0xe9, 0xa6, 0x7e, 0x52, 0x11, 0x5b, 0x33, 0x4e, 0xd9, 0xd8, 0x0e, 0x67, 0x6b, - 0x18, 0xe4, 0x1c, 0x9e, 0x5d, 0x84, 0x52, 0x30, 0xc2, 0x3e, 0x21, 0xa7, 0xd3, 0xb1, 0x19, 0x8c, - 0x2d, 0x0d, 0x4b, 0x35, 0x9c, 0x34, 0xa3, 0x7c, 0x69, 0x68, 0x3d, 0xb2, 0x8b, 0x4b, 0x35, 0xf6, - 0x4d, 0x6e, 0xae, 0x2e, 0x2d, 0xe2, 0xf8, 0x8f, 0xf2, 0x6f, 0xd2, 0x77, 0x5b, 0x4d, 0x1b, 0xa1, - 0xac, 0xb4, 0x5e, 0x5d, 0x5f, 0x13, 0x63, 0x8c, 0xa5, 0xa1, 0x73, 0xd0, 0xb6, 0x11, 0xca, 0xb4, - 0x5d, 0x6e, 0x52, 0x59, 0xf4, 0xbd, 0x28, 0xf0, 0xdb, 0x21, 0xaa, 0x70, 0xa3, 0x7c, 0x0e, 0x0a, - 0x5b, 0x4c, 0x53, 0x14, 0xd9, 0x09, 0x54, 0xf2, 0x10, 0xe6, 0xaa, 0xad, 0xa7, 0x8e, 0xd7, 0xa4, - 0x2d, 0x5e, 0xf2, 0xd0, 0x0f, 0x9e, 0x3c, 0x6e, 0xfb, 0xcf, 0x42, 0x9c, 0x24, 0xa3, 0xc2, 0x74, - 0x29, 0x50, 0xa4, 0x69, 0xe7, 0x99, 0x44, 0xb2, 0xf3, 0xa8, 0xd9, 0x3a, 0xb0, 0xd8, 0xf6, 0xbb, - 0x2d, 0x31, 0x75, 0x70, 0x1d, 0x68, 0x32, 0x80, 0xcd, 0xe1, 0x4c, 0x4a, 0x2b, 0xf5, 0x75, 0x9c, - 0x18, 0x42, 0x4a, 0xfb, 0xe1, 0x81, 0xcd, 0x60, 0xe4, 0x1a, 0x8c, 0x48, 0xc5, 0x9d, 0xdf, 0x64, - 0xa0, 0x05, 0x5d, 0x2a, 0xec, 0xb2, 0x8c, 0x7d, 0xc7, 0x36, 0x6d, 0xfa, 0x4f, 0x69, 0xf0, 0x7c, - 0xd1, 0x6f, 0x51, 0x69, 0xd6, 0x12, 0x66, 0x1b, 0x5e, 0xd0, 0x68, 0xb2, 0x12, 0xdb, 0x44, 0x64, - 0x15, 0xf0, 0x8d, 0x3b, 0x2c, 0x9f, 0x8e, 0x2b, 0xe0, 0x1b, 0x7b, 0x68, 0xcb, 0x32, 0xb2, 0x04, - 0x67, 0xaa, 0xdd, 0xc8, 0x3f, 0x70, 0x22, 0xb7, 0xb9, 0xd3, 0xd9, 0x0b, 0x1c, 0x56, 0x49, 0x09, - 0x09, 0xf0, 0x20, 0xe3, 0xc8, 0xc2, 0x46, 0x57, 0x94, 0xda, 0x69, 0x02, 0xf2, 0x2e, 0x4c, 0xac, - 0x86, 0xdc, 0x74, 0xe9, 0x84, 0xb4, 0x85, 0xf6, 0x27, 0xd1, 0x4a, 0x37, 0x6c, 0xa0, 0x21, 0xb3, - 0xc1, 0x8e, 0x3e, 0x2d, 0xdb, 0xc0, 0x23, 0x16, 0x0c, 0x57, 0xc3, 0xd0, 0x0d, 0x23, 0x34, 0x2b, - 0x8d, 0xd6, 0xe0, 0xe8, 0xb0, 0x32, 0xec, 0x20, 0xc4, 0x16, 0x25, 0xe4, 0x21, 0x8c, 0x2f, 0x51, - 0xa6, 0x39, 0x6f, 0x07, 0xdd, 0x30, 0x42, 0x23, 0xd1, 0xf8, 0xc2, 0x39, 0xb1, 0x1a, 0x69, 0x25, - 0x62, 0x2e, 0x73, 0x15, 0xb5, 0x85, 0xf0, 0x46, 0xc4, 0x0a, 0xf4, 0xad, 0x56, 0xc3, 0x67, 0xc7, - 0x02, 0x41, 0xb3, 0xe2, 0xb6, 0xd8, 0xfa, 0x32, 0x83, 0x6d, 0xc0, 0x63, 0x81, 0x58, 0xd0, 0x1a, - 0xfb, 0x58, 0xa2, 0x1f, 0x0b, 0x0c, 0x12, 0xd2, 0x4c, 0x59, 0xc3, 0x67, 0x0d, 0x8b, 0xa7, 0x59, - 0x28, 0x9b, 0x78, 0x42, 0x5b, 0xf9, 0x47, 0x30, 0xbe, 0xd8, 0x0d, 0x23, 0xff, 0x60, 0x7b, 0x9f, - 0x1e, 0x50, 0x34, 0x24, 0x89, 0xc3, 0x4f, 0x13, 0xc1, 0x8d, 0x88, 0xc1, 0xf5, 0x6e, 0x6a, 0xe8, - 0xe4, 0x33, 0x20, 0xf2, 0x14, 0x73, 0x8f, 0xcd, 0x0f, 0x8f, 0xcd, 0x65, 0xb4, 0x25, 0x8d, 0xf2, - 0xa3, 0x8b, 0x3c, 0xfc, 0x34, 0xf6, 0x54, 0xb1, 0x6e, 0xcf, 0x4c, 0x13, 0xb3, 0x06, 0xf1, 0x26, - 0xde, 0x0b, 0x9c, 0xce, 0x7e, 0xb9, 0x1c, 0x1f, 0x0d, 0x44, 0xa7, 0xf6, 0x18, 0xdc, 0x50, 0x71, - 0x62, 0x74, 0x52, 0x07, 0xe0, 0x3f, 0xd7, 0xd8, 0xc0, 0x73, 0xeb, 0x53, 0xd9, 0x90, 0x17, 0x2b, - 0x90, 0xb2, 0xc2, 0xe3, 0x8e, 0x60, 0xdb, 0x76, 0x8d, 0xd1, 0xd4, 0xd8, 0x90, 0x27, 0x50, 0xe2, - 0xbf, 0xd6, 0x7d, 0xcf, 0x8d, 0xf8, 0x7e, 0x31, 0x6f, 0x98, 0x2a, 0x93, 0xc5, 0xb2, 0x02, 0x34, - 0x11, 0x8b, 0x0a, 0x0e, 0x54, 0xa9, 0x56, 0x4d, 0x8a, 0x31, 0xd9, 0x82, 0xf1, 0xad, 0xc0, 0x6f, - 0x75, 0x9b, 0x11, 0x6a, 0x19, 0xe7, 0x71, 0xe1, 0x27, 0xa2, 0x1e, 0xad, 0x84, 0xcb, 0xa4, 0xc3, - 0x01, 0x0d, 0xb6, 0x2f, 0xe8, 0x32, 0xd1, 0x10, 0x49, 0x0d, 0x86, 0xb7, 0xfc, 0xb6, 0xdb, 0x7c, - 0x5e, 0xbe, 0x80, 0x8d, 0x9e, 0x91, 0xcc, 0x10, 0x28, 0x9b, 0x8a, 0x2a, 0x6d, 0x07, 0x41, 0xba, - 0x4a, 0xcb, 0x91, 0x48, 0x15, 0x26, 0x3f, 0x63, 0x13, 0xc6, 0xf5, 0x3d, 0xcf, 0x71, 0x03, 0x5a, - 0xbe, 0x88, 0xe3, 0x82, 0x66, 0xfc, 0x1f, 0xeb, 0x05, 0xfa, 0x74, 0x36, 0x28, 0xc8, 0x2a, 0x9c, - 0x5e, 0x0d, 0xeb, 0x51, 0xe0, 0x76, 0xe8, 0xba, 0xe3, 0x39, 0x7b, 0xb4, 0x55, 0xbe, 0x14, 0xdb, - 0xd1, 0xdd, 0xb0, 0x11, 0x62, 0x59, 0xe3, 0x80, 0x17, 0xea, 0x76, 0xf4, 0x04, 0x1d, 0xf9, 0x1c, - 0x66, 0x96, 0xbf, 0x89, 0xd8, 0x8c, 0x69, 0x57, 0xbb, 0x2d, 0x37, 0xaa, 0x47, 0x7e, 0xe0, 0xec, - 0xd1, 0x72, 0x05, 0xf9, 0xbd, 0x76, 0x74, 0x58, 0xb9, 0x4c, 0x45, 0x79, 0xc3, 0x61, 0x08, 0x8d, - 0x90, 0x63, 0xe8, 0xf7, 0xe3, 0x59, 0x1c, 0x98, 0xf4, 0xeb, 0xdd, 0x0e, 0xd3, 0xb6, 0x51, 0xfa, - 0x97, 0x0d, 0xe9, 0x6b, 0x25, 0x5c, 0xfa, 0x21, 0x07, 0xa4, 0xa4, 0xaf, 0x21, 0x12, 0x1b, 0xc8, - 0x7d, 0xdf, 0xf5, 0xaa, 0xcd, 0xc8, 0x7d, 0x4a, 0xc5, 0x89, 0x39, 0x2c, 0x5f, 0xc1, 0x96, 0xa2, - 0xcd, 0xff, 0x97, 0x7d, 0xd7, 0x6b, 0x38, 0x58, 0xdc, 0x08, 0x45, 0xb9, 0xfe, 0x8d, 0xa4, 0xa9, - 0xc9, 0x0f, 0xe1, 0xec, 0xba, 0xff, 0xc8, 0x6d, 0x53, 0xbe, 0xe4, 0x70, 0xb1, 0xa0, 0xfd, 0xd2, - 0x42, 0xbe, 0x68, 0xf3, 0x3f, 0x40, 0x8c, 0x86, 0x58, 0xad, 0x0e, 0x14, 0x8e, 0x6e, 0xf3, 0xcf, - 0xe6, 0x42, 0x96, 0x61, 0x02, 0xbf, 0xcb, 0x36, 0xfe, 0x0c, 0xcb, 0x57, 0xf1, 0x48, 0x77, 0x25, - 0xa1, 0xa5, 0xdd, 0x5c, 0xd6, 0x70, 0x96, 0xbd, 0x28, 0x78, 0x6e, 0x1b, 0x64, 0xe4, 0x63, 0x98, - 0x4f, 0x4e, 0xef, 0x45, 0xdf, 0x7b, 0xec, 0xee, 0x75, 0x03, 0xda, 0x2a, 0xbf, 0xc6, 0x9a, 0x6a, - 0xf7, 0xc0, 0x20, 0x5f, 0xc1, 0x2c, 0xee, 0x75, 0x55, 0xcf, 0xf7, 0x9e, 0x1f, 0xb8, 0x3f, 0x41, - 0xfd, 0x99, 0xa9, 0xbd, 0xd7, 0x50, 0xed, 0xbd, 0x76, 0x74, 0x58, 0xb9, 0x82, 0x7b, 0x62, 0xc3, - 0xd1, 0x31, 0x12, 0x56, 0xeb, 0x6c, 0x1e, 0xf3, 0x0f, 0xe1, 0x4c, 0xaa, 0xfd, 0xa4, 0x04, 0x03, - 0x4f, 0xc4, 0xfd, 0xec, 0x98, 0xcd, 0xfe, 0x24, 0x6f, 0xc2, 0xd0, 0x53, 0x76, 0x50, 0x43, 0x75, - 0x24, 0xbe, 0xf1, 0xd3, 0x48, 0x57, 0xbd, 0xc7, 0xbe, 0xcd, 0x91, 0x3e, 0x28, 0xbe, 0x57, 0xb8, - 0x3f, 0x38, 0x3a, 0x5e, 0x9a, 0xe0, 0xd7, 0xea, 0xf7, 0x07, 0x47, 0x27, 0x4b, 0x53, 0x56, 0x15, - 0x4e, 0x27, 0xf0, 0x49, 0x19, 0x46, 0xa8, 0xc7, 0x94, 0xff, 0x16, 0x57, 0x88, 0x6c, 0xf9, 0x93, - 0xcc, 0xc0, 0x50, 0xdb, 0x3d, 0x70, 0x23, 0xac, 0x70, 0xc8, 0xe6, 0x3f, 0xac, 0xdf, 0x2d, 0x00, - 0x49, 0xef, 0x47, 0xe4, 0x56, 0x82, 0x0d, 0x57, 0x7d, 0x05, 0x48, 0xbf, 0x38, 0x90, 0xdc, 0x3f, - 0x83, 0x69, 0x3e, 0x21, 0xe4, 0xce, 0xa9, 0xd5, 0xc5, 0x57, 0xec, 0x8c, 0x62, 0xdd, 0xd8, 0x24, - 0x8a, 0x71, 0x9f, 0x5d, 0xc3, 0xa6, 0x75, 0x61, 0x36, 0x73, 0x27, 0x22, 0xeb, 0x30, 0x7b, 0xe0, - 0x7b, 0xd1, 0x7e, 0xfb, 0xb9, 0xdc, 0x88, 0x44, 0x6d, 0x05, 0xac, 0x0d, 0x17, 0xdf, 0x4c, 0x04, - 0x7b, 0x5a, 0x80, 0x05, 0x47, 0xac, 0x47, 0x18, 0x9d, 0x64, 0x4f, 0x2c, 0x1b, 0xce, 0xa4, 0x16, - 0x74, 0xf2, 0x03, 0x98, 0x68, 0xe2, 0xe1, 0xce, 0xa8, 0x89, 0x6f, 0x67, 0x1a, 0x5c, 0xff, 0x56, - 0x39, 0x9c, 0x77, 0xe5, 0x9f, 0x14, 0x60, 0x2e, 0x67, 0x29, 0x3f, 0xb9, 0xa8, 0xbf, 0x80, 0xb3, - 0x07, 0xce, 0x37, 0x8d, 0x00, 0xcf, 0xee, 0x8d, 0xc0, 0xf1, 0x12, 0xd2, 0xc6, 0x65, 0x2a, 0x1b, - 0x43, 0xf7, 0x6d, 0x3a, 0x70, 0xbe, 0xb1, 0x11, 0xc1, 0x66, 0xe5, 0xbc, 0x9d, 0x9f, 0xc2, 0xa4, - 0xb1, 0x78, 0x9f, 0xb8, 0x71, 0xd6, 0x1d, 0x38, 0xb3, 0x44, 0xdb, 0x34, 0xa2, 0xc7, 0xb6, 0xd9, - 0x59, 0x5b, 0x00, 0x75, 0x7a, 0xe0, 0x74, 0xf6, 0x7d, 0xa6, 0xd4, 0xd7, 0xf4, 0x5f, 0xc2, 0xe6, - 0x43, 0xe4, 0xf1, 0x44, 0x16, 0xec, 0xbe, 0xc5, 0x15, 0xfd, 0x50, 0x61, 0xda, 0x1a, 0x95, 0xf5, - 0x6f, 0x8a, 0x40, 0xc4, 0xea, 0x1b, 0x50, 0xe7, 0x40, 0x36, 0xe3, 0x7d, 0x98, 0xe0, 0x27, 0x74, - 0x0e, 0xc6, 0xe6, 0x8c, 0x2f, 0x4c, 0x8b, 0x2f, 0x4f, 0x2f, 0x5a, 0x39, 0x65, 0x1b, 0xa8, 0x8c, - 0xd4, 0xa6, 0xdc, 0xb4, 0x80, 0xa4, 0x45, 0x83, 0x54, 0x2f, 0x62, 0xa4, 0xfa, 0x6f, 0xf2, 0x09, - 0x4c, 0x2d, 0xfa, 0x07, 0x1d, 0x26, 0x13, 0x41, 0x3c, 0x20, 0xcc, 0x36, 0xa2, 0x5e, 0xa3, 0x70, - 0xe5, 0x94, 0x9d, 0x40, 0x27, 0x1b, 0x30, 0x7d, 0xb7, 0xdd, 0x0d, 0xf7, 0xab, 0x5e, 0x6b, 0xb1, - 0xed, 0x87, 0x92, 0xcb, 0xa0, 0x38, 0x69, 0x89, 0xb5, 0x33, 0x8d, 0xb1, 0x72, 0xca, 0xce, 0x22, - 0x24, 0xd7, 0x60, 0x68, 0xf9, 0x29, 0x5b, 0xd3, 0xa5, 0x87, 0x8b, 0x70, 0xc0, 0xdb, 0xf4, 0xe8, - 0xe6, 0xe3, 0x95, 0x53, 0x36, 0x2f, 0xad, 0x8d, 0xc1, 0x88, 0x3c, 0xdd, 0xdf, 0x62, 0xfa, 0xb6, - 0x12, 0x67, 0x3d, 0x72, 0xa2, 0x6e, 0x48, 0xe6, 0x61, 0x74, 0xa7, 0xc3, 0x0e, 0x9d, 0xd2, 0x2c, - 0x62, 0xab, 0xdf, 0xd6, 0x9b, 0xa6, 0xa4, 0xc9, 0x05, 0x88, 0x6d, 0xba, 0x02, 0x59, 0x33, 0xf2, - 0xae, 0x98, 0xc2, 0xed, 0x8d, 0x6d, 0xd4, 0x5b, 0x4c, 0xd4, 0x5b, 0x4a, 0xca, 0xda, 0x9a, 0xcd, - 0x14, 0x9e, 0xf5, 0x39, 0x5c, 0xda, 0xe9, 0x84, 0x34, 0x88, 0xaa, 0x9d, 0x4e, 0xdb, 0x6d, 0xf2, - 0x1b, 0x32, 0xb4, 0x02, 0xc8, 0xc9, 0xf2, 0x2e, 0x0c, 0x73, 0x80, 0x98, 0x26, 0x72, 0x0e, 0x56, - 0x3b, 0x1d, 0x61, 0x7b, 0x78, 0x8b, 0x6b, 0xfe, 0xdc, 0x9a, 0x60, 0x0b, 0x6c, 0xeb, 0xb7, 0x0b, - 0x70, 0x89, 0x7f, 0x01, 0xb9, 0xac, 0xbf, 0x0b, 0x63, 0xe8, 0xff, 0xd6, 0x71, 0x9a, 0xf2, 0x9b, - 0xe0, 0x8e, 0x80, 0x12, 0x68, 0xc7, 0xe5, 0x9a, 0x67, 0x61, 0x31, 0xdf, 0xb3, 0x50, 0x7e, 0x60, - 0x03, 0x99, 0x1f, 0xd8, 0x67, 0x60, 0x89, 0x16, 0xb5, 0xdb, 0xa9, 0x46, 0x85, 0x2f, 0xd2, 0x2a, - 0xeb, 0xbf, 0x14, 0x61, 0xee, 0x1e, 0xf5, 0x68, 0xe0, 0x60, 0x3f, 0x0d, 0x2b, 0x97, 0xee, 0x61, - 0x54, 0xe8, 0xe9, 0x61, 0x54, 0x91, 0x76, 0xc3, 0x22, 0xda, 0x0d, 0x53, 0xee, 0x52, 0xec, 0x2c, - 0xba, 0x63, 0xaf, 0x8a, 0x6e, 0xe1, 0x59, 0xb4, 0x1b, 0xb8, 0xfc, 0x96, 0x61, 0x35, 0xf6, 0x4e, - 0x1a, 0xec, 0x6b, 0x73, 0x98, 0x16, 0xde, 0x1a, 0x23, 0xc2, 0x3b, 0xc9, 0xf4, 0x49, 0xda, 0x80, - 0x61, 0x6e, 0xee, 0xc4, 0xbb, 0xad, 0xf1, 0x85, 0x1b, 0xe2, 0x9b, 0xca, 0xe9, 0xa0, 0xb0, 0x8d, - 0xe2, 0xc6, 0xce, 0xa7, 0x40, 0x84, 0x00, 0x5b, 0x70, 0x99, 0xff, 0x0c, 0xc6, 0x35, 0x94, 0xe3, - 0xec, 0xfd, 0xca, 0xec, 0xca, 0xd4, 0x51, 0x6f, 0x8f, 0x5b, 0x70, 0xb5, 0xbd, 0xdf, 0xfa, 0x10, - 0xca, 0xe9, 0xd6, 0x08, 0x53, 0x5b, 0x3f, 0xcb, 0x9e, 0xb5, 0x04, 0x33, 0xf7, 0x68, 0x84, 0x13, - 0x17, 0x3f, 0x22, 0xcd, 0xcb, 0x2e, 0xf1, 0x9d, 0xc9, 0x55, 0x15, 0x81, 0x6c, 0x82, 0x69, 0x5f, - 0x69, 0x1d, 0x66, 0x13, 0x5c, 0x44, 0xfd, 0x1f, 0xc0, 0x88, 0x00, 0xa9, 0x15, 0x55, 0xb8, 0xea, - 0xd2, 0x47, 0xa2, 0x60, 0x77, 0x81, 0xcf, 0x5b, 0xc1, 0xd9, 0x96, 0x04, 0xd6, 0x3e, 0x9c, 0x65, - 0xdb, 0x6c, 0xcc, 0x55, 0x4d, 0xc7, 0xf3, 0x30, 0xd6, 0x61, 0x8a, 0x42, 0xe8, 0xfe, 0x84, 0x4f, - 0xa3, 0x21, 0x7b, 0x94, 0x01, 0xea, 0xee, 0x4f, 0x28, 0xb9, 0x08, 0x80, 0x85, 0xd8, 0x4d, 0xb1, - 0x0a, 0x20, 0x3a, 0x37, 0x65, 0x12, 0x40, 0x1f, 0x3d, 0x3e, 0x6f, 0x6c, 0xfc, 0xdb, 0x0a, 0x60, - 0x2e, 0x55, 0x93, 0xe8, 0xc0, 0x2d, 0x18, 0x95, 0xfa, 0x71, 0xe2, 0x92, 0x41, 0xef, 0x81, 0xad, - 0x90, 0xc8, 0xeb, 0x70, 0xda, 0xa3, 0xdf, 0x44, 0x8d, 0x54, 0x1b, 0x26, 0x19, 0x78, 0x4b, 0xb6, - 0xc3, 0xfa, 0x25, 0x34, 0x2c, 0xd7, 0x3d, 0xff, 0xd9, 0xe3, 0xb6, 0xf3, 0x84, 0xa6, 0x2a, 0xfe, - 0x01, 0x8c, 0xd6, 0xfb, 0x57, 0xcc, 0x3f, 0x1f, 0x59, 0xb9, 0xad, 0x48, 0xac, 0x36, 0xcc, 0xb3, - 0x2e, 0xd5, 0xab, 0xeb, 0x6b, 0xab, 0xad, 0xad, 0x6f, 0x5b, 0x80, 0x4f, 0xe1, 0x7c, 0x66, 0x6d, - 0xdf, 0xb6, 0x10, 0xff, 0x68, 0x10, 0xe6, 0xf8, 0x66, 0x92, 0x9e, 0xc1, 0xc7, 0x5f, 0x6a, 0x7e, - 0x21, 0xf7, 0xbd, 0xb7, 0x33, 0xee, 0x7b, 0x91, 0x44, 0xbf, 0xef, 0x35, 0x6e, 0x79, 0xdf, 0xcb, - 0xbe, 0xe5, 0x45, 0x23, 0x94, 0x79, 0xcb, 0x9b, 0xbc, 0xdb, 0x5d, 0xce, 0xbf, 0xdb, 0xc5, 0x8b, - 0xa7, 0x8c, 0xbb, 0xdd, 0xac, 0x1b, 0xdd, 0x84, 0xa3, 0xd4, 0xe8, 0xab, 0x75, 0x94, 0x7a, 0x1d, - 0x46, 0xaa, 0x9d, 0x8e, 0xe6, 0x78, 0x88, 0xc3, 0xe3, 0x74, 0x3a, 0x5c, 0x78, 0xb2, 0x50, 0xae, - 0xf3, 0x90, 0xb1, 0xce, 0xbf, 0x0f, 0xb0, 0x88, 0xcf, 0x23, 0x70, 0xe0, 0xc6, 0x11, 0x03, 0x35, - 0x7c, 0xfe, 0x68, 0x02, 0x07, 0x4e, 0x37, 0xaf, 0xc4, 0xc8, 0x5c, 0xb1, 0xb7, 0x76, 0xa1, 0x9c, - 0x9e, 0x3e, 0xaf, 0x60, 0xe9, 0xfa, 0xc3, 0x02, 0x5c, 0x14, 0x4a, 0x4e, 0xe2, 0x03, 0x3f, 0xf9, - 0xec, 0x7c, 0x07, 0x26, 0x04, 0xed, 0x76, 0xfc, 0x21, 0xf0, 0x0b, 0x76, 0xb9, 0x18, 0xf3, 0x15, - 0xdd, 0x40, 0x23, 0xef, 0xc0, 0x28, 0xfe, 0x11, 0x5f, 0x0c, 0x31, 0xc9, 0x8c, 0x21, 0x6a, 0x23, - 0x79, 0x3d, 0xa4, 0x50, 0xad, 0xaf, 0xe1, 0x52, 0x5e, 0xc3, 0x5f, 0x81, 0x5c, 0xfe, 0x65, 0x01, - 0xce, 0x0b, 0xf6, 0xc6, 0x52, 0xf1, 0x42, 0xbb, 0xce, 0x09, 0xdc, 0x95, 0xef, 0xc3, 0x38, 0xab, - 0x50, 0xb6, 0x7b, 0x40, 0x6c, 0xad, 0xe2, 0xe4, 0x10, 0x97, 0x2c, 0x39, 0x91, 0x23, 0xdc, 0x6f, - 0x9c, 0x83, 0xb6, 0xb4, 0x8c, 0xd8, 0x3a, 0xb1, 0xf5, 0x25, 0x5c, 0xc8, 0xee, 0xc2, 0x2b, 0x90, - 0xcf, 0x7d, 0x98, 0xcf, 0xd8, 0x14, 0x5e, 0x6c, 0x4f, 0xfe, 0x02, 0xce, 0x67, 0xf2, 0x7a, 0x05, - 0xcd, 0x5c, 0x61, 0x1a, 0x47, 0xf4, 0x0a, 0x86, 0xd0, 0x7a, 0x08, 0xe7, 0x32, 0x38, 0xbd, 0x82, - 0x26, 0xde, 0x83, 0x39, 0xa5, 0x69, 0xbf, 0x54, 0x0b, 0xd7, 0xe1, 0x22, 0x67, 0xf4, 0x6a, 0x46, - 0xe5, 0x01, 0x9c, 0x17, 0xec, 0x5e, 0x81, 0xf4, 0x56, 0xe0, 0x42, 0x7c, 0xa0, 0xce, 0xd0, 0x93, - 0x8e, 0xbd, 0xc8, 0x58, 0x6b, 0x70, 0x39, 0xe6, 0x94, 0xa3, 0x34, 0x1c, 0x9f, 0x1b, 0x57, 0x07, - 0xe3, 0x51, 0x7a, 0x25, 0x23, 0xfa, 0x10, 0xce, 0x1a, 0x4c, 0x5f, 0x99, 0xaa, 0xb4, 0x0a, 0xd3, - 0x9c, 0xb1, 0xa9, 0x3a, 0x2f, 0xe8, 0xaa, 0xf3, 0xf8, 0xc2, 0x99, 0x98, 0x25, 0x82, 0x77, 0xdf, - 0xca, 0xd0, 0xa6, 0xd7, 0x51, 0x9b, 0x96, 0x28, 0x71, 0x0b, 0xdf, 0x81, 0x61, 0x0e, 0x11, 0xed, - 0xcb, 0x60, 0xc6, 0x0f, 0x0b, 0x9c, 0x4c, 0x20, 0x5b, 0x3f, 0x84, 0x8b, 0xfc, 0x24, 0x1a, 0x5f, - 0x54, 0x9a, 0xa7, 0xc5, 0x1f, 0x24, 0x0e, 0xa2, 0xe7, 0x04, 0xdf, 0x24, 0x7e, 0xce, 0x79, 0xf4, - 0x91, 0x9c, 0xdb, 0x79, 0xfc, 0x8f, 0xf5, 0x74, 0x4d, 0x1e, 0x30, 0x8b, 0x99, 0x07, 0xcc, 0xab, - 0x70, 0x45, 0x1d, 0x30, 0x93, 0xd5, 0xc8, 0xa9, 0x65, 0x7d, 0x09, 0xe7, 0x79, 0x47, 0xa5, 0x4b, - 0xa1, 0xd9, 0x8c, 0x0f, 0x13, 0xdd, 0x9c, 0x13, 0xdd, 0x34, 0xb1, 0x73, 0x3a, 0xf9, 0xb7, 0x0a, - 0xf2, 0x93, 0xcb, 0x66, 0xfe, 0x8b, 0x3e, 0x71, 0x6f, 0x40, 0x45, 0x09, 0xc4, 0x6c, 0xd1, 0x8b, - 0x1d, 0xb7, 0xd7, 0x61, 0x56, 0x67, 0xe3, 0x36, 0xe9, 0xee, 0x1d, 0xbc, 0x41, 0x7a, 0x9b, 0x7d, - 0x16, 0x08, 0x90, 0xd3, 0xae, 0x9c, 0x21, 0x37, 0xc4, 0xb7, 0x15, 0xa6, 0xd5, 0x80, 0x0b, 0xe9, - 0xa1, 0x70, 0x9b, 0xf2, 0x3d, 0x01, 0xf9, 0x84, 0x7d, 0xc2, 0x08, 0x11, 0x83, 0x91, 0xcb, 0x54, - 0x7e, 0xc7, 0x9c, 0x5c, 0x52, 0x59, 0x96, 0x5c, 0x6a, 0x12, 0xfd, 0x67, 0xb5, 0xcb, 0xf9, 0xf0, - 0xab, 0x40, 0x64, 0xd1, 0x62, 0xdd, 0x96, 0x55, 0x9f, 0x83, 0x81, 0xc5, 0xba, 0x2d, 0x1e, 0x32, - 0xa1, 0x26, 0xd8, 0x0c, 0x03, 0x9b, 0xc1, 0x92, 0x1a, 0x79, 0xf1, 0x18, 0x1a, 0xf9, 0xfd, 0xc1, - 0xd1, 0x81, 0xd2, 0xa0, 0x4d, 0xea, 0xee, 0x9e, 0xf7, 0xd0, 0x8d, 0xf6, 0x55, 0x85, 0x55, 0xeb, - 0x2b, 0x98, 0x36, 0xaa, 0x17, 0x5f, 0x71, 0xcf, 0x17, 0x58, 0x4c, 0x9f, 0x5d, 0xac, 0xa2, 0x5b, - 0x0d, 0x9a, 0x2c, 0x26, 0xf8, 0x7a, 0xd3, 0x74, 0x1a, 0xf8, 0xbc, 0xd7, 0x96, 0x85, 0xd6, 0x3f, - 0x1e, 0xd4, 0xb8, 0x6b, 0xef, 0xda, 0x7a, 0xf4, 0xee, 0x0e, 0x00, 0x9f, 0x21, 0x5a, 0xe7, 0x98, - 0x02, 0x38, 0x2e, 0xbc, 0x55, 0xf8, 0x92, 0x6c, 0x6b, 0x48, 0xc7, 0x7d, 0xf7, 0x26, 0xfc, 0x8f, - 0x39, 0x91, 0x7c, 0xea, 0xa9, 0xfc, 0x8f, 0x05, 0xeb, 0xd0, 0xd6, 0x91, 0xc8, 0x0f, 0x93, 0x8f, - 0x33, 0x86, 0xf0, 0xc2, 0xea, 0x35, 0x79, 0x83, 0x9d, 0xee, 0xdb, 0xc9, 0xde, 0x67, 0x3c, 0x83, - 0x59, 0x46, 0xeb, 0x3e, 0xc6, 0x83, 0xc5, 0xf2, 0x37, 0x11, 0xf5, 0xf8, 0xda, 0x3e, 0x8c, 0xf5, - 0x5c, 0xeb, 0x51, 0x4f, 0x8c, 0x2c, 0xec, 0xef, 0x31, 0x9f, 0x06, 0x55, 0x65, 0x76, 0x36, 0x7f, - 0x9c, 0x44, 0xf6, 0xda, 0xb2, 0xd7, 0xea, 0xf8, 0xae, 0x3a, 0x30, 0xf1, 0x49, 0x14, 0xb4, 0x1b, - 0x54, 0xc0, 0x6d, 0x1d, 0xc9, 0x7a, 0xbd, 0xa7, 0x57, 0xfb, 0x28, 0x0c, 0x6e, 0x2f, 0x6e, 0xaf, - 0x95, 0x0a, 0xd6, 0x2d, 0x00, 0xad, 0x26, 0x80, 0xe1, 0x8d, 0x4d, 0x7b, 0xbd, 0xba, 0x56, 0x3a, - 0x45, 0x66, 0xe1, 0xcc, 0xc3, 0xd5, 0x8d, 0xa5, 0xcd, 0x87, 0xf5, 0x46, 0x7d, 0xbd, 0x6a, 0x6f, - 0x2f, 0x56, 0xed, 0xa5, 0x52, 0xc1, 0xfa, 0x1a, 0x66, 0xcc, 0x1e, 0xbe, 0xd2, 0x49, 0x18, 0xc1, - 0xb4, 0xd2, 0x67, 0xee, 0x3f, 0xdc, 0xd6, 0x3c, 0x5a, 0xc5, 0xe1, 0x2f, 0xe9, 0x99, 0x25, 0x8e, - 0x89, 0xe2, 0x33, 0xd2, 0x90, 0xc8, 0x1b, 0x5c, 0x2d, 0x48, 0xbe, 0x5c, 0x66, 0x6a, 0x41, 0x23, - 0xd6, 0x0b, 0x70, 0xe9, 0xfb, 0x3e, 0xcc, 0x98, 0xb5, 0x1e, 0xd7, 0x4a, 0xf5, 0x1a, 0xba, 0xfa, - 0x6a, 0xcf, 0x9a, 0x08, 0xd1, 0xaf, 0x0d, 0xc4, 0xca, 0xfa, 0x7d, 0x28, 0x09, 0xac, 0x78, 0xe7, - 0xbd, 0x2a, 0xcd, 0x88, 0x85, 0x8c, 0x47, 0x98, 0xd2, 0x29, 0xdd, 0x87, 0x12, 0x5b, 0x31, 0x05, - 0x25, 0xaf, 0x60, 0x06, 0x86, 0xd6, 0xe2, 0xeb, 0x1c, 0x9b, 0xff, 0xc0, 0xd7, 0x3d, 0x91, 0x13, - 0x44, 0xd2, 0x0f, 0x6e, 0xcc, 0x56, 0xbf, 0xc9, 0x1b, 0x30, 0x7c, 0xd7, 0x6d, 0x47, 0xc2, 0x34, - 0x12, 0x6f, 0xf2, 0x8c, 0x2d, 0x2f, 0xb0, 0x05, 0x82, 0x65, 0xc3, 0x19, 0xad, 0xc2, 0x13, 0x34, - 0x95, 0x94, 0x61, 0x64, 0x83, 0x7e, 0xa3, 0xd5, 0x2f, 0x7f, 0x5a, 0xef, 0xc2, 0x19, 0xe1, 0x63, - 0xa8, 0x89, 0xe9, 0x8a, 0x78, 0x2b, 0x5e, 0x30, 0x1e, 0xac, 0x0a, 0x96, 0x58, 0xc4, 0xe8, 0x76, - 0x3a, 0xad, 0x17, 0xa4, 0x63, 0x1b, 0xc5, 0x09, 0xe9, 0xbe, 0x23, 0x6f, 0x81, 0xfa, 0x0d, 0xe7, - 0xff, 0x53, 0x84, 0x72, 0xc2, 0xca, 0xb0, 0xb8, 0xef, 0xb4, 0xdb, 0xd4, 0xdb, 0xa3, 0xe4, 0x3a, - 0x0c, 0x6e, 0x6f, 0x6e, 0x6f, 0x09, 0x2b, 0xa9, 0xf4, 0x2e, 0x60, 0x20, 0x85, 0x63, 0x23, 0x06, - 0x79, 0x00, 0x67, 0xa4, 0x17, 0xb1, 0x2a, 0x12, 0x23, 0x74, 0xb1, 0xb7, 0x4f, 0x72, 0x9a, 0x8e, - 0xbc, 0x2d, 0x4c, 0x22, 0x3f, 0xee, 0xba, 0x01, 0x6d, 0xa1, 0xe5, 0x27, 0xbe, 0xaa, 0xd7, 0x4a, - 0x6c, 0x1d, 0x8d, 0x7c, 0x1f, 0x26, 0xea, 0xf5, 0xcd, 0xb8, 0xf6, 0x21, 0xe3, 0x86, 0x48, 0x2f, - 0xb2, 0x0d, 0x44, 0xfe, 0x24, 0xd8, 0xfa, 0xa3, 0x02, 0xcc, 0xe5, 0x98, 0x5b, 0xc8, 0x1b, 0x86, - 0x1c, 0xa6, 0x35, 0x39, 0x48, 0x94, 0x95, 0x53, 0x42, 0x10, 0x8b, 0x9a, 0x4f, 0xf6, 0xc0, 0x09, - 0x7c, 0xb2, 0x57, 0x4e, 0xc5, 0x7e, 0xd8, 0xe4, 0x75, 0x18, 0xa8, 0xd7, 0x37, 0x85, 0x59, 0x9d, - 0xc4, 0x3d, 0xd0, 0x90, 0x19, 0x42, 0x0d, 0x60, 0x54, 0x82, 0xac, 0xd3, 0x30, 0x69, 0x0c, 0x8c, - 0x65, 0xc1, 0x84, 0xde, 0x42, 0x36, 0xfa, 0x8b, 0x7e, 0x4b, 0x8d, 0x3e, 0xfb, 0xdb, 0xfa, 0x55, - 0x53, 0x66, 0xe4, 0x22, 0x80, 0xbc, 0xaf, 0x75, 0x5b, 0xf2, 0xe6, 0x47, 0x40, 0x56, 0x5b, 0xe4, - 0x0a, 0x4c, 0x04, 0xb4, 0xe5, 0x06, 0xb4, 0x19, 0x35, 0xba, 0x81, 0x78, 0x18, 0x63, 0x8f, 0x4b, - 0xd8, 0x4e, 0xd0, 0x26, 0xdf, 0x85, 0x61, 0x7e, 0x91, 0x2c, 0x7a, 0x2f, 0x0f, 0x09, 0xf5, 0xfa, - 0xe6, 0xfa, 0xdd, 0x2a, 0xbf, 0xe8, 0xb6, 0x05, 0x8a, 0x55, 0x83, 0x71, 0xad, 0x57, 0xfd, 0x6a, - 0x9f, 0x81, 0x21, 0xdd, 0x4a, 0xc9, 0x7f, 0x58, 0xbf, 0x53, 0x80, 0x19, 0x9c, 0x06, 0x7b, 0x2e, - 0xdb, 0x1e, 0xe2, 0xbe, 0x2c, 0x18, 0x83, 0x76, 0xc1, 0x18, 0xb4, 0x04, 0xae, 0x1a, 0xbd, 0x0f, - 0x52, 0xa3, 0x77, 0x21, 0x6b, 0xf4, 0x70, 0x09, 0x70, 0x7d, 0x4f, 0x1f, 0x34, 0xfd, 0xba, 0xee, - 0x77, 0x0b, 0x30, 0xad, 0xb5, 0x49, 0x75, 0xf0, 0x8e, 0xd1, 0xa4, 0xf3, 0x19, 0x4d, 0x4a, 0xcd, - 0xa7, 0x5a, 0xaa, 0x45, 0xaf, 0xf5, 0x6a, 0x51, 0xd6, 0x74, 0x32, 0xa6, 0xc9, 0x5f, 0x16, 0x60, - 0x36, 0x53, 0x06, 0xe4, 0x2c, 0xd3, 0xff, 0x9b, 0x01, 0x8d, 0x84, 0xe4, 0xc5, 0x2f, 0x06, 0x5f, - 0x0d, 0xc3, 0x2e, 0x0d, 0x84, 0xdc, 0xc5, 0x2f, 0xf2, 0x1a, 0x4c, 0x6e, 0xd1, 0xc0, 0xf5, 0x5b, - 0xfc, 0x61, 0x02, 0xf7, 0xf8, 0x9d, 0xb4, 0x4d, 0x20, 0xb9, 0x00, 0x63, 0xca, 0x63, 0x95, 0xdb, - 0x70, 0xed, 0x18, 0xc0, 0x78, 0x2f, 0xb9, 0x7b, 0xfc, 0xe2, 0x87, 0x11, 0x8b, 0x5f, 0x6c, 0x01, - 0x96, 0x16, 0xd5, 0x61, 0xbe, 0x00, 0x4b, 0x73, 0xe9, 0x59, 0x18, 0xfe, 0xcc, 0xc6, 0x79, 0x8c, - 0x31, 0x27, 0x6c, 0xf1, 0x8b, 0x4c, 0xa1, 0x6b, 0x39, 0xbe, 0x8b, 0x41, 0x97, 0xf2, 0x0f, 0x60, - 0x26, 0x4b, 0xae, 0x59, 0x5f, 0x81, 0xa0, 0x2d, 0x2a, 0xda, 0x2f, 0x61, 0xba, 0xda, 0x6a, 0xc5, - 0xd3, 0x95, 0x8f, 0x2a, 0x5f, 0x27, 0xb8, 0x4d, 0x53, 0xa8, 0xb5, 0x83, 0xab, 0x9e, 0x1b, 0xd9, - 0xd3, 0xcb, 0xdf, 0xb8, 0x61, 0xe4, 0x7a, 0x7b, 0x9a, 0xe1, 0xd5, 0x3e, 0xbb, 0x41, 0x9f, 0x65, - 0x4c, 0x01, 0xa6, 0x71, 0x98, 0xbc, 0x39, 0x3c, 0x83, 0xf9, 0x8c, 0xc6, 0x36, 0x5e, 0xba, 0xe6, - 0x4c, 0xbe, 0x71, 0xc1, 0x40, 0xb5, 0xf9, 0xc4, 0xfa, 0x3e, 0x9c, 0xe5, 0xcb, 0x7e, 0xaf, 0xc6, - 0x8b, 0x66, 0xeb, 0x76, 0x62, 0xeb, 0x3d, 0x69, 0xc9, 0xe9, 0xd9, 0x32, 0x7b, 0xc2, 0x68, 0x0b, - 0x56, 0xf9, 0x9f, 0x0b, 0x30, 0x9f, 0x20, 0xad, 0x3f, 0xf7, 0x9a, 0x72, 0xcf, 0x79, 0x3d, 0xe9, - 0xba, 0x8f, 0xba, 0x12, 0x37, 0x90, 0xba, 0x2d, 0xe5, 0xbd, 0x4f, 0x6e, 0x01, 0x70, 0x62, 0x4d, - 0xc5, 0xc1, 0xeb, 0x01, 0xe1, 0xe5, 0x84, 0x4a, 0x8e, 0x86, 0x42, 0xba, 0x90, 0x25, 0x77, 0xf1, - 0x8d, 0xf4, 0xb3, 0x9f, 0x63, 0x9c, 0x15, 0x2a, 0xc8, 0x1b, 0x39, 0x86, 0xf4, 0x2c, 0xfe, 0xd6, - 0xdf, 0x1e, 0x80, 0x39, 0x7d, 0x00, 0x5f, 0xa4, 0xaf, 0x5b, 0x30, 0xbe, 0xe8, 0x7b, 0x11, 0xfd, - 0x26, 0xd2, 0xe2, 0x5c, 0x10, 0xe5, 0x8d, 0xa0, 0x4a, 0x84, 0x7a, 0xcd, 0x01, 0x0d, 0xa6, 0xeb, - 0x19, 0xde, 0x9a, 0x31, 0x22, 0x59, 0x84, 0xc9, 0x0d, 0xfa, 0x2c, 0x25, 0x40, 0xf4, 0x18, 0xf5, - 0xe8, 0xb3, 0x86, 0x26, 0x44, 0xdd, 0x8d, 0xcf, 0xa0, 0x21, 0x8f, 0x60, 0x4a, 0x4e, 0x2e, 0x43, - 0x98, 0xf3, 0xfa, 0xce, 0x6b, 0x4e, 0x67, 0x1e, 0x07, 0x82, 0xd5, 0x90, 0x23, 0xc3, 0x04, 0x47, - 0xd6, 0x75, 0x5e, 0x23, 0x0f, 0x6d, 0x60, 0x6e, 0xed, 0x5a, 0x89, 0xe1, 0x8f, 0x9b, 0x0c, 0x69, - 0xa0, 0xb3, 0xb0, 0xb6, 0xa0, 0x9c, 0x1e, 0x0f, 0x51, 0xdb, 0xdb, 0x30, 0xcc, 0xa1, 0x42, 0x55, - 0x92, 0x21, 0x8c, 0x14, 0x36, 0xb7, 0x65, 0xb4, 0xc4, 0xae, 0xc4, 0x61, 0xd6, 0x0a, 0xda, 0x97, - 0x14, 0x8e, 0x52, 0x56, 0x6f, 0x27, 0x87, 0x17, 0x5d, 0x9d, 0xe5, 0xf0, 0xea, 0xbe, 0x38, 0xf2, - 0x49, 0xca, 0x22, 0x9a, 0xe8, 0x74, 0x4e, 0xa2, 0x61, 0x37, 0x60, 0x44, 0x80, 0x12, 0xc1, 0x95, - 0xe2, 0xcf, 0x4f, 0x22, 0x58, 0x1f, 0xc0, 0x39, 0xb4, 0x17, 0xba, 0xde, 0x5e, 0x9b, 0xee, 0x84, - 0xc6, 0xa3, 0x92, 0x7e, 0x9f, 0xf5, 0x47, 0x30, 0x9f, 0x45, 0xdb, 0xf7, 0xcb, 0xe6, 0xe1, 0x4e, - 0xfe, 0xbc, 0x08, 0x33, 0xab, 0xa1, 0xae, 0x70, 0xa9, 0x90, 0x27, 0x19, 0x61, 0x38, 0x50, 0x26, - 0x2b, 0xa7, 0xb2, 0xc2, 0x6c, 0xbc, 0xad, 0x3d, 0x77, 0x2d, 0xf6, 0x8a, 0xaf, 0xc1, 0xb6, 0x2d, - 0xf5, 0xe0, 0xf5, 0x75, 0x18, 0xdc, 0x60, 0x4b, 0xf5, 0x80, 0x18, 0x3b, 0x4e, 0xc1, 0x40, 0xf8, - 0xdc, 0x94, 0x6d, 0x91, 0xec, 0x07, 0xb9, 0x9b, 0x7a, 0xd4, 0x3a, 0xd8, 0x3f, 0x7e, 0xc4, 0xca, - 0xa9, 0xd4, 0xfb, 0xd6, 0x77, 0x61, 0xbc, 0xda, 0x3a, 0xe0, 0x2e, 0x99, 0xbe, 0x97, 0xf8, 0x2c, - 0xb5, 0x92, 0x95, 0x53, 0xb6, 0x8e, 0x48, 0xae, 0xf1, 0x57, 0x0d, 0xc3, 0x39, 0x31, 0x35, 0x98, - 0xb2, 0x56, 0xed, 0x74, 0x6a, 0xa3, 0x30, 0xcc, 0x1f, 0x5a, 0x5a, 0x5f, 0xc2, 0xbc, 0x70, 0xe4, - 0xe1, 0xd6, 0x51, 0x74, 0xf7, 0x09, 0x63, 0x5f, 0xad, 0x5e, 0xce, 0x37, 0x97, 0x00, 0xf0, 0x2c, - 0xb4, 0xea, 0xb5, 0xe8, 0x37, 0xc2, 0x93, 0x50, 0x83, 0x58, 0xef, 0xc0, 0x98, 0x92, 0x10, 0x2a, - 0xfc, 0xda, 0x66, 0x87, 0xd2, 0x9a, 0x31, 0x5e, 0xf1, 0xca, 0xa7, 0xbb, 0xe7, 0x8c, 0xbe, 0x8b, - 0x28, 0x39, 0xfc, 0x84, 0xe0, 0xc2, 0x6c, 0x62, 0x12, 0xc4, 0x41, 0x18, 0x94, 0x8e, 0xce, 0x5d, - 0x1d, 0xd5, 0xef, 0xa4, 0x0a, 0x5f, 0x3c, 0x96, 0x0a, 0x6f, 0xfd, 0xb3, 0x22, 0x1e, 0x2e, 0x53, - 0xf2, 0x48, 0xd8, 0xe9, 0x74, 0x5b, 0x61, 0x0d, 0xc6, 0xb0, 0xf7, 0x4b, 0xf2, 0xc1, 0x60, 0x6f, - 0x3f, 0x94, 0xd1, 0x9f, 0x1e, 0x56, 0x4e, 0xa1, 0xf3, 0x49, 0x4c, 0x46, 0x3e, 0x86, 0x91, 0x65, - 0xaf, 0x85, 0x1c, 0x06, 0x4e, 0xc0, 0x41, 0x12, 0xb1, 0x31, 0xc1, 0x26, 0x6f, 0xb3, 0x4f, 0x98, - 0x9b, 0x77, 0x6c, 0x0d, 0x12, 0x9f, 0x72, 0x87, 0xf2, 0x4e, 0xb9, 0xc3, 0x89, 0x53, 0xae, 0x05, - 0x43, 0x9b, 0x41, 0x4b, 0xc4, 0xb6, 0x99, 0x5a, 0x98, 0x10, 0x82, 0x43, 0x98, 0xcd, 0x8b, 0xac, - 0xff, 0x56, 0x80, 0xb9, 0x7b, 0x34, 0xca, 0x9c, 0x43, 0x86, 0x54, 0x0a, 0x2f, 0x2d, 0x95, 0xe2, - 0x8b, 0x48, 0x45, 0xf5, 0x7a, 0x20, 0xaf, 0xd7, 0x83, 0x79, 0xbd, 0x1e, 0xca, 0xef, 0xf5, 0x3d, - 0x18, 0xe6, 0x5d, 0x65, 0x27, 0xf9, 0xd5, 0x88, 0x1e, 0xc4, 0x27, 0x79, 0xdd, 0x8b, 0xce, 0xe6, - 0x65, 0x4c, 0x91, 0x5c, 0x73, 0x42, 0xfd, 0x24, 0x2f, 0x7e, 0x5a, 0x3f, 0xc2, 0xa7, 0xc6, 0x6b, - 0x7e, 0xf3, 0x89, 0x66, 0x11, 0x1e, 0xe1, 0x5f, 0x68, 0xf2, 0x06, 0x81, 0x61, 0xf1, 0x12, 0x5b, - 0x62, 0x90, 0xcb, 0x30, 0xbe, 0xea, 0xdd, 0xf5, 0x83, 0x26, 0xdd, 0xf4, 0xda, 0x9c, 0xfb, 0xa8, - 0xad, 0x83, 0x84, 0xa5, 0x44, 0xd4, 0x10, 0x9b, 0x1f, 0x10, 0x90, 0x30, 0x3f, 0x30, 0xd8, 0xee, - 0x82, 0xcd, 0xcb, 0x84, 0x21, 0x86, 0xfd, 0xdd, 0xeb, 0xe4, 0xae, 0x8e, 0xf8, 0xfd, 0x10, 0x1f, - 0xc1, 0x39, 0x9b, 0x76, 0xda, 0x0e, 0xd3, 0xe9, 0x0e, 0x7c, 0x8e, 0xaf, 0xfa, 0x7c, 0x39, 0xe3, - 0x99, 0xa0, 0xe9, 0x53, 0xa1, 0x9a, 0x5c, 0xec, 0xd1, 0xe4, 0x03, 0xb8, 0x72, 0x8f, 0x46, 0xe6, - 0x82, 0x1a, 0xdb, 0x9b, 0x45, 0xe7, 0x57, 0x60, 0x34, 0x34, 0x6d, 0xe5, 0xf2, 0xd9, 0x5b, 0x26, - 0xe1, 0xee, 0x5b, 0xf2, 0x36, 0x49, 0xf0, 0x51, 0x7f, 0x59, 0x9f, 0x40, 0x25, 0xaf, 0xba, 0xe3, - 0xb9, 0xbc, 0xba, 0x70, 0x39, 0x9f, 0x81, 0x68, 0xee, 0x32, 0x48, 0xbb, 0xba, 0xf8, 0x84, 0xfa, - 0xb5, 0xd6, 0x34, 0xc5, 0x8b, 0x3f, 0xac, 0x9a, 0x74, 0xfe, 0x7b, 0x89, 0xe6, 0x36, 0xf0, 0xca, - 0xda, 0x64, 0x10, 0xcb, 0xb5, 0x0a, 0xa3, 0x12, 0x26, 0xe4, 0x3a, 0x97, 0xd9, 0x52, 0x29, 0xd0, - 0x96, 0x64, 0xa0, 0xc8, 0xac, 0x1f, 0xc9, 0xeb, 0x1b, 0x93, 0xe2, 0x78, 0xef, 0x66, 0x8f, 0x73, - 0x5f, 0x63, 0xf9, 0x70, 0xce, 0xe4, 0xad, 0x9b, 0xe5, 0x4b, 0x9a, 0x59, 0x9e, 0x5b, 0xe3, 0x2f, - 0x9b, 0x66, 0x62, 0x61, 0x69, 0xd0, 0x40, 0xe4, 0x92, 0x6e, 0x7c, 0x9f, 0x48, 0x3f, 0xc4, 0xbd, - 0x0d, 0xf3, 0x59, 0x15, 0x6a, 0xe7, 0x40, 0x65, 0xe1, 0x15, 0xfa, 0xce, 0x12, 0x5c, 0x92, 0xd1, - 0xa5, 0x7c, 0x3f, 0x0a, 0xa3, 0xc0, 0xe9, 0xd4, 0x9b, 0x81, 0xdb, 0x89, 0xa9, 0x2c, 0x18, 0xe6, - 0x10, 0x21, 0x09, 0x7e, 0x15, 0xc6, 0x71, 0x44, 0x89, 0xf5, 0xeb, 0x05, 0xb0, 0x0c, 0x3f, 0x2d, - 0x1c, 0xe7, 0xad, 0xc0, 0x7f, 0xea, 0xb6, 0xb4, 0xeb, 0xa7, 0x37, 0x0c, 0xd3, 0x27, 0x7f, 0x93, - 0x98, 0x74, 0x11, 0x17, 0x6b, 0xe6, 0xed, 0x84, 0x39, 0x92, 0x2b, 0x9e, 0xe8, 0xbb, 0x65, 0x3e, - 0x88, 0x50, 0x66, 0xca, 0xff, 0x51, 0x80, 0xab, 0x3d, 0xdb, 0x20, 0xfa, 0xf3, 0x08, 0x4a, 0xc9, - 0x32, 0x31, 0x83, 0x2a, 0x9a, 0xdf, 0x46, 0x9a, 0xc3, 0xee, 0x1d, 0xee, 0x87, 0x2e, 0xfd, 0x9b, - 0x3a, 0x8a, 0x73, 0x8a, 0xdf, 0xc9, 0x5b, 0x8f, 0xf1, 0x2b, 0xfc, 0xc8, 0x69, 0x2f, 0xa2, 0x01, - 0x60, 0x20, 0x7e, 0x53, 0x10, 0x31, 0x68, 0x23, 0x19, 0x26, 0x43, 0x43, 0xb6, 0x3e, 0xc5, 0xef, - 0x3a, 0xbb, 0xd1, 0xc7, 0xfb, 0xd4, 0x16, 0xe1, 0x6a, 0xc2, 0x77, 0xe0, 0x05, 0x98, 0x44, 0x30, - 0xcb, 0xc4, 0xcf, 0x74, 0xef, 0x7b, 0x81, 0xdf, 0xed, 0xfc, 0x62, 0x46, 0xfd, 0x8f, 0x0b, 0xdc, - 0x99, 0x53, 0xaf, 0x56, 0x0c, 0xf4, 0x22, 0x40, 0x0c, 0x4d, 0x38, 0xf5, 0xab, 0x82, 0xdd, 0x3b, - 0xfc, 0xc8, 0x8d, 0xb7, 0x0a, 0x7b, 0x9c, 0x81, 0x46, 0xf6, 0x8b, 0x1d, 0xc9, 0xb7, 0xd0, 0x61, - 0x40, 0xd5, 0x7e, 0x3c, 0xb9, 0xbf, 0x2b, 0xed, 0x1f, 0x27, 0xa4, 0xdb, 0x87, 0x19, 0xb6, 0x02, - 0x54, 0xbb, 0xd1, 0xbe, 0x1f, 0xb8, 0x91, 0x7c, 0x9e, 0x42, 0xb6, 0x44, 0x44, 0x00, 0x4e, 0xf5, - 0xd1, 0xcf, 0x0f, 0x2b, 0xef, 0x9d, 0x24, 0xee, 0xa7, 0xe4, 0xb9, 0xad, 0xa2, 0x08, 0x58, 0x73, - 0x30, 0xb0, 0x68, 0xaf, 0xe1, 0x82, 0x67, 0xaf, 0xa9, 0x05, 0xcf, 0x5e, 0xb3, 0xfe, 0xaa, 0x08, - 0x15, 0x1e, 0xb3, 0x04, 0xfd, 0x4c, 0x62, 0xab, 0x85, 0xe6, 0xb8, 0x72, 0x5c, 0x03, 0x43, 0x22, - 0x26, 0x49, 0xf1, 0x38, 0x31, 0x49, 0x7e, 0x05, 0x72, 0x4c, 0x56, 0xc7, 0xb0, 0x02, 0x7c, 0xe7, - 0xe8, 0xb0, 0x72, 0x35, 0xb6, 0x02, 0xf0, 0xd2, 0x2c, 0x73, 0x40, 0x4e, 0x15, 0x69, 0xfb, 0xc5, - 0xe0, 0x0b, 0xd8, 0x2f, 0x6e, 0xc3, 0x08, 0x1e, 0x66, 0x56, 0xb7, 0x84, 0xe7, 0x27, 0x4e, 0x4f, - 0x8c, 0x50, 0xd4, 0x70, 0xf5, 0x70, 0x80, 0x12, 0xcd, 0xfa, 0xfb, 0x45, 0xb8, 0x9c, 0x2f, 0x73, - 0xd1, 0xb6, 0x25, 0x80, 0xd8, 0xc3, 0xa5, 0x97, 0x47, 0x0d, 0x7e, 0x3b, 0xcf, 0xe8, 0x23, 0xe5, - 0xd1, 0xa6, 0xd1, 0x31, 0xdd, 0x47, 0xbe, 0xb4, 0x4e, 0x5c, 0xa7, 0x18, 0x0f, 0xb0, 0x45, 0x34, - 0x5b, 0x01, 0x32, 0xa2, 0xd9, 0x0a, 0x18, 0x79, 0x04, 0x73, 0x5b, 0x81, 0xfb, 0xd4, 0x89, 0xe8, - 0x03, 0xfa, 0x9c, 0x3f, 0x16, 0x5a, 0x16, 0x2f, 0x84, 0xf8, 0xf3, 0xf9, 0xeb, 0x47, 0x87, 0x95, - 0xd7, 0x3a, 0x1c, 0x05, 0x23, 0x96, 0xf1, 0xb7, 0x9f, 0x8d, 0xf4, 0xa3, 0xa1, 0x3c, 0x46, 0xd6, - 0xbf, 0x2e, 0xc0, 0x79, 0x54, 0xcb, 0x85, 0xd9, 0x55, 0x56, 0xfe, 0x42, 0x8e, 0x95, 0x7a, 0x07, - 0xc5, 0x5c, 0x44, 0xc7, 0x4a, 0xe3, 0x25, 0xba, 0x6d, 0xa0, 0x91, 0x55, 0x18, 0x17, 0xbf, 0xf1, - 0xfb, 0x1b, 0xc0, 0x03, 0xc1, 0xac, 0xb6, 0x60, 0xe1, 0x54, 0xe7, 0xa6, 0x22, 0x9c, 0xd8, 0x82, - 0x19, 0x3e, 0xd8, 0xb4, 0x75, 0x5a, 0xeb, 0x67, 0x45, 0xb8, 0xb0, 0x4b, 0x03, 0xf7, 0xf1, 0xf3, - 0x9c, 0xce, 0x6c, 0xc2, 0x8c, 0x04, 0xf1, 0xb8, 0x25, 0xc6, 0x27, 0xc6, 0xe3, 0x59, 0xca, 0xa6, - 0x8a, 0xc0, 0x27, 0xf2, 0x8b, 0xcb, 0x24, 0x3c, 0x81, 0xcb, 0xe4, 0xdb, 0x30, 0x9a, 0x88, 0x1c, - 0x84, 0xe3, 0x2f, 0xbf, 0xd0, 0x78, 0xa8, 0x56, 0x4e, 0xd9, 0x0a, 0x93, 0xfc, 0x66, 0xfe, 0x55, - 0x95, 0x30, 0x7d, 0xf4, 0xb3, 0x7f, 0xe2, 0x07, 0xcb, 0x3e, 0x56, 0x47, 0x2b, 0xcd, 0xf8, 0x60, - 0x57, 0x4e, 0xd9, 0x79, 0x35, 0xd5, 0xc6, 0x61, 0xac, 0x8a, 0xf7, 0x76, 0xec, 0xe4, 0xfe, 0xdf, - 0x8b, 0x70, 0x49, 0x3e, 0xfc, 0xc9, 0x11, 0xf3, 0xe7, 0x30, 0x27, 0x41, 0xd5, 0x0e, 0x53, 0x18, - 0x68, 0xcb, 0x94, 0x34, 0x8f, 0x29, 0x2b, 0x25, 0xed, 0x08, 0x9c, 0x58, 0xd8, 0x79, 0xe4, 0xaf, - 0xc6, 0xfa, 0xf9, 0x71, 0x56, 0x1c, 0x27, 0xb4, 0x42, 0xea, 0x6b, 0xa6, 0x21, 0x1a, 0x63, 0xfd, - 0x6c, 0xa5, 0xac, 0xa7, 0x83, 0x2f, 0x6b, 0x3d, 0x5d, 0x39, 0x95, 0xb4, 0x9f, 0xd6, 0xa6, 0x60, - 0x62, 0x83, 0x3e, 0x8b, 0xe5, 0xfe, 0x7f, 0x17, 0x12, 0xa1, 0x1e, 0x98, 0x86, 0xc1, 0x63, 0x3e, - 0x14, 0xe2, 0x50, 0x40, 0x18, 0xea, 0x41, 0xd7, 0x30, 0x38, 0xea, 0x2a, 0x8c, 0xf0, 0xcb, 0xec, - 0xd6, 0x31, 0x4e, 0xf8, 0xea, 0x05, 0x0f, 0x7f, 0x56, 0xd9, 0xe2, 0x87, 0x7d, 0x41, 0x6f, 0x3d, - 0x80, 0x2b, 0xc2, 0xc7, 0xdb, 0x1c, 0x7c, 0xac, 0xe8, 0x84, 0xdb, 0x97, 0xe5, 0xc0, 0xa5, 0x7b, - 0x34, 0xb9, 0xf4, 0x18, 0x2f, 0x9c, 0x3e, 0x81, 0xd3, 0x06, 0x5c, 0x71, 0x44, 0xad, 0x54, 0xcd, - 0x21, 0xc5, 0x3a, 0x89, 0x6d, 0x5d, 0xce, 0xaa, 0x42, 0x6f, 0xac, 0x45, 0x31, 0x38, 0x6c, 0x10, - 0x5f, 0xb1, 0x85, 0x27, 0x58, 0xf5, 0xae, 0x6b, 0xdf, 0x35, 0x5f, 0xf1, 0x78, 0xf4, 0x40, 0xb9, - 0xf3, 0xaa, 0x52, 0x6b, 0xd2, 0xb8, 0x0b, 0xb0, 0xa6, 0x60, 0x42, 0x16, 0xb5, 0x69, 0x18, 0x5a, - 0xff, 0x61, 0x08, 0x2c, 0x21, 0xd8, 0xac, 0x1b, 0x7a, 0x29, 0x8f, 0x47, 0xa9, 0xc6, 0x8a, 0x8d, - 0xea, 0xac, 0x1e, 0x93, 0x34, 0x2e, 0xe5, 0x33, 0x0f, 0xf5, 0xbc, 0x66, 0x0c, 0x35, 0x66, 0x5e, - 0xaa, 0xf7, 0x5f, 0xe5, 0x2c, 0x93, 0xfc, 0x63, 0xc3, 0x27, 0xdb, 0x39, 0xcb, 0xa4, 0xc1, 0x37, - 0x7b, 0xc9, 0xb4, 0xcd, 0x2b, 0x91, 0x81, 0x17, 0xb9, 0x12, 0x61, 0x5f, 0xa4, 0x7e, 0x29, 0xb2, - 0x63, 0xca, 0x52, 0x7c, 0x8f, 0xf2, 0xf6, 0x5e, 0x2f, 0x12, 0x11, 0x17, 0x34, 0x88, 0xc1, 0xd5, - 0x60, 0x43, 0x5c, 0x28, 0x69, 0x36, 0xcb, 0xc5, 0x7d, 0xda, 0x7c, 0x22, 0x6c, 0xc5, 0xf2, 0x42, - 0x37, 0xcb, 0x66, 0xce, 0xe3, 0x53, 0xf3, 0xef, 0x9c, 0x17, 0x34, 0x9a, 0x8c, 0x54, 0x8f, 0x18, - 0x91, 0x64, 0x4b, 0x7e, 0x02, 0xd3, 0x6a, 0xa8, 0x13, 0x2e, 0x5a, 0xe3, 0x0b, 0xaf, 0xc5, 0xa1, - 0x4c, 0x0f, 0x1e, 0x3b, 0x37, 0x9f, 0xde, 0xb9, 0x99, 0x81, 0xcb, 0x03, 0x11, 0x34, 0x65, 0x81, - 0xe6, 0x9f, 0xa5, 0x5f, 0x74, 0x65, 0x10, 0x92, 0x2f, 0x60, 0xa6, 0x5e, 0xdf, 0xe4, 0x8f, 0x39, - 0x6c, 0x79, 0xc1, 0x6f, 0xaf, 0x09, 0x87, 0x2d, 0x1c, 0xee, 0x30, 0xf4, 0x1b, 0xe2, 0x11, 0x88, - 0xee, 0x16, 0xa0, 0x87, 0x62, 0xc8, 0x62, 0xa1, 0xdf, 0x94, 0xff, 0x5d, 0xf5, 0x56, 0x81, 0xa9, - 0x22, 0x6e, 0x9b, 0x8a, 0x47, 0x47, 0x72, 0x62, 0xe7, 0xdc, 0xf2, 0x15, 0xbe, 0xe5, 0x5b, 0xbe, - 0x3f, 0x28, 0xca, 0x17, 0x1a, 0xe9, 0x8b, 0xd6, 0x13, 0x5f, 0xf6, 0x65, 0xf6, 0xe0, 0x58, 0xfb, - 0x74, 0x66, 0xe3, 0x48, 0x4d, 0x5e, 0x95, 0xaa, 0x60, 0x65, 0x53, 0xea, 0xda, 0x21, 0x2e, 0x30, - 0x6e, 0x4f, 0x51, 0x2b, 0xd2, 0xa8, 0x92, 0xf7, 0x70, 0x03, 0x2f, 0x7f, 0x0f, 0xf7, 0x5f, 0xc7, - 0xe0, 0xcc, 0x96, 0xb3, 0xe7, 0x7a, 0x6c, 0x3f, 0xb0, 0x69, 0xe8, 0x77, 0x83, 0x26, 0x25, 0x55, - 0x98, 0x32, 0xdd, 0x6f, 0xfb, 0x38, 0x17, 0xb3, 0x2d, 0xcf, 0x84, 0x91, 0x05, 0x18, 0x53, 0x4f, - 0x7e, 0xc5, 0x3e, 0x95, 0xf1, 0x14, 0x78, 0xe5, 0x94, 0x1d, 0xa3, 0x91, 0xf7, 0x8d, 0xab, 0xa3, - 0xd3, 0xea, 0xf5, 0x3a, 0xe2, 0x2e, 0x70, 0xff, 0x48, 0xcf, 0x6f, 0x99, 0x7b, 0x2d, 0xbf, 0x1f, - 0xf9, 0x51, 0xea, 0x36, 0x69, 0xc8, 0x68, 0x71, 0xca, 0xa4, 0x86, 0x6a, 0x46, 0x6e, 0xec, 0xf1, - 0x8c, 0x7b, 0xa6, 0x2f, 0x61, 0xfc, 0x41, 0xf7, 0x11, 0x95, 0xf7, 0x66, 0xc3, 0x62, 0xeb, 0x4d, - 0x3a, 0x95, 0x8b, 0xf2, 0xdd, 0xb7, 0xf8, 0x18, 0x3c, 0xe9, 0x3e, 0xa2, 0xe9, 0xa0, 0xf6, 0x6c, - 0xcd, 0xd3, 0x98, 0x91, 0x7d, 0x28, 0x25, 0xfd, 0xbf, 0x45, 0x78, 0xbf, 0x1e, 0x5e, 0xeb, 0x18, - 0xa6, 0x45, 0x0b, 0x9d, 0xcf, 0xbd, 0x52, 0x8d, 0x4a, 0x52, 0x5c, 0xc9, 0xaf, 0xc2, 0x6c, 0xa6, - 0x41, 0x53, 0xbd, 0x60, 0xeb, 0x6d, 0x2b, 0xc5, 0x05, 0x24, 0x21, 0x35, 0xf9, 0x5c, 0xce, 0xa8, - 0x39, 0xbb, 0x16, 0xd2, 0x82, 0xd3, 0x09, 0xbf, 0x66, 0x91, 0x1f, 0x24, 0xdf, 0x53, 0x1a, 0xf7, - 0x3c, 0x19, 0x62, 0x37, 0xb3, 0xae, 0x24, 0x4b, 0xb2, 0x06, 0x63, 0xca, 0x92, 0x20, 0x22, 0xab, - 0x65, 0x59, 0x4d, 0xca, 0x47, 0x87, 0x95, 0x99, 0xd8, 0x6a, 0x62, 0xf0, 0x8c, 0x19, 0x90, 0x5f, - 0x83, 0x2b, 0x6a, 0x8a, 0x6e, 0x06, 0xd9, 0xf6, 0x25, 0x11, 0x9a, 0xff, 0x46, 0x72, 0x86, 0xe7, - 0xe1, 0xef, 0xde, 0xa9, 0x15, 0xcb, 0x85, 0x95, 0x53, 0x76, 0x7f, 0xd6, 0xe4, 0x37, 0x0a, 0x70, - 0x36, 0xa7, 0xd6, 0x09, 0xac, 0xb5, 0xaf, 0xd1, 0x0f, 0xcf, 0x0d, 0xf8, 0x6a, 0xcb, 0x6d, 0xc5, - 0xaf, 0x1b, 0xa5, 0xf5, 0xcf, 0xe8, 0x77, 0x4e, 0x4d, 0xe4, 0x36, 0xc0, 0x9e, 0x1b, 0x89, 0x39, - 0x86, 0x41, 0xc6, 0xd2, 0x1f, 0x28, 0x13, 0xdb, 0x9e, 0x1b, 0x89, 0x99, 0xf6, 0x26, 0x0c, 0xe3, - 0x81, 0x3d, 0x2c, 0x4f, 0xa2, 0x4a, 0x8b, 0xf1, 0x8c, 0xf0, 0x58, 0xaf, 0x6f, 0x62, 0x02, 0x87, - 0xac, 0x30, 0xd5, 0x10, 0x37, 0x51, 0xa9, 0xca, 0x89, 0xe8, 0x67, 0xe2, 0x78, 0xc1, 0x8b, 0x64, - 0x58, 0x12, 0x23, 0x6b, 0x83, 0x49, 0x56, 0x03, 0x18, 0x0d, 0xc4, 0x3a, 0x76, 0x7f, 0x70, 0x74, - 0xb0, 0x34, 0xc4, 0x3f, 0x35, 0xe9, 0x62, 0xff, 0x5b, 0xa3, 0xfc, 0x3d, 0xee, 0x8e, 0xe7, 0x3e, - 0x76, 0xe3, 0x25, 0x4f, 0x37, 0xf5, 0xc5, 0xe9, 0x93, 0x84, 0x22, 0x9e, 0x93, 0x28, 0x49, 0x59, - 0x05, 0x8b, 0x7d, 0xad, 0x82, 0x6f, 0x69, 0xf7, 0x67, 0x5a, 0x94, 0x53, 0xae, 0x70, 0x99, 0x56, - 0xb8, 0xf8, 0x62, 0xed, 0x6b, 0x18, 0xc6, 0xc0, 0xa4, 0xfc, 0x72, 0x72, 0x7c, 0xe1, 0xa6, 0x58, - 0xe8, 0x7b, 0x34, 0x9f, 0x47, 0x32, 0x15, 0x6f, 0xec, 0xb9, 0xc4, 0x11, 0x60, 0x48, 0x1c, 0x21, - 0x64, 0x1b, 0xa6, 0xb7, 0xd8, 0xfe, 0xcf, 0x1d, 0xbd, 0x3b, 0x81, 0xb0, 0x94, 0x70, 0x1b, 0x0c, - 0xea, 0x1f, 0x1d, 0x59, 0xdc, 0xa0, 0xaa, 0x5c, 0xdf, 0x82, 0x33, 0xc8, 0xc9, 0x32, 0x4c, 0xd5, - 0xa9, 0x13, 0x34, 0xf7, 0x1f, 0xd0, 0xe7, 0x4c, 0xf7, 0x32, 0x32, 0x86, 0x84, 0x58, 0xc2, 0xfa, - 0x8b, 0x45, 0xba, 0xc3, 0x89, 0x49, 0x44, 0x3e, 0x85, 0xe1, 0xba, 0x1f, 0x44, 0xb5, 0xe7, 0x62, - 0x19, 0x94, 0xd7, 0x57, 0x1c, 0x58, 0x3b, 0x27, 0xb3, 0xa6, 0x84, 0x7e, 0x10, 0x35, 0x1e, 0x19, - 0x01, 0xb2, 0x38, 0x0a, 0x79, 0x0e, 0x33, 0xe6, 0x12, 0x24, 0xfc, 0x8f, 0x47, 0x85, 0xce, 0x97, - 0xb5, 0xce, 0x71, 0x94, 0xda, 0x75, 0xc1, 0xfd, 0x72, 0x72, 0xa1, 0x7b, 0x8c, 0xe5, 0xba, 0xa2, - 0x94, 0x45, 0x4f, 0xd6, 0x31, 0xdd, 0x0c, 0xef, 0x51, 0x35, 0xe4, 0x7e, 0xcb, 0x63, 0x71, 0x08, - 0xb6, 0x2e, 0x2e, 0x63, 0x28, 0x09, 0x27, 0x4c, 0xe6, 0x28, 0xb2, 0x53, 0xa4, 0x64, 0x0b, 0xce, - 0xec, 0x84, 0x74, 0x2b, 0xa0, 0x4f, 0x5d, 0xfa, 0x4c, 0xf2, 0x83, 0x38, 0x5e, 0x15, 0xe3, 0xd7, - 0xe1, 0xa5, 0x59, 0x0c, 0xd3, 0xc4, 0xe4, 0x7d, 0x80, 0x2d, 0xd7, 0xf3, 0x68, 0x0b, 0xef, 0x40, - 0xc7, 0x91, 0x15, 0xda, 0x77, 0x3b, 0x08, 0x6d, 0xf8, 0x5e, 0x5b, 0x17, 0xa9, 0x86, 0x4c, 0x6a, - 0x30, 0xb9, 0xea, 0x35, 0xdb, 0x5d, 0xe1, 0xab, 0x10, 0xe2, 0x12, 0x24, 0xe2, 0xe8, 0xb9, 0xbc, - 0xa0, 0x91, 0xfa, 0xc8, 0x4d, 0x12, 0xf2, 0x00, 0x88, 0x00, 0x88, 0x59, 0xeb, 0x3c, 0x6a, 0x53, - 0xf1, 0xb9, 0xa3, 0xdd, 0x46, 0x32, 0xc2, 0xe9, 0x6e, 0x84, 0xa7, 0x4b, 0x91, 0xcd, 0xbf, 0x0f, - 0xe3, 0xda, 0x9c, 0xcf, 0x08, 0x1a, 0x31, 0xa3, 0x07, 0x8d, 0x18, 0xd3, 0x83, 0x43, 0xfc, 0xa3, - 0x02, 0x5c, 0xc8, 0xfe, 0x96, 0x84, 0xca, 0xb6, 0x09, 0x63, 0x0a, 0xa8, 0x9e, 0x09, 0xc9, 0x73, - 0x48, 0x42, 0x67, 0xe2, 0x1f, 0xb4, 0x5c, 0x79, 0xf4, 0xde, 0xc7, 0x3c, 0x5e, 0xe0, 0x72, 0xe0, - 0xff, 0x1d, 0x85, 0x19, 0x74, 0x87, 0x4f, 0xae, 0x53, 0x9f, 0x60, 0xf0, 0x17, 0x84, 0x69, 0xb6, - 0x6e, 0x61, 0xf6, 0xe2, 0xf0, 0x64, 0x18, 0x34, 0x83, 0x80, 0xbc, 0xa3, 0x3b, 0x68, 0x14, 0xb5, - 0xf4, 0x36, 0x12, 0xa8, 0x77, 0x21, 0xf6, 0xdc, 0x78, 0xc3, 0xf0, 0x0f, 0x38, 0xf6, 0xa2, 0x37, - 0x78, 0xdc, 0x45, 0x6f, 0x47, 0x2d, 0x7a, 0x3c, 0xa8, 0xc8, 0x77, 0xb4, 0x45, 0xef, 0xd5, 0xaf, - 0x76, 0xc3, 0xaf, 0x7a, 0xb5, 0x1b, 0x79, 0xb9, 0xd5, 0x6e, 0xf4, 0x05, 0x57, 0xbb, 0xbb, 0x30, - 0xb5, 0x41, 0x69, 0x4b, 0xbb, 0xb5, 0x19, 0x8b, 0x77, 0x4f, 0x8f, 0xa2, 0x3d, 0x2e, 0xeb, 0xea, - 0x26, 0x41, 0x95, 0xbb, 0x6a, 0xc2, 0xdf, 0xcc, 0xaa, 0x39, 0xfe, 0x8a, 0x57, 0xcd, 0x89, 0x97, - 0x59, 0x35, 0x53, 0x4b, 0xdf, 0xe4, 0x89, 0x97, 0xbe, 0x97, 0x59, 0xad, 0x3e, 0x46, 0xff, 0xc6, - 0x7a, 0x7d, 0x45, 0xb8, 0xb2, 0x68, 0xbe, 0x23, 0x2b, 0x7e, 0x28, 0xdd, 0xbf, 0xf1, 0x6f, 0x06, - 0xc3, 0x24, 0x02, 0x9c, 0x09, 0xfe, 0x6d, 0xd5, 0xd0, 0xab, 0x51, 0xa7, 0x57, 0xcf, 0x24, 0x46, - 0xc4, 0x1b, 0x4b, 0xb1, 0xc6, 0x25, 0xf5, 0x3a, 0x5b, 0x96, 0x5b, 0x7f, 0x5e, 0xe0, 0x37, 0xa4, - 0xff, 0x3b, 0x2e, 0x95, 0x2f, 0x73, 0x6b, 0xf9, 0x9b, 0x71, 0xec, 0x05, 0x11, 0x27, 0x22, 0x70, - 0x9a, 0x4f, 0xe2, 0x6b, 0xe3, 0x1f, 0xb2, 0xef, 0x5c, 0x2f, 0x10, 0x1a, 0xf0, 0x9c, 0x92, 0x94, - 0x5e, 0xb8, 0x7b, 0x47, 0x2e, 0x00, 0x22, 0x04, 0x05, 0x07, 0x9b, 0x0b, 0x80, 0x4e, 0x80, 0x8e, - 0x7b, 0xa7, 0x2d, 0x9b, 0x87, 0x0e, 0xc8, 0x6c, 0xc1, 0xbb, 0xe9, 0xc7, 0xef, 0x78, 0x7c, 0x89, - 0x1f, 0xbf, 0xeb, 0x62, 0x8c, 0x9f, 0xc1, 0xef, 0xc0, 0x79, 0x9b, 0x1e, 0xf8, 0x4f, 0xe9, 0xab, - 0x65, 0xfb, 0x15, 0x9c, 0x33, 0x19, 0xf2, 0x67, 0x52, 0x3c, 0xa6, 0xff, 0xc7, 0xd9, 0x99, 0x00, - 0x04, 0x01, 0xcf, 0x04, 0xc0, 0x03, 0x8a, 0xb3, 0x3f, 0xf5, 0x7d, 0x03, 0xcb, 0x2c, 0x1f, 0x2e, - 0x98, 0xcc, 0xab, 0xad, 0x16, 0x26, 0x13, 0x6d, 0xba, 0x1d, 0xc7, 0x8b, 0xc8, 0x26, 0x8c, 0x6b, - 0x3f, 0x13, 0xc6, 0x05, 0xad, 0x44, 0xe8, 0x34, 0x31, 0xc0, 0x08, 0xc8, 0x1a, 0x83, 0x2d, 0x0a, - 0x95, 0xa4, 0x78, 0x98, 0xc8, 0xf4, 0x3a, 0x6b, 0x30, 0xa9, 0xfd, 0x54, 0xf6, 0x53, 0xfc, 0xf8, - 0xb5, 0x1a, 0x4c, 0x81, 0x99, 0x24, 0x56, 0x13, 0xe6, 0xb3, 0x84, 0xc6, 0x23, 0x77, 0x93, 0xe5, - 0x38, 0x30, 0x57, 0x7f, 0xd7, 0xbf, 0xd3, 0x79, 0x41, 0xb9, 0xac, 0xbf, 0x33, 0x08, 0xe7, 0xc5, - 0x60, 0xbc, 0xca, 0x11, 0x27, 0x3f, 0x82, 0x71, 0x6d, 0x8c, 0x85, 0xd0, 0x2f, 0xcb, 0x47, 0x4e, - 0x79, 0x73, 0x81, 0x1b, 0x41, 0xba, 0x08, 0x68, 0x24, 0x86, 0x7b, 0xe5, 0x94, 0xad, 0xb3, 0x24, - 0x6d, 0x98, 0x32, 0x07, 0x5a, 0xd8, 0x81, 0xae, 0x66, 0x56, 0x62, 0xa2, 0xca, 0xb0, 0xde, 0xad, - 0x46, 0xe6, 0x70, 0xaf, 0x9c, 0xb2, 0x13, 0xbc, 0xc9, 0x37, 0x70, 0x26, 0x35, 0xca, 0xc2, 0xbc, - 0xf7, 0x7a, 0x66, 0x85, 0x29, 0x6c, 0x6e, 0x1b, 0x0e, 0x10, 0x9c, 0x5b, 0x6d, 0xba, 0x12, 0xd2, - 0x82, 0x09, 0x7d, 0xe0, 0x85, 0xa1, 0xea, 0x4a, 0x0f, 0x51, 0x72, 0x44, 0xae, 0xdc, 0x09, 0x59, - 0xe2, 0xd8, 0x3f, 0x37, 0xed, 0xdd, 0x06, 0xf2, 0x28, 0x0c, 0xf3, 0xdf, 0xd6, 0x1f, 0x14, 0xe0, - 0xfc, 0x56, 0x40, 0x43, 0xea, 0x35, 0xa9, 0xe1, 0x2e, 0xfe, 0x92, 0x33, 0x22, 0xcf, 0xd4, 0x5c, - 0x7c, 0x69, 0x53, 0xb3, 0xf5, 0xaf, 0x0a, 0x50, 0xce, 0x6a, 0x72, 0x9d, 0x7a, 0x2d, 0xb2, 0x05, - 0xa5, 0x64, 0x1f, 0xc4, 0x17, 0x63, 0xa9, 0xa8, 0xcc, 0xb9, 0xbd, 0x5d, 0x39, 0x65, 0xa7, 0xa8, - 0xc9, 0x06, 0x9c, 0xd1, 0x60, 0xc2, 0xd4, 0x5b, 0x3c, 0x8e, 0xa9, 0x97, 0x8d, 0x70, 0x8a, 0x54, - 0xb7, 0x94, 0xaf, 0xe0, 0xae, 0xbb, 0xe4, 0x1f, 0x38, 0xae, 0xc7, 0x94, 0x68, 0x2d, 0xee, 0x17, - 0xc4, 0x50, 0x21, 0x76, 0x6e, 0xfb, 0x45, 0xa8, 0x7c, 0x39, 0xa3, 0x50, 0xac, 0x8f, 0x70, 0x77, - 0x10, 0x16, 0x43, 0xfe, 0x56, 0x59, 0x31, 0xbb, 0x0c, 0x43, 0xdb, 0x6b, 0xf5, 0xc5, 0xaa, 0x78, - 0xf9, 0xcc, 0xe3, 0x65, 0xb4, 0xc3, 0x46, 0xd3, 0xb1, 0x79, 0x81, 0xf5, 0x21, 0x90, 0x7b, 0x34, - 0x12, 0x69, 0x01, 0x14, 0xdd, 0x35, 0x18, 0x11, 0x20, 0x41, 0x89, 0x3e, 0x80, 0x22, 0xc9, 0x80, - 0x2d, 0xcb, 0xac, 0x2d, 0x79, 0x06, 0x69, 0x53, 0x27, 0xd4, 0x36, 0xfd, 0xf7, 0x60, 0x34, 0x10, - 0x30, 0xb1, 0xe7, 0x4f, 0xa9, 0xac, 0x2f, 0x08, 0xe6, 0xd6, 0x75, 0x89, 0x63, 0xab, 0xbf, 0xac, - 0x35, 0x8c, 0x6d, 0xb3, 0xb9, 0xba, 0xb4, 0xc8, 0xa4, 0x2a, 0x84, 0x25, 0x87, 0xe3, 0x16, 0x3a, - 0xcb, 0x47, 0x54, 0x7f, 0xf7, 0x8c, 0xa2, 0xc1, 0x05, 0x44, 0x44, 0x74, 0xd2, 0x50, 0xac, 0xb7, - 0x54, 0xa4, 0x9c, 0x0c, 0x6e, 0x79, 0xd9, 0x4b, 0x36, 0x30, 0x06, 0xd0, 0x3d, 0xf4, 0x0b, 0x7a, - 0x15, 0x8d, 0x70, 0x60, 0x9e, 0xab, 0x10, 0xac, 0x57, 0x22, 0x77, 0xa3, 0xaf, 0x96, 0xdd, 0x45, - 0x18, 0x53, 0x30, 0x75, 0xc9, 0xc7, 0x65, 0x65, 0xe0, 0xef, 0xbe, 0xc5, 0x9f, 0x88, 0x37, 0x15, - 0x83, 0x98, 0x8e, 0x55, 0xc1, 0xbf, 0xe9, 0x6f, 0xb9, 0x8a, 0x90, 0x06, 0xd1, 0xb7, 0x5a, 0x45, - 0x1c, 0x24, 0xea, 0x24, 0x55, 0x18, 0xf8, 0xbb, 0x0b, 0xc7, 0x11, 0xd4, 0xb7, 0x5c, 0x05, 0x13, - 0xd4, 0xb7, 0x57, 0x05, 0x95, 0xd1, 0xb4, 0xf8, 0x24, 0x4d, 0x55, 0xb2, 0x9c, 0xae, 0x44, 0x9a, - 0xd1, 0x13, 0x14, 0x3d, 0xc7, 0x83, 0xc2, 0x05, 0x2e, 0xac, 0x5f, 0x40, 0x35, 0x4c, 0x60, 0xdf, - 0x6e, 0x35, 0xff, 0xa0, 0xc0, 0x63, 0x7b, 0xd5, 0x37, 0xb5, 0xac, 0xa9, 0xde, 0x63, 0x5f, 0xf3, - 0x41, 0xd0, 0xbe, 0xf6, 0x07, 0xae, 0xd7, 0xd2, 0x7d, 0x10, 0x9c, 0x6e, 0xb4, 0xaf, 0x62, 0x5f, - 0x3f, 0x71, 0xbd, 0x96, 0x9d, 0xc4, 0x26, 0xef, 0xc3, 0xa4, 0x06, 0x52, 0x9a, 0x20, 0xcf, 0x4e, - 0xa2, 0x93, 0xbb, 0x2d, 0xdb, 0xc4, 0xb4, 0xfe, 0xba, 0x00, 0xd3, 0x19, 0xf9, 0xbc, 0xd1, 0x50, - 0x82, 0x27, 0x2c, 0xb5, 0x50, 0x89, 0x7c, 0x62, 0x18, 0x66, 0xc4, 0xd8, 0x7f, 0x15, 0x22, 0xe6, - 0x65, 0xd0, 0x72, 0x8f, 0x17, 0xb5, 0x2c, 0x79, 0xd9, 0xf9, 0xc6, 0x75, 0x74, 0x12, 0x02, 0xc4, - 0x2d, 0x11, 0x26, 0xe9, 0x3a, 0x53, 0x97, 0xb5, 0xc4, 0xe5, 0xaf, 0x24, 0x73, 0xba, 0x56, 0x8d, - 0xf5, 0x9b, 0x45, 0x38, 0x9b, 0xd1, 0xff, 0x3a, 0x8d, 0xfe, 0x26, 0x44, 0x90, 0x48, 0x1f, 0x3f, - 0xf0, 0x0b, 0x4a, 0x1f, 0x6f, 0xfd, 0x49, 0x11, 0xce, 0xee, 0x74, 0x42, 0x7c, 0x4a, 0xb6, 0xea, - 0x3d, 0xa5, 0x5e, 0xe4, 0x07, 0xcf, 0xf1, 0xf9, 0x0b, 0x79, 0x07, 0x86, 0x56, 0x68, 0xbb, 0xed, - 0x8b, 0xf9, 0x7f, 0x51, 0xba, 0x81, 0x24, 0xb1, 0x11, 0x69, 0xe5, 0x94, 0xcd, 0xb1, 0xc9, 0xfb, - 0x30, 0xb6, 0x42, 0x9d, 0x20, 0x7a, 0x44, 0x1d, 0x79, 0x1c, 0x92, 0x39, 0x53, 0x34, 0x12, 0x81, - 0xb0, 0x72, 0xca, 0x8e, 0xb1, 0xc9, 0x02, 0x0c, 0x6e, 0xf9, 0xde, 0x9e, 0x7a, 0x36, 0x9f, 0x53, - 0x21, 0xc3, 0x59, 0x39, 0x65, 0x23, 0x2e, 0x59, 0x87, 0xc9, 0xea, 0x1e, 0xf5, 0xa2, 0x75, 0x1a, - 0x39, 0x2d, 0x27, 0x72, 0x84, 0xda, 0x7c, 0x2d, 0x8f, 0xd8, 0x40, 0x5e, 0x39, 0x65, 0x9b, 0xd4, - 0xe4, 0x43, 0x18, 0xb9, 0xe7, 0xfb, 0xad, 0x47, 0xcf, 0x65, 0xf0, 0x87, 0x4a, 0x1e, 0x23, 0x81, - 0xb6, 0x72, 0xca, 0x96, 0x14, 0xb5, 0x21, 0x18, 0x58, 0x0f, 0xf7, 0xac, 0xc3, 0x02, 0x94, 0x97, - 0xfc, 0x67, 0x5e, 0xa6, 0x54, 0xbf, 0x6f, 0x4a, 0x55, 0xb2, 0xcf, 0xc0, 0x4f, 0xc8, 0xf5, 0x6d, - 0x18, 0xdc, 0x72, 0xbd, 0xbd, 0x84, 0x2a, 0x98, 0x41, 0xc7, 0xb0, 0x50, 0x3c, 0xae, 0xb7, 0x47, - 0xd6, 0xa4, 0x7e, 0x2f, 0xec, 0x98, 0x03, 0xc6, 0xa1, 0x22, 0x83, 0x5a, 0xc7, 0x8e, 0xf5, 0x78, - 0xfe, 0x5b, 0x76, 0xf0, 0x0d, 0x98, 0xcb, 0xa9, 0x57, 0xbc, 0x83, 0x67, 0x7d, 0x1b, 0x44, 0xc5, - 0xe6, 0xff, 0x2b, 0xc0, 0x6c, 0xe6, 0x00, 0x26, 0x31, 0xd9, 0x99, 0x8e, 0x4f, 0xcc, 0xc5, 0xb6, - 0xdf, 0x7c, 0x72, 0x0c, 0x6f, 0x32, 0x4b, 0xe6, 0x19, 0x17, 0x5f, 0x48, 0x93, 0xd1, 0x25, 0x72, - 0xc9, 0xe9, 0x2c, 0xad, 0x7f, 0x9a, 0x35, 0xd7, 0xb9, 0x70, 0xcb, 0x30, 0x22, 0xf3, 0x95, 0x71, - 0xd3, 0x95, 0xfc, 0x89, 0x8f, 0xcd, 0xe4, 0x5a, 0x20, 0x03, 0xc9, 0xc8, 0x4f, 0x7e, 0x57, 0x0b, - 0xdc, 0xc5, 0xbf, 0xd8, 0x0f, 0x5e, 0xe2, 0xbb, 0x54, 0xbc, 0x58, 0x9d, 0x2b, 0x7e, 0x18, 0x79, - 0xca, 0x8b, 0xd9, 0x56, 0xbf, 0xc9, 0x0d, 0x28, 0xc9, 0xdc, 0x24, 0x22, 0x09, 0x92, 0xc8, 0xa7, - 0x6f, 0xa7, 0xe0, 0xe4, 0x3d, 0x98, 0x4b, 0xc2, 0x64, 0x2f, 0xf9, 0x6b, 0xc1, 0xbc, 0x62, 0xeb, - 0xcf, 0x8a, 0x18, 0x5b, 0xbd, 0xc7, 0xa7, 0xc3, 0xc6, 0x6f, 0xb3, 0x2e, 0xa4, 0x55, 0xdc, 0xac, - 0x93, 0x0b, 0x30, 0xb6, 0x59, 0x37, 0x92, 0xbe, 0xd9, 0x31, 0x80, 0x35, 0x9b, 0x75, 0xa1, 0x1a, - 0x34, 0xf7, 0xdd, 0x88, 0x36, 0xa3, 0x6e, 0x20, 0x16, 0x7a, 0x3b, 0x05, 0x27, 0x16, 0x4c, 0xdc, - 0x6b, 0xbb, 0x8f, 0x9a, 0x92, 0x19, 0x17, 0x81, 0x01, 0x23, 0xaf, 0xc3, 0xd4, 0xaa, 0x17, 0x46, - 0x4e, 0xbb, 0xbd, 0x4e, 0xa3, 0x7d, 0xbf, 0x25, 0x52, 0xda, 0xda, 0x09, 0x28, 0xab, 0x77, 0xd1, - 0xf7, 0x22, 0xc7, 0xf5, 0x68, 0x60, 0x77, 0xbd, 0xc8, 0x3d, 0xa0, 0xa2, 0xef, 0x29, 0x38, 0x79, - 0x1b, 0x66, 0x15, 0x6c, 0x33, 0x68, 0xee, 0xd3, 0x30, 0x0a, 0x30, 0x15, 0x24, 0xfa, 0x2b, 0xd9, - 0xd9, 0x85, 0x58, 0x43, 0xdb, 0xef, 0xb6, 0x96, 0xbd, 0xa7, 0x6e, 0xe0, 0x7b, 0x98, 0x68, 0x65, - 0x54, 0xd4, 0x90, 0x80, 0x5b, 0xbf, 0x3f, 0x9a, 0xb9, 0x32, 0xbc, 0xcc, 0x1c, 0xfc, 0x02, 0x26, - 0x16, 0x9d, 0x8e, 0xf3, 0xc8, 0x6d, 0xbb, 0x91, 0xab, 0x72, 0xe6, 0xbd, 0xd3, 0x67, 0x59, 0x91, - 0xd9, 0x6a, 0x68, 0x4b, 0x27, 0xb6, 0x0d, 0x56, 0xf3, 0x7f, 0x35, 0x0c, 0xb3, 0x99, 0x78, 0xe4, - 0xba, 0x48, 0xae, 0xa7, 0x96, 0x6e, 0x91, 0xb9, 0xcd, 0x4e, 0x82, 0xd9, 0x58, 0x22, 0x68, 0xb1, - 0x4d, 0x1d, 0xaf, 0x2b, 0xf2, 0xb6, 0xd9, 0x06, 0x8c, 0x8d, 0x25, 0x53, 0x4d, 0x34, 0x66, 0xe8, - 0x84, 0x6e, 0x27, 0xa0, 0xe4, 0x32, 0x8c, 0x33, 0x88, 0x64, 0x35, 0xc8, 0x9f, 0x4b, 0x6a, 0x20, - 0xc6, 0x69, 0xc3, 0x6f, 0x51, 0x8d, 0xd3, 0x10, 0xe7, 0x64, 0x42, 0x19, 0x27, 0x06, 0x91, 0x9c, - 0x86, 0x39, 0x27, 0x0d, 0x44, 0x5e, 0x83, 0xc9, 0x6a, 0xa7, 0xa3, 0x31, 0xc2, 0x84, 0x6d, 0xb6, - 0x09, 0x24, 0x97, 0x00, 0xaa, 0x9d, 0x8e, 0x64, 0x83, 0xc9, 0xd8, 0x6c, 0x0d, 0x42, 0x6e, 0xc6, - 0xe1, 0xf1, 0x34, 0x56, 0x78, 0x1b, 0x62, 0x67, 0x94, 0x30, 0xb9, 0xaa, 0x58, 0x62, 0x82, 0x29, - 0x70, 0xb9, 0x26, 0xc0, 0xe4, 0x23, 0x38, 0x97, 0x70, 0x34, 0xd1, 0x2a, 0xc0, 0x9b, 0x0a, 0x3b, - 0x1f, 0x81, 0xbc, 0x0b, 0x67, 0x13, 0x85, 0xb2, 0x3a, 0xbc, 0x94, 0xb0, 0x73, 0x4a, 0xc9, 0x07, - 0x50, 0x4e, 0x3c, 0x81, 0x8f, 0x2b, 0xc5, 0x0b, 0x08, 0x3b, 0xb7, 0x9c, 0x7d, 0x5d, 0x89, 0xb7, - 0x74, 0xa2, 0x4a, 0xbc, 0x6b, 0xb5, 0xb3, 0x0b, 0xc9, 0x0a, 0x54, 0x32, 0x9d, 0x77, 0xb4, 0x8a, - 0x31, 0xc9, 0x9c, 0xdd, 0x0f, 0x8d, 0xd4, 0xe0, 0x42, 0x26, 0x8a, 0x6c, 0x06, 0xa6, 0x9e, 0xb3, - 0x7b, 0xe2, 0x90, 0x05, 0x98, 0x89, 0x9d, 0x98, 0xb4, 0x26, 0x60, 0xd6, 0x39, 0x3b, 0xb3, 0x8c, - 0xbc, 0x69, 0x06, 0x3a, 0xe0, 0x95, 0x61, 0xd2, 0x39, 0x3b, 0x5d, 0x60, 0x1d, 0x15, 0xe0, 0x42, - 0xe6, 0x5e, 0x2c, 0x8f, 0x0c, 0xf3, 0x49, 0xdd, 0x54, 0x5b, 0x0b, 0x6e, 0xc0, 0x20, 0x9e, 0x21, - 0xb8, 0xa9, 0x5b, 0xfa, 0xed, 0x22, 0x3d, 0x67, 0xc5, 0x4a, 0x6d, 0xc4, 0x21, 0xf7, 0xd4, 0xd5, - 0xe6, 0x00, 0x1a, 0x4b, 0x6e, 0x25, 0x75, 0xb4, 0x8c, 0xca, 0xf5, 0x2b, 0x4e, 0x79, 0x99, 0xf9, - 0x32, 0xb7, 0x48, 0x7f, 0x56, 0x80, 0x4a, 0x1f, 0x15, 0x44, 0xf5, 0xa9, 0x70, 0x8c, 0x3e, 0xdd, - 0x57, 0x7d, 0xe2, 0xef, 0x8c, 0x17, 0x8e, 0xa7, 0xe6, 0xbc, 0xea, 0x6e, 0xfd, 0x75, 0x01, 0x48, - 0x5a, 0xd5, 0x25, 0xdf, 0x83, 0xb1, 0x7a, 0x7d, 0xc5, 0x70, 0x61, 0x4c, 0x5d, 0x6e, 0xc5, 0x18, - 0xe4, 0xf6, 0xb1, 0x7c, 0x16, 0x75, 0x8f, 0xc5, 0x4f, 0x52, 0x8e, 0x92, 0x03, 0x3d, 0x1d, 0x25, - 0x53, 0x6e, 0x92, 0xcb, 0x19, 0x9e, 0x7f, 0x83, 0x7d, 0x3c, 0xff, 0xd2, 0x6e, 0x7d, 0xd6, 0x12, - 0x94, 0xf3, 0xb4, 0x65, 0x5c, 0xe1, 0x78, 0x50, 0x39, 0xed, 0x82, 0x8e, 0xaf, 0x70, 0x26, 0xd8, - 0x7a, 0x17, 0xce, 0x2a, 0x6a, 0x9e, 0xad, 0x46, 0x8b, 0xe6, 0x20, 0x8e, 0xd8, 0x2a, 0x6a, 0x44, - 0x0c, 0xb0, 0xfe, 0x74, 0x30, 0x45, 0x58, 0xef, 0x1e, 0x1c, 0x38, 0xc1, 0x73, 0x52, 0x35, 0x09, - 0x07, 0xfa, 0x9e, 0x6a, 0x6a, 0x83, 0x4c, 0xc7, 0xd4, 0xb8, 0xb3, 0x7d, 0x01, 0x35, 0x0c, 0xaf, - 0x49, 0xf9, 0xd5, 0x5e, 0x91, 0x47, 0xac, 0x32, 0x80, 0x64, 0x17, 0x26, 0xc5, 0xde, 0x8d, 0xbf, - 0xe5, 0x37, 0x76, 0x3b, 0xf9, 0x8d, 0x19, 0xcd, 0xbb, 0x69, 0x90, 0xf0, 0xd9, 0x68, 0xb2, 0x21, - 0x5f, 0xc0, 0x94, 0xd4, 0xd4, 0x04, 0x63, 0xee, 0x8c, 0x75, 0xa7, 0x37, 0x63, 0x93, 0x86, 0x73, - 0x4e, 0x30, 0x62, 0x4d, 0x96, 0x8b, 0x1d, 0xe7, 0x3c, 0x74, 0x9c, 0x26, 0x1b, 0x24, 0xa2, 0xc9, - 0x06, 0x6c, 0xfe, 0x53, 0x20, 0xe9, 0x7e, 0xf5, 0xfb, 0x9c, 0x26, 0xb5, 0xcf, 0x69, 0xbe, 0x0a, - 0xd3, 0x19, 0x1d, 0x38, 0x11, 0x8b, 0x4f, 0x81, 0xa4, 0x5b, 0x7a, 0x12, 0x0e, 0xd6, 0x75, 0x78, - 0x5d, 0x89, 0x40, 0xcd, 0x06, 0x83, 0xa7, 0x34, 0xb2, 0xff, 0x7a, 0x11, 0x2a, 0x7d, 0x50, 0xc9, - 0xef, 0x15, 0x92, 0xd2, 0xe6, 0xb3, 0xf1, 0xfd, 0xa4, 0xb4, 0xb3, 0xe9, 0x33, 0xc4, 0x5e, 0xfb, - 0xe0, 0x37, 0xfe, 0xe2, 0x85, 0x4f, 0x1e, 0xe9, 0x21, 0x3b, 0xb9, 0xb4, 0x06, 0x75, 0x69, 0xed, - 0xc2, 0x8c, 0x71, 0x2c, 0x3c, 0xce, 0xe6, 0x65, 0x01, 0x88, 0xc4, 0xb9, 0x6b, 0xfe, 0x9e, 0xc8, - 0xef, 0x5b, 0x2c, 0x17, 0x6c, 0x0d, 0x6a, 0xdd, 0x85, 0xd9, 0x04, 0x5f, 0x61, 0xfc, 0xff, 0x1e, - 0xa8, 0x97, 0xfb, 0xc8, 0x78, 0xa0, 0x76, 0xe6, 0xe7, 0x87, 0x95, 0x49, 0xa6, 0xd6, 0xdf, 0x8c, - 0x93, 0x27, 0xc8, 0xbf, 0xac, 0x75, 0xfd, 0xfa, 0xa2, 0xda, 0xd6, 0x23, 0x1a, 0x91, 0x3b, 0x30, - 0xcc, 0x21, 0x89, 0x10, 0xe5, 0x3a, 0xb6, 0x58, 0x17, 0x04, 0xa2, 0x35, 0x8b, 0xef, 0x8c, 0xf1, - 0x47, 0x35, 0x8e, 0x8b, 0x61, 0xed, 0xf0, 0x94, 0x3d, 0x31, 0x58, 0x85, 0x41, 0x1f, 0xac, 0xc6, - 0xf1, 0x3b, 0xa4, 0x1f, 0x8b, 0xc4, 0xf3, 0xfc, 0x67, 0x6d, 0xda, 0xe2, 0xb9, 0x16, 0x6b, 0x13, - 0xe2, 0x8c, 0x3b, 0xe8, 0x30, 0x06, 0x48, 0x66, 0x7d, 0x02, 0xb3, 0x4c, 0x5b, 0x08, 0x92, 0xf5, - 0x61, 0xa2, 0x0e, 0x06, 0x33, 0x9f, 0x13, 0x38, 0x0c, 0x84, 0xcf, 0x09, 0x44, 0xa1, 0xb5, 0x06, - 0xe7, 0xb8, 0xf1, 0x53, 0xef, 0x52, 0x7c, 0xd5, 0x30, 0x84, 0xbf, 0x13, 0xaf, 0x54, 0x33, 0x7a, - 0xcf, 0xf1, 0xac, 0x8f, 0xf1, 0x19, 0x94, 0x98, 0xa8, 0xae, 0xef, 0xc5, 0x96, 0xce, 0xe3, 0xbd, - 0x9b, 0xfe, 0x3f, 0xe1, 0x42, 0xb5, 0xd3, 0xa1, 0x5e, 0x2b, 0x26, 0xdc, 0x0e, 0x9c, 0x63, 0x46, - 0xb5, 0x20, 0x55, 0x18, 0x42, 0x6c, 0x75, 0x07, 0x2c, 0x9a, 0x9b, 0xd1, 0x1c, 0xc4, 0x13, 0x31, - 0x6b, 0xb1, 0x02, 0x4e, 0x69, 0xb5, 0x60, 0xae, 0xde, 0x7d, 0x74, 0xe0, 0x46, 0xf8, 0x08, 0x01, - 0x23, 0xc3, 0xc8, 0xba, 0x57, 0x65, 0x96, 0x35, 0x2e, 0x8c, 0xeb, 0xf1, 0x73, 0x19, 0x7c, 0xc7, - 0x20, 0xa2, 0xc5, 0x3c, 0xbd, 0x73, 0x33, 0x26, 0x45, 0x2b, 0x0f, 0xaf, 0x05, 0x8b, 0x45, 0x26, - 0x36, 0x6b, 0x1a, 0xce, 0xe8, 0x77, 0x5e, 0x7c, 0x86, 0xcc, 0xc2, 0xb4, 0x79, 0x97, 0xc5, 0xc1, - 0x5f, 0xc3, 0x0c, 0xb7, 0xb5, 0xf3, 0x98, 0xf3, 0x0b, 0x71, 0x78, 0xf5, 0xe2, 0xee, 0x42, 0xe2, - 0xf5, 0x03, 0x3a, 0x45, 0xab, 0x6c, 0x22, 0xbb, 0x0b, 0xfc, 0x29, 0xeb, 0xd3, 0x05, 0xe3, 0x36, - 0xb6, 0xb8, 0xbb, 0x50, 0x1b, 0x11, 0xb1, 0x7b, 0x19, 0x77, 0x3e, 0xfc, 0xdf, 0x0a, 0xf7, 0x05, - 0x8c, 0x9e, 0xb0, 0x42, 0x1d, 0x7c, 0xe9, 0x94, 0xfd, 0x06, 0x7d, 0x0a, 0x8a, 0x2a, 0x38, 0x67, - 0xd1, 0x6d, 0x59, 0x7f, 0x58, 0x80, 0xeb, 0x5c, 0x21, 0xcb, 0xa6, 0xc3, 0x8b, 0xad, 0x1c, 0x62, - 0xf2, 0x1e, 0x0c, 0x85, 0x9a, 0x83, 0x87, 0x25, 0x5a, 0xde, 0x8b, 0x13, 0x27, 0x20, 0x55, 0x98, - 0xd0, 0x1f, 0xf4, 0x1c, 0x2f, 0xee, 0x9f, 0x3d, 0x7e, 0xf0, 0xd8, 0x51, 0x8f, 0x7c, 0x9e, 0xc0, - 0xf9, 0xe5, 0x6f, 0xd8, 0x84, 0x10, 0x3b, 0x94, 0x38, 0x3d, 0xc4, 0x6f, 0x9c, 0x4f, 0x6f, 0x8b, - 0x19, 0x63, 0x1e, 0xed, 0x93, 0x60, 0x76, 0x4e, 0x96, 0x9b, 0x9c, 0x52, 0xe1, 0xc7, 0x6c, 0x03, - 0x66, 0xfd, 0x69, 0x01, 0x2e, 0x64, 0xd7, 0x26, 0x16, 0x96, 0x55, 0x38, 0xb3, 0xe8, 0x78, 0xbe, - 0xe7, 0x36, 0x9d, 0x76, 0xbd, 0xb9, 0x4f, 0x5b, 0x5d, 0x15, 0xe1, 0x57, 0xad, 0x32, 0x7b, 0xd4, - 0x93, 0xe4, 0x12, 0xc5, 0x4e, 0x53, 0xb1, 0x13, 0x22, 0xbe, 0x09, 0xe1, 0x6b, 0x6f, 0x9b, 0x06, - 0x8a, 0x1f, 0x6f, 0x59, 0x4e, 0x29, 0xb9, 0x2d, 0x2f, 0x15, 0x5a, 0x3b, 0x9e, 0x1b, 0x29, 0x22, - 0x6e, 0xea, 0xc9, 0x2a, 0xb2, 0xfe, 0x6d, 0x01, 0xce, 0x61, 0x52, 0x2f, 0x23, 0x4d, 0x68, 0x1c, - 0xe8, 0x5a, 0xc6, 0x6a, 0x2e, 0x18, 0x6f, 0x5c, 0x0c, 0x6c, 0x33, 0x68, 0x33, 0x79, 0x13, 0x06, - 0xeb, 0xd2, 0xe1, 0x6c, 0x2a, 0x91, 0xe0, 0x59, 0x50, 0xb0, 0x72, 0x1b, 0xb1, 0xd8, 0x19, 0x7e, - 0x89, 0x86, 0x4d, 0xea, 0x61, 0x26, 0x6e, 0x6e, 0x79, 0xd0, 0x20, 0x71, 0x0c, 0xaa, 0xc1, 0xbc, - 0x18, 0x54, 0x43, 0x66, 0x0c, 0x2a, 0xeb, 0x29, 0x4f, 0xe9, 0x95, 0xec, 0x90, 0x18, 0xa4, 0x8f, - 0x53, 0x89, 0xbb, 0xf9, 0x3e, 0x70, 0x36, 0xab, 0x67, 0x4c, 0x49, 0x4f, 0xe4, 0xe4, 0xce, 0x0f, - 0x2c, 0xbd, 0x05, 0xaf, 0x19, 0xb8, 0xd5, 0x76, 0xdb, 0x7f, 0x46, 0x5b, 0x5b, 0x81, 0x7f, 0xe0, - 0x47, 0x46, 0x4a, 0x23, 0x91, 0xb9, 0x3e, 0xbe, 0x36, 0x12, 0xb3, 0x32, 0x01, 0xb6, 0xfe, 0x0f, - 0xb8, 0xd6, 0x87, 0xa3, 0xe8, 0x54, 0x1d, 0xce, 0x38, 0x89, 0x32, 0xe9, 0x39, 0x74, 0x2d, 0xab, - 0x5f, 0x49, 0x46, 0xa1, 0x9d, 0xa6, 0xbf, 0xb1, 0x6d, 0x24, 0xbb, 0x26, 0x65, 0x98, 0xd9, 0xb2, - 0x37, 0x97, 0x76, 0x16, 0xb7, 0x1b, 0xdb, 0x5f, 0x6c, 0x2d, 0x37, 0x76, 0x36, 0x1e, 0x6c, 0x6c, - 0x3e, 0xdc, 0xe0, 0x91, 0xd9, 0x8d, 0x92, 0xed, 0xe5, 0xea, 0x7a, 0xa9, 0x40, 0x66, 0xa0, 0x64, - 0x80, 0x97, 0x77, 0x6a, 0xa5, 0xe2, 0x8d, 0xaf, 0x8d, 0x24, 0xce, 0xe4, 0x02, 0x94, 0xeb, 0x3b, - 0x5b, 0x5b, 0x9b, 0xb6, 0xe2, 0xaa, 0xc7, 0x85, 0x9f, 0x85, 0x33, 0x46, 0xe9, 0x5d, 0x7b, 0x79, - 0xb9, 0x54, 0x60, 0x4d, 0x31, 0xc0, 0x5b, 0xf6, 0xf2, 0xfa, 0xea, 0xce, 0x7a, 0xa9, 0x78, 0xa3, - 0xa1, 0x3f, 0xac, 0x23, 0xe7, 0x61, 0x6e, 0x69, 0x79, 0x77, 0x75, 0x71, 0x39, 0x8b, 0xf7, 0x0c, - 0x94, 0xf4, 0xc2, 0xed, 0xcd, 0xed, 0x2d, 0xce, 0x5a, 0x87, 0x3e, 0x5c, 0xae, 0x55, 0x77, 0xb6, - 0x57, 0x36, 0x4a, 0x03, 0xd6, 0xe0, 0x68, 0xb1, 0x54, 0xbc, 0xf1, 0x23, 0xe3, 0xd5, 0x1d, 0x6b, - 0xbe, 0x40, 0xdf, 0xa9, 0x57, 0xef, 0xe5, 0x57, 0xc1, 0x4b, 0xd7, 0xef, 0x56, 0x4b, 0x05, 0x72, - 0x11, 0xce, 0x19, 0xd0, 0xad, 0x6a, 0xbd, 0xfe, 0x70, 0xd3, 0x5e, 0x5a, 0x5b, 0xae, 0xd7, 0x4b, - 0xc5, 0x1b, 0xbb, 0x46, 0xdc, 0x3d, 0x56, 0xc3, 0xfa, 0xdd, 0x6a, 0xc3, 0x5e, 0xfe, 0x6c, 0x67, - 0xd5, 0x5e, 0x5e, 0x4a, 0xd7, 0x60, 0x94, 0x7e, 0xb1, 0x5c, 0x2f, 0x15, 0xc8, 0x34, 0x9c, 0x36, - 0xa0, 0x1b, 0x9b, 0xa5, 0xe2, 0x8d, 0xd7, 0x45, 0x68, 0x36, 0x32, 0x05, 0xb0, 0xb4, 0x5c, 0x5f, - 0x5c, 0xde, 0x58, 0x5a, 0xdd, 0xb8, 0x57, 0x3a, 0x45, 0x26, 0x61, 0xac, 0xaa, 0x7e, 0x16, 0x6e, - 0x7c, 0x00, 0xa7, 0x13, 0xc7, 0x7b, 0x86, 0xa1, 0x0e, 0xc6, 0xa5, 0x53, 0x28, 0x7e, 0xf9, 0x13, - 0x6d, 0xac, 0xfc, 0xa4, 0x5e, 0x2a, 0xdc, 0xa8, 0xc9, 0xbc, 0xbf, 0xda, 0x77, 0x4e, 0xc6, 0x61, - 0x64, 0x69, 0xf9, 0x6e, 0x75, 0x67, 0x6d, 0xbb, 0x74, 0x8a, 0xfd, 0x58, 0xb4, 0x97, 0xab, 0xdb, - 0xcb, 0x4b, 0xa5, 0x02, 0x19, 0x83, 0xa1, 0xfa, 0x76, 0x75, 0x7b, 0xb9, 0x54, 0x24, 0xa3, 0x30, - 0xb8, 0x53, 0x5f, 0xb6, 0x4b, 0x03, 0x0b, 0xbf, 0xfd, 0x7b, 0x05, 0x6e, 0x68, 0x94, 0x2f, 0xb8, - 0xbe, 0xd6, 0x0e, 0x94, 0x62, 0xc9, 0x13, 0x49, 0x4e, 0x73, 0x4f, 0x8f, 0xa8, 0x05, 0xcc, 0xf7, - 0xb8, 0xdc, 0x41, 0x84, 0xeb, 0x85, 0xdb, 0x05, 0x62, 0xa3, 0x33, 0x4c, 0xe2, 0x7c, 0xa5, 0x38, - 0x67, 0x1f, 0x81, 0xe7, 0x2f, 0xf6, 0x3c, 0x96, 0x91, 0x5f, 0x01, 0x4b, 0xe7, 0x99, 0x73, 0x0a, - 0xf9, 0xde, 0xf1, 0x4e, 0x1b, 0xb2, 0xce, 0xd7, 0x8f, 0x87, 0x4e, 0xee, 0xc3, 0x24, 0xd3, 0xcd, - 0x15, 0x1a, 0x39, 0x9f, 0x24, 0xd4, 0x8e, 0x04, 0xf3, 0x17, 0xb2, 0x0b, 0x55, 0x1e, 0xa2, 0x09, - 0xec, 0x08, 0x3f, 0x5c, 0x87, 0x44, 0x86, 0xef, 0x90, 0x10, 0xbe, 0xe2, 0xcf, 0x9f, 0x49, 0x80, - 0x77, 0xef, 0xdc, 0x2e, 0x90, 0x3a, 0xc6, 0xce, 0x33, 0x94, 0x7c, 0x22, 0x9f, 0x14, 0xa6, 0xb5, - 0x7f, 0xde, 0x9a, 0x8a, 0xca, 0x1a, 0x9a, 0x73, 0x3a, 0xd8, 0x00, 0x92, 0xd6, 0x9d, 0xc9, 0xe5, - 0x78, 0x1e, 0x64, 0xab, 0xd5, 0xf3, 0x67, 0x53, 0x17, 0x59, 0xcb, 0x4c, 0x7b, 0x22, 0xcb, 0x30, - 0x25, 0xde, 0xe6, 0x0b, 0x6d, 0x9e, 0xf4, 0x3a, 0x0f, 0xe4, 0xb2, 0xb9, 0x87, 0x72, 0x52, 0x27, - 0x02, 0x32, 0x1f, 0xf7, 0x23, 0x79, 0x4c, 0x98, 0x3f, 0x9f, 0x59, 0x26, 0xfa, 0x77, 0x17, 0xa6, - 0xcc, 0xc3, 0x05, 0x91, 0x03, 0x94, 0x79, 0xe6, 0xc8, 0x6d, 0x50, 0x03, 0xe6, 0xd6, 0x1d, 0x17, - 0xef, 0x4b, 0x84, 0x93, 0x9e, 0xf4, 0x83, 0x23, 0x95, 0x1e, 0x8e, 0x71, 0x75, 0xea, 0xb5, 0xd4, - 0x20, 0xe4, 0xe5, 0x14, 0xc0, 0xcf, 0xa6, 0x2e, 0x75, 0x64, 0xd3, 0x47, 0x91, 0x58, 0x66, 0x26, - 0xe8, 0x2c, 0xb7, 0xd3, 0xf9, 0x3c, 0x4f, 0x69, 0xb2, 0x8e, 0x4a, 0x7a, 0x82, 0xa3, 0x36, 0x27, - 0x4e, 0xcc, 0xae, 0x8c, 0x11, 0x22, 0xb4, 0xf4, 0xfc, 0xa2, 0x30, 0x24, 0x39, 0x82, 0xcb, 0x65, - 0x76, 0xbb, 0x40, 0xbe, 0xc6, 0xaf, 0x3a, 0x93, 0xdd, 0x43, 0x37, 0xda, 0x17, 0xda, 0xcf, 0xf9, - 0x4c, 0x06, 0xe2, 0x43, 0xe9, 0xc1, 0xdd, 0x86, 0x99, 0x2c, 0xe7, 0x6c, 0x25, 0xd0, 0x1e, 0x9e, - 0xdb, 0xb9, 0xb3, 0xc0, 0x66, 0x47, 0x8d, 0x56, 0xfe, 0x20, 0xf5, 0xf0, 0x0d, 0xce, 0xe5, 0xf9, - 0x11, 0x4c, 0xb1, 0x59, 0xf2, 0x80, 0xd2, 0x4e, 0xb5, 0xed, 0x3e, 0xa5, 0x21, 0x91, 0x81, 0x8f, - 0x15, 0x28, 0x8f, 0xf6, 0x7a, 0x81, 0x7c, 0x17, 0xc6, 0x1f, 0x3a, 0x51, 0x73, 0x5f, 0x04, 0x00, - 0x95, 0xf1, 0x41, 0x11, 0x36, 0x2f, 0x7f, 0x61, 0xe1, 0xed, 0x02, 0xf9, 0x01, 0x8c, 0xdc, 0xa3, - 0x11, 0x3e, 0xe9, 0xbe, 0xa2, 0x7c, 0x09, 0xb9, 0x7d, 0x72, 0xd5, 0x53, 0xaf, 0x90, 0x64, 0x83, - 0x93, 0xc6, 0x5c, 0x72, 0x0b, 0x80, 0x2f, 0x08, 0xc8, 0x21, 0x59, 0x3c, 0x9f, 0x6a, 0x36, 0xb9, - 0xc7, 0x94, 0x87, 0x36, 0x8d, 0xe8, 0x71, 0xab, 0xcc, 0x93, 0xd1, 0x1a, 0x4c, 0xa9, 0xd4, 0x4d, - 0x1b, 0x18, 0xa7, 0xc5, 0x4a, 0x30, 0x0b, 0x4f, 0xc0, 0xed, 0x03, 0xf6, 0x55, 0xf0, 0xbc, 0xc5, - 0x18, 0xd0, 0x03, 0x57, 0xd2, 0x39, 0x3d, 0x2a, 0x88, 0xbe, 0x84, 0x4a, 0x21, 0x72, 0x34, 0x8d, + 0x45, 0xed, 0x9f, 0x1f, 0x56, 0x46, 0x97, 0xba, 0x01, 0x0e, 0x8b, 0xcd, 0xca, 0xc9, 0x35, 0x18, + 0x59, 0x6c, 0x77, 0xc3, 0x88, 0x06, 0xe5, 0xc1, 0xf8, 0x23, 0x6d, 0x72, 0x90, 0x2d, 0xcb, 0xc8, + 0x77, 0x61, 0x70, 0x27, 0xa4, 0x41, 0x79, 0x08, 0xe7, 0x7b, 0x52, 0xcc, 0x37, 0x03, 0xed, 0x2e, + 0xd4, 0x46, 0xd9, 0x97, 0xd8, 0x0d, 0x69, 0x60, 0x23, 0x12, 0xb9, 0x09, 0x43, 0x7c, 0xd2, 0x86, + 0x71, 0x93, 0x9a, 0x54, 0xab, 0xa3, 0x4d, 0x77, 0xdf, 0xad, 0x8d, 0x1d, 0x1d, 0x56, 0x86, 0x70, + 0xf2, 0x6c, 0x8e, 0x76, 0x7f, 0x70, 0xb4, 0x50, 0x2a, 0xda, 0xa3, 0x8c, 0x96, 0x7d, 0x16, 0xd6, + 0x77, 0x61, 0x5c, 0xeb, 0x3e, 0xb9, 0x00, 0x83, 0xec, 0x7f, 0xdc, 0x44, 0x26, 0x78, 0x65, 0xec, + 0xe0, 0xb0, 0x11, 0x6a, 0xfd, 0xc3, 0x69, 0x28, 0x31, 0x4a, 0x63, 0xe7, 0xb9, 0xa9, 0x0f, 0x15, + 0xa7, 0x2b, 0x99, 0x43, 0x55, 0x2e, 0xe8, 0x83, 0x75, 0x1d, 0x54, 0xed, 0x62, 0x13, 0x9a, 0x38, + 0x3a, 0xac, 0x8c, 0x76, 0x05, 0x2c, 0x6e, 0x1b, 0xa9, 0xc3, 0xc8, 0xf2, 0x37, 0x1d, 0x37, 0xa0, + 0x21, 0x0e, 0xed, 0xf8, 0xc2, 0xfc, 0x4d, 0x7e, 0x5c, 0xde, 0x94, 0xc7, 0xe5, 0xcd, 0x6d, 0x79, + 0x5c, 0xd6, 0x2e, 0x8a, 0xcd, 0xf8, 0x0c, 0xe5, 0x24, 0xf1, 0xfa, 0xf8, 0xed, 0xbf, 0xa8, 0x14, + 0x6c, 0xc9, 0x89, 0xbc, 0x09, 0xc3, 0x77, 0xfd, 0xe0, 0xc0, 0x89, 0xc4, 0x1c, 0xcc, 0x1c, 0x1d, + 0x56, 0x4a, 0x8f, 0x11, 0xa2, 0x2d, 0x29, 0x81, 0x43, 0xee, 0xc2, 0x94, 0xed, 0x77, 0x23, 0xba, + 0xed, 0xcb, 0x99, 0x1b, 0x42, 0xaa, 0x4b, 0x47, 0x87, 0x95, 0xf9, 0x80, 0x95, 0x34, 0x22, 0xbf, + 0x21, 0xa6, 0x50, 0xa3, 0x4f, 0x50, 0x91, 0x65, 0x98, 0xaa, 0xe2, 0xee, 0x2d, 0x46, 0x8d, 0xcf, + 0xd7, 0x58, 0xed, 0xe2, 0xd1, 0x61, 0xe5, 0x9c, 0x83, 0x25, 0x8d, 0x40, 0x14, 0xe9, 0x6c, 0x4c, + 0x22, 0xb2, 0x01, 0x67, 0x1e, 0x74, 0x1f, 0xd1, 0xc0, 0xa3, 0x11, 0x0d, 0x65, 0x8b, 0x46, 0xb0, + 0x45, 0x97, 0x8f, 0x0e, 0x2b, 0x17, 0x9e, 0xa8, 0xc2, 0x8c, 0x36, 0xa5, 0x49, 0x09, 0x85, 0xd3, + 0xa2, 0xa1, 0x4b, 0x4e, 0xe4, 0x3c, 0x72, 0x42, 0x8a, 0x9b, 0xd2, 0xf8, 0xc2, 0x59, 0x3e, 0xc4, + 0x37, 0x13, 0xa5, 0xb5, 0xab, 0x62, 0x94, 0xcf, 0xab, 0xbe, 0xb7, 0x44, 0x91, 0x56, 0x51, 0x92, + 0x27, 0xdb, 0x9b, 0xd5, 0xb9, 0x33, 0x86, 0xad, 0xc5, 0xbd, 0x59, 0x9d, 0x3b, 0xfa, 0xae, 0xa5, + 0x4e, 0xa0, 0x35, 0x18, 0xda, 0x61, 0xa7, 0x33, 0xee, 0x59, 0x53, 0x0b, 0x57, 0x44, 0x8b, 0x92, + 0xeb, 0xef, 0x26, 0xfb, 0x81, 0x88, 0xf8, 0xe5, 0x9d, 0xc6, 0x13, 0x5d, 0x3f, 0x8b, 0xb1, 0x8c, + 0x7c, 0x06, 0x20, 0x5a, 0x55, 0xed, 0x74, 0xca, 0xe3, 0xd8, 0xc9, 0x33, 0x66, 0x27, 0xab, 0x9d, + 0x4e, 0xed, 0x92, 0xe8, 0xdf, 0x59, 0xd5, 0x3f, 0xa7, 0xd3, 0xd1, 0xb8, 0x69, 0x4c, 0xc8, 0x27, + 0x30, 0x81, 0x5b, 0x9a, 0x9c, 0xd1, 0x09, 0x9c, 0xd1, 0xf3, 0x47, 0x87, 0x95, 0x39, 0xdc, 0xad, + 0x32, 0xe6, 0xd3, 0x20, 0x20, 0xbf, 0x06, 0xb3, 0x82, 0xdd, 0x43, 0xd7, 0x6b, 0xf9, 0xcf, 0xc2, + 0x25, 0x1a, 0x3e, 0x89, 0xfc, 0x0e, 0x6e, 0x7f, 0xe3, 0x0b, 0x17, 0xcc, 0xe6, 0x99, 0x38, 0xb5, + 0x1b, 0xa2, 0xa5, 0x96, 0x6a, 0xe9, 0x33, 0x8e, 0xd0, 0x68, 0x71, 0x0c, 0x7d, 0x83, 0xcc, 0x64, + 0x41, 0x56, 0xe1, 0xf4, 0x4e, 0x48, 0x8d, 0x3e, 0x4c, 0xe1, 0xf9, 0x50, 0x61, 0x33, 0xdc, 0x0d, + 0x69, 0x23, 0xaf, 0x1f, 0x49, 0x3a, 0x62, 0x03, 0x59, 0x0a, 0xfc, 0x4e, 0x62, 0x8d, 0x9f, 0xc6, + 0x11, 0xb1, 0x8e, 0x0e, 0x2b, 0x97, 0x5a, 0x81, 0xdf, 0x69, 0xe4, 0x2f, 0xf4, 0x0c, 0x6a, 0xf2, + 0x43, 0x38, 0xbb, 0xe8, 0x7b, 0x1e, 0x6d, 0xb2, 0x1d, 0x74, 0xc9, 0x75, 0xf6, 0x3c, 0x3f, 0x8c, + 0xdc, 0xe6, 0xea, 0x52, 0xb9, 0x14, 0x1f, 0x0f, 0x4d, 0x85, 0xd1, 0x68, 0x29, 0x14, 0xf3, 0x78, + 0xc8, 0xe1, 0x42, 0xbe, 0x82, 0x49, 0x51, 0x17, 0x0d, 0x70, 0x69, 0x9e, 0xe9, 0xbd, 0xd0, 0x14, + 0x32, 0x3f, 0xe8, 0x03, 0xf9, 0x93, 0x8b, 0x4e, 0x26, 0x2f, 0xf2, 0x35, 0x8c, 0xaf, 0xdf, 0xad, + 0xda, 0x34, 0xec, 0xf8, 0x5e, 0x48, 0xcb, 0x04, 0x67, 0xf4, 0x92, 0x60, 0xbd, 0x7e, 0xb7, 0x5a, + 0xed, 0x46, 0xfb, 0xd4, 0x8b, 0xdc, 0xa6, 0x13, 0x51, 0x89, 0x55, 0x9b, 0x67, 0x2b, 0xef, 0xe0, + 0xb1, 0xd3, 0x08, 0x04, 0x44, 0xeb, 0x85, 0xce, 0x8e, 0xcc, 0xc3, 0x68, 0xbd, 0xbe, 0xb2, 0xe6, + 0xef, 0xb9, 0x5e, 0x79, 0x9a, 0x0d, 0x86, 0xad, 0x7e, 0x93, 0xc7, 0x30, 0xab, 0xe9, 0x06, 0x0d, + 0xf6, 0x3f, 0x3d, 0xa0, 0x5e, 0x54, 0x9e, 0xc1, 0x36, 0x7c, 0x4f, 0x29, 0x37, 0x37, 0x75, 0x15, + 0xe2, 0xe9, 0x9d, 0x9b, 0xd5, 0xf8, 0x67, 0x5d, 0x12, 0xd5, 0x8a, 0xe5, 0x82, 0x3d, 0xe3, 0x64, + 0x94, 0x90, 0x6d, 0x18, 0xd9, 0xea, 0x06, 0x1d, 0x3f, 0xa4, 0xe5, 0x59, 0x1c, 0xb8, 0xab, 0xbd, + 0xbe, 0x50, 0x81, 0x5a, 0x9b, 0x65, 0x5b, 0x74, 0x87, 0xff, 0xd0, 0x7a, 0x27, 0x59, 0x91, 0x4f, + 0x61, 0xa2, 0x5e, 0x5f, 0x89, 0x0f, 0x94, 0xb3, 0x78, 0xa0, 0x5c, 0x38, 0x3a, 0xac, 0x94, 0x99, + 0x48, 0x15, 0x1f, 0x2a, 0xfa, 0x57, 0xa5, 0x53, 0x30, 0x0e, 0xdb, 0x6b, 0xf5, 0x98, 0xc3, 0x5c, + 0xcc, 0x81, 0x09, 0x73, 0xd9, 0x1c, 0x74, 0x0a, 0xf2, 0xcf, 0x0a, 0x70, 0x59, 0x67, 0x99, 0x35, + 0x30, 0xe5, 0x73, 0x2f, 0x32, 0x9a, 0x0b, 0x47, 0x87, 0x95, 0x9b, 0x66, 0x3f, 0x1a, 0x99, 0x93, + 0xa5, 0xb5, 0xad, 0x6f, 0x53, 0xb0, 0xbd, 0x7a, 0x07, 0x32, 0xdb, 0x3b, 0xff, 0xc2, 0xed, 0x35, + 0x47, 0xad, 0x7f, 0x7b, 0xfb, 0x35, 0xc5, 0xfa, 0x1c, 0xc6, 0xd4, 0xa6, 0x4d, 0x46, 0x60, 0xa0, + 0xda, 0x6e, 0x97, 0x4e, 0xb1, 0x3f, 0xea, 0xf5, 0x95, 0x52, 0x81, 0x4c, 0x01, 0xc4, 0x27, 0x55, + 0xa9, 0x48, 0x26, 0x60, 0x54, 0x9e, 0x24, 0xa5, 0x01, 0xc4, 0xef, 0x74, 0x4a, 0x83, 0x84, 0xc0, + 0x94, 0xb9, 0x9f, 0x95, 0x86, 0xac, 0xdf, 0x29, 0xc0, 0x98, 0xfa, 0x0e, 0xc9, 0x69, 0x18, 0xdf, + 0xd9, 0xa8, 0x6f, 0x2d, 0x2f, 0xae, 0xde, 0x5d, 0x5d, 0x5e, 0x2a, 0x9d, 0x22, 0x17, 0xe1, 0xdc, + 0x76, 0x7d, 0xa5, 0xb1, 0x54, 0x6b, 0xac, 0x6d, 0x2e, 0x56, 0xd7, 0x1a, 0x5b, 0xf6, 0xe6, 0xe7, + 0x5f, 0x34, 0xb6, 0x77, 0x36, 0x36, 0x96, 0xd7, 0x4a, 0x05, 0x52, 0x86, 0x19, 0x56, 0xfc, 0x60, + 0xa7, 0xb6, 0xac, 0x23, 0x94, 0x8a, 0xe4, 0x0a, 0x5c, 0xcc, 0x2a, 0x69, 0xac, 0x2c, 0x57, 0x97, + 0xd6, 0x96, 0xeb, 0xf5, 0xd2, 0x00, 0x99, 0x83, 0x69, 0x86, 0x52, 0xdd, 0xda, 0x32, 0x68, 0x07, + 0xad, 0x36, 0x8c, 0x6b, 0x1f, 0x00, 0xb9, 0x00, 0xe5, 0xc5, 0x65, 0x7b, 0xbb, 0xb1, 0xb5, 0x63, + 0x6f, 0x6d, 0xd6, 0x97, 0x1b, 0x66, 0x0b, 0x93, 0xa5, 0x6b, 0x9b, 0xf7, 0x56, 0x37, 0x1a, 0x0c, + 0x54, 0x2f, 0x15, 0x58, 0x33, 0x8c, 0xd2, 0xfa, 0xea, 0xc6, 0xbd, 0xb5, 0xe5, 0xc6, 0x4e, 0x7d, + 0x59, 0xa0, 0x14, 0xad, 0xdf, 0x28, 0xa6, 0x8e, 0x74, 0xb2, 0x00, 0xe3, 0x75, 0x6e, 0xaf, 0xc0, + 0x6d, 0x8e, 0x2b, 0x88, 0x4c, 0x46, 0x9b, 0x10, 0x66, 0x0c, 0xbe, 0x83, 0xe9, 0x48, 0x4c, 0x4a, + 0xdb, 0x62, 0x5f, 0x73, 0xd3, 0x6f, 0xeb, 0x52, 0x5a, 0x47, 0xc0, 0x6c, 0x55, 0x4a, 0x16, 0x34, + 0x79, 0x8e, 0x6b, 0x8b, 0xa8, 0x91, 0x48, 0x79, 0x4e, 0x3f, 0xdb, 0x95, 0x64, 0xb7, 0x10, 0x4f, + 0xa9, 0x10, 0xc3, 0x90, 0x26, 0x43, 0x96, 0x50, 0x78, 0xe4, 0x0d, 0x29, 0xe9, 0x72, 0xed, 0x0e, + 0x0f, 0xfb, 0x84, 0x5e, 0x22, 0x84, 0x5c, 0xab, 0x9b, 0x73, 0xb0, 0x92, 0x0f, 0x93, 0x6b, 0x46, + 0x0c, 0x06, 0x32, 0x4b, 0x9c, 0x9f, 0x76, 0x02, 0x95, 0x54, 0x60, 0x88, 0xef, 0xb8, 0x7c, 0x3c, + 0x50, 0xb6, 0x6e, 0x33, 0x80, 0xcd, 0xe1, 0xd6, 0x9f, 0x0c, 0xe8, 0x42, 0x06, 0x93, 0xa5, 0xb5, + 0xf1, 0x46, 0x59, 0x1a, 0xc7, 0x19, 0xa1, 0x4c, 0x15, 0xe4, 0x5f, 0x09, 0xaa, 0x82, 0x03, 0xb1, + 0x2a, 0x28, 0x3e, 0x35, 0xae, 0x0a, 0xc6, 0x28, 0x6c, 0x16, 0x85, 0xd8, 0x86, 0x5c, 0x07, 0xe3, + 0x59, 0x14, 0xa2, 0x9e, 0x98, 0x45, 0x0d, 0x89, 0x7c, 0x00, 0x50, 0x7d, 0x58, 0x47, 0x9d, 0xc7, + 0xde, 0x10, 0xa2, 0x2b, 0x1e, 0x32, 0xce, 0xb3, 0x50, 0xa8, 0x54, 0x81, 0xae, 0x33, 0x6a, 0xd8, + 0xa4, 0x06, 0x93, 0xd5, 0x9f, 0x74, 0x03, 0xba, 0xda, 0x62, 0xe7, 0x54, 0xc4, 0x95, 0xe3, 0x31, + 0xbe, 0x91, 0x3a, 0xac, 0xa0, 0xe1, 0x8a, 0x12, 0x8d, 0x81, 0x49, 0x42, 0x36, 0xe1, 0xcc, 0xbd, + 0xc5, 0x2d, 0xb1, 0xae, 0xaa, 0xcd, 0xa6, 0xdf, 0xf5, 0x22, 0x21, 0xaf, 0x5e, 0x39, 0x3a, 0xac, + 0x5c, 0xdc, 0x6b, 0x76, 0x1a, 0x72, 0x0d, 0x3a, 0xbc, 0x58, 0x17, 0x58, 0x53, 0xb4, 0xe4, 0x2a, + 0x0c, 0xec, 0xd8, 0xab, 0x42, 0x73, 0x3e, 0x73, 0x74, 0x58, 0x99, 0xec, 0x06, 0xae, 0x46, 0xc2, + 0x4a, 0xc9, 0xfb, 0x00, 0xdb, 0x4e, 0xb0, 0x47, 0xa3, 0x2d, 0x3f, 0x88, 0x50, 0xe0, 0x9c, 0xac, + 0x9d, 0x3b, 0x3a, 0xac, 0xcc, 0x46, 0x08, 0x6d, 0xb0, 0xed, 0x4f, 0xef, 0x74, 0x8c, 0x7c, 0x7f, + 0x70, 0xb4, 0x58, 0x1a, 0xb0, 0xc7, 0xea, 0x34, 0x0c, 0xb9, 0x7e, 0xd8, 0x86, 0xa9, 0x7b, 0x34, + 0x62, 0x0b, 0x57, 0xea, 0x3b, 0xbd, 0xa7, 0xf5, 0x23, 0x18, 0x7f, 0xe8, 0x46, 0xfb, 0x75, 0xda, + 0x0c, 0x68, 0x24, 0x6d, 0x3d, 0x38, 0xe4, 0xcf, 0xdc, 0x68, 0xbf, 0x11, 0x72, 0xb8, 0x7e, 0xae, + 0x6b, 0xe8, 0xd6, 0x32, 0x9c, 0x16, 0xb5, 0x29, 0xf5, 0x6a, 0xc1, 0x64, 0x58, 0x40, 0x86, 0x38, + 0xed, 0x3a, 0x43, 0x93, 0xcd, 0x3f, 0x2f, 0xc2, 0xec, 0xe2, 0xbe, 0xe3, 0xed, 0xd1, 0x2d, 0x27, + 0x0c, 0x9f, 0xf9, 0x41, 0x4b, 0x6b, 0x3c, 0xea, 0x96, 0xa9, 0xc6, 0xa3, 0x32, 0xb9, 0x00, 0xe3, + 0x9b, 0xed, 0x96, 0xa4, 0x11, 0x7a, 0x2f, 0xd6, 0xe5, 0xb7, 0x5b, 0x8d, 0x8e, 0xe4, 0xa5, 0x23, + 0x31, 0x9a, 0x0d, 0xfa, 0x4c, 0xd1, 0x0c, 0xc4, 0x34, 0x1e, 0x7d, 0xa6, 0xd1, 0x68, 0x48, 0x64, + 0x19, 0xce, 0xd4, 0x69, 0xd3, 0xf7, 0x5a, 0x77, 0x9d, 0x66, 0xe4, 0x07, 0xdb, 0xfe, 0x13, 0xea, + 0x89, 0x05, 0x8d, 0x8a, 0x41, 0x88, 0x85, 0x8d, 0xc7, 0x58, 0xda, 0x88, 0x58, 0xb1, 0x9d, 0xa6, + 0x20, 0x9b, 0x30, 0xfa, 0x50, 0x58, 0x0c, 0x85, 0xb2, 0x7c, 0xed, 0xa6, 0x32, 0x21, 0x2e, 0x06, + 0x14, 0x57, 0xa1, 0xd3, 0x56, 0xea, 0xbe, 0x92, 0xb3, 0x70, 0x2b, 0x93, 0x98, 0xb6, 0x62, 0x62, + 0xed, 0xc0, 0xe4, 0x56, 0xbb, 0xbb, 0xe7, 0x7a, 0x6c, 0xd3, 0xa9, 0xd3, 0x1f, 0x93, 0x25, 0x80, + 0x18, 0x20, 0xec, 0x80, 0xd3, 0x42, 0xc5, 0x8e, 0x0b, 0x76, 0xdf, 0x12, 0x5f, 0x2e, 0x42, 0x50, + 0x23, 0xb2, 0x35, 0x3a, 0xeb, 0x7f, 0x0c, 0x00, 0x11, 0x13, 0x80, 0x87, 0x60, 0x9d, 0x46, 0xec, + 0x78, 0x3a, 0x0b, 0x45, 0x65, 0xae, 0x1b, 0x3e, 0x3a, 0xac, 0x14, 0xdd, 0x96, 0x5d, 0x5c, 0x5d, + 0x22, 0x6f, 0xc3, 0x10, 0xa2, 0xe1, 0xf8, 0x4f, 0xa9, 0xfa, 0x74, 0x0e, 0x7c, 0xf3, 0xc1, 0xd3, + 0xd7, 0xe6, 0xc8, 0xe4, 0x1d, 0x18, 0x5b, 0xa2, 0x6d, 0xba, 0xe7, 0x44, 0xbe, 0xdc, 0x4e, 0xb8, + 0x01, 0x4c, 0x02, 0xb5, 0x35, 0x17, 0x63, 0x32, 0x75, 0xd8, 0xa6, 0x4e, 0xe8, 0x7b, 0xba, 0x3a, + 0x1c, 0x20, 0x44, 0x57, 0x87, 0x39, 0x0e, 0xf9, 0x3b, 0x05, 0x18, 0xaf, 0x7a, 0x9e, 0x30, 0x2c, + 0x85, 0x62, 0xd4, 0x67, 0x6f, 0x2a, 0x4b, 0xec, 0x9a, 0xf3, 0x88, 0xb6, 0x77, 0x9d, 0x76, 0x97, + 0x86, 0xb5, 0xaf, 0x99, 0x86, 0xf2, 0xef, 0x0e, 0x2b, 0x1f, 0x9e, 0xc0, 0x54, 0x14, 0xdb, 0x74, + 0xb7, 0x03, 0xc7, 0x8d, 0x42, 0xf6, 0xd5, 0x3a, 0x71, 0x85, 0xfa, 0x77, 0xa3, 0xb5, 0x23, 0x3e, + 0x1b, 0x86, 0xfb, 0x9d, 0x0d, 0xe4, 0x00, 0x4e, 0x57, 0xc3, 0xb0, 0x7b, 0x40, 0xeb, 0x91, 0x13, + 0x44, 0xdb, 0xee, 0x01, 0xc5, 0x0d, 0xa9, 0xb7, 0x71, 0xe1, 0x3b, 0x3f, 0x3d, 0xac, 0x14, 0x98, + 0x52, 0xe4, 0x20, 0x29, 0x93, 0x7b, 0x82, 0xa8, 0x11, 0xb9, 0xfa, 0xf1, 0x86, 0x66, 0x86, 0x24, + 0x6f, 0xeb, 0xaa, 0x12, 0x48, 0x56, 0x97, 0xf2, 0x66, 0xdc, 0x5a, 0x84, 0x0b, 0xf7, 0x68, 0x64, + 0xd3, 0x90, 0x46, 0xf2, 0x1b, 0xc1, 0x15, 0x1e, 0x1b, 0x77, 0x47, 0xf0, 0xb7, 0x22, 0xc6, 0xe9, + 0xe7, 0xdf, 0x85, 0x2c, 0xb1, 0xfe, 0x8f, 0x02, 0x54, 0x16, 0x03, 0xca, 0xf5, 0x89, 0x1c, 0x46, + 0xbd, 0xf7, 0xae, 0x0b, 0x30, 0xb8, 0xfd, 0xbc, 0x23, 0xad, 0x32, 0x58, 0xca, 0x26, 0xc5, 0x46, + 0xe8, 0x31, 0x8d, 0x5c, 0xd6, 0x63, 0x98, 0xb5, 0xa9, 0x47, 0x9f, 0x39, 0x8f, 0xda, 0xd4, 0xb0, + 0x13, 0x55, 0x60, 0x88, 0x7f, 0xe8, 0xa9, 0x2e, 0x70, 0xf8, 0xc9, 0x6c, 0x6e, 0xd6, 0x24, 0x8c, + 0x6f, 0xb9, 0xde, 0x9e, 0xe0, 0x6e, 0xfd, 0xe5, 0x20, 0x4c, 0xf0, 0xdf, 0x42, 0x45, 0x4a, 0x1c, + 0x97, 0x85, 0xe3, 0x1c, 0x97, 0xef, 0xc1, 0x24, 0x3b, 0x6f, 0x68, 0xb0, 0x4b, 0x03, 0xb6, 0xff, + 0x8b, 0x91, 0x40, 0x75, 0x2f, 0xc4, 0x82, 0xc6, 0x53, 0x5e, 0x62, 0x9b, 0x88, 0x64, 0x0d, 0xa6, + 0x38, 0xe0, 0x2e, 0x75, 0xa2, 0x6e, 0x6c, 0xb1, 0x3a, 0x2d, 0x74, 0x22, 0x09, 0xe6, 0x4b, 0x53, + 0xf0, 0x7a, 0x2c, 0x80, 0x76, 0x82, 0x96, 0x7c, 0x02, 0xa7, 0xb7, 0x02, 0xff, 0x9b, 0xe7, 0x9a, + 0x80, 0xc0, 0xbf, 0x4e, 0xae, 0x3d, 0xb1, 0xa2, 0x86, 0x2e, 0x26, 0x24, 0xb1, 0xc9, 0x1b, 0x30, + 0xba, 0x1a, 0xd6, 0xfc, 0xc0, 0xf5, 0xf6, 0xf0, 0x1b, 0x1d, 0xe5, 0x86, 0x7e, 0x37, 0x6c, 0x3c, + 0x42, 0xa0, 0xad, 0x8a, 0x13, 0x26, 0xe9, 0x91, 0xfe, 0x26, 0xe9, 0xdb, 0x00, 0x6b, 0xbe, 0xd3, + 0xaa, 0xb6, 0xdb, 0x8b, 0xd5, 0x10, 0x4f, 0x62, 0x71, 0x1e, 0xb5, 0x7d, 0xa7, 0xd5, 0x70, 0xda, + 0xed, 0x46, 0xd3, 0x09, 0x6d, 0x0d, 0x87, 0x7c, 0x09, 0xe7, 0x42, 0x77, 0xcf, 0xc3, 0xce, 0x35, + 0x9c, 0xf6, 0x9e, 0x1f, 0xb8, 0xd1, 0xfe, 0x41, 0x23, 0xec, 0xba, 0x11, 0xb7, 0x07, 0x4d, 0x2d, + 0x5c, 0x12, 0x9b, 0x5c, 0x5d, 0xe2, 0x55, 0x25, 0x5a, 0x9d, 0x61, 0xd9, 0x73, 0x61, 0x76, 0x01, + 0x79, 0x08, 0x93, 0x6b, 0x6e, 0x93, 0x7a, 0x21, 0x45, 0x03, 0xdf, 0x73, 0xb4, 0x16, 0xf5, 0xfe, + 0x98, 0xd9, 0x20, 0x4e, 0xb6, 0x75, 0x22, 0xfc, 0x74, 0x4d, 0x3e, 0xf7, 0x07, 0x47, 0x87, 0x4b, + 0x23, 0xf6, 0x69, 0x01, 0x7c, 0xe8, 0x04, 0x9e, 0xeb, 0xed, 0x85, 0xd6, 0xff, 0x4b, 0x60, 0x54, + 0xcd, 0xd3, 0x4d, 0x5d, 0x53, 0x11, 0x47, 0x33, 0x2e, 0xd9, 0xd8, 0x0e, 0x67, 0x6b, 0x18, 0xe4, + 0x1c, 0xea, 0x2e, 0x42, 0x28, 0x18, 0x61, 0x9f, 0x90, 0xd3, 0xe9, 0xd8, 0x0c, 0xc6, 0xb6, 0x86, + 0xa5, 0x1a, 0x2e, 0x9a, 0x51, 0xbe, 0x35, 0xb4, 0x1e, 0xd9, 0xc5, 0xa5, 0x1a, 0xfb, 0x26, 0x37, + 0x57, 0x97, 0x16, 0x71, 0xfe, 0x47, 0xf9, 0x37, 0xe9, 0xbb, 0xad, 0xa6, 0x8d, 0x50, 0x56, 0x5a, + 0xaf, 0xae, 0xaf, 0x89, 0x39, 0xc6, 0xd2, 0xd0, 0x39, 0x68, 0xdb, 0x08, 0x65, 0xd2, 0x2e, 0x37, + 0xa9, 0x2c, 0xfa, 0x5e, 0x14, 0xf8, 0xed, 0x10, 0x45, 0xb8, 0x51, 0xbe, 0x06, 0x85, 0x2d, 0xa6, + 0x29, 0x8a, 0xec, 0x04, 0x2a, 0x79, 0x08, 0x73, 0xd5, 0xd6, 0x53, 0xc7, 0x6b, 0xd2, 0x16, 0x2f, + 0x79, 0xe8, 0x07, 0x4f, 0x1e, 0xb7, 0xfd, 0x67, 0x21, 0x2e, 0x92, 0x51, 0x61, 0xba, 0x14, 0x28, + 0xd2, 0xb4, 0xf3, 0x4c, 0x22, 0xd9, 0x79, 0xd4, 0x6c, 0x1f, 0x58, 0x6c, 0xfb, 0xdd, 0x96, 0x58, + 0x3a, 0xb8, 0x0f, 0x34, 0x19, 0xc0, 0xe6, 0x70, 0x36, 0x4a, 0x2b, 0xf5, 0x75, 0x5c, 0x18, 0x62, + 0x94, 0xf6, 0xc3, 0x03, 0x9b, 0xc1, 0xc8, 0x35, 0x18, 0x91, 0x82, 0x3b, 0xbf, 0xc9, 0x40, 0x0b, + 0xba, 0x14, 0xd8, 0x65, 0x19, 0xfb, 0x8e, 0x6d, 0xda, 0xf4, 0x9f, 0xd2, 0xe0, 0xf9, 0xa2, 0xdf, + 0xa2, 0xd2, 0xac, 0x25, 0xcc, 0x36, 0xbc, 0xa0, 0xd1, 0x64, 0x25, 0xb6, 0x89, 0xc8, 0x2a, 0xe0, + 0x07, 0x77, 0x58, 0x3e, 0x1d, 0x57, 0xc0, 0x0f, 0xf6, 0xd0, 0x96, 0x65, 0x64, 0x09, 0xce, 0x54, + 0xbb, 0x91, 0x7f, 0xe0, 0x44, 0x6e, 0x73, 0xa7, 0xb3, 0x17, 0x38, 0xac, 0x92, 0x12, 0x12, 0xa0, + 0x22, 0xe3, 0xc8, 0xc2, 0x46, 0x57, 0x94, 0xda, 0x69, 0x02, 0xf2, 0x2e, 0x4c, 0xac, 0x86, 0xdc, + 0x74, 0xe9, 0x84, 0xb4, 0x85, 0xf6, 0x27, 0xd1, 0x4a, 0x37, 0x6c, 0xa0, 0x21, 0xb3, 0xc1, 0x54, + 0x9f, 0x96, 0x6d, 0xe0, 0x11, 0x0b, 0x86, 0xab, 0x61, 0xe8, 0x86, 0x11, 0x9a, 0x95, 0x46, 0x6b, + 0x70, 0x74, 0x58, 0x19, 0x76, 0x10, 0x62, 0x8b, 0x12, 0xf2, 0x10, 0xc6, 0x97, 0x28, 0x93, 0x9c, + 0xb7, 0x83, 0x6e, 0x18, 0xa1, 0x91, 0x68, 0x7c, 0xe1, 0x9c, 0xd8, 0x8d, 0xb4, 0x12, 0xb1, 0x96, + 0xb9, 0x88, 0xda, 0x42, 0x78, 0x23, 0x62, 0x05, 0xfa, 0x51, 0xab, 0xe1, 0x33, 0xb5, 0x40, 0xd0, + 0xac, 0xb8, 0x2d, 0xb6, 0xbf, 0xcc, 0x60, 0x1b, 0x50, 0x2d, 0x10, 0x1b, 0x5a, 0x63, 0x1f, 0x4b, + 0x74, 0xb5, 0xc0, 0x20, 0x21, 0xcd, 0x94, 0x35, 0x7c, 0xd6, 0xb0, 0x78, 0x9a, 0x85, 0xb2, 0x89, + 0x27, 0xb4, 0x95, 0x7f, 0x04, 0xe3, 0x8b, 0xdd, 0x30, 0xf2, 0x0f, 0xb6, 0xf7, 0xe9, 0x01, 0x45, + 0x43, 0x92, 0x50, 0x7e, 0x9a, 0x08, 0x6e, 0x44, 0x0c, 0xae, 0x77, 0x53, 0x43, 0x27, 0x9f, 0x01, + 0x91, 0x5a, 0xcc, 0x3d, 0xb6, 0x3e, 0x3c, 0xb6, 0x96, 0xd1, 0x96, 0x34, 0xca, 0x55, 0x17, 0xa9, + 0xfc, 0x34, 0xf6, 0x54, 0xb1, 0x6e, 0xcf, 0x4c, 0x13, 0xb3, 0x06, 0xf1, 0x26, 0xde, 0x0b, 0x9c, + 0xce, 0x7e, 0xb9, 0x1c, 0xab, 0x06, 0xa2, 0x53, 0x7b, 0x0c, 0x6e, 0x88, 0x38, 0x31, 0x3a, 0xa9, + 0x03, 0xf0, 0x9f, 0x6b, 0x6c, 0xe2, 0xb9, 0xf5, 0xa9, 0x6c, 0x8c, 0x17, 0x2b, 0x90, 0x63, 0x85, + 0xea, 0x8e, 0x60, 0xdb, 0x76, 0x8d, 0xd9, 0xd4, 0xd8, 0x90, 0x27, 0x50, 0xe2, 0xbf, 0xd6, 0x7d, + 0xcf, 0x8d, 0xf8, 0x79, 0x31, 0x6f, 0x98, 0x2a, 0x93, 0xc5, 0xb2, 0x02, 0x34, 0x11, 0x8b, 0x0a, + 0x0e, 0x54, 0xa9, 0x56, 0x4d, 0x8a, 0x31, 0xd9, 0x82, 0xf1, 0xad, 0xc0, 0x6f, 0x75, 0x9b, 0x11, + 0x4a, 0x19, 0xe7, 0x71, 0xe3, 0x27, 0xa2, 0x1e, 0xad, 0x84, 0x8f, 0x49, 0x87, 0x03, 0x1a, 0xec, + 0x5c, 0xd0, 0xc7, 0x44, 0x43, 0x24, 0x35, 0x18, 0xde, 0xf2, 0xdb, 0x6e, 0xf3, 0x79, 0xf9, 0x02, + 0x36, 0x7a, 0x46, 0x32, 0x43, 0xa0, 0x6c, 0x2a, 0x8a, 0xb4, 0x1d, 0x04, 0xe9, 0x22, 0x2d, 0x47, + 0x22, 0x55, 0x98, 0xfc, 0x8c, 0x2d, 0x18, 0xd7, 0xf7, 0x3c, 0xc7, 0x0d, 0x68, 0xf9, 0x22, 0xce, + 0x0b, 0x9a, 0xf1, 0x7f, 0xac, 0x17, 0xe8, 0xcb, 0xd9, 0xa0, 0x20, 0xab, 0x70, 0x7a, 0x35, 0xac, + 0x47, 0x81, 0xdb, 0xa1, 0xeb, 0x8e, 0xe7, 0xec, 0xd1, 0x56, 0xf9, 0x52, 0x6c, 0x47, 0x77, 0xc3, + 0x46, 0x88, 0x65, 0x8d, 0x03, 0x5e, 0xa8, 0xdb, 0xd1, 0x13, 0x74, 0xe4, 0x73, 0x98, 0x59, 0xfe, + 0x26, 0x62, 0x2b, 0xa6, 0x5d, 0xed, 0xb6, 0xdc, 0xa8, 0x1e, 0xf9, 0x81, 0xb3, 0x47, 0xcb, 0x15, + 0xe4, 0xf7, 0xda, 0xd1, 0x61, 0xe5, 0x32, 0x15, 0xe5, 0x0d, 0x87, 0x21, 0x34, 0x42, 0x8e, 0xa1, + 0xdf, 0x8f, 0x67, 0x71, 0x60, 0xa3, 0x5f, 0xef, 0x76, 0x98, 0xb4, 0x8d, 0xa3, 0x7f, 0xd9, 0x18, + 0x7d, 0xad, 0x84, 0x8f, 0x7e, 0xc8, 0x01, 0xa9, 0xd1, 0xd7, 0x10, 0x89, 0x0d, 0xe4, 0xbe, 0xef, + 0x7a, 0xd5, 0x66, 0xe4, 0x3e, 0xa5, 0x42, 0x63, 0x0e, 0xcb, 0x57, 0xb0, 0xa5, 0x68, 0xf3, 0xff, + 0x65, 0xdf, 0xf5, 0x1a, 0x0e, 0x16, 0x37, 0x42, 0x51, 0xae, 0x7f, 0x23, 0x69, 0x6a, 0xf2, 0x43, + 0x38, 0xbb, 0xee, 0x3f, 0x72, 0xdb, 0x94, 0x6f, 0x39, 0x7c, 0x58, 0xd0, 0x7e, 0x69, 0x21, 0x5f, + 0xb4, 0xf9, 0x1f, 0x20, 0x46, 0x43, 0xec, 0x56, 0x07, 0x0a, 0x47, 0xb7, 0xf9, 0x67, 0x73, 0x21, + 0xcb, 0x30, 0x81, 0xdf, 0x65, 0x1b, 0x7f, 0x86, 0xe5, 0xab, 0xa8, 0xd2, 0x5d, 0x49, 0x48, 0x69, + 0x37, 0x97, 0x35, 0x9c, 0x65, 0x2f, 0x0a, 0x9e, 0xdb, 0x06, 0x19, 0xf9, 0x18, 0xe6, 0x93, 0xcb, + 0x7b, 0xd1, 0xf7, 0x1e, 0xbb, 0x7b, 0xdd, 0x80, 0xb6, 0xca, 0xaf, 0xb1, 0xa6, 0xda, 0x3d, 0x30, + 0xc8, 0x57, 0x30, 0x8b, 0x67, 0x5d, 0xd5, 0xf3, 0xbd, 0xe7, 0x07, 0xee, 0x4f, 0x50, 0x7e, 0x66, + 0x62, 0xef, 0x35, 0x14, 0x7b, 0xaf, 0x1d, 0x1d, 0x56, 0xae, 0xe0, 0x99, 0xd8, 0x70, 0x74, 0x8c, + 0x84, 0xd5, 0x3a, 0x9b, 0xc7, 0xfc, 0x43, 0x38, 0x93, 0x6a, 0x3f, 0x29, 0xc1, 0xc0, 0x13, 0x71, + 0x3f, 0x3b, 0x66, 0xb3, 0x3f, 0xc9, 0x9b, 0x30, 0xf4, 0x94, 0x29, 0x6a, 0x28, 0x8e, 0xc4, 0x37, + 0x7e, 0x1a, 0xe9, 0xaa, 0xf7, 0xd8, 0xb7, 0x39, 0xd2, 0x07, 0xc5, 0xf7, 0x0a, 0xf7, 0x07, 0x47, + 0xc7, 0x4b, 0x13, 0xfc, 0x5a, 0xfd, 0xfe, 0xe0, 0xe8, 0x64, 0x69, 0xca, 0xaa, 0xc2, 0xe9, 0x04, + 0x3e, 0x29, 0xc3, 0x08, 0xf5, 0x98, 0xf0, 0xdf, 0xe2, 0x02, 0x91, 0x2d, 0x7f, 0x92, 0x19, 0x18, + 0x6a, 0xbb, 0x07, 0x6e, 0x84, 0x15, 0x0e, 0xd9, 0xfc, 0x87, 0xf5, 0xbb, 0x05, 0x20, 0xe9, 0xf3, + 0x88, 0xdc, 0x4a, 0xb0, 0xe1, 0xa2, 0xaf, 0x00, 0xe9, 0x17, 0x07, 0x92, 0xfb, 0x67, 0x30, 0xcd, + 0x17, 0x84, 0x3c, 0x39, 0xb5, 0xba, 0xf8, 0x8e, 0x9d, 0x51, 0xac, 0x1b, 0x9b, 0x44, 0x31, 0x9e, + 0xb3, 0x6b, 0xd8, 0xb4, 0x2e, 0xcc, 0x66, 0x9e, 0x44, 0x64, 0x1d, 0x66, 0x0f, 0x7c, 0x2f, 0xda, + 0x6f, 0x3f, 0x97, 0x07, 0x91, 0xa8, 0xad, 0x80, 0xb5, 0xe1, 0xe6, 0x9b, 0x89, 0x60, 0x4f, 0x0b, + 0xb0, 0xe0, 0x88, 0xf5, 0x08, 0xa3, 0x93, 0xec, 0x89, 0x65, 0xc3, 0x99, 0xd4, 0x86, 0x4e, 0x7e, + 0x00, 0x13, 0x4d, 0x54, 0xee, 0x8c, 0x9a, 0xf8, 0x71, 0xa6, 0xc1, 0xf5, 0x6f, 0x95, 0xc3, 0x79, + 0x57, 0xfe, 0x49, 0x01, 0xe6, 0x72, 0xb6, 0xf2, 0x93, 0x0f, 0xf5, 0x17, 0x70, 0xf6, 0xc0, 0xf9, + 0xa6, 0x11, 0xa0, 0xee, 0xde, 0x08, 0x1c, 0x2f, 0x31, 0xda, 0xb8, 0x4d, 0x65, 0x63, 0xe8, 0xbe, + 0x4d, 0x07, 0xce, 0x37, 0x36, 0x22, 0xd8, 0xac, 0x9c, 0xb7, 0xf3, 0x53, 0x98, 0x34, 0x36, 0xef, + 0x13, 0x37, 0xce, 0xba, 0x03, 0x67, 0x96, 0x68, 0x9b, 0x46, 0xf4, 0xd8, 0x36, 0x3b, 0x6b, 0x0b, + 0xa0, 0x4e, 0x0f, 0x9c, 0xce, 0xbe, 0xcf, 0x84, 0xfa, 0x9a, 0xfe, 0x4b, 0xd8, 0x7c, 0x88, 0x54, + 0x4f, 0x64, 0xc1, 0xee, 0x5b, 0x5c, 0xd0, 0x0f, 0x15, 0xa6, 0xad, 0x51, 0x59, 0xff, 0xba, 0x08, + 0x44, 0xec, 0xbe, 0x01, 0x75, 0x0e, 0x64, 0x33, 0xde, 0x87, 0x09, 0xae, 0xa1, 0x73, 0x30, 0x36, + 0x67, 0x7c, 0x61, 0x5a, 0x7c, 0x79, 0x7a, 0xd1, 0xca, 0x29, 0xdb, 0x40, 0x65, 0xa4, 0x36, 0xe5, + 0xa6, 0x05, 0x24, 0x2d, 0x1a, 0xa4, 0x7a, 0x11, 0x23, 0xd5, 0x7f, 0x93, 0x4f, 0x60, 0x6a, 0xd1, + 0x3f, 0xe8, 0xb0, 0x31, 0x11, 0xc4, 0x03, 0xc2, 0x6c, 0x23, 0xea, 0x35, 0x0a, 0x57, 0x4e, 0xd9, + 0x09, 0x74, 0xb2, 0x01, 0xd3, 0x77, 0xdb, 0xdd, 0x70, 0xbf, 0xea, 0xb5, 0x16, 0xdb, 0x7e, 0x28, + 0xb9, 0x0c, 0x0a, 0x4d, 0x4b, 0xec, 0x9d, 0x69, 0x8c, 0x95, 0x53, 0x76, 0x16, 0x21, 0xb9, 0x06, + 0x43, 0xcb, 0x4f, 0xd9, 0x9e, 0x2e, 0x3d, 0x5c, 0x84, 0x03, 0xde, 0xa6, 0x47, 0x37, 0x1f, 0xaf, + 0x9c, 0xb2, 0x79, 0x69, 0x6d, 0x0c, 0x46, 0xa4, 0x76, 0x7f, 0x8b, 0xc9, 0xdb, 0x6a, 0x38, 0xeb, + 0x91, 0x13, 0x75, 0x43, 0x32, 0x0f, 0xa3, 0x3b, 0x1d, 0xa6, 0x74, 0x4a, 0xb3, 0x88, 0xad, 0x7e, + 0x5b, 0x6f, 0x9a, 0x23, 0x4d, 0x2e, 0x40, 0x6c, 0xd3, 0x15, 0xc8, 0x9a, 0x91, 0x77, 0xc5, 0x1c, + 0xdc, 0xde, 0xd8, 0x46, 0xbd, 0xc5, 0x44, 0xbd, 0xa5, 0xe4, 0x58, 0x5b, 0xb3, 0x99, 0x83, 0x67, + 0x7d, 0x0e, 0x97, 0x76, 0x3a, 0x21, 0x0d, 0xa2, 0x6a, 0xa7, 0xd3, 0x76, 0x9b, 0xfc, 0x86, 0x0c, + 0xad, 0x00, 0x72, 0xb1, 0xbc, 0x0b, 0xc3, 0x1c, 0x20, 0x96, 0x89, 0x5c, 0x83, 0xd5, 0x4e, 0x47, + 0xd8, 0x1e, 0xde, 0xe2, 0x92, 0x3f, 0xb7, 0x26, 0xd8, 0x02, 0xdb, 0xfa, 0xed, 0x02, 0x5c, 0xe2, + 0x5f, 0x40, 0x2e, 0xeb, 0xef, 0xc2, 0x18, 0xfa, 0xbf, 0x75, 0x9c, 0xa6, 0xfc, 0x26, 0xb8, 0x23, + 0xa0, 0x04, 0xda, 0x71, 0xb9, 0xe6, 0x59, 0x58, 0xcc, 0xf7, 0x2c, 0x94, 0x1f, 0xd8, 0x40, 0xe6, + 0x07, 0xf6, 0x19, 0x58, 0xa2, 0x45, 0xed, 0x76, 0xaa, 0x51, 0xe1, 0x8b, 0xb4, 0xca, 0xfa, 0xcf, + 0x45, 0x98, 0xbb, 0x47, 0x3d, 0x1a, 0x38, 0xd8, 0x4f, 0xc3, 0xca, 0xa5, 0x7b, 0x18, 0x15, 0x7a, + 0x7a, 0x18, 0x55, 0xa4, 0xdd, 0xb0, 0x88, 0x76, 0xc3, 0x94, 0xbb, 0x14, 0xd3, 0x45, 0x77, 0xec, + 0x55, 0xd1, 0x2d, 0xd4, 0x45, 0xbb, 0x81, 0xcb, 0x6f, 0x19, 0x56, 0x63, 0xef, 0xa4, 0xc1, 0xbe, + 0x36, 0x87, 0x69, 0xe1, 0xad, 0x31, 0x22, 0xbc, 0x93, 0x4c, 0x9f, 0xa4, 0x0d, 0x18, 0xe6, 0xe6, + 0x4e, 0xbc, 0xdb, 0x1a, 0x5f, 0xb8, 0x21, 0xbe, 0xa9, 0x9c, 0x0e, 0x0a, 0xdb, 0x28, 0x1e, 0xec, + 0x7c, 0x09, 0x44, 0x08, 0xb0, 0x05, 0x97, 0xf9, 0xcf, 0x60, 0x5c, 0x43, 0x39, 0xce, 0xd9, 0xaf, + 0xcc, 0xae, 0x4c, 0x1c, 0xf5, 0xf6, 0xb8, 0x05, 0x57, 0x3b, 0xfb, 0xad, 0x0f, 0xa1, 0x9c, 0x6e, + 0x8d, 0x30, 0xb5, 0xf5, 0xb3, 0xec, 0x59, 0x4b, 0x30, 0x73, 0x8f, 0x46, 0xb8, 0x70, 0xf1, 0x23, + 0xd2, 0xbc, 0xec, 0x12, 0xdf, 0x99, 0xdc, 0x55, 0x11, 0xc8, 0x16, 0x98, 0xf6, 0x95, 0xd6, 0x61, + 0x36, 0xc1, 0x45, 0xd4, 0xff, 0x01, 0x8c, 0x08, 0x90, 0xda, 0x51, 0x85, 0xab, 0x2e, 0x7d, 0x24, + 0x0a, 0x76, 0x17, 0xf8, 0xba, 0x15, 0x9c, 0x6d, 0x49, 0x60, 0xed, 0xc3, 0x59, 0x76, 0xcc, 0xc6, + 0x5c, 0xd5, 0x72, 0x3c, 0x0f, 0x63, 0x1d, 0x26, 0x28, 0x84, 0xee, 0x4f, 0xf8, 0x32, 0x1a, 0xb2, + 0x47, 0x19, 0xa0, 0xee, 0xfe, 0x84, 0x92, 0x8b, 0x00, 0x58, 0x88, 0xdd, 0x14, 0xbb, 0x00, 0xa2, + 0x73, 0x53, 0x26, 0x01, 0xf4, 0xd1, 0xe3, 0xeb, 0xc6, 0xc6, 0xbf, 0xad, 0x00, 0xe6, 0x52, 0x35, + 0x89, 0x0e, 0xdc, 0x82, 0x51, 0x29, 0x1f, 0x27, 0x2e, 0x19, 0xf4, 0x1e, 0xd8, 0x0a, 0x89, 0xbc, + 0x0e, 0xa7, 0x3d, 0xfa, 0x4d, 0xd4, 0x48, 0xb5, 0x61, 0x92, 0x81, 0xb7, 0x64, 0x3b, 0xac, 0x5f, + 0x42, 0xc3, 0x72, 0xdd, 0xf3, 0x9f, 0x3d, 0x6e, 0x3b, 0x4f, 0x68, 0xaa, 0xe2, 0x1f, 0xc0, 0x68, + 0xbd, 0x7f, 0xc5, 0xfc, 0xf3, 0x91, 0x95, 0xdb, 0x8a, 0xc4, 0x6a, 0xc3, 0x3c, 0xeb, 0x52, 0xbd, + 0xba, 0xbe, 0xb6, 0xda, 0xda, 0xfa, 0xb6, 0x07, 0xf0, 0x29, 0x9c, 0xcf, 0xac, 0xed, 0xdb, 0x1e, + 0xc4, 0x3f, 0x1a, 0x84, 0x39, 0x7e, 0x98, 0xa4, 0x57, 0xf0, 0xf1, 0xb7, 0x9a, 0x5f, 0xc8, 0x7d, + 0xef, 0xed, 0x8c, 0xfb, 0x5e, 0x24, 0xd1, 0xef, 0x7b, 0x8d, 0x5b, 0xde, 0xf7, 0xb2, 0x6f, 0x79, + 0xd1, 0x08, 0x65, 0xde, 0xf2, 0x26, 0xef, 0x76, 0x97, 0xf3, 0xef, 0x76, 0xf1, 0xe2, 0x29, 0xe3, + 0x6e, 0x37, 0xeb, 0x46, 0x37, 0xe1, 0x28, 0x35, 0xfa, 0x6a, 0x1d, 0xa5, 0x5e, 0x87, 0x91, 0x6a, + 0xa7, 0xa3, 0x39, 0x1e, 0xe2, 0xf4, 0x38, 0x9d, 0x0e, 0x1f, 0x3c, 0x59, 0x28, 0xf7, 0x79, 0xc8, + 0xd8, 0xe7, 0xdf, 0x07, 0x58, 0xc4, 0xe7, 0x11, 0x38, 0x71, 0xe3, 0x88, 0x81, 0x12, 0x3e, 0x7f, + 0x34, 0x81, 0x13, 0xa7, 0x9b, 0x57, 0x62, 0x64, 0x2e, 0xd8, 0x5b, 0xbb, 0x50, 0x4e, 0x2f, 0x9f, + 0x57, 0xb0, 0x75, 0xfd, 0x61, 0x01, 0x2e, 0x0a, 0x21, 0x27, 0xf1, 0x81, 0x9f, 0x7c, 0x75, 0xbe, + 0x03, 0x13, 0x82, 0x76, 0x3b, 0xfe, 0x10, 0xf8, 0x05, 0xbb, 0xdc, 0x8c, 0xf9, 0x8e, 0x6e, 0xa0, + 0x91, 0x77, 0x60, 0x14, 0xff, 0x88, 0x2f, 0x86, 0xd8, 0xc8, 0x8c, 0x21, 0x6a, 0x23, 0x79, 0x3d, + 0xa4, 0x50, 0xad, 0xaf, 0xe1, 0x52, 0x5e, 0xc3, 0x5f, 0xc1, 0xb8, 0xfc, 0x8b, 0x02, 0x9c, 0x17, + 0xec, 0x8d, 0xad, 0xe2, 0x85, 0x4e, 0x9d, 0x13, 0xb8, 0x2b, 0xdf, 0x87, 0x71, 0x56, 0xa1, 0x6c, + 0xf7, 0x80, 0x38, 0x5a, 0x85, 0xe6, 0x10, 0x97, 0x2c, 0x39, 0x91, 0x23, 0xdc, 0x6f, 0x9c, 0x83, + 0xb6, 0xb4, 0x8c, 0xd8, 0x3a, 0xb1, 0xf5, 0x25, 0x5c, 0xc8, 0xee, 0xc2, 0x2b, 0x18, 0x9f, 0xfb, + 0x30, 0x9f, 0x71, 0x28, 0xbc, 0xd8, 0x99, 0xfc, 0x05, 0x9c, 0xcf, 0xe4, 0xf5, 0x0a, 0x9a, 0xb9, + 0xc2, 0x24, 0x8e, 0xe8, 0x15, 0x4c, 0xa1, 0xf5, 0x10, 0xce, 0x65, 0x70, 0x7a, 0x05, 0x4d, 0xbc, + 0x07, 0x73, 0x4a, 0xd2, 0x7e, 0xa9, 0x16, 0xae, 0xc3, 0x45, 0xce, 0xe8, 0xd5, 0xcc, 0xca, 0x03, + 0x38, 0x2f, 0xd8, 0xbd, 0x82, 0xd1, 0x5b, 0x81, 0x0b, 0xb1, 0x42, 0x9d, 0x21, 0x27, 0x1d, 0x7b, + 0x93, 0xb1, 0xd6, 0xe0, 0x72, 0xcc, 0x29, 0x47, 0x68, 0x38, 0x3e, 0x37, 0x2e, 0x0e, 0xc6, 0xb3, + 0xf4, 0x4a, 0x66, 0xf4, 0x21, 0x9c, 0x35, 0x98, 0xbe, 0x32, 0x51, 0x69, 0x15, 0xa6, 0x39, 0x63, + 0x53, 0x74, 0x5e, 0xd0, 0x45, 0xe7, 0xf1, 0x85, 0x33, 0x31, 0x4b, 0x04, 0xef, 0xbe, 0x95, 0x21, + 0x4d, 0xaf, 0xa3, 0x34, 0x2d, 0x51, 0xe2, 0x16, 0xbe, 0x03, 0xc3, 0x1c, 0x22, 0xda, 0x97, 0xc1, + 0x8c, 0x2b, 0x0b, 0x9c, 0x4c, 0x20, 0x5b, 0x3f, 0x84, 0x8b, 0x5c, 0x13, 0x8d, 0x2f, 0x2a, 0x4d, + 0x6d, 0xf1, 0x07, 0x09, 0x45, 0xf4, 0x9c, 0xe0, 0x9b, 0xc4, 0xcf, 0xd1, 0x47, 0x1f, 0xc9, 0xb5, + 0x9d, 0xc7, 0xff, 0x58, 0x4f, 0xd7, 0xa4, 0x82, 0x59, 0xcc, 0x54, 0x30, 0xaf, 0xc2, 0x15, 0xa5, + 0x60, 0x26, 0xab, 0x91, 0x4b, 0xcb, 0xfa, 0x12, 0xce, 0xf3, 0x8e, 0x4a, 0x97, 0x42, 0xb3, 0x19, + 0x1f, 0x26, 0xba, 0x39, 0x27, 0xba, 0x69, 0x62, 0xe7, 0x74, 0xf2, 0xff, 0x2b, 0xc8, 0x4f, 0x2e, + 0x9b, 0xf9, 0x2f, 0x5a, 0xe3, 0xde, 0x80, 0x8a, 0x1a, 0x10, 0xb3, 0x45, 0x2f, 0xa6, 0x6e, 0xaf, + 0xc3, 0xac, 0xce, 0xc6, 0x6d, 0xd2, 0xdd, 0x3b, 0x78, 0x83, 0xf4, 0x36, 0xfb, 0x2c, 0x10, 0x20, + 0x97, 0x5d, 0x39, 0x63, 0xdc, 0x10, 0xdf, 0x56, 0x98, 0x56, 0x03, 0x2e, 0xa4, 0xa7, 0xc2, 0x6d, + 0xca, 0xf7, 0x04, 0xe4, 0x13, 0xf6, 0x09, 0x23, 0x44, 0x4c, 0x46, 0x2e, 0x53, 0xf9, 0x1d, 0x73, + 0x72, 0x49, 0x65, 0x59, 0x72, 0xab, 0x49, 0xf4, 0x9f, 0xd5, 0x2e, 0xd7, 0xc3, 0xaf, 0x02, 0x91, + 0x45, 0x8b, 0x75, 0x5b, 0x56, 0x7d, 0x0e, 0x06, 0x16, 0xeb, 0xb6, 0x78, 0xc8, 0x84, 0x92, 0x60, + 0x33, 0x0c, 0x6c, 0x06, 0x4b, 0x4a, 0xe4, 0xc5, 0x63, 0x48, 0xe4, 0xf7, 0x07, 0x47, 0x07, 0x4a, + 0x83, 0x36, 0xa9, 0xbb, 0x7b, 0xde, 0x43, 0x37, 0xda, 0x57, 0x15, 0x56, 0xad, 0xaf, 0x60, 0xda, + 0xa8, 0x5e, 0x7c, 0xc5, 0x3d, 0x5f, 0x60, 0x31, 0x79, 0x76, 0xb1, 0x8a, 0x6e, 0x35, 0x68, 0xb2, + 0x98, 0xe0, 0xfb, 0x4d, 0xd3, 0x69, 0xe0, 0xf3, 0x5e, 0x5b, 0x16, 0x5a, 0xff, 0x78, 0x50, 0xe3, + 0xae, 0xbd, 0x6b, 0xeb, 0xd1, 0xbb, 0x3b, 0x00, 0x7c, 0x85, 0x68, 0x9d, 0x63, 0x02, 0xe0, 0xb8, + 0xf0, 0x56, 0xe1, 0x5b, 0xb2, 0xad, 0x21, 0x1d, 0xf7, 0xdd, 0x9b, 0xf0, 0x3f, 0xe6, 0x44, 0xf2, + 0xa9, 0xa7, 0xf2, 0x3f, 0x16, 0xac, 0x43, 0x5b, 0x47, 0x22, 0x3f, 0x4c, 0x3e, 0xce, 0x18, 0xc2, + 0x0b, 0xab, 0xd7, 0xe4, 0x0d, 0x76, 0xba, 0x6f, 0x27, 0x7b, 0x9f, 0xf1, 0x0c, 0x66, 0x19, 0xad, + 0xfb, 0x18, 0x15, 0x8b, 0xe5, 0x6f, 0x22, 0xea, 0xf1, 0xbd, 0x7d, 0x18, 0xeb, 0xb9, 0xd6, 0xa3, + 0x9e, 0x18, 0x59, 0xd8, 0xdf, 0x63, 0x3e, 0x0d, 0xaa, 0xca, 0xec, 0x6c, 0xfe, 0xb8, 0x88, 0xec, + 0xb5, 0x65, 0xaf, 0xd5, 0xf1, 0x5d, 0xa5, 0x30, 0xf1, 0x45, 0x14, 0xb4, 0x1b, 0x54, 0xc0, 0x6d, + 0x1d, 0xc9, 0x7a, 0xbd, 0xa7, 0x57, 0xfb, 0x28, 0x0c, 0x6e, 0x2f, 0x6e, 0xaf, 0x95, 0x0a, 0xd6, + 0x2d, 0x00, 0xad, 0x26, 0x80, 0xe1, 0x8d, 0x4d, 0x7b, 0xbd, 0xba, 0x56, 0x3a, 0x45, 0x66, 0xe1, + 0xcc, 0xc3, 0xd5, 0x8d, 0xa5, 0xcd, 0x87, 0xf5, 0x46, 0x7d, 0xbd, 0x6a, 0x6f, 0x2f, 0x56, 0xed, + 0xa5, 0x52, 0xc1, 0xfa, 0x1a, 0x66, 0xcc, 0x1e, 0xbe, 0xd2, 0x45, 0x18, 0xc1, 0xb4, 0x92, 0x67, + 0xee, 0x3f, 0xdc, 0xd6, 0x3c, 0x5a, 0x85, 0xf2, 0x97, 0xf4, 0xcc, 0x12, 0x6a, 0xa2, 0xf8, 0x8c, + 0x34, 0x24, 0xf2, 0x06, 0x17, 0x0b, 0x92, 0x2f, 0x97, 0x99, 0x58, 0xd0, 0x88, 0xe5, 0x02, 0xdc, + 0xfa, 0xbe, 0x0f, 0x33, 0x66, 0xad, 0xc7, 0xb5, 0x52, 0xbd, 0x86, 0xae, 0xbe, 0xda, 0xb3, 0x26, + 0x42, 0xf4, 0x6b, 0x03, 0xb1, 0xb3, 0x7e, 0x1f, 0x4a, 0x02, 0x2b, 0x3e, 0x79, 0xaf, 0x4a, 0x33, + 0x62, 0x21, 0xe3, 0x11, 0xa6, 0x74, 0x4a, 0xf7, 0xa1, 0xc4, 0x76, 0x4c, 0x41, 0xc9, 0x2b, 0x98, + 0x81, 0xa1, 0xb5, 0xf8, 0x3a, 0xc7, 0xe6, 0x3f, 0xf0, 0x75, 0x4f, 0xe4, 0x04, 0x91, 0xf4, 0x83, + 0x1b, 0xb3, 0xd5, 0x6f, 0xf2, 0x06, 0x0c, 0xdf, 0x75, 0xdb, 0x91, 0x30, 0x8d, 0xc4, 0x87, 0x3c, + 0x63, 0xcb, 0x0b, 0x6c, 0x81, 0x60, 0xd9, 0x70, 0x46, 0xab, 0xf0, 0x04, 0x4d, 0x25, 0x65, 0x18, + 0xd9, 0xa0, 0xdf, 0x68, 0xf5, 0xcb, 0x9f, 0xd6, 0xbb, 0x70, 0x46, 0xf8, 0x18, 0x6a, 0xc3, 0x74, + 0x45, 0xbc, 0x15, 0x2f, 0x18, 0x0f, 0x56, 0x05, 0x4b, 0x2c, 0x62, 0x74, 0x3b, 0x9d, 0xd6, 0x0b, + 0xd2, 0xb1, 0x83, 0xe2, 0x84, 0x74, 0xdf, 0x91, 0xb7, 0x40, 0xfd, 0xa6, 0xf3, 0xff, 0x2a, 0x42, + 0x39, 0x61, 0x65, 0x58, 0xdc, 0x77, 0xda, 0x6d, 0xea, 0xed, 0x51, 0x72, 0x1d, 0x06, 0xb7, 0x37, + 0xb7, 0xb7, 0x84, 0x95, 0x54, 0x7a, 0x17, 0x30, 0x90, 0xc2, 0xb1, 0x11, 0x83, 0x3c, 0x80, 0x33, + 0xd2, 0x8b, 0x58, 0x15, 0x89, 0x19, 0xba, 0xd8, 0xdb, 0x27, 0x39, 0x4d, 0x47, 0xde, 0x16, 0x26, + 0x91, 0x1f, 0x77, 0xdd, 0x80, 0xb6, 0xd0, 0xf2, 0x13, 0x5f, 0xd5, 0x6b, 0x25, 0xb6, 0x8e, 0x46, + 0xbe, 0x0f, 0x13, 0xf5, 0xfa, 0x66, 0x5c, 0xfb, 0x90, 0x71, 0x43, 0xa4, 0x17, 0xd9, 0x06, 0x22, + 0x7f, 0x12, 0x6c, 0xfd, 0x51, 0x01, 0xe6, 0x72, 0xcc, 0x2d, 0xe4, 0x0d, 0x63, 0x1c, 0xa6, 0xb5, + 0x71, 0x90, 0x28, 0x2b, 0xa7, 0xc4, 0x40, 0x2c, 0x6a, 0x3e, 0xd9, 0x03, 0x27, 0xf0, 0xc9, 0x5e, + 0x39, 0x15, 0xfb, 0x61, 0x93, 0xd7, 0x61, 0xa0, 0x5e, 0xdf, 0x14, 0x66, 0x75, 0x12, 0xf7, 0x40, + 0x43, 0x66, 0x08, 0x35, 0x80, 0x51, 0x09, 0xb2, 0x4e, 0xc3, 0xa4, 0x31, 0x31, 0x96, 0x05, 0x13, + 0x7a, 0x0b, 0xd9, 0xec, 0x2f, 0xfa, 0x2d, 0x35, 0xfb, 0xec, 0x6f, 0xeb, 0x57, 0xcd, 0x31, 0x23, + 0x17, 0x01, 0xe4, 0x7d, 0xad, 0xdb, 0x92, 0x37, 0x3f, 0x02, 0xb2, 0xda, 0x22, 0x57, 0x60, 0x22, + 0xa0, 0x2d, 0x37, 0xa0, 0xcd, 0xa8, 0xd1, 0x0d, 0xc4, 0xc3, 0x18, 0x7b, 0x5c, 0xc2, 0x76, 0x82, + 0x36, 0xf9, 0x2e, 0x0c, 0xf3, 0x8b, 0x64, 0xd1, 0x7b, 0xa9, 0x24, 0xd4, 0xeb, 0x9b, 0xeb, 0x77, + 0xab, 0xfc, 0xa2, 0xdb, 0x16, 0x28, 0x56, 0x0d, 0xc6, 0xb5, 0x5e, 0xf5, 0xab, 0x7d, 0x06, 0x86, + 0x74, 0x2b, 0x25, 0xff, 0x61, 0xfd, 0x4e, 0x01, 0x66, 0x70, 0x19, 0xec, 0xb9, 0xec, 0x78, 0x88, + 0xfb, 0xb2, 0x60, 0x4c, 0xda, 0x05, 0x63, 0xd2, 0x12, 0xb8, 0x6a, 0xf6, 0x3e, 0x48, 0xcd, 0xde, + 0x85, 0xac, 0xd9, 0xc3, 0x2d, 0xc0, 0xf5, 0x3d, 0x7d, 0xd2, 0xf4, 0xeb, 0xba, 0xdf, 0x2d, 0xc0, + 0xb4, 0xd6, 0x26, 0xd5, 0xc1, 0x3b, 0x46, 0x93, 0xce, 0x67, 0x34, 0x29, 0xb5, 0x9e, 0x6a, 0xa9, + 0x16, 0xbd, 0xd6, 0xab, 0x45, 0x59, 0xcb, 0xc9, 0x58, 0x26, 0x7f, 0x59, 0x80, 0xd9, 0xcc, 0x31, + 0x20, 0x67, 0x99, 0xfc, 0xdf, 0x0c, 0x68, 0x24, 0x46, 0x5e, 0xfc, 0x62, 0xf0, 0xd5, 0x30, 0xec, + 0xd2, 0x40, 0x8c, 0xbb, 0xf8, 0x45, 0x5e, 0x83, 0xc9, 0x2d, 0x1a, 0xb8, 0x7e, 0x8b, 0x3f, 0x4c, + 0xe0, 0x1e, 0xbf, 0x93, 0xb6, 0x09, 0x24, 0x17, 0x60, 0x4c, 0x79, 0xac, 0x72, 0x1b, 0xae, 0x1d, + 0x03, 0x18, 0xef, 0x25, 0x77, 0x8f, 0x5f, 0xfc, 0x30, 0x62, 0xf1, 0x8b, 0x6d, 0xc0, 0xd2, 0xa2, + 0x3a, 0xcc, 0x37, 0x60, 0x69, 0x2e, 0x3d, 0x0b, 0xc3, 0x9f, 0xd9, 0xb8, 0x8e, 0x31, 0xe6, 0x84, + 0x2d, 0x7e, 0x91, 0x29, 0x74, 0x2d, 0xc7, 0x77, 0x31, 0xe8, 0x52, 0xfe, 0x01, 0xcc, 0x64, 0x8d, + 0x6b, 0xd6, 0x57, 0x20, 0x68, 0x8b, 0x8a, 0xf6, 0x4b, 0x98, 0xae, 0xb6, 0x5a, 0xf1, 0x72, 0xe5, + 0xb3, 0xca, 0xf7, 0x09, 0x6e, 0xd3, 0x14, 0x62, 0xed, 0xe0, 0xaa, 0xe7, 0x46, 0xf6, 0xf4, 0xf2, + 0x37, 0x6e, 0x18, 0xb9, 0xde, 0x9e, 0x66, 0x78, 0xb5, 0xcf, 0x6e, 0xd0, 0x67, 0x19, 0x4b, 0x80, + 0x49, 0x1c, 0x26, 0x6f, 0x0e, 0xcf, 0x60, 0x3e, 0xa3, 0xb1, 0x8d, 0xb7, 0xae, 0x39, 0x93, 0x6f, + 0x5c, 0x30, 0x50, 0x6d, 0x3e, 0xb1, 0xbe, 0x0f, 0x67, 0xf9, 0xb6, 0xdf, 0xab, 0xf1, 0xa2, 0xd9, + 0xba, 0x9d, 0xd8, 0x7a, 0x4f, 0x5a, 0x72, 0x7a, 0xb6, 0xcc, 0x9e, 0x30, 0xda, 0x82, 0x55, 0xfe, + 0xa7, 0x02, 0xcc, 0x27, 0x48, 0xeb, 0xcf, 0xbd, 0xa6, 0x3c, 0x73, 0x5e, 0x4f, 0xba, 0xee, 0xa3, + 0xac, 0xc4, 0x0d, 0xa4, 0x6e, 0x4b, 0x79, 0xef, 0x93, 0x5b, 0x00, 0x9c, 0x58, 0x13, 0x71, 0xf0, + 0x7a, 0x40, 0x78, 0x39, 0xa1, 0x90, 0xa3, 0xa1, 0x90, 0x2e, 0x64, 0x8d, 0xbb, 0xf8, 0x46, 0xfa, + 0xd9, 0xcf, 0x31, 0xce, 0x0a, 0x15, 0xe4, 0x8d, 0x1c, 0x43, 0x7a, 0x16, 0x7f, 0xeb, 0xff, 0x1f, + 0x80, 0x39, 0x7d, 0x02, 0x5f, 0xa4, 0xaf, 0x5b, 0x30, 0xbe, 0xe8, 0x7b, 0x11, 0xfd, 0x26, 0xd2, + 0xe2, 0x5c, 0x10, 0xe5, 0x8d, 0xa0, 0x4a, 0x84, 0x78, 0xcd, 0x01, 0x0d, 0x26, 0xeb, 0x19, 0xde, + 0x9a, 0x31, 0x22, 0x59, 0x84, 0xc9, 0x0d, 0xfa, 0x2c, 0x35, 0x80, 0xe8, 0x31, 0xea, 0xd1, 0x67, + 0x0d, 0x6d, 0x10, 0x75, 0x37, 0x3e, 0x83, 0x86, 0x3c, 0x82, 0x29, 0xb9, 0xb8, 0x8c, 0xc1, 0x9c, + 0xd7, 0x4f, 0x5e, 0x73, 0x39, 0xf3, 0x38, 0x10, 0xac, 0x86, 0x9c, 0x31, 0x4c, 0x70, 0x64, 0x5d, + 0xe7, 0x35, 0xf2, 0xd0, 0x06, 0xe6, 0xd1, 0xae, 0x95, 0x18, 0xfe, 0xb8, 0xc9, 0x90, 0x06, 0x3a, + 0x0b, 0x6b, 0x0b, 0xca, 0xe9, 0xf9, 0x10, 0xb5, 0xbd, 0x0d, 0xc3, 0x1c, 0x2a, 0x44, 0x25, 0x19, + 0xc2, 0x48, 0x61, 0x73, 0x5b, 0x46, 0x4b, 0x9c, 0x4a, 0x1c, 0x66, 0xad, 0xa0, 0x7d, 0x49, 0xe1, + 0x28, 0x61, 0xf5, 0x76, 0x72, 0x7a, 0xd1, 0xd5, 0x59, 0x4e, 0xaf, 0xee, 0x8b, 0x23, 0x9f, 0xa4, + 0x2c, 0xa2, 0x89, 0x4e, 0xe7, 0x24, 0x1a, 0x76, 0x03, 0x46, 0x04, 0x28, 0x11, 0x5c, 0x29, 0xfe, + 0xfc, 0x24, 0x82, 0xf5, 0x01, 0x9c, 0x43, 0x7b, 0xa1, 0xeb, 0xed, 0xb5, 0xe9, 0x4e, 0x68, 0x3c, + 0x2a, 0xe9, 0xf7, 0x59, 0x7f, 0x04, 0xf3, 0x59, 0xb4, 0x7d, 0xbf, 0x6c, 0x1e, 0xee, 0xe4, 0xcf, + 0x8b, 0x30, 0xb3, 0x1a, 0xea, 0x02, 0x97, 0x0a, 0x79, 0x92, 0x11, 0x86, 0x03, 0xc7, 0x64, 0xe5, + 0x54, 0x56, 0x98, 0x8d, 0xb7, 0xb5, 0xe7, 0xae, 0xc5, 0x5e, 0xf1, 0x35, 0xd8, 0xb1, 0xa5, 0x1e, + 0xbc, 0xbe, 0x0e, 0x83, 0x1b, 0x6c, 0xab, 0x1e, 0x10, 0x73, 0xc7, 0x29, 0x18, 0x08, 0x9f, 0x9b, + 0xb2, 0x23, 0x92, 0xfd, 0x20, 0x77, 0x53, 0x8f, 0x5a, 0x07, 0xfb, 0xc7, 0x8f, 0x58, 0x39, 0x95, + 0x7a, 0xdf, 0xfa, 0x2e, 0x8c, 0x57, 0x5b, 0x07, 0xdc, 0x25, 0xd3, 0xf7, 0x12, 0x9f, 0xa5, 0x56, + 0xb2, 0x72, 0xca, 0xd6, 0x11, 0xc9, 0x35, 0xfe, 0xaa, 0x61, 0x38, 0x27, 0xa6, 0x06, 0x13, 0xd6, + 0xaa, 0x9d, 0x4e, 0x6d, 0x14, 0x86, 0xf9, 0x43, 0x4b, 0xeb, 0x4b, 0x98, 0x17, 0x8e, 0x3c, 0xdc, + 0x3a, 0x8a, 0xee, 0x3e, 0x61, 0xec, 0xab, 0xd5, 0xcb, 0xf9, 0xe6, 0x12, 0x00, 0xea, 0x42, 0xab, + 0x5e, 0x8b, 0x7e, 0x23, 0x3c, 0x09, 0x35, 0x88, 0xf5, 0x0e, 0x8c, 0xa9, 0x11, 0x42, 0x81, 0x5f, + 0x3b, 0xec, 0x70, 0xb4, 0x66, 0x8c, 0x57, 0xbc, 0xf2, 0xe9, 0xee, 0x39, 0xa3, 0xef, 0x22, 0x4a, + 0x0e, 0xd7, 0x10, 0x5c, 0x98, 0x4d, 0x2c, 0x82, 0x38, 0x08, 0x83, 0x92, 0xd1, 0xb9, 0xab, 0xa3, + 0xfa, 0x9d, 0x14, 0xe1, 0x8b, 0xc7, 0x12, 0xe1, 0xad, 0x7f, 0x5a, 0x44, 0xe5, 0x32, 0x35, 0x1e, + 0x09, 0x3b, 0x9d, 0x6e, 0x2b, 0xac, 0xc1, 0x18, 0xf6, 0x7e, 0x49, 0x3e, 0x18, 0xec, 0xed, 0x87, + 0x32, 0xfa, 0xd3, 0xc3, 0xca, 0x29, 0x74, 0x3e, 0x89, 0xc9, 0xc8, 0xc7, 0x30, 0xb2, 0xec, 0xb5, + 0x90, 0xc3, 0xc0, 0x09, 0x38, 0x48, 0x22, 0x36, 0x27, 0xd8, 0xe4, 0x6d, 0xf6, 0x09, 0x73, 0xf3, + 0x8e, 0xad, 0x41, 0x62, 0x2d, 0x77, 0x28, 0x4f, 0xcb, 0x1d, 0x4e, 0x68, 0xb9, 0x16, 0x0c, 0x6d, + 0x06, 0x2d, 0x11, 0xdb, 0x66, 0x6a, 0x61, 0x42, 0x0c, 0x1c, 0xc2, 0x6c, 0x5e, 0x64, 0xfd, 0xd7, + 0x02, 0xcc, 0xdd, 0xa3, 0x51, 0xe6, 0x1a, 0x32, 0x46, 0xa5, 0xf0, 0xd2, 0xa3, 0x52, 0x7c, 0x91, + 0x51, 0x51, 0xbd, 0x1e, 0xc8, 0xeb, 0xf5, 0x60, 0x5e, 0xaf, 0x87, 0xf2, 0x7b, 0x7d, 0x0f, 0x86, + 0x79, 0x57, 0x99, 0x26, 0xbf, 0x1a, 0xd1, 0x83, 0x58, 0x93, 0xd7, 0xbd, 0xe8, 0x6c, 0x5e, 0xc6, + 0x04, 0xc9, 0x35, 0x27, 0xd4, 0x35, 0x79, 0xf1, 0xd3, 0xfa, 0x11, 0x3e, 0x35, 0x5e, 0xf3, 0x9b, + 0x4f, 0x34, 0x8b, 0xf0, 0x08, 0xff, 0x42, 0x93, 0x37, 0x08, 0x0c, 0x8b, 0x97, 0xd8, 0x12, 0x83, + 0x5c, 0x86, 0xf1, 0x55, 0xef, 0xae, 0x1f, 0x34, 0xe9, 0xa6, 0xd7, 0xe6, 0xdc, 0x47, 0x6d, 0x1d, + 0x24, 0x2c, 0x25, 0xa2, 0x86, 0xd8, 0xfc, 0x80, 0x80, 0x84, 0xf9, 0x81, 0xc1, 0x76, 0x17, 0x6c, + 0x5e, 0x26, 0x0c, 0x31, 0xec, 0xef, 0x5e, 0x9a, 0xbb, 0x52, 0xf1, 0xfb, 0x21, 0x3e, 0x82, 0x73, + 0x36, 0xed, 0xb4, 0x1d, 0x26, 0xd3, 0x1d, 0xf8, 0x1c, 0x5f, 0xf5, 0xf9, 0x72, 0xc6, 0x33, 0x41, + 0xd3, 0xa7, 0x42, 0x35, 0xb9, 0xd8, 0xa3, 0xc9, 0x07, 0x70, 0xe5, 0x1e, 0x8d, 0xcc, 0x0d, 0x35, + 0xb6, 0x37, 0x8b, 0xce, 0xaf, 0xc0, 0x68, 0x68, 0xda, 0xca, 0xe5, 0xb3, 0xb7, 0x4c, 0xc2, 0xdd, + 0xb7, 0xe4, 0x6d, 0x92, 0xe0, 0xa3, 0xfe, 0xb2, 0x3e, 0x81, 0x4a, 0x5e, 0x75, 0xc7, 0x73, 0x79, + 0x75, 0xe1, 0x72, 0x3e, 0x03, 0xd1, 0xdc, 0x65, 0x90, 0x76, 0x75, 0xf1, 0x09, 0xf5, 0x6b, 0xad, + 0x69, 0x8a, 0x17, 0x7f, 0x58, 0x35, 0xe9, 0xfc, 0xf7, 0x12, 0xcd, 0x6d, 0xe0, 0x95, 0xb5, 0xc9, + 0x20, 0x1e, 0xd7, 0x2a, 0x8c, 0x4a, 0x98, 0x18, 0xd7, 0xb9, 0xcc, 0x96, 0xca, 0x01, 0x6d, 0x49, + 0x06, 0x8a, 0xcc, 0xfa, 0x91, 0xbc, 0xbe, 0x31, 0x29, 0x8e, 0xf7, 0x6e, 0xf6, 0x38, 0xf7, 0x35, + 0x96, 0x0f, 0xe7, 0x4c, 0xde, 0xba, 0x59, 0xbe, 0xa4, 0x99, 0xe5, 0xb9, 0x35, 0xfe, 0xb2, 0x69, + 0x26, 0x16, 0x96, 0x06, 0x0d, 0x44, 0x2e, 0xe9, 0xc6, 0xf7, 0x89, 0xf4, 0x43, 0xdc, 0xdb, 0x30, + 0x9f, 0x55, 0xa1, 0xa6, 0x07, 0x2a, 0x0b, 0xaf, 0x90, 0x77, 0x96, 0xe0, 0x92, 0x8c, 0x2e, 0xe5, + 0xfb, 0x51, 0x18, 0x05, 0x4e, 0xa7, 0xde, 0x0c, 0xdc, 0x4e, 0x4c, 0x65, 0xc1, 0x30, 0x87, 0x88, + 0x91, 0xe0, 0x57, 0x61, 0x1c, 0x47, 0x94, 0x58, 0xbf, 0x5e, 0x00, 0xcb, 0xf0, 0xd3, 0xc2, 0x79, + 0xde, 0x0a, 0xfc, 0xa7, 0x6e, 0x4b, 0xbb, 0x7e, 0x7a, 0xc3, 0x30, 0x7d, 0xf2, 0x37, 0x89, 0x49, + 0x17, 0x71, 0xb1, 0x67, 0xde, 0x4e, 0x98, 0x23, 0xb9, 0xe0, 0x89, 0xbe, 0x5b, 0xe6, 0x83, 0x08, + 0x65, 0xa6, 0xfc, 0xef, 0x05, 0xb8, 0xda, 0xb3, 0x0d, 0xa2, 0x3f, 0x8f, 0xa0, 0x94, 0x2c, 0x13, + 0x2b, 0xa8, 0xa2, 0xf9, 0x6d, 0xa4, 0x39, 0xec, 0xde, 0xe1, 0x7e, 0xe8, 0xd2, 0xbf, 0xa9, 0xa3, + 0x38, 0xa7, 0xf8, 0x9d, 0xbc, 0xf5, 0x18, 0xbf, 0xc2, 0x8f, 0x9c, 0xf6, 0x22, 0x1a, 0x00, 0x06, + 0xe2, 0x37, 0x05, 0x11, 0x83, 0x36, 0x92, 0x61, 0x32, 0x34, 0x64, 0xeb, 0x53, 0xfc, 0xae, 0xb3, + 0x1b, 0x7d, 0xbc, 0x4f, 0x6d, 0x11, 0xae, 0x26, 0x7c, 0x07, 0x5e, 0x80, 0x49, 0x04, 0xb3, 0x6c, + 0xf8, 0x99, 0xec, 0x7d, 0x2f, 0xf0, 0xbb, 0x9d, 0x5f, 0xcc, 0xac, 0xff, 0x71, 0x81, 0x3b, 0x73, + 0xea, 0xd5, 0x8a, 0x89, 0x5e, 0x04, 0x88, 0xa1, 0x09, 0xa7, 0x7e, 0x55, 0xb0, 0x7b, 0x87, 0xab, + 0xdc, 0x78, 0xab, 0xb0, 0xc7, 0x19, 0x68, 0x64, 0xbf, 0xd8, 0x99, 0x7c, 0x0b, 0x1d, 0x06, 0x54, + 0xed, 0xc7, 0x1b, 0xf7, 0x77, 0xa5, 0xfd, 0xe3, 0x84, 0x74, 0xfb, 0x30, 0xc3, 0x76, 0x80, 0x6a, + 0x37, 0xda, 0xf7, 0x03, 0x37, 0x92, 0xcf, 0x53, 0xc8, 0x96, 0x88, 0x08, 0xc0, 0xa9, 0x3e, 0xfa, + 0xf9, 0x61, 0xe5, 0xbd, 0x93, 0xc4, 0xfd, 0x94, 0x3c, 0xb7, 0x55, 0x14, 0x01, 0x6b, 0x0e, 0x06, + 0x16, 0xed, 0x35, 0xdc, 0xf0, 0xec, 0x35, 0xb5, 0xe1, 0xd9, 0x6b, 0xd6, 0x5f, 0x15, 0xa1, 0xc2, + 0x63, 0x96, 0xa0, 0x9f, 0x49, 0x6c, 0xb5, 0xd0, 0x1c, 0x57, 0x8e, 0x6b, 0x60, 0x48, 0xc4, 0x24, + 0x29, 0x1e, 0x27, 0x26, 0xc9, 0xaf, 0x40, 0x8e, 0xc9, 0xea, 0x18, 0x56, 0x80, 0xef, 0x1c, 0x1d, + 0x56, 0xae, 0xc6, 0x56, 0x00, 0x5e, 0x9a, 0x65, 0x0e, 0xc8, 0xa9, 0x22, 0x6d, 0xbf, 0x18, 0x7c, + 0x01, 0xfb, 0xc5, 0x6d, 0x18, 0x41, 0x65, 0x66, 0x75, 0x4b, 0x78, 0x7e, 0xe2, 0xf2, 0xc4, 0x08, + 0x45, 0x0d, 0x57, 0x0f, 0x07, 0x28, 0xd1, 0xac, 0xbf, 0x5b, 0x84, 0xcb, 0xf9, 0x63, 0x2e, 0xda, + 0xb6, 0x04, 0x10, 0x7b, 0xb8, 0xf4, 0xf2, 0xa8, 0xc1, 0x6f, 0xe7, 0x19, 0x7d, 0xa4, 0x3c, 0xda, + 0x34, 0x3a, 0x26, 0xfb, 0xc8, 0x97, 0xd6, 0x89, 0xeb, 0x14, 0xe3, 0x01, 0xb6, 0x88, 0x66, 0x2b, + 0x40, 0x46, 0x34, 0x5b, 0x01, 0x23, 0x8f, 0x60, 0x6e, 0x2b, 0x70, 0x9f, 0x3a, 0x11, 0x7d, 0x40, + 0x9f, 0xf3, 0xc7, 0x42, 0xcb, 0xe2, 0x85, 0x10, 0x7f, 0x3e, 0x7f, 0xfd, 0xe8, 0xb0, 0xf2, 0x5a, + 0x87, 0xa3, 0x60, 0xc4, 0x32, 0xfe, 0xf6, 0xb3, 0x91, 0x7e, 0x34, 0x94, 0xc7, 0xc8, 0xfa, 0x57, + 0x05, 0x38, 0x8f, 0x62, 0xb9, 0x30, 0xbb, 0xca, 0xca, 0x5f, 0xc8, 0xb1, 0x52, 0xef, 0xa0, 0x58, + 0x8b, 0xe8, 0x58, 0x69, 0xbc, 0x44, 0xb7, 0x0d, 0x34, 0xb2, 0x0a, 0xe3, 0xe2, 0x37, 0x7e, 0x7f, + 0x03, 0xa8, 0x10, 0xcc, 0x6a, 0x1b, 0x16, 0x2e, 0x75, 0x6e, 0x2a, 0xc2, 0x85, 0x2d, 0x98, 0xe1, + 0x83, 0x4d, 0x5b, 0xa7, 0xb5, 0x7e, 0x56, 0x84, 0x0b, 0xbb, 0x34, 0x70, 0x1f, 0x3f, 0xcf, 0xe9, + 0xcc, 0x26, 0xcc, 0x48, 0x10, 0x8f, 0x5b, 0x62, 0x7c, 0x62, 0x3c, 0x9e, 0xa5, 0x6c, 0xaa, 0x08, + 0x7c, 0x22, 0xbf, 0xb8, 0x4c, 0xc2, 0x13, 0xb8, 0x4c, 0xbe, 0x0d, 0xa3, 0x89, 0xc8, 0x41, 0x38, + 0xff, 0xf2, 0x0b, 0x8d, 0xa7, 0x6a, 0xe5, 0x94, 0xad, 0x30, 0xc9, 0x6f, 0xe6, 0x5f, 0x55, 0x09, + 0xd3, 0x47, 0x3f, 0xfb, 0x27, 0x7e, 0xb0, 0xec, 0x63, 0x75, 0xb4, 0xd2, 0x8c, 0x0f, 0x76, 0xe5, + 0x94, 0x9d, 0x57, 0x53, 0x6d, 0x1c, 0xc6, 0xaa, 0x78, 0x6f, 0xc7, 0x34, 0xf7, 0xff, 0x56, 0x84, + 0x4b, 0xf2, 0xe1, 0x4f, 0xce, 0x30, 0x7f, 0x0e, 0x73, 0x12, 0x54, 0xed, 0x30, 0x81, 0x81, 0xb6, + 0xcc, 0x91, 0xe6, 0x31, 0x65, 0xe5, 0x48, 0x3b, 0x02, 0x27, 0x1e, 0xec, 0x3c, 0xf2, 0x57, 0x63, + 0xfd, 0xfc, 0x38, 0x2b, 0x8e, 0x13, 0x5a, 0x21, 0xf5, 0x3d, 0xd3, 0x18, 0x1a, 0x63, 0xff, 0x6c, + 0xa5, 0xac, 0xa7, 0x83, 0x2f, 0x6b, 0x3d, 0x5d, 0x39, 0x95, 0xb4, 0x9f, 0xd6, 0xa6, 0x60, 0x62, + 0x83, 0x3e, 0x8b, 0xc7, 0xfd, 0xff, 0x2c, 0x24, 0x42, 0x3d, 0x30, 0x09, 0x83, 0xc7, 0x7c, 0x28, + 0xc4, 0xa1, 0x80, 0x30, 0xd4, 0x83, 0x2e, 0x61, 0x70, 0xd4, 0x55, 0x18, 0xe1, 0x97, 0xd9, 0xad, + 0x63, 0x68, 0xf8, 0xea, 0x05, 0x0f, 0x7f, 0x56, 0xd9, 0xe2, 0xca, 0xbe, 0xa0, 0xb7, 0x1e, 0xc0, + 0x15, 0xe1, 0xe3, 0x6d, 0x4e, 0x3e, 0x56, 0x74, 0xc2, 0xe3, 0xcb, 0x72, 0xe0, 0xd2, 0x3d, 0x9a, + 0xdc, 0x7a, 0x8c, 0x17, 0x4e, 0x9f, 0xc0, 0x69, 0x03, 0xae, 0x38, 0xa2, 0x54, 0xaa, 0xd6, 0x90, + 0x62, 0x9d, 0xc4, 0xb6, 0x2e, 0x67, 0x55, 0xa1, 0x37, 0xd6, 0xa2, 0x18, 0x1c, 0x36, 0x88, 0xaf, + 0xd8, 0xc2, 0x13, 0xec, 0x7a, 0xd7, 0xb5, 0xef, 0x9a, 0xef, 0x78, 0x3c, 0x7a, 0xa0, 0x3c, 0x79, + 0x55, 0xa9, 0x35, 0x69, 0xdc, 0x05, 0x58, 0x53, 0x30, 0x21, 0x8b, 0xda, 0x34, 0x0c, 0xad, 0x7f, + 0x3f, 0x04, 0x96, 0x18, 0xd8, 0xac, 0x1b, 0x7a, 0x39, 0x1e, 0x8f, 0x52, 0x8d, 0x15, 0x07, 0xd5, + 0x59, 0x3d, 0x26, 0x69, 0x5c, 0xca, 0x57, 0x1e, 0xca, 0x79, 0xcd, 0x18, 0x6a, 0xac, 0xbc, 0x54, + 0xef, 0xbf, 0xca, 0xd9, 0x26, 0xf9, 0xc7, 0x86, 0x4f, 0xb6, 0x73, 0xb6, 0x49, 0x83, 0x6f, 0xf6, + 0x96, 0x69, 0x9b, 0x57, 0x22, 0x03, 0x2f, 0x72, 0x25, 0xc2, 0xbe, 0x48, 0xfd, 0x52, 0x64, 0xc7, + 0x1c, 0x4b, 0xf1, 0x3d, 0xca, 0xdb, 0x7b, 0xbd, 0x48, 0x44, 0x5c, 0xd0, 0x20, 0x06, 0x57, 0x83, + 0x0d, 0x71, 0xa1, 0xa4, 0xd9, 0x2c, 0x17, 0xf7, 0x69, 0xf3, 0x89, 0xb0, 0x15, 0xcb, 0x0b, 0xdd, + 0x2c, 0x9b, 0x39, 0x8f, 0x4f, 0xcd, 0xbf, 0x73, 0x5e, 0xd0, 0x68, 0x32, 0x52, 0x3d, 0x62, 0x44, + 0x92, 0x2d, 0xf9, 0x09, 0x4c, 0xab, 0xa9, 0x4e, 0xb8, 0x68, 0x8d, 0x2f, 0xbc, 0x16, 0x87, 0x32, + 0x3d, 0x78, 0xec, 0xdc, 0x7c, 0x7a, 0xe7, 0x66, 0x06, 0x2e, 0x0f, 0x44, 0xd0, 0x94, 0x05, 0x9a, + 0x7f, 0x96, 0x7e, 0xd1, 0x95, 0x41, 0x48, 0xbe, 0x80, 0x99, 0x7a, 0x7d, 0x93, 0x3f, 0xe6, 0xb0, + 0xe5, 0x05, 0xbf, 0xbd, 0x26, 0x1c, 0xb6, 0x70, 0xba, 0xc3, 0xd0, 0x6f, 0x88, 0x47, 0x20, 0xba, + 0x5b, 0x80, 0x1e, 0x8a, 0x21, 0x8b, 0x85, 0x7e, 0x53, 0xfe, 0xb7, 0xd5, 0x5b, 0x05, 0x26, 0x8a, + 0xb8, 0x6d, 0x2a, 0x1e, 0x1d, 0xc9, 0x85, 0x9d, 0x73, 0xcb, 0x57, 0xf8, 0x96, 0x6f, 0xf9, 0xfe, + 0xa0, 0x28, 0x5f, 0x68, 0xa4, 0x2f, 0x5a, 0x4f, 0x7c, 0xd9, 0x97, 0xd9, 0x83, 0x63, 0x9d, 0xd3, + 0x99, 0x8d, 0x23, 0x35, 0x79, 0x55, 0xaa, 0x82, 0x95, 0x4d, 0xa9, 0x6b, 0x87, 0xb8, 0xc0, 0xb8, + 0x3d, 0x45, 0xa9, 0x48, 0xa3, 0x4a, 0xde, 0xc3, 0x0d, 0xbc, 0xfc, 0x3d, 0xdc, 0x7f, 0x19, 0x83, + 0x33, 0x5b, 0xce, 0x9e, 0xeb, 0xb1, 0xf3, 0xc0, 0xa6, 0xa1, 0xdf, 0x0d, 0x9a, 0x94, 0x54, 0x61, + 0xca, 0x74, 0xbf, 0xed, 0xe3, 0x5c, 0xcc, 0x8e, 0x3c, 0x13, 0x46, 0x16, 0x60, 0x4c, 0x3d, 0xf9, + 0x15, 0xe7, 0x54, 0xc6, 0x53, 0xe0, 0x95, 0x53, 0x76, 0x8c, 0x46, 0xde, 0x37, 0xae, 0x8e, 0x4e, + 0xab, 0xd7, 0xeb, 0x88, 0xbb, 0xc0, 0xfd, 0x23, 0x3d, 0xbf, 0x65, 0x9e, 0xb5, 0xfc, 0x7e, 0xe4, + 0x47, 0xa9, 0xdb, 0xa4, 0x21, 0xa3, 0xc5, 0x29, 0x93, 0x1a, 0x8a, 0x19, 0xb9, 0xb1, 0xc7, 0x33, + 0xee, 0x99, 0xbe, 0x84, 0xf1, 0x07, 0xdd, 0x47, 0x54, 0xde, 0x9b, 0x0d, 0x8b, 0xa3, 0x37, 0xe9, + 0x54, 0x2e, 0xca, 0x77, 0xdf, 0xe2, 0x73, 0xf0, 0xa4, 0xfb, 0x88, 0xa6, 0x83, 0xda, 0xb3, 0x3d, + 0x4f, 0x63, 0x46, 0xf6, 0xa1, 0x94, 0xf4, 0xff, 0x16, 0xe1, 0xfd, 0x7a, 0x78, 0xad, 0x63, 0x98, + 0x16, 0x2d, 0x74, 0x3e, 0xf7, 0x4a, 0x35, 0x2a, 0x49, 0x71, 0x25, 0xbf, 0x0a, 0xb3, 0x99, 0x06, + 0x4d, 0xf5, 0x82, 0xad, 0xb7, 0xad, 0x14, 0x37, 0x90, 0xc4, 0xa8, 0xc9, 0xe7, 0x72, 0x46, 0xcd, + 0xd9, 0xb5, 0x90, 0x16, 0x9c, 0x4e, 0xf8, 0x35, 0x8b, 0xfc, 0x20, 0xf9, 0x9e, 0xd2, 0x78, 0xe6, + 0xc9, 0x10, 0xbb, 0x99, 0x75, 0x25, 0x59, 0x92, 0x35, 0x18, 0x53, 0x96, 0x04, 0x11, 0x59, 0x2d, + 0xcb, 0x6a, 0x52, 0x3e, 0x3a, 0xac, 0xcc, 0xc4, 0x56, 0x13, 0x83, 0x67, 0xcc, 0x80, 0xfc, 0x1a, + 0x5c, 0x51, 0x4b, 0x74, 0x33, 0xc8, 0xb6, 0x2f, 0x89, 0xd0, 0xfc, 0x37, 0x92, 0x2b, 0x3c, 0x0f, + 0x7f, 0xf7, 0x4e, 0xad, 0x58, 0x2e, 0xac, 0x9c, 0xb2, 0xfb, 0xb3, 0x26, 0xbf, 0x51, 0x80, 0xb3, + 0x39, 0xb5, 0x4e, 0x60, 0xad, 0x7d, 0x8d, 0x7e, 0xa8, 0x37, 0xe0, 0xab, 0x2d, 0xb7, 0x15, 0xbf, + 0x6e, 0x94, 0xd6, 0x3f, 0xa3, 0xdf, 0x39, 0x35, 0x91, 0xdb, 0x00, 0x7b, 0x6e, 0x24, 0xd6, 0x18, + 0x06, 0x19, 0x4b, 0x7f, 0xa0, 0x6c, 0xd8, 0xf6, 0xdc, 0x48, 0xac, 0xb4, 0x37, 0x61, 0x18, 0x15, + 0xf6, 0xb0, 0x3c, 0x89, 0x22, 0x2d, 0xc6, 0x33, 0x42, 0xb5, 0x5e, 0x3f, 0xc4, 0x04, 0x0e, 0x59, + 0x61, 0xa2, 0x21, 0x1e, 0xa2, 0x52, 0x94, 0x13, 0xd1, 0xcf, 0x84, 0x7a, 0xc1, 0x8b, 0x64, 0x58, + 0x12, 0x23, 0x6b, 0x83, 0x49, 0x56, 0x03, 0x18, 0x0d, 0xc4, 0x3e, 0x76, 0x7f, 0x70, 0x74, 0xb0, + 0x34, 0xc4, 0x3f, 0x35, 0xe9, 0x62, 0xff, 0x5b, 0xa3, 0xfc, 0x3d, 0xee, 0x8e, 0xe7, 0x3e, 0x76, + 0xe3, 0x2d, 0x4f, 0x37, 0xf5, 0xc5, 0xe9, 0x93, 0x84, 0x20, 0x9e, 0x93, 0x28, 0x49, 0x59, 0x05, + 0x8b, 0x7d, 0xad, 0x82, 0x6f, 0x69, 0xf7, 0x67, 0x5a, 0x94, 0x53, 0x2e, 0x70, 0x99, 0x56, 0xb8, + 0xf8, 0x62, 0xed, 0x6b, 0x18, 0xc6, 0xc0, 0xa4, 0xfc, 0x72, 0x72, 0x7c, 0xe1, 0xa6, 0xd8, 0xe8, + 0x7b, 0x34, 0x9f, 0x47, 0x32, 0x15, 0x6f, 0xec, 0xf9, 0x88, 0x23, 0xc0, 0x18, 0x71, 0x84, 0x90, + 0x6d, 0x98, 0xde, 0x62, 0xe7, 0x3f, 0x77, 0xf4, 0xee, 0x04, 0xc2, 0x52, 0xc2, 0x6d, 0x30, 0x28, + 0x7f, 0x74, 0x64, 0x71, 0x83, 0xaa, 0x72, 0xfd, 0x08, 0xce, 0x20, 0x27, 0xcb, 0x30, 0x55, 0xa7, + 0x4e, 0xd0, 0xdc, 0x7f, 0x40, 0x9f, 0x33, 0xd9, 0xcb, 0xc8, 0x18, 0x12, 0x62, 0x09, 0xeb, 0x2f, + 0x16, 0xe9, 0x0e, 0x27, 0x26, 0x11, 0xf9, 0x14, 0x86, 0xeb, 0x7e, 0x10, 0xd5, 0x9e, 0x8b, 0x6d, + 0x50, 0x5e, 0x5f, 0x71, 0x60, 0xed, 0x9c, 0xcc, 0x9a, 0x12, 0xfa, 0x41, 0xd4, 0x78, 0x64, 0x04, + 0xc8, 0xe2, 0x28, 0xe4, 0x39, 0xcc, 0x98, 0x5b, 0x90, 0xf0, 0x3f, 0x1e, 0x15, 0x32, 0x5f, 0xd6, + 0x3e, 0xc7, 0x51, 0x6a, 0xd7, 0x05, 0xf7, 0xcb, 0xc9, 0x8d, 0xee, 0x31, 0x96, 0xeb, 0x82, 0x52, + 0x16, 0x3d, 0x59, 0xc7, 0x74, 0x33, 0xbc, 0x47, 0xd5, 0x90, 0xfb, 0x2d, 0x8f, 0xc5, 0x21, 0xd8, + 0xba, 0xb8, 0x8d, 0xe1, 0x48, 0x38, 0x61, 0x32, 0x47, 0x91, 0x9d, 0x22, 0x25, 0x5b, 0x70, 0x66, + 0x27, 0xa4, 0x5b, 0x01, 0x7d, 0xea, 0xd2, 0x67, 0x92, 0x1f, 0xc4, 0xf1, 0xaa, 0x18, 0xbf, 0x0e, + 0x2f, 0xcd, 0x62, 0x98, 0x26, 0x26, 0xef, 0x03, 0x6c, 0xb9, 0x9e, 0x47, 0x5b, 0x78, 0x07, 0x3a, + 0x8e, 0xac, 0xd0, 0xbe, 0xdb, 0x41, 0x68, 0xc3, 0xf7, 0xda, 0xfa, 0x90, 0x6a, 0xc8, 0xa4, 0x06, + 0x93, 0xab, 0x5e, 0xb3, 0xdd, 0x15, 0xbe, 0x0a, 0x21, 0x6e, 0x41, 0x22, 0x8e, 0x9e, 0xcb, 0x0b, + 0x1a, 0xa9, 0x8f, 0xdc, 0x24, 0x21, 0x0f, 0x80, 0x08, 0x80, 0x58, 0xb5, 0xce, 0xa3, 0x36, 0x15, + 0x9f, 0x3b, 0xda, 0x6d, 0x24, 0x23, 0x5c, 0xee, 0x46, 0x78, 0xba, 0x14, 0xd9, 0xfc, 0xfb, 0x30, + 0xae, 0xad, 0xf9, 0x8c, 0xa0, 0x11, 0x33, 0x7a, 0xd0, 0x88, 0x31, 0x3d, 0x38, 0xc4, 0x3f, 0x2a, + 0xc0, 0x85, 0xec, 0x6f, 0x49, 0x88, 0x6c, 0x9b, 0x30, 0xa6, 0x80, 0xea, 0x99, 0x90, 0xd4, 0x43, + 0x12, 0x32, 0x13, 0xff, 0xa0, 0xe5, 0xce, 0xa3, 0xf7, 0x3e, 0xe6, 0xf1, 0x02, 0x97, 0x03, 0xff, + 0xf7, 0x28, 0xcc, 0xa0, 0x3b, 0x7c, 0x72, 0x9f, 0xfa, 0x04, 0x83, 0xbf, 0x20, 0x4c, 0xb3, 0x75, + 0x0b, 0xb3, 0x17, 0x87, 0x27, 0xc3, 0xa0, 0x19, 0x04, 0xe4, 0x1d, 0xdd, 0x41, 0xa3, 0xa8, 0xa5, + 0xb7, 0x91, 0x40, 0xbd, 0x0b, 0xb1, 0xe7, 0xc6, 0x1b, 0x86, 0x7f, 0xc0, 0xb1, 0x37, 0xbd, 0xc1, + 0xe3, 0x6e, 0x7a, 0x3b, 0x6a, 0xd3, 0xe3, 0x41, 0x45, 0xbe, 0xa3, 0x6d, 0x7a, 0xaf, 0x7e, 0xb7, + 0x1b, 0x7e, 0xd5, 0xbb, 0xdd, 0xc8, 0xcb, 0xed, 0x76, 0xa3, 0x2f, 0xb8, 0xdb, 0xdd, 0x85, 0xa9, + 0x0d, 0x4a, 0x5b, 0xda, 0xad, 0xcd, 0x58, 0x7c, 0x7a, 0x7a, 0x14, 0xed, 0x71, 0x59, 0x57, 0x37, + 0x09, 0xaa, 0xdc, 0x5d, 0x13, 0xfe, 0x66, 0x76, 0xcd, 0xf1, 0x57, 0xbc, 0x6b, 0x4e, 0xbc, 0xcc, + 0xae, 0x99, 0xda, 0xfa, 0x26, 0x4f, 0xbc, 0xf5, 0xbd, 0xcc, 0x6e, 0xf5, 0x31, 0xfa, 0x37, 0xd6, + 0xeb, 0x2b, 0xc2, 0x95, 0x45, 0xf3, 0x1d, 0x59, 0xf1, 0x43, 0xe9, 0xfe, 0x8d, 0x7f, 0x33, 0x18, + 0x26, 0x11, 0xe0, 0x4c, 0xf0, 0x6f, 0xab, 0x86, 0x5e, 0x8d, 0x3a, 0xbd, 0x7a, 0x26, 0x31, 0x22, + 0xde, 0x58, 0x8a, 0x3d, 0x2e, 0x29, 0xd7, 0xd9, 0xb2, 0xdc, 0xfa, 0xf3, 0x02, 0xbf, 0x21, 0xfd, + 0x5f, 0x71, 0xab, 0x7c, 0x99, 0x5b, 0xcb, 0xdf, 0x8c, 0x63, 0x2f, 0x88, 0x38, 0x11, 0x81, 0xd3, + 0x7c, 0x12, 0x5f, 0x1b, 0xff, 0x90, 0x7d, 0xe7, 0x7a, 0x81, 0x90, 0x80, 0xe7, 0xd4, 0x48, 0xe9, + 0x85, 0xbb, 0x77, 0xe4, 0x06, 0x20, 0x42, 0x50, 0x70, 0xb0, 0xb9, 0x01, 0xe8, 0x04, 0xe8, 0xb8, + 0x77, 0xda, 0xb2, 0x79, 0xe8, 0x80, 0xcc, 0x16, 0xbc, 0x9b, 0x7e, 0xfc, 0x8e, 0xea, 0x4b, 0xfc, + 0xf8, 0x5d, 0x1f, 0xc6, 0xf8, 0x19, 0xfc, 0x0e, 0x9c, 0xb7, 0xe9, 0x81, 0xff, 0x94, 0xbe, 0x5a, + 0xb6, 0x5f, 0xc1, 0x39, 0x93, 0x21, 0x7f, 0x26, 0xc5, 0x63, 0xfa, 0x7f, 0x9c, 0x9d, 0x09, 0x40, + 0x10, 0xf0, 0x4c, 0x00, 0x3c, 0xa0, 0x38, 0xfb, 0x53, 0x3f, 0x37, 0xb0, 0xcc, 0xf2, 0xe1, 0x82, + 0xc9, 0xbc, 0xda, 0x6a, 0x61, 0x32, 0xd1, 0xa6, 0xdb, 0x71, 0xbc, 0x88, 0x6c, 0xc2, 0xb8, 0xf6, + 0x33, 0x61, 0x5c, 0xd0, 0x4a, 0x84, 0x4c, 0x13, 0x03, 0x8c, 0x80, 0xac, 0x31, 0xd8, 0xa2, 0x50, + 0x49, 0x0e, 0x0f, 0x1b, 0x32, 0xbd, 0xce, 0x1a, 0x4c, 0x6a, 0x3f, 0x95, 0xfd, 0x14, 0x3f, 0x7e, + 0xad, 0x06, 0x73, 0xc0, 0x4c, 0x12, 0xab, 0x09, 0xf3, 0x59, 0x83, 0xc6, 0x23, 0x77, 0x93, 0xe5, + 0x38, 0x30, 0x57, 0x7f, 0xd7, 0xbf, 0xd3, 0x79, 0x41, 0xb9, 0xac, 0xbf, 0x35, 0x08, 0xe7, 0xc5, + 0x64, 0xbc, 0xca, 0x19, 0x27, 0x3f, 0x82, 0x71, 0x6d, 0x8e, 0xc5, 0xa0, 0x5f, 0x96, 0x8f, 0x9c, + 0xf2, 0xd6, 0x02, 0x37, 0x82, 0x74, 0x11, 0xd0, 0x48, 0x4c, 0xf7, 0xca, 0x29, 0x5b, 0x67, 0x49, + 0xda, 0x30, 0x65, 0x4e, 0xb4, 0xb0, 0x03, 0x5d, 0xcd, 0xac, 0xc4, 0x44, 0x95, 0x61, 0xbd, 0x5b, + 0x8d, 0xcc, 0xe9, 0x5e, 0x39, 0x65, 0x27, 0x78, 0x93, 0x6f, 0xe0, 0x4c, 0x6a, 0x96, 0x85, 0x79, + 0xef, 0xf5, 0xcc, 0x0a, 0x53, 0xd8, 0xdc, 0x36, 0x1c, 0x20, 0x38, 0xb7, 0xda, 0x74, 0x25, 0xa4, + 0x05, 0x13, 0xfa, 0xc4, 0x0b, 0x43, 0xd5, 0x95, 0x1e, 0x43, 0xc9, 0x11, 0xb9, 0x70, 0x27, 0xc6, + 0x12, 0xe7, 0xfe, 0xb9, 0x69, 0xef, 0x36, 0x90, 0x47, 0x61, 0x98, 0xff, 0xb6, 0xfe, 0xa0, 0x00, + 0xe7, 0xb7, 0x02, 0x1a, 0x52, 0xaf, 0x49, 0x0d, 0x77, 0xf1, 0x97, 0x5c, 0x11, 0x79, 0xa6, 0xe6, + 0xe2, 0x4b, 0x9b, 0x9a, 0xad, 0x7f, 0x59, 0x80, 0x72, 0x56, 0x93, 0xeb, 0xd4, 0x6b, 0x91, 0x2d, + 0x28, 0x25, 0xfb, 0x20, 0xbe, 0x18, 0x4b, 0x45, 0x65, 0xce, 0xed, 0xed, 0xca, 0x29, 0x3b, 0x45, + 0x4d, 0x36, 0xe0, 0x8c, 0x06, 0x13, 0xa6, 0xde, 0xe2, 0x71, 0x4c, 0xbd, 0x6c, 0x86, 0x53, 0xa4, + 0xba, 0xa5, 0x7c, 0x05, 0x4f, 0xdd, 0x25, 0xff, 0xc0, 0x71, 0x3d, 0x26, 0x44, 0x6b, 0x71, 0xbf, + 0x20, 0x86, 0x8a, 0x61, 0xe7, 0xb6, 0x5f, 0x84, 0xca, 0x97, 0x33, 0x0a, 0xc5, 0xfa, 0x08, 0x4f, + 0x07, 0x61, 0x31, 0xe4, 0x6f, 0x95, 0x15, 0xb3, 0xcb, 0x30, 0xb4, 0xbd, 0x56, 0x5f, 0xac, 0x8a, + 0x97, 0xcf, 0x3c, 0x5e, 0x46, 0x3b, 0x6c, 0x34, 0x1d, 0x9b, 0x17, 0x58, 0x1f, 0x02, 0xb9, 0x47, + 0x23, 0x91, 0x16, 0x40, 0xd1, 0x5d, 0x83, 0x11, 0x01, 0x12, 0x94, 0xe8, 0x03, 0x28, 0x92, 0x0c, + 0xd8, 0xb2, 0xcc, 0xda, 0x92, 0x3a, 0x48, 0x9b, 0x3a, 0xa1, 0x76, 0xe8, 0xbf, 0x07, 0xa3, 0x81, + 0x80, 0x89, 0x33, 0x7f, 0x4a, 0x65, 0x7d, 0x41, 0x30, 0xb7, 0xae, 0x4b, 0x1c, 0x5b, 0xfd, 0x65, + 0xad, 0x61, 0x6c, 0x9b, 0xcd, 0xd5, 0xa5, 0x45, 0x36, 0xaa, 0x62, 0xb0, 0xe4, 0x74, 0xdc, 0x42, + 0x67, 0xf9, 0x88, 0xea, 0xef, 0x9e, 0x71, 0x68, 0x70, 0x03, 0x11, 0x11, 0x9d, 0x34, 0x14, 0xeb, + 0x2d, 0x15, 0x29, 0x27, 0x83, 0x5b, 0x5e, 0xf6, 0x92, 0x0d, 0x8c, 0x01, 0x74, 0x0f, 0xfd, 0x82, + 0x5e, 0x45, 0x23, 0x1c, 0x98, 0xe7, 0x22, 0x04, 0xeb, 0x95, 0xc8, 0xdd, 0xe8, 0xab, 0x6d, 0x77, + 0x11, 0xc6, 0x14, 0x4c, 0x5d, 0xf2, 0xf1, 0xb1, 0x32, 0xf0, 0x77, 0xdf, 0xe2, 0x4f, 0xc4, 0x9b, + 0x8a, 0x41, 0x4c, 0xc7, 0xaa, 0xe0, 0xdf, 0xf4, 0xb7, 0x5c, 0x45, 0x48, 0x83, 0xe8, 0x5b, 0xad, + 0x22, 0x0e, 0x12, 0x75, 0x92, 0x2a, 0x0c, 0xfc, 0xdd, 0x85, 0xe3, 0x0c, 0xd4, 0xb7, 0x5c, 0x05, + 0x1b, 0xa8, 0x6f, 0xaf, 0x0a, 0x2a, 0xa3, 0x69, 0xf1, 0x45, 0x9a, 0xaa, 0x64, 0x39, 0x5d, 0x89, + 0x34, 0xa3, 0x27, 0x28, 0x7a, 0xce, 0x07, 0x85, 0x0b, 0x7c, 0xb0, 0x7e, 0x01, 0xd5, 0xb0, 0x01, + 0xfb, 0x76, 0xab, 0xf9, 0x7b, 0x05, 0x1e, 0xdb, 0xab, 0xbe, 0xa9, 0x65, 0x4d, 0xf5, 0x1e, 0xfb, + 0x9a, 0x0f, 0x82, 0xf6, 0xb5, 0x3f, 0x70, 0xbd, 0x96, 0xee, 0x83, 0xe0, 0x74, 0xa3, 0x7d, 0x15, + 0xfb, 0xfa, 0x89, 0xeb, 0xb5, 0xec, 0x24, 0x36, 0x79, 0x1f, 0x26, 0x35, 0x90, 0x92, 0x04, 0x79, + 0x76, 0x12, 0x9d, 0xdc, 0x6d, 0xd9, 0x26, 0xa6, 0xf5, 0xd7, 0x05, 0x98, 0xce, 0xc8, 0xe7, 0x8d, + 0x86, 0x12, 0xd4, 0xb0, 0xd4, 0x46, 0x25, 0xf2, 0x89, 0x61, 0x98, 0x11, 0xe3, 0xfc, 0x55, 0x88, + 0x98, 0x97, 0x41, 0xcb, 0x3d, 0x5e, 0xd4, 0xb2, 0xe4, 0x65, 0xe7, 0x1b, 0xd7, 0xd1, 0x49, 0x08, + 0x10, 0xb7, 0x44, 0x98, 0xa4, 0xeb, 0x4c, 0x5c, 0xd6, 0x12, 0x97, 0xbf, 0x92, 0xcc, 0xe9, 0x5a, + 0x35, 0xd6, 0x6f, 0x16, 0xe1, 0x6c, 0x46, 0xff, 0xeb, 0x34, 0xfa, 0x9b, 0x18, 0x82, 0x44, 0xfa, + 0xf8, 0x81, 0x5f, 0x50, 0xfa, 0x78, 0xeb, 0x4f, 0x8a, 0x70, 0x76, 0xa7, 0x13, 0xe2, 0x53, 0xb2, + 0x55, 0xef, 0x29, 0xf5, 0x22, 0x3f, 0x78, 0x8e, 0xcf, 0x5f, 0xc8, 0x3b, 0x30, 0xb4, 0x42, 0xdb, + 0x6d, 0x5f, 0xac, 0xff, 0x8b, 0xd2, 0x0d, 0x24, 0x89, 0x8d, 0x48, 0x2b, 0xa7, 0x6c, 0x8e, 0x4d, + 0xde, 0x87, 0xb1, 0x15, 0xea, 0x04, 0xd1, 0x23, 0xea, 0x48, 0x75, 0x48, 0xe6, 0x4c, 0xd1, 0x48, + 0x04, 0xc2, 0xca, 0x29, 0x3b, 0xc6, 0x26, 0x0b, 0x30, 0xb8, 0xe5, 0x7b, 0x7b, 0xea, 0xd9, 0x7c, + 0x4e, 0x85, 0x0c, 0x67, 0xe5, 0x94, 0x8d, 0xb8, 0x64, 0x1d, 0x26, 0xab, 0x7b, 0xd4, 0x8b, 0xd6, + 0x69, 0xe4, 0xb4, 0x9c, 0xc8, 0x11, 0x62, 0xf3, 0xb5, 0x3c, 0x62, 0x03, 0x79, 0xe5, 0x94, 0x6d, + 0x52, 0x93, 0x0f, 0x61, 0xe4, 0x9e, 0xef, 0xb7, 0x1e, 0x3d, 0x97, 0xc1, 0x1f, 0x2a, 0x79, 0x8c, + 0x04, 0xda, 0xca, 0x29, 0x5b, 0x52, 0xd4, 0x86, 0x60, 0x60, 0x3d, 0xdc, 0xb3, 0x0e, 0x0b, 0x50, + 0x5e, 0xf2, 0x9f, 0x79, 0x99, 0xa3, 0xfa, 0x7d, 0x73, 0x54, 0x25, 0xfb, 0x0c, 0xfc, 0xc4, 0xb8, + 0xbe, 0x0d, 0x83, 0x5b, 0xae, 0xb7, 0x97, 0x10, 0x05, 0x33, 0xe8, 0x18, 0x16, 0x0e, 0x8f, 0xeb, + 0xed, 0x91, 0x35, 0x29, 0xdf, 0x0b, 0x3b, 0xe6, 0x80, 0xa1, 0x54, 0x64, 0x50, 0xeb, 0xd8, 0xb1, + 0x1c, 0xcf, 0x7f, 0xcb, 0x0e, 0xbe, 0x01, 0x73, 0x39, 0xf5, 0x8a, 0x77, 0xf0, 0xac, 0x6f, 0x83, + 0x28, 0xd8, 0xfc, 0x3f, 0x05, 0x98, 0xcd, 0x9c, 0xc0, 0x24, 0x26, 0xd3, 0xe9, 0xf8, 0xc2, 0x5c, + 0x6c, 0xfb, 0xcd, 0x27, 0xc7, 0xf0, 0x26, 0xb3, 0x64, 0x9e, 0x71, 0xf1, 0x85, 0x34, 0x19, 0x5d, + 0x22, 0x97, 0x9c, 0xce, 0xd2, 0xfa, 0xfd, 0xac, 0xb5, 0xce, 0x07, 0xb7, 0x0c, 0x23, 0x32, 0x5f, + 0x19, 0x37, 0x5d, 0xc9, 0x9f, 0xf8, 0xd8, 0x4c, 0xee, 0x05, 0x32, 0x90, 0x8c, 0xfc, 0xe4, 0x77, + 0xb5, 0xc0, 0x5d, 0xfc, 0x8b, 0xfd, 0xe0, 0x25, 0xbe, 0x4b, 0xc5, 0x8b, 0xd5, 0xb9, 0xe2, 0x87, + 0x91, 0xa7, 0xbc, 0x98, 0x6d, 0xf5, 0x9b, 0xdc, 0x80, 0x92, 0xcc, 0x4d, 0x22, 0x92, 0x20, 0x89, + 0x7c, 0xfa, 0x76, 0x0a, 0x4e, 0xde, 0x83, 0xb9, 0x24, 0x4c, 0xf6, 0x92, 0xbf, 0x16, 0xcc, 0x2b, + 0xb6, 0xfe, 0xac, 0x88, 0xb1, 0xd5, 0x7b, 0x7c, 0x3a, 0x6c, 0xfe, 0x36, 0xeb, 0x62, 0xb4, 0x8a, + 0x9b, 0x75, 0x72, 0x01, 0xc6, 0x36, 0xeb, 0x46, 0xd2, 0x37, 0x3b, 0x06, 0xb0, 0x66, 0xb3, 0x2e, + 0x54, 0x83, 0xe6, 0xbe, 0x1b, 0xd1, 0x66, 0xd4, 0x0d, 0xc4, 0x46, 0x6f, 0xa7, 0xe0, 0xc4, 0x82, + 0x89, 0x7b, 0x6d, 0xf7, 0x51, 0x53, 0x32, 0xe3, 0x43, 0x60, 0xc0, 0xc8, 0xeb, 0x30, 0xb5, 0xea, + 0x85, 0x91, 0xd3, 0x6e, 0xaf, 0xd3, 0x68, 0xdf, 0x6f, 0x89, 0x94, 0xb6, 0x76, 0x02, 0xca, 0xea, + 0x5d, 0xf4, 0xbd, 0xc8, 0x71, 0x3d, 0x1a, 0xd8, 0x5d, 0x2f, 0x72, 0x0f, 0xa8, 0xe8, 0x7b, 0x0a, + 0x4e, 0xde, 0x86, 0x59, 0x05, 0xdb, 0x0c, 0x9a, 0xfb, 0x34, 0x8c, 0x02, 0x4c, 0x05, 0x89, 0xfe, + 0x4a, 0x76, 0x76, 0x21, 0xd6, 0xd0, 0xf6, 0xbb, 0xad, 0x65, 0xef, 0xa9, 0x1b, 0xf8, 0x1e, 0x26, + 0x5a, 0x19, 0x15, 0x35, 0x24, 0xe0, 0xd6, 0xef, 0x8d, 0x66, 0xee, 0x0c, 0x2f, 0xb3, 0x06, 0xbf, + 0x80, 0x89, 0x45, 0xa7, 0xe3, 0x3c, 0x72, 0xdb, 0x6e, 0xe4, 0xaa, 0x9c, 0x79, 0xef, 0xf4, 0xd9, + 0x56, 0x64, 0xb6, 0x1a, 0xda, 0xd2, 0x89, 0x6d, 0x83, 0xd5, 0xfc, 0x5f, 0x0d, 0xc3, 0x6c, 0x26, + 0x1e, 0xb9, 0x2e, 0x92, 0xeb, 0xa9, 0xad, 0x5b, 0x64, 0x6e, 0xb3, 0x93, 0x60, 0x36, 0x97, 0x08, + 0x5a, 0x6c, 0x53, 0xc7, 0xeb, 0x8a, 0xbc, 0x6d, 0xb6, 0x01, 0x63, 0x73, 0xc9, 0x44, 0x13, 0x8d, + 0x19, 0x3a, 0xa1, 0xdb, 0x09, 0x28, 0xb9, 0x0c, 0xe3, 0x0c, 0x22, 0x59, 0x0d, 0xf2, 0xe7, 0x92, + 0x1a, 0x88, 0x71, 0xda, 0xf0, 0x5b, 0x54, 0xe3, 0x34, 0xc4, 0x39, 0x99, 0x50, 0xc6, 0x89, 0x41, + 0x24, 0xa7, 0x61, 0xce, 0x49, 0x03, 0x91, 0xd7, 0x60, 0xb2, 0xda, 0xe9, 0x68, 0x8c, 0x30, 0x61, + 0x9b, 0x6d, 0x02, 0xc9, 0x25, 0x80, 0x6a, 0xa7, 0x23, 0xd9, 0x60, 0x32, 0x36, 0x5b, 0x83, 0x90, + 0x9b, 0x71, 0x78, 0x3c, 0x8d, 0x15, 0xde, 0x86, 0xd8, 0x19, 0x25, 0x6c, 0x5c, 0x55, 0x2c, 0x31, + 0xc1, 0x14, 0xf8, 0xb8, 0x26, 0xc0, 0xe4, 0x23, 0x38, 0x97, 0x70, 0x34, 0xd1, 0x2a, 0xc0, 0x9b, + 0x0a, 0x3b, 0x1f, 0x81, 0xbc, 0x0b, 0x67, 0x13, 0x85, 0xb2, 0x3a, 0xbc, 0x94, 0xb0, 0x73, 0x4a, + 0xc9, 0x07, 0x50, 0x4e, 0x3c, 0x81, 0x8f, 0x2b, 0xc5, 0x0b, 0x08, 0x3b, 0xb7, 0x9c, 0x7d, 0x5d, + 0x89, 0xb7, 0x74, 0xa2, 0x4a, 0xbc, 0x6b, 0xb5, 0xb3, 0x0b, 0xc9, 0x0a, 0x54, 0x32, 0x9d, 0x77, + 0xb4, 0x8a, 0x31, 0xc9, 0x9c, 0xdd, 0x0f, 0x8d, 0xd4, 0xe0, 0x42, 0x26, 0x8a, 0x6c, 0x06, 0xa6, + 0x9e, 0xb3, 0x7b, 0xe2, 0x90, 0x05, 0x98, 0x89, 0x9d, 0x98, 0xb4, 0x26, 0x60, 0xd6, 0x39, 0x3b, + 0xb3, 0x8c, 0xbc, 0x69, 0x06, 0x3a, 0xe0, 0x95, 0x61, 0xd2, 0x39, 0x3b, 0x5d, 0x60, 0x1d, 0x15, + 0xe0, 0x42, 0xe6, 0x59, 0x2c, 0x55, 0x86, 0xf9, 0xa4, 0x6c, 0xaa, 0xed, 0x05, 0x37, 0x60, 0x10, + 0x75, 0x08, 0x6e, 0xea, 0x96, 0x7e, 0xbb, 0x48, 0xcf, 0x59, 0xb1, 0x52, 0x1b, 0x71, 0xc8, 0x3d, + 0x75, 0xb5, 0x39, 0x80, 0xc6, 0x92, 0x5b, 0x49, 0x19, 0x2d, 0xa3, 0x72, 0xfd, 0x8a, 0x53, 0x5e, + 0x66, 0xbe, 0xcc, 0x2d, 0xd2, 0x9f, 0x15, 0xa0, 0xd2, 0x47, 0x04, 0x51, 0x7d, 0x2a, 0x1c, 0xa3, + 0x4f, 0xf7, 0x55, 0x9f, 0xf8, 0x3b, 0xe3, 0x85, 0xe3, 0x89, 0x39, 0xaf, 0xba, 0x5b, 0x7f, 0x5d, + 0x00, 0x92, 0x16, 0x75, 0xc9, 0xf7, 0x60, 0xac, 0x5e, 0x5f, 0x31, 0x5c, 0x18, 0x53, 0x97, 0x5b, + 0x31, 0x06, 0xb9, 0x7d, 0x2c, 0x9f, 0x45, 0xdd, 0x63, 0xf1, 0x93, 0x94, 0xa3, 0xe4, 0x40, 0x4f, + 0x47, 0xc9, 0x94, 0x9b, 0xe4, 0x72, 0x86, 0xe7, 0xdf, 0x60, 0x1f, 0xcf, 0xbf, 0xb4, 0x5b, 0x9f, + 0xb5, 0x04, 0xe5, 0x3c, 0x69, 0x19, 0x77, 0x38, 0x1e, 0x54, 0x4e, 0xbb, 0xa0, 0xe3, 0x3b, 0x9c, + 0x09, 0xb6, 0xde, 0x85, 0xb3, 0x8a, 0x9a, 0x67, 0xab, 0xd1, 0xa2, 0x39, 0x08, 0x15, 0x5b, 0x45, + 0x8d, 0x88, 0x01, 0xd6, 0x9f, 0x0e, 0xa6, 0x08, 0xeb, 0xdd, 0x83, 0x03, 0x27, 0x78, 0x4e, 0xaa, + 0x26, 0xe1, 0x40, 0x5f, 0xad, 0xa6, 0x36, 0xc8, 0x64, 0x4c, 0x8d, 0x3b, 0x3b, 0x17, 0x50, 0xc2, + 0xf0, 0x9a, 0x94, 0x5f, 0xed, 0x15, 0x79, 0xc4, 0x2a, 0x03, 0x48, 0x76, 0x61, 0x52, 0x9c, 0xdd, + 0xf8, 0x5b, 0x7e, 0x63, 0xb7, 0x93, 0xdf, 0x98, 0xd1, 0xbc, 0x9b, 0x06, 0x09, 0x5f, 0x8d, 0x26, + 0x1b, 0xf2, 0x05, 0x4c, 0x49, 0x49, 0x4d, 0x30, 0xe6, 0xce, 0x58, 0x77, 0x7a, 0x33, 0x36, 0x69, + 0x38, 0xe7, 0x04, 0x23, 0xd6, 0x64, 0xb9, 0xd9, 0x71, 0xce, 0x43, 0xc7, 0x69, 0xb2, 0x41, 0x22, + 0x9a, 0x6c, 0xc0, 0xe6, 0x3f, 0x05, 0x92, 0xee, 0x57, 0xbf, 0xcf, 0x69, 0x52, 0xfb, 0x9c, 0xe6, + 0xab, 0x30, 0x9d, 0xd1, 0x81, 0x13, 0xb1, 0xf8, 0x14, 0x48, 0xba, 0xa5, 0x27, 0xe1, 0x60, 0x5d, + 0x87, 0xd7, 0xd5, 0x10, 0xa8, 0xd5, 0x60, 0xf0, 0x94, 0x46, 0xf6, 0x5f, 0x2f, 0x42, 0xa5, 0x0f, + 0x2a, 0xf9, 0xfb, 0x85, 0xe4, 0x68, 0xf3, 0xd5, 0xf8, 0x7e, 0x72, 0xb4, 0xb3, 0xe9, 0x33, 0x86, + 0xbd, 0xf6, 0xc1, 0x6f, 0xfc, 0xc5, 0x0b, 0x6b, 0x1e, 0xe9, 0x29, 0x3b, 0xf9, 0x68, 0x0d, 0xea, + 0xa3, 0xb5, 0x0b, 0x33, 0x86, 0x5a, 0x78, 0x9c, 0xc3, 0xcb, 0x02, 0x10, 0x89, 0x73, 0xd7, 0xfc, + 0x3d, 0x91, 0xdf, 0xb7, 0x58, 0x2e, 0xd8, 0x1a, 0xd4, 0xba, 0x0b, 0xb3, 0x09, 0xbe, 0xc2, 0xf8, + 0xff, 0x3d, 0x50, 0x2f, 0xf7, 0x91, 0xf1, 0x40, 0xed, 0xcc, 0xcf, 0x0f, 0x2b, 0x93, 0x4c, 0xac, + 0xbf, 0x19, 0x27, 0x4f, 0x90, 0x7f, 0x59, 0xeb, 0xfa, 0xf5, 0x45, 0xb5, 0xad, 0x47, 0x34, 0x22, + 0x77, 0x60, 0x98, 0x43, 0x12, 0x21, 0xca, 0x75, 0x6c, 0xb1, 0x2f, 0x08, 0x44, 0x6b, 0x16, 0xdf, + 0x19, 0xe3, 0x8f, 0x6a, 0x1c, 0x17, 0xc3, 0xda, 0xe1, 0x29, 0x7b, 0x62, 0xb0, 0x0a, 0x83, 0x3e, + 0x58, 0x8d, 0xe3, 0x77, 0x48, 0x3f, 0x16, 0x89, 0xe7, 0xf9, 0xcf, 0xda, 0xb4, 0xc5, 0x73, 0x2d, + 0xd6, 0x26, 0x84, 0x8e, 0x3b, 0xe8, 0x30, 0x06, 0x48, 0x66, 0x7d, 0x02, 0xb3, 0x4c, 0x5a, 0x08, + 0x92, 0xf5, 0x61, 0xa2, 0x0e, 0x06, 0x33, 0x9f, 0x13, 0x38, 0x0c, 0x84, 0xcf, 0x09, 0x44, 0xa1, + 0xb5, 0x06, 0xe7, 0xb8, 0xf1, 0x53, 0xef, 0x52, 0x7c, 0xd5, 0x30, 0x84, 0xbf, 0x13, 0xaf, 0x54, + 0x33, 0x7a, 0xcf, 0xf1, 0xac, 0x8f, 0xf1, 0x19, 0x94, 0x58, 0xa8, 0xae, 0xef, 0xc5, 0x96, 0xce, + 0xe3, 0xbd, 0x9b, 0xfe, 0xdf, 0xe1, 0x42, 0xb5, 0xd3, 0xa1, 0x5e, 0x2b, 0x26, 0xdc, 0x0e, 0x9c, + 0x63, 0x46, 0xb5, 0x20, 0x55, 0x18, 0x42, 0x6c, 0x75, 0x07, 0x2c, 0x9a, 0x9b, 0xd1, 0x1c, 0xc4, + 0x13, 0x31, 0x6b, 0xb1, 0x02, 0x4e, 0x69, 0xb5, 0x60, 0xae, 0xde, 0x7d, 0x74, 0xe0, 0x46, 0xf8, + 0x08, 0x01, 0x23, 0xc3, 0xc8, 0xba, 0x57, 0x65, 0x96, 0x35, 0x3e, 0x18, 0xd7, 0xe3, 0xe7, 0x32, + 0xf8, 0x8e, 0x41, 0x44, 0x8b, 0x79, 0x7a, 0xe7, 0x66, 0x4c, 0x8a, 0x56, 0x1e, 0x5e, 0x0b, 0x16, + 0x8b, 0x4c, 0x6c, 0xd6, 0x34, 0x9c, 0xd1, 0xef, 0xbc, 0xf8, 0x0a, 0x99, 0x85, 0x69, 0xf3, 0x2e, + 0x8b, 0x83, 0xbf, 0x86, 0x19, 0x6e, 0x6b, 0xe7, 0x31, 0xe7, 0x17, 0xe2, 0xf0, 0xea, 0xc5, 0xdd, + 0x85, 0xc4, 0xeb, 0x07, 0x74, 0x8a, 0x56, 0xd9, 0x44, 0x76, 0x17, 0xf8, 0x53, 0xd6, 0xa7, 0x0b, + 0xc6, 0x6d, 0x6c, 0x71, 0x77, 0xa1, 0x36, 0x22, 0x62, 0xf7, 0x32, 0xee, 0x7c, 0xfa, 0xbf, 0x15, + 0xee, 0x0b, 0x18, 0x3d, 0x61, 0x85, 0x3a, 0xf8, 0xd2, 0x29, 0xfb, 0x0d, 0xfa, 0x14, 0x14, 0x55, + 0x70, 0xce, 0xa2, 0xdb, 0xb2, 0xfe, 0xb0, 0x00, 0xd7, 0xb9, 0x40, 0x96, 0x4d, 0x87, 0x17, 0x5b, + 0x39, 0xc4, 0xe4, 0x3d, 0x18, 0x0a, 0x35, 0x07, 0x0f, 0x4b, 0xb4, 0xbc, 0x17, 0x27, 0x4e, 0x40, + 0xaa, 0x30, 0xa1, 0x3f, 0xe8, 0x39, 0x5e, 0xdc, 0x3f, 0x7b, 0xfc, 0xe0, 0xb1, 0xa3, 0x1e, 0xf9, + 0x3c, 0x81, 0xf3, 0xcb, 0xdf, 0xb0, 0x05, 0x21, 0x4e, 0x28, 0xa1, 0x3d, 0xc4, 0x6f, 0x9c, 0x4f, + 0x6f, 0x8b, 0x15, 0x63, 0xaa, 0xf6, 0x49, 0x30, 0xd3, 0x93, 0xe5, 0x21, 0xa7, 0x44, 0xf8, 0x31, + 0xdb, 0x80, 0x59, 0x7f, 0x5a, 0x80, 0x0b, 0xd9, 0xb5, 0x89, 0x8d, 0x65, 0x15, 0xce, 0x2c, 0x3a, + 0x9e, 0xef, 0xb9, 0x4d, 0xa7, 0x5d, 0x6f, 0xee, 0xd3, 0x56, 0x57, 0x45, 0xf8, 0x55, 0xbb, 0xcc, + 0x1e, 0xf5, 0x24, 0xb9, 0x44, 0xb1, 0xd3, 0x54, 0x4c, 0x43, 0xc4, 0x37, 0x21, 0x7c, 0xef, 0x6d, + 0xd3, 0x40, 0xf1, 0xe3, 0x2d, 0xcb, 0x29, 0x25, 0xb7, 0xe5, 0xa5, 0x42, 0x6b, 0xc7, 0x73, 0x23, + 0x45, 0xc4, 0x4d, 0x3d, 0x59, 0x45, 0xd6, 0xbf, 0x29, 0xc0, 0x39, 0x4c, 0xea, 0x65, 0xa4, 0x09, + 0x8d, 0x03, 0x5d, 0xcb, 0x58, 0xcd, 0x05, 0xe3, 0x8d, 0x8b, 0x81, 0x6d, 0x06, 0x6d, 0x26, 0x6f, + 0xc2, 0x60, 0x5d, 0x3a, 0x9c, 0x4d, 0x25, 0x12, 0x3c, 0x0b, 0x0a, 0x56, 0x6e, 0x23, 0x16, 0xd3, + 0xe1, 0x97, 0x68, 0xd8, 0xa4, 0x1e, 0x66, 0xe2, 0xe6, 0x96, 0x07, 0x0d, 0x12, 0xc7, 0xa0, 0x1a, + 0xcc, 0x8b, 0x41, 0x35, 0x64, 0xc6, 0xa0, 0xb2, 0x9e, 0xf2, 0x94, 0x5e, 0xc9, 0x0e, 0x89, 0x49, + 0xfa, 0x38, 0x95, 0xb8, 0x9b, 0x9f, 0x03, 0x67, 0xb3, 0x7a, 0xc6, 0x84, 0xf4, 0x44, 0x4e, 0xee, + 0xfc, 0xc0, 0xd2, 0x5b, 0xf0, 0x9a, 0x81, 0x5b, 0x6d, 0xb7, 0xfd, 0x67, 0xb4, 0xb5, 0x15, 0xf8, + 0x07, 0x7e, 0x64, 0xa4, 0x34, 0x12, 0x99, 0xeb, 0xe3, 0x6b, 0x23, 0xb1, 0x2a, 0x13, 0x60, 0xeb, + 0x7f, 0x83, 0x6b, 0x7d, 0x38, 0x8a, 0x4e, 0xd5, 0xe1, 0x8c, 0x93, 0x28, 0x93, 0x9e, 0x43, 0xd7, + 0xb2, 0xfa, 0x95, 0x64, 0x14, 0xda, 0x69, 0xfa, 0x1b, 0xdb, 0x46, 0xb2, 0x6b, 0x52, 0x86, 0x99, + 0x2d, 0x7b, 0x73, 0x69, 0x67, 0x71, 0xbb, 0xb1, 0xfd, 0xc5, 0xd6, 0x72, 0x63, 0x67, 0xe3, 0xc1, + 0xc6, 0xe6, 0xc3, 0x0d, 0x1e, 0x99, 0xdd, 0x28, 0xd9, 0x5e, 0xae, 0xae, 0x97, 0x0a, 0x64, 0x06, + 0x4a, 0x06, 0x78, 0x79, 0xa7, 0x56, 0x2a, 0xde, 0xf8, 0xda, 0x48, 0xe2, 0x4c, 0x2e, 0x40, 0xb9, + 0xbe, 0xb3, 0xb5, 0xb5, 0x69, 0x2b, 0xae, 0x7a, 0x5c, 0xf8, 0x59, 0x38, 0x63, 0x94, 0xde, 0xb5, + 0x97, 0x97, 0x4b, 0x05, 0xd6, 0x14, 0x03, 0xbc, 0x65, 0x2f, 0xaf, 0xaf, 0xee, 0xac, 0x97, 0x8a, + 0x37, 0x1a, 0xfa, 0xc3, 0x3a, 0x72, 0x1e, 0xe6, 0x96, 0x96, 0x77, 0x57, 0x17, 0x97, 0xb3, 0x78, + 0xcf, 0x40, 0x49, 0x2f, 0xdc, 0xde, 0xdc, 0xde, 0xe2, 0xac, 0x75, 0xe8, 0xc3, 0xe5, 0x5a, 0x75, + 0x67, 0x7b, 0x65, 0xa3, 0x34, 0x60, 0x0d, 0x8e, 0x16, 0x4b, 0xc5, 0x1b, 0x3f, 0x32, 0x5e, 0xdd, + 0xb1, 0xe6, 0x0b, 0xf4, 0x9d, 0x7a, 0xf5, 0x5e, 0x7e, 0x15, 0xbc, 0x74, 0xfd, 0x6e, 0xb5, 0x54, + 0x20, 0x17, 0xe1, 0x9c, 0x01, 0xdd, 0xaa, 0xd6, 0xeb, 0x0f, 0x37, 0xed, 0xa5, 0xb5, 0xe5, 0x7a, + 0xbd, 0x54, 0xbc, 0xb1, 0x6b, 0xc4, 0xdd, 0x63, 0x35, 0xac, 0xdf, 0xad, 0x36, 0xec, 0xe5, 0xcf, + 0x76, 0x56, 0xed, 0xe5, 0xa5, 0x74, 0x0d, 0x46, 0xe9, 0x17, 0xcb, 0xf5, 0x52, 0x81, 0x4c, 0xc3, + 0x69, 0x03, 0xba, 0xb1, 0x59, 0x2a, 0xde, 0x78, 0x5d, 0x84, 0x66, 0x23, 0x53, 0x00, 0x4b, 0xcb, + 0xf5, 0xc5, 0xe5, 0x8d, 0xa5, 0xd5, 0x8d, 0x7b, 0xa5, 0x53, 0x64, 0x12, 0xc6, 0xaa, 0xea, 0x67, + 0xe1, 0xc6, 0x07, 0x70, 0x3a, 0xa1, 0xde, 0x33, 0x0c, 0xa5, 0x18, 0x97, 0x4e, 0xe1, 0xf0, 0xcb, + 0x9f, 0x68, 0x63, 0xe5, 0x9a, 0x7a, 0xa9, 0x70, 0xa3, 0x26, 0xf3, 0xfe, 0x6a, 0xdf, 0x39, 0x19, + 0x87, 0x91, 0xa5, 0xe5, 0xbb, 0xd5, 0x9d, 0xb5, 0xed, 0xd2, 0x29, 0xf6, 0x63, 0xd1, 0x5e, 0xae, + 0x6e, 0x2f, 0x2f, 0x95, 0x0a, 0x64, 0x0c, 0x86, 0xea, 0xdb, 0xd5, 0xed, 0xe5, 0x52, 0x91, 0x8c, + 0xc2, 0xe0, 0x4e, 0x7d, 0xd9, 0x2e, 0x0d, 0x2c, 0xfc, 0xfe, 0x3f, 0x28, 0x70, 0x43, 0xa3, 0x7c, + 0xc1, 0xf5, 0xb5, 0xa6, 0x50, 0x8a, 0x2d, 0x4f, 0x24, 0x39, 0xcd, 0xd5, 0x1e, 0x51, 0x0a, 0x98, + 0xef, 0x71, 0xb9, 0x83, 0x08, 0xd7, 0x0b, 0xb7, 0x0b, 0xc4, 0x46, 0x67, 0x98, 0x84, 0x7e, 0xa5, + 0x38, 0x67, 0xab, 0xc0, 0xf3, 0x17, 0x7b, 0xaa, 0x65, 0xe4, 0x57, 0xc0, 0xd2, 0x79, 0xe6, 0x68, + 0x21, 0xdf, 0x3b, 0x9e, 0xb6, 0x21, 0xeb, 0x7c, 0xfd, 0x78, 0xe8, 0xe4, 0x3e, 0x4c, 0x32, 0xd9, + 0x5c, 0xa1, 0x91, 0xf3, 0x49, 0x42, 0x4d, 0x25, 0x98, 0xbf, 0x90, 0x5d, 0xa8, 0xf2, 0x10, 0x4d, + 0x60, 0x47, 0xb8, 0x72, 0x1d, 0x12, 0x19, 0xbe, 0x43, 0x42, 0xf8, 0x8e, 0x3f, 0x7f, 0x26, 0x01, + 0xde, 0xbd, 0x73, 0xbb, 0x40, 0xea, 0x18, 0x3b, 0xcf, 0x10, 0xf2, 0x89, 0x7c, 0x52, 0x98, 0x96, + 0xfe, 0x79, 0x6b, 0x2a, 0x2a, 0x6b, 0x68, 0x8e, 0x76, 0xb0, 0x01, 0x24, 0x2d, 0x3b, 0x93, 0xcb, + 0xf1, 0x3a, 0xc8, 0x16, 0xab, 0xe7, 0xcf, 0xa6, 0x2e, 0xb2, 0x96, 0x99, 0xf4, 0x44, 0x96, 0x61, + 0x4a, 0xbc, 0xcd, 0x17, 0xd2, 0x3c, 0xe9, 0xa5, 0x0f, 0xe4, 0xb2, 0xb9, 0x87, 0xe3, 0xa4, 0x34, + 0x02, 0x32, 0x1f, 0xf7, 0x23, 0xa9, 0x26, 0xcc, 0x9f, 0xcf, 0x2c, 0x13, 0xfd, 0xbb, 0x0b, 0x53, + 0xa6, 0x72, 0x41, 0xe4, 0x04, 0x65, 0xea, 0x1c, 0xb9, 0x0d, 0x6a, 0xc0, 0xdc, 0xba, 0xe3, 0xe2, + 0x7d, 0x89, 0x70, 0xd2, 0x93, 0x7e, 0x70, 0xa4, 0xd2, 0xc3, 0x31, 0xae, 0x4e, 0xbd, 0x96, 0x9a, + 0x84, 0xbc, 0x9c, 0x02, 0xf8, 0xd9, 0xd4, 0xa5, 0x8c, 0x6c, 0xfa, 0x28, 0x12, 0xcb, 0xcc, 0x04, + 0x9d, 0xe5, 0x76, 0x3a, 0x9f, 0xe7, 0x29, 0x4d, 0xd6, 0x51, 0x48, 0x4f, 0x70, 0xd4, 0xd6, 0xc4, + 0x89, 0xd9, 0x95, 0x31, 0x42, 0x84, 0x96, 0x9e, 0x5f, 0x14, 0x86, 0x24, 0x67, 0xe0, 0x72, 0x99, + 0xdd, 0x2e, 0x90, 0xaf, 0xf1, 0xab, 0xce, 0x64, 0xf7, 0xd0, 0x8d, 0xf6, 0x85, 0xf4, 0x73, 0x3e, + 0x93, 0x81, 0xf8, 0x50, 0x7a, 0x70, 0xb7, 0x61, 0x26, 0xcb, 0x39, 0x5b, 0x0d, 0x68, 0x0f, 0xcf, + 0xed, 0xdc, 0x55, 0x60, 0x33, 0x55, 0xa3, 0x95, 0x3f, 0x49, 0x3d, 0x7c, 0x83, 0x73, 0x79, 0x7e, + 0x04, 0x53, 0x6c, 0x95, 0x3c, 0xa0, 0xb4, 0x53, 0x6d, 0xbb, 0x4f, 0x69, 0x48, 0x64, 0xe0, 0x63, + 0x05, 0xca, 0xa3, 0xbd, 0x5e, 0x20, 0xdf, 0x85, 0xf1, 0x87, 0x4e, 0xd4, 0xdc, 0x17, 0x01, 0x40, + 0x65, 0x7c, 0x50, 0x84, 0xcd, 0xcb, 0x5f, 0x58, 0x78, 0xbb, 0x40, 0x7e, 0x00, 0x23, 0xf7, 0x68, + 0x84, 0x4f, 0xba, 0xaf, 0x28, 0x5f, 0x42, 0x6e, 0x9f, 0x5c, 0xf5, 0xd4, 0x2b, 0x24, 0xd9, 0xe0, + 0xa4, 0x31, 0x97, 0xdc, 0x02, 0xe0, 0x1b, 0x02, 0x72, 0x48, 0x16, 0xcf, 0xa7, 0x9a, 0x4d, 0xee, + 0x31, 0xe1, 0xa1, 0x4d, 0x23, 0x7a, 0xdc, 0x2a, 0xf3, 0xc6, 0x68, 0x0d, 0xa6, 0x54, 0xea, 0xa6, + 0x0d, 0x8c, 0xd3, 0x62, 0x25, 0x98, 0x85, 0x27, 0xe0, 0xf6, 0x01, 0xfb, 0x2a, 0x78, 0xde, 0x62, + 0x0c, 0xe8, 0x81, 0x3b, 0xe9, 0x9c, 0x1e, 0x15, 0x44, 0xdf, 0x42, 0xe5, 0x20, 0x72, 0x34, 0x8d, 0x76, 0xc5, 0x0f, 0x23, 0x93, 0x56, 0x41, 0xb2, 0x69, 0x7f, 0x19, 0xe6, 0xf5, 0x7a, 0xcd, 0x08, - 0xd4, 0xf1, 0x9a, 0x9b, 0x17, 0xd8, 0x7a, 0xfe, 0x4a, 0x0f, 0x0c, 0x71, 0x7e, 0x1b, 0xf8, 0xad, - 0x62, 0x01, 0x97, 0x93, 0x25, 0x98, 0x96, 0x75, 0x6d, 0x76, 0xa8, 0x57, 0xaf, 0xaf, 0x60, 0x9a, - 0x1e, 0xe9, 0xb9, 0xa2, 0xc1, 0x24, 0x77, 0x92, 0x2e, 0x62, 0x5b, 0x9f, 0x11, 0xb8, 0x83, 0xf4, - 0x0a, 0xe7, 0x11, 0x6f, 0x7d, 0x99, 0xa1, 0x91, 0x1f, 0x70, 0xa3, 0x92, 0xa1, 0xfc, 0xef, 0x2e, - 0x90, 0x1e, 0x07, 0xa0, 0xf9, 0x9c, 0x23, 0xc4, 0xed, 0x02, 0xf9, 0x02, 0x48, 0xfa, 0x48, 0xa2, - 0x44, 0x98, 0x7b, 0xfc, 0x52, 0x22, 0xec, 0x71, 0x9e, 0xb9, 0x07, 0xb3, 0x2a, 0x6c, 0x8f, 0x56, - 0xeb, 0x02, 0xc9, 0x69, 0x4d, 0x5e, 0x2b, 0xc9, 0x27, 0x30, 0x2d, 0x26, 0xad, 0x5e, 0x40, 0x4a, - 0x6a, 0xfd, 0x11, 0xa7, 0x92, 0xdc, 0x79, 0x7a, 0x1f, 0x66, 0xeb, 0x09, 0x89, 0x71, 0x67, 0xfe, - 0x73, 0x26, 0x0b, 0x04, 0xd6, 0x69, 0xc4, 0x45, 0x96, 0xcd, 0xeb, 0x01, 0x10, 0x6e, 0x14, 0x92, - 0xec, 0x9e, 0xba, 0xf4, 0x19, 0xb9, 0x98, 0x68, 0x3a, 0x03, 0x22, 0x1a, 0x2e, 0x60, 0xb9, 0x3d, - 0xdb, 0xe6, 0x59, 0xb7, 0x11, 0x6a, 0xdc, 0xa3, 0x5f, 0x36, 0x08, 0x8c, 0xab, 0x78, 0x31, 0x00, - 0xe7, 0x72, 0x31, 0xc8, 0xaf, 0x61, 0xbc, 0xdc, 0xde, 0xc7, 0x2a, 0xf2, 0xdd, 0xac, 0xd3, 0x6f, - 0xce, 0xc1, 0x70, 0xfe, 0xcd, 0xe3, 0x21, 0xab, 0x83, 0xec, 0xe4, 0x3d, 0x1a, 0x6d, 0xb5, 0xbb, - 0x7b, 0x2e, 0xe6, 0x63, 0x25, 0xca, 0x68, 0xa4, 0x40, 0x62, 0x5e, 0xca, 0x30, 0x75, 0x71, 0x41, - 0x9d, 0xfe, 0x98, 0xac, 0x42, 0x89, 0xaf, 0xff, 0x1a, 0x8b, 0x8b, 0x29, 0x16, 0x02, 0xc5, 0x09, - 0x9c, 0x83, 0x30, 0x77, 0xb4, 0x6e, 0x71, 0xdf, 0x28, 0x22, 0xbf, 0x49, 0x5d, 0xc1, 0x9c, 0x36, - 0x60, 0x2a, 0x87, 0x00, 0x1b, 0x11, 0x9b, 0x86, 0x34, 0x92, 0x81, 0x79, 0x78, 0x36, 0xde, 0xab, - 0xf1, 0x66, 0x9f, 0x2e, 0x8d, 0x3f, 0xfd, 0x44, 0x10, 0xb9, 0xdd, 0xb7, 0x88, 0xca, 0x50, 0x9c, - 0xc1, 0xf4, 0x75, 0x43, 0x27, 0x39, 0x19, 0xdf, 0xb7, 0x71, 0x0f, 0xc2, 0x60, 0x44, 0xb3, 0x71, - 0xdb, 0xd8, 0x6f, 0x49, 0x35, 0xa9, 0x51, 0xed, 0x2e, 0xe0, 0x92, 0xc6, 0x36, 0x49, 0xa6, 0xc2, - 0x76, 0x83, 0x80, 0x7a, 0x9c, 0x38, 0x4f, 0xdf, 0xc8, 0xa2, 0xfe, 0x18, 0x97, 0x1e, 0x8d, 0x9a, - 0xbf, 0x39, 0xec, 0xc7, 0x82, 0x67, 0x8f, 0xba, 0x5d, 0x20, 0xef, 0xc1, 0xa8, 0x68, 0x23, 0x23, - 0x32, 0x1a, 0x1d, 0xf6, 0x68, 0x35, 0x52, 0x02, 0x17, 0x12, 0xb6, 0xd9, 0xc4, 0xc9, 0x1b, 0x7d, - 0xde, 0xe6, 0xf7, 0xd8, 0x66, 0xdb, 0x7a, 0x11, 0xca, 0x45, 0xb9, 0xeb, 0x22, 0x65, 0x59, 0x05, - 0xb0, 0x91, 0xa0, 0x3e, 0xdb, 0x23, 0x67, 0xc2, 0xf4, 0x66, 0x8c, 0x02, 0xa9, 0x82, 0xb9, 0x29, - 0xbd, 0xd9, 0x00, 0xf7, 0xdb, 0x6b, 0x57, 0xa1, 0x54, 0x6d, 0xe2, 0x4e, 0x50, 0xa7, 0x07, 0x4e, - 0x67, 0xdf, 0x0f, 0xa8, 0x3a, 0xb4, 0x24, 0x0b, 0x24, 0xaf, 0x59, 0xa5, 0x59, 0x88, 0x82, 0x35, - 0xea, 0x60, 0xa8, 0xec, 0x39, 0xa5, 0x5a, 0x24, 0x8a, 0xb2, 0x29, 0x7a, 0x1c, 0x52, 0x66, 0x16, - 0xd9, 0xb1, 0xaa, 0xfd, 0x72, 0x6c, 0x3e, 0xc0, 0x05, 0x43, 0x21, 0x87, 0x6a, 0x87, 0x50, 0x20, - 0x75, 0x9c, 0x93, 0xcf, 0x8f, 0x14, 0x6a, 0x55, 0xde, 0x1b, 0xc7, 0x62, 0xc9, 0xa3, 0xce, 0xab, - 0xfe, 0xfb, 0x30, 0xb5, 0xcc, 0x16, 0xf4, 0x6e, 0xcb, 0xe5, 0xe9, 0x01, 0x88, 0x19, 0xef, 0x3d, - 0x97, 0x70, 0x45, 0x26, 0x6c, 0x43, 0x52, 0x71, 0xf4, 0x97, 0x7b, 0x8a, 0x06, 0x93, 0xe3, 0x31, - 0x23, 0xd9, 0x8a, 0x0c, 0x0d, 0x78, 0x34, 0x17, 0x67, 0xfd, 0x39, 0xae, 0x11, 0x56, 0x3b, 0x9d, - 0xb6, 0x34, 0x49, 0xf3, 0xbb, 0xf7, 0x6b, 0xc6, 0x11, 0x32, 0x55, 0x2e, 0x79, 0xa7, 0x95, 0xc6, - 0xcf, 0xb5, 0x04, 0xca, 0x39, 0x3c, 0x73, 0xca, 0xfb, 0xcd, 0x45, 0x15, 0xd0, 0xbb, 0xda, 0x6e, - 0xa7, 0x88, 0x43, 0xf2, 0x86, 0xc9, 0x3d, 0x0b, 0xa7, 0x5f, 0x0d, 0x78, 0x44, 0xe7, 0x5a, 0x57, - 0xb5, 0xd3, 0xe1, 0x8b, 0xe5, 0x25, 0xb5, 0x60, 0x98, 0x05, 0xe9, 0x23, 0x7a, 0xb2, 0x5c, 0xac, - 0xed, 0xf7, 0x71, 0x9a, 0xc5, 0x59, 0x96, 0x89, 0x7e, 0xe0, 0x4d, 0x26, 0x99, 0x56, 0x4a, 0x58, - 0xa2, 0x50, 0xed, 0x13, 0xa7, 0x51, 0xf5, 0x89, 0x53, 0x36, 0x2b, 0xcb, 0x4c, 0x02, 0x2e, 0xf9, - 0x5d, 0xca, 0x2b, 0x56, 0x96, 0xd2, 0x52, 0x32, 0x93, 0xbd, 0xea, 0x72, 0x3a, 0xc5, 0xbd, 0xd9, - 0xe5, 0xdc, 0x14, 0xf8, 0xf7, 0xa1, 0x94, 0x4c, 0xa2, 0xad, 0x98, 0xe6, 0x64, 0xd7, 0xce, 0x1d, - 0x93, 0xbb, 0x30, 0xa3, 0x8f, 0xa8, 0xea, 0x77, 0xde, 0xea, 0x9f, 0xc7, 0x67, 0x1b, 0x66, 0x33, - 0x73, 0x5e, 0xab, 0x2d, 0xb6, 0x57, 0x46, 0xec, 0x5c, 0xae, 0x14, 0xce, 0x66, 0xa7, 0xbd, 0x27, - 0xaf, 0x99, 0x07, 0xff, 0xec, 0x24, 0xe0, 0xf3, 0xd7, 0xfa, 0x60, 0x09, 0x81, 0x7e, 0x8d, 0x3b, - 0x60, 0xaa, 0x8e, 0x2b, 0x9a, 0x29, 0x20, 0xa7, 0x02, 0xab, 0x17, 0x8a, 0x9a, 0x03, 0x33, 0x19, - 0xc5, 0xf9, 0x22, 0xbe, 0x9a, 0xcf, 0x33, 0x9e, 0x58, 0xbb, 0x32, 0x6e, 0x75, 0xae, 0x64, 0x7a, - 0xa6, 0x47, 0xef, 0x71, 0x96, 0x9c, 0x57, 0xf3, 0xe1, 0xf8, 0x4d, 0xce, 0xe3, 0xd6, 0x52, 0x66, - 0x1b, 0x23, 0x77, 0x79, 0xd2, 0x6c, 0x93, 0x95, 0x73, 0x5d, 0x89, 0xa1, 0x57, 0x56, 0x7f, 0xbe, - 0x1b, 0x7f, 0xc5, 0xed, 0x38, 0x66, 0x15, 0xba, 0x1d, 0x27, 0x93, 0xff, 0xe5, 0x7c, 0x04, 0x9d, - 0xb9, 0xc3, 0x2f, 0x6d, 0x13, 0xc9, 0xd7, 0x89, 0x7e, 0x54, 0xca, 0x4e, 0xcc, 0xae, 0xe6, 0x46, - 0x26, 0x8a, 0x5e, 0xc5, 0x43, 0xf9, 0x0d, 0xe6, 0x48, 0xa9, 0x47, 0x66, 0xfa, 0xde, 0x6a, 0xca, - 0x26, 0x94, 0xe3, 0xc1, 0x4c, 0x74, 0xe0, 0x84, 0x43, 0x29, 0x85, 0x71, 0x2e, 0x37, 0x1f, 0x3d, - 0xf9, 0x4e, 0xea, 0x4b, 0xcf, 0x11, 0x4c, 0xcf, 0x2a, 0xf8, 0x7a, 0xae, 0xc5, 0xc1, 0x3e, 0x1f, - 0x1b, 0x71, 0xf5, 0xd4, 0xf5, 0xa9, 0xf5, 0x3c, 0x23, 0xaf, 0xfd, 0x3d, 0xd4, 0x8b, 0xb5, 0xdc, - 0xf4, 0xb9, 0xbd, 0xbe, 0x98, 0xc5, 0x27, 0x4c, 0xaf, 0xb8, 0x5a, 0xbb, 0xa4, 0x9e, 0x96, 0x2c, - 0x38, 0xc9, 0x8a, 0x7b, 0x9c, 0xa6, 0xe5, 0xf1, 0x59, 0x82, 0x71, 0x2d, 0xa9, 0x3d, 0x39, 0x67, - 0x88, 0xc9, 0xd8, 0x43, 0xe7, 0x8d, 0xce, 0x99, 0xdb, 0xe7, 0x22, 0x9a, 0x92, 0x55, 0x6a, 0xfc, - 0xdc, 0x56, 0x9c, 0x4f, 0xf3, 0x30, 0xcc, 0xc8, 0x4a, 0x0a, 0xbc, 0x35, 0x17, 0x92, 0xc2, 0x31, - 0x1a, 0x94, 0xdf, 0x25, 0xa2, 0x8b, 0xa6, 0x4f, 0x93, 0xf2, 0xf5, 0xd7, 0x69, 0x91, 0x39, 0x17, - 0x93, 0xd7, 0xc8, 0x40, 0x87, 0x67, 0x95, 0x4d, 0x4c, 0x83, 0xa2, 0x81, 0x22, 0x9b, 0xcd, 0x16, - 0x3e, 0x1f, 0xc9, 0xc8, 0xf2, 0xaf, 0x56, 0xd8, 0xec, 0xe2, 0x7c, 0xdd, 0x4d, 0xad, 0xd9, 0xb9, - 0x1c, 0x7b, 0xa6, 0xfd, 0xcf, 0x6d, 0xe9, 0x0f, 0xb5, 0x35, 0x3b, 0x95, 0xcb, 0x9f, 0x5c, 0x4f, - 0x2a, 0x6e, 0x79, 0xe9, 0xfe, 0x7b, 0xec, 0x09, 0x33, 0xe9, 0xdc, 0xf3, 0x86, 0x5d, 0x37, 0x5d, - 0x98, 0x2f, 0x05, 0x5b, 0xce, 0xff, 0x1c, 0x6e, 0x59, 0x85, 0xfd, 0x5a, 0xf8, 0xa5, 0xb6, 0xd0, - 0x25, 0x92, 0xf7, 0xab, 0xe3, 0x78, 0x9f, 0xec, 0xfe, 0xb9, 0xbc, 0x37, 0xf0, 0x49, 0x53, 0x3a, - 0xf3, 0xbe, 0xd2, 0x6c, 0x7a, 0xe5, 0xe5, 0xcf, 0x34, 0xfb, 0xce, 0xa6, 0xbb, 0xc8, 0xf8, 0x9d, - 0x4d, 0x18, 0x6d, 0xfb, 0x35, 0xec, 0x6b, 0xb9, 0x18, 0x67, 0x64, 0xec, 0x4f, 0x2c, 0xc6, 0xf9, - 0x39, 0xfd, 0x7b, 0x1c, 0x83, 0x4e, 0xd7, 0xdd, 0x3d, 0x4f, 0x4b, 0xb8, 0xaf, 0x0e, 0x41, 0x46, - 0x12, 0x7e, 0x73, 0x89, 0xc9, 0xca, 0xcf, 0xbf, 0xc9, 0xf4, 0x1f, 0xae, 0xbd, 0xeb, 0xa9, 0xd3, - 0xc9, 0x7c, 0x7e, 0xc6, 0x78, 0xb5, 0xdc, 0x64, 0xe6, 0x5a, 0xd7, 0x18, 0xea, 0x79, 0xcb, 0x15, - 0xc3, 0x8c, 0x14, 0xea, 0x8a, 0x61, 0x66, 0xa2, 0xf3, 0x5b, 0x68, 0x75, 0xb1, 0xfd, 0x36, 0xd5, - 0xad, 0x2e, 0x5a, 0x22, 0xec, 0x84, 0xd1, 0x83, 0x7c, 0x0c, 0x63, 0x2a, 0x51, 0xb8, 0xb2, 0x6f, - 0x27, 0x73, 0x95, 0xcf, 0x97, 0xd3, 0x05, 0xa2, 0xc2, 0x77, 0xa4, 0xe1, 0x03, 0xeb, 0x2c, 0x9b, - 0x06, 0xa3, 0xfc, 0x6a, 0xdf, 0x91, 0x56, 0x0f, 0x83, 0x2c, 0x95, 0x26, 0x3c, 0x49, 0xf6, 0x7d, - 0x98, 0x88, 0x53, 0x82, 0xef, 0x2e, 0x68, 0x84, 0x89, 0x3c, 0xe1, 0x49, 0xc2, 0xf7, 0xe4, 0x95, - 0x06, 0xd6, 0x67, 0x16, 0xf6, 0xde, 0xc5, 0x3f, 0x96, 0x56, 0x16, 0xa3, 0xa5, 0xa9, 0x04, 0xe3, - 0x3d, 0x16, 0xdf, 0x09, 0x3d, 0x47, 0xa7, 0x1a, 0xda, 0x8c, 0x2c, 0xbb, 0x6a, 0x68, 0xb3, 0xb2, - 0xe4, 0xc6, 0x26, 0xff, 0x2f, 0xa4, 0x49, 0x21, 0x66, 0x7a, 0xd1, 0x68, 0x56, 0x8a, 0xef, 0xa5, - 0xbc, 0xe2, 0x24, 0xeb, 0x3a, 0x94, 0x92, 0x09, 0x45, 0xd5, 0x79, 0x2c, 0x27, 0xf3, 0xab, 0x3a, - 0xe4, 0xe5, 0x66, 0x22, 0xdd, 0x92, 0xf6, 0x71, 0x93, 0xef, 0x95, 0xec, 0x46, 0xe9, 0xac, 0xf3, - 0x0d, 0xe6, 0x93, 0x46, 0x6e, 0x51, 0xfd, 0xa4, 0x9c, 0xca, 0x5d, 0xaa, 0x6b, 0x56, 0x19, 0xe9, - 0x48, 0x5d, 0x19, 0xb4, 0x2a, 0x3b, 0x0d, 0xfc, 0x1b, 0xe6, 0x11, 0xb6, 0x47, 0x20, 0xfa, 0xbe, - 0xd7, 0xbf, 0xe4, 0x97, 0x60, 0x2e, 0x27, 0xb0, 0x36, 0xb9, 0x96, 0xb0, 0xb4, 0x66, 0x07, 0xde, - 0x56, 0x13, 0x24, 0x33, 0xe9, 0xf7, 0x3a, 0xfa, 0x0d, 0x18, 0x21, 0x24, 0x52, 0x77, 0x71, 0x0f, - 0xdd, 0x68, 0x9f, 0xe7, 0xb6, 0xd6, 0x96, 0xcd, 0xcc, 0xd8, 0x13, 0xa4, 0x8e, 0x67, 0x11, 0x03, - 0x9a, 0x71, 0x1d, 0x97, 0xc1, 0x70, 0x3e, 0x9b, 0x21, 0x5b, 0x3b, 0xd8, 0x5c, 0xc8, 0x88, 0xef, - 0xa1, 0xe6, 0x42, 0x7e, 0xec, 0x8f, 0xdc, 0x66, 0x6e, 0x49, 0x1d, 0x29, 0x9b, 0x63, 0x7e, 0xa8, - 0x8f, 0x5c, 0x8e, 0xf7, 0x19, 0xc7, 0x54, 0xf4, 0x0e, 0x92, 0x83, 0xde, 0x7b, 0xf5, 0xb0, 0xe5, - 0x96, 0x6b, 0x52, 0x2d, 0x68, 0xed, 0xcb, 0x8b, 0x13, 0x92, 0xdb, 0xbe, 0x65, 0xf9, 0x3d, 0x65, - 0xb7, 0xef, 0xb8, 0x9b, 0xae, 0xba, 0xff, 0x4a, 0x04, 0x90, 0x31, 0x3a, 0xaa, 0xc1, 0xe7, 0x73, - 0xe0, 0x64, 0x03, 0x1d, 0x81, 0x92, 0x50, 0xed, 0x50, 0x9a, 0x1d, 0xa1, 0x26, 0x97, 0x1f, 0x9f, - 0xc7, 0x46, 0x84, 0x8f, 0x93, 0xcc, 0xe3, 0x44, 0x68, 0x10, 0x31, 0x8f, 0x0d, 0xe8, 0xc9, 0xe6, - 0x71, 0x82, 0xa1, 0x39, 0x8f, 0x93, 0xcd, 0x4c, 0x9e, 0xf4, 0x73, 0x47, 0x35, 0xd9, 0x4c, 0x35, - 0x8f, 0xb3, 0x39, 0xe6, 0x47, 0x62, 0xc9, 0xe5, 0xa8, 0xe6, 0xb1, 0xc9, 0x31, 0x07, 0xfd, 0x98, - 0xf3, 0x38, 0x59, 0x89, 0x39, 0x8f, 0x4f, 0xd4, 0x3e, 0x35, 0x8f, 0xb3, 0xdb, 0x77, 0xe2, 0x79, - 0x9c, 0x08, 0x5d, 0x64, 0x74, 0x34, 0x6b, 0x1e, 0x27, 0xf1, 0xf9, 0x3c, 0x4e, 0x42, 0x13, 0xc6, - 0x95, 0x1e, 0xf3, 0x38, 0x49, 0xf9, 0x19, 0xf2, 0x4b, 0x84, 0x5d, 0x39, 0xce, 0x4c, 0xce, 0x8d, - 0xd8, 0x42, 0x1e, 0xa2, 0x79, 0x2f, 0x01, 0x3f, 0xde, 0x6c, 0xbe, 0x90, 0xc7, 0x14, 0xe7, 0xf3, - 0xae, 0x14, 0x62, 0xb2, 0xb9, 0xa6, 0xed, 0x2a, 0x3b, 0xea, 0x4c, 0x8f, 0x06, 0xef, 0xb2, 0x79, - 0xd3, 0xea, 0xc1, 0xb7, 0x57, 0xd0, 0x9c, 0x1e, 0x7c, 0xd5, 0x51, 0x26, 0xc9, 0x37, 0x97, 0xa4, - 0xf7, 0xfc, 0xfe, 0x5c, 0x5e, 0x70, 0x24, 0xe9, 0x16, 0x12, 0x87, 0xa3, 0x13, 0xb7, 0x54, 0x1d, - 0x92, 0x92, 0x2d, 0x3d, 0xe9, 0x3c, 0x5f, 0x97, 0xda, 0x43, 0x2a, 0xda, 0x56, 0xa2, 0xd3, 0xfa, - 0x5c, 0xcf, 0x2d, 0x21, 0xdb, 0x68, 0xcb, 0x4d, 0xc3, 0x35, 0x3b, 0x70, 0x5e, 0x58, 0xaf, 0xbe, - 0x5c, 0x53, 0x71, 0x83, 0x74, 0xae, 0x79, 0x41, 0x85, 0x14, 0xd7, 0x34, 0xf5, 0x27, 0x68, 0xfd, - 0x12, 0x2f, 0xae, 0xbc, 0xc7, 0x7e, 0xbe, 0x25, 0x65, 0xda, 0x70, 0x56, 0x62, 0xb8, 0xe8, 0x23, - 0xf6, 0x91, 0xb8, 0xc1, 0x93, 0xc0, 0x5c, 0xe1, 0x67, 0xd1, 0x93, 0x4f, 0xa0, 0x24, 0x96, 0xb7, - 0x98, 0x41, 0x16, 0x62, 0xee, 0xd0, 0xd5, 0xa4, 0xd1, 0xed, 0x18, 0x2d, 0x38, 0x8e, 0xb1, 0xed, - 0x38, 0x92, 0xc8, 0xb7, 0x4c, 0xb1, 0xed, 0x70, 0x3b, 0xe8, 0x86, 0x11, 0x6d, 0xa5, 0x2d, 0x4a, - 0x66, 0x63, 0xa4, 0x67, 0x84, 0x89, 0xbe, 0xbb, 0x40, 0x56, 0x71, 0x6d, 0x33, 0xc1, 0xbd, 0x4c, - 0x6e, 0xd9, 0x6c, 0x70, 0xe9, 0x59, 0x57, 0xcf, 0x7a, 0xcc, 0x36, 0xe5, 0xd5, 0x9d, 0xdb, 0x28, - 0x69, 0x75, 0x3d, 0x9b, 0xc5, 0x6e, 0x77, 0xe1, 0xe4, 0x0c, 0x63, 0x99, 0x1f, 0x53, 0x5c, 0x79, - 0x32, 0xff, 0x10, 0xfd, 0x0a, 0xb8, 0x3d, 0xb1, 0x9f, 0xa8, 0x93, 0x2f, 0x97, 0xc8, 0xa7, 0x30, - 0x26, 0x89, 0xfb, 0x4b, 0x38, 0x49, 0x8d, 0x12, 0x5e, 0x82, 0x49, 0xe3, 0x59, 0x96, 0x3a, 0x2e, - 0x65, 0x3d, 0xd6, 0xea, 0x31, 0x71, 0x26, 0x8d, 0xe7, 0x57, 0x8a, 0x4b, 0xd6, 0xa3, 0xac, 0x5c, - 0x2e, 0x3f, 0x80, 0x71, 0x21, 0xd2, 0x9e, 0xd2, 0xc8, 0x37, 0xe0, 0xcd, 0x6a, 0x2e, 0xce, 0xdd, - 0x96, 0x1b, 0x2d, 0xfa, 0xde, 0x63, 0x77, 0xaf, 0xaf, 0x60, 0xd2, 0x24, 0xbb, 0x0b, 0xe4, 0x2b, - 0x4c, 0x2d, 0x2d, 0x13, 0x7e, 0xd3, 0xe8, 0x99, 0x1f, 0x3c, 0x71, 0xbd, 0xbd, 0x3e, 0x2c, 0x2f, - 0x9b, 0x2c, 0x93, 0x74, 0x72, 0x22, 0x7e, 0x05, 0xf3, 0xf5, 0x7c, 0xe6, 0x7d, 0x99, 0xf4, 0xde, - 0xaf, 0xea, 0x70, 0x01, 0xdd, 0x71, 0x4e, 0xda, 0xf6, 0x9e, 0x4c, 0xbf, 0xe0, 0x11, 0x20, 0xa5, - 0xf1, 0xbf, 0xe9, 0x07, 0xad, 0xfe, 0x1c, 0x2b, 0xa6, 0x67, 0x6e, 0x82, 0x4c, 0x0a, 0xe3, 0x0b, - 0x38, 0x57, 0xcf, 0x65, 0xdd, 0x8f, 0x45, 0x3f, 0xd5, 0xf4, 0x3c, 0x8a, 0xe2, 0x84, 0xed, 0xee, - 0xc9, 0x73, 0x15, 0x17, 0x49, 0xb6, 0xb1, 0x6d, 0x05, 0xf4, 0x31, 0x0d, 0xd0, 0xff, 0xbb, 0x9f, - 0xe7, 0xb3, 0x89, 0x2e, 0x7b, 0xbe, 0x0a, 0x67, 0xea, 0x29, 0x56, 0x79, 0x24, 0xfd, 0x2e, 0x94, - 0xa6, 0xb1, 0xa7, 0xc7, 0x6c, 0x57, 0x1f, 0xb7, 0xa3, 0xf1, 0x7b, 0x34, 0xda, 0x59, 0xed, 0x23, - 0x25, 0xf9, 0x40, 0x41, 0x22, 0xee, 0xde, 0x61, 0x94, 0x75, 0x8d, 0x32, 0x8d, 0x91, 0xfb, 0xf1, - 0x7e, 0x2a, 0x2f, 0x57, 0xfa, 0x56, 0x9b, 0xc7, 0xe1, 0x2d, 0x5c, 0x0b, 0x85, 0x0f, 0xf4, 0x5c, - 0xac, 0x53, 0x70, 0x48, 0x6c, 0xfb, 0xd3, 0xdc, 0xa1, 0x43, 0x52, 0xe5, 0xe7, 0x49, 0x3e, 0x3d, - 0x04, 0xec, 0x52, 0xca, 0x37, 0xbe, 0x27, 0x0b, 0x6e, 0x56, 0x5d, 0xf3, 0x9b, 0x4f, 0x74, 0xb3, - 0x2a, 0xfb, 0x9d, 0xb4, 0x37, 0x32, 0xd8, 0xee, 0x82, 0x58, 0xf1, 0xd9, 0x0f, 0xc3, 0x93, 0x0c, - 0x01, 0xf1, 0x8a, 0x9f, 0x84, 0x0b, 0x93, 0xd4, 0x5b, 0xd2, 0x58, 0x89, 0x15, 0x9a, 0x9c, 0x73, - 0x45, 0xa3, 0xec, 0x94, 0x48, 0x64, 0xda, 0x29, 0xf5, 0x86, 0xe6, 0x5f, 0x0e, 0x10, 0x9b, 0x76, - 0xda, 0xe8, 0x56, 0x7d, 0xe0, 0x73, 0x9a, 0xd8, 0xd3, 0x36, 0x5d, 0xd4, 0xdf, 0x21, 0x6c, 0x5a, - 0xb8, 0x11, 0x19, 0x82, 0x57, 0x11, 0x9a, 0xd3, 0x65, 0xb1, 0x28, 0x75, 0xef, 0xa6, 0xdb, 0x05, - 0xb2, 0x01, 0x67, 0xef, 0xd1, 0x48, 0xac, 0x71, 0x36, 0x0d, 0xa3, 0xc0, 0x6d, 0x46, 0x3d, 0x6f, - 0x1a, 0xe5, 0x61, 0x27, 0x83, 0x66, 0xf7, 0x6d, 0xc6, 0xaf, 0x9e, 0xcd, 0xaf, 0x27, 0x5d, 0x0f, - 0x9f, 0x5b, 0x71, 0x7d, 0x71, 0x92, 0x26, 0xe6, 0x4f, 0xf1, 0x11, 0xee, 0xd2, 0x93, 0x4f, 0x5a, - 0x8a, 0xc3, 0xa9, 0x88, 0xe3, 0xdb, 0x4d, 0x18, 0xe6, 0x44, 0xb9, 0x1b, 0xea, 0x84, 0x4e, 0x43, - 0xee, 0xc0, 0x98, 0xf2, 0xc9, 0x21, 0x46, 0x51, 0x6e, 0xbb, 0xee, 0xc0, 0x18, 0x3f, 0xab, 0x1d, - 0x9f, 0xe4, 0x43, 0x18, 0x53, 0x4e, 0x3c, 0x27, 0xde, 0xe9, 0x3f, 0x81, 0x49, 0xdd, 0x9d, 0xe7, - 0xe4, 0x82, 0xfc, 0x01, 0xde, 0x07, 0xcb, 0x6b, 0x97, 0x7c, 0xfa, 0xd9, 0x44, 0x94, 0x19, 0x21, - 0x52, 0xbe, 0x40, 0x4a, 0x60, 0x6e, 0xf3, 0xcf, 0xa4, 0xa8, 0xc9, 0x87, 0xf2, 0x69, 0x94, 0x22, - 0x4e, 0x23, 0xf5, 0x90, 0xd9, 0x14, 0x17, 0xf3, 0x8b, 0x10, 0xab, 0x05, 0xb6, 0x6f, 0xb3, 0x8f, - 0x73, 0x6f, 0xdd, 0x5f, 0x74, 0x79, 0x5c, 0x36, 0x51, 0x4b, 0x4b, 0xa5, 0xf3, 0xcb, 0x67, 0x74, - 0x29, 0x3f, 0x03, 0x20, 0x0e, 0xc6, 0x7d, 0x3c, 0x56, 0xa6, 0x4a, 0x73, 0xbb, 0xd7, 0x23, 0xa3, - 0x60, 0x7c, 0x8e, 0x4e, 0xb3, 0xeb, 0x41, 0xd6, 0xeb, 0x58, 0x2e, 0x1e, 0x7c, 0xbe, 0x12, 0x76, - 0xab, 0xd2, 0x2b, 0xf2, 0xf8, 0x9d, 0xcd, 0x6f, 0xd9, 0xf9, 0x8c, 0x9b, 0xf2, 0xbe, 0x63, 0x91, - 0xc7, 0xee, 0x97, 0x50, 0x3b, 0xcc, 0x0c, 0x33, 0x96, 0xcf, 0xec, 0xba, 0xe6, 0x6c, 0x91, 0x49, - 0xa9, 0x36, 0xbd, 0x27, 0xf8, 0xe6, 0x2c, 0x3b, 0xe1, 0xe1, 0xeb, 0x7d, 0xb8, 0x48, 0x49, 0x7c, - 0xa7, 0x2f, 0x9e, 0xba, 0x77, 0x3d, 0xcf, 0x77, 0xd8, 0xec, 0xfa, 0xfa, 0x24, 0x70, 0xcc, 0xb8, - 0x0a, 0x57, 0x2e, 0xa7, 0xd9, 0x0c, 0x4d, 0x97, 0xd3, 0x9e, 0x7d, 0xc8, 0x13, 0xff, 0x67, 0x50, - 0x89, 0x3d, 0x4a, 0x4e, 0x36, 0x08, 0xf9, 0x9e, 0x8e, 0x24, 0x25, 0xa9, 0x90, 0xf4, 0xca, 0x4f, - 0x34, 0x7f, 0x25, 0x4f, 0xc2, 0xfa, 0xbb, 0x1a, 0xe1, 0x29, 0x97, 0x48, 0xfd, 0x99, 0x97, 0x44, - 0xb4, 0x87, 0x61, 0x57, 0x3c, 0xc2, 0x7b, 0x25, 0x8c, 0xd2, 0xa3, 0x7d, 0x72, 0x46, 0xca, 0xe1, - 0x23, 0xc1, 0xc8, 0xea, 0x31, 0xbc, 0xfd, 0xef, 0x32, 0xcb, 0x39, 0xe3, 0x7a, 0xf2, 0x01, 0x75, - 0xe2, 0x87, 0x67, 0x89, 0xa8, 0x84, 0xfa, 0x63, 0xdf, 0x74, 0x51, 0xf2, 0xd5, 0x54, 0x16, 0x86, - 0xf2, 0xb2, 0x2a, 0xcb, 0x2a, 0x18, 0x9c, 0x1d, 0x45, 0xfc, 0xc0, 0x8d, 0x9e, 0x2f, 0xda, 0x6b, - 0xb1, 0x59, 0x41, 0x2f, 0x90, 0xbc, 0x41, 0x16, 0xda, 0x6b, 0xe4, 0x4b, 0x5c, 0x4a, 0x04, 0xfb, - 0x9a, 0xef, 0x47, 0x61, 0x14, 0x38, 0x9d, 0x7a, 0x33, 0x70, 0x3b, 0x51, 0x6e, 0xa7, 0x63, 0xa7, - 0xf0, 0x2c, 0x32, 0xcd, 0x47, 0x55, 0x04, 0xc6, 0xcf, 0x0a, 0xa5, 0xa3, 0xde, 0xe9, 0x64, 0x15, - 0xf6, 0x38, 0xb9, 0xd4, 0x65, 0x28, 0xfc, 0x57, 0xc9, 0xb4, 0x01, 0x73, 0x39, 0x01, 0x88, 0xd4, - 0x75, 0x70, 0xef, 0x00, 0x45, 0xf3, 0xbd, 0x2b, 0x26, 0x5f, 0xc1, 0x6c, 0x66, 0x84, 0x22, 0x65, - 0xd2, 0xee, 0x15, 0xbf, 0xa8, 0x1f, 0xf3, 0x27, 0x50, 0xe6, 0x2f, 0x44, 0xd0, 0x11, 0xda, 0x08, - 0x56, 0x13, 0xbf, 0x1b, 0xca, 0x41, 0x48, 0xae, 0xd7, 0xf9, 0x78, 0xea, 0xf5, 0xfa, 0x0c, 0x46, - 0x29, 0x49, 0x24, 0xad, 0x57, 0x1f, 0x5e, 0x56, 0x61, 0xaf, 0xc7, 0x49, 0x5b, 0x30, 0xbb, 0x4b, - 0x03, 0xf7, 0xf1, 0xf3, 0x24, 0x43, 0x29, 0x99, 0xcc, 0xd2, 0x5e, 0x1c, 0x3f, 0x87, 0xb9, 0x45, - 0xff, 0xa0, 0x23, 0x9e, 0x01, 0x1a, 0x3c, 0xd5, 0xdd, 0x7e, 0x76, 0x79, 0x7f, 0xe7, 0xa8, 0x79, - 0xf5, 0x4e, 0x31, 0x95, 0xb1, 0x5f, 0xf9, 0xc4, 0xe5, 0xa3, 0xc4, 0xaf, 0x3b, 0xe4, 0x51, 0x4e, - 0xa7, 0xdf, 0xc6, 0x49, 0x98, 0xa0, 0xe3, 0xb6, 0x39, 0x6d, 0x12, 0x66, 0x95, 0xf7, 0x7e, 0x54, - 0x96, 0xc1, 0x95, 0x57, 0x98, 0xcf, 0xf5, 0x18, 0xad, 0xdd, 0x90, 0x7b, 0x8b, 0x99, 0x31, 0x3d, - 0xe1, 0x85, 0x9d, 0x99, 0x4e, 0x3d, 0xb3, 0x9d, 0x5a, 0x98, 0x86, 0x76, 0xbb, 0x87, 0x8a, 0x45, - 0xf4, 0x38, 0x0d, 0x0c, 0x13, 0x6f, 0x05, 0x26, 0x75, 0xda, 0x5e, 0xab, 0x75, 0x8a, 0x18, 0x95, - 0xda, 0x0f, 0x60, 0xa2, 0xae, 0x57, 0x9e, 0x51, 0x49, 0xee, 0xa4, 0x50, 0xcf, 0x8a, 0xfa, 0xb7, - 0xbd, 0x87, 0x73, 0xa9, 0xda, 0x78, 0x8e, 0xd5, 0x8b, 0x5c, 0x5f, 0x1c, 0x23, 0x99, 0x9d, 0xda, - 0x05, 0xb2, 0x72, 0x4d, 0x2a, 0x5f, 0x9c, 0xec, 0xfc, 0x77, 0x0d, 0x9e, 0x22, 0x27, 0x99, 0x4a, - 0x94, 0x58, 0xfd, 0x73, 0xf6, 0x2a, 0x27, 0xfb, 0x9e, 0xb9, 0x48, 0xb9, 0xe3, 0x50, 0x9c, 0xbe, - 0x4f, 0x77, 0x1c, 0x4a, 0x25, 0x05, 0xd4, 0x1d, 0x87, 0x32, 0x32, 0xfe, 0x2d, 0x23, 0xaf, 0x38, - 0xb7, 0x50, 0x0f, 0x63, 0x84, 0x62, 0x93, 0x91, 0xc2, 0xe8, 0x81, 0x1e, 0xed, 0x83, 0x67, 0x24, - 0xea, 0x61, 0x6b, 0x4d, 0x46, 0xf9, 0x48, 0xa4, 0x30, 0xba, 0x0b, 0x25, 0x9e, 0x9c, 0x21, 0x0e, - 0x92, 0x18, 0xfb, 0x12, 0xa6, 0x73, 0x46, 0xf4, 0x18, 0xd4, 0x52, 0x32, 0xb4, 0x9c, 0x32, 0x99, - 0xe5, 0xc4, 0x9c, 0xeb, 0x31, 0x55, 0x21, 0x0e, 0x20, 0xa7, 0x0c, 0x53, 0xa9, 0x98, 0x72, 0xf3, - 0xe7, 0x32, 0x4a, 0x94, 0x4a, 0x39, 0xa1, 0x87, 0x9b, 0x53, 0x5d, 0xca, 0x88, 0x41, 0x37, 0x7f, - 0x3e, 0xb3, 0x4c, 0x30, 0x8a, 0x78, 0xda, 0xea, 0xec, 0xf4, 0xdc, 0xf1, 0xcb, 0xb0, 0x1e, 0x38, - 0xb2, 0x9a, 0x1b, 0xc7, 0x41, 0x15, 0xb5, 0x52, 0x95, 0x59, 0x29, 0x23, 0x27, 0xf8, 0x77, 0x32, - 0x1e, 0x6f, 0x18, 0x18, 0xb1, 0x7b, 0x59, 0xef, 0x04, 0xe5, 0xe4, 0xa1, 0xcc, 0x74, 0x93, 0x53, - 0x53, 0x3f, 0x06, 0xb9, 0x23, 0xf8, 0x50, 0xe6, 0xb6, 0x79, 0xd5, 0x8c, 0x1f, 0xc1, 0x85, 0xc4, - 0x8b, 0x10, 0x93, 0xf1, 0x8d, 0xec, 0x67, 0x23, 0x99, 0xe2, 0xc9, 0xd7, 0xd9, 0x2f, 0xa7, 0x5f, - 0x8e, 0x24, 0xc6, 0xfd, 0xa4, 0x6b, 0xde, 0x3a, 0x4c, 0xe1, 0x32, 0x23, 0xb3, 0xdb, 0xc7, 0xc1, - 0x66, 0x4c, 0x70, 0x32, 0xea, 0x51, 0xb2, 0x54, 0x3d, 0x48, 0x9f, 0x10, 0xaf, 0x8c, 0x79, 0xae, - 0xfc, 0x79, 0xf3, 0xe9, 0x31, 0x02, 0xb3, 0x76, 0x31, 0x91, 0x82, 0x9f, 0xfc, 0x00, 0x4e, 0xc7, - 0x8f, 0x8f, 0x39, 0x8b, 0x0c, 0xb4, 0x1e, 0x86, 0xb2, 0xd3, 0xf1, 0x0b, 0xe4, 0x93, 0x93, 0xaf, - 0xc8, 0xad, 0x28, 0x26, 0xbf, 0x98, 0x7a, 0x3f, 0x63, 0xf4, 0xe1, 0x38, 0x3b, 0x92, 0x26, 0xdb, - 0x93, 0x8e, 0x4e, 0x13, 0x3f, 0xb7, 0xec, 0x38, 0x8a, 0xfa, 0xe7, 0xd6, 0x33, 0xd6, 0xa3, 0x52, - 0x7f, 0x73, 0xf8, 0xac, 0xc3, 0x55, 0x8c, 0xbd, 0xb2, 0xc5, 0xa3, 0xed, 0x65, 0x63, 0xe5, 0xb7, - 0x3d, 0x19, 0xb1, 0xa5, 0x0d, 0x57, 0xfa, 0x06, 0x92, 0x24, 0xb7, 0x0c, 0x9f, 0x99, 0xfe, 0x21, - 0x27, 0x7b, 0x9c, 0x3c, 0x66, 0xb2, 0xe2, 0x31, 0xaa, 0x7d, 0xb6, 0x47, 0x68, 0x48, 0xb5, 0xcf, - 0xf6, 0x0c, 0xe8, 0xf8, 0x39, 0xa6, 0x8f, 0x12, 0x7b, 0x14, 0xc6, 0x53, 0xa2, 0x1e, 0x8f, 0x32, - 0xdd, 0xf3, 0xda, 0xe7, 0x8a, 0x79, 0x29, 0x9a, 0x22, 0xc4, 0x33, 0xcd, 0x25, 0x71, 0x12, 0xcb, - 0x63, 0xde, 0x9f, 0x49, 0x0f, 0x5f, 0xed, 0x4b, 0x7c, 0x02, 0x9e, 0xb8, 0xe5, 0x39, 0xf0, 0xda, - 0xd2, 0x4f, 0xff, 0xd3, 0xa5, 0xc2, 0x4f, 0x7f, 0x76, 0xa9, 0xf0, 0xef, 0x7e, 0x76, 0xa9, 0xf0, - 0x1f, 0x7f, 0x76, 0xa9, 0xf0, 0xe5, 0xc2, 0xf1, 0x62, 0x1d, 0xf3, 0x84, 0x8f, 0xb7, 0x38, 0xbb, - 0x61, 0xfc, 0xef, 0xad, 0xff, 0x15, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x8b, 0xf5, 0xbc, 0x9c, 0xec, - 0x00, 0x00, + 0xd4, 0xf1, 0x9e, 0x9b, 0x17, 0xd8, 0x7a, 0xfe, 0x4a, 0x0f, 0x0c, 0xa1, 0xbf, 0x0d, 0xfc, 0x56, + 0xb1, 0x80, 0xdb, 0xc9, 0x12, 0x4c, 0xcb, 0xba, 0x36, 0x3b, 0xd4, 0xab, 0xd7, 0x57, 0x30, 0x4d, + 0x8f, 0xf4, 0x5c, 0xd1, 0x60, 0x92, 0x3b, 0x49, 0x17, 0xb1, 0xa3, 0xcf, 0x08, 0xdc, 0x41, 0x7a, + 0x85, 0xf3, 0x88, 0x8f, 0xbe, 0xcc, 0xd0, 0xc8, 0x0f, 0xb8, 0x51, 0xc9, 0x10, 0xfe, 0x77, 0x17, + 0x48, 0x0f, 0x05, 0x68, 0x3e, 0x47, 0x85, 0xb8, 0x5d, 0x20, 0x5f, 0x00, 0x49, 0xab, 0x24, 0x6a, + 0x08, 0x73, 0xd5, 0x2f, 0x35, 0x84, 0x3d, 0xf4, 0x99, 0x7b, 0x30, 0xab, 0xc2, 0xf6, 0x68, 0xb5, + 0x2e, 0x90, 0x9c, 0xd6, 0xe4, 0xb5, 0x92, 0x7c, 0x02, 0xd3, 0x62, 0xd1, 0xea, 0x05, 0xa4, 0xa4, + 0xf6, 0x1f, 0xa1, 0x95, 0xe4, 0xae, 0xd3, 0xfb, 0x30, 0x5b, 0x4f, 0x8c, 0x18, 0x77, 0xe6, 0x3f, + 0x67, 0xb2, 0x40, 0x60, 0x9d, 0x46, 0x7c, 0xc8, 0xb2, 0x79, 0x3d, 0x00, 0xc2, 0x8d, 0x42, 0x92, + 0xdd, 0x53, 0x97, 0x3e, 0x23, 0x17, 0x13, 0x4d, 0x67, 0x40, 0x44, 0xc3, 0x0d, 0x2c, 0xb7, 0x67, + 0xdb, 0x3c, 0xeb, 0x36, 0x42, 0x8d, 0x7b, 0xf4, 0xcb, 0x06, 0x81, 0x71, 0x15, 0x2f, 0x26, 0xe0, + 0x5c, 0x2e, 0x06, 0xf9, 0x35, 0x8c, 0x97, 0xdb, 0x5b, 0xad, 0x22, 0xdf, 0xcd, 0xd2, 0x7e, 0x73, + 0x14, 0xc3, 0xf9, 0x37, 0x8f, 0x87, 0xac, 0x14, 0xd9, 0xc9, 0x7b, 0x34, 0xda, 0x6a, 0x77, 0xf7, + 0x5c, 0xcc, 0xc7, 0x4a, 0x94, 0xd1, 0x48, 0x81, 0xc4, 0xba, 0x94, 0x61, 0xea, 0xe2, 0x82, 0x3a, + 0xfd, 0x31, 0x59, 0x85, 0x12, 0xdf, 0xff, 0x35, 0x16, 0x17, 0x53, 0x2c, 0x04, 0x8a, 0x13, 0x38, + 0x07, 0x61, 0xee, 0x6c, 0xdd, 0xe2, 0xbe, 0x51, 0x44, 0x7e, 0x93, 0xba, 0x80, 0x39, 0x6d, 0xc0, + 0x54, 0x0e, 0x01, 0x36, 0x23, 0x36, 0x0d, 0x69, 0x24, 0x03, 0xf3, 0xf0, 0x6c, 0xbc, 0x57, 0xe3, + 0xc3, 0x3e, 0x5d, 0x1a, 0x7f, 0xfa, 0x89, 0x20, 0x72, 0xbb, 0x6f, 0x11, 0x95, 0xa1, 0x38, 0x83, + 0xe9, 0xeb, 0x86, 0x4c, 0x72, 0x32, 0xbe, 0x6f, 0xe3, 0x19, 0x84, 0xc1, 0x88, 0x66, 0xe3, 0xb6, + 0xb1, 0xdf, 0x92, 0x6a, 0x52, 0xa3, 0xda, 0x5d, 0xc0, 0x2d, 0x8d, 0x1d, 0x92, 0x4c, 0x84, 0xed, + 0x06, 0x01, 0xf5, 0x38, 0x71, 0x9e, 0xbc, 0x91, 0x45, 0xfd, 0x31, 0x6e, 0x3d, 0x1a, 0x35, 0x7f, + 0x73, 0xd8, 0x8f, 0x05, 0xcf, 0x1e, 0x75, 0xbb, 0x40, 0xde, 0x83, 0x51, 0xd1, 0x46, 0x46, 0x64, + 0x34, 0x3a, 0xec, 0xd1, 0x6a, 0xa4, 0x04, 0x3e, 0x48, 0xd8, 0x66, 0x13, 0x27, 0x6f, 0xf6, 0x79, + 0x9b, 0xdf, 0x63, 0x87, 0x6d, 0xeb, 0x45, 0x28, 0x17, 0xe5, 0xa9, 0x8b, 0x94, 0x65, 0x15, 0xc0, + 0x46, 0x82, 0xfa, 0x1c, 0x8f, 0x9c, 0x09, 0x93, 0x9b, 0x31, 0x0a, 0xa4, 0x0a, 0xe6, 0xa6, 0xe4, + 0x66, 0x03, 0xdc, 0xef, 0xac, 0x5d, 0x85, 0x52, 0xb5, 0x89, 0x27, 0x41, 0x9d, 0x1e, 0x38, 0x9d, + 0x7d, 0x3f, 0xa0, 0x4a, 0x69, 0x49, 0x16, 0x48, 0x5e, 0xb3, 0x4a, 0xb2, 0x10, 0x05, 0x6b, 0xd4, + 0xc1, 0x50, 0xd9, 0x73, 0x4a, 0xb4, 0x48, 0x14, 0x65, 0x53, 0xf4, 0x50, 0x52, 0x66, 0x16, 0x99, + 0x5a, 0xd5, 0x7e, 0x39, 0x36, 0x1f, 0xe0, 0x86, 0xa1, 0x90, 0x43, 0x75, 0x42, 0x28, 0x90, 0x52, + 0xe7, 0xe4, 0xf3, 0x23, 0x85, 0x5a, 0x95, 0xf7, 0xc6, 0xf1, 0xb0, 0xe4, 0x51, 0xe7, 0x55, 0xff, + 0x7d, 0x98, 0x5a, 0x66, 0x1b, 0x7a, 0xb7, 0xe5, 0xf2, 0xf4, 0x00, 0xc4, 0x8c, 0xf7, 0x9e, 0x4b, + 0xb8, 0x22, 0x13, 0xb6, 0x21, 0xa9, 0x50, 0xfd, 0xe5, 0x99, 0xa2, 0xc1, 0xe4, 0x7c, 0xcc, 0x48, + 0xb6, 0x22, 0x43, 0x03, 0xaa, 0xe6, 0x42, 0xd7, 0x9f, 0xe3, 0x12, 0x61, 0xb5, 0xd3, 0x69, 0x4b, + 0x93, 0x34, 0xbf, 0x7b, 0xbf, 0x66, 0xa8, 0x90, 0xa9, 0x72, 0xc9, 0x3b, 0x2d, 0x34, 0x7e, 0xae, + 0x25, 0x50, 0xce, 0xe1, 0x99, 0x53, 0xde, 0x6f, 0x2d, 0xaa, 0x80, 0xde, 0xd5, 0x76, 0x3b, 0x45, + 0x1c, 0x92, 0x37, 0x4c, 0xee, 0x59, 0x38, 0xfd, 0x6a, 0x40, 0x15, 0x9d, 0x4b, 0x5d, 0xd5, 0x4e, + 0x87, 0x6f, 0x96, 0x97, 0xd4, 0x86, 0x61, 0x16, 0xa4, 0x55, 0xf4, 0x64, 0xb9, 0xd8, 0xdb, 0xef, + 0xe3, 0x32, 0x8b, 0xb3, 0x2c, 0x13, 0x5d, 0xe1, 0x4d, 0x26, 0x99, 0x56, 0x42, 0x58, 0xa2, 0x50, + 0x9d, 0x13, 0xa7, 0x51, 0xf4, 0x89, 0x53, 0x36, 0x2b, 0xcb, 0x4c, 0x02, 0x2e, 0xf9, 0x5d, 0xca, + 0x2b, 0x56, 0x96, 0xd2, 0x52, 0x32, 0x93, 0xbd, 0xea, 0x72, 0x3a, 0xc5, 0xbd, 0xd9, 0xe5, 0xdc, + 0x14, 0xf8, 0xf7, 0xa1, 0x94, 0x4c, 0xa2, 0xad, 0x98, 0xe6, 0x64, 0xd7, 0xce, 0x9d, 0x93, 0xbb, + 0x30, 0xa3, 0xcf, 0xa8, 0xea, 0x77, 0xde, 0xee, 0x9f, 0xc7, 0x67, 0x1b, 0x66, 0x33, 0x73, 0x5e, + 0xab, 0x23, 0xb6, 0x57, 0x46, 0xec, 0x5c, 0xae, 0x14, 0xce, 0x66, 0xa7, 0xbd, 0x27, 0xaf, 0x99, + 0x8a, 0x7f, 0x76, 0x12, 0xf0, 0xf9, 0x6b, 0x7d, 0xb0, 0xc4, 0x80, 0x7e, 0x8d, 0x27, 0x60, 0xaa, + 0x8e, 0x2b, 0x9a, 0x29, 0x20, 0xa7, 0x02, 0xab, 0x17, 0x8a, 0x5a, 0x03, 0x33, 0x19, 0xc5, 0xf9, + 0x43, 0x7c, 0x35, 0x9f, 0x67, 0xbc, 0xb0, 0x76, 0x65, 0xdc, 0xea, 0xdc, 0x91, 0xe9, 0x99, 0x1e, + 0xbd, 0x87, 0x2e, 0x39, 0xaf, 0xd6, 0xc3, 0xf1, 0x9b, 0x9c, 0xc7, 0xad, 0xa5, 0xcc, 0x36, 0x46, + 0xee, 0xf2, 0xa4, 0xd9, 0x26, 0x2b, 0xe7, 0xba, 0x1a, 0x86, 0x5e, 0x59, 0xfd, 0xf9, 0x69, 0xfc, + 0x15, 0xb7, 0xe3, 0x98, 0x55, 0xe8, 0x76, 0x9c, 0x4c, 0xfe, 0x97, 0xf3, 0x11, 0x74, 0xe6, 0x0e, + 0xbf, 0xb4, 0x4d, 0x24, 0x5f, 0x27, 0xba, 0xaa, 0x94, 0x9d, 0x98, 0x5d, 0xad, 0x8d, 0x4c, 0x14, + 0xbd, 0x8a, 0x87, 0xf2, 0x1b, 0xcc, 0x19, 0xa5, 0x1e, 0x99, 0xe9, 0x7b, 0x8b, 0x29, 0x9b, 0x50, + 0x8e, 0x27, 0x33, 0xd1, 0x81, 0x13, 0x4e, 0xa5, 0x1c, 0x8c, 0x73, 0xb9, 0xf9, 0xe8, 0xc9, 0x77, + 0x52, 0x5f, 0x7a, 0xce, 0xc0, 0xf4, 0xac, 0x82, 0xef, 0xe7, 0x5a, 0x1c, 0xec, 0xf3, 0xb1, 0x11, + 0x57, 0x4f, 0x5d, 0x9f, 0xda, 0xcf, 0x33, 0xf2, 0xda, 0xdf, 0x43, 0xb9, 0x58, 0xcb, 0x4d, 0x9f, + 0xdb, 0xeb, 0x8b, 0x59, 0x7c, 0xc2, 0xf4, 0x8e, 0xab, 0xb5, 0x4b, 0xca, 0x69, 0xc9, 0x82, 0x93, + 0xec, 0xb8, 0xc7, 0x69, 0x5a, 0x1e, 0x9f, 0x25, 0x18, 0xd7, 0x92, 0xda, 0x93, 0x73, 0xc6, 0x30, + 0x19, 0x67, 0xe8, 0xbc, 0xd1, 0x39, 0xf3, 0xf8, 0x5c, 0x44, 0x53, 0xb2, 0x4a, 0x8d, 0x9f, 0xdb, + 0x8a, 0xf3, 0x69, 0x1e, 0x86, 0x19, 0x59, 0x8d, 0x02, 0x6f, 0xcd, 0x85, 0xe4, 0xe0, 0x18, 0x0d, + 0xca, 0xef, 0x12, 0xd1, 0x87, 0xa6, 0x4f, 0x93, 0xf2, 0xe5, 0xd7, 0x69, 0x91, 0x39, 0x17, 0x93, + 0xd7, 0xc8, 0x40, 0x87, 0x67, 0x95, 0x4d, 0x4c, 0x83, 0xa2, 0x81, 0x22, 0x9b, 0xcd, 0x16, 0x3e, + 0x1f, 0xc9, 0xc8, 0xf2, 0xaf, 0x76, 0xd8, 0xec, 0xe2, 0x7c, 0xd9, 0x4d, 0xed, 0xd9, 0xb9, 0x1c, + 0x7b, 0xa6, 0xfd, 0xcf, 0x6d, 0xe9, 0x0f, 0xb5, 0x3d, 0x3b, 0x95, 0xcb, 0x9f, 0x5c, 0x4f, 0x0a, + 0x6e, 0x79, 0xe9, 0xfe, 0x7b, 0x9c, 0x09, 0x33, 0xe9, 0xdc, 0xf3, 0x86, 0x5d, 0x37, 0x5d, 0x98, + 0x3f, 0x0a, 0xb6, 0x5c, 0xff, 0x39, 0xdc, 0xb2, 0x0a, 0xfb, 0xb5, 0xf0, 0x4b, 0x6d, 0xa3, 0x4b, + 0x24, 0xef, 0x57, 0xea, 0x78, 0x9f, 0xec, 0xfe, 0xb9, 0xbc, 0x37, 0xf0, 0x49, 0x53, 0x3a, 0xf3, + 0xbe, 0x92, 0x6c, 0x7a, 0xe5, 0xe5, 0xcf, 0x34, 0xfb, 0xce, 0xa6, 0xbb, 0xc8, 0xf8, 0x9d, 0x4d, + 0x18, 0x6d, 0xfb, 0x35, 0xec, 0x6b, 0xb9, 0x19, 0x67, 0x64, 0xec, 0x4f, 0x6c, 0xc6, 0xf9, 0x39, + 0xfd, 0x7b, 0xa8, 0x41, 0xa7, 0xeb, 0xee, 0x9e, 0xa7, 0x25, 0xdc, 0x57, 0x4a, 0x90, 0x91, 0x84, + 0xdf, 0xdc, 0x62, 0xb2, 0xf2, 0xf3, 0x6f, 0x32, 0xf9, 0x87, 0x4b, 0xef, 0x7a, 0xea, 0x74, 0x32, + 0x9f, 0x9f, 0x31, 0x5e, 0x6d, 0x37, 0x99, 0xb9, 0xd6, 0x35, 0x86, 0x7a, 0xde, 0x72, 0xc5, 0x30, + 0x23, 0x85, 0xba, 0x62, 0x98, 0x99, 0xe8, 0xfc, 0x16, 0x5a, 0x5d, 0x6c, 0xbf, 0x4d, 0x75, 0xab, + 0x8b, 0x96, 0x08, 0x3b, 0x61, 0xf4, 0x20, 0x1f, 0xc3, 0x98, 0x4a, 0x14, 0xae, 0xec, 0xdb, 0xc9, + 0x5c, 0xe5, 0xf3, 0xe5, 0x74, 0x81, 0xa8, 0xf0, 0x1d, 0x69, 0xf8, 0xc0, 0x3a, 0xcb, 0xa6, 0xc1, + 0x28, 0xbf, 0xda, 0x77, 0xa4, 0xd5, 0xc3, 0x20, 0x4b, 0xa5, 0x09, 0x4f, 0x92, 0x7d, 0x1f, 0x26, + 0xe2, 0x94, 0xe0, 0xbb, 0x0b, 0x1a, 0x61, 0x22, 0x4f, 0x78, 0x92, 0xf0, 0x3d, 0x79, 0xa5, 0x81, + 0xf5, 0x99, 0x85, 0xbd, 0x4f, 0xf1, 0x8f, 0xa5, 0x95, 0xc5, 0x68, 0x69, 0x2a, 0xc1, 0x78, 0x8f, + 0xcd, 0x77, 0x42, 0xcf, 0xd1, 0xa9, 0xa6, 0x36, 0x23, 0xcb, 0xae, 0x9a, 0xda, 0xac, 0x2c, 0xb9, + 0xb1, 0xc9, 0xff, 0x0b, 0x69, 0x52, 0x88, 0x99, 0x5e, 0x34, 0x9a, 0x95, 0xe2, 0x7b, 0x29, 0xaf, + 0x38, 0xc9, 0xba, 0x0e, 0xa5, 0x64, 0x42, 0x51, 0xa5, 0x8f, 0xe5, 0x64, 0x7e, 0x55, 0x4a, 0x5e, + 0x6e, 0x26, 0xd2, 0x2d, 0x69, 0x1f, 0x37, 0xf9, 0x5e, 0xc9, 0x6e, 0x94, 0xce, 0x3a, 0xdf, 0x60, + 0x3e, 0x69, 0xe4, 0x16, 0xd5, 0x35, 0xe5, 0x54, 0xee, 0x52, 0x5d, 0xb2, 0xca, 0x48, 0x47, 0xea, + 0xca, 0xa0, 0x55, 0xd9, 0x69, 0xe0, 0xdf, 0x30, 0x55, 0xd8, 0x1e, 0x81, 0xe8, 0xfb, 0x5e, 0xff, + 0x92, 0x5f, 0x82, 0xb9, 0x9c, 0xc0, 0xda, 0xe4, 0x5a, 0xc2, 0xd2, 0x9a, 0x1d, 0x78, 0x5b, 0x2d, + 0x90, 0xcc, 0xa4, 0xdf, 0xeb, 0xe8, 0x37, 0x60, 0x84, 0x90, 0x48, 0xdd, 0xc5, 0x3d, 0x74, 0xa3, + 0x7d, 0x9e, 0xdb, 0x5a, 0xdb, 0x36, 0x33, 0x63, 0x4f, 0x90, 0x3a, 0xea, 0x22, 0x06, 0x34, 0xe3, + 0x3a, 0x2e, 0x83, 0xe1, 0x7c, 0x36, 0x43, 0xb6, 0x77, 0xb0, 0xb5, 0x90, 0x11, 0xdf, 0x43, 0xad, + 0x85, 0xfc, 0xd8, 0x1f, 0xb9, 0xcd, 0xdc, 0x92, 0x32, 0x52, 0x36, 0xc7, 0xfc, 0x50, 0x1f, 0xb9, + 0x1c, 0xef, 0x33, 0x8e, 0xa9, 0xe8, 0x1d, 0x24, 0x07, 0xbd, 0xf7, 0xee, 0x61, 0xcb, 0x23, 0xd7, + 0xa4, 0x5a, 0xd0, 0xda, 0x97, 0x17, 0x27, 0x24, 0xb7, 0x7d, 0xcb, 0xf2, 0x7b, 0xca, 0x6e, 0xdf, + 0x71, 0x0f, 0x5d, 0x75, 0xff, 0x95, 0x08, 0x20, 0x63, 0x74, 0x54, 0x83, 0xcf, 0xe7, 0xc0, 0xc9, + 0x06, 0x3a, 0x02, 0x25, 0xa1, 0x9a, 0x52, 0x9a, 0x1d, 0xa1, 0x26, 0x97, 0x1f, 0x5f, 0xc7, 0x46, + 0x84, 0x8f, 0x93, 0xac, 0xe3, 0x44, 0x68, 0x10, 0xb1, 0x8e, 0x0d, 0xe8, 0xc9, 0xd6, 0x71, 0x82, + 0xa1, 0xb9, 0x8e, 0x93, 0xcd, 0x4c, 0x6a, 0xfa, 0xb9, 0xb3, 0x9a, 0x6c, 0xa6, 0x5a, 0xc7, 0xd9, + 0x1c, 0xf3, 0x23, 0xb1, 0xe4, 0x72, 0x54, 0xeb, 0xd8, 0xe4, 0x98, 0x83, 0x7e, 0xcc, 0x75, 0x9c, + 0xac, 0xc4, 0x5c, 0xc7, 0x27, 0x6a, 0x9f, 0x5a, 0xc7, 0xd9, 0xed, 0x3b, 0xf1, 0x3a, 0x4e, 0x84, + 0x2e, 0x32, 0x3a, 0x9a, 0xb5, 0x8e, 0x93, 0xf8, 0x7c, 0x1d, 0x27, 0xa1, 0x09, 0xe3, 0x4a, 0x8f, + 0x75, 0x9c, 0xa4, 0xfc, 0x0c, 0xf9, 0x25, 0xc2, 0xae, 0x1c, 0x67, 0x25, 0xe7, 0x46, 0x6c, 0x21, + 0x0f, 0xd1, 0xbc, 0x97, 0x80, 0x1f, 0x6f, 0x35, 0x5f, 0xc8, 0x63, 0x8a, 0xeb, 0x79, 0x57, 0x0e, + 0x62, 0xb2, 0xb9, 0xa6, 0xed, 0x2a, 0x3b, 0xea, 0x4c, 0x8f, 0x06, 0xef, 0xb2, 0x75, 0xd3, 0xea, + 0xc1, 0xb7, 0x57, 0xd0, 0x9c, 0x1e, 0x7c, 0x95, 0x2a, 0x93, 0xe4, 0x9b, 0x4b, 0xd2, 0x7b, 0x7d, + 0x7f, 0x2e, 0x2f, 0x38, 0x92, 0x74, 0x0b, 0x09, 0xe5, 0xe8, 0xc4, 0x2d, 0x55, 0x4a, 0x52, 0xb2, + 0xa5, 0x27, 0x5d, 0xe7, 0xeb, 0x52, 0x7a, 0x48, 0x45, 0xdb, 0x4a, 0x74, 0x5a, 0x5f, 0xeb, 0xb9, + 0x25, 0x64, 0x1b, 0x6d, 0xb9, 0x69, 0xb8, 0x66, 0x07, 0xce, 0x0b, 0xeb, 0xd5, 0x97, 0x6b, 0x2a, + 0x6e, 0x90, 0xce, 0x35, 0x2f, 0xa8, 0x90, 0xe2, 0x9a, 0xa6, 0xfe, 0x04, 0xad, 0x5f, 0xe2, 0xc5, + 0x95, 0xf7, 0xd8, 0xcf, 0xb7, 0xa4, 0x4c, 0x1b, 0xce, 0x4a, 0x0c, 0x17, 0x7d, 0xc4, 0x3e, 0x12, + 0x37, 0x78, 0x12, 0x98, 0x3b, 0xf8, 0x59, 0xf4, 0xe4, 0x13, 0x28, 0x89, 0xed, 0x2d, 0x66, 0x90, + 0x85, 0x98, 0x3b, 0x75, 0x35, 0x69, 0x74, 0x3b, 0x46, 0x0b, 0x8e, 0x63, 0x6c, 0x3b, 0xce, 0x48, + 0xe4, 0x5b, 0xa6, 0xd8, 0x71, 0xb8, 0x1d, 0x74, 0xc3, 0x88, 0xb6, 0xd2, 0x16, 0x25, 0xb3, 0x31, + 0xd2, 0x33, 0xc2, 0x44, 0xdf, 0x5d, 0x20, 0xab, 0xb8, 0xb7, 0x99, 0xe0, 0x5e, 0x26, 0xb7, 0x6c, + 0x36, 0xb8, 0xf5, 0xac, 0xab, 0x67, 0x3d, 0x66, 0x9b, 0xf2, 0xea, 0xce, 0x6d, 0x94, 0xb4, 0xba, + 0x9e, 0xcd, 0x62, 0xb7, 0xbb, 0x70, 0x72, 0x86, 0x8c, 0x97, 0x78, 0xcf, 0xf4, 0x4a, 0x78, 0xf1, + 0xbd, 0xee, 0x15, 0xf0, 0x52, 0x6b, 0xe1, 0x98, 0xd3, 0x98, 0xb7, 0x16, 0x3e, 0x44, 0x7f, 0x07, + 0x6e, 0xe7, 0xec, 0xb7, 0x04, 0x92, 0x2f, 0xaa, 0xc8, 0xa7, 0x30, 0x26, 0x89, 0xfb, 0xcf, 0x7c, + 0x92, 0x1a, 0x67, 0x7e, 0x09, 0x26, 0x8d, 0xe7, 0x62, 0x4a, 0x8d, 0xcb, 0x7a, 0x44, 0xd6, 0x63, + 0x41, 0x4f, 0x1a, 0xcf, 0xc2, 0x14, 0x97, 0xac, 0xc7, 0x62, 0xb9, 0x5c, 0x7e, 0x00, 0xe3, 0x62, + 0x48, 0x7b, 0x8e, 0x46, 0xbe, 0x61, 0x71, 0x56, 0x73, 0xbd, 0xee, 0xb6, 0xdc, 0x68, 0xd1, 0xf7, + 0x1e, 0xbb, 0x7b, 0x7d, 0x07, 0x26, 0x4d, 0xb2, 0xbb, 0x40, 0xbe, 0xc2, 0x94, 0xd7, 0x32, 0x11, + 0x39, 0x8d, 0x9e, 0xf9, 0xc1, 0x13, 0xd7, 0xdb, 0xeb, 0xc3, 0xf2, 0xb2, 0xc9, 0x32, 0x49, 0x27, + 0x3f, 0x90, 0xaf, 0x60, 0xbe, 0x9e, 0xcf, 0xbc, 0x2f, 0x93, 0xde, 0xe7, 0x68, 0x1d, 0x2e, 0xa0, + 0x9b, 0xd0, 0x49, 0xdb, 0xde, 0x93, 0xe9, 0x17, 0x3c, 0x32, 0xa5, 0xbc, 0x94, 0x68, 0xfa, 0x41, + 0xab, 0x3f, 0xc7, 0x8a, 0xe9, 0x31, 0x9c, 0x20, 0x93, 0x83, 0xf1, 0x05, 0x9c, 0xab, 0xe7, 0xb2, + 0xee, 0xc7, 0xa2, 0x9f, 0xc8, 0x7c, 0x1e, 0x87, 0xe2, 0x84, 0xed, 0xee, 0xc9, 0x73, 0x15, 0x37, + 0x6f, 0x76, 0xe0, 0x6e, 0x05, 0xf4, 0x31, 0x0d, 0xd0, 0x2f, 0xbd, 0x9f, 0x47, 0xb6, 0x89, 0x2e, + 0x7b, 0xbe, 0x0a, 0x67, 0xea, 0x29, 0x56, 0x79, 0x24, 0xfd, 0x2e, 0xba, 0xa6, 0xb1, 0xa7, 0xc7, + 0x6c, 0x57, 0x1f, 0x77, 0xa8, 0xf1, 0x7b, 0x34, 0xda, 0x59, 0xed, 0x33, 0x4a, 0xf2, 0xe1, 0x84, + 0x44, 0xdc, 0xbd, 0xc3, 0x28, 0xeb, 0x1a, 0x65, 0x1a, 0x23, 0xf7, 0xe3, 0xfd, 0x54, 0x5e, 0xfa, + 0xf4, 0xad, 0x36, 0x8f, 0xc3, 0x5b, 0xb8, 0x17, 0x0a, 0xdf, 0xec, 0xb9, 0x58, 0xd6, 0xe1, 0x90, + 0xd8, 0x26, 0xa9, 0xb9, 0x69, 0x87, 0xa4, 0xca, 0xf5, 0x5c, 0xbe, 0x3c, 0x04, 0xec, 0x52, 0xca, + 0x67, 0xbf, 0x27, 0x0b, 0x6e, 0xee, 0x5d, 0xf3, 0x9b, 0x4f, 0x74, 0x73, 0x2f, 0xfb, 0x9d, 0xb4, + 0x83, 0x32, 0xd8, 0xee, 0x82, 0xd8, 0xf1, 0xd9, 0x0f, 0xc3, 0xc3, 0x0d, 0x01, 0xf1, 0x8e, 0x9f, + 0x84, 0x0b, 0x53, 0xd9, 0x5b, 0xd2, 0x88, 0x8a, 0x15, 0x9a, 0x9c, 0x73, 0x87, 0x46, 0xd9, 0x4f, + 0x91, 0xc8, 0xb4, 0x9f, 0xea, 0x0d, 0xcd, 0xbf, 0xb4, 0x20, 0x36, 0xed, 0xb4, 0xd1, 0xdd, 0xfb, + 0xc0, 0xe7, 0x34, 0xb1, 0x07, 0x70, 0xba, 0xa8, 0xbf, 0xa3, 0xda, 0xb4, 0x70, 0x6f, 0x32, 0x06, + 0x5e, 0x45, 0x8e, 0x4e, 0x97, 0xc5, 0x43, 0xa9, 0x7b, 0x5d, 0xdd, 0x2e, 0x90, 0x0d, 0x38, 0x7b, + 0x8f, 0x46, 0x62, 0x8f, 0xb3, 0x69, 0x18, 0x05, 0x6e, 0x33, 0xea, 0x79, 0x03, 0x2a, 0x95, 0xb0, + 0x0c, 0x9a, 0xdd, 0xb7, 0x19, 0xbf, 0x7a, 0x36, 0xbf, 0x9e, 0x74, 0x3d, 0x7c, 0x81, 0xc5, 0xb5, + 0xca, 0x49, 0x9a, 0x98, 0xbf, 0xc4, 0x47, 0xb8, 0xab, 0x51, 0x3e, 0x69, 0x29, 0x0e, 0xf3, 0x22, + 0xd4, 0xca, 0x9b, 0x30, 0xcc, 0x89, 0x72, 0x0f, 0xd4, 0x09, 0x9d, 0x86, 0xdc, 0x81, 0x31, 0xe5, + 0x2b, 0x44, 0x8c, 0xa2, 0xdc, 0x76, 0xdd, 0x81, 0x31, 0x2e, 0x57, 0x1d, 0x9f, 0xe4, 0x43, 0x18, + 0x53, 0xce, 0x45, 0x27, 0x3e, 0xe9, 0x3f, 0x81, 0x49, 0xdd, 0xcd, 0xe8, 0xe4, 0x03, 0xf9, 0x03, + 0xbc, 0xa7, 0x96, 0xd7, 0x41, 0xf9, 0xf4, 0xb3, 0x89, 0xe8, 0x37, 0x62, 0x48, 0xf9, 0x06, 0x29, + 0x81, 0xb9, 0xcd, 0x3f, 0x93, 0xa2, 0x26, 0x1f, 0xca, 0x27, 0x5b, 0x8a, 0x38, 0x8d, 0xd4, 0x63, + 0xcc, 0xa6, 0xf8, 0x30, 0xbf, 0x08, 0xb1, 0xda, 0x60, 0xfb, 0x36, 0xfb, 0x38, 0xf7, 0xe9, 0xfd, + 0x87, 0x2e, 0x8f, 0xcb, 0x26, 0x4a, 0x69, 0xa9, 0x34, 0x83, 0xf9, 0x8c, 0x2e, 0xe5, 0x67, 0x26, + 0xc4, 0xc9, 0xb8, 0x8f, 0xea, 0x6e, 0xaa, 0x34, 0xb7, 0x7b, 0x3d, 0x32, 0x1d, 0xc6, 0xfa, 0x7d, + 0x9a, 0x5d, 0x0f, 0xb2, 0x5e, 0xe6, 0x02, 0xf1, 0x10, 0xf5, 0x95, 0xb0, 0x5b, 0x95, 0xde, 0x9a, + 0xc7, 0xef, 0x6c, 0x7e, 0xcb, 0xce, 0x67, 0xdc, 0xe0, 0xf7, 0x9d, 0x8b, 0x3c, 0x76, 0xbf, 0x84, + 0xd2, 0x61, 0x66, 0xf8, 0xb3, 0x7c, 0x66, 0xd7, 0x35, 0x27, 0x90, 0x4c, 0x4a, 0x75, 0xe8, 0x3d, + 0xc1, 0xb7, 0x70, 0xd9, 0x89, 0x18, 0x5f, 0xef, 0xc3, 0x45, 0x8e, 0xc4, 0x77, 0xfa, 0xe2, 0xa9, + 0xfb, 0xe0, 0xf3, 0xfc, 0x84, 0xcd, 0xae, 0xaf, 0x4f, 0x62, 0xc9, 0x8c, 0x2b, 0x7a, 0xe5, 0x0a, + 0x9b, 0xcd, 0xd0, 0x74, 0x85, 0xed, 0xd9, 0x87, 0xbc, 0xe1, 0xff, 0x0c, 0x2a, 0xb1, 0xa7, 0xcb, + 0xc9, 0x26, 0x21, 0xdf, 0x03, 0x93, 0xa4, 0x46, 0x2a, 0x24, 0xbd, 0xf2, 0x26, 0xcd, 0x5f, 0xc9, + 0x1b, 0x61, 0xfd, 0xbd, 0x8f, 0xf0, 0xe0, 0x4b, 0xa4, 0x24, 0xcd, 0x4b, 0x6e, 0xda, 0xc3, 0xe0, + 0x2c, 0x1e, 0x07, 0xbe, 0x12, 0x46, 0xe9, 0xd9, 0x3e, 0x39, 0x23, 0xe5, 0x88, 0x92, 0x60, 0x64, + 0xf5, 0x98, 0xde, 0xfe, 0x77, 0xac, 0xe5, 0x9c, 0x79, 0x3d, 0xf9, 0x84, 0x3a, 0xf1, 0x83, 0xb8, + 0x44, 0xb4, 0x44, 0xfd, 0x11, 0x72, 0xba, 0x28, 0xf9, 0x9a, 0x2b, 0x0b, 0x43, 0x79, 0x7f, 0x95, + 0x65, 0x15, 0x0c, 0xce, 0x54, 0x11, 0x3f, 0x70, 0xa3, 0xe7, 0x8b, 0xf6, 0x5a, 0x6c, 0x56, 0xd0, + 0x0b, 0x24, 0x6f, 0x90, 0x85, 0xf6, 0x1a, 0xf9, 0x12, 0xb7, 0x12, 0xc1, 0xbe, 0xe6, 0xfb, 0x51, + 0x18, 0x05, 0x4e, 0xa7, 0xde, 0x0c, 0xdc, 0x4e, 0x94, 0xdb, 0xe9, 0xd8, 0x59, 0x3d, 0x8b, 0x4c, + 0xf3, 0x9d, 0x15, 0x01, 0xfb, 0xb3, 0x42, 0xfc, 0xa8, 0xf7, 0x43, 0x59, 0x85, 0x3d, 0x34, 0x97, + 0xba, 0x0c, 0xd1, 0xff, 0x2a, 0x99, 0x36, 0x60, 0x2e, 0x27, 0x30, 0x92, 0xba, 0xa6, 0xee, 0x1d, + 0x38, 0x69, 0xbe, 0x77, 0xc5, 0xe4, 0x2b, 0x98, 0xcd, 0x8c, 0x9c, 0xa4, 0x4c, 0xed, 0xbd, 0xe2, + 0x2a, 0xf5, 0x63, 0xfe, 0x04, 0xca, 0xfc, 0xe5, 0x0a, 0x3a, 0x68, 0x1b, 0x41, 0x74, 0xe2, 0xf7, + 0x4c, 0x39, 0x08, 0xc9, 0xfd, 0x3a, 0x1f, 0x4f, 0xbd, 0xaa, 0x9f, 0xc1, 0xe8, 0x29, 0x89, 0x64, + 0xfa, 0xea, 0xc3, 0xcb, 0x2a, 0xec, 0xf5, 0x68, 0x6a, 0x0b, 0x66, 0x77, 0x69, 0xe0, 0x3e, 0x7e, + 0x9e, 0x64, 0x28, 0x47, 0x26, 0xb3, 0xb4, 0x17, 0xc7, 0xcf, 0x61, 0x6e, 0xd1, 0x3f, 0xe8, 0x88, + 0xe7, 0x89, 0x06, 0x4f, 0xe5, 0x73, 0x90, 0x5d, 0xde, 0xdf, 0x69, 0x6b, 0x5e, 0xbd, 0x9f, 0xd4, + 0xe9, 0x16, 0xf1, 0xdd, 0xee, 0x75, 0xd3, 0x6f, 0x22, 0x03, 0x25, 0x7e, 0x75, 0x22, 0x55, 0x39, + 0x9d, 0x7e, 0x1b, 0x17, 0x61, 0x82, 0x8e, 0xdb, 0xe6, 0xb4, 0x45, 0x98, 0x55, 0xde, 0xfb, 0xb1, + 0x5b, 0x06, 0x57, 0x5e, 0x61, 0x3e, 0xd7, 0x63, 0xb4, 0x76, 0x43, 0x9e, 0x2d, 0x66, 0x26, 0xf7, + 0x84, 0x77, 0x78, 0x66, 0x9a, 0xf7, 0xcc, 0x76, 0x6a, 0xe1, 0x23, 0xda, 0xed, 0x1e, 0x22, 0x16, + 0xd1, 0xe3, 0x47, 0x30, 0x4c, 0xbc, 0xad, 0x98, 0xd4, 0x69, 0x7b, 0xed, 0xd6, 0x29, 0x62, 0x14, + 0x6a, 0x3f, 0x80, 0x89, 0xba, 0x5e, 0x79, 0x46, 0x25, 0xb9, 0x8b, 0x42, 0x3d, 0x77, 0xea, 0xdf, + 0xf6, 0x1e, 0x4e, 0xaf, 0xea, 0xe0, 0x39, 0x56, 0x2f, 0x72, 0x7d, 0x84, 0x8c, 0x24, 0x7b, 0xea, + 0x14, 0xc8, 0xca, 0x81, 0xa9, 0x7c, 0x84, 0xb2, 0xf3, 0xf2, 0x35, 0x78, 0xea, 0x9e, 0x64, 0x8a, + 0x53, 0x62, 0xf5, 0xcf, 0x25, 0xac, 0x9c, 0xff, 0x7b, 0xe6, 0x48, 0xe5, 0x0e, 0x4d, 0x71, 0x5a, + 0x41, 0xdd, 0xa1, 0x29, 0x95, 0xac, 0x50, 0x77, 0x68, 0xca, 0xc8, 0x44, 0xb8, 0x8c, 0xbc, 0xe2, + 0x9c, 0x47, 0x3d, 0x8c, 0x11, 0x8a, 0x4d, 0x46, 0x6a, 0xa5, 0x07, 0x7a, 0x14, 0x12, 0x9e, 0x29, + 0xa9, 0x87, 0xad, 0x35, 0x19, 0x7d, 0x24, 0x91, 0x5a, 0xe9, 0x2e, 0x94, 0x78, 0xd2, 0x88, 0x38, + 0x78, 0x63, 0xec, 0xe3, 0x98, 0xce, 0x65, 0xd1, 0x63, 0x52, 0x4b, 0xc9, 0x90, 0x77, 0xca, 0x64, + 0x96, 0x13, 0x0b, 0xaf, 0xc7, 0x52, 0x85, 0x38, 0xb0, 0x9d, 0x32, 0x4c, 0xa5, 0x62, 0xdd, 0xcd, + 0x9f, 0xcb, 0x28, 0x51, 0x22, 0xe5, 0x84, 0x1e, 0x06, 0x4f, 0x75, 0x29, 0x23, 0x36, 0xde, 0xfc, + 0xf9, 0xcc, 0x32, 0xc1, 0x28, 0xe2, 0xe9, 0xb4, 0xb3, 0xd3, 0x86, 0xc7, 0x2f, 0xd6, 0x7a, 0xe0, + 0xc8, 0x6a, 0x6e, 0x1c, 0x07, 0x55, 0xd4, 0x4a, 0x55, 0xc6, 0xa7, 0x8c, 0x5c, 0xe5, 0xdf, 0xc9, + 0x78, 0x54, 0x62, 0x60, 0xc4, 0x6e, 0x6f, 0xbd, 0x13, 0xa7, 0x93, 0x87, 0x32, 0x03, 0x4f, 0x4e, + 0x4d, 0xfd, 0x18, 0xe4, 0xce, 0xe0, 0x43, 0x99, 0x73, 0xe7, 0x55, 0x33, 0x7e, 0x04, 0x17, 0x12, + 0x2f, 0x55, 0x4c, 0xc6, 0x37, 0xb2, 0x9f, 0xb3, 0x64, 0x0e, 0x4f, 0xbe, 0xcc, 0x7e, 0x39, 0xfd, + 0xa2, 0x25, 0x31, 0xef, 0x27, 0xdd, 0xf3, 0xd6, 0x61, 0x0a, 0xb7, 0x19, 0x99, 0x75, 0x3f, 0x0e, + 0x82, 0x63, 0x82, 0x93, 0xd1, 0x98, 0x92, 0xa5, 0xea, 0xa1, 0xfc, 0x84, 0x78, 0xfd, 0xcc, 0x73, + 0xf8, 0xcf, 0x9b, 0x4f, 0xa2, 0x11, 0x98, 0x75, 0x8a, 0x61, 0xc1, 0xee, 0x1d, 0xf2, 0x03, 0x38, + 0x1d, 0x3f, 0x8a, 0xe6, 0x2c, 0x32, 0xd0, 0x7a, 0x18, 0xca, 0x4e, 0xc7, 0x2f, 0xa3, 0x4f, 0x4e, + 0xbe, 0x22, 0x8f, 0xa2, 0x98, 0xfc, 0x62, 0xea, 0x5d, 0x8f, 0xd1, 0x87, 0xe3, 0x9c, 0x48, 0xda, + 0xd8, 0x9e, 0x74, 0x76, 0x9a, 0xf8, 0xb9, 0x65, 0xc7, 0x77, 0xd4, 0x3f, 0xb7, 0x9e, 0x31, 0x28, + 0x95, 0xf8, 0x9b, 0xc3, 0x67, 0x1d, 0xae, 0x62, 0x4c, 0x98, 0x2d, 0x1e, 0x05, 0x30, 0x1b, 0x2b, + 0xbf, 0xed, 0xc9, 0x48, 0x32, 0x6d, 0xb8, 0xd2, 0x37, 0xc0, 0x25, 0xb9, 0x65, 0xf8, 0xf2, 0xf4, + 0x0f, 0x85, 0xd9, 0x43, 0xf3, 0x98, 0xc9, 0x8a, 0x13, 0xa9, 0xce, 0xd9, 0x1e, 0x21, 0x2b, 0xd5, + 0x39, 0xdb, 0x33, 0xd0, 0xe4, 0xe7, 0x98, 0xd6, 0x4a, 0x9c, 0x51, 0x18, 0xe7, 0x89, 0x7a, 0x3c, + 0xfa, 0x75, 0xcf, 0x6b, 0x9f, 0x2b, 0xe6, 0xa5, 0x68, 0x8a, 0x10, 0x75, 0x9a, 0x4b, 0x42, 0x13, + 0xcb, 0x63, 0xde, 0x9f, 0x49, 0x0f, 0x1f, 0xf2, 0x4b, 0x7c, 0x01, 0x9e, 0xb8, 0xe5, 0x39, 0xf0, + 0xda, 0xd2, 0x4f, 0xff, 0xe3, 0xa5, 0xc2, 0x4f, 0x7f, 0x76, 0xa9, 0xf0, 0x6f, 0x7f, 0x76, 0xa9, + 0xf0, 0x1f, 0x7e, 0x76, 0xa9, 0xf0, 0xe5, 0xc2, 0xf1, 0x62, 0x30, 0xf3, 0x44, 0x94, 0xb7, 0x38, + 0xbb, 0x61, 0xfc, 0xef, 0xad, 0xff, 0x19, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x19, 0xb0, 0x0e, 0x34, + 0xed, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -17189,6 +17190,10 @@ type AuthServiceClient interface { UpsertTrustedCluster(ctx context.Context, in *types.TrustedClusterV2, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) // UpsertTrustedClusterV2 upserts a Trusted Cluster in a backend. UpsertTrustedClusterV2(ctx context.Context, in *types.TrustedClusterV2, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) + // CreateTrustedClusterV2 creates a Trusted Cluster in a backend. + CreateTrustedClusterV2(ctx context.Context, in *types.TrustedClusterV2, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) + // UpdateTrustedClusterV2 updates a Trusted Cluster in a backend. + UpdateTrustedClusterV2(ctx context.Context, in *types.TrustedClusterV2, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) // DeleteTrustedCluster deletes an existing Trusted Cluster in a backend by name. DeleteTrustedCluster(ctx context.Context, in *types.ResourceRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // GetToken retrieves a token described by the given request. @@ -19186,6 +19191,24 @@ func (c *authServiceClient) UpsertTrustedClusterV2(ctx context.Context, in *type return out, nil } +func (c *authServiceClient) CreateTrustedClusterV2(ctx context.Context, in *types.TrustedClusterV2, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) { + out := new(types.TrustedClusterV2) + err := c.cc.Invoke(ctx, "/proto.AuthService/CreateTrustedClusterV2", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authServiceClient) UpdateTrustedClusterV2(ctx context.Context, in *types.TrustedClusterV2, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) { + out := new(types.TrustedClusterV2) + err := c.cc.Invoke(ctx, "/proto.AuthService/UpdateTrustedClusterV2", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *authServiceClient) DeleteTrustedCluster(ctx context.Context, in *types.ResourceRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/proto.AuthService/DeleteTrustedCluster", in, out, opts...) @@ -20581,6 +20604,10 @@ type AuthServiceServer interface { UpsertTrustedCluster(context.Context, *types.TrustedClusterV2) (*types.TrustedClusterV2, error) // UpsertTrustedClusterV2 upserts a Trusted Cluster in a backend. UpsertTrustedClusterV2(context.Context, *types.TrustedClusterV2) (*types.TrustedClusterV2, error) + // CreateTrustedClusterV2 creates a Trusted Cluster in a backend. + CreateTrustedClusterV2(context.Context, *types.TrustedClusterV2) (*types.TrustedClusterV2, error) + // UpdateTrustedClusterV2 updates a Trusted Cluster in a backend. + UpdateTrustedClusterV2(context.Context, *types.TrustedClusterV2) (*types.TrustedClusterV2, error) // DeleteTrustedCluster deletes an existing Trusted Cluster in a backend by name. DeleteTrustedCluster(context.Context, *types.ResourceRequest) (*emptypb.Empty, error) // GetToken retrieves a token described by the given request. @@ -21319,6 +21346,12 @@ func (*UnimplementedAuthServiceServer) UpsertTrustedCluster(ctx context.Context, func (*UnimplementedAuthServiceServer) UpsertTrustedClusterV2(ctx context.Context, req *types.TrustedClusterV2) (*types.TrustedClusterV2, error) { return nil, status.Errorf(codes.Unimplemented, "method UpsertTrustedClusterV2 not implemented") } +func (*UnimplementedAuthServiceServer) CreateTrustedClusterV2(ctx context.Context, req *types.TrustedClusterV2) (*types.TrustedClusterV2, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateTrustedClusterV2 not implemented") +} +func (*UnimplementedAuthServiceServer) UpdateTrustedClusterV2(ctx context.Context, req *types.TrustedClusterV2) (*types.TrustedClusterV2, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateTrustedClusterV2 not implemented") +} func (*UnimplementedAuthServiceServer) DeleteTrustedCluster(ctx context.Context, req *types.ResourceRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteTrustedCluster not implemented") } @@ -24407,6 +24440,42 @@ func _AuthService_UpsertTrustedClusterV2_Handler(srv interface{}, ctx context.Co return interceptor(ctx, in, info, handler) } +func _AuthService_CreateTrustedClusterV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(types.TrustedClusterV2) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServiceServer).CreateTrustedClusterV2(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/proto.AuthService/CreateTrustedClusterV2", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServiceServer).CreateTrustedClusterV2(ctx, req.(*types.TrustedClusterV2)) + } + return interceptor(ctx, in, info, handler) +} + +func _AuthService_UpdateTrustedClusterV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(types.TrustedClusterV2) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServiceServer).UpdateTrustedClusterV2(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/proto.AuthService/UpdateTrustedClusterV2", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServiceServer).UpdateTrustedClusterV2(ctx, req.(*types.TrustedClusterV2)) + } + return interceptor(ctx, in, info, handler) +} + func _AuthService_DeleteTrustedCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(types.ResourceRequest) if err := dec(in); err != nil { @@ -26879,6 +26948,14 @@ var _AuthService_serviceDesc = grpc.ServiceDesc{ MethodName: "UpsertTrustedClusterV2", Handler: _AuthService_UpsertTrustedClusterV2_Handler, }, + { + MethodName: "CreateTrustedClusterV2", + Handler: _AuthService_CreateTrustedClusterV2_Handler, + }, + { + MethodName: "UpdateTrustedClusterV2", + Handler: _AuthService_UpdateTrustedClusterV2_Handler, + }, { MethodName: "DeleteTrustedCluster", Handler: _AuthService_DeleteTrustedCluster_Handler, diff --git a/api/proto/teleport/legacy/client/proto/authservice.proto b/api/proto/teleport/legacy/client/proto/authservice.proto index 6c9cd08de8674..70f059654608f 100644 --- a/api/proto/teleport/legacy/client/proto/authservice.proto +++ b/api/proto/teleport/legacy/client/proto/authservice.proto @@ -3219,6 +3219,7 @@ service AuthService { rpc GetTrustedCluster(types.ResourceRequest) returns (types.TrustedClusterV2); // GetTrustedClusters gets all current Trusted Cluster resources. rpc GetTrustedClusters(google.protobuf.Empty) returns (types.TrustedClusterV2List); + // UpsertTrustedCluster upserts a Trusted Cluster in a backend. // // Deprecated: Use UpsertTrustedClusterV2 instead. @@ -3227,6 +3228,10 @@ service AuthService { } // UpsertTrustedClusterV2 upserts a Trusted Cluster in a backend. rpc UpsertTrustedClusterV2(types.TrustedClusterV2) returns (types.TrustedClusterV2); + // CreateTrustedClusterV2 creates a Trusted Cluster in a backend. + rpc CreateTrustedClusterV2(types.TrustedClusterV2) returns (types.TrustedClusterV2); + // UpdateTrustedClusterV2 updates a Trusted Cluster in a backend. + rpc UpdateTrustedClusterV2(types.TrustedClusterV2) returns (types.TrustedClusterV2); // DeleteTrustedCluster deletes an existing Trusted Cluster in a backend by name. rpc DeleteTrustedCluster(types.ResourceRequest) returns (google.protobuf.Empty); diff --git a/integration/helpers/trustedclusters.go b/integration/helpers/trustedclusters.go index 8e13fe0186b62..9dfb484ac61a7 100644 --- a/integration/helpers/trustedclusters.go +++ b/integration/helpers/trustedclusters.go @@ -56,7 +56,61 @@ func WaitForTunnelConnections(t *testing.T, authServer *auth.Server, clusterName // propagate and services to start // // Duplicated in tool/tsh/tsh_test.go -func TryCreateTrustedCluster(t *testing.T, authServer *auth.Server, trustedCluster types.TrustedCluster, skipNameValidation bool) { +func TryCreateTrustedCluster(t *testing.T, authServer *auth.Server, trustedCluster types.TrustedCluster) { + t.Helper() + ctx := context.TODO() + for i := 0; i < 10; i++ { + log.Debugf("Will create trusted cluster %v, attempt %v.", trustedCluster, i) + _, err := authServer.CreateTrustedClusterV2(ctx, trustedCluster) + if err == nil { + return + } + if trace.IsConnectionProblem(err) { + log.Debugf("Retrying on connection problem: %v.", err) + time.Sleep(500 * time.Millisecond) + continue + } + if trace.IsAccessDenied(err) { + log.Debugf("Retrying on access denied: %v.", err) + time.Sleep(500 * time.Millisecond) + continue + } + require.FailNow(t, "Terminating on unexpected problem", "%v.", err) + } + require.FailNow(t, "Timeout creating trusted cluster") +} + +// TryUpdateTrustedCluster performs several attempts to update a trusted cluster, +// retries on connection problems and access denied errors to let caches +// propagate and services to start +func TryUpdateTrustedCluster(t *testing.T, authServer *auth.Server, trustedCluster types.TrustedCluster) { + t.Helper() + ctx := context.TODO() + for i := 0; i < 10; i++ { + log.Debugf("Will create trusted cluster %v, attempt %v.", trustedCluster, i) + _, err := authServer.UpdateTrustedClusterV2(ctx, trustedCluster) + if err == nil { + return + } + if trace.IsConnectionProblem(err) { + log.Debugf("Retrying on connection problem: %v.", err) + time.Sleep(500 * time.Millisecond) + continue + } + if trace.IsAccessDenied(err) { + log.Debugf("Retrying on access denied: %v.", err) + time.Sleep(500 * time.Millisecond) + continue + } + require.FailNow(t, "Terminating on unexpected problem", "%v.", err) + } + require.FailNow(t, "Timeout creating trusted cluster") +} + +// TryUpdateTrustedCluster performs several attempts to upsert a trusted cluster, +// retries on connection problems and access denied errors to let caches +// propagate and services to start +func TryUpsertTrustedCluster(t *testing.T, authServer *auth.Server, trustedCluster types.TrustedCluster, skipNameValidation bool) { t.Helper() ctx := context.TODO() for i := 0; i < 10; i++ { diff --git a/integration/integration_test.go b/integration/integration_test.go index c76913d41d031..a1e6e7cb44c00 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -197,6 +197,7 @@ func TestIntegrations(t *testing.T) { t.Run("TrustedClustersRoleMapChanges", suite.bind(testTrustedClustersRoleMapChanges)) t.Run("TrustedClustersWithLabels", suite.bind(testTrustedClustersWithLabels)) t.Run("TrustedClustersSkipNameValidation", suite.bind(testTrustedClustersSkipNameValidation)) + t.Run("CreateAndUpdateTrustedClusters", suite.bind(testCreateAndUpdateTrustedCluster)) t.Run("TrustedTunnelNode", suite.bind(testTrustedTunnelNode)) t.Run("TwoClustersProxy", suite.bind(testTwoClustersProxy)) t.Run("TwoClustersTunnel", suite.bind(testTwoClustersTunnel)) @@ -2754,7 +2755,7 @@ func testMapRoles(t *testing.T, suite *integrationTestSuite) { // try and upsert a trusted cluster const skipNameValidation = false - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, skipNameValidation) + helpers.TryUpsertTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, skipNameValidation) helpers.WaitForTunnelConnections(t, main.Process.GetAuthServer(), clusterAux, 1) sshPort, _, _ := aux.StartNodeAndProxy(t, "aux-node") @@ -2979,6 +2980,15 @@ func testMultiplexingTrustedClusters(t *testing.T, suite *integrationTestSuite) trustedClusters(t, suite, trustedClusterTest{multiplex: true}) } +// TestCreateAndUpdateTrustedCluster tests the basic create and update +// operations for a trusted cluster. +func testCreateAndUpdateTrustedCluster(t *testing.T, suite *integrationTestSuite) { + tr := utils.NewTracer(utils.ThisFunction()).Start() + defer tr.Stop() + + createAndUpdateTrustedClusters(t, suite, trustedClusterTest{}) +} + func standardPortsOrMuxSetup(t *testing.T, mux bool, fds *[]*servicecfg.FileDescriptor) *helpers.InstanceListeners { if mux { return helpers.WebReverseTunnelMuxPortSetup(t, fds) @@ -2986,6 +2996,116 @@ func standardPortsOrMuxSetup(t *testing.T, mux bool, fds *[]*servicecfg.FileDesc return helpers.StandardListenerSetup(t, fds) } +func createAndUpdateTrustedClusters(t *testing.T, suite *integrationTestSuite, test trustedClusterTest) { + ctx := context.Background() + username := suite.Me.Username + + clusterMain := "cluster-main" + clusterAux := "cluster-aux" + mainCfg := helpers.InstanceConfig{ + ClusterName: clusterMain, + HostID: helpers.HostID, + NodeName: Host, + Priv: suite.Priv, + Pub: suite.Pub, + Log: suite.Log, + } + mainCfg.Listeners = standardPortsOrMuxSetup(t, test.multiplex, &mainCfg.Fds) + main := helpers.NewInstance(t, mainCfg) + aux := suite.newNamedTeleportInstance(t, clusterAux) + + // main cluster has a local user and belongs to role "main-devs" and "main-admins" + mainDevs := "main-devs" + mainRole, err := types.NewRole(mainDevs, types.RoleSpecV6{ + Allow: types.RoleConditions{ + Logins: []string{username}, + NodeLabels: types.Labels{types.Wildcard: []string{types.Wildcard}}, + }, + }) + require.NoError(t, err) + + mainAdmins := "main-admins" + adminsRole, err := types.NewRole(mainAdmins, types.RoleSpecV6{ + Allow: types.RoleConditions{ + Logins: []string{"superuser"}, + NodeLabels: types.Labels{types.Wildcard: []string{types.Wildcard}}, + }, + }) + require.NoError(t, err) + + main.AddUserWithRole(username, mainRole, adminsRole) + + // for role mapping test we turn on Web API on the main cluster + // as it's used + makeConfig := func(instance *helpers.TeleInstance, enableSSH bool) (*testing.T, *servicecfg.Config) { + tconf := suite.defaultServiceConfig() + tconf.Proxy.DisableWebService = false + tconf.Proxy.DisableWebInterface = true + tconf.SSH.Enabled = enableSSH + tconf, err := instance.GenerateConfig(t, nil, tconf) + require.NoError(t, err) + + tconf.CachePolicy.Enabled = false + return t, tconf + } + lib.SetInsecureDevMode(true) + defer lib.SetInsecureDevMode(false) + + require.NoError(t, main.CreateWithConf(makeConfig(main, false))) + require.NoError(t, aux.CreateWithConf(makeConfig(aux, true))) + + // auxiliary cluster has only a role aux-devs + // connect aux cluster to main cluster + // using trusted clusters, so remote user will be allowed to assume + // role specified by mapping remote role "devs" to local role "local-devs" + auxDevs := "aux-devs" + auxRole, err := types.NewRole(auxDevs, types.RoleSpecV6{ + Allow: types.RoleConditions{ + Logins: []string{username}, + NodeLabels: types.Labels{types.Wildcard: []string{types.Wildcard}}, + }, + }) + require.NoError(t, err) + _, err = aux.Process.GetAuthServer().UpsertRole(ctx, auxRole) + require.NoError(t, err) + + trustedClusterToken := "trusted-cluster-token" + tokenResource, err := types.NewProvisionToken(trustedClusterToken, []types.SystemRole{types.RoleTrustedCluster}, time.Time{}) + require.NoError(t, err) + err = main.Process.GetAuthServer().UpsertToken(ctx, tokenResource) + require.NoError(t, err) + + trustedCluster := main.AsTrustedCluster(trustedClusterToken, types.RoleMap{ + {Remote: mainDevs, Local: []string{auxDevs}}, + }) + + require.NoError(t, main.Start()) + require.NoError(t, aux.Start()) + + require.NoError(t, services.CheckAndSetDefaults(trustedCluster)) + + // Note that the trusted cluster resource name must match the cluster name. + // Modify the trusted cluster resource name and expect the create to fail. + trustedCluster.SetName(main.Secrets.SiteName + "-cluster") + _, err = aux.Process.GetAuthServer().CreateTrustedClusterV2(ctx, trustedCluster) + require.ErrorContains(t, err, "trusted cluster resource name must be the same as the remote cluster name", "expected failure due to tc name mismatch") + + // Modify the trusted cluster resource name back to what it was originally. + // Try and create a trusted cluster + trustedCluster.SetName(main.Secrets.SiteName) + helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster) + + // Update the trusted cluster resource with new role mappings. + trustedCluster.SetRoleMap(types.RoleMap{ + {Remote: mainAdmins, Local: []string{auxDevs}}, + }) + helpers.TryUpdateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster) + + // stop clusters and remaining nodes + require.NoError(t, main.StopAll()) + require.NoError(t, aux.StopAll()) +} + func trustedClusters(t *testing.T, suite *integrationTestSuite, test trustedClusterTest) { ctx := context.Background() username := suite.Me.Username @@ -3107,7 +3227,7 @@ func trustedClusters(t *testing.T, suite *integrationTestSuite, test trustedClus } // try and upsert a trusted cluster - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) + helpers.TryUpsertTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) helpers.WaitForTunnelConnections(t, main.Process.GetAuthServer(), clusterAux, 1) sshPort, _, _ := aux.StartNodeAndProxy(t, "aux-node") @@ -3349,11 +3469,11 @@ func trustedDisabledCluster(t *testing.T, suite *integrationTestSuite, test trus require.NoError(t, services.CheckAndSetDefaults(trustedCluster)) // try and upsert a trusted cluster while disabled - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) + helpers.TryUpsertTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) // try to enable disabled cluster trustedCluster.SetEnabled(true) - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) + helpers.TryUpsertTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) helpers.WaitForTunnelConnections(t, main.Process.GetAuthServer(), clusterAux, 1) helpers.CheckTrustedClustersCanConnect(ctx, t, helpers.TrustedClusterSetup{ @@ -3482,7 +3602,7 @@ func trustedClustersRoleMapChanges(t *testing.T, suite *integrationTestSuite, te require.NoError(t, services.CheckAndSetDefaults(trustedCluster)) - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) + helpers.TryUpsertTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) helpers.WaitForTunnelConnections(t, main.Process.GetAuthServer(), clusterAux, 1) // change role mapping to ensure updating works @@ -3490,7 +3610,7 @@ func trustedClustersRoleMapChanges(t *testing.T, suite *integrationTestSuite, te {Remote: mainDevs, Local: []string{auxDevs}}, }) - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) + helpers.TryUpsertTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) helpers.WaitForTunnelConnections(t, main.Process.GetAuthServer(), clusterAux, 1) helpers.CheckTrustedClustersCanConnect(ctx, t, helpers.TrustedClusterSetup{ @@ -3503,7 +3623,7 @@ func trustedClustersRoleMapChanges(t *testing.T, suite *integrationTestSuite, te // disable the enabled trusted cluster and ensure it no longer works trustedCluster.SetEnabled(false) - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) + helpers.TryUpsertTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, test.skipNameValidation) // Wait for both cluster to no longer see each other via reverse tunnels. require.Eventually(t, helpers.WaitForClusters(main.Tunnel, 0), 10*time.Second, 1*time.Second, @@ -3581,7 +3701,7 @@ func testTrustedTunnelNode(t *testing.T, suite *integrationTestSuite) { // try and upsert a trusted cluster const skipNameValidation = false - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, skipNameValidation) + helpers.TryUpsertTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, skipNameValidation) helpers.WaitForTunnelConnections(t, main.Process.GetAuthServer(), clusterAux, 1) // Create a Teleport instance with a node that dials back to the aux cluster. @@ -3762,7 +3882,7 @@ func testTrustedClusterAgentless(t *testing.T, suite *integrationTestSuite) { // try and upsert a trusted cluster const skipNameValidation = false - helpers.TryCreateTrustedCluster(t, leaf.Process.GetAuthServer(), trustedCluster, skipNameValidation) + helpers.TryUpsertTrustedCluster(t, leaf.Process.GetAuthServer(), trustedCluster, skipNameValidation) helpers.WaitForTunnelConnections(t, main.Process.GetAuthServer(), clusterAux, 1) // Wait for both cluster to see each other via reverse tunnels. @@ -5585,7 +5705,7 @@ func testRotateTrustedClusters(t *testing.T, suite *integrationTestSuite) { defer lib.SetInsecureDevMode(false) const skipNameValidation = false - helpers.TryCreateTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, skipNameValidation) + helpers.TryUpsertTrustedCluster(t, aux.Process.GetAuthServer(), trustedCluster, skipNameValidation) helpers.WaitForTunnelConnections(t, svc.GetAuthServer(), aux.Secrets.SiteName, 1) // capture credentials before reload has started to simulate old client @@ -7486,7 +7606,7 @@ func createTrustedClusterPair(t *testing.T, suite *integrationTestSuite, extraSe require.NoError(t, services.CheckAndSetDefaults(trustedCluster)) const skipNameValidation = false - helpers.TryCreateTrustedCluster(t, leaf.Process.GetAuthServer(), trustedCluster, skipNameValidation) + helpers.TryUpsertTrustedCluster(t, leaf.Process.GetAuthServer(), trustedCluster, skipNameValidation) helpers.WaitForTunnelConnections(t, root.Process.GetAuthServer(), leafName, 1) _, _, rootProxySSHPort := root.StartNodeAndProxy(t, "root-zero") diff --git a/integration/proxy/proxy_helpers.go b/integration/proxy/proxy_helpers.go index f54f363512303..9de514caf73e1 100644 --- a/integration/proxy/proxy_helpers.go +++ b/integration/proxy/proxy_helpers.go @@ -185,7 +185,7 @@ func newSuite(t *testing.T, opts ...proxySuiteOptionsFunc) *Suite { if options.trustedCluster != nil { const skipNameValidation = false - helpers.TryCreateTrustedCluster(t, suite.leaf.Process.GetAuthServer(), options.trustedCluster, skipNameValidation) + helpers.TryUpsertTrustedCluster(t, suite.leaf.Process.GetAuthServer(), options.trustedCluster, skipNameValidation) helpers.WaitForTunnelConnections(t, suite.root.Process.GetAuthServer(), suite.leaf.Secrets.SiteName, 1) } diff --git a/lib/auth/auth_with_roles.go b/lib/auth/auth_with_roles.go index a4657a936fb3f..fc645a6033acd 100644 --- a/lib/auth/auth_with_roles.go +++ b/lib/auth/auth_with_roles.go @@ -4978,6 +4978,42 @@ func (a *ServerWithRoles) UpsertTrustedClusterV2(ctx context.Context, tc types.T return a.authServer.UpsertTrustedClusterV2(ctx, tc) } +// CreateTrustedClusterV2 creates a Trusted Cluster. +func (a *ServerWithRoles) CreateTrustedClusterV2(ctx context.Context, tc types.TrustedCluster) (types.TrustedCluster, error) { + // Don't allow a Cloud tenant to be a leaf cluster. + if modules.GetModules().Features().Cloud { + return nil, trace.NotImplemented("cloud tenants cannot be leaf clusters") + } + + if err := a.action(types.KindTrustedCluster, types.VerbCreate); err != nil { + return nil, trace.Wrap(err) + } + + if err := a.context.AuthorizeAdminActionAllowReusedMFA(); err != nil { + return nil, trace.Wrap(err) + } + + return a.authServer.CreateTrustedClusterV2(ctx, tc) +} + +// UpdateTrustedClusterV2 updates a Trusted Cluster. +func (a *ServerWithRoles) UpdateTrustedClusterV2(ctx context.Context, tc types.TrustedCluster) (types.TrustedCluster, error) { + // Don't allow a Cloud tenant to be a leaf cluster. + if modules.GetModules().Features().Cloud { + return nil, trace.NotImplemented("cloud tenants cannot be leaf clusters") + } + + if err := a.action(types.KindTrustedCluster, types.VerbUpdate); err != nil { + return nil, trace.Wrap(err) + } + + if err := a.context.AuthorizeAdminActionAllowReusedMFA(); err != nil { + return nil, trace.Wrap(err) + } + + return a.authServer.UpdateTrustedClusterV2(ctx, tc) +} + func (a *ServerWithRoles) ValidateTrustedCluster(ctx context.Context, validateRequest *authclient.ValidateTrustedClusterRequest) (*authclient.ValidateTrustedClusterResponse, error) { // Don't allow a leaf cluster to be added to a Cloud tenant. if modules.GetModules().Features().Cloud { diff --git a/lib/auth/grpcserver.go b/lib/auth/grpcserver.go index c0d3c194e909e..07d755cda31d8 100644 --- a/lib/auth/grpcserver.go +++ b/lib/auth/grpcserver.go @@ -2977,6 +2977,46 @@ func (g *GRPCServer) UpsertTrustedClusterV2(ctx context.Context, cluster *types. return trustedClusterV2, nil } +// CreateTrustedClusterV2 creates a Trusted Cluster. +func (g *GRPCServer) CreateTrustedClusterV2(ctx context.Context, cluster *types.TrustedClusterV2) (*types.TrustedClusterV2, error) { + auth, err := g.authenticate(ctx) + if err != nil { + return nil, trace.Wrap(err) + } + if err = services.ValidateTrustedCluster(cluster); err != nil { + return nil, trace.Wrap(err) + } + tc, err := auth.ServerWithRoles.CreateTrustedClusterV2(ctx, cluster) + if err != nil { + return nil, trace.Wrap(err) + } + trustedClusterV2, ok := tc.(*types.TrustedClusterV2) + if !ok { + return nil, trace.Errorf("encountered unexpected Trusted Cluster type: %T", tc) + } + return trustedClusterV2, nil +} + +// UpdateTrustedClusterV2 updates a Trusted Cluster. +func (g *GRPCServer) UpdateTrustedClusterV2(ctx context.Context, cluster *types.TrustedClusterV2) (*types.TrustedClusterV2, error) { + auth, err := g.authenticate(ctx) + if err != nil { + return nil, trace.Wrap(err) + } + if err = services.ValidateTrustedCluster(cluster); err != nil { + return nil, trace.Wrap(err) + } + tc, err := auth.ServerWithRoles.UpdateTrustedClusterV2(ctx, cluster) + if err != nil { + return nil, trace.Wrap(err) + } + trustedClusterV2, ok := tc.(*types.TrustedClusterV2) + if !ok { + return nil, trace.Errorf("encountered unexpected Trusted Cluster type: %T", tc) + } + return trustedClusterV2, nil +} + // DeleteTrustedCluster deletes a Trusted Cluster by name. func (g *GRPCServer) DeleteTrustedCluster(ctx context.Context, req *types.ResourceRequest) (*emptypb.Empty, error) { auth, err := g.authenticate(ctx) diff --git a/lib/auth/trustedcluster.go b/lib/auth/trustedcluster.go index 1be35eb74f134..6a5ae458e0cc9 100644 --- a/lib/auth/trustedcluster.go +++ b/lib/auth/trustedcluster.go @@ -60,6 +60,42 @@ func (a *Server) UpsertTrustedClusterV2(ctx context.Context, tc types.TrustedClu return upserted, trace.Wrap(err) } +// CreateTrustedClusterV2 creates a Trusted Cluster relationship. +func (a *Server) CreateTrustedClusterV2(ctx context.Context, tc types.TrustedCluster) (newTrustedCluster types.TrustedCluster, returnErr error) { + // verify that trusted cluster role map does not reference non-existent roles + if err := a.checkLocalRoles(ctx, tc.GetRoleMap()); err != nil { + return nil, trace.Wrap(err) + } + + _, err := a.GetTrustedCluster(ctx, tc.GetName()) + if err != nil && !trace.IsNotFound(err) { + return nil, trace.Wrap(err) + } + + if err == nil { + return nil, trace.AlreadyExists("trusted cluster with name %s already exists", tc.GetName()) + } + + const validateNameTrue = true + created, err := a.createTrustedCluster(ctx, tc, validateNameTrue) + return created, trace.Wrap(err) +} + +// UpdateTrustedClusterV2 updates a Trusted Cluster relationship. +func (a *Server) UpdateTrustedClusterV2(ctx context.Context, tc types.TrustedCluster) (newTrustedCluster types.TrustedCluster, returnErr error) { + // verify that trusted cluster role map does not reference non-existent roles + if err := a.checkLocalRoles(ctx, tc.GetRoleMap()); err != nil { + return nil, trace.Wrap(err) + } + + existingCluster, err := a.GetTrustedCluster(ctx, tc.GetName()) + if err != nil { + return nil, trace.Wrap(err) + } + updated, err := a.updateTrustedCluster(ctx, tc, existingCluster) + return updated, trace.Wrap(err) +} + // upsertTrustedCluster creates or toggles a Trusted Cluster relationship. func (a *Server) upsertTrustedCluster(ctx context.Context, tc types.TrustedCluster, validateName bool) (newTrustedCluster types.TrustedCluster, returnErr error) { // verify that trusted cluster role map does not reference non-existent roles @@ -86,26 +122,24 @@ func (a *Server) upsertTrustedCluster(ctx context.Context, tc types.TrustedClust return a.createTrustedCluster(ctx, tc, validateName) } - if err := existingCluster.CanChangeStateTo(tc); err != nil { - return nil, trace.Wrap(err) - } + updated, err := a.updateTrustedCluster(ctx, tc, existingCluster) + return updated, trace.Wrap(err) +} - // always load all current CAs. even if we aren't changing them as part of - // this function, Services.UpdateTrustedCluster will only correctly activate/deactivate - // CAs that are explicitly passed to it. note that we pass in the existing cluster state - // since where CAs are stored depends on the current state of the trusted cluster. - cas, err := a.getCAsForTrustedCluster(ctx, existingCluster) +func (a *Server) createTrustedCluster(ctx context.Context, tc types.TrustedCluster, validateName bool) (types.TrustedCluster, error) { + remoteCAs, err := a.establishTrust(ctx, tc, validateName) if err != nil { return nil, trace.Wrap(err) } - // propagate any role map changes to cas - configureCAsForTrustedCluster(tc, cas) + // Force name to the name of the trusted cluster. + tc.SetName(remoteCAs[0].GetClusterName()) - // state transition is valid, set the expected revision - tc.SetRevision(existingCluster.GetRevision()) + // perform some configuration on the remote CAs + configureCAsForTrustedCluster(tc, remoteCAs) - revision, err := a.Services.UpdateTrustedCluster(ctx, tc, cas) + // atomically create trusted cluster and cert authorities + revision, err := a.Services.CreateTrustedCluster(ctx, tc, remoteCAs) if err != nil { return nil, trace.Wrap(err) } @@ -119,20 +153,28 @@ func (a *Server) upsertTrustedCluster(ctx context.Context, tc types.TrustedClust return tc, nil } -func (a *Server) createTrustedCluster(ctx context.Context, tc types.TrustedCluster, validateName bool) (types.TrustedCluster, error) { - remoteCAs, err := a.establishTrust(ctx, tc, validateName) +// updateTrustedCluster updates the Trusted Cluster. +func (a *Server) updateTrustedCluster(ctx context.Context, tc, existingCluster types.TrustedCluster) (types.TrustedCluster, error) { + if err := existingCluster.CanChangeStateTo(tc); err != nil { + return nil, trace.Wrap(err) + } + + // always load all current CAs. even if we aren't changing them as part of + // this function, Services.UpdateTrustedCluster will only correctly activate/deactivate + // CAs that are explicitly passed to it. note that we pass in the existing cluster state + // since where CAs are stored depends on the current state of the trusted cluster. + cas, err := a.getCAsForTrustedCluster(ctx, existingCluster) if err != nil { return nil, trace.Wrap(err) } - // Force name to the name of the trusted cluster. - tc.SetName(remoteCAs[0].GetClusterName()) + // propagate any role map changes to cas + configureCAsForTrustedCluster(tc, cas) - // perform some configuration on the remote CAs - configureCAsForTrustedCluster(tc, remoteCAs) + // state transition is valid, set the expected revision + tc.SetRevision(existingCluster.GetRevision()) - // atomically create trusted cluster and cert authorities - revision, err := a.Services.CreateTrustedCluster(ctx, tc, remoteCAs) + revision, err := a.Services.UpdateTrustedCluster(ctx, tc, cas) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/auth/trustedcluster_test.go b/lib/auth/trustedcluster_test.go index 7de239088552b..37df3fa7c2a02 100644 --- a/lib/auth/trustedcluster_test.go +++ b/lib/auth/trustedcluster_test.go @@ -585,3 +585,157 @@ func TestUpsertTrustedCluster(t *testing.T) { require.NoError(t, err) }) } + +func TestUpdateTrustedCluster(t *testing.T) { + ctx := context.Background() + testAuth, err := NewTestAuthServer(TestAuthServerConfig{ + ClusterName: "localcluster", + Dir: t.TempDir(), + }) + require.NoError(t, err) + a := testAuth.AuthServer + + const validToken = "validtoken" + tks, err := types.NewStaticTokens(types.StaticTokensSpecV2{ + StaticTokens: []types.ProvisionTokenV1{{ + Roles: []types.SystemRole{types.RoleTrustedCluster}, + Token: validToken, + }}, + }) + require.NoError(t, err) + + err = a.SetStaticTokens(tks) + require.NoError(t, err) + + role, err := types.NewRole("test-role", types.RoleSpecV6{}) + require.NoError(t, err) + _, err = a.UpsertRole(ctx, role) + require.NoError(t, err) + + trustedClusterSpec := types.TrustedClusterSpecV2{ + Enabled: true, + RoleMap: []types.RoleMapping{ + { + Local: []string{"test-role"}, + Remote: "someRole", + }, + }, + ProxyAddress: "localhost", + } + + trustedCluster, err := types.NewTrustedCluster("trustedcluster", trustedClusterSpec) + require.NoError(t, err) + + ca := suite.NewTestCA(types.UserCA, "trustedcluster") + + configureCAsForTrustedCluster(trustedCluster, []types.CertAuthority{ca}) + + _, err = a.Services.CreateTrustedCluster(ctx, trustedCluster, []types.CertAuthority{ca}) + require.NoError(t, err) + + err = a.createReverseTunnel(ctx, trustedCluster) + require.NoError(t, err) + + t.Run("Invalid role change", func(t *testing.T) { + trustedCluster, err := types.NewTrustedCluster("trustedcluster", + types.TrustedClusterSpecV2{ + Enabled: true, + RoleMap: []types.RoleMapping{ + { + Local: []string{"someNewRole"}, + Remote: "someRole", + }, + }, + ProxyAddress: "localhost", + }) + require.NoError(t, err) + _, err = a.UpdateTrustedClusterV2(ctx, trustedCluster) + require.ErrorContains(t, err, "someNewRole") + }) + t.Run("Change role map of existing enabled trusted cluster", func(t *testing.T) { + trustedCluster, err := types.NewTrustedCluster("trustedcluster", + types.TrustedClusterSpecV2{ + Enabled: true, + RoleMap: []types.RoleMapping{ + { + Local: []string{constants.DefaultImplicitRole}, + Remote: "someRole", + }, + }, + ProxyAddress: "localhost", + }) + require.NoError(t, err) + _, err = a.UpdateTrustedClusterV2(ctx, trustedCluster) + require.NoError(t, err) + }) + t.Run("Disable existing trusted cluster", func(t *testing.T) { + trustedCluster, err := types.NewTrustedCluster("trustedcluster", + types.TrustedClusterSpecV2{ + Enabled: false, + RoleMap: []types.RoleMapping{ + { + Local: []string{constants.DefaultImplicitRole}, + Remote: "someRole", + }, + }, + ProxyAddress: "localhost", + }) + require.NoError(t, err) + _, err = a.UpdateTrustedClusterV2(ctx, trustedCluster) + require.NoError(t, err) + }) + t.Run("Change role map of existing disabled trusted cluster", func(t *testing.T) { + trustedCluster, err := types.NewTrustedCluster("trustedcluster", + types.TrustedClusterSpecV2{ + Enabled: false, + RoleMap: []types.RoleMapping{ + { + Local: []string{constants.DefaultImplicitRole}, + Remote: "someOtherRole", + }, + }, + ProxyAddress: "localhost", + }) + require.NoError(t, err) + _, err = a.UpdateTrustedClusterV2(ctx, trustedCluster) + require.NoError(t, err) + }) + t.Run("Enable existing trusted cluster", func(t *testing.T) { + trustedCluster, err := types.NewTrustedCluster("trustedcluster", + types.TrustedClusterSpecV2{ + Enabled: true, + RoleMap: []types.RoleMapping{ + { + Local: []string{constants.DefaultImplicitRole}, + Remote: "someOtherRole", + }, + }, + ProxyAddress: "localhost", + }) + require.NoError(t, err) + _, err = a.UpdateTrustedClusterV2(ctx, trustedCluster) + require.NoError(t, err) + }) + t.Run("Cloud prohibits being a leaf cluster", func(t *testing.T) { + modules.SetTestModules(t, &modules.TestModules{ + TestFeatures: modules.Features{Cloud: true}, + }) + + tc, err := types.NewTrustedCluster("test", types.TrustedClusterSpecV2{ + RoleMap: []types.RoleMapping{ + {Remote: teleport.PresetAccessRoleName, Local: []string{teleport.PresetAccessRoleName}}, + }, + }) + require.NoError(t, err, "creating trusted cluster resource") + + server := ServerWithRoles{authServer: a} + _, err = server.UpdateTrustedClusterV2(ctx, tc) + require.True(t, trace.IsNotImplemented(err), "UpdateTrustedClusterV2 returned an unexpected error, got = %v (%T), want trace.NotImplementedError", err, err) + }) + t.Run("Upsert unmodified trusted cluster", func(t *testing.T) { + trustedCluster, err := types.NewTrustedCluster("trustedcluster", trustedClusterSpec) + require.NoError(t, err) + _, err = a.UpdateTrustedClusterV2(ctx, trustedCluster) + require.NoError(t, err) + }) +} From d3118e2de2767ee87589e36988e7aa532edef4b1 Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Tue, 10 Dec 2024 13:48:43 -0800 Subject: [PATCH 17/25] Address feedback --- lib/auth/auth_with_roles.go | 9 ++++++--- tool/tctl/common/resource_command.go | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/auth/auth_with_roles.go b/lib/auth/auth_with_roles.go index fc645a6033acd..89a9c43b79bb4 100644 --- a/lib/auth/auth_with_roles.go +++ b/lib/auth/auth_with_roles.go @@ -4975,7 +4975,8 @@ func (a *ServerWithRoles) UpsertTrustedClusterV2(ctx context.Context, tc types.T return nil, trace.Wrap(err) } - return a.authServer.UpsertTrustedClusterV2(ctx, tc) + upserted, err := a.authServer.UpsertTrustedClusterV2(ctx, tc) + return upserted, trace.Wrap(err) } // CreateTrustedClusterV2 creates a Trusted Cluster. @@ -4993,7 +4994,8 @@ func (a *ServerWithRoles) CreateTrustedClusterV2(ctx context.Context, tc types.T return nil, trace.Wrap(err) } - return a.authServer.CreateTrustedClusterV2(ctx, tc) + created, err := a.authServer.CreateTrustedClusterV2(ctx, tc) + return created, trace.Wrap(err) } // UpdateTrustedClusterV2 updates a Trusted Cluster. @@ -5011,7 +5013,8 @@ func (a *ServerWithRoles) UpdateTrustedClusterV2(ctx context.Context, tc types.T return nil, trace.Wrap(err) } - return a.authServer.UpdateTrustedClusterV2(ctx, tc) + updated, err := a.authServer.UpdateTrustedClusterV2(ctx, tc) + return updated, trace.Wrap(err) } func (a *ServerWithRoles) ValidateTrustedCluster(ctx context.Context, validateRequest *authclient.ValidateTrustedClusterRequest) (*authclient.ValidateTrustedClusterResponse, error) { diff --git a/tool/tctl/common/resource_command.go b/tool/tctl/common/resource_command.go index 5d93425a53fbe..2e2b31340dc4e 100644 --- a/tool/tctl/common/resource_command.go +++ b/tool/tctl/common/resource_command.go @@ -397,6 +397,7 @@ func (rc *ResourceCommand) createTrustedCluster(ctx context.Context, client *aut //nolint:staticcheck // SA1019. UpsertTrustedCluster is deprecated but will // continue being supported for tctl clients. + // TODO(bernardjkim) consider using UpsertTrustedClusterV2 in VX.0.0 out, err := client.UpsertTrustedCluster(ctx, tc) if err != nil { // If force is used and UpsertTrustedCluster returns trace.AlreadyExists, From aa82d2238542ee22ee3251be0e312fa6b38ee5e9 Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Tue, 10 Dec 2024 13:56:28 -0800 Subject: [PATCH 18/25] Minor fixes --- integration/integration_test.go | 6 +++--- lib/auth/trustedcluster_test.go | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/integration/integration_test.go b/integration/integration_test.go index a1e6e7cb44c00..54ad9486e13d5 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -197,7 +197,7 @@ func TestIntegrations(t *testing.T) { t.Run("TrustedClustersRoleMapChanges", suite.bind(testTrustedClustersRoleMapChanges)) t.Run("TrustedClustersWithLabels", suite.bind(testTrustedClustersWithLabels)) t.Run("TrustedClustersSkipNameValidation", suite.bind(testTrustedClustersSkipNameValidation)) - t.Run("CreateAndUpdateTrustedClusters", suite.bind(testCreateAndUpdateTrustedCluster)) + t.Run("CreateAndUpdateTrustedClusters", suite.bind(testCreateAndUpdateTrustedClusters)) t.Run("TrustedTunnelNode", suite.bind(testTrustedTunnelNode)) t.Run("TwoClustersProxy", suite.bind(testTwoClustersProxy)) t.Run("TwoClustersTunnel", suite.bind(testTwoClustersTunnel)) @@ -2980,9 +2980,9 @@ func testMultiplexingTrustedClusters(t *testing.T, suite *integrationTestSuite) trustedClusters(t, suite, trustedClusterTest{multiplex: true}) } -// TestCreateAndUpdateTrustedCluster tests the basic create and update +// TestCreateAndUpdateTrustedClusters tests the basic create and update // operations for a trusted cluster. -func testCreateAndUpdateTrustedCluster(t *testing.T, suite *integrationTestSuite) { +func testCreateAndUpdateTrustedClusters(t *testing.T, suite *integrationTestSuite) { tr := utils.NewTracer(utils.ThisFunction()).Start() defer tr.Stop() diff --git a/lib/auth/trustedcluster_test.go b/lib/auth/trustedcluster_test.go index 37df3fa7c2a02..b5bd590505a9e 100644 --- a/lib/auth/trustedcluster_test.go +++ b/lib/auth/trustedcluster_test.go @@ -726,7 +726,7 @@ func TestUpdateTrustedCluster(t *testing.T) { {Remote: teleport.PresetAccessRoleName, Local: []string{teleport.PresetAccessRoleName}}, }, }) - require.NoError(t, err, "creating trusted cluster resource") + require.NoError(t, err, "updating trusted cluster resource") server := ServerWithRoles{authServer: a} _, err = server.UpdateTrustedClusterV2(ctx, tc) From f2bce6bb3c7e3ed38e92f9fab214414125335ea8 Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Tue, 10 Dec 2024 15:38:24 -0800 Subject: [PATCH 19/25] Use Create/Update instead of Upsert --- .../controllers/resources/trusted_cluster_controller.go | 4 ++-- .../resources/trusted_clusterv2_controller_test.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/integrations/operator/controllers/resources/trusted_cluster_controller.go b/integrations/operator/controllers/resources/trusted_cluster_controller.go index 011034b545f4e..ca49dcbad7cd8 100644 --- a/integrations/operator/controllers/resources/trusted_cluster_controller.go +++ b/integrations/operator/controllers/resources/trusted_cluster_controller.go @@ -47,13 +47,13 @@ func (r trustedClusterClient) Get(ctx context.Context, name string) (types.Trust // Create creates a Teleport trusted_cluster. func (r trustedClusterClient) Create(ctx context.Context, trustedCluster types.TrustedCluster) error { - _, err := r.teleportClient.UpsertTrustedClusterV2(ctx, trustedCluster) + _, err := r.teleportClient.CreateTrustedClusterV2(ctx, trustedCluster) return trace.Wrap(err) } // Update updates a Teleport trusted_cluster. func (r trustedClusterClient) Update(ctx context.Context, trustedCluster types.TrustedCluster) error { - _, err := r.teleportClient.UpsertTrustedClusterV2(ctx, trustedCluster) + _, err := r.teleportClient.UpdateTrustedClusterV2(ctx, trustedCluster) return trace.Wrap(err) } diff --git a/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go b/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go index b48b782041051..0f7cbc948f12f 100644 --- a/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go +++ b/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go @@ -68,7 +68,7 @@ func (r *trustedClusterV2TestingPrimitives) CreateTeleportResource(ctx context.C return trace.Wrap(err) } trustedCluster.SetOrigin(types.OriginKubernetes) - _, err = r.setup.TeleportClient.UpsertTrustedClusterV2(ctx, trustedCluster) + _, err = r.setup.TeleportClient.CreateTrustedClusterV2(ctx, trustedCluster) return trace.Wrap(err) } From 6bdd5059b53ade447b154becba0d1cfebf6b7547 Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Tue, 10 Dec 2024 16:04:38 -0800 Subject: [PATCH 20/25] Update crdgen --- .../golden/resources.teleport.dev_users.yaml | 12 ++ .../legacy/client/proto/authservice.proto | 65 +++++++++ .../teleport/legacy/client/proto/event.proto | 3 + .../teleport/legacy/types/events/events.proto | 123 ++++++++++++++++++ .../types/trusted_device_requirement.proto | 37 ++++++ .../teleport/legacy/types/types.proto | 20 ++- 6 files changed, 259 insertions(+), 1 deletion(-) create mode 100644 integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/trusted_device_requirement.proto diff --git a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_users.yaml b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_users.yaml index 504c3695c4532..0c68b6dec714f 100644 --- a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_users.yaml +++ b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_users.yaml @@ -57,6 +57,10 @@ spec: description: SAMLSingleLogoutURL is the SAML Single log-out URL to initiate SAML SLO (single log-out), if applicable. type: string + user_id: + description: UserID is the ID of the identity. Some connectors + like GitHub have an unique ID apart from the username. + type: string username: description: Username is username supplied by external identity provider @@ -76,6 +80,10 @@ spec: description: SAMLSingleLogoutURL is the SAML Single log-out URL to initiate SAML SLO (single log-out), if applicable. type: string + user_id: + description: UserID is the ID of the identity. Some connectors + like GitHub have an unique ID apart from the username. + type: string username: description: Username is username supplied by external identity provider @@ -101,6 +109,10 @@ spec: description: SAMLSingleLogoutURL is the SAML Single log-out URL to initiate SAML SLO (single log-out), if applicable. type: string + user_id: + description: UserID is the ID of the identity. Some connectors + like GitHub have an unique ID apart from the username. + type: string username: description: Username is username supplied by external identity provider diff --git a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/authservice.proto b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/authservice.proto index 3f63e98a4c602..128bfdf7bd748 100644 --- a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/authservice.proto +++ b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/authservice.proto @@ -1940,6 +1940,60 @@ message CreateRegisterChallengeRequest { DeviceUsage DeviceUsage = 3 [(gogoproto.jsontag) = "device_usage,omitempty"]; } +// IdentityCenterAccount holds information about an Identity Center account +// within an IdentityCenterAccountAssignment +message IdentityCenterAccount { + // ID is the AWS-assigned account ID + string ID = 1; + + // ARN is the full Amazon Resource Name for the AWS account + string ARN = 2; + + // AccountName is the human-readable name of the account + string AccountName = 3; + + // Description is a free text description of the account + string Description = 4; +} + +// IdentityCenterPermissionSet holds information about an Identity Center +// permission set within an IdentityCenterAccountAssignment +message IdentityCenterPermissionSet { + // ARN is the full Amazon Resource Name for the Permission Set + string ARN = 1; + + // Name is the human readable name for the Permission Set + string Name = 2; +} + +// IdentityCenterAccountAssignment represents a requestable Identity Center +// Account Assignment. This is strictly a wire-format object for use with the +// Unfied resource cache, and the types defined in the `identitycenter` package +// should be used for actual processing. +message IdentityCenterAccountAssignment { + // Kind is the database server resource kind. + string Kind = 1 [(gogoproto.jsontag) = "kind"]; + // SubKind is an optional resource subkind. + string SubKind = 2 [(gogoproto.jsontag) = "sub_kind,omitempty"]; + // Version is the resource version. + string Version = 3 [(gogoproto.jsontag) = "version"]; + // Metadata is the account metadata. + types.Metadata Metadata = 4 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "metadata" + ]; + + // DisplayName is a human-readable name for the Account assignment + string DisplayName = 5; + + // Account is the Identity Center Account this assigment references + IdentityCenterAccount Account = 6; + + // PermissionSet is the Identity Center Permission Set this assignment + // references + IdentityCenterPermissionSet PermissionSet = 7; +} + // PaginatedResource represents one of the supported resources. message PaginatedResource { // Resource is the resource itself. @@ -1968,6 +2022,12 @@ message PaginatedResource { types.AppServerOrSAMLIdPServiceProviderV1 AppServerOrSAMLIdPServiceProvider = 11 [deprecated = true]; // SAMLIdPServiceProvider represents a SAML IdP service provider resource. types.SAMLIdPServiceProviderV1 SAMLIdPServiceProvider = 12 [(gogoproto.jsontag) = "saml_idp_service_provider,omitempty"]; + // GitServer represents a Git server resource. + types.ServerV2 git_server = 15; + + // IdentityCenterAccountAssignment represents a requestable Identity Center + // Account Assignment + IdentityCenterAccountAssignment IdentityCenterAccountAssignment = 16 [(gogoproto.jsontag) = "identity_center_account_assignment,omitempty"]; } // Logins allowed for the included resource. Only to be populated for SSH and Desktops. @@ -3217,6 +3277,7 @@ service AuthService { rpc GetTrustedCluster(types.ResourceRequest) returns (types.TrustedClusterV2); // GetTrustedClusters gets all current Trusted Cluster resources. rpc GetTrustedClusters(google.protobuf.Empty) returns (types.TrustedClusterV2List); + // UpsertTrustedCluster upserts a Trusted Cluster in a backend. // // Deprecated: Use UpsertTrustedClusterV2 instead. @@ -3225,6 +3286,10 @@ service AuthService { } // UpsertTrustedClusterV2 upserts a Trusted Cluster in a backend. rpc UpsertTrustedClusterV2(types.TrustedClusterV2) returns (types.TrustedClusterV2); + // CreateTrustedClusterV2 creates a Trusted Cluster in a backend. + rpc CreateTrustedClusterV2(types.TrustedClusterV2) returns (types.TrustedClusterV2); + // UpdateTrustedClusterV2 updates a Trusted Cluster in a backend. + rpc UpdateTrustedClusterV2(types.TrustedClusterV2) returns (types.TrustedClusterV2); // DeleteTrustedCluster deletes an existing Trusted Cluster in a backend by name. rpc DeleteTrustedCluster(types.ResourceRequest) returns (google.protobuf.Empty); diff --git a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/event.proto b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/event.proto index 4c790ce6fdbc3..b8c39fec6054e 100644 --- a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/event.proto +++ b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/event.proto @@ -34,6 +34,7 @@ import "teleport/secreports/v1/secreports.proto"; import "teleport/userloginstate/v1/userloginstate.proto"; import "teleport/userprovisioning/v2/statichostuser.proto"; import "teleport/usertasks/v1/user_tasks.proto"; +import "teleport/workloadidentity/v1/resource.proto"; option go_package = "github.com/gravitational/teleport/api/client/proto"; @@ -208,5 +209,7 @@ message Event { teleport.identitycenter.v1.AccountAssignment IdentityCenterAccountAssignment = 74; // PluginStaticCredentials is filled in PluginStaticCredentials related events types.PluginStaticCredentialsV1 PluginStaticCredentials = 75; + // WorkloadIdentity is a resource for workload identity. + teleport.workloadidentity.v1.WorkloadIdentity WorkloadIdentity = 76; } } diff --git a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto index e7a7bc0440546..0829cd40aef10 100644 --- a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto +++ b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto @@ -1617,6 +1617,21 @@ message PortForward { // Addr is a target port forwarding address string Addr = 5 [(gogoproto.jsontag) = "addr"]; + + // KubernetesCluster has information about a kubernetes cluster, if + // applicable. + KubernetesClusterMetadata KubernetesCluster = 6 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // KubernetesPod has information about a kubernetes pod, if applicable. + KubernetesPodMetadata KubernetesPod = 7 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; } // X11Forward is emitted when a user requests X11 protocol forwarding @@ -4689,6 +4704,9 @@ message OneOf { events.SFTPSummary SFTPSummary = 191; events.ContactCreate ContactCreate = 192; events.ContactDelete ContactDelete = 193; + events.WorkloadIdentityCreate WorkloadIdentityCreate = 194; + events.WorkloadIdentityUpdate WorkloadIdentityUpdate = 195; + events.WorkloadIdentityDelete WorkloadIdentityDelete = 196; } } @@ -7677,3 +7695,108 @@ enum ContactType { CONTACT_TYPE_BUSINESS = 1; CONTACT_TYPE_SECURITY = 2; } + +// WorkloadIdentityCreate is emitted when a WorkloadIdentity is created. +message WorkloadIdentityCreate { + // Metadata is a common event metadata + Metadata Metadata = 1 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ResourceMetadata is a common resource event metadata + ResourceMetadata Resource = 2 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // User is a common user event metadata + UserMetadata User = 3 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ConnectionMetadata holds information about the connection + ConnectionMetadata Connection = 4 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // WorkloadIdentityData is a copy of the WorkloadIdentity resource + google.protobuf.Struct WorkloadIdentityData = 5 [ + (gogoproto.jsontag) = "workload_identity_data,omitempty", + (gogoproto.casttype) = "Struct" + ]; +} + +// WorkloadIdentityUpdate is emitted when a WorkloadIdentity is updated. +message WorkloadIdentityUpdate { + // Metadata is a common event metadata + Metadata Metadata = 1 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ResourceMetadata is a common resource event metadata + ResourceMetadata Resource = 2 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // User is a common user event metadata + UserMetadata User = 3 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ConnectionMetadata holds information about the connection + ConnectionMetadata Connection = 4 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // WorkloadIdentityData is a copy of the WorkloadIdentity resource + google.protobuf.Struct WorkloadIdentityData = 5 [ + (gogoproto.jsontag) = "workload_identity_data,omitempty", + (gogoproto.casttype) = "Struct" + ]; +} + +// WorkloadIdentityDelete is emitted when a WorkloadIdentity is deleted. +message WorkloadIdentityDelete { + // Metadata is a common event metadata + Metadata Metadata = 1 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ResourceMetadata is a common resource event metadata + ResourceMetadata Resource = 2 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // User is a common user event metadata + UserMetadata User = 3 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ConnectionMetadata holds information about the connection + ConnectionMetadata Connection = 4 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; +} diff --git a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/trusted_device_requirement.proto b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/trusted_device_requirement.proto new file mode 100644 index 0000000000000..9f074c9e76465 --- /dev/null +++ b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/trusted_device_requirement.proto @@ -0,0 +1,37 @@ +// Copyright 2024 Gravitational, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package types; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/gravitational/teleport/api/types"; +option (gogoproto.goproto_getters_all) = false; +option (gogoproto.marshaler_all) = true; +option (gogoproto.unmarshaler_all) = true; + +// TrustedDeviceRequirement indicates whether access may be hindered by the lack +// of a trusted device. +enum TrustedDeviceRequirement { + // Device requirement not determined. + // Does not mean that a device is not required, only that the necessary data + // was not considered. + TRUSTED_DEVICE_REQUIREMENT_UNSPECIFIED = 0; + // Trusted device not required. + TRUSTED_DEVICE_REQUIREMENT_NOT_REQUIRED = 1; + // Trusted device required by either cluster mode or user roles. + TRUSTED_DEVICE_REQUIREMENT_REQUIRED = 2; +} diff --git a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/types.proto b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/types.proto index 47461bb37b53c..642e59597b825 100644 --- a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/types.proto +++ b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/types.proto @@ -1009,6 +1009,10 @@ message IdentityCenterPermissionSet { // Name is the human-readable name of the Permission Set. string Name = 2 [(gogoproto.jsontag) = "name,omitempty"]; + + // AssignmentID is the ID of the Teelport Account Assignment resource that + // represents this permission being assigned on the enclosing Account. + string AssignmentID = 3 [(gogoproto.jsontag) = "assignment_name,omitempty"]; } // AppIdentityCenter encapsulates information about an AWS Identity Center @@ -3869,6 +3873,10 @@ message ExternalIdentity { // SAMLSingleLogoutURL is the SAML Single log-out URL to initiate SAML SLO (single log-out), if applicable. string SAMLSingleLogoutURL = 3 [(gogoproto.jsontag) = "samlSingleLogoutUrl,omitempty"]; + + // UserID is the ID of the identity. Some connectors like GitHub have an + // unique ID apart from the username. + string UserID = 4 [(gogoproto.jsontag) = "user_id,omitempty"]; } // LoginStatus is a login status of the user @@ -5246,7 +5254,7 @@ message GithubAuthRequest { string KubernetesCluster = 13 [(gogoproto.jsontag) = "kubernetes_cluster,omitempty"]; // SSOTestFlow indicates if the request is part of the test flow. bool SSOTestFlow = 14 [(gogoproto.jsontag) = "sso_test_flow"]; - // ConnectorSpec is embedded connector spec for use in test flow. + // ConnectorSpec is embedded connector spec for use in test flow or authenticated user flow. GithubConnectorSpecV3 ConnectorSpec = 15 [(gogoproto.jsontag) = "connector_spec,omitempty"]; // AttestationStatement is an attestation statement for the given public key. // @@ -5270,6 +5278,10 @@ message GithubAuthRequest { teleport.attestation.v1.AttestationStatement ssh_attestation_statement = 21 [(gogoproto.jsontag) = "ssh_attestation_statement,omitempty"]; // TlsAttestationStatement is an attestation statement for the given TLS public key. teleport.attestation.v1.AttestationStatement tls_attestation_statement = 22 [(gogoproto.jsontag) = "tls_attestation_statement,omitempty"]; + // AuthenticatedUser is the username of an authenticated Teleport user. This + // OAuth flow is used to retrieve GitHub identity info which will be added to + // the existing user. + string authenticated_user = 23 [(gogoproto.jsontag) = "authenticated_user,omitempty"]; } // SSOWarnings conveys a user-facing main message along with auxiliary warnings. @@ -5440,6 +5452,12 @@ message GithubClaims { // Teams is the users team membership repeated string Teams = 3 [(gogoproto.jsontag) = "teams"]; + + // UserID is a global unique integer that is assigned to each GitHub user. The + // user ID is immutable (unlike the GitHub username) and can be found in APIs + // like get user. + // https://docs.github.com/en/rest/users/users + string UserID = 4 [(gogoproto.jsontag) = "user_id,omitempty"]; } // TeamMapping represents a single team membership mapping. From cef0e90660cad71820f6a610679959cd10173b5e Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Wed, 11 Dec 2024 12:03:47 -0800 Subject: [PATCH 21/25] Update trusted_cluster tests --- .../trusted_clusterv2_controller_test.go | 235 +++++++++++++++--- 1 file changed, 200 insertions(+), 35 deletions(-) diff --git a/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go b/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go index 0f7cbc948f12f..ef61817f8815f 100644 --- a/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go +++ b/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go @@ -21,35 +21,36 @@ package resources_test import ( "context" "testing" + "time" "github.com/google/go-cmp/cmp" + "github.com/google/uuid" "github.com/gravitational/trace" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" v1 "k8s.io/api/core/v1" + kerrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/util/retry" kclient "sigs.k8s.io/controller-runtime/pkg/client" "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/integration/helpers" resourcesv1 "github.com/gravitational/teleport/integrations/operator/apis/resources/v1" "github.com/gravitational/teleport/integrations/operator/controllers/reconcilers" "github.com/gravitational/teleport/integrations/operator/controllers/resources/secretlookup" "github.com/gravitational/teleport/integrations/operator/controllers/resources/testlib" + "github.com/gravitational/teleport/lib" + "github.com/gravitational/teleport/lib/service/servicecfg" + "github.com/gravitational/teleport/lib/utils" ) -var trustedClusterV2Spec = types.TrustedClusterSpecV2{ - Enabled: true, - Token: "secret_token", - ProxyAddress: "root.example.com:443", - ReverseTunnelAddress: "root.example.com:443", - RoleMap: []types.RoleMapping{ - { - Remote: "remote-role", - Local: []string{"local-role"}, - }, - }, -} - type trustedClusterV2TestingPrimitives struct { + // remoteCluster specifies the remote trusted cluster instance. + remoteCluster *helpers.TeleInstance + // trustedClusterSpec specifies the trusted cluster specs. + trustedClusterSpec types.TrustedClusterSpecV2 + setup *testSetup reconcilers.ResourceWithoutLabelsAdapter[types.TrustedCluster] } @@ -63,7 +64,7 @@ func (r *trustedClusterV2TestingPrimitives) SetupTeleportFixtures(ctx context.Co } func (r *trustedClusterV2TestingPrimitives) CreateTeleportResource(ctx context.Context, name string) error { - trustedCluster, err := types.NewTrustedCluster(name, trustedClusterV2Spec) + trustedCluster, err := types.NewTrustedCluster(name, r.trustedClusterSpec) if err != nil { return trace.Wrap(err) } @@ -86,7 +87,7 @@ func (r *trustedClusterV2TestingPrimitives) CreateKubernetesResource(ctx context Name: name, Namespace: r.setup.Namespace.Name, }, - Spec: resourcesv1.TeleportTrustedClusterV2Spec(trustedClusterV2Spec), + Spec: resourcesv1.TeleportTrustedClusterV2Spec(r.trustedClusterSpec), } return trace.Wrap(r.setup.K8sClient.Create(ctx, trustedCluster)) } @@ -117,10 +118,10 @@ func (r *trustedClusterV2TestingPrimitives) ModifyKubernetesResource(ctx context return trace.Wrap(err) } trustedCluster.Spec.RoleMap[0] = types.RoleMapping{ - Remote: "remote-role-2", - Local: []string{"local-role-2"}, + Remote: "remote-admin", + Local: []string{"local-dev"}, } - return trace.Wrap(r.setup.K8sClient.Create(ctx, trustedCluster)) + return trace.Wrap(r.setup.K8sClient.Update(ctx, trustedCluster)) } func (r *trustedClusterV2TestingPrimitives) CompareTeleportAndKubernetesResource(tResource types.TrustedCluster, kubeResource *resourcesv1.TeleportTrustedClusterV2) (bool, string) { @@ -128,19 +129,189 @@ func (r *trustedClusterV2TestingPrimitives) CompareTeleportAndKubernetesResource return diff == "", diff } +// setupTest initializes a remote cluster for testing trusted clusters. +func (r *trustedClusterV2TestingPrimitives) setupTest(t *testing.T, clusterName string) { + ctx := context.Background() + + remoteCluster := helpers.NewInstance(t, helpers.InstanceConfig{ + ClusterName: clusterName, + HostID: uuid.New().String(), + NodeName: helpers.Loopback, + Log: utils.NewLoggerForTests(), + }) + r.remoteCluster = remoteCluster + + rcConf := servicecfg.MakeDefaultConfig() + rcConf.DataDir = t.TempDir() + rcConf.Auth.Enabled = true + rcConf.Proxy.Enabled = true + rcConf.Proxy.DisableWebInterface = true + rcConf.Version = "v2" + + lib.SetInsecureDevMode(true) + t.Cleanup(func() { lib.SetInsecureDevMode(false) }) + + require.NoError(t, remoteCluster.CreateEx(t, nil, rcConf)) + require.NoError(t, remoteCluster.Start()) + t.Cleanup(func() { require.NoError(t, remoteCluster.StopAll()) }) + + // Create trusted cluster join token + token := "secret_token" + tokenResource, err := types.NewProvisionToken(token, []types.SystemRole{types.RoleTrustedCluster}, time.Time{}) + require.NoError(t, err) + remoteCluster.Process.GetAuthServer().UpsertToken(ctx, tokenResource) + + // Create required role + localDev := "local-dev" + require.NoError(t, teleportCreateDummyRole(ctx, localDev, r.setup.TeleportClient)) + + r.trustedClusterSpec = types.TrustedClusterSpecV2{ + Enabled: true, + Token: token, + ProxyAddress: remoteCluster.Web, + ReverseTunnelAddress: remoteCluster.ReverseTunnel, + RoleMap: []types.RoleMapping{ + { + Remote: "remote-dev", + Local: []string{localDev}, + }, + }, + } +} + func TestTrustedClusterV2Creation(t *testing.T) { test := &trustedClusterV2TestingPrimitives{} - testlib.ResourceCreationTest(t, test) + setup := testlib.SetupTestEnv(t) + test.Init(setup) + ctx := context.Background() + + resourceName := "remote.example.com" + test.setupTest(t, resourceName) + + require.NoError(t, test.CreateKubernetesResource(ctx, resourceName)) + + var resource types.TrustedCluster + var err error + testlib.FastEventually(t, func() bool { + resource, err = test.GetTeleportResource(ctx, resourceName) + return !trace.IsNotFound(err) + }) + require.NoError(t, err) + require.Equal(t, resourceName, test.GetResourceName(resource)) + require.Equal(t, types.OriginKubernetes, test.GetResourceOrigin(resource)) + + err = test.DeleteKubernetesResource(ctx, resourceName) + require.NoError(t, err) + + testlib.FastEventually(t, func() bool { + _, err = test.GetTeleportResource(ctx, resourceName) + return trace.IsNotFound(err) + }) } func TestTrustedClusterV2DeletionDrift(t *testing.T) { test := &trustedClusterV2TestingPrimitives{} - testlib.ResourceDeletionDriftTest(t, test) + setup := testlib.SetupTestEnv(t) + test.Init(setup) + ctx := context.Background() + + resourceName := "remote.example.com" + test.setupTest(t, resourceName) + + require.NoError(t, test.CreateKubernetesResource(ctx, resourceName)) + + var resource types.TrustedCluster + var err error + testlib.FastEventually(t, func() bool { + resource, err = test.GetTeleportResource(ctx, resourceName) + return !trace.IsNotFound(err) + }) + require.NoError(t, err) + require.Equal(t, resourceName, test.GetResourceName(resource)) + require.Equal(t, types.OriginKubernetes, test.GetResourceOrigin(resource)) + + // We cause a drift by altering the Teleport resource. + // To make sure the operator does not reconcile while we're finished we suspend the operator + setup.StopKubernetesOperator() + + err = test.DeleteTeleportResource(ctx, resourceName) + require.NoError(t, err) + testlib.FastEventually(t, func() bool { + _, err = test.GetTeleportResource(ctx, resourceName) + return trace.IsNotFound(err) + }) + + // We flag the resource for deletion in Kubernetes (it won't be fully removed until the operator has processed it and removed the finalizer) + err = test.DeleteKubernetesResource(ctx, resourceName) + require.NoError(t, err) + + // Test section: We resume the operator, it should reconcile and recover from the drift + setup.StartKubernetesOperator(t) + + // The operator should handle the failed Teleport deletion gracefully and unlock the Kubernetes resource deletion + testlib.FastEventually(t, func() bool { + _, err = test.GetKubernetesResource(ctx, resourceName) + return kerrors.IsNotFound(err) + }) } func TestTrustedClusterV2Update(t *testing.T) { test := &trustedClusterV2TestingPrimitives{} - testlib.ResourceUpdateTest(t, test) + setup := testlib.SetupTestEnv(t) + test.Init(setup) + ctx := context.Background() + + resourceName := "remote.example.com" + test.setupTest(t, resourceName) + + // The resource is created in Teleport + require.NoError(t, test.CreateTeleportResource(ctx, resourceName)) + + // The resource is created in Kubernetes, with at least a field altered + require.NoError(t, test.CreateKubernetesResource(ctx, resourceName)) + + // Check the resource was updated in Teleport + testlib.FastEventuallyWithT(t, func(c *assert.CollectT) { + tResource, err := test.GetTeleportResource(ctx, resourceName) + require.NoError(c, err) + + kubeResource, err := test.GetKubernetesResource(ctx, resourceName) + require.NoError(c, err) + + // Kubernetes and Teleport resources are in-sync + equal, diff := test.CompareTeleportAndKubernetesResource(tResource, kubeResource) + if !equal { + t.Logf("Kubernetes and Teleport resources not sync-ed yet: %s", diff) + } + assert.True(c, equal) + }) + + // Updating the resource in Kubernetes + // The modification can fail because of a conflict with the resource controller. We retry if that happens. + err := retry.RetryOnConflict(retry.DefaultRetry, func() error { + return test.ModifyKubernetesResource(ctx, resourceName) + }) + require.NoError(t, err) + + // Check the resource was updated in Teleport + testlib.FastEventuallyWithT(t, func(c *assert.CollectT) { + kubeResource, err := test.GetKubernetesResource(ctx, resourceName) + require.NoError(c, err) + + tResource, err := test.GetTeleportResource(ctx, resourceName) + require.NoError(c, err) + + // Kubernetes and Teleport resources are in-sync + equal, diff := test.CompareTeleportAndKubernetesResource(tResource, kubeResource) + if !equal { + t.Logf("Kubernetes and Teleport resources not sync-ed yet: %s", diff) + } + assert.True(c, equal) + }) + + // Delete the resource to avoid leftover state. + err = test.DeleteTeleportResource(ctx, resourceName) + require.NoError(t, err) } func TestTrustedClusterV2SecretLookup(t *testing.T) { @@ -149,17 +320,19 @@ func TestTrustedClusterV2SecretLookup(t *testing.T) { test.Init(setup) ctx := context.Background() - crName := validRandomResourceName("trusted-cluster") + resourceName := "remote.example.com" + test.setupTest(t, resourceName) + secretName := validRandomResourceName("trusted-cluster-secret") secretKey := "token" - secretValue := validRandomResourceName("secret-value") + secretValue := test.trustedClusterSpec.Token secret := &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: secretName, Namespace: setup.Namespace.Name, Annotations: map[string]string{ - secretlookup.AllowLookupAnnotation: crName, + secretlookup.AllowLookupAnnotation: resourceName, }, }, StringData: map[string]string{ @@ -170,19 +343,11 @@ func TestTrustedClusterV2SecretLookup(t *testing.T) { kubeClient := setup.K8sClient require.NoError(t, kubeClient.Create(ctx, secret)) - trustedCluster := &resourcesv1.TeleportTrustedClusterV2{ - ObjectMeta: metav1.ObjectMeta{ - Name: crName, - Namespace: setup.Namespace.Name, - }, - Spec: resourcesv1.TeleportTrustedClusterV2Spec(trustedClusterV2Spec), - } - trustedCluster.Spec.Token = "secret://" + secretName + "/" + secretKey - - require.NoError(t, kubeClient.Create(ctx, trustedCluster)) + test.trustedClusterSpec.Token = "secret://" + secretName + "/" + secretKey + require.NoError(t, test.CreateKubernetesResource(ctx, resourceName)) testlib.FastEventually(t, func() bool { - trustedCluster, err := test.GetTeleportResource(ctx, crName) + trustedCluster, err := test.GetTeleportResource(ctx, resourceName) if err != nil { return false } From 258bed4c60f7891515e6235e051944a0c655f360 Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Wed, 11 Dec 2024 15:21:29 -0800 Subject: [PATCH 22/25] Move V2 RPCs to the trust service --- api/client/client.go | 13 +- api/client/proto/authservice.pb.go | 2032 ++++++++--------- .../go/teleport/trust/v1/trust_service.pb.go | 627 +++-- .../trust/v1/trust_service_grpc.pb.go | 120 + .../legacy/client/proto/authservice.proto | 9 +- .../teleport/trust/v1/trust_service.proto | 25 + lib/auth/grpcserver.go | 60 - lib/auth/trust/trustv1/service.go | 7 + lib/auth/trust/trustv1/service_test.go | 72 + lib/auth/trust/trustv1/trustedcluster.go | 124 + 10 files changed, 1722 insertions(+), 1367 deletions(-) create mode 100644 lib/auth/trust/trustv1/trustedcluster.go diff --git a/api/client/client.go b/api/client/client.go index 5e5a5cc6dd531..e4d4e553602fe 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -2305,12 +2305,9 @@ func (c *Client) UpsertTrustedClusterV2(ctx context.Context, trustedCluster type if !ok { return nil, trace.BadParameter("invalid type %T", trustedCluster) } - resp, err := c.grpc.UpsertTrustedClusterV2(ctx, trustedClusterV2) + req := &trustpb.UpsertTrustedClusterV2Request{TrustedCluster: trustedClusterV2} + resp, err := c.TrustClient().UpsertTrustedClusterV2(ctx, req) if err != nil { - if trace.IsNotImplemented(err) { - return nil, trace.Wrap(err, "control plane does not support this operation, "+ - "consider upgrading your control plane") - } return nil, trace.Wrap(err) } return resp, nil @@ -2322,7 +2319,8 @@ func (c *Client) CreateTrustedClusterV2(ctx context.Context, trustedCluster type if !ok { return nil, trace.BadParameter("invalid type %T", trustedCluster) } - resp, err := c.grpc.CreateTrustedClusterV2(ctx, trustedClusterV2) + req := &trustpb.CreateTrustedClusterV2Request{TrustedCluster: trustedClusterV2} + resp, err := c.TrustClient().CreateTrustedClusterV2(ctx, req) if err != nil { return nil, trace.Wrap(err) } @@ -2335,7 +2333,8 @@ func (c *Client) UpdateTrustedClusterV2(ctx context.Context, trustedCluster type if !ok { return nil, trace.BadParameter("invalid type %T", trustedCluster) } - resp, err := c.grpc.UpdateTrustedClusterV2(ctx, trustedClusterV2) + req := &trustpb.UpdateTrustedClusterV2Request{TrustedCluster: trustedClusterV2} + resp, err := c.TrustClient().UpdateTrustedClusterV2(ctx, req) if err != nil { return nil, trace.Wrap(err) } diff --git a/api/client/proto/authservice.pb.go b/api/client/proto/authservice.pb.go index 2a5341afd78f9..638af537e0799 100644 --- a/api/client/proto/authservice.pb.go +++ b/api/client/proto/authservice.pb.go @@ -16108,114 +16108,114 @@ func init() { } var fileDescriptor_0ffcffcda38ae159 = []byte{ - // 15450 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0xbd, 0x59, 0x6c, 0x5c, 0x59, - 0x7a, 0x18, 0xac, 0xe2, 0xce, 0x8f, 0x8b, 0x4a, 0x87, 0xa4, 0x58, 0xa2, 0x96, 0x92, 0xae, 0x5a, - 0xdd, 0x6a, 0x4d, 0x8f, 0x16, 0xf6, 0x32, 0xbd, 0x77, 0x57, 0x91, 0x94, 0x48, 0x89, 0x5b, 0xdf, - 0x22, 0xa9, 0xde, 0x3c, 0x35, 0x97, 0x55, 0x47, 0xe4, 0xb5, 0x8a, 0xf7, 0xd6, 0xdc, 0x7b, 0x4b, - 0x6a, 0x8d, 0xff, 0xf1, 0x0f, 0xdb, 0x59, 0x1c, 0x04, 0x49, 0x6c, 0x20, 0x0e, 0x1c, 0x24, 0x80, - 0x13, 0xc0, 0x01, 0x8c, 0x00, 0x01, 0xfc, 0x12, 0xf8, 0xc9, 0x0f, 0x79, 0xca, 0xc4, 0x40, 0x90, - 0x18, 0xb6, 0x5f, 0x02, 0x84, 0x4e, 0x06, 0xf0, 0x0b, 0x91, 0x3c, 0x18, 0x41, 0x02, 0x64, 0x02, - 0x03, 0xc1, 0xf9, 0xce, 0x72, 0xcf, 0xb9, 0x4b, 0x15, 0x29, 0xa9, 0xc7, 0x79, 0x91, 0x58, 0xdf, - 0x76, 0xd6, 0x7b, 0xce, 0xf7, 0x7d, 0xe7, 0x3b, 0xdf, 0x81, 0x9b, 0x11, 0x6d, 0xd1, 0xb6, 0x1f, - 0x44, 0xb7, 0x5a, 0x74, 0xcf, 0x69, 0x3c, 0xbb, 0xd5, 0x68, 0xb9, 0xd4, 0x8b, 0x6e, 0xb5, 0x03, - 0x3f, 0xf2, 0x6f, 0x39, 0x9d, 0x68, 0x3f, 0xa4, 0xc1, 0x13, 0xb7, 0x41, 0x6f, 0x22, 0x84, 0x0c, - 0xe2, 0x7f, 0x73, 0xd3, 0x7b, 0xfe, 0x9e, 0xcf, 0x69, 0xd8, 0x5f, 0x1c, 0x39, 0x77, 0x7e, 0xcf, - 0xf7, 0xf7, 0x5a, 0x94, 0x33, 0xef, 0x76, 0x1e, 0xdd, 0xa2, 0x07, 0xed, 0xe8, 0x99, 0x40, 0x96, - 0x93, 0xc8, 0xc8, 0x3d, 0xa0, 0x61, 0xe4, 0x1c, 0xb4, 0x05, 0xc1, 0xeb, 0xaa, 0x2a, 0x4e, 0x14, - 0x31, 0x4c, 0xe4, 0xfa, 0xde, 0xad, 0x27, 0x77, 0xf4, 0x9f, 0x82, 0xf4, 0x7a, 0xd7, 0x5a, 0x37, - 0x68, 0x10, 0x85, 0xc7, 0xa2, 0xa4, 0x4f, 0xa8, 0x17, 0xa5, 0x8a, 0x17, 0x94, 0xd1, 0xb3, 0x36, - 0x0d, 0x39, 0x89, 0xfc, 0x4f, 0x90, 0x5e, 0xc9, 0x26, 0xc5, 0x7f, 0x05, 0xc9, 0x77, 0xb3, 0x49, - 0x9e, 0xd2, 0x5d, 0xd6, 0xa7, 0x9e, 0xfa, 0xa3, 0x07, 0x79, 0xe0, 0xb4, 0xdb, 0x34, 0x88, 0xff, - 0x10, 0xe4, 0xe7, 0x14, 0xf9, 0xc1, 0x23, 0x87, 0x75, 0xd1, 0xc1, 0x23, 0x27, 0xd5, 0x8c, 0x4e, - 0xe8, 0xec, 0x51, 0x51, 0xfd, 0x27, 0x77, 0xf4, 0x9f, 0x9c, 0xd4, 0xfa, 0x9d, 0x02, 0x0c, 0x3e, - 0x74, 0xa2, 0xc6, 0x3e, 0xf9, 0x04, 0x06, 0x1f, 0xb8, 0x5e, 0x33, 0x2c, 0x15, 0x2e, 0xf7, 0x5f, - 0x1f, 0x9b, 0x2f, 0xde, 0xe4, 0x4d, 0x41, 0x24, 0x43, 0x54, 0x67, 0x7f, 0x72, 0x58, 0x3e, 0x75, - 0x74, 0x58, 0x3e, 0xfd, 0x98, 0x91, 0xbd, 0xe1, 0x1f, 0xb8, 0x11, 0x8e, 0xad, 0xcd, 0xf9, 0xc8, - 0x36, 0x4c, 0x55, 0x5a, 0x2d, 0xff, 0xe9, 0xa6, 0x13, 0x44, 0xae, 0xd3, 0xaa, 0x75, 0x1a, 0x0d, - 0x1a, 0x86, 0xa5, 0xbe, 0xcb, 0x85, 0xeb, 0x23, 0xd5, 0xab, 0x47, 0x87, 0xe5, 0xb2, 0xc3, 0xd0, - 0xf5, 0x36, 0xc7, 0xd7, 0x43, 0x4e, 0xa0, 0x09, 0xca, 0xe2, 0xb7, 0xfe, 0x68, 0x08, 0x8a, 0xcb, - 0x7e, 0x18, 0x2d, 0xb0, 0x11, 0xb5, 0xe9, 0x0f, 0x3b, 0x34, 0x8c, 0xc8, 0x55, 0x18, 0x62, 0xb0, - 0x95, 0xc5, 0x52, 0xe1, 0x72, 0xe1, 0xfa, 0x68, 0x75, 0xec, 0xe8, 0xb0, 0x3c, 0xbc, 0xef, 0x87, - 0x51, 0xdd, 0x6d, 0xda, 0x02, 0x45, 0x5e, 0x87, 0x91, 0x75, 0xbf, 0x49, 0xd7, 0x9d, 0x03, 0x8a, - 0xb5, 0x18, 0xad, 0x4e, 0x1c, 0x1d, 0x96, 0x47, 0x3d, 0xbf, 0x49, 0xeb, 0x9e, 0x73, 0x40, 0x6d, - 0x85, 0x26, 0x3b, 0x30, 0x60, 0xfb, 0x2d, 0x5a, 0xea, 0x47, 0xb2, 0xea, 0xd1, 0x61, 0x79, 0x20, - 0xf0, 0x5b, 0xf4, 0x67, 0x87, 0xe5, 0x77, 0xf6, 0xdc, 0x68, 0xbf, 0xb3, 0x7b, 0xb3, 0xe1, 0x1f, - 0xdc, 0xda, 0x0b, 0x9c, 0x27, 0x2e, 0x9f, 0x84, 0x4e, 0xeb, 0x56, 0x3c, 0x55, 0xdb, 0xae, 0x18, - 0xf7, 0xda, 0xb3, 0x30, 0xa2, 0x07, 0x4c, 0x92, 0x8d, 0xf2, 0xc8, 0x43, 0x98, 0xae, 0x34, 0x9b, - 0x2e, 0xe7, 0xd8, 0x0c, 0x5c, 0xaf, 0xe1, 0xb6, 0x9d, 0x56, 0x58, 0x1a, 0xb8, 0xdc, 0x7f, 0x7d, - 0x54, 0x74, 0x8a, 0xc2, 0xd7, 0xdb, 0x8a, 0x40, 0xeb, 0x94, 0x4c, 0x01, 0xe4, 0x4d, 0x18, 0x59, - 0x5c, 0xaf, 0xb1, 0xba, 0x87, 0xa5, 0x41, 0x14, 0x36, 0x7b, 0x74, 0x58, 0x9e, 0x6a, 0x7a, 0x21, - 0x36, 0x4d, 0x17, 0xa0, 0x08, 0xc9, 0x3b, 0x30, 0xbe, 0xd9, 0xd9, 0x6d, 0xb9, 0x8d, 0xad, 0xd5, - 0xda, 0x03, 0xfa, 0xac, 0x34, 0x74, 0xb9, 0x70, 0x7d, 0xbc, 0x4a, 0x8e, 0x0e, 0xcb, 0x93, 0x6d, - 0x84, 0xd7, 0xa3, 0x56, 0x58, 0x7f, 0x4c, 0x9f, 0xd9, 0x06, 0x5d, 0xcc, 0x57, 0xab, 0x2d, 0x33, - 0xbe, 0xe1, 0x14, 0x5f, 0x18, 0xee, 0xeb, 0x7c, 0x9c, 0x8e, 0xdc, 0x02, 0xb0, 0xe9, 0x81, 0x1f, - 0xd1, 0x4a, 0xb3, 0x19, 0x94, 0x46, 0xb0, 0x6f, 0x4f, 0x1f, 0x1d, 0x96, 0xc7, 0x02, 0x84, 0xd6, - 0x9d, 0x66, 0x33, 0xb0, 0x35, 0x12, 0xb2, 0x00, 0x23, 0xb6, 0xcf, 0x3b, 0xb8, 0x34, 0x7a, 0xb9, - 0x70, 0x7d, 0x6c, 0xfe, 0xb4, 0x98, 0x86, 0x12, 0x5c, 0x3d, 0x7b, 0x74, 0x58, 0x26, 0x81, 0xf8, - 0xa5, 0xb7, 0x52, 0x52, 0x90, 0x32, 0x0c, 0xaf, 0xfb, 0x0b, 0x4e, 0x63, 0x9f, 0x96, 0x00, 0xe7, - 0xde, 0xe0, 0xd1, 0x61, 0xb9, 0xf0, 0x5d, 0x5b, 0x42, 0xc9, 0x13, 0x18, 0x8b, 0x07, 0x2a, 0x2c, - 0x8d, 0x61, 0xf7, 0x6d, 0x1d, 0x1d, 0x96, 0xcf, 0x86, 0x08, 0xae, 0xb3, 0xa1, 0xd7, 0x7a, 0xf0, - 0x05, 0x66, 0x81, 0x5e, 0x10, 0xf9, 0x1a, 0x66, 0xe2, 0x9f, 0x95, 0x30, 0xa4, 0x01, 0x93, 0xb1, - 0xb2, 0x58, 0x9a, 0xc0, 0x9e, 0x79, 0xf5, 0xe8, 0xb0, 0x6c, 0x69, 0x35, 0xa8, 0x3b, 0x92, 0xa4, - 0xee, 0x36, 0xb5, 0x96, 0x66, 0x0b, 0xb9, 0x3f, 0x30, 0x32, 0x5e, 0x9c, 0xb0, 0x2f, 0x6e, 0x7b, - 0x61, 0xe4, 0xec, 0xb6, 0x68, 0x26, 0x91, 0xf5, 0x57, 0x05, 0x20, 0x1b, 0x6d, 0xea, 0xd5, 0x6a, - 0xcb, 0xec, 0x7b, 0x92, 0x9f, 0xd3, 0x1b, 0x30, 0xca, 0x07, 0x8e, 0x8d, 0x6e, 0x1f, 0x8e, 0xee, - 0xe4, 0xd1, 0x61, 0x19, 0xc4, 0xe8, 0xb2, 0x91, 0x8d, 0x09, 0xc8, 0x35, 0xe8, 0xdf, 0xda, 0x5a, - 0xc5, 0x6f, 0xa5, 0xbf, 0x3a, 0x75, 0x74, 0x58, 0xee, 0x8f, 0xa2, 0xd6, 0xcf, 0x0e, 0xcb, 0x23, - 0x8b, 0x9d, 0x00, 0xbb, 0xc5, 0x66, 0x78, 0x72, 0x0d, 0x86, 0x17, 0x5a, 0x9d, 0x30, 0xa2, 0x41, - 0x69, 0x20, 0xfe, 0x48, 0x1b, 0x1c, 0x64, 0x4b, 0x1c, 0xf9, 0x0e, 0x0c, 0x6c, 0x87, 0x34, 0x28, - 0x0d, 0xe2, 0x78, 0x4f, 0x88, 0xf1, 0x66, 0xa0, 0x9d, 0xf9, 0xea, 0x08, 0xfb, 0x12, 0x3b, 0x21, - 0x0d, 0x6c, 0x24, 0x22, 0x37, 0x61, 0x90, 0x0f, 0xda, 0x10, 0x2e, 0x52, 0x13, 0x6a, 0x76, 0xb4, - 0xe8, 0xce, 0x3b, 0xd5, 0xd1, 0xa3, 0xc3, 0xf2, 0x20, 0x0e, 0x9e, 0xcd, 0xc9, 0xee, 0x0f, 0x8c, - 0x14, 0x8a, 0x7d, 0xf6, 0x08, 0xe3, 0x65, 0x9f, 0x85, 0xf5, 0x1d, 0x18, 0xd3, 0x9a, 0x4f, 0x2e, - 0xc0, 0x00, 0xfb, 0x1f, 0x17, 0x91, 0x71, 0x5e, 0x18, 0xdb, 0x38, 0x6c, 0x84, 0x5a, 0xff, 0x6c, - 0x0a, 0x8a, 0x8c, 0xd3, 0x58, 0x79, 0x6e, 0xea, 0x5d, 0xc5, 0xf9, 0x8a, 0x66, 0x57, 0x95, 0x0a, - 0x7a, 0x67, 0x5d, 0x07, 0x55, 0xba, 0x58, 0x84, 0xc6, 0x8f, 0x0e, 0xcb, 0x23, 0x1d, 0x01, 0x8b, - 0xeb, 0x46, 0x6a, 0x30, 0xbc, 0xf4, 0x4d, 0xdb, 0x0d, 0x68, 0x88, 0x5d, 0x3b, 0x36, 0x3f, 0x77, - 0x93, 0x6f, 0x97, 0x37, 0xe5, 0x76, 0x79, 0x73, 0x4b, 0x6e, 0x97, 0xd5, 0x8b, 0x62, 0x31, 0x3e, - 0x43, 0x39, 0x4b, 0x3c, 0x3f, 0x7e, 0xe3, 0xcf, 0xcb, 0x05, 0x5b, 0x4a, 0x22, 0x6f, 0xc0, 0xd0, - 0x5d, 0x3f, 0x38, 0x70, 0x22, 0x31, 0x06, 0xd3, 0x47, 0x87, 0xe5, 0xe2, 0x23, 0x84, 0x68, 0x53, - 0x4a, 0xd0, 0x90, 0xbb, 0x30, 0x69, 0xfb, 0x9d, 0x88, 0x6e, 0xf9, 0x72, 0xe4, 0x06, 0x91, 0xeb, - 0xd2, 0xd1, 0x61, 0x79, 0x2e, 0x60, 0x98, 0x7a, 0xe4, 0xd7, 0xc5, 0x10, 0x6a, 0xfc, 0x09, 0x2e, - 0xb2, 0x04, 0x93, 0x15, 0x5c, 0xbd, 0x45, 0xaf, 0xf1, 0xf1, 0x1a, 0xad, 0x5e, 0x3c, 0x3a, 0x2c, - 0x9f, 0x73, 0x10, 0x53, 0x0f, 0x04, 0x4a, 0x17, 0x63, 0x32, 0x91, 0x75, 0x38, 0xf3, 0xa0, 0xb3, - 0x4b, 0x03, 0x8f, 0x46, 0x34, 0x94, 0x35, 0x1a, 0xc6, 0x1a, 0x5d, 0x3e, 0x3a, 0x2c, 0x5f, 0x78, - 0xac, 0x90, 0x19, 0x75, 0x4a, 0xb3, 0x12, 0x0a, 0xa7, 0x45, 0x45, 0x17, 0x9d, 0xc8, 0xd9, 0x75, - 0x42, 0x8a, 0x8b, 0xd2, 0xd8, 0xfc, 0x59, 0xde, 0xc5, 0x37, 0x13, 0xd8, 0xea, 0x55, 0xd1, 0xcb, - 0xe7, 0x55, 0xdb, 0x9b, 0x02, 0xa5, 0x15, 0x94, 0x94, 0xc9, 0xd6, 0x66, 0xb5, 0xef, 0x8c, 0x62, - 0x6d, 0x71, 0x6d, 0x56, 0xfb, 0x8e, 0xbe, 0x6a, 0xa9, 0x1d, 0x68, 0x15, 0x06, 0xb7, 0xd9, 0xee, - 0x8c, 0x6b, 0xd6, 0xe4, 0xfc, 0x15, 0x51, 0xa3, 0xe4, 0xfc, 0xbb, 0xc9, 0x7e, 0x20, 0x21, 0x7e, - 0x79, 0xa7, 0x71, 0x47, 0xd7, 0xf7, 0x62, 0xc4, 0x91, 0xcf, 0x00, 0x44, 0xad, 0x2a, 0xed, 0x76, - 0x69, 0x0c, 0x1b, 0x79, 0xc6, 0x6c, 0x64, 0xa5, 0xdd, 0xae, 0x5e, 0x12, 0xed, 0x3b, 0xab, 0xda, - 0xe7, 0xb4, 0xdb, 0x9a, 0x34, 0x4d, 0x08, 0xf9, 0x04, 0xc6, 0x71, 0x49, 0x93, 0x23, 0x3a, 0x8e, - 0x23, 0x7a, 0xfe, 0xe8, 0xb0, 0x3c, 0x8b, 0xab, 0x55, 0xc6, 0x78, 0x1a, 0x0c, 0xe4, 0x97, 0x61, - 0x46, 0x88, 0x7b, 0xe8, 0x7a, 0x4d, 0xff, 0x69, 0xb8, 0x48, 0xc3, 0xc7, 0x91, 0xdf, 0xc6, 0xe5, - 0x6f, 0x6c, 0xfe, 0x82, 0x59, 0x3d, 0x93, 0xa6, 0x7a, 0x43, 0xd4, 0xd4, 0x52, 0x35, 0x7d, 0xca, - 0x09, 0xea, 0x4d, 0x4e, 0xa1, 0x2f, 0x90, 0x99, 0x22, 0xc8, 0x0a, 0x9c, 0xde, 0x0e, 0xa9, 0xd1, - 0x86, 0x49, 0xdc, 0x1f, 0xca, 0x6c, 0x84, 0x3b, 0x21, 0xad, 0xe7, 0xb5, 0x23, 0xc9, 0x47, 0x6c, - 0x20, 0x8b, 0x81, 0xdf, 0x4e, 0xcc, 0xf1, 0xd3, 0xd8, 0x23, 0xd6, 0xd1, 0x61, 0xf9, 0x52, 0x33, - 0xf0, 0xdb, 0xf5, 0xfc, 0x89, 0x9e, 0xc1, 0x4d, 0xbe, 0x0f, 0x67, 0x17, 0x7c, 0xcf, 0xa3, 0x0d, - 0xb6, 0x82, 0x2e, 0xba, 0xce, 0x9e, 0xe7, 0x87, 0x91, 0xdb, 0x58, 0x59, 0x2c, 0x15, 0xe3, 0xed, - 0xa1, 0xa1, 0x28, 0xea, 0x4d, 0x45, 0x62, 0x6e, 0x0f, 0x39, 0x52, 0xc8, 0x57, 0x30, 0x21, 0xca, - 0xa2, 0x01, 0x4e, 0xcd, 0x33, 0xdd, 0x27, 0x9a, 0x22, 0xe6, 0x1b, 0x7d, 0x20, 0x7f, 0x72, 0xd5, - 0xc9, 0x94, 0x45, 0xbe, 0x86, 0xb1, 0xb5, 0xbb, 0x15, 0x9b, 0x86, 0x6d, 0xdf, 0x0b, 0x69, 0x89, - 0xe0, 0x88, 0x5e, 0x12, 0xa2, 0xd7, 0xee, 0x56, 0x2a, 0x9d, 0x68, 0x9f, 0x7a, 0x91, 0xdb, 0x70, - 0x22, 0x2a, 0xa9, 0xaa, 0x73, 0x6c, 0xe6, 0x1d, 0x3c, 0x72, 0xea, 0x81, 0x80, 0x68, 0xad, 0xd0, - 0xc5, 0x91, 0x39, 0x18, 0xa9, 0xd5, 0x96, 0x57, 0xfd, 0x3d, 0xd7, 0x2b, 0x4d, 0xb1, 0xce, 0xb0, - 0xd5, 0x6f, 0xf2, 0x08, 0x66, 0x34, 0xdb, 0xa0, 0xce, 0xfe, 0xa7, 0x07, 0xd4, 0x8b, 0x4a, 0xd3, - 0x58, 0x87, 0xef, 0x2a, 0xe3, 0xe6, 0xa6, 0x6e, 0x42, 0x3c, 0xb9, 0x73, 0xb3, 0x12, 0xff, 0xac, - 0x49, 0xa6, 0x6a, 0x5f, 0xa9, 0x60, 0x4f, 0x3b, 0x19, 0x18, 0xb2, 0x05, 0xc3, 0x9b, 0x9d, 0xa0, - 0xed, 0x87, 0xb4, 0x34, 0x83, 0x1d, 0x77, 0xb5, 0xdb, 0x17, 0x2a, 0x48, 0xab, 0x33, 0x6c, 0x89, - 0x6e, 0xf3, 0x1f, 0x5a, 0xeb, 0xa4, 0x28, 0xf2, 0x29, 0x8c, 0xd7, 0x6a, 0xcb, 0xf1, 0x86, 0x72, - 0x16, 0x37, 0x94, 0x0b, 0x47, 0x87, 0xe5, 0x12, 0x53, 0xa9, 0xe2, 0x4d, 0x45, 0xff, 0xaa, 0x74, - 0x0e, 0x26, 0x61, 0x6b, 0xb5, 0x16, 0x4b, 0x98, 0x8d, 0x25, 0x30, 0x65, 0x2e, 0x5b, 0x82, 0xce, - 0x41, 0xfe, 0x55, 0x01, 0x2e, 0xeb, 0x22, 0xb3, 0x3a, 0xa6, 0x74, 0xee, 0x79, 0x7a, 0x73, 0xfe, - 0xe8, 0xb0, 0x7c, 0xd3, 0x6c, 0x47, 0x3d, 0x73, 0xb0, 0xb4, 0xba, 0xf5, 0xac, 0x0a, 0xd6, 0x57, - 0x6f, 0x40, 0x66, 0x7d, 0xe7, 0x9e, 0xbb, 0xbe, 0x66, 0xaf, 0xf5, 0xae, 0x6f, 0xaf, 0xaa, 0x58, - 0x9f, 0xc3, 0xa8, 0x5a, 0xb4, 0xc9, 0x30, 0xf4, 0x57, 0x5a, 0xad, 0xe2, 0x29, 0xf6, 0x47, 0xad, - 0xb6, 0x5c, 0x2c, 0x90, 0x49, 0x80, 0x78, 0xa7, 0x2a, 0xf6, 0x91, 0x71, 0x18, 0x91, 0x3b, 0x49, - 0xb1, 0x1f, 0xe9, 0xdb, 0xed, 0xe2, 0x00, 0x21, 0x30, 0x69, 0xae, 0x67, 0xc5, 0x41, 0xeb, 0x37, + // 15421 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0xbd, 0x59, 0x6c, 0x5c, 0xc9, + 0x7a, 0x18, 0xac, 0xe6, 0xce, 0x8f, 0x8b, 0x5a, 0x45, 0x52, 0x6c, 0x51, 0x4b, 0x4b, 0x47, 0xa3, + 0x19, 0x8d, 0xee, 0x5c, 0x2d, 0x9c, 0xe5, 0xce, 0x3e, 0xd3, 0x4d, 0x52, 0x22, 0x25, 0x6e, 0x73, + 0x9a, 0xa4, 0x66, 0xf3, 0xed, 0x7b, 0xd8, 0x5d, 0x22, 0x8f, 0xd5, 0x3c, 0xa7, 0xef, 0x39, 0xa7, + 0xa5, 0xd1, 0xf5, 0x7f, 0xfd, 0xc3, 0x76, 0x16, 0x07, 0x41, 0x12, 0x1b, 0x88, 0x03, 0x27, 0x79, + 0x70, 0x02, 0x38, 0x40, 0x10, 0x20, 0x80, 0x5f, 0x02, 0x3f, 0xf9, 0x21, 0x40, 0x80, 0xdc, 0x18, + 0x08, 0x12, 0xc3, 0xf6, 0x4b, 0x80, 0xd0, 0xc9, 0x05, 0xfc, 0x42, 0x24, 0x0f, 0x46, 0x90, 0x00, + 0xb9, 0x81, 0x81, 0xa0, 0xbe, 0x5a, 0x4e, 0xd5, 0x59, 0xba, 0x49, 0x49, 0x73, 0x9d, 0x17, 0x89, + 0xfd, 0x6d, 0x55, 0xf5, 0x55, 0x9d, 0xaa, 0xfa, 0xbe, 0xfa, 0xea, 0x2b, 0xb8, 0x19, 0xd1, 0x16, + 0x6d, 0xfb, 0x41, 0x74, 0xab, 0x45, 0xf7, 0x9c, 0xc6, 0xb3, 0x5b, 0x8d, 0x96, 0x4b, 0xbd, 0xe8, + 0x56, 0x3b, 0xf0, 0x23, 0xff, 0x96, 0xd3, 0x89, 0xf6, 0x43, 0x1a, 0x3c, 0x71, 0x1b, 0xf4, 0x26, + 0x42, 0xc8, 0x20, 0xfe, 0x37, 0x37, 0xbd, 0xe7, 0xef, 0xf9, 0x9c, 0x86, 0xfd, 0xc5, 0x91, 0x73, + 0xe7, 0xf7, 0x7c, 0x7f, 0xaf, 0x45, 0x39, 0xf3, 0x6e, 0xe7, 0xd1, 0x2d, 0x7a, 0xd0, 0x8e, 0x9e, + 0x09, 0x64, 0x39, 0x89, 0x8c, 0xdc, 0x03, 0x1a, 0x46, 0xce, 0x41, 0x5b, 0x10, 0xbc, 0xae, 0xaa, + 0xe2, 0x44, 0x11, 0xc3, 0x44, 0xae, 0xef, 0xdd, 0x7a, 0x72, 0x47, 0xff, 0x29, 0x48, 0xaf, 0x77, + 0xad, 0x75, 0x83, 0x06, 0x51, 0x78, 0x2c, 0x4a, 0xfa, 0x84, 0x7a, 0x51, 0xaa, 0x78, 0x41, 0x19, + 0x3d, 0x6b, 0xd3, 0x90, 0x93, 0xc8, 0xff, 0x04, 0xe9, 0x95, 0x6c, 0x52, 0xfc, 0x57, 0x90, 0x7c, + 0x37, 0x9b, 0xe4, 0x29, 0xdd, 0x65, 0x3a, 0xf5, 0xd4, 0x1f, 0x3d, 0xc8, 0x03, 0xa7, 0xdd, 0xa6, + 0x41, 0xfc, 0x87, 0x20, 0x3f, 0xa7, 0xc8, 0x0f, 0x1e, 0x39, 0x4c, 0x45, 0x07, 0x8f, 0x9c, 0x54, + 0x33, 0x3a, 0xa1, 0xb3, 0x47, 0x45, 0xf5, 0x9f, 0xdc, 0xd1, 0x7f, 0x72, 0x52, 0xeb, 0x77, 0x0a, + 0x30, 0xf8, 0xd0, 0x89, 0x1a, 0xfb, 0xe4, 0x13, 0x18, 0x7c, 0xe0, 0x7a, 0xcd, 0xb0, 0x54, 0xb8, + 0xdc, 0x7f, 0x7d, 0x6c, 0xbe, 0x78, 0x93, 0x37, 0x05, 0x91, 0x0c, 0x51, 0x9d, 0xfd, 0xc9, 0x61, + 0xf9, 0xd4, 0xd1, 0x61, 0xf9, 0xf4, 0x63, 0x46, 0xf6, 0x86, 0x7f, 0xe0, 0x46, 0xd8, 0xb7, 0x36, + 0xe7, 0x23, 0xdb, 0x30, 0x55, 0x69, 0xb5, 0xfc, 0xa7, 0x9b, 0x4e, 0x10, 0xb9, 0x4e, 0xab, 0xd6, + 0x69, 0x34, 0x68, 0x18, 0x96, 0xfa, 0x2e, 0x17, 0xae, 0x8f, 0x54, 0xaf, 0x1e, 0x1d, 0x96, 0xcb, + 0x0e, 0x43, 0xd7, 0xdb, 0x1c, 0x5f, 0x0f, 0x39, 0x81, 0x26, 0x28, 0x8b, 0xdf, 0xfa, 0xc3, 0x21, + 0x28, 0x2e, 0xfb, 0x61, 0xb4, 0xc0, 0x7a, 0xd4, 0xa6, 0x3f, 0xec, 0xd0, 0x30, 0x22, 0x57, 0x61, + 0x88, 0xc1, 0x56, 0x16, 0x4b, 0x85, 0xcb, 0x85, 0xeb, 0xa3, 0xd5, 0xb1, 0xa3, 0xc3, 0xf2, 0xf0, + 0xbe, 0x1f, 0x46, 0x75, 0xb7, 0x69, 0x0b, 0x14, 0x79, 0x1d, 0x46, 0xd6, 0xfd, 0x26, 0x5d, 0x77, + 0x0e, 0x28, 0xd6, 0x62, 0xb4, 0x3a, 0x71, 0x74, 0x58, 0x1e, 0xf5, 0xfc, 0x26, 0xad, 0x7b, 0xce, + 0x01, 0xb5, 0x15, 0x9a, 0xec, 0xc0, 0x80, 0xed, 0xb7, 0x68, 0xa9, 0x1f, 0xc9, 0xaa, 0x47, 0x87, + 0xe5, 0x81, 0xc0, 0x6f, 0xd1, 0x9f, 0x1d, 0x96, 0xdf, 0xd9, 0x73, 0xa3, 0xfd, 0xce, 0xee, 0xcd, + 0x86, 0x7f, 0x70, 0x6b, 0x2f, 0x70, 0x9e, 0xb8, 0x7c, 0x10, 0x3a, 0xad, 0x5b, 0xf1, 0x50, 0x6d, + 0xbb, 0xa2, 0xdf, 0x6b, 0xcf, 0xc2, 0x88, 0x1e, 0x30, 0x49, 0x36, 0xca, 0x23, 0x0f, 0x61, 0xba, + 0xd2, 0x6c, 0xba, 0x9c, 0x63, 0x33, 0x70, 0xbd, 0x86, 0xdb, 0x76, 0x5a, 0x61, 0x69, 0xe0, 0x72, + 0xff, 0xf5, 0x51, 0xa1, 0x14, 0x85, 0xaf, 0xb7, 0x15, 0x81, 0xa6, 0x94, 0x4c, 0x01, 0xe4, 0x4d, + 0x18, 0x59, 0x5c, 0xaf, 0xb1, 0xba, 0x87, 0xa5, 0x41, 0x14, 0x36, 0x7b, 0x74, 0x58, 0x9e, 0x6a, + 0x7a, 0x21, 0x36, 0x4d, 0x17, 0xa0, 0x08, 0xc9, 0x3b, 0x30, 0xbe, 0xd9, 0xd9, 0x6d, 0xb9, 0x8d, + 0xad, 0xd5, 0xda, 0x03, 0xfa, 0xac, 0x34, 0x74, 0xb9, 0x70, 0x7d, 0xbc, 0x4a, 0x8e, 0x0e, 0xcb, + 0x93, 0x6d, 0x84, 0xd7, 0xa3, 0x56, 0x58, 0x7f, 0x4c, 0x9f, 0xd9, 0x06, 0x5d, 0xcc, 0x57, 0xab, + 0x2d, 0x33, 0xbe, 0xe1, 0x14, 0x5f, 0x18, 0xee, 0xeb, 0x7c, 0x9c, 0x8e, 0xdc, 0x02, 0xb0, 0xe9, + 0x81, 0x1f, 0xd1, 0x4a, 0xb3, 0x19, 0x94, 0x46, 0x50, 0xb7, 0xa7, 0x8f, 0x0e, 0xcb, 0x63, 0x01, + 0x42, 0xeb, 0x4e, 0xb3, 0x19, 0xd8, 0x1a, 0x09, 0x59, 0x80, 0x11, 0xdb, 0xe7, 0x0a, 0x2e, 0x8d, + 0x5e, 0x2e, 0x5c, 0x1f, 0x9b, 0x3f, 0x2d, 0x86, 0xa1, 0x04, 0x57, 0xcf, 0x1e, 0x1d, 0x96, 0x49, + 0x20, 0x7e, 0xe9, 0xad, 0x94, 0x14, 0xa4, 0x0c, 0xc3, 0xeb, 0xfe, 0x82, 0xd3, 0xd8, 0xa7, 0x25, + 0xc0, 0xb1, 0x37, 0x78, 0x74, 0x58, 0x2e, 0x7c, 0xd7, 0x96, 0x50, 0xf2, 0x04, 0xc6, 0xe2, 0x8e, + 0x0a, 0x4b, 0x63, 0xa8, 0xbe, 0xad, 0xa3, 0xc3, 0xf2, 0xd9, 0x10, 0xc1, 0x75, 0xd6, 0xf5, 0x9a, + 0x06, 0x5f, 0x60, 0x14, 0xe8, 0x05, 0x91, 0xaf, 0x61, 0x26, 0xfe, 0x59, 0x09, 0x43, 0x1a, 0x30, + 0x19, 0x2b, 0x8b, 0xa5, 0x09, 0xd4, 0xcc, 0xab, 0x47, 0x87, 0x65, 0x4b, 0xab, 0x41, 0xdd, 0x91, + 0x24, 0x75, 0xb7, 0xa9, 0xb5, 0x34, 0x5b, 0xc8, 0xfd, 0x81, 0x91, 0xf1, 0xe2, 0x84, 0x7d, 0x71, + 0xdb, 0x0b, 0x23, 0x67, 0xb7, 0x45, 0x33, 0x89, 0xac, 0xbf, 0x2c, 0x00, 0xd9, 0x68, 0x53, 0xaf, + 0x56, 0x5b, 0x66, 0xdf, 0x93, 0xfc, 0x9c, 0xde, 0x80, 0x51, 0xde, 0x71, 0xac, 0x77, 0xfb, 0xb0, + 0x77, 0x27, 0x8f, 0x0e, 0xcb, 0x20, 0x7a, 0x97, 0xf5, 0x6c, 0x4c, 0x40, 0xae, 0x41, 0xff, 0xd6, + 0xd6, 0x2a, 0x7e, 0x2b, 0xfd, 0xd5, 0xa9, 0xa3, 0xc3, 0x72, 0x7f, 0x14, 0xb5, 0x7e, 0x76, 0x58, + 0x1e, 0x59, 0xec, 0x04, 0xa8, 0x16, 0x9b, 0xe1, 0xc9, 0x35, 0x18, 0x5e, 0x68, 0x75, 0xc2, 0x88, + 0x06, 0xa5, 0x81, 0xf8, 0x23, 0x6d, 0x70, 0x90, 0x2d, 0x71, 0xe4, 0x3b, 0x30, 0xb0, 0x1d, 0xd2, + 0xa0, 0x34, 0x88, 0xfd, 0x3d, 0x21, 0xfa, 0x9b, 0x81, 0x76, 0xe6, 0xab, 0x23, 0xec, 0x4b, 0xec, + 0x84, 0x34, 0xb0, 0x91, 0x88, 0xdc, 0x84, 0x41, 0xde, 0x69, 0x43, 0x38, 0x49, 0x4d, 0xa8, 0xd1, + 0xd1, 0xa2, 0x3b, 0xef, 0x54, 0x47, 0x8f, 0x0e, 0xcb, 0x83, 0xd8, 0x79, 0x36, 0x27, 0xbb, 0x3f, + 0x30, 0x52, 0x28, 0xf6, 0xd9, 0x23, 0x8c, 0x97, 0x7d, 0x16, 0xd6, 0x77, 0x60, 0x4c, 0x6b, 0x3e, + 0xb9, 0x00, 0x03, 0xec, 0x7f, 0x9c, 0x44, 0xc6, 0x79, 0x61, 0x6c, 0xe1, 0xb0, 0x11, 0x6a, 0xfd, + 0x93, 0x29, 0x28, 0x32, 0x4e, 0x63, 0xe6, 0xb9, 0xa9, 0xab, 0x8a, 0xf3, 0x15, 0x4d, 0x55, 0x95, + 0x0a, 0xba, 0xb2, 0xae, 0x83, 0x2a, 0x5d, 0x4c, 0x42, 0xe3, 0x47, 0x87, 0xe5, 0x91, 0x8e, 0x80, + 0xc5, 0x75, 0x23, 0x35, 0x18, 0x5e, 0xfa, 0xa6, 0xed, 0x06, 0x34, 0x44, 0xd5, 0x8e, 0xcd, 0xcf, + 0xdd, 0xe4, 0xcb, 0xe5, 0x4d, 0xb9, 0x5c, 0xde, 0xdc, 0x92, 0xcb, 0x65, 0xf5, 0xa2, 0x98, 0x8c, + 0xcf, 0x50, 0xce, 0x12, 0x8f, 0x8f, 0xdf, 0xf8, 0xb3, 0x72, 0xc1, 0x96, 0x92, 0xc8, 0x1b, 0x30, + 0x74, 0xd7, 0x0f, 0x0e, 0x9c, 0x48, 0xf4, 0xc1, 0xf4, 0xd1, 0x61, 0xb9, 0xf8, 0x08, 0x21, 0xda, + 0x90, 0x12, 0x34, 0xe4, 0x2e, 0x4c, 0xda, 0x7e, 0x27, 0xa2, 0x5b, 0xbe, 0xec, 0xb9, 0x41, 0xe4, + 0xba, 0x74, 0x74, 0x58, 0x9e, 0x0b, 0x18, 0xa6, 0x1e, 0xf9, 0x75, 0xd1, 0x85, 0x1a, 0x7f, 0x82, + 0x8b, 0x2c, 0xc1, 0x64, 0x05, 0x67, 0x6f, 0xa1, 0x35, 0xde, 0x5f, 0xa3, 0xd5, 0x8b, 0x47, 0x87, + 0xe5, 0x73, 0x0e, 0x62, 0xea, 0x81, 0x40, 0xe9, 0x62, 0x4c, 0x26, 0xb2, 0x0e, 0x67, 0x1e, 0x74, + 0x76, 0x69, 0xe0, 0xd1, 0x88, 0x86, 0xb2, 0x46, 0xc3, 0x58, 0xa3, 0xcb, 0x47, 0x87, 0xe5, 0x0b, + 0x8f, 0x15, 0x32, 0xa3, 0x4e, 0x69, 0x56, 0x42, 0xe1, 0xb4, 0xa8, 0xe8, 0xa2, 0x13, 0x39, 0xbb, + 0x4e, 0x48, 0x71, 0x52, 0x1a, 0x9b, 0x3f, 0xcb, 0x55, 0x7c, 0x33, 0x81, 0xad, 0x5e, 0x15, 0x5a, + 0x3e, 0xaf, 0xda, 0xde, 0x14, 0x28, 0xad, 0xa0, 0xa4, 0x4c, 0x36, 0x37, 0xab, 0x75, 0x67, 0x14, + 0x6b, 0x8b, 0x73, 0xb3, 0x5a, 0x77, 0xf4, 0x59, 0x4b, 0xad, 0x40, 0xab, 0x30, 0xb8, 0xcd, 0x56, + 0x67, 0x9c, 0xb3, 0x26, 0xe7, 0xaf, 0x88, 0x1a, 0x25, 0xc7, 0xdf, 0x4d, 0xf6, 0x03, 0x09, 0xf1, + 0xcb, 0x3b, 0x8d, 0x2b, 0xba, 0xbe, 0x16, 0x23, 0x8e, 0x7c, 0x06, 0x20, 0x6a, 0x55, 0x69, 0xb7, + 0x4b, 0x63, 0xd8, 0xc8, 0x33, 0x66, 0x23, 0x2b, 0xed, 0x76, 0xf5, 0x92, 0x68, 0xdf, 0x59, 0xd5, + 0x3e, 0xa7, 0xdd, 0xd6, 0xa4, 0x69, 0x42, 0xc8, 0x27, 0x30, 0x8e, 0x53, 0x9a, 0xec, 0xd1, 0x71, + 0xec, 0xd1, 0xf3, 0x47, 0x87, 0xe5, 0x59, 0x9c, 0xad, 0x32, 0xfa, 0xd3, 0x60, 0x20, 0xbf, 0x0c, + 0x33, 0x42, 0xdc, 0x43, 0xd7, 0x6b, 0xfa, 0x4f, 0xc3, 0x45, 0x1a, 0x3e, 0x8e, 0xfc, 0x36, 0x4e, + 0x7f, 0x63, 0xf3, 0x17, 0xcc, 0xea, 0x99, 0x34, 0xd5, 0x1b, 0xa2, 0xa6, 0x96, 0xaa, 0xe9, 0x53, + 0x4e, 0x50, 0x6f, 0x72, 0x0a, 0x7d, 0x82, 0xcc, 0x14, 0x41, 0x56, 0xe0, 0xf4, 0x76, 0x48, 0x8d, + 0x36, 0x4c, 0xe2, 0xfa, 0x50, 0x66, 0x3d, 0xdc, 0x09, 0x69, 0x3d, 0xaf, 0x1d, 0x49, 0x3e, 0x62, + 0x03, 0x59, 0x0c, 0xfc, 0x76, 0x62, 0x8c, 0x9f, 0x46, 0x8d, 0x58, 0x47, 0x87, 0xe5, 0x4b, 0xcd, + 0xc0, 0x6f, 0xd7, 0xf3, 0x07, 0x7a, 0x06, 0x37, 0xf9, 0x3e, 0x9c, 0x5d, 0xf0, 0x3d, 0x8f, 0x36, + 0xd8, 0x0c, 0xba, 0xe8, 0x3a, 0x7b, 0x9e, 0x1f, 0x46, 0x6e, 0x63, 0x65, 0xb1, 0x54, 0x8c, 0x97, + 0x87, 0x86, 0xa2, 0xa8, 0x37, 0x15, 0x89, 0xb9, 0x3c, 0xe4, 0x48, 0x21, 0x5f, 0xc1, 0x84, 0x28, + 0x8b, 0x06, 0x38, 0x34, 0xcf, 0x74, 0x1f, 0x68, 0x8a, 0x98, 0x2f, 0xf4, 0x81, 0xfc, 0xc9, 0xb7, + 0x4e, 0xa6, 0x2c, 0xf2, 0x35, 0x8c, 0xad, 0xdd, 0xad, 0xd8, 0x34, 0x6c, 0xfb, 0x5e, 0x48, 0x4b, + 0x04, 0x7b, 0xf4, 0x92, 0x10, 0xbd, 0x76, 0xb7, 0x52, 0xe9, 0x44, 0xfb, 0xd4, 0x8b, 0xdc, 0x86, + 0x13, 0x51, 0x49, 0x55, 0x9d, 0x63, 0x23, 0xef, 0xe0, 0x91, 0x53, 0x0f, 0x04, 0x44, 0x6b, 0x85, + 0x2e, 0x8e, 0xcc, 0xc1, 0x48, 0xad, 0xb6, 0xbc, 0xea, 0xef, 0xb9, 0x5e, 0x69, 0x8a, 0x29, 0xc3, + 0x56, 0xbf, 0xc9, 0x23, 0x98, 0xd1, 0x6c, 0x83, 0x3a, 0xfb, 0x9f, 0x1e, 0x50, 0x2f, 0x2a, 0x4d, + 0x63, 0x1d, 0xbe, 0xab, 0x8c, 0x9b, 0x9b, 0xba, 0x09, 0xf1, 0xe4, 0xce, 0xcd, 0x4a, 0xfc, 0xb3, + 0x26, 0x99, 0xaa, 0x7d, 0xa5, 0x82, 0x3d, 0xed, 0x64, 0x60, 0xc8, 0x16, 0x0c, 0x6f, 0x76, 0x82, + 0xb6, 0x1f, 0xd2, 0xd2, 0x0c, 0x2a, 0xee, 0x6a, 0xb7, 0x2f, 0x54, 0x90, 0x56, 0x67, 0xd8, 0x14, + 0xdd, 0xe6, 0x3f, 0xb4, 0xd6, 0x49, 0x51, 0xe4, 0x53, 0x18, 0xaf, 0xd5, 0x96, 0xe3, 0x05, 0xe5, + 0x2c, 0x2e, 0x28, 0x17, 0x8e, 0x0e, 0xcb, 0x25, 0xb6, 0xa5, 0x8a, 0x17, 0x15, 0xfd, 0xab, 0xd2, + 0x39, 0x98, 0x84, 0xad, 0xd5, 0x5a, 0x2c, 0x61, 0x36, 0x96, 0xc0, 0x36, 0x73, 0xd9, 0x12, 0x74, + 0x0e, 0xf2, 0x2f, 0x0b, 0x70, 0x59, 0x17, 0x99, 0xa5, 0x98, 0xd2, 0xb9, 0xe7, 0xd1, 0xe6, 0xfc, + 0xd1, 0x61, 0xf9, 0xa6, 0xd9, 0x8e, 0x7a, 0x66, 0x67, 0x69, 0x75, 0xeb, 0x59, 0x15, 0xac, 0xaf, + 0xde, 0x80, 0xcc, 0xfa, 0xce, 0x3d, 0x77, 0x7d, 0x4d, 0xad, 0xf5, 0xae, 0x6f, 0xaf, 0xaa, 0x58, + 0x9f, 0xc3, 0xa8, 0x9a, 0xb4, 0xc9, 0x30, 0xf4, 0x57, 0x5a, 0xad, 0xe2, 0x29, 0xf6, 0x47, 0xad, + 0xb6, 0x5c, 0x2c, 0x90, 0x49, 0x80, 0x78, 0xa5, 0x2a, 0xf6, 0x91, 0x71, 0x18, 0x91, 0x2b, 0x49, + 0xb1, 0x1f, 0xe9, 0xdb, 0xed, 0xe2, 0x00, 0x21, 0x30, 0x69, 0xce, 0x67, 0xc5, 0x41, 0xeb, 0x37, 0x0b, 0x30, 0xaa, 0xbe, 0x43, 0x72, 0x1a, 0xc6, 0xb6, 0xd7, 0x6b, 0x9b, 0x4b, 0x0b, 0x2b, 0x77, 0x57, 0x96, 0x16, 0x8b, 0xa7, 0xc8, 0x45, 0x38, 0xb7, 0x55, 0x5b, 0xae, 0x2f, 0x56, 0xeb, 0xab, 0x1b, 0x0b, 0x95, 0xd5, 0xfa, 0xa6, 0xbd, 0xf1, 0xf9, 0x17, 0xf5, 0xad, 0xed, 0xf5, 0xf5, 0xa5, @@ -16225,856 +16225,854 @@ var fileDescriptor_0ffcffcda38ae159 = []byte{ 0xa0, 0xb4, 0xb0, 0x64, 0x6f, 0xd5, 0x37, 0xb7, 0xed, 0xcd, 0x8d, 0xda, 0x52, 0xdd, 0xac, 0x61, 0x12, 0xbb, 0xba, 0x71, 0x6f, 0x65, 0xbd, 0xce, 0x40, 0xb5, 0x62, 0x81, 0x55, 0xc3, 0xc0, 0xd6, 0x56, 0xd6, 0xef, 0xad, 0x2e, 0xd5, 0xb7, 0x6b, 0x4b, 0x82, 0xa4, 0xcf, 0xfa, 0xd5, 0xbe, 0xd4, - 0x96, 0x4e, 0xe6, 0x61, 0xac, 0xc6, 0xfd, 0x15, 0xb8, 0xcc, 0x71, 0x03, 0x91, 0xe9, 0x68, 0xe3, - 0xc2, 0x8d, 0xc1, 0x57, 0x30, 0x9d, 0x88, 0x69, 0x69, 0x9b, 0xec, 0x6b, 0x6e, 0xf8, 0x2d, 0x5d, - 0x4b, 0x6b, 0x0b, 0x98, 0xad, 0xb0, 0x64, 0x5e, 0xd3, 0xe7, 0xb8, 0xb5, 0x88, 0x16, 0x89, 0xd4, - 0xe7, 0xf4, 0xbd, 0x5d, 0x69, 0x76, 0xf3, 0xf1, 0x90, 0x0a, 0x35, 0x0c, 0x79, 0x32, 0x74, 0x09, - 0x45, 0x47, 0x5e, 0x97, 0x9a, 0x2e, 0xb7, 0xee, 0x70, 0xb3, 0x4f, 0xd8, 0x25, 0x42, 0xc9, 0xb5, - 0x3a, 0x39, 0x1b, 0x2b, 0xf9, 0x20, 0x39, 0x67, 0x44, 0x67, 0xa0, 0xb0, 0xc4, 0xfe, 0x69, 0x27, - 0x48, 0x49, 0x19, 0x06, 0xf9, 0x8a, 0xcb, 0xfb, 0x03, 0x75, 0xeb, 0x16, 0x03, 0xd8, 0x1c, 0x6e, - 0xfd, 0x71, 0xbf, 0xae, 0x64, 0x30, 0x5d, 0x5a, 0xeb, 0x6f, 0xd4, 0xa5, 0xb1, 0x9f, 0x11, 0xca, - 0x4c, 0x41, 0xfe, 0x95, 0xa0, 0x29, 0xd8, 0x1f, 0x9b, 0x82, 0xe2, 0x53, 0xe3, 0xa6, 0x60, 0x4c, - 0xc2, 0x46, 0x51, 0xa8, 0x6d, 0x28, 0x75, 0x20, 0x1e, 0x45, 0xa1, 0xea, 0x89, 0x51, 0xd4, 0x88, - 0xc8, 0xfb, 0x00, 0x95, 0x87, 0x35, 0xb4, 0x79, 0xec, 0x75, 0xa1, 0xba, 0xe2, 0x26, 0xe3, 0x3c, - 0x0d, 0x85, 0x49, 0x15, 0xe8, 0x36, 0xa3, 0x46, 0x4d, 0xaa, 0x30, 0x51, 0xf9, 0x51, 0x27, 0xa0, - 0x2b, 0x4d, 0xb6, 0x4f, 0x45, 0xdc, 0x38, 0x1e, 0xe5, 0x0b, 0xa9, 0xc3, 0x10, 0x75, 0x57, 0x60, - 0x34, 0x01, 0x26, 0x0b, 0xd9, 0x80, 0x33, 0xf7, 0x16, 0x36, 0xc5, 0xbc, 0xaa, 0x34, 0x1a, 0x7e, - 0xc7, 0x8b, 0x84, 0xbe, 0x7a, 0xe5, 0xe8, 0xb0, 0x7c, 0x71, 0xaf, 0xd1, 0xae, 0xcb, 0x39, 0xe8, - 0x70, 0xb4, 0xae, 0xb0, 0xa6, 0x78, 0xc9, 0x55, 0xe8, 0xdf, 0xb6, 0x57, 0x84, 0xe5, 0x7c, 0xe6, - 0xe8, 0xb0, 0x3c, 0xd1, 0x09, 0x5c, 0x8d, 0x85, 0x61, 0xc9, 0x7b, 0x00, 0x5b, 0x4e, 0xb0, 0x47, - 0xa3, 0x4d, 0x3f, 0x88, 0x50, 0xe1, 0x9c, 0xa8, 0x9e, 0x3b, 0x3a, 0x2c, 0xcf, 0x44, 0x08, 0xad, - 0xb3, 0xe5, 0x4f, 0x6f, 0x74, 0x4c, 0x7c, 0x7f, 0x60, 0xa4, 0xaf, 0xd8, 0x6f, 0x8f, 0xd6, 0x68, - 0x18, 0x72, 0xfb, 0xb0, 0x05, 0x93, 0xf7, 0x68, 0xc4, 0x26, 0xae, 0xb4, 0x77, 0xba, 0x0f, 0xeb, - 0x87, 0x30, 0xf6, 0xd0, 0x8d, 0xf6, 0x6b, 0xb4, 0x11, 0xd0, 0x48, 0xfa, 0x7a, 0xb0, 0xcb, 0x9f, - 0xba, 0xd1, 0x7e, 0x3d, 0xe4, 0x70, 0x7d, 0x5f, 0xd7, 0xc8, 0xad, 0x25, 0x38, 0x2d, 0x4a, 0x53, - 0xe6, 0xd5, 0xbc, 0x29, 0xb0, 0x80, 0x02, 0x71, 0xd8, 0x75, 0x81, 0xa6, 0x98, 0x7f, 0xdd, 0x07, - 0x33, 0x0b, 0xfb, 0x8e, 0xb7, 0x47, 0x37, 0x9d, 0x30, 0x7c, 0xea, 0x07, 0x4d, 0xad, 0xf2, 0x68, - 0x5b, 0xa6, 0x2a, 0x8f, 0xc6, 0xe4, 0x3c, 0x8c, 0x6d, 0xb4, 0x9a, 0x92, 0x47, 0xd8, 0xbd, 0x58, - 0x96, 0xdf, 0x6a, 0xd6, 0xdb, 0x52, 0x96, 0x4e, 0xc4, 0x78, 0xd6, 0xe9, 0x53, 0xc5, 0xd3, 0x1f, - 0xf3, 0x78, 0xf4, 0xa9, 0xc6, 0xa3, 0x11, 0x91, 0x25, 0x38, 0x53, 0xa3, 0x0d, 0xdf, 0x6b, 0xde, - 0x75, 0x1a, 0x91, 0x1f, 0x6c, 0xf9, 0x8f, 0xa9, 0x27, 0x26, 0x34, 0x1a, 0x06, 0x21, 0x22, 0xeb, - 0x8f, 0x10, 0x5b, 0x8f, 0x18, 0xda, 0x4e, 0x73, 0x90, 0x0d, 0x18, 0x79, 0x28, 0x3c, 0x86, 0xc2, - 0x58, 0xbe, 0x76, 0x53, 0xb9, 0x10, 0x17, 0x02, 0x8a, 0xb3, 0xd0, 0x69, 0x29, 0x73, 0x5f, 0xe9, - 0x59, 0xb8, 0x94, 0x49, 0x4a, 0x5b, 0x09, 0xb1, 0xb6, 0x61, 0x62, 0xb3, 0xd5, 0xd9, 0x73, 0x3d, - 0xb6, 0xe8, 0xd4, 0xe8, 0x0f, 0xc9, 0x22, 0x40, 0x0c, 0x10, 0x7e, 0xc0, 0x29, 0x61, 0x62, 0xc7, - 0x88, 0x9d, 0x37, 0xc5, 0x97, 0x8b, 0x10, 0xb4, 0x88, 0x6c, 0x8d, 0xcf, 0xfa, 0xdf, 0xfd, 0x40, - 0xc4, 0x00, 0xe0, 0x26, 0x58, 0xa3, 0x11, 0xdb, 0x9e, 0xce, 0x42, 0x9f, 0x72, 0xd7, 0x0d, 0x1d, - 0x1d, 0x96, 0xfb, 0xdc, 0xa6, 0xdd, 0xb7, 0xb2, 0x48, 0xde, 0x82, 0x41, 0x24, 0xc3, 0xfe, 0x9f, - 0x54, 0xe5, 0xe9, 0x12, 0xf8, 0xe2, 0x83, 0xbb, 0xaf, 0xcd, 0x89, 0xc9, 0xdb, 0x30, 0xba, 0x48, - 0x5b, 0x74, 0xcf, 0x89, 0x7c, 0xb9, 0x9c, 0x70, 0x07, 0x98, 0x04, 0x6a, 0x73, 0x2e, 0xa6, 0x64, - 0xe6, 0xb0, 0x4d, 0x9d, 0xd0, 0xf7, 0x74, 0x73, 0x38, 0x40, 0x88, 0x6e, 0x0e, 0x73, 0x1a, 0xf2, - 0x5b, 0x05, 0x18, 0xab, 0x78, 0x9e, 0x70, 0x2c, 0x85, 0xa2, 0xd7, 0x67, 0x6e, 0x2a, 0x4f, 0xec, - 0xaa, 0xb3, 0x4b, 0x5b, 0x3b, 0x4e, 0xab, 0x43, 0xc3, 0xea, 0xd7, 0xcc, 0x42, 0xf9, 0x4f, 0x87, - 0xe5, 0x0f, 0x4e, 0xe0, 0x2a, 0x8a, 0x7d, 0xba, 0x5b, 0x81, 0xe3, 0x46, 0x21, 0xfb, 0x6a, 0x9d, - 0xb8, 0x40, 0xfd, 0xbb, 0xd1, 0xea, 0x11, 0xef, 0x0d, 0x43, 0xbd, 0xf6, 0x06, 0x72, 0x00, 0xa7, - 0x2b, 0x61, 0xd8, 0x39, 0xa0, 0xb5, 0xc8, 0x09, 0xa2, 0x2d, 0xf7, 0x80, 0xe2, 0x82, 0xd4, 0xdd, - 0xb9, 0xf0, 0xda, 0x4f, 0x0e, 0xcb, 0x05, 0x66, 0x14, 0x39, 0xc8, 0xca, 0xf4, 0x9e, 0x20, 0xaa, - 0x47, 0xae, 0xbe, 0xbd, 0xa1, 0x9b, 0x21, 0x29, 0xdb, 0xba, 0xaa, 0x14, 0x92, 0x95, 0xc5, 0xbc, - 0x11, 0xb7, 0x16, 0xe0, 0xc2, 0x3d, 0x1a, 0xd9, 0x34, 0xa4, 0x91, 0xfc, 0x46, 0x70, 0x86, 0xc7, - 0xce, 0xdd, 0x61, 0xfc, 0xad, 0x98, 0x71, 0xf8, 0xf9, 0x77, 0x21, 0x31, 0xd6, 0xdf, 0x28, 0x40, - 0x79, 0x21, 0xa0, 0xdc, 0x9e, 0xc8, 0x11, 0xd4, 0x7d, 0xed, 0xba, 0x00, 0x03, 0x5b, 0xcf, 0xda, - 0xd2, 0x2b, 0x83, 0x58, 0x36, 0x28, 0x36, 0x42, 0x8f, 0xe9, 0xe4, 0xb2, 0x1e, 0xc1, 0x8c, 0x4d, - 0x3d, 0xfa, 0xd4, 0xd9, 0x6d, 0x51, 0xc3, 0x4f, 0x54, 0x86, 0x41, 0xfe, 0xa1, 0xa7, 0x9a, 0xc0, - 0xe1, 0x27, 0xf3, 0xb9, 0x59, 0x13, 0x30, 0xb6, 0xe9, 0x7a, 0x7b, 0x42, 0xba, 0xf5, 0x17, 0x03, - 0x30, 0xce, 0x7f, 0x0b, 0x13, 0x29, 0xb1, 0x5d, 0x16, 0x8e, 0xb3, 0x5d, 0xbe, 0x0b, 0x13, 0x6c, - 0xbf, 0xa1, 0xc1, 0x0e, 0x0d, 0xd8, 0xfa, 0x2f, 0x7a, 0x02, 0xcd, 0xbd, 0x10, 0x11, 0xf5, 0x27, - 0x1c, 0x63, 0x9b, 0x84, 0x64, 0x15, 0x26, 0x39, 0xe0, 0x2e, 0x75, 0xa2, 0x4e, 0xec, 0xb1, 0x3a, - 0x2d, 0x6c, 0x22, 0x09, 0xe6, 0x53, 0x53, 0xc8, 0x7a, 0x24, 0x80, 0x76, 0x82, 0x97, 0x7c, 0x02, - 0xa7, 0x37, 0x03, 0xff, 0x9b, 0x67, 0x9a, 0x82, 0xc0, 0xbf, 0x4e, 0x6e, 0x3d, 0x31, 0x54, 0x5d, - 0x57, 0x13, 0x92, 0xd4, 0xe4, 0x75, 0x18, 0x59, 0x09, 0xab, 0x7e, 0xe0, 0x7a, 0x7b, 0xf8, 0x8d, - 0x8e, 0x70, 0x47, 0xbf, 0x1b, 0xd6, 0x77, 0x11, 0x68, 0x2b, 0x74, 0xc2, 0x25, 0x3d, 0xdc, 0xdb, - 0x25, 0x7d, 0x1b, 0x60, 0xd5, 0x77, 0x9a, 0x95, 0x56, 0x6b, 0xa1, 0x12, 0xe2, 0x4e, 0x2c, 0xf6, - 0xa3, 0x96, 0xef, 0x34, 0xeb, 0x4e, 0xab, 0x55, 0x6f, 0x38, 0xa1, 0xad, 0xd1, 0x90, 0x2f, 0xe1, - 0x5c, 0xe8, 0xee, 0x79, 0xd8, 0xb8, 0xba, 0xd3, 0xda, 0xf3, 0x03, 0x37, 0xda, 0x3f, 0xa8, 0x87, - 0x1d, 0x37, 0xe2, 0xfe, 0xa0, 0xc9, 0xf9, 0x4b, 0x62, 0x91, 0xab, 0x49, 0xba, 0x8a, 0x24, 0xab, - 0x31, 0x2a, 0x7b, 0x36, 0xcc, 0x46, 0x90, 0x87, 0x30, 0xb1, 0xea, 0x36, 0xa8, 0x17, 0x52, 0x74, - 0xf0, 0x3d, 0x43, 0x6f, 0x51, 0xf7, 0x8f, 0x99, 0x75, 0xe2, 0x44, 0x4b, 0x67, 0xc2, 0x4f, 0xd7, - 0x94, 0x73, 0x7f, 0x60, 0x64, 0xa8, 0x38, 0x6c, 0x9f, 0x16, 0xc0, 0x87, 0x4e, 0xe0, 0xb9, 0xde, - 0x5e, 0x68, 0xfd, 0x5d, 0x02, 0x23, 0x6a, 0x9c, 0x6e, 0xea, 0x96, 0x8a, 0xd8, 0x9a, 0x71, 0xca, - 0xc6, 0x7e, 0x38, 0x5b, 0xa3, 0x20, 0xe7, 0xd0, 0x76, 0x11, 0x4a, 0xc1, 0x30, 0xfb, 0x84, 0x9c, - 0x76, 0xdb, 0x66, 0x30, 0xb6, 0x34, 0x2c, 0x56, 0x71, 0xd2, 0x8c, 0xf0, 0xa5, 0xa1, 0xb9, 0x6b, - 0xf7, 0x2d, 0x56, 0xd9, 0x37, 0xb9, 0xb1, 0xb2, 0xb8, 0x80, 0xe3, 0x3f, 0xc2, 0xbf, 0x49, 0xdf, - 0x6d, 0x36, 0x6c, 0x84, 0x32, 0x6c, 0xad, 0xb2, 0xb6, 0x2a, 0xc6, 0x18, 0xb1, 0xa1, 0x73, 0xd0, - 0xb2, 0x11, 0xca, 0xb4, 0x5d, 0xee, 0x52, 0x59, 0xf0, 0xbd, 0x28, 0xf0, 0x5b, 0x21, 0xaa, 0x70, - 0x23, 0x7c, 0x0e, 0x0a, 0x5f, 0x4c, 0x43, 0xa0, 0xec, 0x04, 0x29, 0x79, 0x08, 0xb3, 0x95, 0xe6, - 0x13, 0xc7, 0x6b, 0xd0, 0x26, 0xc7, 0x3c, 0xf4, 0x83, 0xc7, 0x8f, 0x5a, 0xfe, 0xd3, 0x10, 0x27, - 0xc9, 0x88, 0x70, 0x5d, 0x0a, 0x12, 0xe9, 0xda, 0x79, 0x2a, 0x89, 0xec, 0x3c, 0x6e, 0xb6, 0x0e, - 0x2c, 0xb4, 0xfc, 0x4e, 0x53, 0x4c, 0x1d, 0x5c, 0x07, 0x1a, 0x0c, 0x60, 0x73, 0x38, 0xeb, 0xa5, - 0xe5, 0xda, 0x1a, 0x4e, 0x0c, 0xd1, 0x4b, 0xfb, 0xe1, 0x81, 0xcd, 0x60, 0xe4, 0x1a, 0x0c, 0x4b, - 0xc5, 0x9d, 0x9f, 0x64, 0xa0, 0x07, 0x5d, 0x2a, 0xec, 0x12, 0xc7, 0xbe, 0x63, 0x9b, 0x36, 0xfc, - 0x27, 0x34, 0x78, 0xb6, 0xe0, 0x37, 0xa9, 0x74, 0x6b, 0x09, 0xb7, 0x0d, 0x47, 0xd4, 0x1b, 0x0c, - 0x63, 0x9b, 0x84, 0xac, 0x00, 0xbe, 0x71, 0x87, 0xa5, 0xd3, 0x71, 0x01, 0x7c, 0x63, 0x0f, 0x6d, - 0x89, 0x23, 0x8b, 0x70, 0xa6, 0xd2, 0x89, 0xfc, 0x03, 0x27, 0x72, 0x1b, 0xdb, 0xed, 0xbd, 0xc0, - 0x61, 0x85, 0x14, 0x91, 0x01, 0x0d, 0x19, 0x47, 0x22, 0xeb, 0x1d, 0x81, 0xb5, 0xd3, 0x0c, 0xe4, - 0x1d, 0x18, 0x5f, 0x09, 0xb9, 0xeb, 0xd2, 0x09, 0x69, 0x13, 0xfd, 0x4f, 0xa2, 0x96, 0x6e, 0x58, - 0x47, 0x47, 0x66, 0x9d, 0x99, 0x3e, 0x4d, 0xdb, 0xa0, 0x23, 0x16, 0x0c, 0x55, 0xc2, 0xd0, 0x0d, - 0x23, 0x74, 0x2b, 0x8d, 0x54, 0xe1, 0xe8, 0xb0, 0x3c, 0xe4, 0x20, 0xc4, 0x16, 0x18, 0xf2, 0x10, - 0xc6, 0x16, 0x29, 0xd3, 0x9c, 0xb7, 0x82, 0x4e, 0x18, 0xa1, 0x93, 0x68, 0x6c, 0xfe, 0x9c, 0x58, - 0x8d, 0x34, 0x8c, 0x98, 0xcb, 0x5c, 0x45, 0x6d, 0x22, 0xbc, 0x1e, 0x31, 0x84, 0xbe, 0xd5, 0x6a, - 0xf4, 0xcc, 0x2c, 0x10, 0x3c, 0xcb, 0x6e, 0x93, 0xad, 0x2f, 0xd3, 0x58, 0x07, 0x34, 0x0b, 0xc4, - 0x82, 0x56, 0xdf, 0x47, 0x8c, 0x6e, 0x16, 0x18, 0x2c, 0xa4, 0x91, 0xf2, 0x86, 0xcf, 0x18, 0x1e, - 0x4f, 0x13, 0x29, 0xab, 0x78, 0x42, 0x5f, 0xf9, 0x87, 0x30, 0xb6, 0xd0, 0x09, 0x23, 0xff, 0x60, - 0x6b, 0x9f, 0x1e, 0x50, 0x74, 0x24, 0x09, 0xe3, 0xa7, 0x81, 0xe0, 0x7a, 0xc4, 0xe0, 0x7a, 0x33, - 0x35, 0x72, 0xf2, 0x19, 0x10, 0x69, 0xc5, 0xdc, 0x63, 0xf3, 0xc3, 0x63, 0x73, 0x19, 0x7d, 0x49, - 0x23, 0xdc, 0x74, 0x91, 0xc6, 0x4f, 0x7d, 0x4f, 0xa1, 0x75, 0x7f, 0x66, 0x9a, 0x99, 0x55, 0x88, - 0x57, 0xf1, 0x5e, 0xe0, 0xb4, 0xf7, 0x4b, 0xa5, 0xd8, 0x34, 0x10, 0x8d, 0xda, 0x63, 0x70, 0x43, - 0xc5, 0x89, 0xc9, 0x49, 0x0d, 0x80, 0xff, 0x5c, 0x65, 0x03, 0xcf, 0xbd, 0x4f, 0x25, 0xa3, 0xbf, - 0x18, 0x42, 0xf6, 0x15, 0x9a, 0x3b, 0x42, 0x6c, 0xcb, 0x35, 0x46, 0x53, 0x13, 0x43, 0x1e, 0x43, - 0x91, 0xff, 0x5a, 0xf3, 0x3d, 0x37, 0xe2, 0xfb, 0xc5, 0x9c, 0xe1, 0xaa, 0x4c, 0xa2, 0x65, 0x01, - 0xe8, 0x22, 0x16, 0x05, 0x1c, 0x28, 0xac, 0x56, 0x4c, 0x4a, 0x30, 0xd9, 0x84, 0xb1, 0xcd, 0xc0, - 0x6f, 0x76, 0x1a, 0x11, 0x6a, 0x19, 0xe7, 0x71, 0xe1, 0x27, 0xa2, 0x1c, 0x0d, 0xc3, 0xfb, 0xa4, - 0xcd, 0x01, 0x75, 0xb6, 0x2f, 0xe8, 0x7d, 0xa2, 0x11, 0x92, 0x2a, 0x0c, 0x6d, 0xfa, 0x2d, 0xb7, - 0xf1, 0xac, 0x74, 0x01, 0x2b, 0x3d, 0x2d, 0x85, 0x21, 0x50, 0x56, 0x15, 0x55, 0xda, 0x36, 0x82, - 0x74, 0x95, 0x96, 0x13, 0x91, 0x0a, 0x4c, 0x7c, 0xc6, 0x26, 0x8c, 0xeb, 0x7b, 0x9e, 0xe3, 0x06, - 0xb4, 0x74, 0x11, 0xc7, 0x05, 0xdd, 0xf8, 0x3f, 0xd4, 0x11, 0xfa, 0x74, 0x36, 0x38, 0xc8, 0x0a, - 0x9c, 0x5e, 0x09, 0x6b, 0x51, 0xe0, 0xb6, 0xe9, 0x9a, 0xe3, 0x39, 0x7b, 0xb4, 0x59, 0xba, 0x14, - 0xfb, 0xd1, 0xdd, 0xb0, 0x1e, 0x22, 0xae, 0x7e, 0xc0, 0x91, 0xba, 0x1f, 0x3d, 0xc1, 0x47, 0x3e, - 0x87, 0xe9, 0xa5, 0x6f, 0x22, 0x36, 0x63, 0x5a, 0x95, 0x4e, 0xd3, 0x8d, 0x6a, 0x91, 0x1f, 0x38, - 0x7b, 0xb4, 0x54, 0x46, 0x79, 0xaf, 0x1c, 0x1d, 0x96, 0x2f, 0x53, 0x81, 0xaf, 0x3b, 0x8c, 0xa0, - 0x1e, 0x72, 0x0a, 0xfd, 0x7c, 0x3c, 0x4b, 0x02, 0xeb, 0xfd, 0x5a, 0xa7, 0xcd, 0xb4, 0x6d, 0xec, - 0xfd, 0xcb, 0x46, 0xef, 0x6b, 0x18, 0xde, 0xfb, 0x21, 0x07, 0xa4, 0x7a, 0x5f, 0x23, 0x24, 0x36, - 0x90, 0xfb, 0xbe, 0xeb, 0x55, 0x1a, 0x91, 0xfb, 0x84, 0x0a, 0x8b, 0x39, 0x2c, 0x5d, 0xc1, 0x9a, - 0xa2, 0xcf, 0xff, 0x17, 0x7d, 0xd7, 0xab, 0x3b, 0x88, 0xae, 0x87, 0x02, 0xaf, 0x7f, 0x23, 0x69, - 0x6e, 0xf2, 0x7d, 0x38, 0xbb, 0xe6, 0xef, 0xba, 0x2d, 0xca, 0x97, 0x1c, 0xde, 0x2d, 0xe8, 0xbf, - 0xb4, 0x50, 0x2e, 0xfa, 0xfc, 0x0f, 0x90, 0xa2, 0x2e, 0x56, 0xab, 0x03, 0x45, 0xa3, 0xfb, 0xfc, - 0xb3, 0xa5, 0x90, 0x25, 0x18, 0xc7, 0xef, 0xb2, 0x85, 0x3f, 0xc3, 0xd2, 0x55, 0x34, 0xe9, 0xae, - 0x24, 0xb4, 0xb4, 0x9b, 0x4b, 0x1a, 0xcd, 0x92, 0x17, 0x05, 0xcf, 0x6c, 0x83, 0x8d, 0x7c, 0x0c, - 0x73, 0xc9, 0xe9, 0xbd, 0xe0, 0x7b, 0x8f, 0xdc, 0xbd, 0x4e, 0x40, 0x9b, 0xa5, 0x57, 0x58, 0x55, - 0xed, 0x2e, 0x14, 0xe4, 0x2b, 0x98, 0xc1, 0xbd, 0xae, 0xe2, 0xf9, 0xde, 0xb3, 0x03, 0xf7, 0x47, - 0xa8, 0x3f, 0x33, 0xb5, 0xf7, 0x1a, 0xaa, 0xbd, 0xd7, 0x8e, 0x0e, 0xcb, 0x57, 0x70, 0x4f, 0xac, - 0x3b, 0x3a, 0x45, 0xc2, 0x6b, 0x9d, 0x2d, 0x63, 0xee, 0x21, 0x9c, 0x49, 0xd5, 0x9f, 0x14, 0xa1, - 0xff, 0xb1, 0x38, 0x9f, 0x1d, 0xb5, 0xd9, 0x9f, 0xe4, 0x0d, 0x18, 0x7c, 0xc2, 0x0c, 0x35, 0x54, - 0x47, 0xe2, 0x13, 0x3f, 0x8d, 0x75, 0xc5, 0x7b, 0xe4, 0xdb, 0x9c, 0xe8, 0xfd, 0xbe, 0x77, 0x0b, - 0xf7, 0x07, 0x46, 0xc6, 0x8a, 0xe3, 0xfc, 0x58, 0xfd, 0xfe, 0xc0, 0xc8, 0x44, 0x71, 0xd2, 0xaa, - 0xc0, 0xe9, 0x04, 0x3d, 0x29, 0xc1, 0x30, 0xf5, 0x98, 0xf2, 0xdf, 0xe4, 0x0a, 0x91, 0x2d, 0x7f, - 0x92, 0x69, 0x18, 0x6c, 0xb9, 0x07, 0x6e, 0x84, 0x05, 0x0e, 0xda, 0xfc, 0x87, 0xf5, 0xdb, 0x05, - 0x20, 0xe9, 0xfd, 0x88, 0xdc, 0x4a, 0x88, 0xe1, 0xaa, 0xaf, 0x00, 0xe9, 0x07, 0x07, 0x52, 0xfa, - 0x67, 0x30, 0xc5, 0x27, 0x84, 0xdc, 0x39, 0xb5, 0xb2, 0xf8, 0x8a, 0x9d, 0x81, 0xd6, 0x9d, 0x4d, - 0x02, 0x8d, 0xfb, 0xec, 0x2a, 0x56, 0xad, 0x03, 0x33, 0x99, 0x3b, 0x11, 0x59, 0x83, 0x99, 0x03, - 0xdf, 0x8b, 0xf6, 0x5b, 0xcf, 0xe4, 0x46, 0x24, 0x4a, 0x2b, 0x60, 0x69, 0xb8, 0xf8, 0x66, 0x12, - 0xd8, 0x53, 0x02, 0x2c, 0x24, 0x62, 0x39, 0xc2, 0xe9, 0x24, 0x5b, 0x62, 0xd9, 0x70, 0x26, 0xb5, - 0xa0, 0x93, 0x8f, 0x60, 0xbc, 0x81, 0xc6, 0x9d, 0x51, 0x12, 0xdf, 0xce, 0x34, 0xb8, 0xfe, 0xad, - 0x72, 0x38, 0x6f, 0xca, 0xbf, 0x28, 0xc0, 0x6c, 0xce, 0x52, 0x7e, 0xf2, 0xae, 0xfe, 0x02, 0xce, - 0x1e, 0x38, 0xdf, 0xd4, 0x03, 0xb4, 0xdd, 0xeb, 0x81, 0xe3, 0x25, 0x7a, 0x1b, 0x97, 0xa9, 0x6c, - 0x0a, 0x3d, 0xb6, 0xe9, 0xc0, 0xf9, 0xc6, 0x46, 0x02, 0x9b, 0xe1, 0x79, 0x3d, 0x3f, 0x85, 0x09, - 0x63, 0xf1, 0x3e, 0x71, 0xe5, 0xac, 0x3b, 0x70, 0x66, 0x91, 0xb6, 0x68, 0x44, 0x8f, 0xed, 0xb3, - 0xb3, 0x36, 0x01, 0x6a, 0xf4, 0xc0, 0x69, 0xef, 0xfb, 0x4c, 0xa9, 0xaf, 0xea, 0xbf, 0x84, 0xcf, - 0x87, 0x48, 0xf3, 0x44, 0x22, 0x76, 0xde, 0xe4, 0x8a, 0x7e, 0xa8, 0x28, 0x6d, 0x8d, 0xcb, 0xfa, - 0xf7, 0x7d, 0x40, 0xc4, 0xea, 0x1b, 0x50, 0xe7, 0x40, 0x56, 0xe3, 0x3d, 0x18, 0xe7, 0x16, 0x3a, - 0x07, 0x63, 0x75, 0xc6, 0xe6, 0xa7, 0xc4, 0x97, 0xa7, 0xa3, 0x96, 0x4f, 0xd9, 0x06, 0x29, 0x63, - 0xb5, 0x29, 0x77, 0x2d, 0x20, 0x6b, 0x9f, 0xc1, 0xaa, 0xa3, 0x18, 0xab, 0xfe, 0x9b, 0x7c, 0x02, - 0x93, 0x0b, 0xfe, 0x41, 0x9b, 0xf5, 0x89, 0x60, 0xee, 0x17, 0x6e, 0x1b, 0x51, 0xae, 0x81, 0x5c, - 0x3e, 0x65, 0x27, 0xc8, 0xc9, 0x3a, 0x4c, 0xdd, 0x6d, 0x75, 0xc2, 0xfd, 0x8a, 0xd7, 0x5c, 0x68, - 0xf9, 0xa1, 0x94, 0x32, 0x20, 0x2c, 0x2d, 0xb1, 0x76, 0xa6, 0x29, 0x96, 0x4f, 0xd9, 0x59, 0x8c, - 0xe4, 0x1a, 0x0c, 0x2e, 0x3d, 0x61, 0x6b, 0xba, 0x8c, 0x70, 0x11, 0x01, 0x78, 0x1b, 0x1e, 0xdd, - 0x78, 0xb4, 0x7c, 0xca, 0xe6, 0xd8, 0xea, 0x28, 0x0c, 0x4b, 0xeb, 0xfe, 0x16, 0xd3, 0xb7, 0x55, - 0x77, 0xd6, 0x22, 0x27, 0xea, 0x84, 0x64, 0x0e, 0x46, 0xb6, 0xdb, 0xcc, 0xe8, 0x94, 0x6e, 0x11, - 0x5b, 0xfd, 0xb6, 0xde, 0x30, 0x7b, 0x9a, 0x5c, 0x80, 0xd8, 0xa7, 0x2b, 0x88, 0x35, 0x27, 0xef, - 0xb2, 0xd9, 0xb9, 0xdd, 0xa9, 0x8d, 0x72, 0xfb, 0x12, 0xe5, 0x16, 0x93, 0x7d, 0x6d, 0xcd, 0x64, - 0x76, 0x9e, 0xf5, 0x39, 0x5c, 0xda, 0x6e, 0x87, 0x34, 0x88, 0x2a, 0xed, 0x76, 0xcb, 0x6d, 0xf0, - 0x13, 0x32, 0xf4, 0x02, 0xc8, 0xc9, 0xf2, 0x0e, 0x0c, 0x71, 0x80, 0x98, 0x26, 0x72, 0x0e, 0x56, - 0xda, 0x6d, 0xe1, 0x7b, 0x78, 0x93, 0x6b, 0xfe, 0xdc, 0x9b, 0x60, 0x0b, 0x6a, 0xeb, 0x37, 0x0a, - 0x70, 0x89, 0x7f, 0x01, 0xb9, 0xa2, 0xbf, 0x03, 0xa3, 0x18, 0xff, 0xd6, 0x76, 0x1a, 0xf2, 0x9b, - 0xe0, 0x81, 0x80, 0x12, 0x68, 0xc7, 0x78, 0x2d, 0xb2, 0xb0, 0x2f, 0x3f, 0xb2, 0x50, 0x7e, 0x60, - 0xfd, 0x99, 0x1f, 0xd8, 0x67, 0x60, 0x89, 0x1a, 0xb5, 0x5a, 0xa9, 0x4a, 0x85, 0xcf, 0x53, 0x2b, - 0xeb, 0xbf, 0xf7, 0xc1, 0xec, 0x3d, 0xea, 0xd1, 0xc0, 0xc1, 0x76, 0x1a, 0x5e, 0x2e, 0x3d, 0xc2, - 0xa8, 0xd0, 0x35, 0xc2, 0xa8, 0x2c, 0xfd, 0x86, 0x7d, 0xe8, 0x37, 0x4c, 0x85, 0x4b, 0x31, 0x5b, - 0x74, 0xdb, 0x5e, 0x11, 0xcd, 0x42, 0x5b, 0xb4, 0x13, 0xb8, 0xfc, 0x94, 0x61, 0x25, 0x8e, 0x4e, - 0x1a, 0xe8, 0xe9, 0x73, 0x98, 0x12, 0xd1, 0x1a, 0xc3, 0x22, 0x3a, 0xc9, 0x8c, 0x49, 0x5a, 0x87, - 0x21, 0xee, 0xee, 0xc4, 0xb3, 0xad, 0xb1, 0xf9, 0x1b, 0xe2, 0x9b, 0xca, 0x69, 0xa0, 0xf0, 0x8d, - 0xe2, 0xc6, 0xce, 0xa7, 0x40, 0x84, 0x00, 0x5b, 0x48, 0x99, 0xfb, 0x0c, 0xc6, 0x34, 0x92, 0xe3, - 0xec, 0xfd, 0xca, 0xed, 0xca, 0xd4, 0x51, 0x6f, 0x8f, 0x7b, 0x70, 0xb5, 0xbd, 0xdf, 0xfa, 0x00, - 0x4a, 0xe9, 0xda, 0x08, 0x57, 0x5b, 0x2f, 0xcf, 0x9e, 0xb5, 0x08, 0xd3, 0xf7, 0x68, 0x84, 0x13, - 0x17, 0x3f, 0x22, 0x2d, 0xca, 0x2e, 0xf1, 0x9d, 0xc9, 0x55, 0x15, 0x81, 0x6c, 0x82, 0x69, 0x5f, - 0x69, 0x0d, 0x66, 0x12, 0x52, 0x44, 0xf9, 0xef, 0xc3, 0xb0, 0x00, 0xa9, 0x15, 0x55, 0x84, 0xea, - 0xd2, 0x5d, 0x81, 0xd8, 0x99, 0xe7, 0xf3, 0x56, 0x48, 0xb6, 0x25, 0x83, 0xb5, 0x0f, 0x67, 0xd9, - 0x36, 0x1b, 0x4b, 0x55, 0xd3, 0xf1, 0x3c, 0x8c, 0xb6, 0x99, 0xa2, 0x10, 0xba, 0x3f, 0xe2, 0xd3, - 0x68, 0xd0, 0x1e, 0x61, 0x80, 0x9a, 0xfb, 0x23, 0x4a, 0x2e, 0x02, 0x20, 0x12, 0x9b, 0x29, 0x56, - 0x01, 0x24, 0xe7, 0xae, 0x4c, 0x02, 0x18, 0xa3, 0xc7, 0xe7, 0x8d, 0x8d, 0x7f, 0x5b, 0x01, 0xcc, - 0xa6, 0x4a, 0x12, 0x0d, 0xb8, 0x05, 0x23, 0x52, 0x3f, 0x4e, 0x1c, 0x32, 0xe8, 0x2d, 0xb0, 0x15, - 0x11, 0x79, 0x15, 0x4e, 0x7b, 0xf4, 0x9b, 0xa8, 0x9e, 0xaa, 0xc3, 0x04, 0x03, 0x6f, 0xca, 0x7a, - 0x58, 0xbf, 0x80, 0x8e, 0xe5, 0x9a, 0xe7, 0x3f, 0x7d, 0xd4, 0x72, 0x1e, 0xd3, 0x54, 0xc1, 0x1f, - 0xc1, 0x48, 0xad, 0x77, 0xc1, 0xfc, 0xf3, 0x91, 0x85, 0xdb, 0x8a, 0xc5, 0x6a, 0xc1, 0x1c, 0x6b, - 0x52, 0xad, 0xb2, 0xb6, 0xba, 0xd2, 0xdc, 0xfc, 0xb6, 0x3b, 0xf0, 0x09, 0x9c, 0xcf, 0x2c, 0xed, - 0xdb, 0xee, 0xc4, 0x3f, 0x1c, 0x80, 0x59, 0xbe, 0x99, 0xa4, 0x67, 0xf0, 0xf1, 0x97, 0x9a, 0x9f, - 0xcb, 0x79, 0xef, 0xed, 0x8c, 0xf3, 0x5e, 0x64, 0xd1, 0xcf, 0x7b, 0x8d, 0x53, 0xde, 0x77, 0xb3, - 0x4f, 0x79, 0xd1, 0x09, 0x65, 0x9e, 0xf2, 0x26, 0xcf, 0x76, 0x97, 0xf2, 0xcf, 0x76, 0xf1, 0xe0, - 0x29, 0xe3, 0x6c, 0x37, 0xeb, 0x44, 0x37, 0x11, 0x28, 0x35, 0xf2, 0x72, 0x03, 0xa5, 0x5e, 0x85, - 0xe1, 0x4a, 0xbb, 0xad, 0x05, 0x1e, 0xe2, 0xf0, 0x38, 0xed, 0x36, 0xef, 0x3c, 0x89, 0x94, 0xeb, - 0x3c, 0x64, 0xac, 0xf3, 0xef, 0x01, 0x2c, 0xe0, 0xf5, 0x08, 0x1c, 0xb8, 0x31, 0xa4, 0x40, 0x0d, - 0x9f, 0x5f, 0x9a, 0xc0, 0x81, 0xd3, 0xdd, 0x2b, 0x31, 0x31, 0x57, 0xec, 0xad, 0x1d, 0x28, 0xa5, - 0xa7, 0xcf, 0x4b, 0x58, 0xba, 0xfe, 0xa0, 0x00, 0x17, 0x85, 0x92, 0x93, 0xf8, 0xc0, 0x4f, 0x3e, - 0x3b, 0xdf, 0x86, 0x71, 0xc1, 0xbb, 0x15, 0x7f, 0x08, 0xfc, 0x80, 0x5d, 0x2e, 0xc6, 0x7c, 0x45, - 0x37, 0xc8, 0xc8, 0xdb, 0x30, 0x82, 0x7f, 0xc4, 0x07, 0x43, 0xac, 0x67, 0x46, 0x91, 0xb4, 0x9e, - 0x3c, 0x1e, 0x52, 0xa4, 0xd6, 0xd7, 0x70, 0x29, 0xaf, 0xe2, 0x2f, 0xa1, 0x5f, 0xfe, 0x4d, 0x01, - 0xce, 0x0b, 0xf1, 0xc6, 0x52, 0xf1, 0x5c, 0xbb, 0xce, 0x09, 0xc2, 0x95, 0xef, 0xc3, 0x18, 0x2b, - 0x50, 0xd6, 0xbb, 0x5f, 0x6c, 0xad, 0xc2, 0x72, 0x88, 0x31, 0x8b, 0x4e, 0xe4, 0x88, 0xf0, 0x1b, - 0xe7, 0xa0, 0x25, 0x3d, 0x23, 0xb6, 0xce, 0x6c, 0x7d, 0x09, 0x17, 0xb2, 0x9b, 0xf0, 0x12, 0xfa, - 0xe7, 0x3e, 0xcc, 0x65, 0x6c, 0x0a, 0xcf, 0xb7, 0x27, 0x7f, 0x01, 0xe7, 0x33, 0x65, 0xbd, 0x84, - 0x6a, 0x2e, 0x33, 0x8d, 0x23, 0x7a, 0x09, 0x43, 0x68, 0x3d, 0x84, 0x73, 0x19, 0x92, 0x5e, 0x42, - 0x15, 0xef, 0xc1, 0xac, 0xd2, 0xb4, 0x5f, 0xa8, 0x86, 0x6b, 0x70, 0x91, 0x0b, 0x7a, 0x39, 0xa3, - 0xf2, 0x00, 0xce, 0x0b, 0x71, 0x2f, 0xa1, 0xf7, 0x96, 0xe1, 0x42, 0x6c, 0x50, 0x67, 0xe8, 0x49, - 0xc7, 0x5e, 0x64, 0xac, 0x55, 0xb8, 0x1c, 0x4b, 0xca, 0x51, 0x1a, 0x8e, 0x2f, 0x8d, 0xab, 0x83, - 0xf1, 0x28, 0xbd, 0x94, 0x11, 0x7d, 0x08, 0x67, 0x0d, 0xa1, 0x2f, 0x4d, 0x55, 0x5a, 0x81, 0x29, - 0x2e, 0xd8, 0x54, 0x9d, 0xe7, 0x75, 0xd5, 0x79, 0x6c, 0xfe, 0x4c, 0x2c, 0x12, 0xc1, 0x3b, 0x6f, - 0x66, 0x68, 0xd3, 0x6b, 0xa8, 0x4d, 0x4b, 0x92, 0xb8, 0x86, 0x6f, 0xc3, 0x10, 0x87, 0x88, 0xfa, - 0x65, 0x08, 0xe3, 0xc6, 0x02, 0x67, 0x13, 0xc4, 0xd6, 0xf7, 0xe1, 0x22, 0xb7, 0x44, 0xe3, 0x83, - 0x4a, 0xd3, 0x5a, 0xfc, 0x28, 0x61, 0x88, 0x9e, 0x13, 0x72, 0x93, 0xf4, 0x39, 0xf6, 0xe8, 0xae, - 0x9c, 0xdb, 0x79, 0xf2, 0x8f, 0x75, 0x75, 0x4d, 0x1a, 0x98, 0x7d, 0x99, 0x06, 0xe6, 0x55, 0xb8, - 0xa2, 0x0c, 0xcc, 0x64, 0x31, 0x72, 0x6a, 0x59, 0x5f, 0xc2, 0x79, 0xde, 0x50, 0x19, 0x52, 0x68, - 0x56, 0xe3, 0x83, 0x44, 0x33, 0x67, 0x45, 0x33, 0x4d, 0xea, 0x9c, 0x46, 0xfe, 0xbd, 0x82, 0xfc, - 0xe4, 0xb2, 0x85, 0xff, 0xbc, 0x2d, 0xee, 0x75, 0x28, 0xab, 0x0e, 0x31, 0x6b, 0xf4, 0x7c, 0xe6, - 0xf6, 0x1a, 0xcc, 0xe8, 0x62, 0xdc, 0x06, 0xdd, 0xb9, 0x83, 0x27, 0x48, 0x6f, 0xb1, 0xcf, 0x02, - 0x01, 0x72, 0xda, 0x95, 0x32, 0xfa, 0x0d, 0xe9, 0x6d, 0x45, 0x69, 0xd5, 0xe1, 0x42, 0x7a, 0x28, - 0xdc, 0x86, 0xbc, 0x4f, 0x40, 0x3e, 0x61, 0x9f, 0x30, 0x42, 0xc4, 0x60, 0xe4, 0x0a, 0x95, 0xdf, - 0x31, 0x67, 0x97, 0x5c, 0x96, 0x25, 0x97, 0x9a, 0x44, 0xfb, 0x59, 0xe9, 0x72, 0x3e, 0xfc, 0x18, - 0x88, 0x44, 0x2d, 0xd4, 0x6c, 0x59, 0xf4, 0x39, 0xe8, 0x5f, 0xa8, 0xd9, 0xe2, 0x22, 0x13, 0x6a, - 0x82, 0x8d, 0x30, 0xb0, 0x19, 0x2c, 0xa9, 0x91, 0xf7, 0x1d, 0x43, 0x23, 0xbf, 0x3f, 0x30, 0xd2, - 0x5f, 0x1c, 0xb0, 0x49, 0xcd, 0xdd, 0xf3, 0x1e, 0xba, 0xd1, 0xbe, 0x2a, 0xb0, 0x62, 0x7d, 0x05, - 0x53, 0x46, 0xf1, 0xe2, 0x2b, 0xee, 0x7a, 0x03, 0x8b, 0xe9, 0xb3, 0x0b, 0x15, 0x0c, 0xab, 0x41, - 0x97, 0xc5, 0x38, 0x5f, 0x6f, 0x1a, 0x4e, 0x1d, 0xaf, 0xf7, 0xda, 0x12, 0x69, 0xfd, 0xee, 0x80, - 0x26, 0x5d, 0xbb, 0xd7, 0xd6, 0xa5, 0x75, 0x77, 0x00, 0xf8, 0x0c, 0xd1, 0x1a, 0xc7, 0x14, 0xc0, - 0x31, 0x11, 0xad, 0xc2, 0x97, 0x64, 0x5b, 0x23, 0x3a, 0xee, 0xbd, 0x37, 0x11, 0x7f, 0xcc, 0x99, - 0xe4, 0x55, 0x4f, 0x15, 0x7f, 0x2c, 0x44, 0x87, 0xb6, 0x4e, 0x44, 0xbe, 0x9f, 0xbc, 0x9c, 0x31, - 0x88, 0x07, 0x56, 0xaf, 0xc8, 0x13, 0xec, 0x74, 0xdb, 0x4e, 0x76, 0x3f, 0xe3, 0x29, 0xcc, 0x30, - 0x5e, 0xf7, 0x11, 0x1a, 0x16, 0x4b, 0xdf, 0x44, 0xd4, 0xe3, 0x6b, 0xfb, 0x10, 0x96, 0x73, 0xad, - 0x4b, 0x39, 0x31, 0xb1, 0xf0, 0xbf, 0xc7, 0x72, 0xea, 0x54, 0xe1, 0xec, 0x6c, 0xf9, 0x38, 0x89, - 0xec, 0xd5, 0x25, 0xaf, 0xd9, 0xf6, 0x5d, 0x65, 0x30, 0xf1, 0x49, 0x14, 0xb4, 0xea, 0x54, 0xc0, - 0x6d, 0x9d, 0xc8, 0x7a, 0xb5, 0x6b, 0x54, 0xfb, 0x08, 0x0c, 0x6c, 0x2d, 0x6c, 0xad, 0x16, 0x0b, - 0xd6, 0x2d, 0x00, 0xad, 0x24, 0x80, 0xa1, 0xf5, 0x0d, 0x7b, 0xad, 0xb2, 0x5a, 0x3c, 0x45, 0x66, - 0xe0, 0xcc, 0xc3, 0x95, 0xf5, 0xc5, 0x8d, 0x87, 0xb5, 0x7a, 0x6d, 0xad, 0x62, 0x6f, 0x2d, 0x54, - 0xec, 0xc5, 0x62, 0xc1, 0xfa, 0x1a, 0xa6, 0xcd, 0x16, 0xbe, 0xd4, 0x49, 0x18, 0xc1, 0x94, 0xd2, - 0x67, 0xee, 0x3f, 0xdc, 0xd2, 0x22, 0x5a, 0x85, 0xf1, 0x97, 0x8c, 0xcc, 0x12, 0x66, 0xa2, 0xf8, - 0x8c, 0x34, 0x22, 0xf2, 0x3a, 0x57, 0x0b, 0x92, 0x37, 0x97, 0x99, 0x5a, 0x50, 0x8f, 0xf5, 0x02, - 0x5c, 0xfa, 0xbe, 0x07, 0xd3, 0x66, 0xa9, 0xc7, 0xf5, 0x52, 0xbd, 0x82, 0xa1, 0xbe, 0xda, 0xb5, - 0x26, 0x42, 0xf4, 0x63, 0x03, 0xb1, 0xb2, 0x7e, 0x0f, 0x8a, 0x82, 0x2a, 0xde, 0x79, 0xaf, 0x4a, - 0x37, 0x62, 0x21, 0xe3, 0x12, 0xa6, 0x0c, 0x4a, 0xf7, 0xa1, 0xc8, 0x56, 0x4c, 0xc1, 0xc9, 0x0b, - 0x98, 0x86, 0xc1, 0xd5, 0xf8, 0x38, 0xc7, 0xe6, 0x3f, 0xf0, 0x76, 0x4f, 0xe4, 0x04, 0x91, 0x8c, - 0x83, 0x1b, 0xb5, 0xd5, 0x6f, 0xf2, 0x3a, 0x0c, 0xdd, 0x75, 0x5b, 0x91, 0x70, 0x8d, 0xc4, 0x9b, - 0x3c, 0x13, 0xcb, 0x11, 0xb6, 0x20, 0xb0, 0x6c, 0x38, 0xa3, 0x15, 0x78, 0x82, 0xaa, 0x92, 0x12, - 0x0c, 0xaf, 0xd3, 0x6f, 0xb4, 0xf2, 0xe5, 0x4f, 0xeb, 0x1d, 0x38, 0x23, 0x62, 0x0c, 0xb5, 0x6e, - 0xba, 0x22, 0xee, 0x8a, 0x17, 0x8c, 0x0b, 0xab, 0x42, 0x24, 0xa2, 0x18, 0xdf, 0x76, 0xbb, 0xf9, - 0x9c, 0x7c, 0x6c, 0xa3, 0x38, 0x21, 0xdf, 0x6b, 0xf2, 0x14, 0xa8, 0xd7, 0x70, 0xfe, 0xad, 0x3e, - 0x28, 0x25, 0xbc, 0x0c, 0x0b, 0xfb, 0x4e, 0xab, 0x45, 0xbd, 0x3d, 0x4a, 0xae, 0xc3, 0xc0, 0xd6, - 0xc6, 0xd6, 0xa6, 0xf0, 0x92, 0xca, 0xe8, 0x02, 0x06, 0x52, 0x34, 0x36, 0x52, 0x90, 0x07, 0x70, - 0x46, 0x46, 0x11, 0x2b, 0x94, 0x18, 0xa1, 0x8b, 0xdd, 0x63, 0x92, 0xd3, 0x7c, 0xe4, 0x2d, 0xe1, - 0x12, 0xf9, 0x61, 0xc7, 0x0d, 0x68, 0x13, 0x3d, 0x3f, 0xf1, 0x51, 0xbd, 0x86, 0xb1, 0x75, 0x32, - 0xf2, 0x3d, 0x18, 0xaf, 0xd5, 0x36, 0xe2, 0xd2, 0x07, 0x8d, 0x13, 0x22, 0x1d, 0x65, 0x1b, 0x84, - 0xfc, 0x4a, 0xb0, 0xf5, 0x87, 0x05, 0x98, 0xcd, 0x71, 0xb7, 0x90, 0xd7, 0x8d, 0x7e, 0x98, 0xd2, - 0xfa, 0x41, 0x92, 0x2c, 0x9f, 0x12, 0x1d, 0xb1, 0xa0, 0xc5, 0x64, 0xf7, 0x9f, 0x20, 0x26, 0x7b, - 0xf9, 0x54, 0x1c, 0x87, 0x4d, 0x5e, 0x85, 0xfe, 0x5a, 0x6d, 0x43, 0xb8, 0xd5, 0x49, 0xdc, 0x02, - 0x8d, 0x98, 0x11, 0x54, 0x01, 0x46, 0x24, 0xc8, 0x3a, 0x0d, 0x13, 0xc6, 0xc0, 0x58, 0x16, 0x8c, - 0xeb, 0x35, 0x64, 0xa3, 0xbf, 0xe0, 0x37, 0xd5, 0xe8, 0xb3, 0xbf, 0xad, 0x1f, 0x9b, 0x7d, 0x46, - 0x2e, 0x02, 0xc8, 0xf3, 0x5a, 0xb7, 0x29, 0x4f, 0x7e, 0x04, 0x64, 0xa5, 0x49, 0xae, 0xc0, 0x78, - 0x40, 0x9b, 0x6e, 0x40, 0x1b, 0x51, 0xbd, 0x13, 0x88, 0x8b, 0x31, 0xf6, 0x98, 0x84, 0x6d, 0x07, - 0x2d, 0xf2, 0x1d, 0x18, 0xe2, 0x07, 0xc9, 0xa2, 0xf5, 0xd2, 0x48, 0xa8, 0xd5, 0x36, 0xd6, 0xee, - 0x56, 0xf8, 0x41, 0xb7, 0x2d, 0x48, 0xac, 0x2a, 0x8c, 0x69, 0xad, 0xea, 0x55, 0xfa, 0x34, 0x0c, - 0xea, 0x5e, 0x4a, 0xfe, 0xc3, 0xfa, 0xcd, 0x02, 0x4c, 0xe3, 0x34, 0xd8, 0x73, 0xd9, 0xf6, 0x10, - 0xb7, 0x65, 0xde, 0x18, 0xb4, 0x0b, 0xc6, 0xa0, 0x25, 0x68, 0xd5, 0xe8, 0xbd, 0x9f, 0x1a, 0xbd, - 0x0b, 0x59, 0xa3, 0x87, 0x4b, 0x80, 0xeb, 0x7b, 0xfa, 0xa0, 0xe9, 0xc7, 0x75, 0xbf, 0x5d, 0x80, - 0x29, 0xad, 0x4e, 0xaa, 0x81, 0x77, 0x8c, 0x2a, 0x9d, 0xcf, 0xa8, 0x52, 0x6a, 0x3e, 0x55, 0x53, - 0x35, 0x7a, 0xa5, 0x5b, 0x8d, 0xb2, 0xa6, 0x93, 0x31, 0x4d, 0xfe, 0xa2, 0x00, 0x33, 0x99, 0x7d, - 0x40, 0xce, 0x32, 0xfd, 0xbf, 0x11, 0xd0, 0x48, 0xf4, 0xbc, 0xf8, 0xc5, 0xe0, 0x2b, 0x61, 0xd8, - 0xa1, 0x81, 0xe8, 0x77, 0xf1, 0x8b, 0xbc, 0x02, 0x13, 0x9b, 0x34, 0x70, 0xfd, 0x26, 0xbf, 0x98, - 0xc0, 0x23, 0x7e, 0x27, 0x6c, 0x13, 0x48, 0x2e, 0xc0, 0xa8, 0x8a, 0x58, 0xe5, 0x3e, 0x5c, 0x3b, - 0x06, 0x30, 0xd9, 0x8b, 0xee, 0x1e, 0x3f, 0xf8, 0x61, 0xcc, 0xe2, 0x17, 0x5b, 0x80, 0xa5, 0x47, - 0x75, 0x88, 0x2f, 0xc0, 0xd2, 0x5d, 0x7a, 0x16, 0x86, 0x3e, 0xb3, 0x71, 0x1e, 0x63, 0xce, 0x09, - 0x5b, 0xfc, 0x22, 0x93, 0x18, 0x5a, 0x8e, 0xf7, 0x62, 0x30, 0xa4, 0xfc, 0x7d, 0x98, 0xce, 0xea, - 0xd7, 0xac, 0xaf, 0x40, 0xf0, 0xf6, 0x29, 0xde, 0x2f, 0x61, 0xaa, 0xd2, 0x6c, 0xc6, 0xd3, 0x95, - 0x8f, 0x2a, 0x5f, 0x27, 0xb8, 0x4f, 0x53, 0xa8, 0xb5, 0x03, 0x2b, 0x9e, 0x1b, 0xd9, 0x53, 0x4b, - 0xdf, 0xb8, 0x61, 0xe4, 0x7a, 0x7b, 0x9a, 0xe3, 0xd5, 0x3e, 0xbb, 0x4e, 0x9f, 0x66, 0x4c, 0x01, - 0xa6, 0x71, 0x98, 0xb2, 0x39, 0x3c, 0x43, 0xf8, 0xb4, 0x26, 0x36, 0x5e, 0xba, 0x66, 0x4d, 0xb9, - 0x31, 0xa2, 0xbf, 0xd2, 0x78, 0x6c, 0x7d, 0x0f, 0xce, 0xf2, 0x65, 0xbf, 0x5b, 0xe5, 0x45, 0xb5, - 0x75, 0x3f, 0xb1, 0xf5, 0xae, 0xf4, 0xe4, 0x74, 0xad, 0x99, 0x3d, 0x6e, 0xd4, 0x05, 0x8b, 0xfc, - 0x6f, 0x05, 0x98, 0x4b, 0xb0, 0xd6, 0x9e, 0x79, 0x0d, 0xb9, 0xe7, 0xbc, 0x9a, 0x0c, 0xdd, 0x47, - 0x5d, 0x89, 0x3b, 0x48, 0xdd, 0xa6, 0x8a, 0xde, 0x27, 0xb7, 0x00, 0x38, 0xb3, 0xa6, 0xe2, 0xe0, - 0xf1, 0x80, 0x88, 0x72, 0x42, 0x25, 0x47, 0x23, 0x21, 0x1d, 0xc8, 0xea, 0x77, 0xf1, 0x8d, 0xf4, - 0xf2, 0x9f, 0x63, 0x9e, 0x15, 0x2a, 0xd8, 0xeb, 0x39, 0x8e, 0xf4, 0x2c, 0xf9, 0xd6, 0xdf, 0xef, - 0x87, 0x59, 0x7d, 0x00, 0x9f, 0xa7, 0xad, 0x9b, 0x30, 0xb6, 0xe0, 0x7b, 0x11, 0xfd, 0x26, 0xd2, - 0xf2, 0x5c, 0x10, 0x15, 0x8d, 0xa0, 0x30, 0x42, 0xbd, 0xe6, 0x80, 0x3a, 0xd3, 0xf5, 0x8c, 0x68, - 0xcd, 0x98, 0x90, 0x2c, 0xc0, 0xc4, 0x3a, 0x7d, 0x9a, 0xea, 0x40, 0x8c, 0x18, 0xf5, 0xe8, 0xd3, - 0xba, 0xd6, 0x89, 0x7a, 0x18, 0x9f, 0xc1, 0x43, 0x76, 0x61, 0x52, 0x4e, 0x2e, 0xa3, 0x33, 0xe7, - 0xf4, 0x9d, 0xd7, 0x9c, 0xce, 0x3c, 0x0f, 0x04, 0x2b, 0x21, 0xa7, 0x0f, 0x13, 0x12, 0x59, 0xd3, - 0x79, 0x89, 0x3c, 0xb5, 0x81, 0xb9, 0xb5, 0x6b, 0x18, 0x23, 0x1e, 0x37, 0x99, 0xd2, 0x40, 0x17, - 0x61, 0x6d, 0x42, 0x29, 0x3d, 0x1e, 0xa2, 0xb4, 0xb7, 0x60, 0x88, 0x43, 0x85, 0xaa, 0x24, 0x53, - 0x18, 0x29, 0x6a, 0xee, 0xcb, 0x68, 0x8a, 0x5d, 0x89, 0xc3, 0xac, 0x65, 0xf4, 0x2f, 0x29, 0x1a, - 0xa5, 0xac, 0xde, 0x4e, 0x0e, 0x2f, 0x86, 0x3a, 0xcb, 0xe1, 0xd5, 0x63, 0x71, 0xe4, 0x95, 0x94, - 0x05, 0x74, 0xd1, 0xe9, 0x92, 0x44, 0xc5, 0x6e, 0xc0, 0xb0, 0x00, 0x25, 0x92, 0x2b, 0xc5, 0x9f, - 0x9f, 0x24, 0xb0, 0xde, 0x87, 0x73, 0xe8, 0x2f, 0x74, 0xbd, 0xbd, 0x16, 0xdd, 0x0e, 0x8d, 0x4b, - 0x25, 0xbd, 0x3e, 0xeb, 0x0f, 0x61, 0x2e, 0x8b, 0xb7, 0xe7, 0x97, 0xcd, 0xd3, 0x9d, 0xfc, 0x59, - 0x1f, 0x4c, 0xaf, 0x84, 0xba, 0xc2, 0xa5, 0x52, 0x9e, 0x64, 0xa4, 0xe1, 0xc0, 0x3e, 0x59, 0x3e, - 0x95, 0x95, 0x66, 0xe3, 0x2d, 0xed, 0xba, 0x6b, 0x5f, 0xb7, 0xfc, 0x1a, 0x6c, 0xdb, 0x52, 0x17, - 0x5e, 0x5f, 0x85, 0x81, 0x75, 0xb6, 0x54, 0xf7, 0x8b, 0xb1, 0xe3, 0x1c, 0x0c, 0x84, 0xd7, 0x4d, - 0xd9, 0x16, 0xc9, 0x7e, 0x90, 0xbb, 0xa9, 0x4b, 0xad, 0x03, 0xbd, 0xf3, 0x47, 0x2c, 0x9f, 0x4a, - 0xdd, 0x6f, 0x7d, 0x07, 0xc6, 0x2a, 0xcd, 0x03, 0x1e, 0x92, 0xe9, 0x7b, 0x89, 0xcf, 0x52, 0xc3, - 0x2c, 0x9f, 0xb2, 0x75, 0x42, 0x72, 0x8d, 0xdf, 0x6a, 0x18, 0xca, 0xc9, 0xa9, 0xc1, 0x94, 0xb5, - 0x4a, 0xbb, 0x5d, 0x1d, 0x81, 0x21, 0x7e, 0xd1, 0xd2, 0xfa, 0x12, 0xe6, 0x44, 0x20, 0x0f, 0xf7, - 0x8e, 0x62, 0xb8, 0x4f, 0x18, 0xc7, 0x6a, 0x75, 0x0b, 0xbe, 0xb9, 0x04, 0x80, 0xb6, 0xd0, 0x8a, - 0xd7, 0xa4, 0xdf, 0x88, 0x48, 0x42, 0x0d, 0x62, 0xbd, 0x0d, 0xa3, 0xaa, 0x87, 0x50, 0xe1, 0xd7, - 0x36, 0x3b, 0xec, 0xad, 0x69, 0xe3, 0x16, 0xaf, 0xbc, 0xba, 0x7b, 0xce, 0x68, 0xbb, 0xc8, 0x92, - 0xc3, 0x2d, 0x04, 0x17, 0x66, 0x12, 0x93, 0x20, 0x4e, 0xc2, 0xa0, 0x74, 0x74, 0x1e, 0xea, 0xa8, - 0x7e, 0x27, 0x55, 0xf8, 0xbe, 0x63, 0xa9, 0xf0, 0xd6, 0xbf, 0xec, 0x43, 0xe3, 0x32, 0xd5, 0x1f, - 0x09, 0x3f, 0x9d, 0xee, 0x2b, 0xac, 0xc2, 0x28, 0xb6, 0x7e, 0x51, 0x5e, 0x18, 0xec, 0x1e, 0x87, - 0x32, 0xf2, 0x93, 0xc3, 0xf2, 0x29, 0x0c, 0x3e, 0x89, 0xd9, 0xc8, 0xc7, 0x30, 0xbc, 0xe4, 0x35, - 0x51, 0x42, 0xff, 0x09, 0x24, 0x48, 0x26, 0x36, 0x26, 0x58, 0xe5, 0x2d, 0xf6, 0x09, 0x73, 0xf7, - 0x8e, 0xad, 0x41, 0x62, 0x2b, 0x77, 0x30, 0xcf, 0xca, 0x1d, 0x4a, 0x58, 0xb9, 0x16, 0x0c, 0x6e, - 0x04, 0x4d, 0x91, 0xdb, 0x66, 0x72, 0x7e, 0x5c, 0x74, 0x1c, 0xc2, 0x6c, 0x8e, 0xb2, 0xfe, 0x47, - 0x01, 0x66, 0xef, 0xd1, 0x28, 0x73, 0x0e, 0x19, 0xbd, 0x52, 0x78, 0xe1, 0x5e, 0xe9, 0x7b, 0x9e, - 0x5e, 0x51, 0xad, 0xee, 0xcf, 0x6b, 0xf5, 0x40, 0x5e, 0xab, 0x07, 0xf3, 0x5b, 0x7d, 0x0f, 0x86, - 0x78, 0x53, 0x99, 0x25, 0xbf, 0x12, 0xd1, 0x83, 0xd8, 0x92, 0xd7, 0xa3, 0xe8, 0x6c, 0x8e, 0x63, - 0x8a, 0xe4, 0xaa, 0x13, 0xea, 0x96, 0xbc, 0xf8, 0x69, 0xfd, 0x00, 0xaf, 0x1a, 0xaf, 0xfa, 0x8d, - 0xc7, 0x9a, 0x47, 0x78, 0x98, 0x7f, 0xa1, 0xc9, 0x13, 0x04, 0x46, 0xc5, 0x31, 0xb6, 0xa4, 0x20, - 0x97, 0x61, 0x6c, 0xc5, 0xbb, 0xeb, 0x07, 0x0d, 0xba, 0xe1, 0xb5, 0xb8, 0xf4, 0x11, 0x5b, 0x07, - 0x09, 0x4f, 0x89, 0x28, 0x21, 0x76, 0x3f, 0x20, 0x20, 0xe1, 0x7e, 0x60, 0xb0, 0x9d, 0x79, 0x9b, - 0xe3, 0x84, 0x23, 0x86, 0xfd, 0xdd, 0xcd, 0x72, 0x57, 0x26, 0x7e, 0x2f, 0xc2, 0x5d, 0x38, 0x67, - 0xd3, 0x76, 0xcb, 0x61, 0x3a, 0xdd, 0x81, 0xcf, 0xe9, 0x55, 0x9b, 0x2f, 0x67, 0x5c, 0x13, 0x34, - 0x63, 0x2a, 0x54, 0x95, 0xfb, 0xba, 0x54, 0xf9, 0x00, 0xae, 0xdc, 0xa3, 0x91, 0xb9, 0xa0, 0xc6, - 0xfe, 0x66, 0xd1, 0xf8, 0x65, 0x18, 0x09, 0x4d, 0x5f, 0xb9, 0xbc, 0xf6, 0x96, 0xc9, 0xb8, 0xf3, - 0xa6, 0x3c, 0x4d, 0x12, 0x72, 0xd4, 0x5f, 0xd6, 0x27, 0x50, 0xce, 0x2b, 0xee, 0x78, 0x21, 0xaf, - 0x2e, 0x5c, 0xce, 0x17, 0x20, 0xaa, 0xbb, 0x04, 0xd2, 0xaf, 0x2e, 0x3e, 0xa1, 0x5e, 0xb5, 0x35, - 0x5d, 0xf1, 0xe2, 0x0f, 0xab, 0x2a, 0x83, 0xff, 0x5e, 0xa0, 0xba, 0x75, 0x3c, 0xb2, 0x36, 0x05, - 0xc4, 0xfd, 0x5a, 0x81, 0x11, 0x09, 0x13, 0xfd, 0x3a, 0x9b, 0x59, 0x53, 0xd9, 0xa1, 0x4d, 0x29, - 0x40, 0xb1, 0x59, 0x3f, 0x90, 0xc7, 0x37, 0x26, 0xc7, 0xf1, 0xee, 0xcd, 0x1e, 0xe7, 0xbc, 0xc6, - 0xf2, 0xe1, 0x9c, 0x29, 0x5b, 0x77, 0xcb, 0x17, 0x35, 0xb7, 0x3c, 0xf7, 0xc6, 0x5f, 0x36, 0xdd, - 0xc4, 0xc2, 0xd3, 0xa0, 0x81, 0xc8, 0x25, 0xdd, 0xf9, 0x3e, 0x9e, 0xbe, 0x88, 0x7b, 0x1b, 0xe6, - 0xb2, 0x0a, 0xd4, 0xec, 0x40, 0xe5, 0xe1, 0x15, 0xfa, 0xce, 0x22, 0x5c, 0x92, 0xd9, 0xa5, 0x7c, - 0x3f, 0x0a, 0xa3, 0xc0, 0x69, 0xd7, 0x1a, 0x81, 0xdb, 0x8e, 0xb9, 0x2c, 0x18, 0xe2, 0x10, 0xd1, - 0x13, 0xfc, 0x28, 0x8c, 0xd3, 0x08, 0x8c, 0xf5, 0x2b, 0x05, 0xb0, 0x8c, 0x38, 0x2d, 0x1c, 0xe7, - 0xcd, 0xc0, 0x7f, 0xe2, 0x36, 0xb5, 0xe3, 0xa7, 0xd7, 0x0d, 0xd7, 0x27, 0xbf, 0x93, 0x98, 0x0c, - 0x11, 0x17, 0x6b, 0xe6, 0xed, 0x84, 0x3b, 0x92, 0x2b, 0x9e, 0x18, 0xbb, 0x65, 0x5e, 0x88, 0x50, - 0x6e, 0xca, 0xff, 0x55, 0x80, 0xab, 0x5d, 0xeb, 0x20, 0xda, 0xb3, 0x0b, 0xc5, 0x24, 0x4e, 0xcc, - 0xa0, 0xb2, 0x16, 0xb7, 0x91, 0x96, 0xb0, 0x73, 0x87, 0xc7, 0xa1, 0xcb, 0xf8, 0xa6, 0xb6, 0x92, - 0x9c, 0x92, 0x77, 0xf2, 0xda, 0x63, 0xfe, 0x0a, 0x3f, 0x72, 0x5a, 0x0b, 0xe8, 0x00, 0xe8, 0x8f, - 0xef, 0x14, 0x44, 0x0c, 0x5a, 0x4f, 0xa6, 0xc9, 0xd0, 0x88, 0xad, 0x4f, 0xf1, 0xbb, 0xce, 0xae, - 0xf4, 0xf1, 0x3e, 0xb5, 0x05, 0xb8, 0x9a, 0x88, 0x1d, 0x78, 0x0e, 0x21, 0x11, 0xcc, 0xb0, 0xee, - 0x67, 0xba, 0xf7, 0xbd, 0xc0, 0xef, 0xb4, 0x7f, 0x3e, 0xa3, 0xfe, 0x47, 0x05, 0x1e, 0xcc, 0xa9, - 0x17, 0x2b, 0x06, 0x7a, 0x01, 0x20, 0x86, 0x26, 0x82, 0xfa, 0x15, 0x62, 0xe7, 0x0e, 0x37, 0xb9, - 0xf1, 0x54, 0x61, 0x8f, 0x0b, 0xd0, 0xd8, 0x7e, 0xbe, 0x23, 0xf9, 0x26, 0x06, 0x0c, 0xa8, 0xd2, - 0x8f, 0xd7, 0xef, 0xef, 0x48, 0xff, 0xc7, 0x09, 0xf9, 0xf6, 0x61, 0x9a, 0xad, 0x00, 0x95, 0x4e, - 0xb4, 0xef, 0x07, 0x6e, 0x24, 0xaf, 0xa7, 0x90, 0x4d, 0x91, 0x11, 0x80, 0x73, 0x7d, 0xf8, 0xb3, - 0xc3, 0xf2, 0xbb, 0x27, 0xc9, 0xfb, 0x29, 0x65, 0x6e, 0xa9, 0x2c, 0x02, 0xd6, 0x2c, 0xf4, 0x2f, - 0xd8, 0xab, 0xb8, 0xe0, 0xd9, 0xab, 0x6a, 0xc1, 0xb3, 0x57, 0xad, 0xbf, 0xec, 0x83, 0x32, 0xcf, - 0x59, 0x82, 0x71, 0x26, 0xb1, 0xd7, 0x42, 0x0b, 0x5c, 0x39, 0xae, 0x83, 0x21, 0x91, 0x93, 0xa4, - 0xef, 0x38, 0x39, 0x49, 0x7e, 0x09, 0x72, 0x5c, 0x56, 0xc7, 0xf0, 0x02, 0xbc, 0x76, 0x74, 0x58, - 0xbe, 0x1a, 0x7b, 0x01, 0x38, 0x36, 0xcb, 0x1d, 0x90, 0x53, 0x44, 0xda, 0x7f, 0x31, 0xf0, 0x1c, - 0xfe, 0x8b, 0xdb, 0x30, 0x8c, 0xc6, 0xcc, 0xca, 0xa6, 0x88, 0xfc, 0xc4, 0xe9, 0x89, 0x19, 0x8a, - 0xea, 0xae, 0x9e, 0x0e, 0x50, 0x92, 0x59, 0xff, 0xa8, 0x0f, 0x2e, 0xe7, 0xf7, 0xb9, 0xa8, 0xdb, - 0x22, 0x40, 0x1c, 0xe1, 0xd2, 0x2d, 0xa2, 0x06, 0xbf, 0x9d, 0xa7, 0x74, 0x57, 0x45, 0xb4, 0x69, - 0x7c, 0x4c, 0xf7, 0x91, 0x37, 0xad, 0x13, 0xc7, 0x29, 0xc6, 0x05, 0x6c, 0x91, 0xcd, 0x56, 0x80, - 0x8c, 0x6c, 0xb6, 0x02, 0x46, 0x76, 0x61, 0x76, 0x33, 0x70, 0x9f, 0x38, 0x11, 0x7d, 0x40, 0x9f, - 0xf1, 0xcb, 0x42, 0x4b, 0xe2, 0x86, 0x10, 0xbf, 0x3e, 0x7f, 0xfd, 0xe8, 0xb0, 0xfc, 0x4a, 0x9b, - 0x93, 0x60, 0xc6, 0x32, 0x7e, 0xf7, 0xb3, 0x9e, 0xbe, 0x34, 0x94, 0x27, 0xc8, 0xfa, 0x77, 0x05, - 0x38, 0x8f, 0x6a, 0xb9, 0x70, 0xbb, 0xca, 0xc2, 0x9f, 0x2b, 0xb0, 0x52, 0x6f, 0xa0, 0x98, 0x8b, - 0x18, 0x58, 0x69, 0xdc, 0x44, 0xb7, 0x0d, 0x32, 0xb2, 0x02, 0x63, 0xe2, 0x37, 0x7e, 0x7f, 0xfd, - 0x68, 0x10, 0xcc, 0x68, 0x0b, 0x16, 0x4e, 0x75, 0xee, 0x2a, 0xc2, 0x89, 0x2d, 0x84, 0xe1, 0x85, - 0x4d, 0x5b, 0xe7, 0xb5, 0x7e, 0xda, 0x07, 0x17, 0x76, 0x68, 0xe0, 0x3e, 0x7a, 0x96, 0xd3, 0x98, - 0x0d, 0x98, 0x96, 0x20, 0x9e, 0xb7, 0xc4, 0xf8, 0xc4, 0x78, 0x3e, 0x4b, 0x59, 0x55, 0x91, 0xf8, - 0x44, 0x7e, 0x71, 0x99, 0x8c, 0x27, 0x08, 0x99, 0x7c, 0x0b, 0x46, 0x12, 0x99, 0x83, 0x70, 0xfc, - 0xe5, 0x17, 0x1a, 0x0f, 0xd5, 0xf2, 0x29, 0x5b, 0x51, 0x92, 0x5f, 0xcb, 0x3f, 0xaa, 0x12, 0xae, - 0x8f, 0x5e, 0xfe, 0x4f, 0xfc, 0x60, 0xd9, 0xc7, 0xea, 0x68, 0xd8, 0x8c, 0x0f, 0x76, 0xf9, 0x94, - 0x9d, 0x57, 0x52, 0x75, 0x0c, 0x46, 0x2b, 0x78, 0x6e, 0xc7, 0x2c, 0xf7, 0xff, 0xd9, 0x07, 0x97, - 0xe4, 0xc5, 0x9f, 0x9c, 0x6e, 0xfe, 0x1c, 0x66, 0x25, 0xa8, 0xd2, 0x66, 0x0a, 0x03, 0x6d, 0x9a, - 0x3d, 0xcd, 0x73, 0xca, 0xca, 0x9e, 0x76, 0x04, 0x4d, 0xdc, 0xd9, 0x79, 0xec, 0x2f, 0xc7, 0xfb, - 0xf9, 0x71, 0x56, 0x1e, 0x27, 0xf4, 0x42, 0xea, 0x6b, 0xa6, 0xd1, 0x35, 0xc6, 0xfa, 0xd9, 0x4c, - 0x79, 0x4f, 0x07, 0x5e, 0xd4, 0x7b, 0xba, 0x7c, 0x2a, 0xe9, 0x3f, 0xad, 0x4e, 0xc2, 0xf8, 0x3a, - 0x7d, 0x1a, 0xf7, 0xfb, 0xdf, 0x2c, 0x24, 0x52, 0x3d, 0x30, 0x0d, 0x83, 0xe7, 0x7c, 0x28, 0xc4, - 0xa9, 0x80, 0x30, 0xd5, 0x83, 0xae, 0x61, 0x70, 0xd2, 0x15, 0x18, 0xe6, 0x87, 0xd9, 0xcd, 0x63, - 0x58, 0xf8, 0xea, 0x06, 0x0f, 0xbf, 0x56, 0xd9, 0xe4, 0xc6, 0xbe, 0xe0, 0xb7, 0x1e, 0xc0, 0x15, - 0x11, 0xe3, 0x6d, 0x0e, 0x3e, 0x16, 0x74, 0xc2, 0xed, 0xcb, 0x72, 0xe0, 0xd2, 0x3d, 0x9a, 0x5c, - 0x7a, 0x8c, 0x1b, 0x4e, 0x9f, 0xc0, 0x69, 0x03, 0xae, 0x24, 0xa2, 0x56, 0xaa, 0xe6, 0x90, 0x12, - 0x9d, 0xa4, 0xb6, 0x2e, 0x67, 0x15, 0xa1, 0x57, 0xd6, 0xa2, 0x98, 0x1c, 0x36, 0x88, 0x8f, 0xd8, - 0xc2, 0x13, 0xac, 0x7a, 0xd7, 0xb5, 0xef, 0x9a, 0xaf, 0x78, 0x3c, 0x7b, 0xa0, 0xdc, 0x79, 0x15, - 0xd6, 0x9a, 0x30, 0xce, 0x02, 0xac, 0x49, 0x18, 0x97, 0xa8, 0x16, 0x0d, 0x43, 0xeb, 0x3f, 0x0f, - 0x82, 0x25, 0x3a, 0x36, 0xeb, 0x84, 0x5e, 0xf6, 0xc7, 0x6e, 0xaa, 0xb2, 0x62, 0xa3, 0x3a, 0xab, - 0xe7, 0x24, 0x8d, 0xb1, 0x7c, 0xe6, 0xa1, 0x9e, 0xd7, 0x88, 0xa1, 0xc6, 0xcc, 0x4b, 0xb5, 0xfe, - 0xab, 0x9c, 0x65, 0x92, 0x7f, 0x6c, 0x78, 0x65, 0x3b, 0x67, 0x99, 0x34, 0xe4, 0x66, 0x2f, 0x99, - 0xb6, 0x79, 0x24, 0xd2, 0xff, 0x3c, 0x47, 0x22, 0xec, 0x8b, 0xd4, 0x0f, 0x45, 0xb6, 0xcd, 0xbe, - 0x14, 0xdf, 0xa3, 0x3c, 0xbd, 0xd7, 0x51, 0x22, 0xe3, 0x82, 0x06, 0x31, 0xa4, 0x1a, 0x62, 0x88, - 0x0b, 0x45, 0xcd, 0x67, 0xb9, 0xb0, 0x4f, 0x1b, 0x8f, 0x85, 0xaf, 0x58, 0x1e, 0xe8, 0x66, 0xf9, - 0xcc, 0x79, 0x7e, 0x6a, 0xfe, 0x9d, 0x73, 0x44, 0xbd, 0xc1, 0x58, 0xf5, 0x8c, 0x11, 0x49, 0xb1, - 0xe4, 0x47, 0x30, 0xa5, 0x86, 0x3a, 0x11, 0xa2, 0x35, 0x36, 0xff, 0x4a, 0x9c, 0xca, 0xf4, 0xe0, - 0x91, 0x73, 0xf3, 0xc9, 0x9d, 0x9b, 0x19, 0xb4, 0x3c, 0x11, 0x41, 0x43, 0x22, 0xb4, 0xf8, 0x2c, - 0xfd, 0xa0, 0x2b, 0x83, 0x91, 0x7c, 0x01, 0xd3, 0xb5, 0xda, 0x06, 0xbf, 0xcc, 0x61, 0xcb, 0x03, - 0x7e, 0x7b, 0x55, 0x04, 0x6c, 0xe1, 0x70, 0x87, 0xa1, 0x5f, 0x17, 0x97, 0x40, 0xf4, 0xb0, 0x00, - 0x3d, 0x15, 0x43, 0x96, 0x08, 0xfd, 0xa4, 0xfc, 0x1f, 0xaa, 0xbb, 0x0a, 0x4c, 0x15, 0x71, 0x5b, - 0x54, 0x5c, 0x3a, 0x92, 0x13, 0x3b, 0xe7, 0x94, 0xaf, 0xf0, 0x2d, 0x9f, 0xf2, 0xfd, 0x7e, 0x9f, - 0xbc, 0xa1, 0x91, 0x3e, 0x68, 0x3d, 0xf1, 0x61, 0x5f, 0x66, 0x0b, 0x8e, 0xb5, 0x4f, 0x67, 0x56, - 0x8e, 0x54, 0xe5, 0x51, 0xa9, 0x4a, 0x56, 0x36, 0xa9, 0x8e, 0x1d, 0x62, 0x84, 0x71, 0x7a, 0x8a, - 0x5a, 0x91, 0xc6, 0x95, 0x3c, 0x87, 0xeb, 0x7f, 0xf1, 0x73, 0xb8, 0x1f, 0xc3, 0x8c, 0xbc, 0x1a, - 0xb5, 0x40, 0xbd, 0x88, 0x06, 0xf2, 0xc4, 0x7e, 0x32, 0x4e, 0xfa, 0x86, 0xe9, 0xfd, 0x8a, 0xd0, - 0x5f, 0xb1, 0xd7, 0x85, 0x47, 0x87, 0xfd, 0x49, 0x2e, 0x9b, 0x01, 0x71, 0xfc, 0xce, 0x9b, 0x11, - 0xfe, 0x76, 0x99, 0x55, 0x97, 0xfb, 0x59, 0x5c, 0x99, 0xaa, 0xcf, 0xd6, 0x41, 0xd6, 0x02, 0x9c, - 0x37, 0x8b, 0xdf, 0xa4, 0xc1, 0x81, 0x8b, 0xba, 0x77, 0x8d, 0x46, 0xb2, 0xd0, 0x42, 0x5c, 0x28, - 0xd1, 0x03, 0xaa, 0x85, 0x19, 0xf8, 0x7f, 0xfa, 0xa0, 0x9c, 0xd9, 0x88, 0x4a, 0x18, 0xba, 0x7b, - 0x1e, 0x66, 0xd0, 0xb8, 0x00, 0x03, 0x0f, 0x5c, 0xaf, 0xa9, 0x1b, 0x92, 0x8f, 0x5d, 0xaf, 0x69, - 0x23, 0x94, 0xd9, 0x20, 0xb5, 0xce, 0x2e, 0x12, 0x68, 0x26, 0x72, 0xd8, 0xd9, 0xad, 0x33, 0x22, - 0xdd, 0x06, 0x11, 0x64, 0xe4, 0x1a, 0x0c, 0xcb, 0x6c, 0x6b, 0xfd, 0xb1, 0xf7, 0x4c, 0xa6, 0x59, - 0x93, 0x38, 0xf2, 0x11, 0x8c, 0xac, 0xd1, 0xc8, 0x69, 0x3a, 0x91, 0x23, 0xe6, 0x8e, 0x7c, 0x08, - 0x43, 0x82, 0xab, 0x45, 0xb1, 0x43, 0x8f, 0x1c, 0x08, 0x88, 0xad, 0x58, 0xb0, 0x03, 0xdd, 0xb0, - 0xdd, 0x72, 0x9e, 0xa9, 0x60, 0x52, 0xd6, 0x81, 0x31, 0x88, 0xbc, 0x63, 0x86, 0x5c, 0xc4, 0xc7, - 0x67, 0x99, 0x1d, 0x12, 0x07, 0x64, 0x2c, 0x63, 0x18, 0x48, 0xdc, 0xd5, 0x22, 0x9b, 0xa0, 0x95, - 0xc9, 0x6d, 0x50, 0xda, 0x26, 0xa3, 0xf5, 0x5b, 0x63, 0x70, 0x66, 0xd3, 0xd9, 0x73, 0x3d, 0xa6, - 0x51, 0xd8, 0x34, 0xf4, 0x3b, 0x41, 0x83, 0x92, 0x0a, 0x4c, 0x9a, 0x01, 0xdc, 0x3d, 0xc2, 0xd3, - 0x99, 0xd2, 0x64, 0xc2, 0xc8, 0x3c, 0x8c, 0xaa, 0x4b, 0xe3, 0x42, 0xd3, 0xc9, 0xb8, 0x4c, 0xbe, - 0x7c, 0xca, 0x8e, 0xc9, 0xc8, 0x7b, 0xc6, 0xe1, 0xe3, 0x69, 0x95, 0xff, 0x00, 0x69, 0xe7, 0x79, - 0x84, 0xad, 0xe7, 0x37, 0x4d, 0x6d, 0x8d, 0x9f, 0xb0, 0xfd, 0x20, 0x75, 0x1e, 0x39, 0x68, 0xd4, - 0x38, 0xe5, 0x94, 0x45, 0x45, 0x35, 0x37, 0x7b, 0x7d, 0xc6, 0x49, 0xe5, 0x97, 0x30, 0xf6, 0xa0, - 0xb3, 0x4b, 0xe5, 0xc9, 0xeb, 0x90, 0x50, 0xde, 0x92, 0xd7, 0x12, 0x04, 0x7e, 0xe7, 0x4d, 0xfe, - 0x15, 0x3f, 0xee, 0xec, 0xd2, 0xf4, 0xb3, 0x08, 0x6c, 0xd7, 0xd4, 0x84, 0x91, 0x7d, 0x28, 0x26, - 0x6f, 0x10, 0x88, 0x21, 0xed, 0x72, 0xef, 0x01, 0x13, 0xfd, 0x68, 0x8f, 0x2f, 0xf0, 0xb8, 0x66, - 0xa3, 0x90, 0x94, 0x54, 0xf2, 0x63, 0x98, 0xc9, 0x74, 0x89, 0xab, 0x3b, 0x90, 0xdd, 0xbd, 0xed, - 0xb8, 0x05, 0x25, 0x7a, 0x4d, 0x5e, 0xb8, 0x34, 0x4a, 0xce, 0x2e, 0x85, 0x34, 0xe1, 0x74, 0x22, - 0x32, 0x5e, 0xbc, 0x30, 0x93, 0x1f, 0x6b, 0x8f, 0x5a, 0x93, 0x4c, 0xd2, 0x9c, 0x59, 0x56, 0x52, - 0x24, 0x59, 0x85, 0x51, 0xe5, 0x8b, 0x12, 0xb9, 0xf9, 0xb2, 0xfc, 0x6e, 0xa5, 0xa3, 0xc3, 0xf2, - 0x74, 0xec, 0x77, 0x33, 0x64, 0xc6, 0x02, 0xc8, 0x2f, 0xc3, 0x15, 0x35, 0x45, 0x37, 0x82, 0x6c, - 0x0f, 0xa5, 0x78, 0xdc, 0xe1, 0x46, 0x72, 0x86, 0xe7, 0xd1, 0xef, 0xdc, 0xa9, 0xf6, 0x95, 0x0a, - 0xcb, 0xa7, 0xec, 0xde, 0xa2, 0xc9, 0xaf, 0x16, 0xe0, 0x6c, 0x4e, 0xa9, 0xe3, 0x58, 0x6a, 0x4f, - 0xb7, 0x31, 0x5a, 0x9e, 0x78, 0xef, 0xcf, 0x6d, 0xc6, 0xf7, 0x63, 0xa5, 0xff, 0xd8, 0x68, 0x77, - 0x4e, 0x49, 0xe4, 0x36, 0xc0, 0x9e, 0x1b, 0x89, 0x39, 0x86, 0x69, 0xea, 0xd2, 0x1f, 0x28, 0xeb, - 0xb6, 0x3d, 0x37, 0x12, 0x33, 0xed, 0x77, 0x0b, 0x3d, 0xd7, 0x75, 0xcc, 0x5e, 0x37, 0x36, 0xff, - 0x6a, 0xb7, 0x45, 0x2f, 0xa6, 0xae, 0xde, 0x3e, 0x3a, 0x2c, 0xbf, 0xa1, 0x52, 0xa0, 0x35, 0x90, - 0x4a, 0xde, 0xf2, 0xad, 0x3b, 0x8a, 0xce, 0x68, 0x4f, 0xcf, 0xad, 0xe5, 0x0d, 0x18, 0x42, 0xcf, - 0x54, 0x58, 0x9a, 0x40, 0xdb, 0x0d, 0x13, 0x77, 0xa1, 0xff, 0x4a, 0xd7, 0xd6, 0x04, 0x0d, 0x59, - 0x66, 0x36, 0x10, 0x6a, 0x8b, 0xd2, 0x66, 0x11, 0x69, 0xfe, 0x84, 0x1d, 0xcd, 0x51, 0x32, 0xff, - 0x8e, 0xf1, 0x3c, 0x89, 0xc9, 0x56, 0x05, 0x18, 0x09, 0xc4, 0x72, 0x7b, 0x7f, 0x60, 0x64, 0xa0, - 0x38, 0xc8, 0x57, 0x04, 0x79, 0x97, 0xe4, 0xd7, 0x47, 0xf8, 0xc5, 0xf3, 0x6d, 0xcf, 0x7d, 0xe4, - 0xc6, 0x2b, 0xb3, 0xee, 0xd3, 0x8e, 0xdf, 0x09, 0x13, 0x16, 0x67, 0xce, 0x8b, 0x60, 0xca, 0xfd, - 0xdd, 0xd7, 0xd3, 0xfd, 0xfd, 0xa6, 0x76, 0x50, 0xac, 0xa5, 0xf3, 0xe5, 0x96, 0x85, 0xe9, 0x6e, - 0x8e, 0x4f, 0x90, 0xbf, 0x86, 0x21, 0xcc, 0xc0, 0xcb, 0x4f, 0xe1, 0xc7, 0xe6, 0x6f, 0x8a, 0xe1, - 0xec, 0x52, 0x7d, 0x9e, 0xb2, 0x57, 0x24, 0x93, 0xe0, 0x3d, 0x8e, 0x00, 0xa3, 0xc7, 0x11, 0x42, - 0xb6, 0x60, 0x6a, 0x93, 0x29, 0xba, 0xfc, 0x46, 0x43, 0x3b, 0x10, 0x2e, 0x41, 0xee, 0x6c, 0x44, - 0x45, 0xbb, 0x2d, 0xd1, 0x75, 0xaa, 0xf0, 0xba, 0xae, 0x99, 0xc1, 0x4e, 0x96, 0x60, 0xb2, 0x46, - 0x9d, 0xa0, 0xb1, 0xff, 0x80, 0x3e, 0x63, 0x46, 0x86, 0xf1, 0x34, 0x4e, 0x88, 0x18, 0xd6, 0x5e, - 0x44, 0xe9, 0x91, 0x55, 0x26, 0x13, 0xf9, 0x14, 0x86, 0x6a, 0x7e, 0x10, 0x55, 0x9f, 0x89, 0xd5, - 0x5a, 0x9e, 0xd3, 0x72, 0x60, 0xf5, 0x9c, 0x7c, 0x1e, 0x28, 0xf4, 0x83, 0xa8, 0xbe, 0x6b, 0x64, - 0x82, 0xe3, 0x24, 0xe4, 0x19, 0x4c, 0x9b, 0x2b, 0xa5, 0x08, 0xb4, 0x1f, 0x11, 0xc6, 0x4d, 0xd6, - 0x72, 0xcc, 0x49, 0xaa, 0xd7, 0x85, 0xf4, 0xcb, 0xc9, 0xf5, 0xf8, 0x11, 0xe2, 0x75, 0x8b, 0x20, - 0x8b, 0x9f, 0xac, 0xe1, 0xbb, 0x4a, 0xbc, 0x45, 0x95, 0x90, 0x07, 0xe8, 0x8f, 0xc6, 0xb9, 0x06, - 0x3b, 0xb8, 0xda, 0x62, 0x4f, 0x38, 0x61, 0xf2, 0x31, 0x2e, 0x3b, 0xc5, 0x4a, 0x36, 0xe1, 0xcc, - 0x76, 0x48, 0x37, 0x03, 0xfa, 0xc4, 0xa5, 0x4f, 0xa5, 0x3c, 0x88, 0x13, 0xb3, 0x31, 0x79, 0x6d, - 0x8e, 0xcd, 0x12, 0x98, 0x66, 0x26, 0xef, 0x01, 0x6c, 0xba, 0x9e, 0x47, 0x9b, 0x78, 0xd8, 0x3f, - 0x86, 0xa2, 0xf0, 0x20, 0xa3, 0x8d, 0xd0, 0xba, 0xef, 0xb5, 0xf4, 0x2e, 0xd5, 0x88, 0x49, 0x15, - 0x26, 0x56, 0xbc, 0x46, 0xab, 0x23, 0x82, 0x72, 0x42, 0x5c, 0x29, 0x45, 0xc2, 0x48, 0x97, 0x23, - 0xea, 0xa9, 0x8f, 0xdc, 0x64, 0x21, 0x0f, 0x80, 0x08, 0x80, 0x98, 0xb5, 0xce, 0x6e, 0x8b, 0x8a, - 0xcf, 0x1d, 0x1d, 0x94, 0x52, 0x10, 0x4e, 0x77, 0x23, 0x0f, 0x63, 0x8a, 0x6d, 0xee, 0x3d, 0x18, - 0xd3, 0xe6, 0x7c, 0x46, 0x76, 0x94, 0x69, 0x3d, 0x3b, 0xca, 0xa8, 0x9e, 0x05, 0xe5, 0x9f, 0x17, - 0xe0, 0x42, 0xf6, 0xb7, 0x24, 0x6c, 0x93, 0x0d, 0x18, 0x55, 0x40, 0x75, 0x1f, 0x4e, 0x1a, 0xdc, - 0x09, 0xd5, 0x8e, 0x7f, 0xd0, 0x72, 0xe5, 0xd1, 0x5b, 0x1f, 0xcb, 0x78, 0x8e, 0x53, 0xb0, 0xbf, - 0x3d, 0x02, 0xd3, 0x78, 0xef, 0x23, 0xb9, 0x4e, 0x7d, 0x82, 0x59, 0x8e, 0x10, 0xa6, 0x1d, 0xea, - 0x08, 0xff, 0x2e, 0x87, 0x27, 0xf3, 0xfd, 0x19, 0x0c, 0xe4, 0x6d, 0x3d, 0x12, 0xa9, 0x4f, 0x7b, - 0xc7, 0x49, 0x02, 0xf5, 0x26, 0xc4, 0x21, 0x4a, 0xaf, 0x1b, 0x81, 0x30, 0xc7, 0x5e, 0xf4, 0x06, - 0x8e, 0xbb, 0xe8, 0x6d, 0xab, 0x45, 0x8f, 0x67, 0xcf, 0x79, 0x4d, 0x5b, 0xf4, 0x5e, 0xfe, 0x6a, - 0x37, 0xf4, 0xb2, 0x57, 0xbb, 0xe1, 0x17, 0x5b, 0xed, 0x46, 0x9e, 0x73, 0xb5, 0xbb, 0x0b, 0x93, - 0xeb, 0x94, 0x36, 0xb5, 0xe3, 0xc9, 0xd1, 0x78, 0xf7, 0xf4, 0x28, 0x3a, 0x9e, 0xb3, 0xce, 0x28, - 0x13, 0x5c, 0xb9, 0xab, 0x26, 0xfc, 0xf5, 0xac, 0x9a, 0x63, 0x2f, 0x79, 0xd5, 0x1c, 0x7f, 0x91, - 0x55, 0x33, 0xb5, 0xf4, 0x4d, 0x9c, 0x78, 0xe9, 0x7b, 0x91, 0xd5, 0xea, 0x63, 0x0c, 0xe4, 0xad, - 0xd5, 0x96, 0x45, 0xcc, 0x96, 0x16, 0x24, 0xb5, 0xec, 0x87, 0xf2, 0x9e, 0x03, 0xfe, 0xcd, 0x60, - 0xf8, 0x5a, 0x86, 0x70, 0x07, 0xb0, 0xbf, 0xad, 0x2a, 0x86, 0xef, 0xea, 0xfc, 0xea, 0x3e, 0xd0, - 0xb0, 0xb8, 0x4c, 0x2c, 0xd6, 0xb8, 0xa4, 0xfa, 0x69, 0x4b, 0xbc, 0xf5, 0x67, 0x05, 0x1e, 0x0a, - 0xf0, 0xff, 0xe2, 0x52, 0xf9, 0x22, 0xc7, 0xf3, 0xbf, 0x16, 0x27, 0x19, 0x11, 0x09, 0x51, 0x02, - 0xa7, 0xf1, 0x38, 0x8e, 0x8f, 0xf8, 0x3e, 0xfb, 0xce, 0x75, 0x84, 0x50, 0xd4, 0x67, 0x55, 0x4f, - 0xe9, 0xc8, 0x9d, 0x3b, 0x72, 0x01, 0x10, 0xb9, 0x56, 0x38, 0xd8, 0x5c, 0x00, 0x74, 0x06, 0x8c, - 0x50, 0x3d, 0x6d, 0xd9, 0x3c, 0x47, 0x46, 0x66, 0x0d, 0xde, 0x49, 0x67, 0x79, 0x40, 0x2b, 0x2b, - 0xce, 0xf2, 0xa0, 0x77, 0x63, 0x9c, 0xef, 0x61, 0x1b, 0xce, 0xdb, 0xf4, 0xc0, 0x7f, 0x42, 0x5f, - 0xae, 0xd8, 0xaf, 0xe0, 0x9c, 0x29, 0x90, 0xdf, 0x07, 0xe4, 0x8f, 0x57, 0x7c, 0x9c, 0xfd, 0xe4, - 0x85, 0x60, 0xe0, 0x4f, 0x5e, 0xf0, 0xcc, 0xf9, 0xec, 0x4f, 0x7d, 0xdf, 0x40, 0x9c, 0xe5, 0xc3, - 0x05, 0x53, 0x78, 0xa5, 0xd9, 0xc4, 0x57, 0x73, 0x1b, 0x6e, 0xdb, 0xf1, 0x22, 0xb2, 0x01, 0x63, - 0xda, 0xcf, 0x84, 0x0f, 0x44, 0xc3, 0x08, 0x9d, 0x26, 0x06, 0x18, 0x99, 0x87, 0x63, 0xb0, 0x45, - 0xa1, 0x9c, 0xec, 0x1e, 0xd6, 0x65, 0x7a, 0x99, 0x55, 0x98, 0xd0, 0x7e, 0xaa, 0x83, 0x02, 0xfc, - 0xf8, 0xb5, 0x12, 0xcc, 0x0e, 0x33, 0x59, 0xac, 0x06, 0xcc, 0x65, 0x75, 0x1a, 0x4f, 0x51, 0x4f, - 0x96, 0xe2, 0x0c, 0x74, 0xbd, 0x63, 0x5c, 0x4f, 0xe7, 0x65, 0x9f, 0xb3, 0xfe, 0xc1, 0x00, 0x9c, - 0x17, 0x83, 0xf1, 0x32, 0x47, 0x9c, 0xfc, 0x00, 0xc6, 0xb4, 0x31, 0x16, 0x9d, 0x7e, 0x59, 0xde, - 0xe6, 0xcb, 0x9b, 0x0b, 0xdc, 0x57, 0xd3, 0x41, 0x40, 0x3d, 0x31, 0xdc, 0xcb, 0xa7, 0x6c, 0x5d, - 0x24, 0x69, 0xc1, 0xa4, 0x39, 0xd0, 0xc2, 0x5d, 0x75, 0x35, 0xb3, 0x10, 0x93, 0x54, 0xe6, 0xaf, - 0x6f, 0xd6, 0x33, 0x87, 0x7b, 0xf9, 0x94, 0x9d, 0x90, 0x4d, 0xbe, 0x81, 0x33, 0xa9, 0x51, 0x16, - 0xbe, 0xc8, 0x57, 0x33, 0x0b, 0x4c, 0x51, 0xf3, 0x43, 0x90, 0x00, 0xc1, 0xb9, 0xc5, 0xa6, 0x0b, - 0x21, 0x4d, 0x18, 0xd7, 0x07, 0x5e, 0xf8, 0xd3, 0xae, 0x74, 0xe9, 0x4a, 0x4e, 0xc8, 0x95, 0x3b, - 0xd1, 0x97, 0x38, 0xf6, 0xcf, 0xcc, 0x83, 0x1d, 0x83, 0x78, 0x04, 0x86, 0xf8, 0x6f, 0xeb, 0xf7, - 0x0b, 0x70, 0x7e, 0x33, 0xa0, 0x21, 0xf5, 0x1a, 0xd4, 0xb8, 0x17, 0xf1, 0x82, 0x33, 0x22, 0xef, - 0x4c, 0xa5, 0xef, 0x85, 0xcf, 0x54, 0xac, 0x7f, 0x5b, 0x80, 0x52, 0x56, 0x95, 0x6b, 0xd4, 0x6b, - 0x92, 0x4d, 0x28, 0x26, 0xdb, 0x20, 0xbe, 0x18, 0x4b, 0xa5, 0x1f, 0xcf, 0x6d, 0xed, 0xf2, 0x29, - 0x3b, 0xc5, 0x4d, 0xd6, 0xe1, 0x8c, 0x06, 0x13, 0x67, 0x1a, 0x7d, 0xc7, 0x39, 0xd3, 0x60, 0x23, - 0x9c, 0x62, 0xd5, 0x8f, 0x84, 0x96, 0x71, 0xd7, 0x5d, 0xf4, 0x0f, 0x1c, 0xd7, 0x63, 0x4a, 0xb4, - 0x96, 0xe0, 0x0e, 0x62, 0xa8, 0xe8, 0x76, 0x7e, 0xc8, 0x81, 0x50, 0x79, 0x45, 0x4c, 0x91, 0x58, - 0x1f, 0xe2, 0xee, 0x20, 0x1c, 0x9b, 0xfc, 0x52, 0xbe, 0x12, 0x76, 0x19, 0x06, 0xb7, 0x56, 0x6b, - 0x0b, 0x15, 0x71, 0xc5, 0x9f, 0x27, 0x86, 0x69, 0x85, 0xf5, 0x86, 0x63, 0x73, 0x84, 0xf5, 0x01, - 0x90, 0x7b, 0x34, 0x12, 0xef, 0x5f, 0x28, 0xbe, 0x6b, 0x30, 0x2c, 0x40, 0x82, 0x13, 0xdd, 0xf5, - 0xe2, 0x35, 0x0d, 0x5b, 0xe2, 0xac, 0x4d, 0x69, 0x83, 0xb4, 0xa8, 0x13, 0x6a, 0x9b, 0xfe, 0xbb, - 0x30, 0x12, 0x08, 0x98, 0xd8, 0xf3, 0x27, 0xd5, 0xf3, 0x46, 0x08, 0xe6, 0xc7, 0x48, 0x92, 0xc6, - 0x56, 0x7f, 0x59, 0xab, 0x98, 0xc4, 0x69, 0x63, 0x65, 0x71, 0x81, 0xf5, 0xaa, 0xe8, 0x2c, 0x39, - 0x1c, 0xb7, 0xf0, 0x56, 0x48, 0x44, 0xf5, 0x0b, 0xfe, 0xd8, 0x35, 0xb8, 0x80, 0x88, 0xd4, 0x65, - 0x1a, 0x89, 0xf5, 0xa6, 0x4a, 0x09, 0x95, 0x21, 0x2d, 0xef, 0x99, 0x9e, 0x75, 0x4c, 0x76, 0x75, - 0x0f, 0x03, 0xe0, 0x5e, 0x46, 0x25, 0x1c, 0x98, 0xe3, 0x2a, 0x04, 0x6b, 0x95, 0x78, 0xa4, 0xd4, - 0x57, 0xcb, 0xee, 0x02, 0x8c, 0x2a, 0x98, 0x3a, 0xcd, 0xe6, 0x7d, 0x65, 0xd0, 0xef, 0xbc, 0xc9, - 0x73, 0x21, 0x34, 0x94, 0x80, 0x98, 0x8f, 0x15, 0xc1, 0xbf, 0xe9, 0x6f, 0xb9, 0x88, 0x90, 0x06, - 0xd1, 0xb7, 0x5a, 0x44, 0x9c, 0x0d, 0xed, 0x24, 0x45, 0x18, 0xf4, 0x3b, 0xf3, 0xc7, 0xe9, 0xa8, - 0x6f, 0xb9, 0x08, 0xd6, 0x51, 0xdf, 0x5e, 0x11, 0x54, 0xa6, 0x8d, 0xe3, 0x93, 0x34, 0x55, 0xc8, - 0x52, 0xba, 0x10, 0xe9, 0xed, 0x4f, 0x70, 0x74, 0x1d, 0x0f, 0x0a, 0x17, 0x78, 0x67, 0xfd, 0x1c, - 0x8a, 0x61, 0x1d, 0xf6, 0xed, 0x16, 0xf3, 0x8f, 0x0b, 0x3c, 0x89, 0x5d, 0x6d, 0x43, 0x7b, 0x1e, - 0xd8, 0x7b, 0xe4, 0x6b, 0xc1, 0x36, 0xda, 0xd7, 0xae, 0x1d, 0x7e, 0x62, 0xb0, 0x8d, 0xd3, 0x89, - 0xf6, 0x55, 0x92, 0x77, 0x3c, 0x09, 0x4d, 0x52, 0x93, 0xf7, 0x60, 0x42, 0x03, 0x29, 0x4d, 0x90, - 0x3f, 0xc3, 0xa3, 0xb3, 0xbb, 0x4d, 0xdb, 0xa4, 0xb4, 0xfe, 0xaa, 0x00, 0x53, 0x19, 0x0f, 0xd7, - 0xa3, 0xa3, 0x04, 0x2d, 0x2c, 0xb5, 0x50, 0x89, 0x87, 0xf3, 0x30, 0x9f, 0x8e, 0xb1, 0xff, 0x2a, - 0x42, 0x7c, 0x80, 0x44, 0x7b, 0x64, 0xbf, 0x4f, 0x7b, 0x0e, 0x32, 0xfb, 0x61, 0x7d, 0x9d, 0x9c, - 0x84, 0x00, 0x71, 0x4d, 0x84, 0x4b, 0xba, 0xc6, 0xd4, 0x65, 0xed, 0x85, 0xfe, 0x98, 0xf7, 0x67, - 0x87, 0xe5, 0x77, 0x4e, 0x12, 0x2a, 0x1c, 0x8b, 0xb6, 0xb5, 0x62, 0xac, 0x5f, 0xeb, 0x83, 0xb3, - 0x19, 0xed, 0xaf, 0xd1, 0xe8, 0xaf, 0xa3, 0x0b, 0x9e, 0xc0, 0x58, 0x5c, 0x99, 0xb0, 0xd4, 0x8f, - 0x9e, 0x9b, 0x2d, 0x7c, 0x2f, 0x23, 0xee, 0x83, 0xf0, 0xa5, 0x74, 0x82, 0x5e, 0x90, 0xf5, 0xc7, - 0x7d, 0x70, 0x76, 0xbb, 0x1d, 0xe2, 0x9d, 0xc9, 0x15, 0xef, 0x09, 0xf5, 0x22, 0x3f, 0x78, 0x86, - 0xf7, 0xbc, 0xc8, 0xdb, 0x30, 0xb8, 0x4c, 0x5b, 0x2d, 0x5f, 0xcc, 0xff, 0x8b, 0x32, 0xde, 0x29, - 0x49, 0x8d, 0x44, 0xcb, 0xa7, 0x6c, 0x4e, 0x4d, 0xde, 0x83, 0xd1, 0x65, 0xea, 0x04, 0xd1, 0x2e, - 0x75, 0xa4, 0x39, 0x24, 0x1f, 0x07, 0xd2, 0x58, 0x04, 0xc1, 0xf2, 0x29, 0x3b, 0xa6, 0x26, 0xf3, - 0x30, 0xb0, 0xe9, 0x7b, 0x7b, 0x2a, 0x3f, 0x44, 0x4e, 0x81, 0x8c, 0x66, 0xf9, 0x94, 0x8d, 0xb4, - 0x64, 0x0d, 0x26, 0x2a, 0x7b, 0xd4, 0x8b, 0x12, 0x47, 0xf8, 0xd7, 0xf2, 0x98, 0x0d, 0xe2, 0xe5, - 0x53, 0xb6, 0xc9, 0x4d, 0x3e, 0x80, 0xe1, 0x7b, 0xbe, 0xdf, 0xdc, 0x7d, 0x26, 0xb3, 0x9c, 0x94, - 0xf3, 0x04, 0x09, 0xb2, 0xe5, 0x53, 0xb6, 0xe4, 0xa8, 0x0e, 0x42, 0xff, 0x5a, 0xb8, 0x67, 0x1d, - 0x16, 0xa0, 0xb4, 0xe8, 0x3f, 0xf5, 0x32, 0x7b, 0xf5, 0x7b, 0x66, 0xaf, 0x4a, 0xf1, 0x19, 0xf4, - 0x89, 0x7e, 0x7d, 0x0b, 0x06, 0x36, 0x5d, 0x6f, 0x2f, 0xa1, 0x0a, 0x66, 0xf0, 0x31, 0x2a, 0xec, - 0x1e, 0xd7, 0xdb, 0x23, 0xab, 0x52, 0xbf, 0x17, 0x7e, 0xcc, 0x7e, 0xc3, 0xa8, 0xc8, 0xe0, 0xd6, - 0xa9, 0x63, 0x3d, 0x9e, 0xff, 0x96, 0x0d, 0x7c, 0x1d, 0x66, 0x73, 0xca, 0xd5, 0x42, 0x52, 0x06, - 0x50, 0xb1, 0xf9, 0x3b, 0x05, 0x98, 0xc9, 0x1c, 0xc0, 0x24, 0x25, 0xb3, 0xe9, 0xf8, 0xc4, 0x5c, - 0x68, 0xf9, 0x8d, 0xc7, 0xc7, 0x08, 0x9b, 0xb4, 0xe4, 0x83, 0xfa, 0xe2, 0x0b, 0x69, 0x30, 0xbe, - 0xc4, 0xa3, 0x89, 0xba, 0x48, 0xeb, 0xf7, 0xb2, 0xe6, 0x3a, 0xef, 0xdc, 0x52, 0x1c, 0x2a, 0xc2, - 0x5d, 0x57, 0x2a, 0x3a, 0x64, 0x4e, 0x5b, 0x0b, 0x64, 0xc6, 0x24, 0xf9, 0xc9, 0xef, 0x68, 0x19, - 0xea, 0xf8, 0x17, 0xfb, 0xfe, 0x0b, 0x7c, 0x97, 0x4a, 0x16, 0x2b, 0x73, 0xd9, 0x0f, 0x23, 0x4f, - 0x85, 0xeb, 0xdb, 0xea, 0x37, 0xb9, 0x01, 0x45, 0xf9, 0x08, 0x8f, 0x78, 0xed, 0x2b, 0x10, 0x31, - 0x27, 0x29, 0x38, 0x79, 0x17, 0x66, 0x93, 0x30, 0xd9, 0x4a, 0x7e, 0x2d, 0x36, 0x0f, 0x6d, 0xfd, - 0x69, 0x1f, 0x3e, 0x22, 0xd0, 0xe5, 0xd3, 0x61, 0xe3, 0xb7, 0x51, 0x93, 0xc1, 0x47, 0x1b, 0x35, - 0x72, 0x01, 0x46, 0x37, 0x6a, 0xc6, 0xeb, 0x86, 0x76, 0x0c, 0x60, 0xd5, 0x66, 0x4d, 0xa8, 0x04, - 0x8d, 0x7d, 0x37, 0xa2, 0x8d, 0xa8, 0x13, 0xc8, 0x68, 0xa4, 0x14, 0x9c, 0x58, 0x30, 0x7e, 0xaf, - 0xe5, 0xee, 0x36, 0xa4, 0x30, 0xde, 0x05, 0x06, 0x8c, 0xbc, 0x0a, 0x93, 0x2b, 0x5e, 0x18, 0x39, - 0xad, 0xd6, 0x1a, 0x8d, 0xf6, 0xfd, 0xa6, 0x78, 0xbb, 0xd9, 0x4e, 0x40, 0x59, 0xb9, 0x0b, 0xbe, - 0x17, 0x39, 0xae, 0x47, 0x03, 0xbb, 0xe3, 0x45, 0xee, 0x01, 0x15, 0x6d, 0x4f, 0xc1, 0xc9, 0x5b, - 0x30, 0xa3, 0x60, 0x1b, 0x41, 0x63, 0x9f, 0x86, 0x51, 0x80, 0x6f, 0x9e, 0x62, 0x60, 0x9e, 0x9d, - 0x8d, 0xc4, 0x12, 0x5a, 0x7e, 0xa7, 0xb9, 0xe4, 0x3d, 0x71, 0x03, 0x9f, 0x9f, 0x78, 0x8f, 0x88, - 0x12, 0x12, 0x70, 0xeb, 0x77, 0x46, 0x32, 0x57, 0x86, 0x17, 0x99, 0x83, 0x5f, 0xc0, 0xf8, 0x82, - 0xd3, 0x76, 0x76, 0xdd, 0x96, 0x1b, 0xb9, 0xea, 0x71, 0xc8, 0xb7, 0x7b, 0x2c, 0x2b, 0xf2, 0x59, - 0x26, 0xda, 0xd4, 0x99, 0x6d, 0x43, 0xd4, 0xdc, 0x5f, 0x0e, 0xc1, 0x4c, 0x26, 0x1d, 0xb9, 0x2e, - 0x5e, 0x91, 0x54, 0x4b, 0xb7, 0x78, 0xa2, 0xd0, 0x4e, 0x82, 0xd9, 0x58, 0x22, 0x68, 0xa1, 0x45, - 0x1d, 0xaf, 0x23, 0x1e, 0x28, 0xb4, 0x0d, 0x18, 0x1b, 0x4b, 0xa6, 0x9a, 0x68, 0xc2, 0xf0, 0xb6, - 0x85, 0x9d, 0x80, 0x62, 0x30, 0x5b, 0x27, 0xda, 0x97, 0xa2, 0x06, 0xf8, 0xbd, 0x60, 0x0d, 0xc4, - 0x24, 0xad, 0xfb, 0x4d, 0xaa, 0x49, 0x1a, 0xe4, 0x92, 0x4c, 0x28, 0x93, 0xc4, 0x20, 0x52, 0xd2, - 0x10, 0x97, 0xa4, 0x81, 0xc8, 0x2b, 0x30, 0x51, 0x69, 0xb7, 0x35, 0x41, 0xf8, 0x32, 0xa1, 0x6d, - 0x02, 0xc9, 0x25, 0x80, 0x4a, 0xbb, 0x2d, 0xc5, 0xe0, 0xab, 0x83, 0xb6, 0x06, 0x21, 0x37, 0xe3, - 0x3c, 0x90, 0x9a, 0x28, 0x3c, 0x0d, 0xb1, 0x33, 0x30, 0xac, 0x5f, 0x55, 0xd2, 0x3c, 0x21, 0x14, - 0x78, 0xbf, 0x26, 0xc0, 0xe4, 0x43, 0x38, 0x97, 0x88, 0x87, 0xd1, 0x0a, 0xc0, 0x93, 0x0a, 0x3b, - 0x9f, 0x80, 0xbc, 0x03, 0x67, 0x13, 0x48, 0x59, 0x1c, 0x1e, 0x4a, 0xd8, 0x39, 0x58, 0xf2, 0x3e, - 0x94, 0x12, 0xb9, 0x1e, 0xe2, 0x42, 0xf1, 0x00, 0xc2, 0xce, 0xc5, 0xb3, 0xaf, 0x2b, 0x71, 0x69, - 0x54, 0x14, 0x89, 0x67, 0xad, 0x76, 0x36, 0x92, 0x2c, 0x43, 0x39, 0x33, 0xc6, 0x48, 0x2b, 0x18, - 0x5f, 0x53, 0xb4, 0x7b, 0x91, 0x91, 0x2a, 0x5c, 0xc8, 0x24, 0x91, 0xd5, 0xc0, 0x37, 0x16, 0xed, - 0xae, 0x34, 0x64, 0x1e, 0xa6, 0xe3, 0x58, 0x2b, 0xad, 0x0a, 0xf8, 0xbc, 0xa2, 0x9d, 0x89, 0x23, - 0x6f, 0x98, 0x19, 0x3d, 0x78, 0x61, 0xf8, 0xba, 0xa2, 0x9d, 0x46, 0x58, 0x47, 0x05, 0xb8, 0x90, - 0xb9, 0x17, 0x4b, 0x93, 0x61, 0x2e, 0xa9, 0x9b, 0x6a, 0x6b, 0xc1, 0x0d, 0x11, 0x40, 0xc9, 0x5d, - 0xdd, 0x32, 0x40, 0x1d, 0xf9, 0xb9, 0xa8, 0x07, 0x71, 0x38, 0xe5, 0x3d, 0x75, 0xb4, 0xd9, 0x8f, - 0xce, 0x92, 0x5b, 0x49, 0x1d, 0x2d, 0xa3, 0x70, 0xfd, 0x88, 0x53, 0x1e, 0x66, 0xbe, 0xc8, 0x29, - 0xd2, 0x9f, 0x16, 0xa0, 0xdc, 0x43, 0x05, 0x51, 0x6d, 0x2a, 0x1c, 0xa3, 0x4d, 0xf7, 0x55, 0x9b, - 0xf8, 0x85, 0xfa, 0xf9, 0xe3, 0xa9, 0x39, 0x2f, 0xbb, 0x59, 0x7f, 0x55, 0x00, 0x92, 0x56, 0x75, - 0xc9, 0x77, 0x61, 0xb4, 0x56, 0x5b, 0x36, 0x22, 0x2d, 0x53, 0x87, 0x5b, 0x31, 0x05, 0xb9, 0x7d, - 0xac, 0xd0, 0x4a, 0x3d, 0xb0, 0xf2, 0x93, 0x54, 0x3c, 0x67, 0x7f, 0xd7, 0x78, 0xce, 0x54, 0x34, - 0xe7, 0x52, 0x46, 0x80, 0xe2, 0x40, 0x8f, 0x00, 0xc5, 0x74, 0xf4, 0xa1, 0xb5, 0x08, 0xa5, 0x3c, - 0x6d, 0x19, 0x57, 0x38, 0x9e, 0x3d, 0x51, 0x3b, 0xa0, 0xe3, 0x2b, 0x9c, 0x09, 0xb6, 0xde, 0x81, - 0xb3, 0x8a, 0x9b, 0x3f, 0xcb, 0xa4, 0xa5, 0x2d, 0x11, 0x26, 0xb6, 0x4a, 0x8f, 0x12, 0x03, 0xac, - 0x3f, 0x19, 0x48, 0x31, 0xd6, 0x3a, 0x07, 0x07, 0x4e, 0xf0, 0x8c, 0x54, 0x4c, 0xc6, 0xfe, 0x9e, - 0x56, 0x4d, 0x75, 0x80, 0xe9, 0x98, 0x9a, 0x74, 0xb6, 0x2f, 0xa0, 0x86, 0xe1, 0x35, 0x28, 0x3f, - 0xda, 0xeb, 0xe3, 0xa9, 0xd9, 0x0c, 0x20, 0xd9, 0x81, 0x09, 0xb1, 0x77, 0xe3, 0x6f, 0xf9, 0x8d, - 0xdd, 0x4e, 0x7e, 0x63, 0x46, 0xf5, 0x6e, 0x1a, 0x2c, 0x7c, 0x36, 0x9a, 0x62, 0xc8, 0x17, 0x30, - 0x29, 0x35, 0x35, 0x21, 0x98, 0x07, 0x63, 0xdd, 0xe9, 0x2e, 0xd8, 0xe4, 0xe1, 0x92, 0x13, 0x82, - 0x58, 0x95, 0xe5, 0x62, 0xc7, 0x25, 0x0f, 0x1e, 0xa7, 0xca, 0x06, 0x8b, 0xa8, 0xb2, 0x01, 0x9b, - 0xfb, 0x14, 0x48, 0xba, 0x5d, 0xbd, 0x3e, 0xa7, 0x09, 0xed, 0x73, 0x9a, 0xab, 0xc0, 0x54, 0x46, - 0x03, 0x4e, 0x24, 0xe2, 0x53, 0x20, 0xe9, 0x9a, 0x9e, 0x44, 0x82, 0x75, 0x1d, 0x5e, 0x55, 0x5d, - 0xa0, 0x66, 0x83, 0x21, 0x53, 0x3a, 0xd9, 0x7f, 0xa5, 0x0f, 0xca, 0x3d, 0x48, 0xc9, 0x3f, 0x29, - 0x24, 0x7b, 0x9b, 0xcf, 0xc6, 0xf7, 0x92, 0xbd, 0x9d, 0xcd, 0x9f, 0xd1, 0xed, 0xd5, 0xf7, 0x7f, - 0xf5, 0xcf, 0x9f, 0xdb, 0xf2, 0x48, 0x0f, 0xd9, 0xc9, 0x7b, 0x6b, 0x40, 0xef, 0xad, 0x1d, 0x98, - 0x36, 0xcc, 0xc2, 0xe3, 0x6c, 0x5e, 0x16, 0x80, 0x78, 0x21, 0x7a, 0xd5, 0xdf, 0x13, 0x0f, 0x59, - 0xf7, 0x95, 0x0a, 0xb6, 0x06, 0xb5, 0xee, 0xc2, 0x4c, 0x42, 0xae, 0x70, 0xfe, 0x7f, 0x17, 0x54, - 0x8a, 0x0a, 0x14, 0xdc, 0x5f, 0x3d, 0xf3, 0xb3, 0xc3, 0xf2, 0x04, 0x53, 0xeb, 0x6f, 0xc6, 0xaf, - 0x84, 0xc8, 0xbf, 0xac, 0x35, 0xfd, 0xf8, 0xa2, 0xd2, 0xd2, 0x53, 0x77, 0x91, 0x3b, 0x30, 0xc4, - 0x21, 0x89, 0x5c, 0xfc, 0x3a, 0xb5, 0x58, 0x17, 0x04, 0xa1, 0x35, 0x83, 0x17, 0xea, 0xf1, 0x47, - 0x25, 0x4e, 0x00, 0x63, 0x6d, 0xf3, 0xb7, 0xa9, 0x62, 0xb0, 0xca, 0xf7, 0x3f, 0x50, 0x89, 0x13, - 0xd5, 0xc8, 0x38, 0x16, 0x49, 0xe7, 0xf9, 0x4f, 0x5b, 0xb4, 0xc9, 0x1f, 0x15, 0xad, 0x8e, 0x0b, - 0x1b, 0x77, 0xc0, 0x61, 0x02, 0x90, 0xcd, 0xfa, 0x04, 0x66, 0x98, 0xb6, 0x10, 0x24, 0xcb, 0xc3, - 0x17, 0x69, 0x18, 0xcc, 0xbc, 0x37, 0xe3, 0x30, 0x10, 0xde, 0x9b, 0x11, 0x48, 0x6b, 0x15, 0xce, - 0x71, 0xe7, 0xa7, 0xde, 0xa4, 0xf8, 0xa8, 0x61, 0x10, 0x7f, 0x27, 0xae, 0x63, 0x67, 0xb4, 0x9e, - 0xd3, 0x59, 0x1f, 0xe3, 0x7d, 0x3f, 0x31, 0x51, 0x5d, 0xdf, 0x8b, 0x3d, 0x9d, 0xc7, 0x4b, 0x10, - 0xf0, 0xff, 0xc3, 0x85, 0x4a, 0xbb, 0x4d, 0xbd, 0x66, 0xcc, 0xb8, 0x15, 0x38, 0xc7, 0x4c, 0xdf, - 0x42, 0x2a, 0x30, 0x88, 0xd4, 0xea, 0x0c, 0x58, 0x54, 0x37, 0xa3, 0x3a, 0x48, 0x27, 0x92, 0x33, - 0x63, 0x01, 0x9c, 0xd3, 0x6a, 0xc2, 0x6c, 0xad, 0xb3, 0x7b, 0xe0, 0x46, 0x78, 0xdb, 0x06, 0x53, - 0x20, 0xc9, 0xb2, 0x57, 0xe4, 0x73, 0x82, 0xbc, 0x33, 0xae, 0xc7, 0xf7, 0xc2, 0xf0, 0xc2, 0x8e, - 0x48, 0x8b, 0xf4, 0xe4, 0xce, 0xcd, 0x98, 0x15, 0xbd, 0x3c, 0xbc, 0x14, 0x44, 0x8b, 0x27, 0x07, - 0xad, 0x29, 0x38, 0xa3, 0x9f, 0x79, 0xf1, 0x19, 0x32, 0x03, 0x53, 0xe6, 0x59, 0x16, 0x07, 0x7f, - 0x0d, 0xd3, 0xdc, 0xd7, 0xce, 0x1f, 0x57, 0x98, 0x8f, 0xdf, 0x11, 0xe8, 0xdb, 0x99, 0x4f, 0x5c, - 0xd2, 0xc0, 0xd8, 0x6d, 0xf5, 0x6c, 0xce, 0xce, 0x3c, 0xbf, 0xb3, 0xfd, 0x64, 0xde, 0x38, 0x8d, - 0xed, 0xdb, 0x99, 0xaf, 0x0e, 0x8b, 0x24, 0xd5, 0x4c, 0x3a, 0x1f, 0xfe, 0x6f, 0x45, 0xfa, 0x3c, - 0xa6, 0x09, 0x59, 0xa6, 0x0e, 0x5e, 0xe9, 0xcb, 0x4e, 0xb6, 0x30, 0x09, 0x7d, 0x2a, 0x0b, 0x6d, - 0x9f, 0xdb, 0xb4, 0xfe, 0xa0, 0x00, 0xd7, 0xb9, 0x42, 0x96, 0xcd, 0x87, 0x07, 0x5b, 0x39, 0xcc, - 0xe4, 0x5d, 0x18, 0x0c, 0xb5, 0x00, 0x0f, 0x4b, 0xd4, 0xbc, 0x9b, 0x24, 0xce, 0x40, 0x2a, 0x30, - 0xae, 0xdf, 0x5c, 0x3b, 0x5e, 0x82, 0x4b, 0x7b, 0xec, 0xe0, 0x91, 0xa3, 0x6e, 0xb3, 0x3d, 0x86, - 0xf3, 0x4b, 0xdf, 0xb0, 0x09, 0x21, 0x76, 0x28, 0x61, 0x3d, 0xc4, 0x97, 0xf9, 0x4f, 0x6f, 0x89, - 0x19, 0x63, 0x9a, 0xf6, 0x49, 0x30, 0xb3, 0x93, 0xe5, 0x26, 0x17, 0x5f, 0x71, 0xb2, 0x0d, 0x98, - 0xf5, 0x27, 0x05, 0xb8, 0x90, 0x5d, 0x9a, 0x58, 0x58, 0x56, 0xe0, 0xcc, 0x82, 0xe3, 0xf9, 0x9e, - 0xdb, 0x70, 0x5a, 0xb5, 0xc6, 0x3e, 0x6d, 0x76, 0x54, 0x2a, 0x6b, 0xb5, 0xca, 0xec, 0x51, 0x4f, - 0xb2, 0x4b, 0x12, 0x3b, 0xcd, 0xc5, 0x2c, 0x44, 0xbc, 0xba, 0xc2, 0xd7, 0xde, 0x16, 0x0d, 0x94, - 0x3c, 0x5e, 0xb3, 0x1c, 0x2c, 0xb9, 0x2d, 0x0f, 0x15, 0x9a, 0xdb, 0x9e, 0x1b, 0x29, 0x26, 0xee, - 0xea, 0xc9, 0x42, 0x59, 0xff, 0xa1, 0x00, 0xe7, 0xf0, 0xf5, 0x3a, 0xe3, 0x3d, 0xdc, 0x38, 0xa3, - 0xbb, 0x4c, 0x4a, 0x5e, 0x30, 0xae, 0xe2, 0x18, 0xd4, 0x66, 0x76, 0x72, 0xf2, 0x06, 0x0c, 0xd4, - 0x64, 0xc0, 0xd9, 0x64, 0xe2, 0x25, 0x73, 0xc1, 0xc1, 0xf0, 0x36, 0x52, 0x31, 0x1b, 0x7e, 0x91, - 0x86, 0x0d, 0xea, 0xe1, 0x93, 0xf3, 0xdc, 0xf3, 0xa0, 0x41, 0xe2, 0x64, 0x6b, 0x03, 0x79, 0xc9, - 0xd6, 0x06, 0xcd, 0x64, 0x6b, 0xd6, 0x13, 0xfe, 0x76, 0x5d, 0xb2, 0x41, 0x62, 0x90, 0x3e, 0x4e, - 0xbd, 0x50, 0xcf, 0xf7, 0x81, 0xb3, 0x59, 0x2d, 0x63, 0x4a, 0x7a, 0xe2, 0xf1, 0xf9, 0xfc, 0x0c, - 0xea, 0x9b, 0xf0, 0x8a, 0x41, 0x5b, 0x69, 0xb5, 0xfc, 0xa7, 0xb4, 0xb9, 0x19, 0xf8, 0x07, 0x7e, - 0x64, 0xbc, 0xdd, 0x75, 0xda, 0xd1, 0xe9, 0xd4, 0x66, 0x9c, 0x04, 0x5b, 0xff, 0x1f, 0x5c, 0xeb, - 0x21, 0x51, 0x34, 0xaa, 0x06, 0x67, 0x9c, 0x04, 0x4e, 0x46, 0x0e, 0x5d, 0xcb, 0x6a, 0x57, 0x52, - 0x50, 0x68, 0xa7, 0xf9, 0x6f, 0x6c, 0x19, 0xaf, 0xba, 0x93, 0x12, 0x4c, 0x6f, 0xda, 0x1b, 0x8b, - 0xdb, 0x0b, 0x5b, 0xf5, 0xad, 0x2f, 0x36, 0x97, 0xea, 0xdb, 0xeb, 0x0f, 0xd6, 0x37, 0x1e, 0xae, - 0xf3, 0x27, 0x08, 0x0c, 0xcc, 0xd6, 0x52, 0x65, 0xad, 0x58, 0x20, 0xd3, 0x50, 0x34, 0xc0, 0x4b, - 0xdb, 0xd5, 0x62, 0xdf, 0x8d, 0xaf, 0x8d, 0xd7, 0xca, 0xc9, 0x05, 0x28, 0xd5, 0xb6, 0x37, 0x37, - 0x37, 0x6c, 0x25, 0x55, 0x7f, 0x00, 0x61, 0x06, 0xce, 0x18, 0xd8, 0xbb, 0xf6, 0xd2, 0x52, 0xb1, - 0xc0, 0xaa, 0x62, 0x80, 0x37, 0xed, 0xa5, 0xb5, 0x95, 0xed, 0xb5, 0x62, 0xdf, 0x8d, 0xba, 0x7e, - 0x83, 0x94, 0x9c, 0x87, 0xd9, 0xc5, 0xa5, 0x9d, 0x95, 0x85, 0xa5, 0x2c, 0xd9, 0xd3, 0x50, 0xd4, - 0x91, 0x5b, 0x1b, 0x5b, 0x9b, 0x5c, 0xb4, 0x0e, 0x7d, 0xb8, 0x54, 0xad, 0x6c, 0x6f, 0x2d, 0xaf, - 0x17, 0xfb, 0xad, 0x81, 0x91, 0xbe, 0x62, 0xdf, 0x8d, 0x1f, 0x18, 0xd7, 0x4b, 0x59, 0xf5, 0x05, - 0xf9, 0x76, 0xad, 0x72, 0x2f, 0xbf, 0x08, 0x8e, 0x5d, 0xbb, 0x5b, 0x29, 0x16, 0xc8, 0x45, 0x38, - 0x67, 0x40, 0x37, 0x2b, 0xb5, 0xda, 0xc3, 0x0d, 0x7b, 0x71, 0x75, 0xa9, 0x56, 0x2b, 0xf6, 0xdd, - 0xd8, 0x31, 0x12, 0x4c, 0xb2, 0x12, 0xd6, 0xee, 0x56, 0xea, 0xf6, 0xd2, 0x67, 0xdb, 0x2b, 0xf6, - 0xd2, 0x62, 0xba, 0x04, 0x03, 0xfb, 0xc5, 0x52, 0xad, 0x58, 0x20, 0x53, 0x70, 0xda, 0x80, 0xae, - 0x6f, 0x14, 0xfb, 0x6e, 0xbc, 0x2a, 0x72, 0x10, 0x92, 0x49, 0x80, 0xc5, 0xa5, 0xda, 0xc2, 0xd2, - 0xfa, 0xe2, 0xca, 0xfa, 0xbd, 0xe2, 0x29, 0x32, 0x01, 0xa3, 0x15, 0xf5, 0xb3, 0x70, 0xe3, 0x7d, - 0x38, 0x9d, 0x30, 0xef, 0x19, 0x85, 0x32, 0x8c, 0x8b, 0xa7, 0xb0, 0xfb, 0xe5, 0x4f, 0xf4, 0xb1, - 0x72, 0x4b, 0xbd, 0x58, 0xb8, 0x51, 0x95, 0x0f, 0x5c, 0x6b, 0xdf, 0x39, 0x19, 0x83, 0xe1, 0xc5, - 0xa5, 0xbb, 0x95, 0xed, 0xd5, 0xad, 0xe2, 0x29, 0xf6, 0x63, 0xc1, 0x5e, 0xaa, 0x6c, 0x2d, 0x2d, - 0x16, 0x0b, 0x64, 0x14, 0x06, 0x6b, 0x5b, 0x95, 0xad, 0xa5, 0x62, 0x1f, 0x19, 0x81, 0x81, 0xed, - 0xda, 0x92, 0x5d, 0xec, 0x9f, 0xff, 0xbd, 0x7f, 0x5a, 0xe0, 0x8e, 0x46, 0x79, 0xd1, 0xec, 0x6b, - 0xcd, 0xa0, 0x14, 0x4b, 0x9e, 0x78, 0xcd, 0x37, 0xd7, 0x7a, 0x44, 0x2d, 0x60, 0xae, 0xcb, 0xe1, - 0x0e, 0x12, 0x5c, 0x2f, 0xdc, 0x2e, 0x10, 0x1b, 0x83, 0x61, 0x12, 0xf6, 0x95, 0x92, 0x9c, 0x6d, - 0x02, 0xcf, 0x5d, 0xec, 0x6a, 0x96, 0x91, 0x5f, 0x02, 0x4b, 0x97, 0x99, 0x63, 0x85, 0x7c, 0xf7, - 0x78, 0xd6, 0x86, 0x2c, 0xf3, 0xd5, 0xe3, 0x91, 0x93, 0xfb, 0x30, 0xc1, 0x74, 0x73, 0x45, 0x46, - 0xce, 0x27, 0x19, 0x35, 0x93, 0x60, 0xee, 0x42, 0x36, 0x52, 0x3d, 0xb8, 0x35, 0x8e, 0x0d, 0xe1, - 0xc6, 0x75, 0x48, 0x64, 0x9e, 0x1a, 0x09, 0xe1, 0x2b, 0xfe, 0xdc, 0x99, 0x04, 0x78, 0xe7, 0xce, - 0xed, 0x02, 0xa9, 0x61, 0x92, 0x48, 0x43, 0xc9, 0x27, 0xf2, 0xe6, 0x63, 0x5a, 0xfb, 0xe7, 0xb5, - 0x29, 0xab, 0xe7, 0x71, 0x73, 0xac, 0x83, 0x75, 0x20, 0x69, 0xdd, 0x99, 0x5c, 0x8e, 0xe7, 0x41, - 0xb6, 0x5a, 0x3d, 0x77, 0x36, 0x75, 0x90, 0xb5, 0xc4, 0xb4, 0x27, 0xb2, 0x04, 0x93, 0x22, 0x09, - 0x85, 0xd0, 0xe6, 0x49, 0x37, 0x7b, 0x20, 0x57, 0xcc, 0x3d, 0xec, 0x27, 0x65, 0x11, 0x90, 0xb9, - 0xb8, 0x1d, 0x49, 0x33, 0x61, 0xee, 0x7c, 0x26, 0x4e, 0xb4, 0xef, 0x2e, 0x4c, 0x9a, 0xc6, 0x05, - 0x91, 0x03, 0x94, 0x69, 0x73, 0xe4, 0x56, 0xa8, 0x0e, 0xb3, 0x6b, 0x8e, 0x8b, 0xe7, 0x25, 0x22, - 0x48, 0x4f, 0xc6, 0xc1, 0x91, 0x72, 0x97, 0xc0, 0xb8, 0x1a, 0xf5, 0x9a, 0x6a, 0x10, 0xf2, 0x1e, - 0xcf, 0xc0, 0xcf, 0xa6, 0x26, 0x75, 0x64, 0x33, 0x46, 0x91, 0x58, 0xe6, 0x93, 0xe7, 0x59, 0x61, - 0xa7, 0x73, 0x79, 0x91, 0xd2, 0x64, 0x0d, 0x95, 0xf4, 0x84, 0x44, 0x6d, 0x4e, 0x9c, 0x58, 0x5c, - 0x09, 0x53, 0xa1, 0x44, 0x6e, 0x32, 0xe4, 0x39, 0x24, 0x39, 0x1d, 0x97, 0x2b, 0xec, 0x76, 0x81, - 0x7c, 0x8d, 0x5f, 0x75, 0xa6, 0xb8, 0x87, 0x6e, 0xb4, 0x2f, 0xb4, 0x9f, 0xf3, 0x99, 0x02, 0xc4, - 0x87, 0xd2, 0x45, 0xba, 0x0d, 0xd3, 0x59, 0xc1, 0xd9, 0xaa, 0x43, 0xbb, 0x44, 0x6e, 0xe7, 0xce, - 0x02, 0x9b, 0x99, 0x1a, 0xcd, 0xfc, 0x41, 0xea, 0x12, 0x1b, 0x9c, 0x2b, 0xf3, 0x43, 0x98, 0x64, - 0xb3, 0xe4, 0x01, 0xa5, 0xed, 0x4a, 0xcb, 0x7d, 0x42, 0x43, 0x22, 0x33, 0x7c, 0x2b, 0x50, 0x1e, - 0xef, 0xf5, 0x02, 0xf9, 0x0e, 0x8c, 0x3d, 0x74, 0xa2, 0xc6, 0xbe, 0xc8, 0x74, 0x2b, 0x13, 0xe1, - 0x22, 0x6c, 0x4e, 0xfe, 0x42, 0xe4, 0xed, 0x02, 0xf9, 0x08, 0x86, 0xef, 0xd1, 0x08, 0x6f, 0x9e, - 0x5f, 0x51, 0xb1, 0x84, 0xdc, 0x3f, 0xb9, 0xe2, 0xa9, 0x5b, 0x48, 0xb2, 0xc2, 0x49, 0x67, 0x2e, - 0xb9, 0x05, 0xc0, 0x17, 0x04, 0x94, 0x90, 0x44, 0xcf, 0xa5, 0xaa, 0x4d, 0xee, 0x31, 0xe5, 0xa1, - 0x45, 0x23, 0x7a, 0xdc, 0x22, 0xf3, 0xfa, 0x68, 0x15, 0x26, 0xd5, 0x1b, 0x65, 0xeb, 0x98, 0x90, - 0xc8, 0x4a, 0x08, 0x0b, 0x4f, 0x20, 0xed, 0x7d, 0xf6, 0x55, 0xf0, 0x07, 0xba, 0x31, 0x73, 0x0d, - 0xae, 0xa4, 0xb3, 0x7a, 0xfa, 0x1b, 0x7d, 0x09, 0x95, 0x9d, 0xc8, 0xc9, 0x34, 0xde, 0x65, 0x3f, - 0x8c, 0x4c, 0x5e, 0x05, 0xc9, 0xe6, 0xfd, 0x45, 0x98, 0xd3, 0xcb, 0x35, 0x53, 0xad, 0xc7, 0x6b, - 0x6e, 0x5e, 0x06, 0xf7, 0xb9, 0x2b, 0x5d, 0x28, 0x84, 0xfd, 0xd6, 0xff, 0xeb, 0x7d, 0x05, 0x5c, - 0x4e, 0x16, 0x61, 0x4a, 0x96, 0xb5, 0xd1, 0xa6, 0x5e, 0xad, 0xb6, 0x8c, 0xef, 0x51, 0xc9, 0xc8, - 0x15, 0x0d, 0x26, 0xa5, 0x93, 0x34, 0x8a, 0x6d, 0x7d, 0x46, 0x86, 0x1a, 0xd2, 0x2d, 0x6f, 0x4d, - 0xbc, 0xf5, 0x65, 0xe6, 0x00, 0x7f, 0xc0, 0x9d, 0x4a, 0x86, 0xf2, 0xbf, 0x33, 0x4f, 0xba, 0x18, - 0x40, 0x73, 0x39, 0x26, 0xc4, 0xed, 0x02, 0xf9, 0x02, 0x48, 0xda, 0x24, 0x51, 0x5d, 0x98, 0x6b, - 0x7e, 0xa9, 0x2e, 0xec, 0x62, 0xcf, 0xdc, 0x83, 0x19, 0x95, 0x9f, 0x4a, 0x2b, 0x75, 0x9e, 0xe4, - 0xd4, 0x26, 0xaf, 0x96, 0xe4, 0x13, 0x98, 0x12, 0x93, 0x56, 0x47, 0x90, 0xa2, 0x5a, 0x7f, 0x84, - 0x55, 0x92, 0x3b, 0x4f, 0xef, 0xc3, 0x4c, 0x2d, 0xd1, 0x63, 0x3c, 0x98, 0xff, 0x9c, 0x29, 0x02, - 0x81, 0x35, 0x1a, 0xf1, 0x2e, 0xcb, 0x96, 0xf5, 0x00, 0x08, 0x77, 0x0a, 0x49, 0x71, 0x4f, 0x5c, - 0xfa, 0x94, 0x5c, 0x4c, 0x54, 0x9d, 0x01, 0x91, 0x0c, 0x17, 0xb0, 0xdc, 0x96, 0x6d, 0xf1, 0xe7, - 0xe5, 0x11, 0x6a, 0x9c, 0xa3, 0x5f, 0x36, 0x18, 0x8c, 0xa3, 0x78, 0x31, 0x00, 0xe7, 0x72, 0x29, - 0xc8, 0x2f, 0x63, 0x62, 0xe8, 0xee, 0x66, 0x15, 0xf9, 0x4e, 0x96, 0xf5, 0x9b, 0x63, 0x18, 0xce, - 0xbd, 0x71, 0x3c, 0x62, 0x65, 0xc8, 0x4e, 0xdc, 0xa3, 0xd1, 0x66, 0xab, 0xb3, 0xe7, 0xe2, 0xc3, - 0xc3, 0x44, 0x39, 0x8d, 0x14, 0x48, 0xcc, 0x4b, 0x99, 0x8f, 0x31, 0x46, 0xd4, 0xe8, 0x0f, 0xc9, - 0x0a, 0x14, 0xf9, 0xfa, 0xaf, 0x89, 0xb8, 0x98, 0x12, 0x21, 0x48, 0x9c, 0xc0, 0x39, 0x08, 0x73, - 0x47, 0xeb, 0x16, 0x8f, 0x8d, 0x22, 0xf2, 0x9b, 0xd4, 0x15, 0xcc, 0x29, 0x03, 0xa6, 0x1e, 0xcb, - 0x60, 0x23, 0x62, 0xd3, 0x90, 0x46, 0x32, 0x03, 0x15, 0x7f, 0x76, 0xfa, 0x6a, 0xbc, 0xd9, 0xa7, - 0xb1, 0xf1, 0xa7, 0x9f, 0xc8, 0x96, 0xb8, 0xf3, 0x26, 0x51, 0x4f, 0x71, 0x67, 0x08, 0x7d, 0xd5, - 0xd0, 0x49, 0x4e, 0x26, 0xf7, 0x2d, 0xdc, 0x83, 0x30, 0xeb, 0xd6, 0x4c, 0x5c, 0x37, 0xf6, 0x5b, - 0x72, 0x4d, 0x68, 0x5c, 0x3b, 0xf3, 0xb8, 0xa4, 0xb1, 0x4d, 0x92, 0xa9, 0xb0, 0x9d, 0x20, 0xa0, - 0x1e, 0x67, 0xce, 0xd3, 0x37, 0xb2, 0xb8, 0x3f, 0xc6, 0xa5, 0x47, 0xe3, 0xe6, 0x77, 0x0e, 0x7b, - 0x89, 0xe0, 0xcf, 0xa4, 0xdd, 0x2e, 0x90, 0x77, 0x61, 0x44, 0xd4, 0x91, 0x31, 0x19, 0x95, 0x0e, - 0xbb, 0xd4, 0x1a, 0x39, 0x81, 0x77, 0x12, 0xd6, 0xd9, 0xa4, 0xc9, 0x1b, 0x7d, 0x5e, 0xe7, 0x77, - 0xd9, 0x66, 0xdb, 0x7c, 0x1e, 0xce, 0x05, 0xb9, 0xeb, 0x22, 0x67, 0x49, 0x65, 0x6a, 0x92, 0xa0, - 0x1e, 0xdb, 0x23, 0x17, 0xc2, 0xf4, 0x66, 0x4c, 0x77, 0xaa, 0xb2, 0x16, 0x2a, 0xbd, 0xd9, 0x00, - 0xf7, 0xda, 0x6b, 0x57, 0xa0, 0x58, 0x69, 0xe0, 0x4e, 0x50, 0xa3, 0x07, 0x4e, 0x7b, 0xdf, 0x0f, - 0xa8, 0x32, 0x5a, 0x92, 0x08, 0x29, 0x6b, 0x46, 0x69, 0x16, 0x02, 0xb1, 0x4a, 0x1d, 0xcc, 0x09, - 0x3f, 0xab, 0x54, 0x8b, 0x04, 0x2a, 0x9b, 0xa3, 0x8b, 0x91, 0x32, 0xbd, 0xc0, 0xcc, 0xaa, 0xd6, - 0x8b, 0x89, 0x79, 0x1f, 0x17, 0x0c, 0x45, 0x1c, 0xaa, 0x1d, 0x42, 0x81, 0x94, 0x39, 0x27, 0xaf, - 0x1f, 0x29, 0xd2, 0x8a, 0x3c, 0x37, 0x8e, 0xbb, 0x25, 0x8f, 0x3b, 0xaf, 0xf8, 0xef, 0xc1, 0xe4, - 0x12, 0x5b, 0xd0, 0x3b, 0x4d, 0x97, 0xbf, 0x83, 0x41, 0xcc, 0x87, 0x0d, 0x72, 0x19, 0x97, 0xe5, - 0xcb, 0x84, 0xc8, 0x2a, 0x4c, 0x7f, 0xb9, 0xa7, 0x68, 0x30, 0x39, 0x1e, 0xd3, 0x52, 0xac, 0x78, - 0x8a, 0x04, 0x4d, 0x73, 0x61, 0xeb, 0xcf, 0x72, 0x8d, 0xb0, 0xd2, 0x6e, 0xb7, 0xa4, 0x4b, 0x9a, - 0x9f, 0xbd, 0x5f, 0x33, 0x4c, 0xc8, 0x14, 0x5e, 0xca, 0x4e, 0x2b, 0x8d, 0x9f, 0x6b, 0x2f, 0x85, - 0xe7, 0xc8, 0xcc, 0xc1, 0xf7, 0x9a, 0x8b, 0x2a, 0x73, 0x7d, 0xa5, 0xd5, 0x4a, 0x31, 0x87, 0xe4, - 0x75, 0x53, 0x7a, 0x16, 0x4d, 0xaf, 0x12, 0xd0, 0x44, 0xe7, 0x5a, 0x57, 0xa5, 0xdd, 0xe6, 0x8b, - 0xe5, 0x25, 0xb5, 0x60, 0x98, 0x88, 0xb4, 0x89, 0x9e, 0xc4, 0x8b, 0xb5, 0xfd, 0x3e, 0x4e, 0xb3, - 0xf8, 0x39, 0x71, 0xa2, 0x1b, 0xbc, 0xc9, 0xd7, 0xd4, 0x95, 0x12, 0x96, 0x40, 0xaa, 0x7d, 0xe2, - 0x34, 0xaa, 0x3e, 0xf1, 0xdb, 0xe4, 0xca, 0x33, 0x93, 0x80, 0x4b, 0x79, 0x97, 0xf2, 0xd0, 0xca, - 0x53, 0x5a, 0x14, 0x93, 0x29, 0xae, 0xe0, 0x25, 0x63, 0x7f, 0x48, 0xd7, 0xb1, 0x9c, 0x8b, 0x57, - 0x4d, 0x2e, 0x26, 0x5f, 0x8b, 0x57, 0x42, 0x73, 0x9e, 0x91, 0xcf, 0x1d, 0x93, 0xbb, 0x30, 0xad, - 0x8f, 0xa8, 0x6a, 0x77, 0xde, 0xea, 0x9f, 0x27, 0x67, 0x0b, 0x66, 0x32, 0x1f, 0x77, 0x57, 0x5b, - 0x6c, 0xb7, 0xa7, 0xdf, 0x73, 0xa5, 0x52, 0x38, 0x2b, 0x2c, 0xfb, 0xc4, 0x73, 0xf6, 0xe4, 0x15, - 0xd3, 0xf0, 0xcf, 0x7e, 0xed, 0x7e, 0xee, 0x5a, 0x0f, 0x2a, 0xd1, 0xa1, 0x5f, 0xe3, 0x0e, 0x98, - 0x2a, 0xe3, 0x8a, 0xe6, 0x0a, 0xc8, 0x29, 0xc0, 0xea, 0x46, 0xa2, 0xe6, 0xc0, 0x74, 0x06, 0x3a, - 0xbf, 0x8b, 0xaf, 0xe6, 0xcb, 0x8c, 0x27, 0xd6, 0x8e, 0x4c, 0xd0, 0x9e, 0xdb, 0x33, 0xd9, 0xe8, - 0xde, 0xb6, 0xe4, 0x9c, 0x9a, 0x0f, 0xc7, 0xaf, 0x72, 0x9e, 0xb4, 0xa6, 0x72, 0xdb, 0x18, 0x8f, - 0xf4, 0x27, 0xdd, 0x36, 0x06, 0x52, 0xd6, 0xf0, 0x6a, 0x57, 0x1a, 0xcd, 0xa2, 0x23, 0x5f, 0x71, - 0x3f, 0x8e, 0x59, 0x84, 0xee, 0xc7, 0xc9, 0x94, 0x7f, 0x39, 0x9f, 0x40, 0x17, 0xee, 0xf0, 0x43, - 0x5b, 0x93, 0x24, 0x24, 0xba, 0xa9, 0x94, 0xc0, 0x25, 0xe7, 0x46, 0x26, 0x89, 0x5e, 0xc4, 0x43, - 0xf9, 0x0d, 0xe6, 0xf4, 0x52, 0x16, 0xf2, 0x58, 0x6a, 0xca, 0x06, 0x94, 0xe2, 0xc1, 0x4c, 0x34, - 0xe0, 0x84, 0x43, 0x29, 0x3b, 0xe3, 0x5c, 0xfc, 0x1d, 0x27, 0x25, 0xbe, 0x96, 0xfa, 0xd2, 0x73, - 0x3a, 0xa6, 0x6b, 0x11, 0x7c, 0x3d, 0xd7, 0x12, 0xbe, 0x9f, 0x8f, 0x9d, 0xb8, 0x31, 0x34, 0x63, - 0x3d, 0xd7, 0x91, 0xca, 0x58, 0x9d, 0x34, 0x10, 0xf9, 0xad, 0xbe, 0x98, 0x25, 0x27, 0x4c, 0xaf, - 0xb8, 0x5a, 0xbd, 0xa4, 0x9e, 0x96, 0x44, 0x9c, 0x64, 0xc5, 0x3d, 0x4e, 0xd5, 0xf2, 0xe4, 0x2c, - 0xc2, 0x18, 0xaf, 0x2d, 0xdf, 0x48, 0xcf, 0x19, 0xdd, 0x64, 0xec, 0xa1, 0x73, 0x46, 0xe3, 0xcc, - 0xed, 0x73, 0x01, 0x5d, 0xc9, 0x12, 0x9c, 0x5f, 0x8b, 0xf3, 0x69, 0x19, 0x86, 0x1b, 0x59, 0xf5, - 0x02, 0xaf, 0xcd, 0x85, 0x64, 0xe7, 0x18, 0x15, 0xca, 0x6f, 0x12, 0xd1, 0xbb, 0xa6, 0x47, 0x95, - 0xf2, 0xf5, 0xd7, 0x29, 0xf1, 0x44, 0x34, 0xbe, 0xd2, 0x24, 0xf3, 0x31, 0x9e, 0x55, 0x3e, 0x31, - 0x0d, 0x8a, 0x0e, 0x8a, 0x6c, 0x31, 0x9b, 0x78, 0x7d, 0x84, 0x06, 0x51, 0x2a, 0xdf, 0xe2, 0x2b, - 0x86, 0xf2, 0x96, 0x44, 0xe7, 0xeb, 0x6e, 0x6a, 0xcd, 0xce, 0x95, 0x98, 0x8d, 0xee, 0xd5, 0x6d, - 0xdf, 0xd7, 0xd6, 0xec, 0x24, 0x6f, 0x48, 0xae, 0x27, 0x15, 0xb7, 0x14, 0x49, 0xef, 0x3d, 0x41, - 0x84, 0x90, 0x24, 0x02, 0x48, 0x2d, 0xa3, 0x1f, 0x4c, 0x64, 0x7e, 0x2f, 0xd8, 0x72, 0xfe, 0xe7, - 0x48, 0xcb, 0x42, 0xf6, 0xaa, 0xe1, 0x97, 0xda, 0x42, 0x67, 0x72, 0x86, 0xca, 0x1c, 0xcf, 0x23, - 0xe8, 0x25, 0x7b, 0x1d, 0xaf, 0x34, 0x25, 0x1a, 0xe8, 0x36, 0xa8, 0xd2, 0x6c, 0x32, 0xb1, 0xf9, - 0xed, 0xbf, 0x27, 0x35, 0xa5, 0xa4, 0xbc, 0xb3, 0x09, 0xa7, 0x6d, 0xaf, 0x8a, 0x7d, 0x2d, 0x17, - 0xe3, 0x44, 0x9b, 0xf0, 0x52, 0xd1, 0x6b, 0xdd, 0x5a, 0xad, 0x3d, 0xc6, 0xd9, 0xc5, 0x0c, 0x3a, - 0x5d, 0x73, 0xf7, 0x3c, 0x75, 0x13, 0xa1, 0x66, 0x2b, 0x23, 0x48, 0x83, 0x25, 0x97, 0x18, 0x03, - 0xa5, 0xf2, 0xf3, 0x4c, 0x4b, 0xed, 0x5d, 0xa1, 0x69, 0x10, 0x91, 0x14, 0x8f, 0xe6, 0x6e, 0x3d, - 0x9f, 0x89, 0x4b, 0x0b, 0xd4, 0x1f, 0xe8, 0x57, 0x02, 0xcd, 0x57, 0xfb, 0x4d, 0x81, 0x99, 0x2f, - 0xfa, 0xdf, 0x42, 0xaf, 0x8b, 0xed, 0xb7, 0xa8, 0xee, 0x75, 0xd1, 0x5e, 0x7c, 0x4f, 0x38, 0x3d, - 0xc8, 0xc7, 0x30, 0xaa, 0x5e, 0xc4, 0x57, 0xfe, 0xed, 0xe4, 0xa3, 0xfc, 0x73, 0xa5, 0x34, 0x42, - 0x14, 0xf8, 0xb6, 0x74, 0x7c, 0x60, 0x99, 0x25, 0xd3, 0x61, 0x94, 0x5f, 0xec, 0xdb, 0xd2, 0xeb, - 0x61, 0xb0, 0xa5, 0xde, 0xc3, 0x4f, 0xb2, 0x7d, 0x0f, 0xc6, 0xe3, 0xb7, 0xef, 0x77, 0xe6, 0x35, - 0xc6, 0xc4, 0x83, 0xf8, 0x49, 0xc6, 0x77, 0xe5, 0x91, 0x06, 0x96, 0x67, 0x22, 0xbb, 0xef, 0xe2, - 0x1f, 0x4b, 0x2f, 0x8b, 0x51, 0xd3, 0xd4, 0x4b, 0xfa, 0x5d, 0x16, 0xdf, 0x71, 0xfd, 0x31, 0x5a, - 0x35, 0xb4, 0x19, 0xcf, 0x49, 0xab, 0xa1, 0xcd, 0x7a, 0x0e, 0x3a, 0x76, 0xf9, 0x7f, 0x21, 0x5d, - 0x0a, 0xb1, 0xd0, 0x8b, 0x46, 0xb5, 0x52, 0x72, 0x2f, 0xe5, 0xa1, 0x93, 0xa2, 0x6b, 0x50, 0x4c, - 0xbe, 0x9c, 0xab, 0xec, 0xb1, 0x9c, 0x27, 0x8e, 0x95, 0x91, 0x97, 0xfb, 0xe4, 0xee, 0xa6, 0xf4, - 0x8f, 0x9b, 0x72, 0xaf, 0x64, 0x57, 0x4a, 0x17, 0x9d, 0xef, 0x30, 0x9f, 0x30, 0x1e, 0xd1, 0xd5, - 0x2d, 0xe5, 0xd4, 0x23, 0xbd, 0xba, 0x66, 0x95, 0xf1, 0xee, 0xae, 0x2b, 0x93, 0x56, 0x65, 0x1e, - 0xd9, 0x2a, 0x67, 0x41, 0xef, 0x17, 0x17, 0x7a, 0x1e, 0xff, 0x92, 0x5f, 0x80, 0xd9, 0x9c, 0x0c, - 0xf2, 0xe4, 0x5a, 0xc2, 0xd3, 0x9a, 0x9d, 0x61, 0x5e, 0x4d, 0x90, 0xcc, 0xd7, 0xed, 0xd7, 0x30, - 0x6e, 0xc0, 0x48, 0x21, 0x91, 0x3a, 0x8b, 0x7b, 0xe8, 0x46, 0xfb, 0xfc, 0x11, 0x77, 0x6d, 0xd9, - 0xcc, 0xcc, 0x3d, 0x41, 0x6a, 0x68, 0x8b, 0x18, 0xd0, 0x8c, 0xe3, 0xb8, 0x0c, 0x81, 0x73, 0xd9, - 0x02, 0xd9, 0xda, 0xc1, 0xe6, 0x42, 0x46, 0x7e, 0x0f, 0x35, 0x17, 0xf2, 0x73, 0x7f, 0xe4, 0x56, - 0x73, 0x53, 0xea, 0x48, 0xd9, 0x12, 0xf3, 0x53, 0x7d, 0xe4, 0x4a, 0xbc, 0xcf, 0x24, 0xa6, 0xb2, - 0x77, 0x90, 0x1c, 0xf2, 0xee, 0xab, 0x87, 0x2d, 0xb7, 0x5c, 0x93, 0x6b, 0x5e, 0xab, 0x5f, 0x5e, - 0x9e, 0x90, 0xdc, 0xfa, 0x2d, 0xc9, 0xef, 0x29, 0xbb, 0x7e, 0xc7, 0xdd, 0x74, 0xd5, 0xf9, 0x57, - 0x22, 0x81, 0x8c, 0xd1, 0x50, 0x0d, 0x3e, 0x97, 0x03, 0x27, 0xeb, 0x18, 0x08, 0x94, 0x84, 0x6a, - 0x46, 0x69, 0x76, 0x86, 0x9a, 0x5c, 0x79, 0x7c, 0x1e, 0x1b, 0x19, 0x3e, 0x4e, 0x32, 0x8f, 0x13, - 0xa9, 0x41, 0xc4, 0x3c, 0x36, 0xa0, 0x27, 0x9b, 0xc7, 0x09, 0x81, 0xe6, 0x3c, 0x4e, 0x56, 0x33, - 0x69, 0xe9, 0xe7, 0x8e, 0x6a, 0xb2, 0x9a, 0x6a, 0x1e, 0x67, 0x4b, 0xcc, 0xcf, 0xc4, 0x92, 0x2b, - 0x51, 0xcd, 0x63, 0x53, 0x62, 0x0e, 0xf9, 0x31, 0xe7, 0x71, 0xb2, 0x10, 0x73, 0x1e, 0x9f, 0xa8, - 0x7e, 0x6a, 0x1e, 0x67, 0xd7, 0xef, 0xc4, 0xf3, 0x38, 0x91, 0xba, 0xc8, 0x68, 0x68, 0xd6, 0x3c, - 0x4e, 0xd2, 0xf3, 0x79, 0x9c, 0x84, 0x26, 0x9c, 0x2b, 0x5d, 0xe6, 0x71, 0x92, 0xf3, 0x33, 0x94, - 0x97, 0x48, 0xbb, 0x72, 0x9c, 0x99, 0x9c, 0x9b, 0xb1, 0x85, 0x3c, 0x44, 0xf7, 0x5e, 0x02, 0x7e, - 0xbc, 0xd9, 0x7c, 0x21, 0x4f, 0x28, 0xce, 0xe7, 0x1d, 0xd9, 0x89, 0xc9, 0xea, 0x9a, 0xbe, 0xab, - 0xec, 0xac, 0x33, 0x5d, 0x2a, 0xbc, 0xc3, 0xe6, 0x4d, 0xb3, 0x8b, 0xdc, 0x6e, 0x49, 0x73, 0xba, - 0xc8, 0x55, 0xa6, 0x4c, 0x52, 0x6e, 0x2e, 0x4b, 0xf7, 0xf9, 0xfd, 0xb9, 0x3c, 0xe0, 0x48, 0xf2, - 0xcd, 0x27, 0x8c, 0xa3, 0x13, 0xd7, 0x54, 0x19, 0x49, 0xc9, 0x9a, 0x9e, 0x74, 0x9e, 0xaf, 0x49, - 0xed, 0x21, 0x95, 0x6d, 0x2b, 0xd1, 0x68, 0x7d, 0xae, 0xe7, 0x62, 0xc8, 0x16, 0xfa, 0x72, 0xd3, - 0x70, 0xcd, 0x0f, 0x9c, 0x97, 0xd6, 0xab, 0xa7, 0xd4, 0x54, 0xde, 0x20, 0x5d, 0x6a, 0x5e, 0x52, - 0x21, 0x25, 0x35, 0xcd, 0xfd, 0x09, 0x7a, 0xbf, 0xc4, 0x8d, 0x2b, 0xef, 0x91, 0x9f, 0xef, 0x49, - 0x99, 0x32, 0x82, 0x95, 0x18, 0x2d, 0xc6, 0x88, 0x7d, 0x28, 0x4e, 0xf0, 0x24, 0x30, 0xb7, 0xf3, - 0xb3, 0xf8, 0xc9, 0x27, 0x50, 0x14, 0xcb, 0x5b, 0x2c, 0x20, 0x8b, 0x30, 0x77, 0xe8, 0xaa, 0xd2, - 0xe9, 0x76, 0x8c, 0x1a, 0x1c, 0xc7, 0xd9, 0x76, 0x9c, 0x9e, 0xc8, 0xf7, 0x4c, 0xb1, 0xed, 0x70, - 0x2b, 0xe8, 0x84, 0x11, 0x6d, 0xa6, 0x3d, 0x4a, 0x66, 0x65, 0x64, 0x64, 0x84, 0x49, 0xbe, 0x33, - 0x4f, 0x56, 0x70, 0x6d, 0x33, 0xc1, 0xdd, 0x5c, 0x6e, 0xd9, 0x62, 0x70, 0xe9, 0x59, 0x53, 0xd7, - 0x7a, 0xcc, 0x3a, 0xe5, 0x95, 0x9d, 0x5b, 0x29, 0xe9, 0x75, 0x3d, 0x9b, 0x25, 0x6e, 0x67, 0xfe, - 0xe4, 0x02, 0x99, 0x2c, 0x71, 0x9f, 0xe9, 0xa5, 0xc8, 0xe2, 0x6b, 0xdd, 0x4b, 0x90, 0xa5, 0xe6, - 0xc2, 0x31, 0x87, 0x31, 0x6f, 0x2e, 0x7c, 0x80, 0xf1, 0x0e, 0xdc, 0xcf, 0xd9, 0x6b, 0x0a, 0x24, - 0x6f, 0x54, 0x91, 0x4f, 0x61, 0x54, 0x32, 0xf7, 0x1e, 0xf9, 0x24, 0x37, 0x8e, 0xfc, 0x22, 0x4c, - 0x18, 0xd7, 0xc5, 0x94, 0x19, 0x97, 0x75, 0x89, 0xac, 0xcb, 0x84, 0x9e, 0x30, 0xae, 0x85, 0x29, - 0x29, 0x59, 0x97, 0xc5, 0x72, 0xa5, 0x7c, 0x04, 0x63, 0xa2, 0x4b, 0xbb, 0xf6, 0x46, 0xbe, 0x63, - 0x71, 0x46, 0x0b, 0xbd, 0xee, 0x34, 0xdd, 0x68, 0xc1, 0xf7, 0x1e, 0xb9, 0x7b, 0x3d, 0x3b, 0x26, - 0xcd, 0xb2, 0x33, 0x4f, 0xbe, 0xc2, 0xb7, 0xdd, 0xe5, 0x8b, 0xfb, 0x34, 0x7a, 0xea, 0x07, 0x8f, - 0x5d, 0x6f, 0xaf, 0x87, 0xc8, 0xcb, 0xa6, 0xc8, 0x24, 0x9f, 0xfc, 0x40, 0xbe, 0x82, 0xb9, 0x5a, - 0xbe, 0xf0, 0x9e, 0x42, 0xba, 0xef, 0xa3, 0x35, 0xb8, 0x80, 0x61, 0x42, 0x27, 0xad, 0x7b, 0x57, - 0xa1, 0x5f, 0xf0, 0xcc, 0x94, 0xf2, 0x50, 0xa2, 0xe1, 0x07, 0xcd, 0xde, 0x12, 0xcb, 0x66, 0xc4, - 0x70, 0x82, 0x4d, 0x76, 0xc6, 0x17, 0x70, 0xae, 0x96, 0x2b, 0xba, 0x97, 0x88, 0x5e, 0x2a, 0xf3, - 0x79, 0xec, 0x8a, 0x13, 0xd6, 0xbb, 0xab, 0xcc, 0x15, 0x5c, 0xbc, 0xd9, 0x86, 0xbb, 0x19, 0xd0, - 0x47, 0x34, 0xc0, 0xb8, 0xf4, 0x5e, 0x11, 0xd9, 0x26, 0xb9, 0x6c, 0xf9, 0x0a, 0x9c, 0xa9, 0xa5, - 0x44, 0xe5, 0xb1, 0xf4, 0x3a, 0xe8, 0x9a, 0xc2, 0x96, 0x1e, 0xb3, 0x5e, 0x3d, 0xc2, 0xa1, 0xc6, - 0xee, 0xd1, 0x68, 0x7b, 0xa5, 0x47, 0x2f, 0xc9, 0x8b, 0x13, 0x92, 0x70, 0xe7, 0x0e, 0xe3, 0xac, - 0x69, 0x9c, 0x69, 0x8a, 0xdc, 0x8f, 0xf7, 0x53, 0x79, 0xe8, 0xd3, 0xb3, 0xd8, 0x3c, 0x09, 0x6f, - 0xe2, 0x5a, 0x28, 0x62, 0xb3, 0x67, 0x63, 0x5d, 0x87, 0x43, 0x62, 0x9f, 0xa4, 0x16, 0xa6, 0x1d, - 0x92, 0x0a, 0xb7, 0x73, 0xf9, 0xf4, 0x10, 0xb0, 0x4b, 0xa9, 0x98, 0xfd, 0xae, 0x22, 0xb8, 0xbb, - 0x77, 0xd5, 0x6f, 0x3c, 0xd6, 0xdd, 0xbd, 0xec, 0x77, 0xd2, 0x0f, 0xca, 0x60, 0x3b, 0xf3, 0x62, - 0xc5, 0x67, 0x3f, 0x8c, 0x08, 0x37, 0x04, 0xc4, 0x2b, 0x7e, 0x12, 0x2e, 0x5c, 0x65, 0x6f, 0x4a, - 0x27, 0x2a, 0x16, 0x68, 0x4a, 0xce, 0xed, 0x1a, 0xe5, 0x3f, 0x45, 0x26, 0xd3, 0x7f, 0xaa, 0x57, - 0x34, 0xff, 0xd0, 0x82, 0xd8, 0xb4, 0xdd, 0xc2, 0x70, 0xef, 0x03, 0x9f, 0xf3, 0xc4, 0x11, 0xc0, - 0x69, 0x54, 0xef, 0x40, 0xb5, 0x29, 0x11, 0xde, 0x64, 0x74, 0xbc, 0xca, 0x1c, 0x9d, 0xc6, 0xc5, - 0x5d, 0xa9, 0x47, 0x5d, 0xdd, 0x2e, 0x90, 0x75, 0x38, 0x7b, 0x8f, 0x46, 0x62, 0x8d, 0xb3, 0x69, - 0x18, 0x05, 0x6e, 0x23, 0xea, 0x7a, 0x02, 0x2a, 0x8d, 0xb0, 0x0c, 0x9e, 0x9d, 0xb7, 0x98, 0xbc, - 0x5a, 0xb6, 0xbc, 0xae, 0x7c, 0x5d, 0x62, 0x81, 0xc5, 0xb1, 0xca, 0x49, 0xaa, 0x98, 0x3f, 0xc5, - 0x87, 0x79, 0xa8, 0x51, 0x3e, 0x6b, 0x31, 0x4e, 0xf3, 0x22, 0xcc, 0xca, 0x9b, 0x30, 0xc4, 0x99, - 0x72, 0x37, 0xd4, 0x71, 0x9d, 0x87, 0xdc, 0x81, 0x51, 0x15, 0x2b, 0x44, 0x0c, 0x54, 0x6e, 0xbd, - 0xee, 0xc0, 0x28, 0xd7, 0xab, 0x8e, 0xcf, 0xf2, 0x01, 0x8c, 0xaa, 0xe0, 0xa2, 0x13, 0xef, 0xf4, - 0x9f, 0xc0, 0x84, 0x1e, 0x66, 0x74, 0xf2, 0x8e, 0xfc, 0x08, 0xcf, 0xa9, 0xe5, 0x71, 0x50, 0x3e, - 0xff, 0x4c, 0x22, 0xfb, 0x8d, 0xe8, 0x52, 0xbe, 0x40, 0x4a, 0x60, 0x6e, 0xf5, 0xcf, 0xa4, 0xb8, - 0xc9, 0x07, 0xf2, 0xca, 0x96, 0x62, 0x4e, 0x13, 0x75, 0xe9, 0xb3, 0x49, 0xde, 0xcd, 0xcf, 0xc3, - 0xac, 0x16, 0xd8, 0x9e, 0xd5, 0x3e, 0xce, 0x79, 0x7a, 0xef, 0xae, 0xcb, 0x93, 0xb2, 0x81, 0x5a, - 0x5a, 0xea, 0x35, 0xc4, 0x7c, 0x41, 0x97, 0xf2, 0x1f, 0x50, 0xc4, 0xc1, 0xb8, 0x8f, 0xe6, 0x6e, - 0x0a, 0x9b, 0xdb, 0xbc, 0x2e, 0x0f, 0x32, 0xc6, 0xf6, 0x7d, 0x5a, 0x5c, 0x17, 0xb6, 0x6e, 0xee, - 0x02, 0x71, 0x11, 0xf5, 0xa5, 0x88, 0x5b, 0x91, 0xd1, 0x9a, 0xc7, 0x6f, 0x6c, 0x7e, 0xcd, 0xce, - 0x67, 0x9c, 0xe0, 0xf7, 0x1c, 0x8b, 0x3c, 0x71, 0xbf, 0x80, 0xda, 0x61, 0x66, 0xfa, 0xb3, 0x7c, - 0x61, 0xd7, 0xb5, 0x20, 0x90, 0x4c, 0x4e, 0xb5, 0xe9, 0x3d, 0xc6, 0xbb, 0x70, 0xd9, 0xef, 0x45, - 0xbe, 0xda, 0x43, 0x8a, 0xec, 0x89, 0xd7, 0x7a, 0xd2, 0xa9, 0xf3, 0xe0, 0xf3, 0x7c, 0x87, 0xcd, - 0x2e, 0xaf, 0xc7, 0xfb, 0x97, 0x19, 0x47, 0xf4, 0x2a, 0x14, 0x36, 0x5b, 0xa0, 0x19, 0x0a, 0xdb, - 0xb5, 0x0d, 0x79, 0xdd, 0xff, 0x19, 0x94, 0xe3, 0x48, 0x97, 0x93, 0x0d, 0x42, 0x7e, 0x04, 0x26, - 0x49, 0xf5, 0x54, 0x48, 0xba, 0xbd, 0x9b, 0x34, 0x77, 0x25, 0xaf, 0x87, 0xf5, 0xfb, 0x3e, 0x22, - 0x82, 0x2f, 0xf1, 0x72, 0x6a, 0xde, 0x1b, 0xac, 0x5d, 0x1c, 0xce, 0xe2, 0x72, 0xe0, 0x4b, 0x11, - 0x94, 0x1e, 0xed, 0x93, 0x0b, 0x52, 0x81, 0x28, 0x09, 0x41, 0x56, 0x97, 0xe1, 0xed, 0x7d, 0xc6, - 0x5a, 0xca, 0x19, 0xd7, 0x93, 0x0f, 0xa8, 0x13, 0x5f, 0x88, 0x4b, 0x64, 0x4b, 0xd4, 0x2f, 0x21, - 0xa7, 0x51, 0xc9, 0xdb, 0x5c, 0x59, 0x14, 0x2a, 0xfa, 0xab, 0x24, 0x8b, 0x60, 0x70, 0x66, 0x8a, - 0xf8, 0x81, 0x1b, 0x3d, 0x5b, 0xb0, 0x57, 0x63, 0xb7, 0x82, 0x8e, 0x90, 0xb2, 0x41, 0x22, 0xed, - 0x55, 0xf2, 0x25, 0x2e, 0x25, 0x42, 0x7c, 0xd5, 0xf7, 0xa3, 0x30, 0x0a, 0x9c, 0x76, 0x0d, 0x5f, - 0x94, 0xce, 0x6d, 0x74, 0x1c, 0xac, 0x9e, 0xc5, 0xa6, 0xc5, 0xce, 0x8a, 0x84, 0xfd, 0x59, 0x29, - 0x7e, 0xd4, 0xfd, 0xa1, 0x2c, 0x64, 0x17, 0xcb, 0xa5, 0x26, 0x53, 0xf4, 0xbf, 0x4c, 0xa1, 0x75, - 0x98, 0xcd, 0x49, 0x8c, 0xa4, 0x8e, 0xa9, 0xbb, 0x27, 0x4e, 0x9a, 0xeb, 0x5e, 0x30, 0xf9, 0x0a, - 0x66, 0x32, 0x33, 0x27, 0x29, 0x57, 0x7b, 0xb7, 0xbc, 0x4a, 0xbd, 0x84, 0x3f, 0x86, 0x12, 0xbf, - 0xb9, 0x82, 0x01, 0xda, 0x46, 0x12, 0x9d, 0xf8, 0x3e, 0x53, 0x0e, 0x41, 0x72, 0xbd, 0xce, 0xa7, - 0x53, 0xb7, 0xea, 0xa7, 0x31, 0x7b, 0x8a, 0x7c, 0x02, 0x9b, 0x36, 0xfc, 0x27, 0x34, 0x78, 0xa6, - 0x3e, 0xbc, 0x2c, 0x64, 0xb7, 0x4b, 0x53, 0x9b, 0x30, 0xb3, 0x43, 0x03, 0xf7, 0xd1, 0xb3, 0xa4, - 0x40, 0xd9, 0x33, 0x99, 0xd8, 0x6e, 0x12, 0x3f, 0x87, 0xd9, 0x05, 0xff, 0xa0, 0x2d, 0xae, 0x27, - 0x1a, 0x32, 0x55, 0xcc, 0x41, 0x36, 0xbe, 0x77, 0xd0, 0xd6, 0x9c, 0xba, 0x3f, 0xa9, 0xf3, 0x2d, - 0xe0, 0xbd, 0xdd, 0xeb, 0x66, 0xdc, 0x44, 0x06, 0x49, 0x7c, 0xeb, 0x44, 0x9a, 0x72, 0x3a, 0xff, - 0x16, 0x4e, 0xc2, 0x04, 0x1f, 0xf7, 0xcd, 0x69, 0x93, 0x30, 0x0b, 0xdf, 0xfd, 0xb2, 0x5b, 0x86, - 0x54, 0x5e, 0x60, 0xbe, 0xd4, 0x63, 0xd4, 0x76, 0x5d, 0xee, 0x2d, 0x9b, 0x81, 0xfb, 0xc4, 0x6d, - 0xd1, 0x3d, 0xe1, 0x46, 0x34, 0xa3, 0xc3, 0x4d, 0x64, 0xb7, 0x7a, 0x6a, 0xe9, 0x23, 0x5a, 0xad, - 0x2e, 0x2a, 0x16, 0xd1, 0xf3, 0x47, 0x30, 0x4a, 0x3c, 0xad, 0x98, 0xd0, 0x79, 0xbb, 0xad, 0xd6, - 0x29, 0x66, 0x54, 0x6a, 0xdf, 0x87, 0xf1, 0x9a, 0x5e, 0x78, 0x46, 0x21, 0xb9, 0x93, 0x42, 0x5d, - 0x77, 0xea, 0x5d, 0xf7, 0x2e, 0x41, 0xaf, 0x6a, 0xe3, 0x39, 0x56, 0x2b, 0x72, 0x63, 0x84, 0x8c, - 0x47, 0xf6, 0xd4, 0x2e, 0x90, 0xf5, 0x06, 0xa6, 0x8a, 0x11, 0xca, 0x7e, 0x97, 0xaf, 0xce, 0x9f, - 0xee, 0x49, 0x3e, 0x71, 0x4a, 0xac, 0xde, 0x6f, 0x09, 0xab, 0xe0, 0xff, 0xae, 0x6f, 0xa4, 0xf2, - 0x80, 0xa6, 0xf8, 0x59, 0x41, 0x3d, 0xa0, 0x29, 0xf5, 0x58, 0xa1, 0x1e, 0xd0, 0x94, 0xf1, 0x12, - 0xe1, 0x12, 0xca, 0x8a, 0xdf, 0x3c, 0xea, 0xe2, 0x8c, 0x50, 0x62, 0x32, 0x9e, 0x56, 0x7a, 0xa0, - 0x67, 0x21, 0xe1, 0x2f, 0x25, 0x75, 0xf1, 0xb5, 0x26, 0xb3, 0x8f, 0x24, 0x9e, 0x56, 0xba, 0x0b, - 0x45, 0xfe, 0x68, 0x44, 0x9c, 0xbc, 0x31, 0x8e, 0x71, 0x4c, 0xbf, 0x65, 0xd1, 0x65, 0x50, 0x8b, - 0xc9, 0x94, 0x77, 0xca, 0x65, 0x96, 0x93, 0x0b, 0xaf, 0xcb, 0x54, 0x85, 0x38, 0xb1, 0x9d, 0x72, - 0x4c, 0xa5, 0x72, 0xdd, 0xcd, 0x9d, 0xcb, 0xc0, 0x28, 0x95, 0x72, 0x5c, 0x4f, 0x83, 0xa7, 0x9a, - 0x94, 0x91, 0x1b, 0x6f, 0xee, 0x7c, 0x26, 0x4e, 0x08, 0x8a, 0xf8, 0x73, 0xda, 0xd9, 0xaf, 0x9b, - 0xc7, 0x37, 0xd6, 0xba, 0xd0, 0xc8, 0x62, 0x6e, 0x1c, 0x87, 0x54, 0x94, 0x4a, 0xd5, 0x8b, 0x4f, - 0x19, 0x4f, 0xaa, 0xbf, 0x96, 0x71, 0xa9, 0xc4, 0xa0, 0x88, 0xc3, 0xde, 0xba, 0xbf, 0xef, 0x4e, - 0x1e, 0xca, 0x17, 0x78, 0x72, 0x4a, 0xea, 0x25, 0x20, 0x77, 0x04, 0x1f, 0xca, 0x37, 0x77, 0x5e, - 0xb6, 0xe0, 0x5d, 0xb8, 0x90, 0xb8, 0xa9, 0x62, 0x0a, 0xbe, 0x91, 0x7d, 0x9d, 0x25, 0xb3, 0x7b, - 0xf2, 0x75, 0xf6, 0xcb, 0xe9, 0x1b, 0x2d, 0x89, 0x71, 0x3f, 0xe9, 0x9a, 0xb7, 0x06, 0x93, 0xb8, - 0xcc, 0x84, 0x34, 0xb8, 0x17, 0xf8, 0x9d, 0x76, 0x9c, 0x04, 0xc7, 0x04, 0x27, 0xb3, 0x31, 0x25, - 0xb1, 0xea, 0xa2, 0xfc, 0xb8, 0xb8, 0xfd, 0x8c, 0x08, 0x3d, 0x39, 0x8f, 0x02, 0x66, 0xed, 0x62, - 0x88, 0xd8, 0xb9, 0x43, 0x3e, 0x82, 0xd3, 0xf1, 0xa5, 0x68, 0x2e, 0x22, 0x83, 0xac, 0x8b, 0xa3, - 0xec, 0x74, 0x7c, 0x33, 0xfa, 0xe4, 0xec, 0xcb, 0x72, 0x2b, 0x8a, 0xd9, 0x2f, 0xa6, 0xee, 0xf5, - 0x18, 0x6d, 0x38, 0xce, 0x8e, 0xa4, 0xf5, 0xed, 0x49, 0x47, 0xa7, 0x81, 0x9f, 0x5b, 0x76, 0x7e, - 0x47, 0xfd, 0x73, 0xeb, 0x9a, 0x83, 0x52, 0xa9, 0xbf, 0x39, 0x72, 0xd6, 0xe0, 0x2a, 0xe6, 0x84, - 0xd9, 0xe4, 0x59, 0x00, 0xb3, 0xa9, 0xf2, 0xeb, 0x9e, 0xcc, 0x24, 0xd3, 0x82, 0x2b, 0x3d, 0x13, - 0x5c, 0x92, 0x5b, 0x46, 0x2c, 0x4f, 0xef, 0x54, 0x98, 0x5d, 0x2c, 0x8f, 0xe9, 0xac, 0x3c, 0x91, - 0x6a, 0x9f, 0xed, 0x92, 0xb2, 0x52, 0xed, 0xb3, 0x5d, 0x13, 0x4d, 0x7e, 0x8e, 0xcf, 0x5a, 0x89, - 0x3d, 0x0a, 0xf3, 0x3c, 0x51, 0x8f, 0x67, 0xbf, 0xee, 0x7a, 0xec, 0x73, 0xc5, 0x3c, 0x14, 0x4d, - 0x31, 0xa2, 0x4d, 0x73, 0x49, 0x58, 0x62, 0x79, 0xc2, 0x7b, 0x0b, 0xe9, 0x12, 0x43, 0x7e, 0x89, - 0x4f, 0xc0, 0x13, 0xd7, 0x3c, 0x07, 0x5e, 0x5d, 0xfc, 0xc9, 0x7f, 0xbd, 0x54, 0xf8, 0xc9, 0x4f, - 0x2f, 0x15, 0xfe, 0xe3, 0x4f, 0x2f, 0x15, 0xfe, 0xcb, 0x4f, 0x2f, 0x15, 0xbe, 0x9c, 0x3f, 0x5e, - 0x0e, 0x66, 0xfe, 0x10, 0xe5, 0x2d, 0x2e, 0x6e, 0x08, 0xff, 0x7b, 0xf3, 0xff, 0x06, 0x00, 0x00, - 0xff, 0xff, 0x34, 0x48, 0x0f, 0x3c, 0x1d, 0xf0, 0x00, 0x00, + 0x92, 0x4e, 0xe6, 0x61, 0xac, 0xc6, 0xfd, 0x15, 0x38, 0xcd, 0x71, 0x03, 0x91, 0xed, 0xd1, 0xc6, + 0x85, 0x1b, 0x83, 0xcf, 0x60, 0x3a, 0x11, 0xdb, 0xa5, 0x6d, 0xb2, 0xaf, 0xb9, 0xe1, 0xb7, 0xf4, + 0x5d, 0x5a, 0x5b, 0xc0, 0x6c, 0x85, 0x25, 0xf3, 0xda, 0x7e, 0x8e, 0x5b, 0x8b, 0x68, 0x91, 0xc8, + 0xfd, 0x9c, 0xbe, 0xb6, 0xab, 0x9d, 0xdd, 0x7c, 0xdc, 0xa5, 0x62, 0x1b, 0x86, 0x3c, 0x19, 0x7b, + 0x09, 0x45, 0x47, 0x5e, 0x97, 0x3b, 0x5d, 0x6e, 0xdd, 0xe1, 0x62, 0x9f, 0xb0, 0x4b, 0xc4, 0x26, + 0xd7, 0xea, 0xe4, 0x2c, 0xac, 0xe4, 0x83, 0xe4, 0x98, 0x11, 0xca, 0x40, 0x61, 0x89, 0xf5, 0xd3, + 0x4e, 0x90, 0x92, 0x32, 0x0c, 0xf2, 0x19, 0x97, 0xeb, 0x03, 0xf7, 0xd6, 0x2d, 0x06, 0xb0, 0x39, + 0xdc, 0xfa, 0xa3, 0x7e, 0x7d, 0x93, 0xc1, 0xf6, 0xd2, 0x9a, 0xbe, 0x71, 0x2f, 0x8d, 0x7a, 0x46, + 0x28, 0x33, 0x05, 0xf9, 0x57, 0x82, 0xa6, 0x60, 0x7f, 0x6c, 0x0a, 0x8a, 0x4f, 0x8d, 0x9b, 0x82, + 0x31, 0x09, 0xeb, 0x45, 0xb1, 0x6d, 0x43, 0xa9, 0x03, 0x71, 0x2f, 0x8a, 0xad, 0x9e, 0xe8, 0x45, + 0x8d, 0x88, 0xbc, 0x0f, 0x50, 0x79, 0x58, 0x43, 0x9b, 0xc7, 0x5e, 0x17, 0x5b, 0x57, 0x5c, 0x64, + 0x9c, 0xa7, 0xa1, 0x30, 0xa9, 0x02, 0xdd, 0x66, 0xd4, 0xa8, 0x49, 0x15, 0x26, 0x2a, 0x3f, 0xea, + 0x04, 0x74, 0xa5, 0xc9, 0xd6, 0xa9, 0x88, 0x1b, 0xc7, 0xa3, 0x7c, 0x22, 0x75, 0x18, 0xa2, 0xee, + 0x0a, 0x8c, 0x26, 0xc0, 0x64, 0x21, 0x1b, 0x70, 0xe6, 0xde, 0xc2, 0xa6, 0x18, 0x57, 0x95, 0x46, + 0xc3, 0xef, 0x78, 0x91, 0xd8, 0xaf, 0x5e, 0x39, 0x3a, 0x2c, 0x5f, 0xdc, 0x6b, 0xb4, 0xeb, 0x72, + 0x0c, 0x3a, 0x1c, 0xad, 0x6f, 0x58, 0x53, 0xbc, 0xe4, 0x2a, 0xf4, 0x6f, 0xdb, 0x2b, 0xc2, 0x72, + 0x3e, 0x73, 0x74, 0x58, 0x9e, 0xe8, 0x04, 0xae, 0xc6, 0xc2, 0xb0, 0xe4, 0x3d, 0x80, 0x2d, 0x27, + 0xd8, 0xa3, 0xd1, 0xa6, 0x1f, 0x44, 0xb8, 0xe1, 0x9c, 0xa8, 0x9e, 0x3b, 0x3a, 0x2c, 0xcf, 0x44, + 0x08, 0xad, 0xb3, 0xe9, 0x4f, 0x6f, 0x74, 0x4c, 0x7c, 0x7f, 0x60, 0xa4, 0xaf, 0xd8, 0x6f, 0x8f, + 0xd6, 0x68, 0x18, 0x72, 0xfb, 0xb0, 0x05, 0x93, 0xf7, 0x68, 0xc4, 0x06, 0xae, 0xb4, 0x77, 0xba, + 0x77, 0xeb, 0x87, 0x30, 0xf6, 0xd0, 0x8d, 0xf6, 0x6b, 0xb4, 0x11, 0xd0, 0x48, 0xfa, 0x7a, 0x50, + 0xe5, 0x4f, 0xdd, 0x68, 0xbf, 0x1e, 0x72, 0xb8, 0xbe, 0xae, 0x6b, 0xe4, 0xd6, 0x12, 0x9c, 0x16, + 0xa5, 0x29, 0xf3, 0x6a, 0xde, 0x14, 0x58, 0x40, 0x81, 0xd8, 0xed, 0xba, 0x40, 0x53, 0xcc, 0xbf, + 0xea, 0x83, 0x99, 0x85, 0x7d, 0xc7, 0xdb, 0xa3, 0x9b, 0x4e, 0x18, 0x3e, 0xf5, 0x83, 0xa6, 0x56, + 0x79, 0xb4, 0x2d, 0x53, 0x95, 0x47, 0x63, 0x72, 0x1e, 0xc6, 0x36, 0x5a, 0x4d, 0xc9, 0x23, 0xec, + 0x5e, 0x2c, 0xcb, 0x6f, 0x35, 0xeb, 0x6d, 0x29, 0x4b, 0x27, 0x62, 0x3c, 0xeb, 0xf4, 0xa9, 0xe2, + 0xe9, 0x8f, 0x79, 0x3c, 0xfa, 0x54, 0xe3, 0xd1, 0x88, 0xc8, 0x12, 0x9c, 0xa9, 0xd1, 0x86, 0xef, + 0x35, 0xef, 0x3a, 0x8d, 0xc8, 0x0f, 0xb6, 0xfc, 0xc7, 0xd4, 0x13, 0x03, 0x1a, 0x0d, 0x83, 0x10, + 0x91, 0xf5, 0x47, 0x88, 0xad, 0x47, 0x0c, 0x6d, 0xa7, 0x39, 0xc8, 0x06, 0x8c, 0x3c, 0x14, 0x1e, + 0x43, 0x61, 0x2c, 0x5f, 0xbb, 0xa9, 0x5c, 0x88, 0x0b, 0x01, 0xc5, 0x51, 0xe8, 0xb4, 0x94, 0xb9, + 0xaf, 0xf6, 0x59, 0x38, 0x95, 0x49, 0x4a, 0x5b, 0x09, 0xb1, 0xb6, 0x61, 0x62, 0xb3, 0xd5, 0xd9, + 0x73, 0x3d, 0x36, 0xe9, 0xd4, 0xe8, 0x0f, 0xc9, 0x22, 0x40, 0x0c, 0x10, 0x7e, 0xc0, 0x29, 0x61, + 0x62, 0xc7, 0x88, 0x9d, 0x37, 0xc5, 0x97, 0x8b, 0x10, 0xb4, 0x88, 0x6c, 0x8d, 0xcf, 0xfa, 0xdf, + 0xfd, 0x40, 0x44, 0x07, 0xe0, 0x22, 0x58, 0xa3, 0x11, 0x5b, 0x9e, 0xce, 0x42, 0x9f, 0x72, 0xd7, + 0x0d, 0x1d, 0x1d, 0x96, 0xfb, 0xdc, 0xa6, 0xdd, 0xb7, 0xb2, 0x48, 0xde, 0x82, 0x41, 0x24, 0x43, + 0xfd, 0x4f, 0xaa, 0xf2, 0x74, 0x09, 0x7c, 0xf2, 0xc1, 0xd5, 0xd7, 0xe6, 0xc4, 0xe4, 0x6d, 0x18, + 0x5d, 0xa4, 0x2d, 0xba, 0xe7, 0x44, 0xbe, 0x9c, 0x4e, 0xb8, 0x03, 0x4c, 0x02, 0xb5, 0x31, 0x17, + 0x53, 0x32, 0x73, 0xd8, 0xa6, 0x4e, 0xe8, 0x7b, 0xba, 0x39, 0x1c, 0x20, 0x44, 0x37, 0x87, 0x39, + 0x0d, 0xf9, 0xad, 0x02, 0x8c, 0x55, 0x3c, 0x4f, 0x38, 0x96, 0x42, 0xa1, 0xf5, 0x99, 0x9b, 0xca, + 0x13, 0xbb, 0xea, 0xec, 0xd2, 0xd6, 0x8e, 0xd3, 0xea, 0xd0, 0xb0, 0xfa, 0x35, 0xb3, 0x50, 0xfe, + 0xd3, 0x61, 0xf9, 0x83, 0x13, 0xb8, 0x8a, 0x62, 0x9f, 0xee, 0x56, 0xe0, 0xb8, 0x51, 0xc8, 0xbe, + 0x5a, 0x27, 0x2e, 0x50, 0xff, 0x6e, 0xb4, 0x7a, 0xc4, 0x6b, 0xc3, 0x50, 0xaf, 0xb5, 0x81, 0x1c, + 0xc0, 0xe9, 0x4a, 0x18, 0x76, 0x0e, 0x68, 0x2d, 0x72, 0x82, 0x68, 0xcb, 0x3d, 0xa0, 0x38, 0x21, + 0x75, 0x77, 0x2e, 0xbc, 0xf6, 0x93, 0xc3, 0x72, 0x81, 0x19, 0x45, 0x0e, 0xb2, 0xb2, 0x7d, 0x4f, + 0x10, 0xd5, 0x23, 0x57, 0x5f, 0xde, 0xd0, 0xcd, 0x90, 0x94, 0x6d, 0x5d, 0x55, 0x1b, 0x92, 0x95, + 0xc5, 0xbc, 0x1e, 0xb7, 0x16, 0xe0, 0xc2, 0x3d, 0x1a, 0xd9, 0x34, 0xa4, 0x91, 0xfc, 0x46, 0x70, + 0x84, 0xc7, 0xce, 0xdd, 0x61, 0xfc, 0xad, 0x98, 0xb1, 0xfb, 0xf9, 0x77, 0x21, 0x31, 0xd6, 0x5f, + 0x2b, 0x40, 0x79, 0x21, 0xa0, 0xdc, 0x9e, 0xc8, 0x11, 0xd4, 0x7d, 0xee, 0xba, 0x00, 0x03, 0x5b, + 0xcf, 0xda, 0xd2, 0x2b, 0x83, 0x58, 0xd6, 0x29, 0x36, 0x42, 0x8f, 0xe9, 0xe4, 0xb2, 0x1e, 0xc1, + 0x8c, 0x4d, 0x3d, 0xfa, 0xd4, 0xd9, 0x6d, 0x51, 0xc3, 0x4f, 0x54, 0x86, 0x41, 0xfe, 0xa1, 0xa7, + 0x9a, 0xc0, 0xe1, 0x27, 0xf3, 0xb9, 0x59, 0x13, 0x30, 0xb6, 0xe9, 0x7a, 0x7b, 0x42, 0xba, 0xf5, + 0xe7, 0x03, 0x30, 0xce, 0x7f, 0x0b, 0x13, 0x29, 0xb1, 0x5c, 0x16, 0x8e, 0xb3, 0x5c, 0xbe, 0x0b, + 0x13, 0x6c, 0xbd, 0xa1, 0xc1, 0x0e, 0x0d, 0xd8, 0xfc, 0x2f, 0x34, 0x81, 0xe6, 0x5e, 0x88, 0x88, + 0xfa, 0x13, 0x8e, 0xb1, 0x4d, 0x42, 0xb2, 0x0a, 0x93, 0x1c, 0x70, 0x97, 0x3a, 0x51, 0x27, 0xf6, + 0x58, 0x9d, 0x16, 0x36, 0x91, 0x04, 0xf3, 0xa1, 0x29, 0x64, 0x3d, 0x12, 0x40, 0x3b, 0xc1, 0x4b, + 0x3e, 0x81, 0xd3, 0x9b, 0x81, 0xff, 0xcd, 0x33, 0x6d, 0x83, 0xc0, 0xbf, 0x4e, 0x6e, 0x3d, 0x31, + 0x54, 0x5d, 0xdf, 0x26, 0x24, 0xa9, 0xc9, 0xeb, 0x30, 0xb2, 0x12, 0x56, 0xfd, 0xc0, 0xf5, 0xf6, + 0xf0, 0x1b, 0x1d, 0xe1, 0x8e, 0x7e, 0x37, 0xac, 0xef, 0x22, 0xd0, 0x56, 0xe8, 0x84, 0x4b, 0x7a, + 0xb8, 0xb7, 0x4b, 0xfa, 0x36, 0xc0, 0xaa, 0xef, 0x34, 0x2b, 0xad, 0xd6, 0x42, 0x25, 0xc4, 0x95, + 0x58, 0xac, 0x47, 0x2d, 0xdf, 0x69, 0xd6, 0x9d, 0x56, 0xab, 0xde, 0x70, 0x42, 0x5b, 0xa3, 0x21, + 0x5f, 0xc2, 0xb9, 0xd0, 0xdd, 0xf3, 0xb0, 0x71, 0x75, 0xa7, 0xb5, 0xe7, 0x07, 0x6e, 0xb4, 0x7f, + 0x50, 0x0f, 0x3b, 0x6e, 0xc4, 0xfd, 0x41, 0x93, 0xf3, 0x97, 0xc4, 0x24, 0x57, 0x93, 0x74, 0x15, + 0x49, 0x56, 0x63, 0x54, 0xf6, 0x6c, 0x98, 0x8d, 0x20, 0x0f, 0x61, 0x62, 0xd5, 0x6d, 0x50, 0x2f, + 0xa4, 0xe8, 0xe0, 0x7b, 0x86, 0xde, 0xa2, 0xee, 0x1f, 0x33, 0x53, 0xe2, 0x44, 0x4b, 0x67, 0xc2, + 0x4f, 0xd7, 0x94, 0x73, 0x7f, 0x60, 0x64, 0xa8, 0x38, 0x6c, 0x9f, 0x16, 0xc0, 0x87, 0x4e, 0xe0, + 0xb9, 0xde, 0x5e, 0x68, 0xfd, 0x6d, 0x02, 0x23, 0xaa, 0x9f, 0x6e, 0xea, 0x96, 0x8a, 0x58, 0x9a, + 0x71, 0xc8, 0xc6, 0x7e, 0x38, 0x5b, 0xa3, 0x20, 0xe7, 0xd0, 0x76, 0x11, 0x9b, 0x82, 0x61, 0xf6, + 0x09, 0x39, 0xed, 0xb6, 0xcd, 0x60, 0x6c, 0x6a, 0x58, 0xac, 0xe2, 0xa0, 0x19, 0xe1, 0x53, 0x43, + 0x73, 0xd7, 0xee, 0x5b, 0xac, 0xb2, 0x6f, 0x72, 0x63, 0x65, 0x71, 0x01, 0xfb, 0x7f, 0x84, 0x7f, + 0x93, 0xbe, 0xdb, 0x6c, 0xd8, 0x08, 0x65, 0xd8, 0x5a, 0x65, 0x6d, 0x55, 0xf4, 0x31, 0x62, 0x43, + 0xe7, 0xa0, 0x65, 0x23, 0x94, 0xed, 0x76, 0xb9, 0x4b, 0x65, 0xc1, 0xf7, 0xa2, 0xc0, 0x6f, 0x85, + 0xb8, 0x85, 0x1b, 0xe1, 0x63, 0x50, 0xf8, 0x62, 0x1a, 0x02, 0x65, 0x27, 0x48, 0xc9, 0x43, 0x98, + 0xad, 0x34, 0x9f, 0x38, 0x5e, 0x83, 0x36, 0x39, 0xe6, 0xa1, 0x1f, 0x3c, 0x7e, 0xd4, 0xf2, 0x9f, + 0x86, 0x38, 0x48, 0x46, 0x84, 0xeb, 0x52, 0x90, 0x48, 0xd7, 0xce, 0x53, 0x49, 0x64, 0xe7, 0x71, + 0xb3, 0x79, 0x60, 0xa1, 0xe5, 0x77, 0x9a, 0x62, 0xe8, 0xe0, 0x3c, 0xd0, 0x60, 0x00, 0x9b, 0xc3, + 0x99, 0x96, 0x96, 0x6b, 0x6b, 0x38, 0x30, 0x84, 0x96, 0xf6, 0xc3, 0x03, 0x9b, 0xc1, 0xc8, 0x35, + 0x18, 0x96, 0x1b, 0x77, 0x7e, 0x92, 0x81, 0x1e, 0x74, 0xb9, 0x61, 0x97, 0x38, 0xf6, 0x1d, 0xdb, + 0xb4, 0xe1, 0x3f, 0xa1, 0xc1, 0xb3, 0x05, 0xbf, 0x49, 0xa5, 0x5b, 0x4b, 0xb8, 0x6d, 0x38, 0xa2, + 0xde, 0x60, 0x18, 0xdb, 0x24, 0x64, 0x05, 0xf0, 0x85, 0x3b, 0x2c, 0x9d, 0x8e, 0x0b, 0xe0, 0x0b, + 0x7b, 0x68, 0x4b, 0x1c, 0x59, 0x84, 0x33, 0x95, 0x4e, 0xe4, 0x1f, 0x38, 0x91, 0xdb, 0xd8, 0x6e, + 0xef, 0x05, 0x0e, 0x2b, 0xa4, 0x88, 0x0c, 0x68, 0xc8, 0x38, 0x12, 0x59, 0xef, 0x08, 0xac, 0x9d, + 0x66, 0x20, 0xef, 0xc0, 0xf8, 0x4a, 0xc8, 0x5d, 0x97, 0x4e, 0x48, 0x9b, 0xe8, 0x7f, 0x12, 0xb5, + 0x74, 0xc3, 0x3a, 0x3a, 0x32, 0xeb, 0xcc, 0xf4, 0x69, 0xda, 0x06, 0x1d, 0xb1, 0x60, 0xa8, 0x12, + 0x86, 0x6e, 0x18, 0xa1, 0x5b, 0x69, 0xa4, 0x0a, 0x47, 0x87, 0xe5, 0x21, 0x07, 0x21, 0xb6, 0xc0, + 0x90, 0x87, 0x30, 0xb6, 0x48, 0xd9, 0xce, 0x79, 0x2b, 0xe8, 0x84, 0x11, 0x3a, 0x89, 0xc6, 0xe6, + 0xcf, 0x89, 0xd9, 0x48, 0xc3, 0x88, 0xb1, 0xcc, 0xb7, 0xa8, 0x4d, 0x84, 0xd7, 0x23, 0x86, 0xd0, + 0x97, 0x5a, 0x8d, 0x9e, 0x99, 0x05, 0x82, 0x67, 0xd9, 0x6d, 0xb2, 0xf9, 0x65, 0x1a, 0xeb, 0x80, + 0x66, 0x81, 0x98, 0xd0, 0xea, 0xfb, 0x88, 0xd1, 0xcd, 0x02, 0x83, 0x85, 0x34, 0x52, 0xde, 0xf0, + 0x19, 0xc3, 0xe3, 0x69, 0x22, 0x65, 0x15, 0x4f, 0xe8, 0x2b, 0xff, 0x10, 0xc6, 0x16, 0x3a, 0x61, + 0xe4, 0x1f, 0x6c, 0xed, 0xd3, 0x03, 0x8a, 0x8e, 0x24, 0x61, 0xfc, 0x34, 0x10, 0x5c, 0x8f, 0x18, + 0x5c, 0x6f, 0xa6, 0x46, 0x4e, 0x3e, 0x03, 0x22, 0xad, 0x98, 0x7b, 0x6c, 0x7c, 0x78, 0x6c, 0x2c, + 0xa3, 0x2f, 0x69, 0x84, 0x9b, 0x2e, 0xd2, 0xf8, 0xa9, 0xef, 0x29, 0xb4, 0xee, 0xcf, 0x4c, 0x33, + 0xb3, 0x0a, 0xf1, 0x2a, 0xde, 0x0b, 0x9c, 0xf6, 0x7e, 0xa9, 0x14, 0x9b, 0x06, 0xa2, 0x51, 0x7b, + 0x0c, 0x6e, 0x6c, 0x71, 0x62, 0x72, 0x52, 0x03, 0xe0, 0x3f, 0x57, 0x59, 0xc7, 0x73, 0xef, 0x53, + 0xc9, 0xd0, 0x17, 0x43, 0x48, 0x5d, 0xa1, 0xb9, 0x23, 0xc4, 0xb6, 0x5c, 0xa3, 0x37, 0x35, 0x31, + 0xe4, 0x31, 0x14, 0xf9, 0xaf, 0x35, 0xdf, 0x73, 0x23, 0xbe, 0x5e, 0xcc, 0x19, 0xae, 0xca, 0x24, + 0x5a, 0x16, 0x80, 0x2e, 0x62, 0x51, 0xc0, 0x81, 0xc2, 0x6a, 0xc5, 0xa4, 0x04, 0x93, 0x4d, 0x18, + 0xdb, 0x0c, 0xfc, 0x66, 0xa7, 0x11, 0xe1, 0x2e, 0xe3, 0x3c, 0x4e, 0xfc, 0x44, 0x94, 0xa3, 0x61, + 0xb8, 0x4e, 0xda, 0x1c, 0x50, 0x67, 0xeb, 0x82, 0xae, 0x13, 0x8d, 0x90, 0x54, 0x61, 0x68, 0xd3, + 0x6f, 0xb9, 0x8d, 0x67, 0xa5, 0x0b, 0x58, 0xe9, 0x69, 0x29, 0x0c, 0x81, 0xb2, 0xaa, 0xb8, 0xa5, + 0x6d, 0x23, 0x48, 0xdf, 0xd2, 0x72, 0x22, 0x52, 0x81, 0x89, 0xcf, 0xd8, 0x80, 0x71, 0x7d, 0xcf, + 0x73, 0xdc, 0x80, 0x96, 0x2e, 0x62, 0xbf, 0xa0, 0x1b, 0xff, 0x87, 0x3a, 0x42, 0x1f, 0xce, 0x06, + 0x07, 0x59, 0x81, 0xd3, 0x2b, 0x61, 0x2d, 0x0a, 0xdc, 0x36, 0x5d, 0x73, 0x3c, 0x67, 0x8f, 0x36, + 0x4b, 0x97, 0x62, 0x3f, 0xba, 0x1b, 0xd6, 0x43, 0xc4, 0xd5, 0x0f, 0x38, 0x52, 0xf7, 0xa3, 0x27, + 0xf8, 0xc8, 0xe7, 0x30, 0xbd, 0xf4, 0x4d, 0xc4, 0x46, 0x4c, 0xab, 0xd2, 0x69, 0xba, 0x51, 0x2d, + 0xf2, 0x03, 0x67, 0x8f, 0x96, 0xca, 0x28, 0xef, 0x95, 0xa3, 0xc3, 0xf2, 0x65, 0x2a, 0xf0, 0x75, + 0x87, 0x11, 0xd4, 0x43, 0x4e, 0xa1, 0x9f, 0x8f, 0x67, 0x49, 0x60, 0xda, 0xaf, 0x75, 0xda, 0x6c, + 0xb7, 0x8d, 0xda, 0xbf, 0x6c, 0x68, 0x5f, 0xc3, 0x70, 0xed, 0x87, 0x1c, 0x90, 0xd2, 0xbe, 0x46, + 0x48, 0x6c, 0x20, 0xf7, 0x7d, 0xd7, 0xab, 0x34, 0x22, 0xf7, 0x09, 0x15, 0x16, 0x73, 0x58, 0xba, + 0x82, 0x35, 0x45, 0x9f, 0xff, 0x2f, 0xfa, 0xae, 0x57, 0x77, 0x10, 0x5d, 0x0f, 0x05, 0x5e, 0xff, + 0x46, 0xd2, 0xdc, 0xe4, 0xfb, 0x70, 0x76, 0xcd, 0xdf, 0x75, 0x5b, 0x94, 0x4f, 0x39, 0x5c, 0x2d, + 0xe8, 0xbf, 0xb4, 0x50, 0x2e, 0xfa, 0xfc, 0x0f, 0x90, 0xa2, 0x2e, 0x66, 0xab, 0x03, 0x45, 0xa3, + 0xfb, 0xfc, 0xb3, 0xa5, 0x90, 0x25, 0x18, 0xc7, 0xef, 0xb2, 0x85, 0x3f, 0xc3, 0xd2, 0x55, 0x34, + 0xe9, 0xae, 0x24, 0x76, 0x69, 0x37, 0x97, 0x34, 0x9a, 0x25, 0x2f, 0x0a, 0x9e, 0xd9, 0x06, 0x1b, + 0xf9, 0x18, 0xe6, 0x92, 0xc3, 0x7b, 0xc1, 0xf7, 0x1e, 0xb9, 0x7b, 0x9d, 0x80, 0x36, 0x4b, 0xaf, + 0xb0, 0xaa, 0xda, 0x5d, 0x28, 0xc8, 0x57, 0x30, 0x83, 0x6b, 0x5d, 0xc5, 0xf3, 0xbd, 0x67, 0x07, + 0xee, 0x8f, 0x70, 0xff, 0xcc, 0xb6, 0xbd, 0xd7, 0x70, 0xdb, 0x7b, 0xed, 0xe8, 0xb0, 0x7c, 0x05, + 0xd7, 0xc4, 0xba, 0xa3, 0x53, 0x24, 0xbc, 0xd6, 0xd9, 0x32, 0xe6, 0x1e, 0xc2, 0x99, 0x54, 0xfd, + 0x49, 0x11, 0xfa, 0x1f, 0x8b, 0xf3, 0xd9, 0x51, 0x9b, 0xfd, 0x49, 0xde, 0x80, 0xc1, 0x27, 0xcc, + 0x50, 0xc3, 0xed, 0x48, 0x7c, 0xe2, 0xa7, 0xb1, 0xae, 0x78, 0x8f, 0x7c, 0x9b, 0x13, 0xbd, 0xdf, + 0xf7, 0x6e, 0xe1, 0xfe, 0xc0, 0xc8, 0x58, 0x71, 0x9c, 0x1f, 0xab, 0xdf, 0x1f, 0x18, 0x99, 0x28, + 0x4e, 0x5a, 0x15, 0x38, 0x9d, 0xa0, 0x27, 0x25, 0x18, 0xa6, 0x1e, 0xdb, 0xfc, 0x37, 0xf9, 0x86, + 0xc8, 0x96, 0x3f, 0xc9, 0x34, 0x0c, 0xb6, 0xdc, 0x03, 0x37, 0xc2, 0x02, 0x07, 0x6d, 0xfe, 0xc3, + 0xfa, 0xed, 0x02, 0x90, 0xf4, 0x7a, 0x44, 0x6e, 0x25, 0xc4, 0xf0, 0xad, 0xaf, 0x00, 0xe9, 0x07, + 0x07, 0x52, 0xfa, 0x67, 0x30, 0xc5, 0x07, 0x84, 0x5c, 0x39, 0xb5, 0xb2, 0xf8, 0x8c, 0x9d, 0x81, + 0xd6, 0x9d, 0x4d, 0x02, 0x8d, 0xeb, 0xec, 0x2a, 0x56, 0xad, 0x03, 0x33, 0x99, 0x2b, 0x11, 0x59, + 0x83, 0x99, 0x03, 0xdf, 0x8b, 0xf6, 0x5b, 0xcf, 0xe4, 0x42, 0x24, 0x4a, 0x2b, 0x60, 0x69, 0x38, + 0xf9, 0x66, 0x12, 0xd8, 0x53, 0x02, 0x2c, 0x24, 0x62, 0x39, 0xc2, 0xe9, 0x24, 0x5b, 0x62, 0xd9, + 0x70, 0x26, 0x35, 0xa1, 0x93, 0x8f, 0x60, 0xbc, 0x81, 0xc6, 0x9d, 0x51, 0x12, 0x5f, 0xce, 0x34, + 0xb8, 0xfe, 0xad, 0x72, 0x38, 0x6f, 0xca, 0x3f, 0x2b, 0xc0, 0x6c, 0xce, 0x54, 0x7e, 0x72, 0x55, + 0x7f, 0x01, 0x67, 0x0f, 0x9c, 0x6f, 0xea, 0x01, 0xda, 0xee, 0xf5, 0xc0, 0xf1, 0x12, 0xda, 0xc6, + 0x69, 0x2a, 0x9b, 0x42, 0x8f, 0x6d, 0x3a, 0x70, 0xbe, 0xb1, 0x91, 0xc0, 0x66, 0x78, 0x5e, 0xcf, + 0x4f, 0x61, 0xc2, 0x98, 0xbc, 0x4f, 0x5c, 0x39, 0xeb, 0x0e, 0x9c, 0x59, 0xa4, 0x2d, 0x1a, 0xd1, + 0x63, 0xfb, 0xec, 0xac, 0x4d, 0x80, 0x1a, 0x3d, 0x70, 0xda, 0xfb, 0x3e, 0xdb, 0xd4, 0x57, 0xf5, + 0x5f, 0xc2, 0xe7, 0x43, 0xa4, 0x79, 0x22, 0x11, 0x3b, 0x6f, 0xf2, 0x8d, 0x7e, 0xa8, 0x28, 0x6d, + 0x8d, 0xcb, 0xfa, 0xf7, 0x7d, 0x40, 0xc4, 0xec, 0x1b, 0x50, 0xe7, 0x40, 0x56, 0xe3, 0x3d, 0x18, + 0xe7, 0x16, 0x3a, 0x07, 0x63, 0x75, 0xc6, 0xe6, 0xa7, 0xc4, 0x97, 0xa7, 0xa3, 0x96, 0x4f, 0xd9, + 0x06, 0x29, 0x63, 0xb5, 0x29, 0x77, 0x2d, 0x20, 0x6b, 0x9f, 0xc1, 0xaa, 0xa3, 0x18, 0xab, 0xfe, + 0x9b, 0x7c, 0x02, 0x93, 0x0b, 0xfe, 0x41, 0x9b, 0xe9, 0x44, 0x30, 0xf7, 0x0b, 0xb7, 0x8d, 0x28, + 0xd7, 0x40, 0x2e, 0x9f, 0xb2, 0x13, 0xe4, 0x64, 0x1d, 0xa6, 0xee, 0xb6, 0x3a, 0xe1, 0x7e, 0xc5, + 0x6b, 0x2e, 0xb4, 0xfc, 0x50, 0x4a, 0x19, 0x10, 0x96, 0x96, 0x98, 0x3b, 0xd3, 0x14, 0xcb, 0xa7, + 0xec, 0x2c, 0x46, 0x72, 0x0d, 0x06, 0x97, 0x9e, 0xb0, 0x39, 0x5d, 0x46, 0xb8, 0x88, 0x00, 0xbc, + 0x0d, 0x8f, 0x6e, 0x3c, 0x5a, 0x3e, 0x65, 0x73, 0x6c, 0x75, 0x14, 0x86, 0xa5, 0x75, 0x7f, 0x8b, + 0xed, 0xb7, 0x95, 0x3a, 0x6b, 0x91, 0x13, 0x75, 0x42, 0x32, 0x07, 0x23, 0xdb, 0x6d, 0x66, 0x74, + 0x4a, 0xb7, 0x88, 0xad, 0x7e, 0x5b, 0x6f, 0x98, 0x9a, 0x26, 0x17, 0x20, 0xf6, 0xe9, 0x0a, 0x62, + 0xcd, 0xc9, 0xbb, 0x6c, 0x2a, 0xb7, 0x3b, 0xb5, 0x51, 0x6e, 0x5f, 0xa2, 0xdc, 0x62, 0x52, 0xd7, + 0xd6, 0x4c, 0xa6, 0xf2, 0xac, 0xcf, 0xe1, 0xd2, 0x76, 0x3b, 0xa4, 0x41, 0x54, 0x69, 0xb7, 0x5b, + 0x6e, 0x83, 0x9f, 0x90, 0xa1, 0x17, 0x40, 0x0e, 0x96, 0x77, 0x60, 0x88, 0x03, 0xc4, 0x30, 0x91, + 0x63, 0xb0, 0xd2, 0x6e, 0x0b, 0xdf, 0xc3, 0x9b, 0x7c, 0xe7, 0xcf, 0xbd, 0x09, 0xb6, 0xa0, 0xb6, + 0x7e, 0xa3, 0x00, 0x97, 0xf8, 0x17, 0x90, 0x2b, 0xfa, 0x3b, 0x30, 0x8a, 0xf1, 0x6f, 0x6d, 0xa7, + 0x21, 0xbf, 0x09, 0x1e, 0x08, 0x28, 0x81, 0x76, 0x8c, 0xd7, 0x22, 0x0b, 0xfb, 0xf2, 0x23, 0x0b, + 0xe5, 0x07, 0xd6, 0x9f, 0xf9, 0x81, 0x7d, 0x06, 0x96, 0xa8, 0x51, 0xab, 0x95, 0xaa, 0x54, 0xf8, + 0x3c, 0xb5, 0xb2, 0xfe, 0x7b, 0x1f, 0xcc, 0xde, 0xa3, 0x1e, 0x0d, 0x1c, 0x6c, 0xa7, 0xe1, 0xe5, + 0xd2, 0x23, 0x8c, 0x0a, 0x5d, 0x23, 0x8c, 0xca, 0xd2, 0x6f, 0xd8, 0x87, 0x7e, 0xc3, 0x54, 0xb8, + 0x14, 0xb3, 0x45, 0xb7, 0xed, 0x15, 0xd1, 0x2c, 0xb4, 0x45, 0x3b, 0x81, 0xcb, 0x4f, 0x19, 0x56, + 0xe2, 0xe8, 0xa4, 0x81, 0x9e, 0x3e, 0x87, 0x29, 0x11, 0xad, 0x31, 0x2c, 0xa2, 0x93, 0xcc, 0x98, + 0xa4, 0x75, 0x18, 0xe2, 0xee, 0x4e, 0x3c, 0xdb, 0x1a, 0x9b, 0xbf, 0x21, 0xbe, 0xa9, 0x9c, 0x06, + 0x0a, 0xdf, 0x28, 0x2e, 0xec, 0x7c, 0x08, 0x44, 0x08, 0xb0, 0x85, 0x94, 0xb9, 0xcf, 0x60, 0x4c, + 0x23, 0x39, 0xce, 0xda, 0xaf, 0xdc, 0xae, 0x6c, 0x3b, 0xea, 0xed, 0x71, 0x0f, 0xae, 0xb6, 0xf6, + 0x5b, 0x1f, 0x40, 0x29, 0x5d, 0x1b, 0xe1, 0x6a, 0xeb, 0xe5, 0xd9, 0xb3, 0x16, 0x61, 0xfa, 0x1e, + 0x8d, 0x70, 0xe0, 0xe2, 0x47, 0xa4, 0x45, 0xd9, 0x25, 0xbe, 0x33, 0x39, 0xab, 0x22, 0x90, 0x0d, + 0x30, 0xed, 0x2b, 0xad, 0xc1, 0x4c, 0x42, 0x8a, 0x28, 0xff, 0x7d, 0x18, 0x16, 0x20, 0x35, 0xa3, + 0x8a, 0x50, 0x5d, 0xba, 0x2b, 0x10, 0x3b, 0xf3, 0x7c, 0xdc, 0x0a, 0xc9, 0xb6, 0x64, 0xb0, 0xf6, + 0xe1, 0x2c, 0x5b, 0x66, 0x63, 0xa9, 0x6a, 0x38, 0x9e, 0x87, 0xd1, 0x36, 0xdb, 0x28, 0x84, 0xee, + 0x8f, 0xf8, 0x30, 0x1a, 0xb4, 0x47, 0x18, 0xa0, 0xe6, 0xfe, 0x88, 0x92, 0x8b, 0x00, 0x88, 0xc4, + 0x66, 0x8a, 0x59, 0x00, 0xc9, 0xb9, 0x2b, 0x93, 0x00, 0xc6, 0xe8, 0xf1, 0x71, 0x63, 0xe3, 0xdf, + 0x56, 0x00, 0xb3, 0xa9, 0x92, 0x44, 0x03, 0x6e, 0xc1, 0x88, 0xdc, 0x1f, 0x27, 0x0e, 0x19, 0xf4, + 0x16, 0xd8, 0x8a, 0x88, 0xbc, 0x0a, 0xa7, 0x3d, 0xfa, 0x4d, 0x54, 0x4f, 0xd5, 0x61, 0x82, 0x81, + 0x37, 0x65, 0x3d, 0xac, 0x5f, 0x40, 0xc7, 0x72, 0xcd, 0xf3, 0x9f, 0x3e, 0x6a, 0x39, 0x8f, 0x69, + 0xaa, 0xe0, 0x8f, 0x60, 0xa4, 0xd6, 0xbb, 0x60, 0xfe, 0xf9, 0xc8, 0xc2, 0x6d, 0xc5, 0x62, 0xb5, + 0x60, 0x8e, 0x35, 0xa9, 0x56, 0x59, 0x5b, 0x5d, 0x69, 0x6e, 0x7e, 0xdb, 0x0a, 0x7c, 0x02, 0xe7, + 0x33, 0x4b, 0xfb, 0xb6, 0x95, 0xf8, 0x07, 0x03, 0x30, 0xcb, 0x17, 0x93, 0xf4, 0x08, 0x3e, 0xfe, + 0x54, 0xf3, 0x73, 0x39, 0xef, 0xbd, 0x9d, 0x71, 0xde, 0x8b, 0x2c, 0xfa, 0x79, 0xaf, 0x71, 0xca, + 0xfb, 0x6e, 0xf6, 0x29, 0x2f, 0x3a, 0xa1, 0xcc, 0x53, 0xde, 0xe4, 0xd9, 0xee, 0x52, 0xfe, 0xd9, + 0x2e, 0x1e, 0x3c, 0x65, 0x9c, 0xed, 0x66, 0x9d, 0xe8, 0x26, 0x02, 0xa5, 0x46, 0x5e, 0x6e, 0xa0, + 0xd4, 0xab, 0x30, 0x5c, 0x69, 0xb7, 0xb5, 0xc0, 0x43, 0xec, 0x1e, 0xa7, 0xdd, 0xe6, 0xca, 0x93, + 0x48, 0x39, 0xcf, 0x43, 0xc6, 0x3c, 0xff, 0x1e, 0xc0, 0x02, 0x5e, 0x8f, 0xc0, 0x8e, 0x1b, 0x43, + 0x0a, 0xdc, 0xe1, 0xf3, 0x4b, 0x13, 0xd8, 0x71, 0xba, 0x7b, 0x25, 0x26, 0xe6, 0x1b, 0x7b, 0x6b, + 0x07, 0x4a, 0xe9, 0xe1, 0xf3, 0x12, 0xa6, 0xae, 0xdf, 0x2f, 0xc0, 0x45, 0xb1, 0xc9, 0x49, 0x7c, + 0xe0, 0x27, 0x1f, 0x9d, 0x6f, 0xc3, 0xb8, 0xe0, 0xdd, 0x8a, 0x3f, 0x04, 0x7e, 0xc0, 0x2e, 0x27, + 0x63, 0x3e, 0xa3, 0x1b, 0x64, 0xe4, 0x6d, 0x18, 0xc1, 0x3f, 0xe2, 0x83, 0x21, 0xa6, 0x99, 0x51, + 0x24, 0xad, 0x27, 0x8f, 0x87, 0x14, 0xa9, 0xf5, 0x35, 0x5c, 0xca, 0xab, 0xf8, 0x4b, 0xd0, 0xcb, + 0xbf, 0x2e, 0xc0, 0x79, 0x21, 0xde, 0x98, 0x2a, 0x9e, 0x6b, 0xd5, 0x39, 0x41, 0xb8, 0xf2, 0x7d, + 0x18, 0x63, 0x05, 0xca, 0x7a, 0xf7, 0x8b, 0xa5, 0x55, 0x58, 0x0e, 0x31, 0x66, 0xd1, 0x89, 0x1c, + 0x11, 0x7e, 0xe3, 0x1c, 0xb4, 0xa4, 0x67, 0xc4, 0xd6, 0x99, 0xad, 0x2f, 0xe1, 0x42, 0x76, 0x13, + 0x5e, 0x82, 0x7e, 0xee, 0xc3, 0x5c, 0xc6, 0xa2, 0xf0, 0x7c, 0x6b, 0xf2, 0x17, 0x70, 0x3e, 0x53, + 0xd6, 0x4b, 0xa8, 0xe6, 0x32, 0xdb, 0x71, 0x44, 0x2f, 0xa1, 0x0b, 0xad, 0x87, 0x70, 0x2e, 0x43, + 0xd2, 0x4b, 0xa8, 0xe2, 0x3d, 0x98, 0x55, 0x3b, 0xed, 0x17, 0xaa, 0xe1, 0x1a, 0x5c, 0xe4, 0x82, + 0x5e, 0x4e, 0xaf, 0x3c, 0x80, 0xf3, 0x42, 0xdc, 0x4b, 0xd0, 0xde, 0x32, 0x5c, 0x88, 0x0d, 0xea, + 0x8c, 0x7d, 0xd2, 0xb1, 0x27, 0x19, 0x6b, 0x15, 0x2e, 0xc7, 0x92, 0x72, 0x36, 0x0d, 0xc7, 0x97, + 0xc6, 0xb7, 0x83, 0x71, 0x2f, 0xbd, 0x94, 0x1e, 0x7d, 0x08, 0x67, 0x0d, 0xa1, 0x2f, 0x6d, 0xab, + 0xb4, 0x02, 0x53, 0x5c, 0xb0, 0xb9, 0x75, 0x9e, 0xd7, 0xb7, 0xce, 0x63, 0xf3, 0x67, 0x62, 0x91, + 0x08, 0xde, 0x79, 0x33, 0x63, 0x37, 0xbd, 0x86, 0xbb, 0x69, 0x49, 0x12, 0xd7, 0xf0, 0x6d, 0x18, + 0xe2, 0x10, 0x51, 0xbf, 0x0c, 0x61, 0xdc, 0x58, 0xe0, 0x6c, 0x82, 0xd8, 0xfa, 0x3e, 0x5c, 0xe4, + 0x96, 0x68, 0x7c, 0x50, 0x69, 0x5a, 0x8b, 0x1f, 0x25, 0x0c, 0xd1, 0x73, 0x42, 0x6e, 0x92, 0x3e, + 0xc7, 0x1e, 0xdd, 0x95, 0x63, 0x3b, 0x4f, 0xfe, 0xb1, 0xae, 0xae, 0x49, 0x03, 0xb3, 0x2f, 0xd3, + 0xc0, 0xbc, 0x0a, 0x57, 0x94, 0x81, 0x99, 0x2c, 0x46, 0x0e, 0x2d, 0xeb, 0x4b, 0x38, 0xcf, 0x1b, + 0x2a, 0x43, 0x0a, 0xcd, 0x6a, 0x7c, 0x90, 0x68, 0xe6, 0xac, 0x68, 0xa6, 0x49, 0x9d, 0xd3, 0xc8, + 0xbf, 0x53, 0x90, 0x9f, 0x5c, 0xb6, 0xf0, 0x9f, 0xb7, 0xc5, 0xbd, 0x0e, 0x65, 0xa5, 0x10, 0xb3, + 0x46, 0xcf, 0x67, 0x6e, 0xaf, 0xc1, 0x8c, 0x2e, 0xc6, 0x6d, 0xd0, 0x9d, 0x3b, 0x78, 0x82, 0xf4, + 0x16, 0xfb, 0x2c, 0x10, 0x20, 0x87, 0x5d, 0x29, 0x43, 0x6f, 0x48, 0x6f, 0x2b, 0x4a, 0xab, 0x0e, + 0x17, 0xd2, 0x5d, 0xe1, 0x36, 0xe4, 0x7d, 0x02, 0xf2, 0x09, 0xfb, 0x84, 0x11, 0x22, 0x3a, 0x23, + 0x57, 0xa8, 0xfc, 0x8e, 0x39, 0xbb, 0xe4, 0xb2, 0x2c, 0x39, 0xd5, 0x24, 0xda, 0xcf, 0x4a, 0x97, + 0xe3, 0xe1, 0xc7, 0x40, 0x24, 0x6a, 0xa1, 0x66, 0xcb, 0xa2, 0xcf, 0x41, 0xff, 0x42, 0xcd, 0x16, + 0x17, 0x99, 0x70, 0x27, 0xd8, 0x08, 0x03, 0x9b, 0xc1, 0x92, 0x3b, 0xf2, 0xbe, 0x63, 0xec, 0xc8, + 0xef, 0x0f, 0x8c, 0xf4, 0x17, 0x07, 0x6c, 0x52, 0x73, 0xf7, 0xbc, 0x87, 0x6e, 0xb4, 0xaf, 0x0a, + 0xac, 0x58, 0x5f, 0xc1, 0x94, 0x51, 0xbc, 0xf8, 0x8a, 0xbb, 0xde, 0xc0, 0x62, 0xfb, 0xd9, 0x85, + 0x0a, 0x86, 0xd5, 0xa0, 0xcb, 0x62, 0x9c, 0xcf, 0x37, 0x0d, 0xa7, 0x8e, 0xd7, 0x7b, 0x6d, 0x89, + 0xb4, 0x7e, 0x77, 0x40, 0x93, 0xae, 0xdd, 0x6b, 0xeb, 0xd2, 0xba, 0x3b, 0x00, 0x7c, 0x84, 0x68, + 0x8d, 0x63, 0x1b, 0xc0, 0x31, 0x11, 0xad, 0xc2, 0xa7, 0x64, 0x5b, 0x23, 0x3a, 0xee, 0xbd, 0x37, + 0x11, 0x7f, 0xcc, 0x99, 0xe4, 0x55, 0x4f, 0x15, 0x7f, 0x2c, 0x44, 0x87, 0xb6, 0x4e, 0x44, 0xbe, + 0x9f, 0xbc, 0x9c, 0x31, 0x88, 0x07, 0x56, 0xaf, 0xc8, 0x13, 0xec, 0x74, 0xdb, 0x4e, 0x76, 0x3f, + 0xe3, 0x29, 0xcc, 0x30, 0x5e, 0xf7, 0x11, 0x1a, 0x16, 0x4b, 0xdf, 0x44, 0xd4, 0xe3, 0x73, 0xfb, + 0x10, 0x96, 0x73, 0xad, 0x4b, 0x39, 0x31, 0xb1, 0xf0, 0xbf, 0xc7, 0x72, 0xea, 0x54, 0xe1, 0xec, + 0x6c, 0xf9, 0x38, 0x88, 0xec, 0xd5, 0x25, 0xaf, 0xd9, 0xf6, 0x5d, 0x65, 0x30, 0xf1, 0x41, 0x14, + 0xb4, 0xea, 0x54, 0xc0, 0x6d, 0x9d, 0xc8, 0x7a, 0xb5, 0x6b, 0x54, 0xfb, 0x08, 0x0c, 0x6c, 0x2d, + 0x6c, 0xad, 0x16, 0x0b, 0xd6, 0x2d, 0x00, 0xad, 0x24, 0x80, 0xa1, 0xf5, 0x0d, 0x7b, 0xad, 0xb2, + 0x5a, 0x3c, 0x45, 0x66, 0xe0, 0xcc, 0xc3, 0x95, 0xf5, 0xc5, 0x8d, 0x87, 0xb5, 0x7a, 0x6d, 0xad, + 0x62, 0x6f, 0x2d, 0x54, 0xec, 0xc5, 0x62, 0xc1, 0xfa, 0x1a, 0xa6, 0xcd, 0x16, 0xbe, 0xd4, 0x41, + 0x18, 0xc1, 0x94, 0xda, 0xcf, 0xdc, 0x7f, 0xb8, 0xa5, 0x45, 0xb4, 0x0a, 0xe3, 0x2f, 0x19, 0x99, + 0x25, 0xcc, 0x44, 0xf1, 0x19, 0x69, 0x44, 0xe4, 0x75, 0xbe, 0x2d, 0x48, 0xde, 0x5c, 0x66, 0xdb, + 0x82, 0x7a, 0xbc, 0x2f, 0xc0, 0xa9, 0xef, 0x7b, 0x30, 0x6d, 0x96, 0x7a, 0x5c, 0x2f, 0xd5, 0x2b, + 0x18, 0xea, 0xab, 0x5d, 0x6b, 0x22, 0x44, 0x3f, 0x36, 0x10, 0x33, 0xeb, 0xf7, 0xa0, 0x28, 0xa8, + 0xe2, 0x95, 0xf7, 0xaa, 0x74, 0x23, 0x16, 0x32, 0x2e, 0x61, 0xca, 0xa0, 0x74, 0x1f, 0x8a, 0x6c, + 0xc6, 0x14, 0x9c, 0xbc, 0x80, 0x69, 0x18, 0x5c, 0x8d, 0x8f, 0x73, 0x6c, 0xfe, 0x03, 0x6f, 0xf7, + 0x44, 0x4e, 0x10, 0xc9, 0x38, 0xb8, 0x51, 0x5b, 0xfd, 0x26, 0xaf, 0xc3, 0xd0, 0x5d, 0xb7, 0x15, + 0x09, 0xd7, 0x48, 0xbc, 0xc8, 0x33, 0xb1, 0x1c, 0x61, 0x0b, 0x02, 0xcb, 0x86, 0x33, 0x5a, 0x81, + 0x27, 0xa8, 0x2a, 0x29, 0xc1, 0xf0, 0x3a, 0xfd, 0x46, 0x2b, 0x5f, 0xfe, 0xb4, 0xde, 0x81, 0x33, + 0x22, 0xc6, 0x50, 0x53, 0xd3, 0x15, 0x71, 0x57, 0xbc, 0x60, 0x5c, 0x58, 0x15, 0x22, 0x11, 0xc5, + 0xf8, 0xb6, 0xdb, 0xcd, 0xe7, 0xe4, 0x63, 0x0b, 0xc5, 0x09, 0xf9, 0x5e, 0x93, 0xa7, 0x40, 0xbd, + 0xba, 0xf3, 0x6f, 0xf4, 0x41, 0x29, 0xe1, 0x65, 0x58, 0xd8, 0x77, 0x5a, 0x2d, 0xea, 0xed, 0x51, + 0x72, 0x1d, 0x06, 0xb6, 0x36, 0xb6, 0x36, 0x85, 0x97, 0x54, 0x46, 0x17, 0x30, 0x90, 0xa2, 0xb1, + 0x91, 0x82, 0x3c, 0x80, 0x33, 0x32, 0x8a, 0x58, 0xa1, 0x44, 0x0f, 0x5d, 0xec, 0x1e, 0x93, 0x9c, + 0xe6, 0x23, 0x6f, 0x09, 0x97, 0xc8, 0x0f, 0x3b, 0x6e, 0x40, 0x9b, 0xe8, 0xf9, 0x89, 0x8f, 0xea, + 0x35, 0x8c, 0xad, 0x93, 0x91, 0xef, 0xc1, 0x78, 0xad, 0xb6, 0x11, 0x97, 0x3e, 0x68, 0x9c, 0x10, + 0xe9, 0x28, 0xdb, 0x20, 0xe4, 0x57, 0x82, 0xad, 0x3f, 0x28, 0xc0, 0x6c, 0x8e, 0xbb, 0x85, 0xbc, + 0x6e, 0xe8, 0x61, 0x4a, 0xd3, 0x83, 0x24, 0x59, 0x3e, 0x25, 0x14, 0xb1, 0xa0, 0xc5, 0x64, 0xf7, + 0x9f, 0x20, 0x26, 0x7b, 0xf9, 0x54, 0x1c, 0x87, 0x4d, 0x5e, 0x85, 0xfe, 0x5a, 0x6d, 0x43, 0xb8, + 0xd5, 0x49, 0xdc, 0x02, 0x8d, 0x98, 0x11, 0x54, 0x01, 0x46, 0x24, 0xc8, 0x3a, 0x0d, 0x13, 0x46, + 0xc7, 0x58, 0x16, 0x8c, 0xeb, 0x35, 0x64, 0xbd, 0xbf, 0xe0, 0x37, 0x55, 0xef, 0xb3, 0xbf, 0xad, + 0x1f, 0x9b, 0x3a, 0x23, 0x17, 0x01, 0xe4, 0x79, 0xad, 0xdb, 0x94, 0x27, 0x3f, 0x02, 0xb2, 0xd2, + 0x24, 0x57, 0x60, 0x3c, 0xa0, 0x4d, 0x37, 0xa0, 0x8d, 0xa8, 0xde, 0x09, 0xc4, 0xc5, 0x18, 0x7b, + 0x4c, 0xc2, 0xb6, 0x83, 0x16, 0xf9, 0x0e, 0x0c, 0xf1, 0x83, 0x64, 0xd1, 0x7a, 0x69, 0x24, 0xd4, + 0x6a, 0x1b, 0x6b, 0x77, 0x2b, 0xfc, 0xa0, 0xdb, 0x16, 0x24, 0x56, 0x15, 0xc6, 0xb4, 0x56, 0xf5, + 0x2a, 0x7d, 0x1a, 0x06, 0x75, 0x2f, 0x25, 0xff, 0x61, 0xfd, 0x66, 0x01, 0xa6, 0x71, 0x18, 0xec, + 0xb9, 0x6c, 0x79, 0x88, 0xdb, 0x32, 0x6f, 0x74, 0xda, 0x05, 0xa3, 0xd3, 0x12, 0xb4, 0xaa, 0xf7, + 0xde, 0x4f, 0xf5, 0xde, 0x85, 0xac, 0xde, 0xc3, 0x29, 0xc0, 0xf5, 0x3d, 0xbd, 0xd3, 0xf4, 0xe3, + 0xba, 0xdf, 0x2e, 0xc0, 0x94, 0x56, 0x27, 0xd5, 0xc0, 0x3b, 0x46, 0x95, 0xce, 0x67, 0x54, 0x29, + 0x35, 0x9e, 0xaa, 0xa9, 0x1a, 0xbd, 0xd2, 0xad, 0x46, 0x59, 0xc3, 0xc9, 0x18, 0x26, 0x7f, 0x5e, + 0x80, 0x99, 0x4c, 0x1d, 0x90, 0xb3, 0x6c, 0xff, 0xdf, 0x08, 0x68, 0x24, 0x34, 0x2f, 0x7e, 0x31, + 0xf8, 0x4a, 0x18, 0x76, 0x68, 0x20, 0xf4, 0x2e, 0x7e, 0x91, 0x57, 0x60, 0x62, 0x93, 0x06, 0xae, + 0xdf, 0xe4, 0x17, 0x13, 0x78, 0xc4, 0xef, 0x84, 0x6d, 0x02, 0xc9, 0x05, 0x18, 0x55, 0x11, 0xab, + 0xdc, 0x87, 0x6b, 0xc7, 0x00, 0x26, 0x7b, 0xd1, 0xdd, 0xe3, 0x07, 0x3f, 0x8c, 0x59, 0xfc, 0x62, + 0x13, 0xb0, 0xf4, 0xa8, 0x0e, 0xf1, 0x09, 0x58, 0xba, 0x4b, 0xcf, 0xc2, 0xd0, 0x67, 0x36, 0x8e, + 0x63, 0xcc, 0x39, 0x61, 0x8b, 0x5f, 0x64, 0x12, 0x43, 0xcb, 0xf1, 0x5e, 0x0c, 0x86, 0x94, 0xbf, + 0x0f, 0xd3, 0x59, 0x7a, 0xcd, 0xfa, 0x0a, 0x04, 0x6f, 0x9f, 0xe2, 0xfd, 0x12, 0xa6, 0x2a, 0xcd, + 0x66, 0x3c, 0x5c, 0x79, 0xaf, 0xf2, 0x79, 0x82, 0xfb, 0x34, 0xc5, 0xb6, 0x76, 0x60, 0xc5, 0x73, + 0x23, 0x7b, 0x6a, 0xe9, 0x1b, 0x37, 0x8c, 0x5c, 0x6f, 0x4f, 0x73, 0xbc, 0xda, 0x67, 0xd7, 0xe9, + 0xd3, 0x8c, 0x21, 0xc0, 0x76, 0x1c, 0xa6, 0x6c, 0x0e, 0xcf, 0x10, 0x3e, 0xad, 0x89, 0x8d, 0xa7, + 0xae, 0x59, 0x53, 0x6e, 0x8c, 0xe8, 0xaf, 0x34, 0x1e, 0x5b, 0xdf, 0x83, 0xb3, 0x7c, 0xda, 0xef, + 0x56, 0x79, 0x51, 0x6d, 0xdd, 0x4f, 0x6c, 0xbd, 0x2b, 0x3d, 0x39, 0x5d, 0x6b, 0x66, 0x8f, 0x1b, + 0x75, 0xc1, 0x22, 0xff, 0x5b, 0x01, 0xe6, 0x12, 0xac, 0xb5, 0x67, 0x5e, 0x43, 0xae, 0x39, 0xaf, + 0x26, 0x43, 0xf7, 0x71, 0xaf, 0xc4, 0x1d, 0xa4, 0x6e, 0x53, 0x45, 0xef, 0x93, 0x5b, 0x00, 0x9c, + 0x59, 0xdb, 0xe2, 0xe0, 0xf1, 0x80, 0x88, 0x72, 0xc2, 0x4d, 0x8e, 0x46, 0x42, 0x3a, 0x90, 0xa5, + 0x77, 0xf1, 0x8d, 0xf4, 0xf2, 0x9f, 0x63, 0x9e, 0x15, 0x2a, 0xd8, 0xeb, 0x39, 0x8e, 0xf4, 0x2c, + 0xf9, 0xd6, 0xdf, 0xed, 0x87, 0x59, 0xbd, 0x03, 0x9f, 0xa7, 0xad, 0x9b, 0x30, 0xb6, 0xe0, 0x7b, + 0x11, 0xfd, 0x26, 0xd2, 0xf2, 0x5c, 0x10, 0x15, 0x8d, 0xa0, 0x30, 0x62, 0x7b, 0xcd, 0x01, 0x75, + 0xb6, 0xd7, 0x33, 0xa2, 0x35, 0x63, 0x42, 0xb2, 0x00, 0x13, 0xeb, 0xf4, 0x69, 0x4a, 0x81, 0x18, + 0x31, 0xea, 0xd1, 0xa7, 0x75, 0x4d, 0x89, 0x7a, 0x18, 0x9f, 0xc1, 0x43, 0x76, 0x61, 0x52, 0x0e, + 0x2e, 0x43, 0x99, 0x73, 0xfa, 0xca, 0x6b, 0x0e, 0x67, 0x9e, 0x07, 0x82, 0x95, 0x90, 0xa3, 0xc3, + 0x84, 0x44, 0xd6, 0x74, 0x5e, 0x22, 0x4f, 0x6d, 0x60, 0x2e, 0xed, 0x1a, 0xc6, 0x88, 0xc7, 0x4d, + 0xa6, 0x34, 0xd0, 0x45, 0x58, 0x9b, 0x50, 0x4a, 0xf7, 0x87, 0x28, 0xed, 0x2d, 0x18, 0xe2, 0x50, + 0xb1, 0x55, 0x92, 0x29, 0x8c, 0x14, 0x35, 0xf7, 0x65, 0x34, 0xc5, 0xaa, 0xc4, 0x61, 0xd6, 0x32, + 0xfa, 0x97, 0x14, 0x8d, 0xda, 0xac, 0xde, 0x4e, 0x76, 0x2f, 0x86, 0x3a, 0xcb, 0xee, 0xd5, 0x63, + 0x71, 0xe4, 0x95, 0x94, 0x05, 0x74, 0xd1, 0xe9, 0x92, 0x44, 0xc5, 0x6e, 0xc0, 0xb0, 0x00, 0x25, + 0x92, 0x2b, 0xc5, 0x9f, 0x9f, 0x24, 0xb0, 0xde, 0x87, 0x73, 0xe8, 0x2f, 0x74, 0xbd, 0xbd, 0x16, + 0xdd, 0x0e, 0x8d, 0x4b, 0x25, 0xbd, 0x3e, 0xeb, 0x0f, 0x61, 0x2e, 0x8b, 0xb7, 0xe7, 0x97, 0xcd, + 0xd3, 0x9d, 0xfc, 0x69, 0x1f, 0x4c, 0xaf, 0x84, 0xfa, 0x86, 0x4b, 0xa5, 0x3c, 0xc9, 0x48, 0xc3, + 0x81, 0x3a, 0x59, 0x3e, 0x95, 0x95, 0x66, 0xe3, 0x2d, 0xed, 0xba, 0x6b, 0x5f, 0xb7, 0xfc, 0x1a, + 0x6c, 0xd9, 0x52, 0x17, 0x5e, 0x5f, 0x85, 0x81, 0x75, 0x36, 0x55, 0xf7, 0x8b, 0xbe, 0xe3, 0x1c, + 0x0c, 0x84, 0xd7, 0x4d, 0xd9, 0x12, 0xc9, 0x7e, 0x90, 0xbb, 0xa9, 0x4b, 0xad, 0x03, 0xbd, 0xf3, + 0x47, 0x2c, 0x9f, 0x4a, 0xdd, 0x6f, 0x7d, 0x07, 0xc6, 0x2a, 0xcd, 0x03, 0x1e, 0x92, 0xe9, 0x7b, + 0x89, 0xcf, 0x52, 0xc3, 0x2c, 0x9f, 0xb2, 0x75, 0x42, 0x72, 0x8d, 0xdf, 0x6a, 0x18, 0xca, 0xc9, + 0xa9, 0xc1, 0x36, 0x6b, 0x95, 0x76, 0xbb, 0x3a, 0x02, 0x43, 0xfc, 0xa2, 0xa5, 0xf5, 0x25, 0xcc, + 0x89, 0x40, 0x1e, 0xee, 0x1d, 0xc5, 0x70, 0x9f, 0x30, 0x8e, 0xd5, 0xea, 0x16, 0x7c, 0x73, 0x09, + 0x00, 0x6d, 0xa1, 0x15, 0xaf, 0x49, 0xbf, 0x11, 0x91, 0x84, 0x1a, 0xc4, 0x7a, 0x1b, 0x46, 0x95, + 0x86, 0x70, 0xc3, 0xaf, 0x2d, 0x76, 0xa8, 0xad, 0x69, 0xe3, 0x16, 0xaf, 0xbc, 0xba, 0x7b, 0xce, + 0x68, 0xbb, 0xc8, 0x92, 0xc3, 0x2d, 0x04, 0x17, 0x66, 0x12, 0x83, 0x20, 0x4e, 0xc2, 0xa0, 0xf6, + 0xe8, 0x3c, 0xd4, 0x51, 0xfd, 0x4e, 0x6e, 0xe1, 0xfb, 0x8e, 0xb5, 0x85, 0xb7, 0xfe, 0x45, 0x1f, + 0x1a, 0x97, 0x29, 0x7d, 0x24, 0xfc, 0x74, 0xba, 0xaf, 0xb0, 0x0a, 0xa3, 0xd8, 0xfa, 0x45, 0x79, + 0x61, 0xb0, 0x7b, 0x1c, 0xca, 0xc8, 0x4f, 0x0e, 0xcb, 0xa7, 0x30, 0xf8, 0x24, 0x66, 0x23, 0x1f, + 0xc3, 0xf0, 0x92, 0xd7, 0x44, 0x09, 0xfd, 0x27, 0x90, 0x20, 0x99, 0x58, 0x9f, 0x60, 0x95, 0xb7, + 0xd8, 0x27, 0xcc, 0xdd, 0x3b, 0xb6, 0x06, 0x89, 0xad, 0xdc, 0xc1, 0x3c, 0x2b, 0x77, 0x28, 0x61, + 0xe5, 0x5a, 0x30, 0xb8, 0x11, 0x34, 0x45, 0x6e, 0x9b, 0xc9, 0xf9, 0x71, 0xa1, 0x38, 0x84, 0xd9, + 0x1c, 0x65, 0xfd, 0x8f, 0x02, 0xcc, 0xde, 0xa3, 0x51, 0xe6, 0x18, 0x32, 0xb4, 0x52, 0x78, 0x61, + 0xad, 0xf4, 0x3d, 0x8f, 0x56, 0x54, 0xab, 0xfb, 0xf3, 0x5a, 0x3d, 0x90, 0xd7, 0xea, 0xc1, 0xfc, + 0x56, 0xdf, 0x83, 0x21, 0xde, 0x54, 0x66, 0xc9, 0xaf, 0x44, 0xf4, 0x20, 0xb6, 0xe4, 0xf5, 0x28, + 0x3a, 0x9b, 0xe3, 0xd8, 0x46, 0x72, 0xd5, 0x09, 0x75, 0x4b, 0x5e, 0xfc, 0xb4, 0x7e, 0x80, 0x57, + 0x8d, 0x57, 0xfd, 0xc6, 0x63, 0xcd, 0x23, 0x3c, 0xcc, 0xbf, 0xd0, 0xe4, 0x09, 0x02, 0xa3, 0xe2, + 0x18, 0x5b, 0x52, 0x90, 0xcb, 0x30, 0xb6, 0xe2, 0xdd, 0xf5, 0x83, 0x06, 0xdd, 0xf0, 0x5a, 0x5c, + 0xfa, 0x88, 0xad, 0x83, 0x84, 0xa7, 0x44, 0x94, 0x10, 0xbb, 0x1f, 0x10, 0x90, 0x70, 0x3f, 0x30, + 0xd8, 0xce, 0xbc, 0xcd, 0x71, 0xc2, 0x11, 0xc3, 0xfe, 0xee, 0x66, 0xb9, 0x2b, 0x13, 0xbf, 0x17, + 0xe1, 0x2e, 0x9c, 0xb3, 0x69, 0xbb, 0xe5, 0xb0, 0x3d, 0xdd, 0x81, 0xcf, 0xe9, 0x55, 0x9b, 0x2f, + 0x67, 0x5c, 0x13, 0x34, 0x63, 0x2a, 0x54, 0x95, 0xfb, 0xba, 0x54, 0xf9, 0x00, 0xae, 0xdc, 0xa3, + 0x91, 0x39, 0xa1, 0xc6, 0xfe, 0x66, 0xd1, 0xf8, 0x65, 0x18, 0x09, 0x4d, 0x5f, 0xb9, 0xbc, 0xf6, + 0x96, 0xc9, 0xb8, 0xf3, 0xa6, 0x3c, 0x4d, 0x12, 0x72, 0xd4, 0x5f, 0xd6, 0x27, 0x50, 0xce, 0x2b, + 0xee, 0x78, 0x21, 0xaf, 0x2e, 0x5c, 0xce, 0x17, 0x20, 0xaa, 0xbb, 0x04, 0xd2, 0xaf, 0x2e, 0x3e, + 0xa1, 0x5e, 0xb5, 0x35, 0x5d, 0xf1, 0xe2, 0x0f, 0xab, 0x2a, 0x83, 0xff, 0x5e, 0xa0, 0xba, 0x75, + 0x3c, 0xb2, 0x36, 0x05, 0xc4, 0x7a, 0xad, 0xc0, 0x88, 0x84, 0x09, 0xbd, 0xce, 0x66, 0xd6, 0x54, + 0x2a, 0xb4, 0x29, 0x05, 0x28, 0x36, 0xeb, 0x07, 0xf2, 0xf8, 0xc6, 0xe4, 0x38, 0xde, 0xbd, 0xd9, + 0xe3, 0x9c, 0xd7, 0x58, 0x3e, 0x9c, 0x33, 0x65, 0xeb, 0x6e, 0xf9, 0xa2, 0xe6, 0x96, 0xe7, 0xde, + 0xf8, 0xcb, 0xa6, 0x9b, 0x58, 0x78, 0x1a, 0x34, 0x10, 0xb9, 0xa4, 0x3b, 0xdf, 0xc7, 0xd3, 0x17, + 0x71, 0x6f, 0xc3, 0x5c, 0x56, 0x81, 0x9a, 0x1d, 0xa8, 0x3c, 0xbc, 0x62, 0xbf, 0xb3, 0x08, 0x97, + 0x64, 0x76, 0x29, 0xdf, 0x8f, 0xc2, 0x28, 0x70, 0xda, 0xb5, 0x46, 0xe0, 0xb6, 0x63, 0x2e, 0x0b, + 0x86, 0x38, 0x44, 0x68, 0x82, 0x1f, 0x85, 0x71, 0x1a, 0x81, 0xb1, 0x7e, 0xa5, 0x00, 0x96, 0x11, + 0xa7, 0x85, 0xfd, 0xbc, 0x19, 0xf8, 0x4f, 0xdc, 0xa6, 0x76, 0xfc, 0xf4, 0xba, 0xe1, 0xfa, 0xe4, + 0x77, 0x12, 0x93, 0x21, 0xe2, 0x62, 0xce, 0xbc, 0x9d, 0x70, 0x47, 0xf2, 0x8d, 0x27, 0xc6, 0x6e, + 0x99, 0x17, 0x22, 0x94, 0x9b, 0xf2, 0x7f, 0x15, 0xe0, 0x6a, 0xd7, 0x3a, 0x88, 0xf6, 0xec, 0x42, + 0x31, 0x89, 0x13, 0x23, 0xa8, 0xac, 0xc5, 0x6d, 0xa4, 0x25, 0xec, 0xdc, 0xe1, 0x71, 0xe8, 0x32, + 0xbe, 0xa9, 0xad, 0x24, 0xa7, 0xe4, 0x9d, 0xbc, 0xf6, 0x98, 0xbf, 0xc2, 0x8f, 0x9c, 0xd6, 0x02, + 0x3a, 0x00, 0xfa, 0xe3, 0x3b, 0x05, 0x11, 0x83, 0xd6, 0x93, 0x69, 0x32, 0x34, 0x62, 0xeb, 0x53, + 0xfc, 0xae, 0xb3, 0x2b, 0x7d, 0xbc, 0x4f, 0x6d, 0x01, 0xae, 0x26, 0x62, 0x07, 0x9e, 0x43, 0x48, + 0x04, 0x33, 0x4c, 0xfd, 0x6c, 0xef, 0x7d, 0x2f, 0xf0, 0x3b, 0xed, 0x9f, 0x4f, 0xaf, 0xff, 0x61, + 0x81, 0x07, 0x73, 0xea, 0xc5, 0x8a, 0x8e, 0x5e, 0x00, 0x88, 0xa1, 0x89, 0xa0, 0x7e, 0x85, 0xd8, + 0xb9, 0xc3, 0x4d, 0x6e, 0x3c, 0x55, 0xd8, 0xe3, 0x02, 0x34, 0xb6, 0x9f, 0x6f, 0x4f, 0xbe, 0x89, + 0x01, 0x03, 0xaa, 0xf4, 0xe3, 0xe9, 0xfd, 0x1d, 0xe9, 0xff, 0x38, 0x21, 0xdf, 0x3e, 0x4c, 0xb3, + 0x19, 0xa0, 0xd2, 0x89, 0xf6, 0xfd, 0xc0, 0x8d, 0xe4, 0xf5, 0x14, 0xb2, 0x29, 0x32, 0x02, 0x70, + 0xae, 0x0f, 0x7f, 0x76, 0x58, 0x7e, 0xf7, 0x24, 0x79, 0x3f, 0xa5, 0xcc, 0x2d, 0x95, 0x45, 0xc0, + 0x9a, 0x85, 0xfe, 0x05, 0x7b, 0x15, 0x27, 0x3c, 0x7b, 0x55, 0x4d, 0x78, 0xf6, 0xaa, 0xf5, 0x17, + 0x7d, 0x50, 0xe6, 0x39, 0x4b, 0x30, 0xce, 0x24, 0xf6, 0x5a, 0x68, 0x81, 0x2b, 0xc7, 0x75, 0x30, + 0x24, 0x72, 0x92, 0xf4, 0x1d, 0x27, 0x27, 0xc9, 0x2f, 0x41, 0x8e, 0xcb, 0xea, 0x18, 0x5e, 0x80, + 0xd7, 0x8e, 0x0e, 0xcb, 0x57, 0x63, 0x2f, 0x00, 0xc7, 0x66, 0xb9, 0x03, 0x72, 0x8a, 0x48, 0xfb, + 0x2f, 0x06, 0x9e, 0xc3, 0x7f, 0x71, 0x1b, 0x86, 0xd1, 0x98, 0x59, 0xd9, 0x14, 0x91, 0x9f, 0x38, + 0x3c, 0x31, 0x43, 0x51, 0xdd, 0xd5, 0xd3, 0x01, 0x4a, 0x32, 0xeb, 0x1f, 0xf4, 0xc1, 0xe5, 0x7c, + 0x9d, 0x8b, 0xba, 0x2d, 0x02, 0xc4, 0x11, 0x2e, 0xdd, 0x22, 0x6a, 0xf0, 0xdb, 0x79, 0x4a, 0x77, + 0x55, 0x44, 0x9b, 0xc6, 0xc7, 0xf6, 0x3e, 0xf2, 0xa6, 0x75, 0xe2, 0x38, 0xc5, 0xb8, 0x80, 0x2d, + 0xb2, 0xd9, 0x0a, 0x90, 0x91, 0xcd, 0x56, 0xc0, 0xc8, 0x2e, 0xcc, 0x6e, 0x06, 0xee, 0x13, 0x27, + 0xa2, 0x0f, 0xe8, 0x33, 0x7e, 0x59, 0x68, 0x49, 0xdc, 0x10, 0xe2, 0xd7, 0xe7, 0xaf, 0x1f, 0x1d, + 0x96, 0x5f, 0x69, 0x73, 0x12, 0xcc, 0x58, 0xc6, 0xef, 0x7e, 0xd6, 0xd3, 0x97, 0x86, 0xf2, 0x04, + 0x59, 0xff, 0xae, 0x00, 0xe7, 0x71, 0x5b, 0x2e, 0xdc, 0xae, 0xb2, 0xf0, 0xe7, 0x0a, 0xac, 0xd4, + 0x1b, 0x28, 0xc6, 0x22, 0x06, 0x56, 0x1a, 0x37, 0xd1, 0x6d, 0x83, 0x8c, 0xac, 0xc0, 0x98, 0xf8, + 0x8d, 0xdf, 0x5f, 0x3f, 0x1a, 0x04, 0x33, 0xda, 0x84, 0x85, 0x43, 0x9d, 0xbb, 0x8a, 0x70, 0x60, + 0x0b, 0x61, 0x78, 0x61, 0xd3, 0xd6, 0x79, 0xad, 0x9f, 0xf6, 0xc1, 0x85, 0x1d, 0x1a, 0xb8, 0x8f, + 0x9e, 0xe5, 0x34, 0x66, 0x03, 0xa6, 0x25, 0x88, 0xe7, 0x2d, 0x31, 0x3e, 0x31, 0x9e, 0xcf, 0x52, + 0x56, 0x55, 0x24, 0x3e, 0x91, 0x5f, 0x5c, 0x26, 0xe3, 0x09, 0x42, 0x26, 0xdf, 0x82, 0x91, 0x44, + 0xe6, 0x20, 0xec, 0x7f, 0xf9, 0x85, 0xc6, 0x5d, 0xb5, 0x7c, 0xca, 0x56, 0x94, 0xe4, 0xd7, 0xf2, + 0x8f, 0xaa, 0x84, 0xeb, 0xa3, 0x97, 0xff, 0x13, 0x3f, 0x58, 0xf6, 0xb1, 0x3a, 0x1a, 0x36, 0xe3, + 0x83, 0x5d, 0x3e, 0x65, 0xe7, 0x95, 0x54, 0x1d, 0x83, 0xd1, 0x0a, 0x9e, 0xdb, 0x31, 0xcb, 0xfd, + 0x7f, 0xf6, 0xc1, 0x25, 0x79, 0xf1, 0x27, 0x47, 0xcd, 0x9f, 0xc3, 0xac, 0x04, 0x55, 0xda, 0x6c, + 0xc3, 0x40, 0x9b, 0xa6, 0xa6, 0x79, 0x4e, 0x59, 0xa9, 0x69, 0x47, 0xd0, 0xc4, 0xca, 0xce, 0x63, + 0x7f, 0x39, 0xde, 0xcf, 0x8f, 0xb3, 0xf2, 0x38, 0xa1, 0x17, 0x52, 0x9f, 0x33, 0x0d, 0xd5, 0x18, + 0xf3, 0x67, 0x33, 0xe5, 0x3d, 0x1d, 0x78, 0x51, 0xef, 0xe9, 0xf2, 0xa9, 0xa4, 0xff, 0xb4, 0x3a, + 0x09, 0xe3, 0xeb, 0xf4, 0x69, 0xac, 0xf7, 0xbf, 0x5e, 0x48, 0xa4, 0x7a, 0x60, 0x3b, 0x0c, 0x9e, + 0xf3, 0xa1, 0x10, 0xa7, 0x02, 0xc2, 0x54, 0x0f, 0xfa, 0x0e, 0x83, 0x93, 0xae, 0xc0, 0x30, 0x3f, + 0xcc, 0x6e, 0x1e, 0xc3, 0xc2, 0x57, 0x37, 0x78, 0xf8, 0xb5, 0xca, 0x26, 0x37, 0xf6, 0x05, 0xbf, + 0xf5, 0x00, 0xae, 0x88, 0x18, 0x6f, 0xb3, 0xf3, 0xb1, 0xa0, 0x13, 0x2e, 0x5f, 0x96, 0x03, 0x97, + 0xee, 0xd1, 0xe4, 0xd4, 0x63, 0xdc, 0x70, 0xfa, 0x04, 0x4e, 0x1b, 0x70, 0x25, 0x11, 0x77, 0xa5, + 0x6a, 0x0c, 0x29, 0xd1, 0x49, 0x6a, 0xeb, 0x72, 0x56, 0x11, 0x7a, 0x65, 0x2d, 0x8a, 0xc9, 0x61, + 0x83, 0xf8, 0x88, 0x2d, 0x3c, 0xc1, 0xac, 0x77, 0x5d, 0xfb, 0xae, 0xf9, 0x8c, 0xc7, 0xb3, 0x07, + 0xca, 0x95, 0x57, 0x61, 0xad, 0x09, 0xe3, 0x2c, 0xc0, 0x9a, 0x84, 0x71, 0x89, 0x6a, 0xd1, 0x30, + 0xb4, 0xfe, 0xf3, 0x20, 0x58, 0x42, 0xb1, 0x59, 0x27, 0xf4, 0x52, 0x1f, 0xbb, 0xa9, 0xca, 0x8a, + 0x85, 0xea, 0xac, 0x9e, 0x93, 0x34, 0xc6, 0xf2, 0x91, 0x87, 0xfb, 0xbc, 0x46, 0x0c, 0x35, 0x46, + 0x5e, 0xaa, 0xf5, 0x5f, 0xe5, 0x4c, 0x93, 0xfc, 0x63, 0xc3, 0x2b, 0xdb, 0x39, 0xd3, 0xa4, 0x21, + 0x37, 0x7b, 0xca, 0xb4, 0xcd, 0x23, 0x91, 0xfe, 0xe7, 0x39, 0x12, 0x61, 0x5f, 0xa4, 0x7e, 0x28, + 0xb2, 0x6d, 0xea, 0x52, 0x7c, 0x8f, 0xf2, 0xf4, 0x5e, 0x47, 0x89, 0x8c, 0x0b, 0x1a, 0xc4, 0x90, + 0x6a, 0x88, 0x21, 0x2e, 0x14, 0x35, 0x9f, 0xe5, 0xc2, 0x3e, 0x6d, 0x3c, 0x16, 0xbe, 0x62, 0x79, + 0xa0, 0x9b, 0xe5, 0x33, 0xe7, 0xf9, 0xa9, 0xf9, 0x77, 0xce, 0x11, 0xf5, 0x06, 0x63, 0xd5, 0x33, + 0x46, 0x24, 0xc5, 0x92, 0x1f, 0xc1, 0x94, 0xea, 0xea, 0x44, 0x88, 0xd6, 0xd8, 0xfc, 0x2b, 0x71, + 0x2a, 0xd3, 0x83, 0x47, 0xce, 0xcd, 0x27, 0x77, 0x6e, 0x66, 0xd0, 0xf2, 0x44, 0x04, 0x0d, 0x89, + 0xd0, 0xe2, 0xb3, 0xf4, 0x83, 0xae, 0x0c, 0x46, 0xf2, 0x05, 0x4c, 0xd7, 0x6a, 0x1b, 0xfc, 0x32, + 0x87, 0x2d, 0x0f, 0xf8, 0xed, 0x55, 0x11, 0xb0, 0x85, 0xdd, 0x1d, 0x86, 0x7e, 0x5d, 0x5c, 0x02, + 0xd1, 0xc3, 0x02, 0xf4, 0x54, 0x0c, 0x59, 0x22, 0xf4, 0x93, 0xf2, 0xbf, 0xaf, 0xee, 0x2a, 0xb0, + 0xad, 0x88, 0xdb, 0xa2, 0xe2, 0xd2, 0x91, 0x1c, 0xd8, 0x39, 0xa7, 0x7c, 0x85, 0x6f, 0xf9, 0x94, + 0xef, 0xf7, 0xfa, 0xe4, 0x0d, 0x8d, 0xf4, 0x41, 0xeb, 0x89, 0x0f, 0xfb, 0x32, 0x5b, 0x70, 0xac, + 0x75, 0x3a, 0xb3, 0x72, 0xa4, 0x2a, 0x8f, 0x4a, 0x55, 0xb2, 0xb2, 0x49, 0x75, 0xec, 0x10, 0x23, + 0x8c, 0xd3, 0x53, 0xdc, 0x15, 0x69, 0x5c, 0xc9, 0x73, 0xb8, 0xfe, 0x17, 0x3f, 0x87, 0xfb, 0x31, + 0xcc, 0xc8, 0xab, 0x51, 0x0b, 0xd4, 0x8b, 0x68, 0x20, 0x4f, 0xec, 0x27, 0xe3, 0xa4, 0x6f, 0x98, + 0xde, 0xaf, 0x08, 0xfd, 0x15, 0x7b, 0x5d, 0x78, 0x74, 0xd8, 0x9f, 0xe4, 0xb2, 0x19, 0x10, 0xc7, + 0xef, 0xbc, 0x19, 0xe1, 0x6f, 0x97, 0x59, 0x75, 0xb9, 0x9f, 0xc5, 0x95, 0xa9, 0xfa, 0x6c, 0x1d, + 0x64, 0x2d, 0xc0, 0x79, 0xb3, 0xf8, 0x4d, 0x1a, 0x1c, 0xb8, 0xb8, 0xf7, 0xae, 0xd1, 0x48, 0x16, + 0x5a, 0x88, 0x0b, 0x25, 0x7a, 0x40, 0xb5, 0x30, 0x03, 0xff, 0x4f, 0x1f, 0x94, 0x33, 0x1b, 0x51, + 0x09, 0x43, 0x77, 0xcf, 0xc3, 0x0c, 0x1a, 0x17, 0x60, 0xe0, 0x81, 0xeb, 0x35, 0x75, 0x43, 0xf2, + 0xb1, 0xeb, 0x35, 0x6d, 0x84, 0x32, 0x1b, 0xa4, 0xd6, 0xd9, 0x45, 0x02, 0xcd, 0x44, 0x0e, 0x3b, + 0xbb, 0x75, 0x46, 0xa4, 0xdb, 0x20, 0x82, 0x8c, 0x5c, 0x83, 0x61, 0x99, 0x6d, 0xad, 0x3f, 0xf6, + 0x9e, 0xc9, 0x34, 0x6b, 0x12, 0x47, 0x3e, 0x82, 0x91, 0x35, 0x1a, 0x39, 0x4d, 0x27, 0x72, 0xc4, + 0xd8, 0x91, 0x0f, 0x61, 0x48, 0x70, 0xb5, 0x28, 0x56, 0xe8, 0x91, 0x03, 0x01, 0xb1, 0x15, 0x0b, + 0x2a, 0xd0, 0x0d, 0xdb, 0x2d, 0xe7, 0x99, 0x0a, 0x26, 0x65, 0x0a, 0x8c, 0x41, 0xe4, 0x1d, 0x33, + 0xe4, 0x22, 0x3e, 0x3e, 0xcb, 0x54, 0x48, 0x1c, 0x90, 0xb1, 0x8c, 0x61, 0x20, 0xb1, 0xaa, 0x45, + 0x36, 0x41, 0x2b, 0x93, 0xdb, 0xa0, 0xb4, 0x4d, 0x46, 0xeb, 0xb7, 0xc6, 0xe0, 0xcc, 0xa6, 0xb3, + 0xe7, 0x7a, 0x6c, 0x47, 0x61, 0xd3, 0xd0, 0xef, 0x04, 0x0d, 0x4a, 0x2a, 0x30, 0x69, 0x06, 0x70, + 0xf7, 0x08, 0x4f, 0x67, 0x9b, 0x26, 0x13, 0x46, 0xe6, 0x61, 0x54, 0x5d, 0x1a, 0x17, 0x3b, 0x9d, + 0x8c, 0xcb, 0xe4, 0xcb, 0xa7, 0xec, 0x98, 0x8c, 0xbc, 0x67, 0x1c, 0x3e, 0x9e, 0x56, 0xf9, 0x0f, + 0x90, 0x76, 0x9e, 0x47, 0xd8, 0x7a, 0x7e, 0xd3, 0xdc, 0xad, 0xf1, 0x13, 0xb6, 0x1f, 0xa4, 0xce, + 0x23, 0x07, 0x8d, 0x1a, 0xa7, 0x9c, 0xb2, 0xb8, 0x51, 0xcd, 0xcd, 0x5e, 0x9f, 0x71, 0x52, 0xf9, + 0x25, 0x8c, 0x3d, 0xe8, 0xec, 0x52, 0x79, 0xf2, 0x3a, 0x24, 0x36, 0x6f, 0xc9, 0x6b, 0x09, 0x02, + 0xbf, 0xf3, 0x26, 0xff, 0x8a, 0x1f, 0x77, 0x76, 0x69, 0xfa, 0x59, 0x04, 0xb6, 0x6a, 0x6a, 0xc2, + 0xc8, 0x3e, 0x14, 0x93, 0x37, 0x08, 0x44, 0x97, 0x76, 0xb9, 0xf7, 0x80, 0x89, 0x7e, 0xb4, 0xc7, + 0x17, 0x78, 0x5c, 0xb3, 0x51, 0x48, 0x4a, 0x2a, 0xf9, 0x31, 0xcc, 0x64, 0xba, 0xc4, 0xd5, 0x1d, + 0xc8, 0xee, 0xde, 0x76, 0x5c, 0x82, 0x12, 0x5a, 0x93, 0x17, 0x2e, 0x8d, 0x92, 0xb3, 0x4b, 0x21, + 0x4d, 0x38, 0x9d, 0x88, 0x8c, 0x17, 0x2f, 0xcc, 0xe4, 0xc7, 0xda, 0xe3, 0xae, 0x49, 0x26, 0x69, + 0xce, 0x2c, 0x2b, 0x29, 0x92, 0xac, 0xc2, 0xa8, 0xf2, 0x45, 0x89, 0xdc, 0x7c, 0x59, 0x7e, 0xb7, + 0xd2, 0xd1, 0x61, 0x79, 0x3a, 0xf6, 0xbb, 0x19, 0x32, 0x63, 0x01, 0xe4, 0x97, 0xe1, 0x8a, 0x1a, + 0xa2, 0x1b, 0x41, 0xb6, 0x87, 0x52, 0x3c, 0xee, 0x70, 0x23, 0x39, 0xc2, 0xf3, 0xe8, 0x77, 0xee, + 0x54, 0xfb, 0x4a, 0x85, 0xe5, 0x53, 0x76, 0x6f, 0xd1, 0xe4, 0x57, 0x0b, 0x70, 0x36, 0xa7, 0xd4, + 0x71, 0x2c, 0xb5, 0xa7, 0xdb, 0x18, 0x2d, 0x4f, 0xbc, 0xf7, 0xe7, 0x36, 0xe3, 0xfb, 0xb1, 0xd2, + 0x7f, 0x6c, 0xb4, 0x3b, 0xa7, 0x24, 0x72, 0x1b, 0x60, 0xcf, 0x8d, 0xc4, 0x18, 0xc3, 0x34, 0x75, + 0xe9, 0x0f, 0x94, 0xa9, 0x6d, 0xcf, 0x8d, 0xc4, 0x48, 0xfb, 0xdd, 0x42, 0xcf, 0x79, 0x1d, 0xb3, + 0xd7, 0x8d, 0xcd, 0xbf, 0xda, 0x6d, 0xd2, 0x8b, 0xa9, 0xab, 0xb7, 0x8f, 0x0e, 0xcb, 0x6f, 0xa8, + 0x14, 0x68, 0x0d, 0xa4, 0x92, 0xb7, 0x7c, 0xeb, 0x8e, 0xa2, 0x33, 0xda, 0xd3, 0x73, 0x69, 0x79, + 0x03, 0x86, 0xd0, 0x33, 0x15, 0x96, 0x26, 0xd0, 0x76, 0xc3, 0xc4, 0x5d, 0xe8, 0xbf, 0xd2, 0x77, + 0x6b, 0x82, 0x86, 0x2c, 0x33, 0x1b, 0x08, 0x77, 0x8b, 0xd2, 0x66, 0x11, 0x69, 0xfe, 0x84, 0x1d, + 0xcd, 0x51, 0x32, 0xff, 0x8e, 0xf1, 0x3c, 0x89, 0xc9, 0x56, 0x05, 0x18, 0x09, 0xc4, 0x74, 0x7b, + 0x7f, 0x60, 0x64, 0xa0, 0x38, 0xc8, 0x67, 0x04, 0x79, 0x97, 0xe4, 0xd7, 0x47, 0xf8, 0xc5, 0xf3, + 0x6d, 0xcf, 0x7d, 0xe4, 0xc6, 0x33, 0xb3, 0xee, 0xd3, 0x8e, 0xdf, 0x09, 0x13, 0x16, 0x67, 0xce, + 0x8b, 0x60, 0xca, 0xfd, 0xdd, 0xd7, 0xd3, 0xfd, 0xfd, 0xa6, 0x76, 0x50, 0xac, 0xa5, 0xf3, 0xe5, + 0x96, 0x85, 0xe9, 0x6e, 0x8e, 0x4f, 0x90, 0xbf, 0x86, 0x21, 0xcc, 0xc0, 0xcb, 0x4f, 0xe1, 0xc7, + 0xe6, 0x6f, 0x8a, 0xee, 0xec, 0x52, 0x7d, 0x9e, 0xb2, 0x57, 0x24, 0x93, 0xe0, 0x1a, 0x47, 0x80, + 0xa1, 0x71, 0x84, 0x90, 0x2d, 0x98, 0xda, 0x64, 0x1b, 0x5d, 0x7e, 0xa3, 0xa1, 0x1d, 0x08, 0x97, + 0x20, 0x77, 0x36, 0xe2, 0x46, 0xbb, 0x2d, 0xd1, 0x75, 0xaa, 0xf0, 0xfa, 0x5e, 0x33, 0x83, 0x9d, + 0x2c, 0xc1, 0x64, 0x8d, 0x3a, 0x41, 0x63, 0xff, 0x01, 0x7d, 0xc6, 0x8c, 0x0c, 0xe3, 0x69, 0x9c, + 0x10, 0x31, 0xac, 0xbd, 0x88, 0xd2, 0x23, 0xab, 0x4c, 0x26, 0xf2, 0x29, 0x0c, 0xd5, 0xfc, 0x20, + 0xaa, 0x3e, 0x13, 0xb3, 0xb5, 0x3c, 0xa7, 0xe5, 0xc0, 0xea, 0x39, 0xf9, 0x3c, 0x50, 0xe8, 0x07, + 0x51, 0x7d, 0xd7, 0xc8, 0x04, 0xc7, 0x49, 0xc8, 0x33, 0x98, 0x36, 0x67, 0x4a, 0x11, 0x68, 0x3f, + 0x22, 0x8c, 0x9b, 0xac, 0xe9, 0x98, 0x93, 0x54, 0xaf, 0x0b, 0xe9, 0x97, 0x93, 0xf3, 0xf1, 0x23, + 0xc4, 0xeb, 0x16, 0x41, 0x16, 0x3f, 0x59, 0xc3, 0x77, 0x95, 0x78, 0x8b, 0x2a, 0x21, 0x0f, 0xd0, + 0x1f, 0x8d, 0x73, 0x0d, 0x76, 0x70, 0xb6, 0x45, 0x4d, 0x38, 0x61, 0xf2, 0x31, 0x2e, 0x3b, 0xc5, + 0x4a, 0x36, 0xe1, 0xcc, 0x76, 0x48, 0x37, 0x03, 0xfa, 0xc4, 0xa5, 0x4f, 0xa5, 0x3c, 0x88, 0x13, + 0xb3, 0x31, 0x79, 0x6d, 0x8e, 0xcd, 0x12, 0x98, 0x66, 0x26, 0xef, 0x01, 0x6c, 0xba, 0x9e, 0x47, + 0x9b, 0x78, 0xd8, 0x3f, 0x86, 0xa2, 0xf0, 0x20, 0xa3, 0x8d, 0xd0, 0xba, 0xef, 0xb5, 0x74, 0x95, + 0x6a, 0xc4, 0xa4, 0x0a, 0x13, 0x2b, 0x5e, 0xa3, 0xd5, 0x11, 0x41, 0x39, 0x21, 0xce, 0x94, 0x22, + 0x61, 0xa4, 0xcb, 0x11, 0xf5, 0xd4, 0x47, 0x6e, 0xb2, 0x90, 0x07, 0x40, 0x04, 0x40, 0x8c, 0x5a, + 0x67, 0xb7, 0x45, 0xc5, 0xe7, 0x8e, 0x0e, 0x4a, 0x29, 0x08, 0x87, 0xbb, 0x91, 0x87, 0x31, 0xc5, + 0x36, 0xf7, 0x1e, 0x8c, 0x69, 0x63, 0x3e, 0x23, 0x3b, 0xca, 0xb4, 0x9e, 0x1d, 0x65, 0x54, 0xcf, + 0x82, 0xf2, 0x4f, 0x0b, 0x70, 0x21, 0xfb, 0x5b, 0x12, 0xb6, 0xc9, 0x06, 0x8c, 0x2a, 0xa0, 0xba, + 0x0f, 0x27, 0x0d, 0xee, 0xc4, 0xd6, 0x8e, 0x7f, 0xd0, 0x72, 0xe6, 0xd1, 0x5b, 0x1f, 0xcb, 0x78, + 0x8e, 0x53, 0xb0, 0xbf, 0x39, 0x02, 0xd3, 0x78, 0xef, 0x23, 0x39, 0x4f, 0x7d, 0x82, 0x59, 0x8e, + 0x10, 0xa6, 0x1d, 0xea, 0x08, 0xff, 0x2e, 0x87, 0x27, 0xf3, 0xfd, 0x19, 0x0c, 0xe4, 0x6d, 0x3d, + 0x12, 0xa9, 0x4f, 0x7b, 0xc7, 0x49, 0x02, 0xf5, 0x26, 0xc4, 0x21, 0x4a, 0xaf, 0x1b, 0x81, 0x30, + 0xc7, 0x9e, 0xf4, 0x06, 0x8e, 0x3b, 0xe9, 0x6d, 0xab, 0x49, 0x8f, 0x67, 0xcf, 0x79, 0x4d, 0x9b, + 0xf4, 0x5e, 0xfe, 0x6c, 0x37, 0xf4, 0xb2, 0x67, 0xbb, 0xe1, 0x17, 0x9b, 0xed, 0x46, 0x9e, 0x73, + 0xb6, 0xbb, 0x0b, 0x93, 0xeb, 0x94, 0x36, 0xb5, 0xe3, 0xc9, 0xd1, 0x78, 0xf5, 0xf4, 0x28, 0x3a, + 0x9e, 0xb3, 0xce, 0x28, 0x13, 0x5c, 0xb9, 0xb3, 0x26, 0xfc, 0xd5, 0xcc, 0x9a, 0x63, 0x2f, 0x79, + 0xd6, 0x1c, 0x7f, 0x91, 0x59, 0x33, 0x35, 0xf5, 0x4d, 0x9c, 0x78, 0xea, 0x7b, 0x91, 0xd9, 0xea, + 0x63, 0x0c, 0xe4, 0xad, 0xd5, 0x96, 0x45, 0xcc, 0x96, 0x16, 0x24, 0xb5, 0xec, 0x87, 0xf2, 0x9e, + 0x03, 0xfe, 0xcd, 0x60, 0xf8, 0x5a, 0x86, 0x70, 0x07, 0xb0, 0xbf, 0xad, 0x2a, 0x86, 0xef, 0xea, + 0xfc, 0xea, 0x3e, 0xd0, 0xb0, 0xb8, 0x4c, 0x2c, 0xe6, 0xb8, 0xe4, 0xf6, 0xd3, 0x96, 0x78, 0xeb, + 0x4f, 0x0b, 0x3c, 0x14, 0xe0, 0xff, 0xc5, 0xa9, 0xf2, 0x45, 0x8e, 0xe7, 0x7f, 0x2d, 0x4e, 0x32, + 0x22, 0x12, 0xa2, 0x04, 0x4e, 0xe3, 0x71, 0x1c, 0x1f, 0xf1, 0x7d, 0xf6, 0x9d, 0xeb, 0x08, 0xb1, + 0x51, 0x9f, 0x55, 0x9a, 0xd2, 0x91, 0x3b, 0x77, 0xe4, 0x04, 0x20, 0x72, 0xad, 0x70, 0xb0, 0x39, + 0x01, 0xe8, 0x0c, 0x18, 0xa1, 0x7a, 0xda, 0xb2, 0x79, 0x8e, 0x8c, 0xcc, 0x1a, 0xbc, 0x93, 0xce, + 0xf2, 0x80, 0x56, 0x56, 0x9c, 0xe5, 0x41, 0x57, 0x63, 0x9c, 0xef, 0x61, 0x1b, 0xce, 0xdb, 0xf4, + 0xc0, 0x7f, 0x42, 0x5f, 0xae, 0xd8, 0xaf, 0xe0, 0x9c, 0x29, 0x90, 0xdf, 0x07, 0xe4, 0x8f, 0x57, + 0x7c, 0x9c, 0xfd, 0xe4, 0x85, 0x60, 0xe0, 0x4f, 0x5e, 0xf0, 0xcc, 0xf9, 0xec, 0x4f, 0x7d, 0xdd, + 0x40, 0x9c, 0xe5, 0xc3, 0x05, 0x53, 0x78, 0xa5, 0xd9, 0xc4, 0x57, 0x73, 0x1b, 0x6e, 0xdb, 0xf1, + 0x22, 0xb2, 0x01, 0x63, 0xda, 0xcf, 0x84, 0x0f, 0x44, 0xc3, 0x88, 0x3d, 0x4d, 0x0c, 0x30, 0x32, + 0x0f, 0xc7, 0x60, 0x8b, 0x42, 0x39, 0xa9, 0x1e, 0xa6, 0x32, 0xbd, 0xcc, 0x2a, 0x4c, 0x68, 0x3f, + 0xd5, 0x41, 0x01, 0x7e, 0xfc, 0x5a, 0x09, 0xa6, 0xc2, 0x4c, 0x16, 0xab, 0x01, 0x73, 0x59, 0x4a, + 0xe3, 0x29, 0xea, 0xc9, 0x52, 0x9c, 0x81, 0xae, 0x77, 0x8c, 0xeb, 0xe9, 0xbc, 0xec, 0x73, 0xd6, + 0xdf, 0x1b, 0x80, 0xf3, 0xa2, 0x33, 0x5e, 0x66, 0x8f, 0x93, 0x1f, 0xc0, 0x98, 0xd6, 0xc7, 0x42, + 0xe9, 0x97, 0xe5, 0x6d, 0xbe, 0xbc, 0xb1, 0xc0, 0x7d, 0x35, 0x1d, 0x04, 0xd4, 0x13, 0xdd, 0xbd, + 0x7c, 0xca, 0xd6, 0x45, 0x92, 0x16, 0x4c, 0x9a, 0x1d, 0x2d, 0xdc, 0x55, 0x57, 0x33, 0x0b, 0x31, + 0x49, 0x65, 0xfe, 0xfa, 0x66, 0x3d, 0xb3, 0xbb, 0x97, 0x4f, 0xd9, 0x09, 0xd9, 0xe4, 0x1b, 0x38, + 0x93, 0xea, 0x65, 0xe1, 0x8b, 0x7c, 0x35, 0xb3, 0xc0, 0x14, 0x35, 0x3f, 0x04, 0x09, 0x10, 0x9c, + 0x5b, 0x6c, 0xba, 0x10, 0xd2, 0x84, 0x71, 0xbd, 0xe3, 0x85, 0x3f, 0xed, 0x4a, 0x17, 0x55, 0x72, + 0x42, 0xbe, 0xb9, 0x13, 0xba, 0xc4, 0xbe, 0x7f, 0x66, 0x1e, 0xec, 0x18, 0xc4, 0x23, 0x30, 0xc4, + 0x7f, 0x5b, 0xbf, 0x57, 0x80, 0xf3, 0x9b, 0x01, 0x0d, 0xa9, 0xd7, 0xa0, 0xc6, 0xbd, 0x88, 0x17, + 0x1c, 0x11, 0x79, 0x67, 0x2a, 0x7d, 0x2f, 0x7c, 0xa6, 0x62, 0xfd, 0xdb, 0x02, 0x94, 0xb2, 0xaa, + 0x5c, 0xa3, 0x5e, 0x93, 0x6c, 0x42, 0x31, 0xd9, 0x06, 0xf1, 0xc5, 0x58, 0x2a, 0xfd, 0x78, 0x6e, + 0x6b, 0x97, 0x4f, 0xd9, 0x29, 0x6e, 0xb2, 0x0e, 0x67, 0x34, 0x98, 0x38, 0xd3, 0xe8, 0x3b, 0xce, + 0x99, 0x06, 0xeb, 0xe1, 0x14, 0xab, 0x7e, 0x24, 0xb4, 0x8c, 0xab, 0xee, 0xa2, 0x7f, 0xe0, 0xb8, + 0x1e, 0xdb, 0x44, 0x6b, 0x09, 0xee, 0x20, 0x86, 0x0a, 0xb5, 0xf3, 0x43, 0x0e, 0x84, 0xca, 0x2b, + 0x62, 0x8a, 0xc4, 0xfa, 0x10, 0x57, 0x07, 0xe1, 0xd8, 0xe4, 0x97, 0xf2, 0x95, 0xb0, 0xcb, 0x30, + 0xb8, 0xb5, 0x5a, 0x5b, 0xa8, 0x88, 0x2b, 0xfe, 0x3c, 0x31, 0x4c, 0x2b, 0xac, 0x37, 0x1c, 0x9b, + 0x23, 0xac, 0x0f, 0x80, 0xdc, 0xa3, 0x91, 0x78, 0xff, 0x42, 0xf1, 0x5d, 0x83, 0x61, 0x01, 0x12, + 0x9c, 0xe8, 0xae, 0x17, 0xaf, 0x69, 0xd8, 0x12, 0x67, 0x6d, 0x4a, 0x1b, 0xa4, 0x45, 0x9d, 0x50, + 0x5b, 0xf4, 0xdf, 0x85, 0x91, 0x40, 0xc0, 0xc4, 0x9a, 0x3f, 0xa9, 0x9e, 0x37, 0x42, 0x30, 0x3f, + 0x46, 0x92, 0x34, 0xb6, 0xfa, 0xcb, 0x5a, 0xc5, 0x24, 0x4e, 0x1b, 0x2b, 0x8b, 0x0b, 0x4c, 0xab, + 0x42, 0x59, 0xb2, 0x3b, 0x6e, 0xe1, 0xad, 0x90, 0x88, 0xea, 0x17, 0xfc, 0x51, 0x35, 0x38, 0x81, + 0x88, 0xd4, 0x65, 0x1a, 0x89, 0xf5, 0xa6, 0x4a, 0x09, 0x95, 0x21, 0x2d, 0xef, 0x99, 0x9e, 0x75, + 0x4c, 0x76, 0x75, 0x0f, 0x03, 0xe0, 0x5e, 0x46, 0x25, 0x1c, 0x98, 0xe3, 0x5b, 0x08, 0xd6, 0x2a, + 0xf1, 0x48, 0xa9, 0xaf, 0xa6, 0xdd, 0x05, 0x18, 0x55, 0x30, 0x75, 0x9a, 0xcd, 0x75, 0x65, 0xd0, + 0xef, 0xbc, 0xc9, 0x73, 0x21, 0x34, 0x94, 0x80, 0x98, 0x8f, 0x15, 0xc1, 0xbf, 0xe9, 0x6f, 0xb9, + 0x88, 0x90, 0x06, 0xd1, 0xb7, 0x5a, 0x44, 0x9c, 0x0d, 0xed, 0x24, 0x45, 0x18, 0xf4, 0x3b, 0xf3, + 0xc7, 0x51, 0xd4, 0xb7, 0x5c, 0x04, 0x53, 0xd4, 0xb7, 0x57, 0x04, 0x95, 0x69, 0xe3, 0xf8, 0x20, + 0x4d, 0x15, 0xb2, 0x94, 0x2e, 0x44, 0x7a, 0xfb, 0x13, 0x1c, 0x5d, 0xfb, 0x83, 0xc2, 0x05, 0xae, + 0xac, 0x9f, 0x43, 0x31, 0x4c, 0x61, 0xdf, 0x6e, 0x31, 0xff, 0xb0, 0xc0, 0x93, 0xd8, 0xd5, 0x36, + 0xb4, 0xe7, 0x81, 0xbd, 0x47, 0xbe, 0x16, 0x6c, 0xa3, 0x7d, 0xed, 0xda, 0xe1, 0x27, 0x06, 0xdb, + 0x38, 0x9d, 0x68, 0x5f, 0x25, 0x79, 0xc7, 0x93, 0xd0, 0x24, 0x35, 0x79, 0x0f, 0x26, 0x34, 0x90, + 0xda, 0x09, 0xf2, 0x67, 0x78, 0x74, 0x76, 0xb7, 0x69, 0x9b, 0x94, 0xd6, 0x5f, 0x16, 0x60, 0x2a, + 0xe3, 0xe1, 0x7a, 0x74, 0x94, 0xa0, 0x85, 0xa5, 0x26, 0x2a, 0xf1, 0x70, 0x1e, 0xe6, 0xd3, 0x31, + 0xd6, 0x5f, 0x45, 0x88, 0x0f, 0x90, 0x68, 0x8f, 0xec, 0xf7, 0x69, 0xcf, 0x41, 0x66, 0x3f, 0xac, + 0xaf, 0x93, 0x93, 0x10, 0x20, 0xae, 0x89, 0x70, 0x49, 0xd7, 0xd8, 0x76, 0x59, 0x7b, 0xa1, 0x3f, + 0xe6, 0xfd, 0xd9, 0x61, 0xf9, 0x9d, 0x93, 0x84, 0x0a, 0xc7, 0xa2, 0x6d, 0xad, 0x18, 0xeb, 0xd7, + 0xfa, 0xe0, 0x6c, 0x46, 0xfb, 0x6b, 0x34, 0xfa, 0xab, 0x50, 0xc1, 0x13, 0x18, 0x8b, 0x2b, 0x13, + 0x96, 0xfa, 0xd1, 0x73, 0xb3, 0x85, 0xef, 0x65, 0xc4, 0x3a, 0x08, 0x5f, 0x8a, 0x12, 0xf4, 0x82, + 0xac, 0x3f, 0xea, 0x83, 0xb3, 0xdb, 0xed, 0x10, 0xef, 0x4c, 0xae, 0x78, 0x4f, 0xa8, 0x17, 0xf9, + 0xc1, 0x33, 0xbc, 0xe7, 0x45, 0xde, 0x86, 0xc1, 0x65, 0xda, 0x6a, 0xf9, 0x62, 0xfc, 0x5f, 0x94, + 0xf1, 0x4e, 0x49, 0x6a, 0x24, 0x5a, 0x3e, 0x65, 0x73, 0x6a, 0xf2, 0x1e, 0x8c, 0x2e, 0x53, 0x27, + 0x88, 0x76, 0xa9, 0x23, 0xcd, 0x21, 0xf9, 0x38, 0x90, 0xc6, 0x22, 0x08, 0x96, 0x4f, 0xd9, 0x31, + 0x35, 0x99, 0x87, 0x81, 0x4d, 0xdf, 0xdb, 0x53, 0xf9, 0x21, 0x72, 0x0a, 0x64, 0x34, 0xcb, 0xa7, + 0x6c, 0xa4, 0x25, 0x6b, 0x30, 0x51, 0xd9, 0xa3, 0x5e, 0x94, 0x38, 0xc2, 0xbf, 0x96, 0xc7, 0x6c, + 0x10, 0x2f, 0x9f, 0xb2, 0x4d, 0x6e, 0xf2, 0x01, 0x0c, 0xdf, 0xf3, 0xfd, 0xe6, 0xee, 0x33, 0x99, + 0xe5, 0xa4, 0x9c, 0x27, 0x48, 0x90, 0x2d, 0x9f, 0xb2, 0x25, 0x47, 0x75, 0x10, 0xfa, 0xd7, 0xc2, + 0x3d, 0xeb, 0xb0, 0x00, 0xa5, 0x45, 0xff, 0xa9, 0x97, 0xa9, 0xd5, 0xef, 0x99, 0x5a, 0x95, 0xe2, + 0x33, 0xe8, 0x13, 0x7a, 0x7d, 0x0b, 0x06, 0x36, 0x5d, 0x6f, 0x2f, 0xb1, 0x15, 0xcc, 0xe0, 0x63, + 0x54, 0xa8, 0x1e, 0xd7, 0xdb, 0x23, 0xab, 0x72, 0x7f, 0x2f, 0xfc, 0x98, 0xfd, 0x86, 0x51, 0x91, + 0xc1, 0xad, 0x53, 0xc7, 0xfb, 0x78, 0xfe, 0x5b, 0x36, 0xf0, 0x75, 0x98, 0xcd, 0x29, 0x57, 0x0b, + 0x49, 0x19, 0xc0, 0x8d, 0xcd, 0xdf, 0x2a, 0xc0, 0x4c, 0x66, 0x07, 0x26, 0x29, 0x99, 0x4d, 0xc7, + 0x07, 0xe6, 0x42, 0xcb, 0x6f, 0x3c, 0x3e, 0x46, 0xd8, 0xa4, 0x25, 0x1f, 0xd4, 0x17, 0x5f, 0x48, + 0x83, 0xf1, 0x25, 0x1e, 0x4d, 0xd4, 0x45, 0x5a, 0xff, 0x3c, 0x6b, 0xac, 0x73, 0xe5, 0x96, 0xe2, + 0x50, 0x11, 0xee, 0xba, 0x52, 0xd1, 0x21, 0x73, 0xda, 0x5c, 0x20, 0x33, 0x26, 0xc9, 0x4f, 0x7e, + 0x47, 0xcb, 0x50, 0xc7, 0xbf, 0xd8, 0xf7, 0x5f, 0xe0, 0xbb, 0x54, 0xb2, 0x58, 0x99, 0xcb, 0x7e, + 0x18, 0x79, 0x2a, 0x5c, 0xdf, 0x56, 0xbf, 0xc9, 0x0d, 0x28, 0xca, 0x47, 0x78, 0xc4, 0x6b, 0x5f, + 0x81, 0x88, 0x39, 0x49, 0xc1, 0xc9, 0xbb, 0x30, 0x9b, 0x84, 0xc9, 0x56, 0xf2, 0x6b, 0xb1, 0x79, + 0x68, 0xeb, 0x4f, 0xfa, 0xf0, 0x11, 0x81, 0x2e, 0x9f, 0x0e, 0xeb, 0xbf, 0x8d, 0x9a, 0x0c, 0x3e, + 0xda, 0xa8, 0x91, 0x0b, 0x30, 0xba, 0x51, 0x33, 0x5e, 0x37, 0xb4, 0x63, 0x00, 0xab, 0x36, 0x6b, + 0x42, 0x25, 0x68, 0xec, 0xbb, 0x11, 0x6d, 0x44, 0x9d, 0x40, 0x46, 0x23, 0xa5, 0xe0, 0xc4, 0x82, + 0xf1, 0x7b, 0x2d, 0x77, 0xb7, 0x21, 0x85, 0x71, 0x15, 0x18, 0x30, 0xf2, 0x2a, 0x4c, 0xae, 0x78, + 0x61, 0xe4, 0xb4, 0x5a, 0x6b, 0x34, 0xda, 0xf7, 0x9b, 0xe2, 0xed, 0x66, 0x3b, 0x01, 0x65, 0xe5, + 0x2e, 0xf8, 0x5e, 0xe4, 0xb8, 0x1e, 0x0d, 0xec, 0x8e, 0x17, 0xb9, 0x07, 0x54, 0xb4, 0x3d, 0x05, + 0x27, 0x6f, 0xc1, 0x8c, 0x82, 0x6d, 0x04, 0x8d, 0x7d, 0x1a, 0x46, 0x01, 0xbe, 0x79, 0x8a, 0x81, + 0x79, 0x76, 0x36, 0x12, 0x4b, 0x68, 0xf9, 0x9d, 0xe6, 0x92, 0xf7, 0xc4, 0x0d, 0x7c, 0x7e, 0xe2, + 0x3d, 0x22, 0x4a, 0x48, 0xc0, 0xad, 0xdf, 0x19, 0xc9, 0x9c, 0x19, 0x5e, 0x64, 0x0c, 0x7e, 0x01, + 0xe3, 0x0b, 0x4e, 0xdb, 0xd9, 0x75, 0x5b, 0x6e, 0xe4, 0xaa, 0xc7, 0x21, 0xdf, 0xee, 0x31, 0xad, + 0xc8, 0x67, 0x99, 0x68, 0x53, 0x67, 0xb6, 0x0d, 0x51, 0x73, 0x7f, 0x31, 0x04, 0x33, 0x99, 0x74, + 0xe4, 0xba, 0x78, 0x45, 0x52, 0x4d, 0xdd, 0xe2, 0x89, 0x42, 0x3b, 0x09, 0x66, 0x7d, 0x89, 0xa0, + 0x85, 0x16, 0x75, 0xbc, 0x8e, 0x78, 0xa0, 0xd0, 0x36, 0x60, 0xac, 0x2f, 0xd9, 0xd6, 0x44, 0x13, + 0x86, 0xb7, 0x2d, 0xec, 0x04, 0x14, 0x83, 0xd9, 0x3a, 0xd1, 0xbe, 0x14, 0x35, 0xc0, 0xef, 0x05, + 0x6b, 0x20, 0x26, 0x69, 0xdd, 0x6f, 0x52, 0x4d, 0xd2, 0x20, 0x97, 0x64, 0x42, 0x99, 0x24, 0x06, + 0x91, 0x92, 0x86, 0xb8, 0x24, 0x0d, 0x44, 0x5e, 0x81, 0x89, 0x4a, 0xbb, 0xad, 0x09, 0xc2, 0x97, + 0x09, 0x6d, 0x13, 0x48, 0x2e, 0x01, 0x54, 0xda, 0x6d, 0x29, 0x06, 0x5f, 0x1d, 0xb4, 0x35, 0x08, + 0xb9, 0x19, 0xe7, 0x81, 0xd4, 0x44, 0xe1, 0x69, 0x88, 0x9d, 0x81, 0x61, 0x7a, 0x55, 0x49, 0xf3, + 0x84, 0x50, 0xe0, 0x7a, 0x4d, 0x80, 0xc9, 0x87, 0x70, 0x2e, 0x11, 0x0f, 0xa3, 0x15, 0x80, 0x27, + 0x15, 0x76, 0x3e, 0x01, 0x79, 0x07, 0xce, 0x26, 0x90, 0xb2, 0x38, 0x3c, 0x94, 0xb0, 0x73, 0xb0, + 0xe4, 0x7d, 0x28, 0x25, 0x72, 0x3d, 0xc4, 0x85, 0xe2, 0x01, 0x84, 0x9d, 0x8b, 0x67, 0x5f, 0x57, + 0xe2, 0xd2, 0xa8, 0x28, 0x12, 0xcf, 0x5a, 0xed, 0x6c, 0x24, 0x59, 0x86, 0x72, 0x66, 0x8c, 0x91, + 0x56, 0x30, 0xbe, 0xa6, 0x68, 0xf7, 0x22, 0x23, 0x55, 0xb8, 0x90, 0x49, 0x22, 0xab, 0x81, 0x6f, + 0x2c, 0xda, 0x5d, 0x69, 0xc8, 0x3c, 0x4c, 0xc7, 0xb1, 0x56, 0x5a, 0x15, 0xf0, 0x79, 0x45, 0x3b, + 0x13, 0x47, 0xde, 0x30, 0x33, 0x7a, 0xf0, 0xc2, 0xf0, 0x75, 0x45, 0x3b, 0x8d, 0xb0, 0x8e, 0x0a, + 0x70, 0x21, 0x73, 0x2d, 0x96, 0x26, 0xc3, 0x5c, 0x72, 0x6f, 0xaa, 0xcd, 0x05, 0x37, 0x44, 0x00, + 0x25, 0x77, 0x75, 0xcb, 0x00, 0x75, 0xe4, 0xe7, 0xa2, 0x1e, 0xc4, 0xe1, 0x94, 0xf7, 0xd4, 0xd1, + 0x66, 0x3f, 0x3a, 0x4b, 0x6e, 0x25, 0xf7, 0x68, 0x19, 0x85, 0xeb, 0x47, 0x9c, 0xf2, 0x30, 0xf3, + 0x45, 0x4e, 0x91, 0xfe, 0xa4, 0x00, 0xe5, 0x1e, 0x5b, 0x10, 0xd5, 0xa6, 0xc2, 0x31, 0xda, 0x74, + 0x5f, 0xb5, 0x89, 0x5f, 0xa8, 0x9f, 0x3f, 0xde, 0x36, 0xe7, 0x65, 0x37, 0xeb, 0x2f, 0x0b, 0x40, + 0xd2, 0x5b, 0x5d, 0xf2, 0x5d, 0x18, 0xad, 0xd5, 0x96, 0x8d, 0x48, 0xcb, 0xd4, 0xe1, 0x56, 0x4c, + 0x41, 0x6e, 0x1f, 0x2b, 0xb4, 0x52, 0x0f, 0xac, 0xfc, 0x24, 0x15, 0xcf, 0xd9, 0xdf, 0x35, 0x9e, + 0x33, 0x15, 0xcd, 0xb9, 0x94, 0x11, 0xa0, 0x38, 0xd0, 0x23, 0x40, 0x31, 0x1d, 0x7d, 0x68, 0x2d, + 0x42, 0x29, 0x6f, 0xb7, 0x8c, 0x33, 0x1c, 0xcf, 0x9e, 0xa8, 0x1d, 0xd0, 0xf1, 0x19, 0xce, 0x04, + 0x5b, 0xef, 0xc0, 0x59, 0xc5, 0xcd, 0x9f, 0x65, 0xd2, 0xd2, 0x96, 0x08, 0x13, 0x5b, 0xa5, 0x47, + 0x89, 0x01, 0xd6, 0x1f, 0x0f, 0xa4, 0x18, 0x6b, 0x9d, 0x83, 0x03, 0x27, 0x78, 0x46, 0x2a, 0x26, + 0x63, 0x7f, 0x4f, 0xab, 0xa6, 0x3a, 0xc0, 0xf6, 0x98, 0x9a, 0x74, 0xb6, 0x2e, 0xe0, 0x0e, 0xc3, + 0x6b, 0x50, 0x7e, 0xb4, 0xd7, 0xc7, 0x53, 0xb3, 0x19, 0x40, 0xb2, 0x03, 0x13, 0x62, 0xed, 0xc6, + 0xdf, 0xf2, 0x1b, 0xbb, 0x9d, 0xfc, 0xc6, 0x8c, 0xea, 0xdd, 0x34, 0x58, 0xf8, 0x68, 0x34, 0xc5, + 0x90, 0x2f, 0x60, 0x52, 0xee, 0xd4, 0x84, 0x60, 0x1e, 0x8c, 0x75, 0xa7, 0xbb, 0x60, 0x93, 0x87, + 0x4b, 0x4e, 0x08, 0x62, 0x55, 0x96, 0x93, 0x1d, 0x97, 0x3c, 0x78, 0x9c, 0x2a, 0x1b, 0x2c, 0xa2, + 0xca, 0x06, 0x6c, 0xee, 0x53, 0x20, 0xe9, 0x76, 0xf5, 0xfa, 0x9c, 0x26, 0xb4, 0xcf, 0x69, 0xae, + 0x02, 0x53, 0x19, 0x0d, 0x38, 0x91, 0x88, 0x4f, 0x81, 0xa4, 0x6b, 0x7a, 0x12, 0x09, 0xd6, 0x75, + 0x78, 0x55, 0xa9, 0x40, 0x8d, 0x06, 0x43, 0xa6, 0x74, 0xb2, 0xff, 0x4a, 0x1f, 0x94, 0x7b, 0x90, + 0x92, 0x7f, 0x5c, 0x48, 0x6a, 0x9b, 0x8f, 0xc6, 0xf7, 0x92, 0xda, 0xce, 0xe6, 0xcf, 0x50, 0x7b, + 0xf5, 0xfd, 0x5f, 0xfd, 0xb3, 0xe7, 0xb6, 0x3c, 0xd2, 0x5d, 0x76, 0x72, 0x6d, 0x0d, 0xe8, 0xda, + 0xda, 0x81, 0x69, 0xc3, 0x2c, 0x3c, 0xce, 0xe2, 0x65, 0x01, 0x88, 0x17, 0xa2, 0x57, 0xfd, 0x3d, + 0xf1, 0x90, 0x75, 0x5f, 0xa9, 0x60, 0x6b, 0x50, 0xeb, 0x2e, 0xcc, 0x24, 0xe4, 0x0a, 0xe7, 0xff, + 0x77, 0x41, 0xa5, 0xa8, 0x40, 0xc1, 0xfd, 0xd5, 0x33, 0x3f, 0x3b, 0x2c, 0x4f, 0xb0, 0x6d, 0xfd, + 0xcd, 0xf8, 0x95, 0x10, 0xf9, 0x97, 0xb5, 0xa6, 0x1f, 0x5f, 0x54, 0x5a, 0x7a, 0xea, 0x2e, 0x72, + 0x07, 0x86, 0x38, 0x24, 0x91, 0x8b, 0x5f, 0xa7, 0x16, 0xf3, 0x82, 0x20, 0xb4, 0x66, 0xf0, 0x42, + 0x3d, 0xfe, 0xa8, 0xc4, 0x09, 0x60, 0xac, 0x6d, 0xfe, 0x36, 0x55, 0x0c, 0x56, 0xf9, 0xfe, 0x07, + 0x2a, 0x71, 0xa2, 0x1a, 0x19, 0xc7, 0x22, 0xe9, 0x3c, 0xff, 0x69, 0x8b, 0x36, 0xf9, 0xa3, 0xa2, + 0xd5, 0x71, 0x61, 0xe3, 0x0e, 0x38, 0x4c, 0x00, 0xb2, 0x59, 0x9f, 0xc0, 0x0c, 0xdb, 0x2d, 0x04, + 0xc9, 0xf2, 0xf0, 0x45, 0x1a, 0x06, 0x33, 0xef, 0xcd, 0x38, 0x0c, 0x84, 0xf7, 0x66, 0x04, 0xd2, + 0x5a, 0x85, 0x73, 0xdc, 0xf9, 0xa9, 0x37, 0x29, 0x3e, 0x6a, 0x18, 0xc4, 0xdf, 0x89, 0xeb, 0xd8, + 0x19, 0xad, 0xe7, 0x74, 0xd6, 0xc7, 0x78, 0xdf, 0x4f, 0x0c, 0x54, 0xd7, 0xf7, 0x62, 0x4f, 0xe7, + 0xf1, 0x12, 0x04, 0xfc, 0xff, 0x70, 0xa1, 0xd2, 0x6e, 0x53, 0xaf, 0x19, 0x33, 0x6e, 0x05, 0xce, + 0x31, 0xd3, 0xb7, 0x90, 0x0a, 0x0c, 0x22, 0xb5, 0x3a, 0x03, 0x16, 0xd5, 0xcd, 0xa8, 0x0e, 0xd2, + 0x89, 0xe4, 0xcc, 0x58, 0x00, 0xe7, 0xb4, 0x9a, 0x30, 0x5b, 0xeb, 0xec, 0x1e, 0xb8, 0x11, 0xde, + 0xb6, 0xc1, 0x14, 0x48, 0xb2, 0xec, 0x15, 0xf9, 0x9c, 0x20, 0x57, 0xc6, 0xf5, 0xf8, 0x5e, 0x18, + 0x5e, 0xd8, 0x11, 0x69, 0x91, 0x9e, 0xdc, 0xb9, 0x19, 0xb3, 0xa2, 0x97, 0x87, 0x97, 0x82, 0x68, + 0xf1, 0xe4, 0xa0, 0x35, 0x05, 0x67, 0xf4, 0x33, 0x2f, 0x3e, 0x42, 0x66, 0x60, 0xca, 0x3c, 0xcb, + 0xe2, 0xe0, 0xaf, 0x61, 0x9a, 0xfb, 0xda, 0xf9, 0xe3, 0x0a, 0xf3, 0xf1, 0x3b, 0x02, 0x7d, 0x3b, + 0xf3, 0x89, 0x4b, 0x1a, 0x18, 0xbb, 0xad, 0x9e, 0xcd, 0xd9, 0x99, 0xe7, 0x77, 0xb6, 0x9f, 0xcc, + 0x1b, 0xa7, 0xb1, 0x7d, 0x3b, 0xf3, 0xd5, 0x61, 0x91, 0xa4, 0x9a, 0x49, 0xe7, 0xdd, 0xff, 0xad, + 0x48, 0x9f, 0xc7, 0x34, 0x21, 0xcb, 0xd4, 0xc1, 0x2b, 0x7d, 0xd9, 0xc9, 0x16, 0x26, 0xa1, 0x4f, + 0x65, 0xa1, 0xed, 0x73, 0x9b, 0xd6, 0xef, 0x17, 0xe0, 0x3a, 0xdf, 0x90, 0x65, 0xf3, 0xe1, 0xc1, + 0x56, 0x0e, 0x33, 0x79, 0x17, 0x06, 0x43, 0x2d, 0xc0, 0xc3, 0x12, 0x35, 0xef, 0x26, 0x89, 0x33, + 0x90, 0x0a, 0x8c, 0xeb, 0x37, 0xd7, 0x8e, 0x97, 0xe0, 0xd2, 0x1e, 0x3b, 0x78, 0xe4, 0xa8, 0xdb, + 0x6c, 0x8f, 0xe1, 0xfc, 0xd2, 0x37, 0x6c, 0x40, 0x88, 0x15, 0x4a, 0x58, 0x0f, 0xf1, 0x65, 0xfe, + 0xd3, 0x5b, 0x62, 0xc4, 0x98, 0xa6, 0x7d, 0x12, 0xcc, 0xec, 0x64, 0xb9, 0xc8, 0xc5, 0x57, 0x9c, + 0x6c, 0x03, 0x66, 0xfd, 0x71, 0x01, 0x2e, 0x64, 0x97, 0x26, 0x26, 0x96, 0x15, 0x38, 0xb3, 0xe0, + 0x78, 0xbe, 0xe7, 0x36, 0x9c, 0x56, 0xad, 0xb1, 0x4f, 0x9b, 0x1d, 0x95, 0xca, 0x5a, 0xcd, 0x32, + 0x7b, 0xd4, 0x93, 0xec, 0x92, 0xc4, 0x4e, 0x73, 0x31, 0x0b, 0x11, 0xaf, 0xae, 0xf0, 0xb9, 0xb7, + 0x45, 0x03, 0x25, 0x8f, 0xd7, 0x2c, 0x07, 0x4b, 0x6e, 0xcb, 0x43, 0x85, 0xe6, 0xb6, 0xe7, 0x46, + 0x8a, 0x89, 0xbb, 0x7a, 0xb2, 0x50, 0xd6, 0x7f, 0x28, 0xc0, 0x39, 0x7c, 0xbd, 0xce, 0x78, 0x0f, + 0x37, 0xce, 0xe8, 0x2e, 0x93, 0x92, 0x17, 0x8c, 0xab, 0x38, 0x06, 0xb5, 0x99, 0x9d, 0x9c, 0xbc, + 0x01, 0x03, 0x35, 0x19, 0x70, 0x36, 0x99, 0x78, 0xc9, 0x5c, 0x70, 0x30, 0xbc, 0x8d, 0x54, 0xcc, + 0x86, 0x5f, 0xa4, 0x61, 0x83, 0x7a, 0xf8, 0xe4, 0x3c, 0xf7, 0x3c, 0x68, 0x90, 0x38, 0xd9, 0xda, + 0x40, 0x5e, 0xb2, 0xb5, 0x41, 0x33, 0xd9, 0x9a, 0xf5, 0x84, 0xbf, 0x5d, 0x97, 0x6c, 0x90, 0xe8, + 0xa4, 0x8f, 0x53, 0x2f, 0xd4, 0xf3, 0x75, 0xe0, 0x6c, 0x56, 0xcb, 0xd8, 0x26, 0x3d, 0xf1, 0xf8, + 0x7c, 0x7e, 0x06, 0xf5, 0x4d, 0x78, 0xc5, 0xa0, 0xad, 0xb4, 0x5a, 0xfe, 0x53, 0xda, 0xdc, 0x0c, + 0xfc, 0x03, 0x3f, 0x32, 0xde, 0xee, 0x3a, 0xed, 0xe8, 0x74, 0x6a, 0x31, 0x4e, 0x82, 0xad, 0xff, + 0x0f, 0xae, 0xf5, 0x90, 0x28, 0x1a, 0x55, 0x83, 0x33, 0x4e, 0x02, 0x27, 0x23, 0x87, 0xae, 0x65, + 0xb5, 0x2b, 0x29, 0x28, 0xb4, 0xd3, 0xfc, 0x37, 0xb6, 0x8c, 0x57, 0xdd, 0x49, 0x09, 0xa6, 0x37, + 0xed, 0x8d, 0xc5, 0xed, 0x85, 0xad, 0xfa, 0xd6, 0x17, 0x9b, 0x4b, 0xf5, 0xed, 0xf5, 0x07, 0xeb, + 0x1b, 0x0f, 0xd7, 0xf9, 0x13, 0x04, 0x06, 0x66, 0x6b, 0xa9, 0xb2, 0x56, 0x2c, 0x90, 0x69, 0x28, + 0x1a, 0xe0, 0xa5, 0xed, 0x6a, 0xb1, 0xef, 0xc6, 0xd7, 0xc6, 0x6b, 0xe5, 0xe4, 0x02, 0x94, 0x6a, + 0xdb, 0x9b, 0x9b, 0x1b, 0xb6, 0x92, 0xaa, 0x3f, 0x80, 0x30, 0x03, 0x67, 0x0c, 0xec, 0x5d, 0x7b, + 0x69, 0xa9, 0x58, 0x60, 0x55, 0x31, 0xc0, 0x9b, 0xf6, 0xd2, 0xda, 0xca, 0xf6, 0x5a, 0xb1, 0xef, + 0x46, 0x5d, 0xbf, 0x41, 0x4a, 0xce, 0xc3, 0xec, 0xe2, 0xd2, 0xce, 0xca, 0xc2, 0x52, 0x96, 0xec, + 0x69, 0x28, 0xea, 0xc8, 0xad, 0x8d, 0xad, 0x4d, 0x2e, 0x5a, 0x87, 0x3e, 0x5c, 0xaa, 0x56, 0xb6, + 0xb7, 0x96, 0xd7, 0x8b, 0xfd, 0xd6, 0xc0, 0x48, 0x5f, 0xb1, 0xef, 0xc6, 0x0f, 0x8c, 0xeb, 0xa5, + 0xac, 0xfa, 0x82, 0x7c, 0xbb, 0x56, 0xb9, 0x97, 0x5f, 0x04, 0xc7, 0xae, 0xdd, 0xad, 0x14, 0x0b, + 0xe4, 0x22, 0x9c, 0x33, 0xa0, 0x9b, 0x95, 0x5a, 0xed, 0xe1, 0x86, 0xbd, 0xb8, 0xba, 0x54, 0xab, + 0x15, 0xfb, 0x6e, 0xec, 0x18, 0x09, 0x26, 0x59, 0x09, 0x6b, 0x77, 0x2b, 0x75, 0x7b, 0xe9, 0xb3, + 0xed, 0x15, 0x7b, 0x69, 0x31, 0x5d, 0x82, 0x81, 0xfd, 0x62, 0xa9, 0x56, 0x2c, 0x90, 0x29, 0x38, + 0x6d, 0x40, 0xd7, 0x37, 0x8a, 0x7d, 0x37, 0x5e, 0x15, 0x39, 0x08, 0xc9, 0x24, 0xc0, 0xe2, 0x52, + 0x6d, 0x61, 0x69, 0x7d, 0x71, 0x65, 0xfd, 0x5e, 0xf1, 0x14, 0x99, 0x80, 0xd1, 0x8a, 0xfa, 0x59, + 0xb8, 0xf1, 0x3e, 0x9c, 0x4e, 0x98, 0xf7, 0x8c, 0x42, 0x19, 0xc6, 0xc5, 0x53, 0xa8, 0x7e, 0xf9, + 0x13, 0x7d, 0xac, 0xdc, 0x52, 0x2f, 0x16, 0x6e, 0x54, 0xe5, 0x03, 0xd7, 0xda, 0x77, 0x4e, 0xc6, + 0x60, 0x78, 0x71, 0xe9, 0x6e, 0x65, 0x7b, 0x75, 0xab, 0x78, 0x8a, 0xfd, 0x58, 0xb0, 0x97, 0x2a, + 0x5b, 0x4b, 0x8b, 0xc5, 0x02, 0x19, 0x85, 0xc1, 0xda, 0x56, 0x65, 0x6b, 0xa9, 0xd8, 0x47, 0x46, + 0x60, 0x60, 0xbb, 0xb6, 0x64, 0x17, 0xfb, 0xe7, 0xff, 0xcd, 0x3f, 0x2a, 0x70, 0x47, 0xa3, 0xbc, + 0x68, 0xf6, 0xb5, 0x66, 0x50, 0x8a, 0x29, 0x4f, 0xbc, 0xe6, 0x9b, 0x6b, 0x3d, 0xe2, 0x2e, 0x60, + 0xae, 0xcb, 0xe1, 0x0e, 0x12, 0x5c, 0x2f, 0xdc, 0x2e, 0x10, 0x1b, 0x83, 0x61, 0x12, 0xf6, 0x95, + 0x92, 0x9c, 0x6d, 0x02, 0xcf, 0x5d, 0xec, 0x6a, 0x96, 0x91, 0x5f, 0x02, 0x4b, 0x97, 0x99, 0x63, + 0x85, 0x7c, 0xf7, 0x78, 0xd6, 0x86, 0x2c, 0xf3, 0xd5, 0xe3, 0x91, 0x93, 0xfb, 0x30, 0xc1, 0xf6, + 0xe6, 0x8a, 0x8c, 0x9c, 0x4f, 0x32, 0x6a, 0x26, 0xc1, 0xdc, 0x85, 0x6c, 0xa4, 0x7a, 0x70, 0x6b, + 0x1c, 0x1b, 0xc2, 0x8d, 0xeb, 0x90, 0xc8, 0x3c, 0x35, 0x12, 0xc2, 0x67, 0xfc, 0xb9, 0x33, 0x09, + 0xf0, 0xce, 0x9d, 0xdb, 0x05, 0x52, 0xc3, 0x24, 0x91, 0xc6, 0x26, 0x9f, 0xc8, 0x9b, 0x8f, 0xe9, + 0xdd, 0x3f, 0xaf, 0x4d, 0x59, 0x3d, 0x8f, 0x9b, 0x63, 0x1d, 0xac, 0x03, 0x49, 0xef, 0x9d, 0xc9, + 0xe5, 0x78, 0x1c, 0x64, 0x6f, 0xab, 0xe7, 0xce, 0xa6, 0x0e, 0xb2, 0x96, 0xd8, 0xee, 0x89, 0x2c, + 0xc1, 0xa4, 0x48, 0x42, 0x21, 0x76, 0xf3, 0xa4, 0x9b, 0x3d, 0x90, 0x2b, 0xe6, 0x1e, 0xea, 0x49, + 0x59, 0x04, 0x64, 0x2e, 0x6e, 0x47, 0xd2, 0x4c, 0x98, 0x3b, 0x9f, 0x89, 0x13, 0xed, 0xbb, 0x0b, + 0x93, 0xa6, 0x71, 0x41, 0x64, 0x07, 0x65, 0xda, 0x1c, 0xb9, 0x15, 0xaa, 0xc3, 0xec, 0x9a, 0xe3, + 0xe2, 0x79, 0x89, 0x08, 0xd2, 0x93, 0x71, 0x70, 0xa4, 0xdc, 0x25, 0x30, 0xae, 0x46, 0xbd, 0xa6, + 0xea, 0x84, 0xbc, 0xc7, 0x33, 0xf0, 0xb3, 0xa9, 0xc9, 0x3d, 0xb2, 0x19, 0xa3, 0x48, 0x2c, 0xf3, + 0xc9, 0xf3, 0xac, 0xb0, 0xd3, 0xb9, 0xbc, 0x48, 0x69, 0xb2, 0x86, 0x9b, 0xf4, 0x84, 0x44, 0x6d, + 0x4c, 0x9c, 0x58, 0x5c, 0x09, 0x53, 0xa1, 0x44, 0x6e, 0x32, 0xe4, 0x39, 0x24, 0x39, 0x8a, 0xcb, + 0x15, 0x76, 0xbb, 0x40, 0xbe, 0xc6, 0xaf, 0x3a, 0x53, 0xdc, 0x43, 0x37, 0xda, 0x17, 0xbb, 0x9f, + 0xf3, 0x99, 0x02, 0xc4, 0x87, 0xd2, 0x45, 0xba, 0x0d, 0xd3, 0x59, 0xc1, 0xd9, 0x4a, 0xa1, 0x5d, + 0x22, 0xb7, 0x73, 0x47, 0x81, 0xcd, 0x4c, 0x8d, 0x66, 0x7e, 0x27, 0x75, 0x89, 0x0d, 0xce, 0x95, + 0xf9, 0x21, 0x4c, 0xb2, 0x51, 0xf2, 0x80, 0xd2, 0x76, 0xa5, 0xe5, 0x3e, 0xa1, 0x21, 0x91, 0x19, + 0xbe, 0x15, 0x28, 0x8f, 0xf7, 0x7a, 0x81, 0x7c, 0x07, 0xc6, 0x1e, 0x3a, 0x51, 0x63, 0x5f, 0x64, + 0xba, 0x95, 0x89, 0x70, 0x11, 0x36, 0x27, 0x7f, 0x21, 0xf2, 0x76, 0x81, 0x7c, 0x04, 0xc3, 0xf7, + 0x68, 0x84, 0x37, 0xcf, 0xaf, 0xa8, 0x58, 0x42, 0xee, 0x9f, 0x5c, 0xf1, 0xd4, 0x2d, 0x24, 0x59, + 0xe1, 0xa4, 0x33, 0x97, 0xdc, 0x02, 0xe0, 0x13, 0x02, 0x4a, 0x48, 0xa2, 0xe7, 0x52, 0xd5, 0x26, + 0xf7, 0xd8, 0xe6, 0xa1, 0x45, 0x23, 0x7a, 0xdc, 0x22, 0xf3, 0x74, 0xb4, 0x0a, 0x93, 0xea, 0x8d, + 0xb2, 0x75, 0x4c, 0x48, 0x64, 0x25, 0x84, 0x85, 0x27, 0x90, 0xf6, 0x3e, 0xfb, 0x2a, 0xf8, 0x03, + 0xdd, 0x98, 0xb9, 0x06, 0x67, 0xd2, 0x59, 0x3d, 0xfd, 0x8d, 0x3e, 0x85, 0x4a, 0x25, 0x72, 0x32, + 0x8d, 0x77, 0xd9, 0x0f, 0x23, 0x93, 0x57, 0x41, 0xb2, 0x79, 0x7f, 0x11, 0xe6, 0xf4, 0x72, 0xcd, + 0x54, 0xeb, 0xf1, 0x9c, 0x9b, 0x97, 0xc1, 0x7d, 0xee, 0x4a, 0x17, 0x0a, 0x61, 0xbf, 0xf5, 0xff, + 0x7a, 0x5f, 0x01, 0xa7, 0x93, 0x45, 0x98, 0x92, 0x65, 0x6d, 0xb4, 0xa9, 0x57, 0xab, 0x2d, 0xe3, + 0x7b, 0x54, 0x32, 0x72, 0x45, 0x83, 0x49, 0xe9, 0x24, 0x8d, 0x62, 0x4b, 0x9f, 0x91, 0xa1, 0x86, + 0x74, 0xcb, 0x5b, 0x13, 0x2f, 0x7d, 0x99, 0x39, 0xc0, 0x1f, 0x70, 0xa7, 0x92, 0xb1, 0xf9, 0xdf, + 0x99, 0x27, 0x5d, 0x0c, 0xa0, 0xb9, 0x1c, 0x13, 0xe2, 0x76, 0x81, 0x7c, 0x01, 0x24, 0x6d, 0x92, + 0x28, 0x15, 0xe6, 0x9a, 0x5f, 0x4a, 0x85, 0x5d, 0xec, 0x99, 0x7b, 0x30, 0xa3, 0xf2, 0x53, 0x69, + 0xa5, 0xce, 0x93, 0x9c, 0xda, 0xe4, 0xd5, 0x92, 0x7c, 0x02, 0x53, 0x62, 0xd0, 0xea, 0x08, 0x52, + 0x54, 0xf3, 0x8f, 0xb0, 0x4a, 0x72, 0xc7, 0xe9, 0x7d, 0x98, 0xa9, 0x25, 0x34, 0xc6, 0x83, 0xf9, + 0xcf, 0x99, 0x22, 0x10, 0x58, 0xa3, 0x11, 0x57, 0x59, 0xb6, 0xac, 0x07, 0x40, 0xb8, 0x53, 0x48, + 0x8a, 0x7b, 0xe2, 0xd2, 0xa7, 0xe4, 0x62, 0xa2, 0xea, 0x0c, 0x88, 0x64, 0x38, 0x81, 0xe5, 0xb6, + 0x6c, 0x8b, 0x3f, 0x2f, 0x8f, 0x50, 0xe3, 0x1c, 0xfd, 0xb2, 0xc1, 0x60, 0x1c, 0xc5, 0x8b, 0x0e, + 0x38, 0x97, 0x4b, 0x41, 0x7e, 0x19, 0x13, 0x43, 0x77, 0x37, 0xab, 0xc8, 0x77, 0xb2, 0xac, 0xdf, + 0x1c, 0xc3, 0x70, 0xee, 0x8d, 0xe3, 0x11, 0x2b, 0x43, 0x76, 0xe2, 0x1e, 0x8d, 0x36, 0x5b, 0x9d, + 0x3d, 0x17, 0x1f, 0x1e, 0x26, 0xca, 0x69, 0xa4, 0x40, 0x62, 0x5c, 0xca, 0x7c, 0x8c, 0x31, 0xa2, + 0x46, 0x7f, 0x48, 0x56, 0xa0, 0xc8, 0xe7, 0x7f, 0x4d, 0xc4, 0xc5, 0x94, 0x08, 0x41, 0xe2, 0x04, + 0xce, 0x41, 0x98, 0xdb, 0x5b, 0xb7, 0x78, 0x6c, 0x14, 0x91, 0xdf, 0xa4, 0xbe, 0xc1, 0x9c, 0x32, + 0x60, 0xea, 0xb1, 0x0c, 0xd6, 0x23, 0x36, 0x0d, 0x69, 0x24, 0x33, 0x50, 0xf1, 0x67, 0xa7, 0xaf, + 0xc6, 0x8b, 0x7d, 0x1a, 0x1b, 0x7f, 0xfa, 0x89, 0x6c, 0x89, 0x3b, 0x6f, 0x12, 0xf5, 0x14, 0x77, + 0x86, 0xd0, 0x57, 0x8d, 0x3d, 0xc9, 0xc9, 0xe4, 0xbe, 0x85, 0x6b, 0x10, 0x66, 0xdd, 0x9a, 0x89, + 0xeb, 0xc6, 0x7e, 0x4b, 0xae, 0x09, 0x8d, 0x6b, 0x67, 0x1e, 0xa7, 0x34, 0xb6, 0x48, 0xb2, 0x2d, + 0x6c, 0x27, 0x08, 0xa8, 0xc7, 0x99, 0xf3, 0xf6, 0x1b, 0x59, 0xdc, 0x1f, 0xe3, 0xd4, 0xa3, 0x71, + 0xf3, 0x3b, 0x87, 0xbd, 0x44, 0xf0, 0x67, 0xd2, 0x6e, 0x17, 0xc8, 0xbb, 0x30, 0x22, 0xea, 0xc8, + 0x98, 0x8c, 0x4a, 0x87, 0x5d, 0x6a, 0x8d, 0x9c, 0xc0, 0x95, 0x84, 0x75, 0x36, 0x69, 0xf2, 0x7a, + 0x9f, 0xd7, 0xf9, 0x5d, 0xb6, 0xd8, 0x36, 0x9f, 0x87, 0x73, 0x41, 0xae, 0xba, 0xc8, 0x59, 0x52, + 0x99, 0x9a, 0x24, 0xa8, 0xc7, 0xf2, 0xc8, 0x85, 0xb0, 0x7d, 0x33, 0xa6, 0x3b, 0x55, 0x59, 0x0b, + 0xd5, 0xbe, 0xd9, 0x00, 0xf7, 0x5a, 0x6b, 0x57, 0xa0, 0x58, 0x69, 0xe0, 0x4a, 0x50, 0xa3, 0x07, + 0x4e, 0x7b, 0xdf, 0x0f, 0xa8, 0x32, 0x5a, 0x92, 0x08, 0x29, 0x6b, 0x46, 0xed, 0x2c, 0x04, 0x62, + 0x95, 0x3a, 0x98, 0x13, 0x7e, 0x56, 0x6d, 0x2d, 0x12, 0xa8, 0x6c, 0x8e, 0x2e, 0x46, 0xca, 0xf4, + 0x02, 0x33, 0xab, 0x5a, 0x2f, 0x26, 0xe6, 0x7d, 0x9c, 0x30, 0x14, 0x71, 0xa8, 0x56, 0x08, 0x05, + 0x52, 0xe6, 0x9c, 0xbc, 0x7e, 0xa4, 0x48, 0x2b, 0xf2, 0xdc, 0x38, 0x56, 0x4b, 0x1e, 0x77, 0x5e, + 0xf1, 0xdf, 0x83, 0xc9, 0x25, 0x36, 0xa1, 0x77, 0x9a, 0x2e, 0x7f, 0x07, 0x83, 0x98, 0x0f, 0x1b, + 0xe4, 0x32, 0x2e, 0xcb, 0x97, 0x09, 0x91, 0x55, 0x98, 0xfe, 0x72, 0x4d, 0xd1, 0x60, 0xb2, 0x3f, + 0xa6, 0xa5, 0x58, 0xf1, 0x14, 0x09, 0x9a, 0xe6, 0xc2, 0xd6, 0x9f, 0xe5, 0x3b, 0xc2, 0x4a, 0xbb, + 0xdd, 0x92, 0x2e, 0x69, 0x7e, 0xf6, 0x7e, 0xcd, 0x30, 0x21, 0x53, 0x78, 0x29, 0x3b, 0xbd, 0x69, + 0xfc, 0x5c, 0x7b, 0x29, 0x3c, 0x47, 0x66, 0x0e, 0xbe, 0xd7, 0x58, 0x54, 0x99, 0xeb, 0x2b, 0xad, + 0x56, 0x8a, 0x39, 0x24, 0xaf, 0x9b, 0xd2, 0xb3, 0x68, 0x7a, 0x95, 0x80, 0x26, 0x3a, 0xdf, 0x75, + 0x55, 0xda, 0x6d, 0x3e, 0x59, 0x5e, 0x52, 0x13, 0x86, 0x89, 0x48, 0x9b, 0xe8, 0x49, 0xbc, 0x98, + 0xdb, 0xef, 0xe3, 0x30, 0x8b, 0x9f, 0x13, 0x27, 0xba, 0xc1, 0x9b, 0x7c, 0x4d, 0x5d, 0x6d, 0xc2, + 0x12, 0x48, 0xb5, 0x4e, 0x9c, 0xc6, 0xad, 0x4f, 0xfc, 0x36, 0xb9, 0xf2, 0xcc, 0x24, 0xe0, 0x52, + 0xde, 0xa5, 0x3c, 0xb4, 0xf2, 0x94, 0x16, 0xc5, 0x60, 0x8a, 0x2b, 0x78, 0xc9, 0x58, 0x1f, 0xd2, + 0x75, 0x2c, 0xe7, 0xe2, 0x55, 0x93, 0x8b, 0xc9, 0xd7, 0xe2, 0x95, 0xd0, 0x9c, 0x67, 0xe4, 0x73, + 0xfb, 0xe4, 0x2e, 0x4c, 0xeb, 0x3d, 0xaa, 0xda, 0x9d, 0x37, 0xfb, 0xe7, 0xc9, 0xd9, 0x82, 0x99, + 0xcc, 0xc7, 0xdd, 0xd5, 0x12, 0xdb, 0xed, 0xe9, 0xf7, 0x5c, 0xa9, 0x14, 0xce, 0x0a, 0xcb, 0x3e, + 0xf1, 0x9c, 0x3d, 0x79, 0xc5, 0x34, 0xfc, 0xb3, 0x5f, 0xbb, 0x9f, 0xbb, 0xd6, 0x83, 0x4a, 0x28, + 0xf4, 0x6b, 0x5c, 0x01, 0x53, 0x65, 0x5c, 0xd1, 0x5c, 0x01, 0x39, 0x05, 0x58, 0xdd, 0x48, 0xd4, + 0x18, 0x98, 0xce, 0x40, 0xe7, 0xab, 0xf8, 0x6a, 0xbe, 0xcc, 0x78, 0x60, 0xed, 0xc8, 0x04, 0xed, + 0xb9, 0x9a, 0xc9, 0x46, 0xf7, 0xb6, 0x25, 0xe7, 0xd4, 0x78, 0x38, 0x7e, 0x95, 0xf3, 0xa4, 0x35, + 0x95, 0xdb, 0xc6, 0x78, 0xa4, 0x3f, 0xe9, 0xb6, 0x31, 0x90, 0xb2, 0x86, 0x57, 0xbb, 0xd2, 0x68, + 0x16, 0x1d, 0xf9, 0x8a, 0xfb, 0x71, 0xcc, 0x22, 0x74, 0x3f, 0x4e, 0xa6, 0xfc, 0xcb, 0xf9, 0x04, + 0xba, 0x70, 0x87, 0x1f, 0xda, 0x9a, 0x24, 0x21, 0xd1, 0x4d, 0xa5, 0x04, 0x2e, 0x39, 0x36, 0x32, + 0x49, 0xf4, 0x22, 0x1e, 0xca, 0x6f, 0x30, 0x47, 0x4b, 0x59, 0xc8, 0x63, 0x6d, 0x53, 0x36, 0xa0, + 0x14, 0x77, 0x66, 0xa2, 0x01, 0x27, 0xec, 0x4a, 0xa9, 0x8c, 0x73, 0xf1, 0x77, 0x9c, 0x94, 0xf8, + 0x5a, 0xea, 0x4b, 0xcf, 0x51, 0x4c, 0xd7, 0x22, 0xf8, 0x7c, 0xae, 0x25, 0x7c, 0x3f, 0x1f, 0x3b, + 0x71, 0x63, 0x68, 0xc6, 0x7c, 0xae, 0x23, 0x95, 0xb1, 0x3a, 0x69, 0x20, 0xf2, 0x5b, 0x7d, 0x31, + 0x4b, 0x4e, 0x98, 0x9e, 0x71, 0xb5, 0x7a, 0xc9, 0x7d, 0x5a, 0x12, 0x71, 0x92, 0x19, 0xf7, 0x38, + 0x55, 0xcb, 0x93, 0xb3, 0x08, 0x63, 0xbc, 0xb6, 0x7c, 0x21, 0x3d, 0x67, 0xa8, 0xc9, 0x58, 0x43, + 0xe7, 0x8c, 0xc6, 0x99, 0xcb, 0xe7, 0x02, 0xba, 0x92, 0x25, 0x38, 0xbf, 0x16, 0xe7, 0xd3, 0x32, + 0x0c, 0x37, 0xb2, 0xd2, 0x02, 0xaf, 0xcd, 0x85, 0xa4, 0x72, 0x8c, 0x0a, 0xe5, 0x37, 0x89, 0xe8, + 0xaa, 0xe9, 0x51, 0xa5, 0xfc, 0xfd, 0xeb, 0x94, 0x78, 0x22, 0x1a, 0x5f, 0x69, 0x92, 0xf9, 0x18, + 0xcf, 0x2a, 0x9f, 0x98, 0x06, 0x45, 0x07, 0x45, 0xb6, 0x98, 0x4d, 0xbc, 0x3e, 0x42, 0x83, 0x28, + 0x95, 0x6f, 0xf1, 0x15, 0x63, 0xf3, 0x96, 0x44, 0xe7, 0xef, 0xdd, 0xd4, 0x9c, 0x9d, 0x2b, 0x31, + 0x1b, 0xdd, 0x4b, 0x6d, 0xdf, 0xd7, 0xe6, 0xec, 0x24, 0x6f, 0x48, 0xae, 0x27, 0x37, 0x6e, 0x29, + 0x92, 0xde, 0x6b, 0x82, 0x08, 0x21, 0x49, 0x04, 0x90, 0x5a, 0x86, 0x1e, 0x4c, 0x64, 0xbe, 0x16, + 0x6c, 0x39, 0xfe, 0x73, 0xa4, 0x65, 0x21, 0x7b, 0xd5, 0xf0, 0x4b, 0x6d, 0xa2, 0x33, 0x39, 0x43, + 0x65, 0x8e, 0xe7, 0x11, 0xf4, 0x92, 0xbd, 0x8e, 0x57, 0x9a, 0x12, 0x0d, 0x74, 0x1b, 0x54, 0xed, + 0x6c, 0x32, 0xb1, 0xf9, 0xed, 0xbf, 0x27, 0x77, 0x4a, 0x49, 0x79, 0x67, 0x13, 0x4e, 0xdb, 0x5e, + 0x15, 0xfb, 0x5a, 0x4e, 0xc6, 0x89, 0x36, 0xe1, 0xa5, 0xa2, 0xd7, 0xba, 0xb5, 0x5a, 0x7b, 0x8c, + 0xb3, 0x8b, 0x19, 0x74, 0xba, 0xe6, 0xee, 0x79, 0xea, 0x26, 0x42, 0xcd, 0x56, 0x46, 0x90, 0x06, + 0x4b, 0x4e, 0x31, 0x06, 0x4a, 0xe5, 0xe7, 0x99, 0x96, 0xbb, 0x77, 0x85, 0xa6, 0x41, 0x44, 0x52, + 0x3c, 0x9a, 0xbb, 0xf5, 0x7c, 0x26, 0x2e, 0x2d, 0x50, 0x7f, 0xa0, 0x5f, 0x09, 0x34, 0x5f, 0xed, + 0x37, 0x05, 0x66, 0xbe, 0xe8, 0x7f, 0x0b, 0xbd, 0x2e, 0xb6, 0xdf, 0xa2, 0xba, 0xd7, 0x45, 0x7b, + 0xf1, 0x3d, 0xe1, 0xf4, 0x20, 0x1f, 0xc3, 0xa8, 0x7a, 0x11, 0x5f, 0xf9, 0xb7, 0x93, 0x8f, 0xf2, + 0xcf, 0x95, 0xd2, 0x08, 0x51, 0xe0, 0xdb, 0xd2, 0xf1, 0x81, 0x65, 0x96, 0x4c, 0x87, 0x51, 0x7e, + 0xb1, 0x6f, 0x4b, 0xaf, 0x87, 0xc1, 0x96, 0x7a, 0x0f, 0x3f, 0xc9, 0xf6, 0x3d, 0x18, 0x8f, 0xdf, + 0xbe, 0xdf, 0x99, 0xd7, 0x18, 0x13, 0x0f, 0xe2, 0x27, 0x19, 0xdf, 0x95, 0x47, 0x1a, 0x58, 0x9e, + 0x89, 0xec, 0xbe, 0x8a, 0x7f, 0x2c, 0xbd, 0x2c, 0x46, 0x4d, 0x53, 0x2f, 0xe9, 0x77, 0x99, 0x7c, + 0xc7, 0xf5, 0xc7, 0x68, 0x55, 0xd7, 0x66, 0x3c, 0x27, 0xad, 0xba, 0x36, 0xeb, 0x39, 0xe8, 0xd8, + 0xe5, 0xff, 0x85, 0x74, 0x29, 0xc4, 0x42, 0x2f, 0x1a, 0xd5, 0x4a, 0xc9, 0xbd, 0x94, 0x87, 0x4e, + 0x8a, 0xae, 0x41, 0x31, 0xf9, 0x72, 0xae, 0xb2, 0xc7, 0x72, 0x9e, 0x38, 0x56, 0x46, 0x5e, 0xee, + 0x93, 0xbb, 0x9b, 0xd2, 0x3f, 0x6e, 0xca, 0xbd, 0x92, 0x5d, 0x29, 0x5d, 0x74, 0xbe, 0xc3, 0x7c, + 0xc2, 0x78, 0x44, 0x57, 0xb7, 0x94, 0x53, 0x8f, 0xf4, 0xea, 0x3b, 0xab, 0x8c, 0x77, 0x77, 0x5d, + 0x99, 0xb4, 0x2a, 0xf3, 0xc8, 0x56, 0x39, 0x0b, 0x7a, 0xbf, 0xb8, 0xd0, 0xf3, 0xf8, 0x97, 0xfc, + 0x02, 0xcc, 0xe6, 0x64, 0x90, 0x27, 0xd7, 0x12, 0x9e, 0xd6, 0xec, 0x0c, 0xf3, 0x6a, 0x80, 0x64, + 0xbe, 0x6e, 0xbf, 0x86, 0x71, 0x03, 0x46, 0x0a, 0x89, 0xd4, 0x59, 0xdc, 0x43, 0x37, 0xda, 0xe7, + 0x8f, 0xb8, 0x6b, 0xd3, 0x66, 0x66, 0xee, 0x09, 0x52, 0x43, 0x5b, 0xc4, 0x80, 0x66, 0x1c, 0xc7, + 0x65, 0x08, 0x9c, 0xcb, 0x16, 0xc8, 0xe6, 0x0e, 0x36, 0x16, 0x32, 0xf2, 0x7b, 0xa8, 0xb1, 0x90, + 0x9f, 0xfb, 0x23, 0xb7, 0x9a, 0x9b, 0x72, 0x8f, 0x94, 0x2d, 0x31, 0x3f, 0xd5, 0x47, 0xae, 0xc4, + 0xfb, 0x4c, 0x62, 0x2a, 0x7b, 0x07, 0xc9, 0x21, 0xef, 0x3e, 0x7b, 0xd8, 0x72, 0xc9, 0x35, 0xb9, + 0xe6, 0xb5, 0xfa, 0xe5, 0xe5, 0x09, 0xc9, 0xad, 0xdf, 0x92, 0xfc, 0x9e, 0xb2, 0xeb, 0x77, 0xdc, + 0x45, 0x57, 0x9d, 0x7f, 0x25, 0x12, 0xc8, 0x18, 0x0d, 0xd5, 0xe0, 0x73, 0x39, 0x70, 0xb2, 0x8e, + 0x81, 0x40, 0x49, 0xa8, 0x66, 0x94, 0x66, 0x67, 0xa8, 0xc9, 0x95, 0xc7, 0xc7, 0xb1, 0x91, 0xe1, + 0xe3, 0x24, 0xe3, 0x38, 0x91, 0x1a, 0x44, 0x8c, 0x63, 0x03, 0x7a, 0xb2, 0x71, 0x9c, 0x10, 0x68, + 0x8e, 0xe3, 0x64, 0x35, 0x93, 0x96, 0x7e, 0x6e, 0xaf, 0x26, 0xab, 0xa9, 0xc6, 0x71, 0xb6, 0xc4, + 0xfc, 0x4c, 0x2c, 0xb9, 0x12, 0xd5, 0x38, 0x36, 0x25, 0xe6, 0x90, 0x1f, 0x73, 0x1c, 0x27, 0x0b, + 0x31, 0xc7, 0xf1, 0x89, 0xea, 0xa7, 0xc6, 0x71, 0x76, 0xfd, 0x4e, 0x3c, 0x8e, 0x13, 0xa9, 0x8b, + 0x8c, 0x86, 0x66, 0x8d, 0xe3, 0x24, 0x3d, 0x1f, 0xc7, 0x49, 0x68, 0xc2, 0xb9, 0xd2, 0x65, 0x1c, + 0x27, 0x39, 0x3f, 0x43, 0x79, 0x89, 0xb4, 0x2b, 0xc7, 0x19, 0xc9, 0xb9, 0x19, 0x5b, 0xc8, 0x43, + 0x74, 0xef, 0x25, 0xe0, 0xc7, 0x1b, 0xcd, 0x17, 0xf2, 0x84, 0xe2, 0x78, 0xde, 0x91, 0x4a, 0x4c, + 0x56, 0xd7, 0xf4, 0x5d, 0x65, 0x67, 0x9d, 0xe9, 0x52, 0xe1, 0x1d, 0x36, 0x6e, 0x9a, 0x5d, 0xe4, + 0x76, 0x4b, 0x9a, 0xd3, 0x45, 0xae, 0x32, 0x65, 0x92, 0x72, 0x73, 0x59, 0xba, 0x8f, 0xef, 0xcf, + 0xe5, 0x01, 0x47, 0x92, 0x6f, 0x3e, 0x61, 0x1c, 0x9d, 0xb8, 0xa6, 0xca, 0x48, 0x4a, 0xd6, 0xf4, + 0xa4, 0xe3, 0x7c, 0x4d, 0xee, 0x1e, 0x52, 0xd9, 0xb6, 0x12, 0x8d, 0xd6, 0xc7, 0x7a, 0x2e, 0x86, + 0x6c, 0xa1, 0x2f, 0x37, 0x0d, 0xd7, 0xfc, 0xc0, 0x79, 0x69, 0xbd, 0x7a, 0x4a, 0x4d, 0xe5, 0x0d, + 0xd2, 0xa5, 0xe6, 0x25, 0x15, 0x52, 0x52, 0xd3, 0xdc, 0x9f, 0xa0, 0xf7, 0x4b, 0xdc, 0xb8, 0xf2, + 0x1e, 0xf9, 0xf9, 0x9e, 0x94, 0x29, 0x23, 0x58, 0x89, 0xd1, 0x62, 0x8c, 0xd8, 0x87, 0xe2, 0x04, + 0x4f, 0x02, 0x73, 0x95, 0x9f, 0xc5, 0x4f, 0x3e, 0x81, 0xa2, 0x98, 0xde, 0x62, 0x01, 0x59, 0x84, + 0xb9, 0x5d, 0x57, 0x95, 0x4e, 0xb7, 0x63, 0xd4, 0xe0, 0x38, 0xce, 0xb6, 0xe3, 0x68, 0x22, 0xdf, + 0x33, 0xc5, 0x96, 0xc3, 0xad, 0xa0, 0x13, 0x46, 0xb4, 0x99, 0xf6, 0x28, 0x99, 0x95, 0x91, 0x91, + 0x11, 0x26, 0xf9, 0xce, 0x3c, 0x59, 0xc1, 0xb9, 0xcd, 0x04, 0x77, 0x73, 0xb9, 0x65, 0x8b, 0xc1, + 0xa9, 0x67, 0x4d, 0x5d, 0xeb, 0x31, 0xeb, 0x94, 0x57, 0x76, 0x6e, 0xa5, 0xe4, 0x81, 0xb6, 0xd0, + 0xd3, 0x31, 0x9b, 0x98, 0xa7, 0xa7, 0x0f, 0x30, 0x16, 0x80, 0xfb, 0x00, 0x7b, 0xa9, 0x27, 0x79, + 0xdb, 0x88, 0x7c, 0x0a, 0xa3, 0x92, 0xb9, 0xb7, 0x56, 0x92, 0xdc, 0xa8, 0x95, 0x45, 0x98, 0x30, + 0xae, 0x52, 0x29, 0x13, 0x27, 0xeb, 0x82, 0x55, 0x97, 0xce, 0x9e, 0x30, 0xae, 0x4c, 0x29, 0x29, + 0x59, 0x17, 0xa9, 0x72, 0xa5, 0x7c, 0x04, 0x63, 0x42, 0xa5, 0x5d, 0xb5, 0x91, 0xef, 0x74, 0x9b, + 0xd1, 0xc2, 0x92, 0x3b, 0x4d, 0x37, 0x5a, 0xf0, 0xbd, 0x47, 0xee, 0x5e, 0x4f, 0xc5, 0xa4, 0x59, + 0x76, 0xe6, 0xc9, 0x57, 0xf8, 0xee, 0xb9, 0x7c, 0x8d, 0x9e, 0x46, 0x4f, 0xfd, 0xe0, 0xb1, 0xeb, + 0xed, 0xf5, 0x10, 0x79, 0xd9, 0x14, 0x99, 0xe4, 0x93, 0x83, 0xe7, 0x2b, 0x98, 0xab, 0xe5, 0x0b, + 0xef, 0x29, 0xa4, 0xfb, 0x1a, 0x53, 0x83, 0x0b, 0x18, 0x42, 0x73, 0xd2, 0xba, 0x77, 0x15, 0xfa, + 0x05, 0xcf, 0xda, 0x28, 0x1d, 0xf6, 0x0d, 0x3f, 0x68, 0xf6, 0x96, 0x58, 0x36, 0xa3, 0x69, 0x13, + 0x6c, 0x52, 0x19, 0x5f, 0xc0, 0xb9, 0x5a, 0xae, 0xe8, 0x5e, 0x22, 0x7a, 0x6d, 0x27, 0xcf, 0xa3, + 0x2a, 0x4e, 0x58, 0xef, 0xae, 0x32, 0x57, 0x70, 0x62, 0x63, 0x8b, 0xd1, 0x66, 0x40, 0x1f, 0xd1, + 0x00, 0x63, 0xb6, 0x7b, 0x45, 0x2b, 0x9b, 0xe4, 0xb2, 0xe5, 0x2b, 0x70, 0xa6, 0x96, 0x12, 0x95, + 0xc7, 0xd2, 0xeb, 0x10, 0x68, 0x0a, 0x5b, 0x7a, 0xcc, 0x7a, 0xf5, 0x08, 0x15, 0x1a, 0xbb, 0x47, + 0xa3, 0xed, 0x95, 0x1e, 0x5a, 0x92, 0x97, 0x0a, 0x24, 0xe1, 0xce, 0x1d, 0xc6, 0x59, 0xd3, 0x38, + 0xd3, 0x14, 0xb9, 0x1f, 0xef, 0xa7, 0xf2, 0x40, 0xa4, 0x67, 0xb1, 0x79, 0x12, 0xde, 0xc4, 0xb9, + 0x50, 0xc4, 0x2d, 0xcf, 0xc6, 0xfb, 0x00, 0x0e, 0x89, 0xfd, 0x75, 0x5a, 0x08, 0x73, 0x48, 0x2a, + 0xdc, 0x06, 0xe4, 0xc3, 0x43, 0xc0, 0x2e, 0xa5, 0xe2, 0xd9, 0xbb, 0x8a, 0xe0, 0xae, 0xd0, 0x55, + 0xbf, 0xf1, 0x58, 0x77, 0x85, 0xb2, 0xdf, 0x49, 0x1f, 0x21, 0x83, 0xed, 0xcc, 0x8b, 0x19, 0x9f, + 0xfd, 0x30, 0xa2, 0xbf, 0x10, 0x10, 0xcf, 0xf8, 0x49, 0xb8, 0x70, 0x23, 0xbd, 0x29, 0x1d, 0x8c, + 0x58, 0xa0, 0x29, 0x39, 0x57, 0x35, 0xca, 0xb7, 0x88, 0x4c, 0xa6, 0x6f, 0x51, 0xaf, 0x68, 0xbe, + 0x43, 0x9f, 0xd8, 0xb4, 0xdd, 0xc2, 0x50, 0xe8, 0x03, 0x9f, 0xf3, 0xc4, 0xd1, 0xb1, 0x69, 0x54, + 0xef, 0x20, 0xae, 0x29, 0x11, 0xfa, 0x63, 0x28, 0x5e, 0x65, 0x55, 0x4e, 0xe3, 0x62, 0x55, 0xea, + 0x11, 0x49, 0xb7, 0x0b, 0x64, 0x1d, 0xce, 0xde, 0xa3, 0x91, 0x98, 0xe3, 0x6c, 0x1a, 0x46, 0x81, + 0xdb, 0x88, 0xba, 0x9e, 0x0e, 0x4a, 0x03, 0x25, 0x83, 0x67, 0xe7, 0x2d, 0x26, 0xaf, 0x96, 0x2d, + 0xaf, 0x2b, 0x5f, 0x97, 0x38, 0x59, 0x71, 0xe4, 0x70, 0x92, 0x2a, 0xe6, 0x0f, 0xf1, 0x61, 0x1e, + 0x86, 0x93, 0xcf, 0x5a, 0x8c, 0x53, 0xa0, 0x08, 0x93, 0xeb, 0x26, 0x0c, 0x71, 0xa6, 0xdc, 0x05, + 0x75, 0x5c, 0xe7, 0x21, 0x77, 0x60, 0x54, 0xc5, 0xd1, 0x10, 0x03, 0x95, 0x5b, 0xaf, 0x3b, 0x30, + 0xca, 0xed, 0xab, 0xe3, 0xb3, 0x7c, 0x00, 0xa3, 0x2a, 0xf0, 0xe6, 0xc4, 0x2b, 0xfd, 0x27, 0x30, + 0xa1, 0x87, 0xe0, 0x9c, 0x5c, 0x91, 0x1f, 0xe1, 0x19, 0xae, 0x3c, 0x2a, 0xc9, 0xe7, 0x9f, 0x49, + 0x64, 0x86, 0x11, 0x2a, 0xe5, 0x13, 0xa4, 0x04, 0xe6, 0x56, 0xff, 0x4c, 0x8a, 0x9b, 0x7c, 0x20, + 0xaf, 0x33, 0x29, 0xe6, 0x34, 0x51, 0x17, 0x9d, 0x4d, 0x72, 0x35, 0x3f, 0x0f, 0xb3, 0x9a, 0x60, + 0x7b, 0x56, 0xfb, 0x38, 0x67, 0xcd, 0xbd, 0x55, 0x97, 0x27, 0x65, 0x03, 0x77, 0x69, 0xa9, 0x97, + 0x02, 0xf3, 0x05, 0x5d, 0xca, 0x7f, 0x5c, 0x10, 0x3b, 0xe3, 0x3e, 0x9a, 0x82, 0x29, 0x6c, 0x6e, + 0xf3, 0xba, 0x3c, 0x56, 0x18, 0xdb, 0xbe, 0x69, 0x71, 0x5d, 0xd8, 0xba, 0x99, 0xd2, 0xe2, 0x92, + 0xe6, 0x4b, 0x11, 0xb7, 0x22, 0x23, 0x19, 0x8f, 0xdf, 0xd8, 0xfc, 0x9a, 0x9d, 0xcf, 0x38, 0xdd, + 0xee, 0xd9, 0x17, 0x79, 0xe2, 0x7e, 0x01, 0x77, 0x87, 0x99, 0xa9, 0xc1, 0xf2, 0x85, 0x5d, 0xd7, + 0x02, 0x24, 0x32, 0x39, 0xd5, 0xa2, 0xf7, 0x18, 0xef, 0x89, 0x65, 0xbf, 0xa5, 0xf8, 0x6a, 0x0f, + 0x29, 0x52, 0x13, 0xaf, 0xf5, 0xa4, 0x53, 0x67, 0xa5, 0xe7, 0xf9, 0x0a, 0x9b, 0x5d, 0x5e, 0x8f, + 0xb7, 0x21, 0x33, 0x8e, 0xaf, 0x55, 0x98, 0x68, 0xb6, 0x40, 0x33, 0x4c, 0xb4, 0x6b, 0x1b, 0xf2, + 0xd4, 0xff, 0x19, 0x94, 0xe3, 0x28, 0x90, 0x93, 0x75, 0x42, 0x7e, 0x74, 0x22, 0x49, 0x69, 0x2a, + 0x24, 0xdd, 0xde, 0x14, 0x9a, 0xbb, 0x92, 0xa7, 0x61, 0xfd, 0x2e, 0x8c, 0x88, 0x6e, 0x4b, 0xbc, + 0x2a, 0x9a, 0xf7, 0x3e, 0x69, 0x17, 0x67, 0xac, 0xb8, 0x38, 0xf7, 0x52, 0x04, 0xa5, 0x7b, 0xfb, + 0xe4, 0x82, 0x54, 0x90, 0x46, 0x42, 0x90, 0xd5, 0xa5, 0x7b, 0x7b, 0x9f, 0x3f, 0x96, 0x72, 0xfa, + 0xf5, 0xe4, 0x1d, 0xea, 0xc4, 0x97, 0xc5, 0x12, 0x99, 0x04, 0xf5, 0x0b, 0xba, 0x69, 0x54, 0xf2, + 0xa6, 0x53, 0x16, 0x85, 0x8a, 0x8c, 0x2a, 0xc9, 0x22, 0x18, 0x9c, 0x99, 0x22, 0x7e, 0xe0, 0x46, + 0xcf, 0x16, 0xec, 0xd5, 0xd8, 0xad, 0xa0, 0x23, 0xa4, 0x6c, 0x90, 0x48, 0x7b, 0x95, 0x7c, 0x89, + 0x53, 0x89, 0x10, 0x5f, 0xf5, 0xfd, 0x28, 0x8c, 0x02, 0xa7, 0x5d, 0xc3, 0xd7, 0x96, 0x73, 0x1b, + 0x1d, 0x07, 0x72, 0x67, 0xb1, 0x69, 0x71, 0xa5, 0x22, 0x99, 0x7d, 0x56, 0xfa, 0x1b, 0x75, 0xb7, + 0x26, 0x0b, 0xd9, 0xc5, 0x72, 0xa9, 0xc9, 0xf4, 0xf5, 0x2f, 0x53, 0x68, 0x1d, 0x66, 0x73, 0x92, + 0x06, 0xa9, 0x23, 0xdc, 0xee, 0x49, 0x85, 0xe6, 0xba, 0x17, 0x4c, 0xbe, 0x82, 0x99, 0xcc, 0xac, + 0x42, 0xca, 0x0d, 0xdd, 0x2d, 0xe7, 0x50, 0x2f, 0xe1, 0x8f, 0xa1, 0xc4, 0x6f, 0x75, 0x60, 0xf0, + 0xb2, 0x91, 0x60, 0x26, 0xbe, 0xeb, 0x93, 0x43, 0x90, 0x9c, 0xaf, 0xf3, 0xe9, 0xd4, 0x8d, 0xf3, + 0x69, 0xcc, 0x2c, 0x22, 0x9f, 0x87, 0x16, 0x6f, 0xfc, 0xab, 0x0f, 0x2f, 0x0b, 0xd9, 0xed, 0x42, + 0xd1, 0x26, 0xcc, 0xec, 0xd0, 0xc0, 0x7d, 0xf4, 0x2c, 0x29, 0x50, 0x6a, 0x26, 0x13, 0xdb, 0x4d, + 0xe2, 0xe7, 0x30, 0xbb, 0xe0, 0x1f, 0xb4, 0xc5, 0xd5, 0x3d, 0x43, 0xa6, 0x3a, 0x8f, 0xcf, 0xc6, + 0xf7, 0x0e, 0x68, 0x9a, 0x53, 0x77, 0x0b, 0x75, 0xbe, 0x05, 0xbc, 0xd3, 0x7a, 0xdd, 0x8c, 0x29, + 0xc8, 0x20, 0x89, 0x6f, 0x64, 0x48, 0x53, 0x4e, 0xe7, 0xdf, 0xc2, 0x41, 0x98, 0xe0, 0xe3, 0xbe, + 0x39, 0x6d, 0x10, 0x66, 0xe1, 0xbb, 0x5f, 0x04, 0xcb, 0x90, 0xca, 0x0b, 0xcc, 0x97, 0x7a, 0x8c, + 0xda, 0xae, 0xcb, 0xb5, 0xc5, 0x7c, 0xce, 0x3f, 0x11, 0x39, 0x9d, 0xf9, 0xd6, 0x7f, 0x66, 0x3d, + 0xb5, 0xd4, 0x0a, 0xad, 0x56, 0x97, 0x2d, 0x16, 0xd1, 0x73, 0x2b, 0x30, 0x4a, 0xf4, 0xe4, 0x4f, + 0xe8, 0xbc, 0xdd, 0x66, 0xeb, 0x14, 0x33, 0x6e, 0x6a, 0xdf, 0x87, 0xf1, 0x9a, 0x5e, 0x78, 0x46, + 0x21, 0xb9, 0x83, 0x42, 0x5d, 0x05, 0xea, 0x5d, 0xf7, 0x2e, 0x01, 0xa1, 0x6a, 0xe1, 0x39, 0x56, + 0x2b, 0x72, 0xe3, 0x67, 0x8c, 0x07, 0xe8, 0xd4, 0x2a, 0x90, 0xf5, 0x3e, 0xa4, 0x8a, 0x9f, 0xc9, + 0x7e, 0xb3, 0xae, 0xce, 0x9f, 0xb5, 0x49, 0x3e, 0xff, 0x49, 0xac, 0xde, 0xef, 0xec, 0xaa, 0xc0, + 0xf8, 0xae, 0xef, 0x87, 0xf2, 0x60, 0x9f, 0xf8, 0xc9, 0x3d, 0x3d, 0xd8, 0x27, 0xf5, 0x90, 0x9f, + 0x1e, 0xec, 0x93, 0xf1, 0x4a, 0xdf, 0x12, 0xca, 0x8a, 0xdf, 0x03, 0xea, 0xe2, 0x8c, 0x50, 0x62, + 0x32, 0x9e, 0x1d, 0x7a, 0xa0, 0x67, 0xe8, 0xe0, 0xaf, 0x08, 0x75, 0xf1, 0xb5, 0x26, 0x33, 0x73, + 0x24, 0x9e, 0x1d, 0xba, 0x0b, 0x45, 0xfe, 0xa0, 0x42, 0x9c, 0xd8, 0x30, 0x8e, 0xff, 0x4b, 0xbf, + 0xf3, 0xd0, 0xa5, 0x53, 0x8b, 0xc9, 0x74, 0x70, 0xca, 0x65, 0x96, 0x93, 0x27, 0xae, 0xcb, 0x50, + 0x85, 0x38, 0xe9, 0x9b, 0x72, 0x4c, 0xa5, 0xf2, 0xc0, 0xcd, 0x9d, 0xcb, 0xc0, 0xa8, 0x2d, 0xe5, + 0xb8, 0x9e, 0x22, 0x4e, 0x35, 0x29, 0x23, 0x6f, 0xdc, 0xdc, 0xf9, 0x4c, 0x9c, 0x10, 0x14, 0xf1, + 0xa7, 0xa6, 0xb3, 0x5f, 0xfe, 0x8e, 0x6f, 0x73, 0x75, 0xa1, 0x91, 0xc5, 0xdc, 0x38, 0x0e, 0xa9, + 0x28, 0x95, 0xaa, 0xd7, 0x90, 0x32, 0x9e, 0x1b, 0x7f, 0x2d, 0xe3, 0xc2, 0x85, 0x41, 0x11, 0x87, + 0x84, 0x75, 0x7f, 0xfb, 0x9c, 0x3c, 0x94, 0xaf, 0xd3, 0xe4, 0x94, 0xd4, 0x4b, 0x40, 0x6e, 0x0f, + 0x3e, 0x94, 0xef, 0xd1, 0xbc, 0x6c, 0xc1, 0xbb, 0x70, 0x21, 0x71, 0x8b, 0xc3, 0x14, 0x7c, 0x23, + 0xfb, 0xaa, 0x47, 0xa6, 0x7a, 0xf2, 0xf7, 0xec, 0x97, 0xd3, 0xb7, 0x3d, 0x12, 0xfd, 0x7e, 0xd2, + 0x39, 0x6f, 0x0d, 0x26, 0x71, 0x9a, 0x91, 0x0f, 0xe7, 0xc7, 0x09, 0x62, 0x4c, 0x70, 0x32, 0x53, + 0x51, 0x12, 0xab, 0x2e, 0x91, 0x8f, 0x8b, 0x9b, 0xc1, 0xfc, 0x19, 0xfe, 0x39, 0xf3, 0xba, 0x30, + 0x02, 0xb3, 0x56, 0x31, 0xf1, 0xba, 0x3f, 0xf9, 0x08, 0x4e, 0xc7, 0x17, 0x86, 0xb9, 0x88, 0x0c, + 0xb2, 0x2e, 0x8e, 0xb2, 0xd3, 0xf1, 0xad, 0xe1, 0x93, 0xb3, 0x2f, 0xcb, 0xa5, 0x28, 0x66, 0xbf, + 0x98, 0xba, 0xf3, 0x62, 0xb4, 0xe1, 0x38, 0x2b, 0x92, 0xa6, 0xdb, 0x93, 0xf6, 0x4e, 0x03, 0x3f, + 0xb7, 0xec, 0xdc, 0x87, 0xfa, 0xe7, 0xd6, 0x35, 0x3f, 0xa3, 0xda, 0xfe, 0xe6, 0xc8, 0x59, 0x83, + 0xab, 0x98, 0x2f, 0x65, 0x93, 0x67, 0xc8, 0xcb, 0xa6, 0xca, 0xaf, 0x7b, 0x32, 0xcb, 0x4a, 0x0b, + 0xae, 0xf4, 0x4c, 0xfe, 0x48, 0x6e, 0x19, 0x71, 0x2e, 0xbd, 0xd3, 0x44, 0x76, 0xb1, 0x3c, 0xa6, + 0xb3, 0x72, 0x28, 0xaa, 0x75, 0xb6, 0x4b, 0x3a, 0x47, 0xb5, 0xce, 0x76, 0x4d, 0xc2, 0xf8, 0x39, + 0x3e, 0xf9, 0x24, 0xd6, 0x28, 0xcc, 0x81, 0x44, 0x3d, 0x9e, 0x19, 0xba, 0xeb, 0xb1, 0xcf, 0x15, + 0xf3, 0x50, 0x34, 0xc5, 0x88, 0x36, 0xcd, 0x25, 0x61, 0x89, 0xe5, 0x09, 0xef, 0x2d, 0xa4, 0x4b, + 0x7c, 0xf5, 0x25, 0x3e, 0x00, 0x4f, 0x5c, 0xf3, 0x1c, 0x78, 0x75, 0xf1, 0x27, 0xff, 0xf5, 0x52, + 0xe1, 0x27, 0x3f, 0xbd, 0x54, 0xf8, 0x8f, 0x3f, 0xbd, 0x54, 0xf8, 0x2f, 0x3f, 0xbd, 0x54, 0xf8, + 0x72, 0xfe, 0x78, 0xf9, 0x89, 0xf9, 0x23, 0x8d, 0xb7, 0xb8, 0xb8, 0x21, 0xfc, 0xef, 0xcd, 0xff, + 0x1b, 0x00, 0x00, 0xff, 0xff, 0x0b, 0x2d, 0x2b, 0xdd, 0x39, 0xef, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -17460,14 +17458,8 @@ type AuthServiceClient interface { GetTrustedClusters(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*types.TrustedClusterV2List, error) // UpsertTrustedCluster upserts a Trusted Cluster in a backend. // - // Deprecated: Use UpsertTrustedClusterV2 instead. + // Deprecated: Use [teleport.trust.v1.UpsertTrustedClusterV2] instead. UpsertTrustedCluster(ctx context.Context, in *types.TrustedClusterV2, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) - // UpsertTrustedClusterV2 upserts a Trusted Cluster in a backend. - UpsertTrustedClusterV2(ctx context.Context, in *types.TrustedClusterV2, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) - // CreateTrustedClusterV2 creates a Trusted Cluster in a backend. - CreateTrustedClusterV2(ctx context.Context, in *types.TrustedClusterV2, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) - // UpdateTrustedClusterV2 updates a Trusted Cluster in a backend. - UpdateTrustedClusterV2(ctx context.Context, in *types.TrustedClusterV2, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) // DeleteTrustedCluster deletes an existing Trusted Cluster in a backend by name. DeleteTrustedCluster(ctx context.Context, in *types.ResourceRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // GetToken retrieves a token described by the given request. @@ -19456,33 +19448,6 @@ func (c *authServiceClient) UpsertTrustedCluster(ctx context.Context, in *types. return out, nil } -func (c *authServiceClient) UpsertTrustedClusterV2(ctx context.Context, in *types.TrustedClusterV2, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) { - out := new(types.TrustedClusterV2) - err := c.cc.Invoke(ctx, "/proto.AuthService/UpsertTrustedClusterV2", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authServiceClient) CreateTrustedClusterV2(ctx context.Context, in *types.TrustedClusterV2, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) { - out := new(types.TrustedClusterV2) - err := c.cc.Invoke(ctx, "/proto.AuthService/CreateTrustedClusterV2", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authServiceClient) UpdateTrustedClusterV2(ctx context.Context, in *types.TrustedClusterV2, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) { - out := new(types.TrustedClusterV2) - err := c.cc.Invoke(ctx, "/proto.AuthService/UpdateTrustedClusterV2", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *authServiceClient) DeleteTrustedCluster(ctx context.Context, in *types.ResourceRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/proto.AuthService/DeleteTrustedCluster", in, out, opts...) @@ -20874,14 +20839,8 @@ type AuthServiceServer interface { GetTrustedClusters(context.Context, *emptypb.Empty) (*types.TrustedClusterV2List, error) // UpsertTrustedCluster upserts a Trusted Cluster in a backend. // - // Deprecated: Use UpsertTrustedClusterV2 instead. + // Deprecated: Use [teleport.trust.v1.UpsertTrustedClusterV2] instead. UpsertTrustedCluster(context.Context, *types.TrustedClusterV2) (*types.TrustedClusterV2, error) - // UpsertTrustedClusterV2 upserts a Trusted Cluster in a backend. - UpsertTrustedClusterV2(context.Context, *types.TrustedClusterV2) (*types.TrustedClusterV2, error) - // CreateTrustedClusterV2 creates a Trusted Cluster in a backend. - CreateTrustedClusterV2(context.Context, *types.TrustedClusterV2) (*types.TrustedClusterV2, error) - // UpdateTrustedClusterV2 updates a Trusted Cluster in a backend. - UpdateTrustedClusterV2(context.Context, *types.TrustedClusterV2) (*types.TrustedClusterV2, error) // DeleteTrustedCluster deletes an existing Trusted Cluster in a backend by name. DeleteTrustedCluster(context.Context, *types.ResourceRequest) (*emptypb.Empty, error) // GetToken retrieves a token described by the given request. @@ -21617,15 +21576,6 @@ func (*UnimplementedAuthServiceServer) GetTrustedClusters(ctx context.Context, r func (*UnimplementedAuthServiceServer) UpsertTrustedCluster(ctx context.Context, req *types.TrustedClusterV2) (*types.TrustedClusterV2, error) { return nil, status.Errorf(codes.Unimplemented, "method UpsertTrustedCluster not implemented") } -func (*UnimplementedAuthServiceServer) UpsertTrustedClusterV2(ctx context.Context, req *types.TrustedClusterV2) (*types.TrustedClusterV2, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpsertTrustedClusterV2 not implemented") -} -func (*UnimplementedAuthServiceServer) CreateTrustedClusterV2(ctx context.Context, req *types.TrustedClusterV2) (*types.TrustedClusterV2, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateTrustedClusterV2 not implemented") -} -func (*UnimplementedAuthServiceServer) UpdateTrustedClusterV2(ctx context.Context, req *types.TrustedClusterV2) (*types.TrustedClusterV2, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateTrustedClusterV2 not implemented") -} func (*UnimplementedAuthServiceServer) DeleteTrustedCluster(ctx context.Context, req *types.ResourceRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteTrustedCluster not implemented") } @@ -24696,60 +24646,6 @@ func _AuthService_UpsertTrustedCluster_Handler(srv interface{}, ctx context.Cont return interceptor(ctx, in, info, handler) } -func _AuthService_UpsertTrustedClusterV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(types.TrustedClusterV2) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServiceServer).UpsertTrustedClusterV2(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/proto.AuthService/UpsertTrustedClusterV2", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServiceServer).UpsertTrustedClusterV2(ctx, req.(*types.TrustedClusterV2)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthService_CreateTrustedClusterV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(types.TrustedClusterV2) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServiceServer).CreateTrustedClusterV2(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/proto.AuthService/CreateTrustedClusterV2", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServiceServer).CreateTrustedClusterV2(ctx, req.(*types.TrustedClusterV2)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthService_UpdateTrustedClusterV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(types.TrustedClusterV2) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServiceServer).UpdateTrustedClusterV2(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/proto.AuthService/UpdateTrustedClusterV2", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServiceServer).UpdateTrustedClusterV2(ctx, req.(*types.TrustedClusterV2)) - } - return interceptor(ctx, in, info, handler) -} - func _AuthService_DeleteTrustedCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(types.ResourceRequest) if err := dec(in); err != nil { @@ -27218,18 +27114,6 @@ var _AuthService_serviceDesc = grpc.ServiceDesc{ MethodName: "UpsertTrustedCluster", Handler: _AuthService_UpsertTrustedCluster_Handler, }, - { - MethodName: "UpsertTrustedClusterV2", - Handler: _AuthService_UpsertTrustedClusterV2_Handler, - }, - { - MethodName: "CreateTrustedClusterV2", - Handler: _AuthService_CreateTrustedClusterV2_Handler, - }, - { - MethodName: "UpdateTrustedClusterV2", - Handler: _AuthService_UpdateTrustedClusterV2_Handler, - }, { MethodName: "DeleteTrustedCluster", Handler: _AuthService_DeleteTrustedCluster_Handler, diff --git a/api/gen/proto/go/teleport/trust/v1/trust_service.pb.go b/api/gen/proto/go/teleport/trust/v1/trust_service.pb.go index 059d839a5a363..2eab8875c3536 100644 --- a/api/gen/proto/go/teleport/trust/v1/trust_service.pb.go +++ b/api/gen/proto/go/teleport/trust/v1/trust_service.pb.go @@ -38,6 +38,147 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// Request for UpsertTrustedClusterV2. +type UpsertTrustedClusterV2Request struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // TrustedCluster specifies a Trusted Cluster resource. + TrustedCluster *types.TrustedClusterV2 `protobuf:"bytes,1,opt,name=trusted_cluster,json=trustedCluster,proto3" json:"trusted_cluster,omitempty"` +} + +func (x *UpsertTrustedClusterV2Request) Reset() { + *x = UpsertTrustedClusterV2Request{} + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpsertTrustedClusterV2Request) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpsertTrustedClusterV2Request) ProtoMessage() {} + +func (x *UpsertTrustedClusterV2Request) ProtoReflect() protoreflect.Message { + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpsertTrustedClusterV2Request.ProtoReflect.Descriptor instead. +func (*UpsertTrustedClusterV2Request) Descriptor() ([]byte, []int) { + return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{0} +} + +func (x *UpsertTrustedClusterV2Request) GetTrustedCluster() *types.TrustedClusterV2 { + if x != nil { + return x.TrustedCluster + } + return nil +} + +// Request for CreateTrustedClusterV2. +type CreateTrustedClusterV2Request struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // TrustedCluster specifies a Trusted Cluster resource. + TrustedCluster *types.TrustedClusterV2 `protobuf:"bytes,1,opt,name=trusted_cluster,json=trustedCluster,proto3" json:"trusted_cluster,omitempty"` +} + +func (x *CreateTrustedClusterV2Request) Reset() { + *x = CreateTrustedClusterV2Request{} + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateTrustedClusterV2Request) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTrustedClusterV2Request) ProtoMessage() {} + +func (x *CreateTrustedClusterV2Request) ProtoReflect() protoreflect.Message { + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateTrustedClusterV2Request.ProtoReflect.Descriptor instead. +func (*CreateTrustedClusterV2Request) Descriptor() ([]byte, []int) { + return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{1} +} + +func (x *CreateTrustedClusterV2Request) GetTrustedCluster() *types.TrustedClusterV2 { + if x != nil { + return x.TrustedCluster + } + return nil +} + +// Request for UpdateTrustedClusterV2. +type UpdateTrustedClusterV2Request struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // TrustedCluster specifies a Trusted Cluster resource. + TrustedCluster *types.TrustedClusterV2 `protobuf:"bytes,1,opt,name=trusted_cluster,json=trustedCluster,proto3" json:"trusted_cluster,omitempty"` +} + +func (x *UpdateTrustedClusterV2Request) Reset() { + *x = UpdateTrustedClusterV2Request{} + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateTrustedClusterV2Request) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateTrustedClusterV2Request) ProtoMessage() {} + +func (x *UpdateTrustedClusterV2Request) ProtoReflect() protoreflect.Message { + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateTrustedClusterV2Request.ProtoReflect.Descriptor instead. +func (*UpdateTrustedClusterV2Request) Descriptor() ([]byte, []int) { + return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{2} +} + +func (x *UpdateTrustedClusterV2Request) GetTrustedCluster() *types.TrustedClusterV2 { + if x != nil { + return x.TrustedCluster + } + return nil +} + // Request for GetCertAuthority type GetCertAuthorityRequest struct { state protoimpl.MessageState @@ -54,7 +195,7 @@ type GetCertAuthorityRequest struct { func (x *GetCertAuthorityRequest) Reset() { *x = GetCertAuthorityRequest{} - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[0] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -66,7 +207,7 @@ func (x *GetCertAuthorityRequest) String() string { func (*GetCertAuthorityRequest) ProtoMessage() {} func (x *GetCertAuthorityRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[0] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -79,7 +220,7 @@ func (x *GetCertAuthorityRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCertAuthorityRequest.ProtoReflect.Descriptor instead. func (*GetCertAuthorityRequest) Descriptor() ([]byte, []int) { - return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{0} + return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{3} } func (x *GetCertAuthorityRequest) GetType() string { @@ -117,7 +258,7 @@ type GetCertAuthoritiesRequest struct { func (x *GetCertAuthoritiesRequest) Reset() { *x = GetCertAuthoritiesRequest{} - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[1] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -129,7 +270,7 @@ func (x *GetCertAuthoritiesRequest) String() string { func (*GetCertAuthoritiesRequest) ProtoMessage() {} func (x *GetCertAuthoritiesRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[1] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -142,7 +283,7 @@ func (x *GetCertAuthoritiesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCertAuthoritiesRequest.ProtoReflect.Descriptor instead. func (*GetCertAuthoritiesRequest) Descriptor() ([]byte, []int) { - return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{1} + return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{4} } func (x *GetCertAuthoritiesRequest) GetType() string { @@ -171,7 +312,7 @@ type GetCertAuthoritiesResponse struct { func (x *GetCertAuthoritiesResponse) Reset() { *x = GetCertAuthoritiesResponse{} - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[2] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -183,7 +324,7 @@ func (x *GetCertAuthoritiesResponse) String() string { func (*GetCertAuthoritiesResponse) ProtoMessage() {} func (x *GetCertAuthoritiesResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[2] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -196,7 +337,7 @@ func (x *GetCertAuthoritiesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetCertAuthoritiesResponse.ProtoReflect.Descriptor instead. func (*GetCertAuthoritiesResponse) Descriptor() ([]byte, []int) { - return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{2} + return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{5} } func (x *GetCertAuthoritiesResponse) GetCertAuthoritiesV2() []*types.CertAuthorityV2 { @@ -220,7 +361,7 @@ type DeleteCertAuthorityRequest struct { func (x *DeleteCertAuthorityRequest) Reset() { *x = DeleteCertAuthorityRequest{} - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[3] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -232,7 +373,7 @@ func (x *DeleteCertAuthorityRequest) String() string { func (*DeleteCertAuthorityRequest) ProtoMessage() {} func (x *DeleteCertAuthorityRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[3] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -245,7 +386,7 @@ func (x *DeleteCertAuthorityRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteCertAuthorityRequest.ProtoReflect.Descriptor instead. func (*DeleteCertAuthorityRequest) Descriptor() ([]byte, []int) { - return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{3} + return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{6} } func (x *DeleteCertAuthorityRequest) GetType() string { @@ -274,7 +415,7 @@ type UpsertCertAuthorityRequest struct { func (x *UpsertCertAuthorityRequest) Reset() { *x = UpsertCertAuthorityRequest{} - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[4] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -286,7 +427,7 @@ func (x *UpsertCertAuthorityRequest) String() string { func (*UpsertCertAuthorityRequest) ProtoMessage() {} func (x *UpsertCertAuthorityRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[4] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -299,7 +440,7 @@ func (x *UpsertCertAuthorityRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpsertCertAuthorityRequest.ProtoReflect.Descriptor instead. func (*UpsertCertAuthorityRequest) Descriptor() ([]byte, []int) { - return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{4} + return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{7} } func (x *UpsertCertAuthorityRequest) GetCertAuthority() *types.CertAuthorityV2 { @@ -339,7 +480,7 @@ type RotateCertAuthorityRequest struct { func (x *RotateCertAuthorityRequest) Reset() { *x = RotateCertAuthorityRequest{} - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[5] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -351,7 +492,7 @@ func (x *RotateCertAuthorityRequest) String() string { func (*RotateCertAuthorityRequest) ProtoMessage() {} func (x *RotateCertAuthorityRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[5] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -364,7 +505,7 @@ func (x *RotateCertAuthorityRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RotateCertAuthorityRequest.ProtoReflect.Descriptor instead. func (*RotateCertAuthorityRequest) Descriptor() ([]byte, []int) { - return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{5} + return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{8} } func (x *RotateCertAuthorityRequest) GetType() string { @@ -418,7 +559,7 @@ type RotationSchedule struct { func (x *RotationSchedule) Reset() { *x = RotationSchedule{} - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[6] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -430,7 +571,7 @@ func (x *RotationSchedule) String() string { func (*RotationSchedule) ProtoMessage() {} func (x *RotationSchedule) ProtoReflect() protoreflect.Message { - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[6] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -443,7 +584,7 @@ func (x *RotationSchedule) ProtoReflect() protoreflect.Message { // Deprecated: Use RotationSchedule.ProtoReflect.Descriptor instead. func (*RotationSchedule) Descriptor() ([]byte, []int) { - return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{6} + return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{9} } func (x *RotationSchedule) GetUpdateClients() *timestamppb.Timestamp { @@ -476,7 +617,7 @@ type RotateCertAuthorityResponse struct { func (x *RotateCertAuthorityResponse) Reset() { *x = RotateCertAuthorityResponse{} - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[7] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -488,7 +629,7 @@ func (x *RotateCertAuthorityResponse) String() string { func (*RotateCertAuthorityResponse) ProtoMessage() {} func (x *RotateCertAuthorityResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[7] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -501,7 +642,7 @@ func (x *RotateCertAuthorityResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RotateCertAuthorityResponse.ProtoReflect.Descriptor instead. func (*RotateCertAuthorityResponse) Descriptor() ([]byte, []int) { - return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{7} + return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{10} } // Request for RotateExternalCertAuthority. @@ -516,7 +657,7 @@ type RotateExternalCertAuthorityRequest struct { func (x *RotateExternalCertAuthorityRequest) Reset() { *x = RotateExternalCertAuthorityRequest{} - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[8] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -528,7 +669,7 @@ func (x *RotateExternalCertAuthorityRequest) String() string { func (*RotateExternalCertAuthorityRequest) ProtoMessage() {} func (x *RotateExternalCertAuthorityRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[8] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -541,7 +682,7 @@ func (x *RotateExternalCertAuthorityRequest) ProtoReflect() protoreflect.Message // Deprecated: Use RotateExternalCertAuthorityRequest.ProtoReflect.Descriptor instead. func (*RotateExternalCertAuthorityRequest) Descriptor() ([]byte, []int) { - return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{8} + return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{11} } func (x *RotateExternalCertAuthorityRequest) GetCertAuthority() *types.CertAuthorityV2 { @@ -560,7 +701,7 @@ type RotateExternalCertAuthorityResponse struct { func (x *RotateExternalCertAuthorityResponse) Reset() { *x = RotateExternalCertAuthorityResponse{} - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[9] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -572,7 +713,7 @@ func (x *RotateExternalCertAuthorityResponse) String() string { func (*RotateExternalCertAuthorityResponse) ProtoMessage() {} func (x *RotateExternalCertAuthorityResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[9] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -585,7 +726,7 @@ func (x *RotateExternalCertAuthorityResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use RotateExternalCertAuthorityResponse.ProtoReflect.Descriptor instead. func (*RotateExternalCertAuthorityResponse) Descriptor() ([]byte, []int) { - return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{9} + return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{12} } // GenerateHostCertRequest is the request for GenerateHostCert. @@ -612,7 +753,7 @@ type GenerateHostCertRequest struct { func (x *GenerateHostCertRequest) Reset() { *x = GenerateHostCertRequest{} - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[10] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -624,7 +765,7 @@ func (x *GenerateHostCertRequest) String() string { func (*GenerateHostCertRequest) ProtoMessage() {} func (x *GenerateHostCertRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[10] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -637,7 +778,7 @@ func (x *GenerateHostCertRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GenerateHostCertRequest.ProtoReflect.Descriptor instead. func (*GenerateHostCertRequest) Descriptor() ([]byte, []int) { - return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{10} + return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{13} } func (x *GenerateHostCertRequest) GetKey() []byte { @@ -701,7 +842,7 @@ type GenerateHostCertResponse struct { func (x *GenerateHostCertResponse) Reset() { *x = GenerateHostCertResponse{} - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[11] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -713,7 +854,7 @@ func (x *GenerateHostCertResponse) String() string { func (*GenerateHostCertResponse) ProtoMessage() {} func (x *GenerateHostCertResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[11] + mi := &file_teleport_trust_v1_trust_service_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -726,7 +867,7 @@ func (x *GenerateHostCertResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GenerateHostCertResponse.ProtoReflect.Descriptor instead. func (*GenerateHostCertResponse) Descriptor() ([]byte, []int) { - return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{11} + return file_teleport_trust_v1_trust_service_proto_rawDescGZIP(), []int{14} } func (x *GenerateHostCertResponse) GetSshCertificate() []byte { @@ -750,147 +891,184 @@ var file_teleport_trust_v1_trust_service_proto_rawDesc = []byte{ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x66, 0x0a, 0x17, 0x47, - 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x4b, 0x65, 0x79, 0x22, 0x50, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x4b, 0x65, 0x79, 0x22, 0x64, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x13, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x5f, 0x76, 0x32, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x56, 0x32, 0x52, 0x11, 0x63, 0x65, 0x72, 0x74, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x56, 0x32, 0x22, 0x48, 0x0a, 0x1a, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x5b, 0x0a, 0x1a, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, - 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0e, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x56, 0x32, 0x52, 0x0d, 0x63, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x22, 0xe6, 0x01, 0x0a, 0x1a, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, - 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x0c, 0x67, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x70, - 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x63, 0x65, 0x50, 0x65, 0x72, - 0x69, 0x6f, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x68, - 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x73, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x22, 0xce, 0x01, 0x0a, 0x10, - 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x12, 0x41, 0x0a, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x34, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x62, - 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x07, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x22, 0x1d, 0x0a, 0x1b, - 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x63, 0x0a, 0x22, 0x52, - 0x6f, 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x65, 0x72, - 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3d, 0x0a, 0x0e, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x79, 0x70, 0x65, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x61, 0x0a, 0x1d, 0x55, + 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0f, + 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x54, 0x72, + 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, 0x32, 0x52, 0x0e, + 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x61, + 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x40, 0x0a, 0x0f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, + 0x32, 0x52, 0x0e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x22, 0x61, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, + 0x65, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x56, 0x32, 0x52, 0x0e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x22, 0x66, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x41, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4b, 0x65, 0x79, 0x22, 0x50, 0x0a, 0x19, + 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4b, 0x65, 0x79, 0x22, 0x64, + 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x13, + 0x63, 0x65, 0x72, 0x74, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x5f, 0x76, 0x32, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x56, - 0x32, 0x52, 0x0d, 0x63, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x22, 0x25, 0x0a, 0x23, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xe5, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x1b, - 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, - 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0a, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, - 0x6c, 0x65, 0x12, 0x2b, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x22, - 0x43, 0x0a, 0x18, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x43, - 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x73, - 0x73, 0x68, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x73, 0x73, 0x68, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x32, 0x87, 0x06, 0x0a, 0x0c, 0x54, 0x72, 0x75, 0x73, 0x74, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x56, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x2e, 0x74, 0x65, 0x6c, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x65, - 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x56, 0x32, 0x12, 0x71, 0x0a, - 0x12, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x12, 0x2c, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, - 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, - 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x5c, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x5c, - 0x0a, 0x13, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, - 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x65, 0x72, - 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x56, 0x32, 0x12, 0x74, 0x0a, 0x13, + 0x32, 0x52, 0x11, 0x63, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x56, 0x32, 0x22, 0x48, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, + 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x5b, + 0x0a, 0x1a, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0e, + 0x63, 0x65, 0x72, 0x74, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x65, 0x72, + 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x56, 0x32, 0x52, 0x0d, 0x63, 0x65, + 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0xe6, 0x01, 0x0a, 0x1a, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, - 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x65, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3c, + 0x0a, 0x0c, 0x67, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0b, 0x67, 0x72, 0x61, 0x63, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x21, 0x0a, 0x0c, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, + 0x6f, 0x64, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x22, 0xce, 0x01, 0x0a, 0x10, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0e, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, + 0x34, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x73, 0x74, + 0x61, 0x6e, 0x64, 0x62, 0x79, 0x22, 0x1d, 0x0a, 0x1b, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, + 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x63, 0x0a, 0x22, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0e, 0x63, 0x65, + 0x72, 0x74, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x41, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x56, 0x32, 0x52, 0x0d, 0x63, 0x65, 0x72, 0x74, + 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x25, 0x0a, 0x23, 0x52, 0x6f, 0x74, + 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x65, 0x72, 0x74, 0x41, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0xe5, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, + 0x74, 0x43, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x17, + 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, + 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, + 0x70, 0x61, 0x6c, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x2b, 0x0a, 0x03, 0x74, + 0x74, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x22, 0x43, 0x0a, 0x18, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x73, 0x68, 0x5f, 0x63, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x73, + 0x73, 0x68, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x32, 0xb6, 0x08, + 0x0a, 0x0c, 0x54, 0x72, 0x75, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x56, + 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x12, 0x2a, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, + 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x56, 0x32, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, + 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2c, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x74, 0x65, 0x6c, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x13, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, + 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, 0x73, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x41, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x5c, 0x0a, 0x13, 0x55, 0x70, 0x73, 0x65, 0x72, + 0x74, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2d, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x56, 0x32, 0x12, 0x74, 0x0a, 0x13, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, + 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2d, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x1b, + 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x65, + 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x35, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, - 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, - 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x1b, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, + 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x65, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, - 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x65, 0x72, 0x74, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x6b, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, - 0x74, 0x43, 0x65, 0x72, 0x74, 0x12, 0x2a, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, - 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x48, 0x6f, - 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x4e, - 0x5a, 0x4c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, - 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x74, 0x72, - 0x75, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x74, 0x72, 0x75, 0x73, 0x74, 0x76, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x10, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x12, 0x2a, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x43, + 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x74, 0x65, 0x6c, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x16, 0x55, 0x70, 0x73, 0x65, 0x72, + 0x74, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, + 0x32, 0x12, 0x30, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, + 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x72, 0x75, 0x73, + 0x74, 0x65, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x54, 0x72, 0x75, 0x73, + 0x74, 0x65, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, 0x32, 0x12, 0x63, 0x0a, 0x16, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x56, 0x32, 0x12, 0x30, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, + 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, + 0x32, 0x12, 0x63, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, + 0x65, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, 0x32, 0x12, 0x30, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x56, 0x32, 0x42, 0x4e, 0x5a, 0x4c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x74, + 0x72, 0x75, 0x73, 0x74, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -905,54 +1083,67 @@ func file_teleport_trust_v1_trust_service_proto_rawDescGZIP() []byte { return file_teleport_trust_v1_trust_service_proto_rawDescData } -var file_teleport_trust_v1_trust_service_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_teleport_trust_v1_trust_service_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_teleport_trust_v1_trust_service_proto_goTypes = []any{ - (*GetCertAuthorityRequest)(nil), // 0: teleport.trust.v1.GetCertAuthorityRequest - (*GetCertAuthoritiesRequest)(nil), // 1: teleport.trust.v1.GetCertAuthoritiesRequest - (*GetCertAuthoritiesResponse)(nil), // 2: teleport.trust.v1.GetCertAuthoritiesResponse - (*DeleteCertAuthorityRequest)(nil), // 3: teleport.trust.v1.DeleteCertAuthorityRequest - (*UpsertCertAuthorityRequest)(nil), // 4: teleport.trust.v1.UpsertCertAuthorityRequest - (*RotateCertAuthorityRequest)(nil), // 5: teleport.trust.v1.RotateCertAuthorityRequest - (*RotationSchedule)(nil), // 6: teleport.trust.v1.RotationSchedule - (*RotateCertAuthorityResponse)(nil), // 7: teleport.trust.v1.RotateCertAuthorityResponse - (*RotateExternalCertAuthorityRequest)(nil), // 8: teleport.trust.v1.RotateExternalCertAuthorityRequest - (*RotateExternalCertAuthorityResponse)(nil), // 9: teleport.trust.v1.RotateExternalCertAuthorityResponse - (*GenerateHostCertRequest)(nil), // 10: teleport.trust.v1.GenerateHostCertRequest - (*GenerateHostCertResponse)(nil), // 11: teleport.trust.v1.GenerateHostCertResponse - (*types.CertAuthorityV2)(nil), // 12: types.CertAuthorityV2 - (*durationpb.Duration)(nil), // 13: google.protobuf.Duration - (*timestamppb.Timestamp)(nil), // 14: google.protobuf.Timestamp - (*emptypb.Empty)(nil), // 15: google.protobuf.Empty + (*UpsertTrustedClusterV2Request)(nil), // 0: teleport.trust.v1.UpsertTrustedClusterV2Request + (*CreateTrustedClusterV2Request)(nil), // 1: teleport.trust.v1.CreateTrustedClusterV2Request + (*UpdateTrustedClusterV2Request)(nil), // 2: teleport.trust.v1.UpdateTrustedClusterV2Request + (*GetCertAuthorityRequest)(nil), // 3: teleport.trust.v1.GetCertAuthorityRequest + (*GetCertAuthoritiesRequest)(nil), // 4: teleport.trust.v1.GetCertAuthoritiesRequest + (*GetCertAuthoritiesResponse)(nil), // 5: teleport.trust.v1.GetCertAuthoritiesResponse + (*DeleteCertAuthorityRequest)(nil), // 6: teleport.trust.v1.DeleteCertAuthorityRequest + (*UpsertCertAuthorityRequest)(nil), // 7: teleport.trust.v1.UpsertCertAuthorityRequest + (*RotateCertAuthorityRequest)(nil), // 8: teleport.trust.v1.RotateCertAuthorityRequest + (*RotationSchedule)(nil), // 9: teleport.trust.v1.RotationSchedule + (*RotateCertAuthorityResponse)(nil), // 10: teleport.trust.v1.RotateCertAuthorityResponse + (*RotateExternalCertAuthorityRequest)(nil), // 11: teleport.trust.v1.RotateExternalCertAuthorityRequest + (*RotateExternalCertAuthorityResponse)(nil), // 12: teleport.trust.v1.RotateExternalCertAuthorityResponse + (*GenerateHostCertRequest)(nil), // 13: teleport.trust.v1.GenerateHostCertRequest + (*GenerateHostCertResponse)(nil), // 14: teleport.trust.v1.GenerateHostCertResponse + (*types.TrustedClusterV2)(nil), // 15: types.TrustedClusterV2 + (*types.CertAuthorityV2)(nil), // 16: types.CertAuthorityV2 + (*durationpb.Duration)(nil), // 17: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 18: google.protobuf.Timestamp + (*emptypb.Empty)(nil), // 19: google.protobuf.Empty } var file_teleport_trust_v1_trust_service_proto_depIdxs = []int32{ - 12, // 0: teleport.trust.v1.GetCertAuthoritiesResponse.cert_authorities_v2:type_name -> types.CertAuthorityV2 - 12, // 1: teleport.trust.v1.UpsertCertAuthorityRequest.cert_authority:type_name -> types.CertAuthorityV2 - 13, // 2: teleport.trust.v1.RotateCertAuthorityRequest.grace_period:type_name -> google.protobuf.Duration - 6, // 3: teleport.trust.v1.RotateCertAuthorityRequest.schedule:type_name -> teleport.trust.v1.RotationSchedule - 14, // 4: teleport.trust.v1.RotationSchedule.update_clients:type_name -> google.protobuf.Timestamp - 14, // 5: teleport.trust.v1.RotationSchedule.update_servers:type_name -> google.protobuf.Timestamp - 14, // 6: teleport.trust.v1.RotationSchedule.standby:type_name -> google.protobuf.Timestamp - 12, // 7: teleport.trust.v1.RotateExternalCertAuthorityRequest.cert_authority:type_name -> types.CertAuthorityV2 - 13, // 8: teleport.trust.v1.GenerateHostCertRequest.ttl:type_name -> google.protobuf.Duration - 0, // 9: teleport.trust.v1.TrustService.GetCertAuthority:input_type -> teleport.trust.v1.GetCertAuthorityRequest - 1, // 10: teleport.trust.v1.TrustService.GetCertAuthorities:input_type -> teleport.trust.v1.GetCertAuthoritiesRequest - 3, // 11: teleport.trust.v1.TrustService.DeleteCertAuthority:input_type -> teleport.trust.v1.DeleteCertAuthorityRequest - 4, // 12: teleport.trust.v1.TrustService.UpsertCertAuthority:input_type -> teleport.trust.v1.UpsertCertAuthorityRequest - 5, // 13: teleport.trust.v1.TrustService.RotateCertAuthority:input_type -> teleport.trust.v1.RotateCertAuthorityRequest - 8, // 14: teleport.trust.v1.TrustService.RotateExternalCertAuthority:input_type -> teleport.trust.v1.RotateExternalCertAuthorityRequest - 10, // 15: teleport.trust.v1.TrustService.GenerateHostCert:input_type -> teleport.trust.v1.GenerateHostCertRequest - 12, // 16: teleport.trust.v1.TrustService.GetCertAuthority:output_type -> types.CertAuthorityV2 - 2, // 17: teleport.trust.v1.TrustService.GetCertAuthorities:output_type -> teleport.trust.v1.GetCertAuthoritiesResponse - 15, // 18: teleport.trust.v1.TrustService.DeleteCertAuthority:output_type -> google.protobuf.Empty - 12, // 19: teleport.trust.v1.TrustService.UpsertCertAuthority:output_type -> types.CertAuthorityV2 - 7, // 20: teleport.trust.v1.TrustService.RotateCertAuthority:output_type -> teleport.trust.v1.RotateCertAuthorityResponse - 9, // 21: teleport.trust.v1.TrustService.RotateExternalCertAuthority:output_type -> teleport.trust.v1.RotateExternalCertAuthorityResponse - 11, // 22: teleport.trust.v1.TrustService.GenerateHostCert:output_type -> teleport.trust.v1.GenerateHostCertResponse - 16, // [16:23] is the sub-list for method output_type - 9, // [9:16] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name + 15, // 0: teleport.trust.v1.UpsertTrustedClusterV2Request.trusted_cluster:type_name -> types.TrustedClusterV2 + 15, // 1: teleport.trust.v1.CreateTrustedClusterV2Request.trusted_cluster:type_name -> types.TrustedClusterV2 + 15, // 2: teleport.trust.v1.UpdateTrustedClusterV2Request.trusted_cluster:type_name -> types.TrustedClusterV2 + 16, // 3: teleport.trust.v1.GetCertAuthoritiesResponse.cert_authorities_v2:type_name -> types.CertAuthorityV2 + 16, // 4: teleport.trust.v1.UpsertCertAuthorityRequest.cert_authority:type_name -> types.CertAuthorityV2 + 17, // 5: teleport.trust.v1.RotateCertAuthorityRequest.grace_period:type_name -> google.protobuf.Duration + 9, // 6: teleport.trust.v1.RotateCertAuthorityRequest.schedule:type_name -> teleport.trust.v1.RotationSchedule + 18, // 7: teleport.trust.v1.RotationSchedule.update_clients:type_name -> google.protobuf.Timestamp + 18, // 8: teleport.trust.v1.RotationSchedule.update_servers:type_name -> google.protobuf.Timestamp + 18, // 9: teleport.trust.v1.RotationSchedule.standby:type_name -> google.protobuf.Timestamp + 16, // 10: teleport.trust.v1.RotateExternalCertAuthorityRequest.cert_authority:type_name -> types.CertAuthorityV2 + 17, // 11: teleport.trust.v1.GenerateHostCertRequest.ttl:type_name -> google.protobuf.Duration + 3, // 12: teleport.trust.v1.TrustService.GetCertAuthority:input_type -> teleport.trust.v1.GetCertAuthorityRequest + 4, // 13: teleport.trust.v1.TrustService.GetCertAuthorities:input_type -> teleport.trust.v1.GetCertAuthoritiesRequest + 6, // 14: teleport.trust.v1.TrustService.DeleteCertAuthority:input_type -> teleport.trust.v1.DeleteCertAuthorityRequest + 7, // 15: teleport.trust.v1.TrustService.UpsertCertAuthority:input_type -> teleport.trust.v1.UpsertCertAuthorityRequest + 8, // 16: teleport.trust.v1.TrustService.RotateCertAuthority:input_type -> teleport.trust.v1.RotateCertAuthorityRequest + 11, // 17: teleport.trust.v1.TrustService.RotateExternalCertAuthority:input_type -> teleport.trust.v1.RotateExternalCertAuthorityRequest + 13, // 18: teleport.trust.v1.TrustService.GenerateHostCert:input_type -> teleport.trust.v1.GenerateHostCertRequest + 0, // 19: teleport.trust.v1.TrustService.UpsertTrustedClusterV2:input_type -> teleport.trust.v1.UpsertTrustedClusterV2Request + 1, // 20: teleport.trust.v1.TrustService.CreateTrustedClusterV2:input_type -> teleport.trust.v1.CreateTrustedClusterV2Request + 2, // 21: teleport.trust.v1.TrustService.UpdateTrustedClusterV2:input_type -> teleport.trust.v1.UpdateTrustedClusterV2Request + 16, // 22: teleport.trust.v1.TrustService.GetCertAuthority:output_type -> types.CertAuthorityV2 + 5, // 23: teleport.trust.v1.TrustService.GetCertAuthorities:output_type -> teleport.trust.v1.GetCertAuthoritiesResponse + 19, // 24: teleport.trust.v1.TrustService.DeleteCertAuthority:output_type -> google.protobuf.Empty + 16, // 25: teleport.trust.v1.TrustService.UpsertCertAuthority:output_type -> types.CertAuthorityV2 + 10, // 26: teleport.trust.v1.TrustService.RotateCertAuthority:output_type -> teleport.trust.v1.RotateCertAuthorityResponse + 12, // 27: teleport.trust.v1.TrustService.RotateExternalCertAuthority:output_type -> teleport.trust.v1.RotateExternalCertAuthorityResponse + 14, // 28: teleport.trust.v1.TrustService.GenerateHostCert:output_type -> teleport.trust.v1.GenerateHostCertResponse + 15, // 29: teleport.trust.v1.TrustService.UpsertTrustedClusterV2:output_type -> types.TrustedClusterV2 + 15, // 30: teleport.trust.v1.TrustService.CreateTrustedClusterV2:output_type -> types.TrustedClusterV2 + 15, // 31: teleport.trust.v1.TrustService.UpdateTrustedClusterV2:output_type -> types.TrustedClusterV2 + 22, // [22:32] is the sub-list for method output_type + 12, // [12:22] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name } func init() { file_teleport_trust_v1_trust_service_proto_init() } @@ -966,7 +1157,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_teleport_trust_v1_trust_service_proto_rawDesc, NumEnums: 0, - NumMessages: 12, + NumMessages: 15, NumExtensions: 0, NumServices: 1, }, diff --git a/api/gen/proto/go/teleport/trust/v1/trust_service_grpc.pb.go b/api/gen/proto/go/teleport/trust/v1/trust_service_grpc.pb.go index 5a91787708411..8f910f648a8b1 100644 --- a/api/gen/proto/go/teleport/trust/v1/trust_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/trust/v1/trust_service_grpc.pb.go @@ -42,6 +42,9 @@ const ( TrustService_RotateCertAuthority_FullMethodName = "/teleport.trust.v1.TrustService/RotateCertAuthority" TrustService_RotateExternalCertAuthority_FullMethodName = "/teleport.trust.v1.TrustService/RotateExternalCertAuthority" TrustService_GenerateHostCert_FullMethodName = "/teleport.trust.v1.TrustService/GenerateHostCert" + TrustService_UpsertTrustedClusterV2_FullMethodName = "/teleport.trust.v1.TrustService/UpsertTrustedClusterV2" + TrustService_CreateTrustedClusterV2_FullMethodName = "/teleport.trust.v1.TrustService/CreateTrustedClusterV2" + TrustService_UpdateTrustedClusterV2_FullMethodName = "/teleport.trust.v1.TrustService/UpdateTrustedClusterV2" ) // TrustServiceClient is the client API for TrustService service. @@ -65,6 +68,12 @@ type TrustServiceClient interface { // GenerateHostCert takes a public key in the OpenSSH `authorized_keys` format and returns // a SSH certificate signed by the Host CA. GenerateHostCert(ctx context.Context, in *GenerateHostCertRequest, opts ...grpc.CallOption) (*GenerateHostCertResponse, error) + // UpsertTrustedClusterV2 upserts a Trusted Cluster in a backend. + UpsertTrustedClusterV2(ctx context.Context, in *UpsertTrustedClusterV2Request, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) + // CreateTrustedClusterV2 creates a Trusted Cluster in a backend. + CreateTrustedClusterV2(ctx context.Context, in *CreateTrustedClusterV2Request, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) + // UpdateTrustedClusterV2 updates a Trusted Cluster in a backend. + UpdateTrustedClusterV2(ctx context.Context, in *UpdateTrustedClusterV2Request, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) } type trustServiceClient struct { @@ -145,6 +154,36 @@ func (c *trustServiceClient) GenerateHostCert(ctx context.Context, in *GenerateH return out, nil } +func (c *trustServiceClient) UpsertTrustedClusterV2(ctx context.Context, in *UpsertTrustedClusterV2Request, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(types.TrustedClusterV2) + err := c.cc.Invoke(ctx, TrustService_UpsertTrustedClusterV2_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *trustServiceClient) CreateTrustedClusterV2(ctx context.Context, in *CreateTrustedClusterV2Request, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(types.TrustedClusterV2) + err := c.cc.Invoke(ctx, TrustService_CreateTrustedClusterV2_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *trustServiceClient) UpdateTrustedClusterV2(ctx context.Context, in *UpdateTrustedClusterV2Request, opts ...grpc.CallOption) (*types.TrustedClusterV2, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(types.TrustedClusterV2) + err := c.cc.Invoke(ctx, TrustService_UpdateTrustedClusterV2_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + // TrustServiceServer is the server API for TrustService service. // All implementations must embed UnimplementedTrustServiceServer // for forward compatibility. @@ -166,6 +205,12 @@ type TrustServiceServer interface { // GenerateHostCert takes a public key in the OpenSSH `authorized_keys` format and returns // a SSH certificate signed by the Host CA. GenerateHostCert(context.Context, *GenerateHostCertRequest) (*GenerateHostCertResponse, error) + // UpsertTrustedClusterV2 upserts a Trusted Cluster in a backend. + UpsertTrustedClusterV2(context.Context, *UpsertTrustedClusterV2Request) (*types.TrustedClusterV2, error) + // CreateTrustedClusterV2 creates a Trusted Cluster in a backend. + CreateTrustedClusterV2(context.Context, *CreateTrustedClusterV2Request) (*types.TrustedClusterV2, error) + // UpdateTrustedClusterV2 updates a Trusted Cluster in a backend. + UpdateTrustedClusterV2(context.Context, *UpdateTrustedClusterV2Request) (*types.TrustedClusterV2, error) mustEmbedUnimplementedTrustServiceServer() } @@ -197,6 +242,15 @@ func (UnimplementedTrustServiceServer) RotateExternalCertAuthority(context.Conte func (UnimplementedTrustServiceServer) GenerateHostCert(context.Context, *GenerateHostCertRequest) (*GenerateHostCertResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GenerateHostCert not implemented") } +func (UnimplementedTrustServiceServer) UpsertTrustedClusterV2(context.Context, *UpsertTrustedClusterV2Request) (*types.TrustedClusterV2, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpsertTrustedClusterV2 not implemented") +} +func (UnimplementedTrustServiceServer) CreateTrustedClusterV2(context.Context, *CreateTrustedClusterV2Request) (*types.TrustedClusterV2, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateTrustedClusterV2 not implemented") +} +func (UnimplementedTrustServiceServer) UpdateTrustedClusterV2(context.Context, *UpdateTrustedClusterV2Request) (*types.TrustedClusterV2, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateTrustedClusterV2 not implemented") +} func (UnimplementedTrustServiceServer) mustEmbedUnimplementedTrustServiceServer() {} func (UnimplementedTrustServiceServer) testEmbeddedByValue() {} @@ -344,6 +398,60 @@ func _TrustService_GenerateHostCert_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } +func _TrustService_UpsertTrustedClusterV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpsertTrustedClusterV2Request) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TrustServiceServer).UpsertTrustedClusterV2(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: TrustService_UpsertTrustedClusterV2_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TrustServiceServer).UpsertTrustedClusterV2(ctx, req.(*UpsertTrustedClusterV2Request)) + } + return interceptor(ctx, in, info, handler) +} + +func _TrustService_CreateTrustedClusterV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTrustedClusterV2Request) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TrustServiceServer).CreateTrustedClusterV2(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: TrustService_CreateTrustedClusterV2_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TrustServiceServer).CreateTrustedClusterV2(ctx, req.(*CreateTrustedClusterV2Request)) + } + return interceptor(ctx, in, info, handler) +} + +func _TrustService_UpdateTrustedClusterV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateTrustedClusterV2Request) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TrustServiceServer).UpdateTrustedClusterV2(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: TrustService_UpdateTrustedClusterV2_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TrustServiceServer).UpdateTrustedClusterV2(ctx, req.(*UpdateTrustedClusterV2Request)) + } + return interceptor(ctx, in, info, handler) +} + // TrustService_ServiceDesc is the grpc.ServiceDesc for TrustService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -379,6 +487,18 @@ var TrustService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GenerateHostCert", Handler: _TrustService_GenerateHostCert_Handler, }, + { + MethodName: "UpsertTrustedClusterV2", + Handler: _TrustService_UpsertTrustedClusterV2_Handler, + }, + { + MethodName: "CreateTrustedClusterV2", + Handler: _TrustService_CreateTrustedClusterV2_Handler, + }, + { + MethodName: "UpdateTrustedClusterV2", + Handler: _TrustService_UpdateTrustedClusterV2_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "teleport/trust/v1/trust_service.proto", diff --git a/api/proto/teleport/legacy/client/proto/authservice.proto b/api/proto/teleport/legacy/client/proto/authservice.proto index 128bfdf7bd748..8b2c57b858725 100644 --- a/api/proto/teleport/legacy/client/proto/authservice.proto +++ b/api/proto/teleport/legacy/client/proto/authservice.proto @@ -3277,19 +3277,12 @@ service AuthService { rpc GetTrustedCluster(types.ResourceRequest) returns (types.TrustedClusterV2); // GetTrustedClusters gets all current Trusted Cluster resources. rpc GetTrustedClusters(google.protobuf.Empty) returns (types.TrustedClusterV2List); - // UpsertTrustedCluster upserts a Trusted Cluster in a backend. // - // Deprecated: Use UpsertTrustedClusterV2 instead. + // Deprecated: Use [teleport.trust.v1.UpsertTrustedClusterV2] instead. rpc UpsertTrustedCluster(types.TrustedClusterV2) returns (types.TrustedClusterV2) { option deprecated = true; } - // UpsertTrustedClusterV2 upserts a Trusted Cluster in a backend. - rpc UpsertTrustedClusterV2(types.TrustedClusterV2) returns (types.TrustedClusterV2); - // CreateTrustedClusterV2 creates a Trusted Cluster in a backend. - rpc CreateTrustedClusterV2(types.TrustedClusterV2) returns (types.TrustedClusterV2); - // UpdateTrustedClusterV2 updates a Trusted Cluster in a backend. - rpc UpdateTrustedClusterV2(types.TrustedClusterV2) returns (types.TrustedClusterV2); // DeleteTrustedCluster deletes an existing Trusted Cluster in a backend by name. rpc DeleteTrustedCluster(types.ResourceRequest) returns (google.protobuf.Empty); diff --git a/api/proto/teleport/trust/v1/trust_service.proto b/api/proto/teleport/trust/v1/trust_service.proto index a6b3fc3282c44..8e67bf87de281 100644 --- a/api/proto/teleport/trust/v1/trust_service.proto +++ b/api/proto/teleport/trust/v1/trust_service.proto @@ -40,6 +40,31 @@ service TrustService { // GenerateHostCert takes a public key in the OpenSSH `authorized_keys` format and returns // a SSH certificate signed by the Host CA. rpc GenerateHostCert(GenerateHostCertRequest) returns (GenerateHostCertResponse); + + // UpsertTrustedClusterV2 upserts a Trusted Cluster in a backend. + rpc UpsertTrustedClusterV2(UpsertTrustedClusterV2Request) returns (types.TrustedClusterV2); + // CreateTrustedClusterV2 creates a Trusted Cluster in a backend. + rpc CreateTrustedClusterV2(CreateTrustedClusterV2Request) returns (types.TrustedClusterV2); + // UpdateTrustedClusterV2 updates a Trusted Cluster in a backend. + rpc UpdateTrustedClusterV2(UpdateTrustedClusterV2Request) returns (types.TrustedClusterV2); +} + +// Request for UpsertTrustedClusterV2. +message UpsertTrustedClusterV2Request { + // TrustedCluster specifies a Trusted Cluster resource. + types.TrustedClusterV2 trusted_cluster = 1; +} + +// Request for CreateTrustedClusterV2. +message CreateTrustedClusterV2Request { + // TrustedCluster specifies a Trusted Cluster resource. + types.TrustedClusterV2 trusted_cluster = 1; +} + +// Request for UpdateTrustedClusterV2. +message UpdateTrustedClusterV2Request { + // TrustedCluster specifies a Trusted Cluster resource. + types.TrustedClusterV2 trusted_cluster = 1; } // Request for GetCertAuthority diff --git a/lib/auth/grpcserver.go b/lib/auth/grpcserver.go index 5412b708ceca8..dc0eb25dc7032 100644 --- a/lib/auth/grpcserver.go +++ b/lib/auth/grpcserver.go @@ -2986,66 +2986,6 @@ func (g *GRPCServer) UpsertTrustedCluster(ctx context.Context, cluster *types.Tr return trustedClusterV2, nil } -// UpsertTrustedClusterV2 upserts a Trusted Cluster. -func (g *GRPCServer) UpsertTrustedClusterV2(ctx context.Context, cluster *types.TrustedClusterV2) (*types.TrustedClusterV2, error) { - auth, err := g.authenticate(ctx) - if err != nil { - return nil, trace.Wrap(err) - } - if err = services.ValidateTrustedCluster(cluster); err != nil { - return nil, trace.Wrap(err) - } - tc, err := auth.ServerWithRoles.UpsertTrustedClusterV2(ctx, cluster) - if err != nil { - return nil, trace.Wrap(err) - } - trustedClusterV2, ok := tc.(*types.TrustedClusterV2) - if !ok { - return nil, trace.Errorf("encountered unexpected Trusted Cluster type: %T", tc) - } - return trustedClusterV2, nil -} - -// CreateTrustedClusterV2 creates a Trusted Cluster. -func (g *GRPCServer) CreateTrustedClusterV2(ctx context.Context, cluster *types.TrustedClusterV2) (*types.TrustedClusterV2, error) { - auth, err := g.authenticate(ctx) - if err != nil { - return nil, trace.Wrap(err) - } - if err = services.ValidateTrustedCluster(cluster); err != nil { - return nil, trace.Wrap(err) - } - tc, err := auth.ServerWithRoles.CreateTrustedClusterV2(ctx, cluster) - if err != nil { - return nil, trace.Wrap(err) - } - trustedClusterV2, ok := tc.(*types.TrustedClusterV2) - if !ok { - return nil, trace.Errorf("encountered unexpected Trusted Cluster type: %T", tc) - } - return trustedClusterV2, nil -} - -// UpdateTrustedClusterV2 updates a Trusted Cluster. -func (g *GRPCServer) UpdateTrustedClusterV2(ctx context.Context, cluster *types.TrustedClusterV2) (*types.TrustedClusterV2, error) { - auth, err := g.authenticate(ctx) - if err != nil { - return nil, trace.Wrap(err) - } - if err = services.ValidateTrustedCluster(cluster); err != nil { - return nil, trace.Wrap(err) - } - tc, err := auth.ServerWithRoles.UpdateTrustedClusterV2(ctx, cluster) - if err != nil { - return nil, trace.Wrap(err) - } - trustedClusterV2, ok := tc.(*types.TrustedClusterV2) - if !ok { - return nil, trace.Errorf("encountered unexpected Trusted Cluster type: %T", tc) - } - return trustedClusterV2, nil -} - // DeleteTrustedCluster deletes a Trusted Cluster by name. func (g *GRPCServer) DeleteTrustedCluster(ctx context.Context, req *types.ResourceRequest) (*emptypb.Empty, error) { auth, err := g.authenticate(ctx) diff --git a/lib/auth/trust/trustv1/service.go b/lib/auth/trust/trustv1/service.go index 91f99a4819be9..1cedd87ae57de 100644 --- a/lib/auth/trust/trustv1/service.go +++ b/lib/auth/trust/trustv1/service.go @@ -44,6 +44,13 @@ type authServer interface { // RotateCertAuthority starts or restarts certificate authority rotation process. RotateCertAuthority(ctx context.Context, req types.RotateRequest) error + + // UpsertTrustedClusterV2 upserts a Trusted Cluster. + UpsertTrustedClusterV2(ctx context.Context, tc types.TrustedCluster) (types.TrustedCluster, error) + // CreateTrustedClusterV2 creates a Trusted Cluster. + CreateTrustedClusterV2(ctx context.Context, tc types.TrustedCluster) (types.TrustedCluster, error) + // UpdateTrustedClusterV2 updates a Trusted Cluster. + UpdateTrustedClusterV2(ctx context.Context, tc types.TrustedCluster) (types.TrustedCluster, error) } // ServiceConfig holds configuration options for diff --git a/lib/auth/trust/trustv1/service_test.go b/lib/auth/trust/trustv1/service_test.go index 152c2558c22b3..3d87cd8cb867b 100644 --- a/lib/auth/trust/trustv1/service_test.go +++ b/lib/auth/trust/trustv1/service_test.go @@ -100,6 +100,18 @@ func (f *fakeAuthServer) RotateCertAuthority(ctx context.Context, req types.Rota return f.rotateCertAuthorityData[string(req.Type)] } +func (f *fakeAuthServer) UpsertTrustedClusterV2(ctx context.Context, tc types.TrustedCluster) (types.TrustedCluster, error) { + return nil, trace.NotImplemented("UpsertTrustedClusterV2") +} + +func (f *fakeAuthServer) CreateTrustedClusterV2(ctx context.Context, tc types.TrustedCluster) (types.TrustedCluster, error) { + return nil, trace.NotImplemented("CreateTrustedClusterV2") +} + +func (f *fakeAuthServer) UpdateTrustedClusterV2(ctx context.Context, tc types.TrustedCluster) (types.TrustedCluster, error) { + return nil, trace.NotImplemented("UpdateTrustedClusterV2") +} + type fakeChecker struct { services.AccessChecker allow map[check]bool @@ -1029,3 +1041,63 @@ func TestGenerateHostCert(t *testing.T) { }) } } + +func TestCreateTrustedCluster(t *testing.T) { + t.Parallel() + + ctx := context.Background() + p := newTestPack(t) + + authorizer := &fakeAuthorizer{ + checker: &fakeChecker{ + allow: map[check]bool{ + {types.KindTrustedCluster, types.VerbCreate}: true, + {types.KindTrustedCluster, types.VerbUpdate}: true, + }, + }, + } + + fakeErr := trace.BadParameter("bad thing happened") + + trust := local.NewCAService(p.mem) + cfg := &ServiceConfig{ + Cache: trust, + Backend: trust, + Authorizer: authorizer, + AuthServer: &fakeAuthServer{}, + } + + tests := []struct { + name string + req *trustpb.CreateTrustedClusterV2Request + wantErr error + }{ + { + name: "success", + req: &trustpb.CreateTrustedClusterV2Request{ + TrustedCluster: &types.TrustedClusterV2{}, + }, + }, + { + name: "fail", + req: &trustpb.CreateTrustedClusterV2Request{ + TrustedCluster: &types.TrustedClusterV2{}, + }, + wantErr: fakeErr, + }, + } + + service, err := NewService(cfg) + require.NoError(t, err) + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + _, err := service.RotateCertAuthority(ctx, test.req) + if test.wantErr != nil { + require.ErrorIs(t, err, test.wantErr) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/lib/auth/trust/trustv1/trustedcluster.go b/lib/auth/trust/trustv1/trustedcluster.go new file mode 100644 index 0000000000000..0d3b68ae06e0a --- /dev/null +++ b/lib/auth/trust/trustv1/trustedcluster.go @@ -0,0 +1,124 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package trustv1 + +import ( + "context" + + "github.com/gravitational/trace" + + trustpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/trust/v1" + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib/modules" + "github.com/gravitational/teleport/lib/services" +) + +// UpsertTrustedClusterV2 upserts a Trusted Cluster. +func (s *Service) UpsertTrustedClusterV2(ctx context.Context, req *trustpb.UpsertTrustedClusterV2Request) (*types.TrustedClusterV2, error) { + // Don't allow a Cloud tenant to be a leaf cluster. + if modules.GetModules().Features().Cloud { + return nil, trace.NotImplemented("cloud tenants cannot be leaf clusters") + } + + authCtx, err := s.authorizer.Authorize(ctx) + if err != nil { + return nil, trace.Wrap(err) + } + if err := authCtx.CheckAccessToKind(types.KindTrustedCluster, types.VerbCreate, types.VerbUpdate); err != nil { + return nil, trace.Wrap(err) + } + if err := authCtx.AuthorizeAdminActionAllowReusedMFA(); err != nil { + return nil, trace.Wrap(err) + } + + if err = services.ValidateTrustedCluster(req.GetTrustedCluster()); err != nil { + return nil, trace.Wrap(err) + } + + tc, err := s.authServer.UpsertTrustedClusterV2(ctx, req.GetTrustedCluster()) + trustedClusterV2, ok := tc.(*types.TrustedClusterV2) + if !ok { + return nil, trace.Errorf("encountered unexpected Trusted Cluster type: %T", tc) + } + return trustedClusterV2, nil +} + +// CreateTrustedClusterV2 creates a Trusted Cluster. +func (s *Service) CreateTrustedClusterV2(ctx context.Context, req *trustpb.CreateTrustedClusterV2Request) (*types.TrustedClusterV2, error) { + // Don't allow a Cloud tenant to be a leaf cluster. + if modules.GetModules().Features().Cloud { + return nil, trace.NotImplemented("cloud tenants cannot be leaf clusters") + } + + authCtx, err := s.authorizer.Authorize(ctx) + if err != nil { + return nil, trace.Wrap(err) + } + if err := authCtx.CheckAccessToKind(types.KindTrustedCluster, types.VerbCreate); err != nil { + return nil, trace.Wrap(err) + } + if err := authCtx.AuthorizeAdminActionAllowReusedMFA(); err != nil { + return nil, trace.Wrap(err) + } + + if err = services.ValidateTrustedCluster(req.GetTrustedCluster()); err != nil { + return nil, trace.Wrap(err) + } + tc, err := s.authServer.CreateTrustedClusterV2(ctx, req.GetTrustedCluster()) + if err != nil { + return nil, trace.Wrap(err) + } + trustedClusterV2, ok := tc.(*types.TrustedClusterV2) + if !ok { + return nil, trace.Errorf("encountered unexpected Trusted Cluster type: %T", tc) + } + return trustedClusterV2, nil +} + +// UpdateTrustedClusterV2 updates a Trusted Cluster. +func (s *Service) UpdateTrustedClusterV2(ctx context.Context, req *trustpb.UpdateTrustedClusterV2Request) (*types.TrustedClusterV2, error) { + // Don't allow a Cloud tenant to be a leaf cluster. + if modules.GetModules().Features().Cloud { + return nil, trace.NotImplemented("cloud tenants cannot be leaf clusters") + } + + authCtx, err := s.authorizer.Authorize(ctx) + if err != nil { + return nil, trace.Wrap(err) + } + if err := authCtx.CheckAccessToKind(types.KindTrustedCluster, types.VerbUpdate); err != nil { + return nil, trace.Wrap(err) + } + if err := authCtx.AuthorizeAdminActionAllowReusedMFA(); err != nil { + return nil, trace.Wrap(err) + } + + if err = services.ValidateTrustedCluster(req.GetTrustedCluster()); err != nil { + return nil, trace.Wrap(err) + } + tc, err := s.authServer.UpdateTrustedClusterV2(ctx, req.GetTrustedCluster()) + if err != nil { + return nil, trace.Wrap(err) + } + trustedClusterV2, ok := tc.(*types.TrustedClusterV2) + if !ok { + return nil, trace.Errorf("encountered unexpected Trusted Cluster type: %T", tc) + } + return trustedClusterV2, nil +} From 5b76e91fb25091c87468afd5f6c9eff121ba6988 Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Mon, 6 Jan 2025 15:03:10 -0800 Subject: [PATCH 23/25] crdgen --- .../golden/resources.teleport.dev_roles.yaml | 44 ++++++ .../resources.teleport.dev_rolesv6.yaml | 22 +++ .../resources.teleport.dev_rolesv7.yaml | 22 +++ .../legacy/client/proto/authservice.proto | 42 ++++- .../teleport/legacy/types/events/events.proto | 144 ++++++++++++++++++ .../teleport/legacy/types/types.proto | 62 +++++++- 6 files changed, 327 insertions(+), 9 deletions(-) diff --git a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_roles.yaml b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_roles.yaml index 1cafc3ae4534a..9e3a0f46e9334 100644 --- a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_roles.yaml +++ b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_roles.yaml @@ -607,6 +607,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object deny: description: Deny is the set of conditions evaluated to deny access. @@ -1184,6 +1195,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object options: description: Options is for OpenSSH options like agent forwarding. @@ -2058,6 +2080,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object deny: description: Deny is the set of conditions evaluated to deny access. @@ -2635,6 +2668,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object options: description: Options is for OpenSSH options like agent forwarding. diff --git a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_rolesv6.yaml b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_rolesv6.yaml index 652c82fc05f7d..5e1ff2a359184 100644 --- a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_rolesv6.yaml +++ b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_rolesv6.yaml @@ -610,6 +610,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object deny: description: Deny is the set of conditions evaluated to deny access. @@ -1187,6 +1198,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object options: description: Options is for OpenSSH options like agent forwarding. diff --git a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_rolesv7.yaml b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_rolesv7.yaml index 53f89036374f4..fb682402d11e3 100644 --- a/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_rolesv7.yaml +++ b/integrations/operator/crdgen/testdata/golden/resources.teleport.dev_rolesv7.yaml @@ -610,6 +610,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object deny: description: Deny is the set of conditions evaluated to deny access. @@ -1187,6 +1198,17 @@ spec: type: string nullable: true type: array + workload_identity_labels: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + description: WorkloadIdentityLabels controls whether or not specific + WorkloadIdentity resources can be invoked. Further authorization + controls exist on the WorkloadIdentity resource itself. + type: object + workload_identity_labels_expression: + description: WorkloadIdentityLabelsExpression is a predicate expression + used to allow/deny access to issuing a WorkloadIdentity. + type: string type: object options: description: Options is for OpenSSH options like agent forwarding. diff --git a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/authservice.proto b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/authservice.proto index 128bfdf7bd748..fc6dc146ff248 100644 --- a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/authservice.proto +++ b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/client/proto/authservice.proto @@ -2145,6 +2145,36 @@ message ListResourcesRequest { bool IncludeLogins = 13 [(gogoproto.jsontag) = "include_logins,omitempty"]; } +// ResolveSSHTargetRequest provides details about a server to be resolved in +// an equivalent manner to a ssh dial request. +// +// Resolution can happen in two modes: +// 1) searching for hosts based on labels, a predicate expression, or keywords +// 2) searching based on hostname +// +// If a Host is provided, resolution will only operate in the second mode and +// will not perform any resolution based on labels. In order to resolve via +// labels the Host must not be populated. +message ResolveSSHTargetRequest { + // The target host as would be sent to the proxy during a dial request. + string host = 1; + // The ssh port. This value is optional, and both empty string and "0" are typically + // treated as meaning that any port should match. + string port = 2; + // If not empty, a label-based matcher. + map labels = 3; + // Boolean conditions that will be matched against the resource. + string predicate_expression = 4; + // A list of search keywords to match against resource field values. + repeated string search_keywords = 5; +} + +// GetSSHTargetsResponse holds ssh servers that match an ssh targets request. +message ResolveSSHTargetResponse { + // The target matching the supplied request. + types.ServerV2 server = 1; +} + // GetSSHTargetsRequest gets all servers that might match an equivalent ssh dial request. message GetSSHTargetsRequest { // Host is the target host as would be sent to the proxy during a dial request. @@ -3277,19 +3307,12 @@ service AuthService { rpc GetTrustedCluster(types.ResourceRequest) returns (types.TrustedClusterV2); // GetTrustedClusters gets all current Trusted Cluster resources. rpc GetTrustedClusters(google.protobuf.Empty) returns (types.TrustedClusterV2List); - // UpsertTrustedCluster upserts a Trusted Cluster in a backend. // - // Deprecated: Use UpsertTrustedClusterV2 instead. + // Deprecated: Use [teleport.trust.v1.UpsertTrustedCluster] instead. rpc UpsertTrustedCluster(types.TrustedClusterV2) returns (types.TrustedClusterV2) { option deprecated = true; } - // UpsertTrustedClusterV2 upserts a Trusted Cluster in a backend. - rpc UpsertTrustedClusterV2(types.TrustedClusterV2) returns (types.TrustedClusterV2); - // CreateTrustedClusterV2 creates a Trusted Cluster in a backend. - rpc CreateTrustedClusterV2(types.TrustedClusterV2) returns (types.TrustedClusterV2); - // UpdateTrustedClusterV2 updates a Trusted Cluster in a backend. - rpc UpdateTrustedClusterV2(types.TrustedClusterV2) returns (types.TrustedClusterV2); // DeleteTrustedCluster deletes an existing Trusted Cluster in a backend by name. rpc DeleteTrustedCluster(types.ResourceRequest) returns (google.protobuf.Empty); @@ -3564,6 +3587,9 @@ service AuthService { // but may result in confusing behavior if it is used outside of those contexts. rpc GetSSHTargets(GetSSHTargetsRequest) returns (GetSSHTargetsResponse); + // ResolveSSHTarget returns the server that would be resolved in an equivalent ssh dial request. + rpc ResolveSSHTarget(ResolveSSHTargetRequest) returns (ResolveSSHTargetResponse); + // GetDomainName returns local auth domain of the current auth server rpc GetDomainName(google.protobuf.Empty) returns (GetDomainNameResponse); // GetClusterCACert returns the PEM-encoded TLS certs for the local cluster diff --git a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto index 0829cd40aef10..c82a6e6976e0b 100644 --- a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto +++ b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/events/events.proto @@ -1547,6 +1547,33 @@ message AccessRequestCreate { ]; } +// AccessRequestExpire is emitted when access request has expired. +message AccessRequestExpire { + // Metadata is a common event metadata + Metadata Metadata = 1 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ResourceMetadata is a common resource event metadata + ResourceMetadata Resource = 2 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // RequestID is access request ID + string RequestID = 3 [(gogoproto.jsontag) = "id"]; + + // ResourceExpiry is the time at which the access request resource will expire. + google.protobuf.Timestamp ResourceExpiry = 4 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = true, + (gogoproto.jsontag) = "expiry,omitempty" + ]; +} + // ResourceID is a unique identifier for a teleport resource. This is duplicated // from api/types/types.proto to decouple the api and events types and because // neither file currently imports the other. @@ -3123,6 +3150,12 @@ message DatabaseSessionStart { // connection. This can be useful for backend process cancellation or // termination and it is not a sensitive or secret value. uint32 PostgresPID = 8 [(gogoproto.jsontag) = "postgres_pid,omitempty"]; + // Client is the common client event metadata. + ClientMetadata Client = 9 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; } // DatabaseSessionQuery is emitted when a user executes a database query. @@ -4707,6 +4740,9 @@ message OneOf { events.WorkloadIdentityCreate WorkloadIdentityCreate = 194; events.WorkloadIdentityUpdate WorkloadIdentityUpdate = 195; events.WorkloadIdentityDelete WorkloadIdentityDelete = 196; + events.GitCommand GitCommand = 197; + events.UserLoginAccessListInvalid UserLoginAccessListInvalid = 198; + events.AccessRequestExpire AccessRequestExpire = 199; } } @@ -6731,6 +6767,12 @@ message SPIFFESVIDIssued { // Audiences is the list of audiences in the issued SVID. // Only present if the SVID is a JWT. repeated string Audiences = 11 [(gogoproto.jsontag) = "audiences,omitempty"]; + // The WorkloadIdentity resource that was used to issue the SVID, this will + // be empty if the legacy RPCs were used. + string WorkloadIdentity = 12 [(gogoproto.jsontag) = "workload_identity,omitempty"]; + // The revision of the WorkloadIdentity resource that was used to issue the + // SVID. This will be empty if the legacy RPCs were used. + string WorkloadIdentityRevision = 13 [(gogoproto.jsontag) = "workload_identity_revision,omitempty"]; } // AuthPreferenceUpdate is emitted when the auth preference is updated. @@ -7800,3 +7842,105 @@ message WorkloadIdentityDelete { (gogoproto.jsontag) = "" ]; } + +// GitCommand is emitted when a user performs a Git fetch or push command. +message GitCommand { + // Metadata is a common event metadata + Metadata Metadata = 1 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // User is a common user event metadata + UserMetadata User = 2 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ConnectionMetadata holds information about the connection + ConnectionMetadata Connection = 3 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // SessionMetadata is a common event session metadata + SessionMetadata Session = 4 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ServerMetadata is a common server metadata + ServerMetadata Server = 5 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // CommandMetadata is a common command metadata + CommandMetadata Command = 6 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // Service is the type of the git request like git-upload-pack or + // git-receive-pack. + string service = 8 [(gogoproto.jsontag) = "service"]; + // Path is the Git repo path, usually /. + string path = 9 [(gogoproto.jsontag) = "path"]; + + // Actions defines details for a Git push. + repeated GitCommandAction actions = 10 [(gogoproto.jsontag) = "actions,omitempty"]; +} + +// GitCommandAction defines details for a Git push. +message GitCommandAction { + // Action type like create or update. + string Action = 1 [(gogoproto.jsontag) = "action,omitempty"]; + // Reference name like ref/main/my_branch. + string Reference = 2 [(gogoproto.jsontag) = "reference,omitempty"]; + // Old is the old hash. + string Old = 3 [(gogoproto.jsontag) = "old,omitempty"]; + // New is the new hash. + string New = 4 [(gogoproto.jsontag) = "new,omitempty"]; +} + +// AccessListInvalidMetadata contains metadata about invalid access lists. +message AccessListInvalidMetadata { + // AccessListName is the name of the invalid access list. + string AccessListName = 1 [(gogoproto.jsontag) = "access_list_name, omitempty"]; + // User is the username of the access list member who attempted to log in. + string User = 2 [(gogoproto.jsontag) = "user,omitempty"]; + // MissingRoles are the names of the non-existent roles being referenced by the access list, causing it to be invalid. + repeated string MissingRoles = 3 [(gogoproto.jsontag) = "missing_roles,omitempty"]; +} + +// UserLoginAccessListInvalid is emitted when a user who is a member of an invalid +// access list logs in. It is used to indicate that the access list could not be +// applied to the user's session. +message UserLoginAccessListInvalid { + // Metadata is common event metadata + Metadata Metadata = 1 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // AccessListInvalidMetadata is the metadata for this access list invalid event. + AccessListInvalidMetadata AccessListInvalidMetadata = 2 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // Status contains fields to indicate whether attempt was successful or not. + Status Status = 3 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; +} diff --git a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/types.proto b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/types.proto index 642e59597b825..f241f6501956e 100644 --- a/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/types.proto +++ b/integrations/operator/crdgen/testdata/protofiles/teleport/legacy/types/types.proto @@ -1108,6 +1108,8 @@ message Header { // PortRange can be used to describe a single port in which case the Port field is the port and the // EndPort field is 0. message PortRange { + option (gogoproto.goproto_stringer) = false; + option (gogoproto.stringer) = false; // Port describes the start of the range. It must be between 1 and 65535. uint32 Port = 1 [(gogoproto.jsontag) = "port"]; // EndPort describes the end of the range, inclusive. If set, it must be between 2 and 65535 and @@ -2727,6 +2729,13 @@ message AccessRequestSpecV3 { (gogoproto.nullable) = true, (gogoproto.jsontag) = "assume_start_time,omitempty" ]; + + // ResourceExpiry is the time at which the access request resource will expire. + google.protobuf.Timestamp ResourceExpiry = 22 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = true, + (gogoproto.jsontag) = "expiry,omitempty" + ]; } enum AccessRequestScope { @@ -2818,6 +2827,7 @@ message RequestKubernetesResource { } // ResourceID is a unique identifier for a teleport resource. +// Must be kept in sync with teleport.decision.v1alpha1.ResourceId. message ResourceID { // ClusterName is the name of the cluster the resource is in. string ClusterName = 1 [(gogoproto.jsontag) = "cluster"]; @@ -3437,6 +3447,18 @@ message RoleConditions { (gogoproto.nullable) = false, (gogoproto.jsontag) = "github_permissions,omitempty" ]; + + // WorkloadIdentityLabels controls whether or not specific WorkloadIdentity + // resources can be invoked. Further authorization controls exist on the + // WorkloadIdentity resource itself. + wrappers.LabelValues WorkloadIdentityLabels = 44 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "workload_identity_labels,omitempty", + (gogoproto.customtype) = "Labels" + ]; + // WorkloadIdentityLabelsExpression is a predicate expression used to + // allow/deny access to issuing a WorkloadIdentity. + string WorkloadIdentityLabelsExpression = 45 [(gogoproto.jsontag) = "workload_identity_labels_expression,omitempty"]; } // IdentityCenterAccountAssignment captures an AWS Identity Center account @@ -6455,6 +6477,8 @@ message PluginSpecV1 { PluginEmailSettings email = 17; // Settings for the Microsoft Teams plugin PluginMSTeamsSettings msteams = 18; + // Settings for the OpenTex NetIQ plugin. + PluginNetIQSettings net_iq = 19; } // generation contains a unique ID that should: @@ -6881,6 +6905,18 @@ message PluginMSTeamsSettings { string default_recipient = 5; } +// PluginNetIQSettings defines the settings for a NetIQ integration plugin +message PluginNetIQSettings { + option (gogoproto.equal) = true; + // oauth_issuer_endpoint is the NetIQ Oauth Issuer endpoint. + // Usually, it's equal to https://osp.domain.ext/a/idm/auth/oauth2 + string oauth_issuer_endpoint = 1; + // api_endpoint is the IDM PROV Rest API location. + string api_endpoint = 2; + // insecure_skip_verify controls whether the NetIQ certificate validation should be skipped. + bool insecure_skip_verify = 3; +} + message PluginBootstrapCredentialsV1 { oneof credentials { PluginOAuth2AuthorizationCodeCredentials oauth2_authorization_code = 1; @@ -6919,6 +6955,8 @@ message PluginStatusV1 { PluginOktaStatusV1 okta = 7; // AWSIC holds status details for the AWS Identity Center plugin. PluginAWSICStatusV1 aws_ic = 8; + // NetIQ holds status details for the NetIQ plugin. + PluginNetIQStatusV1 net_iq = 9; } // last_raw_error variable stores the most recent raw error message received from an API or service. @@ -6928,6 +6966,18 @@ message PluginStatusV1 { string last_raw_error = 6; } +// PluginNetIQStatusV1 is the status details for the NetIQ plugin. +message PluginNetIQStatusV1 { + // imported_users is the number of users imported from NetIQ eDirectory. + uint32 imported_users = 1; + // imported_groups is the number of groups imported from NetIQ eDirectory. + uint32 imported_groups = 2; + // imported_roles is the number of roles imported from NetIQ eDirectory. + uint32 imported_roles = 3; + // imported_resources is the number of resources imported from NetIQ eDirectory. + uint32 imported_resources = 4; +} + // PluginGitlabStatusV1 is the status details for the Gitlab plugin. message PluginGitlabStatusV1 { // imported_users is the number of users imported from Gitlab. @@ -8011,12 +8061,14 @@ message OktaOptions { message AccessGraphSync { // AWS is a configuration for AWS Access Graph service poll service. repeated AccessGraphAWSSync AWS = 1 [(gogoproto.jsontag) = "aws,omitempty"]; - // PollInterval is the frequency at which to poll for AWS resources + // PollInterval is the frequency at which to poll for resources google.protobuf.Duration PollInterval = 2 [ (gogoproto.jsontag) = "poll_interval,omitempty", (gogoproto.nullable) = false, (gogoproto.stdduration) = true ]; + // Azure is a configuration for Azure Access Graph service poll service. + repeated AccessGraphAzureSync Azure = 3 [(gogoproto.jsontag) = "azure,omitempty"]; } // AccessGraphAWSSync is a configuration for AWS Access Graph service poll service. @@ -8028,3 +8080,11 @@ message AccessGraphAWSSync { // Integration is the integration name used to generate credentials to interact with AWS APIs. string Integration = 4 [(gogoproto.jsontag) = "integration,omitempty"]; } + +// AccessGraphAzureSync is a configuration for Azure Access Graph service poll service. +message AccessGraphAzureSync { + // SubscriptionID Is the ID of the Azure subscription to sync resources from + string SubscriptionID = 1 [(gogoproto.jsontag) = "subscription_id,omitempty"]; + // Integration is the integration name used to generate credentials to interact with AWS APIs. + string Integration = 2 [(gogoproto.jsontag) = "integration,omitempty"]; +} From 86365e0e87057628a535ddae9a912dda624fde49 Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Mon, 6 Jan 2025 15:03:36 -0800 Subject: [PATCH 24/25] Remove V2 suffix --- .../controllers/resources/trusted_cluster_controller.go | 4 ++-- .../resources/trusted_clusterv2_controller_test.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/integrations/operator/controllers/resources/trusted_cluster_controller.go b/integrations/operator/controllers/resources/trusted_cluster_controller.go index ca49dcbad7cd8..c7086fae046fe 100644 --- a/integrations/operator/controllers/resources/trusted_cluster_controller.go +++ b/integrations/operator/controllers/resources/trusted_cluster_controller.go @@ -47,13 +47,13 @@ func (r trustedClusterClient) Get(ctx context.Context, name string) (types.Trust // Create creates a Teleport trusted_cluster. func (r trustedClusterClient) Create(ctx context.Context, trustedCluster types.TrustedCluster) error { - _, err := r.teleportClient.CreateTrustedClusterV2(ctx, trustedCluster) + _, err := r.teleportClient.CreateTrustedCluster(ctx, trustedCluster) return trace.Wrap(err) } // Update updates a Teleport trusted_cluster. func (r trustedClusterClient) Update(ctx context.Context, trustedCluster types.TrustedCluster) error { - _, err := r.teleportClient.UpdateTrustedClusterV2(ctx, trustedCluster) + _, err := r.teleportClient.UpdateTrustedCluster(ctx, trustedCluster) return trace.Wrap(err) } diff --git a/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go b/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go index ef61817f8815f..1c55727386bd4 100644 --- a/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go +++ b/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go @@ -69,7 +69,7 @@ func (r *trustedClusterV2TestingPrimitives) CreateTeleportResource(ctx context.C return trace.Wrap(err) } trustedCluster.SetOrigin(types.OriginKubernetes) - _, err = r.setup.TeleportClient.CreateTrustedClusterV2(ctx, trustedCluster) + _, err = r.setup.TeleportClient.CreateTrustedCluster(ctx, trustedCluster) return trace.Wrap(err) } From b9ecc1bb0acc32ed15238a62e1065e030f434964 Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Thu, 9 Jan 2025 11:05:13 -0800 Subject: [PATCH 25/25] 2024 -> 2025 --- .../operator/apis/resources/v1/trusted_cluster_types.go | 2 +- .../controllers/resources/trusted_cluster_controller.go | 2 +- .../controllers/resources/trusted_clusterv2_controller_test.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/integrations/operator/apis/resources/v1/trusted_cluster_types.go b/integrations/operator/apis/resources/v1/trusted_cluster_types.go index 707106359e30c..0f6b8f753fac2 100644 --- a/integrations/operator/apis/resources/v1/trusted_cluster_types.go +++ b/integrations/operator/apis/resources/v1/trusted_cluster_types.go @@ -1,6 +1,6 @@ /* * Teleport - * Copyright (C) 2024 Gravitational, Inc. + * Copyright (C) 2025 Gravitational, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by diff --git a/integrations/operator/controllers/resources/trusted_cluster_controller.go b/integrations/operator/controllers/resources/trusted_cluster_controller.go index c7086fae046fe..a3154bed00b42 100644 --- a/integrations/operator/controllers/resources/trusted_cluster_controller.go +++ b/integrations/operator/controllers/resources/trusted_cluster_controller.go @@ -1,6 +1,6 @@ /* * Teleport - * Copyright (C) 2024 Gravitational, Inc. + * Copyright (C) 2025 Gravitational, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by diff --git a/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go b/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go index 1c55727386bd4..3403e8e7d0278 100644 --- a/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go +++ b/integrations/operator/controllers/resources/trusted_clusterv2_controller_test.go @@ -1,6 +1,6 @@ /* * Teleport - * Copyright (C) 2024 Gravitational, Inc. + * Copyright (C) 2025 Gravitational, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by