diff --git a/api/jsonschema/schema.json b/api/jsonschema/schema.json index 2b38c630987a..935355c1cdfc 100644 --- a/api/jsonschema/schema.json +++ b/api/jsonschema/schema.json @@ -7611,6 +7611,13 @@ "synchronization": { "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.SynchronizationStatus", "description": "Synchronization stores the status of synchronization locks" + }, + "taskResultsCompleted": { + "additionalProperties": { + "type": "boolean" + }, + "description": "Have task results been completed? (mapped by Pod name) used to prevent premature garbage collection of artifacts.", + "type": "object" } }, "type": "object" diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 60f60a33b470..eab3a0b23eb7 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -11534,6 +11534,13 @@ "synchronization": { "description": "Synchronization stores the status of synchronization locks", "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.SynchronizationStatus" + }, + "taskResultsCompleted": { + "description": "Have task results been completed? (mapped by Pod name) used to prevent premature garbage collection of artifacts.", + "type": "object", + "additionalProperties": { + "type": "boolean" + } } } }, diff --git a/cmd/argoexec/commands/root.go b/cmd/argoexec/commands/root.go index 8fcf4d59df4b..a855882a945c 100644 --- a/cmd/argoexec/commands/root.go +++ b/cmd/argoexec/commands/root.go @@ -118,6 +118,7 @@ func initExecutor() *executor.WorkflowExecutor { podName, types.UID(os.Getenv(common.EnvVarPodUID)), os.Getenv(common.EnvVarWorkflowName), + types.UID(os.Getenv(common.EnvVarWorkflowUID)), os.Getenv(common.EnvVarNodeID), namespace, cre, diff --git a/cmd/argoexec/commands/wait.go b/cmd/argoexec/commands/wait.go index 9d05aec88174..d13d7086d652 100644 --- a/cmd/argoexec/commands/wait.go +++ b/cmd/argoexec/commands/wait.go @@ -26,7 +26,12 @@ func NewWaitCommand() *cobra.Command { func waitContainer(ctx context.Context) error { wfExecutor := initExecutor() - defer wfExecutor.HandleError(ctx) // Must be placed at the bottom of defers stack. + + // Don't allow cancellation to impact capture of results, parameters, artifacts, or defers. + bgCtx := context.Background() + + defer wfExecutor.HandleError(bgCtx) // Must be placed at the bottom of defers stack. + defer wfExecutor.FinalizeOutput(bgCtx) // Ensures the LabelKeyReportOutputsCompleted is set to true. defer stats.LogStats() stats.StartStatsTicker(5 * time.Minute) @@ -35,24 +40,33 @@ func waitContainer(ctx context.Context) error { if err != nil { wfExecutor.AddError(err) } - ctx = context.Background() // don't allow cancellation to impact capture of results, parameters,or artifacts + // Capture output script result - err = wfExecutor.CaptureScriptResult(ctx) + err = wfExecutor.CaptureScriptResult(bgCtx) if err != nil { wfExecutor.AddError(err) } // Saving output parameters - err = wfExecutor.SaveParameters(ctx) + err = wfExecutor.SaveParameters(bgCtx) if err != nil { wfExecutor.AddError(err) } + // Saving output artifacts - err = wfExecutor.SaveArtifacts(ctx) + err = wfExecutor.SaveArtifacts(bgCtx) + if err != nil { + wfExecutor.AddError(err) + } + + // Save log artifacts + logArtifacts := wfExecutor.SaveLogs(bgCtx) + + // Try to upsert TaskResult. If it fails, we will try to update the Pod's Annotations + err = wfExecutor.ReportOutputs(bgCtx, logArtifacts) if err != nil { wfExecutor.AddError(err) } - wfExecutor.SaveLogs(ctx) return wfExecutor.HasError() } diff --git a/docs/fields.md b/docs/fields.md index 4b8f4d2be476..150315be5711 100644 --- a/docs/fields.md +++ b/docs/fields.md @@ -857,6 +857,7 @@ WorkflowStatus contains overall status information about a workflow |`storedTemplates`|[`Template`](#template)|StoredTemplates is a mapping between a template ref and the node's status.| |`storedWorkflowTemplateSpec`|[`WorkflowSpec`](#workflowspec)|StoredWorkflowSpec stores the WorkflowTemplate spec for future execution.| |`synchronization`|[`SynchronizationStatus`](#synchronizationstatus)|Synchronization stores the status of synchronization locks| +|`taskResultsCompleted`|`Map< boolean , string >`|Have task results been completed? (mapped by Pod name) used to prevent premature garbage collection of artifacts.| ## CronWorkflowSpec diff --git a/manifests/base/crds/full/argoproj.io_workflows.yaml b/manifests/base/crds/full/argoproj.io_workflows.yaml index ace9a944b056..403d156f3c4e 100644 --- a/manifests/base/crds/full/argoproj.io_workflows.yaml +++ b/manifests/base/crds/full/argoproj.io_workflows.yaml @@ -49284,6 +49284,10 @@ spec: type: array type: object type: object + taskResultsCompleted: + additionalProperties: + type: boolean + type: object type: object required: - metadata diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index ec405028c8ab..21546d3e6234 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -4397,6 +4397,7 @@ func init() { proto.RegisterMapType((Nodes)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.WorkflowStatus.NodesEntry") proto.RegisterMapType((ResourcesDuration)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.WorkflowStatus.ResourcesDurationEntry") proto.RegisterMapType((map[string]Template)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.WorkflowStatus.StoredTemplatesEntry") + proto.RegisterMapType((map[string]bool)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.WorkflowStatus.TaskResultsCompletedEntry") proto.RegisterType((*WorkflowStep)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.WorkflowStep") proto.RegisterMapType((LifecycleHooks)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.WorkflowStep.HooksEntry") proto.RegisterType((*WorkflowTaskResult)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.WorkflowTaskResult") @@ -4418,686 +4419,689 @@ func init() { } var fileDescriptor_724696e352c3df5f = []byte{ - // 10862 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x6d, 0x70, 0x24, 0xc7, - 0x75, 0x18, 0x67, 0x81, 0xc5, 0xc7, 0xc3, 0xc7, 0xe1, 0xfa, 0xbe, 0x96, 0x20, 0x79, 0xa0, 0x87, - 0x22, 0x43, 0xda, 0x14, 0xce, 0x3c, 0x4a, 0x09, 0x23, 0x25, 0x92, 0xf0, 0x71, 0xc0, 0x1d, 0x01, - 0x1c, 0xc0, 0x5e, 0x1c, 0xcf, 0xa4, 0x68, 0x49, 0x83, 0xdd, 0xc6, 0xee, 0x10, 0xbb, 0x33, 0xab, - 0x99, 0x59, 0xe0, 0xc0, 0x0f, 0x49, 0xa1, 0xf5, 0x19, 0xcb, 0x56, 0x22, 0x4b, 0xb2, 0xa4, 0x24, - 0x55, 0x8a, 0x22, 0x25, 0x2c, 0xd9, 0x15, 0x97, 0xfd, 0x2b, 0x65, 0xff, 0x4b, 0xa5, 0x5c, 0x4a, - 0x39, 0x55, 0x91, 0xcb, 0x4a, 0x49, 0x3f, 0x6c, 0x30, 0x42, 0x12, 0x55, 0xe5, 0x43, 0x55, 0x89, - 0x2a, 0x76, 0xec, 0xcb, 0x47, 0xa5, 0xfa, 0x73, 0xba, 0x67, 0x67, 0x71, 0x0b, 0x5c, 0x03, 0xc7, - 0xb2, 0x7f, 0x01, 0xfb, 0xfa, 0xf5, 0x7b, 0xdd, 0x3d, 0xdd, 0xaf, 0x5f, 0xbf, 0xf7, 0xfa, 0x35, - 0xac, 0xd5, 0xfc, 0xa4, 0xde, 0xde, 0x98, 0xae, 0x84, 0xcd, 0x4b, 0x5e, 0x54, 0x0b, 0x5b, 0x51, - 0xf8, 0x32, 0xfb, 0xe7, 0x9d, 0x3b, 0x61, 0xb4, 0xb5, 0xd9, 0x08, 0x77, 0xe2, 0x4b, 0xdb, 0x4f, - 0x5f, 0x6a, 0x6d, 0xd5, 0x2e, 0x79, 0x2d, 0x3f, 0xbe, 0x24, 0xa1, 0x97, 0xb6, 0x9f, 0xf2, 0x1a, - 0xad, 0xba, 0xf7, 0xd4, 0xa5, 0x1a, 0x09, 0x48, 0xe4, 0x25, 0xa4, 0x3a, 0xdd, 0x8a, 0xc2, 0x24, - 0x44, 0x1f, 0x48, 0x29, 0x4e, 0x4b, 0x8a, 0xec, 0x9f, 0x0f, 0x2b, 0x8a, 0xd3, 0xdb, 0x4f, 0x4f, - 0xb7, 0xb6, 0x6a, 0xd3, 0x94, 0xe2, 0xb4, 0x84, 0x4e, 0x4b, 0x8a, 0x93, 0xef, 0xd4, 0xda, 0x54, - 0x0b, 0x6b, 0xe1, 0x25, 0x46, 0x78, 0xa3, 0xbd, 0xc9, 0x7e, 0xb1, 0x1f, 0xec, 0x3f, 0xce, 0x70, - 0xd2, 0xdd, 0x7a, 0x26, 0x9e, 0xf6, 0x43, 0xda, 0xbe, 0x4b, 0x95, 0x30, 0x22, 0x97, 0xb6, 0x3b, - 0x1a, 0x35, 0xf9, 0x0e, 0x0d, 0xa7, 0x15, 0x36, 0xfc, 0xca, 0x6e, 0x1e, 0xd6, 0xbb, 0x52, 0xac, - 0xa6, 0x57, 0xa9, 0xfb, 0x01, 0x89, 0x76, 0xd3, 0xae, 0x37, 0x49, 0xe2, 0xe5, 0xd5, 0xba, 0xd4, - 0xad, 0x56, 0xd4, 0x0e, 0x12, 0xbf, 0x49, 0x3a, 0x2a, 0xfc, 0xf5, 0x3b, 0x55, 0x88, 0x2b, 0x75, - 0xd2, 0xf4, 0x3a, 0xea, 0x3d, 0xdd, 0xad, 0x5e, 0x3b, 0xf1, 0x1b, 0x97, 0xfc, 0x20, 0x89, 0x93, - 0x28, 0x5b, 0xc9, 0xbd, 0x02, 0x03, 0x33, 0xcd, 0xb0, 0x1d, 0x24, 0xe8, 0xbd, 0x50, 0xdc, 0xf6, - 0x1a, 0x6d, 0x52, 0x72, 0x1e, 0x76, 0x1e, 0x1f, 0x9e, 0x7d, 0xf4, 0xbb, 0x7b, 0x53, 0xf7, 0xed, - 0xef, 0x4d, 0x15, 0x9f, 0xa7, 0xc0, 0xdb, 0x7b, 0x53, 0x67, 0x49, 0x50, 0x09, 0xab, 0x7e, 0x50, - 0xbb, 0xf4, 0x72, 0x1c, 0x06, 0xd3, 0xd7, 0xdb, 0xcd, 0x0d, 0x12, 0x61, 0x5e, 0xc7, 0xfd, 0xa3, - 0x02, 0x9c, 0x9a, 0x89, 0x2a, 0x75, 0x7f, 0x9b, 0x94, 0x13, 0x4a, 0xbf, 0xb6, 0x8b, 0xea, 0xd0, - 0x97, 0x78, 0x11, 0x23, 0x37, 0x72, 0x79, 0x65, 0xfa, 0x6e, 0xbf, 0xfb, 0xf4, 0xba, 0x17, 0x49, - 0xda, 0xb3, 0x83, 0xfb, 0x7b, 0x53, 0x7d, 0xeb, 0x5e, 0x84, 0x29, 0x0b, 0xd4, 0x80, 0xfe, 0x20, - 0x0c, 0x48, 0xa9, 0xc0, 0x58, 0x5d, 0xbf, 0x7b, 0x56, 0xd7, 0xc3, 0x40, 0xf5, 0x63, 0x76, 0x68, - 0x7f, 0x6f, 0xaa, 0x9f, 0x42, 0x30, 0xe3, 0x42, 0xfb, 0xf5, 0x8a, 0xdf, 0x2a, 0xf5, 0xd9, 0xea, - 0xd7, 0x8b, 0x7e, 0xcb, 0xec, 0xd7, 0x8b, 0x7e, 0x0b, 0x53, 0x16, 0xee, 0xe7, 0x0a, 0x30, 0x3c, - 0x13, 0xd5, 0xda, 0x4d, 0x12, 0x24, 0x31, 0xfa, 0x38, 0x40, 0xcb, 0x8b, 0xbc, 0x26, 0x49, 0x48, - 0x14, 0x97, 0x9c, 0x87, 0xfb, 0x1e, 0x1f, 0xb9, 0xbc, 0x74, 0xf7, 0xec, 0xd7, 0x24, 0xcd, 0x59, - 0x24, 0x3e, 0x39, 0x28, 0x50, 0x8c, 0x35, 0x96, 0xe8, 0x55, 0x18, 0xf6, 0xa2, 0xc4, 0xdf, 0xf4, - 0x2a, 0x49, 0x5c, 0x2a, 0x30, 0xfe, 0xcf, 0xde, 0x3d, 0xff, 0x19, 0x41, 0x72, 0xf6, 0xb4, 0x60, - 0x3f, 0x2c, 0x21, 0x31, 0x4e, 0xf9, 0xb9, 0xbf, 0xdb, 0x0f, 0x23, 0x33, 0x51, 0xb2, 0x38, 0x57, - 0x4e, 0xbc, 0xa4, 0x1d, 0xa3, 0x3f, 0x70, 0xe0, 0x4c, 0xcc, 0x87, 0xcd, 0x27, 0xf1, 0x5a, 0x14, - 0x56, 0x48, 0x1c, 0x93, 0xaa, 0x18, 0x97, 0x4d, 0x2b, 0xed, 0x92, 0xcc, 0xa6, 0xcb, 0x9d, 0x8c, - 0xae, 0x04, 0x49, 0xb4, 0x3b, 0xfb, 0x94, 0x68, 0xf3, 0x99, 0x1c, 0x8c, 0x37, 0xde, 0x9a, 0x42, - 0xb2, 0x2b, 0x94, 0x12, 0xff, 0xc4, 0x38, 0xaf, 0xd5, 0xe8, 0x6b, 0x0e, 0x8c, 0xb6, 0xc2, 0x6a, - 0x8c, 0x49, 0x25, 0x6c, 0xb7, 0x48, 0x55, 0x0c, 0xef, 0x87, 0xed, 0x76, 0x63, 0x4d, 0xe3, 0xc0, - 0xdb, 0x7f, 0x56, 0xb4, 0x7f, 0x54, 0x2f, 0xc2, 0x46, 0x53, 0xd0, 0x33, 0x30, 0x1a, 0x84, 0x49, - 0xb9, 0x45, 0x2a, 0xfe, 0xa6, 0x4f, 0xaa, 0x6c, 0xe2, 0x0f, 0xa5, 0x35, 0xaf, 0x6b, 0x65, 0xd8, - 0xc0, 0x9c, 0x5c, 0x80, 0x52, 0xb7, 0x91, 0x43, 0x13, 0xd0, 0xb7, 0x45, 0x76, 0xb9, 0xb0, 0xc1, - 0xf4, 0x5f, 0x74, 0x56, 0x0a, 0x20, 0xba, 0x8c, 0x87, 0x84, 0x64, 0x79, 0x4f, 0xe1, 0x19, 0x67, - 0xf2, 0xfd, 0x70, 0xba, 0xa3, 0xe9, 0x87, 0x21, 0xe0, 0x7e, 0x6f, 0x00, 0x86, 0xe4, 0xa7, 0x40, - 0x0f, 0x43, 0x7f, 0xe0, 0x35, 0xa5, 0x9c, 0x1b, 0x15, 0xfd, 0xe8, 0xbf, 0xee, 0x35, 0xe9, 0x0a, - 0xf7, 0x9a, 0x84, 0x62, 0xb4, 0xbc, 0xa4, 0xce, 0xe8, 0x68, 0x18, 0x6b, 0x5e, 0x52, 0xc7, 0xac, - 0x04, 0x3d, 0x08, 0xfd, 0xcd, 0xb0, 0x4a, 0xd8, 0x58, 0x14, 0xb9, 0x84, 0x58, 0x09, 0xab, 0x04, - 0x33, 0x28, 0xad, 0xbf, 0x19, 0x85, 0xcd, 0x52, 0xbf, 0x59, 0x7f, 0x21, 0x0a, 0x9b, 0x98, 0x95, - 0xa0, 0xaf, 0x3a, 0x30, 0x21, 0xe7, 0xf6, 0x72, 0x58, 0xf1, 0x12, 0x3f, 0x0c, 0x4a, 0x45, 0x26, - 0x51, 0xb0, 0xbd, 0x25, 0x25, 0x29, 0xcf, 0x96, 0x44, 0x13, 0x26, 0xb2, 0x25, 0xb8, 0xa3, 0x15, - 0xe8, 0x32, 0x40, 0xad, 0x11, 0x6e, 0x78, 0x0d, 0x3a, 0x20, 0xa5, 0x01, 0xd6, 0x05, 0x25, 0x19, - 0x16, 0x55, 0x09, 0xd6, 0xb0, 0xd0, 0x2d, 0x18, 0xf4, 0xb8, 0xf4, 0x2f, 0x0d, 0xb2, 0x4e, 0x3c, - 0x67, 0xa3, 0x13, 0xc6, 0x76, 0x32, 0x3b, 0xb2, 0xbf, 0x37, 0x35, 0x28, 0x80, 0x58, 0xb2, 0x43, - 0x4f, 0xc2, 0x50, 0xd8, 0xa2, 0xed, 0xf6, 0x1a, 0xa5, 0x21, 0x36, 0x31, 0x27, 0x44, 0x5b, 0x87, - 0x56, 0x05, 0x1c, 0x2b, 0x0c, 0xf4, 0x04, 0x0c, 0xc6, 0xed, 0x0d, 0xfa, 0x1d, 0x4b, 0xc3, 0xac, - 0x63, 0xa7, 0x04, 0xf2, 0x60, 0x99, 0x83, 0xb1, 0x2c, 0x47, 0xef, 0x86, 0x91, 0x88, 0x54, 0xda, - 0x51, 0x4c, 0xe8, 0x87, 0x2d, 0x01, 0xa3, 0x7d, 0x46, 0xa0, 0x8f, 0xe0, 0xb4, 0x08, 0xeb, 0x78, - 0xe8, 0x7d, 0x30, 0x4e, 0x3f, 0xf0, 0x95, 0x5b, 0xad, 0x88, 0xc4, 0x31, 0xfd, 0xaa, 0x23, 0x8c, - 0xd1, 0x79, 0x51, 0x73, 0x7c, 0xc1, 0x28, 0xc5, 0x19, 0x6c, 0xf4, 0x1a, 0x80, 0xa7, 0x64, 0x46, - 0x69, 0x94, 0x0d, 0xe6, 0xb2, 0xbd, 0x19, 0xb1, 0x38, 0x37, 0x3b, 0x4e, 0xbf, 0x63, 0xfa, 0x1b, - 0x6b, 0xfc, 0xe8, 0xf8, 0x54, 0x49, 0x83, 0x24, 0xa4, 0x5a, 0x1a, 0x63, 0x1d, 0x56, 0xe3, 0x33, - 0xcf, 0xc1, 0x58, 0x96, 0xbb, 0xff, 0xa0, 0x00, 0x1a, 0x15, 0x34, 0x0b, 0x43, 0x42, 0xae, 0x89, - 0x25, 0x39, 0xfb, 0x98, 0xfc, 0x0e, 0xf2, 0x0b, 0xde, 0xde, 0xcb, 0x95, 0x87, 0xaa, 0x1e, 0x7a, - 0x1d, 0x46, 0x5a, 0x61, 0x75, 0x85, 0x24, 0x5e, 0xd5, 0x4b, 0x3c, 0xb1, 0x9b, 0x5b, 0xd8, 0x61, - 0x24, 0xc5, 0xd9, 0x53, 0xf4, 0xd3, 0xad, 0xa5, 0x2c, 0xb0, 0xce, 0x0f, 0x3d, 0x0b, 0x28, 0x26, - 0xd1, 0xb6, 0x5f, 0x21, 0x33, 0x95, 0x0a, 0x55, 0x89, 0xd8, 0x02, 0xe8, 0x63, 0x9d, 0x99, 0x14, - 0x9d, 0x41, 0xe5, 0x0e, 0x0c, 0x9c, 0x53, 0xcb, 0xfd, 0x7e, 0x01, 0xc6, 0xb5, 0xbe, 0xb6, 0x48, - 0x05, 0xbd, 0xe9, 0xc0, 0x29, 0xb5, 0x9d, 0xcd, 0xee, 0x5e, 0xa7, 0xb3, 0x8a, 0x6f, 0x56, 0xc4, - 0xe6, 0xf7, 0xa5, 0xbc, 0xd4, 0x4f, 0xc1, 0x87, 0xcb, 0xfa, 0x0b, 0xa2, 0x0f, 0xa7, 0x32, 0xa5, - 0x38, 0xdb, 0xac, 0xc9, 0xaf, 0x38, 0x70, 0x36, 0x8f, 0x44, 0x8e, 0xcc, 0xad, 0xeb, 0x32, 0xd7, - 0xaa, 0xf0, 0xa2, 0x5c, 0x69, 0x67, 0x74, 0x39, 0xfe, 0xff, 0x0a, 0x30, 0xa1, 0x4f, 0x21, 0xa6, - 0x09, 0xfc, 0x4b, 0x07, 0xce, 0xc9, 0x1e, 0x60, 0x12, 0xb7, 0x1b, 0x99, 0xe1, 0x6d, 0x5a, 0x1d, - 0x5e, 0xbe, 0x93, 0xce, 0xe4, 0xf1, 0xe3, 0xc3, 0xfc, 0x90, 0x18, 0xe6, 0x73, 0xb9, 0x38, 0x38, - 0xbf, 0xa9, 0x93, 0xdf, 0x72, 0x60, 0xb2, 0x3b, 0xd1, 0x9c, 0x81, 0x6f, 0x99, 0x03, 0xff, 0xa2, - 0xbd, 0x4e, 0x72, 0xf6, 0x6c, 0xf8, 0x59, 0x67, 0xf5, 0x0f, 0xf0, 0x9b, 0x43, 0xd0, 0xb1, 0x87, - 0xa0, 0xa7, 0x60, 0x44, 0x88, 0xe3, 0xe5, 0xb0, 0x16, 0xb3, 0x46, 0x0e, 0xf1, 0xb5, 0x36, 0x93, - 0x82, 0xb1, 0x8e, 0x83, 0xaa, 0x50, 0x88, 0x9f, 0x16, 0x4d, 0xb7, 0x20, 0xde, 0xca, 0x4f, 0x2b, - 0x2d, 0x72, 0x60, 0x7f, 0x6f, 0xaa, 0x50, 0x7e, 0x1a, 0x17, 0xe2, 0xa7, 0xa9, 0xa6, 0x5e, 0xf3, - 0x13, 0x7b, 0x9a, 0xfa, 0xa2, 0x9f, 0x28, 0x3e, 0x4c, 0x53, 0x5f, 0xf4, 0x13, 0x4c, 0x59, 0xd0, - 0x13, 0x48, 0x3d, 0x49, 0x5a, 0x6c, 0xc7, 0xb7, 0x72, 0x02, 0xb9, 0xba, 0xbe, 0xbe, 0xa6, 0x78, - 0x31, 0xfd, 0x82, 0x42, 0x30, 0xe3, 0x82, 0x3e, 0xeb, 0xd0, 0x11, 0xe7, 0x85, 0x61, 0xb4, 0x2b, - 0x14, 0x87, 0x1b, 0xf6, 0xa6, 0x40, 0x18, 0xed, 0x2a, 0xe6, 0xe2, 0x43, 0xaa, 0x02, 0xac, 0xb3, - 0x66, 0x1d, 0xaf, 0x6e, 0xc6, 0x4c, 0x4f, 0xb0, 0xd3, 0xf1, 0xf9, 0x85, 0x72, 0xa6, 0xe3, 0xf3, - 0x0b, 0x65, 0xcc, 0xb8, 0xd0, 0x0f, 0x1a, 0x79, 0x3b, 0x42, 0xc7, 0xb0, 0xf0, 0x41, 0xb1, 0xb7, - 0x63, 0x7e, 0x50, 0xec, 0xed, 0x60, 0xca, 0x82, 0x72, 0x0a, 0xe3, 0x98, 0xa9, 0x14, 0x56, 0x38, - 0xad, 0x96, 0xcb, 0x26, 0xa7, 0xd5, 0x72, 0x19, 0x53, 0x16, 0x6c, 0x92, 0x56, 0x62, 0xa6, 0x8f, - 0xd8, 0x99, 0xa4, 0x73, 0x19, 0x4e, 0x8b, 0x73, 0x65, 0x4c, 0x59, 0x50, 0x91, 0xe1, 0xbd, 0xd2, - 0x8e, 0xb8, 0x32, 0x33, 0x72, 0x79, 0xd5, 0xc2, 0x7c, 0xa1, 0xe4, 0x14, 0xb7, 0xe1, 0xfd, 0xbd, - 0xa9, 0x22, 0x03, 0x61, 0xce, 0xc8, 0xfd, 0xfd, 0xbe, 0x54, 0x5c, 0x48, 0x79, 0x8e, 0xfe, 0x3e, - 0xdb, 0x08, 0x85, 0x2c, 0x10, 0xaa, 0xaf, 0x73, 0x6c, 0xaa, 0xef, 0x19, 0xbe, 0xe3, 0x19, 0xec, - 0x70, 0x96, 0x3f, 0xfa, 0xa2, 0xd3, 0x79, 0xb6, 0xf5, 0xec, 0xef, 0x65, 0xe9, 0xc6, 0xcc, 0xf7, - 0x8a, 0x03, 0x8f, 0xbc, 0x93, 0x9f, 0x75, 0x52, 0x25, 0x22, 0xee, 0xb6, 0x0f, 0x7c, 0xc4, 0xdc, - 0x07, 0x2c, 0x1e, 0xc8, 0x75, 0xb9, 0xff, 0x39, 0x07, 0xc6, 0x24, 0x9c, 0xaa, 0xc7, 0x31, 0xba, - 0x05, 0x43, 0xb2, 0xa5, 0xe2, 0xeb, 0xd9, 0xb4, 0x05, 0x28, 0x25, 0x5e, 0x35, 0x46, 0x71, 0x73, - 0xdf, 0x1c, 0x00, 0x94, 0xee, 0x55, 0xad, 0x30, 0xf6, 0x99, 0x24, 0x3a, 0xc2, 0x2e, 0x14, 0x68, - 0xbb, 0xd0, 0xf3, 0x36, 0x77, 0xa1, 0xb4, 0x59, 0xc6, 0x7e, 0xf4, 0xc5, 0x8c, 0xdc, 0xe6, 0x1b, - 0xd3, 0x87, 0x8f, 0x45, 0x6e, 0x6b, 0x4d, 0x38, 0x58, 0x82, 0x6f, 0x0b, 0x09, 0xce, 0xb7, 0xae, - 0x5f, 0xb0, 0x2b, 0xc1, 0xb5, 0x56, 0x64, 0x65, 0x79, 0xc4, 0x25, 0x2c, 0xdf, 0xbb, 0x6e, 0x5a, - 0x95, 0xb0, 0x1a, 0x57, 0x53, 0xd6, 0x46, 0x5c, 0xd6, 0x0e, 0xd8, 0xe2, 0xa9, 0xc9, 0xda, 0x2c, - 0x4f, 0x25, 0x75, 0x5f, 0x91, 0x52, 0x97, 0xef, 0x5a, 0x2f, 0x58, 0x96, 0xba, 0x1a, 0xdf, 0x4e, - 0xf9, 0xfb, 0x51, 0x38, 0xd7, 0x89, 0x87, 0xc9, 0x26, 0xba, 0x04, 0xc3, 0x95, 0x30, 0xd8, 0xf4, - 0x6b, 0x2b, 0x5e, 0x4b, 0x9c, 0xd7, 0x94, 0x2c, 0x9a, 0x93, 0x05, 0x38, 0xc5, 0x41, 0x0f, 0x71, - 0xc1, 0xc3, 0x2d, 0x22, 0x23, 0x02, 0xb5, 0x6f, 0x89, 0xec, 0x32, 0x29, 0xf4, 0x9e, 0xa1, 0xaf, - 0x7e, 0x63, 0xea, 0xbe, 0x4f, 0xfc, 0xf1, 0xc3, 0xf7, 0xb9, 0x7f, 0xd8, 0x07, 0x0f, 0xe4, 0xf2, - 0x14, 0xda, 0xfa, 0x6f, 0x1a, 0xda, 0xba, 0x56, 0x2e, 0xa4, 0xc8, 0x4d, 0x9b, 0x8a, 0xac, 0x46, - 0x3e, 0x4f, 0x2f, 0xd7, 0x8a, 0x71, 0x7e, 0xa3, 0xe8, 0x40, 0x05, 0x5e, 0x93, 0xc4, 0x2d, 0xaf, - 0x42, 0x44, 0xef, 0xd5, 0x40, 0x5d, 0x97, 0x05, 0x38, 0xc5, 0xe1, 0x47, 0xe8, 0x4d, 0xaf, 0xdd, - 0x48, 0x84, 0xa1, 0x4c, 0x3b, 0x42, 0x33, 0x30, 0x96, 0xe5, 0xe8, 0x1f, 0x3a, 0x80, 0x3a, 0xb9, - 0x8a, 0x85, 0xb8, 0x7e, 0x1c, 0xe3, 0x30, 0x7b, 0x7e, 0x5f, 0x3b, 0x84, 0x6b, 0x3d, 0xcd, 0x69, - 0x87, 0xf6, 0x4d, 0x3f, 0x96, 0xee, 0x43, 0xfc, 0x70, 0xd0, 0x83, 0x0d, 0x8d, 0x99, 0x5a, 0x2a, - 0x15, 0x12, 0xc7, 0xdc, 0x1c, 0xa7, 0x9b, 0x5a, 0x18, 0x18, 0xcb, 0x72, 0x34, 0x05, 0x45, 0x12, - 0x45, 0x61, 0x24, 0xce, 0xda, 0x6c, 0x1a, 0x5f, 0xa1, 0x00, 0xcc, 0xe1, 0xee, 0x8f, 0x0b, 0x50, - 0xea, 0x76, 0x3a, 0x41, 0xbf, 0xa3, 0x9d, 0xab, 0xc5, 0xc9, 0x49, 0x1c, 0xfc, 0xc2, 0xe3, 0x3b, - 0x13, 0x65, 0x0f, 0x80, 0x5d, 0x4e, 0xd8, 0xa2, 0x14, 0x67, 0x1b, 0x38, 0xf9, 0x25, 0xed, 0x84, - 0xad, 0x93, 0xc8, 0xd9, 0xe0, 0x37, 0xcd, 0x0d, 0x7e, 0xcd, 0x76, 0xa7, 0xf4, 0x6d, 0xfe, 0x4f, - 0x8a, 0x70, 0x46, 0x96, 0x96, 0x09, 0xdd, 0x2a, 0x9f, 0x6b, 0x93, 0x68, 0x17, 0xfd, 0xc0, 0x81, - 0xb3, 0x5e, 0xd6, 0x74, 0xe3, 0x93, 0x63, 0x18, 0x68, 0x8d, 0xeb, 0xf4, 0x4c, 0x0e, 0x47, 0x3e, - 0xd0, 0x97, 0xc5, 0x40, 0x9f, 0xcd, 0x43, 0xe9, 0x62, 0x77, 0xcf, 0xed, 0x00, 0x7a, 0x06, 0x46, - 0x25, 0x9c, 0x99, 0x7b, 0xf8, 0x12, 0x57, 0xc6, 0xed, 0x19, 0xad, 0x0c, 0x1b, 0x98, 0xb4, 0x66, - 0x42, 0x9a, 0xad, 0x86, 0x97, 0x10, 0xcd, 0x50, 0xa4, 0x6a, 0xae, 0x6b, 0x65, 0xd8, 0xc0, 0x44, - 0x8f, 0xc1, 0x40, 0x10, 0x56, 0xc9, 0xb5, 0xaa, 0x30, 0x10, 0x8f, 0x8b, 0x3a, 0x03, 0xd7, 0x19, - 0x14, 0x8b, 0x52, 0xf4, 0x68, 0x6a, 0x8d, 0x2b, 0xb2, 0x25, 0x34, 0x92, 0x67, 0x89, 0x43, 0xff, - 0xd8, 0x81, 0x61, 0x5a, 0x63, 0x7d, 0xb7, 0x45, 0xe8, 0xde, 0x46, 0xbf, 0x48, 0xf5, 0x78, 0xbe, - 0xc8, 0x75, 0xc9, 0xc6, 0x34, 0x75, 0x0c, 0x2b, 0xf8, 0x1b, 0x6f, 0x4d, 0x0d, 0xc9, 0x1f, 0x38, - 0x6d, 0xd5, 0xe4, 0x22, 0xdc, 0xdf, 0xf5, 0x6b, 0x1e, 0xca, 0x15, 0xf0, 0xb7, 0x60, 0xdc, 0x6c, - 0xc4, 0xa1, 0xfc, 0x00, 0xff, 0x42, 0x5b, 0x76, 0xbc, 0x5f, 0x42, 0x9e, 0xdd, 0x33, 0x6d, 0x56, - 0x4d, 0x86, 0x79, 0x31, 0xf5, 0xcc, 0xc9, 0x30, 0x2f, 0x26, 0xc3, 0xbc, 0xfb, 0x07, 0x4e, 0xba, - 0x34, 0x35, 0x35, 0x8f, 0x6e, 0xcc, 0xed, 0xa8, 0x21, 0x04, 0xb1, 0xda, 0x98, 0x6f, 0xe0, 0x65, - 0x4c, 0xe1, 0xe8, 0x4b, 0x9a, 0x74, 0xa4, 0xd5, 0xda, 0xc2, 0xad, 0x61, 0xc9, 0x44, 0x6f, 0x10, - 0xee, 0x94, 0x7f, 0xa2, 0x00, 0x67, 0x9b, 0xe0, 0x7e, 0xb1, 0x00, 0x0f, 0x1d, 0xa8, 0xb4, 0xe6, - 0x36, 0xdc, 0xb9, 0xe7, 0x0d, 0xa7, 0xdb, 0x5a, 0x44, 0x5a, 0xe1, 0x0d, 0xbc, 0x2c, 0xbe, 0x97, - 0xda, 0xd6, 0x30, 0x07, 0x63, 0x59, 0x4e, 0x55, 0x87, 0x2d, 0xb2, 0xbb, 0x10, 0x46, 0x4d, 0x2f, - 0x11, 0xd2, 0x41, 0xa9, 0x0e, 0x4b, 0xb2, 0x00, 0xa7, 0x38, 0xee, 0x0f, 0x1c, 0xc8, 0x36, 0x00, - 0x79, 0x30, 0xde, 0x8e, 0x49, 0x44, 0xb7, 0xd4, 0x32, 0xa9, 0x44, 0x44, 0x4e, 0xcf, 0x47, 0xa7, - 0xb9, 0xb7, 0x9f, 0xf6, 0x70, 0xba, 0x12, 0x46, 0x64, 0x7a, 0xfb, 0xa9, 0x69, 0x8e, 0xb1, 0x44, - 0x76, 0xcb, 0xa4, 0x41, 0x28, 0x8d, 0x59, 0xb4, 0xbf, 0x37, 0x35, 0x7e, 0xc3, 0x20, 0x80, 0x33, - 0x04, 0x29, 0x8b, 0x96, 0x17, 0xc7, 0x3b, 0x61, 0x54, 0x15, 0x2c, 0x0a, 0x87, 0x66, 0xb1, 0x66, - 0x10, 0xc0, 0x19, 0x82, 0xee, 0xf7, 0xe9, 0xf1, 0x51, 0xd7, 0x5a, 0xd1, 0x37, 0xa8, 0xee, 0x43, - 0x21, 0xb3, 0x8d, 0x70, 0x63, 0x2e, 0x0c, 0x12, 0xcf, 0x0f, 0x88, 0x0c, 0x16, 0x58, 0xb7, 0xa4, - 0x23, 0x1b, 0xb4, 0x53, 0x1b, 0x7e, 0x67, 0x19, 0xce, 0x69, 0x0b, 0xd5, 0x71, 0x36, 0x1a, 0xe1, - 0x46, 0xd6, 0x0b, 0x48, 0x91, 0x30, 0x2b, 0x71, 0x7f, 0xea, 0xc0, 0x85, 0x2e, 0xca, 0x38, 0xfa, - 0x8a, 0x03, 0x63, 0x1b, 0x6f, 0x8b, 0xbe, 0x99, 0xcd, 0x40, 0xef, 0x83, 0x71, 0x0a, 0xa0, 0x3b, - 0x91, 0x98, 0x9b, 0x05, 0xd3, 0x43, 0x35, 0x6b, 0x94, 0xe2, 0x0c, 0xb6, 0xfb, 0x6b, 0x05, 0xc8, - 0xe1, 0x82, 0x9e, 0x84, 0x21, 0x12, 0x54, 0x5b, 0xa1, 0x1f, 0x24, 0x42, 0x18, 0x29, 0xa9, 0x77, - 0x45, 0xc0, 0xb1, 0xc2, 0x10, 0xe7, 0x0f, 0x31, 0x30, 0x85, 0x8e, 0xf3, 0x87, 0x68, 0x79, 0x8a, - 0x83, 0x6a, 0x30, 0xe1, 0x71, 0xff, 0x0a, 0x9b, 0x7b, 0x6c, 0x9a, 0xf6, 0x1d, 0x66, 0x9a, 0x9e, - 0x65, 0xee, 0xcf, 0x0c, 0x09, 0xdc, 0x41, 0x14, 0xbd, 0x1b, 0x46, 0xda, 0x31, 0x29, 0xcf, 0x2f, - 0xcd, 0x45, 0xa4, 0xca, 0x4f, 0xc5, 0x9a, 0xdf, 0xef, 0x46, 0x5a, 0x84, 0x75, 0x3c, 0xf7, 0x5f, - 0x39, 0x30, 0x38, 0xeb, 0x55, 0xb6, 0xc2, 0xcd, 0x4d, 0x3a, 0x14, 0xd5, 0x76, 0x94, 0x1a, 0xb6, - 0xb4, 0xa1, 0x98, 0x17, 0x70, 0xac, 0x30, 0xd0, 0x3a, 0x0c, 0xf0, 0x05, 0x2f, 0x96, 0xdd, 0xcf, - 0x6b, 0xfd, 0x51, 0x71, 0x3c, 0x6c, 0x3a, 0xb4, 0x13, 0xbf, 0x31, 0xcd, 0xe3, 0x78, 0xa6, 0xaf, - 0x05, 0xc9, 0x6a, 0x54, 0x4e, 0x22, 0x3f, 0xa8, 0xcd, 0x02, 0xdd, 0x2e, 0x16, 0x18, 0x0d, 0x2c, - 0x68, 0xd1, 0x6e, 0x34, 0xbd, 0x5b, 0x92, 0x9d, 0x10, 0x3f, 0xaa, 0x1b, 0x2b, 0x69, 0x11, 0xd6, - 0xf1, 0xdc, 0x3f, 0x74, 0x60, 0x78, 0xd6, 0x8b, 0xfd, 0xca, 0x5f, 0x22, 0xe1, 0xf3, 0x21, 0x28, - 0xce, 0x79, 0x95, 0x3a, 0x41, 0x37, 0xb2, 0x87, 0xde, 0x91, 0xcb, 0x8f, 0xe7, 0xb1, 0x51, 0x07, - 0x60, 0x9d, 0xd3, 0x58, 0xb7, 0xa3, 0xb1, 0xfb, 0x96, 0x03, 0xe3, 0x73, 0x0d, 0x9f, 0x04, 0xc9, - 0x1c, 0x89, 0x12, 0x36, 0x70, 0x35, 0x98, 0xa8, 0x28, 0xc8, 0x51, 0x86, 0x8e, 0xcd, 0xd6, 0xb9, - 0x0c, 0x09, 0xdc, 0x41, 0x14, 0x55, 0xe1, 0x14, 0x87, 0xa5, 0xab, 0xe2, 0x50, 0xe3, 0xc7, 0xac, - 0xa3, 0x73, 0x26, 0x05, 0x9c, 0x25, 0xe9, 0xfe, 0xc4, 0x81, 0x0b, 0x73, 0x8d, 0x76, 0x9c, 0x90, - 0xe8, 0xa6, 0x90, 0x46, 0x52, 0xbd, 0x45, 0x1f, 0x81, 0xa1, 0xa6, 0xf4, 0xd8, 0x3a, 0x77, 0x98, - 0xc0, 0x4c, 0x9e, 0x51, 0x6c, 0xda, 0x98, 0xd5, 0x8d, 0x97, 0x49, 0x25, 0x59, 0x21, 0x89, 0x97, - 0x86, 0x17, 0xa4, 0x30, 0xac, 0xa8, 0xa2, 0x16, 0xf4, 0xc7, 0x2d, 0x52, 0xb1, 0x17, 0xdd, 0x25, - 0xfb, 0x50, 0x6e, 0x91, 0x4a, 0x2a, 0xd7, 0x99, 0xaf, 0x91, 0x71, 0x72, 0xff, 0xb7, 0x03, 0x0f, - 0x74, 0xe9, 0xef, 0xb2, 0x1f, 0x27, 0xe8, 0xa5, 0x8e, 0x3e, 0x4f, 0xf7, 0xd6, 0x67, 0x5a, 0x9b, - 0xf5, 0x58, 0x09, 0x04, 0x09, 0xd1, 0xfa, 0xfb, 0x31, 0x28, 0xfa, 0x09, 0x69, 0x4a, 0x33, 0xb4, - 0x05, 0x83, 0x51, 0x97, 0xbe, 0xcc, 0x8e, 0xc9, 0x18, 0xbf, 0x6b, 0x94, 0x1f, 0xe6, 0x6c, 0xdd, - 0x2d, 0x18, 0x98, 0x0b, 0x1b, 0xed, 0x66, 0xd0, 0x5b, 0xa4, 0x4c, 0xb2, 0xdb, 0x22, 0xd9, 0x3d, - 0x92, 0xa9, 0xff, 0xac, 0x44, 0x1a, 0x8e, 0xfa, 0xf2, 0x0d, 0x47, 0xee, 0xbf, 0x76, 0x80, 0xae, - 0xaa, 0xaa, 0x2f, 0x3c, 0x89, 0x9c, 0x1c, 0x67, 0xf8, 0x90, 0x4e, 0xee, 0xf6, 0xde, 0xd4, 0x98, - 0x42, 0xd4, 0xe8, 0x7f, 0x08, 0x06, 0x62, 0x76, 0x24, 0x17, 0x6d, 0x58, 0x90, 0xfa, 0x33, 0x3f, - 0xa8, 0xdf, 0xde, 0x9b, 0xea, 0x29, 0x6c, 0x73, 0x5a, 0xd1, 0x16, 0x4e, 0x4f, 0x41, 0x95, 0x2a, - 0x7c, 0x4d, 0x12, 0xc7, 0x5e, 0x4d, 0x9e, 0xf0, 0x94, 0xc2, 0xb7, 0xc2, 0xc1, 0x58, 0x96, 0xbb, - 0x5f, 0x76, 0x60, 0x4c, 0x6d, 0x5e, 0x54, 0x7d, 0x47, 0xd7, 0xf5, 0x6d, 0x8e, 0xcf, 0x94, 0x87, - 0xba, 0x48, 0x1c, 0xb1, 0x91, 0x1f, 0xbc, 0x0b, 0xbe, 0x0b, 0x46, 0xab, 0xa4, 0x45, 0x82, 0x2a, - 0x09, 0x2a, 0xf4, 0xf8, 0x4d, 0x67, 0xc8, 0xf0, 0xec, 0x04, 0x3d, 0x6f, 0xce, 0x6b, 0x70, 0x6c, - 0x60, 0xb9, 0xdf, 0x74, 0xe0, 0x7e, 0x45, 0xae, 0x4c, 0x12, 0x4c, 0x92, 0x68, 0x57, 0x85, 0x69, - 0x1e, 0x6e, 0xb7, 0xba, 0x49, 0xf5, 0xdf, 0x24, 0xe2, 0xcc, 0x8f, 0xb6, 0x5d, 0x8d, 0x70, 0x6d, - 0x99, 0x11, 0xc1, 0x92, 0x9a, 0xfb, 0xab, 0x7d, 0x70, 0x56, 0x6f, 0xa4, 0x12, 0x30, 0xbf, 0xe4, - 0x00, 0xa8, 0x11, 0xa0, 0x1b, 0x72, 0x9f, 0x1d, 0xdf, 0x95, 0xf1, 0xa5, 0x52, 0x11, 0xa4, 0xc0, - 0x31, 0xd6, 0xd8, 0xa2, 0x17, 0x60, 0x74, 0x9b, 0x2e, 0x0a, 0xb2, 0x42, 0xd5, 0x85, 0xb8, 0xd4, - 0xc7, 0x9a, 0x31, 0x95, 0xf7, 0x31, 0x9f, 0x4f, 0xf1, 0x52, 0x73, 0x80, 0x06, 0x8c, 0xb1, 0x41, - 0x8a, 0x9e, 0x74, 0xc6, 0x22, 0xfd, 0x93, 0x08, 0x9b, 0xf8, 0x07, 0x2d, 0xf6, 0x31, 0xfb, 0xd5, - 0x67, 0x4f, 0xef, 0xef, 0x4d, 0x8d, 0x19, 0x20, 0x6c, 0x36, 0xc2, 0x7d, 0x01, 0xd8, 0x58, 0xf8, - 0x41, 0x9b, 0xac, 0x06, 0xe8, 0x11, 0x69, 0xa3, 0xe3, 0x7e, 0x15, 0x25, 0x39, 0x74, 0x3b, 0x1d, - 0x3d, 0xcb, 0x6e, 0x7a, 0x7e, 0x83, 0x85, 0x2f, 0x52, 0x2c, 0x75, 0x96, 0x5d, 0x60, 0x50, 0x2c, - 0x4a, 0xdd, 0x69, 0x18, 0x9c, 0xa3, 0x7d, 0x27, 0x11, 0xa5, 0xab, 0x47, 0x1d, 0x8f, 0x19, 0x51, - 0xc7, 0x32, 0xba, 0x78, 0x1d, 0xce, 0xcd, 0x45, 0xc4, 0x4b, 0x48, 0xf9, 0xe9, 0xd9, 0x76, 0x65, - 0x8b, 0x24, 0x3c, 0xb4, 0x2b, 0x46, 0xef, 0x85, 0xb1, 0x90, 0x6d, 0x19, 0xcb, 0x61, 0x65, 0xcb, - 0x0f, 0x6a, 0xc2, 0xe4, 0x7a, 0x4e, 0x50, 0x19, 0x5b, 0xd5, 0x0b, 0xb1, 0x89, 0xeb, 0xfe, 0xc7, - 0x02, 0x8c, 0xce, 0x45, 0x61, 0x20, 0xc5, 0xe2, 0x09, 0x6c, 0x65, 0x89, 0xb1, 0x95, 0x59, 0x70, - 0x77, 0xea, 0xed, 0xef, 0xb6, 0x9d, 0xa1, 0xd7, 0x94, 0x88, 0xec, 0xb3, 0x75, 0x04, 0x31, 0xf8, - 0x32, 0xda, 0xe9, 0xc7, 0x36, 0x05, 0xa8, 0xfb, 0x9f, 0x1c, 0x98, 0xd0, 0xd1, 0x4f, 0x60, 0x07, - 0x8d, 0xcd, 0x1d, 0xf4, 0xba, 0xdd, 0xfe, 0x76, 0xd9, 0x36, 0x3f, 0x37, 0x60, 0xf6, 0x93, 0xf9, - 0xba, 0xbf, 0xea, 0xc0, 0xe8, 0x8e, 0x06, 0x10, 0x9d, 0xb5, 0xad, 0xc4, 0xbc, 0x43, 0x8a, 0x19, - 0x1d, 0x7a, 0x3b, 0xf3, 0x1b, 0x1b, 0x2d, 0xa1, 0x72, 0x3f, 0xae, 0xd4, 0x49, 0xb5, 0xdd, 0x90, - 0xdb, 0xb7, 0x1a, 0xd2, 0xb2, 0x80, 0x63, 0x85, 0x81, 0x5e, 0x82, 0xd3, 0x95, 0x30, 0xa8, 0xb4, - 0xa3, 0x88, 0x04, 0x95, 0xdd, 0x35, 0x76, 0x47, 0x42, 0x6c, 0x88, 0xd3, 0xa2, 0xda, 0xe9, 0xb9, - 0x2c, 0xc2, 0xed, 0x3c, 0x20, 0xee, 0x24, 0xc4, 0x9d, 0x05, 0x31, 0xdd, 0xb2, 0xc4, 0x81, 0x4b, - 0x73, 0x16, 0x30, 0x30, 0x96, 0xe5, 0xe8, 0x06, 0x5c, 0x88, 0x13, 0x2f, 0x4a, 0xfc, 0xa0, 0x36, - 0x4f, 0xbc, 0x6a, 0xc3, 0x0f, 0xe8, 0x51, 0x22, 0x0c, 0xaa, 0xdc, 0x95, 0xd8, 0x37, 0xfb, 0xc0, - 0xfe, 0xde, 0xd4, 0x85, 0x72, 0x3e, 0x0a, 0xee, 0x56, 0x17, 0x7d, 0x08, 0x26, 0x85, 0x3b, 0x62, - 0xb3, 0xdd, 0x78, 0x36, 0xdc, 0x88, 0xaf, 0xfa, 0x31, 0x3d, 0xc7, 0x2f, 0xfb, 0x4d, 0x3f, 0x61, - 0x0e, 0xc3, 0xe2, 0xec, 0xc5, 0xfd, 0xbd, 0xa9, 0xc9, 0x72, 0x57, 0x2c, 0x7c, 0x00, 0x05, 0x84, - 0xe1, 0x3c, 0x17, 0x7e, 0x1d, 0xb4, 0x07, 0x19, 0xed, 0xc9, 0xfd, 0xbd, 0xa9, 0xf3, 0x0b, 0xb9, - 0x18, 0xb8, 0x4b, 0x4d, 0xfa, 0x05, 0x13, 0xbf, 0x49, 0x5e, 0x09, 0x03, 0xc2, 0x02, 0x55, 0xb4, - 0x2f, 0xb8, 0x2e, 0xe0, 0x58, 0x61, 0xa0, 0x97, 0xd3, 0x99, 0x48, 0x97, 0x8b, 0x08, 0x38, 0x39, - 0xbc, 0x84, 0x63, 0x47, 0x93, 0x9b, 0x1a, 0x25, 0x16, 0x49, 0x69, 0xd0, 0x76, 0xff, 0xa8, 0x00, - 0xa8, 0x53, 0x44, 0xa0, 0x25, 0x18, 0xf0, 0x2a, 0x89, 0xbf, 0x2d, 0x23, 0xf3, 0x1e, 0xc9, 0xdb, - 0x3e, 0x39, 0x2b, 0x4c, 0x36, 0x09, 0x9d, 0x21, 0x24, 0x95, 0x2b, 0x33, 0xac, 0x2a, 0x16, 0x24, - 0x50, 0x08, 0xa7, 0x1b, 0x5e, 0x9c, 0xc8, 0xb9, 0x5a, 0xa5, 0x5d, 0x16, 0x82, 0xf5, 0x67, 0x7b, - 0xeb, 0x14, 0xad, 0x31, 0x7b, 0x8e, 0xce, 0xdc, 0xe5, 0x2c, 0x21, 0xdc, 0x49, 0x1b, 0x7d, 0x9c, - 0xe9, 0x21, 0x5c, 0x49, 0x94, 0x0a, 0xc0, 0x92, 0x95, 0x3d, 0x9a, 0xd3, 0x34, 0x74, 0x10, 0xc1, - 0x06, 0x6b, 0x2c, 0xdd, 0x7f, 0x03, 0x30, 0x38, 0x3f, 0xb3, 0xb8, 0xee, 0xc5, 0x5b, 0x3d, 0xa8, - 0xe6, 0x74, 0x76, 0x08, 0x1d, 0x2a, 0xbb, 0xbe, 0xa5, 0x6e, 0x85, 0x15, 0x06, 0x0a, 0x60, 0xc0, - 0x0f, 0xe8, 0x82, 0x28, 0x8d, 0xdb, 0x32, 0x7f, 0xab, 0x63, 0x06, 0xb3, 0x4f, 0x5c, 0x63, 0xd4, - 0xb1, 0xe0, 0x82, 0x5e, 0x83, 0x61, 0x4f, 0xde, 0x6c, 0x11, 0xdb, 0xd2, 0x92, 0x0d, 0xbb, 0xae, - 0x20, 0xa9, 0x47, 0xd6, 0x08, 0x10, 0x4e, 0x19, 0xa2, 0x4f, 0x38, 0x30, 0x22, 0xbb, 0x8e, 0xc9, - 0xa6, 0x70, 0xb9, 0xae, 0xd8, 0xeb, 0x33, 0x26, 0x9b, 0x3c, 0xec, 0x42, 0x03, 0x60, 0x9d, 0x65, - 0x87, 0x2a, 0x5f, 0xec, 0x45, 0x95, 0x47, 0x3b, 0x30, 0xbc, 0xe3, 0x27, 0x75, 0xb6, 0xf1, 0x08, - 0x57, 0xcf, 0xc2, 0xdd, 0xb7, 0x9a, 0x92, 0x4b, 0x47, 0xec, 0xa6, 0x64, 0x80, 0x53, 0x5e, 0xe8, - 0x12, 0x67, 0xcc, 0x6e, 0x06, 0x31, 0x91, 0x35, 0x6c, 0x56, 0x60, 0x05, 0x38, 0xc5, 0xa1, 0x43, - 0x3c, 0x4a, 0x7f, 0x95, 0xc9, 0x47, 0xdb, 0x74, 0x1d, 0x8b, 0x50, 0x3a, 0x0b, 0xf3, 0x4a, 0x52, - 0xe4, 0x83, 0x75, 0x53, 0xe3, 0x81, 0x0d, 0x8e, 0x74, 0x8d, 0xec, 0xd4, 0x49, 0x20, 0x42, 0xfd, - 0xd5, 0x1a, 0xb9, 0x59, 0x27, 0x01, 0x66, 0x25, 0xe8, 0x35, 0x7e, 0xb4, 0xe0, 0x3a, 0xae, 0x08, - 0x8b, 0x5b, 0xb6, 0xa3, 0x76, 0x73, 0x9a, 0x3c, 0xda, 0x3e, 0xfd, 0x8d, 0x35, 0x7e, 0x54, 0x5d, - 0x0e, 0x83, 0x2b, 0xb7, 0xfc, 0x44, 0xdc, 0x11, 0x50, 0x92, 0x6e, 0x95, 0x41, 0xb1, 0x28, 0xe5, - 0x21, 0x05, 0x74, 0x12, 0xc4, 0xec, 0x42, 0xc0, 0xb0, 0x1e, 0x52, 0xc0, 0xc0, 0x58, 0x96, 0xa3, - 0x7f, 0xe4, 0x40, 0xb1, 0x1e, 0x86, 0x5b, 0x71, 0x69, 0x8c, 0x4d, 0x0e, 0x0b, 0xaa, 0x9e, 0x90, - 0x38, 0xd3, 0x57, 0x29, 0x59, 0xf3, 0xd6, 0x53, 0x91, 0xc1, 0x6e, 0xef, 0x4d, 0x8d, 0x2f, 0xfb, - 0x9b, 0xa4, 0xb2, 0x5b, 0x69, 0x10, 0x06, 0x79, 0xe3, 0x2d, 0x0d, 0x72, 0x65, 0x9b, 0x04, 0x09, - 0xe6, 0xad, 0x9a, 0xfc, 0x9c, 0x03, 0x90, 0x12, 0xca, 0xf1, 0xdd, 0x11, 0xd3, 0xdb, 0x6d, 0xe1, - 0x9c, 0x67, 0x34, 0x4d, 0x77, 0x06, 0xfe, 0x5b, 0x07, 0x46, 0x68, 0xe7, 0xa4, 0x08, 0x7c, 0x0c, - 0x06, 0x12, 0x2f, 0xaa, 0x11, 0x69, 0xbf, 0x56, 0x9f, 0x63, 0x9d, 0x41, 0xb1, 0x28, 0x45, 0x01, - 0x14, 0x13, 0x2f, 0xde, 0x92, 0xda, 0xe5, 0x35, 0x6b, 0x43, 0x9c, 0x2a, 0x96, 0xf4, 0x57, 0x8c, - 0x39, 0x1b, 0xf4, 0x38, 0x0c, 0x51, 0x05, 0x60, 0xc1, 0x8b, 0x65, 0x48, 0xc9, 0x28, 0x15, 0xe2, - 0x0b, 0x02, 0x86, 0x55, 0xa9, 0xfb, 0x6b, 0x05, 0xe8, 0x9f, 0xe7, 0xe7, 0x8c, 0x81, 0x38, 0x6c, - 0x47, 0x15, 0x22, 0xf4, 0x4d, 0x0b, 0x73, 0x9a, 0xd2, 0x2d, 0x33, 0x9a, 0x9a, 0xa6, 0xcf, 0x7e, - 0x63, 0xc1, 0x8b, 0x1e, 0x64, 0xc7, 0x93, 0xc8, 0x0b, 0xe2, 0x4d, 0xe6, 0x29, 0xf0, 0xc3, 0x40, - 0x0c, 0x91, 0x85, 0x59, 0xb8, 0x6e, 0xd0, 0x2d, 0x27, 0xa4, 0x95, 0x3a, 0x2c, 0xcc, 0x32, 0x9c, - 0x69, 0x83, 0xfb, 0xeb, 0x0e, 0x40, 0xda, 0x7a, 0xf4, 0x59, 0x07, 0xc6, 0x3c, 0x3d, 0x94, 0x51, - 0x8c, 0xd1, 0xaa, 0x3d, 0xb7, 0x22, 0x23, 0xcb, 0x8f, 0xd8, 0x06, 0x08, 0x9b, 0x8c, 0xdd, 0x77, - 0x43, 0x91, 0xad, 0x0e, 0xa6, 0x8b, 0x0b, 0x93, 0x6c, 0xd6, 0x06, 0x23, 0x4d, 0xb5, 0x58, 0x61, - 0xb8, 0x2f, 0xc1, 0xf8, 0x95, 0x5b, 0xa4, 0xd2, 0x4e, 0xc2, 0x88, 0x1b, 0xa4, 0xbb, 0x5c, 0x5d, - 0x71, 0x8e, 0x74, 0x75, 0xe5, 0x3b, 0x0e, 0x8c, 0x68, 0x71, 0x6d, 0x74, 0xa7, 0xae, 0xcd, 0x95, - 0xf9, 0xb9, 0x5b, 0x0c, 0xd5, 0x92, 0x95, 0xc8, 0x39, 0x4e, 0x32, 0xdd, 0x46, 0x14, 0x08, 0xa7, - 0x0c, 0xef, 0x10, 0x77, 0xe6, 0xfe, 0xbe, 0x03, 0xe7, 0x72, 0x83, 0xf0, 0xee, 0x71, 0xb3, 0x0d, - 0xdf, 0x6f, 0xa1, 0x07, 0xdf, 0xef, 0x6f, 0x3b, 0x90, 0x52, 0xa2, 0xa2, 0x68, 0x23, 0x6d, 0xb9, - 0x26, 0x8a, 0x04, 0x27, 0x51, 0x8a, 0x5e, 0x83, 0x0b, 0xe6, 0x17, 0x3c, 0xa2, 0x1b, 0x80, 0x9f, - 0x99, 0xf2, 0x29, 0xe1, 0x6e, 0x2c, 0xdc, 0xaf, 0x39, 0x50, 0x5c, 0xf4, 0xda, 0x35, 0xd2, 0x93, - 0x15, 0x87, 0xca, 0xb1, 0x88, 0x78, 0x8d, 0x44, 0xea, 0xe9, 0x42, 0x8e, 0x61, 0x01, 0xc3, 0xaa, - 0x14, 0xcd, 0xc0, 0x70, 0xd8, 0x22, 0x86, 0xeb, 0xea, 0x11, 0x39, 0x7a, 0xab, 0xb2, 0x80, 0x6e, - 0x3b, 0x8c, 0xbb, 0x82, 0xe0, 0xb4, 0x96, 0xfb, 0x83, 0x22, 0x8c, 0x68, 0xd7, 0x35, 0xa8, 0x2e, - 0x10, 0x91, 0x56, 0x98, 0xd5, 0x97, 0xe9, 0x84, 0xc1, 0xac, 0x84, 0xae, 0xc1, 0x88, 0x6c, 0xfb, - 0x31, 0x17, 0x5b, 0xc6, 0x1a, 0xc4, 0x02, 0x8e, 0x15, 0x06, 0x9a, 0x82, 0x62, 0x95, 0xb4, 0x92, - 0x3a, 0x6b, 0x5e, 0x3f, 0x8f, 0x59, 0x9b, 0xa7, 0x00, 0xcc, 0xe1, 0x14, 0x61, 0x93, 0x24, 0x95, - 0x3a, 0x33, 0x58, 0x8a, 0xa0, 0xb6, 0x05, 0x0a, 0xc0, 0x1c, 0x9e, 0xe3, 0x5c, 0x2b, 0x1e, 0xbf, - 0x73, 0x6d, 0xc0, 0xb2, 0x73, 0x0d, 0xb5, 0xe0, 0x4c, 0x1c, 0xd7, 0xd7, 0x22, 0x7f, 0xdb, 0x4b, - 0x48, 0x3a, 0xfb, 0x06, 0x0f, 0xc3, 0xe7, 0x02, 0xbb, 0x40, 0x5d, 0xbe, 0x9a, 0xa5, 0x82, 0xf3, - 0x48, 0xa3, 0x32, 0x9c, 0xf3, 0x83, 0x98, 0x54, 0xda, 0x11, 0xb9, 0x56, 0x0b, 0xc2, 0x88, 0x5c, - 0x0d, 0x63, 0x4a, 0x4e, 0x5c, 0xff, 0x54, 0x61, 0x9e, 0xd7, 0xf2, 0x90, 0x70, 0x7e, 0x5d, 0xb4, - 0x08, 0xa7, 0xab, 0x7e, 0xec, 0x6d, 0x34, 0x48, 0xb9, 0xbd, 0xd1, 0x0c, 0xe9, 0xa1, 0x8f, 0x5f, - 0xc9, 0x18, 0x9a, 0xbd, 0x5f, 0x9a, 0x37, 0xe6, 0xb3, 0x08, 0xb8, 0xb3, 0x0e, 0x7a, 0x06, 0x46, - 0x63, 0x3f, 0xa8, 0x35, 0xc8, 0x6c, 0xe4, 0x05, 0x95, 0xba, 0xb8, 0x37, 0xaa, 0xcc, 0xc0, 0x65, - 0xad, 0x0c, 0x1b, 0x98, 0x6c, 0xcd, 0xf3, 0x3a, 0x19, 0x6d, 0x50, 0x60, 0x8b, 0x52, 0xf7, 0x87, - 0x0e, 0x8c, 0xea, 0x21, 0xd6, 0x54, 0xd3, 0x86, 0xfa, 0xfc, 0x42, 0x99, 0xef, 0x05, 0xf6, 0x76, - 0xfc, 0xab, 0x8a, 0x66, 0x7a, 0x32, 0x4d, 0x61, 0x58, 0xe3, 0xd9, 0xc3, 0x85, 0xe9, 0x47, 0xa0, - 0xb8, 0x19, 0x52, 0x85, 0xa4, 0xcf, 0xb4, 0x1f, 0x2f, 0x50, 0x20, 0xe6, 0x65, 0xee, 0xff, 0x74, - 0xe0, 0x7c, 0x7e, 0xf4, 0xf8, 0xdb, 0xa1, 0x93, 0x97, 0x01, 0x68, 0x57, 0x0c, 0xa1, 0xae, 0xa5, - 0x4c, 0x90, 0x25, 0x58, 0xc3, 0xea, 0xad, 0xdb, 0x7f, 0x46, 0x95, 0xe2, 0x94, 0xcf, 0xe7, 0x1d, - 0x18, 0xa3, 0x6c, 0x97, 0xa2, 0x0d, 0xa3, 0xb7, 0xab, 0x76, 0x7a, 0xab, 0xc8, 0xa6, 0x66, 0x72, - 0x03, 0x8c, 0x4d, 0xe6, 0xe8, 0xe7, 0x60, 0xd8, 0xab, 0x56, 0x23, 0x12, 0xc7, 0xca, 0xe1, 0xc4, - 0x7c, 0xe1, 0x33, 0x12, 0x88, 0xd3, 0x72, 0x2a, 0x44, 0xeb, 0xd5, 0xcd, 0x98, 0xca, 0x25, 0x21, - 0xb8, 0x95, 0x10, 0xa5, 0x4c, 0x28, 0x1c, 0x2b, 0x0c, 0xf7, 0x57, 0xfa, 0xc1, 0xe4, 0x8d, 0xaa, - 0x70, 0x6a, 0x2b, 0xda, 0x98, 0x63, 0xfe, 0xfa, 0xa3, 0xf8, 0xcd, 0x99, 0x3f, 0x7b, 0xc9, 0xa4, - 0x80, 0xb3, 0x24, 0x05, 0x97, 0x25, 0xb2, 0x9b, 0x78, 0x1b, 0x47, 0xf6, 0x9a, 0x2f, 0x99, 0x14, - 0x70, 0x96, 0x24, 0x7a, 0x37, 0x8c, 0x6c, 0x45, 0x1b, 0x52, 0x44, 0x67, 0x43, 0x30, 0x96, 0xd2, - 0x22, 0xac, 0xe3, 0xd1, 0x21, 0xdc, 0x8a, 0x36, 0xe8, 0xae, 0x28, 0x13, 0x08, 0xa8, 0x21, 0x5c, - 0x12, 0x70, 0xac, 0x30, 0x50, 0x0b, 0xd0, 0x96, 0x1c, 0x3d, 0x15, 0x9d, 0x20, 0x76, 0x92, 0xde, - 0x83, 0x1b, 0x58, 0x58, 0xf8, 0x52, 0x07, 0x1d, 0x9c, 0x43, 0x1b, 0xbd, 0x00, 0x17, 0xb6, 0xa2, - 0x0d, 0xa1, 0x2c, 0xac, 0x45, 0x7e, 0x50, 0xf1, 0x5b, 0x46, 0xb2, 0x80, 0x29, 0xd1, 0xdc, 0x0b, - 0x4b, 0xf9, 0x68, 0xb8, 0x5b, 0x7d, 0xf7, 0x77, 0xfa, 0x81, 0x5d, 0x73, 0xa4, 0xb2, 0xb0, 0x49, - 0x92, 0x7a, 0x58, 0xcd, 0xea, 0x3f, 0x2b, 0x0c, 0x8a, 0x45, 0xa9, 0x0c, 0x7e, 0x2c, 0x74, 0x09, - 0x7e, 0xdc, 0x81, 0xc1, 0x3a, 0xf1, 0xaa, 0x24, 0x92, 0xe6, 0xba, 0x65, 0x3b, 0x17, 0x33, 0xaf, - 0x32, 0xa2, 0xe9, 0x31, 0x9c, 0xff, 0x8e, 0xb1, 0xe4, 0x86, 0xde, 0x03, 0xe3, 0x54, 0x91, 0x09, - 0xdb, 0x89, 0xb4, 0x4d, 0xf7, 0x33, 0xdb, 0x34, 0xdb, 0x51, 0xd7, 0x8d, 0x12, 0x9c, 0xc1, 0x44, - 0xf3, 0x30, 0x21, 0xec, 0xc8, 0xca, 0x0c, 0x28, 0x06, 0x56, 0x65, 0x71, 0x28, 0x67, 0xca, 0x71, - 0x47, 0x0d, 0x16, 0xbc, 0x16, 0x56, 0xb9, 0x2b, 0x51, 0x0f, 0x5e, 0x0b, 0xab, 0xbb, 0x98, 0x95, - 0xa0, 0x57, 0x60, 0x88, 0xfe, 0x5d, 0x88, 0xc2, 0xa6, 0xb0, 0xcd, 0xac, 0xd9, 0x19, 0x1d, 0xca, - 0x43, 0x9c, 0x14, 0x99, 0x82, 0x37, 0x2b, 0xb8, 0x60, 0xc5, 0x8f, 0x9e, 0x57, 0xe4, 0x3e, 0x5c, - 0xde, 0xf2, 0x5b, 0xcf, 0x93, 0xc8, 0xdf, 0xdc, 0x65, 0x4a, 0xc3, 0x50, 0x7a, 0x5e, 0xb9, 0xd6, - 0x81, 0x81, 0x73, 0x6a, 0xb9, 0x9f, 0x2f, 0xc0, 0xa8, 0x7e, 0x5b, 0xf6, 0x4e, 0x11, 0xb1, 0x71, - 0x3a, 0x29, 0xf8, 0xe9, 0xf4, 0xaa, 0x85, 0x6e, 0xdf, 0x69, 0x42, 0xd4, 0xa1, 0xdf, 0x6b, 0x0b, - 0x6d, 0xd1, 0x8a, 0x11, 0x8c, 0xf5, 0xb8, 0x9d, 0xd4, 0xf9, 0xb5, 0x2a, 0x16, 0xab, 0xca, 0x38, - 0xb8, 0x9f, 0xea, 0x83, 0x21, 0x59, 0x88, 0x3e, 0xe9, 0x00, 0xa4, 0x31, 0x43, 0x42, 0x94, 0xae, - 0xd9, 0x08, 0x28, 0xd1, 0xc3, 0x9d, 0x34, 0xc3, 0xb5, 0x82, 0x63, 0x8d, 0x2f, 0x4a, 0x60, 0x20, - 0xa4, 0x8d, 0xbb, 0x6c, 0xef, 0xc6, 0xf7, 0x2a, 0x65, 0x7c, 0x99, 0x71, 0x4f, 0xcd, 0x66, 0x0c, - 0x86, 0x05, 0x2f, 0x7a, 0x02, 0xdc, 0x90, 0xa1, 0x6c, 0xf6, 0x4c, 0xcc, 0x2a, 0x3a, 0x2e, 0x3d, - 0xd0, 0x29, 0x10, 0x4e, 0x19, 0xba, 0x4f, 0xc1, 0xb8, 0xb9, 0x18, 0xe8, 0x89, 0x60, 0x63, 0x37, - 0x21, 0xdc, 0xde, 0x30, 0xca, 0x4f, 0x04, 0xb3, 0x14, 0x80, 0x39, 0xdc, 0xfd, 0x3e, 0xd5, 0x03, - 0x94, 0x78, 0xe9, 0xc1, 0xc4, 0xff, 0x88, 0x6e, 0x2c, 0xeb, 0x76, 0xec, 0xfa, 0x38, 0x0c, 0xb3, - 0x7f, 0xd8, 0x42, 0xef, 0xb3, 0xe5, 0x78, 0x4e, 0xdb, 0x29, 0x96, 0x3a, 0xd3, 0x09, 0x9e, 0x97, - 0x8c, 0x70, 0xca, 0xd3, 0x0d, 0x61, 0x22, 0x8b, 0x8d, 0x3e, 0x08, 0xa3, 0xb1, 0xdc, 0x56, 0xd3, - 0xbb, 0x5f, 0x3d, 0x6e, 0xbf, 0xcc, 0xee, 0x5b, 0xd6, 0xaa, 0x63, 0x83, 0x98, 0xbb, 0x0a, 0x03, - 0x56, 0x87, 0xd0, 0xfd, 0xb6, 0x03, 0xc3, 0xcc, 0xf3, 0x56, 0x8b, 0xbc, 0x66, 0x5a, 0xa5, 0xef, - 0x80, 0x51, 0x8f, 0x61, 0x90, 0x9f, 0xd1, 0x65, 0xc4, 0x8a, 0x05, 0x29, 0xc3, 0x13, 0xb5, 0xa5, - 0x52, 0x86, 0x1b, 0x03, 0x62, 0x2c, 0x39, 0xb9, 0x9f, 0x2e, 0xc0, 0xc0, 0xb5, 0xa0, 0xd5, 0xfe, - 0x2b, 0x9f, 0x2c, 0x6c, 0x05, 0xfa, 0xaf, 0x25, 0xa4, 0x69, 0xe6, 0xb4, 0x1b, 0x9d, 0x7d, 0x54, - 0xcf, 0x67, 0x57, 0x32, 0xf3, 0xd9, 0x61, 0x6f, 0x47, 0x06, 0x74, 0x09, 0x1b, 0x71, 0x7a, 0xff, - 0xed, 0x49, 0x18, 0x5e, 0xf6, 0x36, 0x48, 0x63, 0x89, 0xec, 0xb2, 0xdb, 0x6a, 0x3c, 0xb8, 0xc0, - 0x49, 0x0f, 0xf6, 0x46, 0x20, 0xc0, 0x3c, 0x8c, 0x33, 0x6c, 0xb5, 0x18, 0xe8, 0xc9, 0x81, 0xa4, - 0x09, 0x81, 0x1c, 0xf3, 0xe4, 0xa0, 0x25, 0x03, 0xd2, 0xb0, 0xdc, 0x69, 0x18, 0x49, 0xa9, 0xf4, - 0xc0, 0xf5, 0xa7, 0x05, 0x18, 0x33, 0x4c, 0xdd, 0x86, 0x03, 0xd0, 0xb9, 0xa3, 0x03, 0xd0, 0x70, - 0xc8, 0x15, 0xee, 0xb5, 0x43, 0xae, 0xef, 0xe4, 0x1d, 0x72, 0xe6, 0x47, 0xea, 0xef, 0xe9, 0x23, - 0x35, 0xa0, 0x7f, 0xd9, 0x0f, 0xb6, 0x7a, 0x93, 0x33, 0x71, 0x25, 0x6c, 0x75, 0xc8, 0x99, 0x32, - 0x05, 0x62, 0x5e, 0x26, 0x35, 0x97, 0xbe, 0x7c, 0xcd, 0xc5, 0xfd, 0xa4, 0x03, 0xa3, 0x2b, 0x5e, - 0xe0, 0x6f, 0x92, 0x38, 0x61, 0xf3, 0x2a, 0x39, 0xd6, 0x5b, 0x4b, 0xa3, 0x5d, 0xee, 0xdf, 0xbf, - 0xe1, 0xc0, 0xe9, 0x15, 0xd2, 0x0c, 0xfd, 0x57, 0xbc, 0x34, 0x5e, 0x92, 0xb6, 0xbd, 0xee, 0x27, - 0x22, 0x3c, 0x4c, 0xb5, 0xfd, 0xaa, 0x9f, 0x60, 0x0a, 0xbf, 0x83, 0x1d, 0x97, 0xdd, 0x07, 0xa0, - 0x07, 0x34, 0xed, 0x26, 0x5d, 0x1a, 0x09, 0x29, 0x0b, 0x70, 0x8a, 0xe3, 0xfe, 0xae, 0x03, 0x83, - 0xbc, 0x11, 0x2a, 0xc4, 0xd4, 0xe9, 0x42, 0xbb, 0x0e, 0x45, 0x56, 0x4f, 0xcc, 0xea, 0x45, 0x0b, - 0xea, 0x0f, 0x25, 0xc7, 0xd7, 0x20, 0xfb, 0x17, 0x73, 0x06, 0xec, 0xd8, 0xe2, 0xdd, 0x9a, 0x51, - 0xa1, 0xa2, 0xe9, 0xb1, 0x85, 0x41, 0xb1, 0x28, 0x75, 0xbf, 0xde, 0x07, 0x43, 0x2a, 0xed, 0x14, - 0x4b, 0x0a, 0x10, 0x04, 0x61, 0xe2, 0xf1, 0xc0, 0x02, 0x2e, 0xab, 0x3f, 0x68, 0x2f, 0xed, 0xd5, - 0xf4, 0x4c, 0x4a, 0x9d, 0xfb, 0xef, 0xd4, 0x21, 0x54, 0x2b, 0xc1, 0x7a, 0x23, 0xd0, 0xc7, 0x60, - 0xa0, 0x41, 0xa5, 0x8f, 0x14, 0xdd, 0xcf, 0x5b, 0x6c, 0x0e, 0x13, 0x6b, 0xa2, 0x25, 0x6a, 0x84, - 0x38, 0x10, 0x0b, 0xae, 0x93, 0xef, 0x83, 0x89, 0x6c, 0xab, 0xef, 0x74, 0xd1, 0x6f, 0x58, 0xbf, - 0x26, 0xf8, 0x37, 0x85, 0xf4, 0x3c, 0x7c, 0x55, 0xf7, 0x39, 0x18, 0x59, 0x21, 0x49, 0xe4, 0x57, - 0x18, 0x81, 0x3b, 0x4d, 0xae, 0x9e, 0xf4, 0x87, 0xcf, 0xb0, 0xc9, 0x4a, 0x69, 0xc6, 0xe8, 0x35, - 0x80, 0x56, 0x14, 0xd2, 0xf3, 0x2b, 0x69, 0xcb, 0x8f, 0x6d, 0x41, 0x1f, 0x5e, 0x53, 0x34, 0xb9, - 0xcb, 0x39, 0xfd, 0x8d, 0x35, 0x7e, 0xee, 0x8b, 0x50, 0x5c, 0x69, 0x27, 0xe4, 0x56, 0x0f, 0x12, - 0xeb, 0xb0, 0x37, 0xdf, 0xdd, 0x0f, 0xc2, 0x28, 0xa3, 0x7d, 0x35, 0x6c, 0xd0, 0x6d, 0x95, 0x0e, - 0x4d, 0x93, 0xfe, 0xce, 0x3a, 0x05, 0x18, 0x12, 0xe6, 0x65, 0x74, 0xc9, 0xd4, 0xc3, 0x46, 0x55, - 0xdd, 0x02, 0x52, 0x13, 0xe2, 0x2a, 0x83, 0x62, 0x51, 0xea, 0xfe, 0x52, 0x01, 0x46, 0x58, 0x45, - 0x21, 0x6e, 0x76, 0x61, 0xb0, 0xce, 0xf9, 0x88, 0x31, 0xb4, 0x10, 0x52, 0xa7, 0xb7, 0x5e, 0x3b, - 0xcb, 0x71, 0x00, 0x96, 0xfc, 0x28, 0xeb, 0x1d, 0xcf, 0x4f, 0x28, 0xeb, 0xc2, 0xf1, 0xb2, 0xbe, - 0xc9, 0xd9, 0x60, 0xc9, 0xcf, 0xfd, 0x45, 0x60, 0xb7, 0x6b, 0x17, 0x1a, 0x5e, 0x8d, 0x8f, 0x5c, - 0xb8, 0x45, 0xaa, 0x42, 0xe6, 0x6a, 0x23, 0x47, 0xa1, 0x58, 0x94, 0xf2, 0x1b, 0x8b, 0x49, 0xe4, - 0xab, 0xa8, 0x5c, 0xed, 0xc6, 0x22, 0x03, 0xcb, 0x18, 0xec, 0xaa, 0xfb, 0xe5, 0x02, 0x00, 0x4b, - 0x52, 0xc6, 0x2f, 0xc5, 0xfe, 0x3c, 0x14, 0x5b, 0x75, 0x2f, 0xce, 0x3a, 0x12, 0x8b, 0x6b, 0x14, - 0x78, 0x5b, 0x5c, 0xfb, 0x65, 0x3f, 0x30, 0x47, 0xd4, 0x83, 0xe5, 0x0b, 0x07, 0x07, 0xcb, 0xa3, - 0x16, 0x0c, 0x86, 0xed, 0x84, 0xea, 0xaa, 0x62, 0xb3, 0xb7, 0xe0, 0x47, 0x5f, 0xe5, 0x04, 0x79, - 0x84, 0xb9, 0xf8, 0x81, 0x25, 0x1b, 0xf4, 0x0c, 0x0c, 0xb5, 0xa2, 0xb0, 0x46, 0xf7, 0x6e, 0xb1, - 0xbd, 0x3f, 0x28, 0xf5, 0xa1, 0x35, 0x01, 0xbf, 0xad, 0xfd, 0x8f, 0x15, 0xb6, 0xfb, 0xc7, 0x13, - 0x7c, 0x5c, 0xc4, 0xdc, 0x9b, 0x84, 0x82, 0x2f, 0x2d, 0x53, 0x20, 0x48, 0x14, 0xae, 0xcd, 0xe3, - 0x82, 0x5f, 0x55, 0xeb, 0xaa, 0xd0, 0x75, 0x5d, 0xbd, 0x1b, 0x46, 0xaa, 0x7e, 0xdc, 0x6a, 0x78, - 0xbb, 0xd7, 0x73, 0xcc, 0x82, 0xf3, 0x69, 0x11, 0xd6, 0xf1, 0xd0, 0x93, 0xe2, 0x6a, 0x44, 0xbf, - 0x61, 0x0a, 0x92, 0x57, 0x23, 0xd2, 0x4b, 0xd7, 0xfc, 0x56, 0x44, 0xf6, 0x72, 0x7a, 0xb1, 0xe7, - 0xcb, 0xe9, 0x59, 0x4d, 0x6c, 0xe0, 0xe4, 0x35, 0xb1, 0xf7, 0xc2, 0x98, 0xfc, 0xc9, 0xd4, 0xa3, - 0xd2, 0x59, 0xd6, 0x7a, 0x65, 0xae, 0x5e, 0xd7, 0x0b, 0xb1, 0x89, 0x9b, 0x4e, 0xda, 0xc1, 0x5e, - 0x27, 0xed, 0x65, 0x80, 0x8d, 0xb0, 0x1d, 0x54, 0xbd, 0x68, 0xf7, 0xda, 0xbc, 0x08, 0xa4, 0x54, - 0x8a, 0xdf, 0xac, 0x2a, 0xc1, 0x1a, 0x96, 0x3e, 0xd1, 0x87, 0xef, 0x30, 0xd1, 0x3f, 0x08, 0xc3, - 0x2c, 0xe8, 0x94, 0x54, 0x67, 0x12, 0x11, 0x62, 0x74, 0x98, 0xf8, 0x44, 0x25, 0x73, 0xcb, 0x92, - 0x08, 0x4e, 0xe9, 0xa1, 0x0f, 0x01, 0x6c, 0xfa, 0x81, 0x1f, 0xd7, 0x19, 0xf5, 0x91, 0x43, 0x53, - 0x57, 0xfd, 0x5c, 0x50, 0x54, 0xb0, 0x46, 0x11, 0xbd, 0x04, 0xa7, 0x49, 0x9c, 0xf8, 0x4d, 0x2f, - 0x21, 0x55, 0x75, 0x99, 0xb0, 0xc4, 0x6c, 0x99, 0x2a, 0xec, 0xf7, 0x4a, 0x16, 0xe1, 0x76, 0x1e, - 0x10, 0x77, 0x12, 0x32, 0x56, 0xe4, 0xe4, 0x61, 0x56, 0x24, 0xfa, 0x73, 0x07, 0x4e, 0x47, 0x84, - 0xc7, 0x9d, 0xc4, 0xaa, 0x61, 0xe7, 0x98, 0x38, 0xae, 0xd8, 0xc8, 0xff, 0xad, 0x12, 0x7d, 0xe0, - 0x2c, 0x17, 0xae, 0xb8, 0x10, 0xd9, 0xfb, 0x8e, 0xf2, 0xdb, 0x79, 0xc0, 0x37, 0xde, 0x9a, 0x9a, - 0xea, 0xcc, 0x43, 0xaf, 0x88, 0xd3, 0x95, 0xf7, 0x77, 0xdf, 0x9a, 0x9a, 0x90, 0xbf, 0xd3, 0x41, - 0xeb, 0xe8, 0x24, 0xdd, 0x56, 0x5b, 0x61, 0xf5, 0xda, 0x9a, 0x88, 0x05, 0x53, 0xdb, 0xea, 0x1a, - 0x05, 0x62, 0x5e, 0x86, 0x1e, 0x87, 0xa1, 0xaa, 0x47, 0x9a, 0x61, 0xa0, 0x32, 0xb9, 0x32, 0x6d, - 0x7e, 0x5e, 0xc0, 0xb0, 0x2a, 0xa5, 0x67, 0x88, 0x40, 0x6c, 0x29, 0xa5, 0x07, 0x6c, 0x9d, 0x21, - 0xe4, 0x26, 0xc5, 0xb9, 0xca, 0x5f, 0x58, 0x71, 0x42, 0x0d, 0x18, 0xf0, 0x99, 0xa1, 0x42, 0x84, - 0x9b, 0x5a, 0xb0, 0x8e, 0x70, 0xc3, 0x87, 0x0c, 0x36, 0x65, 0xa2, 0x5f, 0xf0, 0xd0, 0xf7, 0x9a, - 0x53, 0x27, 0xb3, 0xd7, 0x3c, 0x0e, 0x43, 0x95, 0xba, 0xdf, 0xa8, 0x46, 0x24, 0x28, 0x4d, 0xb0, - 0x13, 0x3b, 0x1b, 0x89, 0x39, 0x01, 0xc3, 0xaa, 0x14, 0xfd, 0x0d, 0x18, 0x0b, 0xdb, 0x09, 0x13, - 0x2d, 0x74, 0x9c, 0xe2, 0xd2, 0x69, 0x86, 0xce, 0x82, 0x87, 0x56, 0xf5, 0x02, 0x6c, 0xe2, 0x51, - 0x11, 0x5f, 0x0f, 0x63, 0x96, 0x93, 0x86, 0x89, 0xf8, 0xf3, 0xa6, 0x88, 0xbf, 0xaa, 0x95, 0x61, - 0x03, 0x13, 0x7d, 0xd5, 0x81, 0xd3, 0xcd, 0xec, 0x01, 0xae, 0x74, 0x81, 0x8d, 0x4c, 0xd9, 0x86, - 0xa2, 0x9f, 0x21, 0xcd, 0x63, 0xac, 0x3b, 0xc0, 0xb8, 0xb3, 0x11, 0x2c, 0x3b, 0x54, 0xbc, 0x1b, - 0x54, 0xea, 0x51, 0x18, 0x98, 0xcd, 0xbb, 0xdf, 0xd6, 0x9d, 0x28, 0xb6, 0xb6, 0xf3, 0x58, 0xcc, - 0xde, 0xbf, 0xbf, 0x37, 0x75, 0x2e, 0xb7, 0x08, 0xe7, 0x37, 0x6a, 0x72, 0x1e, 0xce, 0xe7, 0xcb, - 0x87, 0x3b, 0x9d, 0x38, 0xfa, 0xf4, 0x13, 0xc7, 0x02, 0xdc, 0xdf, 0xb5, 0x51, 0x74, 0xa7, 0x91, - 0xda, 0xa6, 0x63, 0xee, 0x34, 0x1d, 0xda, 0xe1, 0x38, 0x8c, 0xea, 0x0f, 0x17, 0xb8, 0xff, 0xb7, - 0x0f, 0x20, 0xb5, 0x93, 0x23, 0x0f, 0xc6, 0xb9, 0x4d, 0xfe, 0xda, 0xfc, 0x91, 0x6f, 0x73, 0xcf, - 0x19, 0x04, 0x70, 0x86, 0x20, 0x6a, 0x02, 0xe2, 0x10, 0xfe, 0xfb, 0x28, 0xbe, 0x55, 0xe6, 0x8a, - 0x9c, 0xeb, 0x20, 0x82, 0x73, 0x08, 0xd3, 0x1e, 0x25, 0xe1, 0x16, 0x09, 0x6e, 0xe0, 0xe5, 0xa3, - 0xa4, 0x04, 0xe0, 0xde, 0x38, 0x83, 0x00, 0xce, 0x10, 0x44, 0x2e, 0x0c, 0x30, 0xdb, 0x8c, 0x0c, - 0xd0, 0x66, 0xe2, 0x85, 0x69, 0x1a, 0x31, 0x16, 0x25, 0xe8, 0xcb, 0x0e, 0x8c, 0xcb, 0xcc, 0x06, - 0xcc, 0x1a, 0x2a, 0x43, 0xb3, 0x6f, 0xd8, 0xf2, 0x73, 0x5c, 0xd1, 0xa9, 0xa7, 0x81, 0x8f, 0x06, - 0x38, 0xc6, 0x99, 0x46, 0xb8, 0x2f, 0xc0, 0x99, 0x9c, 0xea, 0x56, 0x4e, 0xb4, 0xdf, 0x71, 0x60, - 0x44, 0x4b, 0xb8, 0x87, 0x5e, 0x83, 0xe1, 0xb0, 0x6c, 0x3d, 0xda, 0x6e, 0xb5, 0xdc, 0x11, 0x6d, - 0xa7, 0x40, 0x38, 0x65, 0xd8, 0x4b, 0x90, 0x60, 0x6e, 0x76, 0xc0, 0x7b, 0xdc, 0xec, 0x43, 0x07, - 0x09, 0xfe, 0x4a, 0x11, 0x52, 0x4a, 0x87, 0xcc, 0xb8, 0x91, 0x86, 0x14, 0x16, 0x0e, 0x0c, 0x29, - 0xac, 0xc2, 0x29, 0x8f, 0xf9, 0x92, 0x8f, 0x98, 0x67, 0x83, 0xe7, 0x5b, 0x35, 0x29, 0xe0, 0x2c, - 0x49, 0xca, 0x25, 0x4e, 0xab, 0x32, 0x2e, 0xfd, 0x87, 0xe6, 0x52, 0x36, 0x29, 0xe0, 0x2c, 0x49, - 0xf4, 0x12, 0x94, 0x2a, 0xec, 0xde, 0x28, 0xef, 0xe3, 0xb5, 0xcd, 0xeb, 0x61, 0xb2, 0x16, 0x91, - 0x98, 0x04, 0x89, 0xc8, 0xa8, 0xf5, 0xb0, 0x18, 0x85, 0xd2, 0x5c, 0x17, 0x3c, 0xdc, 0x95, 0x02, - 0x3d, 0xa6, 0x30, 0x67, 0xb4, 0x9f, 0xec, 0x32, 0x21, 0x22, 0xbc, 0xf4, 0xea, 0x98, 0x52, 0xd6, - 0x0b, 0xb1, 0x89, 0x8b, 0x7e, 0xd9, 0x81, 0xb1, 0x86, 0x34, 0xd7, 0xe3, 0x76, 0x43, 0xa6, 0x87, - 0xc4, 0x56, 0xa6, 0xdf, 0xb2, 0x4e, 0x99, 0xeb, 0x12, 0x06, 0x08, 0x9b, 0xbc, 0xb3, 0x49, 0x4f, - 0x86, 0x7a, 0x4c, 0x7a, 0xf2, 0x7d, 0x07, 0x26, 0xb2, 0xdc, 0xd0, 0x16, 0x3c, 0xd4, 0xf4, 0xa2, - 0xad, 0x6b, 0xc1, 0x66, 0xc4, 0x2e, 0x62, 0x24, 0x7c, 0x32, 0xcc, 0x6c, 0x26, 0x24, 0x9a, 0xf7, - 0x76, 0xb9, 0xfb, 0xb3, 0xa8, 0xde, 0x17, 0x7a, 0x68, 0xe5, 0x20, 0x64, 0x7c, 0x30, 0x2d, 0x54, - 0x86, 0x73, 0x14, 0x81, 0xe5, 0x44, 0xf3, 0xc3, 0x20, 0x65, 0x52, 0x60, 0x4c, 0x54, 0x30, 0xe0, - 0x4a, 0x1e, 0x12, 0xce, 0xaf, 0xeb, 0x0e, 0xc1, 0x00, 0xbf, 0x84, 0xe6, 0xfe, 0xbb, 0x02, 0x48, - 0xdd, 0xee, 0xaf, 0xb6, 0x47, 0x8d, 0xee, 0x83, 0x11, 0xb3, 0x0a, 0x09, 0x83, 0x05, 0xdb, 0x07, - 0x45, 0x02, 0x41, 0x51, 0x42, 0x95, 0x5e, 0x72, 0xcb, 0x4f, 0xe6, 0xc2, 0xaa, 0x34, 0x53, 0x30, - 0xa5, 0xf7, 0x8a, 0x80, 0x61, 0x55, 0xea, 0x7e, 0xd2, 0x81, 0x31, 0xda, 0xcb, 0x46, 0x83, 0x34, - 0xca, 0x09, 0x69, 0xc5, 0x28, 0x86, 0x62, 0x4c, 0xff, 0xb1, 0x67, 0xcd, 0x4b, 0xef, 0x1e, 0x92, - 0x96, 0xe6, 0x6f, 0xa1, 0x4c, 0x30, 0xe7, 0xe5, 0xbe, 0xd9, 0x07, 0xc3, 0x6a, 0xb0, 0x7b, 0x30, - 0x89, 0x5e, 0x4e, 0x73, 0x7b, 0x72, 0x21, 0x5a, 0xd2, 0xf2, 0x7a, 0xde, 0xa6, 0x43, 0x17, 0xec, - 0xf2, 0x24, 0x07, 0x69, 0x92, 0xcf, 0x27, 0x4d, 0x6f, 0xf1, 0x79, 0xdd, 0x05, 0xa9, 0xe1, 0x0b, - 0xb7, 0xf1, 0x2d, 0xdd, 0x59, 0xdf, 0x6f, 0x6b, 0x43, 0x52, 0x9e, 0xc8, 0xee, 0x5e, 0xfa, 0xcc, - 0xb3, 0x2f, 0xc5, 0x9e, 0x9e, 0x7d, 0x79, 0x02, 0xfa, 0x49, 0xd0, 0x6e, 0x32, 0x6d, 0x67, 0x98, - 0x69, 0xf9, 0xfd, 0x57, 0x82, 0x76, 0xd3, 0xec, 0x19, 0x43, 0x41, 0xef, 0x83, 0x91, 0x2a, 0x89, - 0x2b, 0x91, 0xcf, 0x6e, 0xee, 0x0b, 0xe3, 0xcc, 0x83, 0xcc, 0xe2, 0x95, 0x82, 0xcd, 0x8a, 0x7a, - 0x05, 0xf7, 0x15, 0x18, 0x58, 0x6b, 0xb4, 0x6b, 0x7e, 0x80, 0x5a, 0x30, 0xc0, 0xef, 0xf1, 0x8b, - 0x0d, 0xdb, 0xc2, 0xd1, 0x91, 0xaf, 0x76, 0x2d, 0x90, 0x84, 0x5f, 0x41, 0x15, 0x7c, 0xdc, 0xdf, - 0x2a, 0x00, 0x3d, 0x5d, 0x2f, 0xce, 0xa1, 0xbf, 0xdd, 0xf1, 0xca, 0xc9, 0xcf, 0xe4, 0xbc, 0x72, - 0x32, 0xc6, 0x90, 0x73, 0x1e, 0x38, 0x69, 0xc0, 0x18, 0xf3, 0x6f, 0xc8, 0x6d, 0x4c, 0x68, 0xc6, - 0x4f, 0xf7, 0x78, 0xf5, 0x5d, 0xaf, 0x2a, 0x84, 0xba, 0x0e, 0xc2, 0x26, 0x71, 0xb4, 0x0b, 0x67, - 0x78, 0x8a, 0xc8, 0x79, 0xd2, 0xf0, 0x76, 0x8d, 0x54, 0x50, 0x3d, 0x5f, 0xb7, 0x97, 0xb5, 0x78, - 0x8c, 0xf6, 0x7c, 0x27, 0x39, 0x9c, 0xc7, 0xc3, 0xfd, 0xbd, 0x7e, 0xd0, 0x3c, 0x10, 0x3d, 0xac, - 0xac, 0x8f, 0x66, 0xfc, 0x4d, 0x2b, 0x56, 0xfc, 0x4d, 0xd2, 0x89, 0xc3, 0xa5, 0x95, 0xe9, 0x62, - 0xa2, 0x8d, 0xaa, 0x93, 0x46, 0x4b, 0xac, 0x4b, 0xd5, 0xa8, 0xab, 0xa4, 0xd1, 0xc2, 0xac, 0x44, - 0xdd, 0x1f, 0xec, 0xef, 0x7a, 0x7f, 0xb0, 0x0e, 0xc5, 0x9a, 0xd7, 0xae, 0x11, 0x11, 0x70, 0x69, - 0xc1, 0xb5, 0xc8, 0x6e, 0x34, 0x70, 0xd7, 0x22, 0xfb, 0x17, 0x73, 0x06, 0x54, 0x30, 0xd4, 0x65, - 0x04, 0x8a, 0xb0, 0xc9, 0x5a, 0x10, 0x0c, 0x2a, 0xa8, 0x85, 0x0b, 0x06, 0xf5, 0x13, 0xa7, 0xcc, - 0x50, 0x0b, 0x06, 0x2b, 0x3c, 0x59, 0x87, 0x50, 0x51, 0xae, 0xd9, 0xb8, 0x20, 0xc9, 0x08, 0x72, - 0xe3, 0x89, 0xf8, 0x81, 0x25, 0x1b, 0xf7, 0x12, 0x8c, 0x68, 0x0f, 0x33, 0xd0, 0xcf, 0xa0, 0xf2, - 0x44, 0x68, 0x9f, 0x61, 0xde, 0x4b, 0x3c, 0xcc, 0x4a, 0xdc, 0x6f, 0xf6, 0x83, 0x32, 0x9d, 0xe9, - 0xd7, 0xf9, 0xbc, 0x8a, 0x96, 0xd5, 0xc6, 0xb8, 0x47, 0x1e, 0x06, 0x58, 0x94, 0x52, 0x35, 0xae, - 0x49, 0xa2, 0x9a, 0x3a, 0x36, 0x0b, 0xd1, 0xae, 0xd4, 0xb8, 0x15, 0xbd, 0x10, 0x9b, 0xb8, 0x54, - 0x07, 0x6f, 0x0a, 0x8f, 0x7c, 0x36, 0xde, 0x59, 0x7a, 0xea, 0xb1, 0xc2, 0x40, 0x9f, 0x74, 0x60, - 0xb4, 0xa9, 0x39, 0xf0, 0x45, 0xdc, 0xa5, 0x0d, 0xff, 0x91, 0x46, 0x95, 0xc7, 0x47, 0xe9, 0x10, - 0x6c, 0x70, 0x45, 0x8b, 0x70, 0x3a, 0x26, 0xc9, 0xea, 0x4e, 0x40, 0x22, 0x75, 0xcd, 0x5e, 0xe4, - 0x5d, 0x50, 0x97, 0x1d, 0xca, 0x59, 0x04, 0xdc, 0x59, 0x27, 0x37, 0x54, 0xb5, 0x78, 0xe8, 0x50, - 0xd5, 0x79, 0x98, 0xd8, 0xf4, 0xfc, 0x46, 0x3b, 0x22, 0x5d, 0x03, 0x5e, 0x17, 0x32, 0xe5, 0xb8, - 0xa3, 0x06, 0xbb, 0x6f, 0xd3, 0xf0, 0x6a, 0x71, 0x69, 0x50, 0xbb, 0x6f, 0x43, 0x01, 0x98, 0xc3, - 0xdd, 0xdf, 0x70, 0x80, 0x27, 0xbc, 0x99, 0xd9, 0xdc, 0xf4, 0x03, 0x3f, 0xd9, 0x45, 0x5f, 0x73, - 0x60, 0x22, 0x08, 0xab, 0x64, 0x26, 0x48, 0x7c, 0x09, 0xb4, 0x97, 0x85, 0x9c, 0xf1, 0xba, 0x9e, - 0x21, 0xcf, 0xb3, 0x27, 0x64, 0xa1, 0xb8, 0xa3, 0x19, 0xee, 0x05, 0x38, 0x97, 0x4b, 0xc0, 0xfd, - 0x7e, 0x1f, 0x98, 0x79, 0x7b, 0xd0, 0x73, 0x50, 0x6c, 0xb0, 0x4c, 0x12, 0xce, 0x11, 0x13, 0x32, - 0xb1, 0xb1, 0xe2, 0xa9, 0x26, 0x38, 0x25, 0x34, 0x0f, 0x23, 0x2c, 0x19, 0x90, 0xc8, 0xf3, 0xc1, - 0x57, 0x84, 0x9b, 0x3e, 0x7e, 0xa6, 0x8a, 0x6e, 0x9b, 0x3f, 0xb1, 0x5e, 0x0d, 0xbd, 0x0a, 0x83, - 0x1b, 0x3c, 0x25, 0xa2, 0x3d, 0x17, 0x9f, 0xc8, 0xb1, 0xc8, 0xf4, 0x28, 0x99, 0x70, 0xf1, 0x76, - 0xfa, 0x2f, 0x96, 0x1c, 0xd1, 0x2e, 0x0c, 0x79, 0xf2, 0x9b, 0xf6, 0xdb, 0xba, 0x3f, 0x61, 0xcc, - 0x1f, 0x11, 0x20, 0x23, 0xbf, 0xa1, 0x62, 0x97, 0x89, 0x24, 0x2a, 0xf6, 0x14, 0x49, 0xf4, 0x6d, - 0x07, 0x20, 0x7d, 0x3f, 0x02, 0xdd, 0x82, 0xa1, 0xf8, 0x69, 0xc3, 0x2e, 0x61, 0xe3, 0xe2, 0xbc, - 0xa0, 0xa8, 0x5d, 0x2e, 0x15, 0x10, 0xac, 0xb8, 0xdd, 0xc9, 0x96, 0xf2, 0x53, 0x07, 0xce, 0xe6, - 0xbd, 0x73, 0x71, 0x0f, 0x5b, 0x7c, 0x58, 0x33, 0x8a, 0xa8, 0xb0, 0x16, 0x91, 0x4d, 0xff, 0x56, - 0x4e, 0x62, 0x5e, 0x5e, 0x80, 0x53, 0x1c, 0xf7, 0x8d, 0x41, 0x50, 0x8c, 0x8f, 0xc9, 0xec, 0xf2, - 0x18, 0x3d, 0x5f, 0xd5, 0xd2, 0xfb, 0x8e, 0x0a, 0x0f, 0x33, 0x28, 0x16, 0xa5, 0xf4, 0x8c, 0x25, - 0x63, 0xe0, 0x85, 0xc8, 0x66, 0xb3, 0x50, 0xc6, 0xca, 0x63, 0x55, 0x9a, 0x67, 0xc8, 0x29, 0x9e, - 0x88, 0x21, 0x67, 0xc0, 0xbe, 0x21, 0xe7, 0x09, 0x18, 0x8c, 0xc2, 0x06, 0x99, 0xc1, 0xd7, 0xc5, - 0xc9, 0x21, 0x8d, 0x61, 0xe0, 0x60, 0x2c, 0xcb, 0x8f, 0x68, 0xca, 0x40, 0xbf, 0xed, 0x1c, 0x60, - 0x2b, 0x1a, 0xb6, 0xb5, 0x27, 0xe4, 0x66, 0x31, 0x63, 0xc7, 0xa0, 0xa3, 0x18, 0xa0, 0xbe, 0xee, - 0xc0, 0x69, 0x12, 0x54, 0xa2, 0x5d, 0x46, 0x47, 0x50, 0x13, 0x2e, 0xe6, 0x1b, 0x36, 0x16, 0xdf, - 0x95, 0x2c, 0x71, 0xee, 0xc9, 0xe9, 0x00, 0xe3, 0xce, 0x66, 0xa0, 0x55, 0x18, 0xaa, 0x78, 0x62, - 0x46, 0x8c, 0x1c, 0x66, 0x46, 0x70, 0x47, 0xd9, 0x8c, 0x98, 0x0a, 0x8a, 0x88, 0xfb, 0xe3, 0x02, - 0x9c, 0xc9, 0x69, 0x12, 0xbb, 0x2f, 0xd5, 0xa4, 0x33, 0xf2, 0x5a, 0x35, 0xbb, 0x1e, 0x97, 0x04, - 0x1c, 0x2b, 0x0c, 0xb4, 0x06, 0x67, 0xb7, 0x9a, 0x71, 0x4a, 0x65, 0x2e, 0x0c, 0x12, 0x72, 0x4b, - 0xae, 0x4e, 0xe9, 0x7e, 0x3e, 0xbb, 0x94, 0x83, 0x83, 0x73, 0x6b, 0x52, 0xf5, 0x85, 0x04, 0xde, - 0x46, 0x83, 0xa4, 0x45, 0xe2, 0xb6, 0x9f, 0x52, 0x5f, 0xae, 0x64, 0xca, 0x71, 0x47, 0x0d, 0xf4, - 0x59, 0x07, 0x1e, 0x88, 0x49, 0xb4, 0x4d, 0xa2, 0xb2, 0x5f, 0x25, 0x73, 0xed, 0x38, 0x09, 0x9b, - 0x24, 0x3a, 0xa2, 0x75, 0x74, 0x6a, 0x7f, 0x6f, 0xea, 0x81, 0x72, 0x77, 0x6a, 0xf8, 0x20, 0x56, - 0xee, 0x67, 0x1d, 0x18, 0x2f, 0xb3, 0x83, 0xb7, 0xd2, 0xa5, 0x6d, 0xe7, 0xb1, 0x7c, 0x4c, 0xe5, - 0xa7, 0xc8, 0x48, 0x45, 0x33, 0xa3, 0x84, 0xfb, 0x32, 0x4c, 0x94, 0x49, 0xd3, 0x6b, 0xd5, 0xd9, - 0x55, 0x5d, 0x1e, 0x7e, 0x75, 0x09, 0x86, 0x63, 0x09, 0xcb, 0x3e, 0x5d, 0xa3, 0x90, 0x71, 0x8a, - 0x83, 0x1e, 0xe5, 0xa1, 0x62, 0xf2, 0xc2, 0xcf, 0x30, 0x3f, 0x75, 0xf0, 0xf8, 0xb2, 0x18, 0xcb, - 0x32, 0xf7, 0x4d, 0x07, 0x46, 0xd3, 0xfa, 0x64, 0x13, 0xd5, 0xe0, 0x54, 0x45, 0xbb, 0x2c, 0x97, - 0x5e, 0x53, 0xe8, 0xfd, 0x5e, 0x1d, 0x4f, 0xaf, 0x6b, 0x12, 0xc1, 0x59, 0xaa, 0x87, 0x8f, 0xb4, - 0xfb, 0x42, 0x01, 0x4e, 0xa9, 0xa6, 0x0a, 0x3f, 0xe1, 0xeb, 0xd9, 0x80, 0x38, 0x6c, 0x23, 0xd3, - 0x8e, 0x39, 0xf6, 0x07, 0x04, 0xc5, 0xbd, 0x9e, 0x0d, 0x8a, 0x3b, 0x56, 0xf6, 0x1d, 0xae, 0xcf, - 0x6f, 0x17, 0x60, 0x48, 0xe5, 0xfd, 0x79, 0x0e, 0x8a, 0xec, 0x28, 0x79, 0x77, 0x0a, 0x31, 0x3b, - 0x96, 0x62, 0x4e, 0x89, 0x92, 0x64, 0x41, 0x37, 0x47, 0x4e, 0x7a, 0x3a, 0xcc, 0x8d, 0x8f, 0x5e, - 0x94, 0x60, 0x4e, 0x09, 0x2d, 0x41, 0x1f, 0x09, 0xaa, 0x42, 0x33, 0x3e, 0x3c, 0x41, 0xf6, 0xc8, - 0xd4, 0x95, 0xa0, 0x8a, 0x29, 0x15, 0x96, 0x79, 0x93, 0x2b, 0x40, 0x99, 0x27, 0x45, 0x84, 0xf6, - 0x23, 0x4a, 0xdd, 0x5f, 0xee, 0x83, 0x81, 0x72, 0x7b, 0x83, 0xea, 0xf8, 0xdf, 0x72, 0xe0, 0xcc, - 0x4e, 0x26, 0x23, 0x70, 0x3a, 0xc7, 0x6f, 0xd8, 0x33, 0xc0, 0xea, 0x81, 0x5f, 0x0f, 0xc8, 0xf7, - 0xd2, 0x73, 0x0a, 0x71, 0x5e, 0x73, 0x8c, 0xa4, 0x9c, 0x7d, 0xc7, 0x92, 0x94, 0xf3, 0xd6, 0x31, - 0xdf, 0x7c, 0x18, 0xeb, 0x76, 0xeb, 0xc1, 0xfd, 0xbd, 0x22, 0x00, 0xff, 0x1a, 0xab, 0xad, 0xa4, - 0x17, 0x33, 0xd9, 0x33, 0x30, 0x5a, 0x23, 0x01, 0x89, 0x64, 0x58, 0x5f, 0xe6, 0xb5, 0x9a, 0x45, - 0xad, 0x0c, 0x1b, 0x98, 0xec, 0x4c, 0x12, 0x24, 0xd1, 0x2e, 0xd7, 0x5b, 0xb3, 0xb7, 0x1b, 0x54, - 0x09, 0xd6, 0xb0, 0xd0, 0xb4, 0xe1, 0xf1, 0xe0, 0xfe, 0xef, 0xf1, 0x03, 0x1c, 0x14, 0xef, 0x83, - 0x71, 0x33, 0x55, 0x88, 0x50, 0xd6, 0x94, 0xbf, 0xda, 0xcc, 0x30, 0x82, 0x33, 0xd8, 0x74, 0x12, - 0x57, 0xa3, 0x5d, 0xdc, 0x0e, 0x84, 0xd6, 0xa6, 0x26, 0xf1, 0x3c, 0x83, 0x62, 0x51, 0xca, 0x72, - 0x2c, 0xb0, 0xfd, 0x8b, 0xc3, 0x45, 0x9e, 0x86, 0x34, 0xc7, 0x82, 0x56, 0x86, 0x0d, 0x4c, 0xca, - 0x41, 0x98, 0x19, 0xc1, 0x5c, 0x26, 0x19, 0xdb, 0x60, 0x0b, 0xc6, 0x43, 0xd3, 0x3c, 0xc2, 0x55, - 0x98, 0x77, 0xf5, 0x38, 0xf5, 0x8c, 0xba, 0x3c, 0xce, 0x20, 0x63, 0x4d, 0xc9, 0xd0, 0xa7, 0x6a, - 0xab, 0x7e, 0x09, 0x60, 0xd4, 0x8c, 0x0a, 0xed, 0x1a, 0xa7, 0xbf, 0x06, 0x67, 0x5b, 0x61, 0x75, - 0x2d, 0xf2, 0xc3, 0xc8, 0x4f, 0x76, 0xe7, 0x1a, 0x5e, 0x1c, 0xb3, 0x89, 0x31, 0x66, 0xaa, 0x33, - 0x6b, 0x39, 0x38, 0x38, 0xb7, 0x26, 0x3d, 0x60, 0xb4, 0x04, 0x90, 0xc5, 0x66, 0x15, 0xb9, 0x42, - 0x26, 0x11, 0xb1, 0x2a, 0x75, 0xcf, 0xc0, 0xe9, 0x72, 0xbb, 0xd5, 0x6a, 0xf8, 0xa4, 0xaa, 0x3c, - 0x0a, 0xee, 0xfb, 0xe1, 0x94, 0x48, 0xd9, 0xa9, 0x94, 0x87, 0x43, 0x25, 0x98, 0x76, 0xff, 0xdc, - 0x81, 0x53, 0x99, 0x48, 0x18, 0xf4, 0x6a, 0x76, 0xcb, 0xb7, 0x62, 0x33, 0xd3, 0x37, 0x7b, 0xbe, - 0x48, 0x73, 0xd5, 0x87, 0xba, 0x0c, 0x63, 0xb7, 0x76, 0x7d, 0x84, 0x05, 0x7b, 0xf3, 0x1d, 0x41, - 0x8f, 0x85, 0x77, 0x3f, 0x53, 0x80, 0xfc, 0xf0, 0x23, 0xf4, 0xb1, 0xce, 0x01, 0x78, 0xce, 0xe2, - 0x00, 0x88, 0xf8, 0xa7, 0xee, 0x63, 0x10, 0x98, 0x63, 0xb0, 0x62, 0x69, 0x0c, 0x04, 0xdf, 0xce, - 0x91, 0xf8, 0x5f, 0x0e, 0x8c, 0xac, 0xaf, 0x2f, 0x2b, 0x13, 0x17, 0x86, 0xf3, 0x31, 0xbf, 0x1e, - 0xcf, 0xbc, 0xb4, 0x73, 0x61, 0xb3, 0xc5, 0x9d, 0xb6, 0xc2, 0x99, 0xcc, 0xb2, 0xa7, 0x96, 0x73, - 0x31, 0x70, 0x97, 0x9a, 0xe8, 0x1a, 0x9c, 0xd1, 0x4b, 0xca, 0xda, 0x63, 0x75, 0x45, 0x91, 0x92, - 0xa6, 0xb3, 0x18, 0xe7, 0xd5, 0xc9, 0x92, 0x12, 0xd6, 0x4a, 0xb6, 0x5d, 0xe5, 0x90, 0x12, 0xc5, - 0x38, 0xaf, 0x8e, 0xbb, 0x0a, 0x23, 0xeb, 0x5e, 0xa4, 0x3a, 0xfe, 0x01, 0x98, 0xa8, 0x84, 0x4d, - 0x69, 0x25, 0x5a, 0x26, 0xdb, 0xa4, 0x21, 0xba, 0xcc, 0x5f, 0x88, 0xc8, 0x94, 0xe1, 0x0e, 0x6c, - 0xf7, 0xbf, 0x5f, 0x04, 0x75, 0xdd, 0xaf, 0x87, 0x1d, 0xa6, 0xa5, 0x02, 0x33, 0x8b, 0x96, 0x03, - 0x33, 0x95, 0xac, 0xcd, 0x04, 0x67, 0x26, 0x69, 0x70, 0xe6, 0x80, 0xed, 0xe0, 0x4c, 0xa5, 0x30, - 0x76, 0x04, 0x68, 0x7e, 0xc5, 0x81, 0xd1, 0x20, 0xac, 0x12, 0xe5, 0x8a, 0x1b, 0x64, 0x5a, 0xeb, - 0x4b, 0xf6, 0xe2, 0xdc, 0x79, 0xa0, 0xa1, 0x20, 0xcf, 0x83, 0x86, 0xd5, 0x16, 0xa5, 0x17, 0x61, - 0xa3, 0x1d, 0x68, 0x41, 0xb3, 0x5b, 0x72, 0xf7, 0xc0, 0x83, 0x79, 0xc7, 0x8d, 0x3b, 0x1a, 0x21, - 0x6f, 0x69, 0x7a, 0xd3, 0xb0, 0x2d, 0x7b, 0x9c, 0xbc, 0xc3, 0xa5, 0x79, 0x39, 0x64, 0x02, 0xe0, - 0x54, 0x9f, 0x72, 0x61, 0x80, 0x47, 0x17, 0x8b, 0xe4, 0x47, 0xcc, 0xf9, 0xc6, 0x23, 0x8f, 0xb1, - 0x28, 0x41, 0x89, 0x74, 0xf7, 0x8f, 0xd8, 0x4a, 0xe7, 0x6f, 0x84, 0x13, 0xe4, 0xfb, 0xfb, 0xd1, - 0xb3, 0xfa, 0x31, 0x76, 0xb4, 0x97, 0x63, 0xec, 0x58, 0xd7, 0x23, 0xec, 0xe7, 0x1d, 0x18, 0xad, - 0x68, 0xe9, 0xf5, 0x4b, 0x8f, 0xdb, 0x7a, 0x46, 0x38, 0xef, 0x15, 0x04, 0xee, 0xd3, 0x31, 0xd2, - 0xf9, 0x1b, 0xdc, 0x59, 0xc6, 0x47, 0x76, 0x66, 0x67, 0x5b, 0xbf, 0x95, 0x24, 0x0f, 0xa6, 0x0d, - 0x40, 0x46, 0x3e, 0x52, 0x18, 0x16, 0xbc, 0xd0, 0x6b, 0x30, 0x24, 0x03, 0xd4, 0x45, 0x20, 0x37, - 0xb6, 0x61, 0x64, 0x37, 0x3d, 0x79, 0x32, 0x4d, 0x1c, 0x87, 0x62, 0xc5, 0x11, 0xd5, 0xa1, 0xaf, - 0xea, 0xd5, 0x44, 0x48, 0xf7, 0x8a, 0x9d, 0x34, 0x9c, 0x92, 0x27, 0x3b, 0x5e, 0xcd, 0xcf, 0x2c, - 0x62, 0xca, 0x02, 0xdd, 0x4a, 0xf3, 0x93, 0x4f, 0x58, 0xdb, 0x7d, 0x4d, 0x35, 0x89, 0x5b, 0x25, - 0x3a, 0xd2, 0x9d, 0x57, 0x85, 0xf3, 0xf3, 0xaf, 0x31, 0xb6, 0x0b, 0x76, 0xf2, 0x78, 0xf2, 0xa4, - 0x21, 0xa9, 0x03, 0x95, 0x72, 0xa9, 0x27, 0x49, 0xab, 0xf4, 0xb3, 0xb6, 0xb8, 0xb0, 0xd4, 0x17, - 0xfc, 0xc5, 0xe7, 0xf5, 0xf5, 0x35, 0xcc, 0xa8, 0xa3, 0x06, 0x0c, 0xb4, 0x58, 0x0c, 0x47, 0xe9, - 0xe7, 0x6c, 0xed, 0x2d, 0x3c, 0x26, 0x84, 0xcf, 0x4d, 0xfe, 0x3f, 0x16, 0x3c, 0xd0, 0x15, 0x18, - 0xe4, 0xcf, 0x6c, 0xf0, 0x90, 0xfa, 0x91, 0xcb, 0x93, 0xdd, 0x1f, 0xeb, 0x48, 0x37, 0x0a, 0xfe, - 0x3b, 0xc6, 0xb2, 0x2e, 0xfa, 0x82, 0x03, 0xe3, 0x54, 0xa2, 0xa6, 0xef, 0x82, 0x94, 0x90, 0x2d, - 0x99, 0x75, 0x23, 0xa6, 0x1a, 0x89, 0x94, 0x35, 0xea, 0x98, 0x74, 0xcd, 0x60, 0x87, 0x33, 0xec, - 0xd1, 0xeb, 0x30, 0x14, 0xfb, 0x55, 0x52, 0xf1, 0xa2, 0xb8, 0x74, 0xe6, 0x78, 0x9a, 0x92, 0xba, - 0x5b, 0x04, 0x23, 0xac, 0x58, 0xe6, 0x3e, 0xdf, 0x7f, 0xf6, 0x1e, 0x3f, 0xdf, 0xff, 0x77, 0x1c, - 0x38, 0xc7, 0xd3, 0xc2, 0x67, 0xdf, 0x04, 0x38, 0x77, 0x44, 0xf3, 0x0a, 0xbb, 0x0b, 0x30, 0x93, - 0x47, 0x12, 0xe7, 0x73, 0x62, 0x79, 0x65, 0xcd, 0x67, 0x5c, 0xce, 0x5b, 0x75, 0x3b, 0xf6, 0xfe, - 0x74, 0x0b, 0x7a, 0x0a, 0x46, 0x5a, 0x62, 0x3b, 0xf4, 0xe3, 0x26, 0xbb, 0xd9, 0xd1, 0xc7, 0xef, - 0xdc, 0xad, 0xa5, 0x60, 0xac, 0xe3, 0x18, 0x49, 0x86, 0x9f, 0x38, 0x28, 0xc9, 0x30, 0xba, 0x01, - 0x23, 0x49, 0xd8, 0x10, 0x79, 0x36, 0xe3, 0x52, 0x89, 0xcd, 0xc0, 0x8b, 0x79, 0x6b, 0x6b, 0x5d, - 0xa1, 0xa5, 0x27, 0xd9, 0x14, 0x16, 0x63, 0x9d, 0x0e, 0x8b, 0xa6, 0x15, 0xe9, 0xf6, 0x23, 0x76, - 0x84, 0xbd, 0x3f, 0x13, 0x4d, 0xab, 0x17, 0x62, 0x13, 0x17, 0x2d, 0xc2, 0xe9, 0x56, 0xc7, 0x19, - 0x98, 0xdf, 0x28, 0x53, 0x11, 0x0d, 0x9d, 0x07, 0xe0, 0xce, 0x3a, 0xc6, 0xe9, 0xf7, 0x81, 0x83, - 0x4e, 0xbf, 0x5d, 0x52, 0xee, 0x3e, 0x78, 0x94, 0x94, 0xbb, 0xa8, 0x0a, 0x0f, 0x7a, 0xed, 0x24, - 0x64, 0xe9, 0x5d, 0xcc, 0x2a, 0x3c, 0xb0, 0xf8, 0x61, 0x1e, 0xab, 0xbc, 0xbf, 0x37, 0xf5, 0xe0, - 0xcc, 0x01, 0x78, 0xf8, 0x40, 0x2a, 0xe8, 0x15, 0x18, 0x22, 0x22, 0x6d, 0x70, 0xe9, 0x67, 0x6c, - 0x29, 0x09, 0x66, 0x22, 0x62, 0x19, 0xf0, 0xc9, 0x61, 0x58, 0xf1, 0x43, 0xeb, 0x30, 0x52, 0x0f, - 0xe3, 0x64, 0xa6, 0xe1, 0x7b, 0x31, 0x89, 0x4b, 0x0f, 0xb1, 0x49, 0x93, 0xab, 0x7b, 0x5d, 0x95, - 0x68, 0xe9, 0x9c, 0xb9, 0x9a, 0xd6, 0xc4, 0x3a, 0x19, 0x44, 0x98, 0xf3, 0x91, 0x45, 0x55, 0x4b, - 0x3f, 0xce, 0x45, 0xd6, 0xb1, 0xc7, 0xf2, 0x28, 0xaf, 0x85, 0xd5, 0xb2, 0x89, 0xad, 0xbc, 0x8f, - 0x3a, 0x10, 0x67, 0x69, 0xa2, 0x67, 0x60, 0xb4, 0x15, 0x56, 0xcb, 0x2d, 0x52, 0x59, 0xf3, 0x92, - 0x4a, 0xbd, 0x34, 0x65, 0x5a, 0xdd, 0xd6, 0xb4, 0x32, 0x6c, 0x60, 0xa2, 0x16, 0x0c, 0x36, 0xf9, - 0xbd, 0xff, 0xd2, 0x23, 0xb6, 0xce, 0x36, 0x22, 0x91, 0x00, 0xd7, 0x17, 0xc4, 0x0f, 0x2c, 0xd9, - 0xa0, 0x7f, 0xe2, 0xc0, 0xa9, 0xcc, 0x5d, 0xa5, 0xd2, 0x3b, 0xac, 0xa9, 0x2c, 0x26, 0xe1, 0xd9, - 0xc7, 0xd8, 0xf0, 0x99, 0xc0, 0xdb, 0x9d, 0x20, 0x9c, 0x6d, 0x11, 0x1f, 0x17, 0x96, 0xbc, 0xa3, - 0xf4, 0xa8, 0xbd, 0x71, 0x61, 0x04, 0xe5, 0xb8, 0xb0, 0x1f, 0x58, 0xb2, 0x41, 0x4f, 0xc0, 0xa0, - 0xc8, 0xb3, 0x57, 0x7a, 0xcc, 0xf4, 0x20, 0x8b, 0x74, 0x7c, 0x58, 0x96, 0x4f, 0xbe, 0x1f, 0x4e, - 0x77, 0x1c, 0xdd, 0x0e, 0x95, 0x41, 0xe2, 0xd7, 0x1d, 0xd0, 0x2f, 0x37, 0x5b, 0x7f, 0xab, 0xe3, - 0x19, 0x18, 0xad, 0xf0, 0x17, 0xfd, 0xf8, 0xf5, 0xe8, 0x7e, 0xd3, 0xfe, 0x39, 0xa7, 0x95, 0x61, - 0x03, 0xd3, 0xbd, 0x0a, 0xa8, 0x33, 0x91, 0xfa, 0x91, 0xd2, 0x13, 0xfd, 0x33, 0x07, 0xc6, 0x0c, - 0x9d, 0xc1, 0xba, 0x8f, 0x70, 0x01, 0x50, 0xd3, 0x8f, 0xa2, 0x30, 0xd2, 0x9f, 0x4e, 0x13, 0x29, - 0x0c, 0xd8, 0x25, 0xb1, 0x95, 0x8e, 0x52, 0x9c, 0x53, 0xc3, 0xfd, 0xad, 0x7e, 0x48, 0x23, 0x9e, - 0x55, 0xa6, 0x5a, 0xa7, 0x6b, 0xa6, 0xda, 0x27, 0x61, 0xe8, 0xe5, 0x38, 0x0c, 0xd6, 0xd2, 0x7c, - 0xb6, 0xea, 0x5b, 0x3c, 0x5b, 0x5e, 0xbd, 0xce, 0x30, 0x15, 0x06, 0xc3, 0xfe, 0xe8, 0x82, 0xdf, - 0x48, 0x3a, 0x13, 0x9e, 0x3e, 0xfb, 0x1c, 0x87, 0x63, 0x85, 0xc1, 0x5e, 0x51, 0xdb, 0x26, 0xca, - 0x30, 0x9e, 0xbe, 0xa2, 0xc6, 0xdf, 0x48, 0x60, 0x65, 0xe8, 0x12, 0x0c, 0x2b, 0xa3, 0xba, 0xb0, - 0xd4, 0xab, 0x91, 0x52, 0x96, 0x77, 0x9c, 0xe2, 0x30, 0x85, 0x50, 0x18, 0x62, 0x85, 0x09, 0xa5, - 0x6c, 0xe3, 0x78, 0x92, 0x31, 0xed, 0x72, 0xd9, 0x2e, 0xc1, 0x58, 0xb1, 0xcc, 0xf3, 0x93, 0x0e, - 0x1f, 0x8b, 0x9f, 0x54, 0x0b, 0xbf, 0x2f, 0xf6, 0x1a, 0x7e, 0x6f, 0xce, 0xed, 0xa1, 0x9e, 0xe6, - 0xf6, 0xa7, 0xfa, 0x60, 0xf0, 0x79, 0x12, 0xb1, 0x3c, 0xdf, 0x4f, 0xc0, 0xe0, 0x36, 0xff, 0x37, - 0x7b, 0xfd, 0x52, 0x60, 0x60, 0x59, 0x4e, 0xbf, 0xdb, 0x46, 0xdb, 0x6f, 0x54, 0xe7, 0xd3, 0x55, - 0x9c, 0xa6, 0x08, 0x94, 0x05, 0x38, 0xc5, 0xa1, 0x15, 0x6a, 0x54, 0xb3, 0x6f, 0x36, 0xfd, 0x8e, - 0x07, 0xc2, 0x17, 0x65, 0x01, 0x4e, 0x71, 0xd0, 0x63, 0x30, 0x50, 0xf3, 0x93, 0x75, 0xaf, 0x96, - 0xf5, 0xf2, 0x2d, 0x32, 0x28, 0x16, 0xa5, 0xcc, 0x4d, 0xe4, 0x27, 0xeb, 0x11, 0x61, 0x96, 0xdd, - 0x8e, 0xec, 0x0f, 0x8b, 0x5a, 0x19, 0x36, 0x30, 0x59, 0x93, 0x42, 0xd1, 0x33, 0x11, 0x84, 0x99, - 0x36, 0x49, 0x16, 0xe0, 0x14, 0x87, 0xce, 0xff, 0x4a, 0xd8, 0x6c, 0xf9, 0x0d, 0x11, 0x1e, 0xac, - 0xcd, 0xff, 0x39, 0x01, 0xc7, 0x0a, 0x83, 0x62, 0x53, 0x11, 0x46, 0xc5, 0x4f, 0xf6, 0xc5, 0xaa, - 0x35, 0x01, 0xc7, 0x0a, 0xc3, 0x7d, 0x1e, 0xc6, 0xf8, 0x4a, 0x9e, 0x6b, 0x78, 0x7e, 0x73, 0x71, - 0x0e, 0x5d, 0xe9, 0x08, 0xbf, 0x7f, 0x22, 0x27, 0xfc, 0xfe, 0x9c, 0x51, 0xa9, 0x33, 0x0c, 0xdf, - 0xfd, 0x61, 0x01, 0x86, 0x4e, 0xf0, 0xd1, 0xbf, 0x13, 0x7f, 0xbf, 0x16, 0xdd, 0xca, 0x3c, 0xf8, - 0xb7, 0x66, 0xf3, 0x36, 0xcd, 0x81, 0x8f, 0xfd, 0xfd, 0x97, 0x02, 0x9c, 0x97, 0xa8, 0xf2, 0x2c, - 0xb7, 0x38, 0xc7, 0x5e, 0xac, 0x3a, 0xfe, 0x81, 0x8e, 0x8c, 0x81, 0x5e, 0xb3, 0x77, 0x1a, 0x5d, - 0x9c, 0xeb, 0x3a, 0xd4, 0xaf, 0x64, 0x86, 0x1a, 0x5b, 0xe5, 0x7a, 0xf0, 0x60, 0xff, 0x85, 0x03, - 0x93, 0xf9, 0x83, 0x7d, 0x02, 0x6f, 0x2c, 0xbe, 0x6e, 0xbe, 0xb1, 0xf8, 0x0b, 0xf6, 0xa6, 0x98, - 0xd9, 0x95, 0x2e, 0xaf, 0x2d, 0xfe, 0x99, 0x03, 0x67, 0x65, 0x05, 0xb6, 0x7b, 0xce, 0xfa, 0x01, - 0x0b, 0x44, 0x39, 0xfe, 0x69, 0xf6, 0x9a, 0x31, 0xcd, 0x5e, 0xb4, 0xd7, 0x71, 0xbd, 0x1f, 0x5d, - 0xdf, 0xa6, 0xfe, 0x53, 0x07, 0x4a, 0x79, 0x15, 0x4e, 0xe0, 0x93, 0xbf, 0x6a, 0x7e, 0xf2, 0xe7, - 0x8f, 0xa7, 0xe7, 0xdd, 0x3f, 0x78, 0xa9, 0xdb, 0x40, 0xa1, 0x86, 0xd4, 0xab, 0x1c, 0x5b, 0x3e, - 0x5a, 0xce, 0x22, 0x5f, 0x41, 0x6b, 0xc0, 0x40, 0xcc, 0xa2, 0x36, 0xc4, 0x14, 0xb8, 0x6a, 0x43, - 0xdb, 0xa2, 0xf4, 0x84, 0x8d, 0x9d, 0xfd, 0x8f, 0x05, 0x0f, 0xf7, 0x37, 0x0a, 0x70, 0x41, 0xbd, - 0x9d, 0x4a, 0xb6, 0x49, 0x23, 0x5d, 0x1f, 0xec, 0x55, 0x04, 0x4f, 0xfd, 0xb4, 0xf7, 0x2a, 0x42, - 0xca, 0x22, 0x5d, 0x0b, 0x29, 0x0c, 0x6b, 0x3c, 0x51, 0x19, 0xce, 0xb1, 0x57, 0x0c, 0x16, 0xfc, - 0xc0, 0x6b, 0xf8, 0xaf, 0x90, 0x08, 0x93, 0x66, 0xb8, 0xed, 0x35, 0x84, 0xa6, 0xae, 0x6e, 0xe0, - 0x2e, 0xe4, 0x21, 0xe1, 0xfc, 0xba, 0x1d, 0x27, 0xee, 0xbe, 0x5e, 0x4f, 0xdc, 0xee, 0x9f, 0x38, - 0x30, 0x7a, 0x82, 0x2f, 0xcd, 0x86, 0xe6, 0x92, 0x78, 0xd6, 0xde, 0x92, 0xe8, 0xb2, 0x0c, 0xf6, - 0x8a, 0xd0, 0xf1, 0xf8, 0x26, 0xfa, 0xb4, 0xa3, 0xe2, 0x5a, 0x78, 0xec, 0xdf, 0x87, 0xec, 0xb5, - 0xe3, 0x30, 0x69, 0x1b, 0xd1, 0xd7, 0x33, 0xb9, 0x2c, 0x0b, 0xb6, 0x12, 0x32, 0x75, 0xb4, 0xe6, - 0x08, 0x39, 0x2d, 0xbf, 0xe2, 0x00, 0xf0, 0x76, 0x8a, 0x54, 0xd8, 0xb4, 0x6d, 0x1b, 0xc7, 0x36, - 0x52, 0x94, 0x09, 0x6f, 0x9a, 0x5a, 0x42, 0x69, 0x01, 0xd6, 0x5a, 0x72, 0x17, 0xc9, 0x2a, 0xef, - 0x3a, 0x4f, 0xe6, 0x17, 0x1c, 0x38, 0x95, 0x69, 0x6e, 0x4e, 0xfd, 0x4d, 0xf3, 0x51, 0x3e, 0x0b, - 0x9a, 0x95, 0x99, 0x20, 0x59, 0x37, 0x9e, 0xfc, 0x37, 0x17, 0x8c, 0x57, 0x8b, 0xd1, 0xab, 0x30, - 0x2c, 0x2d, 0x1f, 0x72, 0x7a, 0xdb, 0x7c, 0x9c, 0x54, 0x1d, 0x6f, 0x24, 0x24, 0xc6, 0x29, 0xbf, - 0x4c, 0xd8, 0x5c, 0xa1, 0xa7, 0xb0, 0xb9, 0x7b, 0xfb, 0xb4, 0x69, 0xbe, 0x5d, 0xba, 0xff, 0x58, - 0xec, 0xd2, 0x0f, 0x5a, 0xb7, 0x4b, 0x3f, 0x74, 0xc2, 0x76, 0x69, 0xcd, 0x49, 0x58, 0xbc, 0x0b, - 0x27, 0xe1, 0xab, 0x70, 0x76, 0x3b, 0x3d, 0x74, 0xaa, 0x99, 0x24, 0xd2, 0x00, 0x3d, 0x91, 0x6b, - 0x8d, 0xa6, 0x07, 0xe8, 0x38, 0x21, 0x41, 0xa2, 0x1d, 0x57, 0xd3, 0x88, 0xbd, 0xe7, 0x73, 0xc8, - 0xe1, 0x5c, 0x26, 0x59, 0x6f, 0xcf, 0x60, 0x0f, 0xde, 0x9e, 0x37, 0x1d, 0x38, 0xe7, 0x75, 0xdc, - 0xe1, 0xc2, 0x64, 0x53, 0x84, 0x9c, 0xdc, 0xb4, 0xa7, 0x42, 0x18, 0xe4, 0x85, 0x5b, 0x2d, 0xaf, - 0x08, 0xe7, 0x37, 0x08, 0x3d, 0x9a, 0xba, 0xde, 0x79, 0x9c, 0x67, 0xbe, 0x9f, 0xfc, 0xeb, 0xd9, - 0x78, 0x1e, 0x60, 0x43, 0xff, 0x11, 0xbb, 0xa7, 0x6d, 0x0b, 0x31, 0x3d, 0x23, 0x77, 0x11, 0xd3, - 0x93, 0x71, 0xbd, 0x8d, 0x5a, 0x72, 0xbd, 0x05, 0x30, 0xe1, 0x37, 0xbd, 0x1a, 0x59, 0x6b, 0x37, - 0x1a, 0xfc, 0x0e, 0x88, 0x7c, 0x3e, 0x36, 0xd7, 0x82, 0xb7, 0x1c, 0x56, 0xbc, 0x46, 0xf6, 0x95, - 0x6e, 0x75, 0xd7, 0xe5, 0x5a, 0x86, 0x12, 0xee, 0xa0, 0x4d, 0x27, 0x2c, 0xcb, 0x47, 0x47, 0x12, - 0x3a, 0xda, 0x2c, 0x70, 0x64, 0x88, 0x4f, 0xd8, 0xab, 0x29, 0x18, 0xeb, 0x38, 0x68, 0x09, 0x86, - 0xab, 0x41, 0x2c, 0xae, 0xa3, 0x9e, 0x62, 0xc2, 0xec, 0x9d, 0x54, 0x04, 0xce, 0x5f, 0x2f, 0xab, - 0x8b, 0xa8, 0x0f, 0xe6, 0x24, 0x58, 0x54, 0xe5, 0x38, 0xad, 0x8f, 0x56, 0x18, 0x31, 0xf1, 0xb6, - 0x16, 0x8f, 0xe7, 0x78, 0xb8, 0x8b, 0xc3, 0x68, 0xfe, 0xba, 0x7c, 0x1d, 0x6c, 0x4c, 0xb0, 0x13, - 0x8f, 0x64, 0xa5, 0x14, 0xb4, 0x67, 0x7c, 0x4f, 0x1f, 0xf8, 0x8c, 0x2f, 0xcb, 0xac, 0x9a, 0x34, - 0x94, 0x7b, 0xf8, 0xa2, 0xb5, 0xcc, 0xaa, 0x69, 0xa4, 0xa4, 0xc8, 0xac, 0x9a, 0x02, 0xb0, 0xce, - 0x12, 0xad, 0x76, 0x73, 0x93, 0x9f, 0x61, 0x42, 0xe3, 0xf0, 0x4e, 0x6f, 0xdd, 0x5f, 0x7a, 0xf6, - 0x40, 0x7f, 0x69, 0x87, 0x7f, 0xf7, 0xdc, 0x21, 0xfc, 0xbb, 0x75, 0x96, 0xf3, 0x72, 0x71, 0x4e, - 0xb8, 0xd4, 0x2d, 0x9c, 0xef, 0x58, 0x8a, 0x0e, 0x1e, 0x79, 0xca, 0xfe, 0xc5, 0x9c, 0x41, 0xd7, - 0x80, 0xea, 0x0b, 0x47, 0x0e, 0xa8, 0xa6, 0xe2, 0x39, 0x85, 0xb3, 0xe4, 0xa9, 0x45, 0x21, 0x9e, - 0x53, 0x30, 0xd6, 0x71, 0xb2, 0xde, 0xd2, 0xfb, 0x8f, 0xcd, 0x5b, 0x3a, 0x79, 0x02, 0xde, 0xd2, - 0x07, 0x7a, 0xf6, 0x96, 0xde, 0x82, 0x33, 0xad, 0xb0, 0x3a, 0xef, 0xc7, 0x51, 0x9b, 0x5d, 0x8a, - 0x9b, 0x6d, 0x57, 0x6b, 0x24, 0x61, 0xee, 0xd6, 0x91, 0xcb, 0xef, 0xd4, 0x1b, 0xd9, 0x62, 0x0b, - 0x59, 0xae, 0xd1, 0x4c, 0x05, 0x66, 0x3a, 0x61, 0x51, 0xb7, 0x39, 0x85, 0x38, 0x8f, 0x85, 0xee, - 0xa7, 0x7d, 0xf8, 0x64, 0xfc, 0xb4, 0x1f, 0x80, 0xa1, 0xb8, 0xde, 0x4e, 0xaa, 0xe1, 0x4e, 0xc0, - 0x9c, 0xf1, 0xc3, 0xb3, 0xef, 0x50, 0xa6, 0x6c, 0x01, 0xbf, 0xbd, 0x37, 0x35, 0x21, 0xff, 0xd7, - 0xac, 0xd8, 0x02, 0x82, 0xbe, 0xd1, 0xe5, 0xfe, 0x8e, 0x7b, 0x9c, 0xf7, 0x77, 0x2e, 0x1c, 0xea, - 0xee, 0x4e, 0x9e, 0x33, 0xfa, 0x91, 0xb7, 0x9d, 0x33, 0xfa, 0x6b, 0x0e, 0x8c, 0x6d, 0xeb, 0x2e, - 0x03, 0xe1, 0x30, 0xb7, 0x10, 0xb8, 0x63, 0x78, 0x22, 0x66, 0x5d, 0x2a, 0xe7, 0x0c, 0xd0, 0xed, - 0x2c, 0x00, 0x9b, 0x2d, 0xc9, 0x09, 0x2a, 0x7a, 0xf4, 0x5e, 0x05, 0x15, 0xbd, 0xce, 0xe4, 0x98, - 0x3c, 0xe4, 0x32, 0x2f, 0xba, 0xdd, 0x98, 0x62, 0x29, 0x13, 0x55, 0x48, 0xb1, 0xce, 0x0f, 0x7d, - 0xde, 0x81, 0x09, 0x79, 0x2e, 0x13, 0x2e, 0xbf, 0x58, 0x44, 0x45, 0xda, 0x3c, 0x0e, 0xb2, 0xb0, - 0xfa, 0xf5, 0x0c, 0x1f, 0xdc, 0xc1, 0x99, 0x4a, 0x75, 0x15, 0x84, 0x56, 0x8b, 0x59, 0xf0, 0xaf, - 0xd0, 0x61, 0x66, 0x52, 0x30, 0xd6, 0x71, 0xd0, 0x37, 0xd5, 0xdb, 0xfc, 0x4f, 0x30, 0x81, 0xfe, - 0x82, 0x65, 0xdd, 0xd4, 0xc6, 0x03, 0xfd, 0xe8, 0x4b, 0x0e, 0x4c, 0xec, 0x64, 0x0c, 0x1a, 0x22, - 0x2c, 0x14, 0xdb, 0x37, 0x95, 0xf0, 0xe1, 0xce, 0x42, 0x71, 0x47, 0x0b, 0xd0, 0xe7, 0x4c, 0x43, - 0x27, 0x8f, 0x1f, 0xb5, 0x38, 0x80, 0x19, 0xc3, 0x2a, 0xbf, 0xe6, 0x96, 0x6f, 0xf1, 0xbc, 0xeb, - 0xf8, 0x90, 0x49, 0xda, 0x99, 0xf4, 0x63, 0xe5, 0x54, 0x25, 0xa6, 0xbd, 0xc5, 0xc2, 0x62, 0x37, - 0x3e, 0xbf, 0x6e, 0x6e, 0xf9, 0xcf, 0x67, 0x60, 0xdc, 0xf4, 0xed, 0xa1, 0x77, 0x99, 0xcf, 0x3e, - 0x5c, 0xcc, 0x66, 0xd0, 0x1f, 0x93, 0xf8, 0x46, 0x16, 0x7d, 0x23, 0xcd, 0x7d, 0xe1, 0x58, 0xd3, - 0xdc, 0xf7, 0x9d, 0x4c, 0x9a, 0xfb, 0x89, 0xe3, 0x48, 0x73, 0x7f, 0xfa, 0x50, 0x69, 0xee, 0xb5, - 0x67, 0x06, 0xfa, 0xef, 0xf0, 0xcc, 0xc0, 0x0c, 0x9c, 0x92, 0x77, 0x7f, 0x88, 0xc8, 0x24, 0xce, - 0xdd, 0xfe, 0x17, 0x44, 0x95, 0x53, 0x73, 0x66, 0x31, 0xce, 0xe2, 0xd3, 0x45, 0x56, 0x0c, 0x58, - 0xcd, 0x01, 0x5b, 0x6f, 0x10, 0x99, 0x53, 0x8b, 0x1d, 0x9f, 0x85, 0x88, 0x92, 0xd1, 0xce, 0x45, - 0x06, 0xbb, 0x2d, 0xff, 0xc1, 0xbc, 0x05, 0xe8, 0x25, 0x28, 0x85, 0x9b, 0x9b, 0x8d, 0xd0, 0xab, - 0xa6, 0xb9, 0xf8, 0x65, 0x5c, 0x02, 0xbf, 0xbb, 0xa9, 0x52, 0xb7, 0xae, 0x76, 0xc1, 0xc3, 0x5d, - 0x29, 0xa0, 0x37, 0xa9, 0x62, 0x92, 0x84, 0x11, 0xa9, 0xa6, 0xb6, 0x9a, 0x61, 0xd6, 0x67, 0x62, - 0xbd, 0xcf, 0x65, 0x93, 0x0f, 0xef, 0xbd, 0xfa, 0x28, 0x99, 0x52, 0x9c, 0x6d, 0x16, 0x8a, 0xe0, - 0x7c, 0x2b, 0xcf, 0x54, 0x14, 0x8b, 0x1b, 0x4b, 0x07, 0x19, 0xac, 0xe4, 0xd2, 0x3d, 0x9f, 0x6b, - 0x6c, 0x8a, 0x71, 0x17, 0xca, 0x7a, 0xbe, 0xfc, 0xa1, 0x93, 0xc9, 0x97, 0xff, 0x71, 0x80, 0x8a, - 0x4c, 0xe5, 0x25, 0x8d, 0x0f, 0x4b, 0x56, 0xae, 0xd2, 0x70, 0x9a, 0xda, 0x13, 0xa5, 0x8a, 0x0d, - 0xd6, 0x58, 0xa2, 0xff, 0x93, 0xfb, 0xa0, 0x04, 0xb7, 0xb0, 0xd4, 0xac, 0xcf, 0x89, 0xb7, 0xdd, - 0xa3, 0x12, 0xff, 0xd4, 0x81, 0x49, 0x3e, 0xf3, 0xb2, 0xca, 0x3d, 0x55, 0x2d, 0xc4, 0xdd, 0x1e, - 0xdb, 0xa1, 0x2b, 0x2c, 0x8a, 0xaf, 0x6c, 0x70, 0x65, 0x8e, 0xee, 0x03, 0x5a, 0x82, 0xbe, 0x92, - 0x73, 0xa4, 0x38, 0x65, 0xcb, 0x66, 0x99, 0xff, 0x2c, 0xc0, 0x99, 0xfd, 0x5e, 0x4e, 0x11, 0xff, - 0xbc, 0xab, 0x49, 0x15, 0xb1, 0xe6, 0xfd, 0xe2, 0x31, 0x99, 0x54, 0xf5, 0xb7, 0x0b, 0x0e, 0x65, - 0x58, 0xfd, 0x82, 0x03, 0x13, 0x5e, 0x26, 0xd4, 0x84, 0xd9, 0x81, 0xac, 0xd8, 0xa4, 0x66, 0xa2, - 0x34, 0x7e, 0x85, 0x29, 0x79, 0xd9, 0xa8, 0x16, 0xdc, 0xc1, 0x7c, 0xf2, 0xd3, 0x0e, 0x7f, 0x66, - 0xa9, 0xab, 0x5e, 0xb4, 0x61, 0xea, 0x45, 0xcb, 0x36, 0x1f, 0x7a, 0xd1, 0x15, 0xb4, 0x5f, 0x75, - 0xe0, 0x6c, 0x9e, 0xd8, 0xce, 0x69, 0xd2, 0x47, 0xcc, 0x26, 0x59, 0x3c, 0x8a, 0xe8, 0x0d, 0xb2, - 0xf3, 0xce, 0xc4, 0x9f, 0x0e, 0x6b, 0xae, 0xb5, 0x84, 0xb4, 0xac, 0x07, 0x26, 0x07, 0x30, 0xe0, - 0x07, 0x0d, 0x3f, 0x20, 0xe2, 0x12, 0xa2, 0xcd, 0x83, 0x99, 0x78, 0xd7, 0x85, 0x52, 0xc7, 0x82, - 0xcb, 0x3d, 0xf6, 0xb4, 0x65, 0x5f, 0xca, 0xea, 0x3f, 0xf9, 0x97, 0xb2, 0x76, 0x60, 0x78, 0xc7, - 0x4f, 0xea, 0x2c, 0x42, 0x40, 0x38, 0xb0, 0x2c, 0x5c, 0xde, 0xa3, 0xe4, 0xd2, 0xbe, 0xdf, 0x94, - 0x0c, 0x70, 0xca, 0x0b, 0x5d, 0xe2, 0x8c, 0x59, 0x38, 0x72, 0x36, 0x4e, 0xf4, 0xa6, 0x2c, 0xc0, - 0x29, 0x0e, 0x1d, 0xac, 0x51, 0xfa, 0x4b, 0x26, 0xe9, 0x11, 0xb9, 0x64, 0x6d, 0xe4, 0x08, 0x14, - 0x14, 0xf9, 0x15, 0xd9, 0x9b, 0x1a, 0x0f, 0x6c, 0x70, 0x54, 0xe9, 0x7c, 0x87, 0xba, 0xa6, 0xf3, - 0x7d, 0x8d, 0x69, 0x21, 0x89, 0x1f, 0xb4, 0xc9, 0x6a, 0x20, 0x82, 0x98, 0x97, 0xed, 0x5c, 0xe8, - 0xe5, 0x34, 0xf9, 0xb9, 0x32, 0xfd, 0x8d, 0x35, 0x7e, 0x9a, 0x1f, 0x61, 0xe4, 0x40, 0x3f, 0x42, - 0x6a, 0x47, 0x18, 0xb5, 0x6e, 0x47, 0x48, 0x48, 0xcb, 0x8a, 0x1d, 0xe1, 0x6d, 0x75, 0xc6, 0xfd, - 0x0b, 0x07, 0x90, 0x52, 0x26, 0xbc, 0x78, 0x4b, 0x3c, 0x6f, 0x78, 0xfc, 0x91, 0x82, 0x9f, 0x70, - 0x00, 0x02, 0xf5, 0x9e, 0xa2, 0xdd, 0x5d, 0x8b, 0xd3, 0x4c, 0x1b, 0x90, 0xc2, 0xb0, 0xc6, 0xd3, - 0xfd, 0x1f, 0x4e, 0x1a, 0x90, 0x9b, 0xf6, 0xfd, 0x04, 0x22, 0xa3, 0x76, 0xcd, 0xc8, 0xa8, 0x75, - 0x8b, 0xf6, 0x68, 0xd5, 0x8d, 0x2e, 0x31, 0x52, 0x3f, 0x29, 0xc0, 0x29, 0x1d, 0xb9, 0x4c, 0x4e, - 0xe2, 0x63, 0xef, 0x18, 0x61, 0xa1, 0x37, 0xec, 0xf6, 0xb7, 0x2c, 0xdc, 0x1a, 0x79, 0x21, 0xc8, - 0x1f, 0xcf, 0x84, 0x20, 0xdf, 0xb4, 0xcf, 0xfa, 0xe0, 0x38, 0xe4, 0xff, 0xea, 0xc0, 0x99, 0x4c, - 0x8d, 0x13, 0x98, 0x60, 0xdb, 0xe6, 0x04, 0x7b, 0xce, 0x7a, 0xaf, 0xbb, 0xcc, 0xae, 0x6f, 0x15, - 0x3a, 0x7a, 0xcb, 0x4e, 0x26, 0x9f, 0x72, 0xa0, 0x98, 0x78, 0xf1, 0x96, 0x0c, 0x52, 0xfa, 0xc8, - 0xb1, 0xcc, 0x80, 0x69, 0xfa, 0xbf, 0x90, 0xce, 0xaa, 0x7d, 0x0c, 0x86, 0x39, 0xf7, 0xc9, 0x4f, - 0x3a, 0x00, 0x29, 0xd2, 0xbd, 0x52, 0x59, 0xdd, 0xef, 0x14, 0xe0, 0x5c, 0xee, 0x34, 0x42, 0x9f, - 0x51, 0x66, 0x26, 0xc7, 0x76, 0x08, 0x9e, 0xc1, 0x48, 0xb7, 0x36, 0x8d, 0x19, 0xd6, 0x26, 0x61, - 0x64, 0xba, 0x57, 0x07, 0x0e, 0x21, 0xa6, 0xb5, 0xc1, 0xfa, 0xb1, 0x93, 0x46, 0x75, 0xaa, 0x64, - 0x3d, 0x7f, 0x09, 0x6f, 0xa6, 0xb8, 0x3f, 0xd1, 0xc2, 0xf6, 0x65, 0x47, 0x4f, 0x40, 0x56, 0xec, - 0x98, 0xb2, 0x02, 0xdb, 0x77, 0x8e, 0x76, 0x11, 0x16, 0x1f, 0x85, 0x3c, 0x6f, 0x69, 0x6f, 0x99, - 0xfe, 0x8c, 0x3b, 0x9e, 0x85, 0x9e, 0xef, 0x78, 0x8e, 0xc1, 0xc8, 0x8b, 0x7e, 0x4b, 0x39, 0xf6, - 0xa6, 0xbf, 0xfb, 0xa3, 0x8b, 0xf7, 0x7d, 0xef, 0x47, 0x17, 0xef, 0xfb, 0xe1, 0x8f, 0x2e, 0xde, - 0xf7, 0x89, 0xfd, 0x8b, 0xce, 0x77, 0xf7, 0x2f, 0x3a, 0xdf, 0xdb, 0xbf, 0xe8, 0xfc, 0x70, 0xff, - 0xa2, 0xf3, 0xef, 0xf7, 0x2f, 0x3a, 0x7f, 0xef, 0x3f, 0x5c, 0xbc, 0xef, 0xc5, 0x21, 0xd9, 0xb1, - 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xe9, 0x3a, 0x9e, 0x0a, 0xf2, 0xd3, 0x00, 0x00, + // 10910 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0xbd, 0x6b, 0x70, 0x64, 0xc7, + 0x75, 0x18, 0xcc, 0x3b, 0xc0, 0x00, 0x83, 0x83, 0xc7, 0x62, 0x7b, 0x5f, 0x43, 0x90, 0x5c, 0xd0, + 0x97, 0x22, 0x3f, 0xd2, 0xa6, 0xb0, 0xe6, 0x52, 0xfa, 0xc2, 0x48, 0x89, 0x24, 0x3c, 0x16, 0xd8, + 0x25, 0x16, 0x0b, 0xb0, 0x07, 0xcb, 0x35, 0x29, 0x5a, 0xd2, 0xc5, 0x4c, 0x63, 0xe6, 0x12, 0x33, + 0xf7, 0x8e, 0xee, 0xbd, 0x83, 0x5d, 0xf0, 0x21, 0x29, 0xb4, 0x9e, 0xb1, 0x6c, 0x25, 0xb2, 0x24, + 0x4b, 0x4a, 0x52, 0xa5, 0x28, 0x52, 0xc2, 0x92, 0x5d, 0x71, 0xd9, 0xbf, 0x52, 0x76, 0x7e, 0xa5, + 0x52, 0x2e, 0xa5, 0x9c, 0xaa, 0xc8, 0x65, 0xa5, 0xa4, 0x1f, 0x36, 0x18, 0x21, 0x89, 0x7e, 0x24, + 0x51, 0x55, 0xac, 0x8a, 0x1d, 0x7b, 0xf3, 0xa8, 0x54, 0x3f, 0x6f, 0xf7, 0x9d, 0x3b, 0xd8, 0x01, + 0xb6, 0x81, 0x65, 0xd9, 0xbf, 0x80, 0x39, 0x7d, 0xfa, 0x9c, 0xee, 0xbe, 0xdd, 0xa7, 0x4f, 0x9f, + 0x73, 0xfa, 0x34, 0xac, 0xd5, 0xfd, 0xa4, 0xd1, 0xd9, 0x98, 0xa9, 0x86, 0xad, 0x0b, 0x5e, 0x54, + 0x0f, 0xdb, 0x51, 0xf8, 0x32, 0xfb, 0xe7, 0x9d, 0x37, 0xc3, 0x68, 0x6b, 0xb3, 0x19, 0xde, 0x8c, + 0x2f, 0x6c, 0x3f, 0x7d, 0xa1, 0xbd, 0x55, 0xbf, 0xe0, 0xb5, 0xfd, 0xf8, 0x82, 0x84, 0x5e, 0xd8, + 0x7e, 0xca, 0x6b, 0xb6, 0x1b, 0xde, 0x53, 0x17, 0xea, 0x24, 0x20, 0x91, 0x97, 0x90, 0xda, 0x4c, + 0x3b, 0x0a, 0x93, 0x10, 0x7d, 0x20, 0xa5, 0x38, 0x23, 0x29, 0xb2, 0x7f, 0x3e, 0xac, 0x28, 0xce, + 0x6c, 0x3f, 0x3d, 0xd3, 0xde, 0xaa, 0xcf, 0x50, 0x8a, 0x33, 0x12, 0x3a, 0x23, 0x29, 0x4e, 0xbd, + 0x53, 0x6b, 0x53, 0x3d, 0xac, 0x87, 0x17, 0x18, 0xe1, 0x8d, 0xce, 0x26, 0xfb, 0xc5, 0x7e, 0xb0, + 0xff, 0x38, 0xc3, 0x29, 0x77, 0xeb, 0x99, 0x78, 0xc6, 0x0f, 0x69, 0xfb, 0x2e, 0x54, 0xc3, 0x88, + 0x5c, 0xd8, 0xee, 0x6a, 0xd4, 0xd4, 0x3b, 0x34, 0x9c, 0x76, 0xd8, 0xf4, 0xab, 0x3b, 0x79, 0x58, + 0xef, 0x4a, 0xb1, 0x5a, 0x5e, 0xb5, 0xe1, 0x07, 0x24, 0xda, 0x49, 0xbb, 0xde, 0x22, 0x89, 0x97, + 0x57, 0xeb, 0x42, 0xaf, 0x5a, 0x51, 0x27, 0x48, 0xfc, 0x16, 0xe9, 0xaa, 0xf0, 0xff, 0xdf, 0xa9, + 0x42, 0x5c, 0x6d, 0x90, 0x96, 0xd7, 0x55, 0xef, 0xe9, 0x5e, 0xf5, 0x3a, 0x89, 0xdf, 0xbc, 0xe0, + 0x07, 0x49, 0x9c, 0x44, 0xd9, 0x4a, 0xee, 0x25, 0x18, 0x9a, 0x6d, 0x85, 0x9d, 0x20, 0x41, 0xef, + 0x85, 0xe2, 0xb6, 0xd7, 0xec, 0x90, 0xb2, 0xf3, 0xb0, 0xf3, 0xf8, 0xc8, 0xdc, 0xa3, 0xdf, 0xdd, + 0x9d, 0xbe, 0x6f, 0x6f, 0x77, 0xba, 0xf8, 0x3c, 0x05, 0xde, 0xde, 0x9d, 0x3e, 0x4d, 0x82, 0x6a, + 0x58, 0xf3, 0x83, 0xfa, 0x85, 0x97, 0xe3, 0x30, 0x98, 0xb9, 0xd6, 0x69, 0x6d, 0x90, 0x08, 0xf3, + 0x3a, 0xee, 0x1f, 0x15, 0xe0, 0xc4, 0x6c, 0x54, 0x6d, 0xf8, 0xdb, 0xa4, 0x92, 0x50, 0xfa, 0xf5, + 0x1d, 0xd4, 0x80, 0x81, 0xc4, 0x8b, 0x18, 0xb9, 0xd1, 0x8b, 0x2b, 0x33, 0x77, 0xfb, 0xdd, 0x67, + 0xd6, 0xbd, 0x48, 0xd2, 0x9e, 0x1b, 0xde, 0xdb, 0x9d, 0x1e, 0x58, 0xf7, 0x22, 0x4c, 0x59, 0xa0, + 0x26, 0x0c, 0x06, 0x61, 0x40, 0xca, 0x05, 0xc6, 0xea, 0xda, 0xdd, 0xb3, 0xba, 0x16, 0x06, 0xaa, + 0x1f, 0x73, 0xa5, 0xbd, 0xdd, 0xe9, 0x41, 0x0a, 0xc1, 0x8c, 0x0b, 0xed, 0xd7, 0x2b, 0x7e, 0xbb, + 0x3c, 0x60, 0xab, 0x5f, 0x2f, 0xfa, 0x6d, 0xb3, 0x5f, 0x2f, 0xfa, 0x6d, 0x4c, 0x59, 0xb8, 0x9f, + 0x2b, 0xc0, 0xc8, 0x6c, 0x54, 0xef, 0xb4, 0x48, 0x90, 0xc4, 0xe8, 0xe3, 0x00, 0x6d, 0x2f, 0xf2, + 0x5a, 0x24, 0x21, 0x51, 0x5c, 0x76, 0x1e, 0x1e, 0x78, 0x7c, 0xf4, 0xe2, 0xf2, 0xdd, 0xb3, 0x5f, + 0x93, 0x34, 0xe7, 0x90, 0xf8, 0xe4, 0xa0, 0x40, 0x31, 0xd6, 0x58, 0xa2, 0x57, 0x61, 0xc4, 0x8b, + 0x12, 0x7f, 0xd3, 0xab, 0x26, 0x71, 0xb9, 0xc0, 0xf8, 0x3f, 0x7b, 0xf7, 0xfc, 0x67, 0x05, 0xc9, + 0xb9, 0x93, 0x82, 0xfd, 0x88, 0x84, 0xc4, 0x38, 0xe5, 0xe7, 0xfe, 0xee, 0x20, 0x8c, 0xce, 0x46, + 0xc9, 0xd2, 0x7c, 0x25, 0xf1, 0x92, 0x4e, 0x8c, 0xfe, 0xc0, 0x81, 0x53, 0x31, 0x1f, 0x36, 0x9f, + 0xc4, 0x6b, 0x51, 0x58, 0x25, 0x71, 0x4c, 0x6a, 0x62, 0x5c, 0x36, 0xad, 0xb4, 0x4b, 0x32, 0x9b, + 0xa9, 0x74, 0x33, 0xba, 0x14, 0x24, 0xd1, 0xce, 0xdc, 0x53, 0xa2, 0xcd, 0xa7, 0x72, 0x30, 0xde, + 0x78, 0x6b, 0x1a, 0xc9, 0xae, 0x50, 0x4a, 0xfc, 0x13, 0xe3, 0xbc, 0x56, 0xa3, 0xaf, 0x39, 0x30, + 0xd6, 0x0e, 0x6b, 0x31, 0x26, 0xd5, 0xb0, 0xd3, 0x26, 0x35, 0x31, 0xbc, 0x1f, 0xb6, 0xdb, 0x8d, + 0x35, 0x8d, 0x03, 0x6f, 0xff, 0x69, 0xd1, 0xfe, 0x31, 0xbd, 0x08, 0x1b, 0x4d, 0x41, 0xcf, 0xc0, + 0x58, 0x10, 0x26, 0x95, 0x36, 0xa9, 0xfa, 0x9b, 0x3e, 0xa9, 0xb1, 0x89, 0x5f, 0x4a, 0x6b, 0x5e, + 0xd3, 0xca, 0xb0, 0x81, 0x39, 0xb5, 0x08, 0xe5, 0x5e, 0x23, 0x87, 0x26, 0x61, 0x60, 0x8b, 0xec, + 0x70, 0x61, 0x83, 0xe9, 0xbf, 0xe8, 0xb4, 0x14, 0x40, 0x74, 0x19, 0x97, 0x84, 0x64, 0x79, 0x4f, + 0xe1, 0x19, 0x67, 0xea, 0xfd, 0x70, 0xb2, 0xab, 0xe9, 0x07, 0x21, 0xe0, 0x7e, 0x6f, 0x08, 0x4a, + 0xf2, 0x53, 0xa0, 0x87, 0x61, 0x30, 0xf0, 0x5a, 0x52, 0xce, 0x8d, 0x89, 0x7e, 0x0c, 0x5e, 0xf3, + 0x5a, 0x74, 0x85, 0x7b, 0x2d, 0x42, 0x31, 0xda, 0x5e, 0xd2, 0x60, 0x74, 0x34, 0x8c, 0x35, 0x2f, + 0x69, 0x60, 0x56, 0x82, 0x1e, 0x84, 0xc1, 0x56, 0x58, 0x23, 0x6c, 0x2c, 0x8a, 0x5c, 0x42, 0xac, + 0x84, 0x35, 0x82, 0x19, 0x94, 0xd6, 0xdf, 0x8c, 0xc2, 0x56, 0x79, 0xd0, 0xac, 0xbf, 0x18, 0x85, + 0x2d, 0xcc, 0x4a, 0xd0, 0x57, 0x1d, 0x98, 0x94, 0x73, 0xfb, 0x6a, 0x58, 0xf5, 0x12, 0x3f, 0x0c, + 0xca, 0x45, 0x26, 0x51, 0xb0, 0xbd, 0x25, 0x25, 0x29, 0xcf, 0x95, 0x45, 0x13, 0x26, 0xb3, 0x25, + 0xb8, 0xab, 0x15, 0xe8, 0x22, 0x40, 0xbd, 0x19, 0x6e, 0x78, 0x4d, 0x3a, 0x20, 0xe5, 0x21, 0xd6, + 0x05, 0x25, 0x19, 0x96, 0x54, 0x09, 0xd6, 0xb0, 0xd0, 0x2d, 0x18, 0xf6, 0xb8, 0xf4, 0x2f, 0x0f, + 0xb3, 0x4e, 0x3c, 0x67, 0xa3, 0x13, 0xc6, 0x76, 0x32, 0x37, 0xba, 0xb7, 0x3b, 0x3d, 0x2c, 0x80, + 0x58, 0xb2, 0x43, 0x4f, 0x42, 0x29, 0x6c, 0xd3, 0x76, 0x7b, 0xcd, 0x72, 0x89, 0x4d, 0xcc, 0x49, + 0xd1, 0xd6, 0xd2, 0xaa, 0x80, 0x63, 0x85, 0x81, 0x9e, 0x80, 0xe1, 0xb8, 0xb3, 0x41, 0xbf, 0x63, + 0x79, 0x84, 0x75, 0xec, 0x84, 0x40, 0x1e, 0xae, 0x70, 0x30, 0x96, 0xe5, 0xe8, 0xdd, 0x30, 0x1a, + 0x91, 0x6a, 0x27, 0x8a, 0x09, 0xfd, 0xb0, 0x65, 0x60, 0xb4, 0x4f, 0x09, 0xf4, 0x51, 0x9c, 0x16, + 0x61, 0x1d, 0x0f, 0xbd, 0x0f, 0x26, 0xe8, 0x07, 0xbe, 0x74, 0xab, 0x1d, 0x91, 0x38, 0xa6, 0x5f, + 0x75, 0x94, 0x31, 0x3a, 0x2b, 0x6a, 0x4e, 0x2c, 0x1a, 0xa5, 0x38, 0x83, 0x8d, 0x5e, 0x03, 0xf0, + 0x94, 0xcc, 0x28, 0x8f, 0xb1, 0xc1, 0xbc, 0x6a, 0x6f, 0x46, 0x2c, 0xcd, 0xcf, 0x4d, 0xd0, 0xef, + 0x98, 0xfe, 0xc6, 0x1a, 0x3f, 0x3a, 0x3e, 0x35, 0xd2, 0x24, 0x09, 0xa9, 0x95, 0xc7, 0x59, 0x87, + 0xd5, 0xf8, 0x2c, 0x70, 0x30, 0x96, 0xe5, 0xee, 0x3f, 0x28, 0x80, 0x46, 0x05, 0xcd, 0x41, 0x49, + 0xc8, 0x35, 0xb1, 0x24, 0xe7, 0x1e, 0x93, 0xdf, 0x41, 0x7e, 0xc1, 0xdb, 0xbb, 0xb9, 0xf2, 0x50, + 0xd5, 0x43, 0xaf, 0xc3, 0x68, 0x3b, 0xac, 0xad, 0x90, 0xc4, 0xab, 0x79, 0x89, 0x27, 0x76, 0x73, + 0x0b, 0x3b, 0x8c, 0xa4, 0x38, 0x77, 0x82, 0x7e, 0xba, 0xb5, 0x94, 0x05, 0xd6, 0xf9, 0xa1, 0x67, + 0x01, 0xc5, 0x24, 0xda, 0xf6, 0xab, 0x64, 0xb6, 0x5a, 0xa5, 0x2a, 0x11, 0x5b, 0x00, 0x03, 0xac, + 0x33, 0x53, 0xa2, 0x33, 0xa8, 0xd2, 0x85, 0x81, 0x73, 0x6a, 0xb9, 0xdf, 0x2f, 0xc0, 0x84, 0xd6, + 0xd7, 0x36, 0xa9, 0xa2, 0x37, 0x1d, 0x38, 0xa1, 0xb6, 0xb3, 0xb9, 0x9d, 0x6b, 0x74, 0x56, 0xf1, + 0xcd, 0x8a, 0xd8, 0xfc, 0xbe, 0x94, 0x97, 0xfa, 0x29, 0xf8, 0x70, 0x59, 0x7f, 0x4e, 0xf4, 0xe1, + 0x44, 0xa6, 0x14, 0x67, 0x9b, 0x35, 0xf5, 0x15, 0x07, 0x4e, 0xe7, 0x91, 0xc8, 0x91, 0xb9, 0x0d, + 0x5d, 0xe6, 0x5a, 0x15, 0x5e, 0x94, 0x2b, 0xed, 0x8c, 0x2e, 0xc7, 0xff, 0x6f, 0x01, 0x26, 0xf5, + 0x29, 0xc4, 0x34, 0x81, 0x7f, 0xe5, 0xc0, 0x19, 0xd9, 0x03, 0x4c, 0xe2, 0x4e, 0x33, 0x33, 0xbc, + 0x2d, 0xab, 0xc3, 0xcb, 0x77, 0xd2, 0xd9, 0x3c, 0x7e, 0x7c, 0x98, 0x1f, 0x12, 0xc3, 0x7c, 0x26, + 0x17, 0x07, 0xe7, 0x37, 0x75, 0xea, 0x5b, 0x0e, 0x4c, 0xf5, 0x26, 0x9a, 0x33, 0xf0, 0x6d, 0x73, + 0xe0, 0x5f, 0xb4, 0xd7, 0x49, 0xce, 0x9e, 0x0d, 0x3f, 0xeb, 0xac, 0xfe, 0x01, 0x7e, 0xb3, 0x04, + 0x5d, 0x7b, 0x08, 0x7a, 0x0a, 0x46, 0x85, 0x38, 0xbe, 0x1a, 0xd6, 0x63, 0xd6, 0xc8, 0x12, 0x5f, + 0x6b, 0xb3, 0x29, 0x18, 0xeb, 0x38, 0xa8, 0x06, 0x85, 0xf8, 0x69, 0xd1, 0x74, 0x0b, 0xe2, 0xad, + 0xf2, 0xb4, 0xd2, 0x22, 0x87, 0xf6, 0x76, 0xa7, 0x0b, 0x95, 0xa7, 0x71, 0x21, 0x7e, 0x9a, 0x6a, + 0xea, 0x75, 0x3f, 0xb1, 0xa7, 0xa9, 0x2f, 0xf9, 0x89, 0xe2, 0xc3, 0x34, 0xf5, 0x25, 0x3f, 0xc1, + 0x94, 0x05, 0x3d, 0x81, 0x34, 0x92, 0xa4, 0xcd, 0x76, 0x7c, 0x2b, 0x27, 0x90, 0xcb, 0xeb, 0xeb, + 0x6b, 0x8a, 0x17, 0xd3, 0x2f, 0x28, 0x04, 0x33, 0x2e, 0xe8, 0xb3, 0x0e, 0x1d, 0x71, 0x5e, 0x18, + 0x46, 0x3b, 0x42, 0x71, 0xb8, 0x6e, 0x6f, 0x0a, 0x84, 0xd1, 0x8e, 0x62, 0x2e, 0x3e, 0xa4, 0x2a, + 0xc0, 0x3a, 0x6b, 0xd6, 0xf1, 0xda, 0x66, 0xcc, 0xf4, 0x04, 0x3b, 0x1d, 0x5f, 0x58, 0xac, 0x64, + 0x3a, 0xbe, 0xb0, 0x58, 0xc1, 0x8c, 0x0b, 0xfd, 0xa0, 0x91, 0x77, 0x53, 0xe8, 0x18, 0x16, 0x3e, + 0x28, 0xf6, 0x6e, 0x9a, 0x1f, 0x14, 0x7b, 0x37, 0x31, 0x65, 0x41, 0x39, 0x85, 0x71, 0xcc, 0x54, + 0x0a, 0x2b, 0x9c, 0x56, 0x2b, 0x15, 0x93, 0xd3, 0x6a, 0xa5, 0x82, 0x29, 0x0b, 0x36, 0x49, 0xab, + 0x31, 0xd3, 0x47, 0xec, 0x4c, 0xd2, 0xf9, 0x0c, 0xa7, 0xa5, 0xf9, 0x0a, 0xa6, 0x2c, 0xa8, 0xc8, + 0xf0, 0x5e, 0xe9, 0x44, 0x5c, 0x99, 0x19, 0xbd, 0xb8, 0x6a, 0x61, 0xbe, 0x50, 0x72, 0x8a, 0xdb, + 0xc8, 0xde, 0xee, 0x74, 0x91, 0x81, 0x30, 0x67, 0xe4, 0xfe, 0xfe, 0x40, 0x2a, 0x2e, 0xa4, 0x3c, + 0x47, 0x7f, 0x9f, 0x6d, 0x84, 0x42, 0x16, 0x08, 0xd5, 0xd7, 0x39, 0x32, 0xd5, 0xf7, 0x14, 0xdf, + 0xf1, 0x0c, 0x76, 0x38, 0xcb, 0x1f, 0x7d, 0xd1, 0xe9, 0x3e, 0xdb, 0x7a, 0xf6, 0xf7, 0xb2, 0x74, + 0x63, 0xe6, 0x7b, 0xc5, 0xbe, 0x47, 0xde, 0xa9, 0xcf, 0x3a, 0xa9, 0x12, 0x11, 0xf7, 0xda, 0x07, + 0x3e, 0x62, 0xee, 0x03, 0x16, 0x0f, 0xe4, 0xba, 0xdc, 0xff, 0x9c, 0x03, 0xe3, 0x12, 0x4e, 0xd5, + 0xe3, 0x18, 0xdd, 0x82, 0x92, 0x6c, 0xa9, 0xf8, 0x7a, 0x36, 0x6d, 0x01, 0x4a, 0x89, 0x57, 0x8d, + 0x51, 0xdc, 0xdc, 0x37, 0x87, 0x00, 0xa5, 0x7b, 0x55, 0x3b, 0x8c, 0x7d, 0x26, 0x89, 0x0e, 0xb1, + 0x0b, 0x05, 0xda, 0x2e, 0xf4, 0xbc, 0xcd, 0x5d, 0x28, 0x6d, 0x96, 0xb1, 0x1f, 0x7d, 0x31, 0x23, + 0xb7, 0xf9, 0xc6, 0xf4, 0xe1, 0x23, 0x91, 0xdb, 0x5a, 0x13, 0xf6, 0x97, 0xe0, 0xdb, 0x42, 0x82, + 0xf3, 0xad, 0xeb, 0x17, 0xec, 0x4a, 0x70, 0xad, 0x15, 0x59, 0x59, 0x1e, 0x71, 0x09, 0xcb, 0xf7, + 0xae, 0x1b, 0x56, 0x25, 0xac, 0xc6, 0xd5, 0x94, 0xb5, 0x11, 0x97, 0xb5, 0x43, 0xb6, 0x78, 0x6a, + 0xb2, 0x36, 0xcb, 0x53, 0x49, 0xdd, 0x57, 0xa4, 0xd4, 0xe5, 0xbb, 0xd6, 0x0b, 0x96, 0xa5, 0xae, + 0xc6, 0xb7, 0x5b, 0xfe, 0x7e, 0x14, 0xce, 0x74, 0xe3, 0x61, 0xb2, 0x89, 0x2e, 0xc0, 0x48, 0x35, + 0x0c, 0x36, 0xfd, 0xfa, 0x8a, 0xd7, 0x16, 0xe7, 0x35, 0x25, 0x8b, 0xe6, 0x65, 0x01, 0x4e, 0x71, + 0xd0, 0x43, 0x5c, 0xf0, 0x70, 0x8b, 0xc8, 0xa8, 0x40, 0x1d, 0x58, 0x26, 0x3b, 0x4c, 0x0a, 0xbd, + 0xa7, 0xf4, 0xd5, 0x6f, 0x4c, 0xdf, 0xf7, 0x89, 0x3f, 0x7e, 0xf8, 0x3e, 0xf7, 0x0f, 0x07, 0xe0, + 0x81, 0x5c, 0x9e, 0x42, 0x5b, 0xff, 0x4d, 0x43, 0x5b, 0xd7, 0xca, 0x85, 0x14, 0xb9, 0x61, 0x53, + 0x91, 0xd5, 0xc8, 0xe7, 0xe9, 0xe5, 0x5a, 0x31, 0xce, 0x6f, 0x14, 0x1d, 0xa8, 0xc0, 0x6b, 0x91, + 0xb8, 0xed, 0x55, 0x89, 0xe8, 0xbd, 0x1a, 0xa8, 0x6b, 0xb2, 0x00, 0xa7, 0x38, 0xfc, 0x08, 0xbd, + 0xe9, 0x75, 0x9a, 0x89, 0x30, 0x94, 0x69, 0x47, 0x68, 0x06, 0xc6, 0xb2, 0x1c, 0xfd, 0x43, 0x07, + 0x50, 0x37, 0x57, 0xb1, 0x10, 0xd7, 0x8f, 0x62, 0x1c, 0xe6, 0xce, 0xee, 0x69, 0x87, 0x70, 0xad, + 0xa7, 0x39, 0xed, 0xd0, 0xbe, 0xe9, 0xc7, 0xd2, 0x7d, 0x88, 0x1f, 0x0e, 0xfa, 0xb0, 0xa1, 0x31, + 0x53, 0x4b, 0xb5, 0x4a, 0xe2, 0x98, 0x9b, 0xe3, 0x74, 0x53, 0x0b, 0x03, 0x63, 0x59, 0x8e, 0xa6, + 0xa1, 0x48, 0xa2, 0x28, 0x8c, 0xc4, 0x59, 0x9b, 0x4d, 0xe3, 0x4b, 0x14, 0x80, 0x39, 0xdc, 0xfd, + 0x71, 0x01, 0xca, 0xbd, 0x4e, 0x27, 0xe8, 0x77, 0xb4, 0x73, 0xb5, 0x38, 0x39, 0x89, 0x83, 0x5f, + 0x78, 0x74, 0x67, 0xa2, 0xec, 0x01, 0xb0, 0xc7, 0x09, 0x5b, 0x94, 0xe2, 0x6c, 0x03, 0xa7, 0xbe, + 0xa4, 0x9d, 0xb0, 0x75, 0x12, 0x39, 0x1b, 0xfc, 0xa6, 0xb9, 0xc1, 0xaf, 0xd9, 0xee, 0x94, 0xbe, + 0xcd, 0xff, 0x49, 0x11, 0x4e, 0xc9, 0xd2, 0x0a, 0xa1, 0x5b, 0xe5, 0x73, 0x1d, 0x12, 0xed, 0xa0, + 0x1f, 0x38, 0x70, 0xda, 0xcb, 0x9a, 0x6e, 0x7c, 0x72, 0x04, 0x03, 0xad, 0x71, 0x9d, 0x99, 0xcd, + 0xe1, 0xc8, 0x07, 0xfa, 0xa2, 0x18, 0xe8, 0xd3, 0x79, 0x28, 0x3d, 0xec, 0xee, 0xb9, 0x1d, 0x40, + 0xcf, 0xc0, 0x98, 0x84, 0x33, 0x73, 0x0f, 0x5f, 0xe2, 0xca, 0xb8, 0x3d, 0xab, 0x95, 0x61, 0x03, + 0x93, 0xd6, 0x4c, 0x48, 0xab, 0xdd, 0xf4, 0x12, 0xa2, 0x19, 0x8a, 0x54, 0xcd, 0x75, 0xad, 0x0c, + 0x1b, 0x98, 0xe8, 0x31, 0x18, 0x0a, 0xc2, 0x1a, 0xb9, 0x52, 0x13, 0x06, 0xe2, 0x09, 0x51, 0x67, + 0xe8, 0x1a, 0x83, 0x62, 0x51, 0x8a, 0x1e, 0x4d, 0xad, 0x71, 0x45, 0xb6, 0x84, 0x46, 0xf3, 0x2c, + 0x71, 0xe8, 0x1f, 0x3b, 0x30, 0x42, 0x6b, 0xac, 0xef, 0xb4, 0x09, 0xdd, 0xdb, 0xe8, 0x17, 0xa9, + 0x1d, 0xcd, 0x17, 0xb9, 0x26, 0xd9, 0x98, 0xa6, 0x8e, 0x11, 0x05, 0x7f, 0xe3, 0xad, 0xe9, 0x92, + 0xfc, 0x81, 0xd3, 0x56, 0x4d, 0x2d, 0xc1, 0xfd, 0x3d, 0xbf, 0xe6, 0x81, 0x5c, 0x01, 0x7f, 0x0b, + 0x26, 0xcc, 0x46, 0x1c, 0xc8, 0x0f, 0xf0, 0x2f, 0xb4, 0x65, 0xc7, 0xfb, 0x25, 0xe4, 0xd9, 0x3d, + 0xd3, 0x66, 0xd5, 0x64, 0x58, 0x10, 0x53, 0xcf, 0x9c, 0x0c, 0x0b, 0x62, 0x32, 0x2c, 0xb8, 0x7f, + 0xe0, 0xa4, 0x4b, 0x53, 0x53, 0xf3, 0xe8, 0xc6, 0xdc, 0x89, 0x9a, 0x42, 0x10, 0xab, 0x8d, 0xf9, + 0x3a, 0xbe, 0x8a, 0x29, 0x1c, 0x7d, 0x49, 0x93, 0x8e, 0xb4, 0x5a, 0x47, 0xb8, 0x35, 0x2c, 0x99, + 0xe8, 0x0d, 0xc2, 0xdd, 0xf2, 0x4f, 0x14, 0xe0, 0x6c, 0x13, 0xdc, 0x2f, 0x16, 0xe0, 0xa1, 0x7d, + 0x95, 0xd6, 0xdc, 0x86, 0x3b, 0xf7, 0xbc, 0xe1, 0x74, 0x5b, 0x8b, 0x48, 0x3b, 0xbc, 0x8e, 0xaf, + 0x8a, 0xef, 0xa5, 0xb6, 0x35, 0xcc, 0xc1, 0x58, 0x96, 0x53, 0xd5, 0x61, 0x8b, 0xec, 0x2c, 0x86, + 0x51, 0xcb, 0x4b, 0x84, 0x74, 0x50, 0xaa, 0xc3, 0xb2, 0x2c, 0xc0, 0x29, 0x8e, 0xfb, 0x03, 0x07, + 0xb2, 0x0d, 0x40, 0x1e, 0x4c, 0x74, 0x62, 0x12, 0xd1, 0x2d, 0xb5, 0x42, 0xaa, 0x11, 0x91, 0xd3, + 0xf3, 0xd1, 0x19, 0xee, 0xed, 0xa7, 0x3d, 0x9c, 0xa9, 0x86, 0x11, 0x99, 0xd9, 0x7e, 0x6a, 0x86, + 0x63, 0x2c, 0x93, 0x9d, 0x0a, 0x69, 0x12, 0x4a, 0x63, 0x0e, 0xed, 0xed, 0x4e, 0x4f, 0x5c, 0x37, + 0x08, 0xe0, 0x0c, 0x41, 0xca, 0xa2, 0xed, 0xc5, 0xf1, 0xcd, 0x30, 0xaa, 0x09, 0x16, 0x85, 0x03, + 0xb3, 0x58, 0x33, 0x08, 0xe0, 0x0c, 0x41, 0xf7, 0xfb, 0xf4, 0xf8, 0xa8, 0x6b, 0xad, 0xe8, 0x1b, + 0x54, 0xf7, 0xa1, 0x90, 0xb9, 0x66, 0xb8, 0x31, 0x1f, 0x06, 0x89, 0xe7, 0x07, 0x44, 0x06, 0x0b, + 0xac, 0x5b, 0xd2, 0x91, 0x0d, 0xda, 0xa9, 0x0d, 0xbf, 0xbb, 0x0c, 0xe7, 0xb4, 0x85, 0xea, 0x38, + 0x1b, 0xcd, 0x70, 0x23, 0xeb, 0x05, 0xa4, 0x48, 0x98, 0x95, 0xb8, 0x3f, 0x75, 0xe0, 0x5c, 0x0f, + 0x65, 0x1c, 0x7d, 0xc5, 0x81, 0xf1, 0x8d, 0xb7, 0x45, 0xdf, 0xcc, 0x66, 0xa0, 0xf7, 0xc1, 0x04, + 0x05, 0xd0, 0x9d, 0x48, 0xcc, 0xcd, 0x82, 0xe9, 0xa1, 0x9a, 0x33, 0x4a, 0x71, 0x06, 0xdb, 0xfd, + 0xb5, 0x02, 0xe4, 0x70, 0x41, 0x4f, 0x42, 0x89, 0x04, 0xb5, 0x76, 0xe8, 0x07, 0x89, 0x10, 0x46, + 0x4a, 0xea, 0x5d, 0x12, 0x70, 0xac, 0x30, 0xc4, 0xf9, 0x43, 0x0c, 0x4c, 0xa1, 0xeb, 0xfc, 0x21, + 0x5a, 0x9e, 0xe2, 0xa0, 0x3a, 0x4c, 0x7a, 0xdc, 0xbf, 0xc2, 0xe6, 0x1e, 0x9b, 0xa6, 0x03, 0x07, + 0x99, 0xa6, 0xa7, 0x99, 0xfb, 0x33, 0x43, 0x02, 0x77, 0x11, 0x45, 0xef, 0x86, 0xd1, 0x4e, 0x4c, + 0x2a, 0x0b, 0xcb, 0xf3, 0x11, 0xa9, 0xf1, 0x53, 0xb1, 0xe6, 0xf7, 0xbb, 0x9e, 0x16, 0x61, 0x1d, + 0xcf, 0xfd, 0xd7, 0x0e, 0x0c, 0xcf, 0x79, 0xd5, 0xad, 0x70, 0x73, 0x93, 0x0e, 0x45, 0xad, 0x13, + 0xa5, 0x86, 0x2d, 0x6d, 0x28, 0x16, 0x04, 0x1c, 0x2b, 0x0c, 0xb4, 0x0e, 0x43, 0x7c, 0xc1, 0x8b, + 0x65, 0xf7, 0xf3, 0x5a, 0x7f, 0x54, 0x1c, 0x0f, 0x9b, 0x0e, 0x9d, 0xc4, 0x6f, 0xce, 0xf0, 0x38, + 0x9e, 0x99, 0x2b, 0x41, 0xb2, 0x1a, 0x55, 0x92, 0xc8, 0x0f, 0xea, 0x73, 0x40, 0xb7, 0x8b, 0x45, + 0x46, 0x03, 0x0b, 0x5a, 0xb4, 0x1b, 0x2d, 0xef, 0x96, 0x64, 0x27, 0xc4, 0x8f, 0xea, 0xc6, 0x4a, + 0x5a, 0x84, 0x75, 0x3c, 0xf7, 0x0f, 0x1d, 0x18, 0x99, 0xf3, 0x62, 0xbf, 0xfa, 0x57, 0x48, 0xf8, + 0x7c, 0x08, 0x8a, 0xf3, 0x5e, 0xb5, 0x41, 0xd0, 0xf5, 0xec, 0xa1, 0x77, 0xf4, 0xe2, 0xe3, 0x79, + 0x6c, 0xd4, 0x01, 0x58, 0xe7, 0x34, 0xde, 0xeb, 0x68, 0xec, 0xbe, 0xe5, 0xc0, 0xc4, 0x7c, 0xd3, + 0x27, 0x41, 0x32, 0x4f, 0xa2, 0x84, 0x0d, 0x5c, 0x1d, 0x26, 0xab, 0x0a, 0x72, 0x98, 0xa1, 0x63, + 0xb3, 0x75, 0x3e, 0x43, 0x02, 0x77, 0x11, 0x45, 0x35, 0x38, 0xc1, 0x61, 0xe9, 0xaa, 0x38, 0xd0, + 0xf8, 0x31, 0xeb, 0xe8, 0xbc, 0x49, 0x01, 0x67, 0x49, 0xba, 0x3f, 0x71, 0xe0, 0xdc, 0x7c, 0xb3, + 0x13, 0x27, 0x24, 0xba, 0x21, 0xa4, 0x91, 0x54, 0x6f, 0xd1, 0x47, 0xa0, 0xd4, 0x92, 0x1e, 0x5b, + 0xe7, 0x0e, 0x13, 0x98, 0xc9, 0x33, 0x8a, 0x4d, 0x1b, 0xb3, 0xba, 0xf1, 0x32, 0xa9, 0x26, 0x2b, + 0x24, 0xf1, 0xd2, 0xf0, 0x82, 0x14, 0x86, 0x15, 0x55, 0xd4, 0x86, 0xc1, 0xb8, 0x4d, 0xaa, 0xf6, + 0xa2, 0xbb, 0x64, 0x1f, 0x2a, 0x6d, 0x52, 0x4d, 0xe5, 0x3a, 0xf3, 0x35, 0x32, 0x4e, 0xee, 0xff, + 0x72, 0xe0, 0x81, 0x1e, 0xfd, 0xbd, 0xea, 0xc7, 0x09, 0x7a, 0xa9, 0xab, 0xcf, 0x33, 0xfd, 0xf5, + 0x99, 0xd6, 0x66, 0x3d, 0x56, 0x02, 0x41, 0x42, 0xb4, 0xfe, 0x7e, 0x0c, 0x8a, 0x7e, 0x42, 0x5a, + 0xd2, 0x0c, 0x6d, 0xc1, 0x60, 0xd4, 0xa3, 0x2f, 0x73, 0xe3, 0x32, 0xc6, 0xef, 0x0a, 0xe5, 0x87, + 0x39, 0x5b, 0x77, 0x0b, 0x86, 0xe6, 0xc3, 0x66, 0xa7, 0x15, 0xf4, 0x17, 0x29, 0x93, 0xec, 0xb4, + 0x49, 0x76, 0x8f, 0x64, 0xea, 0x3f, 0x2b, 0x91, 0x86, 0xa3, 0x81, 0x7c, 0xc3, 0x91, 0xfb, 0x6f, + 0x1c, 0xa0, 0xab, 0xaa, 0xe6, 0x0b, 0x4f, 0x22, 0x27, 0xc7, 0x19, 0x3e, 0xa4, 0x93, 0xbb, 0xbd, + 0x3b, 0x3d, 0xae, 0x10, 0x35, 0xfa, 0x1f, 0x82, 0xa1, 0x98, 0x1d, 0xc9, 0x45, 0x1b, 0x16, 0xa5, + 0xfe, 0xcc, 0x0f, 0xea, 0xb7, 0x77, 0xa7, 0xfb, 0x0a, 0xdb, 0x9c, 0x51, 0xb4, 0x85, 0xd3, 0x53, + 0x50, 0xa5, 0x0a, 0x5f, 0x8b, 0xc4, 0xb1, 0x57, 0x97, 0x27, 0x3c, 0xa5, 0xf0, 0xad, 0x70, 0x30, + 0x96, 0xe5, 0xee, 0x97, 0x1d, 0x18, 0x57, 0x9b, 0x17, 0x55, 0xdf, 0xd1, 0x35, 0x7d, 0x9b, 0xe3, + 0x33, 0xe5, 0xa1, 0x1e, 0x12, 0x47, 0x6c, 0xe4, 0xfb, 0xef, 0x82, 0xef, 0x82, 0xb1, 0x1a, 0x69, + 0x93, 0xa0, 0x46, 0x82, 0x2a, 0x3d, 0x7e, 0xd3, 0x19, 0x32, 0x32, 0x37, 0x49, 0xcf, 0x9b, 0x0b, + 0x1a, 0x1c, 0x1b, 0x58, 0xee, 0x37, 0x1d, 0xb8, 0x5f, 0x91, 0xab, 0x90, 0x04, 0x93, 0x24, 0xda, + 0x51, 0x61, 0x9a, 0x07, 0xdb, 0xad, 0x6e, 0x50, 0xfd, 0x37, 0x89, 0x38, 0xf3, 0xc3, 0x6d, 0x57, + 0xa3, 0x5c, 0x5b, 0x66, 0x44, 0xb0, 0xa4, 0xe6, 0xfe, 0xea, 0x00, 0x9c, 0xd6, 0x1b, 0xa9, 0x04, + 0xcc, 0x2f, 0x39, 0x00, 0x6a, 0x04, 0xe8, 0x86, 0x3c, 0x60, 0xc7, 0x77, 0x65, 0x7c, 0xa9, 0x54, + 0x04, 0x29, 0x70, 0x8c, 0x35, 0xb6, 0xe8, 0x05, 0x18, 0xdb, 0xa6, 0x8b, 0x82, 0xac, 0x50, 0x75, + 0x21, 0x2e, 0x0f, 0xb0, 0x66, 0x4c, 0xe7, 0x7d, 0xcc, 0xe7, 0x53, 0xbc, 0xd4, 0x1c, 0xa0, 0x01, + 0x63, 0x6c, 0x90, 0xa2, 0x27, 0x9d, 0xf1, 0x48, 0xff, 0x24, 0xc2, 0x26, 0xfe, 0x41, 0x8b, 0x7d, + 0xcc, 0x7e, 0xf5, 0xb9, 0x93, 0x7b, 0xbb, 0xd3, 0xe3, 0x06, 0x08, 0x9b, 0x8d, 0x70, 0x5f, 0x00, + 0x36, 0x16, 0x7e, 0xd0, 0x21, 0xab, 0x01, 0x7a, 0x44, 0xda, 0xe8, 0xb8, 0x5f, 0x45, 0x49, 0x0e, + 0xdd, 0x4e, 0x47, 0xcf, 0xb2, 0x9b, 0x9e, 0xdf, 0x64, 0xe1, 0x8b, 0x14, 0x4b, 0x9d, 0x65, 0x17, + 0x19, 0x14, 0x8b, 0x52, 0x77, 0x06, 0x86, 0xe7, 0x69, 0xdf, 0x49, 0x44, 0xe9, 0xea, 0x51, 0xc7, + 0xe3, 0x46, 0xd4, 0xb1, 0x8c, 0x2e, 0x5e, 0x87, 0x33, 0xf3, 0x11, 0xf1, 0x12, 0x52, 0x79, 0x7a, + 0xae, 0x53, 0xdd, 0x22, 0x09, 0x0f, 0xed, 0x8a, 0xd1, 0x7b, 0x61, 0x3c, 0x64, 0x5b, 0xc6, 0xd5, + 0xb0, 0xba, 0xe5, 0x07, 0x75, 0x61, 0x72, 0x3d, 0x23, 0xa8, 0x8c, 0xaf, 0xea, 0x85, 0xd8, 0xc4, + 0x75, 0xff, 0x53, 0x01, 0xc6, 0xe6, 0xa3, 0x30, 0x90, 0x62, 0xf1, 0x18, 0xb6, 0xb2, 0xc4, 0xd8, + 0xca, 0x2c, 0xb8, 0x3b, 0xf5, 0xf6, 0xf7, 0xda, 0xce, 0xd0, 0x6b, 0x4a, 0x44, 0x0e, 0xd8, 0x3a, + 0x82, 0x18, 0x7c, 0x19, 0xed, 0xf4, 0x63, 0x9b, 0x02, 0xd4, 0xfd, 0xcf, 0x0e, 0x4c, 0xea, 0xe8, + 0xc7, 0xb0, 0x83, 0xc6, 0xe6, 0x0e, 0x7a, 0xcd, 0x6e, 0x7f, 0x7b, 0x6c, 0x9b, 0x9f, 0x1b, 0x32, + 0xfb, 0xc9, 0x7c, 0xdd, 0x5f, 0x75, 0x60, 0xec, 0xa6, 0x06, 0x10, 0x9d, 0xb5, 0xad, 0xc4, 0xbc, + 0x43, 0x8a, 0x19, 0x1d, 0x7a, 0x3b, 0xf3, 0x1b, 0x1b, 0x2d, 0xa1, 0x72, 0x3f, 0xae, 0x36, 0x48, + 0xad, 0xd3, 0x94, 0xdb, 0xb7, 0x1a, 0xd2, 0x8a, 0x80, 0x63, 0x85, 0x81, 0x5e, 0x82, 0x93, 0xd5, + 0x30, 0xa8, 0x76, 0xa2, 0x88, 0x04, 0xd5, 0x9d, 0x35, 0x76, 0x47, 0x42, 0x6c, 0x88, 0x33, 0xa2, + 0xda, 0xc9, 0xf9, 0x2c, 0xc2, 0xed, 0x3c, 0x20, 0xee, 0x26, 0xc4, 0x9d, 0x05, 0x31, 0xdd, 0xb2, + 0xc4, 0x81, 0x4b, 0x73, 0x16, 0x30, 0x30, 0x96, 0xe5, 0xe8, 0x3a, 0x9c, 0x8b, 0x13, 0x2f, 0x4a, + 0xfc, 0xa0, 0xbe, 0x40, 0xbc, 0x5a, 0xd3, 0x0f, 0xe8, 0x51, 0x22, 0x0c, 0x6a, 0xdc, 0x95, 0x38, + 0x30, 0xf7, 0xc0, 0xde, 0xee, 0xf4, 0xb9, 0x4a, 0x3e, 0x0a, 0xee, 0x55, 0x17, 0x7d, 0x08, 0xa6, + 0x84, 0x3b, 0x62, 0xb3, 0xd3, 0x7c, 0x36, 0xdc, 0x88, 0x2f, 0xfb, 0x31, 0x3d, 0xc7, 0x5f, 0xf5, + 0x5b, 0x7e, 0xc2, 0x1c, 0x86, 0xc5, 0xb9, 0xf3, 0x7b, 0xbb, 0xd3, 0x53, 0x95, 0x9e, 0x58, 0x78, + 0x1f, 0x0a, 0x08, 0xc3, 0x59, 0x2e, 0xfc, 0xba, 0x68, 0x0f, 0x33, 0xda, 0x53, 0x7b, 0xbb, 0xd3, + 0x67, 0x17, 0x73, 0x31, 0x70, 0x8f, 0x9a, 0xf4, 0x0b, 0x26, 0x7e, 0x8b, 0xbc, 0x12, 0x06, 0x84, + 0x05, 0xaa, 0x68, 0x5f, 0x70, 0x5d, 0xc0, 0xb1, 0xc2, 0x40, 0x2f, 0xa7, 0x33, 0x91, 0x2e, 0x17, + 0x11, 0x70, 0x72, 0x70, 0x09, 0xc7, 0x8e, 0x26, 0x37, 0x34, 0x4a, 0x2c, 0x92, 0xd2, 0xa0, 0xed, + 0xfe, 0x51, 0x01, 0x50, 0xb7, 0x88, 0x40, 0xcb, 0x30, 0xe4, 0x55, 0x13, 0x7f, 0x5b, 0x46, 0xe6, + 0x3d, 0x92, 0xb7, 0x7d, 0x72, 0x56, 0x98, 0x6c, 0x12, 0x3a, 0x43, 0x48, 0x2a, 0x57, 0x66, 0x59, + 0x55, 0x2c, 0x48, 0xa0, 0x10, 0x4e, 0x36, 0xbd, 0x38, 0x91, 0x73, 0xb5, 0x46, 0xbb, 0x2c, 0x04, + 0xeb, 0xcf, 0xf6, 0xd7, 0x29, 0x5a, 0x63, 0xee, 0x0c, 0x9d, 0xb9, 0x57, 0xb3, 0x84, 0x70, 0x37, + 0x6d, 0xf4, 0x71, 0xa6, 0x87, 0x70, 0x25, 0x51, 0x2a, 0x00, 0xcb, 0x56, 0xf6, 0x68, 0x4e, 0xd3, + 0xd0, 0x41, 0x04, 0x1b, 0xac, 0xb1, 0x74, 0xff, 0x2d, 0xc0, 0xf0, 0xc2, 0xec, 0xd2, 0xba, 0x17, + 0x6f, 0xf5, 0xa1, 0x9a, 0xd3, 0xd9, 0x21, 0x74, 0xa8, 0xec, 0xfa, 0x96, 0xba, 0x15, 0x56, 0x18, + 0x28, 0x80, 0x21, 0x3f, 0xa0, 0x0b, 0xa2, 0x3c, 0x61, 0xcb, 0xfc, 0xad, 0x8e, 0x19, 0xcc, 0x3e, + 0x71, 0x85, 0x51, 0xc7, 0x82, 0x0b, 0x7a, 0x0d, 0x46, 0x3c, 0x79, 0xb3, 0x45, 0x6c, 0x4b, 0xcb, + 0x36, 0xec, 0xba, 0x82, 0xa4, 0x1e, 0x59, 0x23, 0x40, 0x38, 0x65, 0x88, 0x3e, 0xe1, 0xc0, 0xa8, + 0xec, 0x3a, 0x26, 0x9b, 0xc2, 0xe5, 0xba, 0x62, 0xaf, 0xcf, 0x98, 0x6c, 0xf2, 0xb0, 0x0b, 0x0d, + 0x80, 0x75, 0x96, 0x5d, 0xaa, 0x7c, 0xb1, 0x1f, 0x55, 0x1e, 0xdd, 0x84, 0x91, 0x9b, 0x7e, 0xd2, + 0x60, 0x1b, 0x8f, 0x70, 0xf5, 0x2c, 0xde, 0x7d, 0xab, 0x29, 0xb9, 0x74, 0xc4, 0x6e, 0x48, 0x06, + 0x38, 0xe5, 0x85, 0x2e, 0x70, 0xc6, 0xec, 0x66, 0x10, 0x13, 0x59, 0x23, 0x66, 0x05, 0x56, 0x80, + 0x53, 0x1c, 0x3a, 0xc4, 0x63, 0xf4, 0x57, 0x85, 0x7c, 0xb4, 0x43, 0xd7, 0xb1, 0x08, 0xa5, 0xb3, + 0x30, 0xaf, 0x24, 0x45, 0x3e, 0x58, 0x37, 0x34, 0x1e, 0xd8, 0xe0, 0x48, 0xd7, 0xc8, 0xcd, 0x06, + 0x09, 0x44, 0xa8, 0xbf, 0x5a, 0x23, 0x37, 0x1a, 0x24, 0xc0, 0xac, 0x04, 0xbd, 0xc6, 0x8f, 0x16, + 0x5c, 0xc7, 0x15, 0x61, 0x71, 0x57, 0xed, 0xa8, 0xdd, 0x9c, 0x26, 0x8f, 0xb6, 0x4f, 0x7f, 0x63, + 0x8d, 0x1f, 0x55, 0x97, 0xc3, 0xe0, 0xd2, 0x2d, 0x3f, 0x11, 0x77, 0x04, 0x94, 0xa4, 0x5b, 0x65, + 0x50, 0x2c, 0x4a, 0x79, 0x48, 0x01, 0x9d, 0x04, 0x31, 0xbb, 0x10, 0x30, 0xa2, 0x87, 0x14, 0x30, + 0x30, 0x96, 0xe5, 0xe8, 0x1f, 0x39, 0x50, 0x6c, 0x84, 0xe1, 0x56, 0x5c, 0x1e, 0x67, 0x93, 0xc3, + 0x82, 0xaa, 0x27, 0x24, 0xce, 0xcc, 0x65, 0x4a, 0xd6, 0xbc, 0xf5, 0x54, 0x64, 0xb0, 0xdb, 0xbb, + 0xd3, 0x13, 0x57, 0xfd, 0x4d, 0x52, 0xdd, 0xa9, 0x36, 0x09, 0x83, 0xbc, 0xf1, 0x96, 0x06, 0xb9, + 0xb4, 0x4d, 0x82, 0x04, 0xf3, 0x56, 0x4d, 0x7d, 0xce, 0x01, 0x48, 0x09, 0xe5, 0xf8, 0xee, 0x88, + 0xe9, 0xed, 0xb6, 0x70, 0xce, 0x33, 0x9a, 0xa6, 0x3b, 0x03, 0xff, 0x9d, 0x03, 0xa3, 0xb4, 0x73, + 0x52, 0x04, 0x3e, 0x06, 0x43, 0x89, 0x17, 0xd5, 0x89, 0xb4, 0x5f, 0xab, 0xcf, 0xb1, 0xce, 0xa0, + 0x58, 0x94, 0xa2, 0x00, 0x8a, 0x89, 0x17, 0x6f, 0x49, 0xed, 0xf2, 0x8a, 0xb5, 0x21, 0x4e, 0x15, + 0x4b, 0xfa, 0x2b, 0xc6, 0x9c, 0x0d, 0x7a, 0x1c, 0x4a, 0x54, 0x01, 0x58, 0xf4, 0x62, 0x19, 0x52, + 0x32, 0x46, 0x85, 0xf8, 0xa2, 0x80, 0x61, 0x55, 0xea, 0xfe, 0x5a, 0x01, 0x06, 0x17, 0xf8, 0x39, + 0x63, 0x28, 0x0e, 0x3b, 0x51, 0x95, 0x08, 0x7d, 0xd3, 0xc2, 0x9c, 0xa6, 0x74, 0x2b, 0x8c, 0xa6, + 0xa6, 0xe9, 0xb3, 0xdf, 0x58, 0xf0, 0xa2, 0x07, 0xd9, 0x89, 0x24, 0xf2, 0x82, 0x78, 0x93, 0x79, + 0x0a, 0xfc, 0x30, 0x10, 0x43, 0x64, 0x61, 0x16, 0xae, 0x1b, 0x74, 0x2b, 0x09, 0x69, 0xa7, 0x0e, + 0x0b, 0xb3, 0x0c, 0x67, 0xda, 0xe0, 0xfe, 0xba, 0x03, 0x90, 0xb6, 0x1e, 0x7d, 0xd6, 0x81, 0x71, + 0x4f, 0x0f, 0x65, 0x14, 0x63, 0xb4, 0x6a, 0xcf, 0xad, 0xc8, 0xc8, 0xf2, 0x23, 0xb6, 0x01, 0xc2, + 0x26, 0x63, 0xf7, 0xdd, 0x50, 0x64, 0xab, 0x83, 0xe9, 0xe2, 0xc2, 0x24, 0x9b, 0xb5, 0xc1, 0x48, + 0x53, 0x2d, 0x56, 0x18, 0xee, 0x4b, 0x30, 0x71, 0xe9, 0x16, 0xa9, 0x76, 0x92, 0x30, 0xe2, 0x06, + 0xe9, 0x1e, 0x57, 0x57, 0x9c, 0x43, 0x5d, 0x5d, 0xf9, 0x8e, 0x03, 0xa3, 0x5a, 0x5c, 0x1b, 0xdd, + 0xa9, 0xeb, 0xf3, 0x15, 0x7e, 0xee, 0x16, 0x43, 0xb5, 0x6c, 0x25, 0x72, 0x8e, 0x93, 0x4c, 0xb7, + 0x11, 0x05, 0xc2, 0x29, 0xc3, 0x3b, 0xc4, 0x9d, 0xb9, 0xbf, 0xef, 0xc0, 0x99, 0xdc, 0x20, 0xbc, + 0x7b, 0xdc, 0x6c, 0xc3, 0xf7, 0x5b, 0xe8, 0xc3, 0xf7, 0xfb, 0xdb, 0x0e, 0xa4, 0x94, 0xa8, 0x28, + 0xda, 0x48, 0x5b, 0xae, 0x89, 0x22, 0xc1, 0x49, 0x94, 0xa2, 0xd7, 0xe0, 0x9c, 0xf9, 0x05, 0x0f, + 0xe9, 0x06, 0xe0, 0x67, 0xa6, 0x7c, 0x4a, 0xb8, 0x17, 0x0b, 0xf7, 0x6b, 0x0e, 0x14, 0x97, 0xbc, + 0x4e, 0x9d, 0xf4, 0x65, 0xc5, 0xa1, 0x72, 0x2c, 0x22, 0x5e, 0x33, 0x91, 0x7a, 0xba, 0x90, 0x63, + 0x58, 0xc0, 0xb0, 0x2a, 0x45, 0xb3, 0x30, 0x12, 0xb6, 0x89, 0xe1, 0xba, 0x7a, 0x44, 0x8e, 0xde, + 0xaa, 0x2c, 0xa0, 0xdb, 0x0e, 0xe3, 0xae, 0x20, 0x38, 0xad, 0xe5, 0xfe, 0xa0, 0x08, 0xa3, 0xda, + 0x75, 0x0d, 0xaa, 0x0b, 0x44, 0xa4, 0x1d, 0x66, 0xf5, 0x65, 0x3a, 0x61, 0x30, 0x2b, 0xa1, 0x6b, + 0x30, 0x22, 0xdb, 0x7e, 0xcc, 0xc5, 0x96, 0xb1, 0x06, 0xb1, 0x80, 0x63, 0x85, 0x81, 0xa6, 0xa1, + 0x58, 0x23, 0xed, 0xa4, 0xc1, 0x9a, 0x37, 0xc8, 0x63, 0xd6, 0x16, 0x28, 0x00, 0x73, 0x38, 0x45, + 0xd8, 0x24, 0x49, 0xb5, 0xc1, 0x0c, 0x96, 0x22, 0xa8, 0x6d, 0x91, 0x02, 0x30, 0x87, 0xe7, 0x38, + 0xd7, 0x8a, 0x47, 0xef, 0x5c, 0x1b, 0xb2, 0xec, 0x5c, 0x43, 0x6d, 0x38, 0x15, 0xc7, 0x8d, 0xb5, + 0xc8, 0xdf, 0xf6, 0x12, 0x92, 0xce, 0xbe, 0xe1, 0x83, 0xf0, 0x39, 0xc7, 0x2e, 0x50, 0x57, 0x2e, + 0x67, 0xa9, 0xe0, 0x3c, 0xd2, 0xa8, 0x02, 0x67, 0xfc, 0x20, 0x26, 0xd5, 0x4e, 0x44, 0xae, 0xd4, + 0x83, 0x30, 0x22, 0x97, 0xc3, 0x98, 0x92, 0x13, 0xd7, 0x3f, 0x55, 0x98, 0xe7, 0x95, 0x3c, 0x24, + 0x9c, 0x5f, 0x17, 0x2d, 0xc1, 0xc9, 0x9a, 0x1f, 0x7b, 0x1b, 0x4d, 0x52, 0xe9, 0x6c, 0xb4, 0x42, + 0x7a, 0xe8, 0xe3, 0x57, 0x32, 0x4a, 0x73, 0xf7, 0x4b, 0xf3, 0xc6, 0x42, 0x16, 0x01, 0x77, 0xd7, + 0x41, 0xcf, 0xc0, 0x58, 0xec, 0x07, 0xf5, 0x26, 0x99, 0x8b, 0xbc, 0xa0, 0xda, 0x10, 0xf7, 0x46, + 0x95, 0x19, 0xb8, 0xa2, 0x95, 0x61, 0x03, 0x93, 0xad, 0x79, 0x5e, 0x27, 0xa3, 0x0d, 0x0a, 0x6c, + 0x51, 0xea, 0xfe, 0xd0, 0x81, 0x31, 0x3d, 0xc4, 0x9a, 0x6a, 0xda, 0xd0, 0x58, 0x58, 0xac, 0xf0, + 0xbd, 0xc0, 0xde, 0x8e, 0x7f, 0x59, 0xd1, 0x4c, 0x4f, 0xa6, 0x29, 0x0c, 0x6b, 0x3c, 0xfb, 0xb8, + 0x30, 0xfd, 0x08, 0x14, 0x37, 0x43, 0xaa, 0x90, 0x0c, 0x98, 0xf6, 0xe3, 0x45, 0x0a, 0xc4, 0xbc, + 0xcc, 0xfd, 0x1f, 0x0e, 0x9c, 0xcd, 0x8f, 0x1e, 0x7f, 0x3b, 0x74, 0xf2, 0x22, 0x00, 0xed, 0x8a, + 0x21, 0xd4, 0xb5, 0x94, 0x09, 0xb2, 0x04, 0x6b, 0x58, 0xfd, 0x75, 0xfb, 0xcf, 0xa9, 0x52, 0x9c, + 0xf2, 0xf9, 0xbc, 0x03, 0xe3, 0x94, 0xed, 0x72, 0xb4, 0x61, 0xf4, 0x76, 0xd5, 0x4e, 0x6f, 0x15, + 0xd9, 0xd4, 0x4c, 0x6e, 0x80, 0xb1, 0xc9, 0x1c, 0xfd, 0x1c, 0x8c, 0x78, 0xb5, 0x5a, 0x44, 0xe2, + 0x58, 0x39, 0x9c, 0x98, 0x2f, 0x7c, 0x56, 0x02, 0x71, 0x5a, 0x4e, 0x85, 0x68, 0xa3, 0xb6, 0x19, + 0x53, 0xb9, 0x24, 0x04, 0xb7, 0x12, 0xa2, 0x94, 0x09, 0x85, 0x63, 0x85, 0xe1, 0xfe, 0xca, 0x20, + 0x98, 0xbc, 0x51, 0x0d, 0x4e, 0x6c, 0x45, 0x1b, 0xf3, 0xcc, 0x5f, 0x7f, 0x18, 0xbf, 0x39, 0xf3, + 0x67, 0x2f, 0x9b, 0x14, 0x70, 0x96, 0xa4, 0xe0, 0xb2, 0x4c, 0x76, 0x12, 0x6f, 0xe3, 0xd0, 0x5e, + 0xf3, 0x65, 0x93, 0x02, 0xce, 0x92, 0x44, 0xef, 0x86, 0xd1, 0xad, 0x68, 0x43, 0x8a, 0xe8, 0x6c, + 0x08, 0xc6, 0x72, 0x5a, 0x84, 0x75, 0x3c, 0x3a, 0x84, 0x5b, 0xd1, 0x06, 0xdd, 0x15, 0x65, 0x02, + 0x01, 0x35, 0x84, 0xcb, 0x02, 0x8e, 0x15, 0x06, 0x6a, 0x03, 0xda, 0x92, 0xa3, 0xa7, 0xa2, 0x13, + 0xc4, 0x4e, 0xd2, 0x7f, 0x70, 0x03, 0x0b, 0x0b, 0x5f, 0xee, 0xa2, 0x83, 0x73, 0x68, 0xa3, 0x17, + 0xe0, 0xdc, 0x56, 0xb4, 0x21, 0x94, 0x85, 0xb5, 0xc8, 0x0f, 0xaa, 0x7e, 0xdb, 0x48, 0x16, 0x30, + 0x2d, 0x9a, 0x7b, 0x6e, 0x39, 0x1f, 0x0d, 0xf7, 0xaa, 0xef, 0xfe, 0xce, 0x20, 0xb0, 0x6b, 0x8e, + 0x54, 0x16, 0xb6, 0x48, 0xd2, 0x08, 0x6b, 0x59, 0xfd, 0x67, 0x85, 0x41, 0xb1, 0x28, 0x95, 0xc1, + 0x8f, 0x85, 0x1e, 0xc1, 0x8f, 0x37, 0x61, 0xb8, 0x41, 0xbc, 0x1a, 0x89, 0xa4, 0xb9, 0xee, 0xaa, + 0x9d, 0x8b, 0x99, 0x97, 0x19, 0xd1, 0xf4, 0x18, 0xce, 0x7f, 0xc7, 0x58, 0x72, 0x43, 0xef, 0x81, + 0x09, 0xaa, 0xc8, 0x84, 0x9d, 0x44, 0xda, 0xa6, 0x07, 0x99, 0x6d, 0x9a, 0xed, 0xa8, 0xeb, 0x46, + 0x09, 0xce, 0x60, 0xa2, 0x05, 0x98, 0x14, 0x76, 0x64, 0x65, 0x06, 0x14, 0x03, 0xab, 0xb2, 0x38, + 0x54, 0x32, 0xe5, 0xb8, 0xab, 0x06, 0x0b, 0x5e, 0x0b, 0x6b, 0xdc, 0x95, 0xa8, 0x07, 0xaf, 0x85, + 0xb5, 0x1d, 0xcc, 0x4a, 0xd0, 0x2b, 0x50, 0xa2, 0x7f, 0x17, 0xa3, 0xb0, 0x25, 0x6c, 0x33, 0x6b, + 0x76, 0x46, 0x87, 0xf2, 0x10, 0x27, 0x45, 0xa6, 0xe0, 0xcd, 0x09, 0x2e, 0x58, 0xf1, 0xa3, 0xe7, + 0x15, 0xb9, 0x0f, 0x57, 0xb6, 0xfc, 0xf6, 0xf3, 0x24, 0xf2, 0x37, 0x77, 0x98, 0xd2, 0x50, 0x4a, + 0xcf, 0x2b, 0x57, 0xba, 0x30, 0x70, 0x4e, 0x2d, 0xf7, 0xf3, 0x05, 0x18, 0xd3, 0x6f, 0xcb, 0xde, + 0x29, 0x22, 0x36, 0x4e, 0x27, 0x05, 0x3f, 0x9d, 0x5e, 0xb6, 0xd0, 0xed, 0x3b, 0x4d, 0x88, 0x06, + 0x0c, 0x7a, 0x1d, 0xa1, 0x2d, 0x5a, 0x31, 0x82, 0xb1, 0x1e, 0x77, 0x92, 0x06, 0xbf, 0x56, 0xc5, + 0x62, 0x55, 0x19, 0x07, 0xf7, 0x53, 0x03, 0x50, 0x92, 0x85, 0xe8, 0x93, 0x0e, 0x40, 0x1a, 0x33, + 0x24, 0x44, 0xe9, 0x9a, 0x8d, 0x80, 0x12, 0x3d, 0xdc, 0x49, 0x33, 0x5c, 0x2b, 0x38, 0xd6, 0xf8, + 0xa2, 0x04, 0x86, 0x42, 0xda, 0xb8, 0x8b, 0xf6, 0x6e, 0x7c, 0xaf, 0x52, 0xc6, 0x17, 0x19, 0xf7, + 0xd4, 0x6c, 0xc6, 0x60, 0x58, 0xf0, 0xa2, 0x27, 0xc0, 0x0d, 0x19, 0xca, 0x66, 0xcf, 0xc4, 0xac, + 0xa2, 0xe3, 0xd2, 0x03, 0x9d, 0x02, 0xe1, 0x94, 0xa1, 0xfb, 0x14, 0x4c, 0x98, 0x8b, 0x81, 0x9e, + 0x08, 0x36, 0x76, 0x12, 0xc2, 0xed, 0x0d, 0x63, 0xfc, 0x44, 0x30, 0x47, 0x01, 0x98, 0xc3, 0xdd, + 0xef, 0x53, 0x3d, 0x40, 0x89, 0x97, 0x3e, 0x4c, 0xfc, 0x8f, 0xe8, 0xc6, 0xb2, 0x5e, 0xc7, 0xae, + 0x8f, 0xc3, 0x08, 0xfb, 0x87, 0x2d, 0xf4, 0x01, 0x5b, 0x8e, 0xe7, 0xb4, 0x9d, 0x62, 0xa9, 0x33, + 0x9d, 0xe0, 0x79, 0xc9, 0x08, 0xa7, 0x3c, 0xdd, 0x10, 0x26, 0xb3, 0xd8, 0xe8, 0x83, 0x30, 0x16, + 0xcb, 0x6d, 0x35, 0xbd, 0xfb, 0xd5, 0xe7, 0xf6, 0xcb, 0xec, 0xbe, 0x15, 0xad, 0x3a, 0x36, 0x88, + 0xb9, 0xab, 0x30, 0x64, 0x75, 0x08, 0xdd, 0x6f, 0x3b, 0x30, 0xc2, 0x3c, 0x6f, 0xf5, 0xc8, 0x6b, + 0xa5, 0x55, 0x06, 0xf6, 0x19, 0xf5, 0x18, 0x86, 0xf9, 0x19, 0x5d, 0x46, 0xac, 0x58, 0x90, 0x32, + 0x3c, 0x51, 0x5b, 0x2a, 0x65, 0xb8, 0x31, 0x20, 0xc6, 0x92, 0x93, 0xfb, 0xe9, 0x02, 0x0c, 0x5d, + 0x09, 0xda, 0x9d, 0xbf, 0xf6, 0xc9, 0xc2, 0x56, 0x60, 0xf0, 0x4a, 0x42, 0x5a, 0x66, 0x4e, 0xbb, + 0xb1, 0xb9, 0x47, 0xf5, 0x7c, 0x76, 0x65, 0x33, 0x9f, 0x1d, 0xf6, 0x6e, 0xca, 0x80, 0x2e, 0x61, + 0x23, 0x4e, 0xef, 0xbf, 0x3d, 0x09, 0x23, 0x57, 0xbd, 0x0d, 0xd2, 0x5c, 0x26, 0x3b, 0xec, 0xb6, + 0x1a, 0x0f, 0x2e, 0x70, 0xd2, 0x83, 0xbd, 0x11, 0x08, 0xb0, 0x00, 0x13, 0x0c, 0x5b, 0x2d, 0x06, + 0x7a, 0x72, 0x20, 0x69, 0x42, 0x20, 0xc7, 0x3c, 0x39, 0x68, 0xc9, 0x80, 0x34, 0x2c, 0x77, 0x06, + 0x46, 0x53, 0x2a, 0x7d, 0x70, 0xfd, 0x69, 0x01, 0xc6, 0x0d, 0x53, 0xb7, 0xe1, 0x00, 0x74, 0xee, + 0xe8, 0x00, 0x34, 0x1c, 0x72, 0x85, 0x7b, 0xed, 0x90, 0x1b, 0x38, 0x7e, 0x87, 0x9c, 0xf9, 0x91, + 0x06, 0xfb, 0xfa, 0x48, 0x4d, 0x18, 0xbc, 0xea, 0x07, 0x5b, 0xfd, 0xc9, 0x99, 0xb8, 0x1a, 0xb6, + 0xbb, 0xe4, 0x4c, 0x85, 0x02, 0x31, 0x2f, 0x93, 0x9a, 0xcb, 0x40, 0xbe, 0xe6, 0xe2, 0x7e, 0xd2, + 0x81, 0xb1, 0x15, 0x2f, 0xf0, 0x37, 0x49, 0x9c, 0xb0, 0x79, 0x95, 0x1c, 0xe9, 0xad, 0xa5, 0xb1, + 0x1e, 0xf7, 0xef, 0xdf, 0x70, 0xe0, 0xe4, 0x0a, 0x69, 0x85, 0xfe, 0x2b, 0x5e, 0x1a, 0x2f, 0x49, + 0xdb, 0xde, 0xf0, 0x13, 0x11, 0x1e, 0xa6, 0xda, 0x7e, 0xd9, 0x4f, 0x30, 0x85, 0xdf, 0xc1, 0x8e, + 0xcb, 0xee, 0x03, 0xd0, 0x03, 0x9a, 0x76, 0x93, 0x2e, 0x8d, 0x84, 0x94, 0x05, 0x38, 0xc5, 0x71, + 0x7f, 0xd7, 0x81, 0x61, 0xde, 0x08, 0x15, 0x62, 0xea, 0xf4, 0xa0, 0xdd, 0x80, 0x22, 0xab, 0x27, + 0x66, 0xf5, 0x92, 0x05, 0xf5, 0x87, 0x92, 0xe3, 0x6b, 0x90, 0xfd, 0x8b, 0x39, 0x03, 0x76, 0x6c, + 0xf1, 0x6e, 0xcd, 0xaa, 0x50, 0xd1, 0xf4, 0xd8, 0xc2, 0xa0, 0x58, 0x94, 0xba, 0x5f, 0x1f, 0x80, + 0x92, 0x4a, 0x3b, 0xc5, 0x92, 0x02, 0x04, 0x41, 0x98, 0x78, 0x3c, 0xb0, 0x80, 0xcb, 0xea, 0x0f, + 0xda, 0x4b, 0x7b, 0x35, 0x33, 0x9b, 0x52, 0xe7, 0xfe, 0x3b, 0x75, 0x08, 0xd5, 0x4a, 0xb0, 0xde, + 0x08, 0xf4, 0x31, 0x18, 0x6a, 0x52, 0xe9, 0x23, 0x45, 0xf7, 0xf3, 0x16, 0x9b, 0xc3, 0xc4, 0x9a, + 0x68, 0x89, 0x1a, 0x21, 0x0e, 0xc4, 0x82, 0xeb, 0xd4, 0xfb, 0x60, 0x32, 0xdb, 0xea, 0x3b, 0x5d, + 0xf4, 0x1b, 0xd1, 0xaf, 0x09, 0xfe, 0x4d, 0x21, 0x3d, 0x0f, 0x5e, 0xd5, 0x7d, 0x0e, 0x46, 0x57, + 0x48, 0x12, 0xf9, 0x55, 0x46, 0xe0, 0x4e, 0x93, 0xab, 0x2f, 0xfd, 0xe1, 0x33, 0x6c, 0xb2, 0x52, + 0x9a, 0x31, 0x7a, 0x0d, 0xa0, 0x1d, 0x85, 0xf4, 0xfc, 0x4a, 0x3a, 0xf2, 0x63, 0x5b, 0xd0, 0x87, + 0xd7, 0x14, 0x4d, 0xee, 0x72, 0x4e, 0x7f, 0x63, 0x8d, 0x9f, 0xfb, 0x22, 0x14, 0x57, 0x3a, 0x09, + 0xb9, 0xd5, 0x87, 0xc4, 0x3a, 0xe8, 0xcd, 0x77, 0xf7, 0x83, 0x30, 0xc6, 0x68, 0x5f, 0x0e, 0x9b, + 0x74, 0x5b, 0xa5, 0x43, 0xd3, 0xa2, 0xbf, 0xb3, 0x4e, 0x01, 0x86, 0x84, 0x79, 0x19, 0x5d, 0x32, + 0x8d, 0xb0, 0x59, 0x53, 0xb7, 0x80, 0xd4, 0x84, 0xb8, 0xcc, 0xa0, 0x58, 0x94, 0xba, 0xbf, 0x54, + 0x80, 0x51, 0x56, 0x51, 0x88, 0x9b, 0x1d, 0x18, 0x6e, 0x70, 0x3e, 0x62, 0x0c, 0x2d, 0x84, 0xd4, + 0xe9, 0xad, 0xd7, 0xce, 0x72, 0x1c, 0x80, 0x25, 0x3f, 0xca, 0xfa, 0xa6, 0xe7, 0x27, 0x94, 0x75, + 0xe1, 0x68, 0x59, 0xdf, 0xe0, 0x6c, 0xb0, 0xe4, 0xe7, 0xfe, 0x22, 0xb0, 0xdb, 0xb5, 0x8b, 0x4d, + 0xaf, 0xce, 0x47, 0x2e, 0xdc, 0x22, 0x35, 0x21, 0x73, 0xb5, 0x91, 0xa3, 0x50, 0x2c, 0x4a, 0xf9, + 0x8d, 0xc5, 0x24, 0xf2, 0x55, 0x54, 0xae, 0x76, 0x63, 0x91, 0x81, 0x65, 0x0c, 0x76, 0xcd, 0xfd, + 0x72, 0x01, 0x80, 0x25, 0x29, 0xe3, 0x97, 0x62, 0x7f, 0x1e, 0x8a, 0xed, 0x86, 0x17, 0x67, 0x1d, + 0x89, 0xc5, 0x35, 0x0a, 0xbc, 0x2d, 0xae, 0xfd, 0xb2, 0x1f, 0x98, 0x23, 0xea, 0xc1, 0xf2, 0x85, + 0xfd, 0x83, 0xe5, 0x51, 0x1b, 0x86, 0xc3, 0x4e, 0x42, 0x75, 0x55, 0xb1, 0xd9, 0x5b, 0xf0, 0xa3, + 0xaf, 0x72, 0x82, 0x3c, 0xc2, 0x5c, 0xfc, 0xc0, 0x92, 0x0d, 0x7a, 0x06, 0x4a, 0xed, 0x28, 0xac, + 0xd3, 0xbd, 0x5b, 0x6c, 0xef, 0x0f, 0x4a, 0x7d, 0x68, 0x4d, 0xc0, 0x6f, 0x6b, 0xff, 0x63, 0x85, + 0xed, 0xfe, 0xf1, 0x24, 0x1f, 0x17, 0x31, 0xf7, 0xa6, 0xa0, 0xe0, 0x4b, 0xcb, 0x14, 0x08, 0x12, + 0x85, 0x2b, 0x0b, 0xb8, 0xe0, 0xd7, 0xd4, 0xba, 0x2a, 0xf4, 0x5c, 0x57, 0xef, 0x86, 0xd1, 0x9a, + 0x1f, 0xb7, 0x9b, 0xde, 0xce, 0xb5, 0x1c, 0xb3, 0xe0, 0x42, 0x5a, 0x84, 0x75, 0x3c, 0xf4, 0xa4, + 0xb8, 0x1a, 0x31, 0x68, 0x98, 0x82, 0xe4, 0xd5, 0x88, 0xf4, 0xd2, 0x35, 0xbf, 0x15, 0x91, 0xbd, + 0x9c, 0x5e, 0xec, 0xfb, 0x72, 0x7a, 0x56, 0x13, 0x1b, 0x3a, 0x7e, 0x4d, 0xec, 0xbd, 0x30, 0x2e, + 0x7f, 0x32, 0xf5, 0xa8, 0x7c, 0x9a, 0xb5, 0x5e, 0x99, 0xab, 0xd7, 0xf5, 0x42, 0x6c, 0xe2, 0xa6, + 0x93, 0x76, 0xb8, 0xdf, 0x49, 0x7b, 0x11, 0x60, 0x23, 0xec, 0x04, 0x35, 0x2f, 0xda, 0xb9, 0xb2, + 0x20, 0x02, 0x29, 0x95, 0xe2, 0x37, 0xa7, 0x4a, 0xb0, 0x86, 0xa5, 0x4f, 0xf4, 0x91, 0x3b, 0x4c, + 0xf4, 0x0f, 0xc2, 0x08, 0x0b, 0x3a, 0x25, 0xb5, 0xd9, 0x44, 0x84, 0x18, 0x1d, 0x24, 0x3e, 0x51, + 0xc9, 0xdc, 0x8a, 0x24, 0x82, 0x53, 0x7a, 0xe8, 0x43, 0x00, 0x9b, 0x7e, 0xe0, 0xc7, 0x0d, 0x46, + 0x7d, 0xf4, 0xc0, 0xd4, 0x55, 0x3f, 0x17, 0x15, 0x15, 0xac, 0x51, 0x44, 0x2f, 0xc1, 0x49, 0x12, + 0x27, 0x7e, 0xcb, 0x4b, 0x48, 0x4d, 0x5d, 0x26, 0x2c, 0x33, 0x5b, 0xa6, 0x0a, 0xfb, 0xbd, 0x94, + 0x45, 0xb8, 0x9d, 0x07, 0xc4, 0xdd, 0x84, 0x8c, 0x15, 0x39, 0x75, 0x90, 0x15, 0x89, 0xfe, 0xc2, + 0x81, 0x93, 0x11, 0xe1, 0x71, 0x27, 0xb1, 0x6a, 0xd8, 0x19, 0x26, 0x8e, 0xab, 0x36, 0xf2, 0x7f, + 0xab, 0x44, 0x1f, 0x38, 0xcb, 0x85, 0x2b, 0x2e, 0x44, 0xf6, 0xbe, 0xab, 0xfc, 0x76, 0x1e, 0xf0, + 0x8d, 0xb7, 0xa6, 0xa7, 0xbb, 0xf3, 0xd0, 0x2b, 0xe2, 0x74, 0xe5, 0xfd, 0xdd, 0xb7, 0xa6, 0x27, + 0xe5, 0xef, 0x74, 0xd0, 0xba, 0x3a, 0x49, 0xb7, 0xd5, 0x76, 0x58, 0xbb, 0xb2, 0x26, 0x62, 0xc1, + 0xd4, 0xb6, 0xba, 0x46, 0x81, 0x98, 0x97, 0xa1, 0xc7, 0xa1, 0x54, 0xf3, 0x48, 0x2b, 0x0c, 0x54, + 0x26, 0x57, 0xa6, 0xcd, 0x2f, 0x08, 0x18, 0x56, 0xa5, 0xf4, 0x0c, 0x11, 0x88, 0x2d, 0xa5, 0xfc, + 0x80, 0xad, 0x33, 0x84, 0xdc, 0xa4, 0x38, 0x57, 0xf9, 0x0b, 0x2b, 0x4e, 0xa8, 0x09, 0x43, 0x3e, + 0x33, 0x54, 0x88, 0x70, 0x53, 0x0b, 0xd6, 0x11, 0x6e, 0xf8, 0x90, 0xc1, 0xa6, 0x4c, 0xf4, 0x0b, + 0x1e, 0xfa, 0x5e, 0x73, 0xe2, 0x78, 0xf6, 0x9a, 0xc7, 0xa1, 0x54, 0x6d, 0xf8, 0xcd, 0x5a, 0x44, + 0x82, 0xf2, 0x24, 0x3b, 0xb1, 0xb3, 0x91, 0x98, 0x17, 0x30, 0xac, 0x4a, 0xd1, 0xdf, 0x80, 0xf1, + 0xb0, 0x93, 0x30, 0xd1, 0x42, 0xc7, 0x29, 0x2e, 0x9f, 0x64, 0xe8, 0x2c, 0x78, 0x68, 0x55, 0x2f, + 0xc0, 0x26, 0x1e, 0x15, 0xf1, 0x8d, 0x30, 0x66, 0x39, 0x69, 0x98, 0x88, 0x3f, 0x6b, 0x8a, 0xf8, + 0xcb, 0x5a, 0x19, 0x36, 0x30, 0xd1, 0x57, 0x1d, 0x38, 0xd9, 0xca, 0x1e, 0xe0, 0xca, 0xe7, 0xd8, + 0xc8, 0x54, 0x6c, 0x28, 0xfa, 0x19, 0xd2, 0x3c, 0xc6, 0xba, 0x0b, 0x8c, 0xbb, 0x1b, 0xc1, 0xb2, + 0x43, 0xc5, 0x3b, 0x41, 0xb5, 0x11, 0x85, 0x81, 0xd9, 0xbc, 0xfb, 0x6d, 0xdd, 0x89, 0x62, 0x6b, + 0x3b, 0x8f, 0xc5, 0xdc, 0xfd, 0x7b, 0xbb, 0xd3, 0x67, 0x72, 0x8b, 0x70, 0x7e, 0xa3, 0xa6, 0x16, + 0xe0, 0x6c, 0xbe, 0x7c, 0xb8, 0xd3, 0x89, 0x63, 0x40, 0x3f, 0x71, 0x2c, 0xc2, 0xfd, 0x3d, 0x1b, + 0x45, 0x77, 0x1a, 0xa9, 0x6d, 0x3a, 0xe6, 0x4e, 0xd3, 0xa5, 0x1d, 0x4e, 0xc0, 0x98, 0xfe, 0x70, + 0x81, 0xfb, 0x7f, 0x06, 0x00, 0x52, 0x3b, 0x39, 0xf2, 0x60, 0x82, 0xdb, 0xe4, 0xaf, 0x2c, 0x1c, + 0xfa, 0x36, 0xf7, 0xbc, 0x41, 0x00, 0x67, 0x08, 0xa2, 0x16, 0x20, 0x0e, 0xe1, 0xbf, 0x0f, 0xe3, + 0x5b, 0x65, 0xae, 0xc8, 0xf9, 0x2e, 0x22, 0x38, 0x87, 0x30, 0xed, 0x51, 0x12, 0x6e, 0x91, 0xe0, + 0x3a, 0xbe, 0x7a, 0x98, 0x94, 0x00, 0xdc, 0x1b, 0x67, 0x10, 0xc0, 0x19, 0x82, 0xc8, 0x85, 0x21, + 0x66, 0x9b, 0x91, 0x01, 0xda, 0x4c, 0xbc, 0x30, 0x4d, 0x23, 0xc6, 0xa2, 0x04, 0x7d, 0xd9, 0x81, + 0x09, 0x99, 0xd9, 0x80, 0x59, 0x43, 0x65, 0x68, 0xf6, 0x75, 0x5b, 0x7e, 0x8e, 0x4b, 0x3a, 0xf5, + 0x34, 0xf0, 0xd1, 0x00, 0xc7, 0x38, 0xd3, 0x08, 0xf7, 0x05, 0x38, 0x95, 0x53, 0xdd, 0xca, 0x89, + 0xf6, 0x3b, 0x0e, 0x8c, 0x6a, 0x09, 0xf7, 0xd0, 0x6b, 0x30, 0x12, 0x56, 0xac, 0x47, 0xdb, 0xad, + 0x56, 0xba, 0xa2, 0xed, 0x14, 0x08, 0xa7, 0x0c, 0xfb, 0x09, 0x12, 0xcc, 0xcd, 0x0e, 0x78, 0x8f, + 0x9b, 0x7d, 0xe0, 0x20, 0xc1, 0x5f, 0x29, 0x42, 0x4a, 0xe9, 0x80, 0x19, 0x37, 0xd2, 0x90, 0xc2, + 0xc2, 0xbe, 0x21, 0x85, 0x35, 0x38, 0xe1, 0x31, 0x5f, 0xf2, 0x21, 0xf3, 0x6c, 0xf0, 0x7c, 0xab, + 0x26, 0x05, 0x9c, 0x25, 0x49, 0xb9, 0xc4, 0x69, 0x55, 0xc6, 0x65, 0xf0, 0xc0, 0x5c, 0x2a, 0x26, + 0x05, 0x9c, 0x25, 0x89, 0x5e, 0x82, 0x72, 0x95, 0xdd, 0x1b, 0xe5, 0x7d, 0xbc, 0xb2, 0x79, 0x2d, + 0x4c, 0xd6, 0x22, 0x12, 0x93, 0x20, 0x11, 0x19, 0xb5, 0x1e, 0x16, 0xa3, 0x50, 0x9e, 0xef, 0x81, + 0x87, 0x7b, 0x52, 0xa0, 0xc7, 0x14, 0xe6, 0x8c, 0xf6, 0x93, 0x1d, 0x26, 0x44, 0x84, 0x97, 0x5e, + 0x1d, 0x53, 0x2a, 0x7a, 0x21, 0x36, 0x71, 0xd1, 0x2f, 0x3b, 0x30, 0xde, 0x94, 0xe6, 0x7a, 0xdc, + 0x69, 0xca, 0xf4, 0x90, 0xd8, 0xca, 0xf4, 0xbb, 0xaa, 0x53, 0xe6, 0xba, 0x84, 0x01, 0xc2, 0x26, + 0xef, 0x6c, 0xd2, 0x93, 0x52, 0x9f, 0x49, 0x4f, 0xbe, 0xef, 0xc0, 0x64, 0x96, 0x1b, 0xda, 0x82, + 0x87, 0x5a, 0x5e, 0xb4, 0x75, 0x25, 0xd8, 0x8c, 0xd8, 0x45, 0x8c, 0x84, 0x4f, 0x86, 0xd9, 0xcd, + 0x84, 0x44, 0x0b, 0xde, 0x0e, 0x77, 0x7f, 0x16, 0xd5, 0xfb, 0x42, 0x0f, 0xad, 0xec, 0x87, 0x8c, + 0xf7, 0xa7, 0x85, 0x2a, 0x70, 0x86, 0x22, 0xb0, 0x9c, 0x68, 0x7e, 0x18, 0xa4, 0x4c, 0x0a, 0x8c, + 0x89, 0x0a, 0x06, 0x5c, 0xc9, 0x43, 0xc2, 0xf9, 0x75, 0xdd, 0x12, 0x0c, 0xf1, 0x4b, 0x68, 0xee, + 0xbf, 0x2f, 0x80, 0xd4, 0xed, 0xfe, 0x7a, 0x7b, 0xd4, 0xe8, 0x3e, 0x18, 0x31, 0xab, 0x90, 0x30, + 0x58, 0xb0, 0x7d, 0x50, 0x24, 0x10, 0x14, 0x25, 0x54, 0xe9, 0x25, 0xb7, 0xfc, 0x64, 0x3e, 0xac, + 0x49, 0x33, 0x05, 0x53, 0x7a, 0x2f, 0x09, 0x18, 0x56, 0xa5, 0xee, 0x27, 0x1d, 0x18, 0xa7, 0xbd, + 0x6c, 0x36, 0x49, 0xb3, 0x92, 0x90, 0x76, 0x8c, 0x62, 0x28, 0xc6, 0xf4, 0x1f, 0x7b, 0xd6, 0xbc, + 0xf4, 0xee, 0x21, 0x69, 0x6b, 0xfe, 0x16, 0xca, 0x04, 0x73, 0x5e, 0xee, 0x9b, 0x03, 0x30, 0xa2, + 0x06, 0xbb, 0x0f, 0x93, 0xe8, 0xc5, 0x34, 0xb7, 0x27, 0x17, 0xa2, 0x65, 0x2d, 0xaf, 0xe7, 0x6d, + 0x3a, 0x74, 0xc1, 0x0e, 0x4f, 0x72, 0x90, 0x26, 0xf9, 0x7c, 0xd2, 0xf4, 0x16, 0x9f, 0xd5, 0x5d, + 0x90, 0x1a, 0xbe, 0x70, 0x1b, 0xdf, 0xd2, 0x9d, 0xf5, 0x83, 0xb6, 0x36, 0x24, 0xe5, 0x89, 0xec, + 0xed, 0xa5, 0xcf, 0x3c, 0xfb, 0x52, 0xec, 0xeb, 0xd9, 0x97, 0x27, 0x60, 0x90, 0x04, 0x9d, 0x16, + 0xd3, 0x76, 0x46, 0x98, 0x96, 0x3f, 0x78, 0x29, 0xe8, 0xb4, 0xcc, 0x9e, 0x31, 0x14, 0xf4, 0x3e, + 0x18, 0xad, 0x91, 0xb8, 0x1a, 0xf9, 0xec, 0xe6, 0xbe, 0x30, 0xce, 0x3c, 0xc8, 0x2c, 0x5e, 0x29, + 0xd8, 0xac, 0xa8, 0x57, 0x70, 0x5f, 0x81, 0xa1, 0xb5, 0x66, 0xa7, 0xee, 0x07, 0xa8, 0x0d, 0x43, + 0xfc, 0x1e, 0xbf, 0xd8, 0xb0, 0x2d, 0x1c, 0x1d, 0xf9, 0x6a, 0xd7, 0x02, 0x49, 0xf8, 0x15, 0x54, + 0xc1, 0xc7, 0xfd, 0xad, 0x02, 0xd0, 0xd3, 0xf5, 0xd2, 0x3c, 0xfa, 0xdb, 0x5d, 0xaf, 0x9c, 0xfc, + 0x4c, 0xce, 0x2b, 0x27, 0xe3, 0x0c, 0x39, 0xe7, 0x81, 0x93, 0x26, 0x8c, 0x33, 0xff, 0x86, 0xdc, + 0xc6, 0x84, 0x66, 0xfc, 0x74, 0x9f, 0x57, 0xdf, 0xf5, 0xaa, 0x42, 0xa8, 0xeb, 0x20, 0x6c, 0x12, + 0x47, 0x3b, 0x70, 0x8a, 0xa7, 0x88, 0x5c, 0x20, 0x4d, 0x6f, 0xc7, 0x48, 0x05, 0xd5, 0xf7, 0x75, + 0x7b, 0x59, 0x8b, 0xc7, 0x68, 0x2f, 0x74, 0x93, 0xc3, 0x79, 0x3c, 0xdc, 0xdf, 0x1b, 0x04, 0xcd, + 0x03, 0xd1, 0xc7, 0xca, 0xfa, 0x68, 0xc6, 0xdf, 0xb4, 0x62, 0xc5, 0xdf, 0x24, 0x9d, 0x38, 0x5c, + 0x5a, 0x99, 0x2e, 0x26, 0xda, 0xa8, 0x06, 0x69, 0xb6, 0xc5, 0xba, 0x54, 0x8d, 0xba, 0x4c, 0x9a, + 0x6d, 0xcc, 0x4a, 0xd4, 0xfd, 0xc1, 0xc1, 0x9e, 0xf7, 0x07, 0x1b, 0x50, 0xac, 0x7b, 0x9d, 0x3a, + 0x11, 0x01, 0x97, 0x16, 0x5c, 0x8b, 0xec, 0x46, 0x03, 0x77, 0x2d, 0xb2, 0x7f, 0x31, 0x67, 0x40, + 0x05, 0x43, 0x43, 0x46, 0xa0, 0x08, 0x9b, 0xac, 0x05, 0xc1, 0xa0, 0x82, 0x5a, 0xb8, 0x60, 0x50, + 0x3f, 0x71, 0xca, 0x0c, 0xb5, 0x61, 0xb8, 0xca, 0x93, 0x75, 0x08, 0x15, 0xe5, 0x8a, 0x8d, 0x0b, + 0x92, 0x8c, 0x20, 0x37, 0x9e, 0x88, 0x1f, 0x58, 0xb2, 0x71, 0x2f, 0xc0, 0xa8, 0xf6, 0x30, 0x03, + 0xfd, 0x0c, 0x2a, 0x4f, 0x84, 0xf6, 0x19, 0x16, 0xbc, 0xc4, 0xc3, 0xac, 0xc4, 0xfd, 0xe6, 0x20, + 0x28, 0xd3, 0x99, 0x7e, 0x9d, 0xcf, 0xab, 0x6a, 0x59, 0x6d, 0x8c, 0x7b, 0xe4, 0x61, 0x80, 0x45, + 0x29, 0x55, 0xe3, 0x5a, 0x24, 0xaa, 0xab, 0x63, 0xb3, 0x10, 0xed, 0x4a, 0x8d, 0x5b, 0xd1, 0x0b, + 0xb1, 0x89, 0x4b, 0x75, 0xf0, 0x96, 0xf0, 0xc8, 0x67, 0xe3, 0x9d, 0xa5, 0xa7, 0x1e, 0x2b, 0x0c, + 0xf4, 0x49, 0x07, 0xc6, 0x5a, 0x9a, 0x03, 0x5f, 0xc4, 0x5d, 0xda, 0xf0, 0x1f, 0x69, 0x54, 0x79, + 0x7c, 0x94, 0x0e, 0xc1, 0x06, 0x57, 0xb4, 0x04, 0x27, 0x63, 0x92, 0xac, 0xde, 0x0c, 0x48, 0xa4, + 0xae, 0xd9, 0x8b, 0xbc, 0x0b, 0xea, 0xb2, 0x43, 0x25, 0x8b, 0x80, 0xbb, 0xeb, 0xe4, 0x86, 0xaa, + 0x16, 0x0f, 0x1c, 0xaa, 0xba, 0x00, 0x93, 0x9b, 0x9e, 0xdf, 0xec, 0x44, 0xa4, 0x67, 0xc0, 0xeb, + 0x62, 0xa6, 0x1c, 0x77, 0xd5, 0x60, 0xf7, 0x6d, 0x9a, 0x5e, 0x3d, 0x2e, 0x0f, 0x6b, 0xf7, 0x6d, + 0x28, 0x00, 0x73, 0xb8, 0xfb, 0x1b, 0x0e, 0xf0, 0x84, 0x37, 0xb3, 0x9b, 0x9b, 0x7e, 0xe0, 0x27, + 0x3b, 0xe8, 0x6b, 0x0e, 0x4c, 0x06, 0x61, 0x8d, 0xcc, 0x06, 0x89, 0x2f, 0x81, 0xf6, 0xb2, 0x90, + 0x33, 0x5e, 0xd7, 0x32, 0xe4, 0x79, 0xf6, 0x84, 0x2c, 0x14, 0x77, 0x35, 0xc3, 0x3d, 0x07, 0x67, + 0x72, 0x09, 0xb8, 0xdf, 0x1f, 0x00, 0x33, 0x6f, 0x0f, 0x7a, 0x0e, 0x8a, 0x4d, 0x96, 0x49, 0xc2, + 0x39, 0x64, 0x42, 0x26, 0x36, 0x56, 0x3c, 0xd5, 0x04, 0xa7, 0x84, 0x16, 0x60, 0x94, 0x25, 0x03, + 0x12, 0x79, 0x3e, 0xf8, 0x8a, 0x70, 0xd3, 0xc7, 0xcf, 0x54, 0xd1, 0x6d, 0xf3, 0x27, 0xd6, 0xab, + 0xa1, 0x57, 0x61, 0x78, 0x83, 0xa7, 0x44, 0xb4, 0xe7, 0xe2, 0x13, 0x39, 0x16, 0x99, 0x1e, 0x25, + 0x13, 0x2e, 0xde, 0x4e, 0xff, 0xc5, 0x92, 0x23, 0xda, 0x81, 0x92, 0x27, 0xbf, 0xe9, 0xa0, 0xad, + 0xfb, 0x13, 0xc6, 0xfc, 0x11, 0x01, 0x32, 0xf2, 0x1b, 0x2a, 0x76, 0x99, 0x48, 0xa2, 0x62, 0x5f, + 0x91, 0x44, 0xdf, 0x76, 0x00, 0xd2, 0xf7, 0x23, 0xd0, 0x2d, 0x28, 0xc5, 0x4f, 0x1b, 0x76, 0x09, + 0x1b, 0x17, 0xe7, 0x05, 0x45, 0xed, 0x72, 0xa9, 0x80, 0x60, 0xc5, 0xed, 0x4e, 0xb6, 0x94, 0x9f, + 0x3a, 0x70, 0x3a, 0xef, 0x9d, 0x8b, 0x7b, 0xd8, 0xe2, 0x83, 0x9a, 0x51, 0x44, 0x85, 0xb5, 0x88, + 0x6c, 0xfa, 0xb7, 0x72, 0x12, 0xf3, 0xf2, 0x02, 0x9c, 0xe2, 0xb8, 0x6f, 0x0c, 0x83, 0x62, 0x7c, + 0x44, 0x66, 0x97, 0xc7, 0xe8, 0xf9, 0xaa, 0x9e, 0xde, 0x77, 0x54, 0x78, 0x98, 0x41, 0xb1, 0x28, + 0xa5, 0x67, 0x2c, 0x19, 0x03, 0x2f, 0x44, 0x36, 0x9b, 0x85, 0x32, 0x56, 0x1e, 0xab, 0xd2, 0x3c, + 0x43, 0x4e, 0xf1, 0x58, 0x0c, 0x39, 0x43, 0xf6, 0x0d, 0x39, 0x4f, 0xc0, 0x70, 0x14, 0x36, 0xc9, + 0x2c, 0xbe, 0x26, 0x4e, 0x0e, 0x69, 0x0c, 0x03, 0x07, 0x63, 0x59, 0x7e, 0x48, 0x53, 0x06, 0xfa, + 0x6d, 0x67, 0x1f, 0x5b, 0xd1, 0x88, 0xad, 0x3d, 0x21, 0x37, 0x8b, 0x19, 0x3b, 0x06, 0x1d, 0xc6, + 0x00, 0xf5, 0x75, 0x07, 0x4e, 0x92, 0xa0, 0x1a, 0xed, 0x30, 0x3a, 0x82, 0x9a, 0x70, 0x31, 0x5f, + 0xb7, 0xb1, 0xf8, 0x2e, 0x65, 0x89, 0x73, 0x4f, 0x4e, 0x17, 0x18, 0x77, 0x37, 0x03, 0xad, 0x42, + 0xa9, 0xea, 0x89, 0x19, 0x31, 0x7a, 0x90, 0x19, 0xc1, 0x1d, 0x65, 0xb3, 0x62, 0x2a, 0x28, 0x22, + 0xee, 0x8f, 0x0b, 0x70, 0x2a, 0xa7, 0x49, 0xec, 0xbe, 0x54, 0x8b, 0xce, 0xc8, 0x2b, 0xb5, 0xec, + 0x7a, 0x5c, 0x16, 0x70, 0xac, 0x30, 0xd0, 0x1a, 0x9c, 0xde, 0x6a, 0xc5, 0x29, 0x95, 0xf9, 0x30, + 0x48, 0xc8, 0x2d, 0xb9, 0x3a, 0xa5, 0xfb, 0xf9, 0xf4, 0x72, 0x0e, 0x0e, 0xce, 0xad, 0x49, 0xd5, + 0x17, 0x12, 0x78, 0x1b, 0x4d, 0x92, 0x16, 0x89, 0xdb, 0x7e, 0x4a, 0x7d, 0xb9, 0x94, 0x29, 0xc7, + 0x5d, 0x35, 0xd0, 0x67, 0x1d, 0x78, 0x20, 0x26, 0xd1, 0x36, 0x89, 0x2a, 0x7e, 0x8d, 0xcc, 0x77, + 0xe2, 0x24, 0x6c, 0x91, 0xe8, 0x90, 0xd6, 0xd1, 0xe9, 0xbd, 0xdd, 0xe9, 0x07, 0x2a, 0xbd, 0xa9, + 0xe1, 0xfd, 0x58, 0xb9, 0x9f, 0x75, 0x60, 0xa2, 0xc2, 0x0e, 0xde, 0x4a, 0x97, 0xb6, 0x9d, 0xc7, + 0xf2, 0x31, 0x95, 0x9f, 0x22, 0x23, 0x15, 0xcd, 0x8c, 0x12, 0xee, 0xcb, 0x30, 0x59, 0x21, 0x2d, + 0xaf, 0xdd, 0x60, 0x57, 0x75, 0x79, 0xf8, 0xd5, 0x05, 0x18, 0x89, 0x25, 0x2c, 0xfb, 0x74, 0x8d, + 0x42, 0xc6, 0x29, 0x0e, 0x7a, 0x94, 0x87, 0x8a, 0xc9, 0x0b, 0x3f, 0x23, 0xfc, 0xd4, 0xc1, 0xe3, + 0xcb, 0x62, 0x2c, 0xcb, 0xdc, 0x37, 0x1d, 0x18, 0x4b, 0xeb, 0x93, 0x4d, 0x54, 0x87, 0x13, 0x55, + 0xed, 0xb2, 0x5c, 0x7a, 0x4d, 0xa1, 0xff, 0x7b, 0x75, 0x3c, 0xbd, 0xae, 0x49, 0x04, 0x67, 0xa9, + 0x1e, 0x3c, 0xd2, 0xee, 0x0b, 0x05, 0x38, 0xa1, 0x9a, 0x2a, 0xfc, 0x84, 0xaf, 0x67, 0x03, 0xe2, + 0xb0, 0x8d, 0x4c, 0x3b, 0xe6, 0xd8, 0xef, 0x13, 0x14, 0xf7, 0x7a, 0x36, 0x28, 0xee, 0x48, 0xd9, + 0x77, 0xb9, 0x3e, 0xbf, 0x5d, 0x80, 0x92, 0xca, 0xfb, 0xf3, 0x1c, 0x14, 0xd9, 0x51, 0xf2, 0xee, + 0x14, 0x62, 0x76, 0x2c, 0xc5, 0x9c, 0x12, 0x25, 0xc9, 0x82, 0x6e, 0x0e, 0x9d, 0xf4, 0x74, 0x84, + 0x1b, 0x1f, 0xbd, 0x28, 0xc1, 0x9c, 0x12, 0x5a, 0x86, 0x01, 0x12, 0xd4, 0x84, 0x66, 0x7c, 0x70, + 0x82, 0xec, 0x91, 0xa9, 0x4b, 0x41, 0x0d, 0x53, 0x2a, 0x2c, 0xf3, 0x26, 0x57, 0x80, 0x32, 0x4f, + 0x8a, 0x08, 0xed, 0x47, 0x94, 0xba, 0xbf, 0x3c, 0x00, 0x43, 0x95, 0xce, 0x06, 0xd5, 0xf1, 0xbf, + 0xe5, 0xc0, 0xa9, 0x9b, 0x99, 0x8c, 0xc0, 0xe9, 0x1c, 0xbf, 0x6e, 0xcf, 0x00, 0xab, 0x07, 0x7e, + 0x3d, 0x20, 0xdf, 0x4b, 0xcf, 0x29, 0xc4, 0x79, 0xcd, 0x31, 0x92, 0x72, 0x0e, 0x1c, 0x49, 0x52, + 0xce, 0x5b, 0x47, 0x7c, 0xf3, 0x61, 0xbc, 0xd7, 0xad, 0x07, 0xf7, 0xf7, 0x8a, 0x00, 0xfc, 0x6b, + 0xac, 0xb6, 0x93, 0x7e, 0xcc, 0x64, 0xcf, 0xc0, 0x58, 0x9d, 0x04, 0x24, 0x92, 0x61, 0x7d, 0x99, + 0xd7, 0x6a, 0x96, 0xb4, 0x32, 0x6c, 0x60, 0xb2, 0x33, 0x49, 0x90, 0x44, 0x3b, 0x5c, 0x6f, 0xcd, + 0xde, 0x6e, 0x50, 0x25, 0x58, 0xc3, 0x42, 0x33, 0x86, 0xc7, 0x83, 0xfb, 0xbf, 0x27, 0xf6, 0x71, + 0x50, 0xbc, 0x0f, 0x26, 0xcc, 0x54, 0x21, 0x42, 0x59, 0x53, 0xfe, 0x6a, 0x33, 0xc3, 0x08, 0xce, + 0x60, 0xd3, 0x49, 0x5c, 0x8b, 0x76, 0x70, 0x27, 0x10, 0x5a, 0x9b, 0x9a, 0xc4, 0x0b, 0x0c, 0x8a, + 0x45, 0x29, 0xcb, 0xb1, 0xc0, 0xf6, 0x2f, 0x0e, 0x17, 0x79, 0x1a, 0xd2, 0x1c, 0x0b, 0x5a, 0x19, + 0x36, 0x30, 0x29, 0x07, 0x61, 0x66, 0x04, 0x73, 0x99, 0x64, 0x6c, 0x83, 0x6d, 0x98, 0x08, 0x4d, + 0xf3, 0x08, 0x57, 0x61, 0xde, 0xd5, 0xe7, 0xd4, 0x33, 0xea, 0xf2, 0x38, 0x83, 0x8c, 0x35, 0x25, + 0x43, 0x9f, 0xaa, 0xad, 0xfa, 0x25, 0x80, 0x31, 0x33, 0x2a, 0xb4, 0x67, 0x9c, 0xfe, 0x1a, 0x9c, + 0x6e, 0x87, 0xb5, 0xb5, 0xc8, 0x0f, 0x23, 0x3f, 0xd9, 0x99, 0x6f, 0x7a, 0x71, 0xcc, 0x26, 0xc6, + 0xb8, 0xa9, 0xce, 0xac, 0xe5, 0xe0, 0xe0, 0xdc, 0x9a, 0xf4, 0x80, 0xd1, 0x16, 0x40, 0x16, 0x9b, + 0x55, 0xe4, 0x0a, 0x99, 0x44, 0xc4, 0xaa, 0xd4, 0x3d, 0x05, 0x27, 0x2b, 0x9d, 0x76, 0xbb, 0xe9, + 0x93, 0x9a, 0xf2, 0x28, 0xb8, 0xef, 0x87, 0x13, 0x22, 0x65, 0xa7, 0x52, 0x1e, 0x0e, 0x94, 0x60, + 0xda, 0xfd, 0x0b, 0x07, 0x4e, 0x64, 0x22, 0x61, 0xd0, 0xab, 0xd9, 0x2d, 0xdf, 0x8a, 0xcd, 0x4c, + 0xdf, 0xec, 0xf9, 0x22, 0xcd, 0x55, 0x1f, 0x1a, 0x32, 0x8c, 0xdd, 0xda, 0xf5, 0x11, 0x16, 0xec, + 0xcd, 0x77, 0x04, 0x3d, 0x16, 0xde, 0xfd, 0x4c, 0x01, 0xf2, 0xc3, 0x8f, 0xd0, 0xc7, 0xba, 0x07, + 0xe0, 0x39, 0x8b, 0x03, 0x20, 0xe2, 0x9f, 0x7a, 0x8f, 0x41, 0x60, 0x8e, 0xc1, 0x8a, 0xa5, 0x31, + 0x10, 0x7c, 0xbb, 0x47, 0xe2, 0x7f, 0x3a, 0x30, 0xba, 0xbe, 0x7e, 0x55, 0x99, 0xb8, 0x30, 0x9c, + 0x8d, 0xf9, 0xf5, 0x78, 0xe6, 0xa5, 0x9d, 0x0f, 0x5b, 0x6d, 0xee, 0xb4, 0x15, 0xce, 0x64, 0x96, + 0x3d, 0xb5, 0x92, 0x8b, 0x81, 0x7b, 0xd4, 0x44, 0x57, 0xe0, 0x94, 0x5e, 0x52, 0xd1, 0x1e, 0xab, + 0x2b, 0x8a, 0x94, 0x34, 0xdd, 0xc5, 0x38, 0xaf, 0x4e, 0x96, 0x94, 0xb0, 0x56, 0xb2, 0xed, 0x2a, + 0x87, 0x94, 0x28, 0xc6, 0x79, 0x75, 0xdc, 0x55, 0x18, 0x5d, 0xf7, 0x22, 0xd5, 0xf1, 0x0f, 0xc0, + 0x64, 0x35, 0x6c, 0x49, 0x2b, 0xd1, 0x55, 0xb2, 0x4d, 0x9a, 0xa2, 0xcb, 0xfc, 0x85, 0x88, 0x4c, + 0x19, 0xee, 0xc2, 0x76, 0xff, 0xfb, 0x79, 0x50, 0xd7, 0xfd, 0xfa, 0xd8, 0x61, 0xda, 0x2a, 0x30, + 0xb3, 0x68, 0x39, 0x30, 0x53, 0xc9, 0xda, 0x4c, 0x70, 0x66, 0x92, 0x06, 0x67, 0x0e, 0xd9, 0x0e, + 0xce, 0x54, 0x0a, 0x63, 0x57, 0x80, 0xe6, 0x57, 0x1c, 0x18, 0x0b, 0xc2, 0x1a, 0x51, 0xae, 0xb8, + 0x61, 0xa6, 0xb5, 0xbe, 0x64, 0x2f, 0xce, 0x9d, 0x07, 0x1a, 0x0a, 0xf2, 0x3c, 0x68, 0x58, 0x6d, + 0x51, 0x7a, 0x11, 0x36, 0xda, 0x81, 0x16, 0x35, 0xbb, 0x25, 0x77, 0x0f, 0x3c, 0x98, 0x77, 0xdc, + 0xb8, 0xa3, 0x11, 0xf2, 0x96, 0xa6, 0x37, 0x8d, 0xd8, 0xb2, 0xc7, 0xc9, 0x3b, 0x5c, 0x9a, 0x97, + 0x43, 0x26, 0x00, 0x4e, 0xf5, 0x29, 0x17, 0x86, 0x78, 0x74, 0xb1, 0x48, 0x7e, 0xc4, 0x9c, 0x6f, + 0x3c, 0xf2, 0x18, 0x8b, 0x12, 0x94, 0x48, 0x77, 0xff, 0xa8, 0xad, 0x74, 0xfe, 0x46, 0x38, 0x41, + 0xbe, 0xbf, 0x1f, 0x3d, 0xab, 0x1f, 0x63, 0xc7, 0xfa, 0x39, 0xc6, 0x8e, 0xf7, 0x3c, 0xc2, 0x7e, + 0xde, 0x81, 0xb1, 0xaa, 0x96, 0x5e, 0xbf, 0xfc, 0xb8, 0xad, 0x67, 0x84, 0xf3, 0x5e, 0x41, 0xe0, + 0x3e, 0x1d, 0x23, 0x9d, 0xbf, 0xc1, 0x9d, 0x65, 0x7c, 0x64, 0x67, 0x76, 0xb6, 0xf5, 0x5b, 0x49, + 0xf2, 0x60, 0xda, 0x00, 0x64, 0xe4, 0x23, 0x85, 0x61, 0xc1, 0x0b, 0xbd, 0x06, 0x25, 0x19, 0xa0, + 0x2e, 0x02, 0xb9, 0xb1, 0x0d, 0x23, 0xbb, 0xe9, 0xc9, 0x93, 0x69, 0xe2, 0x38, 0x14, 0x2b, 0x8e, + 0xa8, 0x01, 0x03, 0x35, 0xaf, 0x2e, 0x42, 0xba, 0x57, 0xec, 0xa4, 0xe1, 0x94, 0x3c, 0xd9, 0xf1, + 0x6a, 0x61, 0x76, 0x09, 0x53, 0x16, 0xe8, 0x56, 0x9a, 0x9f, 0x7c, 0xd2, 0xda, 0xee, 0x6b, 0xaa, + 0x49, 0xdc, 0x2a, 0xd1, 0x95, 0xee, 0xbc, 0x26, 0x9c, 0x9f, 0xff, 0x1f, 0x63, 0xbb, 0x68, 0x27, + 0x8f, 0x27, 0x4f, 0x1a, 0x92, 0x3a, 0x50, 0x29, 0x97, 0x46, 0x92, 0xb4, 0xcb, 0x3f, 0x6b, 0x8b, + 0x0b, 0x4b, 0x7d, 0xc1, 0x5f, 0x7c, 0x5e, 0x5f, 0x5f, 0xc3, 0x8c, 0x3a, 0x6a, 0xc2, 0x50, 0x9b, + 0xc5, 0x70, 0x94, 0x7f, 0xce, 0xd6, 0xde, 0xc2, 0x63, 0x42, 0xf8, 0xdc, 0xe4, 0xff, 0x63, 0xc1, + 0x03, 0x5d, 0x82, 0x61, 0xfe, 0xcc, 0x06, 0x0f, 0xa9, 0x1f, 0xbd, 0x38, 0xd5, 0xfb, 0xb1, 0x8e, + 0x74, 0xa3, 0xe0, 0xbf, 0x63, 0x2c, 0xeb, 0xa2, 0x2f, 0x38, 0x30, 0x41, 0x25, 0x6a, 0xfa, 0x2e, + 0x48, 0x19, 0xd9, 0x92, 0x59, 0xd7, 0x63, 0xaa, 0x91, 0x48, 0x59, 0xa3, 0x8e, 0x49, 0x57, 0x0c, + 0x76, 0x38, 0xc3, 0x1e, 0xbd, 0x0e, 0xa5, 0xd8, 0xaf, 0x91, 0xaa, 0x17, 0xc5, 0xe5, 0x53, 0x47, + 0xd3, 0x94, 0xd4, 0xdd, 0x22, 0x18, 0x61, 0xc5, 0x32, 0xf7, 0xf9, 0xfe, 0xd3, 0xf7, 0xf8, 0xf9, + 0xfe, 0xbf, 0xe3, 0xc0, 0x19, 0x9e, 0x16, 0x3e, 0xfb, 0x26, 0xc0, 0x99, 0x43, 0x9a, 0x57, 0xd8, + 0x5d, 0x80, 0xd9, 0x3c, 0x92, 0x38, 0x9f, 0x13, 0xcb, 0x2b, 0x6b, 0x3e, 0xe3, 0x72, 0xd6, 0xaa, + 0xdb, 0xb1, 0xff, 0xa7, 0x5b, 0xd0, 0x53, 0x30, 0xda, 0x16, 0xdb, 0xa1, 0x1f, 0xb7, 0xd8, 0xcd, + 0x8e, 0x01, 0x7e, 0xe7, 0x6e, 0x2d, 0x05, 0x63, 0x1d, 0xc7, 0x48, 0x32, 0xfc, 0xc4, 0x7e, 0x49, + 0x86, 0xd1, 0x75, 0x18, 0x4d, 0xc2, 0xa6, 0xc8, 0xb3, 0x19, 0x97, 0xcb, 0x6c, 0x06, 0x9e, 0xcf, + 0x5b, 0x5b, 0xeb, 0x0a, 0x2d, 0x3d, 0xc9, 0xa6, 0xb0, 0x18, 0xeb, 0x74, 0x58, 0x34, 0xad, 0x48, + 0xb7, 0x1f, 0xb1, 0x23, 0xec, 0xfd, 0x99, 0x68, 0x5a, 0xbd, 0x10, 0x9b, 0xb8, 0x68, 0x09, 0x4e, + 0xb6, 0xbb, 0xce, 0xc0, 0xfc, 0x46, 0x99, 0x8a, 0x68, 0xe8, 0x3e, 0x00, 0x77, 0xd7, 0x31, 0x4e, + 0xbf, 0x0f, 0xec, 0x77, 0xfa, 0xed, 0x91, 0x72, 0xf7, 0xc1, 0xc3, 0xa4, 0xdc, 0x45, 0x35, 0x78, + 0xd0, 0xeb, 0x24, 0x21, 0x4b, 0xef, 0x62, 0x56, 0xe1, 0x81, 0xc5, 0x0f, 0xf3, 0x58, 0xe5, 0xbd, + 0xdd, 0xe9, 0x07, 0x67, 0xf7, 0xc1, 0xc3, 0xfb, 0x52, 0x41, 0xaf, 0x40, 0x89, 0x88, 0xb4, 0xc1, + 0xe5, 0x9f, 0xb1, 0xa5, 0x24, 0x98, 0x89, 0x88, 0x65, 0xc0, 0x27, 0x87, 0x61, 0xc5, 0x0f, 0xad, + 0xc3, 0x68, 0x23, 0x8c, 0x93, 0xd9, 0xa6, 0xef, 0xc5, 0x24, 0x2e, 0x3f, 0xc4, 0x26, 0x4d, 0xae, + 0xee, 0x75, 0x59, 0xa2, 0xa5, 0x73, 0xe6, 0x72, 0x5a, 0x13, 0xeb, 0x64, 0x10, 0x61, 0xce, 0x47, + 0x16, 0x55, 0x2d, 0xfd, 0x38, 0xe7, 0x59, 0xc7, 0x1e, 0xcb, 0xa3, 0xbc, 0x16, 0xd6, 0x2a, 0x26, + 0xb6, 0xf2, 0x3e, 0xea, 0x40, 0x9c, 0xa5, 0x89, 0x9e, 0x81, 0xb1, 0x76, 0x58, 0xab, 0xb4, 0x49, + 0x75, 0xcd, 0x4b, 0xaa, 0x8d, 0xf2, 0xb4, 0x69, 0x75, 0x5b, 0xd3, 0xca, 0xb0, 0x81, 0x89, 0xda, + 0x30, 0xdc, 0xe2, 0xf7, 0xfe, 0xcb, 0x8f, 0xd8, 0x3a, 0xdb, 0x88, 0x44, 0x02, 0x5c, 0x5f, 0x10, + 0x3f, 0xb0, 0x64, 0x83, 0xfe, 0x89, 0x03, 0x27, 0x32, 0x77, 0x95, 0xca, 0xef, 0xb0, 0xa6, 0xb2, + 0x98, 0x84, 0xe7, 0x1e, 0x63, 0xc3, 0x67, 0x02, 0x6f, 0x77, 0x83, 0x70, 0xb6, 0x45, 0x7c, 0x5c, + 0x58, 0xf2, 0x8e, 0xf2, 0xa3, 0xf6, 0xc6, 0x85, 0x11, 0x94, 0xe3, 0xc2, 0x7e, 0x60, 0xc9, 0x06, + 0x3d, 0x01, 0xc3, 0x22, 0xcf, 0x5e, 0xf9, 0x31, 0xd3, 0x83, 0x2c, 0xd2, 0xf1, 0x61, 0x59, 0x3e, + 0xf5, 0x7e, 0x38, 0xd9, 0x75, 0x74, 0x3b, 0x50, 0x06, 0x89, 0x5f, 0x77, 0x40, 0xbf, 0xdc, 0x6c, + 0xfd, 0xad, 0x8e, 0x67, 0x60, 0xac, 0xca, 0x5f, 0xf4, 0xe3, 0xd7, 0xa3, 0x07, 0x4d, 0xfb, 0xe7, + 0xbc, 0x56, 0x86, 0x0d, 0x4c, 0xf7, 0x32, 0xa0, 0xee, 0x44, 0xea, 0x87, 0x4a, 0x4f, 0xf4, 0xcf, + 0x1c, 0x18, 0x37, 0x74, 0x06, 0xeb, 0x3e, 0xc2, 0x45, 0x40, 0x2d, 0x3f, 0x8a, 0xc2, 0x48, 0x7f, + 0x3a, 0x4d, 0xa4, 0x30, 0x60, 0x97, 0xc4, 0x56, 0xba, 0x4a, 0x71, 0x4e, 0x0d, 0xf7, 0xb7, 0x06, + 0x21, 0x8d, 0x78, 0x56, 0x99, 0x6a, 0x9d, 0x9e, 0x99, 0x6a, 0x9f, 0x84, 0xd2, 0xcb, 0x71, 0x18, + 0xac, 0xa5, 0xf9, 0x6c, 0xd5, 0xb7, 0x78, 0xb6, 0xb2, 0x7a, 0x8d, 0x61, 0x2a, 0x0c, 0x86, 0xfd, + 0xd1, 0x45, 0xbf, 0x99, 0x74, 0x27, 0x3c, 0x7d, 0xf6, 0x39, 0x0e, 0xc7, 0x0a, 0x83, 0xbd, 0xa2, + 0xb6, 0x4d, 0x94, 0x61, 0x3c, 0x7d, 0x45, 0x8d, 0xbf, 0x91, 0xc0, 0xca, 0xd0, 0x05, 0x18, 0x51, + 0x46, 0x75, 0x61, 0xa9, 0x57, 0x23, 0xa5, 0x2c, 0xef, 0x38, 0xc5, 0x61, 0x0a, 0xa1, 0x30, 0xc4, + 0x0a, 0x13, 0x4a, 0xc5, 0xc6, 0xf1, 0x24, 0x63, 0xda, 0xe5, 0xb2, 0x5d, 0x82, 0xb1, 0x62, 0x99, + 0xe7, 0x27, 0x1d, 0x39, 0x12, 0x3f, 0xa9, 0x16, 0x7e, 0x5f, 0xec, 0x37, 0xfc, 0xde, 0x9c, 0xdb, + 0xa5, 0xbe, 0xe6, 0xf6, 0xa7, 0x06, 0x60, 0xf8, 0x79, 0x12, 0xb1, 0x3c, 0xdf, 0x4f, 0xc0, 0xf0, + 0x36, 0xff, 0x37, 0x7b, 0xfd, 0x52, 0x60, 0x60, 0x59, 0x4e, 0xbf, 0xdb, 0x46, 0xc7, 0x6f, 0xd6, + 0x16, 0xd2, 0x55, 0x9c, 0xa6, 0x08, 0x94, 0x05, 0x38, 0xc5, 0xa1, 0x15, 0xea, 0x54, 0xb3, 0x6f, + 0xb5, 0xfc, 0xae, 0x07, 0xc2, 0x97, 0x64, 0x01, 0x4e, 0x71, 0xd0, 0x63, 0x30, 0x54, 0xf7, 0x93, + 0x75, 0xaf, 0x9e, 0xf5, 0xf2, 0x2d, 0x31, 0x28, 0x16, 0xa5, 0xcc, 0x4d, 0xe4, 0x27, 0xeb, 0x11, + 0x61, 0x96, 0xdd, 0xae, 0xec, 0x0f, 0x4b, 0x5a, 0x19, 0x36, 0x30, 0x59, 0x93, 0x42, 0xd1, 0x33, + 0x11, 0x84, 0x99, 0x36, 0x49, 0x16, 0xe0, 0x14, 0x87, 0xce, 0xff, 0x6a, 0xd8, 0x6a, 0xfb, 0x4d, + 0x11, 0x1e, 0xac, 0xcd, 0xff, 0x79, 0x01, 0xc7, 0x0a, 0x83, 0x62, 0x53, 0x11, 0x46, 0xc5, 0x4f, + 0xf6, 0xc5, 0xaa, 0x35, 0x01, 0xc7, 0x0a, 0xc3, 0x7d, 0x1e, 0xc6, 0xf9, 0x4a, 0x9e, 0x6f, 0x7a, + 0x7e, 0x6b, 0x69, 0x1e, 0x5d, 0xea, 0x0a, 0xbf, 0x7f, 0x22, 0x27, 0xfc, 0xfe, 0x8c, 0x51, 0xa9, + 0x3b, 0x0c, 0xdf, 0xfd, 0x61, 0x01, 0x4a, 0xc7, 0xf8, 0xe8, 0xdf, 0xb1, 0xbf, 0x5f, 0x8b, 0x6e, + 0x65, 0x1e, 0xfc, 0x5b, 0xb3, 0x79, 0x9b, 0x66, 0xdf, 0xc7, 0xfe, 0xfe, 0x4b, 0x01, 0xce, 0x4a, + 0x54, 0x79, 0x96, 0x5b, 0x9a, 0x67, 0x2f, 0x56, 0x1d, 0xfd, 0x40, 0x47, 0xc6, 0x40, 0xaf, 0xd9, + 0x3b, 0x8d, 0x2e, 0xcd, 0xf7, 0x1c, 0xea, 0x57, 0x32, 0x43, 0x8d, 0xad, 0x72, 0xdd, 0x7f, 0xb0, + 0xff, 0xd2, 0x81, 0xa9, 0xfc, 0xc1, 0x3e, 0x86, 0x37, 0x16, 0x5f, 0x37, 0xdf, 0x58, 0xfc, 0x05, + 0x7b, 0x53, 0xcc, 0xec, 0x4a, 0x8f, 0xd7, 0x16, 0xff, 0xdc, 0x81, 0xd3, 0xb2, 0x02, 0xdb, 0x3d, + 0xe7, 0xfc, 0x80, 0x05, 0xa2, 0x1c, 0xfd, 0x34, 0x7b, 0xcd, 0x98, 0x66, 0x2f, 0xda, 0xeb, 0xb8, + 0xde, 0x8f, 0x9e, 0x6f, 0x53, 0xff, 0x99, 0x03, 0xe5, 0xbc, 0x0a, 0xc7, 0xf0, 0xc9, 0x5f, 0x35, + 0x3f, 0xf9, 0xf3, 0x47, 0xd3, 0xf3, 0xde, 0x1f, 0xbc, 0xdc, 0x6b, 0xa0, 0x50, 0x53, 0xea, 0x55, + 0x8e, 0x2d, 0x1f, 0x2d, 0x67, 0x91, 0xaf, 0xa0, 0x35, 0x61, 0x28, 0x66, 0x51, 0x1b, 0x62, 0x0a, + 0x5c, 0xb6, 0xa1, 0x6d, 0x51, 0x7a, 0xc2, 0xc6, 0xce, 0xfe, 0xc7, 0x82, 0x87, 0xfb, 0x1b, 0x05, + 0x38, 0xa7, 0xde, 0x4e, 0x25, 0xdb, 0xa4, 0x99, 0xae, 0x0f, 0xf6, 0x2a, 0x82, 0xa7, 0x7e, 0xda, + 0x7b, 0x15, 0x21, 0x65, 0x91, 0xae, 0x85, 0x14, 0x86, 0x35, 0x9e, 0xa8, 0x02, 0x67, 0xd8, 0x2b, + 0x06, 0x8b, 0x7e, 0xe0, 0x35, 0xfd, 0x57, 0x48, 0x84, 0x49, 0x2b, 0xdc, 0xf6, 0x9a, 0x42, 0x53, + 0x57, 0x37, 0x70, 0x17, 0xf3, 0x90, 0x70, 0x7e, 0xdd, 0xae, 0x13, 0xf7, 0x40, 0xbf, 0x27, 0x6e, + 0xf7, 0x4f, 0x1c, 0x18, 0x3b, 0xc6, 0x97, 0x66, 0x43, 0x73, 0x49, 0x3c, 0x6b, 0x6f, 0x49, 0xf4, + 0x58, 0x06, 0xbb, 0x45, 0xe8, 0x7a, 0x7c, 0x13, 0x7d, 0xda, 0x51, 0x71, 0x2d, 0x3c, 0xf6, 0xef, + 0x43, 0xf6, 0xda, 0x71, 0x90, 0xb4, 0x8d, 0xe8, 0xeb, 0x99, 0x5c, 0x96, 0x05, 0x5b, 0x09, 0x99, + 0xba, 0x5a, 0x73, 0x88, 0x9c, 0x96, 0x5f, 0x71, 0x00, 0x78, 0x3b, 0x45, 0x2a, 0x6c, 0xda, 0xb6, + 0x8d, 0x23, 0x1b, 0x29, 0xca, 0x84, 0x37, 0x4d, 0x2d, 0xa1, 0xb4, 0x00, 0x6b, 0x2d, 0xb9, 0x8b, + 0x64, 0x95, 0x77, 0x9d, 0x27, 0xf3, 0x0b, 0x0e, 0x9c, 0xc8, 0x34, 0x37, 0xa7, 0xfe, 0xa6, 0xf9, + 0x28, 0x9f, 0x05, 0xcd, 0xca, 0x4c, 0x90, 0xac, 0x1b, 0x4f, 0xfe, 0x9b, 0x0b, 0xc6, 0xab, 0xc5, + 0xe8, 0x55, 0x18, 0x91, 0x96, 0x0f, 0x39, 0xbd, 0x6d, 0x3e, 0x4e, 0xaa, 0x8e, 0x37, 0x12, 0x12, + 0xe3, 0x94, 0x5f, 0x26, 0x6c, 0xae, 0xd0, 0x57, 0xd8, 0xdc, 0xbd, 0x7d, 0xda, 0x34, 0xdf, 0x2e, + 0x3d, 0x78, 0x24, 0x76, 0xe9, 0x07, 0xad, 0xdb, 0xa5, 0x1f, 0x3a, 0x66, 0xbb, 0xb4, 0xe6, 0x24, + 0x2c, 0xde, 0x85, 0x93, 0xf0, 0x55, 0x38, 0xbd, 0x9d, 0x1e, 0x3a, 0xd5, 0x4c, 0x12, 0x69, 0x80, + 0x9e, 0xc8, 0xb5, 0x46, 0xd3, 0x03, 0x74, 0x9c, 0x90, 0x20, 0xd1, 0x8e, 0xab, 0x69, 0xc4, 0xde, + 0xf3, 0x39, 0xe4, 0x70, 0x2e, 0x93, 0xac, 0xb7, 0x67, 0xb8, 0x0f, 0x6f, 0xcf, 0x9b, 0x0e, 0x9c, + 0xf1, 0xba, 0xee, 0x70, 0x61, 0xb2, 0x29, 0x42, 0x4e, 0x6e, 0xd8, 0x53, 0x21, 0x0c, 0xf2, 0xc2, + 0xad, 0x96, 0x57, 0x84, 0xf3, 0x1b, 0x84, 0x1e, 0x4d, 0x5d, 0xef, 0x3c, 0xce, 0x33, 0xdf, 0x4f, + 0xfe, 0xf5, 0x6c, 0x3c, 0x0f, 0xb0, 0xa1, 0xff, 0x88, 0xdd, 0xd3, 0xb6, 0x85, 0x98, 0x9e, 0xd1, + 0xbb, 0x88, 0xe9, 0xc9, 0xb8, 0xde, 0xc6, 0x2c, 0xb9, 0xde, 0x02, 0x98, 0xf4, 0x5b, 0x5e, 0x9d, + 0xac, 0x75, 0x9a, 0x4d, 0x7e, 0x07, 0x44, 0x3e, 0x1f, 0x9b, 0x6b, 0xc1, 0xbb, 0x1a, 0x56, 0xbd, + 0x66, 0xf6, 0x95, 0x6e, 0x75, 0xd7, 0xe5, 0x4a, 0x86, 0x12, 0xee, 0xa2, 0x4d, 0x27, 0x2c, 0xcb, + 0x47, 0x47, 0x12, 0x3a, 0xda, 0x2c, 0x70, 0xa4, 0xc4, 0x27, 0xec, 0xe5, 0x14, 0x8c, 0x75, 0x1c, + 0xb4, 0x0c, 0x23, 0xb5, 0x20, 0x16, 0xd7, 0x51, 0x4f, 0x30, 0x61, 0xf6, 0x4e, 0x2a, 0x02, 0x17, + 0xae, 0x55, 0xd4, 0x45, 0xd4, 0x07, 0x73, 0x12, 0x2c, 0xaa, 0x72, 0x9c, 0xd6, 0x47, 0x2b, 0x8c, + 0x98, 0x78, 0x5b, 0x8b, 0xc7, 0x73, 0x3c, 0xdc, 0xc3, 0x61, 0xb4, 0x70, 0x4d, 0xbe, 0x0e, 0x36, + 0x2e, 0xd8, 0x89, 0x47, 0xb2, 0x52, 0x0a, 0xda, 0x33, 0xbe, 0x27, 0xf7, 0x7d, 0xc6, 0x97, 0x65, + 0x56, 0x4d, 0x9a, 0xca, 0x3d, 0x7c, 0xde, 0x5a, 0x66, 0xd5, 0x34, 0x52, 0x52, 0x64, 0x56, 0x4d, + 0x01, 0x58, 0x67, 0x89, 0x56, 0x7b, 0xb9, 0xc9, 0x4f, 0x31, 0xa1, 0x71, 0x70, 0xa7, 0xb7, 0xee, + 0x2f, 0x3d, 0xbd, 0xaf, 0xbf, 0xb4, 0xcb, 0xbf, 0x7b, 0xe6, 0x00, 0xfe, 0xdd, 0x06, 0xcb, 0x79, + 0xb9, 0x34, 0x2f, 0x5c, 0xea, 0x16, 0xce, 0x77, 0x2c, 0x45, 0x07, 0x8f, 0x3c, 0x65, 0xff, 0x62, + 0xce, 0xa0, 0x67, 0x40, 0xf5, 0xb9, 0x43, 0x07, 0x54, 0x53, 0xf1, 0x9c, 0xc2, 0x59, 0xf2, 0xd4, + 0xa2, 0x10, 0xcf, 0x29, 0x18, 0xeb, 0x38, 0x59, 0x6f, 0xe9, 0xfd, 0x47, 0xe6, 0x2d, 0x9d, 0x3a, + 0x06, 0x6f, 0xe9, 0x03, 0x7d, 0x7b, 0x4b, 0x6f, 0xc1, 0xa9, 0x76, 0x58, 0x5b, 0xf0, 0xe3, 0xa8, + 0xc3, 0x2e, 0xc5, 0xcd, 0x75, 0x6a, 0x75, 0x92, 0x30, 0x77, 0xeb, 0xe8, 0xc5, 0x77, 0xea, 0x8d, + 0x6c, 0xb3, 0x85, 0x2c, 0xd7, 0x68, 0xa6, 0x02, 0x33, 0x9d, 0xb0, 0xa8, 0xdb, 0x9c, 0x42, 0x9c, + 0xc7, 0x42, 0xf7, 0xd3, 0x3e, 0x7c, 0x3c, 0x7e, 0xda, 0x0f, 0x40, 0x29, 0x6e, 0x74, 0x92, 0x5a, + 0x78, 0x33, 0x60, 0xce, 0xf8, 0x91, 0xb9, 0x77, 0x28, 0x53, 0xb6, 0x80, 0xdf, 0xde, 0x9d, 0x9e, + 0x94, 0xff, 0x6b, 0x56, 0x6c, 0x01, 0x41, 0xdf, 0xe8, 0x71, 0x7f, 0xc7, 0x3d, 0xca, 0xfb, 0x3b, + 0xe7, 0x0e, 0x74, 0x77, 0x27, 0xcf, 0x19, 0xfd, 0xc8, 0xdb, 0xce, 0x19, 0xfd, 0x35, 0x07, 0xc6, + 0xb7, 0x75, 0x97, 0x81, 0x70, 0x98, 0x5b, 0x08, 0xdc, 0x31, 0x3c, 0x11, 0x73, 0x2e, 0x95, 0x73, + 0x06, 0xe8, 0x76, 0x16, 0x80, 0xcd, 0x96, 0xe4, 0x04, 0x15, 0x3d, 0x7a, 0xaf, 0x82, 0x8a, 0x5e, + 0x67, 0x72, 0x4c, 0x1e, 0x72, 0x99, 0x17, 0xdd, 0x6e, 0x4c, 0xb1, 0x94, 0x89, 0x2a, 0xa4, 0x58, + 0xe7, 0x87, 0x3e, 0xef, 0xc0, 0xa4, 0x3c, 0x97, 0x09, 0x97, 0x5f, 0x2c, 0xa2, 0x22, 0x6d, 0x1e, + 0x07, 0x59, 0x58, 0xfd, 0x7a, 0x86, 0x0f, 0xee, 0xe2, 0x4c, 0xa5, 0xba, 0x0a, 0x42, 0xab, 0xc7, + 0x2c, 0xf8, 0x57, 0xe8, 0x30, 0xb3, 0x29, 0x18, 0xeb, 0x38, 0xe8, 0x9b, 0xea, 0x6d, 0xfe, 0x27, + 0x98, 0x40, 0x7f, 0xc1, 0xb2, 0x6e, 0x6a, 0xe3, 0x81, 0x7e, 0xf4, 0x25, 0x07, 0x26, 0x6f, 0x66, + 0x0c, 0x1a, 0x22, 0x2c, 0x14, 0xdb, 0x37, 0x95, 0xf0, 0xe1, 0xce, 0x42, 0x71, 0x57, 0x0b, 0xd0, + 0xe7, 0x4c, 0x43, 0x27, 0x8f, 0x1f, 0xb5, 0x38, 0x80, 0x19, 0xc3, 0x2a, 0xbf, 0xe6, 0x96, 0x6f, + 0xf1, 0xbc, 0xeb, 0xf8, 0x90, 0x29, 0xda, 0x99, 0xf4, 0x63, 0xe5, 0x54, 0x25, 0xa6, 0xbd, 0xc5, + 0xc2, 0x62, 0x37, 0x3e, 0xbf, 0x6e, 0x6e, 0xf9, 0xd3, 0x33, 0x30, 0x61, 0xfa, 0xf6, 0xd0, 0xbb, + 0xcc, 0x67, 0x1f, 0xce, 0x67, 0x33, 0xe8, 0x8f, 0x4b, 0x7c, 0x23, 0x8b, 0xbe, 0x91, 0xe6, 0xbe, + 0x70, 0xa4, 0x69, 0xee, 0x07, 0x8e, 0x27, 0xcd, 0xfd, 0xe4, 0x51, 0xa4, 0xb9, 0x3f, 0x79, 0xa0, + 0x34, 0xf7, 0xda, 0x33, 0x03, 0x83, 0x77, 0x78, 0x66, 0x60, 0x16, 0x4e, 0xc8, 0xbb, 0x3f, 0x44, + 0x64, 0x12, 0xe7, 0x6e, 0xff, 0x73, 0xa2, 0xca, 0x89, 0x79, 0xb3, 0x18, 0x67, 0xf1, 0xe9, 0x22, + 0x2b, 0x06, 0xac, 0xe6, 0x90, 0xad, 0x37, 0x88, 0xcc, 0xa9, 0xc5, 0x8e, 0xcf, 0x42, 0x44, 0xc9, + 0x68, 0xe7, 0x22, 0x83, 0xdd, 0x96, 0xff, 0x60, 0xde, 0x02, 0xf4, 0x12, 0x94, 0xc3, 0xcd, 0xcd, + 0x66, 0xe8, 0xd5, 0xd2, 0x5c, 0xfc, 0x32, 0x2e, 0x81, 0xdf, 0xdd, 0x54, 0xa9, 0x5b, 0x57, 0x7b, + 0xe0, 0xe1, 0x9e, 0x14, 0xd0, 0x9b, 0x54, 0x31, 0x49, 0xc2, 0x88, 0xd4, 0x52, 0x5b, 0xcd, 0x08, + 0xeb, 0x33, 0xb1, 0xde, 0xe7, 0x8a, 0xc9, 0x87, 0xf7, 0x5e, 0x7d, 0x94, 0x4c, 0x29, 0xce, 0x36, + 0x0b, 0x45, 0x70, 0xb6, 0x9d, 0x67, 0x2a, 0x8a, 0xc5, 0x8d, 0xa5, 0xfd, 0x0c, 0x56, 0x72, 0xe9, + 0x9e, 0xcd, 0x35, 0x36, 0xc5, 0xb8, 0x07, 0x65, 0x3d, 0x5f, 0x7e, 0xe9, 0x78, 0xf2, 0xe5, 0x7f, + 0x1c, 0xa0, 0x2a, 0x53, 0x79, 0x49, 0xe3, 0xc3, 0xb2, 0x95, 0xab, 0x34, 0x9c, 0xa6, 0xf6, 0x44, + 0xa9, 0x62, 0x83, 0x35, 0x96, 0xe8, 0x7f, 0xe7, 0x3e, 0x28, 0xc1, 0x2d, 0x2c, 0x75, 0xeb, 0x73, + 0xe2, 0x6d, 0xf7, 0xa8, 0xc4, 0x3f, 0x75, 0x60, 0x8a, 0xcf, 0xbc, 0xac, 0x72, 0x4f, 0x55, 0x0b, + 0x71, 0xb7, 0xc7, 0x76, 0xe8, 0x0a, 0x8b, 0xe2, 0xab, 0x18, 0x5c, 0x99, 0xa3, 0x7b, 0x9f, 0x96, + 0xa0, 0xaf, 0xe4, 0x1c, 0x29, 0x4e, 0xd8, 0xb2, 0x59, 0xe6, 0x3f, 0x0b, 0x70, 0x6a, 0xaf, 0x9f, + 0x53, 0xc4, 0x3f, 0xef, 0x69, 0x52, 0x45, 0xac, 0x79, 0xbf, 0x78, 0x44, 0x26, 0x55, 0xfd, 0xed, + 0x82, 0x03, 0x19, 0x56, 0xbf, 0xe0, 0xc0, 0xa4, 0x97, 0x09, 0x35, 0x61, 0x76, 0x20, 0x2b, 0x36, + 0xa9, 0xd9, 0x28, 0x8d, 0x5f, 0x61, 0x4a, 0x5e, 0x36, 0xaa, 0x05, 0x77, 0x31, 0x47, 0xff, 0xd2, + 0x81, 0xd3, 0x89, 0x17, 0x6f, 0xf1, 0xb4, 0xc2, 0xb1, 0xb8, 0xab, 0x4b, 0x6a, 0xe5, 0xd3, 0x6c, + 0x19, 0xbe, 0x6c, 0x7d, 0x19, 0xae, 0xe7, 0x30, 0xe3, 0x2b, 0x51, 0x19, 0x7a, 0xf2, 0x50, 0x70, + 0x6e, 0x2b, 0xa7, 0x3e, 0xed, 0xf0, 0x57, 0xa2, 0x7a, 0xaa, 0x75, 0x1b, 0xa6, 0x5a, 0x77, 0xd5, + 0xe6, 0x3b, 0x35, 0xba, 0x7e, 0xf9, 0xab, 0x0e, 0x9c, 0xce, 0xdb, 0x75, 0x72, 0x9a, 0xf4, 0x11, + 0xb3, 0x49, 0x16, 0x4f, 0x52, 0x7a, 0x83, 0xac, 0x3c, 0x93, 0x31, 0xb5, 0x04, 0xf7, 0xf7, 0xfc, + 0x60, 0x77, 0x22, 0x54, 0xd2, 0x75, 0xde, 0x3f, 0x1b, 0xd1, 0x5c, 0x8c, 0x09, 0x69, 0x5b, 0x0f, + 0xd0, 0x0e, 0x60, 0xc8, 0x0f, 0x9a, 0x7e, 0x40, 0xc4, 0x65, 0x4c, 0x9b, 0x07, 0x54, 0xf1, 0xbe, + 0x0d, 0xa5, 0x8e, 0x05, 0x97, 0x7b, 0xec, 0x71, 0xcc, 0xbe, 0x18, 0x36, 0x78, 0xfc, 0x2f, 0x86, + 0xdd, 0x84, 0x91, 0x9b, 0x7e, 0xd2, 0x60, 0x91, 0x12, 0xc2, 0x91, 0x67, 0xe1, 0x12, 0x23, 0x25, + 0x97, 0xf6, 0xfd, 0x86, 0x64, 0x80, 0x53, 0x5e, 0xe8, 0x02, 0x67, 0xcc, 0xc2, 0xb2, 0xb3, 0xf1, + 0xb2, 0x37, 0x64, 0x01, 0x4e, 0x71, 0xe8, 0x60, 0x8d, 0xd1, 0x5f, 0x32, 0x59, 0x91, 0xc8, 0xa9, + 0x6b, 0x23, 0x57, 0xa2, 0xa0, 0xc8, 0xaf, 0x0a, 0xdf, 0xd0, 0x78, 0x60, 0x83, 0xa3, 0x4a, 0x6b, + 0x5c, 0xea, 0x99, 0xd6, 0xf8, 0x35, 0xa6, 0x8d, 0x25, 0x7e, 0xd0, 0x21, 0xab, 0x81, 0x08, 0xe6, + 0xbe, 0x6a, 0xe7, 0x62, 0x33, 0xa7, 0xc9, 0xcf, 0xd7, 0xe9, 0x6f, 0xac, 0xf1, 0xd3, 0xfc, 0x29, + 0xa3, 0xfb, 0xfa, 0x53, 0x52, 0x7b, 0xca, 0x98, 0x75, 0x7b, 0x4a, 0x42, 0xda, 0x56, 0xec, 0x29, + 0x6f, 0xab, 0xb3, 0xfe, 0x5f, 0x3a, 0x80, 0x94, 0x52, 0xa5, 0x24, 0xe9, 0x31, 0x44, 0x4c, 0x7e, + 0xc2, 0x01, 0x08, 0xd4, 0xbb, 0x92, 0x76, 0xb7, 0x3f, 0x4e, 0x33, 0x6d, 0x40, 0x0a, 0xc3, 0x1a, + 0x4f, 0xf7, 0x4f, 0x9d, 0x34, 0x30, 0x39, 0xed, 0xfb, 0x31, 0x44, 0x88, 0xed, 0x98, 0x11, 0x62, + 0xeb, 0x16, 0xed, 0xf2, 0xaa, 0x1b, 0x3d, 0x62, 0xc5, 0x7e, 0x52, 0x80, 0x13, 0x3a, 0x72, 0x85, + 0x1c, 0xc7, 0xc7, 0xbe, 0x69, 0x84, 0xc7, 0x5e, 0xb7, 0xdb, 0xdf, 0x8a, 0x70, 0xef, 0xe4, 0x85, + 0x62, 0x7f, 0x3c, 0x13, 0x8a, 0x7d, 0xc3, 0x3e, 0xeb, 0xfd, 0xe3, 0xb1, 0xff, 0xab, 0x03, 0xa7, + 0x32, 0x35, 0x8e, 0x61, 0x82, 0x6d, 0x9b, 0x13, 0xec, 0x39, 0xeb, 0xbd, 0xee, 0x31, 0xbb, 0xbe, + 0x55, 0xe8, 0xea, 0x2d, 0x3b, 0xa1, 0x7d, 0xca, 0x81, 0x22, 0xd5, 0x8f, 0x65, 0xb0, 0xd6, 0x47, + 0x8e, 0x64, 0x06, 0x30, 0xdd, 0x5d, 0x48, 0x67, 0xd5, 0x3e, 0x06, 0xc3, 0x9c, 0xfb, 0xd4, 0x27, + 0x1d, 0x80, 0x14, 0xe9, 0x5e, 0xe9, 0xbe, 0xee, 0x77, 0x0a, 0x70, 0x26, 0x77, 0x1a, 0xa1, 0xcf, + 0x28, 0x73, 0x9b, 0x63, 0x3b, 0x14, 0xd1, 0x60, 0xa4, 0x5b, 0xdd, 0xc6, 0x0d, 0xab, 0x9b, 0x30, + 0xb6, 0xdd, 0xab, 0x93, 0x8b, 0x10, 0xd3, 0xda, 0x60, 0xfd, 0xd8, 0x49, 0xa3, 0x5b, 0x55, 0xd2, + 0xa2, 0xbf, 0x82, 0x37, 0x74, 0xdc, 0x9f, 0x68, 0xd7, 0x17, 0x64, 0x47, 0x8f, 0x41, 0x56, 0xdc, + 0x34, 0x65, 0x05, 0xb6, 0xef, 0x24, 0xee, 0x21, 0x2c, 0x3e, 0x0a, 0x79, 0x5e, 0xe3, 0xfe, 0x32, + 0x1e, 0x1a, 0x77, 0x5d, 0x0b, 0x7d, 0xdf, 0x75, 0x1d, 0x87, 0xd1, 0x17, 0xfd, 0xb6, 0x72, 0x70, + 0xce, 0x7c, 0xf7, 0x47, 0xe7, 0xef, 0xfb, 0xde, 0x8f, 0xce, 0xdf, 0xf7, 0xc3, 0x1f, 0x9d, 0xbf, + 0xef, 0x13, 0x7b, 0xe7, 0x9d, 0xef, 0xee, 0x9d, 0x77, 0xbe, 0xb7, 0x77, 0xde, 0xf9, 0xe1, 0xde, + 0x79, 0xe7, 0x3f, 0xec, 0x9d, 0x77, 0xfe, 0xde, 0x7f, 0x3c, 0x7f, 0xdf, 0x8b, 0x25, 0xd9, 0xb1, + 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0xc8, 0x31, 0xcd, 0x21, 0xfa, 0xd4, 0x00, 0x00, } func (m *Amount) Marshal() (dAtA []byte, err error) { @@ -13172,6 +13176,35 @@ func (m *WorkflowStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.TaskResultsCompleted) > 0 { + keysForTaskResultsCompleted := make([]string, 0, len(m.TaskResultsCompleted)) + for k := range m.TaskResultsCompleted { + keysForTaskResultsCompleted = append(keysForTaskResultsCompleted, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForTaskResultsCompleted) + for iNdEx := len(keysForTaskResultsCompleted) - 1; iNdEx >= 0; iNdEx-- { + v := m.TaskResultsCompleted[string(keysForTaskResultsCompleted[iNdEx])] + baseI := i + i-- + if v { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + i -= len(keysForTaskResultsCompleted[iNdEx]) + copy(dAtA[i:], keysForTaskResultsCompleted[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForTaskResultsCompleted[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa2 + } + } if m.ArtifactGCStatus != nil { { size, err := m.ArtifactGCStatus.MarshalToSizedBuffer(dAtA[:i]) @@ -16962,6 +16995,14 @@ func (m *WorkflowStatus) Size() (n int) { l = m.ArtifactGCStatus.Size() n += 2 + l + sovGenerated(uint64(l)) } + if len(m.TaskResultsCompleted) > 0 { + for k, v := range m.TaskResultsCompleted { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + 1 + n += mapEntrySize + 2 + sovGenerated(uint64(mapEntrySize)) + } + } return n } @@ -19320,6 +19361,16 @@ func (this *WorkflowStatus) String() string { mapStringForResourcesDuration += fmt.Sprintf("%v: %v,", k, this.ResourcesDuration[k8s_io_api_core_v1.ResourceName(k)]) } mapStringForResourcesDuration += "}" + keysForTaskResultsCompleted := make([]string, 0, len(this.TaskResultsCompleted)) + for k := range this.TaskResultsCompleted { + keysForTaskResultsCompleted = append(keysForTaskResultsCompleted, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForTaskResultsCompleted) + mapStringForTaskResultsCompleted := "map[string]bool{" + for _, k := range keysForTaskResultsCompleted { + mapStringForTaskResultsCompleted += fmt.Sprintf("%v: %v,", k, this.TaskResultsCompleted[k]) + } + mapStringForTaskResultsCompleted += "}" s := strings.Join([]string{`&WorkflowStatus{`, `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, `StartedAt:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.StartedAt), "Time", "v11.Time", 1), `&`, ``, 1) + `,`, @@ -19339,6 +19390,7 @@ func (this *WorkflowStatus) String() string { `Progress:` + fmt.Sprintf("%v", this.Progress) + `,`, `ArtifactRepositoryRef:` + strings.Replace(fmt.Sprintf("%v", this.ArtifactRepositoryRef), "ArtifactRepositoryRefStatus", "ArtifactRepositoryRefStatus", 1) + `,`, `ArtifactGCStatus:` + strings.Replace(this.ArtifactGCStatus.String(), "ArtGCStatus", "ArtGCStatus", 1) + `,`, + `TaskResultsCompleted:` + mapStringForTaskResultsCompleted + `,`, `}`, }, "") return s @@ -45262,6 +45314,121 @@ func (m *WorkflowStatus) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TaskResultsCompleted", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TaskResultsCompleted == nil { + m.TaskResultsCompleted = make(map[string]bool) + } + var mapkey string + var mapvalue bool + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapvaluetemp int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapvaluetemp |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + mapvalue = bool(mapvaluetemp != 0) + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.TaskResultsCompleted[mapkey] = mapvalue + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index 77f248a90006..f707a40c7c48 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -2116,6 +2116,9 @@ message WorkflowStatus { // ArtifactGCStatus maintains the status of Artifact Garbage Collection optional ArtGCStatus artifactGCStatus = 19; + + // Have task results been completed? (mapped by Pod name) used to prevent premature garbage collection of artifacts. + map taskResultsCompleted = 20; } // WorkflowStep is a reference to a template to execute in a series of step diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index fb2c39e4628a..550b2e35dad8 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -7840,6 +7840,22 @@ func schema_pkg_apis_workflow_v1alpha1_WorkflowStatus(ref common.ReferenceCallba Ref: ref("github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.ArtGCStatus"), }, }, + "taskResultsCompleted": { + SchemaProps: spec.SchemaProps{ + Description: "Have task results been completed? (mapped by Pod name) used to prevent premature garbage collection of artifacts.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: false, + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, }, }, }, diff --git a/pkg/apis/workflow/v1alpha1/workflow_types.go b/pkg/apis/workflow/v1alpha1/workflow_types.go index a8dfaf3beb4d..7acb31393566 100644 --- a/pkg/apis/workflow/v1alpha1/workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/workflow_types.go @@ -1943,6 +1943,30 @@ type WorkflowStatus struct { // ArtifactGCStatus maintains the status of Artifact Garbage Collection ArtifactGCStatus *ArtGCStatus `json:"artifactGCStatus,omitempty" protobuf:"bytes,19,opt,name=artifactGCStatus"` + + // Have task results been completed? (mapped by Pod name) used to prevent premature garbage collection of artifacts. + TaskResultsCompleted map[string]bool `json:"taskResultsCompleted,omitempty" protobuf:"bytes,20,opt,name=taskResultsCompleted"` +} + +func (ws *WorkflowStatus) InitializeTaskResultIncomplete(resultName string) { + if ws.TaskResultsCompleted == nil { + ws.TaskResultsCompleted = make(map[string]bool) + } + if _, ok := ws.TaskResultsCompleted[resultName]; !ok { + ws.MarkTaskResultIncomplete(resultName) + } +} +func (ws *WorkflowStatus) MarkTaskResultComplete(name string) { + ws.TaskResultsCompleted[name] = true +} +func (ws *WorkflowStatus) MarkTaskResultIncomplete(name string) { + ws.TaskResultsCompleted[name] = false +} +func (ws *WorkflowStatus) GetTaskResultCompleted(name string) bool { + return ws.TaskResultsCompleted[name] +} +func (ws *WorkflowStatus) GetTaskResultsCompleted() map[string]bool { + return ws.TaskResultsCompleted } func (ws *WorkflowStatus) IsOffloadNodeStatus() bool { diff --git a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go index 4bb0f316dd95..7317450c1905 100644 --- a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go @@ -3962,6 +3962,13 @@ func (in *WorkflowStatus) DeepCopyInto(out *WorkflowStatus) { *out = new(ArtGCStatus) (*in).DeepCopyInto(*out) } + if in.TaskResultsCompleted != nil { + in, out := &in.TaskResultsCompleted, &out.TaskResultsCompleted + *out = make(map[string]bool, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } return } diff --git a/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1WorkflowStatus.md b/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1WorkflowStatus.md index b82d09dbe094..7be95408157d 100644 --- a/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1WorkflowStatus.md +++ b/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1WorkflowStatus.md @@ -26,6 +26,7 @@ Name | Type | Description | Notes **storedTemplates** | [**Map<String, IoArgoprojWorkflowV1alpha1Template>**](IoArgoprojWorkflowV1alpha1Template.md) | StoredTemplates is a mapping between a template ref and the node's status. | [optional] **storedWorkflowTemplateSpec** | [**IoArgoprojWorkflowV1alpha1WorkflowSpec**](IoArgoprojWorkflowV1alpha1WorkflowSpec.md) | | [optional] **synchronization** | [**IoArgoprojWorkflowV1alpha1SynchronizationStatus**](IoArgoprojWorkflowV1alpha1SynchronizationStatus.md) | | [optional] +**taskResultsCompleted** | **Map<String, Boolean>** | Have task results been completed? (mapped by Pod name) used to prevent premature garbage collection of artifacts. | [optional] diff --git a/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_workflow_status.py b/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_workflow_status.py index 46f8aef406ec..4c4f1b0cd960 100644 --- a/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_workflow_status.py +++ b/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_workflow_status.py @@ -121,6 +121,7 @@ def openapi_types(): 'stored_templates': ({str: (IoArgoprojWorkflowV1alpha1Template,)},), # noqa: E501 'stored_workflow_template_spec': (IoArgoprojWorkflowV1alpha1WorkflowSpec,), # noqa: E501 'synchronization': (IoArgoprojWorkflowV1alpha1SynchronizationStatus,), # noqa: E501 + 'task_results_completed': ({str: (bool,)},), # noqa: E501 } @cached_property @@ -147,6 +148,7 @@ def discriminator(): 'stored_templates': 'storedTemplates', # noqa: E501 'stored_workflow_template_spec': 'storedWorkflowTemplateSpec', # noqa: E501 'synchronization': 'synchronization', # noqa: E501 + 'task_results_completed': 'taskResultsCompleted', # noqa: E501 } read_only_vars = { @@ -208,6 +210,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 stored_templates ({str: (IoArgoprojWorkflowV1alpha1Template,)}): StoredTemplates is a mapping between a template ref and the node's status.. [optional] # noqa: E501 stored_workflow_template_spec (IoArgoprojWorkflowV1alpha1WorkflowSpec): [optional] # noqa: E501 synchronization (IoArgoprojWorkflowV1alpha1SynchronizationStatus): [optional] # noqa: E501 + task_results_completed ({str: (bool,)}): Have task results been completed? (mapped by Pod name) used to prevent premature garbage collection of artifacts.. [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -307,6 +310,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 stored_templates ({str: (IoArgoprojWorkflowV1alpha1Template,)}): StoredTemplates is a mapping between a template ref and the node's status.. [optional] # noqa: E501 stored_workflow_template_spec (IoArgoprojWorkflowV1alpha1WorkflowSpec): [optional] # noqa: E501 synchronization (IoArgoprojWorkflowV1alpha1SynchronizationStatus): [optional] # noqa: E501 + task_results_completed ({str: (bool,)}): Have task results been completed? (mapped by Pod name) used to prevent premature garbage collection of artifacts.. [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) diff --git a/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1WorkflowStatus.md b/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1WorkflowStatus.md index 5c16f28239b5..4ba4c0e4d9e8 100644 --- a/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1WorkflowStatus.md +++ b/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1WorkflowStatus.md @@ -23,6 +23,7 @@ Name | Type | Description | Notes **stored_templates** | [**{str: (IoArgoprojWorkflowV1alpha1Template,)}**](IoArgoprojWorkflowV1alpha1Template.md) | StoredTemplates is a mapping between a template ref and the node's status. | [optional] **stored_workflow_template_spec** | [**IoArgoprojWorkflowV1alpha1WorkflowSpec**](IoArgoprojWorkflowV1alpha1WorkflowSpec.md) | | [optional] **synchronization** | [**IoArgoprojWorkflowV1alpha1SynchronizationStatus**](IoArgoprojWorkflowV1alpha1SynchronizationStatus.md) | | [optional] +**task_results_completed** | **{str: (bool,)}** | Have task results been completed? (mapped by Pod name) used to prevent premature garbage collection of artifacts. | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/sdks/python/client/docs/WorkflowServiceApi.md b/sdks/python/client/docs/WorkflowServiceApi.md index 7e1c5adad0d3..cd40058037d7 100644 --- a/sdks/python/client/docs/WorkflowServiceApi.md +++ b/sdks/python/client/docs/WorkflowServiceApi.md @@ -27347,6 +27347,9 @@ with argo_workflows.ApiClient(configuration) as api_client: ], ), ), + task_results_completed={ + "key": True, + }, ), ), ) # IoArgoprojWorkflowV1alpha1WorkflowCreateRequest | @@ -54898,6 +54901,9 @@ with argo_workflows.ApiClient(configuration) as api_client: ], ), ), + task_results_completed={ + "key": True, + }, ), ), ) # IoArgoprojWorkflowV1alpha1WorkflowLintRequest | diff --git a/test/e2e/agent_test.go b/test/e2e/agent_test.go index a44c7eadb513..0e6338ea418d 100644 --- a/test/e2e/agent_test.go +++ b/test/e2e/agent_test.go @@ -140,7 +140,7 @@ spec: `). When(). SubmitWorkflow(). - WaitForWorkflow(time.Minute + 5*time.Second). + WaitForWorkflow(2 * time.Minute). Then(). ExpectWorkflow(func(t *testing.T, _ *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { assert.Equal(t, wfv1.WorkflowFailed, status.Phase) diff --git a/test/e2e/artifacts_test.go b/test/e2e/artifacts_test.go index 22c1ba0f6447..43b40a742c6d 100644 --- a/test/e2e/artifacts_test.go +++ b/test/e2e/artifacts_test.go @@ -17,6 +17,7 @@ import ( "github.com/argoproj/argo-workflows/v3/workflow/common" "github.com/minio/minio-go/v7" + "github.com/minio/minio-go/v7/pkg/credentials" wfv1 "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1" "github.com/argoproj/argo-workflows/v3/test/e2e/fixtures" @@ -66,6 +67,96 @@ type artifactState struct { deletedAtWFDeletion bool } +func (s *ArtifactsSuite) TestStoppedWorkflow() { + + for _, tt := range []struct { + workflowFile string + }{ + {workflowFile: "@testdata/artifactgc/artgc-dag-wf-stopped.yaml"}, + {workflowFile: "@testdata/artifactgc/artgc-dag-wf-stopped-pod-gc-on-pod-completion.yaml"}, + } { + // Create the minio client for interacting with the bucket. + c, err := minio.New("localhost:9000", &minio.Options{ + Creds: credentials.NewStaticV4("admin", "password", ""), + }) + assert.NoError(s.T(), err) + + // Ensure the artifacts aren't in the bucket. + _, err = c.StatObject(context.Background(), "my-bucket-3", "on-deletion-wf-stopped-1", minio.StatObjectOptions{}) + if err == nil { + err = c.RemoveObject(context.Background(), "my-bucket-3", "on-deletion-wf-stopped-1", minio.RemoveObjectOptions{}) + assert.NoError(s.T(), err) + } + _, err = c.StatObject(context.Background(), "my-bucket-3", "on-deletion-wf-stopped-2", minio.StatObjectOptions{}) + if err == nil { + err = c.RemoveObject(context.Background(), "my-bucket-3", "on-deletion-wf-stopped-2", minio.RemoveObjectOptions{}) + assert.NoError(s.T(), err) + } + + then := s.Given(). + Workflow(tt.workflowFile). + When(). + Then() + + // Assert the artifacts don't exist. + then.ExpectArtifactByKey("on-deletion-wf-stopped-1", "my-bucket-3", func(t *testing.T, object minio.ObjectInfo, err error) { + assert.NotNil(t, err) + }) + then.ExpectArtifactByKey("on-deletion-wf-stopped-2", "my-bucket-3", func(t *testing.T, object minio.ObjectInfo, err error) { + assert.NotNil(t, err) + }) + + when := then.When(). + SubmitWorkflow(). + WaitForWorkflow( + fixtures.WorkflowCompletionOkay(true), + fixtures.Condition(func(wf *wfv1.Workflow) (bool, string) { + + condition := "for artifacts to exist" + + _, err1 := c.StatObject(context.Background(), "my-bucket-3", "on-deletion-wf-stopped-1", minio.StatObjectOptions{}) + _, err2 := c.StatObject(context.Background(), "my-bucket-3", "on-deletion-wf-stopped-2", minio.StatObjectOptions{}) + + if err1 == nil && err2 == nil { + return true, condition + } + + return false, condition + })) + + then = when.Then() + + // Assert artifact exists + then.ExpectArtifactByKey("on-deletion-wf-stopped-1", "my-bucket-3", func(t *testing.T, object minio.ObjectInfo, err error) { + assert.NoError(t, err) + }) + then.ExpectArtifactByKey("on-deletion-wf-stopped-2", "my-bucket-3", func(t *testing.T, object minio.ObjectInfo, err error) { + assert.NoError(t, err) + }) + + when = then.When() + + when. + DeleteWorkflow(). + WaitForWorkflowDeletion() + + then = when.Then() + + // Assert the artifacts don't exist. + then.ExpectArtifactByKey("on-deletion-wf-stopped-1", "my-bucket-3", func(t *testing.T, object minio.ObjectInfo, err error) { + assert.NotNil(t, err) + }) + then.ExpectArtifactByKey("on-deletion-wf-stopped-2", "my-bucket-3", func(t *testing.T, object minio.ObjectInfo, err error) { + assert.NotNil(t, err) + }) + + when = then.When() + + // Remove the finalizers so the workflow gets deleted in case the test failed. + when.RemoveFinalizers(false) + } +} + func (s *ArtifactsSuite) TestArtifactGC() { s.Given(). @@ -231,7 +322,7 @@ func (s *ArtifactsSuite) TestArtifactGC() { } else { fmt.Printf("verifying artifact %s is not deleted\n", expectedArtifact.key) then.ExpectArtifactByKey(expectedArtifact.key, expectedArtifact.bucketName, func(t *testing.T, object minio.ObjectInfo, err error) { - assert.Nil(t, err) + assert.NoError(t, err) }) } } @@ -270,7 +361,7 @@ spec: // create a ServiceAccount which won't be tied to the artifactgc role and attempt to use that service account in the GC Pod // Want to verify that this causes the ArtifactGCError Condition in the Workflow -func (s *ArtifactsSuite) TestArtifactGC_InsufficientRole() { +func (s *ArtifactsSuite) TestInsufficientRole() { ctx := context.Background() _, err := s.KubeClient.CoreV1().ServiceAccounts(fixtures.Namespace).Create(ctx, &corev1.ServiceAccount{ObjectMeta: metav1.ObjectMeta{Name: "artgc-role-test-sa"}}, metav1.CreateOptions{}) assert.NoError(s.T(), err) diff --git a/test/e2e/cli_test.go b/test/e2e/cli_test.go index 3eff8d04a0f4..9377a8d1da38 100644 --- a/test/e2e/cli_test.go +++ b/test/e2e/cli_test.go @@ -256,7 +256,7 @@ func (s *CLISuite) TestLogs() { WaitForWorkflow(fixtures.ToStart). WaitForWorkflow(fixtures.Condition(func(wf *wfv1.Workflow) (bool, string) { return wf.Status.Nodes.FindByDisplayName(wf.Name) != nil, "pod running" - }), 10*time.Second). + }), 40*time.Second). Then(). ExpectWorkflow(func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { name = metadata.Name @@ -836,7 +836,7 @@ func (s *CLISuite) TestWorkflowRetry() { WaitForWorkflow(fixtures.ToStart). WaitForWorkflow(fixtures.Condition(func(wf *wfv1.Workflow) (bool, string) { return wf.Status.AnyActiveSuspendNode(), "suspended node" - }), time.Minute). + }), time.Second*90). RunCli([]string{"terminate", "@latest"}, func(t *testing.T, output string, err error) { if assert.NoError(t, err) { assert.Regexp(t, "workflow retry-test-.* terminated", output) @@ -855,7 +855,7 @@ func (s *CLISuite) TestWorkflowRetry() { }). WaitForWorkflow(fixtures.Condition(func(wf *wfv1.Workflow) (bool, string) { return wf.Status.AnyActiveSuspendNode(), "suspended node" - }), time.Minute). + }), time.Second*90). Then(). ExpectWorkflow(func(t *testing.T, _ *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { outerStepsPodNode := status.Nodes.FindByDisplayName("steps-outer-step1") diff --git a/test/e2e/cron_test.go b/test/e2e/cron_test.go index 22a48dbcef86..41094ee312b3 100644 --- a/test/e2e/cron_test.go +++ b/test/e2e/cron_test.go @@ -365,7 +365,7 @@ func (s *CronSuite) TestMalformedCronWorkflow() { Exec("kubectl", []string{"apply", "-f", "testdata/malformed/malformed-cronworkflow.yaml"}, fixtures.NoError). Exec("kubectl", []string{"apply", "-f", "testdata/wellformed/wellformed-cronworkflow.yaml"}, fixtures.NoError). When(). - WaitForWorkflow(1*time.Minute+15*time.Second). + WaitForWorkflow(2*time.Minute). Then(). ExpectWorkflow(func(t *testing.T, metadata *v1.ObjectMeta, status *wfv1.WorkflowStatus) { assert.Equal(t, "wellformed", metadata.Labels[common.LabelKeyCronWorkflow]) diff --git a/test/e2e/fixtures/e2e_suite.go b/test/e2e/fixtures/e2e_suite.go index e189c918df96..f78f11a5f3bb 100644 --- a/test/e2e/fixtures/e2e_suite.go +++ b/test/e2e/fixtures/e2e_suite.go @@ -37,7 +37,10 @@ const ( Label = workflow.WorkflowFullName + "/test" // mark this workflow as a test ) -var defaultTimeout = env.LookupEnvDurationOr("E2E_WAIT_TIMEOUT", 60*time.Second) +var timeoutBias = env.LookupEnvDurationOr("E2E_WAIT_TIMEOUT_BIAS", 0*time.Second) + +var defaultTimeout = env.LookupEnvDurationOr("E2E_WAIT_TIMEOUT", 60*time.Second) + timeoutBias + var EnvFactor = env.LookupEnvIntOr("E2E_ENV_FACTOR", 1) type E2ESuite struct { diff --git a/test/e2e/fixtures/when.go b/test/e2e/fixtures/when.go index b1a49568fc74..0881cd3f9da2 100644 --- a/test/e2e/fixtures/when.go +++ b/test/e2e/fixtures/when.go @@ -258,7 +258,8 @@ func (w *When) WaitForWorkflow(options ...interface{}) *When { for _, opt := range options { switch v := opt.(type) { case time.Duration: - timeout = v - 30*time.Second + defaultTimeout + // Note that we add the timeoutBias (defaults to 0), set by environment variable E2E_WAIT_TIMEOUT_BIAS + timeout = v + timeoutBias case string: workflowName = v case Condition: diff --git a/test/e2e/functional_test.go b/test/e2e/functional_test.go index 1f060e91815e..543d672e0798 100644 --- a/test/e2e/functional_test.go +++ b/test/e2e/functional_test.go @@ -28,7 +28,7 @@ func (s *FunctionalSuite) TestArchiveStrategies() { Workflow(`@testdata/archive-strategies.yaml`). When(). SubmitWorkflow(). - WaitForWorkflow(time.Minute). + WaitForWorkflow(time.Second * 90). Then(). ExpectWorkflow(func(t *testing.T, _ *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { assert.Equal(t, wfv1.WorkflowSucceeded, status.Phase) @@ -94,7 +94,7 @@ func (s *FunctionalSuite) TestWhenExpressions() { Workflow("@functional/conditionals.yaml"). When(). SubmitWorkflow(). - WaitForWorkflow(fixtures.ToBeSucceeded, 2*time.Minute). + WaitForWorkflow(fixtures.ToBeSucceeded, 150*time.Second). Then(). ExpectWorkflowNode(wfv1.NodeWithDisplayName("print-hello-govaluate"), func(t *testing.T, n *wfv1.NodeStatus, p *apiv1.Pod) { assert.NotEqual(t, wfv1.NodeTypeSkipped, n.Type) @@ -223,7 +223,7 @@ spec: `). When(). SubmitWorkflow(). - WaitForWorkflow(fixtures.ToBeSucceeded, time.Minute). + WaitForWorkflow(fixtures.ToBeSucceeded, 90*time.Second). Then(). ExpectWorkflow(func(t *testing.T, _ *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { assert.Len(t, status.Nodes, 7) @@ -348,7 +348,7 @@ func (s *FunctionalSuite) TestEventOnWorkflowSuccess() { Workflow("@functional/success-event.yaml"). When(). SubmitWorkflow(). - WaitForWorkflow(60*time.Second). + WaitForWorkflow(90*time.Second). Then(). ExpectWorkflow(func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { uid = metadata.UID @@ -384,7 +384,7 @@ func (s *FunctionalSuite) TestEventOnPVCFail() { Workflow("@expectedfailures/volumes-pvc-fail-event.yaml"). When(). SubmitWorkflow(). - WaitForWorkflow(120*time.Second). + WaitForWorkflow(150*time.Second). Then(). ExpectWorkflow(func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { uid = metadata.UID @@ -553,7 +553,7 @@ func (s *FunctionalSuite) TestParameterAggregation() { Workflow("@functional/param-aggregation.yaml"). When(). SubmitWorkflow(). - WaitForWorkflow(time.Minute). + WaitForWorkflow(time.Second * 90). Then(). ExpectWorkflow(func(t *testing.T, _ *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { assert.Equal(t, wfv1.WorkflowSucceeded, status.Phase) @@ -569,7 +569,7 @@ func (s *FunctionalSuite) TestDAGDepends() { Workflow("@functional/dag-depends.yaml"). When(). SubmitWorkflow(). - WaitForWorkflow(time.Minute). + WaitForWorkflow(time.Second * 90). Then(). ExpectWorkflow(func(t *testing.T, _ *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { assert.Equal(t, wfv1.NodeSucceeded, status.Nodes.FindByDisplayName("should-execute-1").Phase) @@ -811,7 +811,7 @@ spec: SubmitWorkflow(). WaitForWorkflow(fixtures.Condition(func(wf *wfv1.Workflow) (bool, string) { return wf.Status.Phase == wfv1.WorkflowFailed, "Waiting for timeout" - }), 30*time.Second) + }), 60*time.Second) } func (s *FunctionalSuite) TestTemplateLevelTimeoutWithForbidden() { @@ -898,7 +898,7 @@ func (s *FunctionalSuite) TestDataTransformation() { Workflow("@testdata/data-transformation.yaml"). When(). SubmitWorkflow(). - WaitForWorkflow(1 * time.Minute). + WaitForWorkflow(90 * time.Second). Then(). ExpectWorkflow(func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { assert.Equal(t, wfv1.WorkflowSucceeded, status.Phase) diff --git a/test/e2e/progress_test.go b/test/e2e/progress_test.go index 5749440db321..8c4d97a8041a 100644 --- a/test/e2e/progress_test.go +++ b/test/e2e/progress_test.go @@ -46,8 +46,8 @@ func (s *ProgressSuite) TestLoggedProgress() { When(). SubmitWorkflow(). WaitForWorkflow(fixtures.ToBeRunning). - WaitForWorkflow(toHaveProgress("0/100"), 20*time.Second). - WaitForWorkflow(toHaveProgress("50/100"), 20*time.Second). + WaitForWorkflow(toHaveProgress("0/100"), time.Minute). + WaitForWorkflow(toHaveProgress("50/100"), time.Minute). WaitForWorkflow(). Then(). ExpectWorkflow(func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { diff --git a/test/e2e/retry_test.go b/test/e2e/retry_test.go index a34104619d21..740ef42d1967 100644 --- a/test/e2e/retry_test.go +++ b/test/e2e/retry_test.go @@ -86,7 +86,7 @@ spec: `). When(). SubmitWorkflow(). - WaitForWorkflow(time.Minute). + WaitForWorkflow(time.Second * 90). Then(). ExpectWorkflow(func(t *testing.T, _ *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { assert.Equal(t, wfv1.WorkflowPhase("Failed"), status.Phase) @@ -112,7 +112,7 @@ spec: `). When(). SubmitWorkflow(). - WaitForWorkflow(time.Minute). + WaitForWorkflow(time.Second * 90). Then(). ExpectWorkflow(func(t *testing.T, _ *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { assert.Equal(t, wfv1.WorkflowPhase("Failed"), status.Phase) diff --git a/test/e2e/semaphore_test.go b/test/e2e/semaphore_test.go index d93f7739782e..670a31936582 100644 --- a/test/e2e/semaphore_test.go +++ b/test/e2e/semaphore_test.go @@ -29,8 +29,8 @@ func (s *SemaphoreSuite) TestSynchronizationWfLevelMutex() { Workflow("@functional/synchronization-mutex-wf-level.yaml"). When(). SubmitWorkflow(). - WaitForWorkflow(fixtures.ToBeWaitingOnAMutex, time.Minute). - WaitForWorkflow(fixtures.ToBeSucceeded, time.Minute) + WaitForWorkflow(fixtures.ToBeWaitingOnAMutex, 90*time.Second). + WaitForWorkflow(fixtures.ToBeSucceeded, 90*time.Second) } func (s *SemaphoreSuite) TestTemplateLevelMutex() { @@ -38,8 +38,8 @@ func (s *SemaphoreSuite) TestTemplateLevelMutex() { Workflow("@functional/synchronization-mutex-tmpl-level.yaml"). When(). SubmitWorkflow(). - WaitForWorkflow(fixtures.ToBeWaitingOnAMutex, time.Minute). - WaitForWorkflow(fixtures.ToBeSucceeded, time.Minute) + WaitForWorkflow(fixtures.ToBeWaitingOnAMutex, 90*time.Second). + WaitForWorkflow(fixtures.ToBeSucceeded, 90*time.Second) } func (s *SemaphoreSuite) TestWorkflowLevelSemaphore() { @@ -48,12 +48,12 @@ func (s *SemaphoreSuite) TestWorkflowLevelSemaphore() { When(). CreateConfigMap("my-config", map[string]string{"workflow": "1"}, map[string]string{}). SubmitWorkflow(). - WaitForWorkflow(fixtures.ToHavePhase(wfv1.WorkflowUnknown), time.Minute). + WaitForWorkflow(fixtures.ToHavePhase(wfv1.WorkflowUnknown), 90*time.Second). WaitForWorkflow(). DeleteConfigMap("my-config"). Then(). When(). - WaitForWorkflow(fixtures.ToBeSucceeded, time.Minute) + WaitForWorkflow(fixtures.ToBeSucceeded, 90*time.Second) } func (s *SemaphoreSuite) TestTemplateLevelSemaphore() { @@ -62,7 +62,7 @@ func (s *SemaphoreSuite) TestTemplateLevelSemaphore() { When(). CreateConfigMap("my-config", map[string]string{"template": "1"}, map[string]string{}). SubmitWorkflow(). - WaitForWorkflow(fixtures.ToBeRunning, time.Minute). + WaitForWorkflow(fixtures.ToBeRunning, 90*time.Second). Then(). ExpectWorkflow(func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { assert.True(t, status.Nodes.Any(func(n wfv1.NodeStatus) bool { @@ -70,7 +70,7 @@ func (s *SemaphoreSuite) TestTemplateLevelSemaphore() { })) }). When(). - WaitForWorkflow(time.Minute) + WaitForWorkflow(time.Second * 90) } func (s *SemaphoreSuite) TestSynchronizationTmplLevelMutexAndSemaphore() { @@ -79,7 +79,7 @@ func (s *SemaphoreSuite) TestSynchronizationTmplLevelMutexAndSemaphore() { When(). CreateConfigMap("my-config", map[string]string{"workflow": "1"}, map[string]string{}). SubmitWorkflow(). - WaitForWorkflow(fixtures.ToBeSucceeded, time.Minute) + WaitForWorkflow(fixtures.ToBeSucceeded, 90*time.Second) } func TestSemaphoreSuite(t *testing.T) { diff --git a/test/e2e/signals_test.go b/test/e2e/signals_test.go index 3642f8df80a9..873c16014096 100644 --- a/test/e2e/signals_test.go +++ b/test/e2e/signals_test.go @@ -15,7 +15,7 @@ import ( "github.com/argoproj/argo-workflows/v3/test/e2e/fixtures" ) -const killDuration = 75 * time.Second +const killDuration = 2 * time.Minute // Tests the use of signals to kill containers. // argoproj/argosay:v2 does not contain sh, so you must use argoproj/argosay:v1. @@ -145,7 +145,7 @@ func (s *SignalsSuite) TestSignaled() { Then(). ExpectWorkflow(func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { assert.Equal(t, wfv1.WorkflowFailed, status.Phase) - assert.Equal(t, "Error (exit code 143)", status.Message) + assert.Contains(t, status.Message, "(exit code 143)") }) } @@ -158,16 +158,16 @@ func (s *SignalsSuite) TestSignaledContainerSet() { Then(). ExpectWorkflow(func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { assert.Equal(t, wfv1.WorkflowFailed, status.Phase) - assert.Equal(t, "OOMKilled (exit code 137)", status.Message) + assert.Contains(t, status.Message, "(exit code 137)") one := status.Nodes.FindByDisplayName("one") if assert.NotNil(t, one) { assert.Equal(t, wfv1.NodeFailed, one.Phase) - assert.Equal(t, "OOMKilled (exit code 137): ", one.Message) + assert.Contains(t, one.Message, "(exit code 137)") } two := status.Nodes.FindByDisplayName("two") if assert.NotNil(t, two) { assert.Equal(t, wfv1.NodeFailed, two.Phase) - assert.Equal(t, "Error (exit code 143): ", two.Message) + assert.Contains(t, two.Message, "(exit code 143)") } }) } diff --git a/test/e2e/testdata/artifactgc/artgc-dag-wf-stopped-pod-gc-on-pod-completion.yaml b/test/e2e/testdata/artifactgc/artgc-dag-wf-stopped-pod-gc-on-pod-completion.yaml new file mode 100644 index 000000000000..e5e6430c8e1e --- /dev/null +++ b/test/e2e/testdata/artifactgc/artgc-dag-wf-stopped-pod-gc-on-pod-completion.yaml @@ -0,0 +1,135 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + generateName: artgc-dag-wf-stopped-pod-gc-on-pod-completion- +spec: + workflowMetadata: + labels: + workflows.argoproj.io/test: "true" + workflows.argoproj.io/workflow: "artgc-dag-wf-stopped-pod-gc-on-pod-completion" + artifactGC: + serviceAccountName: default + strategy: OnWorkflowDeletion + entrypoint: artgc-dag-wf-stopped-pod-gc-on-pod-completion-main + serviceAccountName: argo + executor: + serviceAccountName: default + volumeClaimTemplates: + - metadata: + name: artifacts + spec: + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: 1Gi + templates: + - name: artgc-dag-wf-stopped-pod-gc-on-pod-completion-main + dag: + tasks: + - name: create-artifact-1 + template: artgc-dag-artifact-creator-1 + - name: create-artifact-2 + template: artgc-dag-artifact-creator-2 + dependencies: [create-artifact-1] + - name: delay-stop-workflow + template: artgc-dag-delay-stop + dependencies: [create-artifact-1] + - name: stop-workflow + template: artgc-dag-workflow-stopper + dependencies: [delay-stop-workflow] + - name: artgc-dag-delay-stop + container: + image: alpine:latest + volumeMounts: + - name: artifacts + mountPath: /mnt/vol + command: [sh, -c] + args: + - | + echo "Delaying workflow stop" + ls /mnt + x=0 + while [ $x -le 60 ] + do + sleep 1 + if [ -f "/mnt/vol/test-1.txt" ] && [ -f "/mnt/vol/test-2.txt" ]; then + echo "Artifacts found in shared volume" + break + fi + x=$(( $x + 1 )) + done + - name: artgc-dag-workflow-stopper + container: + image: argoproj/argocli:latest + args: + - stop + - -l + - workflows.argoproj.io/workflow=artgc-dag-wf-stopped-pod-gc-on-pod-completion + - --namespace=argo + - --loglevel=debug + - name: artgc-dag-artifact-creator-1 + metadata: + labels: + template: "artgc-dag-artifact-creator-1" + container: + image: alpine:latest + volumeMounts: + - name: artifacts + mountPath: /mnt/vol + command: [sh, -c] + args: + - | + echo 'testing' > /mnt/vol/test-1.txt + echo "Artifact saved to /mnt/vol/test-1.txt" + outputs: + artifacts: + - name: on-deletion-wf-stopped-1 + path: /mnt/vol/test-1.txt + s3: + key: on-deletion-wf-stopped-1 + bucket: my-bucket-3 + endpoint: minio:9000 + insecure: true + accessKeySecret: + name: my-minio-cred + key: accesskey + secretKeySecret: + name: my-minio-cred + key: secretkey + artifactGC: + strategy: OnWorkflowDeletion + - name: artgc-dag-artifact-creator-2 + metadata: + labels: + template: "artgc-dag-artifact-creator-2" + container: + image: alpine:latest + volumeMounts: + - name: artifacts + mountPath: /mnt/vol + command: [sh, -c] + args: + - | + echo 'testing' > /mnt/vol/test-2.txt + echo "Artifact saved to /mnt/vol/test-2.txt" + while true + do + sleep 1 + done + outputs: + artifacts: + - name: on-deletion-wf-stopped-2 + path: /mnt/vol/test-2.txt + s3: + key: on-deletion-wf-stopped-2 + bucket: my-bucket-3 + endpoint: minio:9000 + insecure: true + accessKeySecret: + name: my-minio-cred + key: accesskey + secretKeySecret: + name: my-minio-cred + key: secretkey + artifactGC: + strategy: OnWorkflowDeletion \ No newline at end of file diff --git a/test/e2e/testdata/artifactgc/artgc-dag-wf-stopped.yaml b/test/e2e/testdata/artifactgc/artgc-dag-wf-stopped.yaml new file mode 100644 index 000000000000..5480f3fce0a7 --- /dev/null +++ b/test/e2e/testdata/artifactgc/artgc-dag-wf-stopped.yaml @@ -0,0 +1,137 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + generateName: artgc-dag-wf-stopped- +spec: + workflowMetadata: + labels: + workflows.argoproj.io/test: "true" + workflows.argoproj.io/workflow: "artgc-dag-wf-stopped" + podGC: + strategy: OnPodCompletion + artifactGC: + serviceAccountName: default + strategy: OnWorkflowDeletion + entrypoint: artgc-dag-wf-stopped-main + serviceAccountName: argo + executor: + serviceAccountName: default + volumeClaimTemplates: + - metadata: + name: artifacts + spec: + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: 1Gi + templates: + - name: artgc-dag-wf-stopped-main + dag: + tasks: + - name: create-artifact-1 + template: artgc-dag-artifact-creator-1 + - name: create-artifact-2 + template: artgc-dag-artifact-creator-2 + dependencies: [create-artifact-1] + - name: delay-stop-workflow + template: artgc-dag-delay-stop + dependencies: [create-artifact-1] + - name: stop-workflow + template: artgc-dag-workflow-stopper + dependencies: [delay-stop-workflow] + - name: artgc-dag-delay-stop + container: + image: alpine:latest + volumeMounts: + - name: artifacts + mountPath: /mnt/vol + command: [sh, -c] + args: + - | + echo "Delaying workflow stop" + ls /mnt + x=0 + while [ $x -le 60 ] + do + sleep 1 + if [ -f "/mnt/vol/test-1.txt" ] && [ -f "/mnt/vol/test-2.txt" ]; then + echo "Artifacts found in shared volume" + break + fi + x=$(( $x + 1 )) + done + - name: artgc-dag-workflow-stopper + container: + image: argoproj/argocli:latest + args: + - stop + - -l + - workflows.argoproj.io/workflow=artgc-dag-wf-stopped + - --namespace=argo + - --loglevel=debug + - name: artgc-dag-artifact-creator-1 + metadata: + labels: + template: "artgc-dag-artifact-creator-1" + container: + image: alpine:latest + volumeMounts: + - name: artifacts + mountPath: /mnt/vol + command: [sh, -c] + args: + - | + echo 'testing' > /mnt/vol/test-1.txt + echo "Artifact saved to /mnt/vol/test-1.txt" + outputs: + artifacts: + - name: on-deletion-wf-stopped-1 + path: /mnt/vol/test-1.txt + s3: + key: on-deletion-wf-stopped-1 + bucket: my-bucket-3 + endpoint: minio:9000 + insecure: true + accessKeySecret: + name: my-minio-cred + key: accesskey + secretKeySecret: + name: my-minio-cred + key: secretkey + artifactGC: + strategy: OnWorkflowDeletion + - name: artgc-dag-artifact-creator-2 + metadata: + labels: + template: "artgc-dag-artifact-creator-2" + container: + image: alpine:latest + volumeMounts: + - name: artifacts + mountPath: /mnt/vol + command: [sh, -c] + args: + - | + echo 'testing' > /mnt/vol/test-2.txt + echo "Artifact saved to /mnt/vol/test-2.txt" + while true + do + sleep 1 + done + outputs: + artifacts: + - name: on-deletion-wf-stopped-2 + path: /mnt/vol/test-2.txt + s3: + key: on-deletion-wf-stopped-2 + bucket: my-bucket-3 + endpoint: minio:9000 + insecure: true + accessKeySecret: + name: my-minio-cred + key: accesskey + secretKeySecret: + name: my-minio-cred + key: secretkey + artifactGC: + strategy: OnWorkflowDeletion \ No newline at end of file diff --git a/test/e2e/workflow_test.go b/test/e2e/workflow_test.go index 53958206f385..623b44f750a6 100644 --- a/test/e2e/workflow_test.go +++ b/test/e2e/workflow_test.go @@ -46,7 +46,7 @@ spec: `). When(). SubmitWorkflow(). - WaitForWorkflow(fixtures.ToBeSucceeded, time.Minute*10). + WaitForWorkflow(fixtures.ToBeSucceeded, time.Minute*11). Then(). ExpectWorkflow(func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { assert.Equal(t, wfv1.WorkflowSucceeded, status.Phase) @@ -78,7 +78,7 @@ spec: `). When(). SubmitWorkflow(). - WaitForWorkflow(fixtures.ToBeSucceeded, time.Minute*10). + WaitForWorkflow(fixtures.ToBeSucceeded, time.Minute*11). Then(). ExpectWorkflow(func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { assert.Equal(t, wfv1.WorkflowSucceeded, status.Phase) diff --git a/workflow/common/common.go b/workflow/common/common.go index 0f6a1afb1542..b1086892cfea 100644 --- a/workflow/common/common.go +++ b/workflow/common/common.go @@ -51,6 +51,10 @@ const ( // AnnotationKeyProgress is N/M progress for the node AnnotationKeyProgress = workflow.WorkflowFullName + "/progress" + // AnnotationKeyReportOutputsCompleted is an annotation on a workflow pod indicating outputs have completed. + // Only used as a backup in case LabelKeyReportOutputsCompleted can't be added to WorkflowTaskResult. + AnnotationKeyReportOutputsCompleted = workflow.WorkflowFullName + "/report-outputs-completed" + // AnnotationKeyArtifactGCStrategy is listed as an annotation on the Artifact GC Pod to identify // the strategy whose artifacts are being deleted AnnotationKeyArtifactGCStrategy = workflow.WorkflowFullName + "/artifact-gc-strategy" @@ -94,6 +98,8 @@ const ( LabelKeyOnExit = workflow.WorkflowFullName + "/on-exit" // LabelKeyArtifactGCPodHash is a label applied to WorkflowTaskSets used by the Artifact Garbage Collection Pod LabelKeyArtifactGCPodHash = workflow.WorkflowFullName + "/artifact-gc-pod" + // LabelKeyReportOutputsCompleted is a label applied to WorkflowTaskResults indicating whether all the outputs have been reported. + LabelKeyReportOutputsCompleted = workflow.WorkflowFullName + "/report-outputs-completed" // ExecutorArtifactBaseDir is the base directory in the init container in which artifacts will be copied to. // Each artifact will be named according to its input name (e.g: /argo/inputs/artifacts/CODE) diff --git a/workflow/controller/artifact_gc.go b/workflow/controller/artifact_gc.go index 348150ed19ef..ca2f48c3a03b 100644 --- a/workflow/controller/artifact_gc.go +++ b/workflow/controller/artifact_gc.go @@ -27,10 +27,9 @@ const artifactGCComponent = "artifact-gc" // artifactGCEnabled is a feature flag to globally disabled artifact GC in case of emergency var artifactGCEnabled, _ = env.GetBool("ARGO_ARTIFACT_GC_ENABLED", true) -func (woc *wfOperationCtx) garbageCollectArtifacts(ctx context.Context) error { - +func (woc *wfOperationCtx) addArtifactGCFinalizer() { if !artifactGCEnabled { - return nil + return } if woc.wf.Status.ArtifactGCStatus == nil { @@ -41,7 +40,7 @@ func (woc *wfOperationCtx) garbageCollectArtifacts(ctx context.Context) error { // and there's work left to do for it) if !slice.ContainsString(woc.wf.Finalizers, common.FinalizerArtifactGC) { if woc.wf.Status.ArtifactGCStatus.NotSpecified { - return nil // we already verified it's not required for this workflow + return // we already verified it's not required for this workflow } if woc.HasArtifactGC() { woc.log.Info("adding artifact GC finalizer") @@ -51,6 +50,12 @@ func (woc *wfOperationCtx) garbageCollectArtifacts(ctx context.Context) error { } else { woc.wf.Status.ArtifactGCStatus.NotSpecified = true } + } +} + +func (woc *wfOperationCtx) garbageCollectArtifacts(ctx context.Context) error { + + if !artifactGCEnabled { return nil } diff --git a/workflow/controller/operator.go b/workflow/controller/operator.go index 98ebbaf7fbc8..6d2316dac5be 100644 --- a/workflow/controller/operator.go +++ b/workflow/controller/operator.go @@ -234,12 +234,21 @@ func (woc *wfOperationCtx) operate(ctx context.Context) { } woc.artifactRepository = repo - // check to see if we can do garbage collection of Artifacts; this is the only functionality in this method which can be called for 'Completed' Workflows, - // so we can check for Completed Workflows after and return - if err := woc.garbageCollectArtifacts(ctx); err != nil { - woc.log.WithError(err).Error("failed to GC artifacts") - return + woc.addArtifactGCFinalizer() + + // Reconciliation of Outputs (Artifacts). See ReportOutputs() of executor.go. + woc.taskResultReconciliation() + + // Do artifact GC if all task results are completed. + if woc.checkTaskResultsCompleted() { + if err := woc.garbageCollectArtifacts(ctx); err != nil { + woc.log.WithError(err).Error("failed to GC artifacts") + return + } + } else { + woc.log.Debug("Skipping artifact GC") } + if woc.wf.Labels[common.LabelKeyCompleted] == "true" { // abort now, we do not want to perform any more processing on a complete workflow because we could corrupt it return } @@ -298,7 +307,6 @@ func (woc *wfOperationCtx) operate(ctx context.Context) { woc.wf.Status.EstimatedDuration = woc.estimateWorkflowDuration() } else { woc.workflowDeadline = woc.getWorkflowDeadline() - woc.taskResultReconciliation() err = woc.podReconciliation(ctx) if err == nil { woc.failSuspendedAndPendingNodesAfterDeadlineOrShutdown() @@ -779,7 +787,8 @@ func (woc *wfOperationCtx) persistUpdates(ctx context.Context) { woc.log.WithError(err).Warn("error updating taskset") } - if woc.wf.Status.Phase.Completed() { + // Make sure the TaskResults are incorporated into WorkflowStatus before we delete them. + if woc.wf.Status.Phase.Completed() && woc.checkTaskResultsCompleted() { if err := woc.deleteTaskResults(ctx); err != nil { woc.log.WithError(err).Warn("failed to delete task-results") } @@ -791,6 +800,19 @@ func (woc *wfOperationCtx) persistUpdates(ctx context.Context) { woc.queuePodsForCleanup() } +func (woc *wfOperationCtx) checkTaskResultsCompleted() bool { + taskResultsCompleted := woc.wf.Status.GetTaskResultsCompleted() + if len(taskResultsCompleted) == 0 { + return false + } + for _, completed := range taskResultsCompleted { + if !completed { + return false + } + } + return true +} + func (woc *wfOperationCtx) deleteTaskResults(ctx context.Context) error { deletePropagationBackground := metav1.DeletePropagationBackground return woc.controller.wfclientset.ArgoprojV1alpha1().WorkflowTaskResults(woc.wf.Namespace). @@ -1347,6 +1369,15 @@ func (woc *wfOperationCtx) assessNodeStatus(pod *apiv1.Pod, old *wfv1.NodeStatus new.PodIP = pod.Status.PodIP } + if x, ok := pod.Annotations[common.AnnotationKeyReportOutputsCompleted]; ok { + woc.log.Warn("workflow uses legacy/insecure pod patch, see https://argoproj.github.io/argo-workflows/workflow-rbac/") + resultName := pod.GetName() + woc.wf.Status.InitializeTaskResultIncomplete(resultName) + if x == "true" { + woc.wf.Status.MarkTaskResultComplete(resultName) + } + } + if x, ok := pod.Annotations[common.AnnotationKeyOutputs]; ok { woc.log.Warn("workflow uses legacy/insecure pod patch, see https://argoproj.github.io/argo-workflows/workflow-rbac/") if new.Outputs == nil { diff --git a/workflow/controller/taskresult.go b/workflow/controller/taskresult.go index ac53e009b525..e038a7c5b172 100644 --- a/workflow/controller/taskresult.go +++ b/workflow/controller/taskresult.go @@ -53,10 +53,25 @@ func (wfc *WorkflowController) newWorkflowTaskResultInformer() cache.SharedIndex } func (woc *wfOperationCtx) taskResultReconciliation() { + objs, _ := woc.controller.taskResultInformer.GetIndexer().ByIndex(indexes.WorkflowIndex, woc.wf.Namespace+"/"+woc.wf.Name) woc.log.WithField("numObjs", len(objs)).Info("Task-result reconciliation") for _, obj := range objs { result := obj.(*wfv1.WorkflowTaskResult) + resultName := result.GetName() + + woc.log.Debugf("task result:\n%+v", result) + woc.log.Debugf("task result name:\n%+v", resultName) + + // Explicitly initialize the TaskResultsCompleted state for the given result. + woc.wf.Status.InitializeTaskResultIncomplete(resultName) + + // If the task result is completed, set the state to true. + if result.Labels[common.LabelKeyReportOutputsCompleted] == "true" { + woc.log.Debugf("Marking task result complete %s", resultName) + woc.wf.Status.MarkTaskResultComplete(resultName) + } + nodeID := result.Name old, err := woc.wf.Status.Nodes.Get(nodeID) if err != nil { @@ -83,4 +98,6 @@ func (woc *wfOperationCtx) taskResultReconciliation() { woc.updated = true } } + woc.log.Debugf("task results completed:\n%+v", woc.wf.Status.GetTaskResultsCompleted()) + woc.log.Debugf("task result completed len: %d", len(woc.wf.Status.GetTaskResultsCompleted())) } diff --git a/workflow/controller/workflowpod.go b/workflow/controller/workflowpod.go index f48bfb537d2e..510d112c29e9 100644 --- a/workflow/controller/workflowpod.go +++ b/workflow/controller/workflowpod.go @@ -558,6 +558,10 @@ func (woc *wfOperationCtx) createEnvVars() []apiv1.EnvVar { Name: common.EnvVarWorkflowName, Value: woc.wf.Name, }, + { + Name: common.EnvVarWorkflowUID, + Value: string(woc.wf.UID), + }, } if v := woc.controller.Config.InstanceID; v != "" { execEnvVars = append(execEnvVars, diff --git a/workflow/executor/data.go b/workflow/executor/data.go index adb54af3b2f5..552fb60670f0 100644 --- a/workflow/executor/data.go +++ b/workflow/executor/data.go @@ -26,7 +26,7 @@ func (we *WorkflowExecutor) Data(ctx context.Context) error { return err } we.Template.Outputs.Result = pointer.StringPtr(string(out)) - err = we.reportOutputs(ctx, nil) + err = we.ReportOutputs(ctx, nil) if err != nil { return err } diff --git a/workflow/executor/executor.go b/workflow/executor/executor.go index 4e15938ceda8..eaa126f7bef2 100644 --- a/workflow/executor/executor.go +++ b/workflow/executor/executor.go @@ -56,6 +56,7 @@ type WorkflowExecutor struct { PodName string podUID types.UID workflow string + workflowUID types.UID nodeId string Template wfv1.Template IncludeScriptOutput bool @@ -113,7 +114,9 @@ func NewExecutor( restClient rest.Interface, podName string, podUID types.UID, - workflow, nodeId, namespace string, + workflow string, + workflowUID types.UID, + nodeId, namespace string, cre ContainerRuntimeExecutor, template wfv1.Template, includeScriptOutput bool, @@ -125,6 +128,7 @@ func NewExecutor( PodName: podName, podUID: podUID, workflow: workflow, + workflowUID: workflowUID, nodeId: nodeId, ClientSet: clientset, taskResultClient: taskResultClient, @@ -287,6 +291,7 @@ func (we *WorkflowExecutor) SaveArtifacts(ctx context.Context) error { log.Infof("No output artifacts") return nil } + log.Infof("Saving output artifacts") err := os.MkdirAll(tempOutArtDir, os.ModePerm) if err != nil { @@ -584,7 +589,7 @@ func (we *WorkflowExecutor) SaveParameters(ctx context.Context) error { return nil } -func (we *WorkflowExecutor) SaveLogs(ctx context.Context) { +func (we *WorkflowExecutor) SaveLogs(ctx context.Context) []wfv1.Artifact { var logArtifacts []wfv1.Artifact tempLogsDir := "/tmp/argo/outputs/logs" @@ -608,11 +613,7 @@ func (we *WorkflowExecutor) SaveLogs(ctx context.Context) { } } - // try to upsert TaskResult, if it fails, we will try to update the Pod's Annotations - err := we.reportOutputs(ctx, logArtifacts) - if err != nil { - we.AddError(err) - } + return logArtifacts } // saveContainerLogs saves a single container's log into a file @@ -780,17 +781,38 @@ func (we *WorkflowExecutor) CaptureScriptResult(ctx context.Context) error { return nil } -// reportOutputs updates the WorkflowTaskResult (or falls back to annotate the Pod) -func (we *WorkflowExecutor) reportOutputs(ctx context.Context, logArtifacts []wfv1.Artifact) error { +// FinalizeOutput adds a label or annotation to denote that outputs have completed reporting. +func (we *WorkflowExecutor) FinalizeOutput(ctx context.Context) { + err := retryutil.OnError(wait.Backoff{ + Duration: time.Second, + Factor: 2, + Jitter: 0.1, + Steps: 5, + Cap: 30 * time.Second, + }, errorsutil.IsTransientErr, func() error { + err := we.patchTaskResultLabels(ctx, map[string]string{ + common.LabelKeyReportOutputsCompleted: "true", + }) + if apierr.IsForbidden(err) { + log.WithError(err).Warn("failed to patch task set, falling back to legacy/insecure pod patch, see https://argoproj.github.io/argo-workflows/workflow-rbac/") + // Only added as a backup in case LabelKeyReportOutputsCompleted could not be set + err = we.AddAnnotation(ctx, common.AnnotationKeyReportOutputsCompleted, "true") + } + return err + }) + if err != nil { + we.AddError(err) + } +} + +// ReportOutputs updates the WorkflowTaskResult (or falls back to annotate the Pod) +func (we *WorkflowExecutor) ReportOutputs(ctx context.Context, logArtifacts []wfv1.Artifact) error { outputs := we.Template.Outputs.DeepCopy() outputs.Artifacts = append(outputs.Artifacts, logArtifacts...) return we.reportResult(ctx, wfv1.NodeResult{Outputs: outputs}) } func (we *WorkflowExecutor) reportResult(ctx context.Context, result wfv1.NodeResult) error { - if !result.Outputs.HasOutputs() && !result.Progress.IsValid() { - return nil - } return retryutil.OnError(wait.Backoff{ Duration: time.Second, Factor: 2, @@ -812,6 +834,8 @@ func (we *WorkflowExecutor) reportResult(ctx context.Context, result wfv1.NodeRe if result.Progress.IsValid() { // this may result in occasionally two patches return we.AddAnnotation(ctx, common.AnnotationKeyProgress, string(result.Progress)) } + // Only added as a backup in case LabelKeyReportOutputsCompleted could not be set + return we.AddAnnotation(ctx, common.AnnotationKeyReportOutputsCompleted, "false") } return err diff --git a/workflow/executor/executor_test.go b/workflow/executor/executor_test.go index 557c241d5954..c588c75b8dfb 100644 --- a/workflow/executor/executor_test.go +++ b/workflow/executor/executor_test.go @@ -26,6 +26,7 @@ import ( const ( fakePodName = "fake-test-pod-1234567890" fakeWorkflow = "my-wf" + fakeWorkflowUID = "my-wf-uid" fakePodUID = "my-pod-uid" fakeNodeID = "my-node-id" fakeNamespace = "default" @@ -378,6 +379,7 @@ func TestChmod(t *testing.T) { func TestSaveArtifacts(t *testing.T) { fakeClientset := fake.NewSimpleClientset() mockRuntimeExecutor := mocks.ContainerRuntimeExecutor{} + mockTaskResultClient := argofake.NewSimpleClientset().ArgoprojV1alpha1().WorkflowTaskResults(fakeNamespace) templateWithOutParam := wfv1.Template{ Inputs: wfv1.Inputs{ Artifacts: []wfv1.Artifact{ @@ -444,31 +446,34 @@ func TestSaveArtifacts(t *testing.T) { }{ { workflowExecutor: WorkflowExecutor{ - PodName: fakePodName, - Template: templateWithOutParam, - ClientSet: fakeClientset, - Namespace: fakeNamespace, - RuntimeExecutor: &mockRuntimeExecutor, + PodName: fakePodName, + Template: templateWithOutParam, + ClientSet: fakeClientset, + Namespace: fakeNamespace, + RuntimeExecutor: &mockRuntimeExecutor, + taskResultClient: mockTaskResultClient, }, expectError: false, }, { workflowExecutor: WorkflowExecutor{ - PodName: fakePodName, - Template: templateOptionFalse, - ClientSet: fakeClientset, - Namespace: fakeNamespace, - RuntimeExecutor: &mockRuntimeExecutor, + PodName: fakePodName, + Template: templateOptionFalse, + ClientSet: fakeClientset, + Namespace: fakeNamespace, + RuntimeExecutor: &mockRuntimeExecutor, + taskResultClient: mockTaskResultClient, }, expectError: true, }, { workflowExecutor: WorkflowExecutor{ - PodName: fakePodName, - Template: templateZipArchive, - ClientSet: fakeClientset, - Namespace: fakeNamespace, - RuntimeExecutor: &mockRuntimeExecutor, + PodName: fakePodName, + Template: templateZipArchive, + ClientSet: fakeClientset, + Namespace: fakeNamespace, + RuntimeExecutor: &mockRuntimeExecutor, + taskResultClient: mockTaskResultClient, }, expectError: false, }, @@ -506,6 +511,7 @@ func TestMonitorProgress(t *testing.T) { fakePodName, fakePodUID, fakeWorkflow, + fakeWorkflowUID, fakeNodeID, fakeNamespace, &mocks.ContainerRuntimeExecutor{}, @@ -547,7 +553,39 @@ func TestSaveLogs(t *testing.T) { } ctx := context.Background() - we.SaveLogs(ctx) + logArtifacts := we.SaveLogs(ctx) + assert.EqualError(t, we.errors[0], artStorageError) + assert.Empty(t, logArtifacts) }) } + +func TestReportOutputs(t *testing.T) { + mockRuntimeExecutor := mocks.ContainerRuntimeExecutor{} + mockTaskResultClient := argofake.NewSimpleClientset().ArgoprojV1alpha1().WorkflowTaskResults(fakeNamespace) + t.Run("Simple report output", func(t *testing.T) { + artifacts := []wfv1.Artifact{ + { + Name: "samedir", + Path: "/samedir", + }, + } + templateWithArtifacts := wfv1.Template{ + Inputs: wfv1.Inputs{ + Artifacts: artifacts, + }, + } + we := WorkflowExecutor{ + Template: templateWithArtifacts, + RuntimeExecutor: &mockRuntimeExecutor, + taskResultClient: mockTaskResultClient, + } + + ctx := context.Background() + err := we.ReportOutputs(ctx, artifacts) + + assert.Equal(t, err, nil) + assert.Empty(t, we.errors) + }) + +} diff --git a/workflow/executor/resource.go b/workflow/executor/resource.go index 9b91691e2eca..c6bd291d90cf 100644 --- a/workflow/executor/resource.go +++ b/workflow/executor/resource.go @@ -326,7 +326,7 @@ func (we *WorkflowExecutor) SaveResourceParameters(ctx context.Context, resource we.Template.Outputs.Parameters[i].Value = wfv1.AnyStringPtr(output) log.Infof("Saved output parameter: %s, value: %s", param.Name, output) } - err := we.reportOutputs(ctx, nil) + err := we.ReportOutputs(ctx, nil) return err } diff --git a/workflow/executor/taskresult.go b/workflow/executor/taskresult.go index e071dfa12dc5..b9abf5dcb896 100644 --- a/workflow/executor/taskresult.go +++ b/workflow/executor/taskresult.go @@ -36,6 +36,24 @@ func (we *WorkflowExecutor) patchTaskResult(ctx context.Context, result wfv1.Nod return err } +func (we *WorkflowExecutor) patchTaskResultLabels(ctx context.Context, labels map[string]string) error { + data, err := json.Marshal(&wfv1.WorkflowTaskResult{ + ObjectMeta: metav1.ObjectMeta{ + Labels: labels, + }, + }) + if err != nil { + return err + } + _, err = we.taskResultClient.Patch(ctx, + we.nodeId, + types.MergePatchType, + data, + metav1.PatchOptions{}, + ) + return err +} + func (we *WorkflowExecutor) createTaskResult(ctx context.Context, result wfv1.NodeResult) error { taskResult := &wfv1.WorkflowTaskResult{ TypeMeta: metav1.TypeMeta{ @@ -43,20 +61,20 @@ func (we *WorkflowExecutor) createTaskResult(ctx context.Context, result wfv1.No Kind: workflow.WorkflowTaskResultKind, }, ObjectMeta: metav1.ObjectMeta{ - Name: we.nodeId, - Labels: map[string]string{common.LabelKeyWorkflow: we.workflow}, + Name: we.nodeId, }, NodeResult: result, } - taskResult.SetOwnerReferences( - []metav1.OwnerReference{ - { - APIVersion: "v1", - Kind: "Pod", - Name: we.PodName, - UID: we.podUID, - }, - }) + taskResult.SetLabels(map[string]string{ + common.LabelKeyWorkflow: we.workflow, + common.LabelKeyReportOutputsCompleted: "false", + }) + taskResult.SetOwnerReferences([]metav1.OwnerReference{{ + APIVersion: workflow.APIVersion, + Kind: workflow.WorkflowKind, + Name: we.workflow, + UID: we.workflowUID, + }}) if v := os.Getenv(common.EnvVarInstanceID); v != "" { taskResult.Labels[common.LabelKeyControllerInstanceID] = v diff --git a/workflow/metrics/metrics_test.go b/workflow/metrics/metrics_test.go index 640d1ce41140..73de88442346 100644 --- a/workflow/metrics/metrics_test.go +++ b/workflow/metrics/metrics_test.go @@ -118,7 +118,15 @@ func TestMetricGC(t *testing.T) { go m.garbageCollector(ctx) // Ensure we get at least one TTL run - time.Sleep(1*time.Second + 100*time.Millisecond) + timeoutTime := time.Now().Add(time.Second * 2) + for time.Now().Before(timeoutTime) { + // Break if we know our test will pass. + if len(m.customMetrics) == 0 { + break + } + // Sleep to prevent overloading test worker CPU. + time.Sleep(100 * time.Millisecond) + } assert.Len(t, m.customMetrics, 0) }