From 928de43b189159f9f05d75de49d742ec987ed774 Mon Sep 17 00:00:00 2001 From: Forrest <30576607+fspmarshall@users.noreply.github.com> Date: Wed, 29 May 2024 16:05:55 -0700 Subject: [PATCH] self-repair instance certs (#41467) --- api/client/client.go | 9 + api/client/proto/authservice.pb.go | 2785 ++++++++++------- .../legacy/client/proto/authservice.proto | 47 +- integration/instance_test.go | 238 ++ integration/testdata/agent/host_uuid | 1 + integration/testdata/agent/proc/sqlite.db | Bin 0 -> 49152 bytes integration/testdata/auth/backend/sqlite.db | Bin 0 -> 172032 bytes integration/testdata/auth/host_uuid | 1 + integration/testdata/auth/proc/sqlite.db | Bin 0 -> 57344 bytes lib/auth/auth.go | 16 + lib/auth/auth_with_roles.go | 48 +- lib/auth/grpcserver.go | 17 + lib/auth/grpcserver_test.go | 79 +- lib/auth/register.go | 36 +- lib/auth/state/state.go | 36 + lib/service/connect.go | 158 +- lib/service/service.go | 41 +- lib/services/local/unstable.go | 84 + lib/services/local/unstable_test.go | 78 + 19 files changed, 2569 insertions(+), 1105 deletions(-) create mode 100644 integration/instance_test.go create mode 100644 integration/testdata/agent/host_uuid create mode 100644 integration/testdata/agent/proc/sqlite.db create mode 100644 integration/testdata/auth/backend/sqlite.db create mode 100644 integration/testdata/auth/host_uuid create mode 100644 integration/testdata/auth/proc/sqlite.db create mode 100644 lib/services/local/unstable_test.go diff --git a/api/client/client.go b/api/client/client.go index c36060593fab2..9e161f14d4705 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -980,6 +980,15 @@ func (c *Client) GenerateOpenSSHCert(ctx context.Context, req *proto.OpenSSHCert return cert, nil } +// AssertSystemRole is used by agents to prove that they have a given system role when their credentials originate +// from multiple separate join tokens so that they can be issued an instance certificate that encompasses +// all of their capabilities. This method will be deprecated once we have a more comprehensive +// model for join token joining/replacement. +func (c *Client) AssertSystemRole(ctx context.Context, req proto.SystemRoleAssertion) error { + _, err := c.grpc.AssertSystemRole(ctx, &req) + return trace.Wrap(err) +} + // EmitAuditEvent sends an auditable event to the auth server. func (c *Client) EmitAuditEvent(ctx context.Context, event events.AuditEvent) error { grpcEvent, err := events.ToOneOf(event) diff --git a/api/client/proto/authservice.pb.go b/api/client/proto/authservice.pb.go index 272d4e11fa883..f2eb5fbf5c76b 100644 --- a/api/client/proto/authservice.pb.go +++ b/api/client/proto/authservice.pb.go @@ -496,10 +496,15 @@ type HostCertsRequest struct { // single-role and only specify the Role field. The SystemRoles field is only // currently used on Instance certs, which need to express all roles held by // the instance. - SystemRoles []github_com_gravitational_teleport_api_types.SystemRole `protobuf:"bytes,11,rep,name=SystemRoles,proto3,casttype=github.com/gravitational/teleport/api/types.SystemRole" json:"system_roles,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + SystemRoles []github_com_gravitational_teleport_api_types.SystemRole `protobuf:"bytes,11,rep,name=SystemRoles,proto3,casttype=github.com/gravitational/teleport/api/types.SystemRole" json:"system_roles,omitempty"` + // SystemRoleAssertionID is used by agents to prove that they have a given system role when + // their credentials originate from multiple separate join tokens so that they can be issued + // an instance certificate that encompasses all of their capabilities. This field will be + // deprecated once we have a more comprehensive model for join token joining/replacement. + SystemRoleAssertionID string `protobuf:"bytes,13,opt,name=SystemRoleAssertionID,proto3" json:"system_role_assertion_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *HostCertsRequest) Reset() { *m = HostCertsRequest{} } @@ -612,6 +617,13 @@ func (m *HostCertsRequest) GetSystemRoles() []github_com_gravitational_teleport_ return nil } +func (m *HostCertsRequest) GetSystemRoleAssertionID() string { + if m != nil { + return m.SystemRoleAssertionID + } + return "" +} + // OpenSSHCertRequest specifies certificate-generation parameters // for a certificates used to connect to Agentless nodes. type OpenSSHCertRequest struct { @@ -12358,6 +12370,149 @@ func (m *GetSSODiagnosticInfoRequest) GetAuthRequestID() string { return "" } +// SystemRoleAssertion is used by agents to prove that they have a given system role when their +// credentials originate from multiple separate join tokens so that they can be issued an +// instance certificate that encompasses all of their capabilities. This type will be +// deprecated once we have a more comprehensive model for join token joining/replacement. +type SystemRoleAssertion struct { + // ServerID is the server ID of the instance that the assertion is for. Assertions are + // only accepted if the calling agent's certificate matches this server id. + ServerID string `protobuf:"bytes,1,opt,name=ServerID,proto3" json:"server_id,omitempty"` + // AssertionID is a random UUID that uniquely identifies a set of assertions + // as originating from the same teleport process. + AssertionID string `protobuf:"bytes,2,opt,name=AssertionID,proto3" json:"assertion_id,omitempty"` + // SystemRole is the system role being asserted. Assertions are only accepted if + // the calling agent's certificate authorizes it for this system role. + SystemRole github_com_gravitational_teleport_api_types.SystemRole `protobuf:"bytes,3,opt,name=SystemRole,proto3,casttype=github.com/gravitational/teleport/api/types.SystemRole" json:"system_role,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SystemRoleAssertion) Reset() { *m = SystemRoleAssertion{} } +func (m *SystemRoleAssertion) String() string { return proto.CompactTextString(m) } +func (*SystemRoleAssertion) ProtoMessage() {} +func (*SystemRoleAssertion) Descriptor() ([]byte, []int) { + return fileDescriptor_0ffcffcda38ae159, []int{182} +} +func (m *SystemRoleAssertion) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SystemRoleAssertion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SystemRoleAssertion.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *SystemRoleAssertion) XXX_Merge(src proto.Message) { + xxx_messageInfo_SystemRoleAssertion.Merge(m, src) +} +func (m *SystemRoleAssertion) XXX_Size() int { + return m.Size() +} +func (m *SystemRoleAssertion) XXX_DiscardUnknown() { + xxx_messageInfo_SystemRoleAssertion.DiscardUnknown(m) +} + +var xxx_messageInfo_SystemRoleAssertion proto.InternalMessageInfo + +func (m *SystemRoleAssertion) GetServerID() string { + if m != nil { + return m.ServerID + } + return "" +} + +func (m *SystemRoleAssertion) GetAssertionID() string { + if m != nil { + return m.AssertionID + } + return "" +} + +func (m *SystemRoleAssertion) GetSystemRole() github_com_gravitational_teleport_api_types.SystemRole { + if m != nil { + return m.SystemRole + } + return "" +} + +// SystemRoleAssertionSet is an aggregate generated as a result of one or more successful +// assertions. This type will be deprecated once we have a more comprehensive model for +// join token joining/replacement. +type SystemRoleAssertionSet struct { + // ServerID is the server ID of the agent that generated the assertions. + ServerID string `protobuf:"bytes,1,opt,name=ServerID,proto3" json:"server_id,omitempty"` + // AssertionID is a random UUID that identified all constituent assertions as originating + // from the same teleport process. + AssertionID string `protobuf:"bytes,2,opt,name=AssertionID,proto3" json:"assertion_id,omitempty"` + // SystemRoles is the set of system roles that the agent has successfully asserted. + SystemRoles []github_com_gravitational_teleport_api_types.SystemRole `protobuf:"bytes,3,rep,name=SystemRoles,proto3,casttype=github.com/gravitational/teleport/api/types.SystemRole" json:"system_roles,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SystemRoleAssertionSet) Reset() { *m = SystemRoleAssertionSet{} } +func (m *SystemRoleAssertionSet) String() string { return proto.CompactTextString(m) } +func (*SystemRoleAssertionSet) ProtoMessage() {} +func (*SystemRoleAssertionSet) Descriptor() ([]byte, []int) { + return fileDescriptor_0ffcffcda38ae159, []int{183} +} +func (m *SystemRoleAssertionSet) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SystemRoleAssertionSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SystemRoleAssertionSet.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *SystemRoleAssertionSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_SystemRoleAssertionSet.Merge(m, src) +} +func (m *SystemRoleAssertionSet) XXX_Size() int { + return m.Size() +} +func (m *SystemRoleAssertionSet) XXX_DiscardUnknown() { + xxx_messageInfo_SystemRoleAssertionSet.DiscardUnknown(m) +} + +var xxx_messageInfo_SystemRoleAssertionSet proto.InternalMessageInfo + +func (m *SystemRoleAssertionSet) GetServerID() string { + if m != nil { + return m.ServerID + } + return "" +} + +func (m *SystemRoleAssertionSet) GetAssertionID() string { + if m != nil { + return m.AssertionID + } + return "" +} + +func (m *SystemRoleAssertionSet) GetSystemRoles() []github_com_gravitational_teleport_api_types.SystemRole { + if m != nil { + return m.SystemRoles + } + return nil +} + // UpstreamInventoryOneOf is the upstream message for the inventory control stream, // sent from teleport instances to the auth server. type UpstreamInventoryOneOf struct { @@ -12376,7 +12531,7 @@ func (m *UpstreamInventoryOneOf) Reset() { *m = UpstreamInventoryOneOf{} func (m *UpstreamInventoryOneOf) String() string { return proto.CompactTextString(m) } func (*UpstreamInventoryOneOf) ProtoMessage() {} func (*UpstreamInventoryOneOf) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{182} + return fileDescriptor_0ffcffcda38ae159, []int{184} } func (m *UpstreamInventoryOneOf) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12491,7 +12646,7 @@ func (m *DownstreamInventoryOneOf) Reset() { *m = DownstreamInventoryOne func (m *DownstreamInventoryOneOf) String() string { return proto.CompactTextString(m) } func (*DownstreamInventoryOneOf) ProtoMessage() {} func (*DownstreamInventoryOneOf) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{183} + return fileDescriptor_0ffcffcda38ae159, []int{185} } func (m *DownstreamInventoryOneOf) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12590,7 +12745,7 @@ func (m *DownstreamInventoryPing) Reset() { *m = DownstreamInventoryPing func (m *DownstreamInventoryPing) String() string { return proto.CompactTextString(m) } func (*DownstreamInventoryPing) ProtoMessage() {} func (*DownstreamInventoryPing) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{184} + return fileDescriptor_0ffcffcda38ae159, []int{186} } func (m *DownstreamInventoryPing) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12639,7 +12794,7 @@ func (m *UpstreamInventoryPong) Reset() { *m = UpstreamInventoryPong{} } func (m *UpstreamInventoryPong) String() string { return proto.CompactTextString(m) } func (*UpstreamInventoryPong) ProtoMessage() {} func (*UpstreamInventoryPong) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{185} + return fileDescriptor_0ffcffcda38ae159, []int{187} } func (m *UpstreamInventoryPong) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12706,7 +12861,7 @@ func (m *UpstreamInventoryHello) Reset() { *m = UpstreamInventoryHello{} func (m *UpstreamInventoryHello) String() string { return proto.CompactTextString(m) } func (*UpstreamInventoryHello) ProtoMessage() {} func (*UpstreamInventoryHello) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{186} + return fileDescriptor_0ffcffcda38ae159, []int{188} } func (m *UpstreamInventoryHello) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12806,7 +12961,7 @@ func (m *UpstreamInventoryAgentMetadata) Reset() { *m = UpstreamInventor func (m *UpstreamInventoryAgentMetadata) String() string { return proto.CompactTextString(m) } func (*UpstreamInventoryAgentMetadata) ProtoMessage() {} func (*UpstreamInventoryAgentMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{187} + return fileDescriptor_0ffcffcda38ae159, []int{189} } func (m *UpstreamInventoryAgentMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12906,7 +13061,7 @@ func (m *DownstreamInventoryHello) Reset() { *m = DownstreamInventoryHel func (m *DownstreamInventoryHello) String() string { return proto.CompactTextString(m) } func (*DownstreamInventoryHello) ProtoMessage() {} func (*DownstreamInventoryHello) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{188} + return fileDescriptor_0ffcffcda38ae159, []int{190} } func (m *DownstreamInventoryHello) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12967,7 +13122,7 @@ func (m *InventoryUpdateLabelsRequest) Reset() { *m = InventoryUpdateLab func (m *InventoryUpdateLabelsRequest) String() string { return proto.CompactTextString(m) } func (*InventoryUpdateLabelsRequest) ProtoMessage() {} func (*InventoryUpdateLabelsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{189} + return fileDescriptor_0ffcffcda38ae159, []int{191} } func (m *InventoryUpdateLabelsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13033,7 +13188,7 @@ func (m *DownstreamInventoryUpdateLabels) Reset() { *m = DownstreamInven func (m *DownstreamInventoryUpdateLabels) String() string { return proto.CompactTextString(m) } func (*DownstreamInventoryUpdateLabels) ProtoMessage() {} func (*DownstreamInventoryUpdateLabels) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{190} + return fileDescriptor_0ffcffcda38ae159, []int{192} } func (m *DownstreamInventoryUpdateLabels) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13094,7 +13249,7 @@ func (m *InventoryHeartbeat) Reset() { *m = InventoryHeartbeat{} } func (m *InventoryHeartbeat) String() string { return proto.CompactTextString(m) } func (*InventoryHeartbeat) ProtoMessage() {} func (*InventoryHeartbeat) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{191} + return fileDescriptor_0ffcffcda38ae159, []int{193} } func (m *InventoryHeartbeat) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13151,7 +13306,7 @@ func (m *InventoryStatusRequest) Reset() { *m = InventoryStatusRequest{} func (m *InventoryStatusRequest) String() string { return proto.CompactTextString(m) } func (*InventoryStatusRequest) ProtoMessage() {} func (*InventoryStatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{192} + return fileDescriptor_0ffcffcda38ae159, []int{194} } func (m *InventoryStatusRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13209,7 +13364,7 @@ func (m *InventoryStatusSummary) Reset() { *m = InventoryStatusSummary{} func (m *InventoryStatusSummary) String() string { return proto.CompactTextString(m) } func (*InventoryStatusSummary) ProtoMessage() {} func (*InventoryStatusSummary) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{193} + return fileDescriptor_0ffcffcda38ae159, []int{195} } func (m *InventoryStatusSummary) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13286,7 +13441,7 @@ func (m *InventoryConnectedServiceCountsRequest) Reset() { func (m *InventoryConnectedServiceCountsRequest) String() string { return proto.CompactTextString(m) } func (*InventoryConnectedServiceCountsRequest) ProtoMessage() {} func (*InventoryConnectedServiceCountsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{194} + return fileDescriptor_0ffcffcda38ae159, []int{196} } func (m *InventoryConnectedServiceCountsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13328,7 +13483,7 @@ func (m *InventoryConnectedServiceCounts) Reset() { *m = InventoryConnec func (m *InventoryConnectedServiceCounts) String() string { return proto.CompactTextString(m) } func (*InventoryConnectedServiceCounts) ProtoMessage() {} func (*InventoryConnectedServiceCounts) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{195} + return fileDescriptor_0ffcffcda38ae159, []int{197} } func (m *InventoryConnectedServiceCounts) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13382,7 +13537,7 @@ func (m *InventoryPingRequest) Reset() { *m = InventoryPingRequest{} } func (m *InventoryPingRequest) String() string { return proto.CompactTextString(m) } func (*InventoryPingRequest) ProtoMessage() {} func (*InventoryPingRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{196} + return fileDescriptor_0ffcffcda38ae159, []int{198} } func (m *InventoryPingRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13438,7 +13593,7 @@ func (m *InventoryPingResponse) Reset() { *m = InventoryPingResponse{} } func (m *InventoryPingResponse) String() string { return proto.CompactTextString(m) } func (*InventoryPingResponse) ProtoMessage() {} func (*InventoryPingResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{197} + return fileDescriptor_0ffcffcda38ae159, []int{199} } func (m *InventoryPingResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13487,7 +13642,7 @@ func (m *GetClusterAlertsResponse) Reset() { *m = GetClusterAlertsRespon func (m *GetClusterAlertsResponse) String() string { return proto.CompactTextString(m) } func (*GetClusterAlertsResponse) ProtoMessage() {} func (*GetClusterAlertsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{198} + return fileDescriptor_0ffcffcda38ae159, []int{200} } func (m *GetClusterAlertsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13534,7 +13689,7 @@ func (m *GetAlertAcksRequest) Reset() { *m = GetAlertAcksRequest{} } func (m *GetAlertAcksRequest) String() string { return proto.CompactTextString(m) } func (*GetAlertAcksRequest) ProtoMessage() {} func (*GetAlertAcksRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{199} + return fileDescriptor_0ffcffcda38ae159, []int{201} } func (m *GetAlertAcksRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13576,7 +13731,7 @@ func (m *GetAlertAcksResponse) Reset() { *m = GetAlertAcksResponse{} } func (m *GetAlertAcksResponse) String() string { return proto.CompactTextString(m) } func (*GetAlertAcksResponse) ProtoMessage() {} func (*GetAlertAcksResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{200} + return fileDescriptor_0ffcffcda38ae159, []int{202} } func (m *GetAlertAcksResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13626,7 +13781,7 @@ func (m *ClearAlertAcksRequest) Reset() { *m = ClearAlertAcksRequest{} } func (m *ClearAlertAcksRequest) String() string { return proto.CompactTextString(m) } func (*ClearAlertAcksRequest) ProtoMessage() {} func (*ClearAlertAcksRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{201} + return fileDescriptor_0ffcffcda38ae159, []int{203} } func (m *ClearAlertAcksRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13675,7 +13830,7 @@ func (m *UpsertClusterAlertRequest) Reset() { *m = UpsertClusterAlertReq func (m *UpsertClusterAlertRequest) String() string { return proto.CompactTextString(m) } func (*UpsertClusterAlertRequest) ProtoMessage() {} func (*UpsertClusterAlertRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{202} + return fileDescriptor_0ffcffcda38ae159, []int{204} } func (m *UpsertClusterAlertRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13724,7 +13879,7 @@ func (m *GetConnectionDiagnosticRequest) Reset() { *m = GetConnectionDia func (m *GetConnectionDiagnosticRequest) String() string { return proto.CompactTextString(m) } func (*GetConnectionDiagnosticRequest) ProtoMessage() {} func (*GetConnectionDiagnosticRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{203} + return fileDescriptor_0ffcffcda38ae159, []int{205} } func (m *GetConnectionDiagnosticRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13775,7 +13930,7 @@ func (m *AppendDiagnosticTraceRequest) Reset() { *m = AppendDiagnosticTr func (m *AppendDiagnosticTraceRequest) String() string { return proto.CompactTextString(m) } func (*AppendDiagnosticTraceRequest) ProtoMessage() {} func (*AppendDiagnosticTraceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{204} + return fileDescriptor_0ffcffcda38ae159, []int{206} } func (m *AppendDiagnosticTraceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13830,7 +13985,7 @@ func (m *SubmitUsageEventRequest) Reset() { *m = SubmitUsageEventRequest func (m *SubmitUsageEventRequest) String() string { return proto.CompactTextString(m) } func (*SubmitUsageEventRequest) ProtoMessage() {} func (*SubmitUsageEventRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{205} + return fileDescriptor_0ffcffcda38ae159, []int{207} } func (m *SubmitUsageEventRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13877,7 +14032,7 @@ func (m *GetLicenseRequest) Reset() { *m = GetLicenseRequest{} } func (m *GetLicenseRequest) String() string { return proto.CompactTextString(m) } func (*GetLicenseRequest) ProtoMessage() {} func (*GetLicenseRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{206} + return fileDescriptor_0ffcffcda38ae159, []int{208} } func (m *GetLicenseRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13917,7 +14072,7 @@ func (m *ListReleasesRequest) Reset() { *m = ListReleasesRequest{} } func (m *ListReleasesRequest) String() string { return proto.CompactTextString(m) } func (*ListReleasesRequest) ProtoMessage() {} func (*ListReleasesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{207} + return fileDescriptor_0ffcffcda38ae159, []int{209} } func (m *ListReleasesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13961,7 +14116,7 @@ func (m *CreateTokenV2Request) Reset() { *m = CreateTokenV2Request{} } func (m *CreateTokenV2Request) String() string { return proto.CompactTextString(m) } func (*CreateTokenV2Request) ProtoMessage() {} func (*CreateTokenV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{208} + return fileDescriptor_0ffcffcda38ae159, []int{210} } func (m *CreateTokenV2Request) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14038,7 +14193,7 @@ func (m *UpsertTokenV2Request) Reset() { *m = UpsertTokenV2Request{} } func (m *UpsertTokenV2Request) String() string { return proto.CompactTextString(m) } func (*UpsertTokenV2Request) ProtoMessage() {} func (*UpsertTokenV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{209} + return fileDescriptor_0ffcffcda38ae159, []int{211} } func (m *UpsertTokenV2Request) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14113,7 +14268,7 @@ func (m *GetHeadlessAuthenticationRequest) Reset() { *m = GetHeadlessAut func (m *GetHeadlessAuthenticationRequest) String() string { return proto.CompactTextString(m) } func (*GetHeadlessAuthenticationRequest) ProtoMessage() {} func (*GetHeadlessAuthenticationRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{210} + return fileDescriptor_0ffcffcda38ae159, []int{212} } func (m *GetHeadlessAuthenticationRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14171,7 +14326,7 @@ func (m *UpdateHeadlessAuthenticationStateRequest) Reset() { func (m *UpdateHeadlessAuthenticationStateRequest) String() string { return proto.CompactTextString(m) } func (*UpdateHeadlessAuthenticationStateRequest) ProtoMessage() {} func (*UpdateHeadlessAuthenticationStateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{211} + return fileDescriptor_0ffcffcda38ae159, []int{213} } func (m *UpdateHeadlessAuthenticationStateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14237,7 +14392,7 @@ func (m *ExportUpgradeWindowsRequest) Reset() { *m = ExportUpgradeWindow func (m *ExportUpgradeWindowsRequest) String() string { return proto.CompactTextString(m) } func (*ExportUpgradeWindowsRequest) ProtoMessage() {} func (*ExportUpgradeWindowsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{212} + return fileDescriptor_0ffcffcda38ae159, []int{214} } func (m *ExportUpgradeWindowsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14303,7 +14458,7 @@ func (m *ExportUpgradeWindowsResponse) Reset() { *m = ExportUpgradeWindo func (m *ExportUpgradeWindowsResponse) String() string { return proto.CompactTextString(m) } func (*ExportUpgradeWindowsResponse) ProtoMessage() {} func (*ExportUpgradeWindowsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{213} + return fileDescriptor_0ffcffcda38ae159, []int{215} } func (m *ExportUpgradeWindowsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14378,7 +14533,7 @@ func (m *ListAccessRequestsRequest) Reset() { *m = ListAccessRequestsReq func (m *ListAccessRequestsRequest) String() string { return proto.CompactTextString(m) } func (*ListAccessRequestsRequest) ProtoMessage() {} func (*ListAccessRequestsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{214} + return fileDescriptor_0ffcffcda38ae159, []int{216} } func (m *ListAccessRequestsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14457,7 +14612,7 @@ func (m *ListAccessRequestsResponse) Reset() { *m = ListAccessRequestsRe func (m *ListAccessRequestsResponse) String() string { return proto.CompactTextString(m) } func (*ListAccessRequestsResponse) ProtoMessage() {} func (*ListAccessRequestsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{215} + return fileDescriptor_0ffcffcda38ae159, []int{217} } func (m *ListAccessRequestsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14513,7 +14668,7 @@ func (m *AccessRequestAllowedPromotionRequest) Reset() { *m = AccessRequ func (m *AccessRequestAllowedPromotionRequest) String() string { return proto.CompactTextString(m) } func (*AccessRequestAllowedPromotionRequest) ProtoMessage() {} func (*AccessRequestAllowedPromotionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{216} + return fileDescriptor_0ffcffcda38ae159, []int{218} } func (m *AccessRequestAllowedPromotionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14562,7 +14717,7 @@ func (m *AccessRequestAllowedPromotionResponse) Reset() { *m = AccessReq func (m *AccessRequestAllowedPromotionResponse) String() string { return proto.CompactTextString(m) } func (*AccessRequestAllowedPromotionResponse) ProtoMessage() {} func (*AccessRequestAllowedPromotionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{217} + return fileDescriptor_0ffcffcda38ae159, []int{219} } func (m *AccessRequestAllowedPromotionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14795,6 +14950,8 @@ func init() { proto.RegisterType((*GetSAMLAuthRequestRequest)(nil), "proto.GetSAMLAuthRequestRequest") proto.RegisterType((*GetGithubAuthRequestRequest)(nil), "proto.GetGithubAuthRequestRequest") proto.RegisterType((*GetSSODiagnosticInfoRequest)(nil), "proto.GetSSODiagnosticInfoRequest") + proto.RegisterType((*SystemRoleAssertion)(nil), "proto.SystemRoleAssertion") + proto.RegisterType((*SystemRoleAssertionSet)(nil), "proto.SystemRoleAssertionSet") proto.RegisterType((*UpstreamInventoryOneOf)(nil), "proto.UpstreamInventoryOneOf") proto.RegisterType((*DownstreamInventoryOneOf)(nil), "proto.DownstreamInventoryOneOf") proto.RegisterType((*DownstreamInventoryPing)(nil), "proto.DownstreamInventoryPing") @@ -14844,854 +15001,861 @@ func init() { } var fileDescriptor_0ffcffcda38ae159 = []byte{ - // 13537 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0xbd, 0x5b, 0x6c, 0x1c, 0x49, - 0x96, 0x18, 0xca, 0x2a, 0xbe, 0x0f, 0x5f, 0xc5, 0x20, 0x29, 0x52, 0x25, 0x4a, 0x25, 0xa5, 0x5a, - 0x6a, 0xb5, 0xa6, 0x5b, 0x0f, 0xaa, 0xbb, 0xa7, 0xdf, 0xea, 0xaa, 0x22, 0x25, 0x52, 0xe2, 0xab, - 0xb3, 0xf8, 0xe8, 0x9e, 0xe9, 0x9d, 0x9a, 0x64, 0x55, 0x88, 0xcc, 0xab, 0x62, 0x66, 0x4d, 0x66, - 0x96, 0x1e, 0xb3, 0x77, 0xf7, 0xde, 0xdd, 0xb5, 0xf7, 0xcf, 0xf6, 0x1a, 0xde, 0x35, 0x76, 0xb1, - 0x1f, 0x6b, 0xc3, 0x36, 0xe0, 0x07, 0x0c, 0xf8, 0xc7, 0xd8, 0x0f, 0xfb, 0xc7, 0xb0, 0x01, 0x8f, - 0x0d, 0x2c, 0x6c, 0x60, 0xd7, 0x80, 0xe1, 0x0f, 0xee, 0xee, 0x7c, 0x12, 0xf6, 0x87, 0x61, 0x78, - 0x0d, 0x0f, 0x60, 0xc0, 0x88, 0x67, 0x46, 0xe4, 0xab, 0x8a, 0x92, 0x66, 0xec, 0x1f, 0x89, 0x15, - 0x71, 0xce, 0x89, 0x88, 0x13, 0x8f, 0x3c, 0xe7, 0xc4, 0x89, 0x73, 0xe0, 0x56, 0x80, 0x5b, 0xb8, - 0xed, 0x7a, 0xc1, 0xed, 0x16, 0x3e, 0xb4, 0x1a, 0x2f, 0x6f, 0x37, 0x5a, 0x36, 0x76, 0x82, 0xdb, - 0x6d, 0xcf, 0x0d, 0xdc, 0xdb, 0x56, 0x27, 0x38, 0xf2, 0xb1, 0xf7, 0xcc, 0x6e, 0xe0, 0x5b, 0xb4, - 0x04, 0x0d, 0xd2, 0xff, 0x8a, 0xb3, 0x87, 0xee, 0xa1, 0xcb, 0x60, 0xc8, 0x5f, 0xac, 0xb2, 0x78, - 0xe1, 0xd0, 0x75, 0x0f, 0x5b, 0x98, 0x21, 0x1f, 0x74, 0x9e, 0xdc, 0xc6, 0xc7, 0xed, 0xe0, 0x25, - 0xaf, 0x2c, 0x45, 0x2b, 0x03, 0xfb, 0x18, 0xfb, 0x81, 0x75, 0xdc, 0xe6, 0x00, 0xef, 0xc8, 0xae, - 0x58, 0x41, 0x40, 0x6a, 0x02, 0xdb, 0x75, 0x6e, 0x3f, 0xbb, 0xab, 0xfe, 0xe4, 0xa0, 0x37, 0x32, - 0x7b, 0xdd, 0xc0, 0x5e, 0xe0, 0xf7, 0x04, 0x89, 0x9f, 0x61, 0x27, 0x88, 0x35, 0xcf, 0x21, 0x83, - 0x97, 0x6d, 0xec, 0x33, 0x10, 0xf1, 0x1f, 0x07, 0xbd, 0x92, 0x0c, 0x4a, 0xff, 0xe5, 0x20, 0xef, - 0x25, 0x83, 0x3c, 0xc7, 0x07, 0x84, 0xa7, 0x8e, 0xfc, 0xa3, 0x0b, 0xb8, 0x67, 0xb5, 0xdb, 0xd8, - 0x0b, 0xff, 0x88, 0xf5, 0xb5, 0xe3, 0x5b, 0x87, 0x98, 0xf7, 0xf1, 0xd9, 0x5d, 0xf5, 0x27, 0x03, - 0x35, 0xfe, 0x20, 0x07, 0x83, 0xfb, 0x56, 0xd0, 0x38, 0x42, 0xf7, 0x61, 0xf0, 0xb1, 0xed, 0x34, - 0xfd, 0x85, 0xdc, 0xe5, 0xfe, 0x1b, 0x63, 0x4b, 0x85, 0x5b, 0xac, 0xbf, 0xb4, 0x92, 0x54, 0x54, - 0xe6, 0x7f, 0x72, 0x52, 0xea, 0x3b, 0x3d, 0x29, 0x4d, 0x3d, 0x25, 0x60, 0xef, 0xba, 0xc7, 0x76, - 0x40, 0x27, 0xd0, 0x64, 0x78, 0x68, 0x17, 0x66, 0xca, 0xad, 0x96, 0xfb, 0x7c, 0xdb, 0xf2, 0x02, - 0xdb, 0x6a, 0xd5, 0x3a, 0x8d, 0x06, 0xf6, 0xfd, 0x85, 0xfc, 0xe5, 0xdc, 0x8d, 0x91, 0xca, 0xd5, - 0xd3, 0x93, 0x52, 0xc9, 0x22, 0xd5, 0xf5, 0x36, 0xab, 0xaf, 0xfb, 0x0c, 0x40, 0x21, 0x94, 0x84, - 0x6f, 0xfc, 0xe7, 0x41, 0x28, 0xac, 0xba, 0x7e, 0x50, 0x25, 0xd3, 0x66, 0xe2, 0x1f, 0x75, 0xb0, - 0x1f, 0xa0, 0xab, 0x30, 0x44, 0xca, 0xd6, 0x96, 0x17, 0x72, 0x97, 0x73, 0x37, 0x46, 0x2b, 0x63, - 0xa7, 0x27, 0xa5, 0xe1, 0x23, 0xd7, 0x0f, 0xea, 0x76, 0xd3, 0xe4, 0x55, 0xe8, 0x1d, 0x18, 0xd9, - 0x74, 0x9b, 0x78, 0xd3, 0x3a, 0xc6, 0xb4, 0x17, 0xa3, 0x95, 0x89, 0xd3, 0x93, 0xd2, 0xa8, 0xe3, - 0x36, 0x71, 0xdd, 0xb1, 0x8e, 0xb1, 0x29, 0xab, 0xd1, 0x1e, 0x0c, 0x98, 0x6e, 0x0b, 0x2f, 0xf4, - 0x53, 0xb0, 0xca, 0xe9, 0x49, 0x69, 0xc0, 0x73, 0x5b, 0xf8, 0x67, 0x27, 0xa5, 0x0f, 0x0f, 0xed, - 0xe0, 0xa8, 0x73, 0x70, 0xab, 0xe1, 0x1e, 0xdf, 0x3e, 0xf4, 0xac, 0x67, 0x36, 0x5b, 0x69, 0x56, - 0xeb, 0x76, 0xb8, 0x1e, 0xdb, 0x36, 0x9f, 0xdc, 0xda, 0x4b, 0x3f, 0xc0, 0xc7, 0x84, 0x92, 0x49, - 0xe9, 0xa1, 0x7d, 0x98, 0x2d, 0x37, 0x9b, 0x36, 0xc3, 0xd8, 0xf6, 0x6c, 0xa7, 0x61, 0xb7, 0xad, - 0x96, 0xbf, 0x30, 0x70, 0xb9, 0xff, 0xc6, 0x28, 0x67, 0x8a, 0xac, 0xaf, 0xb7, 0x25, 0x80, 0xc2, - 0x94, 0x44, 0x02, 0xe8, 0x1e, 0x8c, 0x2c, 0x6f, 0xd6, 0x48, 0xdf, 0xfd, 0x85, 0x41, 0x4a, 0x6c, - 0xfe, 0xf4, 0xa4, 0x34, 0xd3, 0x74, 0x7c, 0x3a, 0x34, 0x95, 0x80, 0x04, 0x44, 0x1f, 0xc2, 0xf8, - 0x76, 0xe7, 0xa0, 0x65, 0x37, 0x76, 0xd6, 0x6b, 0x8f, 0xf1, 0xcb, 0x85, 0xa1, 0xcb, 0xb9, 0x1b, - 0xe3, 0x15, 0x74, 0x7a, 0x52, 0x9a, 0x6c, 0xd3, 0xf2, 0x7a, 0xd0, 0xf2, 0xeb, 0x4f, 0xf1, 0x4b, - 0x53, 0x83, 0x0b, 0xf1, 0x6a, 0xb5, 0x55, 0x82, 0x37, 0x1c, 0xc3, 0xf3, 0xfd, 0x23, 0x15, 0x8f, - 0xc1, 0xa1, 0xdb, 0x00, 0x26, 0x3e, 0x76, 0x03, 0x5c, 0x6e, 0x36, 0xbd, 0x85, 0x11, 0xca, 0xdb, - 0xa9, 0xd3, 0x93, 0xd2, 0x98, 0x47, 0x4b, 0xeb, 0x56, 0xb3, 0xe9, 0x99, 0x0a, 0x08, 0xaa, 0xc2, - 0x88, 0xe9, 0x32, 0x06, 0x2f, 0x8c, 0x5e, 0xce, 0xdd, 0x18, 0x5b, 0x9a, 0xe2, 0xcb, 0x50, 0x14, - 0x57, 0xce, 0x9d, 0x9e, 0x94, 0x90, 0xc7, 0x7f, 0xa9, 0xa3, 0x14, 0x10, 0xa8, 0x04, 0xc3, 0x9b, - 0x6e, 0xd5, 0x6a, 0x1c, 0xe1, 0x05, 0xa0, 0x6b, 0x6f, 0xf0, 0xf4, 0xa4, 0x94, 0x7b, 0xcf, 0x14, - 0xa5, 0xe8, 0x19, 0x8c, 0x85, 0x13, 0xe5, 0x2f, 0x8c, 0x51, 0xf6, 0xed, 0x9c, 0x9e, 0x94, 0xce, - 0xf9, 0xb4, 0xb8, 0x4e, 0xa6, 0x5e, 0xe1, 0xe0, 0x6b, 0xac, 0x02, 0xb5, 0xa1, 0x47, 0x03, 0x23, - 0xe3, 0x85, 0x09, 0xf3, 0xe2, 0xae, 0xe3, 0x07, 0xd6, 0x41, 0x0b, 0x87, 0x55, 0x65, 0xdf, 0xc7, - 0x1e, 0xa1, 0xb7, 0xb6, 0x6c, 0xfc, 0xaf, 0x1c, 0xa0, 0xad, 0x36, 0x76, 0x6a, 0xb5, 0x55, 0xb2, - 0xe2, 0xc5, 0x82, 0x7f, 0x17, 0x46, 0x19, 0x6b, 0x09, 0xff, 0xf3, 0x94, 0xff, 0x93, 0xa7, 0x27, - 0x25, 0xe0, 0xfc, 0x27, 0xbc, 0x0f, 0x01, 0xd0, 0x35, 0xe8, 0xdf, 0xd9, 0x59, 0xa7, 0xab, 0xb9, - 0xbf, 0x32, 0x73, 0x7a, 0x52, 0xea, 0x0f, 0x82, 0xd6, 0xcf, 0x4e, 0x4a, 0x23, 0xcb, 0x1d, 0x8f, - 0x76, 0xdc, 0x24, 0xf5, 0xe8, 0x1a, 0x0c, 0x57, 0x5b, 0x1d, 0x3f, 0xc0, 0xde, 0xc2, 0x40, 0xb8, - 0x8d, 0x1a, 0xac, 0xc8, 0x14, 0x75, 0xe8, 0x3b, 0x30, 0xb0, 0xeb, 0x63, 0x6f, 0x61, 0x90, 0xce, - 0xc8, 0x04, 0x9f, 0x11, 0x52, 0xb4, 0xb7, 0x54, 0x19, 0x21, 0x7b, 0xa5, 0xe3, 0x63, 0xcf, 0xa4, - 0x40, 0xe8, 0x16, 0x0c, 0x32, 0xb6, 0x0e, 0xd1, 0x63, 0x64, 0x42, 0xce, 0x5f, 0x0b, 0xef, 0x7d, - 0x58, 0x19, 0x3d, 0x3d, 0x29, 0x0d, 0x52, 0xf6, 0x9a, 0x83, 0x82, 0x29, 0xb9, 0x42, 0xde, 0x1c, - 0x21, 0xb8, 0x64, 0xe1, 0x1a, 0xdf, 0x81, 0x31, 0x65, 0xf8, 0x68, 0x11, 0x06, 0xc8, 0xff, 0x74, - 0x9b, 0x8f, 0xb3, 0xc6, 0xc8, 0xf9, 0x6d, 0xd2, 0x52, 0xe3, 0x3f, 0x4e, 0x40, 0x81, 0x60, 0x6a, - 0x67, 0x83, 0xc6, 0xaa, 0x5c, 0x37, 0x56, 0xdd, 0x00, 0xd9, 0x36, 0x3f, 0x24, 0xc6, 0x4f, 0x4f, - 0x4a, 0x23, 0x1d, 0x5e, 0x16, 0xf6, 0x0c, 0xd5, 0x60, 0x78, 0xe5, 0x45, 0xdb, 0xf6, 0xb0, 0x4f, - 0x19, 0x3b, 0xb6, 0x54, 0xbc, 0xc5, 0xbe, 0x59, 0xb7, 0xc4, 0x37, 0xeb, 0xd6, 0x8e, 0xf8, 0x66, - 0x55, 0x2e, 0xf2, 0xc3, 0x72, 0x1a, 0x33, 0x94, 0x70, 0x35, 0xfd, 0xd6, 0x9f, 0x96, 0x72, 0xa6, - 0xa0, 0x84, 0xde, 0x85, 0xa1, 0x07, 0xae, 0x77, 0x6c, 0x05, 0x7c, 0x06, 0x66, 0x4f, 0x4f, 0x4a, - 0x85, 0x27, 0xb4, 0x44, 0x59, 0xdc, 0x1c, 0x06, 0x3d, 0x80, 0x49, 0xd3, 0xed, 0x04, 0x78, 0xc7, - 0x15, 0xf3, 0x36, 0x48, 0xb1, 0x2e, 0x9d, 0x9e, 0x94, 0x8a, 0x1e, 0xa9, 0xa9, 0x07, 0x6e, 0x9d, - 0x4f, 0xa0, 0x82, 0x1f, 0xc1, 0x42, 0x2b, 0x30, 0x59, 0xa6, 0xa7, 0x2b, 0xe7, 0x19, 0x9b, 0xad, - 0xd1, 0xca, 0xc5, 0xd3, 0x93, 0xd2, 0x79, 0x8b, 0xd6, 0xd4, 0x3d, 0x5e, 0xa5, 0x92, 0xd1, 0x91, - 0xd0, 0x26, 0x4c, 0x3f, 0xee, 0x1c, 0x60, 0xcf, 0xc1, 0x01, 0xf6, 0x45, 0x8f, 0x86, 0x69, 0x8f, - 0x2e, 0x9f, 0x9e, 0x94, 0x16, 0x9f, 0xca, 0xca, 0x84, 0x3e, 0xc5, 0x51, 0x11, 0x86, 0x29, 0xde, - 0xd1, 0x65, 0x2b, 0xb0, 0x0e, 0x2c, 0x1f, 0xd3, 0x43, 0x63, 0x6c, 0xe9, 0x1c, 0x63, 0xf1, 0xad, - 0x48, 0x6d, 0xe5, 0x2a, 0xe7, 0xf2, 0x05, 0x39, 0xf6, 0x26, 0xaf, 0x52, 0x1a, 0x8a, 0xd2, 0x24, - 0x67, 0xa7, 0xfc, 0x2e, 0x8c, 0xd2, 0xde, 0xd2, 0xb3, 0x53, 0x7e, 0x17, 0xd4, 0x53, 0x45, 0x7e, - 0x21, 0xd6, 0x61, 0x70, 0x97, 0x7c, 0x3d, 0xe9, 0x99, 0x32, 0xb9, 0x74, 0x85, 0xf7, 0x28, 0xba, - 0xfa, 0x6e, 0x91, 0x1f, 0x14, 0x90, 0xee, 0xbb, 0x29, 0xfa, 0xc5, 0x55, 0xbf, 0x95, 0xb4, 0x0e, - 0x7d, 0x05, 0xc0, 0x7b, 0x55, 0x6e, 0xb7, 0x17, 0xc6, 0xe8, 0x20, 0xa7, 0xf5, 0x41, 0x96, 0xdb, - 0xed, 0xca, 0x25, 0x3e, 0xbe, 0x73, 0x72, 0x7c, 0x56, 0xbb, 0xad, 0x50, 0x53, 0x88, 0xa0, 0xfb, - 0x30, 0x4e, 0x8f, 0x1c, 0x31, 0xa3, 0xe3, 0x74, 0x46, 0x2f, 0x9c, 0x9e, 0x94, 0xe6, 0xc9, 0x86, - 0x4b, 0x9a, 0x4f, 0x0d, 0x01, 0xfd, 0x2a, 0xcc, 0x71, 0x72, 0xfb, 0xb6, 0xd3, 0x74, 0x9f, 0xfb, - 0xcb, 0xd8, 0x7f, 0x1a, 0xb8, 0xed, 0x85, 0x09, 0xda, 0xbd, 0x45, 0xbd, 0x7b, 0x3a, 0x4c, 0xe5, - 0x26, 0xef, 0xa9, 0x21, 0x7b, 0xfa, 0x9c, 0x01, 0xd4, 0x9b, 0x0c, 0x42, 0x69, 0x36, 0xb9, 0x19, - 0xb4, 0x06, 0x53, 0xbb, 0x3e, 0xd6, 0xc6, 0x30, 0x49, 0xcf, 0xef, 0x12, 0x99, 0xe1, 0x8e, 0x8f, - 0xeb, 0x69, 0xe3, 0x88, 0xe2, 0x21, 0x13, 0xd0, 0xb2, 0xe7, 0xb6, 0x23, 0x6b, 0x7c, 0x8a, 0x72, - 0xc4, 0x38, 0x3d, 0x29, 0x5d, 0x6a, 0x7a, 0x6e, 0xbb, 0x9e, 0xbe, 0xd0, 0x13, 0xb0, 0xd1, 0x0f, - 0xe0, 0x5c, 0xd5, 0x75, 0x1c, 0xdc, 0x20, 0xe7, 0xe7, 0xb2, 0x6d, 0x1d, 0x3a, 0xae, 0x1f, 0xd8, - 0x8d, 0xb5, 0xe5, 0x85, 0x02, 0x5d, 0x43, 0xd7, 0xc9, 0xe8, 0x1b, 0x12, 0xa2, 0xde, 0x94, 0x20, - 0x75, 0xbb, 0xa9, 0xd0, 0x4e, 0xa1, 0x82, 0xbe, 0x0f, 0x13, 0xbc, 0x2d, 0xec, 0xd1, 0xa5, 0x39, - 0x9d, 0xbd, 0xd0, 0x24, 0x30, 0xfb, 0x10, 0x7b, 0xe2, 0x27, 0x13, 0x6d, 0x74, 0x5a, 0xe8, 0x5b, - 0x18, 0xdb, 0x78, 0x50, 0x36, 0xb1, 0xdf, 0x76, 0x1d, 0x1f, 0x2f, 0x20, 0x3a, 0xa3, 0x97, 0x38, - 0xe9, 0x8d, 0x07, 0xe5, 0x72, 0x27, 0x38, 0xc2, 0x4e, 0x60, 0x37, 0xac, 0x00, 0x0b, 0xa8, 0x4a, - 0x91, 0xac, 0xbc, 0xe3, 0x27, 0x56, 0xdd, 0xe3, 0x25, 0xca, 0x28, 0x54, 0x72, 0xa8, 0x08, 0x23, - 0xb5, 0xda, 0xea, 0xba, 0x7b, 0x68, 0x3b, 0x0b, 0x33, 0x84, 0x19, 0xa6, 0xfc, 0x8d, 0x0e, 0x60, - 0x4e, 0x11, 0xd0, 0xeb, 0xe4, 0x7f, 0x7c, 0x8c, 0x9d, 0x60, 0x61, 0x96, 0xf6, 0xe1, 0x3d, 0xa9, - 0x61, 0xdc, 0x52, 0xe5, 0xf8, 0x67, 0x77, 0x6f, 0x95, 0xc3, 0x9f, 0x35, 0x81, 0x64, 0xce, 0x5a, - 0x09, 0xa5, 0xc6, 0xd7, 0x30, 0x2a, 0xb7, 0x1d, 0x1a, 0x86, 0xfe, 0x72, 0xab, 0x55, 0xe8, 0x23, - 0x7f, 0xd4, 0x6a, 0xab, 0x85, 0x1c, 0x9a, 0x04, 0x08, 0xcf, 0x9a, 0x42, 0x1e, 0x8d, 0xc3, 0x88, - 0x38, 0x0b, 0x0a, 0xfd, 0x14, 0xbe, 0xdd, 0x2e, 0x0c, 0x20, 0x04, 0x93, 0xfa, 0x8a, 0x2c, 0x0c, - 0x1a, 0x2f, 0x60, 0x54, 0x32, 0x12, 0x4d, 0xc1, 0xd8, 0xee, 0x66, 0x6d, 0x7b, 0xa5, 0xba, 0xf6, - 0x60, 0x6d, 0x65, 0xb9, 0xd0, 0x87, 0x2e, 0xc2, 0xf9, 0x9d, 0xda, 0x6a, 0x7d, 0xb9, 0x52, 0x5f, - 0xdf, 0xaa, 0x96, 0xd7, 0xeb, 0xdb, 0xe6, 0xd6, 0xd7, 0xdf, 0xd4, 0x77, 0x76, 0x37, 0x37, 0x57, - 0xd6, 0x0b, 0x39, 0xb4, 0x00, 0xb3, 0xa4, 0xfa, 0xf1, 0x6e, 0x65, 0x45, 0x05, 0x28, 0xe4, 0xd1, - 0x15, 0xb8, 0x98, 0x54, 0x53, 0x5f, 0x5d, 0x29, 0x2f, 0xaf, 0xaf, 0xd4, 0x6a, 0x85, 0x7e, 0xe3, - 0xd7, 0xf3, 0xb1, 0xc3, 0x10, 0x2d, 0xc1, 0x58, 0x8d, 0xa9, 0x5b, 0x74, 0x81, 0x30, 0xd1, 0xb7, - 0x70, 0x7a, 0x52, 0x1a, 0xe7, 0x5a, 0x18, 0x9b, 0x7b, 0x15, 0x88, 0x7c, 0xdf, 0xb6, 0xc9, 0x2c, - 0x37, 0xdc, 0x96, 0xfa, 0x7d, 0x6b, 0xf3, 0x32, 0x53, 0xd6, 0xa2, 0x25, 0xe5, 0x4b, 0xc8, 0xe4, - 0x60, 0x2a, 0x6b, 0x89, 0x2f, 0xa1, 0x7a, 0x2a, 0xca, 0x6f, 0xe2, 0x52, 0xc8, 0x4a, 0xfe, 0x01, - 0xa3, 0x38, 0x09, 0xa7, 0xb0, 0x84, 0x43, 0xef, 0x08, 0x09, 0x81, 0xc9, 0xad, 0xf4, 0x98, 0x8c, - 0x48, 0x5c, 0x5c, 0x38, 0x30, 0x3a, 0x29, 0x47, 0x12, 0xfa, 0x34, 0x3a, 0x57, 0x9c, 0x19, 0x94, - 0x58, 0xe4, 0xe4, 0x31, 0x23, 0xa0, 0xa8, 0x04, 0x83, 0x6c, 0xad, 0x32, 0x7e, 0x50, 0x99, 0xa4, - 0x45, 0x0a, 0x4c, 0x56, 0x6e, 0xfc, 0xd5, 0x7e, 0xf5, 0x78, 0x26, 0x32, 0x88, 0xc2, 0x6f, 0x2a, - 0x83, 0x50, 0x3e, 0xd3, 0x52, 0x22, 0x6e, 0xd4, 0xb0, 0xef, 0x53, 0xe9, 0x8d, 0x53, 0xa4, 0xe2, - 0x86, 0xcf, 0x0a, 0x89, 0x42, 0x12, 0x02, 0x10, 0x91, 0x98, 0xc9, 0x1e, 0x54, 0x24, 0xee, 0x0f, - 0x45, 0x62, 0x2e, 0x9d, 0x30, 0x91, 0x38, 0x04, 0x21, 0x73, 0xce, 0x3f, 0x8f, 0xb4, 0x0f, 0x03, - 0xe1, 0x9c, 0xf3, 0x4f, 0x2a, 0x9f, 0x73, 0x05, 0x08, 0x7d, 0x02, 0x50, 0xde, 0xaf, 0x51, 0xc9, - 0xd2, 0xdc, 0xe4, 0x22, 0x02, 0xdd, 0xcc, 0xd6, 0x73, 0x9f, 0x1d, 0xa2, 0x96, 0xa7, 0xca, 0xce, - 0x0a, 0x34, 0xaa, 0xc0, 0x44, 0xf9, 0xc7, 0x1d, 0x0f, 0xaf, 0x35, 0xc9, 0x79, 0x10, 0x30, 0x25, - 0x61, 0xb4, 0xb2, 0x78, 0x7a, 0x52, 0x5a, 0xb0, 0x48, 0x45, 0xdd, 0xe6, 0x35, 0x0a, 0x01, 0x1d, - 0x05, 0x6d, 0xc1, 0xf4, 0xc3, 0xea, 0x36, 0x5f, 0x85, 0xe5, 0x46, 0xc3, 0xed, 0x38, 0x01, 0x97, - 0x0b, 0xae, 0x9c, 0x9e, 0x94, 0x2e, 0x1e, 0x36, 0xda, 0x75, 0xb1, 0x62, 0x2d, 0x56, 0xad, 0x0a, - 0x06, 0x31, 0x5c, 0xa3, 0x05, 0x93, 0x0f, 0x71, 0x40, 0x56, 0x9d, 0x10, 0xf2, 0xb2, 0xe7, 0xe4, - 0x33, 0x18, 0xdb, 0xb7, 0x83, 0xa3, 0x1a, 0x6e, 0x78, 0x38, 0x10, 0x2a, 0x28, 0xe5, 0xc0, 0x73, - 0x3b, 0x38, 0xaa, 0xfb, 0xac, 0x5c, 0x3d, 0xce, 0x14, 0x70, 0x63, 0x05, 0xa6, 0x78, 0x6b, 0x52, - 0xa6, 0x5c, 0xd2, 0x09, 0xe6, 0x28, 0x41, 0x3a, 0x0b, 0x2a, 0x41, 0x9d, 0xcc, 0x3f, 0xcd, 0xc3, - 0x5c, 0xf5, 0xc8, 0x72, 0x0e, 0xf1, 0xb6, 0xe5, 0xfb, 0xcf, 0x5d, 0xaf, 0xa9, 0x74, 0x9e, 0x0a, - 0xd4, 0xb1, 0xce, 0x53, 0x09, 0x7a, 0x09, 0xc6, 0xb6, 0x5a, 0x4d, 0x81, 0xc3, 0x85, 0x7d, 0xda, - 0x96, 0xdb, 0x6a, 0xd6, 0xdb, 0x82, 0x96, 0x0a, 0x44, 0x70, 0x36, 0xf1, 0x73, 0x89, 0xd3, 0x1f, - 0xe2, 0x38, 0xf8, 0xb9, 0x82, 0xa3, 0x00, 0xa1, 0x15, 0x98, 0xae, 0xe1, 0x86, 0xeb, 0x34, 0x1f, - 0x58, 0x8d, 0xc0, 0xf5, 0x76, 0xdc, 0xa7, 0xd8, 0xe1, 0xeb, 0x8b, 0xca, 0x43, 0x3e, 0xad, 0xac, - 0x3f, 0xa1, 0xb5, 0xf5, 0x80, 0x54, 0x9b, 0x71, 0x0c, 0xb4, 0x05, 0x23, 0xfb, 0xdc, 0x5a, 0xc1, - 0x35, 0x84, 0x6b, 0xb7, 0xa4, 0xf9, 0xa2, 0xea, 0x61, 0xba, 0x28, 0xac, 0x96, 0xd4, 0x71, 0xe4, - 0xe7, 0x85, 0x9e, 0x43, 0x02, 0xd2, 0x94, 0x44, 0x8c, 0x5d, 0x98, 0xd8, 0x6e, 0x75, 0x0e, 0x6d, - 0x87, 0x9c, 0x18, 0x35, 0xfc, 0x23, 0xb4, 0x0c, 0x10, 0x16, 0x70, 0xf3, 0xc4, 0x0c, 0xd7, 0x2b, - 0xc2, 0x8a, 0xbd, 0x7b, 0x7c, 0x23, 0xd1, 0x12, 0x2a, 0x08, 0x9a, 0x0a, 0x9e, 0xf1, 0x3f, 0xfb, - 0x01, 0xf1, 0x09, 0xa0, 0x5f, 0x8e, 0x1a, 0x0e, 0xc8, 0xa1, 0x7e, 0x0e, 0xf2, 0xd2, 0x8a, 0x30, - 0x74, 0x7a, 0x52, 0xca, 0xdb, 0x4d, 0x33, 0xbf, 0xb6, 0x8c, 0xde, 0x87, 0x41, 0x0a, 0x46, 0xf9, - 0x3f, 0x29, 0xdb, 0x53, 0x29, 0xb0, 0x93, 0x83, 0x7e, 0xd1, 0x4c, 0x06, 0x8c, 0x3e, 0x80, 0xd1, - 0x65, 0xdc, 0xc2, 0x87, 0x56, 0xe0, 0x8a, 0xdd, 0xcd, 0xf4, 0x72, 0x51, 0xa8, 0xac, 0xb9, 0x10, - 0x92, 0x68, 0x01, 0x26, 0xb6, 0x7c, 0xd7, 0x51, 0xb5, 0x00, 0x8f, 0x96, 0xa8, 0x5a, 0x00, 0x83, - 0x41, 0xbf, 0x93, 0x83, 0xb1, 0xb2, 0xe3, 0x70, 0x7d, 0xd7, 0xe7, 0x5c, 0x9f, 0xbb, 0x25, 0xad, - 0x40, 0xeb, 0xd6, 0x01, 0x6e, 0xed, 0x59, 0xad, 0x0e, 0xf6, 0x2b, 0xdf, 0x12, 0xc1, 0xec, 0x3f, - 0x9d, 0x94, 0x3e, 0x3d, 0x83, 0x06, 0x1b, 0xda, 0x93, 0x76, 0x3c, 0xcb, 0x0e, 0xfc, 0xd3, 0x93, - 0xd2, 0x9c, 0x15, 0x36, 0xa8, 0xee, 0x1b, 0xa5, 0x1f, 0xe1, 0xc1, 0x3e, 0xd4, 0xed, 0x60, 0x47, - 0xc7, 0x30, 0x55, 0xf6, 0xfd, 0xce, 0x31, 0xae, 0x05, 0x96, 0x17, 0x10, 0xb5, 0x89, 0x9e, 0x0f, - 0xd9, 0x3a, 0xd5, 0xdb, 0x3f, 0x39, 0x29, 0xe5, 0x88, 0x2c, 0x68, 0x51, 0x54, 0x22, 0x4b, 0x78, - 0x41, 0x3d, 0xb0, 0xd5, 0x6f, 0x13, 0xd5, 0xae, 0xa2, 0xb4, 0x8d, 0xab, 0xf2, 0x33, 0xbe, 0xb6, - 0x9c, 0x36, 0xe3, 0x46, 0x15, 0x16, 0x1f, 0xe2, 0xc0, 0xc4, 0x3e, 0x0e, 0xc4, 0x1e, 0xa1, 0x2b, - 0x3c, 0xb4, 0x39, 0x0d, 0xd3, 0xdf, 0x12, 0x99, 0x4e, 0x3f, 0xdb, 0x17, 0xa2, 0xc6, 0xf8, 0x4b, - 0x39, 0x28, 0x55, 0x3d, 0xcc, 0xc4, 0xa8, 0x14, 0x42, 0xd9, 0x67, 0xd7, 0x22, 0x0c, 0xec, 0xbc, - 0x6c, 0x0b, 0x65, 0x94, 0xd6, 0x92, 0x49, 0x31, 0x69, 0x69, 0x8f, 0x9a, 0xbd, 0xf1, 0x04, 0xe6, - 0x4c, 0xec, 0xe0, 0xe7, 0xd6, 0x41, 0x0b, 0x6b, 0xca, 0x71, 0x09, 0x06, 0xd9, 0x46, 0x8f, 0x0d, - 0x81, 0x95, 0x9f, 0xcd, 0xd0, 0x60, 0xfc, 0x83, 0x3c, 0x14, 0xd8, 0x70, 0x2b, 0x6e, 0xd0, 0xdb, - 0xf8, 0xf8, 0x08, 0xf2, 0x5d, 0x6c, 0x13, 0xd7, 0x43, 0x6e, 0xf7, 0x87, 0x62, 0x0b, 0xed, 0x2a, - 0xf9, 0xa4, 0x8a, 0x4a, 0x32, 0x20, 0xb6, 0xe8, 0x98, 0x49, 0x2d, 0x66, 0x60, 0x40, 0xbf, 0x99, - 0x83, 0x21, 0xb6, 0x8c, 0xb3, 0x37, 0xca, 0xfe, 0x9b, 0xd9, 0x28, 0x85, 0x80, 0xfe, 0xa5, 0x6e, - 0x5b, 0x56, 0x67, 0xfc, 0xe3, 0x3c, 0x4c, 0x2b, 0xbc, 0xe2, 0xb2, 0xf3, 0x3b, 0x4c, 0xea, 0x52, - 0x18, 0x46, 0x8d, 0x94, 0x44, 0xea, 0xaa, 0x87, 0x06, 0x08, 0xca, 0xb9, 0x77, 0x60, 0x84, 0x0c, - 0x29, 0x6a, 0xcf, 0xa4, 0x1f, 0x74, 0x06, 0x2a, 0xaa, 0x7b, 0xe6, 0xde, 0x6d, 0x18, 0xa1, 0x7f, - 0x92, 0x19, 0x19, 0x48, 0x9f, 0x11, 0x09, 0x84, 0x6c, 0x80, 0x47, 0xae, 0xed, 0x6c, 0xe0, 0xe0, - 0xc8, 0x6d, 0x72, 0xd1, 0x62, 0x8d, 0x1c, 0xbb, 0xff, 0x8f, 0x6b, 0x3b, 0xf5, 0x63, 0x5a, 0x7c, - 0x56, 0x7b, 0x59, 0x48, 0xd0, 0x54, 0x88, 0x1b, 0x77, 0xa0, 0x40, 0x4e, 0xc8, 0xde, 0x97, 0x96, - 0x31, 0x0b, 0xe8, 0x21, 0x0e, 0x2a, 0xae, 0xf6, 0xed, 0x36, 0x26, 0x60, 0x6c, 0xdb, 0x76, 0x0e, - 0xc5, 0xcf, 0x7f, 0xd2, 0x0f, 0xe3, 0xec, 0x37, 0x9f, 0x81, 0x88, 0x84, 0x95, 0xeb, 0x45, 0xc2, - 0xfa, 0x08, 0x26, 0x88, 0x88, 0x82, 0xbd, 0x3d, 0xec, 0x11, 0xc9, 0x8e, 0xcf, 0x07, 0xd5, 0xc4, - 0x7c, 0x5a, 0x51, 0x7f, 0xc6, 0x6a, 0x4c, 0x1d, 0x10, 0xad, 0xc3, 0x24, 0x2b, 0x78, 0x80, 0xad, - 0xa0, 0x13, 0x1a, 0x93, 0xa6, 0xb8, 0x32, 0x26, 0x8a, 0xd9, 0xf1, 0xc9, 0x69, 0x3d, 0xe1, 0x85, - 0x66, 0x04, 0x17, 0xdd, 0x87, 0xa9, 0x6d, 0xcf, 0x7d, 0xf1, 0x52, 0x91, 0x29, 0xd9, 0x17, 0x64, - 0xee, 0xf4, 0xa4, 0x34, 0xdd, 0x26, 0x55, 0x75, 0x55, 0xb2, 0x8c, 0x42, 0x93, 0x35, 0xb5, 0xe6, - 0x57, 0x5c, 0xcf, 0x76, 0x0e, 0xe9, 0x6c, 0x8e, 0xb0, 0x35, 0x65, 0xfb, 0xf5, 0x03, 0x5a, 0x68, - 0xca, 0xea, 0x88, 0x35, 0x77, 0xb8, 0xbb, 0x35, 0xf7, 0x0e, 0xc0, 0xba, 0x6b, 0x35, 0xcb, 0xad, - 0x56, 0xb5, 0xec, 0x53, 0x4b, 0x0e, 0x97, 0x99, 0x5a, 0xae, 0xd5, 0xac, 0x5b, 0xad, 0x56, 0xbd, - 0x61, 0xf9, 0xa6, 0x02, 0xf3, 0x68, 0x60, 0x64, 0xa8, 0x30, 0x6c, 0x4e, 0xad, 0xdb, 0x0d, 0xec, - 0xf8, 0x78, 0xdf, 0xf2, 0x1c, 0xdb, 0x39, 0xf4, 0x8d, 0x3f, 0x1b, 0x83, 0x11, 0x39, 0xe4, 0x5b, - 0xaa, 0x36, 0xc7, 0x25, 0x31, 0x7a, 0x42, 0x85, 0xd6, 0x26, 0x53, 0x81, 0x40, 0xe7, 0xa9, 0x7e, - 0xc7, 0x65, 0xc0, 0x61, 0xb2, 0xba, 0xad, 0x76, 0xdb, 0x24, 0x65, 0xe4, 0x4b, 0xb0, 0x5c, 0xa1, - 0xfc, 0x1f, 0x61, 0x5f, 0x82, 0xe6, 0x81, 0x99, 0x5f, 0xae, 0x90, 0x55, 0xb6, 0xb5, 0xb6, 0x5c, - 0xa5, 0xac, 0x1c, 0x61, 0xab, 0xcc, 0xb5, 0x9b, 0x0d, 0x93, 0x96, 0x92, 0xda, 0x5a, 0x79, 0x63, - 0x9d, 0xb3, 0x8b, 0xd6, 0xfa, 0xd6, 0x71, 0xcb, 0xa4, 0xa5, 0x44, 0x33, 0x61, 0x86, 0x83, 0xaa, - 0xeb, 0x04, 0x9e, 0xdb, 0xf2, 0xa9, 0x00, 0x3d, 0xc2, 0xa6, 0x93, 0x5b, 0x1c, 0x1a, 0xbc, 0xca, - 0x8c, 0x80, 0xa2, 0x7d, 0x98, 0x2f, 0x37, 0x9f, 0x59, 0x4e, 0x03, 0x37, 0x59, 0xcd, 0xbe, 0xeb, - 0x3d, 0x7d, 0xd2, 0x72, 0x9f, 0xfb, 0x94, 0xdf, 0x23, 0xdc, 0x40, 0xc7, 0x41, 0x84, 0x01, 0xe3, - 0xb9, 0x00, 0x32, 0xd3, 0xb0, 0xc9, 0x29, 0x59, 0x6d, 0xb9, 0x9d, 0x26, 0x9f, 0x05, 0x7a, 0x4a, - 0x36, 0x48, 0x81, 0xc9, 0xca, 0x09, 0x97, 0x56, 0x6b, 0x1b, 0xd4, 0x1c, 0xc6, 0xb9, 0x74, 0xe4, - 0x1f, 0x9b, 0xa4, 0x0c, 0x5d, 0x83, 0x61, 0xa1, 0x64, 0x31, 0x7b, 0x3a, 0xb5, 0x12, 0x0b, 0xe5, - 0x4a, 0xd4, 0x91, 0x2d, 0x61, 0xe2, 0x86, 0xfb, 0x0c, 0x7b, 0x2f, 0xab, 0x6e, 0x13, 0x0b, 0xe3, - 0x0d, 0x37, 0x4e, 0xb0, 0x8a, 0x7a, 0x83, 0xd4, 0x98, 0x3a, 0x20, 0x69, 0x80, 0xc9, 0x69, 0xfe, - 0xc2, 0x54, 0xd8, 0x00, 0x93, 0xe3, 0x7c, 0x53, 0xd4, 0xa1, 0x65, 0x98, 0x2e, 0x77, 0x02, 0xf7, - 0xd8, 0x0a, 0xec, 0xc6, 0x6e, 0xfb, 0xd0, 0xb3, 0x48, 0x23, 0x05, 0x8a, 0x40, 0x95, 0x4e, 0x4b, - 0x54, 0xd6, 0x3b, 0xbc, 0xd6, 0x8c, 0x23, 0xa0, 0x0f, 0x61, 0x7c, 0xcd, 0x67, 0x06, 0x3a, 0xcb, - 0xc7, 0x4d, 0x6a, 0x65, 0xe1, 0xbd, 0xb4, 0xfd, 0x3a, 0x35, 0xd7, 0xd5, 0x89, 0x9a, 0xda, 0x34, - 0x35, 0x38, 0x64, 0xc0, 0x50, 0xd9, 0xf7, 0x6d, 0x3f, 0xa0, 0xc6, 0x93, 0x91, 0x0a, 0x9c, 0x9e, - 0x94, 0x86, 0x2c, 0x5a, 0x62, 0xf2, 0x1a, 0xb4, 0x0f, 0x63, 0xcb, 0x98, 0xe8, 0x2d, 0x3b, 0x5e, - 0xc7, 0x0f, 0xa8, 0x29, 0x64, 0x6c, 0xe9, 0x3c, 0xdf, 0xd8, 0x4a, 0x0d, 0x5f, 0xcb, 0x4c, 0x23, - 0x69, 0xd2, 0xf2, 0x7a, 0x40, 0x2a, 0x54, 0xc9, 0x4a, 0x81, 0x27, 0x4a, 0x19, 0xc7, 0x59, 0xb5, - 0x9b, 0x64, 0xab, 0xce, 0xd2, 0x3e, 0x50, 0xa5, 0x8c, 0x9f, 0x0d, 0xf5, 0x23, 0x5a, 0xa3, 0x2a, - 0x65, 0x1a, 0x0a, 0x6a, 0xc4, 0x6c, 0xbe, 0x73, 0x9a, 0x5d, 0x4f, 0xaf, 0x14, 0x5d, 0x3c, 0xa3, - 0x45, 0xf8, 0x33, 0x18, 0xab, 0x76, 0xfc, 0xc0, 0x3d, 0xde, 0x39, 0xc2, 0xc7, 0x78, 0xe1, 0x5c, - 0xa8, 0x7a, 0x36, 0x68, 0x71, 0x3d, 0x20, 0xe5, 0xea, 0x30, 0x15, 0x70, 0xf4, 0x15, 0x20, 0xa1, - 0x43, 0x3e, 0x24, 0xeb, 0xc3, 0x21, 0x6b, 0x79, 0x61, 0x9e, 0x8e, 0x95, 0x2a, 0x8e, 0x42, 0xf5, - 0xac, 0x1f, 0xca, 0x6a, 0xd5, 0x6a, 0x17, 0x47, 0x26, 0x1d, 0x62, 0x5d, 0x7c, 0xe8, 0x59, 0xed, - 0xa3, 0x85, 0x85, 0x50, 0x13, 0xe4, 0x83, 0x3a, 0x24, 0xe5, 0x9a, 0x44, 0x1b, 0x82, 0xa3, 0x1a, - 0x00, 0xfb, 0xb9, 0x4e, 0x26, 0xfe, 0x3c, 0xe5, 0xd7, 0x82, 0xc6, 0x2f, 0x52, 0x21, 0x78, 0x75, - 0x9e, 0xca, 0xc9, 0x8c, 0x6c, 0xcb, 0xd6, 0x66, 0x53, 0x21, 0x83, 0x9e, 0x42, 0x81, 0xfd, 0xda, - 0x70, 0x1d, 0x3b, 0x60, 0x47, 0x6f, 0x51, 0x33, 0xc8, 0x45, 0xab, 0x45, 0x03, 0xd4, 0x10, 0xca, - 0x1b, 0x38, 0x96, 0xb5, 0x4a, 0x33, 0x31, 0xc2, 0x68, 0x1b, 0xc6, 0xb6, 0x3d, 0xb7, 0xd9, 0x69, - 0x04, 0x54, 0xa8, 0xbc, 0x40, 0x95, 0x19, 0xc4, 0xdb, 0x51, 0x6a, 0x18, 0x4f, 0xda, 0xac, 0xa0, - 0x4e, 0xbe, 0xcb, 0x2a, 0x4f, 0x14, 0x40, 0x54, 0x81, 0xa1, 0x6d, 0xb7, 0x65, 0x37, 0x5e, 0x2e, - 0x2c, 0xd2, 0x4e, 0xcf, 0x0a, 0x62, 0xb4, 0x50, 0x74, 0x95, 0x6a, 0x30, 0x6d, 0x5a, 0xa4, 0x8a, - 0x42, 0x0c, 0xe8, 0xd1, 0xc0, 0xc8, 0x58, 0x61, 0x9c, 0xdd, 0x87, 0x3d, 0x1a, 0x18, 0x99, 0x28, - 0x4c, 0x1a, 0xbf, 0x9b, 0x03, 0x14, 0xdf, 0x21, 0xe8, 0x36, 0x0c, 0x63, 0x87, 0x08, 0xb1, 0x4d, - 0x7e, 0xd2, 0xd3, 0xef, 0x1a, 0x2f, 0x52, 0x08, 0x0b, 0x28, 0xf4, 0x15, 0xcc, 0xb0, 0x0d, 0x25, - 0xf6, 0x72, 0xcb, 0x3e, 0xb6, 0x03, 0x7a, 0xfa, 0x0f, 0xb2, 0x35, 0x94, 0x50, 0xad, 0x1a, 0x1f, - 0x78, 0x35, 0xdd, 0xf9, 0xeb, 0xa4, 0xd2, 0xe8, 0xc0, 0x5c, 0xe2, 0xde, 0x40, 0x1b, 0x30, 0x77, - 0xec, 0x3a, 0xc1, 0x51, 0xeb, 0xa5, 0xd8, 0x1a, 0xbc, 0xb5, 0x1c, 0x6d, 0x8d, 0x2e, 0x87, 0x44, - 0x00, 0x73, 0x86, 0x17, 0x73, 0x8a, 0xb4, 0x9d, 0x47, 0x03, 0x23, 0xf9, 0x42, 0xbf, 0x1c, 0x89, - 0x61, 0xc2, 0x74, 0x6c, 0x89, 0xa1, 0xcf, 0x61, 0xbc, 0x41, 0x45, 0x48, 0xad, 0x25, 0xb6, 0xc1, - 0x94, 0x72, 0x75, 0xee, 0x58, 0x39, 0x1b, 0xca, 0xdf, 0xcb, 0xc1, 0x7c, 0xca, 0xe2, 0x3a, 0x3b, - 0xab, 0xbf, 0x81, 0x73, 0xc7, 0xd6, 0x8b, 0xba, 0x47, 0xc5, 0xb9, 0xba, 0x67, 0x39, 0x11, 0x6e, - 0xbf, 0x75, 0x7a, 0x52, 0xba, 0x9c, 0x0c, 0xa1, 0xde, 0xf9, 0x1f, 0x5b, 0x2f, 0x4c, 0x0a, 0x60, - 0x92, 0x7a, 0xd6, 0xcf, 0x2f, 0x61, 0x42, 0x5b, 0x4e, 0x67, 0xee, 0x9c, 0x71, 0x17, 0xa6, 0x99, - 0xf0, 0xd8, 0xb3, 0xd1, 0xc8, 0xd8, 0x06, 0xa8, 0xe1, 0x63, 0xab, 0x7d, 0xe4, 0x12, 0x31, 0xa3, - 0xa2, 0xfe, 0xe2, 0x46, 0x07, 0xc4, 0x8d, 0x00, 0xb2, 0x62, 0xef, 0x9e, 0xb0, 0xf5, 0x09, 0x48, - 0x53, 0xc1, 0x32, 0xfe, 0x28, 0x0f, 0xa8, 0xdc, 0x69, 0xda, 0x41, 0x2d, 0xf0, 0xb0, 0x75, 0x2c, - 0xba, 0xf1, 0x31, 0x8c, 0x33, 0x3d, 0x80, 0x15, 0xd3, 0xee, 0x8c, 0x2d, 0xcd, 0xf0, 0x7d, 0xa4, - 0x56, 0xad, 0xf6, 0x99, 0x1a, 0x28, 0x41, 0x35, 0x31, 0xd3, 0x6d, 0x29, 0x6a, 0x5e, 0x43, 0x55, - 0xab, 0x08, 0xaa, 0xfa, 0x1b, 0xdd, 0x87, 0xc9, 0xaa, 0x7b, 0xdc, 0x26, 0x3c, 0xe1, 0xc8, 0xfd, - 0x5c, 0x1d, 0xe2, 0xed, 0x6a, 0x95, 0xab, 0x7d, 0x66, 0x04, 0x1c, 0x6d, 0xc2, 0xcc, 0x83, 0x56, - 0xc7, 0x3f, 0x2a, 0x3b, 0xcd, 0x6a, 0xcb, 0xf5, 0x05, 0x95, 0x01, 0xae, 0xb7, 0x73, 0xf1, 0x35, - 0x0e, 0xb1, 0xda, 0x67, 0x26, 0x21, 0xa2, 0x6b, 0x30, 0xb8, 0xf2, 0x0c, 0x3b, 0x81, 0xbc, 0x57, - 0xe6, 0x8e, 0x29, 0x5b, 0x0e, 0xde, 0x7a, 0xb2, 0xda, 0x67, 0xb2, 0xda, 0xca, 0x28, 0x0c, 0x0b, - 0xd1, 0xfd, 0x36, 0x91, 0x00, 0x24, 0x3b, 0x6b, 0x81, 0x15, 0x74, 0x7c, 0x54, 0x84, 0x91, 0xdd, - 0x36, 0x91, 0x28, 0x85, 0x5e, 0x6e, 0xca, 0xdf, 0xc6, 0xbb, 0x3a, 0xa7, 0xd1, 0xa2, 0x6a, 0xab, - 0x65, 0xc0, 0x61, 0x81, 0xb1, 0xaa, 0x33, 0x37, 0x1b, 0x5a, 0x6b, 0x37, 0x1f, 0x69, 0xb7, 0x10, - 0xe5, 0xb5, 0x31, 0x97, 0xc8, 0x3c, 0xe3, 0x6b, 0xb8, 0xb4, 0xdb, 0xf6, 0xb1, 0x17, 0x94, 0xdb, - 0xed, 0x96, 0xdd, 0x60, 0xf7, 0x1a, 0x54, 0xc4, 0x17, 0x8b, 0xe5, 0x43, 0x18, 0x62, 0x05, 0x7c, - 0x99, 0x88, 0x35, 0x58, 0x6e, 0xb7, 0xb9, 0x62, 0x71, 0x8f, 0xc9, 0x22, 0x4c, 0x55, 0x30, 0x39, - 0xb4, 0xf1, 0x5b, 0x39, 0xb8, 0xc4, 0x76, 0x40, 0x2a, 0xe9, 0xef, 0xc0, 0x28, 0xf5, 0x0b, 0x69, - 0x5b, 0x0d, 0x4d, 0xf7, 0x74, 0x44, 0xa1, 0x19, 0xd6, 0x2b, 0x1e, 0x37, 0xf9, 0x74, 0x8f, 0x1b, - 0xb1, 0xc1, 0xfa, 0x13, 0x37, 0xd8, 0x57, 0x60, 0xf0, 0x1e, 0xb5, 0x5a, 0xb1, 0x4e, 0xf9, 0xaf, - 0xd2, 0x2b, 0xe3, 0xbf, 0xe4, 0x61, 0xfe, 0x21, 0x76, 0xb0, 0x67, 0xd1, 0x71, 0x6a, 0x66, 0x16, - 0xf5, 0x66, 0x3f, 0x97, 0x79, 0xb3, 0x2f, 0x6d, 0x08, 0xf9, 0x14, 0x1b, 0xc2, 0x79, 0xe8, 0xdf, - 0x35, 0xd7, 0xf8, 0xb0, 0xa8, 0x74, 0xdc, 0xf1, 0x6c, 0x93, 0x94, 0xa1, 0xb5, 0xd0, 0x2b, 0x60, - 0xa0, 0xab, 0x05, 0x6b, 0x86, 0xdf, 0x92, 0x0e, 0x73, 0xaf, 0x00, 0xdd, 0x17, 0x60, 0x53, 0x31, - 0x54, 0x90, 0xe3, 0xe6, 0x26, 0xdf, 0x53, 0x29, 0x03, 0xe4, 0x36, 0x87, 0x15, 0x27, 0xf0, 0x5e, - 0xb2, 0x25, 0xc0, 0x4c, 0x0f, 0xc2, 0xe0, 0x50, 0xfc, 0x0a, 0xc6, 0x14, 0x10, 0x54, 0x80, 0xfe, - 0xa7, 0xdc, 0x23, 0x62, 0xd4, 0x24, 0x7f, 0xa2, 0x77, 0x61, 0xf0, 0x99, 0xd5, 0xea, 0x60, 0x7e, - 0x8c, 0x9c, 0x0b, 0x0d, 0x23, 0xb5, 0x80, 0x7c, 0x1a, 0x98, 0x65, 0xc4, 0x64, 0x40, 0x9f, 0xe4, - 0x3f, 0xca, 0x19, 0x9f, 0xc2, 0x42, 0xbc, 0x37, 0x5c, 0x8f, 0xee, 0x66, 0x5a, 0x32, 0x96, 0x61, - 0xf6, 0x21, 0x0e, 0xe8, 0xc2, 0xa5, 0x9b, 0x48, 0x71, 0xd8, 0x88, 0xec, 0xb3, 0x8c, 0x1b, 0x14, - 0xa3, 0x06, 0x73, 0x11, 0x2a, 0xbc, 0xfd, 0x4f, 0x60, 0x98, 0x17, 0xc9, 0x13, 0x95, 0xbb, 0xb0, - 0xe1, 0x03, 0x5e, 0xb1, 0xb7, 0xc4, 0xd6, 0x2d, 0xa7, 0x6c, 0x0a, 0x04, 0xe3, 0x08, 0xce, 0x91, - 0xcf, 0x6c, 0x48, 0x55, 0x2e, 0xc7, 0x0b, 0x30, 0xda, 0x26, 0x82, 0x82, 0x6f, 0xff, 0x98, 0x2d, - 0xa3, 0x41, 0x73, 0x84, 0x14, 0xd4, 0xec, 0x1f, 0x63, 0x74, 0x11, 0x80, 0x56, 0xd2, 0x61, 0xf2, - 0x53, 0x80, 0x82, 0x33, 0x5b, 0x1a, 0x02, 0xea, 0x19, 0xc3, 0xd6, 0x8d, 0x49, 0xff, 0x36, 0x3c, - 0x98, 0x8f, 0xb5, 0xc4, 0x07, 0x70, 0x1b, 0x46, 0x78, 0xc7, 0xfc, 0x88, 0x95, 0x5b, 0x1d, 0x81, - 0x29, 0x81, 0xd0, 0x75, 0x98, 0x72, 0xf0, 0x8b, 0xa0, 0x1e, 0xeb, 0xc3, 0x04, 0x29, 0xde, 0x16, - 0xfd, 0x30, 0x7e, 0x89, 0x5a, 0x36, 0x6b, 0x8e, 0xfb, 0xfc, 0x49, 0xcb, 0x7a, 0x8a, 0x63, 0x0d, - 0x7f, 0x0e, 0x23, 0xb5, 0xee, 0x0d, 0xb3, 0xed, 0x23, 0x1a, 0x37, 0x25, 0x8a, 0xd1, 0x82, 0x22, - 0x19, 0x12, 0x51, 0x7f, 0xd7, 0x9a, 0xdb, 0x3f, 0x6f, 0x06, 0x3e, 0x83, 0x0b, 0x89, 0xad, 0xfd, - 0xbc, 0x99, 0xf8, 0xe7, 0x79, 0x98, 0x67, 0x1f, 0x93, 0xf8, 0x0a, 0xee, 0xfd, 0xa8, 0xf9, 0x85, - 0xdc, 0xff, 0xdd, 0x49, 0xb8, 0xff, 0xa3, 0x28, 0xea, 0xfd, 0x9f, 0x76, 0xeb, 0xf7, 0x51, 0xf2, - 0xad, 0x1f, 0x55, 0x8b, 0xf5, 0x5b, 0xbf, 0xe8, 0x5d, 0xdf, 0x4a, 0xfa, 0x5d, 0x1f, 0xbd, 0xf9, - 0x48, 0xb8, 0xeb, 0x4b, 0xb8, 0xe1, 0x63, 0xc2, 0xaf, 0xb1, 0x07, 0x0b, 0x71, 0x16, 0xbf, 0x81, - 0xed, 0xfd, 0x87, 0x39, 0xb8, 0xc8, 0x05, 0x81, 0xc8, 0x26, 0x38, 0xfb, 0x0c, 0x7e, 0x00, 0xe3, - 0x1c, 0x77, 0x27, 0x5c, 0x2c, 0x95, 0xe9, 0xd3, 0x93, 0xd2, 0x84, 0x38, 0xb0, 0xd8, 0xa9, 0xa7, - 0x81, 0xa1, 0x0f, 0x14, 0x4b, 0x2b, 0xb3, 0xde, 0x13, 0xfd, 0x60, 0x94, 0x99, 0x64, 0x53, 0xed, - 0xad, 0xc6, 0xb7, 0x70, 0x29, 0xad, 0xe3, 0x6f, 0x80, 0x2f, 0xff, 0x22, 0x07, 0x17, 0x38, 0x79, - 0x6d, 0x3b, 0xbd, 0xd2, 0xc9, 0x7c, 0x06, 0x57, 0xba, 0x47, 0x30, 0x46, 0x1a, 0x14, 0xfd, 0xee, - 0xe7, 0x9f, 0x1f, 0x2e, 0x5d, 0x87, 0x35, 0xcb, 0x56, 0x60, 0x71, 0x07, 0x07, 0xeb, 0xb8, 0x55, - 0x17, 0xfd, 0x57, 0x91, 0x8d, 0xef, 0xc1, 0x62, 0xf2, 0x10, 0xde, 0x00, 0x7f, 0x1e, 0x41, 0x31, - 0xe1, 0xe0, 0x7c, 0xb5, 0xef, 0xd6, 0x37, 0x70, 0x21, 0x91, 0xd6, 0x1b, 0xe8, 0xe6, 0x2a, 0xf9, - 0x2a, 0x07, 0x6f, 0x60, 0x0a, 0x8d, 0x7d, 0x38, 0x9f, 0x40, 0xe9, 0x0d, 0x74, 0xf1, 0x21, 0xcc, - 0x4b, 0x69, 0xf4, 0xb5, 0x7a, 0xb8, 0x01, 0x17, 0x19, 0xa1, 0x37, 0x33, 0x2b, 0x8f, 0xe1, 0x02, - 0x27, 0xf7, 0x06, 0xb8, 0xb7, 0x0a, 0x8b, 0xa1, 0xd2, 0x99, 0x20, 0x4b, 0xf4, 0x7c, 0xc8, 0x18, - 0xeb, 0x70, 0x39, 0xa4, 0x94, 0xf2, 0x61, 0xed, 0x9d, 0x1a, 0x13, 0x99, 0xc2, 0x59, 0x7a, 0x23, - 0x33, 0xba, 0x0f, 0xe7, 0x34, 0xa2, 0x6f, 0x4c, 0x9c, 0x58, 0x83, 0x19, 0x46, 0x58, 0x17, 0x2f, - 0x97, 0x54, 0xf1, 0x72, 0x6c, 0x69, 0x3a, 0x24, 0x49, 0x8b, 0xf7, 0xee, 0x25, 0x48, 0x9c, 0x1b, - 0x54, 0xe2, 0x14, 0x20, 0x61, 0x0f, 0x3f, 0x80, 0x21, 0x56, 0xc2, 0xfb, 0x97, 0x40, 0x8c, 0x09, - 0xd4, 0x0c, 0x8d, 0x03, 0x1b, 0x3f, 0x80, 0x8b, 0x4c, 0x5b, 0x0b, 0xaf, 0x17, 0x74, 0x8d, 0xea, - 0xf3, 0x88, 0xb2, 0x76, 0x9e, 0xd3, 0x8d, 0xc2, 0xa7, 0xe8, 0x6c, 0x07, 0x62, 0x6d, 0xa7, 0xd1, - 0xef, 0xe9, 0xd9, 0x83, 0x50, 0xc2, 0xf2, 0x89, 0x4a, 0xd8, 0x55, 0xb8, 0x22, 0x95, 0xb0, 0x68, - 0x33, 0xf2, 0xca, 0xec, 0x7b, 0x70, 0x81, 0x0d, 0x54, 0x38, 0x6d, 0xe9, 0xdd, 0xf8, 0x34, 0x32, - 0xcc, 0x79, 0x3e, 0x4c, 0x1d, 0x3a, 0x65, 0x90, 0x7f, 0x25, 0x27, 0xb6, 0x5c, 0x32, 0xf1, 0x5f, - 0xb4, 0x56, 0xba, 0x09, 0x25, 0xc9, 0x10, 0xbd, 0x47, 0xaf, 0xa6, 0x92, 0x6e, 0xc0, 0x9c, 0x4a, - 0xc6, 0x6e, 0xe0, 0xbd, 0xbb, 0xd4, 0xee, 0xfb, 0x3e, 0xd9, 0x16, 0xb4, 0x40, 0x2c, 0xbb, 0x85, - 0x04, 0xbe, 0x51, 0x78, 0x53, 0x42, 0x1a, 0x75, 0x58, 0x8c, 0x4f, 0x85, 0xdd, 0x10, 0xbe, 0xae, - 0xe8, 0x3e, 0xd9, 0xc2, 0xb4, 0x84, 0x4f, 0x46, 0x2a, 0x51, 0xb1, 0x8f, 0x19, 0xba, 0xc0, 0x32, - 0x0c, 0x71, 0xd4, 0x44, 0xc6, 0x4f, 0x5a, 0x17, 0xeb, 0xe1, 0x57, 0x00, 0x89, 0xaa, 0x6a, 0xcd, - 0x14, 0x4d, 0x9f, 0x87, 0xfe, 0x6a, 0xcd, 0xe4, 0x2e, 0xf6, 0x54, 0x2b, 0x6e, 0xf8, 0x9e, 0x49, - 0xca, 0xa2, 0x52, 0x6b, 0xbe, 0x07, 0xa9, 0xf5, 0xd1, 0xc0, 0x48, 0x7f, 0x61, 0xc0, 0x44, 0x35, - 0xfb, 0xd0, 0xd9, 0xb7, 0x83, 0x23, 0xd9, 0x60, 0xd9, 0xf8, 0x3e, 0xcc, 0x68, 0xcd, 0xf3, 0x5d, - 0x9c, 0xf9, 0x36, 0x00, 0x5d, 0x87, 0xe1, 0x6a, 0x99, 0xfa, 0x3e, 0x50, 0xb5, 0x7e, 0x9c, 0x9d, - 0x37, 0x0d, 0xab, 0x4e, 0xdf, 0x7f, 0x99, 0xa2, 0xd2, 0xf8, 0xbb, 0x03, 0x0a, 0x75, 0xe5, 0xc5, - 0x45, 0xc6, 0xe8, 0xee, 0x02, 0xb0, 0x15, 0xa2, 0x0c, 0x8e, 0x08, 0x80, 0x63, 0xfc, 0xba, 0x96, - 0x1d, 0xc9, 0xa6, 0x02, 0xd4, 0xeb, 0x8b, 0x0c, 0xee, 0xe1, 0xc9, 0x90, 0x84, 0x4f, 0x83, 0xf4, - 0xf0, 0xe4, 0xa4, 0x7d, 0x53, 0x05, 0x42, 0x3f, 0x88, 0x3a, 0x0e, 0x0f, 0x52, 0x23, 0xff, 0x5b, - 0xe2, 0xde, 0x29, 0x3e, 0xb6, 0xb3, 0xf9, 0x0e, 0x3f, 0x87, 0x39, 0x82, 0x6b, 0x3f, 0xa1, 0xde, - 0xc1, 0x2b, 0x2f, 0x02, 0xec, 0xb0, 0xb3, 0x7d, 0x88, 0xb6, 0x73, 0x2d, 0xa3, 0x9d, 0x10, 0x98, - 0xdb, 0xa8, 0x43, 0x3a, 0x75, 0x2c, 0xeb, 0xcc, 0x64, 0xfa, 0x74, 0x11, 0x99, 0xeb, 0x2b, 0x4e, - 0xb3, 0xed, 0xda, 0x52, 0xa9, 0x60, 0x8b, 0xc8, 0x6b, 0xd5, 0x31, 0x2f, 0x37, 0x55, 0x20, 0xe3, - 0x7a, 0xa6, 0xc3, 0xee, 0x08, 0x0c, 0xec, 0x54, 0x77, 0xd6, 0x0b, 0x39, 0xe3, 0x36, 0x80, 0xd2, - 0x12, 0xc0, 0xd0, 0xe6, 0x96, 0xb9, 0x51, 0x5e, 0x2f, 0xf4, 0xa1, 0x39, 0x98, 0xde, 0x5f, 0xdb, - 0x5c, 0xde, 0xda, 0xaf, 0xd5, 0x6b, 0x1b, 0x65, 0x73, 0xa7, 0x5a, 0x36, 0x97, 0x0b, 0x39, 0xe3, - 0x5b, 0x98, 0xd5, 0x47, 0xf8, 0x46, 0x17, 0x61, 0x00, 0x33, 0x52, 0x9e, 0x79, 0xb4, 0xbf, 0xa3, - 0xb8, 0x1d, 0x72, 0x05, 0x29, 0xea, 0x9a, 0xc0, 0x55, 0x29, 0xbe, 0x8d, 0x14, 0x20, 0xcd, 0xa1, - 0x24, 0x9f, 0xe9, 0x50, 0x62, 0x7c, 0x17, 0x66, 0xf5, 0x56, 0x7b, 0xb5, 0xe4, 0xbc, 0x45, 0xfd, - 0x31, 0x15, 0x97, 0x7b, 0xa2, 0xa9, 0x87, 0x5d, 0xe4, 0x27, 0xeb, 0x77, 0xa1, 0xc0, 0xa1, 0xc2, - 0x2f, 0xef, 0x55, 0x61, 0x6a, 0xcb, 0x25, 0x3c, 0x0f, 0x12, 0x6e, 0xbf, 0x2e, 0x14, 0xc8, 0x89, - 0xc9, 0x31, 0x59, 0x03, 0xb3, 0x30, 0xb8, 0x1e, 0x5e, 0x79, 0x98, 0xec, 0x07, 0xf5, 0x3c, 0x0f, - 0x2c, 0x2f, 0x10, 0xce, 0x4a, 0xa3, 0xa6, 0xfc, 0x8d, 0xde, 0x81, 0xa1, 0x07, 0x76, 0x2b, 0xe0, - 0xe6, 0x83, 0xf0, 0x23, 0x4f, 0xc8, 0xb2, 0x0a, 0x93, 0x03, 0x18, 0x26, 0x4c, 0x2b, 0x0d, 0x9e, - 0xa1, 0xab, 0x68, 0x01, 0x86, 0x37, 0xf1, 0x0b, 0xa5, 0x7d, 0xf1, 0xd3, 0x78, 0x5b, 0xdc, 0x40, - 0x74, 0x63, 0xd3, 0x1f, 0xe5, 0x60, 0x21, 0xe2, 0x82, 0x5f, 0x3d, 0xb2, 0x5a, 0x2d, 0xec, 0x1c, - 0x62, 0x74, 0x03, 0x06, 0x76, 0xb6, 0x76, 0xb6, 0xb9, 0x85, 0x4e, 0xdc, 0xb5, 0x91, 0x22, 0x09, - 0x63, 0x52, 0x08, 0xf4, 0x18, 0xa6, 0x85, 0x0b, 0xa5, 0xac, 0xe2, 0x23, 0xbf, 0x98, 0xed, 0x90, - 0x19, 0xc7, 0x43, 0xef, 0xf3, 0xf7, 0x02, 0x3f, 0xea, 0xd8, 0x1e, 0x6e, 0x52, 0xab, 0x43, 0x78, - 0x6d, 0xa8, 0xd4, 0x98, 0x2a, 0x18, 0x7b, 0xcb, 0x65, 0xfc, 0x4e, 0x0e, 0xe6, 0x53, 0x9e, 0x14, - 0xa0, 0x77, 0xb4, 0xe1, 0xcc, 0x28, 0xc3, 0x11, 0x20, 0xab, 0x7d, 0x7c, 0x3c, 0x55, 0xc5, 0xaf, - 0xb4, 0xff, 0x0c, 0x7e, 0xa5, 0xab, 0x7d, 0xa1, 0x2f, 0x69, 0x05, 0x60, 0x44, 0x94, 0x1b, 0x53, - 0x30, 0xa1, 0xf1, 0xcd, 0x30, 0x60, 0x5c, 0x6d, 0x99, 0x4c, 0x4e, 0xd5, 0x6d, 0xca, 0xc9, 0x21, - 0x7f, 0x1b, 0x7f, 0x3d, 0x07, 0xb3, 0x74, 0x88, 0x87, 0x36, 0x39, 0x52, 0x42, 0x0e, 0x2d, 0x69, - 0x23, 0x59, 0xd4, 0x46, 0x12, 0x81, 0x95, 0x43, 0xfa, 0x24, 0x36, 0xa4, 0xc5, 0xa4, 0x21, 0x51, - 0x75, 0xd6, 0x76, 0x1d, 0x6d, 0x24, 0xca, 0x35, 0xc8, 0xef, 0xe6, 0x60, 0x46, 0xe9, 0x93, 0xec, - 0xff, 0x5d, 0xad, 0x4b, 0x17, 0x12, 0xba, 0x14, 0x63, 0x72, 0x25, 0xd6, 0xa3, 0xb7, 0xb2, 0x7a, - 0xd4, 0x95, 0xc7, 0xff, 0x21, 0x07, 0x73, 0x89, 0x3c, 0x40, 0xe7, 0x88, 0xcc, 0xd8, 0xf0, 0x70, - 0xc0, 0xd9, 0xcb, 0x7f, 0x91, 0xf2, 0x35, 0xdf, 0xef, 0x60, 0x8f, 0xef, 0x1f, 0xfe, 0x0b, 0xbd, - 0x05, 0x13, 0xdb, 0xd8, 0xb3, 0xdd, 0x26, 0xf3, 0x38, 0x66, 0x6e, 0x52, 0x13, 0xa6, 0x5e, 0x88, - 0x16, 0x61, 0xb4, 0xdc, 0x3a, 0x74, 0x3d, 0x3b, 0x38, 0x62, 0x37, 0x51, 0xa3, 0x66, 0x58, 0x40, - 0x68, 0x2f, 0xdb, 0x87, 0xc2, 0xf3, 0x6f, 0xc2, 0xe4, 0xbf, 0xc8, 0xa6, 0x15, 0x96, 0xaa, 0x21, - 0xb6, 0x69, 0xf9, 0x4f, 0x82, 0xf1, 0x95, 0x49, 0x17, 0x01, 0x7d, 0xe3, 0x6a, 0xf2, 0x5f, 0xc6, - 0x4d, 0x98, 0x4d, 0xe2, 0x63, 0xe2, 0x92, 0xf9, 0xff, 0xf3, 0x30, 0x53, 0x6e, 0x36, 0x37, 0x1e, - 0x94, 0xd9, 0x85, 0xb6, 0xd8, 0xfb, 0xef, 0xc3, 0xc0, 0x9a, 0xc3, 0x0f, 0x30, 0xe5, 0xae, 0x3f, - 0x0e, 0x49, 0xa0, 0xc8, 0x0c, 0x91, 0xff, 0x91, 0x09, 0x33, 0x2b, 0x2f, 0x6c, 0x3f, 0xb0, 0x9d, - 0x43, 0xf5, 0x05, 0x4f, 0xbe, 0x97, 0x17, 0x3c, 0xab, 0x7d, 0x66, 0x12, 0x32, 0xda, 0x81, 0x73, - 0x9b, 0xf8, 0x79, 0xc2, 0x12, 0x92, 0x0f, 0x1b, 0x95, 0x8d, 0x1e, 0x5b, 0x39, 0x29, 0xb8, 0xea, - 0x0a, 0xfd, 0xcd, 0x3c, 0x7d, 0xf7, 0xac, 0x0c, 0x8c, 0xb7, 0xbc, 0x0b, 0xb3, 0x4a, 0x87, 0xc2, - 0x73, 0x8a, 0xf1, 0xa4, 0x94, 0x3c, 0x1c, 0x75, 0x23, 0x25, 0xa2, 0xa3, 0x7d, 0x98, 0xd7, 0x3b, - 0x15, 0x52, 0xd6, 0x37, 0x43, 0x12, 0xc8, 0x6a, 0x9f, 0x99, 0x86, 0x8d, 0x96, 0xa0, 0xbf, 0xdc, - 0x78, 0xca, 0xd9, 0x92, 0x3c, 0x65, 0x6c, 0x64, 0xe5, 0xc6, 0xd3, 0xd5, 0x3e, 0x93, 0x00, 0x6b, - 0xfb, 0xe1, 0x5f, 0xe5, 0x60, 0x3e, 0x65, 0x86, 0xd1, 0x25, 0x00, 0x56, 0xa8, 0x7c, 0x11, 0x94, - 0x12, 0x22, 0x65, 0x72, 0x8f, 0x88, 0x97, 0x6d, 0x36, 0x33, 0x93, 0xf2, 0x8d, 0x60, 0x58, 0x61, - 0x2a, 0x40, 0x68, 0x5b, 0x38, 0x20, 0xb1, 0xa7, 0x8a, 0xfa, 0xb1, 0xad, 0xd4, 0x68, 0x9e, 0x47, - 0xd1, 0x27, 0x8a, 0x2a, 0x09, 0x6e, 0x97, 0xad, 0x46, 0x47, 0x21, 0x07, 0x8d, 0x6e, 0xc0, 0x10, - 0x2b, 0xe4, 0x73, 0x28, 0xe2, 0x06, 0x84, 0xc0, 0xbc, 0xde, 0xf8, 0x5b, 0x39, 0x38, 0xc7, 0xbe, - 0x88, 0xb1, 0xad, 0xf1, 0x5d, 0x6d, 0x6b, 0x5c, 0x91, 0x1d, 0x4e, 0x02, 0xd6, 0x76, 0x47, 0x45, - 0x7f, 0xd7, 0xd6, 0xeb, 0xae, 0x50, 0x91, 0xd4, 0x75, 0xfb, 0x77, 0x72, 0xc2, 0x4c, 0x15, 0x5f, - 0xba, 0x2b, 0x30, 0xfe, 0x6a, 0x4b, 0x56, 0x43, 0x43, 0x1f, 0xb0, 0x15, 0x95, 0xcf, 0x1e, 0x69, - 0xe6, 0xa2, 0xfa, 0x0c, 0x8a, 0xe9, 0xac, 0xe9, 0xb6, 0xac, 0x8c, 0x07, 0x09, 0xd8, 0xaf, 0x32, - 0x9d, 0x9d, 0x18, 0x9d, 0xda, 0x4b, 0xa7, 0x21, 0x66, 0xf4, 0x7a, 0xd4, 0x59, 0x3e, 0xd5, 0x01, - 0x59, 0xed, 0x6d, 0x3e, 0xbc, 0x0f, 0xe1, 0x8b, 0x93, 0x4a, 0xac, 0x6a, 0xf7, 0xff, 0x79, 0x5e, - 0x5f, 0x8b, 0xaf, 0xd2, 0x68, 0x15, 0x26, 0x36, 0xf1, 0xf3, 0x58, 0xbb, 0xd4, 0xd7, 0xcd, 0xc1, - 0xcf, 0xeb, 0x4a, 0xdb, 0xaa, 0x3f, 0x9d, 0x86, 0x83, 0x0e, 0x60, 0x52, 0x9c, 0x1a, 0xbd, 0x1e, - 0x9e, 0xec, 0x9d, 0x36, 0x69, 0x21, 0xe5, 0x55, 0x65, 0x84, 0xe2, 0x9b, 0xdf, 0xcf, 0xc6, 0x36, - 0x2c, 0xc4, 0xb9, 0xc7, 0x5b, 0x7b, 0xbf, 0xdb, 0xdc, 0x33, 0x7b, 0x4e, 0x53, 0x5f, 0x07, 0xab, - 0xd4, 0xc6, 0x26, 0x61, 0xa4, 0xc0, 0x7e, 0x27, 0x3a, 0x19, 0xd4, 0x49, 0x53, 0x4c, 0x86, 0xea, - 0xb3, 0x23, 0xde, 0x4e, 0x54, 0xa9, 0x99, 0x52, 0xa5, 0xc4, 0x3b, 0x76, 0x13, 0x86, 0x79, 0x51, - 0x24, 0x38, 0x49, 0xb8, 0x2a, 0x05, 0x80, 0xf1, 0x7b, 0x39, 0x38, 0x4f, 0x8d, 0xa6, 0xb6, 0x73, - 0xd8, 0xc2, 0xbb, 0xbe, 0xfe, 0xfc, 0xe1, 0x3d, 0xed, 0xa0, 0x99, 0x4f, 0x79, 0x5b, 0xfb, 0xf3, - 0x3a, 0x5e, 0xfe, 0x20, 0x07, 0xc5, 0xa4, 0xbe, 0xbd, 0xd9, 0x13, 0xe6, 0x16, 0xd7, 0x48, 0xf3, - 0x9a, 0xbb, 0xa2, 0x6c, 0x53, 0x0c, 0x96, 0x0c, 0x92, 0xfc, 0xaf, 0x1d, 0x2d, 0x7f, 0x91, 0x83, - 0xd9, 0x35, 0x5f, 0x15, 0xf0, 0x39, 0xe3, 0x6e, 0x25, 0x3d, 0xf5, 0xa7, 0xf3, 0xba, 0xda, 0x97, - 0xf4, 0x94, 0xff, 0x7d, 0xe5, 0x61, 0x68, 0x3e, 0xeb, 0x0d, 0x3f, 0x11, 0x25, 0xe5, 0xd3, 0xd0, - 0xeb, 0x30, 0xb0, 0x49, 0xc4, 0xa9, 0x7e, 0xbe, 0xfe, 0x18, 0x06, 0x29, 0xa2, 0x0f, 0x33, 0x49, - 0x97, 0xc9, 0x0f, 0xf4, 0x20, 0xf6, 0xfc, 0x73, 0xa0, 0xfb, 0x1b, 0xf5, 0xd5, 0xbe, 0xe8, 0x4b, - 0xd0, 0xca, 0x08, 0x0c, 0xed, 0x58, 0xde, 0x21, 0x0e, 0x8c, 0xef, 0x41, 0x91, 0x7b, 0x15, 0x31, - 0x33, 0x34, 0xf5, 0x3d, 0xf2, 0x43, 0xc7, 0xb1, 0x2c, 0x4f, 0xa0, 0x4b, 0x00, 0x54, 0xe9, 0x5c, - 0x73, 0x9a, 0xf8, 0x05, 0x73, 0x7e, 0x33, 0x95, 0x12, 0xe3, 0x03, 0x18, 0x95, 0x43, 0xa0, 0x1a, - 0xa0, 0x22, 0x31, 0xd2, 0xe1, 0xcc, 0x6a, 0x0f, 0x52, 0xc5, 0x2b, 0xd4, 0x7b, 0x30, 0x17, 0x99, - 0x8a, 0xf0, 0xb9, 0xb5, 0xd4, 0xcc, 0xa8, 0x37, 0x9c, 0x29, 0x7f, 0x1b, 0x55, 0x98, 0x8e, 0xcd, - 0x34, 0x42, 0xf4, 0x25, 0x34, 0x33, 0x51, 0x90, 0x0f, 0x4a, 0xad, 0xb6, 0x4a, 0xca, 0x76, 0xd6, - 0x6b, 0xec, 0x85, 0x0f, 0x29, 0xdb, 0x59, 0xaf, 0x55, 0x86, 0xd8, 0xca, 0x31, 0xfe, 0x61, 0x9e, - 0x6a, 0xee, 0x31, 0x1e, 0x44, 0x8c, 0xa0, 0xaa, 0x21, 0xb6, 0x02, 0xa3, 0x74, 0xc4, 0xcb, 0xe2, - 0xc9, 0x5c, 0xb6, 0x23, 0xcc, 0xc8, 0x4f, 0x4e, 0x4a, 0x7d, 0xd4, 0xfb, 0x25, 0x44, 0x43, 0x5f, - 0xc0, 0xf0, 0x8a, 0xd3, 0xa4, 0x14, 0xfa, 0xcf, 0x40, 0x41, 0x20, 0x91, 0x79, 0xa0, 0x5d, 0x26, - 0xa2, 0x10, 0xb7, 0x9d, 0x99, 0x4a, 0x49, 0x68, 0x42, 0x18, 0x4c, 0x33, 0x21, 0x0c, 0x45, 0x4c, - 0x08, 0x06, 0x0c, 0x6e, 0x79, 0x4d, 0x1e, 0xd4, 0x62, 0x72, 0x69, 0x9c, 0x2f, 0x2f, 0x5a, 0x66, - 0xb2, 0x2a, 0xe3, 0xbf, 0xe5, 0x60, 0xfe, 0x21, 0x0e, 0x12, 0xd7, 0x8d, 0xc6, 0x95, 0xdc, 0x6b, - 0x73, 0x25, 0xff, 0x2a, 0x5c, 0x91, 0xa3, 0xee, 0x4f, 0x1b, 0xf5, 0x40, 0xda, 0xa8, 0x07, 0xd3, - 0x47, 0xfd, 0x10, 0x86, 0xd8, 0x50, 0xd1, 0x55, 0x18, 0x5c, 0x0b, 0xf0, 0x71, 0x68, 0x26, 0x51, - 0xdd, 0xf8, 0x4c, 0x56, 0x47, 0x34, 0xae, 0x75, 0xcb, 0x57, 0xcd, 0x24, 0xfc, 0xa7, 0xf1, 0x43, - 0xfa, 0xd8, 0x76, 0xdd, 0x6d, 0x3c, 0x55, 0xcc, 0xed, 0xc3, 0x6c, 0x57, 0x46, 0xaf, 0x67, 0x08, - 0x14, 0xab, 0x31, 0x05, 0x04, 0xba, 0x0c, 0x63, 0x6b, 0xce, 0x03, 0xd7, 0x6b, 0xe0, 0x2d, 0xa7, - 0xc5, 0xa8, 0x8f, 0x98, 0x6a, 0x11, 0x37, 0x43, 0xf1, 0x16, 0x42, 0xdb, 0x0e, 0x2d, 0x88, 0xd8, - 0x76, 0x48, 0xd9, 0xde, 0x92, 0xc9, 0xea, 0xb8, 0x95, 0x8b, 0xfc, 0x9d, 0x65, 0xbe, 0x91, 0x76, - 0x9e, 0x6e, 0x80, 0x07, 0x70, 0xde, 0xc4, 0xed, 0x96, 0x45, 0x04, 0xae, 0x63, 0x97, 0xc1, 0xcb, - 0x31, 0x5f, 0x4e, 0x78, 0x84, 0xa4, 0x3b, 0x75, 0xc8, 0x2e, 0xe7, 0x33, 0xba, 0x7c, 0x0c, 0x57, - 0x1e, 0xe2, 0x40, 0x3f, 0xe5, 0x42, 0x63, 0x3e, 0x1f, 0xfc, 0x2a, 0x8c, 0xf8, 0xfa, 0x45, 0xc4, - 0x25, 0x71, 0xff, 0x95, 0x84, 0xb8, 0x77, 0x4f, 0x5c, 0xd5, 0x71, 0x3a, 0xf2, 0x2f, 0xe3, 0x3e, - 0x94, 0xd2, 0x9a, 0xeb, 0xcd, 0xe7, 0xd6, 0x86, 0xcb, 0xe9, 0x04, 0xe4, 0x67, 0x51, 0x5c, 0x5a, - 0x48, 0xd5, 0x39, 0xbb, 0xb7, 0xfa, 0x3d, 0x07, 0xff, 0xc3, 0xa8, 0x08, 0xef, 0xc3, 0xd7, 0xe8, - 0x6e, 0x9d, 0xfa, 0x03, 0xe8, 0x04, 0x42, 0xbe, 0x96, 0x61, 0x44, 0x94, 0x71, 0xbe, 0xce, 0x27, - 0xf6, 0x54, 0x30, 0xb4, 0x29, 0x08, 0x48, 0x34, 0xe3, 0x87, 0xe2, 0x6e, 0x4c, 0xc7, 0xe8, 0xed, - 0x65, 0x65, 0x2f, 0x97, 0x61, 0x86, 0x0b, 0xe7, 0x75, 0xda, 0xea, 0x9d, 0x47, 0x41, 0xb9, 0xf3, - 0x60, 0x57, 0x1d, 0x97, 0x75, 0x1b, 0x7c, 0x9e, 0xaf, 0xcb, 0xb0, 0x08, 0x5d, 0x52, 0x6f, 0x36, - 0xc6, 0xe3, 0x4f, 0x51, 0xef, 0x40, 0x31, 0xa9, 0x41, 0xc5, 0x80, 0x22, 0xcd, 0xe7, 0x3c, 0xaa, - 0xd3, 0xaf, 0xe5, 0xc0, 0xd0, 0x5c, 0xbc, 0xe8, 0x0c, 0x6d, 0x7b, 0xee, 0x33, 0xbb, 0xa9, 0xdc, - 0xca, 0xbd, 0xa3, 0x59, 0x84, 0xd9, 0x03, 0xab, 0xa8, 0x77, 0x39, 0x3f, 0xed, 0xee, 0x44, 0xac, - 0xb4, 0x4c, 0x16, 0xa5, 0x6e, 0x5f, 0x4f, 0xb1, 0xfa, 0x40, 0x41, 0x5a, 0x6f, 0xff, 0x22, 0x07, - 0x57, 0x33, 0xfb, 0xc0, 0xfb, 0x7f, 0x00, 0x85, 0x68, 0x1d, 0x9f, 0xfb, 0x92, 0xe2, 0xce, 0x12, - 0xa7, 0xb0, 0x77, 0x97, 0xb9, 0xb0, 0x0b, 0xd7, 0xa8, 0xb6, 0xa4, 0x1c, 0xa3, 0x77, 0xf6, 0xde, - 0xa3, 0x8f, 0x01, 0x76, 0xdc, 0xc0, 0x6a, 0x55, 0xa9, 0x8d, 0xab, 0x3f, 0x7c, 0x8e, 0x10, 0x90, - 0xd2, 0x7a, 0x34, 0xe2, 0x82, 0x02, 0x6c, 0x7c, 0x49, 0x77, 0x64, 0x72, 0xa7, 0x7b, 0xdb, 0x24, - 0x55, 0xb8, 0x1a, 0x71, 0xa9, 0x78, 0x05, 0x22, 0x01, 0xcc, 0x11, 0xf6, 0x13, 0x11, 0xe6, 0xa1, - 0xe7, 0x76, 0xda, 0xbf, 0x98, 0x59, 0xff, 0xb7, 0x39, 0xe6, 0x07, 0xaa, 0x36, 0xcb, 0x27, 0xba, - 0x0a, 0x10, 0x96, 0x46, 0xde, 0x03, 0xc8, 0x8a, 0xbd, 0xbb, 0x4c, 0x79, 0xa5, 0x97, 0x2d, 0x87, - 0x8c, 0x80, 0x82, 0xf6, 0x8b, 0x9d, 0xc9, 0x7b, 0xd4, 0x8f, 0x42, 0xb6, 0xde, 0x1b, 0xdf, 0x3f, - 0x14, 0x36, 0x9a, 0x33, 0xe2, 0x1d, 0xc1, 0x2c, 0xd9, 0xbb, 0x44, 0x43, 0x71, 0x3d, 0x3b, 0x10, - 0x2f, 0x5b, 0xd0, 0x36, 0x7f, 0xcd, 0xce, 0xb0, 0x3e, 0xfb, 0xd9, 0x49, 0xe9, 0xa3, 0xb3, 0x3c, - 0x0d, 0x16, 0x34, 0x77, 0xe4, 0x0b, 0x78, 0x63, 0x1e, 0xfa, 0xab, 0xe6, 0x3a, 0x3d, 0xaa, 0xcc, - 0x75, 0x79, 0x54, 0x99, 0xeb, 0xc6, 0x7f, 0xcd, 0x43, 0x89, 0xc5, 0xdb, 0xa0, 0xee, 0x37, 0xa1, - 0xae, 0xa4, 0xf8, 0xf3, 0xf4, 0x6a, 0x21, 0x88, 0xc4, 0xd3, 0xc8, 0xf7, 0x12, 0x4f, 0xe3, 0x97, - 0x5f, 0xdd, 0xaa, 0x5a, 0x79, 0xfb, 0xf4, 0xa4, 0x74, 0x35, 0x34, 0x0c, 0xb0, 0xda, 0x24, 0x0b, - 0x41, 0x4a, 0x13, 0x71, 0x93, 0xc6, 0xc0, 0x2b, 0x98, 0x34, 0xee, 0xc0, 0x30, 0x55, 0x3d, 0xd6, - 0xb6, 0xb9, 0xd3, 0x28, 0x5d, 0x9e, 0x34, 0x34, 0x4e, 0xdd, 0x56, 0x23, 0x78, 0x09, 0x30, 0xe3, - 0x6f, 0xe6, 0xe1, 0x72, 0x3a, 0xcf, 0x79, 0xdf, 0x96, 0x01, 0x42, 0xc7, 0x9f, 0x2c, 0x47, 0x23, - 0xba, 0x77, 0x9e, 0xe3, 0x03, 0xe9, 0xe8, 0xa7, 0xe0, 0x11, 0xa9, 0x45, 0x3c, 0x1b, 0x8d, 0xdc, - 0x86, 0x69, 0xaf, 0x49, 0x79, 0x80, 0x48, 0x5e, 0xa4, 0x05, 0x88, 0xe4, 0x65, 0xe8, 0x00, 0xe6, - 0xb7, 0x3d, 0xfb, 0x99, 0x15, 0xe0, 0xc7, 0xf8, 0x25, 0x7b, 0x67, 0xb4, 0xc2, 0x1f, 0x17, 0xb1, - 0xb7, 0xc0, 0x37, 0x4e, 0x4f, 0x4a, 0x6f, 0xb5, 0x19, 0x08, 0xd9, 0x98, 0x75, 0xf6, 0x90, 0xad, - 0x1e, 0x7f, 0x6f, 0x94, 0x46, 0xc8, 0xf8, 0x37, 0x39, 0xb8, 0x40, 0x05, 0x6a, 0x7e, 0xb3, 0x20, - 0x1a, 0x7f, 0x25, 0x7f, 0x53, 0x75, 0x80, 0x7c, 0x2d, 0x52, 0x7f, 0x53, 0xed, 0x59, 0xad, 0xa9, - 0x81, 0xa1, 0x35, 0x18, 0xe3, 0xbf, 0x15, 0xf3, 0xf1, 0x9c, 0x72, 0x60, 0xd1, 0xa5, 0xce, 0xac, - 0x47, 0x74, 0x61, 0x73, 0x62, 0xf4, 0xed, 0x9f, 0xa9, 0xe2, 0x1a, 0x3f, 0xcd, 0xc3, 0xe2, 0x1e, - 0xf6, 0xec, 0x27, 0x2f, 0x53, 0x06, 0xb3, 0x05, 0xb3, 0xa2, 0x88, 0xc5, 0xdc, 0xd0, 0xb6, 0x18, - 0x0b, 0x41, 0x27, 0xba, 0xca, 0x83, 0x76, 0x88, 0x1d, 0x97, 0x88, 0x78, 0x06, 0x4f, 0xd2, 0xf7, - 0x61, 0x24, 0x12, 0xf5, 0x86, 0xce, 0xbf, 0xd8, 0xa1, 0xe1, 0x54, 0xad, 0xf6, 0x99, 0x12, 0x12, - 0xfd, 0x46, 0xfa, 0x15, 0x25, 0xb7, 0x24, 0x74, 0x8b, 0x8d, 0x46, 0x37, 0x2c, 0xd9, 0xac, 0x96, - 0x52, 0x9b, 0xb0, 0x61, 0x57, 0xfb, 0xcc, 0xb4, 0x96, 0x2a, 0x63, 0x30, 0x5a, 0xa6, 0xd7, 0xae, - 0x44, 0x71, 0xff, 0xef, 0x79, 0xb8, 0x24, 0xde, 0x0c, 0xa5, 0xb0, 0xf9, 0x6b, 0x98, 0x17, 0x45, - 0xe5, 0x36, 0x11, 0x18, 0x70, 0x53, 0xe7, 0x34, 0x0b, 0x03, 0x29, 0x38, 0x6d, 0x71, 0x98, 0x90, - 0xd9, 0x69, 0xe8, 0x6f, 0xc6, 0x20, 0xfa, 0x45, 0x52, 0x0c, 0x22, 0x6a, 0x98, 0x54, 0xcf, 0x4c, - 0x8d, 0x35, 0xda, 0xf9, 0xd9, 0x8c, 0x19, 0x54, 0x07, 0x5e, 0xd7, 0xa0, 0xba, 0xda, 0x17, 0x35, - 0xa9, 0x56, 0x26, 0x61, 0x7c, 0x13, 0x3f, 0x0f, 0xf9, 0xfe, 0x97, 0x73, 0x91, 0x77, 0xeb, 0x44, - 0xc2, 0x60, 0x0f, 0xd8, 0x73, 0x61, 0x18, 0x1b, 0xfa, 0x6e, 0x5d, 0x95, 0x30, 0x18, 0xe8, 0x1a, - 0x0c, 0x33, 0xdf, 0xe3, 0x66, 0x0f, 0xba, 0xb9, 0x7c, 0xfc, 0xc3, 0x5e, 0x64, 0x36, 0x99, 0x9a, - 0xce, 0xf1, 0x8d, 0xc7, 0x70, 0x85, 0xbb, 0xbe, 0xeb, 0x93, 0x4f, 0x1b, 0x3a, 0xe3, 0xe7, 0xcb, - 0xb0, 0xe0, 0xd2, 0x43, 0x1c, 0x3d, 0x7a, 0xb4, 0xc7, 0x51, 0xf7, 0x61, 0x4a, 0x2b, 0x97, 0x14, - 0xa9, 0x54, 0x2a, 0xd7, 0x90, 0x24, 0x1d, 0x85, 0x36, 0x2e, 0x27, 0x35, 0xa1, 0x76, 0xd6, 0xc0, - 0x34, 0x9e, 0xa3, 0x17, 0xde, 0x22, 0xfb, 0x67, 0x38, 0xf5, 0x6e, 0x28, 0xfb, 0x9a, 0x9d, 0x78, - 0x2c, 0x6c, 0x9d, 0xf8, 0xf2, 0xca, 0x5a, 0x63, 0x02, 0xc6, 0xaa, 0xae, 0x13, 0xe0, 0x17, 0x54, - 0xd4, 0x31, 0x26, 0x61, 0x5c, 0x54, 0xb5, 0xb0, 0xef, 0x1b, 0xbf, 0xdf, 0x0f, 0x06, 0x67, 0x6c, - 0x92, 0xf5, 0x54, 0xf0, 0xe3, 0x20, 0xd6, 0x59, 0xfe, 0xa1, 0x3a, 0xa7, 0xda, 0x88, 0xc3, 0x5a, - 0xb6, 0xf2, 0xa8, 0x9c, 0xd7, 0x08, 0x4b, 0xb5, 0x95, 0x17, 0x1b, 0xfd, 0xf7, 0x53, 0x8e, 0x49, - 0xb6, 0xd9, 0xae, 0x9d, 0x9e, 0x94, 0xae, 0xa4, 0x1c, 0x93, 0x1a, 0xdd, 0xe4, 0x23, 0xd3, 0xd4, - 0xd8, 0xc0, 0x45, 0x0e, 0x24, 0xdf, 0x76, 0xca, 0x1a, 0xee, 0x88, 0xc5, 0x0a, 0xea, 0x64, 0x00, - 0xfa, 0x8e, 0x54, 0x40, 0xd1, 0xae, 0xce, 0x4b, 0xbe, 0x1f, 0x85, 0xd7, 0x86, 0x5a, 0xc5, 0x9f, - 0x8f, 0x2b, 0x25, 0x1a, 0x55, 0x8d, 0x8c, 0x6a, 0x11, 0xff, 0x6d, 0xf9, 0x00, 0x81, 0x7c, 0x48, - 0xed, 0x16, 0xe6, 0xaf, 0x6d, 0xc4, 0xb4, 0x74, 0x92, 0x6f, 0xbf, 0x73, 0x3d, 0x9d, 0xd1, 0x34, - 0xbc, 0x36, 0xe6, 0xe8, 0x69, 0x57, 0x2e, 0x49, 0xf4, 0x8d, 0x93, 0x9c, 0x78, 0x76, 0x11, 0xbb, - 0x12, 0x3e, 0xab, 0x24, 0x59, 0xd1, 0x6e, 0x71, 0xf3, 0x29, 0xb7, 0xb8, 0xda, 0x9d, 0x57, 0xd0, - 0xe5, 0x5a, 0xb7, 0xff, 0xf5, 0xaf, 0x81, 0xfe, 0xd9, 0x30, 0x4c, 0x6f, 0x5b, 0x87, 0xb6, 0x43, - 0xce, 0x1e, 0x13, 0xfb, 0x6e, 0xc7, 0x6b, 0x60, 0x54, 0x86, 0x49, 0xdd, 0x03, 0xb6, 0x8b, 0x7f, - 0x2f, 0x39, 0x5e, 0xf5, 0x32, 0xb4, 0x04, 0xa3, 0xf2, 0x65, 0x2a, 0x3f, 0x13, 0x13, 0x5e, 0xac, - 0xae, 0xf6, 0x99, 0x21, 0x18, 0xfa, 0x58, 0xb3, 0xfa, 0x4f, 0xc9, 0x47, 0xd6, 0x14, 0x76, 0x89, - 0xb9, 0x28, 0x3a, 0x6e, 0x53, 0x3f, 0xd7, 0x99, 0xe5, 0xfc, 0x87, 0xb1, 0x8b, 0x80, 0x41, 0xad, - 0xc7, 0x31, 0xc3, 0x0b, 0xfd, 0xa4, 0xa5, 0x86, 0xa6, 0x8d, 0x5f, 0x11, 0xa0, 0xef, 0xc1, 0xd8, - 0xe3, 0xce, 0x01, 0x16, 0x57, 0x1e, 0x43, 0xfc, 0x98, 0x8f, 0xfa, 0x75, 0xf3, 0xfa, 0xbd, 0x7b, - 0x6c, 0x0e, 0x9e, 0x76, 0x0e, 0x70, 0x3c, 0xe6, 0x31, 0xd9, 0x5f, 0x0a, 0x31, 0x74, 0x04, 0x85, - 0xa8, 0x0b, 0x36, 0x0f, 0x83, 0x96, 0xe1, 0x38, 0x4e, 0x83, 0x40, 0x28, 0x91, 0x95, 0x99, 0x63, - 0xa8, 0xd6, 0x48, 0x8c, 0x2a, 0xfa, 0x15, 0x98, 0x4b, 0x34, 0x7b, 0xf1, 0xf8, 0xca, 0xdd, 0x2c, - 0x6a, 0xf4, 0x6c, 0x8a, 0x70, 0x4d, 0xbc, 0xea, 0xd2, 0x5a, 0x4e, 0x6e, 0x05, 0x35, 0x61, 0x2a, - 0xe2, 0x5a, 0xcc, 0xc3, 0xbb, 0xa7, 0x3b, 0x2b, 0xd3, 0xf3, 0x55, 0xc4, 0x11, 0x4d, 0x6c, 0x2b, - 0x4a, 0x12, 0xad, 0xc3, 0xa8, 0xd4, 0x5a, 0x69, 0xa8, 0x9a, 0x64, 0x0d, 0x7d, 0xe1, 0xf4, 0xa4, - 0x34, 0x1b, 0x6a, 0xe8, 0x1a, 0xcd, 0x90, 0x00, 0xfa, 0x31, 0x5c, 0x91, 0x4b, 0x74, 0xcb, 0x4b, - 0xb6, 0x65, 0xf0, 0xc8, 0xcd, 0x37, 0xa3, 0x2b, 0x3c, 0x0d, 0x7e, 0xef, 0xee, 0x6a, 0x9f, 0xd9, - 0x9d, 0x6c, 0x05, 0x60, 0xc4, 0xe3, 0x9b, 0xf2, 0xd1, 0xc0, 0xc8, 0x40, 0x61, 0x90, 0xad, 0x1b, - 0xe1, 0xb2, 0xfd, 0x3f, 0x86, 0xd8, 0x1b, 0xc8, 0x5d, 0xc7, 0x7e, 0x62, 0x87, 0xfb, 0x57, 0xb5, - 0x91, 0x84, 0xa9, 0x1c, 0xb8, 0x04, 0x93, 0x92, 0xb4, 0x41, 0x9a, 0x53, 0xf2, 0x5d, 0xcd, 0x29, - 0xf7, 0x94, 0x2b, 0x03, 0x25, 0xb4, 0x21, 0xfb, 0x52, 0xe9, 0xe6, 0x8b, 0xf0, 0x2e, 0xe1, 0x5b, - 0x18, 0xa2, 0x41, 0xd6, 0xd8, 0x7d, 0xcc, 0xd8, 0xd2, 0x2d, 0x7e, 0x6a, 0x65, 0x74, 0x9f, 0x45, - 0x65, 0xe3, 0xef, 0x9a, 0x69, 0x1c, 0x91, 0x16, 0x2d, 0x50, 0xe3, 0x88, 0x30, 0x10, 0xb4, 0x03, - 0x33, 0xdb, 0x1e, 0x6e, 0x72, 0xc7, 0xe1, 0xb6, 0xc7, 0x55, 0x4c, 0xa6, 0xbc, 0xd2, 0x40, 0xcf, - 0x6d, 0x51, 0x5d, 0xc7, 0xb2, 0x5e, 0x3d, 0xfd, 0x13, 0xd0, 0xd1, 0x0a, 0x4c, 0xd6, 0xb0, 0xe5, - 0x35, 0x8e, 0x1e, 0xe3, 0x97, 0xe4, 0xa3, 0xa5, 0x45, 0x47, 0xf7, 0x69, 0x0d, 0x19, 0x2f, 0xad, - 0x52, 0x2f, 0xef, 0x75, 0x24, 0xf4, 0x25, 0x0c, 0xd5, 0x5c, 0x2f, 0xa8, 0xbc, 0xe4, 0x7b, 0x5a, - 0x58, 0xec, 0x59, 0x61, 0xe5, 0xbc, 0x88, 0x10, 0xef, 0xbb, 0x5e, 0x50, 0x3f, 0xd0, 0xc2, 0xa4, - 0x30, 0x10, 0xf4, 0x12, 0x66, 0xf5, 0xfd, 0xc4, 0xfd, 0x59, 0x47, 0xb8, 0x4f, 0x53, 0xd2, 0xa6, - 0x65, 0x20, 0x95, 0x1b, 0x9c, 0xfa, 0xe5, 0xe8, 0xae, 0x7d, 0x42, 0xeb, 0xd5, 0xfc, 0x12, 0x49, - 0xf8, 0x68, 0x83, 0x06, 0xd6, 0x67, 0x23, 0x2a, 0xfb, 0xcc, 0x0f, 0x76, 0x34, 0x0c, 0xc4, 0xd3, - 0xa1, 0x7b, 0x92, 0x72, 0xc2, 0xf2, 0xa3, 0xf9, 0x12, 0xcc, 0x18, 0x2a, 0xda, 0x86, 0xe9, 0x5d, - 0x1f, 0x6f, 0x7b, 0xf8, 0x99, 0x8d, 0x9f, 0x0b, 0x7a, 0x2c, 0x9a, 0x14, 0x9d, 0x26, 0x42, 0xaf, - 0xcd, 0x6a, 0x93, 0x08, 0xc6, 0x91, 0xd1, 0xc7, 0x00, 0xdb, 0xb6, 0xe3, 0xe0, 0x26, 0xbd, 0xf6, - 0x19, 0xa3, 0xa4, 0xa8, 0x61, 0xac, 0x4d, 0x4b, 0xeb, 0xae, 0xd3, 0x52, 0x59, 0xaa, 0x00, 0x17, - 0x3f, 0x86, 0x31, 0x65, 0x89, 0x25, 0xbc, 0x8b, 0x9f, 0x55, 0xdf, 0xc5, 0x8f, 0xaa, 0xef, 0xdf, - 0xff, 0x76, 0x0e, 0x16, 0x93, 0x97, 0x2e, 0xb7, 0x75, 0x6c, 0xc1, 0xa8, 0x2c, 0x94, 0xaf, 0x3c, - 0x84, 0xbc, 0x14, 0xf9, 0xde, 0xb2, 0xfd, 0x23, 0x36, 0xba, 0x3a, 0xde, 0x90, 0xc6, 0x2b, 0x18, - 0x31, 0xff, 0xe5, 0x30, 0xcc, 0x52, 0x6f, 0xe6, 0xe8, 0xb1, 0x70, 0x9f, 0xc6, 0xb7, 0xa0, 0x65, - 0x8a, 0x4d, 0x8e, 0xab, 0xe7, 0xac, 0x3c, 0x1a, 0xf9, 0x47, 0x43, 0x40, 0x1f, 0xa8, 0x57, 0xc0, - 0x79, 0x25, 0x72, 0xbe, 0x28, 0x54, 0x87, 0x10, 0xde, 0x0d, 0xbf, 0xa3, 0xdd, 0x40, 0xf6, 0x7c, - 0xc6, 0x0c, 0xf4, 0x7a, 0xc6, 0xec, 0xca, 0x33, 0x86, 0xc5, 0x4d, 0x78, 0x5b, 0x39, 0x63, 0xde, - 0xfc, 0xe1, 0x32, 0xf4, 0xa6, 0x0f, 0x97, 0xe1, 0xd7, 0x3b, 0x5c, 0x46, 0x5e, 0xf1, 0x70, 0x79, - 0x40, 0xd4, 0x6d, 0xdc, 0x54, 0xac, 0xcb, 0x6c, 0x7f, 0x73, 0x95, 0x9a, 0xda, 0x0d, 0x92, 0x4c, - 0xcc, 0x11, 0xac, 0xd4, 0x43, 0x0a, 0xfe, 0xcf, 0x1c, 0x52, 0x63, 0x6f, 0xf8, 0x90, 0x1a, 0x7f, - 0x8d, 0x43, 0xea, 0x75, 0x4e, 0x9a, 0x2f, 0xa8, 0x5b, 0x55, 0xad, 0xb6, 0xca, 0x2f, 0xba, 0x95, - 0x9b, 0xe5, 0x55, 0xd7, 0x17, 0x5e, 0xd4, 0xf4, 0x6f, 0x52, 0xb6, 0xed, 0x7a, 0xe2, 0x76, 0x8e, - 0xfe, 0x6d, 0x54, 0xa8, 0x33, 0x95, 0x8a, 0x2f, 0x5d, 0xf0, 0x87, 0xf9, 0xf3, 0x36, 0x7e, 0x3e, - 0x45, 0x05, 0x6e, 0x53, 0xd4, 0x53, 0x6f, 0xee, 0xc8, 0x26, 0xfa, 0xbf, 0xe6, 0x98, 0x7b, 0x9d, - 0x9b, 0x91, 0xdf, 0x08, 0x9f, 0xbd, 0xf3, 0x27, 0xfa, 0x9e, 0xd5, 0x78, 0x1a, 0x5e, 0x4d, 0xfd, - 0x80, 0xec, 0x51, 0xb5, 0x82, 0xc6, 0x25, 0x0c, 0xb5, 0x0a, 0xbd, 0x72, 0xef, 0xae, 0xd8, 0xbc, - 0xfc, 0xf5, 0x3f, 0x2b, 0xd6, 0x37, 0xaf, 0x8a, 0x40, 0xdf, 0x49, 0x4c, 0x19, 0x26, 0x7b, 0xb5, - 0x9d, 0xd8, 0x83, 0x0f, 0xe3, 0xef, 0x8e, 0xa9, 0xd8, 0x1a, 0xbe, 0x3b, 0x56, 0xd9, 0x18, 0xbe, - 0x40, 0xde, 0x85, 0x0b, 0x26, 0x3e, 0x76, 0x9f, 0xe1, 0x37, 0x4b, 0xf6, 0xfb, 0x70, 0x5e, 0x27, - 0xb8, 0xdb, 0x6e, 0xd2, 0xa8, 0x4a, 0xcc, 0x41, 0x25, 0x31, 0x52, 0x36, 0x47, 0x60, 0x91, 0xb2, - 0x59, 0x30, 0x53, 0xf2, 0xa7, 0x7a, 0xe6, 0xd3, 0x3a, 0xc3, 0x85, 0x45, 0x9d, 0x78, 0xb9, 0xd9, - 0xa4, 0x39, 0xc0, 0x1a, 0x76, 0xdb, 0x72, 0x02, 0xb4, 0x05, 0x63, 0xca, 0xcf, 0x88, 0x52, 0xa9, - 0xd4, 0xf0, 0xcf, 0x7f, 0x58, 0xa0, 0x45, 0xb0, 0x0b, 0x8b, 0x0d, 0x0c, 0xa5, 0x28, 0x7b, 0x08, - 0xcb, 0xd4, 0x36, 0x2b, 0x30, 0xa1, 0xfc, 0x94, 0x36, 0x1a, 0x1a, 0x70, 0x51, 0x69, 0x41, 0x67, - 0x98, 0x8e, 0x62, 0x34, 0xa0, 0x98, 0xc4, 0x34, 0x1a, 0xed, 0xe7, 0x25, 0x5a, 0x09, 0xe3, 0x06, - 0x75, 0x77, 0x0c, 0x9a, 0x4a, 0x8b, 0x19, 0x64, 0xfc, 0xb5, 0x01, 0xb8, 0xc0, 0x27, 0xe3, 0x4d, - 0xce, 0x38, 0xfa, 0x21, 0x8c, 0x29, 0x73, 0xcc, 0x99, 0x7e, 0x59, 0xf8, 0x12, 0xa6, 0xad, 0x05, - 0xa6, 0xfc, 0x76, 0x68, 0x41, 0x3d, 0x32, 0xdd, 0x44, 0xf9, 0x55, 0x97, 0x4d, 0x0b, 0x26, 0xf5, - 0x89, 0xe6, 0xfa, 0xff, 0xd5, 0xc4, 0x46, 0x74, 0x50, 0x11, 0x07, 0xb5, 0x59, 0x4f, 0x9c, 0x6e, - 0xa2, 0xc6, 0x47, 0x16, 0xd1, 0x0b, 0x98, 0x8e, 0xcd, 0x32, 0xb7, 0x67, 0x5d, 0x4f, 0x6c, 0x30, - 0x06, 0xcd, 0x52, 0x1a, 0x79, 0xb4, 0x38, 0xb5, 0xd9, 0x78, 0x23, 0xa8, 0x09, 0xe3, 0xea, 0xc4, - 0x73, 0x03, 0xc5, 0x95, 0x0c, 0x56, 0x32, 0x40, 0x26, 0x98, 0x71, 0x5e, 0xd2, 0xb9, 0x7f, 0xa9, - 0xdb, 0xd4, 0x34, 0xe0, 0x11, 0x18, 0x62, 0xbf, 0xc9, 0x11, 0xb0, 0xed, 0x61, 0x1f, 0x3b, 0x0d, - 0xac, 0xba, 0x85, 0xbe, 0xee, 0x11, 0xf0, 0xaf, 0x73, 0xb0, 0x90, 0x44, 0xb7, 0x86, 0x9d, 0x26, - 0xda, 0x86, 0x42, 0xb4, 0x21, 0xbe, 0xaa, 0x0d, 0x19, 0x6a, 0x32, 0xb5, 0x4b, 0xab, 0x7d, 0x66, - 0x0c, 0x1b, 0x6d, 0xc2, 0xb4, 0x52, 0x76, 0x46, 0xff, 0xdb, 0x38, 0xaa, 0x6a, 0x73, 0x5c, 0xa5, - 0x5f, 0xc6, 0x65, 0xf7, 0xd8, 0xb2, 0x1d, 0x22, 0xa4, 0x2a, 0xa1, 0x83, 0x20, 0x2c, 0xe5, 0xbc, - 0x61, 0x76, 0x39, 0x5a, 0x2a, 0x7c, 0xd1, 0x25, 0x88, 0xf1, 0x19, 0x3d, 0xc1, 0xb9, 0x35, 0x87, - 0x3d, 0xe5, 0x94, 0xc4, 0x2e, 0xc3, 0xe0, 0xce, 0x7a, 0xad, 0x5a, 0xe6, 0x0f, 0x43, 0x59, 0x38, - 0x81, 0x96, 0x5f, 0x6f, 0x58, 0x26, 0xab, 0x30, 0x3e, 0xa5, 0xd1, 0xaa, 0x79, 0xac, 0x63, 0x89, - 0x77, 0x0d, 0x86, 0x79, 0x11, 0xc7, 0xa4, 0x5e, 0x3c, 0x2d, 0x0e, 0x25, 0xea, 0x8c, 0x6d, 0x21, - 0xe3, 0xb7, 0xb0, 0xe5, 0x2b, 0x1f, 0xe6, 0x8f, 0x60, 0xc4, 0xe3, 0x65, 0xfc, 0xbb, 0x3c, 0x29, - 0x33, 0x17, 0xd0, 0x62, 0x66, 0xa7, 0x14, 0x30, 0xa6, 0xfc, 0xcb, 0x58, 0xa7, 0xa1, 0x3f, 0xb6, - 0xd6, 0x96, 0xab, 0x84, 0xab, 0x9c, 0x59, 0x62, 0x3a, 0x6e, 0x53, 0x17, 0xd7, 0x00, 0xab, 0xcf, - 0x42, 0x29, 0x6b, 0xe8, 0x26, 0xe7, 0x01, 0x6f, 0x14, 0x10, 0xe3, 0x9e, 0x0c, 0x24, 0x92, 0x40, - 0x2d, 0x2d, 0x02, 0xff, 0x26, 0x0d, 0x91, 0xf2, 0x90, 0xfa, 0x07, 0xbc, 0x89, 0x4e, 0xfc, 0x5e, - 0x8e, 0xc5, 0x5c, 0xa9, 0x6d, 0x29, 0x99, 0x96, 0x9c, 0x27, 0xae, 0x72, 0x09, 0xa2, 0x34, 0xf3, - 0xd8, 0x76, 0x9a, 0xea, 0x25, 0x88, 0xd5, 0x09, 0x8e, 0x64, 0xdc, 0xce, 0xa7, 0xb6, 0xd3, 0x34, - 0xa3, 0xd0, 0xe8, 0x63, 0x98, 0x50, 0x8a, 0xe4, 0x67, 0x82, 0xc5, 0x7a, 0x56, 0xd1, 0xed, 0xa6, - 0xa9, 0x43, 0x1a, 0xbf, 0x9d, 0x87, 0x73, 0xbb, 0x6d, 0x9f, 0xfa, 0x1c, 0xaf, 0x39, 0xcf, 0xb0, - 0x13, 0xb8, 0xde, 0x4b, 0xea, 0x33, 0x89, 0x3e, 0x80, 0xc1, 0x55, 0xdc, 0x6a, 0xb9, 0x7c, 0x0b, - 0x5d, 0x14, 0x37, 0x10, 0x51, 0x68, 0x0a, 0xb4, 0xda, 0x67, 0x32, 0x68, 0xf4, 0x31, 0x8c, 0xae, - 0x62, 0xcb, 0x0b, 0x0e, 0xb0, 0x25, 0xbe, 0x92, 0x22, 0xf6, 0xb0, 0x82, 0xc2, 0x01, 0x56, 0xfb, - 0xcc, 0x10, 0x1a, 0x2d, 0x11, 0x01, 0xd2, 0x39, 0x94, 0x8f, 0x12, 0x53, 0x1a, 0x24, 0x30, 0xab, - 0x7d, 0x26, 0x85, 0x45, 0x1b, 0x30, 0x51, 0x3e, 0xc4, 0x4e, 0xb0, 0x81, 0x03, 0xab, 0x69, 0x05, - 0x16, 0x3f, 0x4d, 0xaf, 0xa5, 0x21, 0x6b, 0xc0, 0xab, 0x7d, 0xa6, 0x8e, 0x5d, 0x19, 0x84, 0xfe, - 0x0d, 0xff, 0xd0, 0x38, 0xc9, 0xc1, 0xc2, 0xb2, 0xfb, 0xdc, 0x49, 0x64, 0xcc, 0x77, 0x75, 0xc6, - 0x08, 0xcf, 0xf8, 0x04, 0xf8, 0x08, 0x6b, 0xde, 0x87, 0x81, 0x6d, 0xdb, 0x39, 0x8c, 0x1c, 0x20, - 0x09, 0x78, 0x04, 0x8a, 0x8e, 0xd0, 0x76, 0x0e, 0xd1, 0xba, 0x38, 0xb9, 0xb9, 0x76, 0xd9, 0xaf, - 0x7d, 0x2e, 0x12, 0xb0, 0x55, 0xe8, 0xf0, 0x84, 0x66, 0xbf, 0xc5, 0x00, 0xdf, 0x81, 0xf9, 0x94, - 0x76, 0xd1, 0xa4, 0xdc, 0x16, 0x03, 0x74, 0x3b, 0xbc, 0x0d, 0x73, 0x89, 0x53, 0x10, 0x03, 0xfc, - 0xfb, 0x49, 0x6b, 0x89, 0x8d, 0x7c, 0x01, 0x86, 0x45, 0x88, 0x7a, 0xa6, 0x31, 0x88, 0x9f, 0xd4, - 0x03, 0x98, 0xca, 0xf9, 0x61, 0xfc, 0x4a, 0xf1, 0x1b, 0xed, 0x29, 0xa1, 0x2a, 0xfa, 0xa9, 0x7a, - 0xfa, 0xc9, 0x6b, 0x24, 0xc1, 0x94, 0xb4, 0x48, 0x9b, 0x44, 0x61, 0x71, 0xa4, 0x83, 0x8a, 0x29, - 0x7f, 0xa3, 0x9b, 0x50, 0x58, 0x79, 0x11, 0x60, 0xcf, 0xb1, 0x5a, 0x3c, 0x58, 0x37, 0xcf, 0x6e, - 0x68, 0xc6, 0xca, 0xd1, 0x47, 0x30, 0x1f, 0x2d, 0x13, 0xa3, 0x64, 0x2e, 0xdc, 0x69, 0xd5, 0xc6, - 0x9f, 0xe4, 0x69, 0xc4, 0xcd, 0x8c, 0xa5, 0x49, 0xb8, 0xbb, 0x55, 0xe3, 0xdc, 0xca, 0x6f, 0xd5, - 0xd0, 0x22, 0x8c, 0x6e, 0xd5, 0xb4, 0x38, 0xff, 0x66, 0x58, 0x40, 0xba, 0x4d, 0x86, 0x50, 0xf6, - 0x1a, 0x47, 0x76, 0x80, 0x1b, 0x41, 0xc7, 0xe3, 0x81, 0x46, 0xcc, 0x58, 0x39, 0x32, 0x60, 0xfc, - 0x61, 0xcb, 0x3e, 0x68, 0x08, 0x62, 0x8c, 0x05, 0x5a, 0x19, 0xba, 0x0e, 0x93, 0x6b, 0x8e, 0x1f, - 0x58, 0xad, 0x16, 0x4b, 0x83, 0xc0, 0xd3, 0x64, 0x99, 0x91, 0x52, 0xd2, 0x6e, 0xd5, 0x75, 0x02, - 0xcb, 0x76, 0xb0, 0x67, 0x76, 0x9c, 0xc0, 0x3e, 0xc6, 0x7c, 0xec, 0xb1, 0x72, 0xf4, 0x3e, 0xcc, - 0xc9, 0xb2, 0x2d, 0xaf, 0x71, 0x84, 0xfd, 0xc0, 0xa3, 0x19, 0x6a, 0x68, 0x48, 0x05, 0x33, 0xb9, - 0x92, 0xb6, 0xd0, 0x72, 0x3b, 0xcd, 0x15, 0xe7, 0x99, 0xed, 0xb9, 0x0e, 0x4d, 0xda, 0x36, 0xc2, - 0x5b, 0x88, 0x94, 0x1b, 0xdb, 0x89, 0xbb, 0xf6, 0x35, 0x96, 0xa0, 0x71, 0x9a, 0x83, 0xc5, 0xc4, - 0x8d, 0x25, 0x0e, 0x6f, 0x15, 0x39, 0x17, 0x59, 0xbf, 0x37, 0x61, 0x80, 0x9e, 0xe6, 0x4c, 0x23, - 0x11, 0x57, 0xb8, 0x14, 0x9f, 0x91, 0x22, 0xb5, 0x26, 0x85, 0x41, 0x0f, 0xa5, 0xf5, 0xa8, 0x9f, - 0x7e, 0x2f, 0x6f, 0x47, 0xcf, 0xcc, 0x84, 0xc6, 0x55, 0x2b, 0x92, 0xb0, 0x17, 0xbd, 0x8e, 0xb2, - 0xff, 0x27, 0x39, 0x28, 0x75, 0x39, 0x4f, 0xe4, 0x98, 0x72, 0x3d, 0x8c, 0xe9, 0x91, 0x1c, 0x13, - 0x73, 0x16, 0x5f, 0xea, 0xed, 0xcc, 0x7a, 0xd3, 0xc3, 0xea, 0x00, 0x8a, 0x7f, 0x79, 0xd0, 0x7b, - 0x30, 0x5a, 0xab, 0xad, 0x6a, 0x17, 0x8c, 0x31, 0x13, 0x44, 0x08, 0x81, 0xee, 0xf4, 0x74, 0xa3, - 0xa8, 0xdc, 0x27, 0x1a, 0x1f, 0xc2, 0x39, 0xd9, 0x2c, 0x0b, 0x12, 0xac, 0xbc, 0x61, 0xe1, 0xd9, - 0x17, 0xe5, 0xd3, 0x99, 0xb0, 0xc0, 0xf8, 0xe3, 0x81, 0x18, 0x62, 0xad, 0x73, 0x7c, 0x6c, 0x79, - 0x2f, 0x51, 0x59, 0x47, 0xec, 0xef, 0xfa, 0x59, 0xae, 0x0c, 0xfc, 0xe4, 0xa4, 0xd4, 0xa7, 0x50, - 0x47, 0x6f, 0xc1, 0x04, 0xdd, 0xc2, 0x4e, 0x03, 0x33, 0x93, 0x45, 0x9e, 0x3d, 0x68, 0xd7, 0x0a, - 0xd1, 0x1e, 0x4c, 0xf0, 0xdd, 0x41, 0x7f, 0x8b, 0x45, 0x79, 0x27, 0xba, 0x28, 0xb5, 0xee, 0xdd, - 0xd2, 0x50, 0xd8, 0xf4, 0xe9, 0x64, 0xd0, 0x37, 0x30, 0x29, 0x8e, 0x42, 0x4e, 0x98, 0xdd, 0xc7, - 0xdc, 0xcd, 0x26, 0xac, 0xe3, 0x30, 0xca, 0x11, 0x42, 0xa4, 0xcb, 0xfc, 0x80, 0xe7, 0x94, 0x07, - 0x7b, 0xe9, 0xb2, 0x86, 0xc2, 0xbb, 0xac, 0x95, 0x15, 0xbf, 0x04, 0x14, 0x1f, 0x57, 0xb7, 0xf5, - 0x37, 0xa1, 0xac, 0xbf, 0x62, 0x19, 0x66, 0x12, 0x06, 0x70, 0x26, 0x12, 0x5f, 0x02, 0x8a, 0xf7, - 0xf4, 0x2c, 0x14, 0x8c, 0x1b, 0x70, 0x5d, 0xb2, 0x40, 0xae, 0x06, 0x8d, 0xa6, 0x50, 0x4c, 0x7e, - 0x2d, 0x0f, 0xa5, 0x2e, 0xa0, 0xe8, 0xf7, 0x73, 0x51, 0x6e, 0xb3, 0xd5, 0xf8, 0x71, 0x94, 0xdb, - 0xc9, 0xf8, 0x09, 0x6c, 0xaf, 0x7c, 0xf2, 0xeb, 0x7f, 0xfa, 0xca, 0x9f, 0xf6, 0xf8, 0x94, 0x9d, - 0x9d, 0x5b, 0x03, 0x2a, 0xb7, 0x4c, 0x98, 0xd5, 0x84, 0xa2, 0x5e, 0x4e, 0xfb, 0x4b, 0x00, 0x3c, - 0x83, 0xca, 0xba, 0x7b, 0xc8, 0x5f, 0x00, 0x29, 0x25, 0xc6, 0x03, 0x98, 0x8b, 0xd0, 0xe4, 0xca, - 0xd2, 0x7b, 0x20, 0xdf, 0x2a, 0x50, 0xa2, 0xfd, 0x95, 0xe9, 0x9f, 0x9d, 0x94, 0x26, 0xc8, 0x37, - 0xf3, 0x56, 0x18, 0x8b, 0x53, 0xfc, 0x65, 0x6c, 0xa8, 0xea, 0x5e, 0xb9, 0xa5, 0xbd, 0xdd, 0xbc, - 0x0b, 0x43, 0xac, 0x24, 0x12, 0xf1, 0x4e, 0x85, 0xe6, 0x67, 0x02, 0x07, 0x34, 0xe6, 0xa8, 0x7f, - 0x36, 0xfd, 0x51, 0x0e, 0x5f, 0x02, 0x19, 0xbb, 0x2c, 0x4a, 0x72, 0x58, 0x2c, 0xa3, 0xea, 0x0d, - 0x94, 0xc3, 0x17, 0x4b, 0xc2, 0xae, 0x2e, 0xe0, 0x1c, 0xf7, 0x79, 0x0b, 0x37, 0x0f, 0x69, 0x3e, - 0xd4, 0xca, 0x38, 0xb7, 0xab, 0x0f, 0x58, 0x84, 0x00, 0x45, 0x33, 0xee, 0xc3, 0x5c, 0xb5, 0x85, - 0x2d, 0x2f, 0xda, 0x1e, 0xba, 0x0e, 0xc3, 0xb4, 0x4c, 0x77, 0x64, 0xb1, 0x48, 0x11, 0x75, 0x64, - 0xe1, 0x95, 0x44, 0x3f, 0x64, 0x81, 0xc8, 0xd4, 0x21, 0x85, 0xaa, 0xd9, 0x20, 0xfd, 0x1d, 0xf1, - 0xee, 0x4d, 0x18, 0x3d, 0x83, 0x33, 0xbe, 0xa0, 0xee, 0x63, 0x49, 0xa9, 0x70, 0x7b, 0xf3, 0x37, - 0xff, 0xff, 0x60, 0xb1, 0xdc, 0x6e, 0x63, 0xa7, 0x19, 0x22, 0xee, 0x78, 0x56, 0x8f, 0xef, 0x78, - 0x50, 0x19, 0x06, 0x29, 0xb4, 0xb4, 0x6b, 0xf1, 0xee, 0x26, 0x74, 0x87, 0xc2, 0xf1, 0x10, 0x48, - 0xb4, 0x01, 0x86, 0x69, 0x34, 0x61, 0xbe, 0xd6, 0x39, 0x38, 0xb6, 0x59, 0xd6, 0x59, 0xfa, 0x16, - 0x4e, 0xb4, 0xbd, 0x26, 0x02, 0xdb, 0x33, 0x66, 0xdc, 0x08, 0x53, 0xdc, 0x52, 0x9f, 0x1c, 0xfe, - 0x3e, 0xee, 0xd9, 0xdd, 0x5b, 0x21, 0x2a, 0xd5, 0x6f, 0x58, 0x2b, 0xb4, 0x9a, 0x07, 0xbf, 0x37, - 0x66, 0x60, 0x5a, 0xb5, 0x11, 0xb0, 0x15, 0x32, 0x07, 0x33, 0xba, 0xee, 0xcf, 0x8a, 0xbf, 0x85, - 0x59, 0x66, 0xd4, 0x66, 0x21, 0x0c, 0x97, 0xc2, 0x68, 0x7d, 0xf9, 0xbd, 0xa5, 0x88, 0x27, 0x0f, - 0xf5, 0x34, 0x90, 0xc1, 0x69, 0xf7, 0x96, 0x98, 0x0b, 0xf0, 0xb3, 0x25, 0xcd, 0xc2, 0x94, 0xdf, - 0x5b, 0xaa, 0x0c, 0xf3, 0x50, 0x50, 0x84, 0x3a, 0x9b, 0xfe, 0x9f, 0x0b, 0xf5, 0x25, 0xfa, 0xea, - 0x64, 0x15, 0x5b, 0xd4, 0x43, 0x2c, 0xd9, 0x77, 0x7f, 0x12, 0xf2, 0x76, 0x53, 0xc8, 0xe5, 0x76, - 0xd3, 0xf8, 0xc3, 0x1c, 0xdc, 0x60, 0xd2, 0x4b, 0x32, 0x1e, 0x35, 0x04, 0xa4, 0x20, 0xa3, 0x8f, - 0x80, 0x25, 0x6e, 0xe4, 0x22, 0xa2, 0xc1, 0x7b, 0x9e, 0x45, 0x89, 0x21, 0xa0, 0x32, 0x8c, 0xab, - 0xae, 0x64, 0x91, 0xd8, 0x20, 0x29, 0x46, 0x29, 0x73, 0xec, 0xf8, 0x89, 0x25, 0xdd, 0xcb, 0x9e, - 0xc2, 0x85, 0x95, 0x17, 0x64, 0x41, 0xf0, 0xaf, 0x13, 0xbf, 0xdc, 0x0a, 0x7d, 0xc3, 0xa7, 0x76, - 0xf8, 0x8a, 0xd1, 0x05, 0xe7, 0x68, 0x31, 0x51, 0x28, 0xc4, 0x07, 0x4e, 0xca, 0xbb, 0xa3, 0xa6, - 0x56, 0x66, 0xfc, 0x71, 0x0e, 0x16, 0x93, 0x5b, 0xe3, 0x07, 0xcb, 0x1a, 0x4c, 0x57, 0x2d, 0xc7, - 0x75, 0xec, 0x86, 0xd5, 0xaa, 0x35, 0x8e, 0x70, 0xb3, 0xd3, 0x12, 0x1e, 0x76, 0xf2, 0x94, 0x21, - 0x0a, 0x12, 0x47, 0x17, 0x20, 0x66, 0x1c, 0x0b, 0x7d, 0x08, 0xe7, 0xa8, 0x7f, 0x13, 0x3b, 0x7b, - 0x5b, 0xd8, 0x93, 0xf4, 0x58, 0xcf, 0x52, 0x6a, 0xd1, 0x1d, 0x98, 0x61, 0x1f, 0x95, 0xe6, 0xae, - 0x63, 0x07, 0x12, 0x89, 0xe9, 0x51, 0x49, 0x55, 0xc6, 0xbf, 0xcb, 0xc1, 0x79, 0x1a, 0x47, 0x5d, - 0xcb, 0xcc, 0x12, 0xc6, 0x4d, 0x13, 0xa1, 0xbf, 0x72, 0x9a, 0xbf, 0x96, 0x06, 0xad, 0xc7, 0x00, - 0x43, 0xef, 0xc2, 0x40, 0x4d, 0x5c, 0xa2, 0x4d, 0x46, 0xb2, 0xfc, 0x88, 0xac, 0x9f, 0xae, 0x17, - 0x98, 0x14, 0x8a, 0x45, 0xd9, 0xf0, 0x1b, 0xd8, 0xa1, 0xe9, 0x98, 0xfa, 0xd9, 0x37, 0x27, 0x2c, - 0x09, 0x5f, 0xdd, 0x0e, 0xa4, 0xbd, 0xba, 0x1d, 0xd4, 0x5f, 0xdd, 0x1a, 0xcf, 0x58, 0x14, 0xf5, - 0xe8, 0x80, 0xf8, 0x24, 0x7d, 0x11, 0xcb, 0xde, 0xc4, 0xbe, 0x03, 0xe7, 0x92, 0x46, 0xb6, 0x77, - 0x2f, 0x96, 0x98, 0x29, 0x3d, 0x4e, 0xd9, 0x36, 0xbc, 0xa5, 0xc1, 0x96, 0x5b, 0x2d, 0xf7, 0x39, - 0x6e, 0x6e, 0x7b, 0xee, 0xb1, 0x1b, 0x68, 0x11, 0xb2, 0x79, 0xfa, 0xb2, 0xd0, 0xda, 0xc5, 0x57, - 0x65, 0xa4, 0xd8, 0xf8, 0x7f, 0xe1, 0x5a, 0x17, 0x8a, 0x7c, 0x50, 0x35, 0x98, 0xb6, 0x22, 0x75, - 0xe2, 0x36, 0xe4, 0x5a, 0xd2, 0xb8, 0xa2, 0x84, 0x7c, 0x33, 0x8e, 0x7f, 0x73, 0x47, 0xcb, 0x78, - 0x84, 0x16, 0x60, 0x76, 0xdb, 0xdc, 0x5a, 0xde, 0xad, 0xee, 0xd4, 0x77, 0xbe, 0xd9, 0x5e, 0xa9, - 0xef, 0x6e, 0x3e, 0xde, 0xdc, 0xda, 0xdf, 0x64, 0x81, 0xfe, 0xb4, 0x9a, 0x9d, 0x95, 0xf2, 0x46, - 0x21, 0x87, 0x66, 0xa1, 0xa0, 0x15, 0xaf, 0xec, 0x56, 0x0a, 0xf9, 0x9b, 0x75, 0xd5, 0x8d, 0x13, - 0x5d, 0x80, 0xf9, 0xe5, 0x95, 0xbd, 0xb5, 0xea, 0x8a, 0xa0, 0xa9, 0x06, 0x19, 0x9c, 0x85, 0x82, - 0x5a, 0xb9, 0xb3, 0xb5, 0xb3, 0xcd, 0x92, 0x81, 0xab, 0xa5, 0xfb, 0x2b, 0x95, 0xf2, 0xee, 0xce, - 0xea, 0x66, 0xa1, 0xdf, 0x18, 0x18, 0xc9, 0x17, 0xf2, 0x37, 0x7f, 0xa8, 0xf9, 0x78, 0xa2, 0x45, - 0x58, 0xe0, 0xe0, 0xbb, 0xb5, 0xf2, 0xc3, 0xf4, 0x26, 0x58, 0xed, 0xc6, 0x83, 0x72, 0x21, 0x87, - 0x2e, 0xc2, 0x79, 0xad, 0x74, 0xbb, 0x5c, 0xab, 0xed, 0x6f, 0x99, 0x2c, 0xa3, 0x78, 0xfe, 0xe6, - 0x9e, 0x16, 0xd3, 0x8d, 0xb4, 0xb0, 0xf1, 0xa0, 0x5c, 0x37, 0x57, 0xbe, 0xda, 0x5d, 0x33, 0x57, - 0x96, 0xe3, 0x2d, 0x68, 0xb5, 0xdf, 0xac, 0xd4, 0x0a, 0x39, 0x34, 0x03, 0x53, 0x5a, 0xe9, 0xe6, - 0x56, 0x21, 0x7f, 0xf3, 0x3a, 0x7f, 0x2e, 0x8e, 0x26, 0x01, 0x96, 0x57, 0x6a, 0xd5, 0x95, 0xcd, - 0xe5, 0xb5, 0xcd, 0x87, 0x85, 0x3e, 0x34, 0x01, 0xa3, 0x65, 0xf9, 0x33, 0x77, 0xf3, 0x13, 0x98, - 0x8a, 0x68, 0xab, 0x04, 0x42, 0x2a, 0x7a, 0x85, 0x3e, 0xc2, 0x23, 0xf9, 0x93, 0x9a, 0x18, 0x98, - 0xe2, 0x59, 0xc8, 0xdd, 0xfc, 0x48, 0x24, 0x43, 0x52, 0x76, 0x22, 0x1a, 0x83, 0xe1, 0xe5, 0x95, - 0x07, 0xe5, 0xdd, 0xf5, 0x9d, 0x42, 0x1f, 0xf9, 0x51, 0x35, 0x57, 0xca, 0x3b, 0x2b, 0xcb, 0x85, - 0x1c, 0x1a, 0x85, 0xc1, 0xda, 0x4e, 0x79, 0x67, 0xa5, 0x90, 0x5f, 0xfa, 0x47, 0x7f, 0x23, 0x07, - 0x63, 0xe4, 0x48, 0x16, 0x5e, 0x82, 0xdf, 0x2a, 0x4a, 0x1e, 0x3f, 0x8a, 0x78, 0xbe, 0x97, 0x54, - 0x8d, 0x8e, 0x7e, 0x9d, 0x8b, 0x19, 0xe6, 0x46, 0x0a, 0x70, 0x23, 0x77, 0x27, 0x87, 0x4c, 0x6a, - 0xd4, 0x8f, 0xe8, 0x3c, 0x92, 0x72, 0xb2, 0x5a, 0x5a, 0xbc, 0x98, 0xa9, 0x2a, 0xa1, 0x5f, 0x06, - 0x43, 0xa5, 0x99, 0xa2, 0x19, 0xbc, 0xd7, 0x9b, 0x06, 0x20, 0xda, 0xbc, 0xde, 0x1b, 0x38, 0x7a, - 0x04, 0x13, 0x44, 0x66, 0x96, 0x60, 0xe8, 0x42, 0x14, 0x51, 0x11, 0xd3, 0x8b, 0x8b, 0xc9, 0x95, - 0x32, 0xdc, 0xf4, 0x38, 0x1d, 0x08, 0x53, 0x78, 0x7d, 0x24, 0x9e, 0x23, 0x89, 0x12, 0x76, 0x12, - 0x17, 0xa7, 0x23, 0xc5, 0x7b, 0x77, 0xef, 0xe4, 0x50, 0x8d, 0xbe, 0xe2, 0xd7, 0x84, 0x6f, 0x24, - 0xdc, 0x56, 0xe3, 0x52, 0x39, 0xeb, 0x4d, 0x49, 0x26, 0x50, 0x49, 0x91, 0xda, 0x37, 0x01, 0xc5, - 0x65, 0x5a, 0x74, 0x39, 0x5c, 0x07, 0xc9, 0xe2, 0x6e, 0xf1, 0x5c, 0xec, 0xae, 0x76, 0x85, 0x48, - 0x35, 0x68, 0x05, 0x26, 0xf9, 0x5b, 0x03, 0x2e, 0x65, 0xa3, 0x2c, 0x39, 0x3d, 0x95, 0xcc, 0x43, - 0xca, 0x27, 0x29, 0xa9, 0xa3, 0x62, 0x38, 0x8e, 0xa8, 0xf8, 0x5e, 0xbc, 0x90, 0x58, 0xc7, 0xc7, - 0xf7, 0x00, 0x26, 0x75, 0xa1, 0x1f, 0x89, 0x09, 0x4a, 0xd4, 0x05, 0x52, 0x3b, 0x54, 0x87, 0xf9, - 0x0d, 0xcb, 0xa6, 0x46, 0x42, 0x7e, 0x23, 0x28, 0xee, 0xf3, 0x50, 0x29, 0xe3, 0x82, 0xaf, 0x86, - 0x9d, 0x66, 0xb1, 0x5b, 0xfc, 0x1a, 0xba, 0x6d, 0x6a, 0x42, 0x76, 0xd5, 0xef, 0x43, 0x91, 0xa1, - 0x27, 0xc5, 0x4a, 0xba, 0xe2, 0x2e, 0xa6, 0x79, 0x65, 0xa0, 0x0d, 0x2a, 0x3c, 0x47, 0x28, 0x2a, - 0x6b, 0xe2, 0xcc, 0xe4, 0x16, 0xe8, 0x8b, 0x97, 0xc0, 0x8e, 0xba, 0x57, 0xf8, 0x28, 0x85, 0x71, - 0xa9, 0xc4, 0xee, 0xe4, 0xd0, 0xb7, 0x74, 0x57, 0x27, 0x92, 0xdb, 0xb7, 0x83, 0x23, 0x2e, 0x95, - 0x5c, 0x48, 0x24, 0xc0, 0x37, 0x4a, 0x06, 0x75, 0x13, 0x66, 0x93, 0x1c, 0x41, 0x24, 0x43, 0x33, - 0xbc, 0x44, 0x52, 0x57, 0x81, 0x49, 0x54, 0x80, 0x66, 0xfa, 0x24, 0x65, 0xf8, 0x21, 0xa4, 0xd2, - 0xfc, 0x0c, 0x26, 0xc9, 0x2a, 0x79, 0x8c, 0x71, 0xbb, 0xdc, 0xb2, 0x9f, 0x61, 0x1f, 0x89, 0xd8, - 0x4e, 0xb2, 0x28, 0x0d, 0xf7, 0x46, 0x0e, 0x7d, 0x07, 0xc6, 0xf6, 0xad, 0xa0, 0x71, 0xc4, 0x43, - 0x91, 0x88, 0x48, 0x25, 0xb4, 0xac, 0x28, 0x7e, 0xd1, 0xca, 0x3b, 0x39, 0xf4, 0x39, 0x0c, 0x3f, - 0xc4, 0x01, 0x7d, 0x36, 0x70, 0x45, 0xde, 0x89, 0x32, 0xff, 0xa3, 0x35, 0x47, 0x7a, 0x2b, 0x8a, - 0x0e, 0x47, 0x4d, 0x92, 0xe8, 0x36, 0x00, 0x3b, 0x10, 0x28, 0x85, 0x68, 0x75, 0x31, 0xd6, 0x6d, - 0xf4, 0x90, 0x88, 0x0c, 0x2d, 0x1c, 0xe0, 0x5e, 0x9b, 0x4c, 0xe3, 0xd1, 0x3a, 0x4c, 0xca, 0x08, - 0xdd, 0x9b, 0xf4, 0xdd, 0x99, 0x11, 0x21, 0xe6, 0x9f, 0x81, 0xda, 0x27, 0x64, 0x57, 0xb0, 0x14, - 0x4e, 0x32, 0xee, 0x15, 0x4a, 0x8b, 0x84, 0x25, 0x99, 0xc8, 0xc0, 0x14, 0xdc, 0x55, 0xd7, 0x0f, - 0x74, 0x5c, 0x59, 0x92, 0x8c, 0x8b, 0xa1, 0xa8, 0xb6, 0xab, 0xc7, 0xc0, 0x0a, 0xcf, 0xdc, 0xb4, - 0xd0, 0x5d, 0xc5, 0x2b, 0x19, 0x10, 0xec, 0xb8, 0xa3, 0x27, 0xc9, 0x32, 0xcc, 0x88, 0x66, 0xb6, - 0xda, 0xd8, 0xa9, 0xd5, 0x56, 0x69, 0x08, 0x24, 0x71, 0x13, 0xaa, 0x94, 0x09, 0xc2, 0x28, 0x5e, - 0x45, 0xbe, 0x7a, 0x5a, 0xec, 0xa5, 0xf0, 0xab, 0x97, 0x10, 0x1c, 0x2b, 0xfc, 0xea, 0x25, 0x86, - 0x6b, 0x7a, 0xcc, 0xec, 0x3c, 0x9a, 0x3c, 0xbe, 0xb7, 0x84, 0x32, 0x74, 0x92, 0x62, 0x8a, 0x54, - 0x7f, 0x27, 0x87, 0xbe, 0x01, 0x14, 0xd7, 0x12, 0x24, 0xf7, 0x52, 0x35, 0x22, 0xc9, 0xbd, 0x0c, - 0x15, 0x63, 0x05, 0x66, 0xe4, 0x0b, 0xc4, 0xb0, 0x1e, 0xa5, 0xf4, 0x25, 0xe3, 0xe3, 0x35, 0x97, - 0x40, 0x66, 0x6f, 0x29, 0x83, 0x50, 0x62, 0x39, 0xba, 0x0f, 0x33, 0x7c, 0xd9, 0x6b, 0xfd, 0x29, - 0xc8, 0x13, 0x8c, 0xeb, 0x1b, 0xa9, 0x3d, 0x79, 0x04, 0x73, 0xb5, 0x08, 0xe3, 0x99, 0xeb, 0xd1, - 0x79, 0x9d, 0x04, 0x2d, 0xac, 0xe1, 0x80, 0x71, 0x3e, 0x99, 0xd6, 0x63, 0x40, 0xcc, 0xdc, 0x23, - 0xc8, 0x3d, 0xb3, 0xf1, 0x73, 0x74, 0x31, 0xd2, 0x75, 0x52, 0x48, 0xc1, 0xe8, 0x11, 0x98, 0x3a, - 0xb2, 0x1d, 0x96, 0xc2, 0x8c, 0xe5, 0x7e, 0xb6, 0xda, 0xd6, 0x81, 0xdd, 0xb2, 0x03, 0x1b, 0x93, - 0x79, 0x54, 0x11, 0xd4, 0x2a, 0x31, 0x8f, 0xe7, 0x53, 0x21, 0xd0, 0xaf, 0xd2, 0xd8, 0x3f, 0xd9, - 0x0a, 0x13, 0xfa, 0x4e, 0x92, 0x5e, 0x9b, 0xa2, 0xf2, 0x15, 0xdf, 0xed, 0x0d, 0x58, 0xaa, 0xa8, - 0x13, 0x0f, 0x71, 0xc0, 0xb2, 0x35, 0x2f, 0x5b, 0x81, 0x85, 0xa4, 0x39, 0x48, 0x16, 0xf1, 0xe5, - 0x2d, 0x53, 0xc6, 0xca, 0x8a, 0x1a, 0xfe, 0x11, 0x5a, 0x83, 0x02, 0xfb, 0x82, 0x28, 0x24, 0x2e, - 0xc6, 0x48, 0x70, 0x10, 0xcb, 0xb3, 0x8e, 0xfd, 0xd4, 0xd9, 0xba, 0xcd, 0xee, 0xfb, 0x91, 0x4c, - 0x74, 0xab, 0x88, 0xa8, 0x33, 0x5a, 0x99, 0x0c, 0xb4, 0x48, 0x66, 0xc4, 0xc4, 0x3e, 0x0e, 0xc4, - 0x53, 0x45, 0x96, 0xb6, 0xe9, 0x6a, 0x28, 0x2e, 0xc4, 0x6b, 0xc3, 0x13, 0x24, 0xf2, 0xac, 0x7e, - 0xef, 0x1e, 0x92, 0xa9, 0xac, 0x12, 0x88, 0x5e, 0xd7, 0xa4, 0x9a, 0xb3, 0xd1, 0xfd, 0x02, 0x46, - 0x19, 0x5a, 0xc5, 0x0d, 0xe4, 0xd1, 0x2b, 0x4b, 0x04, 0xe6, 0x42, 0xbc, 0x82, 0x8f, 0xf4, 0x33, - 0x18, 0x95, 0x59, 0xf5, 0x25, 0x7e, 0x34, 0xcf, 0x7e, 0x2a, 0x63, 0x3f, 0x86, 0x31, 0x25, 0xc3, - 0xbe, 0xdc, 0x48, 0xf1, 0xac, 0xfb, 0xc5, 0x09, 0xa5, 0xef, 0x7b, 0x4b, 0x77, 0x72, 0xe8, 0x36, - 0xfd, 0xfc, 0xd2, 0x77, 0xa5, 0x73, 0x21, 0x9a, 0x92, 0x9e, 0x35, 0x82, 0x82, 0xbe, 0x4b, 0xc3, - 0x6f, 0x55, 0x3b, 0x9e, 0x87, 0x1d, 0x86, 0x97, 0x26, 0x65, 0x45, 0x10, 0xbf, 0xa0, 0x07, 0xae, - 0x82, 0xc8, 0xdc, 0xbb, 0xbb, 0x61, 0xb3, 0xc0, 0xee, 0x77, 0x72, 0xe8, 0x1e, 0x8c, 0xf0, 0x9e, - 0x11, 0x24, 0xad, 0xab, 0xe9, 0xc3, 0xbb, 0x07, 0xc0, 0x98, 0x4d, 0x7b, 0xaa, 0x57, 0xa7, 0xb2, - 0xf3, 0x1e, 0x91, 0x29, 0x9a, 0x67, 0x44, 0xfa, 0x42, 0xc8, 0x15, 0x14, 0x69, 0x41, 0x9b, 0x42, - 0x95, 0x9d, 0x69, 0xf8, 0x44, 0x29, 0xa0, 0x21, 0x3b, 0xe4, 0xcb, 0x7b, 0xa9, 0x14, 0x68, 0xc5, - 0xdd, 0xe8, 0xac, 0x41, 0xa1, 0xdc, 0xa0, 0xdf, 0x3a, 0x99, 0xf2, 0x56, 0x6a, 0x64, 0xd1, 0x0a, - 0x41, 0x6b, 0x2e, 0x9a, 0x41, 0x77, 0x1d, 0x5b, 0x34, 0x22, 0xd9, 0xbc, 0x94, 0x9b, 0x22, 0x55, - 0xc9, 0x18, 0x19, 0x1a, 0xd8, 0x6c, 0x95, 0xe8, 0x8c, 0xad, 0xd7, 0x23, 0xf3, 0x09, 0x3d, 0xcb, - 0x94, 0x74, 0xc0, 0xe7, 0xa2, 0xf8, 0x52, 0x57, 0x15, 0x7e, 0x9c, 0x12, 0xb4, 0x0c, 0x53, 0x3c, - 0xfe, 0x91, 0x64, 0x4b, 0x1a, 0x76, 0x5a, 0xf3, 0xdf, 0x85, 0xc9, 0x15, 0xf2, 0xad, 0xe9, 0x34, - 0x6d, 0x16, 0x85, 0x11, 0xe9, 0x61, 0xf5, 0x52, 0x11, 0x57, 0x61, 0x5a, 0x3c, 0x76, 0x97, 0x79, - 0x72, 0xe5, 0x2e, 0x8d, 0xa7, 0x22, 0x2e, 0xce, 0x0a, 0xb2, 0x6a, 0x4a, 0x5d, 0x6e, 0xc8, 0x98, - 0x4f, 0xc9, 0x4c, 0x8b, 0xae, 0x69, 0xfa, 0x71, 0x5a, 0x7a, 0xd9, 0x04, 0x89, 0xf8, 0x6b, 0x25, - 0x09, 0x58, 0x0a, 0xcd, 0xec, 0x94, 0xb5, 0xa9, 0xe3, 0x96, 0x71, 0xd3, 0x12, 0x53, 0xcb, 0xa2, - 0x77, 0x74, 0xea, 0x19, 0xe9, 0x67, 0x53, 0x5b, 0xa0, 0xf6, 0x07, 0x3d, 0xf3, 0x29, 0xba, 0x94, - 0x9d, 0xa0, 0x55, 0xb1, 0x3f, 0xa4, 0xa4, 0x4c, 0x7d, 0x44, 0x97, 0x59, 0x98, 0x29, 0x0c, 0xa9, - 0xda, 0x7c, 0x34, 0x51, 0x9a, 0x14, 0x33, 0x93, 0xd3, 0x9f, 0x6e, 0xc3, 0x54, 0x24, 0xb1, 0xa8, - 0x34, 0x3b, 0x25, 0xa7, 0x36, 0x2d, 0x5e, 0x4a, 0xab, 0x96, 0xe6, 0xd9, 0x42, 0x34, 0x1b, 0xa3, - 0x1c, 0x72, 0x4a, 0x26, 0x4c, 0x39, 0xe4, 0xd4, 0x34, 0x8e, 0x8f, 0xa0, 0x10, 0x4d, 0x04, 0x27, - 0x89, 0xa6, 0x64, 0x88, 0xcb, 0x38, 0xc9, 0x66, 0xd5, 0x19, 0x95, 0xe3, 0x4e, 0x3b, 0xe9, 0xd3, - 0xe8, 0xec, 0xc0, 0x5c, 0x62, 0xde, 0x36, 0xf9, 0xf5, 0xcf, 0xca, 0xea, 0x96, 0x4a, 0x15, 0xc3, - 0xb9, 0xe4, 0xd4, 0x8d, 0xe8, 0x2d, 0xdd, 0xaa, 0x91, 0x9c, 0xc8, 0xae, 0x78, 0xad, 0x0b, 0x14, - 0x67, 0xe8, 0xb7, 0xf4, 0x6b, 0x17, 0x6b, 0xe3, 0x8a, 0x62, 0xe7, 0x48, 0x69, 0xc0, 0xc8, 0x02, - 0x91, 0x6b, 0x60, 0x36, 0x29, 0x75, 0x6c, 0x2a, 0x8b, 0xaf, 0xa6, 0xd3, 0x0c, 0x17, 0xd6, 0x9e, - 0x08, 0x32, 0x96, 0xca, 0x99, 0xcc, 0x14, 0x7f, 0x19, 0x8a, 0x72, 0x51, 0xae, 0x87, 0xde, 0xbb, - 0x9c, 0x6e, 0xf4, 0x9a, 0x4d, 0x4a, 0x2c, 0x19, 0xb5, 0x49, 0x25, 0xe5, 0x0d, 0x94, 0x6c, 0xc8, - 0xcc, 0x4c, 0xb9, 0xc7, 0xec, 0x53, 0x3a, 0x75, 0xd5, 0x3e, 0x95, 0x48, 0xfa, 0x72, 0x3a, 0x40, - 0xb8, 0x22, 0x12, 0x32, 0xe4, 0x22, 0x55, 0x05, 0x4c, 0x4e, 0x29, 0x28, 0x57, 0x44, 0x56, 0x82, - 0x5d, 0x53, 0x6c, 0xba, 0x14, 0xb6, 0x64, 0xa4, 0x53, 0xcc, 0xd0, 0xd4, 0x16, 0xc2, 0x89, 0x8b, - 0x74, 0xfb, 0xac, 0xd3, 0xf6, 0x2d, 0x9c, 0x4f, 0x4d, 0x9d, 0x88, 0xde, 0x8e, 0x6d, 0xe8, 0x14, - 0x4e, 0xa4, 0xf7, 0x74, 0x42, 0xcb, 0x7a, 0x28, 0x0d, 0x74, 0x91, 0x04, 0x8b, 0xb1, 0x13, 0x3b, - 0x21, 0xfb, 0xe2, 0x43, 0x2a, 0xe0, 0x2a, 0x19, 0x14, 0x53, 0xc7, 0x7a, 0x31, 0x89, 0x8e, 0x1f, - 0x3f, 0x53, 0x95, 0x7e, 0x09, 0x49, 0x2c, 0x5a, 0x71, 0x96, 0x33, 0xb5, 0x97, 0xae, 0xa5, 0xd1, - 0x59, 0xa6, 0x9a, 0x82, 0x48, 0xa8, 0x88, 0xce, 0x6b, 0x6c, 0xd2, 0xbe, 0x92, 0x45, 0x6d, 0x70, - 0xfa, 0x07, 0xb2, 0x4a, 0x2d, 0xe1, 0x32, 0x81, 0x63, 0x6a, 0x2f, 0x2e, 0xc4, 0x69, 0x68, 0x56, - 0x70, 0xc9, 0x05, 0xd6, 0x9b, 0xc5, 0x28, 0x73, 0xb4, 0x0e, 0xa5, 0x0f, 0x09, 0xa9, 0xac, 0xe9, - 0xd2, 0xa5, 0x74, 0x09, 0x75, 0x86, 0xc9, 0xfc, 0x2c, 0x0a, 0xb0, 0x88, 0x05, 0x72, 0x4e, 0x9a, - 0xf4, 0x94, 0xd2, 0x0c, 0x33, 0xcb, 0x36, 0x75, 0xf9, 0x4e, 0xc8, 0x45, 0x29, 0xcf, 0xd0, 0xcc, - 0x54, 0x95, 0x09, 0xd2, 0x99, 0x3c, 0x95, 0x53, 0x29, 0x66, 0x26, 0xa7, 0x4c, 0xed, 0xe9, 0x0f, - 0x94, 0x53, 0x39, 0x96, 0x71, 0x12, 0xdd, 0x88, 0x8a, 0x66, 0x69, 0x49, 0x29, 0x33, 0x4e, 0xfd, - 0xd9, 0xa4, 0x64, 0x95, 0x8a, 0x59, 0x3a, 0x35, 0x93, 0x65, 0x02, 0x17, 0xe4, 0xf1, 0x96, 0x42, - 0x2d, 0x23, 0x75, 0x65, 0x6a, 0x0f, 0xbf, 0xa7, 0x1c, 0x6f, 0x91, 0x14, 0x93, 0xd2, 0x16, 0xd0, - 0x25, 0x07, 0x65, 0x2a, 0xed, 0x4d, 0xfa, 0x48, 0x20, 0x9e, 0x1f, 0x52, 0xca, 0x2e, 0x59, 0xd9, - 0x23, 0x13, 0xad, 0xd6, 0x73, 0xf1, 0x21, 0x12, 0x7a, 0xe7, 0x22, 0x36, 0xe7, 0x6e, 0x1d, 0x93, - 0xe7, 0x70, 0x42, 0x5e, 0xc9, 0xc8, 0x39, 0x9c, 0x9e, 0x79, 0x32, 0x43, 0xd1, 0x99, 0xaa, 0xd9, - 0x87, 0x8e, 0x92, 0x16, 0x52, 0xaa, 0x39, 0xf1, 0x4c, 0x95, 0xf2, 0x88, 0x49, 0xca, 0x22, 0xb9, - 0x45, 0x24, 0x1c, 0x26, 0x9f, 0xab, 0x09, 0xfe, 0x50, 0x31, 0x3d, 0xaf, 0xa1, 0x3c, 0x6e, 0x12, - 0x33, 0x02, 0x2a, 0x04, 0xd5, 0xec, 0x7a, 0x92, 0x60, 0x42, 0xa2, 0x3f, 0x49, 0x30, 0x31, 0x1d, - 0x1f, 0xb3, 0x9c, 0x98, 0x6e, 0x0b, 0xab, 0x96, 0x13, 0x25, 0xad, 0x5c, 0xc4, 0x84, 0x81, 0x3e, - 0xa5, 0x06, 0x8c, 0x6c, 0xab, 0xc7, 0xbc, 0x4e, 0x49, 0xf5, 0x34, 0x19, 0x95, 0xb9, 0xf0, 0xa4, - 0x81, 0x28, 0x9a, 0x8e, 0x4f, 0x1a, 0x98, 0xe2, 0x69, 0xf3, 0xee, 0x89, 0x7b, 0x12, 0xda, 0x61, - 0xbd, 0x67, 0xdd, 0x6d, 0x1a, 0x14, 0x49, 0xb7, 0x69, 0xa8, 0x03, 0x4d, 0x37, 0xcf, 0x8e, 0xab, - 0x69, 0x4d, 0x24, 0xaf, 0x13, 0x72, 0x2f, 0x49, 0x5e, 0x27, 0x65, 0x34, 0xa2, 0xaa, 0xef, 0x8e, - 0x50, 0xe0, 0x43, 0x7a, 0x17, 0x33, 0x53, 0x12, 0x15, 0x2f, 0x65, 0xe7, 0xf1, 0xe1, 0x57, 0x9c, - 0x85, 0x68, 0xe6, 0x15, 0x94, 0x94, 0x51, 0x4a, 0x49, 0x68, 0x23, 0xb5, 0xa9, 0xd4, 0x94, 0x2d, - 0xdb, 0xc2, 0x46, 0xae, 0xd3, 0x4d, 0xc9, 0x2b, 0xa4, 0x92, 0xce, 0x16, 0x70, 0xc2, 0x24, 0x2c, - 0xaa, 0x4a, 0x1a, 0x4b, 0xf2, 0xa2, 0x0a, 0x38, 0x09, 0x79, 0x5b, 0x6c, 0xf1, 0xcc, 0x3e, 0x39, - 0xb7, 0xe1, 0x3b, 0xba, 0xae, 0x98, 0x11, 0x9e, 0xaf, 0xeb, 0x25, 0x32, 0xfa, 0x25, 0x98, 0x4f, - 0x09, 0xd8, 0x86, 0xae, 0x45, 0xac, 0xad, 0xc9, 0x01, 0xdd, 0x8a, 0x59, 0x29, 0xc2, 0xd0, 0x06, - 0xf5, 0x3e, 0xd8, 0x5a, 0x5b, 0xae, 0x72, 0x37, 0x09, 0xd7, 0x8b, 0xdd, 0xe8, 0xed, 0xdb, 0xc1, - 0x11, 0x4b, 0x6a, 0xa7, 0x9c, 0x5e, 0x0c, 0x44, 0x43, 0xdc, 0xbb, 0x87, 0x6a, 0x54, 0xf2, 0xd7, - 0x4a, 0x13, 0x2e, 0xf5, 0x12, 0x08, 0x16, 0x93, 0x09, 0xd2, 0xfc, 0xc2, 0x54, 0xb0, 0x20, 0x1b, - 0x4f, 0xef, 0x66, 0x4a, 0x1f, 0xb2, 0xe4, 0x13, 0xb6, 0x6c, 0x92, 0xc9, 0xf4, 0x7a, 0xfc, 0xcb, - 0x6b, 0xa0, 0xc8, 0x8b, 0x52, 0xad, 0x3f, 0x4a, 0x79, 0x31, 0xa5, 0x1c, 0x6d, 0x52, 0x8f, 0x9a, - 0x68, 0xa9, 0xa2, 0x05, 0x25, 0x3f, 0x59, 0x4d, 0xa5, 0xc7, 0xa6, 0x92, 0x88, 0xfd, 0xaf, 0x34, - 0x95, 0x1a, 0xe2, 0xde, 0x12, 0x9f, 0x4a, 0xad, 0xf4, 0x6c, 0x53, 0x19, 0x21, 0xa8, 0x4f, 0xa5, - 0xde, 0xcd, 0x94, 0x3e, 0x74, 0x9f, 0xca, 0x64, 0x32, 0x67, 0x9e, 0xca, 0xc8, 0x73, 0x5e, 0xad, - 0x3f, 0x49, 0x53, 0x19, 0x85, 0x67, 0x53, 0x19, 0x2d, 0x8d, 0x28, 0xb4, 0x19, 0x53, 0x19, 0xc5, - 0xfc, 0x8a, 0xd2, 0x63, 0xef, 0x85, 0xcf, 0x34, 0x99, 0x22, 0xec, 0x5c, 0x04, 0x75, 0xef, 0x1e, - 0xda, 0xa7, 0xd6, 0x94, 0x48, 0x79, 0x6f, 0x13, 0xba, 0x98, 0x46, 0x94, 0x4e, 0xe9, 0x9a, 0x90, - 0xd3, 0xa2, 0xdd, 0x4d, 0xed, 0x4b, 0xd6, 0x7c, 0xb0, 0x69, 0x8d, 0x92, 0x3a, 0xeb, 0xc4, 0x6e, - 0x88, 0x43, 0x33, 0xf6, 0xe4, 0x3a, 0xd2, 0x2b, 0x75, 0x72, 0x53, 0x6b, 0xd0, 0x0e, 0xb5, 0x15, - 0xc5, 0xcb, 0x15, 0x3b, 0x53, 0xda, 0xdb, 0xee, 0xae, 0x54, 0x63, 0x6f, 0xb8, 0x55, 0xaa, 0x69, - 0x0f, 0xbc, 0x25, 0xd5, 0x38, 0xf6, 0x7d, 0xaa, 0x7b, 0xf3, 0x27, 0x24, 0xce, 0x13, 0x37, 0x5d, - 0x50, 0x9a, 0xd1, 0x3c, 0x3d, 0x08, 0x2c, 0x75, 0xb0, 0xf9, 0x8c, 0xdf, 0x10, 0x88, 0xc2, 0x54, - 0xe6, 0x27, 0xe1, 0xa3, 0xfb, 0x50, 0xe0, 0x1b, 0x3c, 0x24, 0x90, 0x04, 0x98, 0x3a, 0x75, 0x15, - 0xa1, 0xf2, 0xf7, 0xd0, 0x83, 0x5e, 0x54, 0xfd, 0x5e, 0x38, 0x91, 0xae, 0x17, 0x93, 0x23, 0x70, - 0xc7, 0x23, 0x2a, 0x6b, 0x33, 0xae, 0xcf, 0xea, 0x9d, 0x11, 0x97, 0xc2, 0x3a, 0xf8, 0xde, 0x12, - 0x5a, 0xa3, 0x9b, 0x59, 0x2f, 0xce, 0x52, 0xf8, 0x93, 0xc9, 0xd0, 0xbd, 0xb6, 0x2a, 0xdf, 0x2a, - 0xe8, 0x7d, 0x4a, 0x6b, 0x3b, 0xbd, 0x53, 0x92, 0x45, 0x3d, 0x8e, 0x2e, 0x8d, 0x45, 0x4c, 0x22, - 0x67, 0xc6, 0x87, 0x6e, 0x9c, 0x89, 0xbe, 0x9e, 0x40, 0x5f, 0xc2, 0xa8, 0x40, 0xee, 0xce, 0x90, - 0x28, 0x36, 0x65, 0xc8, 0x32, 0x4c, 0x68, 0x4f, 0x43, 0xa4, 0x50, 0x97, 0xf4, 0x60, 0x24, 0x63, - 0x9e, 0x27, 0xb4, 0x27, 0x20, 0x92, 0x4a, 0xd2, 0xc3, 0x90, 0x54, 0x2a, 0x9f, 0xc3, 0x18, 0x67, - 0x69, 0x26, 0x37, 0xd2, 0xb5, 0xfd, 0x39, 0xc5, 0x9d, 0xb3, 0xd3, 0xb4, 0x83, 0xaa, 0xeb, 0x3c, - 0xb1, 0x0f, 0xbb, 0x32, 0x26, 0x8e, 0xb2, 0xb7, 0x84, 0xf6, 0x68, 0x42, 0x1f, 0x91, 0x66, 0x09, - 0x07, 0xcf, 0x5d, 0xef, 0xa9, 0xed, 0x1c, 0x76, 0x21, 0x79, 0x59, 0x27, 0x19, 0xc5, 0x63, 0x74, - 0x6b, 0xe9, 0x74, 0xbb, 0xe2, 0x67, 0x68, 0xfb, 0x8b, 0xd4, 0x5d, 0xe0, 0xac, 0x3d, 0x4e, 0xbf, - 0xf9, 0x38, 0x1f, 0x3a, 0x42, 0x9a, 0xb8, 0xe1, 0x7a, 0xcd, 0xee, 0xc4, 0x4a, 0xba, 0xdb, 0x61, - 0x04, 0x6d, 0x6f, 0x89, 0x50, 0xad, 0xa5, 0x52, 0xed, 0x86, 0x9d, 0xf1, 0xb5, 0xba, 0x40, 0xc7, - 0x7e, 0xc6, 0xde, 0x66, 0x9f, 0x5a, 0xe4, 0x4b, 0xb3, 0xed, 0xe1, 0x27, 0xd8, 0xa3, 0xde, 0xac, - 0xdd, 0xfc, 0x38, 0x75, 0xf0, 0xbd, 0x25, 0x42, 0xa5, 0x16, 0xa3, 0x92, 0x06, 0x9d, 0x25, 0xa8, - 0xd1, 0xa1, 0xf5, 0xd8, 0x9b, 0x34, 0x32, 0x1f, 0x51, 0x9b, 0xeb, 0xee, 0x5a, 0x17, 0x8e, 0x08, - 0xff, 0x6a, 0x01, 0xb8, 0x77, 0x97, 0x60, 0xd6, 0x14, 0xcc, 0x38, 0x44, 0x6a, 0x9b, 0x5f, 0x0a, - 0xe3, 0x6a, 0xd7, 0x66, 0xd3, 0x9d, 0x20, 0x46, 0x65, 0xb2, 0x41, 0xa4, 0x98, 0x25, 0xb4, 0x54, - 0x7a, 0xc5, 0x09, 0xd5, 0x9b, 0xd3, 0x47, 0x65, 0x26, 0xc5, 0xab, 0x49, 0xf7, 0x94, 0xeb, 0xd8, - 0xc4, 0x6c, 0x7c, 0x51, 0x12, 0xcc, 0xac, 0xb2, 0xee, 0x36, 0x9e, 0xaa, 0x66, 0x15, 0x25, 0x8b, - 0x5b, 0x51, 0xcf, 0xb1, 0xc6, 0x0f, 0x71, 0x9a, 0x68, 0x4d, 0xf5, 0x0b, 0x51, 0xf3, 0xb8, 0xa9, - 0x66, 0x15, 0x3d, 0xe3, 0x9c, 0x34, 0x8b, 0xd0, 0x06, 0x75, 0xca, 0xdd, 0xcd, 0x22, 0x14, 0x49, - 0x37, 0x8b, 0xa8, 0x1d, 0x4d, 0x3f, 0x2e, 0x50, 0x3c, 0xe5, 0x9c, 0x14, 0xb8, 0x53, 0xb3, 0xd1, - 0x65, 0xb8, 0x7c, 0xcc, 0x24, 0x64, 0xc9, 0x94, 0xe6, 0x86, 0xf4, 0x0c, 0x9a, 0x45, 0xdd, 0x7f, - 0xe1, 0x4e, 0x0e, 0x6d, 0xc2, 0xb9, 0x87, 0x38, 0xe0, 0x07, 0x98, 0x89, 0xfd, 0xc0, 0xb3, 0x1b, - 0x41, 0xe6, 0x4d, 0x83, 0x90, 0xaf, 0x13, 0x70, 0xf6, 0xde, 0x27, 0xf4, 0x6a, 0xc9, 0xf4, 0x32, - 0xf1, 0x32, 0x2c, 0x4a, 0xdc, 0x7c, 0x79, 0x96, 0x2e, 0xa6, 0x2f, 0xf1, 0x61, 0x76, 0x69, 0x9f, - 0x8e, 0x5a, 0x08, 0x63, 0x1a, 0x70, 0x8d, 0xe1, 0x16, 0x0c, 0x31, 0xa4, 0xd4, 0x6f, 0xe4, 0xb8, - 0x8a, 0x83, 0xee, 0x0a, 0xcf, 0x30, 0x82, 0xa2, 0x55, 0xa5, 0xf6, 0xeb, 0x2e, 0x8c, 0xb2, 0xbb, - 0x88, 0xde, 0x51, 0x3e, 0x15, 0xfe, 0x63, 0x59, 0x1d, 0x4b, 0x43, 0xbe, 0x0f, 0x13, 0xea, 0x85, - 0xfd, 0xd9, 0x19, 0xf9, 0x39, 0xbd, 0x0f, 0x12, 0x66, 0xd7, 0x74, 0xfc, 0xb9, 0x48, 0x5c, 0x71, - 0xce, 0x52, 0x76, 0x40, 0xca, 0x74, 0xb3, 0x69, 0xdd, 0x9f, 0x8e, 0x61, 0xa3, 0x4f, 0xc5, 0xcb, - 0x0e, 0x89, 0x1c, 0x07, 0xca, 0xe0, 0xd9, 0x24, 0x63, 0xf3, 0xab, 0x20, 0xcb, 0x03, 0xb6, 0x6b, - 0xb7, 0x7b, 0xb9, 0xb7, 0xea, 0xce, 0xba, 0x34, 0x2a, 0x5b, 0x54, 0xf0, 0x8a, 0x45, 0xbc, 0x4f, - 0x27, 0x74, 0x29, 0x3d, 0x48, 0x3e, 0x9d, 0x8c, 0x47, 0x54, 0xb1, 0x8b, 0xa7, 0x0e, 0x4e, 0x1b, - 0x5e, 0x46, 0xd0, 0xfd, 0x50, 0x93, 0x8d, 0x93, 0xcb, 0x40, 0xcb, 0x52, 0x8c, 0xf9, 0x2b, 0xb5, - 0x37, 0x42, 0x6e, 0x4d, 0xf8, 0x3d, 0xf5, 0x3e, 0xd8, 0x0c, 0x21, 0x28, 0xe1, 0xa6, 0xac, 0xeb, - 0x5c, 0xa4, 0x91, 0xfb, 0x25, 0x2a, 0xff, 0x25, 0xe7, 0x0b, 0x4d, 0x25, 0x76, 0x43, 0xb9, 0x6c, - 0xcd, 0xce, 0x34, 0xfa, 0x94, 0x3e, 0x99, 0x49, 0xce, 0x09, 0x70, 0xbd, 0x0b, 0x15, 0xc1, 0x89, - 0xb7, 0xbb, 0xc2, 0xc9, 0x7b, 0x97, 0x0b, 0xec, 0x0b, 0x9b, 0xdc, 0x5e, 0x97, 0x1c, 0x07, 0x09, - 0x57, 0x61, 0x29, 0xc9, 0x38, 0x05, 0x41, 0xdd, 0xa9, 0x2c, 0x73, 0x0c, 0x69, 0xec, 0xff, 0x0a, - 0x4a, 0xe1, 0x8d, 0xf2, 0xd9, 0x26, 0x21, 0x5d, 0xa2, 0x47, 0xf1, 0x14, 0xa5, 0x28, 0x2b, 0x0c, - 0x73, 0xf1, 0x4a, 0x1a, 0x87, 0x7d, 0xc5, 0x55, 0x81, 0xfb, 0xc2, 0x44, 0xb2, 0x63, 0xa4, 0xe5, - 0xd9, 0xc8, 0xb0, 0x5d, 0xf1, 0x37, 0x44, 0x6f, 0x84, 0x50, 0x7c, 0xb6, 0xcf, 0x4e, 0x48, 0x5e, - 0xf8, 0x46, 0x08, 0x19, 0x19, 0xd3, 0x7b, 0x16, 0x7f, 0x96, 0xe8, 0x54, 0x9c, 0x75, 0x42, 0xad, - 0xf0, 0xdd, 0x4c, 0x3c, 0x8f, 0xaa, 0x94, 0xe5, 0x52, 0x73, 0xba, 0xca, 0xd9, 0xcd, 0x48, 0xc2, - 0x5a, 0x25, 0xdb, 0x94, 0x35, 0xa1, 0x25, 0x71, 0xac, 0x9a, 0xeb, 0xa1, 0xa5, 0x20, 0x21, 0xbb, - 0x63, 0x11, 0x44, 0xa5, 0xb9, 0x8e, 0x6a, 0x50, 0x64, 0x4b, 0x24, 0x29, 0x8a, 0x86, 0x74, 0xe4, - 0x4f, 0xaa, 0xcc, 0xd0, 0x2e, 0x6a, 0x50, 0x64, 0xcb, 0xe5, 0x4d, 0x12, 0xad, 0xd3, 0x84, 0xdd, - 0x89, 0x14, 0xaf, 0x29, 0x2f, 0x46, 0xd3, 0x63, 0x93, 0x14, 0xb3, 0x1b, 0x46, 0xdf, 0x87, 0xb9, - 0xc4, 0xe0, 0x24, 0xf2, 0x4e, 0x3e, 0x2b, 0x74, 0x49, 0x37, 0xe2, 0x4f, 0x61, 0x21, 0x2d, 0xe3, - 0x62, 0xf8, 0xb0, 0x20, 0x3b, 0x0d, 0xa6, 0x3c, 0x53, 0xbb, 0xa6, 0x6e, 0xdc, 0x84, 0xd9, 0xa4, - 0x2c, 0x86, 0x72, 0x73, 0x64, 0xa4, 0x38, 0x4c, 0x7c, 0xbd, 0xb0, 0x0d, 0x73, 0x89, 0x99, 0x04, - 0x25, 0x67, 0xb2, 0xf2, 0x0c, 0x26, 0x52, 0xfc, 0x1a, 0xe6, 0x53, 0xd2, 0xe6, 0x85, 0x17, 0x7f, - 0x99, 0x69, 0xf5, 0x32, 0x1c, 0x18, 0x8a, 0xe9, 0x19, 0xd9, 0xa4, 0xdf, 0x4a, 0xd7, 0xa4, 0x6d, - 0xc5, 0xc4, 0x34, 0x95, 0x68, 0x87, 0x2e, 0xc2, 0xa4, 0x14, 0x6d, 0xea, 0x22, 0xcc, 0x48, 0xe1, - 0x96, 0xf2, 0xea, 0x64, 0x3e, 0x25, 0x2b, 0x5b, 0x06, 0xd5, 0x1e, 0x7a, 0xbb, 0x29, 0xce, 0x7f, - 0x3d, 0x4d, 0x57, 0xc4, 0x17, 0x32, 0x31, 0x87, 0x57, 0x62, 0x3f, 0x95, 0x97, 0xe0, 0xad, 0x56, - 0x86, 0x18, 0x84, 0xd4, 0xa7, 0xe0, 0x04, 0x92, 0xda, 0xce, 0x27, 0x54, 0xdc, 0xac, 0x13, 0x35, - 0x86, 0x4c, 0x05, 0xcf, 0x4f, 0x60, 0xbc, 0xa6, 0x36, 0x9e, 0xd0, 0x48, 0xea, 0xa2, 0x90, 0xce, - 0xfd, 0xdd, 0xfb, 0xde, 0xf5, 0x56, 0xae, 0xdc, 0x6a, 0xf5, 0x34, 0x8a, 0xd4, 0x8b, 0x7a, 0x2d, - 0x36, 0xbf, 0x3c, 0xa9, 0x93, 0xd2, 0x5e, 0xc8, 0x8b, 0xfa, 0xe4, 0x70, 0xfe, 0x75, 0x16, 0x4d, - 0x38, 0x9a, 0xd5, 0x04, 0x19, 0xdd, 0xb3, 0xf5, 0x48, 0x57, 0xd7, 0xcc, 0xb4, 0x28, 0xcc, 0xab, - 0x20, 0xcc, 0x46, 0xa0, 0x7a, 0x15, 0xc4, 0x72, 0x1c, 0xa8, 0x5e, 0x05, 0x09, 0x09, 0x0c, 0x56, - 0x28, 0xad, 0x30, 0x0c, 0x73, 0x86, 0xc1, 0x40, 0x92, 0x49, 0x88, 0xf6, 0xfc, 0x58, 0x0d, 0x28, - 0xc0, 0x82, 0x37, 0x67, 0x58, 0x3c, 0xa3, 0x81, 0x04, 0x22, 0xd1, 0x9e, 0x1f, 0x41, 0x21, 0x1a, - 0x0d, 0x4a, 0x9a, 0xa3, 0x52, 0xc2, 0x44, 0x65, 0x2c, 0x31, 0x08, 0x63, 0x3e, 0x49, 0xa3, 0x4f, - 0x2c, 0x0c, 0x54, 0xf1, 0x7c, 0x42, 0x8d, 0x14, 0xd7, 0xc6, 0xd5, 0x08, 0x51, 0xd2, 0x1d, 0x26, - 0x21, 0x6c, 0x54, 0xf1, 0x42, 0x62, 0x1d, 0x27, 0x14, 0xb0, 0x44, 0x53, 0x29, 0x59, 0xd0, 0xa5, - 0x08, 0xdc, 0x3d, 0x5b, 0x7b, 0xf1, 0x66, 0x2f, 0xa0, 0xbc, 0x55, 0x2c, 0x83, 0x47, 0xc7, 0xa1, - 0xd0, 0xdb, 0x09, 0xfe, 0xcf, 0x49, 0x09, 0xc6, 0x8b, 0xdd, 0x12, 0xb0, 0xa3, 0x7d, 0x58, 0x8c, - 0xf8, 0x67, 0xeb, 0x2d, 0x75, 0x23, 0x90, 0x3a, 0x83, 0xfb, 0xb0, 0xc8, 0xdf, 0xc2, 0xbf, 0x61, - 0xc2, 0x07, 0xb0, 0x98, 0x95, 0x5a, 0x1d, 0xdd, 0x4c, 0xf6, 0xc1, 0x4e, 0x64, 0x4f, 0xba, 0x3c, - 0x7c, 0x39, 0xee, 0x8b, 0x1d, 0x99, 0xf7, 0xb3, 0x9e, 0x55, 0x1b, 0x30, 0xa9, 0xa7, 0x55, 0x47, - 0xea, 0x79, 0x14, 0x4b, 0xf2, 0x5e, 0xbc, 0x98, 0x52, 0x2b, 0x5d, 0xd4, 0xc6, 0xd5, 0xcc, 0xe6, - 0x6a, 0x7c, 0x8c, 0x68, 0xda, 0xf2, 0x62, 0x42, 0x06, 0x38, 0xf4, 0x39, 0x4c, 0x85, 0x6f, 0xf5, - 0x18, 0x89, 0x04, 0xb0, 0x0c, 0x23, 0xd4, 0x54, 0xf8, 0x6a, 0xef, 0xec, 0xe8, 0xab, 0xe2, 0x13, - 0x12, 0xa2, 0x5f, 0x8c, 0xb9, 0xa5, 0x6b, 0x63, 0xe8, 0xe5, 0x4b, 0xa2, 0xf0, 0xf6, 0xac, 0xb3, - 0xd3, 0xa0, 0xdb, 0x2d, 0x39, 0xf4, 0x99, 0xba, 0xdd, 0x32, 0xc3, 0xb3, 0x49, 0xb1, 0x35, 0x85, - 0xce, 0x06, 0x5c, 0xa5, 0x61, 0x19, 0xb6, 0x59, 0x80, 0xac, 0x64, 0xa8, 0xf4, 0xbe, 0x47, 0x83, - 0x39, 0xb4, 0xe0, 0x4a, 0xd7, 0xd8, 0x6f, 0xe8, 0xb6, 0x16, 0x98, 0xa2, 0x7b, 0x94, 0xb8, 0xac, - 0xa7, 0x20, 0x49, 0x21, 0xd4, 0xe4, 0xf7, 0x31, 0x23, 0x9a, 0x9b, 0xfc, 0x3e, 0x66, 0xc6, 0x60, - 0xfb, 0x9a, 0x06, 0xaa, 0xe7, 0xdf, 0x16, 0x1a, 0x6a, 0x05, 0x3b, 0x2c, 0x28, 0x6c, 0xe6, 0x95, - 0xca, 0x15, 0xfd, 0x22, 0x31, 0x86, 0x48, 0x75, 0x91, 0x4b, 0x5c, 0x83, 0x4a, 0x23, 0xde, 0x9d, - 0x48, 0x86, 0x13, 0xfa, 0x25, 0xb6, 0x00, 0xcf, 0xdc, 0xf3, 0x94, 0xf2, 0xca, 0xf2, 0x4f, 0xfe, - 0xfc, 0x52, 0xee, 0x27, 0x3f, 0xbd, 0x94, 0xfb, 0xf7, 0x3f, 0xbd, 0x94, 0xfb, 0xb3, 0x9f, 0x5e, - 0xca, 0x7d, 0x6f, 0xa9, 0xb7, 0xd0, 0xa4, 0x8d, 0x96, 0x8d, 0x9d, 0xe0, 0x36, 0x23, 0x37, 0x44, - 0xff, 0xbb, 0xf7, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x01, 0x6c, 0xee, 0x51, 0xbf, 0xd4, 0x00, - 0x00, + // 13656 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7d, 0x5b, 0x6c, 0x1c, 0x59, + 0x76, 0x18, 0xbb, 0xf9, 0x3e, 0x7c, 0x35, 0x2f, 0x49, 0x91, 0x6a, 0x51, 0x6a, 0xa9, 0x34, 0xd2, + 0x68, 0xb4, 0xbb, 0x7a, 0x50, 0x33, 0xb3, 0xf3, 0xda, 0x99, 0xe9, 0x6e, 0x52, 0x22, 0x25, 0xbe, + 0xa6, 0x9a, 0x8f, 0x99, 0xdd, 0xf1, 0xf6, 0x16, 0xbb, 0xaf, 0xc8, 0x8a, 0x9a, 0x55, 0xbd, 0x55, + 0xd5, 0x7a, 0xac, 0x63, 0x27, 0xb6, 0x13, 0xff, 0x25, 0x71, 0x10, 0x3b, 0xb0, 0xe1, 0x0f, 0x27, + 0x48, 0x02, 0x24, 0x01, 0x02, 0xe4, 0x27, 0xf0, 0x47, 0xf2, 0x13, 0x24, 0x40, 0x36, 0x06, 0x8c, + 0x04, 0xb0, 0x03, 0x04, 0xf9, 0xa0, 0xed, 0xfd, 0x24, 0x90, 0x8f, 0xc0, 0x88, 0x83, 0x2c, 0x60, + 0x20, 0xb8, 0xcf, 0xba, 0xb7, 0x5e, 0xdd, 0x94, 0xb8, 0xeb, 0xfc, 0x48, 0xec, 0x7b, 0xcf, 0x39, + 0xf7, 0x7d, 0xea, 0x9c, 0x73, 0xcf, 0x3d, 0x07, 0xee, 0x04, 0xb8, 0x85, 0xdb, 0xae, 0x17, 0xdc, + 0x6d, 0xe1, 0x43, 0xab, 0xf1, 0xea, 0x6e, 0xa3, 0x65, 0x63, 0x27, 0xb8, 0xdb, 0xf6, 0xdc, 0xc0, + 0xbd, 0x6b, 0x75, 0x82, 0x23, 0x1f, 0x7b, 0xcf, 0xed, 0x06, 0xbe, 0x43, 0x4b, 0xd0, 0x20, 0xfd, + 0xaf, 0x38, 0x7b, 0xe8, 0x1e, 0xba, 0x0c, 0x86, 0xfc, 0xc5, 0x2a, 0x8b, 0x97, 0x0e, 0x5d, 0xf7, + 0xb0, 0x85, 0x19, 0xf2, 0x41, 0xe7, 0xe9, 0x5d, 0x7c, 0xdc, 0x0e, 0x5e, 0xf1, 0xca, 0x52, 0xb4, + 0x32, 0xb0, 0x8f, 0xb1, 0x1f, 0x58, 0xc7, 0x6d, 0x0e, 0xf0, 0x8e, 0xec, 0x8a, 0x15, 0x04, 0xa4, + 0x26, 0xb0, 0x5d, 0xe7, 0xee, 0xf3, 0xfb, 0xea, 0x4f, 0x0e, 0x7a, 0x2b, 0xb3, 0xd7, 0x0d, 0xec, + 0x05, 0x7e, 0x4f, 0x90, 0xf8, 0x39, 0x76, 0x82, 0x58, 0xf3, 0x1c, 0x32, 0x78, 0xd5, 0xc6, 0x3e, + 0x03, 0x11, 0xff, 0x71, 0xd0, 0x6b, 0xc9, 0xa0, 0xf4, 0x5f, 0x0e, 0xf2, 0xad, 0x64, 0x90, 0x17, + 0xf8, 0x80, 0xcc, 0xa9, 0x23, 0xff, 0xe8, 0x02, 0xee, 0x59, 0xed, 0x36, 0xf6, 0xc2, 0x3f, 0x62, + 0x7d, 0xed, 0xf8, 0xd6, 0x21, 0xe6, 0x7d, 0x7c, 0x7e, 0x5f, 0xfd, 0xc9, 0x40, 0x8d, 0xdf, 0xcb, + 0xc1, 0xe0, 0xbe, 0x15, 0x34, 0x8e, 0xd0, 0x67, 0x30, 0xf8, 0xc4, 0x76, 0x9a, 0xfe, 0x42, 0xee, + 0x6a, 0xff, 0xad, 0xb1, 0xa5, 0xc2, 0x1d, 0xd6, 0x5f, 0x5a, 0x49, 0x2a, 0x2a, 0xf3, 0x3f, 0x3e, + 0x29, 0xf5, 0x9d, 0x9e, 0x94, 0xa6, 0x9e, 0x11, 0xb0, 0x6f, 0xba, 0xc7, 0x76, 0x40, 0x17, 0xd0, + 0x64, 0x78, 0x68, 0x17, 0x66, 0xca, 0xad, 0x96, 0xfb, 0x62, 0xdb, 0xf2, 0x02, 0xdb, 0x6a, 0xd5, + 0x3a, 0x8d, 0x06, 0xf6, 0xfd, 0x85, 0xfc, 0xd5, 0xdc, 0xad, 0x91, 0xca, 0xf5, 0xd3, 0x93, 0x52, + 0xc9, 0x22, 0xd5, 0xf5, 0x36, 0xab, 0xaf, 0xfb, 0x0c, 0x40, 0x21, 0x94, 0x84, 0x6f, 0xfc, 0xc1, + 0x10, 0x14, 0x56, 0x5d, 0x3f, 0xa8, 0x92, 0x65, 0x33, 0xf1, 0x0f, 0x3b, 0xd8, 0x0f, 0xd0, 0x75, + 0x18, 0x22, 0x65, 0x6b, 0xcb, 0x0b, 0xb9, 0xab, 0xb9, 0x5b, 0xa3, 0x95, 0xb1, 0xd3, 0x93, 0xd2, + 0xf0, 0x91, 0xeb, 0x07, 0x75, 0xbb, 0x69, 0xf2, 0x2a, 0xf4, 0x0e, 0x8c, 0x6c, 0xba, 0x4d, 0xbc, + 0x69, 0x1d, 0x63, 0xda, 0x8b, 0xd1, 0xca, 0xc4, 0xe9, 0x49, 0x69, 0xd4, 0x71, 0x9b, 0xb8, 0xee, + 0x58, 0xc7, 0xd8, 0x94, 0xd5, 0x68, 0x0f, 0x06, 0x4c, 0xb7, 0x85, 0x17, 0xfa, 0x29, 0x58, 0xe5, + 0xf4, 0xa4, 0x34, 0xe0, 0xb9, 0x2d, 0xfc, 0xd3, 0x93, 0xd2, 0xfb, 0x87, 0x76, 0x70, 0xd4, 0x39, + 0xb8, 0xd3, 0x70, 0x8f, 0xef, 0x1e, 0x7a, 0xd6, 0x73, 0x9b, 0xed, 0x34, 0xab, 0x75, 0x37, 0xdc, + 0x8f, 0x6d, 0x9b, 0x2f, 0x6e, 0xed, 0x95, 0x1f, 0xe0, 0x63, 0x42, 0xc9, 0xa4, 0xf4, 0xd0, 0x3e, + 0xcc, 0x96, 0x9b, 0x4d, 0x9b, 0x61, 0x6c, 0x7b, 0xb6, 0xd3, 0xb0, 0xdb, 0x56, 0xcb, 0x5f, 0x18, + 0xb8, 0xda, 0x7f, 0x6b, 0x94, 0x4f, 0x8a, 0xac, 0xaf, 0xb7, 0x25, 0x80, 0x32, 0x29, 0x89, 0x04, + 0xd0, 0x03, 0x18, 0x59, 0xde, 0xac, 0x91, 0xbe, 0xfb, 0x0b, 0x83, 0x94, 0xd8, 0xfc, 0xe9, 0x49, + 0x69, 0xa6, 0xe9, 0xf8, 0x74, 0x68, 0x2a, 0x01, 0x09, 0x88, 0xde, 0x87, 0xf1, 0xed, 0xce, 0x41, + 0xcb, 0x6e, 0xec, 0xac, 0xd7, 0x9e, 0xe0, 0x57, 0x0b, 0x43, 0x57, 0x73, 0xb7, 0xc6, 0x2b, 0xe8, + 0xf4, 0xa4, 0x34, 0xd9, 0xa6, 0xe5, 0xf5, 0xa0, 0xe5, 0xd7, 0x9f, 0xe1, 0x57, 0xa6, 0x06, 0x17, + 0xe2, 0xd5, 0x6a, 0xab, 0x04, 0x6f, 0x38, 0x86, 0xe7, 0xfb, 0x47, 0x2a, 0x1e, 0x83, 0x43, 0x77, + 0x01, 0x4c, 0x7c, 0xec, 0x06, 0xb8, 0xdc, 0x6c, 0x7a, 0x0b, 0x23, 0x74, 0x6e, 0xa7, 0x4e, 0x4f, + 0x4a, 0x63, 0x1e, 0x2d, 0xad, 0x5b, 0xcd, 0xa6, 0x67, 0x2a, 0x20, 0xa8, 0x0a, 0x23, 0xa6, 0xcb, + 0x26, 0x78, 0x61, 0xf4, 0x6a, 0xee, 0xd6, 0xd8, 0xd2, 0x14, 0xdf, 0x86, 0xa2, 0xb8, 0x72, 0xe1, + 0xf4, 0xa4, 0x84, 0x3c, 0xfe, 0x4b, 0x1d, 0xa5, 0x80, 0x40, 0x25, 0x18, 0xde, 0x74, 0xab, 0x56, + 0xe3, 0x08, 0x2f, 0x00, 0xdd, 0x7b, 0x83, 0xa7, 0x27, 0xa5, 0xdc, 0xb7, 0x4c, 0x51, 0x8a, 0x9e, + 0xc3, 0x58, 0xb8, 0x50, 0xfe, 0xc2, 0x18, 0x9d, 0xbe, 0x9d, 0xd3, 0x93, 0xd2, 0x05, 0x9f, 0x16, + 0xd7, 0xc9, 0xd2, 0x2b, 0x33, 0xf8, 0x06, 0xbb, 0x40, 0x6d, 0x08, 0x7d, 0x0d, 0x73, 0xe1, 0xcf, + 0xb2, 0xef, 0x63, 0x8f, 0xd0, 0x58, 0x5b, 0x5e, 0x98, 0xa0, 0x33, 0x73, 0xf3, 0xf4, 0xa4, 0x64, + 0x28, 0x3d, 0xa8, 0x5b, 0x02, 0xa4, 0x6e, 0x37, 0x95, 0x91, 0x26, 0x13, 0x79, 0x3c, 0x30, 0x32, + 0x5e, 0x98, 0x30, 0x2f, 0xef, 0x3a, 0x7e, 0x60, 0x1d, 0xb4, 0x70, 0x22, 0x90, 0xf1, 0x97, 0x39, + 0x40, 0x5b, 0x6d, 0xec, 0xd4, 0x6a, 0xab, 0xe4, 0x3c, 0x89, 0xe3, 0xf4, 0x4d, 0x18, 0x65, 0x0b, + 0x47, 0x56, 0x37, 0x4f, 0x57, 0x77, 0xf2, 0xf4, 0xa4, 0x04, 0x7c, 0x75, 0xc9, 0xca, 0x86, 0x00, + 0xe8, 0x06, 0xf4, 0xef, 0xec, 0xac, 0xd3, 0xb3, 0xd2, 0x5f, 0x99, 0x39, 0x3d, 0x29, 0xf5, 0x07, + 0x41, 0xeb, 0xa7, 0x27, 0xa5, 0x91, 0xe5, 0x8e, 0x47, 0xa7, 0xc5, 0x24, 0xf5, 0xe8, 0x06, 0x0c, + 0x57, 0x5b, 0x1d, 0x3f, 0xc0, 0xde, 0xc2, 0x40, 0x78, 0x48, 0x1b, 0xac, 0xc8, 0x14, 0x75, 0xe8, + 0x1b, 0x30, 0xb0, 0xeb, 0x63, 0x6f, 0x61, 0x90, 0xae, 0xf7, 0x04, 0x5f, 0x6f, 0x52, 0xb4, 0xb7, + 0x54, 0x19, 0x21, 0x27, 0xb1, 0xe3, 0x63, 0xcf, 0xa4, 0x40, 0xe8, 0x0e, 0x0c, 0xb2, 0x45, 0x1b, + 0xa2, 0x4c, 0x6a, 0x42, 0xee, 0x8e, 0x16, 0xde, 0x7b, 0xbf, 0x32, 0x7a, 0x7a, 0x52, 0x1a, 0xa4, + 0x8b, 0x67, 0x32, 0xb0, 0xc7, 0x03, 0x23, 0xb9, 0x42, 0xde, 0x1c, 0x21, 0xb8, 0xe4, 0x58, 0x18, + 0xdf, 0x80, 0x31, 0x65, 0xf8, 0x68, 0x11, 0x06, 0xc8, 0xff, 0x94, 0x89, 0x8c, 0xb3, 0xc6, 0xc8, + 0xd7, 0xc1, 0xa4, 0xa5, 0xc6, 0x7f, 0x9f, 0x80, 0x02, 0xc1, 0xd4, 0x38, 0x8f, 0x36, 0x55, 0xb9, + 0x6e, 0x53, 0x75, 0x0b, 0x64, 0xdb, 0x9c, 0x05, 0x8d, 0x9f, 0x9e, 0x94, 0x46, 0x3a, 0xbc, 0x2c, + 0xec, 0x19, 0xaa, 0xc1, 0xf0, 0xca, 0xcb, 0xb6, 0xed, 0x61, 0x9f, 0x4e, 0xec, 0xd8, 0x52, 0xf1, + 0x0e, 0xfb, 0x22, 0xde, 0x11, 0x5f, 0xc4, 0x3b, 0x3b, 0xe2, 0x8b, 0x58, 0xb9, 0xcc, 0x59, 0xf1, + 0x34, 0x66, 0x28, 0xe1, 0xee, 0xf8, 0x8d, 0x3f, 0x29, 0xe5, 0x4c, 0x41, 0x09, 0x7d, 0x13, 0x86, + 0x1e, 0xba, 0xde, 0xb1, 0x15, 0xf0, 0x15, 0x98, 0x3d, 0x3d, 0x29, 0x15, 0x9e, 0xd2, 0x12, 0x65, + 0x43, 0x71, 0x18, 0xf4, 0x10, 0x26, 0x4d, 0xb7, 0x13, 0xe0, 0x1d, 0x57, 0xac, 0xdb, 0x20, 0xc5, + 0xba, 0x72, 0x7a, 0x52, 0x2a, 0x7a, 0xa4, 0xa6, 0x1e, 0xb8, 0x75, 0xbe, 0x80, 0x0a, 0x7e, 0x04, + 0x0b, 0xad, 0xc0, 0x64, 0x99, 0xf2, 0x6e, 0x3e, 0x67, 0x6c, 0xb5, 0x46, 0x2b, 0x97, 0x4f, 0x4f, + 0x4a, 0x17, 0x2d, 0x5a, 0x53, 0xf7, 0x78, 0x95, 0x4a, 0x46, 0x47, 0x42, 0x9b, 0x30, 0xfd, 0xa4, + 0x73, 0x80, 0x3d, 0x07, 0x07, 0xd8, 0x17, 0x3d, 0x1a, 0xa6, 0x3d, 0xba, 0x7a, 0x7a, 0x52, 0x5a, + 0x7c, 0x26, 0x2b, 0x13, 0xfa, 0x14, 0x47, 0x45, 0x18, 0xa6, 0x78, 0x47, 0x97, 0xad, 0xc0, 0x3a, + 0xb0, 0x7c, 0x4c, 0x59, 0xd2, 0xd8, 0xd2, 0x05, 0x36, 0xc5, 0x77, 0x22, 0xb5, 0x95, 0xeb, 0x7c, + 0x96, 0x2f, 0xc9, 0xb1, 0x37, 0x79, 0x95, 0xd2, 0x50, 0x94, 0x26, 0xe1, 0xcc, 0xf2, 0xab, 0x33, + 0x4a, 0x7b, 0x4b, 0x39, 0xb3, 0xfc, 0xea, 0xa8, 0x3c, 0x4b, 0x7e, 0x7f, 0xd6, 0x61, 0x70, 0x97, + 0x7c, 0x9b, 0x29, 0xc7, 0x9a, 0x5c, 0xba, 0xc6, 0x7b, 0x14, 0xdd, 0x7d, 0x77, 0xc8, 0x0f, 0x0a, + 0x48, 0xcf, 0xdd, 0x14, 0xfd, 0x9e, 0xab, 0x5f, 0x62, 0x5a, 0x87, 0xbe, 0x00, 0xe0, 0xbd, 0x2a, + 0xb7, 0xdb, 0x0b, 0x63, 0x74, 0x90, 0xd3, 0xfa, 0x20, 0xcb, 0xed, 0x76, 0xe5, 0x0a, 0x1f, 0xdf, + 0x05, 0x39, 0x3e, 0xab, 0xdd, 0x56, 0xa8, 0x29, 0x44, 0xd0, 0x67, 0x30, 0x4e, 0x19, 0x9a, 0x58, + 0xd1, 0x71, 0xba, 0xa2, 0x97, 0x4e, 0x4f, 0x4a, 0xf3, 0x94, 0x57, 0x25, 0xac, 0xa7, 0x86, 0x80, + 0x7e, 0x19, 0xe6, 0x38, 0xb9, 0x7d, 0xdb, 0x69, 0xba, 0x2f, 0xfc, 0x65, 0xec, 0x3f, 0x0b, 0xdc, + 0x36, 0x65, 0x7e, 0x63, 0x4b, 0x8b, 0x7a, 0xf7, 0x74, 0x98, 0xca, 0x6d, 0xde, 0x53, 0x43, 0xf6, + 0xf4, 0x05, 0x03, 0xa8, 0x37, 0x19, 0x84, 0xca, 0x1e, 0x13, 0x49, 0xa0, 0x35, 0x98, 0xda, 0xf5, + 0xb1, 0x36, 0x86, 0x49, 0xfa, 0x75, 0x28, 0x91, 0x15, 0xee, 0xf8, 0xb8, 0x9e, 0x36, 0x8e, 0x28, + 0x1e, 0x32, 0x01, 0x2d, 0x7b, 0x6e, 0x3b, 0xb2, 0xc7, 0xa7, 0xe8, 0x8c, 0x18, 0xa7, 0x27, 0xa5, + 0x2b, 0x4d, 0xcf, 0x6d, 0xd7, 0xd3, 0x37, 0x7a, 0x02, 0x36, 0xfa, 0x3e, 0x5c, 0xa8, 0xba, 0x8e, + 0x83, 0x1b, 0x84, 0x7f, 0x2e, 0xdb, 0xd6, 0xa1, 0xe3, 0xfa, 0x81, 0xdd, 0x58, 0x5b, 0x5e, 0x28, + 0x84, 0x1f, 0x87, 0x86, 0x84, 0xa8, 0x37, 0x25, 0x88, 0xfe, 0x71, 0x48, 0xa1, 0x82, 0xbe, 0x07, + 0x13, 0xbc, 0x2d, 0xec, 0xd1, 0xad, 0x39, 0x9d, 0xbd, 0xd1, 0x24, 0x30, 0xfb, 0xcc, 0x7b, 0xe2, + 0x27, 0x13, 0x9c, 0x74, 0x5a, 0xe8, 0x6b, 0x18, 0xdb, 0x78, 0x58, 0x36, 0xb1, 0xdf, 0x76, 0x1d, + 0x1f, 0x2f, 0x20, 0xba, 0xa2, 0x57, 0x38, 0xe9, 0x8d, 0x87, 0xe5, 0x72, 0x27, 0x38, 0xc2, 0x4e, + 0x60, 0x37, 0xac, 0x00, 0x0b, 0xa8, 0x4a, 0x91, 0xec, 0xbc, 0xe3, 0xa7, 0x56, 0xdd, 0xe3, 0x25, + 0xca, 0x28, 0x54, 0x72, 0xa8, 0x08, 0x23, 0xb5, 0xda, 0xea, 0xba, 0x7b, 0x68, 0x3b, 0x0b, 0x33, + 0x64, 0x32, 0x4c, 0xf9, 0x1b, 0x1d, 0xc0, 0x9c, 0x22, 0xfe, 0xd7, 0xc9, 0xff, 0xf8, 0x18, 0x3b, + 0xc1, 0xc2, 0x2c, 0xed, 0xc3, 0xb7, 0xa4, 0xfe, 0x72, 0x47, 0xd5, 0x12, 0x9e, 0xdf, 0xbf, 0x53, + 0x0e, 0x7f, 0xd6, 0x04, 0x92, 0x39, 0x6b, 0x25, 0x94, 0x1a, 0x5f, 0xc2, 0xa8, 0x3c, 0x76, 0x68, + 0x18, 0xfa, 0xcb, 0xad, 0x56, 0xa1, 0x8f, 0xfc, 0x51, 0xab, 0xad, 0x16, 0x72, 0x68, 0x12, 0x20, + 0xe4, 0x35, 0x85, 0x3c, 0x1a, 0x87, 0x11, 0xc1, 0x0b, 0x0a, 0xfd, 0x14, 0xbe, 0xdd, 0x2e, 0x0c, + 0x20, 0x04, 0x93, 0xfa, 0x8e, 0x2c, 0x0c, 0x1a, 0x2f, 0x61, 0x54, 0x4e, 0x24, 0x9a, 0x82, 0xb1, + 0xdd, 0xcd, 0xda, 0xf6, 0x4a, 0x75, 0xed, 0xe1, 0xda, 0xca, 0x72, 0xa1, 0x0f, 0x5d, 0x86, 0x8b, + 0x3b, 0xb5, 0xd5, 0xfa, 0x72, 0xa5, 0xbe, 0xbe, 0x55, 0x2d, 0xaf, 0xd7, 0xb7, 0xcd, 0xad, 0x2f, + 0xbf, 0xaa, 0xef, 0xec, 0x6e, 0x6e, 0xae, 0xac, 0x17, 0x72, 0x68, 0x01, 0x66, 0x49, 0xf5, 0x93, + 0xdd, 0xca, 0x8a, 0x0a, 0x50, 0xc8, 0xa3, 0x6b, 0x70, 0x39, 0xa9, 0xa6, 0xbe, 0xba, 0x52, 0x5e, + 0x5e, 0x5f, 0xa9, 0xd5, 0x0a, 0xfd, 0xc6, 0xaf, 0xe6, 0x63, 0xcc, 0x10, 0x2d, 0xc1, 0x58, 0x8d, + 0x29, 0x73, 0x74, 0x83, 0x30, 0xc1, 0xba, 0x70, 0x7a, 0x52, 0x1a, 0xe7, 0x3a, 0x1e, 0x5b, 0x7b, + 0x15, 0x88, 0x7c, 0xdf, 0xb6, 0xc9, 0x2a, 0x37, 0xdc, 0x96, 0xfa, 0x7d, 0x6b, 0xf3, 0x32, 0x53, + 0xd6, 0xa2, 0x25, 0xe5, 0x4b, 0xc8, 0xa4, 0x6c, 0x2a, 0xc9, 0x89, 0x2f, 0xa1, 0xca, 0x15, 0xe5, + 0x37, 0x71, 0x29, 0x9c, 0x4a, 0xfe, 0x01, 0xa3, 0x38, 0x09, 0x5c, 0x58, 0xc2, 0xa1, 0x77, 0x84, + 0x84, 0xc0, 0xa4, 0x62, 0xca, 0x26, 0x23, 0xf2, 0x1c, 0x17, 0x0e, 0x8c, 0x4e, 0x0a, 0x4b, 0x42, + 0x1f, 0x47, 0xd7, 0x8a, 0x4f, 0x06, 0x25, 0x16, 0xe1, 0x3c, 0x66, 0x04, 0x14, 0x95, 0x60, 0x90, + 0xed, 0x55, 0x36, 0x1f, 0x54, 0x26, 0x69, 0x91, 0x02, 0x93, 0x95, 0x1b, 0x7f, 0xb7, 0x5f, 0x65, + 0xcf, 0x44, 0x06, 0x51, 0xe6, 0x9b, 0xca, 0x20, 0x74, 0x9e, 0x69, 0x29, 0x11, 0x37, 0x6a, 0xd8, + 0xf7, 0x99, 0x9c, 0xc8, 0x28, 0x52, 0x71, 0xc3, 0x67, 0x85, 0x44, 0xdd, 0x09, 0x01, 0x88, 0xc0, + 0xcd, 0x64, 0x0f, 0x2a, 0x70, 0xf7, 0x87, 0x02, 0x37, 0x97, 0x4e, 0x98, 0xc0, 0x1d, 0x82, 0x90, + 0x35, 0xe7, 0x9f, 0x47, 0xda, 0x87, 0x81, 0x70, 0xcd, 0xf9, 0x27, 0x95, 0xaf, 0xb9, 0x02, 0x84, + 0x3e, 0x02, 0x28, 0xef, 0xd7, 0xa8, 0x64, 0x69, 0x6e, 0x72, 0x11, 0x81, 0x1e, 0x66, 0xeb, 0x85, + 0xcf, 0x05, 0x57, 0x4f, 0x95, 0xcc, 0x15, 0x68, 0x54, 0x81, 0x89, 0xf2, 0x8f, 0x3a, 0x1e, 0x5e, + 0x6b, 0x12, 0x7e, 0x10, 0x30, 0x15, 0x64, 0xb4, 0xb2, 0x78, 0x7a, 0x52, 0x5a, 0xb0, 0x48, 0x45, + 0xdd, 0xe6, 0x35, 0x0a, 0x01, 0x1d, 0x05, 0x6d, 0xc1, 0xf4, 0xa3, 0xea, 0x36, 0xdf, 0x85, 0xe5, + 0x46, 0xc3, 0xed, 0x38, 0x01, 0x97, 0x0b, 0xae, 0x9d, 0x9e, 0x94, 0x2e, 0x1f, 0x36, 0xda, 0x75, + 0xb1, 0x63, 0x2d, 0x56, 0xad, 0x0a, 0x06, 0x31, 0x5c, 0xa3, 0x05, 0x93, 0x8f, 0x70, 0x40, 0x76, + 0x9d, 0x10, 0xf2, 0xb2, 0xd7, 0xe4, 0x13, 0x18, 0xdb, 0xb7, 0x83, 0xa3, 0x1a, 0x6e, 0x78, 0x38, + 0x10, 0x0a, 0x2e, 0x9d, 0x81, 0x17, 0x76, 0x70, 0x54, 0xf7, 0x59, 0xb9, 0xca, 0xce, 0x14, 0x70, + 0x63, 0x05, 0xa6, 0x78, 0x6b, 0x52, 0xa6, 0x5c, 0xd2, 0x09, 0xe6, 0x28, 0x41, 0xba, 0x0a, 0x2a, + 0x41, 0x9d, 0xcc, 0xbf, 0xc9, 0xc3, 0x5c, 0xf5, 0xc8, 0x72, 0x0e, 0xf1, 0xb6, 0xe5, 0xfb, 0x2f, + 0x5c, 0xaf, 0xa9, 0x74, 0x9e, 0x0a, 0xd4, 0xb1, 0xce, 0x53, 0x09, 0x7a, 0x09, 0xc6, 0xb6, 0x5a, + 0x4d, 0x81, 0xc3, 0x85, 0x7d, 0xda, 0x96, 0xdb, 0x6a, 0xd6, 0xdb, 0x82, 0x96, 0x0a, 0x44, 0x70, + 0x36, 0xf1, 0x0b, 0x89, 0xd3, 0x1f, 0xe2, 0x38, 0xf8, 0x85, 0x82, 0xa3, 0x00, 0xa1, 0x15, 0x98, + 0xae, 0xe1, 0x86, 0xeb, 0x34, 0x1f, 0x5a, 0x8d, 0xc0, 0xf5, 0x76, 0xdc, 0x67, 0xd8, 0xe1, 0xfb, + 0x8b, 0xca, 0x43, 0x3e, 0xad, 0xac, 0x3f, 0xa5, 0xb5, 0xf5, 0x80, 0x54, 0x9b, 0x71, 0x0c, 0xb4, + 0x05, 0x23, 0xfb, 0xdc, 0x16, 0xc2, 0x35, 0x84, 0x1b, 0x77, 0xa4, 0x71, 0xa4, 0xea, 0x61, 0xba, + 0x29, 0xac, 0x96, 0xd4, 0x71, 0xe4, 0xe7, 0x85, 0xf2, 0x21, 0x01, 0x69, 0x4a, 0x22, 0xc6, 0x2e, + 0x4c, 0x6c, 0xb7, 0x3a, 0x87, 0xb6, 0x43, 0x38, 0x46, 0x0d, 0xff, 0x10, 0x2d, 0x03, 0x84, 0x05, + 0xdc, 0xf8, 0x31, 0xc3, 0xf5, 0x8a, 0xb0, 0x62, 0xef, 0x01, 0x3f, 0x48, 0xb4, 0x84, 0x0a, 0x82, + 0xa6, 0x82, 0x67, 0xfc, 0xdf, 0x7e, 0x40, 0x7c, 0x01, 0xe8, 0x97, 0xa3, 0x86, 0x03, 0xc2, 0xd4, + 0x2f, 0x40, 0x5e, 0xda, 0x28, 0x86, 0x4e, 0x4f, 0x4a, 0x79, 0xbb, 0x69, 0xe6, 0xd7, 0x96, 0xd1, + 0xbb, 0x30, 0x48, 0xc1, 0xe8, 0xfc, 0x4f, 0xca, 0xf6, 0x54, 0x0a, 0x8c, 0x73, 0xd0, 0x2f, 0x9a, + 0xc9, 0x80, 0xd1, 0x7b, 0x30, 0xba, 0x8c, 0x5b, 0xf8, 0xd0, 0x0a, 0x5c, 0x71, 0xba, 0x99, 0xd6, + 0x2f, 0x0a, 0x95, 0x3d, 0x17, 0x42, 0x12, 0x2d, 0xc0, 0xc4, 0x96, 0xef, 0x3a, 0xaa, 0x16, 0xe0, + 0xd1, 0x12, 0x55, 0x0b, 0x60, 0x30, 0xe8, 0xb7, 0x72, 0x30, 0x56, 0x76, 0x1c, 0xae, 0x4d, 0xfb, + 0x7c, 0xd6, 0xe7, 0xee, 0x48, 0x1b, 0xd3, 0xba, 0x75, 0x80, 0x5b, 0x7b, 0x56, 0xab, 0x83, 0xfd, + 0xca, 0xd7, 0x44, 0x30, 0xfb, 0x1f, 0x27, 0xa5, 0x8f, 0xcf, 0xa0, 0x1f, 0x87, 0xd6, 0xaa, 0x1d, + 0xcf, 0xb2, 0x03, 0xff, 0xf4, 0xa4, 0x34, 0x67, 0x85, 0x0d, 0xaa, 0xe7, 0x46, 0xe9, 0x47, 0xc8, + 0xd8, 0x87, 0xba, 0x31, 0x76, 0x74, 0x0c, 0x53, 0x65, 0xdf, 0xef, 0x1c, 0xe3, 0x5a, 0x60, 0x79, + 0x01, 0x51, 0x9b, 0x28, 0x7f, 0xc8, 0xd6, 0xa9, 0xde, 0xfe, 0xf1, 0x49, 0x29, 0x47, 0x64, 0x41, + 0x8b, 0xa2, 0x12, 0x59, 0xc2, 0x0b, 0xea, 0x81, 0xad, 0x7e, 0x9b, 0xa8, 0x76, 0x15, 0xa5, 0x6d, + 0x5c, 0x97, 0x9f, 0xf1, 0xb5, 0xe5, 0xb4, 0x15, 0x37, 0xaa, 0xb0, 0xf8, 0x08, 0x07, 0x26, 0xf6, + 0x71, 0x20, 0xce, 0x08, 0xdd, 0xe1, 0xa1, 0x45, 0x6b, 0x98, 0xfe, 0x96, 0xc8, 0x74, 0xf9, 0xd9, + 0xb9, 0x10, 0x35, 0xc6, 0xdf, 0xca, 0x41, 0xa9, 0xea, 0x61, 0x26, 0x46, 0xa5, 0x10, 0xca, 0xe6, + 0x5d, 0x8b, 0x30, 0xb0, 0xf3, 0xaa, 0x2d, 0x94, 0x51, 0x5a, 0x4b, 0x16, 0xc5, 0xa4, 0xa5, 0x3d, + 0x6a, 0xf6, 0xc6, 0x53, 0x98, 0x33, 0xb1, 0x83, 0x5f, 0x58, 0x07, 0x2d, 0xac, 0x29, 0xc7, 0x25, + 0x18, 0x64, 0x07, 0x3d, 0x36, 0x04, 0x56, 0x7e, 0x36, 0x43, 0x83, 0xf1, 0x2f, 0xf2, 0x50, 0x60, + 0xc3, 0xad, 0xb8, 0x41, 0x6f, 0xe3, 0xe3, 0x23, 0xc8, 0x77, 0xb1, 0x4d, 0xdc, 0x0c, 0x67, 0xbb, + 0x3f, 0x14, 0x5b, 0x68, 0x57, 0xc9, 0x27, 0x55, 0x54, 0x92, 0x01, 0xb1, 0x4d, 0xc7, 0x0c, 0x76, + 0x31, 0x03, 0x03, 0xfa, 0xf5, 0x1c, 0x0c, 0xb1, 0x6d, 0x9c, 0x7d, 0x50, 0xf6, 0xcf, 0xe7, 0xa0, + 0x14, 0x02, 0xfa, 0x97, 0x7a, 0x6c, 0x59, 0x9d, 0xf1, 0xaf, 0xf2, 0x30, 0xad, 0xcc, 0x15, 0x97, + 0x9d, 0xdf, 0x61, 0x52, 0x97, 0x32, 0x61, 0xd4, 0x04, 0x4a, 0xa4, 0xae, 0x7a, 0x68, 0x80, 0xa0, + 0x33, 0xf7, 0x0e, 0x8c, 0x90, 0x21, 0x45, 0xad, 0xa5, 0xf4, 0x83, 0xce, 0x40, 0x45, 0x75, 0xcf, + 0xb3, 0x77, 0x17, 0x46, 0xe8, 0x9f, 0x64, 0x45, 0x06, 0xd2, 0x57, 0x44, 0x02, 0x21, 0x1b, 0xe0, + 0xb1, 0x6b, 0x3b, 0x1b, 0x38, 0x38, 0x72, 0x9b, 0x5c, 0xb4, 0x58, 0x23, 0x6c, 0xf7, 0xaf, 0xb9, + 0xb6, 0x53, 0x3f, 0xa6, 0xc5, 0x67, 0xb5, 0xc6, 0x85, 0x04, 0x4d, 0x85, 0xb8, 0x71, 0x0f, 0x0a, + 0x84, 0x43, 0xf6, 0xbe, 0xb5, 0x8c, 0x59, 0x40, 0x8f, 0x70, 0x50, 0x71, 0xb5, 0x6f, 0xb7, 0x31, + 0x01, 0x63, 0xdb, 0xb6, 0x73, 0x28, 0x7e, 0xfe, 0xeb, 0x7e, 0x18, 0x67, 0xbf, 0xf9, 0x0a, 0x44, + 0x24, 0xac, 0x5c, 0x2f, 0x12, 0xd6, 0x07, 0x30, 0x41, 0x44, 0x14, 0xec, 0xed, 0x61, 0x8f, 0x48, + 0x76, 0x7c, 0x3d, 0xa8, 0x26, 0xe6, 0xd3, 0x8a, 0xfa, 0x73, 0x56, 0x63, 0xea, 0x80, 0x68, 0x1d, + 0x26, 0x59, 0xc1, 0x43, 0x6c, 0x05, 0x9d, 0xd0, 0x98, 0x34, 0xc5, 0x95, 0x31, 0x51, 0xcc, 0xd8, + 0x27, 0xa7, 0xf5, 0x94, 0x17, 0x9a, 0x11, 0x5c, 0xf4, 0x19, 0x4c, 0x6d, 0x7b, 0xee, 0xcb, 0x57, + 0x8a, 0x4c, 0xc9, 0xbe, 0x20, 0x73, 0xa7, 0x27, 0xa5, 0xe9, 0x36, 0xa9, 0xaa, 0xab, 0x92, 0x65, + 0x14, 0x9a, 0xec, 0xa9, 0x35, 0xbf, 0xe2, 0x7a, 0xb6, 0x73, 0x48, 0x57, 0x73, 0x84, 0xed, 0x29, + 0xdb, 0xaf, 0x1f, 0xd0, 0x42, 0x53, 0x56, 0x47, 0x6c, 0xc5, 0xc3, 0xdd, 0x6d, 0xc5, 0xf7, 0x00, + 0xd6, 0x5d, 0xab, 0x59, 0x6e, 0xb5, 0xaa, 0x65, 0x9f, 0x5a, 0x72, 0xb8, 0xcc, 0xd4, 0x72, 0xad, + 0x66, 0xdd, 0x6a, 0xb5, 0xea, 0x0d, 0xcb, 0x37, 0x15, 0x98, 0xc7, 0x03, 0x23, 0x43, 0x85, 0x61, + 0x73, 0x6a, 0xdd, 0x6e, 0x60, 0xc7, 0xc7, 0xfb, 0x96, 0xe7, 0xd8, 0xce, 0xa1, 0x6f, 0xfc, 0xe9, + 0x18, 0x8c, 0xc8, 0x21, 0xdf, 0x51, 0xb5, 0x39, 0x2e, 0x89, 0x51, 0x0e, 0x15, 0x5a, 0x9b, 0x4c, + 0x05, 0x02, 0x5d, 0xa4, 0xfa, 0x1d, 0x97, 0x01, 0x87, 0xc9, 0xee, 0xb6, 0xda, 0x6d, 0x93, 0x94, + 0x91, 0x2f, 0xc1, 0x72, 0x85, 0xce, 0xff, 0x08, 0xfb, 0x12, 0x34, 0x0f, 0xcc, 0xfc, 0x72, 0x85, + 0xec, 0xb2, 0xad, 0xb5, 0xe5, 0x2a, 0x9d, 0xca, 0x11, 0xb6, 0xcb, 0x5c, 0xbb, 0xd9, 0x30, 0x69, + 0x29, 0xa9, 0xad, 0x95, 0x37, 0xd6, 0xf9, 0x74, 0xd1, 0x5a, 0xdf, 0x3a, 0x6e, 0x99, 0xb4, 0x94, + 0x68, 0x26, 0xcc, 0x70, 0x50, 0x75, 0x9d, 0xc0, 0x73, 0x5b, 0x3e, 0x15, 0xa0, 0x47, 0xd8, 0x72, + 0x72, 0x8b, 0x43, 0x83, 0x57, 0x99, 0x11, 0x50, 0xb4, 0x0f, 0xf3, 0xe5, 0xe6, 0x73, 0xcb, 0x69, + 0xe0, 0x26, 0xab, 0xd9, 0x77, 0xbd, 0x67, 0x4f, 0x5b, 0xee, 0x0b, 0x9f, 0xce, 0xf7, 0x08, 0x37, + 0xd0, 0x71, 0x10, 0x61, 0xc0, 0x78, 0x21, 0x80, 0xcc, 0x34, 0x6c, 0xc2, 0x25, 0xab, 0x2d, 0xb7, + 0xd3, 0xe4, 0xab, 0x40, 0xb9, 0x64, 0x83, 0x14, 0x98, 0xac, 0x9c, 0xcc, 0xd2, 0x6a, 0x6d, 0x83, + 0x9a, 0xc3, 0xf8, 0x2c, 0x1d, 0xf9, 0xc7, 0x26, 0x29, 0x43, 0x37, 0x60, 0x58, 0x28, 0x59, 0xcc, + 0x5a, 0x4f, 0xad, 0xc4, 0x42, 0xb9, 0x12, 0x75, 0xe4, 0x48, 0x98, 0xb8, 0xe1, 0x3e, 0xc7, 0xde, + 0xab, 0xaa, 0xdb, 0xc4, 0xc2, 0x78, 0xc3, 0x8d, 0x13, 0xac, 0xa2, 0xde, 0x20, 0x35, 0xa6, 0x0e, + 0x48, 0x1a, 0x60, 0x72, 0x9a, 0xbf, 0x30, 0x15, 0x36, 0xc0, 0xe4, 0x38, 0xdf, 0x14, 0x75, 0x68, + 0x19, 0xa6, 0xcb, 0x9d, 0xc0, 0x3d, 0xb6, 0x02, 0xbb, 0xb1, 0xdb, 0x3e, 0xf4, 0x2c, 0xd2, 0x48, + 0x81, 0x22, 0x50, 0xa5, 0xd3, 0x12, 0x95, 0xf5, 0x0e, 0xaf, 0x35, 0xe3, 0x08, 0xe8, 0x7d, 0x18, + 0x5f, 0xf3, 0x99, 0x81, 0xce, 0xf2, 0x71, 0x93, 0x5a, 0x59, 0x78, 0x2f, 0x6d, 0xbf, 0x4e, 0xcd, + 0x75, 0x75, 0xa2, 0xa6, 0x36, 0x4d, 0x0d, 0x0e, 0x19, 0x30, 0x54, 0xf6, 0x7d, 0xdb, 0x0f, 0xa8, + 0xf1, 0x64, 0xa4, 0x02, 0xa7, 0x27, 0xa5, 0x21, 0x8b, 0x96, 0x98, 0xbc, 0x06, 0xed, 0xc3, 0xd8, + 0x32, 0x26, 0x7a, 0xcb, 0x8e, 0xd7, 0xf1, 0x03, 0x6a, 0x0a, 0x19, 0x5b, 0xba, 0xc8, 0x0f, 0xb6, + 0x52, 0xc3, 0xf7, 0x32, 0xd3, 0x48, 0x9a, 0xb4, 0xbc, 0x1e, 0x90, 0x0a, 0x55, 0xb2, 0x52, 0xe0, + 0x89, 0x52, 0xc6, 0x71, 0x56, 0xed, 0x26, 0x39, 0xaa, 0xb3, 0xb4, 0x0f, 0x54, 0x29, 0xe3, 0xbc, + 0xa1, 0x7e, 0x44, 0x6b, 0x54, 0xa5, 0x4c, 0x43, 0x41, 0x8d, 0x98, 0xcd, 0x77, 0x4e, 0xb3, 0xeb, + 0xe9, 0x95, 0xa2, 0x8b, 0x67, 0xb4, 0x08, 0x7f, 0x02, 0x63, 0xd5, 0x8e, 0x1f, 0xb8, 0xc7, 0x3b, + 0x47, 0xf8, 0x18, 0x2f, 0x5c, 0x08, 0x55, 0xcf, 0x06, 0x2d, 0xae, 0x07, 0xa4, 0x5c, 0x1d, 0xa6, + 0x02, 0x8e, 0xbe, 0x00, 0x24, 0x74, 0xc8, 0x47, 0x64, 0x7f, 0x38, 0x64, 0x2f, 0x2f, 0xcc, 0xd3, + 0xb1, 0x52, 0xc5, 0x51, 0xa8, 0x9e, 0xf5, 0x43, 0x59, 0xad, 0x5a, 0xed, 0xe2, 0xc8, 0xa4, 0x43, + 0xac, 0x8b, 0x8f, 0x3c, 0xab, 0x7d, 0xb4, 0xb0, 0x10, 0x6a, 0x82, 0x7c, 0x50, 0x87, 0xa4, 0x5c, + 0x93, 0x68, 0x43, 0x70, 0x54, 0x03, 0x60, 0x3f, 0xd7, 0xc9, 0xc2, 0x5f, 0xa4, 0xf3, 0xb5, 0xa0, + 0xcd, 0x17, 0xa9, 0x10, 0x73, 0x75, 0x91, 0xca, 0xc9, 0x8c, 0x6c, 0xcb, 0xd6, 0x56, 0x53, 0x21, + 0x83, 0x9e, 0x41, 0x81, 0xfd, 0xda, 0x70, 0x1d, 0x3b, 0x60, 0xac, 0xb7, 0xa8, 0x19, 0xe4, 0xa2, + 0xd5, 0xa2, 0x01, 0x6a, 0x08, 0xe5, 0x0d, 0x1c, 0xcb, 0x5a, 0xa5, 0x99, 0x18, 0x61, 0xb4, 0x0d, + 0x63, 0xdb, 0x9e, 0xdb, 0xec, 0x34, 0x02, 0x2a, 0x54, 0x5e, 0xa2, 0xca, 0x0c, 0xe2, 0xed, 0x28, + 0x35, 0x6c, 0x4e, 0xda, 0xac, 0xa0, 0x4e, 0xbe, 0xcb, 0xea, 0x9c, 0x28, 0x80, 0xa8, 0x02, 0x43, + 0xdb, 0x6e, 0xcb, 0x6e, 0xbc, 0x5a, 0x58, 0xa4, 0x9d, 0x9e, 0x15, 0xc4, 0x68, 0xa1, 0xe8, 0x2a, + 0xd5, 0x60, 0xda, 0xb4, 0x48, 0x15, 0x85, 0x18, 0xd0, 0xe3, 0x81, 0x91, 0xb1, 0xc2, 0x38, 0xbb, + 0x0f, 0x7b, 0x3c, 0x30, 0x32, 0x51, 0x98, 0x34, 0x7e, 0x3b, 0x07, 0x28, 0x7e, 0x42, 0xd0, 0x5d, + 0x18, 0xc6, 0x0e, 0x11, 0x62, 0x9b, 0x9c, 0xd3, 0xd3, 0xef, 0x1a, 0x2f, 0x52, 0x08, 0x0b, 0x28, + 0xf4, 0x05, 0xcc, 0xb0, 0x03, 0x25, 0xce, 0x72, 0xcb, 0x3e, 0xb6, 0x03, 0xca, 0xfd, 0x07, 0xd9, + 0x1e, 0x4a, 0xa8, 0x56, 0x8d, 0x0f, 0xbc, 0x9a, 0x9e, 0xfc, 0x75, 0x52, 0x69, 0x74, 0x60, 0x2e, + 0xf1, 0x6c, 0xa0, 0x0d, 0x98, 0x3b, 0x76, 0x9d, 0xe0, 0xa8, 0xf5, 0x4a, 0x1c, 0x0d, 0xde, 0x5a, + 0x8e, 0xb6, 0x46, 0xb7, 0x43, 0x22, 0x80, 0x39, 0xc3, 0x8b, 0x39, 0x45, 0xda, 0xce, 0xe3, 0x81, + 0x91, 0x7c, 0xa1, 0x5f, 0x8e, 0xc4, 0x30, 0x61, 0x3a, 0xb6, 0xc5, 0xd0, 0x77, 0x60, 0xbc, 0x41, + 0x45, 0x48, 0xad, 0x25, 0x76, 0xc0, 0x94, 0x72, 0x75, 0xed, 0x58, 0x39, 0x1b, 0xca, 0x3f, 0xcb, + 0xc1, 0x7c, 0xca, 0xe6, 0x3a, 0xfb, 0x54, 0x7f, 0x05, 0x17, 0x8e, 0xad, 0x97, 0x75, 0x8f, 0x8a, + 0x73, 0x75, 0xcf, 0x72, 0x22, 0xb3, 0xfd, 0xd6, 0xe9, 0x49, 0xe9, 0x6a, 0x32, 0x84, 0xea, 0x51, + 0x70, 0x6c, 0xbd, 0x34, 0x29, 0x80, 0x49, 0xea, 0x59, 0x3f, 0x3f, 0x87, 0x09, 0x6d, 0x3b, 0x9d, + 0xb9, 0x73, 0xc6, 0x7d, 0x98, 0x66, 0xc2, 0x63, 0xcf, 0x46, 0x23, 0x63, 0x1b, 0xa0, 0x86, 0x8f, + 0xad, 0xf6, 0x91, 0x4b, 0xc4, 0x8c, 0x8a, 0xfa, 0x8b, 0x1b, 0x1d, 0x10, 0x37, 0x02, 0xc8, 0x8a, + 0xbd, 0x07, 0xc2, 0xd6, 0x27, 0x20, 0x4d, 0x05, 0xcb, 0xf8, 0xc3, 0x3c, 0xa0, 0x72, 0xa7, 0x69, + 0x07, 0xb5, 0xc0, 0xc3, 0xd6, 0xb1, 0xe8, 0xc6, 0x87, 0x30, 0xce, 0xf4, 0x00, 0x56, 0x4c, 0xbb, + 0x33, 0xb6, 0x34, 0xc3, 0xcf, 0x91, 0x5a, 0xb5, 0xda, 0x67, 0x6a, 0xa0, 0x04, 0xd5, 0xc4, 0x4c, + 0xb7, 0xa5, 0xa8, 0x79, 0x0d, 0x55, 0xad, 0x22, 0xa8, 0xea, 0x6f, 0xf4, 0x19, 0x4c, 0x56, 0xdd, + 0xe3, 0x36, 0x99, 0x13, 0x8e, 0xdc, 0xcf, 0xd5, 0x21, 0xde, 0xae, 0x56, 0xb9, 0xda, 0x67, 0x46, + 0xc0, 0xd1, 0x26, 0xcc, 0x3c, 0x6c, 0x75, 0xfc, 0xa3, 0xb2, 0xd3, 0xac, 0xb6, 0x5c, 0x5f, 0x50, + 0x19, 0xe0, 0x7a, 0x3b, 0x17, 0x5f, 0xe3, 0x10, 0xab, 0x7d, 0x66, 0x12, 0x22, 0xba, 0x01, 0x83, + 0x2b, 0xcf, 0xb1, 0x13, 0xc8, 0x7b, 0x65, 0xee, 0xf6, 0xb2, 0xe5, 0xe0, 0xad, 0xa7, 0xab, 0x7d, + 0x26, 0xab, 0xad, 0x8c, 0xc2, 0xb0, 0x10, 0xdd, 0xef, 0x12, 0x09, 0x40, 0x4e, 0x67, 0x2d, 0xb0, + 0x82, 0x8e, 0x8f, 0x8a, 0x30, 0xb2, 0xdb, 0x26, 0x12, 0xa5, 0xd0, 0xcb, 0x4d, 0xf9, 0xdb, 0xf8, + 0xa6, 0x3e, 0xd3, 0x68, 0x51, 0xb5, 0xd5, 0x32, 0xe0, 0xb0, 0xc0, 0x58, 0xd5, 0x27, 0x37, 0x1b, + 0x5a, 0x6b, 0x37, 0x1f, 0x69, 0xb7, 0x10, 0x9d, 0x6b, 0x63, 0x2e, 0x71, 0xf2, 0x8c, 0x2f, 0xe1, + 0xca, 0x6e, 0xdb, 0xc7, 0x5e, 0x50, 0x6e, 0xb7, 0x5b, 0x76, 0x83, 0xdd, 0x6b, 0x50, 0x11, 0x5f, + 0x6c, 0x96, 0xf7, 0x61, 0x88, 0x15, 0xf0, 0x6d, 0x22, 0xf6, 0x60, 0xb9, 0xdd, 0xe6, 0x8a, 0xc5, + 0x03, 0x26, 0x8b, 0x30, 0x55, 0xc1, 0xe4, 0xd0, 0xc6, 0x6f, 0xe4, 0xe0, 0x0a, 0x3b, 0x01, 0xa9, + 0xa4, 0xbf, 0x01, 0xa3, 0xd4, 0xeb, 0xa4, 0x6d, 0x35, 0x34, 0xdd, 0xd3, 0x11, 0x85, 0x66, 0x58, + 0xaf, 0xf8, 0xf3, 0xe4, 0xd3, 0xfd, 0x79, 0xc4, 0x01, 0xeb, 0x4f, 0x3c, 0x60, 0x5f, 0x80, 0xc1, + 0x7b, 0xd4, 0x6a, 0xc5, 0x3a, 0xe5, 0xbf, 0x4e, 0xaf, 0x8c, 0xff, 0x99, 0x87, 0xf9, 0x47, 0xd8, + 0xc1, 0x9e, 0x45, 0xc7, 0xa9, 0x99, 0x59, 0xd4, 0x9b, 0xfd, 0x5c, 0xe6, 0xcd, 0xbe, 0xb4, 0x21, + 0xe4, 0x53, 0x6c, 0x08, 0x17, 0xa1, 0x7f, 0xd7, 0x5c, 0xe3, 0xc3, 0xa2, 0xd2, 0x71, 0xc7, 0xb3, + 0x4d, 0x52, 0x86, 0xd6, 0x42, 0xaf, 0x80, 0x81, 0xae, 0x16, 0xac, 0x19, 0x7e, 0x4b, 0x3a, 0xcc, + 0xbd, 0x02, 0x74, 0x5f, 0x80, 0x4d, 0xc5, 0x50, 0x41, 0xd8, 0xcd, 0x6d, 0x7e, 0xa6, 0x52, 0x06, + 0xc8, 0x6d, 0x0e, 0x2b, 0x4e, 0xe0, 0xbd, 0x62, 0x5b, 0x80, 0x99, 0x1e, 0x84, 0xc1, 0xa1, 0xf8, + 0x05, 0x8c, 0x29, 0x20, 0xa8, 0x00, 0xfd, 0xcf, 0xb8, 0x47, 0xc4, 0xa8, 0x49, 0xfe, 0x44, 0xdf, + 0x84, 0xc1, 0xe7, 0x56, 0xab, 0x83, 0x39, 0x1b, 0xb9, 0x10, 0x1a, 0x46, 0x6a, 0x01, 0xf9, 0x34, + 0x30, 0xcb, 0x88, 0xc9, 0x80, 0x3e, 0xca, 0x7f, 0x90, 0x33, 0x3e, 0x86, 0x85, 0x78, 0x6f, 0xb8, + 0x1e, 0xdd, 0xcd, 0xb4, 0x64, 0x2c, 0xc3, 0xec, 0x23, 0x1c, 0xd0, 0x8d, 0x4b, 0x0f, 0x91, 0xe2, + 0xb0, 0x11, 0x39, 0x67, 0x19, 0x37, 0x28, 0x46, 0x0d, 0xe6, 0x22, 0x54, 0x78, 0xfb, 0x1f, 0xc1, + 0x30, 0x2f, 0x92, 0x1c, 0x95, 0x3b, 0xc8, 0xe1, 0x03, 0x5e, 0xb1, 0xb7, 0xc4, 0xf6, 0x2d, 0xa7, + 0x6c, 0x0a, 0x04, 0xe3, 0x08, 0x2e, 0x90, 0xcf, 0x6c, 0x48, 0x55, 0x6e, 0xc7, 0x4b, 0x30, 0xda, + 0x26, 0x82, 0x82, 0x6f, 0xff, 0x88, 0x6d, 0xa3, 0x41, 0x73, 0x84, 0x14, 0xd4, 0xec, 0x1f, 0x61, + 0x74, 0x19, 0x80, 0x56, 0xd2, 0x61, 0x72, 0x2e, 0x40, 0xc1, 0x99, 0x2d, 0x0d, 0x01, 0xf5, 0x8c, + 0x61, 0xfb, 0xc6, 0xa4, 0x7f, 0x1b, 0x1e, 0xcc, 0xc7, 0x5a, 0xe2, 0x03, 0xb8, 0x0b, 0x23, 0xbc, + 0x63, 0x7e, 0xc4, 0xca, 0xad, 0x8e, 0xc0, 0x94, 0x40, 0xe8, 0x26, 0x4c, 0x39, 0xf8, 0x65, 0x50, + 0x8f, 0xf5, 0x61, 0x82, 0x14, 0x6f, 0x8b, 0x7e, 0x18, 0xbf, 0x40, 0x2d, 0x9b, 0x35, 0xc7, 0x7d, + 0xf1, 0xb4, 0x65, 0x3d, 0xc3, 0xb1, 0x86, 0xbf, 0x03, 0x23, 0xb5, 0xee, 0x0d, 0xb3, 0xe3, 0x23, + 0x1a, 0x37, 0x25, 0x8a, 0xd1, 0x82, 0x22, 0x19, 0x12, 0x51, 0x7f, 0xd7, 0x9a, 0xdb, 0x3f, 0xeb, + 0x09, 0x7c, 0x0e, 0x97, 0x12, 0x5b, 0xfb, 0x59, 0x4f, 0xe2, 0x9f, 0xe5, 0x61, 0x9e, 0x7d, 0x4c, + 0xe2, 0x3b, 0xb8, 0x77, 0x56, 0xf3, 0x73, 0xb9, 0xff, 0xbb, 0x97, 0x70, 0xff, 0x47, 0x51, 0xd4, + 0xfb, 0x3f, 0xed, 0xd6, 0xef, 0x83, 0xe4, 0x5b, 0x3f, 0xaa, 0x16, 0xeb, 0xb7, 0x7e, 0xd1, 0xbb, + 0xbe, 0x95, 0xf4, 0xbb, 0x3e, 0x7a, 0xf3, 0x91, 0x70, 0xd7, 0x97, 0x70, 0xc3, 0xc7, 0x84, 0x5f, + 0x63, 0x0f, 0x16, 0xe2, 0x53, 0x7c, 0x0e, 0xc7, 0xfb, 0xf7, 0x73, 0x70, 0x99, 0x0b, 0x02, 0x91, + 0x43, 0x70, 0xf6, 0x15, 0x7c, 0x0f, 0xc6, 0x39, 0xee, 0x4e, 0xb8, 0x59, 0x2a, 0xd3, 0xa7, 0x27, + 0xa5, 0x09, 0xc1, 0xb0, 0x18, 0xd7, 0xd3, 0xc0, 0xd0, 0x7b, 0x8a, 0xa5, 0x95, 0x59, 0xef, 0x89, + 0x7e, 0x30, 0xca, 0x4c, 0xb2, 0xa9, 0xf6, 0x56, 0xe3, 0x6b, 0xb8, 0x92, 0xd6, 0xf1, 0x73, 0x98, + 0x97, 0x7f, 0x9f, 0x83, 0x4b, 0x9c, 0xbc, 0x76, 0x9c, 0x5e, 0x8b, 0x33, 0x9f, 0xc1, 0x95, 0xee, + 0x31, 0x8c, 0x91, 0x06, 0x45, 0xbf, 0xfb, 0xf9, 0xe7, 0x87, 0x4b, 0xd7, 0x61, 0xcd, 0xb2, 0x15, + 0x58, 0xdc, 0xc1, 0xc1, 0x3a, 0x6e, 0xd5, 0x45, 0xff, 0x55, 0x64, 0xe3, 0xbb, 0xb0, 0x98, 0x3c, + 0x84, 0x73, 0x98, 0x9f, 0xc7, 0x50, 0x4c, 0x60, 0x9c, 0xaf, 0xf7, 0xdd, 0xfa, 0x0a, 0x2e, 0x25, + 0xd2, 0x3a, 0x87, 0x6e, 0xae, 0x92, 0xaf, 0x72, 0x70, 0x0e, 0x4b, 0x68, 0xec, 0xc3, 0xc5, 0x04, + 0x4a, 0xe7, 0xd0, 0xc5, 0x47, 0x30, 0x2f, 0xa5, 0xd1, 0x37, 0xea, 0xe1, 0x06, 0x5c, 0x66, 0x84, + 0xce, 0x67, 0x55, 0x9e, 0xc0, 0x25, 0x4e, 0xee, 0x1c, 0x66, 0x6f, 0x15, 0x16, 0x43, 0xa5, 0x33, + 0x41, 0x96, 0xe8, 0x99, 0xc9, 0x18, 0xeb, 0x70, 0x35, 0xa4, 0x94, 0xf2, 0x61, 0xed, 0x9d, 0x1a, + 0x13, 0x99, 0xc2, 0x55, 0x3a, 0x97, 0x15, 0xdd, 0x87, 0x0b, 0x1a, 0xd1, 0x73, 0x13, 0x27, 0xd6, + 0x60, 0x86, 0x11, 0xd6, 0xc5, 0xcb, 0x25, 0x55, 0xbc, 0x1c, 0x5b, 0x9a, 0x0e, 0x49, 0xd2, 0xe2, + 0xbd, 0x07, 0x09, 0x12, 0xe7, 0x06, 0x95, 0x38, 0x05, 0x48, 0xd8, 0xc3, 0xf7, 0x60, 0x88, 0x95, + 0xf0, 0xfe, 0x25, 0x10, 0x63, 0x02, 0x35, 0x43, 0xe3, 0xc0, 0xc6, 0xf7, 0xe1, 0x32, 0xd3, 0xd6, + 0xc2, 0xeb, 0x05, 0x5d, 0xa3, 0xfa, 0x4e, 0x44, 0x59, 0xbb, 0xc8, 0xe9, 0x46, 0xe1, 0x53, 0x74, + 0xb6, 0x03, 0xb1, 0xb7, 0xd3, 0xe8, 0xf7, 0xf4, 0xa8, 0x42, 0x28, 0x61, 0xf9, 0x44, 0x25, 0xec, + 0x3a, 0x5c, 0x93, 0x4a, 0x58, 0xb4, 0x19, 0x79, 0x65, 0xf6, 0x5d, 0xb8, 0xc4, 0x06, 0x2a, 0x9c, + 0xb6, 0xf4, 0x6e, 0x7c, 0x1c, 0x19, 0xe6, 0x3c, 0x1f, 0xa6, 0x0e, 0x9d, 0x32, 0xc8, 0xbf, 0x93, + 0x13, 0x47, 0x2e, 0x99, 0xf8, 0xcf, 0x5b, 0x2b, 0xdd, 0x84, 0x92, 0x9c, 0x10, 0xbd, 0x47, 0xaf, + 0xa7, 0x92, 0x6e, 0xc0, 0x9c, 0x4a, 0xc6, 0x6e, 0xe0, 0xbd, 0xfb, 0xd4, 0xee, 0xfb, 0x2e, 0x39, + 0x16, 0xb4, 0x40, 0x6c, 0xbb, 0x85, 0x84, 0x79, 0xa3, 0xf0, 0xa6, 0x84, 0x34, 0xea, 0xb0, 0x18, + 0x5f, 0x0a, 0xbb, 0x21, 0x7c, 0x5d, 0xd1, 0x67, 0xe4, 0x08, 0xd3, 0x12, 0xbe, 0x18, 0xa9, 0x44, + 0xc5, 0x39, 0x66, 0xe8, 0x02, 0xcb, 0x30, 0x04, 0xab, 0x89, 0x8c, 0x9f, 0xb4, 0x2e, 0xf6, 0xc3, + 0x2f, 0x01, 0x12, 0x55, 0xd5, 0x9a, 0x29, 0x9a, 0xbe, 0x08, 0xfd, 0xd5, 0x9a, 0xc9, 0x5d, 0xec, + 0xa9, 0x56, 0xdc, 0xf0, 0x3d, 0x93, 0x94, 0x45, 0xa5, 0xd6, 0x7c, 0x0f, 0x52, 0xeb, 0xe3, 0x81, + 0x91, 0xfe, 0xc2, 0x80, 0x89, 0x6a, 0xf6, 0xa1, 0xb3, 0x6f, 0x07, 0x47, 0xb2, 0xc1, 0xb2, 0xf1, + 0x3d, 0x98, 0xd1, 0x9a, 0xe7, 0xa7, 0x38, 0xf3, 0x6d, 0x00, 0xba, 0x09, 0xc3, 0xd5, 0x32, 0xf5, + 0x7d, 0xa0, 0x6a, 0xfd, 0x38, 0xe3, 0x37, 0x0d, 0xab, 0x4e, 0x5f, 0x97, 0x99, 0xa2, 0xd2, 0xf8, + 0xa7, 0x03, 0x0a, 0x75, 0xe5, 0xc5, 0x45, 0xc6, 0xe8, 0xee, 0x03, 0xb0, 0x1d, 0xa2, 0x0c, 0x8e, + 0x08, 0x80, 0x63, 0xfc, 0xba, 0x96, 0xb1, 0x64, 0x53, 0x01, 0xea, 0xf5, 0x45, 0x06, 0xf7, 0xf0, + 0x64, 0x48, 0xc2, 0xa7, 0x41, 0x7a, 0x78, 0x72, 0xd2, 0xbe, 0xa9, 0x02, 0xa1, 0xef, 0x47, 0x1d, + 0x87, 0x07, 0xa9, 0x91, 0xff, 0x2d, 0x71, 0xef, 0x14, 0x1f, 0xdb, 0xd9, 0x7c, 0x87, 0x5f, 0xc0, + 0x1c, 0xc1, 0xb5, 0x9f, 0x52, 0xef, 0xe0, 0x95, 0x97, 0x01, 0x76, 0x18, 0x6f, 0x1f, 0xa2, 0xed, + 0xdc, 0xc8, 0x68, 0x27, 0x04, 0xe6, 0x36, 0xea, 0x90, 0x4e, 0x1d, 0xcb, 0x3a, 0x33, 0x99, 0x3e, + 0xdd, 0x44, 0xe6, 0xfa, 0x8a, 0xd3, 0x6c, 0xbb, 0xb6, 0x54, 0x2a, 0xd8, 0x26, 0xf2, 0x5a, 0x75, + 0xcc, 0xcb, 0x4d, 0x15, 0xc8, 0xb8, 0x99, 0xe9, 0xb0, 0x3b, 0x02, 0x03, 0x3b, 0xd5, 0x9d, 0xf5, + 0x42, 0xce, 0xb8, 0x0b, 0xa0, 0xb4, 0x04, 0x30, 0xb4, 0xb9, 0x65, 0x6e, 0x94, 0xd7, 0x0b, 0x7d, + 0x68, 0x0e, 0xa6, 0xf7, 0xd7, 0x36, 0x97, 0xb7, 0xf6, 0x6b, 0xf5, 0xda, 0x46, 0xd9, 0xdc, 0xa9, + 0x96, 0xcd, 0xe5, 0x42, 0xce, 0xf8, 0x1a, 0x66, 0xf5, 0x11, 0x9e, 0xeb, 0x26, 0x0c, 0x60, 0x46, + 0xca, 0x33, 0x8f, 0xf7, 0x77, 0x14, 0xb7, 0x43, 0xae, 0x20, 0x45, 0x5d, 0x13, 0xb8, 0x2a, 0xc5, + 0x8f, 0x91, 0x02, 0xa4, 0x39, 0x94, 0xe4, 0x33, 0x1d, 0x4a, 0x8c, 0x6f, 0xc3, 0xac, 0xde, 0x6a, + 0xaf, 0x96, 0x9c, 0xb7, 0xa8, 0x3f, 0xa6, 0xe2, 0x72, 0x4f, 0x34, 0xf5, 0xb0, 0x8b, 0x9c, 0xb3, + 0x7e, 0x1b, 0x0a, 0x1c, 0x2a, 0xfc, 0xf2, 0x5e, 0x17, 0xa6, 0xb6, 0x5c, 0xc2, 0xf3, 0x20, 0xe1, + 0xf6, 0xeb, 0x42, 0x81, 0x70, 0x4c, 0x8e, 0xc9, 0x1a, 0x98, 0x85, 0xc1, 0xf5, 0xf0, 0xca, 0xc3, + 0x64, 0x3f, 0xa8, 0xe7, 0x79, 0x60, 0x79, 0x81, 0x70, 0x56, 0x1a, 0x35, 0xe5, 0x6f, 0xf4, 0x0e, + 0x0c, 0x3d, 0xb4, 0x5b, 0x01, 0x37, 0x1f, 0x84, 0x1f, 0x79, 0x42, 0x96, 0x55, 0x98, 0x1c, 0xc0, + 0x30, 0x61, 0x5a, 0x69, 0xf0, 0x0c, 0x5d, 0x45, 0x0b, 0x30, 0xbc, 0x89, 0x5f, 0x2a, 0xed, 0x8b, + 0x9f, 0xc6, 0xdb, 0xe2, 0x06, 0xa2, 0xdb, 0x34, 0xfd, 0x61, 0x0e, 0x16, 0x22, 0x2e, 0xf8, 0xd5, + 0x23, 0xab, 0xd5, 0xc2, 0xce, 0x21, 0x46, 0xb7, 0x60, 0x60, 0x67, 0x6b, 0x67, 0x9b, 0x5b, 0xe8, + 0xc4, 0x5d, 0x1b, 0x29, 0x92, 0x30, 0x26, 0x85, 0x40, 0x4f, 0x60, 0x5a, 0xb8, 0x50, 0xca, 0x2a, + 0x3e, 0xf2, 0xcb, 0xd9, 0x0e, 0x99, 0x71, 0x3c, 0xf4, 0x2e, 0x7f, 0x2f, 0xf0, 0xc3, 0x8e, 0xed, + 0xe1, 0x26, 0xb5, 0x3a, 0x84, 0xd7, 0x86, 0x4a, 0x8d, 0xa9, 0x82, 0xb1, 0xb7, 0x5c, 0xc6, 0x6f, + 0xe5, 0x60, 0x3e, 0xe5, 0x49, 0x01, 0x7a, 0x47, 0x1b, 0xce, 0x8c, 0x32, 0x1c, 0x01, 0xb2, 0xda, + 0xc7, 0xc7, 0x53, 0x55, 0xfc, 0x4a, 0xfb, 0xcf, 0xe0, 0x57, 0xba, 0xda, 0x17, 0xfa, 0x92, 0x56, + 0x00, 0x46, 0x44, 0xb9, 0x31, 0x05, 0x13, 0xda, 0xbc, 0x19, 0x06, 0x8c, 0xab, 0x2d, 0x93, 0xc5, + 0xa9, 0xba, 0x4d, 0xb9, 0x38, 0xe4, 0x6f, 0xe3, 0xef, 0xe7, 0x60, 0x96, 0x0e, 0xf1, 0xd0, 0x26, + 0x2c, 0x25, 0x9c, 0xa1, 0x25, 0x6d, 0x24, 0x8b, 0xda, 0x48, 0x22, 0xb0, 0x72, 0x48, 0x1f, 0xc5, + 0x86, 0xb4, 0x98, 0x34, 0x24, 0xaa, 0xce, 0xda, 0xae, 0xa3, 0x8d, 0x44, 0xb9, 0x06, 0xf9, 0xed, + 0x1c, 0xcc, 0x28, 0x7d, 0x92, 0xfd, 0xbf, 0xaf, 0x75, 0xe9, 0x52, 0x42, 0x97, 0x62, 0x93, 0x5c, + 0x89, 0xf5, 0xe8, 0xad, 0xac, 0x1e, 0x75, 0x9d, 0xe3, 0xff, 0x96, 0x83, 0xb9, 0xc4, 0x39, 0x40, + 0x17, 0x88, 0xcc, 0xd8, 0xf0, 0x70, 0xc0, 0xa7, 0x97, 0xff, 0x22, 0xe5, 0x6b, 0xbe, 0xdf, 0xc1, + 0x1e, 0x3f, 0x3f, 0xfc, 0x17, 0x7a, 0x0b, 0x26, 0xb6, 0xb1, 0x67, 0xbb, 0x4d, 0xe6, 0x71, 0xcc, + 0xdc, 0xa4, 0x26, 0x4c, 0xbd, 0x10, 0x2d, 0xc2, 0x68, 0xb9, 0x75, 0xe8, 0x7a, 0x76, 0x70, 0xc4, + 0x6e, 0xa2, 0x46, 0xcd, 0xb0, 0x80, 0xd0, 0x5e, 0xb6, 0x0f, 0x85, 0xe7, 0xdf, 0x84, 0xc9, 0x7f, + 0x91, 0x43, 0x2b, 0x2c, 0x55, 0x43, 0xec, 0xd0, 0xf2, 0x9f, 0x04, 0xe3, 0x0b, 0x93, 0x6e, 0x02, + 0xfa, 0x82, 0xd6, 0xe4, 0xbf, 0x8c, 0xdb, 0x30, 0x9b, 0x34, 0x8f, 0x89, 0x5b, 0xe6, 0x6f, 0xe6, + 0x61, 0xa6, 0xdc, 0x6c, 0x6e, 0x3c, 0x2c, 0xb3, 0x0b, 0x6d, 0x71, 0xf6, 0xdf, 0x85, 0x81, 0x35, + 0x87, 0x33, 0x30, 0xe5, 0xae, 0x3f, 0x0e, 0x49, 0xa0, 0xc8, 0x0a, 0x91, 0xff, 0x91, 0x09, 0x33, + 0x2b, 0x2f, 0x6d, 0x3f, 0xb0, 0x9d, 0x43, 0xf5, 0x05, 0x4f, 0xbe, 0x97, 0x17, 0x3c, 0xab, 0x7d, + 0x66, 0x12, 0x32, 0xda, 0x81, 0x0b, 0x9b, 0xf8, 0x45, 0xc2, 0x16, 0x92, 0x0f, 0x1b, 0x95, 0x83, + 0x1e, 0xdb, 0x39, 0x29, 0xb8, 0xea, 0x0e, 0xfd, 0xf5, 0x3c, 0x7d, 0x55, 0xad, 0x0c, 0x8c, 0xb7, + 0xbc, 0x0b, 0xb3, 0x4a, 0x87, 0x42, 0x3e, 0xc5, 0xe6, 0xa4, 0x94, 0x3c, 0x1c, 0xf5, 0x20, 0x25, + 0xa2, 0xa3, 0x7d, 0x98, 0xd7, 0x3b, 0x15, 0x52, 0xd6, 0x0f, 0x43, 0x12, 0xc8, 0x6a, 0x9f, 0x99, + 0x86, 0x8d, 0x96, 0xa0, 0xbf, 0xdc, 0x78, 0xc6, 0xa7, 0x25, 0x79, 0xc9, 0xd8, 0xc8, 0xca, 0x8d, + 0x67, 0xab, 0x7d, 0x26, 0x01, 0xd6, 0xce, 0xc3, 0x7f, 0xcc, 0xc1, 0x7c, 0xca, 0x0a, 0xa3, 0x2b, + 0x00, 0xac, 0x50, 0xf9, 0x22, 0x28, 0x25, 0x44, 0xca, 0xe4, 0x1e, 0x11, 0xaf, 0xda, 0x6c, 0x65, + 0x26, 0xe5, 0x1b, 0xc1, 0xb0, 0xc2, 0x54, 0x80, 0xd0, 0xb6, 0x70, 0x40, 0x62, 0x4f, 0x15, 0x75, + 0xb6, 0xad, 0xd4, 0x68, 0x9e, 0x47, 0xd1, 0x27, 0x8a, 0x2a, 0x09, 0x6e, 0x97, 0xad, 0x46, 0x47, + 0x21, 0x07, 0x8d, 0x6e, 0xc1, 0x10, 0x2b, 0xe4, 0x6b, 0x28, 0xa2, 0x12, 0x84, 0xc0, 0xbc, 0xde, + 0xf8, 0x47, 0x39, 0xb8, 0xc0, 0xbe, 0x88, 0xb1, 0xa3, 0xf1, 0x6d, 0xed, 0x68, 0x5c, 0x93, 0x1d, + 0x4e, 0x02, 0xd6, 0x4e, 0x47, 0x45, 0x7f, 0xd7, 0xd6, 0xeb, 0xa9, 0x50, 0x91, 0xd4, 0x7d, 0xfb, + 0x4f, 0x72, 0xc2, 0x4c, 0x15, 0xdf, 0xba, 0x2b, 0x30, 0xfe, 0x7a, 0x5b, 0x56, 0x43, 0x43, 0xef, + 0xb1, 0x1d, 0x95, 0xcf, 0x1e, 0x69, 0xe6, 0xa6, 0xfa, 0x04, 0x8a, 0xe9, 0x53, 0xd3, 0x6d, 0x5b, + 0x19, 0x0f, 0x13, 0xb0, 0x5f, 0x67, 0x39, 0x3b, 0x31, 0x3a, 0xb5, 0x57, 0x4e, 0x43, 0xac, 0xe8, + 0xcd, 0xa8, 0xb3, 0x7c, 0xaa, 0x03, 0xb2, 0xda, 0xdb, 0x7c, 0x78, 0x1f, 0xc2, 0x37, 0x27, 0x95, + 0x58, 0xd5, 0xee, 0xff, 0xbb, 0xbc, 0xbe, 0x17, 0x5f, 0xa7, 0xd1, 0x2a, 0x4c, 0x6c, 0xe2, 0x17, + 0xb1, 0x76, 0xa9, 0xaf, 0x9b, 0x83, 0x5f, 0xd4, 0x95, 0xb6, 0x55, 0x7f, 0x3a, 0x0d, 0x07, 0x1d, + 0xc0, 0xa4, 0xe0, 0x1a, 0xbd, 0x32, 0x4f, 0xf6, 0x4e, 0x9b, 0xb4, 0x90, 0xf2, 0xaa, 0x32, 0x42, + 0xf1, 0xfc, 0xcf, 0xb3, 0xb1, 0x0d, 0x0b, 0xf1, 0xd9, 0xe3, 0xad, 0xbd, 0xdb, 0x6d, 0xed, 0x99, + 0x3d, 0xa7, 0xa9, 0xef, 0x83, 0x55, 0x6a, 0x63, 0x93, 0x30, 0x52, 0x60, 0xbf, 0x17, 0x5d, 0x0c, + 0xea, 0xa4, 0x29, 0x16, 0x43, 0xf5, 0xd9, 0x11, 0x6f, 0x27, 0xaa, 0xd4, 0x4c, 0xa9, 0x52, 0xe2, + 0x1d, 0xbb, 0x0d, 0xc3, 0xbc, 0x28, 0x12, 0xfa, 0x24, 0xdc, 0x95, 0x02, 0xc0, 0xf8, 0x9d, 0x1c, + 0x5c, 0xa4, 0x46, 0x53, 0xdb, 0x39, 0x6c, 0xe1, 0x5d, 0x5f, 0x7f, 0xfe, 0xf0, 0x2d, 0x8d, 0xd1, + 0xcc, 0xa7, 0xbc, 0xad, 0xfd, 0x59, 0xb1, 0x97, 0xdf, 0xcb, 0x41, 0x31, 0xa9, 0x6f, 0xe7, 0xcb, + 0x61, 0xee, 0x70, 0x8d, 0x34, 0xaf, 0xb9, 0x2b, 0xca, 0x36, 0xc5, 0x60, 0xc9, 0x20, 0xc9, 0xff, + 0x1a, 0x6b, 0xf9, 0x8b, 0x1c, 0xcc, 0xae, 0xf9, 0xaa, 0x80, 0xcf, 0x27, 0xee, 0x4e, 0xd2, 0x53, + 0x7f, 0xba, 0xae, 0xab, 0x7d, 0x49, 0x4f, 0xf9, 0xdf, 0x55, 0x1e, 0x86, 0xe6, 0xb3, 0xde, 0xf0, + 0x13, 0x51, 0x52, 0x3e, 0x0d, 0xbd, 0x09, 0x03, 0x9b, 0x44, 0x9c, 0xea, 0xe7, 0xfb, 0x8f, 0x61, + 0x90, 0x22, 0xfa, 0x30, 0x93, 0x74, 0x99, 0xfc, 0x40, 0x0f, 0x63, 0xcf, 0x3f, 0x07, 0xba, 0xbf, + 0x51, 0x5f, 0xed, 0x8b, 0xbe, 0x04, 0xad, 0x8c, 0xc0, 0xd0, 0x8e, 0xe5, 0x1d, 0xe2, 0xc0, 0xf8, + 0x2e, 0x14, 0xb9, 0x57, 0x11, 0x33, 0x43, 0x53, 0xdf, 0x23, 0x3f, 0x74, 0x1c, 0xcb, 0xf2, 0x04, + 0xba, 0x02, 0x40, 0x95, 0xce, 0x35, 0xa7, 0x89, 0x5f, 0x32, 0xe7, 0x37, 0x53, 0x29, 0x31, 0xde, + 0x83, 0x51, 0x39, 0x04, 0xaa, 0x01, 0x2a, 0x12, 0x23, 0x1d, 0xce, 0xac, 0xf6, 0x20, 0x55, 0xbc, + 0x42, 0x7d, 0x00, 0x73, 0x91, 0xa5, 0x08, 0x9f, 0x5b, 0x4b, 0xcd, 0x8c, 0x7a, 0xc3, 0x99, 0xf2, + 0xb7, 0x51, 0x85, 0xe9, 0xd8, 0x4a, 0x23, 0x44, 0x5f, 0x42, 0x33, 0x13, 0x05, 0xf9, 0xa0, 0xd4, + 0x6a, 0xab, 0xa4, 0x6c, 0x67, 0xbd, 0xc6, 0x5e, 0xf8, 0x90, 0xb2, 0x9d, 0xf5, 0x5a, 0x65, 0x88, + 0xed, 0x1c, 0xe3, 0x5f, 0xe6, 0xa9, 0xe6, 0x1e, 0x9b, 0x83, 0x88, 0x11, 0x54, 0x35, 0xc4, 0x56, + 0x60, 0x94, 0x8e, 0x78, 0x59, 0x3c, 0x99, 0xcb, 0x76, 0x84, 0x19, 0xf9, 0xf1, 0x49, 0xa9, 0x8f, + 0x7a, 0xbf, 0x84, 0x68, 0xe8, 0x53, 0x18, 0x5e, 0x71, 0x9a, 0x94, 0x42, 0xff, 0x19, 0x28, 0x08, + 0x24, 0xb2, 0x0e, 0xb4, 0xcb, 0x44, 0x14, 0xe2, 0xb6, 0x33, 0x53, 0x29, 0x09, 0x4d, 0x08, 0x83, + 0x69, 0x26, 0x84, 0xa1, 0x88, 0x09, 0xc1, 0x80, 0xc1, 0x2d, 0xaf, 0xc9, 0x83, 0x5a, 0x4c, 0x2e, + 0x8d, 0xf3, 0xed, 0x45, 0xcb, 0x4c, 0x56, 0x65, 0xfc, 0x79, 0x0e, 0xe6, 0x1f, 0xe1, 0x20, 0x71, + 0xdf, 0x68, 0xb3, 0x92, 0x7b, 0xe3, 0x59, 0xc9, 0xbf, 0xce, 0xac, 0xc8, 0x51, 0xf7, 0xa7, 0x8d, + 0x7a, 0x20, 0x6d, 0xd4, 0x83, 0xe9, 0xa3, 0x7e, 0x04, 0x43, 0x6c, 0xa8, 0xe8, 0x3a, 0x0c, 0xae, + 0x05, 0xf8, 0x38, 0x34, 0x93, 0xa8, 0x6e, 0x7c, 0x26, 0xab, 0x23, 0x1a, 0xd7, 0xba, 0xe5, 0xab, + 0x66, 0x12, 0xfe, 0xd3, 0xf8, 0x01, 0x7d, 0x6c, 0xbb, 0xee, 0x36, 0x9e, 0x29, 0xe6, 0xf6, 0x61, + 0x76, 0x2a, 0xa3, 0xd7, 0x33, 0x04, 0x8a, 0xd5, 0x98, 0x02, 0x02, 0x5d, 0x85, 0xb1, 0x35, 0xe7, + 0xa1, 0xeb, 0x35, 0xf0, 0x96, 0xd3, 0x62, 0xd4, 0x47, 0x4c, 0xb5, 0x88, 0x9b, 0xa1, 0x78, 0x0b, + 0xa1, 0x6d, 0x87, 0x16, 0x44, 0x6c, 0x3b, 0xa4, 0x6c, 0x6f, 0xc9, 0x64, 0x75, 0xdc, 0xca, 0x45, + 0xfe, 0xce, 0x32, 0xdf, 0x48, 0x3b, 0x4f, 0x37, 0xc0, 0x03, 0xb8, 0x68, 0xe2, 0x76, 0xcb, 0x22, + 0x02, 0xd7, 0xb1, 0xcb, 0xe0, 0xe5, 0x98, 0xaf, 0x26, 0x3c, 0x42, 0xd2, 0x9d, 0x3a, 0x64, 0x97, + 0xf3, 0x19, 0x5d, 0x3e, 0x86, 0x6b, 0x8f, 0x70, 0xa0, 0x73, 0xb9, 0xd0, 0x98, 0xcf, 0x07, 0xbf, + 0x0a, 0x23, 0xbe, 0x7e, 0x11, 0x71, 0x45, 0xdc, 0x7f, 0x25, 0x21, 0xee, 0x3d, 0x10, 0x57, 0x75, + 0x9c, 0x8e, 0xfc, 0xcb, 0xf8, 0x0c, 0x4a, 0x69, 0xcd, 0xf5, 0xe6, 0x73, 0x6b, 0xc3, 0xd5, 0x74, + 0x02, 0xf2, 0xb3, 0x28, 0x2e, 0x2d, 0xa4, 0xea, 0x9c, 0xdd, 0x5b, 0xfd, 0x9e, 0x83, 0xff, 0x61, + 0x54, 0x84, 0xf7, 0xe1, 0x1b, 0x74, 0xb7, 0x4e, 0xfd, 0x01, 0x74, 0x02, 0xe1, 0xbc, 0x96, 0x61, + 0x44, 0x94, 0xf1, 0x79, 0x9d, 0x4f, 0xec, 0xa9, 0x98, 0xd0, 0xa6, 0x20, 0x20, 0xd1, 0x8c, 0x1f, + 0x88, 0xbb, 0x31, 0x1d, 0xa3, 0xb7, 0x97, 0x95, 0xbd, 0x5c, 0x86, 0x19, 0x2e, 0x5c, 0xd4, 0x69, + 0xab, 0x77, 0x1e, 0x05, 0xe5, 0xce, 0x83, 0x5d, 0x75, 0x5c, 0xd5, 0x6d, 0xf0, 0x79, 0xbe, 0x2f, + 0xc3, 0x22, 0x74, 0x45, 0xbd, 0xd9, 0x18, 0x8f, 0x3f, 0x45, 0xbd, 0x07, 0xc5, 0xa4, 0x06, 0x15, + 0x03, 0x8a, 0x34, 0x9f, 0xf3, 0xa8, 0x4e, 0xbf, 0x92, 0x03, 0x43, 0x73, 0xf1, 0xa2, 0x2b, 0xb4, + 0xed, 0xb9, 0xcf, 0xed, 0xa6, 0x72, 0x2b, 0xf7, 0x8e, 0x66, 0x11, 0x66, 0x0f, 0xac, 0xa2, 0xde, + 0xe5, 0x9c, 0xdb, 0xdd, 0x8b, 0x58, 0x69, 0x99, 0x2c, 0x4a, 0xdd, 0xbe, 0x9e, 0x61, 0xf5, 0x81, + 0x82, 0xb4, 0xde, 0xfe, 0x45, 0x0e, 0xae, 0x67, 0xf6, 0x81, 0xf7, 0xff, 0x00, 0x0a, 0xd1, 0x3a, + 0xbe, 0xf6, 0x25, 0xc5, 0x9d, 0x25, 0x4e, 0x61, 0xef, 0x3e, 0x73, 0x61, 0x17, 0xae, 0x51, 0x6d, + 0x49, 0x39, 0x46, 0xef, 0xec, 0xbd, 0x47, 0x1f, 0x02, 0xec, 0xb8, 0x81, 0xd5, 0xaa, 0x52, 0x1b, + 0x57, 0x7f, 0xf8, 0x1c, 0x21, 0x20, 0xa5, 0xf5, 0x68, 0xc4, 0x05, 0x05, 0xd8, 0xf8, 0x9c, 0x9e, + 0xc8, 0xe4, 0x4e, 0xf7, 0x76, 0x48, 0xaa, 0x70, 0x3d, 0xe2, 0x52, 0xf1, 0x1a, 0x44, 0x02, 0x98, + 0x23, 0xd3, 0x4f, 0x44, 0x98, 0x47, 0x9e, 0xdb, 0x69, 0xff, 0x7c, 0x56, 0xfd, 0x0f, 0x72, 0xcc, + 0x0f, 0x54, 0x6d, 0x96, 0x2f, 0x74, 0x15, 0x20, 0x2c, 0x8d, 0xbc, 0x07, 0x90, 0x15, 0x7b, 0xf7, + 0x99, 0xf2, 0x4a, 0x2f, 0x5b, 0x0e, 0x19, 0x01, 0x05, 0xed, 0xe7, 0xbb, 0x92, 0x0f, 0xa8, 0x1f, + 0x85, 0x6c, 0xbd, 0xb7, 0x79, 0x7f, 0x5f, 0xd8, 0x68, 0xce, 0x88, 0x77, 0x04, 0xb3, 0xe4, 0xec, + 0x12, 0x0d, 0xc5, 0xf5, 0xec, 0x40, 0xbc, 0x6c, 0x41, 0xdb, 0xfc, 0x35, 0x3b, 0xc3, 0xfa, 0xe4, + 0xa7, 0x27, 0xa5, 0x0f, 0xce, 0xf2, 0x34, 0x58, 0xd0, 0xdc, 0x91, 0x2f, 0xe0, 0x8d, 0x79, 0xe8, + 0xaf, 0x9a, 0xeb, 0x94, 0x55, 0x99, 0xeb, 0x92, 0x55, 0x99, 0xeb, 0xc6, 0xff, 0xca, 0x43, 0x89, + 0xc5, 0xdb, 0xa0, 0xee, 0x37, 0xa1, 0xae, 0xa4, 0xf8, 0xf3, 0xf4, 0x6a, 0x21, 0x88, 0xc4, 0xd3, + 0xc8, 0xf7, 0x12, 0x4f, 0xe3, 0x17, 0x5f, 0xdf, 0xaa, 0x5a, 0x79, 0xfb, 0xf4, 0xa4, 0x74, 0x3d, + 0x34, 0x0c, 0xb0, 0xda, 0x24, 0x0b, 0x41, 0x4a, 0x13, 0x71, 0x93, 0xc6, 0xc0, 0x6b, 0x98, 0x34, + 0xee, 0xc1, 0x30, 0x55, 0x3d, 0xd6, 0xb6, 0xb9, 0xd3, 0x28, 0xdd, 0x9e, 0x34, 0x34, 0x4e, 0xdd, + 0x56, 0x23, 0x78, 0x09, 0x30, 0xe3, 0x1f, 0xe6, 0xe1, 0x6a, 0xfa, 0x9c, 0xf3, 0xbe, 0x2d, 0x03, + 0x84, 0x8e, 0x3f, 0x59, 0x8e, 0x46, 0xf4, 0xec, 0xbc, 0xc0, 0x07, 0xd2, 0xd1, 0x4f, 0xc1, 0x23, + 0x52, 0x8b, 0x78, 0x36, 0x1a, 0xb9, 0x0d, 0xd3, 0x5e, 0x93, 0xf2, 0xf0, 0x93, 0xbc, 0x48, 0x0b, + 0x3f, 0xc9, 0xcb, 0xd0, 0x01, 0xcc, 0x6f, 0x7b, 0xf6, 0x73, 0x2b, 0xc0, 0x4f, 0xf0, 0x2b, 0xf6, + 0xce, 0x68, 0x85, 0x3f, 0x2e, 0x62, 0x6f, 0x81, 0x6f, 0x9d, 0x9e, 0x94, 0xde, 0x6a, 0x33, 0x10, + 0x72, 0x30, 0xeb, 0xec, 0x21, 0x5b, 0x3d, 0xfe, 0xde, 0x28, 0x8d, 0x90, 0xf1, 0x9f, 0x73, 0x70, + 0x89, 0x0a, 0xd4, 0xfc, 0x66, 0x41, 0x34, 0xfe, 0x5a, 0xfe, 0xa6, 0xea, 0x00, 0xf9, 0x5e, 0xa4, + 0xfe, 0xa6, 0xda, 0xb3, 0x5a, 0x53, 0x03, 0x43, 0x6b, 0x30, 0xc6, 0x7f, 0x2b, 0xe6, 0xe3, 0x39, + 0x85, 0x61, 0xd1, 0xad, 0xce, 0xac, 0x47, 0x74, 0x63, 0x73, 0x62, 0xf4, 0xed, 0x9f, 0xa9, 0xe2, + 0x1a, 0x3f, 0xc9, 0xc3, 0xe2, 0x1e, 0xf6, 0xec, 0xa7, 0xaf, 0x52, 0x06, 0xb3, 0x05, 0xb3, 0xa2, + 0x88, 0xc5, 0xdc, 0xd0, 0x8e, 0x18, 0x0b, 0x41, 0x27, 0xba, 0xca, 0x83, 0x76, 0x88, 0x13, 0x97, + 0x88, 0x78, 0x06, 0x4f, 0xd2, 0x77, 0x61, 0x24, 0x12, 0xf5, 0x86, 0xae, 0xbf, 0x38, 0xa1, 0xe1, + 0x52, 0xad, 0xf6, 0x99, 0x12, 0x12, 0xfd, 0x5a, 0xfa, 0x15, 0x25, 0xb7, 0x24, 0x74, 0x8b, 0x8d, + 0x46, 0x0f, 0x2c, 0x39, 0xac, 0x96, 0x52, 0x9b, 0x70, 0x60, 0x57, 0xfb, 0xcc, 0xb4, 0x96, 0x2a, + 0x63, 0x30, 0x5a, 0xa6, 0xd7, 0xae, 0x44, 0x71, 0xff, 0xdf, 0x79, 0xb8, 0x22, 0xde, 0x0c, 0xa5, + 0x4c, 0xf3, 0x97, 0x30, 0x2f, 0x8a, 0xca, 0x6d, 0x22, 0x30, 0xe0, 0xa6, 0x3e, 0xd3, 0x2c, 0x0c, + 0xa4, 0x98, 0x69, 0x8b, 0xc3, 0x84, 0x93, 0x9d, 0x86, 0x7e, 0x3e, 0x06, 0xd1, 0x4f, 0x93, 0x62, + 0x10, 0x51, 0xc3, 0xa4, 0xca, 0x33, 0xb5, 0xa9, 0xd1, 0xf8, 0x67, 0x33, 0x66, 0x50, 0x1d, 0x78, + 0x53, 0x83, 0xea, 0x6a, 0x5f, 0xd4, 0xa4, 0x5a, 0x99, 0x84, 0xf1, 0x4d, 0xfc, 0x22, 0x9c, 0xf7, + 0xbf, 0x9d, 0x8b, 0xbc, 0x5b, 0x27, 0x12, 0x06, 0x7b, 0xc0, 0x9e, 0x0b, 0xc3, 0xd8, 0xd0, 0x77, + 0xeb, 0xaa, 0x84, 0xc1, 0x40, 0xd7, 0x60, 0x98, 0xf9, 0x1e, 0x37, 0x7b, 0xd0, 0xcd, 0xe5, 0xe3, + 0x1f, 0xf6, 0x22, 0xb3, 0xc9, 0xd4, 0x74, 0x8e, 0x6f, 0x3c, 0x81, 0x6b, 0xdc, 0xf5, 0x5d, 0x5f, + 0x7c, 0xda, 0xd0, 0x19, 0x3f, 0x5f, 0x86, 0x05, 0x57, 0x1e, 0xe1, 0x28, 0xeb, 0xd1, 0x1e, 0x47, + 0x7d, 0x06, 0x53, 0x5a, 0xb9, 0xa4, 0x48, 0xa5, 0x52, 0xb9, 0x87, 0x24, 0xe9, 0x28, 0xb4, 0x71, + 0x35, 0xa9, 0x09, 0xb5, 0xb3, 0x06, 0xa6, 0xf1, 0x1c, 0xbd, 0xf0, 0x16, 0xd9, 0x3f, 0x03, 0xd7, + 0xbb, 0xa5, 0x9c, 0x6b, 0xc6, 0xf1, 0x58, 0xd8, 0x3a, 0xf1, 0xe5, 0x95, 0xb5, 0xc6, 0x04, 0x8c, + 0x55, 0x5d, 0x27, 0xc0, 0x2f, 0xa9, 0xa8, 0x63, 0x4c, 0xc2, 0xb8, 0xa8, 0x6a, 0x61, 0xdf, 0x37, + 0x7e, 0xb7, 0x1f, 0x0c, 0x3e, 0xb1, 0x49, 0xd6, 0x53, 0x31, 0x1f, 0x07, 0xb1, 0xce, 0xf2, 0x0f, + 0xd5, 0x05, 0xd5, 0x46, 0x1c, 0xd6, 0xb2, 0x9d, 0x47, 0xe5, 0xbc, 0x46, 0x58, 0xaa, 0xed, 0xbc, + 0xd8, 0xe8, 0xbf, 0x97, 0xc2, 0x26, 0xd9, 0x61, 0xbb, 0x71, 0x7a, 0x52, 0xba, 0x96, 0xc2, 0x26, + 0x35, 0xba, 0xc9, 0x2c, 0xd3, 0xd4, 0xa6, 0x81, 0x8b, 0x1c, 0x48, 0xbe, 0xed, 0x94, 0x35, 0xdc, + 0x11, 0x8b, 0x15, 0xd4, 0xc9, 0x00, 0xf4, 0x13, 0xa9, 0x80, 0xa2, 0x5d, 0x7d, 0x2e, 0xf9, 0x79, + 0x14, 0x5e, 0x1b, 0x6a, 0x15, 0x7f, 0x3e, 0xae, 0x94, 0x68, 0x54, 0x35, 0x32, 0xaa, 0x45, 0xfc, + 0x37, 0xe5, 0x03, 0x04, 0xf2, 0x21, 0xb5, 0x5b, 0x98, 0xbf, 0xb6, 0x11, 0xcb, 0xd2, 0x49, 0xbe, + 0xfd, 0xce, 0xf5, 0xc4, 0xa3, 0x69, 0xf0, 0x6e, 0xcc, 0xd1, 0xd3, 0xae, 0x5c, 0x92, 0xe8, 0x1b, + 0x27, 0x39, 0xf1, 0xec, 0x22, 0x76, 0x25, 0x7c, 0x56, 0x49, 0xb2, 0xa2, 0xdd, 0xe2, 0xe6, 0x53, + 0x6e, 0x71, 0xb5, 0x3b, 0xaf, 0xa0, 0xcb, 0xb5, 0x6e, 0xff, 0x9b, 0x5f, 0x03, 0xfd, 0xdb, 0x61, + 0x98, 0xde, 0xb6, 0x0e, 0x6d, 0x87, 0xf0, 0x1e, 0x13, 0xfb, 0x6e, 0xc7, 0x6b, 0x60, 0x54, 0x86, + 0x49, 0xdd, 0x03, 0xb6, 0x8b, 0x7f, 0x2f, 0x61, 0xaf, 0x7a, 0x19, 0x5a, 0x82, 0x51, 0xf9, 0x32, + 0x95, 0xf3, 0xc4, 0x84, 0x17, 0xab, 0xab, 0x7d, 0x66, 0x08, 0x86, 0x3e, 0xd4, 0xac, 0xfe, 0x53, + 0xf2, 0x91, 0x35, 0x85, 0x5d, 0x62, 0x2e, 0x8a, 0x8e, 0xdb, 0xd4, 0xf9, 0x3a, 0xb3, 0x9c, 0xff, + 0x20, 0x76, 0x11, 0x30, 0xa8, 0xf5, 0x38, 0x66, 0x78, 0xa1, 0x9f, 0xb4, 0xd4, 0xd0, 0xb4, 0xf1, + 0x2b, 0x02, 0xf4, 0x5d, 0x18, 0x7b, 0xd2, 0x39, 0xc0, 0xe2, 0xca, 0x63, 0x88, 0xb3, 0xf9, 0xa8, + 0x5f, 0x37, 0xaf, 0xdf, 0x7b, 0xc0, 0xd6, 0xe0, 0x59, 0xe7, 0x00, 0xc7, 0x63, 0x1e, 0x93, 0xf3, + 0xa5, 0x10, 0x43, 0x47, 0x50, 0x88, 0xba, 0x60, 0xf3, 0x30, 0x68, 0x19, 0x8e, 0xe3, 0x34, 0x08, + 0x84, 0x12, 0x59, 0x99, 0x39, 0x86, 0x6a, 0x8d, 0xc4, 0xa8, 0xa2, 0x5f, 0x82, 0xb9, 0x44, 0xb3, + 0x17, 0x8f, 0xaf, 0xdc, 0xcd, 0xa2, 0x46, 0x79, 0x53, 0x64, 0xd6, 0xc4, 0xab, 0x2e, 0xad, 0xe5, + 0xe4, 0x56, 0x50, 0x13, 0xa6, 0x22, 0xae, 0xc5, 0x3c, 0x78, 0x7c, 0xba, 0xb3, 0x32, 0xe5, 0xaf, + 0x22, 0x8e, 0x68, 0x62, 0x5b, 0x51, 0x92, 0x68, 0x1d, 0x46, 0xa5, 0xd6, 0x4a, 0x43, 0xd5, 0x24, + 0x6b, 0xe8, 0x0b, 0xa7, 0x27, 0xa5, 0xd9, 0x50, 0x43, 0xd7, 0x68, 0x86, 0x04, 0xd0, 0x8f, 0xe0, + 0x9a, 0xdc, 0xa2, 0x5b, 0x5e, 0xb2, 0x2d, 0x83, 0x47, 0x6e, 0xbe, 0x1d, 0xdd, 0xe1, 0x69, 0xf0, + 0x7b, 0xf7, 0x57, 0xfb, 0xcc, 0xee, 0x64, 0x2b, 0x00, 0x23, 0x1e, 0x3f, 0x94, 0x8f, 0x07, 0x46, + 0x06, 0x0a, 0x83, 0x6c, 0xdf, 0x08, 0x97, 0xed, 0xff, 0x33, 0xc4, 0xde, 0x40, 0xee, 0x3a, 0xf6, + 0x53, 0x3b, 0x3c, 0xbf, 0xaa, 0x8d, 0x24, 0x4c, 0x14, 0xc1, 0x25, 0x98, 0x94, 0x94, 0x10, 0xd2, + 0x9c, 0x92, 0xef, 0x6a, 0x4e, 0x79, 0xa0, 0x5c, 0x19, 0x28, 0xa1, 0x0d, 0xd9, 0x97, 0x4a, 0x37, + 0x5f, 0x84, 0x77, 0x09, 0x5f, 0xc3, 0x10, 0x0d, 0xb2, 0xc6, 0xee, 0x63, 0xc6, 0x96, 0xee, 0x70, + 0xae, 0x95, 0xd1, 0x7d, 0x16, 0x95, 0x8d, 0xbf, 0x6b, 0xa6, 0x71, 0x44, 0x5a, 0xb4, 0x40, 0x8d, + 0x23, 0xc2, 0x40, 0xd0, 0x0e, 0xcc, 0x6c, 0x7b, 0xb8, 0xc9, 0x1d, 0x87, 0xdb, 0x1e, 0x57, 0x31, + 0x99, 0xf2, 0x4a, 0x03, 0x3d, 0xb7, 0x45, 0x75, 0x1d, 0xcb, 0x7a, 0x95, 0xfb, 0x27, 0xa0, 0xa3, + 0x15, 0x98, 0xac, 0x61, 0xcb, 0x6b, 0x1c, 0x3d, 0xc1, 0xaf, 0xc8, 0x47, 0x4b, 0x8b, 0x8e, 0xee, + 0xd3, 0x1a, 0x32, 0x5e, 0x5a, 0xa5, 0x5e, 0xde, 0xeb, 0x48, 0xe8, 0x73, 0x18, 0xaa, 0xb9, 0x5e, + 0x50, 0x79, 0xc5, 0xcf, 0xb4, 0xb0, 0xd8, 0xb3, 0xc2, 0xca, 0x45, 0x11, 0x21, 0xde, 0x77, 0xbd, + 0xa0, 0x7e, 0xa0, 0x85, 0x49, 0x61, 0x20, 0xe8, 0x15, 0xcc, 0xea, 0xe7, 0x89, 0xfb, 0xb3, 0x8e, + 0x70, 0x9f, 0xa6, 0xa4, 0x43, 0xcb, 0x40, 0x2a, 0xb7, 0x38, 0xf5, 0xab, 0xd1, 0x53, 0xfb, 0x94, + 0xd6, 0xab, 0xd9, 0x2b, 0x92, 0xf0, 0xd1, 0x06, 0x0d, 0xac, 0xcf, 0x46, 0x54, 0xf6, 0x99, 0x1f, + 0xec, 0x68, 0x18, 0x88, 0xa7, 0x43, 0xcf, 0x24, 0x9d, 0x09, 0xcb, 0x8f, 0x66, 0x63, 0x30, 0x63, + 0xa8, 0x68, 0x1b, 0xa6, 0x77, 0x7d, 0xbc, 0xed, 0xe1, 0xe7, 0x36, 0x7e, 0x21, 0xe8, 0xb1, 0x68, + 0x52, 0x74, 0x99, 0x08, 0xbd, 0x36, 0xab, 0x4d, 0x22, 0x18, 0x47, 0x46, 0x1f, 0x02, 0x6c, 0xdb, + 0x8e, 0x83, 0x9b, 0xf4, 0xda, 0x67, 0x8c, 0x92, 0xa2, 0x86, 0xb1, 0x36, 0x2d, 0xad, 0xbb, 0x4e, + 0x4b, 0x9d, 0x52, 0x05, 0xb8, 0xf8, 0x21, 0x8c, 0x29, 0x5b, 0x2c, 0xe1, 0x5d, 0xfc, 0xac, 0xfa, + 0x2e, 0x7e, 0x54, 0x7d, 0xff, 0xfe, 0x8f, 0x73, 0xb0, 0x98, 0xbc, 0x75, 0xb9, 0xad, 0x63, 0x0b, + 0x46, 0x65, 0xa1, 0x7c, 0xe5, 0x21, 0xe4, 0xa5, 0xc8, 0xf7, 0x96, 0x9d, 0x1f, 0x71, 0xd0, 0xd5, + 0xf1, 0x86, 0x34, 0x5e, 0xc3, 0x88, 0xf9, 0x1f, 0x86, 0x61, 0x96, 0x7a, 0x33, 0x47, 0xd9, 0xc2, + 0x67, 0x34, 0xbe, 0x05, 0x2d, 0x53, 0x6c, 0x72, 0x5c, 0x3d, 0x67, 0xe5, 0xd1, 0xc8, 0x3f, 0x1a, + 0x02, 0x7a, 0x4f, 0xbd, 0x02, 0xce, 0x2b, 0x91, 0xf3, 0x45, 0xa1, 0x3a, 0x84, 0xf0, 0x6e, 0xf8, + 0x1d, 0xed, 0x06, 0xb2, 0x67, 0x1e, 0x33, 0xd0, 0x2b, 0x8f, 0xd9, 0x95, 0x3c, 0x86, 0xc5, 0x4d, + 0x78, 0x5b, 0xe1, 0x31, 0xe7, 0xcf, 0x5c, 0x86, 0xce, 0x9b, 0xb9, 0x0c, 0xbf, 0x19, 0x73, 0x19, + 0x79, 0x4d, 0xe6, 0xf2, 0x90, 0xa8, 0xdb, 0xb8, 0xa9, 0x58, 0x97, 0xd9, 0xf9, 0xe6, 0x2a, 0x35, + 0xb5, 0x1b, 0x24, 0x99, 0x98, 0x23, 0x58, 0xa9, 0x4c, 0x0a, 0xfe, 0x6a, 0x98, 0xd4, 0xd8, 0x39, + 0x33, 0xa9, 0xf1, 0x37, 0x60, 0x52, 0x6f, 0xc2, 0x69, 0x3e, 0xa5, 0x6e, 0x55, 0xb5, 0xda, 0x2a, + 0xbf, 0xe8, 0x56, 0x6e, 0x96, 0x57, 0x5d, 0x5f, 0x78, 0x51, 0xd3, 0xbf, 0x49, 0xd9, 0xb6, 0xeb, + 0x89, 0xdb, 0x39, 0xfa, 0xb7, 0x51, 0xa1, 0xce, 0x54, 0x2a, 0xbe, 0x74, 0xc1, 0x1f, 0xe6, 0xcf, + 0xdb, 0x38, 0x7f, 0x8a, 0x0a, 0xdc, 0xa6, 0xa8, 0xa7, 0xde, 0xdc, 0x91, 0x43, 0xf4, 0xff, 0x0d, + 0x9b, 0x7b, 0x93, 0x9b, 0x91, 0x5f, 0x0b, 0x9f, 0xbd, 0xf3, 0x27, 0xfa, 0x9e, 0xd5, 0x78, 0x16, + 0x5e, 0x4d, 0x7d, 0x9f, 0x9c, 0x51, 0xb5, 0x82, 0xc6, 0x25, 0x0c, 0xb5, 0x0a, 0xbd, 0x72, 0xef, + 0xbe, 0x38, 0xbc, 0xfc, 0xf5, 0x3f, 0x2b, 0xd6, 0x0f, 0xaf, 0x8a, 0x40, 0xdf, 0x49, 0x4c, 0x19, + 0x26, 0x7b, 0xb5, 0x9d, 0xd8, 0x83, 0xf7, 0xe3, 0xef, 0x8e, 0xa9, 0xd8, 0x1a, 0xbe, 0x3b, 0x56, + 0xa7, 0x31, 0x7c, 0x81, 0xbc, 0x0b, 0x97, 0x4c, 0x7c, 0xec, 0x3e, 0xc7, 0xe7, 0x4b, 0xf6, 0x7b, + 0x70, 0x51, 0x27, 0xb8, 0xdb, 0x6e, 0xd2, 0xa8, 0x4a, 0xcc, 0x41, 0x25, 0x31, 0x52, 0x36, 0x47, + 0x60, 0x91, 0xb2, 0x59, 0x30, 0x53, 0xf2, 0xa7, 0xca, 0xf3, 0x69, 0x9d, 0xe1, 0xc2, 0xa2, 0x4e, + 0xbc, 0xdc, 0x6c, 0xd2, 0x0c, 0x63, 0x0d, 0xbb, 0x6d, 0x39, 0x01, 0xda, 0x82, 0x31, 0xe5, 0x67, + 0x44, 0xa9, 0x54, 0x6a, 0xf8, 0xe7, 0x3f, 0x2c, 0xd0, 0x22, 0xd8, 0x85, 0xc5, 0x06, 0x86, 0x52, + 0x74, 0x7a, 0xc8, 0x94, 0xa9, 0x6d, 0x56, 0x60, 0x42, 0xf9, 0x29, 0x6d, 0x34, 0x34, 0xe0, 0xa2, + 0xd2, 0x82, 0x3e, 0x61, 0x3a, 0x8a, 0xd1, 0x80, 0x62, 0xd2, 0xa4, 0xd1, 0x68, 0x3f, 0xaf, 0xd0, + 0x4a, 0x18, 0x37, 0xa8, 0xbb, 0x63, 0xd0, 0x54, 0x5a, 0xcc, 0x20, 0xe3, 0xef, 0x0d, 0xc0, 0x25, + 0xbe, 0x18, 0xe7, 0xb9, 0xe2, 0xe8, 0x07, 0x30, 0xa6, 0xac, 0x31, 0x9f, 0xf4, 0xab, 0xc2, 0x97, + 0x30, 0x6d, 0x2f, 0x30, 0xe5, 0xb7, 0x43, 0x0b, 0xea, 0x91, 0xe5, 0x26, 0xca, 0xaf, 0xba, 0x6d, + 0x5a, 0x30, 0xa9, 0x2f, 0x34, 0xd7, 0xff, 0xaf, 0x27, 0x36, 0xa2, 0x83, 0x8a, 0x38, 0xa8, 0xcd, + 0x7a, 0xe2, 0x72, 0x13, 0x35, 0x3e, 0xb2, 0x89, 0x5e, 0xc2, 0x74, 0x6c, 0x95, 0xb9, 0x3d, 0xeb, + 0x66, 0x62, 0x83, 0x31, 0x68, 0x96, 0xd2, 0xc8, 0xa3, 0xc5, 0xa9, 0xcd, 0xc6, 0x1b, 0x41, 0x4d, + 0x18, 0x57, 0x17, 0x9e, 0x1b, 0x28, 0xae, 0x65, 0x4c, 0x25, 0x03, 0x64, 0x82, 0x19, 0x9f, 0x4b, + 0xba, 0xf6, 0xaf, 0x74, 0x9b, 0x9a, 0x06, 0x3c, 0x02, 0x43, 0xec, 0x37, 0x61, 0x01, 0xdb, 0x1e, + 0xf6, 0xb1, 0xd3, 0xc0, 0xaa, 0x5b, 0xe8, 0x9b, 0xb2, 0x80, 0xff, 0x94, 0x83, 0x85, 0x24, 0xba, + 0x35, 0xec, 0x34, 0xd1, 0x36, 0x14, 0xa2, 0x0d, 0xf1, 0x5d, 0x6d, 0xc8, 0x50, 0x93, 0xa9, 0x5d, + 0x5a, 0xed, 0x33, 0x63, 0xd8, 0x68, 0x13, 0xa6, 0x95, 0xb2, 0x33, 0xfa, 0xdf, 0xc6, 0x51, 0x55, + 0x9b, 0xe3, 0x2a, 0xfd, 0x32, 0x2e, 0xbb, 0xc7, 0x96, 0xed, 0x10, 0x21, 0x55, 0x09, 0x1d, 0x04, + 0x61, 0x29, 0x9f, 0x1b, 0x66, 0x97, 0xa3, 0xa5, 0xc2, 0x17, 0x5d, 0x82, 0x18, 0x9f, 0x50, 0x0e, + 0xce, 0xad, 0x39, 0xec, 0x29, 0xa7, 0x24, 0x76, 0x15, 0x06, 0x77, 0xd6, 0x6b, 0xd5, 0x32, 0x7f, + 0x18, 0xca, 0xc2, 0x09, 0xb4, 0xfc, 0x7a, 0xc3, 0x32, 0x59, 0x85, 0xf1, 0x31, 0x8d, 0x56, 0xcd, + 0x63, 0x1d, 0x4b, 0xbc, 0x1b, 0x30, 0xcc, 0x8b, 0x38, 0x26, 0xf5, 0xe2, 0x69, 0x71, 0x28, 0x51, + 0x67, 0x6c, 0x0b, 0x19, 0xbf, 0x85, 0x2d, 0x5f, 0xf9, 0x30, 0x7f, 0x00, 0x23, 0x1e, 0x2f, 0xe3, + 0xdf, 0xe5, 0x49, 0x99, 0xb9, 0x80, 0x16, 0x33, 0x3b, 0xa5, 0x80, 0x31, 0xe5, 0x5f, 0xc6, 0x3a, + 0x0d, 0xfd, 0xb1, 0xb5, 0xb6, 0x5c, 0x25, 0xb3, 0xca, 0x27, 0x4b, 0x2c, 0xc7, 0x5d, 0xea, 0xe2, + 0x1a, 0x60, 0xf5, 0x59, 0x28, 0x9d, 0x1a, 0x7a, 0xc8, 0x79, 0xc0, 0x1b, 0x05, 0xc4, 0x78, 0x20, + 0x03, 0x89, 0x24, 0x50, 0x4b, 0x8b, 0xc0, 0xbf, 0x49, 0x43, 0xa4, 0x3c, 0xa2, 0xfe, 0x01, 0xe7, + 0xd1, 0x89, 0xdf, 0xc9, 0xb1, 0x98, 0x2b, 0xb5, 0x2d, 0x25, 0xd3, 0x92, 0xf3, 0xd4, 0x55, 0x2e, + 0x41, 0x94, 0x66, 0x9e, 0xd8, 0x4e, 0x53, 0xbd, 0x04, 0xb1, 0x3a, 0xc1, 0x91, 0x8c, 0xdb, 0xf9, + 0xcc, 0x76, 0x9a, 0x66, 0x14, 0x1a, 0x7d, 0x08, 0x13, 0x4a, 0x91, 0xfc, 0x4c, 0xb0, 0x58, 0xcf, + 0x2a, 0xba, 0xdd, 0x34, 0x75, 0x48, 0xe3, 0x2f, 0x73, 0x30, 0x93, 0x90, 0x01, 0x90, 0x6a, 0x40, + 0x54, 0xfc, 0x92, 0x33, 0xc4, 0x93, 0x71, 0xd0, 0xe7, 0xdf, 0xda, 0xe9, 0x94, 0x80, 0x34, 0xca, + 0xad, 0x92, 0xad, 0x30, 0xaf, 0x64, 0x7c, 0x49, 0xce, 0x50, 0xa8, 0x82, 0x23, 0x1f, 0x20, 0xec, + 0x09, 0x37, 0xed, 0xd4, 0xc8, 0xb7, 0x54, 0x49, 0x75, 0x78, 0x2e, 0xb9, 0x16, 0x95, 0x66, 0x8c, + 0x5f, 0xcb, 0xc3, 0x85, 0x84, 0xf1, 0xd7, 0x70, 0xf0, 0x57, 0x31, 0x05, 0x91, 0x84, 0x93, 0xfd, + 0x3f, 0xa7, 0x84, 0x93, 0xc6, 0x6f, 0xe6, 0xe1, 0xc2, 0x6e, 0xdb, 0xa7, 0x9e, 0xe7, 0x6b, 0xce, + 0x73, 0xec, 0x04, 0xae, 0xf7, 0x8a, 0x7a, 0xce, 0xa2, 0xf7, 0x60, 0x70, 0x15, 0xb7, 0x5a, 0x2e, + 0x67, 0xa4, 0x97, 0xc5, 0x3d, 0x54, 0x14, 0x9a, 0x02, 0xad, 0xf6, 0x99, 0x0c, 0x1a, 0x7d, 0x08, + 0xa3, 0xab, 0xd8, 0xf2, 0x82, 0x03, 0x6c, 0x09, 0x59, 0x49, 0x44, 0xa0, 0x56, 0x50, 0x38, 0xc0, + 0x6a, 0x9f, 0x19, 0x42, 0xa3, 0x25, 0xa2, 0x46, 0x38, 0x87, 0xf2, 0x69, 0x6a, 0x4a, 0x83, 0x04, + 0x66, 0xb5, 0xcf, 0xa4, 0xb0, 0x68, 0x03, 0x26, 0xca, 0x87, 0xd8, 0x09, 0x36, 0x70, 0x60, 0x35, + 0xad, 0xc0, 0xe2, 0xdf, 0xd4, 0x1b, 0x69, 0xc8, 0x1a, 0xf0, 0x6a, 0x9f, 0xa9, 0x63, 0x57, 0x06, + 0xa1, 0x7f, 0xc3, 0x3f, 0x34, 0x4e, 0x72, 0xb0, 0xb0, 0xec, 0xbe, 0x70, 0x12, 0x27, 0xe6, 0xdb, + 0xfa, 0xc4, 0x88, 0xf7, 0x11, 0x09, 0xf0, 0x91, 0xa9, 0x79, 0x17, 0x06, 0xb6, 0x6d, 0xe7, 0x30, + 0xf2, 0x19, 0x49, 0xc0, 0x23, 0x50, 0x74, 0x84, 0xb6, 0x73, 0x88, 0xd6, 0xc5, 0xf7, 0x9b, 0xdb, + 0x18, 0xfa, 0x35, 0xa1, 0x21, 0x01, 0x5b, 0x85, 0x0e, 0xbf, 0xd3, 0xec, 0xb7, 0x18, 0xe0, 0x3b, + 0x30, 0x9f, 0xd2, 0x2e, 0x9a, 0x94, 0xcc, 0x71, 0x80, 0x32, 0xc5, 0xb7, 0x61, 0x2e, 0x71, 0x09, + 0x62, 0x80, 0xff, 0x3c, 0x69, 0x2f, 0xb1, 0x91, 0x2f, 0xc0, 0xb0, 0x48, 0x54, 0xc0, 0xf4, 0x46, + 0xf1, 0x93, 0xfa, 0x81, 0x8b, 0xb3, 0x26, 0x1e, 0xd0, 0x8b, 0x23, 0xb5, 0xa7, 0x04, 0x2c, 0x61, + 0x27, 0xe2, 0xa3, 0x37, 0xd8, 0xf7, 0x92, 0x16, 0x69, 0x93, 0xa8, 0xad, 0x8e, 0x74, 0x53, 0x32, + 0xe5, 0x6f, 0x74, 0x1b, 0x0a, 0x2b, 0x2f, 0x03, 0xec, 0x39, 0x56, 0x8b, 0x87, 0x6c, 0xe7, 0x39, + 0x2e, 0xcd, 0x58, 0x39, 0xfa, 0x00, 0xe6, 0xa3, 0x65, 0x62, 0x94, 0xcc, 0x91, 0x3f, 0xad, 0xda, + 0xf8, 0xe3, 0x3c, 0x8d, 0xbb, 0x9a, 0xb1, 0x35, 0xc9, 0xec, 0x6e, 0xd5, 0xf8, 0x6c, 0xe5, 0xb7, + 0x6a, 0x68, 0x11, 0x46, 0xb7, 0x6a, 0x5a, 0xb6, 0x07, 0x33, 0x2c, 0x20, 0xdd, 0x26, 0x43, 0x28, + 0x7b, 0x8d, 0x23, 0x3b, 0xc0, 0x8d, 0xa0, 0xe3, 0x71, 0x46, 0x6a, 0xc6, 0xca, 0x91, 0x01, 0xe3, + 0x8f, 0x5a, 0xf6, 0x41, 0x43, 0x10, 0x63, 0x53, 0xa0, 0x95, 0xa1, 0x9b, 0x30, 0xb9, 0xe6, 0xf8, + 0x81, 0xd5, 0x6a, 0xb1, 0x64, 0x18, 0x3c, 0x59, 0x9a, 0x19, 0x29, 0x25, 0xed, 0x56, 0x5d, 0x27, + 0xb0, 0x6c, 0x07, 0x7b, 0x66, 0xc7, 0x09, 0xec, 0x63, 0xcc, 0xc7, 0x1e, 0x2b, 0x47, 0xef, 0xc2, + 0x9c, 0x2c, 0xdb, 0xf2, 0x1a, 0x47, 0xd8, 0x0f, 0x3c, 0x9a, 0xa7, 0x88, 0x06, 0xd6, 0x30, 0x93, + 0x2b, 0x69, 0x0b, 0x2d, 0xb7, 0xd3, 0x5c, 0x71, 0x9e, 0xdb, 0x9e, 0xeb, 0xd0, 0xd4, 0x7d, 0x23, + 0xbc, 0x85, 0x48, 0xb9, 0xb1, 0x9d, 0x78, 0x6a, 0xdf, 0x60, 0x0b, 0x1a, 0xa7, 0x39, 0x58, 0x4c, + 0x3c, 0x58, 0xe2, 0x13, 0x5e, 0x8c, 0x7e, 0x2b, 0x94, 0xfd, 0x7b, 0x1b, 0x06, 0xe8, 0x37, 0x9d, + 0xe9, 0xa5, 0xe2, 0x22, 0x9f, 0xe2, 0x33, 0x52, 0xa4, 0xd6, 0xa4, 0x30, 0xe8, 0x91, 0xb4, 0x21, + 0xf6, 0x53, 0xa9, 0xe9, 0x6e, 0x94, 0x67, 0x26, 0x34, 0xae, 0xda, 0x12, 0x85, 0xd5, 0xf0, 0x4d, + 0x4c, 0x3e, 0x7f, 0x9c, 0x83, 0x52, 0x17, 0x7e, 0x22, 0xc7, 0x94, 0xeb, 0x61, 0x4c, 0x8f, 0xe5, + 0x98, 0xd8, 0x93, 0x81, 0xa5, 0xde, 0x78, 0xd6, 0x79, 0x0f, 0xab, 0x03, 0x28, 0xfe, 0xe5, 0x41, + 0xdf, 0x82, 0xd1, 0x5a, 0x6d, 0x55, 0xbb, 0x66, 0x8e, 0x19, 0xa2, 0x42, 0x08, 0x74, 0xaf, 0xa7, + 0x7b, 0x65, 0xe5, 0x56, 0xd9, 0x78, 0x1f, 0x2e, 0xc8, 0x66, 0x59, 0xa8, 0x68, 0xe5, 0x25, 0x13, + 0xcf, 0xc1, 0x29, 0x1f, 0x50, 0x85, 0x05, 0xc6, 0x1f, 0x0d, 0xc4, 0x10, 0x6b, 0x9d, 0xe3, 0x63, + 0xcb, 0x7b, 0x85, 0xca, 0x3a, 0x62, 0x7f, 0xd7, 0xcf, 0x72, 0x65, 0xe0, 0xc7, 0x27, 0xa5, 0x3e, + 0x85, 0x3a, 0x7a, 0x0b, 0x26, 0xe8, 0x11, 0x76, 0x1a, 0x98, 0x19, 0xae, 0xf2, 0x2c, 0xac, 0x81, + 0x56, 0x88, 0xf6, 0x60, 0x82, 0x9f, 0x0e, 0xfa, 0x5b, 0x6c, 0xca, 0x7b, 0xd1, 0x4d, 0xa9, 0x75, + 0xef, 0x8e, 0x86, 0xc2, 0x96, 0x4f, 0x27, 0x83, 0xbe, 0x82, 0x49, 0xc1, 0x0a, 0x39, 0x61, 0x76, + 0x2b, 0x77, 0x3f, 0x9b, 0xb0, 0x8e, 0xc3, 0x28, 0x47, 0x08, 0x91, 0x2e, 0x73, 0x06, 0xcf, 0x29, + 0x0f, 0xf6, 0xd2, 0x65, 0x0d, 0x85, 0x77, 0x59, 0x2b, 0x2b, 0x7e, 0x0e, 0x28, 0x3e, 0xae, 0x6e, + 0xfb, 0x6f, 0x42, 0xd9, 0x7f, 0xc5, 0x32, 0xcc, 0x24, 0x0c, 0xe0, 0x4c, 0x24, 0x3e, 0x07, 0x14, + 0xef, 0xe9, 0x59, 0x28, 0x18, 0xb7, 0xe0, 0xa6, 0x9c, 0x02, 0xb9, 0x1b, 0x34, 0x9a, 0x42, 0x3d, + 0xfd, 0x95, 0x3c, 0x94, 0xba, 0x80, 0xa2, 0xdf, 0xcd, 0x45, 0x67, 0x9b, 0xed, 0xc6, 0x0f, 0xa3, + 0xb3, 0x9d, 0x8c, 0x9f, 0x30, 0xed, 0x95, 0x8f, 0x7e, 0xf5, 0x4f, 0x5e, 0xfb, 0xd3, 0x1e, 0x5f, + 0xb2, 0xb3, 0xcf, 0xd6, 0x80, 0x3a, 0x5b, 0x26, 0xcc, 0x6a, 0x42, 0x51, 0x2f, 0xdc, 0xfe, 0x0a, + 0x00, 0xcf, 0xa3, 0xb3, 0xee, 0x1e, 0xf2, 0x77, 0x60, 0x4a, 0x89, 0xf1, 0x10, 0xe6, 0x22, 0x34, + 0xb9, 0xca, 0xfc, 0x2d, 0x90, 0x2f, 0x56, 0x28, 0xd1, 0xfe, 0xca, 0xf4, 0x4f, 0x4f, 0x4a, 0x13, + 0xe4, 0x9b, 0x79, 0x27, 0x8c, 0xc8, 0x2a, 0xfe, 0x32, 0x36, 0x54, 0xa5, 0xbf, 0xdc, 0xd2, 0x5e, + 0xf0, 0xde, 0x87, 0x21, 0x56, 0x12, 0x89, 0x7b, 0xa8, 0x42, 0x73, 0x9e, 0xc0, 0x01, 0x8d, 0x39, + 0xea, 0xa5, 0x4f, 0x7f, 0x94, 0xc3, 0xf7, 0x60, 0xc6, 0x2e, 0x8b, 0x95, 0x1d, 0x16, 0xcb, 0xd8, + 0x8a, 0x03, 0xe5, 0xf0, 0xdd, 0x9a, 0xb8, 0x5d, 0x11, 0x70, 0x8e, 0xfb, 0xa2, 0x85, 0x9b, 0x87, + 0x34, 0x2b, 0x6e, 0x65, 0x9c, 0xdf, 0xae, 0x0c, 0x58, 0x84, 0x00, 0x45, 0x33, 0x3e, 0x83, 0xb9, + 0x6a, 0x0b, 0x5b, 0x5e, 0xb4, 0x3d, 0x74, 0x13, 0x86, 0x69, 0x99, 0xee, 0xce, 0x64, 0x91, 0x22, + 0xea, 0xce, 0xc4, 0x2b, 0x8d, 0x75, 0xb8, 0xc8, 0xc2, 0xd1, 0xa9, 0x43, 0x0a, 0x15, 0xf4, 0x41, + 0xfa, 0x3b, 0xe2, 0xe3, 0x9d, 0x30, 0x7a, 0x06, 0x67, 0x7c, 0x4a, 0x9d, 0x08, 0x93, 0x12, 0x22, + 0xf7, 0xf6, 0xea, 0xe0, 0x6f, 0xc0, 0x62, 0xb9, 0xdd, 0xc6, 0x4e, 0x33, 0x44, 0xdc, 0xf1, 0xac, + 0x1e, 0x5f, 0x73, 0xa1, 0x32, 0x0c, 0x52, 0x68, 0x69, 0xdd, 0xe4, 0xdd, 0x4d, 0xe8, 0x0e, 0x85, + 0xe3, 0x81, 0xb0, 0x68, 0x03, 0x0c, 0xd3, 0x68, 0xc2, 0x7c, 0xad, 0x73, 0x70, 0x6c, 0xb3, 0xdc, + 0xc3, 0xf4, 0x45, 0xa4, 0x68, 0x7b, 0x4d, 0xa4, 0x37, 0x60, 0x93, 0x71, 0x2b, 0x4c, 0x74, 0x4c, + 0x3d, 0xb3, 0xf8, 0x2b, 0xc9, 0xe7, 0xf7, 0xef, 0x84, 0xa8, 0x54, 0xbf, 0x61, 0xad, 0xd0, 0x6a, + 0x9e, 0x02, 0xc1, 0x98, 0x81, 0x69, 0xd5, 0x52, 0xc4, 0x76, 0xc8, 0x1c, 0xcc, 0xe8, 0x16, 0x20, + 0x56, 0xfc, 0x35, 0xcc, 0xb2, 0xab, 0x0d, 0x16, 0xc8, 0x72, 0x29, 0x8c, 0xd9, 0x98, 0xdf, 0x5b, + 0x8a, 0xf8, 0x73, 0x51, 0x7f, 0x13, 0x19, 0xa2, 0x78, 0x6f, 0x89, 0x39, 0x82, 0x3f, 0x5f, 0xd2, + 0xec, 0x8c, 0xf9, 0xbd, 0xa5, 0xca, 0x30, 0x0f, 0x08, 0x46, 0xa8, 0xb3, 0xe5, 0xff, 0x99, 0x50, + 0x5f, 0xa2, 0x6f, 0x8f, 0x56, 0xb1, 0x45, 0xfd, 0x04, 0x93, 0x5f, 0x70, 0x4c, 0x42, 0xde, 0x6e, + 0x0a, 0xb9, 0xdc, 0x6e, 0x1a, 0xbf, 0x9f, 0x83, 0x5b, 0x4c, 0x7a, 0x49, 0xc6, 0xa3, 0xe6, 0xa0, + 0x14, 0x64, 0xf4, 0x01, 0xb0, 0xf4, 0x9d, 0x5c, 0x44, 0x34, 0x78, 0xcf, 0xb3, 0x28, 0x31, 0x04, + 0x54, 0x86, 0x71, 0xd5, 0xa1, 0x30, 0x12, 0x21, 0x26, 0xc5, 0x34, 0x69, 0x8e, 0x1d, 0x3f, 0xb5, + 0xa4, 0x93, 0xe1, 0x33, 0xb8, 0xb4, 0xf2, 0x92, 0x6c, 0x08, 0xfe, 0x75, 0xe2, 0x57, 0x9c, 0xe1, + 0x0b, 0x81, 0xa9, 0x1d, 0xbe, 0x63, 0x74, 0xc1, 0x39, 0x5a, 0x4c, 0x14, 0x0a, 0xf1, 0x81, 0x93, + 0xf2, 0xee, 0xa8, 0xa9, 0x95, 0x19, 0x7f, 0x94, 0x83, 0xc5, 0xe4, 0xd6, 0x38, 0x63, 0x59, 0x83, + 0xe9, 0xaa, 0xe5, 0xb8, 0x8e, 0xdd, 0xb0, 0x5a, 0xb5, 0xc6, 0x11, 0x6e, 0x76, 0x5a, 0xc2, 0xcf, + 0x52, 0x72, 0x19, 0xa2, 0x20, 0x71, 0x74, 0x01, 0x62, 0xc6, 0xb1, 0xd0, 0xfb, 0x70, 0x81, 0x7a, + 0xb9, 0x31, 0xde, 0xdb, 0xc2, 0x9e, 0xa4, 0xc7, 0x7a, 0x96, 0x52, 0x8b, 0xee, 0x09, 0x8b, 0x58, + 0x73, 0xd7, 0xb1, 0x03, 0x89, 0xc4, 0xf4, 0xa8, 0xa4, 0x2a, 0xe3, 0xbf, 0xe4, 0xe0, 0x22, 0x8d, + 0xa6, 0xaf, 0xe5, 0xe7, 0x09, 0xa3, 0xe7, 0x89, 0x00, 0x70, 0x39, 0xcd, 0x6b, 0x4f, 0x83, 0xd6, + 0x23, 0xc1, 0xa1, 0x6f, 0xc2, 0x40, 0x4d, 0x5c, 0xa5, 0x4e, 0x46, 0x72, 0x3d, 0x89, 0xdc, 0xaf, + 0xae, 0x17, 0x98, 0x14, 0x8a, 0xc5, 0x5a, 0xf1, 0x1b, 0xd8, 0xa1, 0x49, 0xb9, 0xfa, 0xd9, 0x37, + 0x27, 0x2c, 0x09, 0xdf, 0x5e, 0x0f, 0xa4, 0xbd, 0xbd, 0x1e, 0xd4, 0xdf, 0x5e, 0x1b, 0xcf, 0x59, + 0x2c, 0xfd, 0xe8, 0x80, 0xf8, 0x22, 0x7d, 0x1a, 0xcb, 0xe1, 0xc5, 0xbe, 0x03, 0x17, 0x92, 0x46, + 0xb6, 0xf7, 0x20, 0x96, 0x9e, 0x2b, 0x3d, 0x5a, 0xdd, 0x36, 0xbc, 0xa5, 0xc1, 0x96, 0x5b, 0x2d, + 0xf7, 0x05, 0x6e, 0x6e, 0x7b, 0xee, 0xb1, 0x1b, 0x68, 0x71, 0xd2, 0x79, 0x12, 0xbb, 0xd0, 0xe6, + 0xc9, 0x77, 0x65, 0xa4, 0xd8, 0xf8, 0xeb, 0x70, 0xa3, 0x0b, 0x45, 0x3e, 0xa8, 0x1a, 0x4c, 0x5b, + 0x91, 0x3a, 0x71, 0x27, 0x76, 0x23, 0x69, 0x5c, 0x51, 0x42, 0xbe, 0x19, 0xc7, 0xbf, 0xbd, 0xa3, + 0xe5, 0xbd, 0x42, 0x0b, 0x30, 0xbb, 0x6d, 0x6e, 0x2d, 0xef, 0x56, 0x77, 0xea, 0x3b, 0x5f, 0x6d, + 0xaf, 0xd4, 0x77, 0x37, 0x9f, 0x6c, 0x6e, 0xed, 0x6f, 0xb2, 0x70, 0x8f, 0x5a, 0xcd, 0xce, 0x4a, + 0x79, 0xa3, 0x90, 0x43, 0xb3, 0x50, 0xd0, 0x8a, 0x57, 0x76, 0x2b, 0x85, 0xfc, 0xed, 0xba, 0xea, + 0xcc, 0x8b, 0x2e, 0xc1, 0xfc, 0xf2, 0xca, 0xde, 0x5a, 0x75, 0x45, 0xd0, 0x54, 0x43, 0x4d, 0xce, + 0x42, 0x41, 0xad, 0xdc, 0xd9, 0xda, 0xd9, 0x66, 0x29, 0xe1, 0xd5, 0xd2, 0xfd, 0x95, 0x4a, 0x79, + 0x77, 0x67, 0x75, 0xb3, 0xd0, 0x6f, 0x0c, 0x8c, 0xe4, 0x0b, 0xf9, 0xdb, 0x3f, 0xd0, 0x3c, 0x7d, + 0xd1, 0x22, 0x2c, 0x70, 0xf0, 0xdd, 0x5a, 0xf9, 0x51, 0x7a, 0x13, 0xac, 0x76, 0xe3, 0x61, 0xb9, + 0x90, 0x43, 0x97, 0xe1, 0xa2, 0x56, 0xba, 0x5d, 0xae, 0xd5, 0xf6, 0xb7, 0x4c, 0x96, 0x57, 0x3e, + 0x7f, 0x7b, 0x4f, 0x8b, 0xec, 0x47, 0x5a, 0xd8, 0x78, 0x58, 0xae, 0x9b, 0x2b, 0x5f, 0xec, 0xae, + 0x99, 0x2b, 0xcb, 0xf1, 0x16, 0xb4, 0xda, 0xaf, 0x56, 0x6a, 0x85, 0x1c, 0x9a, 0x81, 0x29, 0xad, + 0x74, 0x73, 0xab, 0x90, 0xbf, 0x7d, 0x93, 0x07, 0x0d, 0x40, 0x93, 0x00, 0xcb, 0x2b, 0xb5, 0xea, + 0xca, 0xe6, 0xf2, 0xda, 0xe6, 0xa3, 0x42, 0x1f, 0x9a, 0x80, 0xd1, 0xb2, 0xfc, 0x99, 0xbb, 0xfd, + 0x11, 0x4c, 0x45, 0xb4, 0x55, 0x02, 0x21, 0x15, 0xbd, 0x42, 0x1f, 0x99, 0x23, 0xf9, 0x93, 0x9a, + 0x18, 0x98, 0xe2, 0x59, 0xc8, 0xdd, 0xfe, 0x40, 0xa4, 0xc4, 0x52, 0x4e, 0x22, 0x1a, 0x83, 0xe1, + 0xe5, 0x95, 0x87, 0xe5, 0xdd, 0xf5, 0x9d, 0x42, 0x1f, 0xf9, 0x51, 0x35, 0x57, 0xca, 0x3b, 0x2b, + 0xcb, 0x85, 0x1c, 0x1a, 0x85, 0xc1, 0xda, 0x4e, 0x79, 0x67, 0xa5, 0x90, 0x5f, 0xfa, 0xf3, 0x7f, + 0x90, 0x83, 0x31, 0xc2, 0x92, 0x85, 0xaf, 0xe8, 0xd7, 0x8a, 0x92, 0xc7, 0x59, 0x11, 0xcf, 0xfa, + 0x93, 0xaa, 0xd1, 0xd1, 0xaf, 0x73, 0x31, 0xc3, 0xdc, 0x48, 0x01, 0x6e, 0xe5, 0xee, 0xe5, 0x90, + 0x49, 0xaf, 0x76, 0x22, 0x3a, 0x8f, 0xa4, 0x9c, 0xac, 0x96, 0x16, 0x2f, 0x67, 0xaa, 0x4a, 0xe8, + 0x17, 0xc1, 0x50, 0x69, 0xa6, 0x68, 0x06, 0xdf, 0xea, 0x4d, 0x03, 0x10, 0x6d, 0xde, 0xec, 0x0d, + 0x1c, 0x3d, 0x86, 0x09, 0x22, 0x33, 0x4b, 0x30, 0x74, 0x29, 0x8a, 0xa8, 0x88, 0xe9, 0xc5, 0xc5, + 0xe4, 0x4a, 0x19, 0x74, 0x7c, 0x9c, 0x0e, 0x84, 0x29, 0xbc, 0x3e, 0x12, 0x8f, 0xd2, 0x44, 0x09, + 0xe3, 0xc4, 0xc5, 0xe9, 0x48, 0xf1, 0xde, 0xfd, 0x7b, 0x39, 0x54, 0xa3, 0xb1, 0x1c, 0x34, 0xe1, + 0x1b, 0x09, 0xe7, 0xe5, 0xb8, 0x54, 0xce, 0x7a, 0x53, 0x92, 0x69, 0x74, 0x52, 0xa4, 0xf6, 0x4d, + 0x40, 0x71, 0x99, 0x16, 0x5d, 0x0d, 0xf7, 0x41, 0xb2, 0xb8, 0x5b, 0xbc, 0x10, 0xbb, 0xb1, 0x5f, + 0x21, 0x52, 0x0d, 0x5a, 0x81, 0x49, 0xfe, 0xe2, 0x84, 0x4b, 0xd9, 0x28, 0x4b, 0x4e, 0x4f, 0x25, + 0xf3, 0x88, 0xce, 0x93, 0x94, 0xd4, 0x51, 0x31, 0x1c, 0x47, 0x54, 0x7c, 0x2f, 0x5e, 0x4a, 0xac, + 0xe3, 0xe3, 0x7b, 0x08, 0x93, 0xba, 0xd0, 0x8f, 0xc4, 0x02, 0x25, 0xea, 0x02, 0xa9, 0x1d, 0xaa, + 0xc3, 0xfc, 0x86, 0x65, 0x53, 0x23, 0x21, 0xbf, 0x17, 0x16, 0xb7, 0xba, 0xa8, 0x94, 0x71, 0xcd, + 0x5b, 0xc3, 0x4e, 0xb3, 0xd8, 0x2d, 0x8a, 0x11, 0x3d, 0x36, 0x35, 0x21, 0xbb, 0xea, 0xb7, 0xe2, + 0xc8, 0xd0, 0x53, 0xa3, 0x25, 0x39, 0x3a, 0x14, 0xd3, 0x7c, 0x73, 0xd0, 0x06, 0x15, 0x9e, 0x23, + 0x14, 0x95, 0x3d, 0x71, 0x66, 0x72, 0x0b, 0xf4, 0xdd, 0x53, 0x60, 0x47, 0x9d, 0x6c, 0x7c, 0x94, + 0x32, 0x71, 0xa9, 0xc4, 0xee, 0xe5, 0xd0, 0xd7, 0xf4, 0x54, 0x27, 0x92, 0xdb, 0xb7, 0x83, 0x23, + 0x2e, 0x95, 0x5c, 0x4a, 0x24, 0xc0, 0x0f, 0x4a, 0x06, 0x75, 0x13, 0x66, 0x93, 0xdc, 0x81, 0xe4, + 0x84, 0x66, 0xf8, 0x0a, 0xa5, 0xee, 0x02, 0x93, 0xa8, 0x00, 0xcd, 0xf4, 0x45, 0xca, 0xf0, 0x46, + 0x49, 0xa5, 0xf9, 0x09, 0x4c, 0x92, 0x5d, 0xf2, 0x04, 0xe3, 0x76, 0xb9, 0x65, 0x3f, 0xc7, 0x3e, + 0x12, 0x11, 0xbe, 0x64, 0x51, 0x1a, 0xee, 0xad, 0x1c, 0xfa, 0x06, 0x8c, 0xed, 0x5b, 0x41, 0xe3, + 0x88, 0x07, 0xa4, 0x11, 0xf1, 0x6a, 0x68, 0x59, 0x51, 0xfc, 0xa2, 0x95, 0xf7, 0x72, 0xe8, 0x3b, + 0x30, 0xfc, 0x08, 0x07, 0xf4, 0xf1, 0xc8, 0x35, 0x79, 0x33, 0xce, 0xbc, 0xd0, 0xd6, 0x1c, 0xe9, + 0xb3, 0x2a, 0x3a, 0x1c, 0x35, 0x49, 0xa2, 0xbb, 0x00, 0x8c, 0x21, 0x50, 0x0a, 0xd1, 0xea, 0x62, + 0xac, 0xdb, 0xe8, 0x11, 0x11, 0x19, 0x5a, 0x38, 0xc0, 0xbd, 0x36, 0x99, 0x36, 0x47, 0xeb, 0x30, + 0x29, 0xe3, 0xb4, 0x6f, 0xd2, 0xd7, 0x87, 0x46, 0x84, 0x98, 0x7f, 0x06, 0x6a, 0x1f, 0x91, 0x53, + 0xc1, 0x12, 0x79, 0xc9, 0xe8, 0x67, 0x28, 0x2d, 0x1e, 0x9a, 0x9c, 0x44, 0x06, 0xa6, 0xe0, 0xae, + 0xba, 0x7e, 0xa0, 0xe3, 0xca, 0x92, 0x64, 0x5c, 0x0c, 0x45, 0xb5, 0x5d, 0x3d, 0x12, 0x5a, 0xc8, + 0x73, 0xd3, 0x02, 0xb8, 0x15, 0xaf, 0x65, 0x40, 0x30, 0x76, 0x47, 0x39, 0xc9, 0x32, 0xcc, 0x88, + 0x66, 0xb6, 0xda, 0xd8, 0xa9, 0xd5, 0x56, 0x69, 0x20, 0x2c, 0x71, 0x13, 0xaa, 0x94, 0x09, 0xc2, + 0x28, 0x5e, 0x45, 0xbe, 0x7a, 0x5a, 0x04, 0xae, 0xf0, 0xab, 0x97, 0x10, 0x22, 0x2d, 0xfc, 0xea, + 0x25, 0x06, 0xed, 0x7a, 0xc2, 0xec, 0x3c, 0x9a, 0x3c, 0xbe, 0xb7, 0x84, 0x32, 0x74, 0x92, 0x62, + 0x8a, 0x54, 0x7f, 0x2f, 0x87, 0xbe, 0x02, 0x14, 0xd7, 0x12, 0xe4, 0xec, 0xa5, 0x6a, 0x44, 0x72, + 0xf6, 0x32, 0x54, 0x8c, 0x15, 0x98, 0x91, 0xef, 0x50, 0xc3, 0x7a, 0x94, 0xd2, 0x97, 0x8c, 0x8f, + 0xd7, 0x5c, 0x02, 0x99, 0xbd, 0xa5, 0x0c, 0x42, 0x89, 0xe5, 0xe8, 0x33, 0x98, 0xe1, 0xdb, 0x5e, + 0xeb, 0x4f, 0x41, 0x72, 0x30, 0xae, 0x6f, 0xa4, 0xf6, 0xe4, 0x31, 0xcc, 0xd5, 0x22, 0x13, 0xcf, + 0x1c, 0xd0, 0x2e, 0xea, 0x24, 0x68, 0x61, 0x0d, 0x07, 0x6c, 0xe6, 0x93, 0x69, 0x3d, 0x01, 0xc4, + 0xcc, 0x3d, 0x82, 0xdc, 0x73, 0x1b, 0xbf, 0x40, 0x97, 0x23, 0x5d, 0x27, 0x85, 0x14, 0x8c, 0xb2, + 0xc0, 0xd4, 0x91, 0xed, 0xb0, 0x44, 0x76, 0x2c, 0x03, 0xb8, 0xd5, 0xb6, 0x0e, 0xec, 0x96, 0x1d, + 0xd8, 0x98, 0xac, 0xa3, 0x8a, 0xa0, 0x56, 0x89, 0x75, 0xbc, 0x98, 0x0a, 0x81, 0x7e, 0x99, 0x46, + 0x80, 0xca, 0x56, 0x98, 0xd0, 0x37, 0x92, 0xf4, 0xda, 0x14, 0x95, 0xaf, 0xf8, 0xcd, 0xde, 0x80, + 0xa5, 0x8a, 0x3a, 0xf1, 0x08, 0x07, 0x2c, 0x67, 0xf7, 0xb2, 0x15, 0x58, 0x48, 0x9a, 0x83, 0x64, + 0x11, 0xdf, 0xde, 0x32, 0x71, 0xb0, 0xac, 0xa8, 0xe1, 0x1f, 0xa2, 0x35, 0x28, 0xb0, 0x2f, 0x88, + 0x42, 0xe2, 0x72, 0x8c, 0x04, 0x07, 0xb1, 0x3c, 0xeb, 0xd8, 0x4f, 0x5d, 0xad, 0xbb, 0xec, 0xbe, + 0x1f, 0xc9, 0x74, 0xc7, 0x8a, 0x88, 0x3a, 0xa3, 0x95, 0xc9, 0x70, 0x9b, 0x64, 0x45, 0x4c, 0xec, + 0xe3, 0x40, 0x3c, 0x58, 0x65, 0xc9, 0xbb, 0xae, 0x87, 0xe2, 0x42, 0xbc, 0x36, 0xe4, 0x20, 0x91, + 0xe0, 0x0a, 0x7b, 0x0f, 0x90, 0x4c, 0x68, 0x96, 0x40, 0xf4, 0xa6, 0x26, 0xd5, 0x9c, 0x8d, 0xee, + 0xa7, 0x30, 0xca, 0xd0, 0x2a, 0x6e, 0x20, 0x59, 0xaf, 0x2c, 0x11, 0x98, 0x0b, 0xf1, 0x0a, 0x3e, + 0xd2, 0x4f, 0x60, 0x94, 0x9d, 0x2a, 0x15, 0x5f, 0x96, 0x74, 0xfb, 0x78, 0x7c, 0x08, 0x63, 0x8f, + 0x70, 0x50, 0x71, 0xe9, 0x2b, 0x61, 0x5f, 0x1e, 0x24, 0xa5, 0x4c, 0x50, 0x98, 0x50, 0xfa, 0xbe, + 0xb7, 0x74, 0x2f, 0x87, 0xee, 0xd2, 0xcf, 0x2f, 0x7d, 0x5d, 0x3c, 0x17, 0xa2, 0x29, 0x49, 0x7a, + 0x23, 0x28, 0xe8, 0xdb, 0x34, 0x08, 0x5b, 0xb5, 0xe3, 0x79, 0xd8, 0x61, 0x78, 0x69, 0x52, 0x56, + 0x04, 0xf1, 0x53, 0xca, 0x70, 0x15, 0x44, 0xe6, 0xe4, 0xdf, 0x0d, 0x9b, 0x85, 0xf7, 0xbf, 0x97, + 0x43, 0x0f, 0x60, 0x84, 0xf7, 0x8c, 0x20, 0x69, 0x5d, 0x4d, 0x1f, 0xde, 0x03, 0x00, 0x36, 0xd9, + 0xb4, 0xa7, 0x7a, 0x75, 0xea, 0x74, 0x3e, 0x20, 0x32, 0x45, 0xf3, 0x8c, 0x48, 0x9f, 0x0a, 0xb9, + 0x82, 0x22, 0x2d, 0x68, 0x4b, 0xa8, 0x4e, 0x67, 0x1a, 0x3e, 0x51, 0x0a, 0x68, 0xe0, 0x16, 0x19, + 0x7f, 0x41, 0x2a, 0x05, 0x5a, 0x71, 0x37, 0x3a, 0x6b, 0x50, 0x28, 0x37, 0xe8, 0xb7, 0x4e, 0x26, + 0x3e, 0x96, 0x1a, 0x59, 0xb4, 0x42, 0xd0, 0x9a, 0x8b, 0xe6, 0x51, 0x5e, 0xc7, 0x16, 0x8d, 0x4b, + 0x37, 0x2f, 0xe5, 0xa6, 0x48, 0x55, 0x32, 0x46, 0x86, 0x06, 0x36, 0x5b, 0x25, 0x3a, 0x63, 0xeb, + 0xcd, 0xc8, 0x7c, 0x44, 0x79, 0x99, 0x92, 0x14, 0xfa, 0x42, 0x14, 0x5f, 0xea, 0xaa, 0xc2, 0x9b, + 0x57, 0x82, 0x96, 0x61, 0x8a, 0x47, 0xc1, 0x92, 0xd3, 0x92, 0x86, 0x9d, 0xd6, 0xfc, 0xb7, 0x61, + 0x72, 0x85, 0x7c, 0x6b, 0x3a, 0x4d, 0x9b, 0xc5, 0xe2, 0x44, 0x7a, 0x70, 0xc5, 0x54, 0xc4, 0x55, + 0x98, 0x16, 0x21, 0x0f, 0x64, 0xb6, 0x64, 0x79, 0x4a, 0xe3, 0x09, 0xa9, 0x8b, 0xb3, 0x82, 0xac, + 0x9a, 0x58, 0x99, 0x1b, 0x32, 0xe6, 0x53, 0xf2, 0x13, 0xa3, 0x1b, 0x9a, 0x7e, 0x9c, 0x96, 0x64, + 0x38, 0x41, 0x22, 0xfe, 0x52, 0x49, 0x05, 0x97, 0x42, 0x33, 0x3b, 0x71, 0x71, 0xea, 0xb8, 0x65, + 0xf4, 0xbc, 0xc4, 0x04, 0xc3, 0xe8, 0x1d, 0x9d, 0x7a, 0x46, 0x12, 0xe2, 0xd4, 0x16, 0xa8, 0xfd, + 0x41, 0xcf, 0x7f, 0x8b, 0xae, 0x64, 0xa7, 0xe9, 0x55, 0xec, 0x0f, 0x29, 0x89, 0x73, 0x1f, 0xd3, + 0x6d, 0x16, 0xe6, 0x8b, 0x43, 0xaa, 0x36, 0x1f, 0x4d, 0x97, 0x27, 0xc5, 0xcc, 0xe4, 0x24, 0xb8, + 0xdb, 0x30, 0x15, 0x49, 0x2f, 0x2b, 0xcd, 0x4e, 0xc9, 0x09, 0x6e, 0x8b, 0x57, 0xd2, 0xaa, 0xa5, + 0x79, 0xb6, 0x10, 0xcd, 0xc9, 0x29, 0x87, 0x9c, 0x92, 0x0f, 0x55, 0x0e, 0x39, 0x35, 0x99, 0xe7, + 0x63, 0x28, 0x44, 0xd3, 0x01, 0x4a, 0xa2, 0x29, 0x79, 0x02, 0x33, 0x38, 0xd9, 0xac, 0xba, 0xa2, + 0x72, 0xdc, 0x69, 0x9c, 0x3e, 0x8d, 0xce, 0x0e, 0xcc, 0x25, 0x66, 0xef, 0x93, 0x5f, 0xff, 0xac, + 0xdc, 0x7e, 0xa9, 0x54, 0x31, 0x5c, 0x48, 0x4e, 0xe0, 0x89, 0xde, 0xd2, 0xad, 0x1a, 0xc9, 0xe9, + 0x0c, 0x8b, 0x37, 0xba, 0x40, 0xf1, 0x09, 0xfd, 0x9a, 0x7e, 0xed, 0x62, 0x6d, 0x5c, 0x53, 0xec, + 0x1c, 0x29, 0x0d, 0x18, 0x59, 0x20, 0x72, 0x0f, 0xcc, 0x26, 0x25, 0x10, 0x4e, 0x9d, 0xe2, 0xeb, + 0xe9, 0x34, 0xc3, 0x8d, 0xb5, 0x27, 0x42, 0xcd, 0xa5, 0xce, 0x4c, 0x66, 0xa2, 0xc7, 0x0c, 0x45, + 0xb9, 0x28, 0xf7, 0x43, 0xef, 0x5d, 0x4e, 0x37, 0x7a, 0xcd, 0x26, 0xa5, 0x17, 0x8d, 0xda, 0xa4, + 0x92, 0xb2, 0x47, 0xca, 0x69, 0xc8, 0xcc, 0x4f, 0xba, 0xc7, 0xec, 0x53, 0x3a, 0x75, 0xd5, 0x3e, + 0x95, 0x48, 0xfa, 0x6a, 0x3a, 0x40, 0xb8, 0x23, 0x12, 0xf2, 0x24, 0x23, 0x55, 0x05, 0x4c, 0x4e, + 0x2c, 0x29, 0x77, 0x44, 0x56, 0x9a, 0x65, 0x53, 0x1c, 0xba, 0x94, 0x69, 0xc9, 0x48, 0xaa, 0x99, + 0xa1, 0xa9, 0x2d, 0x84, 0x0b, 0x17, 0xe9, 0xf6, 0x59, 0x97, 0xed, 0x6b, 0xb8, 0x98, 0x9a, 0x40, + 0x13, 0xbd, 0x1d, 0x3b, 0xd0, 0x29, 0x33, 0x91, 0xde, 0xd3, 0x09, 0x2d, 0xf7, 0xa5, 0x34, 0xd0, + 0x45, 0xd2, 0x6c, 0xc6, 0x38, 0x76, 0x42, 0x0e, 0xce, 0x47, 0x54, 0xc0, 0x55, 0xf2, 0x68, 0xa6, + 0x8e, 0xf5, 0x72, 0x12, 0x1d, 0x3f, 0xce, 0x53, 0x95, 0x7e, 0x09, 0x49, 0x2c, 0x5a, 0x71, 0x16, + 0x9e, 0xda, 0x4b, 0xd7, 0xd2, 0xe8, 0x2c, 0x53, 0x4d, 0x41, 0xa4, 0xd5, 0x44, 0x17, 0xb5, 0x69, + 0xd2, 0xbe, 0x92, 0x45, 0x6d, 0x70, 0xfa, 0x07, 0xb2, 0x4a, 0x2d, 0xe1, 0x32, 0x8d, 0x67, 0x6a, + 0x2f, 0x2e, 0xc5, 0x69, 0x68, 0x56, 0x70, 0x39, 0x0b, 0xac, 0x37, 0x8b, 0xd1, 0xc9, 0xd1, 0x3a, + 0x94, 0x3e, 0x24, 0xa4, 0x4e, 0x4d, 0x97, 0x2e, 0xa5, 0x4b, 0xa8, 0x33, 0x4c, 0xe6, 0x67, 0xb1, + 0xa0, 0x45, 0x44, 0x98, 0x0b, 0xd2, 0xa4, 0xa7, 0x94, 0x66, 0x98, 0x59, 0xb6, 0xa9, 0xcb, 0x77, + 0x42, 0x46, 0x52, 0xc9, 0x43, 0x33, 0x13, 0x96, 0x26, 0x48, 0x67, 0x92, 0x2b, 0xa7, 0x52, 0xcc, + 0x4c, 0x51, 0x9a, 0xda, 0xd3, 0xef, 0x2b, 0x5c, 0x39, 0x96, 0x77, 0x14, 0xdd, 0x8a, 0x8a, 0x66, + 0x69, 0xa9, 0x49, 0x33, 0xb8, 0xfe, 0x6c, 0x52, 0xca, 0x52, 0xc5, 0x2c, 0x9d, 0x9a, 0xcf, 0x34, + 0x61, 0x16, 0x24, 0x7b, 0x4b, 0xa1, 0x96, 0x91, 0xc0, 0x34, 0xb5, 0x87, 0xdf, 0x55, 0xd8, 0x5b, + 0x24, 0xd1, 0xa8, 0xb4, 0x05, 0x74, 0xc9, 0x44, 0x9a, 0x4a, 0x7b, 0x93, 0x3e, 0x12, 0x88, 0x67, + 0x09, 0x95, 0xb2, 0x4b, 0x56, 0x0e, 0xd1, 0x44, 0xab, 0xf5, 0x5c, 0x7c, 0x88, 0x84, 0xde, 0x85, + 0x88, 0xcd, 0xb9, 0x5b, 0xc7, 0x24, 0x1f, 0x4e, 0xc8, 0x2e, 0x1a, 0xe1, 0xc3, 0xe9, 0xf9, 0x47, + 0x33, 0x14, 0x9d, 0xa9, 0x9a, 0x7d, 0xe8, 0x28, 0xc9, 0x41, 0xa5, 0x9a, 0x13, 0xcf, 0x57, 0x2a, + 0x59, 0x4c, 0x52, 0x2e, 0xd1, 0x2d, 0x22, 0xe1, 0x30, 0xf9, 0x5c, 0x4d, 0xf3, 0x88, 0x8a, 0xe9, + 0xd9, 0x2d, 0x25, 0xbb, 0x49, 0xcc, 0x0b, 0xa9, 0x10, 0x54, 0x73, 0x2c, 0x4a, 0x82, 0x09, 0xe9, + 0x1e, 0x25, 0xc1, 0xc4, 0xa4, 0x8c, 0xcc, 0x72, 0x62, 0xba, 0x2d, 0xac, 0x5a, 0x4e, 0x94, 0xe4, + 0x82, 0x11, 0x13, 0x06, 0xfa, 0x98, 0x1a, 0x30, 0xb2, 0xad, 0x1e, 0xf3, 0x3a, 0x25, 0xd5, 0xd3, + 0x64, 0x54, 0x66, 0x44, 0x94, 0x06, 0xa2, 0x68, 0x52, 0x46, 0x69, 0x60, 0x8a, 0x27, 0x4f, 0x7c, + 0x20, 0xee, 0x49, 0x68, 0x87, 0xf5, 0x9e, 0x75, 0xb7, 0x69, 0x50, 0x24, 0xdd, 0xa6, 0xa1, 0x0e, + 0x34, 0xdd, 0x3c, 0x3b, 0xae, 0x26, 0xb7, 0x91, 0x73, 0x9d, 0x90, 0x81, 0x4b, 0xce, 0x75, 0x52, + 0x5e, 0x2b, 0xaa, 0xfa, 0xee, 0x08, 0x05, 0x3e, 0xa4, 0x77, 0x39, 0x33, 0x31, 0x55, 0xf1, 0x4a, + 0x76, 0x36, 0x27, 0x7e, 0xc5, 0x59, 0x88, 0xe6, 0xdf, 0x41, 0x49, 0x79, 0xc5, 0x94, 0xb4, 0x46, + 0x52, 0x9b, 0x4a, 0x4d, 0xdc, 0xb3, 0x2d, 0x6c, 0xe4, 0x3a, 0xdd, 0x94, 0xec, 0x52, 0x2a, 0xe9, + 0x6c, 0x01, 0x27, 0x4c, 0xc5, 0xa3, 0xaa, 0xa4, 0xb1, 0x54, 0x3f, 0xaa, 0x80, 0x93, 0x90, 0xbd, + 0xc7, 0x16, 0xc1, 0x16, 0x92, 0x33, 0x5c, 0xbe, 0xa3, 0xeb, 0x8a, 0x19, 0x41, 0x1a, 0xbb, 0x5e, + 0x22, 0xa3, 0x5f, 0x80, 0xf9, 0x94, 0xb0, 0x7d, 0xe8, 0x46, 0xc4, 0xda, 0x9a, 0x1c, 0xd6, 0xaf, + 0x98, 0x95, 0x28, 0x0e, 0x6d, 0x50, 0xef, 0x83, 0xad, 0xb5, 0xe5, 0x2a, 0x77, 0x93, 0x70, 0xbd, + 0xd8, 0x8d, 0xde, 0xbe, 0x1d, 0x1c, 0xb1, 0xd4, 0x86, 0x0a, 0xf7, 0x62, 0x20, 0x1a, 0xe2, 0xde, + 0x03, 0x54, 0xa3, 0x92, 0xbf, 0x56, 0x9a, 0x70, 0xa9, 0x97, 0x40, 0xb0, 0x98, 0x4c, 0x90, 0x66, + 0x99, 0xa6, 0x82, 0x05, 0x39, 0x78, 0x7a, 0x37, 0x53, 0xfa, 0x90, 0x25, 0x9f, 0xb0, 0x6d, 0x93, + 0x4c, 0xa6, 0x57, 0xf6, 0x2f, 0xaf, 0x81, 0x22, 0xef, 0x8a, 0xb5, 0xfe, 0x28, 0xe5, 0xc5, 0x94, + 0x72, 0xb4, 0x49, 0x3d, 0x6a, 0xa2, 0xa5, 0x8a, 0x16, 0x94, 0xfc, 0x70, 0x39, 0x95, 0x1e, 0x5b, + 0x4a, 0x22, 0xf6, 0xbf, 0xd6, 0x52, 0x6a, 0x88, 0x7b, 0x4b, 0x7c, 0x29, 0xb5, 0xd2, 0xb3, 0x2d, + 0x65, 0x84, 0xa0, 0xbe, 0x94, 0x7a, 0x37, 0x53, 0xfa, 0xd0, 0x7d, 0x29, 0x93, 0xc9, 0x9c, 0x79, + 0x29, 0x23, 0x8f, 0xba, 0xb5, 0xfe, 0x24, 0x2d, 0x65, 0x14, 0x9e, 0x2d, 0x65, 0xb4, 0x34, 0xa2, + 0xd0, 0x66, 0x2c, 0x65, 0x14, 0xf3, 0x0b, 0x4a, 0x8f, 0xbd, 0x1a, 0x3f, 0xd3, 0x62, 0x8a, 0xe0, + 0x83, 0x11, 0xd4, 0xbd, 0x07, 0x68, 0x9f, 0x5a, 0x53, 0x22, 0xe5, 0xbd, 0x2d, 0xe8, 0x62, 0x1a, + 0x51, 0xba, 0xa4, 0x6b, 0x42, 0x4e, 0x8b, 0x76, 0x37, 0xb5, 0x2f, 0x59, 0xeb, 0xc1, 0x96, 0x35, + 0x4a, 0xea, 0xac, 0x0b, 0xbb, 0x21, 0x98, 0x66, 0xec, 0xe1, 0x7d, 0xa4, 0x57, 0xea, 0xe2, 0xa6, + 0xd6, 0xa0, 0x1d, 0x6a, 0x2b, 0x8a, 0x97, 0x2b, 0x76, 0xa6, 0xb4, 0x17, 0xfe, 0x5d, 0xa9, 0xc6, + 0x5e, 0xf2, 0xab, 0x54, 0xd3, 0x9e, 0xf9, 0x4b, 0xaa, 0x71, 0xec, 0xcf, 0xa8, 0xee, 0xcd, 0x9f, + 0x90, 0x38, 0x4f, 0xdd, 0x74, 0x41, 0x69, 0x46, 0xf3, 0xf4, 0x20, 0xb0, 0xd4, 0xc1, 0xe6, 0x13, + 0x7e, 0x43, 0x20, 0x0a, 0x53, 0x27, 0x3f, 0x09, 0x1f, 0x7d, 0x06, 0x05, 0x7e, 0xc0, 0x43, 0x02, + 0x49, 0x80, 0xa9, 0x4b, 0x57, 0x11, 0x2a, 0x7f, 0x0f, 0x3d, 0xe8, 0x45, 0xd5, 0xef, 0x65, 0x26, + 0xd2, 0xf5, 0x62, 0xc2, 0x02, 0x77, 0x3c, 0xa2, 0xb2, 0x36, 0xe3, 0xfa, 0xac, 0xde, 0x19, 0x71, + 0x29, 0xac, 0x83, 0xef, 0x2d, 0xa1, 0x35, 0x7a, 0x98, 0xf5, 0xe2, 0x2c, 0x85, 0x3f, 0x99, 0x0c, + 0x3d, 0x6b, 0xab, 0xf2, 0xad, 0x82, 0xde, 0xa7, 0xb4, 0xb6, 0xd3, 0x3b, 0x25, 0xa7, 0xa8, 0xc7, + 0xd1, 0xa5, 0x4d, 0x11, 0x93, 0xc8, 0x99, 0xf1, 0xa1, 0xdb, 0xcc, 0x44, 0x5f, 0x4f, 0xa0, 0xcf, + 0x61, 0x54, 0x20, 0x77, 0x9f, 0x90, 0x28, 0x36, 0x9d, 0x90, 0x65, 0x98, 0xd0, 0x9e, 0x86, 0x48, + 0xa1, 0x2e, 0xe9, 0xc1, 0x48, 0xc6, 0x3a, 0x4f, 0x68, 0x4f, 0x40, 0x24, 0x95, 0xa4, 0x87, 0x21, + 0xa9, 0x54, 0xbe, 0x03, 0x63, 0x7c, 0x4a, 0x33, 0x67, 0x23, 0x5d, 0xdb, 0x9f, 0x53, 0xdc, 0x39, + 0x3b, 0x4d, 0x3b, 0xa8, 0xba, 0xce, 0x53, 0xfb, 0xb0, 0xeb, 0xc4, 0xc4, 0x51, 0xf6, 0x96, 0xd0, + 0x1e, 0x4d, 0xeb, 0x24, 0x92, 0x6d, 0xe1, 0xe0, 0x85, 0xeb, 0x3d, 0xb3, 0x9d, 0xc3, 0x2e, 0x24, + 0xaf, 0xea, 0x24, 0xa3, 0x78, 0x8c, 0x6e, 0x2d, 0x9d, 0x6e, 0x57, 0xfc, 0x0c, 0x6d, 0x7f, 0x91, + 0xba, 0x0b, 0x9c, 0xb5, 0xc7, 0xe9, 0x37, 0x1f, 0x17, 0x43, 0x47, 0x48, 0x13, 0x37, 0x5c, 0xaf, + 0xd9, 0x9d, 0x58, 0x49, 0x77, 0x3b, 0x8c, 0xa0, 0xed, 0x2d, 0x11, 0xaa, 0xb5, 0x54, 0xaa, 0xdd, + 0xb0, 0x33, 0xbe, 0x56, 0x97, 0xe8, 0xd8, 0xcf, 0xd8, 0xdb, 0x6c, 0xae, 0x45, 0xbe, 0x34, 0xdb, + 0x1e, 0x7e, 0x8a, 0x3d, 0xea, 0xcd, 0xda, 0xcd, 0x8f, 0x53, 0x07, 0xdf, 0x5b, 0x22, 0x54, 0x6a, + 0x31, 0x2a, 0x69, 0xd0, 0x59, 0x82, 0x1a, 0x1d, 0x5a, 0x8f, 0xbd, 0x49, 0x23, 0xf3, 0x01, 0xb5, + 0xb9, 0xee, 0xae, 0x75, 0x99, 0x11, 0xe1, 0x5f, 0x2d, 0x00, 0xf7, 0xee, 0x13, 0xcc, 0x9a, 0x82, + 0x19, 0x87, 0x48, 0x6d, 0xf3, 0x73, 0x61, 0x5c, 0xed, 0xda, 0x6c, 0xba, 0x13, 0xc4, 0xa8, 0x4c, + 0x39, 0x89, 0x14, 0xb3, 0x84, 0x96, 0x50, 0xb1, 0x38, 0xa1, 0x7a, 0x73, 0xfa, 0xa8, 0xcc, 0xa4, + 0x78, 0x35, 0xf5, 0xa2, 0x72, 0x1d, 0x9b, 0x98, 0x93, 0x31, 0x4a, 0x82, 0x99, 0x55, 0xd6, 0xdd, + 0xc6, 0x33, 0xd5, 0xac, 0xa2, 0xe4, 0xf2, 0x2b, 0xea, 0x99, 0xf6, 0x38, 0x13, 0xa7, 0xe9, 0xf6, + 0x54, 0xbf, 0x10, 0x35, 0x9b, 0x9f, 0x6a, 0x56, 0xd1, 0xf3, 0x0e, 0x4a, 0xb3, 0x08, 0x6d, 0x50, + 0xa7, 0xdc, 0xdd, 0x2c, 0x42, 0x91, 0x74, 0xb3, 0x88, 0xda, 0xd1, 0x74, 0x76, 0x81, 0xe2, 0x89, + 0x07, 0xa5, 0xc0, 0x9d, 0x9a, 0x93, 0x30, 0xc3, 0xe5, 0x63, 0x26, 0x21, 0x57, 0xaa, 0x34, 0x37, + 0xa4, 0xe7, 0x51, 0x2d, 0xea, 0xfe, 0x0b, 0xf7, 0x72, 0x68, 0x13, 0x2e, 0x3c, 0xc2, 0x01, 0x67, + 0x60, 0x26, 0xf6, 0x03, 0xcf, 0x6e, 0x04, 0x99, 0x37, 0x0d, 0x42, 0xbe, 0x4e, 0xc0, 0xd9, 0x7b, + 0x97, 0xd0, 0xab, 0x25, 0xd3, 0xcb, 0xc4, 0xcb, 0xb0, 0x28, 0x71, 0xf3, 0xe5, 0x59, 0xba, 0x98, + 0xbe, 0xc5, 0x87, 0xd9, 0xa5, 0x7d, 0x3a, 0x6a, 0x21, 0x8c, 0x69, 0xc0, 0x35, 0x86, 0x3b, 0x30, + 0xc4, 0x90, 0x52, 0xbf, 0x91, 0xe3, 0x2a, 0x0e, 0xba, 0x2f, 0x3c, 0xc3, 0x08, 0x8a, 0x56, 0x95, + 0xda, 0xaf, 0xfb, 0x30, 0xca, 0xee, 0x22, 0x7a, 0x47, 0xf9, 0x58, 0xf8, 0x8f, 0x65, 0x75, 0x2c, + 0x0d, 0xf9, 0x33, 0x98, 0x50, 0x2f, 0xec, 0xcf, 0x3e, 0x91, 0xdf, 0xa1, 0xf7, 0x41, 0xc2, 0xec, + 0x9a, 0x8e, 0x3f, 0x17, 0x89, 0x2e, 0xcf, 0xa7, 0x94, 0x31, 0x48, 0x99, 0x74, 0x38, 0xad, 0xfb, + 0xd3, 0x31, 0x6c, 0xf4, 0xb1, 0x78, 0xd9, 0x21, 0x91, 0xe3, 0x40, 0x19, 0x73, 0x36, 0xc9, 0xa6, + 0xf9, 0x75, 0x90, 0x25, 0x83, 0xed, 0xda, 0xed, 0x5e, 0xee, 0xad, 0xba, 0x4f, 0x5d, 0x1a, 0x95, + 0x2d, 0x2a, 0x78, 0xc5, 0xf2, 0x1e, 0xa4, 0x13, 0xba, 0x92, 0x9e, 0x2a, 0x81, 0x2e, 0xc6, 0x63, + 0xaa, 0xd8, 0xc5, 0x13, 0x48, 0xa7, 0x0d, 0x2f, 0x23, 0xf5, 0x42, 0xa8, 0xc9, 0xc6, 0xc9, 0x65, + 0xa0, 0x65, 0x29, 0xc6, 0xfc, 0x95, 0xda, 0xb9, 0x90, 0x5b, 0x13, 0x7e, 0x4f, 0xbd, 0x0f, 0x36, + 0x43, 0x08, 0x4a, 0xb8, 0x29, 0xeb, 0xba, 0x16, 0x69, 0xe4, 0x7e, 0x81, 0xca, 0x7f, 0xc9, 0x59, + 0x63, 0x53, 0x89, 0xdd, 0x52, 0x2e, 0x5b, 0xb3, 0xf3, 0xcd, 0x3e, 0xa3, 0x4f, 0x66, 0x92, 0x33, + 0x43, 0xdc, 0xec, 0x42, 0x45, 0xcc, 0xc4, 0xdb, 0x5d, 0xe1, 0xe4, 0xbd, 0xcb, 0x25, 0xf6, 0x85, + 0x4d, 0x6e, 0xaf, 0x4b, 0xa6, 0x8b, 0x84, 0xab, 0xb0, 0x94, 0x94, 0xac, 0x82, 0xa0, 0xee, 0x54, + 0x96, 0x39, 0x86, 0xb4, 0xe9, 0xff, 0x02, 0x4a, 0xe1, 0x8d, 0xf2, 0xd9, 0x16, 0x21, 0x5d, 0xa2, + 0x47, 0xf1, 0x44, 0xb5, 0x28, 0x2b, 0x18, 0x77, 0xf1, 0x5a, 0xda, 0x0c, 0xfb, 0x8a, 0xab, 0x02, + 0xf7, 0x85, 0x89, 0xe4, 0x48, 0x49, 0xcb, 0xb6, 0x92, 0x61, 0xbb, 0xe2, 0x6f, 0x88, 0xce, 0x85, + 0x50, 0x7c, 0xb5, 0xcf, 0x4e, 0x48, 0x5e, 0xf8, 0x46, 0x08, 0x19, 0x19, 0xcb, 0x7b, 0x16, 0x7f, + 0x96, 0xe8, 0x52, 0x9c, 0x75, 0x41, 0xad, 0xf0, 0xdd, 0x4c, 0x3c, 0x9b, 0xae, 0x94, 0xe5, 0x52, + 0x33, 0xfb, 0xca, 0xd5, 0xcd, 0x48, 0xc5, 0x5b, 0x25, 0xc7, 0x94, 0x35, 0xa1, 0xa5, 0xf2, 0xac, + 0x9a, 0xeb, 0xa1, 0xa5, 0x20, 0x21, 0xc7, 0x67, 0x11, 0x44, 0xa5, 0xb9, 0x8e, 0x6a, 0x50, 0x64, + 0x5b, 0x24, 0x29, 0x8a, 0x86, 0x74, 0xe4, 0x4f, 0xaa, 0xcc, 0xd0, 0x2e, 0x6a, 0x50, 0x64, 0xdb, + 0xe5, 0x3c, 0x89, 0xd6, 0x69, 0xda, 0xf6, 0x44, 0x8a, 0x37, 0x94, 0x17, 0xa3, 0xe9, 0xb1, 0x49, + 0x8a, 0xd9, 0x0d, 0xa3, 0xef, 0xc1, 0x5c, 0x62, 0x70, 0x12, 0x79, 0x27, 0x9f, 0x15, 0xba, 0xa4, + 0x1b, 0xf1, 0x67, 0xb0, 0x90, 0x96, 0x77, 0x33, 0x7c, 0x58, 0x90, 0x9d, 0x0c, 0x55, 0xf2, 0xd4, + 0xae, 0x09, 0x3c, 0x37, 0x61, 0x36, 0x29, 0x97, 0xa5, 0x3c, 0x1c, 0x19, 0x89, 0x2e, 0x13, 0x5f, + 0x2f, 0x6c, 0xc3, 0x5c, 0x62, 0x3e, 0x49, 0x39, 0x33, 0x59, 0xd9, 0x26, 0x13, 0x29, 0x7e, 0x09, + 0xf3, 0x29, 0xc9, 0x13, 0xc3, 0x8b, 0xbf, 0xcc, 0xe4, 0x8a, 0x19, 0x0e, 0x0c, 0xc5, 0xf4, 0xbc, + 0x7c, 0xd2, 0x6f, 0xa5, 0x6b, 0xea, 0xbe, 0x62, 0x62, 0xb2, 0x52, 0xb4, 0x43, 0x37, 0x61, 0x52, + 0xa2, 0x3e, 0x75, 0x13, 0x66, 0x24, 0xf2, 0x4b, 0x79, 0x75, 0x32, 0x9f, 0x92, 0x9b, 0x2f, 0x83, + 0x6a, 0x0f, 0xbd, 0xdd, 0x14, 0xfc, 0x5f, 0x4f, 0xd6, 0x16, 0xf1, 0x85, 0x4c, 0xcc, 0xe4, 0x96, + 0xd8, 0x4f, 0xe5, 0x25, 0x78, 0xab, 0x95, 0x21, 0x06, 0x21, 0xf5, 0x29, 0x38, 0x81, 0xa4, 0xb6, + 0xf3, 0x09, 0x15, 0x37, 0x8b, 0xa3, 0xc6, 0x90, 0xa9, 0xe0, 0xf9, 0x11, 0x8c, 0xd7, 0xd4, 0xc6, + 0x13, 0x1a, 0x49, 0xdd, 0x14, 0xd2, 0xb9, 0xbf, 0x7b, 0xdf, 0xbb, 0xde, 0xca, 0x95, 0x5b, 0xad, + 0x9e, 0x46, 0x91, 0x7a, 0x51, 0xaf, 0x65, 0x68, 0x90, 0x9c, 0x3a, 0x29, 0xf9, 0x89, 0xbc, 0xa8, + 0x4f, 0x4e, 0xea, 0x50, 0x67, 0x31, 0xa5, 0xa3, 0xb9, 0x6d, 0x90, 0xd1, 0x3d, 0x67, 0x93, 0x74, + 0x75, 0xcd, 0x4c, 0x8e, 0xc3, 0xbc, 0x0a, 0xc2, 0x9c, 0x14, 0xaa, 0x57, 0x41, 0x2c, 0xd3, 0x85, + 0xea, 0x55, 0x90, 0x90, 0xc6, 0x62, 0x85, 0xd2, 0x0a, 0x83, 0x71, 0x67, 0x18, 0x0c, 0x24, 0x99, + 0x84, 0x98, 0xdf, 0x4f, 0xd4, 0x80, 0x02, 0x2c, 0x84, 0x77, 0x86, 0xc5, 0x33, 0x1a, 0x48, 0x20, + 0x12, 0xf3, 0xfb, 0x21, 0x14, 0x58, 0x50, 0xe1, 0x30, 0x36, 0x5a, 0xe8, 0xef, 0x13, 0x8f, 0x75, + 0x9c, 0xb1, 0xa8, 0x85, 0x68, 0x54, 0x29, 0x69, 0xd6, 0x4a, 0x09, 0x37, 0x95, 0xb1, 0x55, 0x21, + 0x8c, 0x1d, 0x25, 0x8d, 0x47, 0xb1, 0x70, 0x52, 0xc5, 0x8b, 0x09, 0x35, 0x52, 0xec, 0x1b, 0x57, + 0x23, 0x4d, 0xc9, 0x21, 0x25, 0x84, 0x9f, 0x2a, 0x5e, 0x4a, 0xac, 0xe3, 0x84, 0x02, 0x96, 0xb6, + 0x2c, 0x25, 0xa7, 0xbe, 0x14, 0xa5, 0xbb, 0xe7, 0xfe, 0x2f, 0xde, 0xee, 0x05, 0x94, 0xb7, 0x8a, + 0x65, 0x28, 0xf2, 0x38, 0x14, 0x7a, 0x3b, 0xc1, 0x8f, 0x3a, 0x29, 0x5d, 0x7d, 0xb1, 0x5b, 0x3a, + 0x7f, 0xb4, 0x0f, 0x8b, 0x11, 0x3f, 0x6f, 0xbd, 0xa5, 0x6e, 0x04, 0x52, 0x57, 0x70, 0x1f, 0x16, + 0xf9, 0x9b, 0xfa, 0x73, 0x26, 0x7c, 0x00, 0x8b, 0x59, 0x89, 0xfa, 0xd1, 0xed, 0x64, 0x5f, 0xee, + 0xc4, 0xe9, 0x49, 0x97, 0xab, 0xaf, 0xc6, 0x7d, 0xba, 0x23, 0xeb, 0x7e, 0x56, 0x9e, 0xb7, 0x01, + 0x93, 0x7a, 0x92, 0x7e, 0xa4, 0xf2, 0x35, 0x35, 0x77, 0xbf, 0x1e, 0x58, 0x25, 0x25, 0xb3, 0xff, + 0xa7, 0xf4, 0x2b, 0x14, 0x26, 0xfe, 0x2b, 0xea, 0x8f, 0xfd, 0xd4, 0x24, 0xf8, 0xc5, 0x84, 0x7c, + 0x82, 0xe8, 0x3b, 0x30, 0x15, 0xbe, 0xf9, 0x63, 0x24, 0x12, 0xc0, 0x32, 0x8c, 0x59, 0x53, 0xe1, + 0xeb, 0xbf, 0xb3, 0xa3, 0xaf, 0x8a, 0x4f, 0x51, 0x88, 0x7e, 0x39, 0xe6, 0xde, 0xae, 0x8d, 0xa1, + 0x97, 0x2f, 0x92, 0x32, 0xb7, 0x67, 0x5d, 0x9d, 0x06, 0x3d, 0x6e, 0xc9, 0x21, 0xd4, 0xd4, 0xe3, + 0x96, 0x19, 0xe6, 0x4d, 0x8a, 0xbf, 0x29, 0x74, 0x36, 0xe0, 0x3a, 0x0d, 0xef, 0xb0, 0xcd, 0x02, + 0x6d, 0x25, 0x43, 0xa5, 0xf7, 0x3d, 0x1a, 0x14, 0xa2, 0x05, 0xd7, 0xba, 0xc6, 0x90, 0x43, 0x77, + 0xb5, 0x00, 0x17, 0xdd, 0xa3, 0xcd, 0x65, 0x3d, 0x29, 0x49, 0x0a, 0xc5, 0x26, 0xbf, 0xb3, 0x19, + 0x51, 0xe1, 0xe4, 0x77, 0x36, 0x33, 0x96, 0xdb, 0x97, 0x34, 0xed, 0x01, 0xff, 0x46, 0xd1, 0x90, + 0x2d, 0xd8, 0x61, 0xc1, 0x65, 0x33, 0xaf, 0x66, 0xae, 0xe9, 0x17, 0x92, 0x31, 0x44, 0xaa, 0xd3, + 0x5c, 0xe1, 0x9a, 0x58, 0x1a, 0xf1, 0xee, 0x44, 0x32, 0x9c, 0xd9, 0xaf, 0xb0, 0x0d, 0x78, 0xe6, + 0x9e, 0xa7, 0x94, 0x57, 0x96, 0x7f, 0xfc, 0x67, 0x57, 0x72, 0x3f, 0xfe, 0xc9, 0x95, 0xdc, 0x7f, + 0xfd, 0xc9, 0x95, 0xdc, 0x9f, 0xfe, 0xe4, 0x4a, 0xee, 0xbb, 0x4b, 0xbd, 0x85, 0x38, 0x6d, 0xb4, + 0x6c, 0xec, 0x04, 0x77, 0x19, 0xb9, 0x21, 0xfa, 0xdf, 0x83, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, + 0x5b, 0xfb, 0x5e, 0x9a, 0x6b, 0xd7, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -16253,6 +16417,11 @@ type AuthServiceClient interface { // without signing keys. If the cluster has multiple TLS certs, they will // all be appended. GetClusterCACert(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*GetClusterCACertResponse, error) + // AssertSystemRole is used by agents to prove that they have a given system role when their + // credentials originate from multiple separate join tokens so that they can be issued an instance + // certificate that encompasses all of their capabilities. This method will be deprecated once we + // have a more comprehensive model for join token joining/replacement. + AssertSystemRole(ctx context.Context, in *SystemRoleAssertion, opts ...grpc.CallOption) (*emptypb.Empty, error) // SubmitUsageEvent submits an external usage event. SubmitUsageEvent(ctx context.Context, in *SubmitUsageEventRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // GetLicense returns the license used to start the auth server. @@ -18711,6 +18880,15 @@ func (c *authServiceClient) GetClusterCACert(ctx context.Context, in *emptypb.Em return out, nil } +func (c *authServiceClient) AssertSystemRole(ctx context.Context, in *SystemRoleAssertion, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/proto.AuthService/AssertSystemRole", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *authServiceClient) SubmitUsageEvent(ctx context.Context, in *SubmitUsageEventRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/proto.AuthService/SubmitUsageEvent", in, out, opts...) @@ -19481,6 +19659,11 @@ type AuthServiceServer interface { // without signing keys. If the cluster has multiple TLS certs, they will // all be appended. GetClusterCACert(context.Context, *emptypb.Empty) (*GetClusterCACertResponse, error) + // AssertSystemRole is used by agents to prove that they have a given system role when their + // credentials originate from multiple separate join tokens so that they can be issued an instance + // certificate that encompasses all of their capabilities. This method will be deprecated once we + // have a more comprehensive model for join token joining/replacement. + AssertSystemRole(context.Context, *SystemRoleAssertion) (*emptypb.Empty, error) // SubmitUsageEvent submits an external usage event. SubmitUsageEvent(context.Context, *SubmitUsageEventRequest) (*emptypb.Empty, error) // GetLicense returns the license used to start the auth server. @@ -20204,6 +20387,9 @@ func (*UnimplementedAuthServiceServer) GetDomainName(ctx context.Context, req *e func (*UnimplementedAuthServiceServer) GetClusterCACert(ctx context.Context, req *emptypb.Empty) (*GetClusterCACertResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetClusterCACert not implemented") } +func (*UnimplementedAuthServiceServer) AssertSystemRole(ctx context.Context, req *SystemRoleAssertion) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method AssertSystemRole not implemented") +} func (*UnimplementedAuthServiceServer) SubmitUsageEvent(ctx context.Context, req *SubmitUsageEventRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method SubmitUsageEvent not implemented") } @@ -24393,6 +24579,24 @@ func _AuthService_GetClusterCACert_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _AuthService_AssertSystemRole_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SystemRoleAssertion) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServiceServer).AssertSystemRole(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/proto.AuthService/AssertSystemRole", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServiceServer).AssertSystemRole(ctx, req.(*SystemRoleAssertion)) + } + return interceptor(ctx, in, info, handler) +} + func _AuthService_SubmitUsageEvent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(SubmitUsageEventRequest) if err := dec(in); err != nil { @@ -25624,6 +25828,10 @@ var _AuthService_serviceDesc = grpc.ServiceDesc{ MethodName: "GetClusterCACert", Handler: _AuthService_GetClusterCACert_Handler, }, + { + MethodName: "AssertSystemRole", + Handler: _AuthService_AssertSystemRole_Handler, + }, { MethodName: "SubmitUsageEvent", Handler: _AuthService_SubmitUsageEvent_Handler, @@ -25885,6 +26093,13 @@ func (m *HostCertsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.SystemRoleAssertionID) > 0 { + i -= len(m.SystemRoleAssertionID) + copy(dAtA[i:], m.SystemRoleAssertionID) + i = encodeVarintAuthservice(dAtA, i, uint64(len(m.SystemRoleAssertionID))) + i-- + dAtA[i] = 0x6a + } if len(m.SystemRoles) > 0 { for iNdEx := len(m.SystemRoles) - 1; iNdEx >= 0; iNdEx-- { i -= len(m.SystemRoles[iNdEx]) @@ -35158,6 +35373,104 @@ func (m *GetSSODiagnosticInfoRequest) MarshalToSizedBuffer(dAtA []byte) (int, er return len(dAtA) - i, nil } +func (m *SystemRoleAssertion) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SystemRoleAssertion) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SystemRoleAssertion) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.SystemRole) > 0 { + i -= len(m.SystemRole) + copy(dAtA[i:], m.SystemRole) + i = encodeVarintAuthservice(dAtA, i, uint64(len(m.SystemRole))) + i-- + dAtA[i] = 0x1a + } + if len(m.AssertionID) > 0 { + i -= len(m.AssertionID) + copy(dAtA[i:], m.AssertionID) + i = encodeVarintAuthservice(dAtA, i, uint64(len(m.AssertionID))) + i-- + dAtA[i] = 0x12 + } + if len(m.ServerID) > 0 { + i -= len(m.ServerID) + copy(dAtA[i:], m.ServerID) + i = encodeVarintAuthservice(dAtA, i, uint64(len(m.ServerID))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *SystemRoleAssertionSet) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SystemRoleAssertionSet) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SystemRoleAssertionSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.SystemRoles) > 0 { + for iNdEx := len(m.SystemRoles) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.SystemRoles[iNdEx]) + copy(dAtA[i:], m.SystemRoles[iNdEx]) + i = encodeVarintAuthservice(dAtA, i, uint64(len(m.SystemRoles[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + if len(m.AssertionID) > 0 { + i -= len(m.AssertionID) + copy(dAtA[i:], m.AssertionID) + i = encodeVarintAuthservice(dAtA, i, uint64(len(m.AssertionID))) + i-- + dAtA[i] = 0x12 + } + if len(m.ServerID) > 0 { + i -= len(m.ServerID) + copy(dAtA[i:], m.ServerID) + i = encodeVarintAuthservice(dAtA, i, uint64(len(m.ServerID))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *UpstreamInventoryOneOf) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -36999,6 +37312,10 @@ func (m *HostCertsRequest) Size() (n int) { n += 1 + l + sovAuthservice(uint64(l)) } } + l = len(m.SystemRoleAssertionID) + if l > 0 { + n += 1 + l + sovAuthservice(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -41297,6 +41614,56 @@ func (m *GetSSODiagnosticInfoRequest) Size() (n int) { return n } +func (m *SystemRoleAssertion) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ServerID) + if l > 0 { + n += 1 + l + sovAuthservice(uint64(l)) + } + l = len(m.AssertionID) + if l > 0 { + n += 1 + l + sovAuthservice(uint64(l)) + } + l = len(m.SystemRole) + if l > 0 { + n += 1 + l + sovAuthservice(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *SystemRoleAssertionSet) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ServerID) + if l > 0 { + n += 1 + l + sovAuthservice(uint64(l)) + } + l = len(m.AssertionID) + if l > 0 { + n += 1 + l + sovAuthservice(uint64(l)) + } + if len(m.SystemRoles) > 0 { + for _, s := range m.SystemRoles { + l = len(s) + n += 1 + l + sovAuthservice(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *UpstreamInventoryOneOf) Size() (n int) { if m == nil { return 0 @@ -42603,6 +42970,38 @@ func (m *HostCertsRequest) Unmarshal(dAtA []byte) error { } m.SystemRoles = append(m.SystemRoles, github_com_gravitational_teleport_api_types.SystemRole(dAtA[iNdEx:postIndex])) iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SystemRoleAssertionID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAuthservice + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAuthservice + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SystemRoleAssertionID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipAuthservice(dAtA[iNdEx:]) @@ -64053,11 +64452,349 @@ func (m *PresenceMFAChallengeSend) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - v := &MFAAuthenticateResponse{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + v := &MFAAuthenticateResponse{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Request = &PresenceMFAChallengeSend_ChallengeResponse{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAuthservice(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAuthservice + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetDomainNameResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetDomainNameResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetDomainNameResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DomainName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAuthservice + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAuthservice + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DomainName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAuthservice(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAuthservice + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetClusterCACertResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetClusterCACertResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetClusterCACertResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TLSCA", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthAuthservice + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthAuthservice + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TLSCA = append(m.TLSCA[:0], dAtA[iNdEx:postIndex]...) + if m.TLSCA == nil { + m.TLSCA = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAuthservice(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAuthservice + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetLicenseResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetLicenseResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetLicenseResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field License", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthAuthservice + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthAuthservice + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.License = append(m.License[:0], dAtA[iNdEx:postIndex]...) + if m.License == nil { + m.License = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAuthservice(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAuthservice + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListReleasesResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListReleasesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListReleasesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Releases", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthAuthservice + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthAuthservice + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Releases = append(m.Releases, &types.Release{}) + if err := m.Releases[len(m.Releases)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } - m.Request = &PresenceMFAChallengeSend_ChallengeResponse{v} iNdEx = postIndex default: iNdEx = preIndex @@ -64081,7 +64818,7 @@ func (m *PresenceMFAChallengeSend) Unmarshal(dAtA []byte) error { } return nil } -func (m *GetDomainNameResponse) Unmarshal(dAtA []byte) error { +func (m *GetOIDCAuthRequestRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -64104,15 +64841,15 @@ func (m *GetDomainNameResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: GetDomainNameResponse: wiretype end group for non-group") + return fmt.Errorf("proto: GetOIDCAuthRequestRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: GetDomainNameResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: GetOIDCAuthRequestRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DomainName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field StateToken", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -64140,7 +64877,7 @@ func (m *GetDomainNameResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.DomainName = string(dAtA[iNdEx:postIndex]) + m.StateToken = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -64164,7 +64901,7 @@ func (m *GetDomainNameResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *GetClusterCACertResponse) Unmarshal(dAtA []byte) error { +func (m *GetSAMLAuthRequestRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -64187,17 +64924,17 @@ func (m *GetClusterCACertResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: GetClusterCACertResponse: wiretype end group for non-group") + return fmt.Errorf("proto: GetSAMLAuthRequestRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: GetClusterCACertResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: GetSAMLAuthRequestRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TLSCA", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) } - var byteLen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowAuthservice @@ -64207,25 +64944,23 @@ func (m *GetClusterCACertResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - byteLen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if byteLen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthAuthservice } - postIndex := iNdEx + byteLen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthAuthservice } if postIndex > l { return io.ErrUnexpectedEOF } - m.TLSCA = append(m.TLSCA[:0], dAtA[iNdEx:postIndex]...) - if m.TLSCA == nil { - m.TLSCA = []byte{} - } + m.ID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -64249,7 +64984,7 @@ func (m *GetClusterCACertResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *GetLicenseResponse) Unmarshal(dAtA []byte) error { +func (m *GetGithubAuthRequestRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -64272,17 +65007,17 @@ func (m *GetLicenseResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: GetLicenseResponse: wiretype end group for non-group") + return fmt.Errorf("proto: GetGithubAuthRequestRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: GetLicenseResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: GetGithubAuthRequestRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field License", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field StateToken", wireType) } - var byteLen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowAuthservice @@ -64292,25 +65027,23 @@ func (m *GetLicenseResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - byteLen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if byteLen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthAuthservice } - postIndex := iNdEx + byteLen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthAuthservice } if postIndex > l { return io.ErrUnexpectedEOF } - m.License = append(m.License[:0], dAtA[iNdEx:postIndex]...) - if m.License == nil { - m.License = []byte{} - } + m.StateToken = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -64334,7 +65067,7 @@ func (m *GetLicenseResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *ListReleasesResponse) Unmarshal(dAtA []byte) error { +func (m *GetSSODiagnosticInfoRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -64357,17 +65090,17 @@ func (m *ListReleasesResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ListReleasesResponse: wiretype end group for non-group") + return fmt.Errorf("proto: GetSSODiagnosticInfoRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ListReleasesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: GetSSODiagnosticInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Releases", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AuthRequestKind", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowAuthservice @@ -64377,80 +65110,27 @@ func (m *ListReleasesResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthAuthservice } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthAuthservice } if postIndex > l { return io.ErrUnexpectedEOF } - m.Releases = append(m.Releases, &types.Release{}) - if err := m.Releases[len(m.Releases)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.AuthRequestKind = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAuthservice(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthAuthservice - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetOIDCAuthRequestRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAuthservice - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GetOIDCAuthRequestRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetOIDCAuthRequestRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StateToken", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AuthRequestID", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -64478,7 +65158,7 @@ func (m *GetOIDCAuthRequestRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.StateToken = string(dAtA[iNdEx:postIndex]) + m.AuthRequestID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -64502,7 +65182,7 @@ func (m *GetOIDCAuthRequestRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *GetSAMLAuthRequestRequest) Unmarshal(dAtA []byte) error { +func (m *SystemRoleAssertion) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -64525,15 +65205,15 @@ func (m *GetSAMLAuthRequestRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: GetSAMLAuthRequestRequest: wiretype end group for non-group") + return fmt.Errorf("proto: SystemRoleAssertion: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: GetSAMLAuthRequestRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SystemRoleAssertion: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ServerID", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -64561,62 +65241,43 @@ func (m *GetSAMLAuthRequestRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ID = string(dAtA[iNdEx:postIndex]) + m.ServerID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipAuthservice(dAtA[iNdEx:]) - if err != nil { - return err + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AssertionID", wireType) } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthAuthservice + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAuthservice } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GetGithubAuthRequestRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowAuthservice + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAuthservice } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GetGithubAuthRequestRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetGithubAuthRequestRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.AssertionID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StateToken", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SystemRole", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -64644,7 +65305,7 @@ func (m *GetGithubAuthRequestRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.StateToken = string(dAtA[iNdEx:postIndex]) + m.SystemRole = github_com_gravitational_teleport_api_types.SystemRole(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -64668,7 +65329,7 @@ func (m *GetGithubAuthRequestRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *GetSSODiagnosticInfoRequest) Unmarshal(dAtA []byte) error { +func (m *SystemRoleAssertionSet) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -64691,15 +65352,15 @@ func (m *GetSSODiagnosticInfoRequest) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: GetSSODiagnosticInfoRequest: wiretype end group for non-group") + return fmt.Errorf("proto: SystemRoleAssertionSet: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: GetSSODiagnosticInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SystemRoleAssertionSet: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthRequestKind", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ServerID", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -64727,11 +65388,11 @@ func (m *GetSSODiagnosticInfoRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.AuthRequestKind = string(dAtA[iNdEx:postIndex]) + m.ServerID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AuthRequestID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AssertionID", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -64759,7 +65420,39 @@ func (m *GetSSODiagnosticInfoRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.AuthRequestID = string(dAtA[iNdEx:postIndex]) + m.AssertionID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SystemRoles", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAuthservice + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAuthservice + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SystemRoles = append(m.SystemRoles, github_com_gravitational_teleport_api_types.SystemRole(dAtA[iNdEx:postIndex])) iNdEx = postIndex default: iNdEx = preIndex diff --git a/api/proto/teleport/legacy/client/proto/authservice.proto b/api/proto/teleport/legacy/client/proto/authservice.proto index f83df1e3ffa56..ce310c0bf100d 100644 --- a/api/proto/teleport/legacy/client/proto/authservice.proto +++ b/api/proto/teleport/legacy/client/proto/authservice.proto @@ -48,7 +48,6 @@ message Watch { message HostCertsRequest { reserved 12; // system_role_assertion_id reserved "UnstableSystemRoleAssertionID"; - // HostID is a unique ID of the host. string HostID = 1 [(gogoproto.jsontag) = "host_id"]; // NodeName is a user-friendly host name. @@ -86,6 +85,11 @@ message HostCertsRequest { (gogoproto.jsontag) = "system_roles,omitempty", (gogoproto.casttype) = "github.com/gravitational/teleport/api/types.SystemRole" ]; + // SystemRoleAssertionID is used by agents to prove that they have a given system role when + // their credentials originate from multiple separate join tokens so that they can be issued + // an instance certificate that encompasses all of their capabilities. This field will be + // deprecated once we have a more comprehensive model for join token joining/replacement. + string SystemRoleAssertionID = 13 [(gogoproto.jsontag) = "system_role_assertion_id,omitempty"]; } // OpenSSHCertRequest specifies certificate-generation parameters @@ -2090,6 +2094,41 @@ message GetSSODiagnosticInfoRequest { string AuthRequestID = 2 [(gogoproto.jsontag) = "auth_request_id"]; } +// SystemRoleAssertion is used by agents to prove that they have a given system role when their +// credentials originate from multiple separate join tokens so that they can be issued an +// instance certificate that encompasses all of their capabilities. This type will be +// deprecated once we have a more comprehensive model for join token joining/replacement. +message SystemRoleAssertion { + // ServerID is the server ID of the instance that the assertion is for. Assertions are + // only accepted if the calling agent's certificate matches this server id. + string ServerID = 1 [(gogoproto.jsontag) = "server_id,omitempty"]; + // AssertionID is a random UUID that uniquely identifies a set of assertions + // as originating from the same teleport process. + string AssertionID = 2 [(gogoproto.jsontag) = "assertion_id,omitempty"]; + // SystemRole is the system role being asserted. Assertions are only accepted if + // the calling agent's certificate authorizes it for this system role. + string SystemRole = 3 [ + (gogoproto.jsontag) = "system_role,omitempty", + (gogoproto.casttype) = "github.com/gravitational/teleport/api/types.SystemRole" + ]; +} + +// SystemRoleAssertionSet is an aggregate generated as a result of one or more successful +// assertions. This type will be deprecated once we have a more comprehensive model for +// join token joining/replacement. +message SystemRoleAssertionSet { + // ServerID is the server ID of the agent that generated the assertions. + string ServerID = 1 [(gogoproto.jsontag) = "server_id,omitempty"]; + // AssertionID is a random UUID that identified all constituent assertions as originating + // from the same teleport process. + string AssertionID = 2 [(gogoproto.jsontag) = "assertion_id,omitempty"]; + // SystemRoles is the set of system roles that the agent has successfully asserted. + repeated string SystemRoles = 3 [ + (gogoproto.jsontag) = "system_roles,omitempty", + (gogoproto.casttype) = "github.com/gravitational/teleport/api/types.SystemRole" + ]; +} + // UpstreamInventoryOneOf is the upstream message for the inventory control stream, // sent from teleport instances to the auth server. message UpstreamInventoryOneOf { @@ -3084,6 +3123,12 @@ service AuthService { // all be appended. rpc GetClusterCACert(google.protobuf.Empty) returns (GetClusterCACertResponse); + // AssertSystemRole is used by agents to prove that they have a given system role when their + // credentials originate from multiple separate join tokens so that they can be issued an instance + // certificate that encompasses all of their capabilities. This method will be deprecated once we + // have a more comprehensive model for join token joining/replacement. + rpc AssertSystemRole(SystemRoleAssertion) returns (google.protobuf.Empty); + // SubmitUsageEvent submits an external usage event. rpc SubmitUsageEvent(SubmitUsageEventRequest) returns (google.protobuf.Empty); diff --git a/integration/instance_test.go b/integration/instance_test.go new file mode 100644 index 0000000000000..0c00c6ee4eb4b --- /dev/null +++ b/integration/instance_test.go @@ -0,0 +1,238 @@ +/* + * 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 integration + +import ( + "context" + "net" + "os" + "path/filepath" + "testing" + "time" + + "github.com/gravitational/trace" + "github.com/stretchr/testify/require" + + "github.com/gravitational/teleport" + "github.com/gravitational/teleport/api/breaker" + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib" + "github.com/gravitational/teleport/lib/auth" + "github.com/gravitational/teleport/lib/backend" + "github.com/gravitational/teleport/lib/cloud/imds" + "github.com/gravitational/teleport/lib/defaults" + "github.com/gravitational/teleport/lib/service" + "github.com/gravitational/teleport/lib/service/servicecfg" + "github.com/gravitational/teleport/lib/services" + "github.com/gravitational/teleport/lib/utils" +) + +// basicDirCopy performs a very simplistic recursive copy from one directory to another. this helper was +// written specifically for setting up teleport data directories for testing purposes and may not be +// suitable for other applications. +func basicDirCopy(src string, dst string) error { + entries, err := os.ReadDir(src) + if err != nil { + return trace.Wrap(err) + } + + if err := os.MkdirAll(dst, teleport.PrivateDirMode); err != nil { + return trace.Wrap(err) + } + + for _, entry := range entries { + if entry.IsDir() { + if err := basicDirCopy(filepath.Join(src, entry.Name()), filepath.Join(dst, entry.Name())); err != nil { + return trace.Wrap(err) + } + continue + } + + data, err := os.ReadFile(filepath.Join(src, entry.Name())) + if err != nil { + return trace.Wrap(err) + } + + if err := os.WriteFile(filepath.Join(dst, entry.Name()), data, teleport.PrivateDirMode); err != nil { + return trace.Wrap(err) + } + } + + return nil +} + +func getFreeListenAddr() (string, error) { + l, err := net.Listen("tcp", "localhost:0") + if err != nil { + return "", trace.Wrap(err) + } + + defer l.Close() + return l.Addr().String(), nil +} + +// TestInstanceCertReissue tests the reissuance of an instance certificate when +// the instance has malformed system roles using pre-constructed data directories +// generated by an older teleport version that permitted token mix-and-match. +func TestInstanceCertReissue(t *testing.T) { + lib.SetInsecureDevMode(true) + defer lib.SetInsecureDevMode(false) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + // Create temporary directories for the auth and agent data directories. + authDir, agentDir := t.TempDir(), t.TempDir() + + // Write the instance assets to the temporary directories to set up pre-existing + // state for our teleport instances to use. + require.NoError(t, basicDirCopy("testdata/auth", authDir)) + require.NoError(t, basicDirCopy("testdata/agent", agentDir)) + + proxyAddr, err := getFreeListenAddr() + require.NoError(t, err) + + authAddr, err := getFreeListenAddr() + require.NoError(t, err) + + authCfg := servicecfg.MakeDefaultConfig() + authCfg.Version = defaults.TeleportConfigVersionV3 + authCfg.DataDir = authDir + require.NoError(t, authCfg.SetAuthServerAddresses([]utils.NetAddr{ + { + AddrNetwork: "tcp", + Addr: authAddr, + }, + })) + authCfg.Auth.Enabled = true + // ensure auth server is using the pre-constructed sqlite db + authCfg.Auth.StorageConfig.Params = backend.Params{defaults.BackendPath: filepath.Join(authDir, defaults.BackendDir)} + authCfg.Auth.ClusterName, err = services.NewClusterNameWithRandomID(types.ClusterNameSpecV2{ + ClusterName: "auth-server", + }) + require.NoError(t, err) + authCfg.Auth.ListenAddr.Addr = authAddr + authCfg.Auth.NetworkingConfig.SetProxyListenerMode(types.ProxyListenerMode_Multiplex) + + authCfg.Proxy.Enabled = true + authCfg.Proxy.DisableWebInterface = true + authCfg.Proxy.WebAddr.Addr = proxyAddr + + authCfg.SSH.Enabled = true + authCfg.SSH.Addr.Addr = "localhost:0" + authCfg.CircuitBreakerConfig = breaker.NoopBreakerConfig() + authCfg.Log = utils.NewLoggerForTests() + authCfg.InstanceMetadataClient = imds.NewDisabledIMDSClient() + + authRunErrCh := make(chan error, 1) + authIdentitiesCh := make(chan *auth.Identity, 2) + go func() { + authRunErrCh <- service.Run(ctx, *authCfg, func(cfg *servicecfg.Config) (service.Process, error) { + proc, err := service.NewTeleport(cfg) + if err != nil { + return nil, trace.Wrap(err) + } + + identity, err := proc.GetIdentity(types.RoleInstance) + if err != nil { + proc.Close() + return nil, trace.Wrap(err) + } + + select { + case authIdentitiesCh <- identity: + default: + } + + return proc, nil + }) + }() + + timeout := time.After(time.Second * 30) + select { + case <-timeout: + t.Fatal("timed out waiting for first auth identity") + case identity := <-authIdentitiesCh: + require.ElementsMatch(t, []string{string(types.RoleAuth), string(types.RoleProxy)}, identity.SystemRoles) + } + + select { + case <-timeout: + t.Fatal("timed out waiting for second auth identity") + case identity := <-authIdentitiesCh: + require.ElementsMatch(t, []string{string(types.RoleAuth), string(types.RoleProxy), string(types.RoleNode)}, identity.SystemRoles) + } + + agentCfg := servicecfg.MakeDefaultConfig() + agentCfg.Version = defaults.TeleportConfigVersionV3 + agentCfg.DataDir = agentDir + agentCfg.ProxyServer = utils.NetAddr{ + AddrNetwork: "tcp", + Addr: proxyAddr, + } + + agentCfg.Auth.Enabled = false + agentCfg.Proxy.Enabled = false + agentCfg.SSH.Enabled = true + + agentCfg.WindowsDesktop.Enabled = true + agentCfg.CircuitBreakerConfig = breaker.NoopBreakerConfig() + agentCfg.Log = utils.NewLoggerForTests() + agentCfg.MaxRetryPeriod = time.Second + agentCfg.InstanceMetadataClient = imds.NewDisabledIMDSClient() + + agentRunErrCh := make(chan error, 1) + agentIdentitiesCh := make(chan *auth.Identity, 2) + go func() { + agentRunErrCh <- service.Run(ctx, *agentCfg, func(cfg *servicecfg.Config) (service.Process, error) { + proc, err := service.NewTeleport(cfg) + if err != nil { + return nil, trace.Wrap(err) + } + + identity, err := proc.GetIdentity(types.RoleInstance) + if err != nil { + proc.Close() + return nil, trace.Wrap(err) + } + + select { + case agentIdentitiesCh <- identity: + default: + } + + return proc, nil + }) + }() + + timeout = time.After(time.Second * 30) + select { + case <-timeout: + t.Fatal("timed out waiting for first agent identity") + case identity := <-agentIdentitiesCh: + require.ElementsMatch(t, []string{string(types.RoleNode)}, identity.SystemRoles) + } + + select { + case <-timeout: + t.Fatal("timed out waiting for second agent identity") + case identity := <-agentIdentitiesCh: + require.ElementsMatch(t, []string{string(types.RoleNode), string(types.RoleWindowsDesktop)}, identity.SystemRoles) + } +} diff --git a/integration/testdata/agent/host_uuid b/integration/testdata/agent/host_uuid new file mode 100644 index 0000000000000..58667e1f226b7 --- /dev/null +++ b/integration/testdata/agent/host_uuid @@ -0,0 +1 @@ +4b60753c-a4c4-435a-8045-b77faabb41d7 \ No newline at end of file diff --git a/integration/testdata/agent/proc/sqlite.db b/integration/testdata/agent/proc/sqlite.db new file mode 100644 index 0000000000000000000000000000000000000000..673073d48c3ae47b1c739fbee624080446187268 GIT binary patch literal 49152 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 R{j=mAeQ?HoW@*~}{{uO)H&_4w literal 0 HcmV?d00001 diff --git a/integration/testdata/auth/backend/sqlite.db b/integration/testdata/auth/backend/sqlite.db new file mode 100644 index 0000000000000000000000000000000000000000..4175cf738878e124712e923f4a7767e8ceec5402 GIT binary patch literal 172032 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 literal 0 HcmV?d00001 diff --git a/integration/testdata/auth/host_uuid b/integration/testdata/auth/host_uuid new file mode 100644 index 0000000000000..4c58f3f9aa560 --- /dev/null +++ b/integration/testdata/auth/host_uuid @@ -0,0 +1 @@ +1feff6fc-865b-47c1-8a5d-f10e1811c30e \ No newline at end of file diff --git a/integration/testdata/auth/proc/sqlite.db b/integration/testdata/auth/proc/sqlite.db new file mode 100644 index 0000000000000000000000000000000000000000..ce06cc7f914e1b7533462a262de28793315baa02 GIT binary patch literal 57344 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 literal 0 HcmV?d00001 diff --git a/lib/auth/auth.go b/lib/auth/auth.go index 659e1b7412636..484965dd59a62 100644 --- a/lib/auth/auth.go +++ b/lib/auth/auth.go @@ -4031,6 +4031,22 @@ func (a *Server) GenerateHostCerts(ctx context.Context, req *proto.HostCertsRequ }, nil } +// AssertSystemRole is used by agents to prove that they have a given system role when their credentials +// originate from multiple separate join tokens so that they can be issued an instance certificate that +// encompasses all of their capabilities. This method will be deprecated once we have a more comprehensive +// model for join token joining/replacement. +func (a *Server) AssertSystemRole(ctx context.Context, req proto.SystemRoleAssertion) error { + return trace.Wrap(a.Unstable.AssertSystemRole(ctx, req)) +} + +// GetSystemRoleAssertions is used in validated claims made by older instances to prove that they hold a given +// system role. This method will be deprecated once we have a more comprehensive model for join token +// joining/replacement. +func (a *Server) GetSystemRoleAssertions(ctx context.Context, serverID string, assertionID string) (proto.SystemRoleAssertionSet, error) { + set, err := a.Unstable.GetSystemRoleAssertions(ctx, serverID, assertionID) + return set, trace.Wrap(err) +} + func (a *Server) RegisterInventoryControlStream(ics client.UpstreamInventoryControlStream, hello proto.UpstreamInventoryHello) error { // upstream hello is pulled and checked at rbac layer. we wait to send the downstream hello until we get here // in order to simplify creation of in-memory streams when dealing with local auth (note: in theory we could diff --git a/lib/auth/auth_with_roles.go b/lib/auth/auth_with_roles.go index 0d85a2494cac7..572b920e16d33 100644 --- a/lib/auth/auth_with_roles.go +++ b/lib/auth/auth_with_roles.go @@ -951,11 +951,32 @@ func (a *ServerWithRoles) checkAdditionalSystemRoles(ctx context.Context, req *p } } + // load system role assertions if relevant + var assertions proto.SystemRoleAssertionSet + var err error + if req.SystemRoleAssertionID != "" { + assertions, err = a.authServer.GetSystemRoleAssertions(ctx, req.HostID, req.SystemRoleAssertionID) + if err != nil { + // include this error in the logs, since it might be indicative of a bug if it occurs outside of the context + // of a general backend outage. + log.Warnf("Failed to load system role assertion set %q for instance %q: %v", req.SystemRoleAssertionID, req.HostID, err) + return trace.AccessDenied("failed to load system role assertion set with ID %q", req.SystemRoleAssertionID) + } + } + // check if additional system roles are permissible +Outer: for _, requestedRole := range req.SystemRoles { if a.hasBuiltinRole(requestedRole) { // instance is already known to hold this role - continue + continue Outer + } + + for _, assertedRole := range assertions.SystemRoles { + if requestedRole == assertedRole { + // instance recently demonstrated that it holds this role + continue Outer + } } return trace.AccessDenied("additional system role %q cannot be applied (not authorized)", requestedRole) @@ -964,6 +985,31 @@ func (a *ServerWithRoles) checkAdditionalSystemRoles(ctx context.Context, req *p return nil } +// AssertSystemRole is used by agents to prove that they have a given system role when their credentials +// originate from multiple separate join tokens so that they can be issued an instance certificate that +// encompasses all of their capabilities. This method will be deprecated once we have a more comprehensive +// model for join token joining/replacement. +func (a *ServerWithRoles) AssertSystemRole(ctx context.Context, req proto.SystemRoleAssertion) error { + role, ok := a.context.Identity.(authz.BuiltinRole) + if !ok || !role.IsServer() { + return trace.AccessDenied("system role assertions can only be executed by a teleport built-in server") + } + + if req.ServerID != role.GetServerID() { + return trace.AccessDenied("system role assertions do not support impersonation (%q -> %q)", role.GetServerID(), req.ServerID) + } + + if !a.hasBuiltinRole(req.SystemRole) { + return trace.AccessDenied("cannot assert unheld system role %q", req.SystemRole) + } + + if !req.SystemRole.IsLocalService() { + return trace.AccessDenied("cannot assert non-service system role %q", req.SystemRole) + } + + return a.authServer.AssertSystemRole(ctx, req) +} + // RegisterInventoryControlStream handles the upstream half of the control stream handshake, then passes the control stream to // the auth server's main control logic. We also return the post-auth hello message back up to the grpcserver layer in order to // use it for metrics purposes. diff --git a/lib/auth/grpcserver.go b/lib/auth/grpcserver.go index 2b9298d9c41b3..35837dcac9cb1 100644 --- a/lib/auth/grpcserver.go +++ b/lib/auth/grpcserver.go @@ -664,6 +664,23 @@ func (g *GRPCServer) GenerateOpenSSHCert(ctx context.Context, req *authpb.OpenSS return cert, nil } +// AssertSystemRole is used by agents to prove that they have a given system role when their credentials +// originate from multiple separate join tokens so that they can be issued an instance certificate that +// encompasses all of their capabilities. This method will be deprecated once we have a more comprehensive +// model for join token joining/replacement. +func (g *GRPCServer) AssertSystemRole(ctx context.Context, req *authpb.SystemRoleAssertion) (*emptypb.Empty, error) { + auth, err := g.authenticate(ctx) + if err != nil { + return nil, trail.ToGRPC(err) + } + + if err := auth.AssertSystemRole(ctx, *req); err != nil { + return nil, trail.ToGRPC(err) + } + + return &emptypb.Empty{}, nil +} + // icsServicesToMetricName is a helper for translating service names to keepalive names for control-stream // purposes. When new services switch to using control-stream based heartbeats, they should be added here. var icsServiceToMetricName = map[types.SystemRole]string{ diff --git a/lib/auth/grpcserver_test.go b/lib/auth/grpcserver_test.go index 1ac1011f083b6..06ba85359f390 100644 --- a/lib/auth/grpcserver_test.go +++ b/lib/auth/grpcserver_test.go @@ -18,6 +18,7 @@ package auth import ( "context" + "crypto/tls" "crypto/x509" "crypto/x509/pkix" "encoding/base32" @@ -2383,9 +2384,10 @@ func TestGenerateDatabaseCerts(t *testing.T) { require.NotNil(t, certs) } -// TestInstanceCertAndControlStream uses an instance cert to send an -// inventory ping via the control stream. +// TestInstanceCertAndControlStream attempts to generate an instance cert via the +// assertion API and use it to handle an inventory ping via the control stream. func TestInstanceCertAndControlStream(t *testing.T) { + const assertionID = "test-assertion" const serverID = "test-server" t.Parallel() ctx, cancel := context.WithCancel(context.Background()) @@ -2393,17 +2395,68 @@ func TestInstanceCertAndControlStream(t *testing.T) { srv := newTestTLSServer(t) - instanceClt, err := srv.NewClient(TestIdentity{ - I: authz.BuiltinRole{ - Role: types.RoleInstance, - AdditionalSystemRoles: []types.SystemRole{ - types.RoleNode, - }, - Username: serverID, - }, - }) + roles := []types.SystemRole{ + types.RoleNode, + types.RoleAuth, + types.RoleProxy, + } + + clt, err := srv.NewClient(TestServerID(types.RoleNode, serverID)) + require.NoError(t, err) + defer clt.Close() + + priv, pub, err := testauthority.New().GenerateKeyPair() + require.NoError(t, err) + + pubTLS, err := PrivateKeyToPublicKeyTLS(priv) + require.NoError(t, err) + + req := proto.HostCertsRequest{ + HostID: serverID, + Role: types.RoleInstance, + PublicSSHKey: pub, + PublicTLSKey: pubTLS, + SystemRoles: roles, + // assertion ID is omitted initially to test + // the failure case + } + + // request should fail since clt only holds RoleNode + _, err = clt.GenerateHostCerts(ctx, &req) + require.True(t, trace.IsAccessDenied(err)) + + // perform assertions + for _, role := range roles { + func() { + clt, err := srv.NewClient(TestServerID(role, serverID)) + require.NoError(t, err) + defer clt.Close() + + err = clt.AssertSystemRole(ctx, proto.SystemRoleAssertion{ + ServerID: serverID, + AssertionID: assertionID, + SystemRole: role, + }) + require.NoError(t, err) + }() + } + + // set assertion ID + req.SystemRoleAssertionID = assertionID + + // assertion should allow us to generate certs + certs, err := clt.GenerateHostCerts(ctx, &req) + require.NoError(t, err) + + // make an instance client + instanceCert, err := tls.X509KeyPair(certs.TLS, priv) + require.NoError(t, err) + instanceClt := srv.NewClientWithCert(instanceCert) + + // instance cert can self-renew without assertions + req.SystemRoleAssertionID = "" + _, err = instanceClt.GenerateHostCerts(ctx, &req) require.NoError(t, err) - defer instanceClt.Close() stream, err := instanceClt.InventoryControlStream(ctx) require.NoError(t, err) @@ -2412,7 +2465,7 @@ func TestInstanceCertAndControlStream(t *testing.T) { err = stream.Send(ctx, proto.UpstreamInventoryHello{ ServerID: serverID, Version: teleport.Version, - Services: types.SystemRoles{types.RoleInstance}, + Services: roles, }) require.NoError(t, err) diff --git a/lib/auth/register.go b/lib/auth/register.go index d4539f12298a5..ef7ececcc2fc3 100644 --- a/lib/auth/register.go +++ b/lib/auth/register.go @@ -23,7 +23,6 @@ import ( "github.com/gravitational/teleport/api/client/proto" "github.com/gravitational/teleport/api/types" - "github.com/gravitational/teleport/lib/auth/authclient" "github.com/gravitational/teleport/lib/auth/native" "github.com/gravitational/teleport/lib/auth/state" "github.com/gravitational/teleport/lib/defaults" @@ -77,13 +76,17 @@ func LocalRegister(id state.IdentityID, authServer *Server, additionalPrincipals // in the cluster (rotating certificates for existing members) type ReRegisterParams struct { // Client is an authenticated client using old credentials - Client authclient.ClientI + Client ReRegisterClient // ID is identity ID ID state.IdentityID // AdditionalPrincipals is a list of additional principals to dial AdditionalPrincipals []string // DNSNames is a list of DNS Names to add to the x509 client certificate DNSNames []string + // RemoteAddr overrides the RemoteAddr host cert generation option when + // performing re-registration locally (this value has no effect for remote + // registration and can be omitted). + RemoteAddr string // PrivateKey is a PEM encoded private key (not passed to auth servers) PrivateKey []byte // PublicTLSKey is a server's public key to sign @@ -94,6 +97,15 @@ type ReRegisterParams struct { Rotation types.Rotation // SystemRoles is a set of additional system roles held by the instance. SystemRoles []types.SystemRole + // Used by older instances to requisition a multi-role cert by individually + // proving which system roles are held. + SystemRoleAssertionID string +} + +// ReRegisterClient abstracts over local auth servers and remote clients when +// performing a re-registration. +type ReRegisterClient interface { + GenerateHostCerts(context.Context, *proto.HostCertsRequest) (*proto.Certs, error) } // ReRegister renews the certificates and private keys based on the client's existing identity. @@ -107,15 +119,17 @@ func ReRegister(ctx context.Context, params ReRegisterParams) (*state.Identity, } certs, err := params.Client.GenerateHostCerts(ctx, &proto.HostCertsRequest{ - HostID: params.ID.HostID(), - NodeName: params.ID.NodeName, - Role: params.ID.Role, - AdditionalPrincipals: params.AdditionalPrincipals, - DNSNames: params.DNSNames, - PublicTLSKey: params.PublicTLSKey, - PublicSSHKey: params.PublicSSHKey, - Rotation: rotation, - SystemRoles: params.SystemRoles, + HostID: params.ID.HostID(), + NodeName: params.ID.NodeName, + Role: params.ID.Role, + AdditionalPrincipals: params.AdditionalPrincipals, + DNSNames: params.DNSNames, + RemoteAddr: params.RemoteAddr, + PublicTLSKey: params.PublicTLSKey, + PublicSSHKey: params.PublicSSHKey, + Rotation: rotation, + SystemRoles: params.SystemRoles, + SystemRoleAssertionID: params.SystemRoleAssertionID, }) if err != nil { return nil, trace.Wrap(err) diff --git a/lib/auth/state/state.go b/lib/auth/state/state.go index 9477f05eecadd..6d370542b4dfa 100644 --- a/lib/auth/state/state.go +++ b/lib/auth/state/state.go @@ -21,6 +21,7 @@ import ( "encoding/json" "strings" + "github.com/coreos/go-semver/semver" "github.com/gravitational/trace" "github.com/gravitational/teleport/api/client/proto" @@ -88,6 +89,15 @@ func (p *ProcessStorage) GetState(ctx context.Context, role types.SystemRole) (* if err := utils.FastUnmarshal(item.Value, &res); err != nil { return nil, trace.BadParameter(err.Error()) } + + // an empty InitialLocalVersion is treated as an error by CheckAndSetDefaults, but if the field + // is missing in the underlying storage, that indicates the state was written by an older version of + // teleport that didn't record InitialLocalVersion. In that case, we set a sentinel value to indicate + // that the version is unknown rather than being erroneously omitted. + if res.Spec.InitialLocalVersion == "" { + res.Spec.InitialLocalVersion = unknownLocalVersion + } + if err := res.CheckAndSetDefaults(); err != nil { return nil, trace.Wrap(err) } @@ -199,6 +209,12 @@ type StateV2 struct { Spec StateSpecV2 `json:"spec"` } +// GetInitialLocalVersion gets the initial local version string. If ok is false it indicates that +// this state value was written by a teleport agent that was too old to record the initial local version. +func (s *StateV2) GetInitialLocalVersion() (v string, ok bool) { + return s.Spec.InitialLocalVersion, s.Spec.InitialLocalVersion != unknownLocalVersion +} + // CheckAndSetDefaults checks and sets defaults values. func (s *StateV2) CheckAndSetDefaults() error { s.Kind = types.KindState @@ -210,13 +226,33 @@ func (s *StateV2) CheckAndSetDefaults() error { if err := s.Metadata.CheckAndSetDefaults(); err != nil { return trace.Wrap(err) } + + if s.Spec.InitialLocalVersion == "" { + return trace.BadParameter("agent identity state must specify initial local version") + } + + if v, ok := s.GetInitialLocalVersion(); ok { + if _, err := semver.NewVersion(v); err != nil { + return trace.BadParameter("malformed initial local version %q: %v", s.Spec.InitialLocalVersion, err) + } + } + return nil } +// unknownVersion is a sentinel value used to distinguish between InitialLocalVersion being missing from +// state due to malformed input and InitialLocalVersion being missing due to the state having been created before +// teleport started recording InitialLocalVersion. +const unknownLocalVersion = "unknown" + // StateSpecV2 is a state spec. type StateSpecV2 struct { // Rotation holds local process rotation state. Rotation types.Rotation `json:"rotation"` + + // InitialLocalVersion records the version of teleport that initially + // wrote this state to disk. + InitialLocalVersion string `json:"initial_local_version,omitempty"` } // IdentityV2 specifies local host identity. diff --git a/lib/service/connect.go b/lib/service/connect.go index 4314f2066f859..09840e3d14957 100644 --- a/lib/service/connect.go +++ b/lib/service/connect.go @@ -22,10 +22,12 @@ import ( "errors" "fmt" "path/filepath" + "slices" "strings" "time" "github.com/coreos/go-semver/semver" + "github.com/google/uuid" "github.com/gravitational/roundtrip" "github.com/gravitational/trace" om "github.com/grpc-ecosystem/go-grpc-middleware/providers/openmetrics/v2" @@ -62,8 +64,6 @@ import ( // reconnectToAuthService continuously attempts to reconnect to the auth // service until succeeds or process gets shut down func (process *TeleportProcess) reconnectToAuthService(role types.SystemRole) (*Connector, error) { - // TODO(fspmarshall): we should probably have a longer retry period for Instance certs - // in order to avoid catastrophic load in the event of an auth server downgrade. retry, err := retryutils.NewLinear(retryutils.LinearConfig{ First: utils.HalfJitter(process.Config.MaxRetryPeriod / 10), Step: process.Config.MaxRetryPeriod / 5, @@ -127,6 +127,33 @@ func (i invalidVersionErr) Error() string { return fmt.Sprintf("Teleport instance is too new. This instance is running v%d. The auth server is running v%d and only supports instances on v%d or v%d. To connect anyway pass the --skip-version-check flag.", i.LocalMajorVersion, i.ClusterMajorVersion, i.ClusterMajorVersion, i.ClusterMajorVersion-1) } +func (process *TeleportProcess) assertSystemRoles(rolesToAssert []types.SystemRole) (assertionID string, err error) { + assertionID = uuid.New().String() + irm := process.getInstanceRoleEventMapping() + for _, role := range rolesToAssert { + event, err := process.WaitForEvent(process.ExitContext(), irm[role]) + if err != nil { + return "", trace.Errorf("process is exiting") + } + + conn, ok := (event.Payload).(*Connector) + if !ok { + return "", trace.BadParameter("unsupported connector type: %T", event.Payload) + } + + err = conn.Client.AssertSystemRole(process.ExitContext(), proto.SystemRoleAssertion{ + ServerID: process.Config.HostUUID, + AssertionID: assertionID, + SystemRole: role, + }) + if err != nil { + return "", trace.Wrap(err) + } + } + + return assertionID, nil +} + func (process *TeleportProcess) authServerTooOld(resp *proto.PingResponse) error { serverVersion, err := semver.NewVersion(resp.ServerVersion) if err != nil { @@ -192,6 +219,7 @@ func (process *TeleportProcess) connect(role types.SystemRole, opts ...certOptio if err != nil { return nil, trace.Wrap(err) } + rotation := processState.Spec.Rotation switch rotation.State { @@ -355,7 +383,7 @@ func (process *TeleportProcess) getCertAuthority(conn *Connector, id types.CertA // reRegister receives new identity credentials for proxy, node and auth. // In case if auth servers, the role is 'TeleportAdmin' and instead of using // TLS client this method uses the local auth server. -func (process *TeleportProcess) reRegister(conn *Connector, additionalPrincipals []string, dnsNames []string, rotation types.Rotation) (*state.Identity, error) { +func (process *TeleportProcess) reRegister(conn *Connector, additionalPrincipals []string, dnsNames []string, rotation types.Rotation, systemRoles []types.SystemRole, assertionID string) (*state.Identity, error) { id := conn.ClientIdentity.ID if id.NodeName == "" { id.NodeName = process.Config.Hostname @@ -368,22 +396,29 @@ func (process *TeleportProcess) reRegister(conn *Connector, additionalPrincipals if err != nil { return nil, trace.Wrap(err) } - var systemRoles []types.SystemRole - if id.Role == types.RoleInstance { - systemRoles = process.getInstanceRoles() - } ctx, cancel := context.WithTimeout(process.ExitContext(), apidefaults.DefaultIOTimeout) defer cancel() + + var clt auth.ReRegisterClient = conn.Client + var remoteAddr string + + if srv := process.getLocalAuth(); srv != nil { + clt = srv + remoteAddr = process.Config.AdvertiseIP + } + identity, err := auth.ReRegister(ctx, auth.ReRegisterParams{ - Client: conn.Client, - ID: id, - AdditionalPrincipals: additionalPrincipals, - PrivateKey: keyPair.PrivateKey, - PublicTLSKey: keyPair.PublicTLSKey, - PublicSSHKey: keyPair.PublicSSHKey, - DNSNames: dnsNames, - Rotation: rotation, - SystemRoles: systemRoles, + Client: clt, + ID: id, + AdditionalPrincipals: additionalPrincipals, + PrivateKey: keyPair.PrivateKey, + PublicTLSKey: keyPair.PublicTLSKey, + PublicSSHKey: keyPair.PublicSSHKey, + DNSNames: dnsNames, + RemoteAddr: remoteAddr, + Rotation: rotation, + SystemRoles: systemRoles, + SystemRoleAssertionID: assertionID, }) if err != nil { return nil, trace.Wrap(err) @@ -513,7 +548,8 @@ func (process *TeleportProcess) firstTimeConnect(role types.SystemRole) (*Connec if err := process.storage.WriteState(role, state.StateV2{ Spec: state.StateSpecV2{ - Rotation: ca.GetRotation(), + Rotation: ca.GetRotation(), + InitialLocalVersion: teleport.Version, }, }); err != nil { return nil, trace.NewAggregate(err, connector.Close()) @@ -642,25 +678,41 @@ func (process *TeleportProcess) periodicSyncRotationState() error { if _, err := process.WaitForEvent(process.GracefulExitContext(), TeleportReadyEvent); err != nil { return nil } - process.log.Infof("The new service has started successfully. Starting syncing rotation status with period %v.", process.Config.PollingPeriod) - periodic := interval.New(interval.Config{ - Duration: process.Config.RotationConnectionInterval, - FirstDuration: utils.HalfJitter(process.Config.RotationConnectionInterval), - Jitter: retryutils.NewSeventhJitter(), + maxRetryPeriod := defaults.MaxWatcherBackoff + + // non-control-plane agents should use a longer backoff to avoid creating excess + // cluster load during times of instability. + if !process.instanceRoleExpected(types.RoleAuth) && !process.instanceRoleExpected(types.RoleProxy) { + maxRetryPeriod = defaults.MaxLongWatcherBackoff + } + + process.log.Infof("The new service has started successfully. Starting syncing rotation status. max_retry_period=%v", maxRetryPeriod) + + retry, err := retryutils.NewRetryV2(retryutils.RetryV2Config{ + First: utils.FullJitter(maxRetryPeriod / 16), + Driver: retryutils.NewExponentialDriver(maxRetryPeriod / 16), + Max: maxRetryPeriod, + Jitter: retryutils.NewHalfJitter(), + Clock: process.Clock, }) - defer periodic.Stop() + if err != nil { + return trace.Wrap(err) + } for { - err := process.syncRotationStateCycle() + err := process.syncRotationStateCycle(retry) if err == nil { return nil } process.log.Warningf("Sync rotation state cycle failed. Retrying in ~%v", process.Config.RotationConnectionInterval) + startWait := process.Clock.Now() select { - case <-periodic.Next(): + case t := <-retry.After(): + process.log.Infof("Initiating new sync rotation state cycle after backoff. backoff_time=%v", t.Sub(startWait)) + retry.Inc() case <-process.GracefulExitContext().Done(): return nil } @@ -674,7 +726,7 @@ func (process *TeleportProcess) periodicSyncRotationState() error { // // the function accepts extra delay timer extraDelay in case if parent // function needs a -func (process *TeleportProcess) syncRotationStateCycle() error { +func (process *TeleportProcess) syncRotationStateCycle(retry retryutils.Retry) error { connectors := process.getConnectors() if len(connectors) == 0 { return trace.BadParameter("no connectors found") @@ -710,10 +762,14 @@ func (process *TeleportProcess) syncRotationStateCycle() error { Jitter: retryutils.NewSeventhJitter(), }) defer periodic.Stop() + for { select { case event := <-watcher.Events(): if event.Type == types.OpInit || event.Type == types.OpDelete { + if event.Type == types.OpInit { + retry.Reset() + } continue } ca, ok := event.Resource.(types.CertAuthority) @@ -865,9 +921,49 @@ func (process *TeleportProcess) rotate(conn *Connector, localState state.StateV2 return nil, trace.Wrap(err) } + var assertionID string + var systemRoles []types.SystemRole + var wantsSystemRoleRepair bool + if id.Role == types.RoleInstance { + var baseSystemRoles []types.SystemRole + for _, baseRole := range conn.ClientIdentity.SystemRoles { + baseSystemRoles = append(baseSystemRoles, types.SystemRole(baseRole)) + } + var danglingSystemRoles []types.SystemRole + for _, activeRole := range process.getInstanceRoles() { + if slices.Contains(baseSystemRoles, activeRole) { + continue + } + danglingSystemRoles = append(danglingSystemRoles, activeRole) + } + + if len(danglingSystemRoles) != 0 { + process.log.Warnf("Rotation logic detected dangling system role(s), will attempt to self-repair. existing=%+v, dangling=%+v", conn.ClientIdentity.SystemRoles, danglingSystemRoles) + // if auth is running locally, we can just generate ourselves a new instance cert with the correct + // roles. otherwise, we need to prove to the remote auth server that we hold the necessary privileges + // by performing system role assertions. + if process.getLocalAuth() == nil { + assertionID, err = process.assertSystemRoles(danglingSystemRoles) + if err != nil && !trace.IsNotImplemented(err) { + return nil, trace.Wrap(err) + } + + if trace.IsNotImplemented(err) { + danglingSystemRoles = nil + assertionID = "" + process.log.Warn("Auth server does not implement system role assertions, self-repair will be re-attempted later.") + } + } + } + + systemRoles = append(systemRoles, baseSystemRoles...) + systemRoles = append(systemRoles, danglingSystemRoles...) + wantsSystemRoleRepair = len(danglingSystemRoles) != 0 + } + // Check if any of the SSH principals or TLS DNS names have changed and the // host credentials need to be regenerated. - regenerateCertificate := checkServerIdentity(conn, additionalPrincipals, dnsNames, process.log) + regenerateCertificate := checkServerIdentity(conn, additionalPrincipals, dnsNames, process.log) || wantsSystemRoleRepair // If the local state matches remote state and neither principals or DNS // names changed, nothing to do. CA is in sync. @@ -901,7 +997,7 @@ func (process *TeleportProcess) rotate(conn *Connector, localState state.StateV2 case "", types.RotationStateStandby: if regenerateCertificate { process.log.Infof("Service %v has updated principals to %q, DNS Names to %q, going to request new principals and update.", id.Role, additionalPrincipals, dnsNames) - identity, err := process.reRegister(conn, additionalPrincipals, dnsNames, remote) + identity, err := process.reRegister(conn, additionalPrincipals, dnsNames, remote, systemRoles, assertionID) if err != nil { return nil, trace.Wrap(err) } @@ -918,7 +1014,7 @@ func (process *TeleportProcess) rotate(conn *Connector, localState state.StateV2 if local.Phase != types.RotationPhaseRollback && local.CurrentID != remote.CurrentID { return nil, trace.CompareFailed(outOfSync, id.Role, remote, local, id.Role) } - identity, err := process.reRegister(conn, additionalPrincipals, dnsNames, remote) + identity, err := process.reRegister(conn, additionalPrincipals, dnsNames, remote, systemRoles, assertionID) if err != nil { return nil, trace.Wrap(err) } @@ -954,7 +1050,7 @@ func (process *TeleportProcess) rotate(conn *Connector, localState state.StateV2 if local.Phase != types.RotationPhaseInit && local.CurrentID != remote.CurrentID { return nil, trace.CompareFailed(outOfSync, id.Role, remote, local, id.Role) } - identity, err := process.reRegister(conn, additionalPrincipals, dnsNames, remote) + identity, err := process.reRegister(conn, additionalPrincipals, dnsNames, remote, systemRoles, assertionID) if err != nil { return nil, trace.Wrap(err) } @@ -987,7 +1083,7 @@ func (process *TeleportProcess) rotate(conn *Connector, localState state.StateV2 // because it will be widely used to recover cluster state to // the previously valid state, client will re-register to receive // credentials signed by the "old" CA. - identity, err := process.reRegister(conn, additionalPrincipals, dnsNames, remote) + identity, err := process.reRegister(conn, additionalPrincipals, dnsNames, remote, systemRoles, assertionID) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/service/service.go b/lib/service/service.go index 1b544a6a97229..978638a3148fb 100644 --- a/lib/service/service.go +++ b/lib/service/service.go @@ -373,6 +373,12 @@ type TeleportProcess struct { // the names of the associated identity events for these roles. instanceRoles map[types.SystemRole]string + // hostedPluginRoles is the collection of dynamically enabled service roles. This element + // behaves equivalent to instanceRoles except that while instance roles are static assignments + // set up when the teleport process starts, hosted plugin roles are dynamically assigned by + // runtime configuration, and may not necessarily be present on the instance cert. + hostedPluginRoles map[types.SystemRole]string + // identities of this process (credentials to auth sever, basically) Identities map[types.SystemRole]*state.Identity @@ -514,6 +520,20 @@ func (process *TeleportProcess) getInstanceRoles() []types.SystemRole { return out } +// getInstanceRoleEventMapping returns the same instance roles as getInstanceRoles, but as a mapping +// of the form `role => event_name`. This can be used to determine what identity event should be +// awaited in order to get a connector for a given role. Used in assertion-based migration to +// iteratively create a system role assertion through each client. +func (process *TeleportProcess) getInstanceRoleEventMapping() map[types.SystemRole]string { + process.Lock() + defer process.Unlock() + out := make(map[types.SystemRole]string, len(process.instanceRoles)) + for role, event := range process.instanceRoles { + out[role] = event + } + return out +} + // SetExpectedInstanceRole marks a given instance role as active, storing the name of its associated // identity event. func (process *TeleportProcess) SetExpectedInstanceRole(role types.SystemRole, eventName string) { @@ -522,6 +542,14 @@ func (process *TeleportProcess) SetExpectedInstanceRole(role types.SystemRole, e process.instanceRoles[role] = eventName } +// SetExpectedHostedPluginRole marks a given hosted plugin role as active, storing the name of its associated +// identity event. +func (process *TeleportProcess) SetExpectedHostedPluginRole(role types.SystemRole, eventName string) { + process.Lock() + defer process.Unlock() + process.hostedPluginRoles[role] = eventName +} + func (process *TeleportProcess) instanceRoleExpected(role types.SystemRole) bool { process.Lock() defer process.Unlock() @@ -529,6 +557,13 @@ func (process *TeleportProcess) instanceRoleExpected(role types.SystemRole) bool return ok } +func (process *TeleportProcess) hostedPluginRoleExpected(role types.SystemRole) bool { + process.Lock() + defer process.Unlock() + _, ok := process.hostedPluginRoles[role] + return ok +} + // addConnector adds connector to registered connectors list, // it will overwrite the connector for the same role func (process *TeleportProcess) addConnector(connector *Connector) { @@ -947,6 +982,7 @@ func NewTeleport(cfg *servicecfg.Config) (*TeleportProcess, error) { Config: cfg, instanceConnectorReady: make(chan struct{}), instanceRoles: make(map[types.SystemRole]string), + hostedPluginRoles: make(map[types.SystemRole]string), Identities: make(map[types.SystemRole]*state.Identity), connectors: make(map[types.SystemRole]*Connector), importedDescriptors: cfg.FileDescriptors, @@ -2842,9 +2878,10 @@ func (process *TeleportProcess) RegisterWithAuthServer(role types.SystemRole, ev serviceName := strings.ToLower(role.String()) process.RegisterCriticalFunc(fmt.Sprintf("register.%v", serviceName), func() error { - if role.IsLocalService() && !process.instanceRoleExpected(role) { + if role.IsLocalService() && !(process.instanceRoleExpected(role) || process.hostedPluginRoleExpected(role)) { // if you hit this error, your probably forgot to call SetExpectedInstanceRole inside of - // the registerExpectedServices function. + // the registerExpectedServices function, or forgot to call SetExpectedHostedPluginRole during + // the hosted plugin init process. process.log.Errorf("Register called for unexpected instance role %q (this is a bug).", role) } diff --git a/lib/services/local/unstable.go b/lib/services/local/unstable.go index 3abcbcd87aadd..787c66fd98547 100644 --- a/lib/services/local/unstable.go +++ b/lib/services/local/unstable.go @@ -17,9 +17,18 @@ limitations under the License. package local import ( + "context" + "time" + + "github.com/gravitational/trace" + + "github.com/gravitational/teleport/api/client/proto" "github.com/gravitational/teleport/lib/backend" + "github.com/gravitational/teleport/lib/utils" ) +const assertionTTL = time.Minute * 10 + // UnstableService is a catch-all for unstable backend operations related to migrations/compatibility // that don't fit into, or merit the change of, one of the primary service interfaces. type UnstableService struct { @@ -31,3 +40,78 @@ type UnstableService struct { func NewUnstableService(backend backend.Backend, assertion *AssertionReplayService) UnstableService { return UnstableService{backend, assertion} } + +// AssertSystemRole is not a stable part of the public API. Used by agents to +// prove that they have a given system role when their credentials originate from multiple +// separate join tokens so that they can be issued an instance certificate that encompasses +// all of their capabilities. This method will be deprecated once we have a more comprehensive +// model for join token joining/replacement. +func (s UnstableService) AssertSystemRole(ctx context.Context, req proto.SystemRoleAssertion) error { + key := systemRoleAssertionsKey(req.ServerID, req.AssertionID) + item, err := s.Get(ctx, key) + if err != nil && !trace.IsNotFound(err) { + return trace.Wrap(err) + } + + var set proto.SystemRoleAssertionSet + if err == nil { + if err := utils.FastUnmarshal(item.Value, &set); err != nil { + return trace.Wrap(err) + } + } + + set.ServerID = req.ServerID + set.AssertionID = req.AssertionID + set.SystemRoles = append(set.SystemRoles, req.SystemRole) + + newValue, err := utils.FastMarshal(&set) + if err != nil { + return trace.Wrap(err) + } + newItem := backend.Item{ + Key: key, + Value: newValue, + Expires: time.Now().Add(assertionTTL).UTC(), + } + if item != nil { + _, err = s.CompareAndSwap(ctx, *item, newItem) + if trace.IsCompareFailed(err) { + // nodes are expected to perform assertions sequentially + return trace.CompareFailed("system role assertion set was concurrently modified (this is bug)") + } + return trace.Wrap(err) + } + + _, err = s.Create(ctx, newItem) + if trace.IsAlreadyExists(err) { + // nodes are expected to perform assertions sequentially + return trace.AlreadyExists("system role assertion set was concurrently created (this is a bug)") + } + return trace.Wrap(err) +} + +// GetSystemRoleAssertionsis not a stable part of the auth API. Used in validated claims +// made by older instances to prove that they hold a given system role. This method will be +// deprecated once we have a more comprehensive model for join token joining/replacement. +func (s UnstableService) GetSystemRoleAssertions(ctx context.Context, serverID string, assertionID string) (proto.SystemRoleAssertionSet, error) { + var set proto.SystemRoleAssertionSet + + item, err := s.Get(ctx, systemRoleAssertionsKey(serverID, assertionID)) + if err != nil { + return set, trace.Wrap(err) + } + + if err := utils.FastUnmarshal(item.Value, &set); err != nil { + return set, trace.Wrap(err) + } + + return set, nil +} + +func systemRoleAssertionsKey(serverID string, assertionID string) []byte { + return backend.Key(systemRoleAssertionsPrefix, serverID, assertionID) +} + +const ( + systemRoleAssertionsPrefix = "system_role_assertions" +) diff --git a/lib/services/local/unstable_test.go b/lib/services/local/unstable_test.go new file mode 100644 index 0000000000000..5e647b8f484e7 --- /dev/null +++ b/lib/services/local/unstable_test.go @@ -0,0 +1,78 @@ +/* + * 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 local + +import ( + "context" + "testing" + + "github.com/gravitational/trace" + "github.com/jonboulle/clockwork" + "github.com/stretchr/testify/require" + + "github.com/gravitational/teleport/api/client/proto" + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib/backend/memory" +) + +func TestSystemRoleAssertions(t *testing.T) { + const serverID = "test-server" + const assertionID = "test-assertion" + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + backend, err := memory.New(memory.Config{ + Context: ctx, + Clock: clockwork.NewFakeClock(), + }) + require.NoError(t, err) + + defer backend.Close() + + assertion := NewAssertionReplayService(backend) + unstable := NewUnstableService(backend, assertion) + + _, err = unstable.GetSystemRoleAssertions(ctx, serverID, assertionID) + require.True(t, trace.IsNotFound(err)) + + roles := []types.SystemRole{ + types.RoleNode, + types.RoleAuth, + types.RoleProxy, + } + + expect := make(map[types.SystemRole]struct{}) + + for _, role := range roles { + expect[role] = struct{}{} + err = unstable.AssertSystemRole(ctx, proto.SystemRoleAssertion{ + ServerID: serverID, + AssertionID: assertionID, + SystemRole: role, + }) + require.NoError(t, err) + + assertions, err := unstable.GetSystemRoleAssertions(ctx, serverID, assertionID) + require.NoError(t, err) + + require.Equal(t, len(expect), len(assertions.SystemRoles)) + require.Subset(t, expect, assertions.SystemRoles) + } +}