diff --git a/applicationset/generators/pull_request.go b/applicationset/generators/pull_request.go index bc4fe9d591e29..43d745572387d 100644 --- a/applicationset/generators/pull_request.go +++ b/applicationset/generators/pull_request.go @@ -220,6 +220,24 @@ func (g *PullRequestGenerator) selectServiceProvider(ctx context.Context, genera } return pullrequest.NewAzureDevOpsService(token, providerConfig.API, providerConfig.Organization, providerConfig.Project, providerConfig.Repo, providerConfig.Labels) } + if generatorConfig.ScmManager != nil { + providerConfig := generatorConfig.ScmManager + token, err := utils.GetSecretRef(ctx, g.client, providerConfig.TokenRef, applicationSetInfo.Namespace, g.tokenRefStrictMode) + if err != nil { + return nil, fmt.Errorf("error fetching Secret token: %w", err) + } + + var caCerts []byte + var prErr error + if providerConfig.CARef != nil { + caCerts, prErr = utils.GetConfigMapData(ctx, g.client, providerConfig.CARef, applicationSetInfo.Namespace) + if prErr != nil { + return nil, fmt.Errorf("error fetching CA certificates from ConfigMap: %w", prErr) + } + } + + return pullrequest.NewScmManagerService(ctx, token, providerConfig.API, providerConfig.Namespace, providerConfig.Name, providerConfig.Insecure, g.scmRootCAPath, caCerts) + } return nil, errors.New("no Pull Request provider implementation configured") } diff --git a/applicationset/generators/scm_provider.go b/applicationset/generators/scm_provider.go index b2f3e20cd397a..47674a91929f6 100644 --- a/applicationset/generators/scm_provider.go +++ b/applicationset/generators/scm_provider.go @@ -231,6 +231,25 @@ func (g *SCMProviderGenerator) GenerateParams(appSetGenerator *argoprojiov1alpha if awsErr != nil { return nil, fmt.Errorf("error initializing AWS codecommit service: %w", awsErr) } + case providerConfig.ScmManager != nil: + providerConfig := providerConfig.ScmManager + var caCerts []byte + var scmError error + if providerConfig.CARef != nil { + caCerts, scmError = utils.GetConfigMapData(ctx, g.client, providerConfig.CARef, applicationSetInfo.Namespace) + if scmError != nil { + return nil, fmt.Errorf("error fetching CA certificates from ConfigMap: %w", scmError) + } + } + + token, err := utils.GetSecretRef(ctx, g.client, providerConfig.TokenRef, applicationSetInfo.Namespace, g.tokenRefStrictMode) + if err != nil { + return nil, fmt.Errorf("error fetching SCM-Manager token: %w", err) + } + provider, err = scm_provider.NewScmManagerProvider(ctx, token, providerConfig.API, providerConfig.AllBranches, providerConfig.Insecure, g.scmRootCAPath, caCerts) + if err != nil { + return nil, fmt.Errorf("error initializing SCM-Manager provider: %w", err) + } default: return nil, errors.New("no SCM provider implementation configured") } diff --git a/applicationset/services/pull_request/scm-manager.go b/applicationset/services/pull_request/scm-manager.go new file mode 100644 index 0000000000000..00d8300c98e87 --- /dev/null +++ b/applicationset/services/pull_request/scm-manager.go @@ -0,0 +1,68 @@ +package pull_request + +import ( + "context" + "net/http" + "os" + "strconv" + + "github.com/argoproj/argo-cd/v2/applicationset/utils" + + scmm "github.com/scm-manager/goscm" +) + +type ScmManagerService struct { + client *scmm.Client + namespace string + name string +} + +var _ PullRequestService = (*ScmManagerService)(nil) + +func NewScmManagerService(ctx context.Context, token, url, namespace, name string, insecure bool, scmRootCAPath string, caCerts []byte) (PullRequestService, error) { + if token == "" { + token = os.Getenv("SCMM_TOKEN") + } + + httpClient := &http.Client{} + tr := http.DefaultTransport.(*http.Transport).Clone() + tr.TLSClientConfig = utils.GetTlsConfig(scmRootCAPath, insecure, caCerts) + httpClient.Transport = tr + + client, err := scmm.NewClient(url, token) + if err != nil { + return nil, err + } + + client.SetHttpClient(httpClient) + return &ScmManagerService{ + client: client, + namespace: namespace, + name: name, + }, nil +} + +func (g *ScmManagerService) List(ctx context.Context) ([]*PullRequest, error) { + prs, err := g.client.ListPullRequests(g.namespace, g.name, g.client.NewPullRequestListFilter()) + if err != nil { + return nil, err + } + list := []*PullRequest{} + for _, pr := range prs.Embedded.PullRequests { + changeset, err := g.client.GetHeadChangesetForBranch(g.namespace, g.name, pr.Source) + if err != nil { + return nil, err + } + prId, err := strconv.Atoi(pr.Id) + if err != nil { + return nil, err + } + list = append(list, &PullRequest{ + Number: prId, + Branch: pr.Source, + HeadSHA: changeset.Id, + Labels: make([]string, 0), + }) + } + return list, nil +} diff --git a/applicationset/services/pull_request/scm-manager_test.go b/applicationset/services/pull_request/scm-manager_test.go new file mode 100644 index 0000000000000..c7a3fa4924045 --- /dev/null +++ b/applicationset/services/pull_request/scm-manager_test.go @@ -0,0 +1,110 @@ +package pull_request + +import ( + "context" + "fmt" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func scmmMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) { + t.Helper() + return func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + fmt.Println(r.RequestURI) + switch r.RequestURI { + case "/api/v2/pull-requests/test-argocd/pr-test?status=OPEN&pageSize=10": + _, err := io.WriteString(w, `{ + "page": 0, + "pageTotal": 1, + "_embedded": { + "pullRequests": [ + { + "id": "1", + "author": { + "id": "eheimbuch", + "displayName": "Eduard Heimbuch", + "mail": "eduard.heimbuch@cloudogu.com" + }, + "reviser": { + "id": null, + "displayName": null + }, + "closeDate": null, + "source": "test_pr", + "target": "main", + "title": "New feature xyz", + "description": "Awesome!", + "creationDate": "2023-01-23T12:58:56.770Z", + "lastModified": null, + "status": "OPEN", + "reviewer": [], + "tasks": { + "todo": 0, + "done": 0 + }, + "sourceRevision": null, + "targetRevision": null, + "markedAsReviewed": [], + "emergencyMerged": false, + "ignoredMergeObstacles": null + } + ] + } +}`) + if err != nil { + t.Fail() + } + case "/api/v2/repositories/test-argocd/pr-test/branches/test_pr/changesets?&pageSize=1": + _, err := io.WriteString(w, `{ + "page": 0, + "pageTotal": 1, + "_embedded": { + "changesets": [ + { + "id": "b4ed814b1afe810c4902bc5590c7b09531296679", + "author": { + "mail": "eduard.heimbuch@cloudogu.com", + "name": "Eduard Heimbuch" + }, + "date": "2023-07-03T08:53:15Z", + "description": "test url", + "contributors": [ + { + "type": "Pushed-by", + "person": { + "mail": "eduard.heimbuch@cloudogu.com", + "name": "Eduard Heimbuch" + } + } + ] + } + ] + } +}`) + if err != nil { + t.Fail() + } + } + } +} + +func TestScmManagerPrList(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + scmmMockHandler(t)(w, r) + })) + defer ts.Close() + host, err := NewScmManagerService(context.Background(), "", ts.URL, "test-argocd", "pr-test", false, "", nil) + require.NoError(t, err) + prs, err := host.List(context.Background()) + require.NoError(t, err) + assert.Len(t, prs, 1) + assert.Equal(t, 1, prs[0].Number) + assert.Equal(t, "test_pr", prs[0].Branch) + assert.Equal(t, "b4ed814b1afe810c4902bc5590c7b09531296679", prs[0].HeadSHA) +} diff --git a/applicationset/services/scm_provider/scm-manager.go b/applicationset/services/scm_provider/scm-manager.go new file mode 100644 index 0000000000000..ef1a11f1575bc --- /dev/null +++ b/applicationset/services/scm_provider/scm-manager.go @@ -0,0 +1,153 @@ +package scm_provider + +import ( + "context" + "errors" + "fmt" + "net/http" + "os" + + "github.com/argoproj/argo-cd/v2/applicationset/utils" + + scmm "github.com/scm-manager/goscm" +) + +type ScmManagerProvider struct { + client *scmm.Client + allBranches bool +} + +const FilterLimit = 9999 + +var _ SCMProviderService = &ScmManagerProvider{} + +func NewScmManagerProvider(ctx context.Context, token, url string, allBranches, insecure bool, scmRootCAPath string, caCerts []byte) (*ScmManagerProvider, error) { + if token == "" { + token = os.Getenv("SCMM_TOKEN") + } + httpClient := &http.Client{} + tr := http.DefaultTransport.(*http.Transport).Clone() + tr.TLSClientConfig = utils.GetTlsConfig(scmRootCAPath, insecure, caCerts) + httpClient.Transport = tr + + client, err := scmm.NewClient(url, token) + if err != nil { + return nil, fmt.Errorf("error creating a new SCM-Manager client: %w", err) + } + + client.SetHttpClient(httpClient) + + return &ScmManagerProvider{ + client: client, + allBranches: allBranches, + }, nil +} + +func (g *ScmManagerProvider) GetBranches(ctx context.Context, repo *Repository) ([]*Repository, error) { + scmmRepo, err := g.client.GetRepo(repo.Organization, repo.Repository) + if err != nil { + return nil, err + } + + if !g.allBranches { + defaultBranch, err := g.client.GetDefaultBranch(repo.Organization, repo.Repository) + if err != nil { + return nil, err + } + + return []*Repository{ + { + Organization: repo.Organization, + Repository: repo.Repository, + Branch: defaultBranch.Name, + URL: repo.URL, + SHA: defaultBranch.Revision, + Labels: make([]string, 0), + RepositoryId: scmmRepo.Namespace + "/" + scmmRepo.Name, + }, + }, nil + } + repos := []*Repository{} + branches, err := g.client.ListRepoBranches(repo.Organization, repo.Repository) + if err != nil { + return nil, err + } + for _, branch := range branches.Embedded.Branches { + repos = append(repos, &Repository{ + Organization: scmmRepo.Namespace, + Repository: scmmRepo.Name, + Branch: branch.Name, + URL: scmmRepo.Links.ProtocolUrl[0].Href, + SHA: branch.Revision, + Labels: make([]string, 0), + RepositoryId: scmmRepo.Namespace + "/" + scmmRepo.Name, + }) + } + return repos, nil +} + +func (g *ScmManagerProvider) ListRepos(ctx context.Context, cloneProtocol string) ([]*Repository, error) { + repos := []*Repository{} + filter := g.client.NewRepoListFilter() + filter.Limit = FilterLimit + scmmRepos, err := g.client.ListRepos(filter) + if err != nil { + return nil, err + } + for _, scmmRepo := range scmmRepos.Embedded.Repositories { + var url string + switch cloneProtocol { + // Default to SSH if unspecified (i.e. if ""). SSH Plugin needs to be installed + case "", "ssh": + url = getProtocolUrlByName(scmmRepo.Links.ProtocolUrl, "ssh") + case "https": + url = getProtocolUrlByName(scmmRepo.Links.ProtocolUrl, "http") + default: + return nil, fmt.Errorf("unknown clone protocol %v", cloneProtocol) + } + + if url == "" { + return nil, errors.New("could not find valid repository protocol url") + } + + defaultBranch, err := g.client.GetDefaultBranch(scmmRepo.Namespace, scmmRepo.Name) + if err != nil { + if errors.Is(err, scmm.ErrEmptyRepository) || errors.Is(err, scmm.ErrNoDefaultBranchFound) { + continue + } + return nil, err + } + + repos = append(repos, &Repository{ + Organization: scmmRepo.Namespace, + Repository: scmmRepo.Name, + Branch: defaultBranch.Name, + URL: url, + RepositoryId: scmmRepo.Namespace + "/" + scmmRepo.Name, + }) + } + return repos, nil +} + +func getProtocolUrlByName(urls []scmm.ProtocolUrl, name string) string { + for _, url := range urls { + if url.Name == name { + return url.Href + } + } + return "" +} + +func (g *ScmManagerProvider) RepoHasPath(ctx context.Context, repo *Repository, path string) (bool, error) { + _, resp, err := g.client.GetContent(repo.Organization, repo.Repository, repo.Branch, path) + if resp != nil && resp.StatusCode == http.StatusNotFound { + return false, nil + } + if err != nil { + if err.Error() == "expect file, got directory" { + return true, nil + } + return false, err + } + return true, nil +} diff --git a/applicationset/services/scm_provider/scm-manager_test.go b/applicationset/services/scm_provider/scm-manager_test.go new file mode 100644 index 0000000000000..9062c491a464f --- /dev/null +++ b/applicationset/services/scm_provider/scm-manager_test.go @@ -0,0 +1,250 @@ +package scm_provider + +import ( + "context" + "fmt" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/argoproj/argo-cd/v2/applicationset/services/scm_provider/testdata" + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" +) + +func scmManagerMockHandlerWithNormalRepository(t *testing.T) func(http.ResponseWriter, *http.Request) { + t.Helper() + return scmManagerMockHandler(t, "pr-test") +} + +func scmManagerMockHandlerWithEmptyRepository(t *testing.T) func(http.ResponseWriter, *http.Request) { + t.Helper() + return scmManagerMockHandler(t, "empty") +} + +func scmManagerMockHandler(t *testing.T, repositoryName string) func(http.ResponseWriter, *http.Request) { + t.Helper() + return func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + switch r.RequestURI { + case "/api/v2/repositories?pageSize=9999&archived=true": + handleRepositoryOverviewRequest(t, repositoryName, w) + case "/api/v2/repositories/test-argocd/pr-test/branches/": + handleBranchesRequestWithExistingBranches(t, w) + case "/api/v2/repositories/test-argocd/empty/branches/": + handleBranchesRequestWithoutBranches(t, w) + case "/api/v2/repositories/test-argocd/" + repositoryName: + handleRepositoryRequest(t, w) + case "/api/v2/repositories/test-argocd/pr-test/content/master/README.md?ref=master": + _, err := io.WriteString(w, `"my readme test"`) + require.NoError(t, err) + case "/api/v2/repositories/test-argocd/pr-test/content/master/build": + _, err := io.WriteString(w, testdata.ReposGiteaGoSdkContentsGiteaResponse) + require.NoError(t, err) + case "/api/v2/repositories/test-argocd/pr-test/content/master/unknownFile": + w.WriteHeader(http.StatusNotFound) + default: + _, err := io.WriteString(w, `[]`) + if err != nil { + t.Fail() + } + } + } +} + +func handleRepositoryRequest(t *testing.T, w http.ResponseWriter) { + t.Helper() + _, err := io.WriteString(w, `{ + "namespace": "test-argocd", + "name": "pr-test", + "type": "git", + "description": "test", + "contact": "eduard.heimbuch@cloudogu.com", + "archived": false, + "_links": { + "protocol": [ + { "name": "ssh", "href": "git@scm-manager.org:test-argocd/pr-test.git" }, + { "name": "http", "href": "https://scm-manager.org/test-argocd/pr-test" } + ] + } + }`) + if err != nil { + t.Fail() + } +} + +func handleBranchesRequestWithoutBranches(t *testing.T, w http.ResponseWriter) { + t.Helper() + _, err := io.WriteString(w, `{ + "_embedded": { + "branches": [] + } + }`) + if err != nil { + t.Fail() + } +} + +func handleBranchesRequestWithExistingBranches(t *testing.T, w http.ResponseWriter) { + t.Helper() + _, err := io.WriteString(w, `{ + "_embedded": { + "branches": [{ + "name": "main", + "defaultBranch": true, + "revision": "72687815ccba81ef014a96201cc2e846a68789d8", + "stale": false, + "lastCommitDate": "2022-04-05T14:29:51-04:00", + "lastCommitter": { + "name": "Eduard Heimbuch", + "mail": "eduard.heimbuch@cloudogu.com" + } + }] + } + }`) + if err != nil { + t.Fail() + } +} + +func handleRepositoryOverviewRequest(t *testing.T, repositoryName string, w http.ResponseWriter) { + t.Helper() + _, err := io.WriteString(w, fmt.Sprintf(`{ + "page": 0, + "pageTotal": 1, + "_embedded": { + "repositories": [{ + "namespace": "test-argocd", + "name": "%s", + "type": "git", + "description": "test", + "contact": "eduard.heimbuch@cloudogu.com", + "archived": false, + "_links": { + "protocol": [ + { "name": "http", "href": "https://scm-manager.org/test-argocd/%s" }, + { "name": "ssh", "href": "git@scm-manager.org:test-argocd/%s.git" } + ] + } + }] + } + }`, repositoryName, repositoryName, repositoryName)) + if err != nil { + t.Fail() + } +} + +func TestScmManagerListRepos(t *testing.T) { + cases := []struct { + name, proto, url string + hasError, allBranches, includeSubgroups bool + branches []string + filters []v1alpha1.SCMProviderGeneratorFilter + }{ + { + name: "blank protocol", + allBranches: false, + url: "git@scm-manager.org:test-argocd/pr-test.git", + branches: []string{"main"}, + }, + { + name: "ssh protocol", + allBranches: false, + proto: "ssh", + url: "git@scm-manager.org:test-argocd/pr-test.git", + }, + { + name: "https protocol", + allBranches: false, + proto: "https", + url: "https://scm-manager.org/test-argocd/pr-test", + }, + { + name: "other protocol", + allBranches: false, + proto: "other", + hasError: true, + }, + { + name: "all branches", + allBranches: true, + url: "git@scm-manager.org:test-argocd/pr-test.git", + branches: []string{"main"}, + }, + } + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + scmManagerMockHandlerWithNormalRepository(t)(w, r) + })) + defer ts.Close() + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + provider, _ := NewScmManagerProvider(context.Background(), "", ts.URL, c.allBranches, false, "", nil) + rawRepos, err := ListRepos(context.Background(), provider, c.filters, c.proto) + if c.hasError { + assert.Error(t, err) + } else { + require.NoError(t, err) + repos := []*Repository{} + branches := []string{} + for _, r := range rawRepos { + if r.Repository == "pr-test" { + repos = append(repos, r) + branches = append(branches, r.Branch) + } + } + assert.NotEmpty(t, repos) + assert.Equal(t, c.url, repos[0].URL) + for _, b := range c.branches { + assert.Contains(t, branches, b) + } + } + }) + } +} + +func TestScmManagerListEmptyRepos(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + scmManagerMockHandlerWithEmptyRepository(t)(w, r) + })) + defer ts.Close() + t.Run("empty repository", func(t *testing.T) { + provider, _ := NewScmManagerProvider(context.Background(), "", ts.URL, false, false, "", nil) + rawRepos, err := ListRepos(context.Background(), provider, make([]v1alpha1.SCMProviderGeneratorFilter, 0), "https") + require.NoError(t, err) + assert.Empty(t, rawRepos) + }) +} + +func TestScmManagerHasPath(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + scmManagerMockHandlerWithNormalRepository(t)(w, r) + })) + defer ts.Close() + host, _ := NewScmManagerProvider(context.Background(), "", ts.URL, false, false, "", nil) + repo := &Repository{ + Organization: "test-argocd", + Repository: "pr-test", + Branch: "master", + } + + t.Run("file exists", func(t *testing.T) { + ok, err := host.RepoHasPath(context.Background(), repo, "README.md") + require.NoError(t, err) + assert.True(t, ok) + }) + + t.Run("directory exists", func(t *testing.T) { + ok, err := host.RepoHasPath(context.Background(), repo, "build") + require.NoError(t, err) + assert.True(t, ok) + }) + + t.Run("does not exist", func(t *testing.T) { + ok, err := host.RepoHasPath(context.Background(), repo, "unknownFile") + require.NoError(t, err) + assert.False(t, ok) + }) +} diff --git a/applicationset/webhook/testdata/scm-manager-pull-request.json b/applicationset/webhook/testdata/scm-manager-pull-request.json new file mode 100644 index 0000000000000..1dbc827a0cade --- /dev/null +++ b/applicationset/webhook/testdata/scm-manager-pull-request.json @@ -0,0 +1,12 @@ +{ + "repository": { + "namespace": "scmadmin", + "name": "argocd-test", + "sourceUrl": "https://scm-manager.org/scm/repo/scmadmin/argocd-test" + }, + "sourceBranch": { + "defaultBranch": false, + "name": "feature/scm_support" + }, + "action": "opened" +} \ No newline at end of file diff --git a/applicationset/webhook/webhook.go b/applicationset/webhook/webhook.go index 2bbd055adf4d1..325f03a87fd4f 100644 --- a/applicationset/webhook/webhook.go +++ b/applicationset/webhook/webhook.go @@ -25,6 +25,7 @@ import ( "github.com/go-playground/webhooks/v6/azuredevops" "github.com/go-playground/webhooks/v6/github" "github.com/go-playground/webhooks/v6/gitlab" + scmmanager "github.com/scm-manager/goscm/argocd" log "github.com/sirupsen/logrus" ) @@ -35,6 +36,7 @@ type WebhookHandler struct { github *github.Webhook gitlab *gitlab.Webhook azuredevops *azuredevops.Webhook + scmm *scmmanager.ArgoCDWebhook client client.Client generators map[string]generators.Generator queue chan any @@ -50,6 +52,7 @@ type prGeneratorInfo struct { Azuredevops *prGeneratorAzuredevopsInfo Github *prGeneratorGithubInfo Gitlab *prGeneratorGitlabInfo + SCMManager *prGeneratorSCMManagerInfo } type prGeneratorAzuredevopsInfo struct { @@ -68,6 +71,12 @@ type prGeneratorGitlabInfo struct { APIHostname string } +type prGeneratorSCMManagerInfo struct { + Host string + Namespace string + Name string +} + func NewWebhookHandler(webhookParallelism int, argocdSettingsMgr *argosettings.SettingsManager, client client.Client, generators map[string]generators.Generator) (*WebhookHandler, error) { // register the webhook secrets stored under "argocd-secret" for verifying incoming payloads argocdSettings, err := argocdSettingsMgr.GetSettings() @@ -86,11 +95,16 @@ func NewWebhookHandler(webhookParallelism int, argocdSettingsMgr *argosettings.S if err != nil { return nil, fmt.Errorf("unable to init Azure DevOps webhook: %w", err) } + scmmHandler, err := scmmanager.New(scmmanager.Options.Secret(argocdSettings.WebhookScmmSecret)) + if err != nil { + return nil, fmt.Errorf("Unable to init SCM-Manager webhook: %w", err) + } webhookHandler := &WebhookHandler{ github: githubHandler, gitlab: gitlabHandler, azuredevops: azuredevopsHandler, + scmm: scmmHandler, client: client, generators: generators, queue: make(chan any, payloadQueueSize), @@ -166,6 +180,8 @@ func (h *WebhookHandler) Handler(w http.ResponseWriter, r *http.Request) { payload, err = h.gitlab.Parse(r, gitlab.PushEvents, gitlab.TagEvents, gitlab.MergeRequestEvents, gitlab.SystemHookEvents) case r.Header.Get("X-Vss-Activityid") != "": payload, err = h.azuredevops.Parse(r, azuredevops.GitPushEventType, azuredevops.GitPullRequestCreatedEventType, azuredevops.GitPullRequestUpdatedEventType, azuredevops.GitPullRequestMergedEventType) + case r.Header.Get("X-SCM-Event") != "": + payload, err = h.scmm.Parse(r, scmmanager.PushEvent, scmmanager.PullRequestEvent) default: log.Debug("Ignoring unknown webhook event") http.Error(w, "Unknown webhook event", http.StatusBadRequest) @@ -211,6 +227,10 @@ func getGitGeneratorInfo(payload any) *gitGeneratorInfo { revision = webhook.ParseRevision(payload.Resource.RefUpdates[0].Name) touchedHead = payload.Resource.RefUpdates[0].Name == payload.Resource.Repository.DefaultBranch // unfortunately, Azure DevOps doesn't provide a list of changed files + case scmmanager.PushEventPayload: + webURL = payload.Repository.SourceUrl + touchedHead = payload.Branch.DefaultBranch + revision = payload.Branch.Name default: return nil } @@ -276,6 +296,20 @@ func getPRGeneratorInfo(payload any) *prGeneratorInfo { Repo: repo, Project: project, } + case scmmanager.PullRequestEventPayload: + if !isAllowedScmManagerPullRequestAction(payload.Action) { + return nil + } + + repoUrl := payload.Repository.SourceUrl + namespace := payload.Repository.Namespace + name := payload.Repository.Name + + info.SCMManager = &prGeneratorSCMManagerInfo{ + Host: repoUrl, + Namespace: namespace, + Name: name, + } default: return nil } @@ -310,6 +344,22 @@ var azuredevopsAllowedPullRequestActions = []string{ "git.pullrequest.updated", } +var scmManagerAllowedPullRequestActions = []string{ + "opened", + "rejected", + "merged", + "changed", +} + +func isAllowedScmManagerPullRequestAction(action string) bool { + for _, allow := range scmManagerAllowedPullRequestActions { + if allow == action { + return true + } + } + return false +} + func shouldRefreshGitGenerator(gen *v1alpha1.GitGenerator, info *gitGeneratorInfo) bool { if gen == nil || info == nil { return false @@ -407,6 +457,30 @@ func shouldRefreshPRGenerator(gen *v1alpha1.PullRequestGenerator, info *prGenera return true } + if gen.ScmManager != nil && info.SCMManager != nil { + apiUrl, err := url.Parse(gen.ScmManager.API) + if err != nil { + log.Errorf("Failed to parse SCM-Manager URL by application '%s'", gen.ScmManager.API) + return false + } + infoUrl, err := url.Parse(info.SCMManager.Host) + if err != nil { + log.Errorf("Failed to parse SCM-Manager URL by request '%s'", info.SCMManager.Host) + return false + } + if apiUrl.Hostname() != infoUrl.Hostname() { + log.Debugf("Hostname '%s' does not match '%s'", apiUrl.Hostname(), infoUrl.Hostname()) + return false + } + if gen.ScmManager.Namespace != info.SCMManager.Namespace { + return false + } + if gen.ScmManager.Name != info.SCMManager.Name { + return false + } + return true + } + return false } diff --git a/applicationset/webhook/webhook_test.go b/applicationset/webhook/webhook_test.go index 6b2f1a2a6aa67..9707fe302506f 100644 --- a/applicationset/webhook/webhook_test.go +++ b/applicationset/webhook/webhook_test.go @@ -192,6 +192,15 @@ func TestWebhookHandler(t *testing.T) { expectedStatusCode: http.StatusOK, expectedRefresh: true, }, + { + desc: "WebHook from an SCM-Manager repository via pull request event", + headerKey: "X-SCM-Event", + headerValue: "PullRequest", + payloadFile: "scm-manager-pull-request.json", + effectedAppSets: []string{"scm-manager-pull-request", "plugin", "matrix-pull-request-github-plugin"}, + expectedStatusCode: http.StatusOK, + expectedRefresh: true, + }, } namespace := "test" @@ -228,6 +237,7 @@ func TestWebhookHandler(t *testing.T) { fakeAppWithMergeAndGitGenerator("merge-git-github", namespace, "https://github.com/org/repo"), fakeAppWithMergeAndPullRequestGenerator("merge-pull-request-github", namespace, "Codertocat", "Hello-World"), fakeAppWithMergeAndNestedGitGenerator("merge-nested-git-github", namespace, "https://github.com/org/repo"), + fakeAppWithScmManagerGenerator("scm-manager-pull-request", "scmadmin", "argocd-test", "https://scm-manager.org/scm/api/v2"), ).Build() set := argosettings.NewSettingsManager(t.Context(), fakeClient, namespace) h, err := NewWebhookHandler(webhookParallelism, set, fc, mockGenerators()) @@ -784,6 +794,37 @@ func fakeAppWithMatrixAndPullRequestGeneratorWithPluginGenerator(name, namespace } } +func fakeAppWithScmManagerGenerator(name, namespace, reponame, api string) *v1alpha1.ApplicationSet { + return &v1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: namespace, + }, + Spec: v1alpha1.ApplicationSetSpec{ + Generators: []v1alpha1.ApplicationSetGenerator{ + { + Matrix: &v1alpha1.MatrixGenerator{ + Generators: []v1alpha1.ApplicationSetNestedGenerator{ + { + List: &v1alpha1.ListGenerator{}, + }, + { + PullRequest: &v1alpha1.PullRequestGenerator{ + ScmManager: &v1alpha1.PullRequestGeneratorScmManager{ + Namespace: namespace, + Name: reponame, + API: api, + }, + }, + }, + }, + }, + }, + }, + }, + } +} + func newFakeClient(ns string) *kubefake.Clientset { s := runtime.NewScheme() s.AddKnownTypes(v1alpha1.SchemeGroupVersion, &v1alpha1.ApplicationSet{}) diff --git a/assets/swagger.json b/assets/swagger.json index f71e81bda9266..b759b965928b1 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -9144,6 +9144,9 @@ "type": "integer", "format": "int64" }, + "scmManager": { + "$ref": "#/definitions/v1alpha1PullRequestGeneratorScmManager" + }, "template": { "$ref": "#/definitions/v1alpha1ApplicationSetTemplate" }, @@ -9357,6 +9360,34 @@ } } }, + "v1alpha1PullRequestGeneratorScmManager": { + "description": "PullRequestGenerator defines connection info specific to SCM-Manager.", + "type": "object", + "properties": { + "api": { + "type": "string", + "title": "SCM-Manager Instance URL with context path. Required" + }, + "caRef": { + "$ref": "#/definitions/v1alpha1ConfigMapKeyRef" + }, + "insecure": { + "description": "Allow insecure tls, for self-signed certificates; default: false.", + "type": "boolean" + }, + "name": { + "description": "SCM-Manager repo name to scan. Required.", + "type": "string" + }, + "namespace": { + "description": "SCM-Manager namespace. Required.", + "type": "string" + }, + "tokenRef": { + "$ref": "#/definitions/v1alpha1SecretRef" + } + } + }, "v1alpha1RepoCreds": { "type": "object", "title": "RepoCreds holds the definition for repository credentials", @@ -10089,6 +10120,9 @@ "type": "integer", "format": "int64" }, + "scmManager": { + "$ref": "#/definitions/v1alpha1SCMProviderGeneratorScmManager" + }, "template": { "$ref": "#/definitions/v1alpha1ApplicationSetTemplate" }, @@ -10325,6 +10359,30 @@ } } }, + "v1alpha1SCMProviderGeneratorScmManager": { + "description": "SCMProviderGeneratorScmManager defines a connection info specific to Scm-Manager.", + "type": "object", + "properties": { + "allBranches": { + "description": "Scan all branches instead of just the default branch.", + "type": "boolean" + }, + "api": { + "description": "The SCM-Manager URL to talk to. For example https://scm-manager.org/scm.", + "type": "string" + }, + "caRef": { + "$ref": "#/definitions/v1alpha1ConfigMapKeyRef" + }, + "insecure": { + "type": "boolean", + "title": "Allow self-signed TLS / Certificates; default: false" + }, + "tokenRef": { + "$ref": "#/definitions/v1alpha1SecretRef" + } + } + }, "v1alpha1SecretRef": { "description": "Utility struct for a reference to a secret key.", "type": "object", diff --git a/docs/assets/applicationset/webhook-config-merge-request-scm-manager.png b/docs/assets/applicationset/webhook-config-merge-request-scm-manager.png new file mode 100644 index 0000000000000..ea93730d50bba Binary files /dev/null and b/docs/assets/applicationset/webhook-config-merge-request-scm-manager.png differ diff --git a/docs/assets/scm-webhook-config.png b/docs/assets/scm-webhook-config.png new file mode 100644 index 0000000000000..2b8c995b781af Binary files /dev/null and b/docs/assets/scm-webhook-config.png differ diff --git a/docs/operator-manual/applicationset/Generators-Pull-Request.md b/docs/operator-manual/applicationset/Generators-Pull-Request.md index 282db84b8ef19..5663be7041575 100644 --- a/docs/operator-manual/applicationset/Generators-Pull-Request.md +++ b/docs/operator-manual/applicationset/Generators-Pull-Request.md @@ -335,6 +335,45 @@ spec: * `tokenRef`: A `Secret` name and key containing the Azure DevOps access token to use for requests. If not specified, will make anonymous requests which have a lower rate limit and can only see public repositories. (Optional) * `labels`: Filter the PRs to those containing **all** of the labels listed. (Optional) +## SCM-Manager + +Fetch pull requests from a repo hosted on a SCM-Manager Server. The Review plugin must be installed on your SCM-Manager to enable pull requests. + +```yaml +apiVersion: argoproj.io/v1alpha1 +kind: ApplicationSet +metadata: + name: myapps +spec: + generators: + - pullRequest: + scmManager: + # Repository Namespace. Required. + namespace: myproject + # Repository Name. Required. + name: myrepository + # URL of the SCM-Manager server + api: https://scm-manager.org/scm + # Reference to a Secret containing an access token. (optional) + tokenRef: + secretName: scmm-token + key: token + # May be required for self-hosted and self-signed certificates + insecure: true + # Labels are not supported by SCM-Manager yet. + # Filter PRs using the source branch name. (optional) + filters: + - branchMatch: ".*-argocd" + template: + # ... +``` + +* `namespace`: Required namespace of the SCM-Manager repository. +* `name`: Required name of the SCM-Manager repository. +* `api`: Required URL to access the SCM-Manager REST API. For e.g. to fetch all pull requests of your repository. +* `tokenRef`: A `Secret` name and key containing the SCM-Manager access token to use for requests. If not specified, will make anonymous requests which can only see public repositories. (Optional) +* `insecure`: `Allow for self-signed certificates, primarily for testing.` + ## Filters Filters allow selecting which pull requests to generate for. Each filter can declare one or more conditions, all of which must pass. If multiple filters are present, any can match for a repository to be included. If no filters are specified, all pull requests will be processed. @@ -493,6 +532,15 @@ The Pull Request Generator will requeue when the next action occurs. For more information about each event, please refer to the [official documentation](https://docs.gitlab.com/ee/user/project/integrations/webhook_events.html#merge-request-events). +### SCM-Manager webhook configuration + +To enable the webhook in SCM-Manager, you need to install the ArgoCD plugin. The plugin is available in the SCM-Manager +through the plugin center. When this is done, you can configure the webhook either globally or in the repository settings. +In the settings, go to "Settings/Webhooks" in the global or in the repository navigation and add a new webhook of type +"ArgoCD". The URL should be the URL of the ArgoCD ApplicationSet webhook server. + +![Add Gitlab Webhook](../../assets/applicationset/webhook-config-merge-request-scm-manager.png "Add SCM-Manager webhook") + ## Lifecycle An Application will be generated when a Pull Request is discovered when the configured criteria is met - i.e. for GitHub when a Pull Request matches the specified `labels` and/or `pullRequestState`. Application will be removed when a Pull Request no longer meets the specified criteria. diff --git a/docs/operator-manual/applicationset/Generators-SCM-Provider.md b/docs/operator-manual/applicationset/Generators-SCM-Provider.md index a816618780378..64eab9f3300ca 100644 --- a/docs/operator-manual/applicationset/Generators-SCM-Provider.md +++ b/docs/operator-manual/applicationset/Generators-SCM-Provider.md @@ -380,6 +380,38 @@ All AWS roles must have repo discovery related permissions. * `codecommit:GetFolder` * `codecommit:ListBranches` +## SCM-Manager + +```yaml +apiVersion: argoproj.io/v1alpha1 +kind: ApplicationSet +metadata: + name: myapps +spec: + generators: + - scmProvider: + scmManager: + # The SCM-Manager server url + api: https://scm-manager.org/scm + # If true, scan every branch of every repository. If false, scan only the default branch. Defaults to false. + allBranches: true + # Reference to a Secret containing an access token. (optional) + tokenRef: + secretName: scmm-token + key: token + template: + # ... +``` + +* `api`: The URL of the SCM-Manager instance you are using. +* `allBranches`: By default (false) the template will only be evaluated for the default branch of each repo. If this is true, every branch of every repository will be passed to the filters. If using this flag, you likely want to use a `branchMatch` filter. +* `tokenRef`: A `Secret` name and key containing the Gitea access token to use for requests. If not specified, will make anonymous requests which have a lower rate limit and can only see public repositories. +* `insecure`: Allow for self-signed TLS certificates. + +SCM-Manager SCM provider does not yet support label filtering. + +Available clone protocols are `ssh` and `https`. For SSH access the SSH plugin must be installed on your SCM-Manager server. + ## Filters Filters allow selecting which repositories to generate for. Each filter can declare one or more conditions, all of which must pass. If multiple filters are present, any can match for a repository to be included. If no filters are specified, all repositories will be processed. diff --git a/docs/operator-manual/webhook.md b/docs/operator-manual/webhook.md index e0581a4cf853c..b38a3f002f163 100644 --- a/docs/operator-manual/webhook.md +++ b/docs/operator-manual/webhook.md @@ -35,6 +35,12 @@ To prevent DDoS attacks with unauthenticated webhook events (the `/api/webhook` Azure DevOps optionally supports securing the webhook using basic authentication. To use it, specify the username and password in the webhook configuration and configure the same username/password in `argocd-secret` Kubernetes secret in `webhook.azuredevops.username` and `webhook.azuredevops.password` keys. +## SCM-Manager + +![Add Webhook](../assets/scm-webhook-config.png "Add Webhook") +SCM-Manager supports securing the webhook with basic authentication. To use it, install the ArgoCD Plugin from the plugin center and configure your webhook at Administration > Webhooks. +For the URL add the instance of your ArgoCD endpoint. + ## 2. Configure Argo CD With The WebHook Secret (Optional) Configuring a webhook shared secret is optional, since Argo CD will still refresh applications diff --git a/go.mod b/go.mod index 8d32ee307d85f..ffdc5be12ad6d 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/alicebob/miniredis/v2 v2.35.0 github.com/argoproj/gitops-engine v0.7.1-0.20250724135328-38f73a75c3cf github.com/argoproj/notifications-engine v0.4.1-0.20250710034121-3ec18d4536a7 - github.com/argoproj/pkg v0.13.6 + github.com/argoproj/pkg v0.13.7-0.20230626144333-d56162821bd1 github.com/argoproj/pkg/v2 v2.0.1 github.com/aws/aws-sdk-go v1.55.7 github.com/bmatcuk/doublestar/v4 v4.9.1 @@ -78,6 +78,7 @@ require ( github.com/r3labs/diff/v3 v3.0.2 github.com/redis/go-redis/v9 v9.8.0 github.com/robfig/cron/v3 v3.0.2-0.20210106135023-bc59245fe10e + github.com/scm-manager/goscm v0.0.9 github.com/sirupsen/logrus v1.9.3 github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 github.com/soheilhy/cmux v0.1.5 @@ -118,6 +119,8 @@ require ( sigs.k8s.io/yaml v1.6.0 ) +require github.com/argoproj/argo-cd/v2 v2.14.15 + require ( cloud.google.com/go/auth v0.15.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.7 // indirect @@ -158,6 +161,7 @@ require ( github.com/aws/smithy-go v1.22.2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blang/semver/v4 v4.0.0 // indirect + github.com/bombsimon/logrusr/v2 v2.0.1 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cenkalti/backoff/v5 v5.0.2 // indirect github.com/chai2010/gettext-go v1.0.3 // indirect @@ -193,6 +197,7 @@ require ( github.com/golang/glog v1.2.5 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/google/gnostic-models v0.7.0 // indirect + github.com/google/go-github/v66 v66.0.0 // indirect github.com/google/go-github/v72 v72.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/s2a-go v0.1.9 // indirect @@ -201,6 +206,7 @@ require ( github.com/gosimple/unidecode v1.0.1 // indirect github.com/gregdel/pushover v1.3.1 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-version v1.7.0 // indirect @@ -242,6 +248,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/common v0.65.0 // indirect github.com/prometheus/procfs v0.16.1 // indirect + github.com/r3labs/diff v1.1.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/rs/cors v1.11.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect diff --git a/go.sum b/go.sum index 7d1fdd4362010..76d3bef1ba600 100644 --- a/go.sum +++ b/go.sum @@ -113,19 +113,21 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFI github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/appscode/go v0.0.0-20191119085241-0887d8ec2ecc/go.mod h1:OawnOmAL4ZX3YaPdN+8HTNwBveT1jMsqP74moa9XUbE= +github.com/argoproj/argo-cd/v2 v2.14.15 h1:+rE5bwbCg21mA3ltIvSVI8/KtzRxLLmuDKIyPx93G9k= +github.com/argoproj/argo-cd/v2 v2.14.15/go.mod h1:O5p0wngJjy8Rg9M2x+JH0ifrmyuI40ui2mxIPKLMbSk= github.com/argoproj/gitops-engine v0.7.1-0.20250724135328-38f73a75c3cf h1:T6GGt8vYN2aRNnOwdY3DIzMX1AhGIEo+8SNhSlNBdvs= github.com/argoproj/gitops-engine v0.7.1-0.20250724135328-38f73a75c3cf/go.mod h1:aIBEG3ohgaC1gh/sw2On6knkSnXkqRLDoBj234Dqczw= github.com/argoproj/notifications-engine v0.4.1-0.20250710034121-3ec18d4536a7 h1:DwrJWH9kySJgaJ6n5U543QSeFTNdMHDz5Iy+goyfQUw= github.com/argoproj/notifications-engine v0.4.1-0.20250710034121-3ec18d4536a7/go.mod h1:d1RazGXWvKRFv9//rg4MRRR7rbvbE7XLgTSMT5fITTE= -github.com/argoproj/pkg v0.13.6 h1:36WPD9MNYECHcO1/R1pj6teYspiK7uMQLCgLGft2abM= -github.com/argoproj/pkg v0.13.6/go.mod h1:I698DoJBKuvNFaixh4vFl2C88cNIT1WS7KCbz5ewyF8= +github.com/argoproj/pkg v0.13.7-0.20230626144333-d56162821bd1 h1:qsHwwOJ21K2Ao0xPju1sNuqphyMnMYkyB3ZLoLtxWpo= +github.com/argoproj/pkg v0.13.7-0.20230626144333-d56162821bd1/go.mod h1:CZHlkyAD1/+FbEn6cB2DQTj48IoLGvEYsWEvtzP3238= github.com/argoproj/pkg/v2 v2.0.1 h1:O/gCETzB/3+/hyFL/7d/VM/6pSOIRWIiBOTb2xqAHvc= github.com/argoproj/pkg/v2 v2.0.1/go.mod h1:sdifF6sUTx9ifs38ZaiNMRJuMpSCBB9GulHfbPgQeRE= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= -github.com/aws/aws-sdk-go v1.44.39/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.289/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go v1.55.7 h1:UJrkFq7es5CShfBwlWAC8DA077vp8PyVbQd3lqLiztE= github.com/aws/aws-sdk-go v1.55.7/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38yqWM= @@ -157,6 +159,7 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.33.17/go.mod h1:cQnB8CUnxbMU82JvlqjK github.com/aws/smithy-go v1.22.2 h1:6D9hW43xKFrRx/tXXfAlIZc4JI+yQe6snnWcQyxSyLQ= github.com/aws/smithy-go v1.22.2/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -166,6 +169,8 @@ github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2y github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= github.com/bmatcuk/doublestar/v4 v4.9.1 h1:X8jg9rRZmJd4yRy7ZeNDRnM+T3ZfHv15JiBJ/avrEXE= github.com/bmatcuk/doublestar/v4 v4.9.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= +github.com/bombsimon/logrusr/v2 v2.0.1 h1:1VgxVNQMCvjirZIYaT9JYn6sAVGVEcNtRE0y4mvaOAM= +github.com/bombsimon/logrusr/v2 v2.0.1/go.mod h1:ByVAX+vHdLGAfdroiMg6q0zgq2FODY2lc5YJvzmOJio= github.com/bombsimon/logrusr/v4 v4.1.0 h1:uZNPbwusB0eUXlO8hIUwStE6Lr5bLN6IgYgG+75kuh4= github.com/bombsimon/logrusr/v4 v4.1.0/go.mod h1:pjfHC5e59CvjTBIU3V3sGhFWFAnsnhOR03TRc6im0l8= github.com/bradleyfalzon/ghinstallation/v2 v2.16.0 h1:B91r9bHtXp/+XRgS5aZm6ZzTdz3ahgJYmkt4xZkgDz8= @@ -237,7 +242,6 @@ github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5Qvfr github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ= github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o= @@ -306,6 +310,8 @@ github.com/go-git/go-git/v5 v5.14.0/go.mod h1:Z5Xhoia5PcWA3NF8vRLURn9E5FRhSl7dGj github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k= +github.com/go-jose/go-jose/v3 v3.0.3/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ= github.com/go-jose/go-jose/v4 v4.1.2 h1:TK/7NqRQZfgAh+Td8AlsrvtPoUyiHh0LqVvokh+1vHI= github.com/go-jose/go-jose/v4 v4.1.2/go.mod h1:22cg9HWM1pOlnRiY+9cQYJ9XHmya1bYW8OeDM6Ku6Oo= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -316,6 +322,7 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v1.0.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -440,6 +447,8 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/go-github/v66 v66.0.0 h1:ADJsaXj9UotwdgK8/iFZtv7MLc8E8WBl62WLd/D/9+M= +github.com/google/go-github/v66 v66.0.0/go.mod h1:+4SO9Zkuyf8ytMj0csN1NR/5OTR+MfqPp8P8dVlcvY4= github.com/google/go-github/v69 v69.2.0 h1:wR+Wi/fN2zdUx9YxSmYE0ktiX9IAR/BeePzeaUUbEHE= github.com/google/go-github/v69 v69.2.0/go.mod h1:xne4jymxLR6Uj9b7J7PyTpkMYstEMMwGZa0Aehh1azM= github.com/google/go-github/v72 v72.0.0 h1:FcIO37BLoVPBO9igQQ6tStsv2asG4IPcYFi655PPvBM= @@ -474,6 +483,7 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaU github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.1-0.20241114170450-2d3c2a9cc518 h1:UBg1xk+oAsIVbFuGg6hdfAm7EvCv3EL80vFxJNsslqw= github.com/google/uuid v1.6.1-0.20241114170450-2d3c2a9cc518/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -504,6 +514,8 @@ github.com/gregdel/pushover v1.3.1/go.mod h1:EcaO66Nn1StkpEm1iKtBTV3d2A16SoMsVER github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.1.0 h1:QGLs/O40yoNK9vmy4rhUGBVyMf1lISBGtXRpsu/Qu/o= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.1.0/go.mod h1:hM2alZsMUni80N33RBe6J0e423LB+odMj7d3EMP9l20= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 h1:sGm2vDRFUrQJO/Veii4h4zG2vvqG6uWNkBHSTqXOZk0= @@ -580,12 +592,13 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= -github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= +github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -635,12 +648,11 @@ github.com/microsoft/azure-devops-go-api/azuredevops/v7 v7.1.1-0.20241014080628- github.com/microsoft/azure-devops-go-api/azuredevops/v7 v7.1.1-0.20241014080628-3045bdf43455/go.mod h1:mDunUZ1IUJdJIRHvFb+LPBUtxe3AYB5MI6BMXNg8194= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= -github.com/minio/minio-go/v7 v7.0.29/go.mod h1:x81+AX5gHSfCSqw7jxRKHvxUXMlE5uKX0Vb75Xk5yYg= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= +github.com/minio/minio-go/v7 v7.0.58/go.mod h1:NUDy4A4oXPq1l2yK6LTSvCEzAMeIcoz9lcj5dbzSrRE= +github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= @@ -791,6 +803,8 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= +github.com/r3labs/diff v1.1.0 h1:V53xhrbTHrWFWq3gI4b94AjgEJOerO1+1l0xyHOBi8M= +github.com/r3labs/diff v1.1.0/go.mod h1:7WjXasNzi0vJetRcB/RqNl5dlIsmXcTTLmF5IoH6Xig= github.com/r3labs/diff/v3 v3.0.2 h1:yVuxAY1V6MeM4+HNur92xkS39kB/N+cFi2hMkY06BbA= github.com/r3labs/diff/v3 v3.0.2/go.mod h1:Cy542hv0BAEmhDYWtGxXRQ4kqRsVIcEjG9gChUlTmkw= github.com/redis/go-redis/v9 v9.0.0-rc.4/go.mod h1:Vo3EsyWnicKnSKCA7HhgnvnyA74wOA69Cd2Meli5mmA= @@ -813,9 +827,11 @@ github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7 github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/scm-manager/goscm v0.0.9 h1:z1X+6yQUdC3x8+JPKEdBf3YVfwrpgAv5N2Aw6wZLTVg= +github.com/scm-manager/goscm v0.0.9/go.mod h1:3y0/sD9ZiFHp40ZCBozQyUbiSOxvhIdMV4GV0k9UIVg= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= @@ -825,6 +841,7 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.2/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8= @@ -835,7 +852,6 @@ github.com/slack-go/slack v0.16.0 h1:khp/WCFv+Hb/B/AJaAwvcxKun0hM6grN0bUZ8xG60P8 github.com/slack-go/slack v0.16.0/go.mod h1:hlGi5oXA+Gt+yWTPP0plCdRKmjsDxecdHxYQdlMQKOw= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/sony/sonyflake v1.0.0 h1:MpU6Ro7tfXwgn2l5eluf9xQvQJDROTBImNCfRXn/YeM= @@ -843,7 +859,7 @@ github.com/sony/sonyflake v1.0.0/go.mod h1:Jv3cfhf/UFtolOTTRd3q4Nl6ENqM+KfyZ5Pse github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -865,7 +881,6 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= @@ -930,14 +945,18 @@ go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXe go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os= go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= @@ -952,12 +971,13 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= @@ -1050,13 +1070,13 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= @@ -1068,6 +1088,7 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= @@ -1156,14 +1177,17 @@ golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210608053332-aa57babbf139/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1195,7 +1219,6 @@ golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/telemetry v0.0.0-20250710130107-8d8967aff50b/go.mod h1:4ZwOYna0/zsOKwuR5X/m0QFOJpSZvAxFfkQT+Erd9D4= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1205,6 +1228,7 @@ golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= @@ -1235,6 +1259,7 @@ golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= @@ -1382,7 +1407,7 @@ gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AW gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= diff --git a/manifests/core-install-with-hydrator.yaml b/manifests/core-install-with-hydrator.yaml index 41aad58361bd5..47adfff8c04b0 100644 --- a/manifests/core-install-with-hydrator.yaml +++ b/manifests/core-install-with-hydrator.yaml @@ -12264,6 +12264,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -13151,6 +13186,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: @@ -18108,6 +18174,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -18995,6 +19096,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: @@ -21241,6 +21373,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -22128,6 +22295,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: diff --git a/manifests/core-install.yaml b/manifests/core-install.yaml index 78f2c1a0e07c8..c3bc930ecce84 100644 --- a/manifests/core-install.yaml +++ b/manifests/core-install.yaml @@ -12264,6 +12264,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -13151,6 +13186,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: @@ -18108,6 +18174,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -18995,6 +19096,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: @@ -21241,6 +21373,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -22128,6 +22295,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: diff --git a/manifests/crds/applicationset-crd.yaml b/manifests/crds/applicationset-crd.yaml index b7aeed2481837..907c709bc4d54 100644 --- a/manifests/crds/applicationset-crd.yaml +++ b/manifests/crds/applicationset-crd.yaml @@ -6372,6 +6372,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -7259,6 +7294,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: @@ -12216,6 +12282,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -13103,6 +13204,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: @@ -15349,6 +15481,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -16236,6 +16403,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: diff --git a/manifests/ha/install-with-hydrator.yaml b/manifests/ha/install-with-hydrator.yaml index a94fb3c9b68f8..517481ba83199 100644 --- a/manifests/ha/install-with-hydrator.yaml +++ b/manifests/ha/install-with-hydrator.yaml @@ -12264,6 +12264,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -13151,6 +13186,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: @@ -18108,6 +18174,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -18995,6 +19096,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: @@ -21241,6 +21373,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -22128,6 +22295,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml index 25638fc93f22c..8e0b9109e7183 100644 --- a/manifests/ha/install.yaml +++ b/manifests/ha/install.yaml @@ -12264,6 +12264,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -13151,6 +13186,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: @@ -18108,6 +18174,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -18995,6 +19096,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: @@ -21241,6 +21373,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -22128,6 +22295,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: diff --git a/manifests/install-with-hydrator.yaml b/manifests/install-with-hydrator.yaml index 79dfe6af65a5e..0e9e7f988f43a 100644 --- a/manifests/install-with-hydrator.yaml +++ b/manifests/install-with-hydrator.yaml @@ -12264,6 +12264,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -13151,6 +13186,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: @@ -18108,6 +18174,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -18995,6 +19096,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: @@ -21241,6 +21373,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -22128,6 +22295,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: diff --git a/manifests/install.yaml b/manifests/install.yaml index 9ee03bc1a9ebe..bcd5b9a7b835f 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -12264,6 +12264,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -13151,6 +13186,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: @@ -18108,6 +18174,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -18995,6 +19096,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: @@ -21241,6 +21373,41 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + name: + type: string + namespace: + type: string + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + - name + - namespace + type: object template: properties: metadata: @@ -22128,6 +22295,37 @@ spec: requeueAfterSeconds: format: int64 type: integer + scmManager: + properties: + allBranches: + type: boolean + api: + type: string + caRef: + properties: + configMapName: + type: string + key: + type: string + required: + - configMapName + - key + type: object + insecure: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - api + type: object template: properties: metadata: diff --git a/pkg/apis/application/v1alpha1/applicationset_types.go b/pkg/apis/application/v1alpha1/applicationset_types.go index 1c5df821e5c8c..7ed6a92eb2889 100644 --- a/pkg/apis/application/v1alpha1/applicationset_types.go +++ b/pkg/apis/application/v1alpha1/applicationset_types.go @@ -447,6 +447,7 @@ type SCMProviderGenerator struct { // Values contains key/value pairs which are passed directly as parameters to the template Values map[string]string `json:"values,omitempty" protobuf:"bytes,11,name=values"` AWSCodeCommit *SCMProviderGeneratorAWSCodeCommit `json:"awsCodeCommit,omitempty" protobuf:"bytes,12,opt,name=awsCodeCommit"` + ScmManager *SCMProviderGeneratorScmManager `json:"scmManager,omitempty" protobuf:"bytes,13,opt,name=scmManager"` // If you add a new SCM provider, update CustomApiUrl below. } @@ -462,6 +463,8 @@ func (g *SCMProviderGenerator) CustomApiUrl() string { //nolint:revive //FIXME(v return g.BitbucketServer.API case g.AzureDevOps != nil: return g.AzureDevOps.API + case g.ScmManager != nil: + return g.ScmManager.API } return "" } @@ -480,6 +483,20 @@ type SCMProviderGeneratorGitea struct { Insecure bool `json:"insecure,omitempty" protobuf:"varint,5,opt,name=insecure"` } +// SCMProviderGeneratorScmManager defines a connection info specific to Scm-Manager. +type SCMProviderGeneratorScmManager struct { + // The SCM-Manager URL to talk to. For example https://scm-manager.org/scm. + API string `json:"api" protobuf:"bytes,1,opt,name=api"` + // Authentication token reference. + TokenRef *SecretRef `json:"tokenRef,omitempty" protobuf:"bytes,2,opt,name=tokenRef"` + // Scan all branches instead of just the default branch. + AllBranches bool `json:"allBranches,omitempty" protobuf:"varint,3,opt,name=allBranches"` + // Allow self-signed TLS / Certificates; default: false + Insecure bool `json:"insecure,omitempty" protobuf:"varint,4,opt,name=insecure"` + // ConfigMap key holding the trusted certificates + CARef *ConfigMapKeyRef `json:"caRef,omitempty" protobuf:"bytes,5,opt,name=caRef"` +} + // SCMProviderGeneratorGithub defines connection info specific to GitHub. type SCMProviderGeneratorGithub struct { // GitHub org to scan. Required. @@ -614,10 +631,11 @@ type PullRequestGenerator struct { Bitbucket *PullRequestGeneratorBitbucket `json:"bitbucket,omitempty" protobuf:"bytes,8,opt,name=bitbucket"` // Additional provider to use and config for it. AzureDevOps *PullRequestGeneratorAzureDevOps `json:"azuredevops,omitempty" protobuf:"bytes,9,opt,name=azuredevops"` + ScmManager *PullRequestGeneratorScmManager `json:"scmManager,omitempty" protobuf:"bytes,10,opt,name=scmManager"` // Values contains key/value pairs which are passed directly as parameters to the template - Values map[string]string `json:"values,omitempty" protobuf:"bytes,10,name=values"` + Values map[string]string `json:"values,omitempty" protobuf:"bytes,11,name=values"` // ContinueOnRepoNotFoundError is a flag to continue the ApplicationSet Pull Request generator parameters generation even if the repository is not found. - ContinueOnRepoNotFoundError bool `json:"continueOnRepoNotFoundError,omitempty" protobuf:"varint,11,opt,name=continueOnRepoNotFoundError"` + ContinueOnRepoNotFoundError bool `json:"continueOnRepoNotFoundError,omitempty" protobuf:"varint,12,opt,name=continueOnRepoNotFoundError"` // If you add a new SCM provider, update CustomApiUrl below. } @@ -640,6 +658,9 @@ func (p *PullRequestGenerator) CustomApiUrl() string { //nolint:revive //FIXME(v if p.AzureDevOps != nil { return p.AzureDevOps.API } + if p.ScmManager != nil { + return p.ScmManager.API + } return "" } @@ -659,6 +680,22 @@ type PullRequestGeneratorGitea struct { Labels []string `json:"labels,omitempty" protobuf:"bytes,6,rep,name=labels"` } +// PullRequestGenerator defines connection info specific to SCM-Manager. +type PullRequestGeneratorScmManager struct { + // SCM-Manager namespace. Required. + Namespace string `json:"namespace" protobuf:"bytes,1,opt,name=namespace"` + // SCM-Manager repo name to scan. Required. + Name string `json:"name" protobuf:"bytes,2,opt,name=name"` + // SCM-Manager Instance URL with context path. Required + API string `json:"api" protobuf:"bytes,3,opt,name=api"` + // Authentication token reference. + TokenRef *SecretRef `json:"tokenRef,omitempty" protobuf:"bytes,4,opt,name=tokenRef"` + // Allow insecure tls, for self-signed certificates; default: false. + Insecure bool `json:"insecure,omitempty" protobuf:"varint,5,opt,name=insecure"` + // ConfigMap key holding the trusted certificates + CARef *ConfigMapKeyRef `json:"caRef,omitempty" protobuf:"bytes,6,opt,name=caRef"` +} + // PullRequestGeneratorAzureDevOps defines connection info specific to AzureDevOps. type PullRequestGeneratorAzureDevOps struct { // Azure DevOps org to scan. Required. diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index 158d6bfc472de..15a4cab0b2f18 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -3317,10 +3317,38 @@ func (m *PullRequestGeneratorGithub) XXX_DiscardUnknown() { var xxx_messageInfo_PullRequestGeneratorGithub proto.InternalMessageInfo +func (m *PullRequestGeneratorScmManager) Reset() { *m = PullRequestGeneratorScmManager{} } +func (*PullRequestGeneratorScmManager) ProtoMessage() {} +func (*PullRequestGeneratorScmManager) Descriptor() ([]byte, []int) { + return fileDescriptor_c078c3c476799f44, []int{117} +} +func (m *PullRequestGeneratorScmManager) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PullRequestGeneratorScmManager) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PullRequestGeneratorScmManager) XXX_Merge(src proto.Message) { + xxx_messageInfo_PullRequestGeneratorScmManager.Merge(m, src) +} +func (m *PullRequestGeneratorScmManager) XXX_Size() int { + return m.Size() +} +func (m *PullRequestGeneratorScmManager) XXX_DiscardUnknown() { + xxx_messageInfo_PullRequestGeneratorScmManager.DiscardUnknown(m) +} + +var xxx_messageInfo_PullRequestGeneratorScmManager proto.InternalMessageInfo + func (m *RefTarget) Reset() { *m = RefTarget{} } func (*RefTarget) ProtoMessage() {} func (*RefTarget) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{117} + return fileDescriptor_c078c3c476799f44, []int{118} } func (m *RefTarget) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3348,7 +3376,7 @@ var xxx_messageInfo_RefTarget proto.InternalMessageInfo func (m *RepoCreds) Reset() { *m = RepoCreds{} } func (*RepoCreds) ProtoMessage() {} func (*RepoCreds) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{118} + return fileDescriptor_c078c3c476799f44, []int{119} } func (m *RepoCreds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3376,7 +3404,7 @@ var xxx_messageInfo_RepoCreds proto.InternalMessageInfo func (m *RepoCredsList) Reset() { *m = RepoCredsList{} } func (*RepoCredsList) ProtoMessage() {} func (*RepoCredsList) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{119} + return fileDescriptor_c078c3c476799f44, []int{120} } func (m *RepoCredsList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3404,7 +3432,7 @@ var xxx_messageInfo_RepoCredsList proto.InternalMessageInfo func (m *Repository) Reset() { *m = Repository{} } func (*Repository) ProtoMessage() {} func (*Repository) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{120} + return fileDescriptor_c078c3c476799f44, []int{121} } func (m *Repository) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3432,7 +3460,7 @@ var xxx_messageInfo_Repository proto.InternalMessageInfo func (m *RepositoryCertificate) Reset() { *m = RepositoryCertificate{} } func (*RepositoryCertificate) ProtoMessage() {} func (*RepositoryCertificate) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{121} + return fileDescriptor_c078c3c476799f44, []int{122} } func (m *RepositoryCertificate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3460,7 +3488,7 @@ var xxx_messageInfo_RepositoryCertificate proto.InternalMessageInfo func (m *RepositoryCertificateList) Reset() { *m = RepositoryCertificateList{} } func (*RepositoryCertificateList) ProtoMessage() {} func (*RepositoryCertificateList) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{122} + return fileDescriptor_c078c3c476799f44, []int{123} } func (m *RepositoryCertificateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3488,7 +3516,7 @@ var xxx_messageInfo_RepositoryCertificateList proto.InternalMessageInfo func (m *RepositoryList) Reset() { *m = RepositoryList{} } func (*RepositoryList) ProtoMessage() {} func (*RepositoryList) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{123} + return fileDescriptor_c078c3c476799f44, []int{124} } func (m *RepositoryList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3516,7 +3544,7 @@ var xxx_messageInfo_RepositoryList proto.InternalMessageInfo func (m *ResourceAction) Reset() { *m = ResourceAction{} } func (*ResourceAction) ProtoMessage() {} func (*ResourceAction) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{124} + return fileDescriptor_c078c3c476799f44, []int{125} } func (m *ResourceAction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3544,7 +3572,7 @@ var xxx_messageInfo_ResourceAction proto.InternalMessageInfo func (m *ResourceActionDefinition) Reset() { *m = ResourceActionDefinition{} } func (*ResourceActionDefinition) ProtoMessage() {} func (*ResourceActionDefinition) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{125} + return fileDescriptor_c078c3c476799f44, []int{126} } func (m *ResourceActionDefinition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3572,7 +3600,7 @@ var xxx_messageInfo_ResourceActionDefinition proto.InternalMessageInfo func (m *ResourceActionParam) Reset() { *m = ResourceActionParam{} } func (*ResourceActionParam) ProtoMessage() {} func (*ResourceActionParam) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{126} + return fileDescriptor_c078c3c476799f44, []int{127} } func (m *ResourceActionParam) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3600,7 +3628,7 @@ var xxx_messageInfo_ResourceActionParam proto.InternalMessageInfo func (m *ResourceActions) Reset() { *m = ResourceActions{} } func (*ResourceActions) ProtoMessage() {} func (*ResourceActions) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{127} + return fileDescriptor_c078c3c476799f44, []int{128} } func (m *ResourceActions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3628,7 +3656,7 @@ var xxx_messageInfo_ResourceActions proto.InternalMessageInfo func (m *ResourceDiff) Reset() { *m = ResourceDiff{} } func (*ResourceDiff) ProtoMessage() {} func (*ResourceDiff) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{128} + return fileDescriptor_c078c3c476799f44, []int{129} } func (m *ResourceDiff) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3656,7 +3684,7 @@ var xxx_messageInfo_ResourceDiff proto.InternalMessageInfo func (m *ResourceIgnoreDifferences) Reset() { *m = ResourceIgnoreDifferences{} } func (*ResourceIgnoreDifferences) ProtoMessage() {} func (*ResourceIgnoreDifferences) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{129} + return fileDescriptor_c078c3c476799f44, []int{130} } func (m *ResourceIgnoreDifferences) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3684,7 +3712,7 @@ var xxx_messageInfo_ResourceIgnoreDifferences proto.InternalMessageInfo func (m *ResourceNetworkingInfo) Reset() { *m = ResourceNetworkingInfo{} } func (*ResourceNetworkingInfo) ProtoMessage() {} func (*ResourceNetworkingInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{130} + return fileDescriptor_c078c3c476799f44, []int{131} } func (m *ResourceNetworkingInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3712,7 +3740,7 @@ var xxx_messageInfo_ResourceNetworkingInfo proto.InternalMessageInfo func (m *ResourceNode) Reset() { *m = ResourceNode{} } func (*ResourceNode) ProtoMessage() {} func (*ResourceNode) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{131} + return fileDescriptor_c078c3c476799f44, []int{132} } func (m *ResourceNode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3740,7 +3768,7 @@ var xxx_messageInfo_ResourceNode proto.InternalMessageInfo func (m *ResourceOverride) Reset() { *m = ResourceOverride{} } func (*ResourceOverride) ProtoMessage() {} func (*ResourceOverride) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{132} + return fileDescriptor_c078c3c476799f44, []int{133} } func (m *ResourceOverride) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3768,7 +3796,7 @@ var xxx_messageInfo_ResourceOverride proto.InternalMessageInfo func (m *ResourceRef) Reset() { *m = ResourceRef{} } func (*ResourceRef) ProtoMessage() {} func (*ResourceRef) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{133} + return fileDescriptor_c078c3c476799f44, []int{134} } func (m *ResourceRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3796,7 +3824,7 @@ var xxx_messageInfo_ResourceRef proto.InternalMessageInfo func (m *ResourceResult) Reset() { *m = ResourceResult{} } func (*ResourceResult) ProtoMessage() {} func (*ResourceResult) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{134} + return fileDescriptor_c078c3c476799f44, []int{135} } func (m *ResourceResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3824,7 +3852,7 @@ var xxx_messageInfo_ResourceResult proto.InternalMessageInfo func (m *ResourceStatus) Reset() { *m = ResourceStatus{} } func (*ResourceStatus) ProtoMessage() {} func (*ResourceStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{135} + return fileDescriptor_c078c3c476799f44, []int{136} } func (m *ResourceStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3852,7 +3880,7 @@ var xxx_messageInfo_ResourceStatus proto.InternalMessageInfo func (m *RetryStrategy) Reset() { *m = RetryStrategy{} } func (*RetryStrategy) ProtoMessage() {} func (*RetryStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{136} + return fileDescriptor_c078c3c476799f44, []int{137} } func (m *RetryStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3880,7 +3908,7 @@ var xxx_messageInfo_RetryStrategy proto.InternalMessageInfo func (m *RevisionHistory) Reset() { *m = RevisionHistory{} } func (*RevisionHistory) ProtoMessage() {} func (*RevisionHistory) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{137} + return fileDescriptor_c078c3c476799f44, []int{138} } func (m *RevisionHistory) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3908,7 +3936,7 @@ var xxx_messageInfo_RevisionHistory proto.InternalMessageInfo func (m *RevisionMetadata) Reset() { *m = RevisionMetadata{} } func (*RevisionMetadata) ProtoMessage() {} func (*RevisionMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{138} + return fileDescriptor_c078c3c476799f44, []int{139} } func (m *RevisionMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3936,7 +3964,7 @@ var xxx_messageInfo_RevisionMetadata proto.InternalMessageInfo func (m *RevisionReference) Reset() { *m = RevisionReference{} } func (*RevisionReference) ProtoMessage() {} func (*RevisionReference) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{139} + return fileDescriptor_c078c3c476799f44, []int{140} } func (m *RevisionReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3964,7 +3992,7 @@ var xxx_messageInfo_RevisionReference proto.InternalMessageInfo func (m *SCMProviderGenerator) Reset() { *m = SCMProviderGenerator{} } func (*SCMProviderGenerator) ProtoMessage() {} func (*SCMProviderGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{140} + return fileDescriptor_c078c3c476799f44, []int{141} } func (m *SCMProviderGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3992,7 +4020,7 @@ var xxx_messageInfo_SCMProviderGenerator proto.InternalMessageInfo func (m *SCMProviderGeneratorAWSCodeCommit) Reset() { *m = SCMProviderGeneratorAWSCodeCommit{} } func (*SCMProviderGeneratorAWSCodeCommit) ProtoMessage() {} func (*SCMProviderGeneratorAWSCodeCommit) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{141} + return fileDescriptor_c078c3c476799f44, []int{142} } func (m *SCMProviderGeneratorAWSCodeCommit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4020,7 +4048,7 @@ var xxx_messageInfo_SCMProviderGeneratorAWSCodeCommit proto.InternalMessageInfo func (m *SCMProviderGeneratorAzureDevOps) Reset() { *m = SCMProviderGeneratorAzureDevOps{} } func (*SCMProviderGeneratorAzureDevOps) ProtoMessage() {} func (*SCMProviderGeneratorAzureDevOps) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{142} + return fileDescriptor_c078c3c476799f44, []int{143} } func (m *SCMProviderGeneratorAzureDevOps) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4048,7 +4076,7 @@ var xxx_messageInfo_SCMProviderGeneratorAzureDevOps proto.InternalMessageInfo func (m *SCMProviderGeneratorBitbucket) Reset() { *m = SCMProviderGeneratorBitbucket{} } func (*SCMProviderGeneratorBitbucket) ProtoMessage() {} func (*SCMProviderGeneratorBitbucket) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{143} + return fileDescriptor_c078c3c476799f44, []int{144} } func (m *SCMProviderGeneratorBitbucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4076,7 +4104,7 @@ var xxx_messageInfo_SCMProviderGeneratorBitbucket proto.InternalMessageInfo func (m *SCMProviderGeneratorBitbucketServer) Reset() { *m = SCMProviderGeneratorBitbucketServer{} } func (*SCMProviderGeneratorBitbucketServer) ProtoMessage() {} func (*SCMProviderGeneratorBitbucketServer) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{144} + return fileDescriptor_c078c3c476799f44, []int{145} } func (m *SCMProviderGeneratorBitbucketServer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4104,7 +4132,7 @@ var xxx_messageInfo_SCMProviderGeneratorBitbucketServer proto.InternalMessageInf func (m *SCMProviderGeneratorFilter) Reset() { *m = SCMProviderGeneratorFilter{} } func (*SCMProviderGeneratorFilter) ProtoMessage() {} func (*SCMProviderGeneratorFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{145} + return fileDescriptor_c078c3c476799f44, []int{146} } func (m *SCMProviderGeneratorFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4132,7 +4160,7 @@ var xxx_messageInfo_SCMProviderGeneratorFilter proto.InternalMessageInfo func (m *SCMProviderGeneratorGitea) Reset() { *m = SCMProviderGeneratorGitea{} } func (*SCMProviderGeneratorGitea) ProtoMessage() {} func (*SCMProviderGeneratorGitea) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{146} + return fileDescriptor_c078c3c476799f44, []int{147} } func (m *SCMProviderGeneratorGitea) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4160,7 +4188,7 @@ var xxx_messageInfo_SCMProviderGeneratorGitea proto.InternalMessageInfo func (m *SCMProviderGeneratorGithub) Reset() { *m = SCMProviderGeneratorGithub{} } func (*SCMProviderGeneratorGithub) ProtoMessage() {} func (*SCMProviderGeneratorGithub) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{147} + return fileDescriptor_c078c3c476799f44, []int{148} } func (m *SCMProviderGeneratorGithub) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4188,7 +4216,7 @@ var xxx_messageInfo_SCMProviderGeneratorGithub proto.InternalMessageInfo func (m *SCMProviderGeneratorGitlab) Reset() { *m = SCMProviderGeneratorGitlab{} } func (*SCMProviderGeneratorGitlab) ProtoMessage() {} func (*SCMProviderGeneratorGitlab) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{148} + return fileDescriptor_c078c3c476799f44, []int{149} } func (m *SCMProviderGeneratorGitlab) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4213,10 +4241,38 @@ func (m *SCMProviderGeneratorGitlab) XXX_DiscardUnknown() { var xxx_messageInfo_SCMProviderGeneratorGitlab proto.InternalMessageInfo +func (m *SCMProviderGeneratorScmManager) Reset() { *m = SCMProviderGeneratorScmManager{} } +func (*SCMProviderGeneratorScmManager) ProtoMessage() {} +func (*SCMProviderGeneratorScmManager) Descriptor() ([]byte, []int) { + return fileDescriptor_c078c3c476799f44, []int{150} +} +func (m *SCMProviderGeneratorScmManager) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SCMProviderGeneratorScmManager) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SCMProviderGeneratorScmManager) XXX_Merge(src proto.Message) { + xxx_messageInfo_SCMProviderGeneratorScmManager.Merge(m, src) +} +func (m *SCMProviderGeneratorScmManager) XXX_Size() int { + return m.Size() +} +func (m *SCMProviderGeneratorScmManager) XXX_DiscardUnknown() { + xxx_messageInfo_SCMProviderGeneratorScmManager.DiscardUnknown(m) +} + +var xxx_messageInfo_SCMProviderGeneratorScmManager proto.InternalMessageInfo + func (m *SecretRef) Reset() { *m = SecretRef{} } func (*SecretRef) ProtoMessage() {} func (*SecretRef) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{149} + return fileDescriptor_c078c3c476799f44, []int{151} } func (m *SecretRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4244,7 +4300,7 @@ var xxx_messageInfo_SecretRef proto.InternalMessageInfo func (m *SignatureKey) Reset() { *m = SignatureKey{} } func (*SignatureKey) ProtoMessage() {} func (*SignatureKey) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{150} + return fileDescriptor_c078c3c476799f44, []int{152} } func (m *SignatureKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4272,7 +4328,7 @@ var xxx_messageInfo_SignatureKey proto.InternalMessageInfo func (m *SourceHydrator) Reset() { *m = SourceHydrator{} } func (*SourceHydrator) ProtoMessage() {} func (*SourceHydrator) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{151} + return fileDescriptor_c078c3c476799f44, []int{153} } func (m *SourceHydrator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4300,7 +4356,7 @@ var xxx_messageInfo_SourceHydrator proto.InternalMessageInfo func (m *SourceHydratorStatus) Reset() { *m = SourceHydratorStatus{} } func (*SourceHydratorStatus) ProtoMessage() {} func (*SourceHydratorStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{152} + return fileDescriptor_c078c3c476799f44, []int{154} } func (m *SourceHydratorStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4328,7 +4384,7 @@ var xxx_messageInfo_SourceHydratorStatus proto.InternalMessageInfo func (m *SuccessfulHydrateOperation) Reset() { *m = SuccessfulHydrateOperation{} } func (*SuccessfulHydrateOperation) ProtoMessage() {} func (*SuccessfulHydrateOperation) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{153} + return fileDescriptor_c078c3c476799f44, []int{155} } func (m *SuccessfulHydrateOperation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4356,7 +4412,7 @@ var xxx_messageInfo_SuccessfulHydrateOperation proto.InternalMessageInfo func (m *SyncOperation) Reset() { *m = SyncOperation{} } func (*SyncOperation) ProtoMessage() {} func (*SyncOperation) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{154} + return fileDescriptor_c078c3c476799f44, []int{156} } func (m *SyncOperation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4384,7 +4440,7 @@ var xxx_messageInfo_SyncOperation proto.InternalMessageInfo func (m *SyncOperationResource) Reset() { *m = SyncOperationResource{} } func (*SyncOperationResource) ProtoMessage() {} func (*SyncOperationResource) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{155} + return fileDescriptor_c078c3c476799f44, []int{157} } func (m *SyncOperationResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4412,7 +4468,7 @@ var xxx_messageInfo_SyncOperationResource proto.InternalMessageInfo func (m *SyncOperationResult) Reset() { *m = SyncOperationResult{} } func (*SyncOperationResult) ProtoMessage() {} func (*SyncOperationResult) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{156} + return fileDescriptor_c078c3c476799f44, []int{158} } func (m *SyncOperationResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4440,7 +4496,7 @@ var xxx_messageInfo_SyncOperationResult proto.InternalMessageInfo func (m *SyncPolicy) Reset() { *m = SyncPolicy{} } func (*SyncPolicy) ProtoMessage() {} func (*SyncPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{157} + return fileDescriptor_c078c3c476799f44, []int{159} } func (m *SyncPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4468,7 +4524,7 @@ var xxx_messageInfo_SyncPolicy proto.InternalMessageInfo func (m *SyncPolicyAutomated) Reset() { *m = SyncPolicyAutomated{} } func (*SyncPolicyAutomated) ProtoMessage() {} func (*SyncPolicyAutomated) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{158} + return fileDescriptor_c078c3c476799f44, []int{160} } func (m *SyncPolicyAutomated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4496,7 +4552,7 @@ var xxx_messageInfo_SyncPolicyAutomated proto.InternalMessageInfo func (m *SyncSource) Reset() { *m = SyncSource{} } func (*SyncSource) ProtoMessage() {} func (*SyncSource) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{159} + return fileDescriptor_c078c3c476799f44, []int{161} } func (m *SyncSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4524,7 +4580,7 @@ var xxx_messageInfo_SyncSource proto.InternalMessageInfo func (m *SyncStatus) Reset() { *m = SyncStatus{} } func (*SyncStatus) ProtoMessage() {} func (*SyncStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{160} + return fileDescriptor_c078c3c476799f44, []int{162} } func (m *SyncStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4552,7 +4608,7 @@ var xxx_messageInfo_SyncStatus proto.InternalMessageInfo func (m *SyncStrategy) Reset() { *m = SyncStrategy{} } func (*SyncStrategy) ProtoMessage() {} func (*SyncStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{161} + return fileDescriptor_c078c3c476799f44, []int{163} } func (m *SyncStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4580,7 +4636,7 @@ var xxx_messageInfo_SyncStrategy proto.InternalMessageInfo func (m *SyncStrategyApply) Reset() { *m = SyncStrategyApply{} } func (*SyncStrategyApply) ProtoMessage() {} func (*SyncStrategyApply) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{162} + return fileDescriptor_c078c3c476799f44, []int{164} } func (m *SyncStrategyApply) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4608,7 +4664,7 @@ var xxx_messageInfo_SyncStrategyApply proto.InternalMessageInfo func (m *SyncStrategyHook) Reset() { *m = SyncStrategyHook{} } func (*SyncStrategyHook) ProtoMessage() {} func (*SyncStrategyHook) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{163} + return fileDescriptor_c078c3c476799f44, []int{165} } func (m *SyncStrategyHook) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4636,7 +4692,7 @@ var xxx_messageInfo_SyncStrategyHook proto.InternalMessageInfo func (m *SyncWindow) Reset() { *m = SyncWindow{} } func (*SyncWindow) ProtoMessage() {} func (*SyncWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{164} + return fileDescriptor_c078c3c476799f44, []int{166} } func (m *SyncWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4664,7 +4720,7 @@ var xxx_messageInfo_SyncWindow proto.InternalMessageInfo func (m *TLSClientConfig) Reset() { *m = TLSClientConfig{} } func (*TLSClientConfig) ProtoMessage() {} func (*TLSClientConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{165} + return fileDescriptor_c078c3c476799f44, []int{167} } func (m *TLSClientConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4692,7 +4748,7 @@ var xxx_messageInfo_TLSClientConfig proto.InternalMessageInfo func (m *TagFilter) Reset() { *m = TagFilter{} } func (*TagFilter) ProtoMessage() {} func (*TagFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_c078c3c476799f44, []int{166} + return fileDescriptor_c078c3c476799f44, []int{168} } func (m *TagFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4854,6 +4910,7 @@ func init() { proto.RegisterType((*PullRequestGeneratorGitLab)(nil), "github.zerozr99.workers.dev.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.PullRequestGeneratorGitLab") proto.RegisterType((*PullRequestGeneratorGitea)(nil), "github.zerozr99.workers.dev.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.PullRequestGeneratorGitea") proto.RegisterType((*PullRequestGeneratorGithub)(nil), "github.zerozr99.workers.dev.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.PullRequestGeneratorGithub") + proto.RegisterType((*PullRequestGeneratorScmManager)(nil), "github.zerozr99.workers.dev.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.PullRequestGeneratorScmManager") proto.RegisterType((*RefTarget)(nil), "github.zerozr99.workers.dev.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.RefTarget") proto.RegisterType((*RepoCreds)(nil), "github.zerozr99.workers.dev.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.RepoCreds") proto.RegisterType((*RepoCredsList)(nil), "github.zerozr99.workers.dev.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.RepoCredsList") @@ -4889,6 +4946,7 @@ func init() { proto.RegisterType((*SCMProviderGeneratorGitea)(nil), "github.zerozr99.workers.dev.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.SCMProviderGeneratorGitea") proto.RegisterType((*SCMProviderGeneratorGithub)(nil), "github.zerozr99.workers.dev.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.SCMProviderGeneratorGithub") proto.RegisterType((*SCMProviderGeneratorGitlab)(nil), "github.zerozr99.workers.dev.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.SCMProviderGeneratorGitlab") + proto.RegisterType((*SCMProviderGeneratorScmManager)(nil), "github.zerozr99.workers.dev.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.SCMProviderGeneratorScmManager") proto.RegisterType((*SecretRef)(nil), "github.zerozr99.workers.dev.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.SecretRef") proto.RegisterType((*SignatureKey)(nil), "github.zerozr99.workers.dev.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.SignatureKey") proto.RegisterType((*SourceHydrator)(nil), "github.zerozr99.workers.dev.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.SourceHydrator") @@ -4914,780 +4972,787 @@ func init() { } var fileDescriptor_c078c3c476799f44 = []byte{ - // 12358 bytes of a gzipped FileDescriptorProto + // 12466 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x70, 0x24, 0x59, - 0x56, 0x18, 0xbc, 0x59, 0xa5, 0x92, 0xaa, 0x8e, 0x5e, 0xad, 0xdb, 0xdd, 0x33, 0xea, 0x9e, 0x87, - 0x9a, 0x1c, 0x98, 0x5d, 0xbe, 0x9d, 0x91, 0x98, 0x9e, 0x99, 0x65, 0x3e, 0x06, 0x16, 0xf4, 0xe8, - 0x87, 0xba, 0xa5, 0x96, 0xe6, 0x96, 0xba, 0x9b, 0x9d, 0x65, 0x76, 0x36, 0x95, 0x75, 0x25, 0x65, - 0x2b, 0x2b, 0xb3, 0x26, 0x33, 0x4b, 0xad, 0x1a, 0x86, 0x65, 0x97, 0xdd, 0x85, 0x85, 0x7d, 0x8d, - 0xc1, 0x61, 0x06, 0xdb, 0xe0, 0xc5, 0xe0, 0x47, 0x84, 0x63, 0x03, 0x6c, 0x7e, 0x98, 0x08, 0x20, - 0x08, 0x1e, 0x41, 0x80, 0x5f, 0x60, 0x02, 0x03, 0x36, 0x20, 0xef, 0xb6, 0xed, 0x80, 0x70, 0x84, - 0x89, 0x00, 0xfb, 0x87, 0xa3, 0xed, 0x20, 0x1c, 0xf7, 0x7d, 0x33, 0x2b, 0x4b, 0x2a, 0xb5, 0x52, - 0xdd, 0xbd, 0x30, 0xff, 0xaa, 0xee, 0x39, 0x79, 0xce, 0xcd, 0x9b, 0xf7, 0x9e, 0x73, 0xee, 0xb9, - 0xe7, 0x9c, 0x0b, 0x4b, 0x9b, 0x5e, 0xb2, 0xd5, 0x5e, 0x9f, 0x76, 0xc3, 0xe6, 0x8c, 0x13, 0x6d, - 0x86, 0xad, 0x28, 0xbc, 0xc5, 0x7e, 0x3c, 0xeb, 0x36, 0x66, 0x76, 0x9e, 0x9f, 0x69, 0x6d, 0x6f, - 0xce, 0x38, 0x2d, 0x2f, 0x9e, 0x71, 0x5a, 0x2d, 0xdf, 0x73, 0x9d, 0xc4, 0x0b, 0x83, 0x99, 0x9d, - 0xe7, 0x1c, 0xbf, 0xb5, 0xe5, 0x3c, 0x37, 0xb3, 0x49, 0x02, 0x12, 0x39, 0x09, 0x69, 0x4c, 0xb7, - 0xa2, 0x30, 0x09, 0xd1, 0xb7, 0x6a, 0x6a, 0xd3, 0x92, 0x1a, 0xfb, 0xf1, 0xba, 0xdb, 0x98, 0xde, - 0x79, 0x7e, 0xba, 0xb5, 0xbd, 0x39, 0x4d, 0xa9, 0x4d, 0x1b, 0xd4, 0xa6, 0x25, 0xb5, 0xb3, 0xcf, - 0x1a, 0x7d, 0xd9, 0x0c, 0x37, 0xc3, 0x19, 0x46, 0x74, 0xbd, 0xbd, 0xc1, 0xfe, 0xb1, 0x3f, 0xec, - 0x17, 0x67, 0x76, 0xd6, 0xde, 0x7e, 0x29, 0x9e, 0xf6, 0x42, 0xda, 0xbd, 0x19, 0x37, 0x8c, 0xc8, - 0xcc, 0x4e, 0x57, 0x87, 0xce, 0x5e, 0xd6, 0x38, 0x64, 0x37, 0x21, 0x41, 0xec, 0x85, 0x41, 0xfc, - 0x2c, 0xed, 0x02, 0x89, 0x76, 0x48, 0x64, 0xbe, 0x9e, 0x81, 0x90, 0x47, 0xe9, 0x05, 0x4d, 0xa9, - 0xe9, 0xb8, 0x5b, 0x5e, 0x40, 0xa2, 0x8e, 0x7e, 0xbc, 0x49, 0x12, 0x27, 0xef, 0xa9, 0x99, 0x5e, - 0x4f, 0x45, 0xed, 0x20, 0xf1, 0x9a, 0xa4, 0xeb, 0x81, 0x0f, 0x1c, 0xf4, 0x40, 0xec, 0x6e, 0x91, - 0xa6, 0xd3, 0xf5, 0xdc, 0xf3, 0xbd, 0x9e, 0x6b, 0x27, 0x9e, 0x3f, 0xe3, 0x05, 0x49, 0x9c, 0x44, - 0xd9, 0x87, 0xec, 0xbf, 0x6f, 0xc1, 0xe8, 0xec, 0xcd, 0xfa, 0x6c, 0x3b, 0xd9, 0x9a, 0x0f, 0x83, - 0x0d, 0x6f, 0x13, 0xbd, 0x08, 0xc3, 0xae, 0xdf, 0x8e, 0x13, 0x12, 0x5d, 0x73, 0x9a, 0x64, 0xd2, - 0x3a, 0x67, 0xbd, 0xaf, 0x36, 0x77, 0xf2, 0x37, 0xf7, 0xa6, 0xde, 0x73, 0x67, 0x6f, 0x6a, 0x78, - 0x5e, 0x83, 0xb0, 0x89, 0x87, 0xbe, 0x11, 0x86, 0xa2, 0xd0, 0x27, 0xb3, 0xf8, 0xda, 0x64, 0x89, - 0x3d, 0x32, 0x2e, 0x1e, 0x19, 0xc2, 0xbc, 0x19, 0x4b, 0x38, 0x45, 0x6d, 0x45, 0xe1, 0x86, 0xe7, - 0x93, 0xc9, 0x72, 0x1a, 0x75, 0x95, 0x37, 0x63, 0x09, 0xb7, 0x7f, 0xac, 0x04, 0xe3, 0xb3, 0xad, - 0xd6, 0x65, 0xe2, 0xf8, 0xc9, 0x56, 0x3d, 0x71, 0x92, 0x76, 0x8c, 0x36, 0x61, 0x30, 0x66, 0xbf, - 0x44, 0xdf, 0x56, 0xc4, 0xd3, 0x83, 0x1c, 0x7e, 0x77, 0x6f, 0xea, 0xdb, 0xf2, 0x66, 0xf4, 0xa6, - 0x97, 0x84, 0xad, 0xf8, 0x59, 0x12, 0x6c, 0x7a, 0x01, 0x61, 0xe3, 0xb2, 0xc5, 0xa8, 0x4e, 0x9b, - 0xc4, 0xe7, 0xc3, 0x06, 0xc1, 0x82, 0x3c, 0xed, 0x67, 0x93, 0xc4, 0xb1, 0xb3, 0x49, 0xb2, 0xaf, - 0xb4, 0xcc, 0x9b, 0xb1, 0x84, 0xa3, 0x08, 0x90, 0xef, 0xc4, 0xc9, 0x5a, 0xe4, 0x04, 0xb1, 0x47, - 0xa7, 0xf4, 0x9a, 0xd7, 0xe4, 0x6f, 0x37, 0x7c, 0xfe, 0xff, 0x9b, 0xe6, 0x1f, 0x66, 0xda, 0xfc, - 0x30, 0x7a, 0x1d, 0xd0, 0x79, 0x33, 0xbd, 0xf3, 0xdc, 0x34, 0x7d, 0x62, 0xee, 0x91, 0x3b, 0x7b, - 0x53, 0x68, 0xa9, 0x8b, 0x12, 0xce, 0xa1, 0x6e, 0xff, 0x7e, 0x09, 0x60, 0xb6, 0xd5, 0x5a, 0x8d, - 0xc2, 0x5b, 0xc4, 0x4d, 0xd0, 0x47, 0xa1, 0x4a, 0x49, 0x35, 0x9c, 0xc4, 0x61, 0x03, 0x33, 0x7c, - 0xfe, 0x9b, 0xfa, 0x63, 0xbc, 0xb2, 0x4e, 0x9f, 0x5f, 0x26, 0x89, 0x33, 0x87, 0xc4, 0x0b, 0x82, - 0x6e, 0xc3, 0x8a, 0x2a, 0x0a, 0x60, 0x20, 0x6e, 0x11, 0x97, 0x0d, 0xc6, 0xf0, 0xf9, 0xa5, 0xe9, - 0xa3, 0xac, 0xf4, 0x69, 0xdd, 0xf3, 0x7a, 0x8b, 0xb8, 0x73, 0x23, 0x82, 0xf3, 0x00, 0xfd, 0x87, - 0x19, 0x1f, 0xb4, 0xa3, 0x3e, 0x34, 0x1f, 0xc8, 0x6b, 0x85, 0x71, 0x64, 0x54, 0xe7, 0xc6, 0xd2, - 0x13, 0x47, 0x7e, 0x77, 0xfb, 0x4f, 0x2c, 0x18, 0xd3, 0xc8, 0x4b, 0x5e, 0x9c, 0xa0, 0xef, 0xea, - 0x1a, 0xdc, 0xe9, 0xfe, 0x06, 0x97, 0x3e, 0xcd, 0x86, 0xf6, 0x84, 0x60, 0x56, 0x95, 0x2d, 0xc6, - 0xc0, 0x36, 0xa1, 0xe2, 0x25, 0xa4, 0x19, 0x4f, 0x96, 0xce, 0x95, 0xdf, 0x37, 0x7c, 0xfe, 0x72, - 0x51, 0xef, 0x39, 0x37, 0x2a, 0x98, 0x56, 0x16, 0x29, 0x79, 0xcc, 0xb9, 0xd8, 0x7f, 0x39, 0x6a, - 0xbe, 0x1f, 0x1d, 0x70, 0xf4, 0x1c, 0x0c, 0xc7, 0x61, 0x3b, 0x72, 0x09, 0x26, 0xad, 0x90, 0x2e, - 0xac, 0x32, 0x9d, 0xee, 0x74, 0xc1, 0xd7, 0x75, 0x33, 0x36, 0x71, 0xd0, 0x17, 0x2c, 0x18, 0x69, - 0x90, 0x38, 0xf1, 0x02, 0xc6, 0x5f, 0x76, 0x7e, 0xed, 0xc8, 0x9d, 0x97, 0x8d, 0x0b, 0x9a, 0xf8, - 0xdc, 0x29, 0xf1, 0x22, 0x23, 0x46, 0x63, 0x8c, 0x53, 0xfc, 0xa9, 0xe0, 0x6a, 0x90, 0xd8, 0x8d, - 0xbc, 0x16, 0xfd, 0x2f, 0x44, 0x8b, 0x12, 0x5c, 0x0b, 0x1a, 0x84, 0x4d, 0x3c, 0x14, 0x40, 0x85, - 0x0a, 0xa6, 0x78, 0x72, 0x80, 0xf5, 0x7f, 0xf1, 0x68, 0xfd, 0x17, 0x83, 0x4a, 0x65, 0x9e, 0x1e, - 0x7d, 0xfa, 0x2f, 0xc6, 0x9c, 0x0d, 0xfa, 0xbc, 0x05, 0x93, 0x42, 0x70, 0x62, 0xc2, 0x07, 0xf4, - 0xe6, 0x96, 0x97, 0x10, 0xdf, 0x8b, 0x93, 0xc9, 0x0a, 0xeb, 0xc3, 0x4c, 0x7f, 0x73, 0xeb, 0x52, - 0x14, 0xb6, 0x5b, 0x57, 0xbd, 0xa0, 0x31, 0x77, 0x4e, 0x70, 0x9a, 0x9c, 0xef, 0x41, 0x18, 0xf7, - 0x64, 0x89, 0x7e, 0xc4, 0x82, 0xb3, 0x81, 0xd3, 0x24, 0x71, 0xcb, 0xa1, 0x9f, 0x96, 0x83, 0xe7, - 0x7c, 0xc7, 0xdd, 0x66, 0x3d, 0x1a, 0xbc, 0xb7, 0x1e, 0xd9, 0xa2, 0x47, 0x67, 0xaf, 0xf5, 0x24, - 0x8d, 0xf7, 0x61, 0x8b, 0x7e, 0xca, 0x82, 0x89, 0x30, 0x6a, 0x6d, 0x39, 0x01, 0x69, 0x48, 0x68, - 0x3c, 0x39, 0xc4, 0x96, 0xde, 0x47, 0x8e, 0xf6, 0x89, 0x56, 0xb2, 0x64, 0x97, 0xc3, 0xc0, 0x4b, - 0xc2, 0xa8, 0x4e, 0x92, 0xc4, 0x0b, 0x36, 0xe3, 0xb9, 0xd3, 0x77, 0xf6, 0xa6, 0x26, 0xba, 0xb0, - 0x70, 0x77, 0x7f, 0xd0, 0x77, 0xc3, 0x70, 0xdc, 0x09, 0xdc, 0x9b, 0x5e, 0xd0, 0x08, 0x6f, 0xc7, - 0x93, 0xd5, 0x22, 0x96, 0x6f, 0x5d, 0x11, 0x14, 0x0b, 0x50, 0x33, 0xc0, 0x26, 0xb7, 0xfc, 0x0f, - 0xa7, 0xa7, 0x52, 0xad, 0xe8, 0x0f, 0xa7, 0x27, 0xd3, 0x3e, 0x6c, 0xd1, 0x0f, 0x58, 0x30, 0x1a, - 0x7b, 0x9b, 0x81, 0x93, 0xb4, 0x23, 0x72, 0x95, 0x74, 0xe2, 0x49, 0x60, 0x1d, 0xb9, 0x72, 0xc4, - 0x51, 0x31, 0x48, 0xce, 0x9d, 0x16, 0x7d, 0x1c, 0x35, 0x5b, 0x63, 0x9c, 0xe6, 0x9b, 0xb7, 0xd0, - 0xf4, 0xb4, 0x1e, 0x2e, 0x76, 0xa1, 0xe9, 0x49, 0xdd, 0x93, 0x25, 0xfa, 0x0e, 0x38, 0xc1, 0x9b, - 0xd4, 0xc8, 0xc6, 0x93, 0x23, 0x4c, 0xd0, 0x9e, 0xba, 0xb3, 0x37, 0x75, 0xa2, 0x9e, 0x81, 0xe1, - 0x2e, 0x6c, 0xf4, 0x06, 0x4c, 0xb5, 0x48, 0xd4, 0xf4, 0x92, 0x95, 0xc0, 0xef, 0x48, 0xf1, 0xed, - 0x86, 0x2d, 0xd2, 0x10, 0xdd, 0x89, 0x27, 0x47, 0xcf, 0x59, 0xef, 0xab, 0xce, 0xbd, 0x57, 0x74, - 0x73, 0x6a, 0x75, 0x7f, 0x74, 0x7c, 0x10, 0x3d, 0xf4, 0x1b, 0x16, 0x9c, 0x35, 0xa4, 0x6c, 0x9d, - 0x44, 0x3b, 0x9e, 0x4b, 0x66, 0x5d, 0x37, 0x6c, 0x07, 0x49, 0x3c, 0x39, 0xc6, 0x86, 0x71, 0xfd, - 0x38, 0x64, 0x7e, 0x9a, 0x95, 0x9e, 0x97, 0x3d, 0x51, 0x62, 0xbc, 0x4f, 0x4f, 0xed, 0xdf, 0x2a, - 0xc1, 0x89, 0xac, 0x05, 0x80, 0xfe, 0xb1, 0x05, 0xe3, 0xb7, 0x6e, 0x27, 0x6b, 0xe1, 0x36, 0x09, - 0xe2, 0xb9, 0x0e, 0x95, 0xd3, 0x4c, 0xf7, 0x0d, 0x9f, 0x77, 0x8b, 0xb5, 0x35, 0xa6, 0xaf, 0xa4, - 0xb9, 0x5c, 0x08, 0x92, 0xa8, 0x33, 0xf7, 0xa8, 0x78, 0xa7, 0xf1, 0x2b, 0x37, 0xd7, 0x4c, 0x28, - 0xce, 0x76, 0xea, 0xec, 0x67, 0x2d, 0x38, 0x95, 0x47, 0x02, 0x9d, 0x80, 0xf2, 0x36, 0xe9, 0x70, - 0x4b, 0x18, 0xd3, 0x9f, 0xe8, 0x35, 0xa8, 0xec, 0x38, 0x7e, 0x9b, 0x08, 0x33, 0xed, 0xd2, 0xd1, - 0x5e, 0x44, 0xf5, 0x0c, 0x73, 0xaa, 0xdf, 0x52, 0x7a, 0xc9, 0xb2, 0x7f, 0xbb, 0x0c, 0xc3, 0xc6, - 0x47, 0xbb, 0x0f, 0xa6, 0x67, 0x98, 0x32, 0x3d, 0x97, 0x0b, 0x9b, 0x6f, 0x3d, 0x6d, 0xcf, 0xdb, - 0x19, 0xdb, 0x73, 0xa5, 0x38, 0x96, 0xfb, 0x1a, 0x9f, 0x28, 0x81, 0x5a, 0xd8, 0xa2, 0x5b, 0x34, - 0x6a, 0xc3, 0x0c, 0x14, 0xf1, 0x09, 0x57, 0x24, 0xb9, 0xb9, 0xd1, 0x3b, 0x7b, 0x53, 0x35, 0xf5, - 0x17, 0x6b, 0x46, 0xf6, 0x1f, 0x58, 0x70, 0xca, 0xe8, 0xe3, 0x7c, 0x18, 0x34, 0xd8, 0x46, 0x03, - 0x9d, 0x83, 0x81, 0xa4, 0xd3, 0x92, 0xdb, 0x40, 0x35, 0x52, 0x6b, 0x9d, 0x16, 0xc1, 0x0c, 0xf2, - 0xb0, 0xef, 0x92, 0x7e, 0xc4, 0x82, 0x47, 0xf2, 0x05, 0x0c, 0x7a, 0x1a, 0x06, 0xb9, 0x0f, 0x40, - 0xbc, 0x9d, 0xfe, 0x24, 0xac, 0x15, 0x0b, 0x28, 0x9a, 0x81, 0x9a, 0x52, 0x78, 0xe2, 0x1d, 0x27, - 0x04, 0x6a, 0x4d, 0x6b, 0x49, 0x8d, 0x43, 0x07, 0x8d, 0xfe, 0x11, 0x26, 0xa8, 0x1a, 0x34, 0xb6, - 0x69, 0x66, 0x10, 0xfb, 0xf7, 0x2c, 0xf8, 0xfa, 0x7e, 0xc4, 0xde, 0xf1, 0xf5, 0xb1, 0x0e, 0xa7, - 0x1b, 0x64, 0xc3, 0x69, 0xfb, 0x49, 0x9a, 0xa3, 0xe8, 0xf4, 0x13, 0xe2, 0xe1, 0xd3, 0x0b, 0x79, - 0x48, 0x38, 0xff, 0x59, 0xfb, 0x3f, 0x5b, 0x6c, 0xbb, 0x2e, 0x5f, 0xeb, 0x3e, 0x6c, 0x9d, 0x82, - 0xf4, 0xd6, 0x69, 0xb1, 0xb0, 0x65, 0xda, 0x63, 0xef, 0xf4, 0x79, 0x0b, 0xce, 0x1a, 0x58, 0xcb, - 0x4e, 0xe2, 0x6e, 0x5d, 0xd8, 0x6d, 0x45, 0x24, 0x8e, 0xe9, 0x94, 0x7a, 0xc2, 0x10, 0xc7, 0x73, - 0xc3, 0x82, 0x42, 0xf9, 0x2a, 0xe9, 0x70, 0xd9, 0xfc, 0x0c, 0x54, 0xf9, 0x9a, 0x0b, 0x23, 0xf1, - 0x91, 0xd4, 0xbb, 0xad, 0x88, 0x76, 0xac, 0x30, 0x90, 0x0d, 0x83, 0x4c, 0xe6, 0x52, 0x19, 0x44, - 0xcd, 0x04, 0xa0, 0xdf, 0xfd, 0x06, 0x6b, 0xc1, 0x02, 0x62, 0xc7, 0xa9, 0xee, 0xac, 0x46, 0x84, - 0xcd, 0x87, 0xc6, 0x45, 0x8f, 0xf8, 0x8d, 0x98, 0x6e, 0xeb, 0x9c, 0x20, 0x08, 0x13, 0xb1, 0x43, - 0x33, 0xb6, 0x75, 0xb3, 0xba, 0x19, 0x9b, 0x38, 0x94, 0xa9, 0xef, 0xac, 0x13, 0x9f, 0x8f, 0xa8, - 0x60, 0xba, 0xc4, 0x5a, 0xb0, 0x80, 0xd8, 0x77, 0x4a, 0x6c, 0x03, 0xa9, 0x24, 0x1a, 0xb9, 0x1f, - 0xde, 0x87, 0x28, 0xa5, 0x02, 0x56, 0x8b, 0x93, 0xc7, 0xa4, 0xb7, 0x07, 0xe2, 0xcd, 0x8c, 0x16, - 0xc0, 0x85, 0x72, 0xdd, 0xdf, 0x0b, 0xf1, 0xf1, 0x32, 0x4c, 0xa5, 0x1f, 0xe8, 0x52, 0x22, 0x74, - 0xcb, 0x6b, 0x30, 0xca, 0xfa, 0xea, 0x0c, 0x7c, 0x6c, 0xe2, 0xf5, 0x90, 0xc3, 0xa5, 0xe3, 0x94, - 0xc3, 0xa6, 0x9a, 0x28, 0x1f, 0xa0, 0x26, 0x9e, 0x56, 0xa3, 0x3e, 0x90, 0x91, 0x79, 0x69, 0x55, - 0x79, 0x0e, 0x06, 0xe2, 0x84, 0xb4, 0x26, 0x2b, 0x69, 0x31, 0x5b, 0x4f, 0x48, 0x0b, 0x33, 0x08, - 0xfa, 0x36, 0x18, 0x4f, 0x9c, 0x68, 0x93, 0x24, 0x11, 0xd9, 0xf1, 0x98, 0x5f, 0x97, 0xed, 0x67, - 0x6b, 0x73, 0x27, 0xa9, 0xd5, 0xb5, 0xc6, 0x40, 0x58, 0x82, 0x70, 0x16, 0xd7, 0xfe, 0xef, 0x25, - 0x78, 0x34, 0xfd, 0x09, 0xb4, 0x62, 0xfc, 0xf6, 0x94, 0x62, 0x7c, 0xbf, 0xa9, 0x18, 0xef, 0xee, - 0x4d, 0x3d, 0xd6, 0xe3, 0xb1, 0xaf, 0x19, 0xbd, 0x89, 0x2e, 0x65, 0x3e, 0xc2, 0x4c, 0x97, 0x97, - 0xf5, 0x89, 0x1e, 0xef, 0x98, 0xf9, 0x4a, 0x4f, 0xc3, 0x60, 0x44, 0x9c, 0x38, 0x0c, 0xc4, 0x77, - 0x52, 0x5f, 0x13, 0xb3, 0x56, 0x2c, 0xa0, 0xf6, 0xef, 0xd6, 0xb2, 0x83, 0x7d, 0x89, 0xfb, 0xaa, - 0xc3, 0x08, 0x79, 0x30, 0xc0, 0x76, 0x6d, 0x5c, 0xb2, 0x5c, 0x3d, 0xda, 0x2a, 0xa4, 0x5a, 0x44, - 0x91, 0x9e, 0xab, 0xd2, 0xaf, 0x46, 0x9b, 0x30, 0x63, 0x81, 0x76, 0xa1, 0xea, 0xca, 0xcd, 0x54, - 0xa9, 0x08, 0xb7, 0xa3, 0xd8, 0x4a, 0x69, 0x8e, 0x23, 0x54, 0xdc, 0xab, 0x1d, 0x98, 0xe2, 0x86, - 0x08, 0x94, 0x37, 0xbd, 0x44, 0x7c, 0xd6, 0x23, 0x6e, 0x97, 0x2f, 0x79, 0xc6, 0x2b, 0x0e, 0x51, - 0x1d, 0x74, 0xc9, 0x4b, 0x30, 0xa5, 0x8f, 0x3e, 0x6d, 0xc1, 0x70, 0xec, 0x36, 0x57, 0xa3, 0x70, - 0xc7, 0x6b, 0x90, 0x48, 0xd8, 0x98, 0x47, 0x94, 0x6c, 0xf5, 0xf9, 0x65, 0x49, 0x50, 0xf3, 0xe5, - 0xee, 0x0b, 0x0d, 0xc1, 0x26, 0x5f, 0xba, 0xf7, 0x7a, 0x54, 0xbc, 0xfb, 0x02, 0x71, 0xd9, 0x8a, - 0x93, 0x7b, 0x66, 0x36, 0x53, 0x8e, 0x6c, 0x73, 0x2f, 0xb4, 0xdd, 0x6d, 0xba, 0xde, 0x74, 0x87, - 0x1e, 0xbb, 0xb3, 0x37, 0xf5, 0xe8, 0x7c, 0x3e, 0x4f, 0xdc, 0xab, 0x33, 0x6c, 0xc0, 0x5a, 0x6d, - 0xdf, 0xc7, 0xe4, 0x8d, 0x36, 0x61, 0x1e, 0xb1, 0x02, 0x06, 0x6c, 0x55, 0x13, 0xcc, 0x0c, 0x98, - 0x01, 0xc1, 0x26, 0x5f, 0xf4, 0x06, 0x0c, 0x36, 0x9d, 0x24, 0xf2, 0x76, 0x85, 0x1b, 0xec, 0x88, - 0xbb, 0xa0, 0x65, 0x46, 0x4b, 0x33, 0x67, 0x8a, 0x9e, 0x37, 0x62, 0xc1, 0x08, 0x35, 0xa1, 0xd2, - 0x24, 0xd1, 0x26, 0x99, 0xac, 0x16, 0xe1, 0xf2, 0x5f, 0xa6, 0xa4, 0x34, 0xc3, 0x1a, 0x35, 0xae, - 0x58, 0x1b, 0xe6, 0x5c, 0xd0, 0x6b, 0x50, 0x8d, 0x89, 0x4f, 0x5c, 0x6a, 0x1e, 0xd5, 0x18, 0xc7, - 0xe7, 0xfb, 0x34, 0x15, 0xa9, 0x5d, 0x52, 0x17, 0x8f, 0xf2, 0x05, 0x26, 0xff, 0x61, 0x45, 0x92, - 0x0e, 0x60, 0xcb, 0x6f, 0x6f, 0x7a, 0xc1, 0x24, 0x14, 0x31, 0x80, 0xab, 0x8c, 0x56, 0x66, 0x00, - 0x79, 0x23, 0x16, 0x8c, 0xec, 0xff, 0x66, 0x01, 0x4a, 0x0b, 0xb5, 0xfb, 0x60, 0x13, 0xbf, 0x91, - 0xb6, 0x89, 0x97, 0x8a, 0x34, 0x5a, 0x7a, 0x98, 0xc5, 0xbf, 0x50, 0x83, 0x8c, 0x3a, 0xb8, 0x46, - 0xe2, 0x84, 0x34, 0xde, 0x15, 0xe1, 0xef, 0x8a, 0xf0, 0x77, 0x45, 0xb8, 0x12, 0xe1, 0xeb, 0x19, - 0x11, 0xfe, 0x41, 0x63, 0xd5, 0xeb, 0xd8, 0x83, 0xd7, 0x55, 0x70, 0x82, 0xd9, 0x03, 0x03, 0x81, - 0x4a, 0x82, 0x2b, 0xf5, 0x95, 0x6b, 0xb9, 0x32, 0xfb, 0xf5, 0xb4, 0xcc, 0x3e, 0x2a, 0x8b, 0xbf, - 0x09, 0x52, 0xfa, 0x37, 0x2c, 0x78, 0x6f, 0x5a, 0x7a, 0xc9, 0x99, 0xb3, 0xb8, 0x19, 0x84, 0x11, - 0x59, 0xf0, 0x36, 0x36, 0x48, 0x44, 0x02, 0x97, 0xc4, 0xca, 0xb7, 0x63, 0xf5, 0xf2, 0xed, 0xa0, - 0x17, 0x60, 0xe4, 0x56, 0x1c, 0x06, 0xab, 0xa1, 0x17, 0x08, 0x11, 0x44, 0x77, 0x1c, 0x27, 0xee, - 0xec, 0x4d, 0x8d, 0xd0, 0x11, 0x95, 0xed, 0x38, 0x85, 0x85, 0xe6, 0x61, 0xe2, 0xd6, 0x1b, 0xab, - 0x4e, 0x62, 0x78, 0x13, 0xe4, 0xbe, 0x9f, 0x9d, 0x47, 0x5d, 0x79, 0x25, 0x03, 0xc4, 0xdd, 0xf8, - 0xf6, 0xdf, 0x2b, 0xc1, 0x99, 0xcc, 0x8b, 0x84, 0xbe, 0x1f, 0xb6, 0x13, 0xba, 0x27, 0x42, 0x3f, - 0x61, 0xc1, 0x89, 0x66, 0xda, 0x61, 0x11, 0x0b, 0x77, 0xf7, 0x77, 0x16, 0xa6, 0x23, 0x32, 0x1e, - 0x91, 0xb9, 0x49, 0x31, 0x42, 0x27, 0x32, 0x80, 0x18, 0x77, 0xf5, 0x05, 0xbd, 0x06, 0xb5, 0xa6, - 0xb3, 0x7b, 0xbd, 0xd5, 0x70, 0x12, 0xb9, 0x1d, 0xed, 0xed, 0x45, 0x68, 0x27, 0x9e, 0x3f, 0xcd, - 0xa3, 0x5a, 0xa6, 0x17, 0x83, 0x64, 0x25, 0xaa, 0x27, 0x91, 0x17, 0x6c, 0x72, 0x27, 0xe7, 0xb2, - 0x24, 0x83, 0x35, 0x45, 0xfb, 0xc7, 0xad, 0xac, 0x92, 0x52, 0xa3, 0x13, 0x39, 0x09, 0xd9, 0xec, - 0xa0, 0xb7, 0xa0, 0x42, 0xf7, 0x8d, 0x72, 0x54, 0x6e, 0x16, 0xa9, 0x39, 0x8d, 0x2f, 0xa1, 0x95, - 0x28, 0xfd, 0x17, 0x63, 0xce, 0xd4, 0xfe, 0x89, 0x5a, 0xd6, 0x58, 0x60, 0x67, 0xf3, 0xe7, 0x01, - 0x36, 0xc3, 0x35, 0xd2, 0x6c, 0xf9, 0x74, 0x58, 0x2c, 0x76, 0xc0, 0xa3, 0x5c, 0x25, 0x97, 0x14, - 0x04, 0x1b, 0x58, 0xe8, 0x07, 0x2d, 0x80, 0x4d, 0x39, 0xe7, 0xa5, 0x21, 0x70, 0xbd, 0xc8, 0xd7, - 0xd1, 0x2b, 0x4a, 0xf7, 0x45, 0x31, 0xc4, 0x06, 0x73, 0xf4, 0x7d, 0x16, 0x54, 0x13, 0xd9, 0x7d, - 0xae, 0x1a, 0xd7, 0x8a, 0xec, 0x89, 0x7c, 0x69, 0x6d, 0x13, 0xa9, 0x21, 0x51, 0x7c, 0xd1, 0xf7, - 0x5b, 0x00, 0x71, 0x27, 0x70, 0x57, 0x43, 0xdf, 0x73, 0x3b, 0x42, 0x63, 0xde, 0x28, 0xd4, 0x9d, - 0xa3, 0xa8, 0xcf, 0x8d, 0xd1, 0xd1, 0xd0, 0xff, 0xb1, 0xc1, 0x19, 0x7d, 0x0c, 0xaa, 0xb1, 0x98, - 0x6e, 0x42, 0x47, 0xae, 0x15, 0xeb, 0x54, 0xe2, 0xb4, 0x85, 0x78, 0x15, 0xff, 0xb0, 0xe2, 0x89, - 0x7e, 0xd4, 0x82, 0xf1, 0x56, 0xda, 0x4d, 0x28, 0xd4, 0x61, 0x71, 0x32, 0x20, 0xe3, 0x86, 0xe4, - 0xde, 0x96, 0x4c, 0x23, 0xce, 0xf6, 0x82, 0x4a, 0x40, 0x3d, 0x83, 0x57, 0x5a, 0xdc, 0x65, 0x39, - 0xa4, 0x25, 0xe0, 0xa5, 0x2c, 0x10, 0x77, 0xe3, 0xa3, 0x55, 0x38, 0x45, 0x7b, 0xd7, 0xe1, 0xe6, - 0xa7, 0x54, 0x2f, 0x31, 0x53, 0x86, 0xd5, 0xb9, 0xc7, 0xc5, 0x0c, 0x61, 0x67, 0x1d, 0x59, 0x1c, - 0x9c, 0xfb, 0x24, 0xfa, 0x6d, 0x0b, 0x1e, 0xf7, 0x98, 0x1a, 0x30, 0x1d, 0xf6, 0x5a, 0x23, 0x88, - 0x83, 0x76, 0x52, 0xa8, 0xac, 0xe8, 0xa5, 0x7e, 0xe6, 0xbe, 0x5e, 0xbc, 0xc1, 0xe3, 0x8b, 0xfb, - 0x74, 0x09, 0xef, 0xdb, 0x61, 0xf4, 0xcd, 0x30, 0x2a, 0xd7, 0xc5, 0x2a, 0x15, 0xc1, 0x4c, 0xd1, - 0xd6, 0xe6, 0x26, 0xee, 0xec, 0x4d, 0x8d, 0xae, 0x99, 0x00, 0x9c, 0xc6, 0xb3, 0xff, 0x55, 0x39, - 0x75, 0x4a, 0xa4, 0x7c, 0x98, 0x4c, 0xdc, 0xb8, 0xd2, 0xff, 0x23, 0xa5, 0x67, 0xa1, 0xe2, 0x46, - 0x79, 0x97, 0xb4, 0xb8, 0x51, 0x4d, 0x31, 0x36, 0x98, 0x53, 0xa3, 0x74, 0xc2, 0xc9, 0x7a, 0x4a, - 0x85, 0x04, 0x7c, 0xad, 0xc8, 0x2e, 0x75, 0x9f, 0xe9, 0x9d, 0x11, 0x5d, 0x9b, 0xe8, 0x02, 0xe1, - 0xee, 0x2e, 0xa1, 0xef, 0x81, 0x5a, 0xa4, 0x22, 0x5b, 0xca, 0x45, 0x6c, 0xd5, 0xe4, 0xb4, 0x11, - 0xdd, 0x51, 0x07, 0x40, 0x3a, 0x86, 0x45, 0x73, 0xb4, 0x3f, 0x53, 0x4a, 0x1d, 0x8c, 0x19, 0xb2, - 0xa3, 0x8f, 0x43, 0xbf, 0x2f, 0x58, 0x30, 0x1c, 0x85, 0xbe, 0xef, 0x05, 0x9b, 0x54, 0xce, 0x09, - 0x65, 0xfd, 0xe1, 0x63, 0xd1, 0x97, 0x42, 0xa0, 0x31, 0xcb, 0x1a, 0x6b, 0x9e, 0xd8, 0xec, 0x00, - 0x7a, 0x19, 0x46, 0x1b, 0xc4, 0x27, 0xf4, 0xd9, 0x95, 0x88, 0xee, 0x89, 0xb8, 0x93, 0x59, 0x45, - 0x8a, 0x2c, 0x98, 0x40, 0x9c, 0xc6, 0xb5, 0xff, 0xc4, 0x82, 0xc9, 0x5e, 0xc2, 0x1c, 0x11, 0x78, - 0x4c, 0x4a, 0x2a, 0x35, 0x8e, 0x2b, 0x81, 0xa4, 0x27, 0xf4, 0xf1, 0x53, 0x82, 0xcf, 0x63, 0xab, - 0xbd, 0x51, 0xf1, 0x7e, 0x74, 0xd0, 0xab, 0x70, 0xc2, 0x18, 0x94, 0x58, 0x8d, 0x6a, 0x6d, 0x6e, - 0x9a, 0x5a, 0x4f, 0xb3, 0x19, 0xd8, 0xdd, 0xbd, 0xa9, 0x47, 0xb2, 0x6d, 0x42, 0xdb, 0x74, 0xd1, - 0xb1, 0x7f, 0xba, 0xeb, 0x53, 0x2b, 0x43, 0xe1, 0x1d, 0xab, 0xcb, 0x15, 0xf1, 0x9d, 0xc7, 0xa1, - 0x9c, 0x99, 0xd3, 0x42, 0xc5, 0x70, 0xf4, 0xc6, 0x79, 0x80, 0x67, 0xfe, 0xf6, 0xbf, 0x19, 0x80, - 0x7d, 0x7a, 0xd6, 0x87, 0xe5, 0x7f, 0xe8, 0x43, 0xd8, 0xcf, 0x59, 0xea, 0xb4, 0x8d, 0x0b, 0x80, - 0xc6, 0x71, 0x8d, 0x3d, 0xdf, 0x7c, 0xc5, 0x3c, 0xee, 0x44, 0xb9, 0xe0, 0xd3, 0xe7, 0x7a, 0xe8, - 0x4b, 0x56, 0xfa, 0xbc, 0x90, 0x47, 0x44, 0x7a, 0xc7, 0xd6, 0x27, 0xe3, 0x10, 0x92, 0x77, 0x4c, - 0x1f, 0x5d, 0xf5, 0x3a, 0x9e, 0x9c, 0x06, 0xd8, 0xf0, 0x02, 0xc7, 0xf7, 0xde, 0xa4, 0x5b, 0xab, - 0x0a, 0xb3, 0x0e, 0x98, 0xb9, 0x75, 0x51, 0xb5, 0x62, 0x03, 0xe3, 0xec, 0xff, 0x0f, 0xc3, 0xc6, - 0x9b, 0xe7, 0x84, 0xcb, 0x9c, 0x32, 0xc3, 0x65, 0x6a, 0x46, 0x94, 0xcb, 0xd9, 0x0f, 0xc2, 0x89, - 0x6c, 0x07, 0x0f, 0xf3, 0xbc, 0xfd, 0xbf, 0x87, 0xb2, 0x07, 0x78, 0x6b, 0x24, 0x6a, 0xd2, 0xae, - 0xbd, 0xeb, 0x15, 0x7b, 0xd7, 0x2b, 0xf6, 0xae, 0x57, 0xcc, 0x3c, 0xd8, 0x10, 0x1e, 0x9f, 0xa1, - 0xfb, 0xe4, 0xf1, 0x49, 0xf9, 0xb0, 0xaa, 0x85, 0xfb, 0xb0, 0xec, 0x4f, 0x77, 0xb9, 0xfd, 0xd7, - 0x22, 0x42, 0x50, 0x08, 0x95, 0x20, 0x6c, 0x10, 0x69, 0x20, 0x5f, 0x29, 0xc6, 0xda, 0xbb, 0x16, - 0x36, 0x8c, 0x58, 0x73, 0xfa, 0x2f, 0xc6, 0x9c, 0x8f, 0xfd, 0xa9, 0x41, 0x48, 0xd9, 0xa2, 0xfc, - 0xbb, 0x7f, 0x23, 0x0c, 0x45, 0xa4, 0x15, 0x5e, 0xc7, 0x4b, 0x42, 0x97, 0xe9, 0x54, 0x1d, 0xde, - 0x8c, 0x25, 0x9c, 0xea, 0xbc, 0x96, 0x93, 0x6c, 0x09, 0x65, 0xa6, 0x74, 0xde, 0xaa, 0x93, 0x6c, - 0x61, 0x06, 0x41, 0x1f, 0x84, 0xb1, 0x24, 0x75, 0x8e, 0x2e, 0xce, 0x8b, 0x1f, 0x11, 0xb8, 0x63, - 0xe9, 0x53, 0x76, 0x9c, 0xc1, 0x46, 0x6f, 0xc0, 0xc0, 0x16, 0xf1, 0x9b, 0xe2, 0xd3, 0xd7, 0x8b, - 0xd3, 0x35, 0xec, 0x5d, 0x2f, 0x13, 0xbf, 0xc9, 0x25, 0x21, 0xfd, 0x85, 0x19, 0x2b, 0x3a, 0xef, - 0x6b, 0xdb, 0xed, 0x38, 0x09, 0x9b, 0xde, 0x9b, 0xd2, 0x4d, 0xfa, 0x9d, 0x05, 0x33, 0xbe, 0x2a, - 0xe9, 0x73, 0x7f, 0x94, 0xfa, 0x8b, 0x35, 0x67, 0xd6, 0x8f, 0x86, 0x17, 0xb1, 0x29, 0xd3, 0x11, - 0xde, 0xce, 0xa2, 0xfb, 0xb1, 0x20, 0xe9, 0xf3, 0x7e, 0xa8, 0xbf, 0x58, 0x73, 0x46, 0x1d, 0xb5, - 0xfe, 0x86, 0x59, 0x1f, 0xae, 0x17, 0xdc, 0x07, 0xbe, 0xf6, 0x72, 0xd7, 0xe1, 0x53, 0x50, 0x71, - 0xb7, 0x9c, 0x28, 0x99, 0x1c, 0x61, 0x93, 0x46, 0xcd, 0xe2, 0x79, 0xda, 0x88, 0x39, 0x0c, 0x3d, - 0x01, 0xe5, 0x88, 0x6c, 0xb0, 0xd0, 0x66, 0x23, 0xa8, 0x0a, 0x93, 0x0d, 0x4c, 0xdb, 0x95, 0x5d, - 0x36, 0xd6, 0x33, 0xda, 0xee, 0x27, 0x4b, 0x69, 0xc3, 0x2e, 0x3d, 0x32, 0x7c, 0x3d, 0xb8, 0xed, - 0x28, 0x96, 0xde, 0x35, 0x63, 0x3d, 0xb0, 0x66, 0x2c, 0xe1, 0xe8, 0x13, 0x16, 0x0c, 0xdd, 0x8a, - 0xc3, 0x20, 0x20, 0x89, 0x50, 0xa2, 0x37, 0x0a, 0x1e, 0xac, 0x2b, 0x9c, 0xba, 0xee, 0x83, 0x68, - 0xc0, 0x92, 0x2f, 0xed, 0x2e, 0xd9, 0x75, 0xfd, 0x76, 0xa3, 0x2b, 0x92, 0xe6, 0x02, 0x6f, 0xc6, - 0x12, 0x4e, 0x51, 0xbd, 0x80, 0xa3, 0x0e, 0xa4, 0x51, 0x17, 0x03, 0x81, 0x2a, 0xe0, 0xf6, 0xcf, - 0x55, 0xe1, 0x74, 0xee, 0xf2, 0xa1, 0x26, 0x17, 0x33, 0x6a, 0x2e, 0x7a, 0x3e, 0x91, 0x31, 0x64, - 0xcc, 0xe4, 0xba, 0xa1, 0x5a, 0xb1, 0x81, 0x81, 0xbe, 0x17, 0xa0, 0xe5, 0x44, 0x4e, 0x93, 0x28, - 0xef, 0xf7, 0x91, 0x2d, 0x1b, 0xda, 0x8f, 0x55, 0x49, 0x53, 0x7b, 0x00, 0x54, 0x53, 0x8c, 0x0d, - 0x96, 0xe8, 0x45, 0x18, 0x8e, 0x88, 0x4f, 0x9c, 0x98, 0xc5, 0xce, 0x67, 0x13, 0x81, 0xb0, 0x06, - 0x61, 0x13, 0x0f, 0x3d, 0xad, 0xc2, 0xed, 0x32, 0x61, 0x47, 0xe9, 0x90, 0x3b, 0xf4, 0x45, 0x0b, - 0xc6, 0x36, 0x3c, 0x9f, 0x68, 0xee, 0x22, 0x6d, 0x67, 0xe5, 0xe8, 0x2f, 0x79, 0xd1, 0xa4, 0xab, - 0x65, 0x68, 0xaa, 0x39, 0xc6, 0x19, 0xf6, 0xf4, 0x33, 0xef, 0x90, 0x88, 0x09, 0xdf, 0xc1, 0xf4, - 0x67, 0xbe, 0xc1, 0x9b, 0xb1, 0x84, 0xa3, 0x59, 0x18, 0x6f, 0x39, 0x71, 0x3c, 0x1f, 0x91, 0x06, - 0x09, 0x12, 0xcf, 0xf1, 0x79, 0x52, 0x4d, 0x55, 0xc7, 0xa2, 0xaf, 0xa6, 0xc1, 0x38, 0x8b, 0x8f, - 0x3e, 0x04, 0x8f, 0x72, 0xf7, 0xd2, 0xb2, 0x17, 0xc7, 0x5e, 0xb0, 0xa9, 0xa7, 0x81, 0xf0, 0xb2, - 0x4d, 0x09, 0x52, 0x8f, 0x2e, 0xe6, 0xa3, 0xe1, 0x5e, 0xcf, 0xa3, 0x67, 0xa0, 0x1a, 0x6f, 0x7b, - 0xad, 0xf9, 0xa8, 0x11, 0xb3, 0xa3, 0xa5, 0xaa, 0xf6, 0xe9, 0xd6, 0x45, 0x3b, 0x56, 0x18, 0xc8, - 0x85, 0x11, 0xfe, 0x49, 0x78, 0xbc, 0xa0, 0x90, 0xa0, 0xcf, 0xf6, 0x54, 0xe4, 0x22, 0x7f, 0x76, - 0x1a, 0x3b, 0xb7, 0x2f, 0xc8, 0x83, 0x2e, 0x7e, 0x2e, 0x73, 0xc3, 0x20, 0x83, 0x53, 0x44, 0xd3, - 0x7b, 0xba, 0xe1, 0x3e, 0xf6, 0x74, 0x2f, 0xc2, 0xf0, 0x76, 0x7b, 0x9d, 0x88, 0x91, 0x17, 0x82, - 0x4d, 0xcd, 0xbe, 0xab, 0x1a, 0x84, 0x4d, 0x3c, 0x16, 0xaa, 0xd9, 0xf2, 0xc4, 0xbf, 0x78, 0x72, - 0xd4, 0x08, 0xd5, 0x5c, 0x5d, 0x94, 0xcd, 0xd8, 0xc4, 0xa1, 0x5d, 0xa3, 0x63, 0xb1, 0x46, 0x62, - 0x96, 0x89, 0x41, 0x87, 0x4b, 0x75, 0xad, 0x2e, 0x01, 0x58, 0xe3, 0xa0, 0x55, 0x38, 0x45, 0xff, - 0xd4, 0x59, 0xfe, 0xf0, 0x0d, 0xc7, 0xf7, 0x1a, 0x3c, 0x6e, 0x70, 0x3c, 0xed, 0x1c, 0xad, 0xe7, - 0xe0, 0xe0, 0xdc, 0x27, 0xed, 0x1f, 0x2b, 0xa5, 0x3d, 0x27, 0xa6, 0x08, 0x43, 0x31, 0x15, 0x54, - 0xc9, 0x0d, 0x27, 0x92, 0x06, 0xcf, 0x11, 0x33, 0xa3, 0x04, 0xdd, 0x1b, 0x4e, 0x64, 0x8a, 0x3c, - 0xc6, 0x00, 0x4b, 0x4e, 0xe8, 0x16, 0x0c, 0x24, 0xbe, 0x53, 0x50, 0x2a, 0xa5, 0xc1, 0x51, 0x7b, - 0xc1, 0x96, 0x66, 0x63, 0xcc, 0x78, 0xa0, 0xc7, 0xe9, 0xee, 0x6d, 0x5d, 0x1e, 0xd3, 0x89, 0x0d, - 0xd7, 0x7a, 0x8c, 0x59, 0xab, 0xfd, 0xb7, 0x47, 0x73, 0xb4, 0x8e, 0x32, 0x04, 0xd0, 0x79, 0x00, - 0x3a, 0x69, 0x56, 0x23, 0xb2, 0xe1, 0xed, 0x0a, 0x43, 0x4c, 0x49, 0xb6, 0x6b, 0x0a, 0x82, 0x0d, - 0x2c, 0xf9, 0x4c, 0xbd, 0xbd, 0x41, 0x9f, 0x29, 0x75, 0x3f, 0xc3, 0x21, 0xd8, 0xc0, 0x42, 0x2f, - 0xc0, 0xa0, 0xd7, 0x74, 0x36, 0x55, 0x14, 0xf1, 0xe3, 0x54, 0xa4, 0x2d, 0xb2, 0x96, 0xbb, 0x7b, - 0x53, 0x63, 0xaa, 0x43, 0xac, 0x09, 0x0b, 0x5c, 0xf4, 0xd3, 0x16, 0x8c, 0xb8, 0x61, 0xb3, 0x19, - 0x06, 0x7c, 0xfb, 0x2c, 0x7c, 0x01, 0xb7, 0x8e, 0xcb, 0x4c, 0x9a, 0x9e, 0x37, 0x98, 0x71, 0x67, - 0x80, 0xca, 0xf9, 0x34, 0x41, 0x38, 0xd5, 0x2b, 0x53, 0xf2, 0x55, 0x0e, 0x90, 0x7c, 0x3f, 0x6f, - 0xc1, 0x04, 0x7f, 0xd6, 0xd8, 0xd5, 0x8b, 0xf4, 0xc6, 0xf0, 0x98, 0x5f, 0xab, 0xcb, 0xd1, 0xa1, - 0x3c, 0xc5, 0x5d, 0x70, 0xdc, 0xdd, 0x49, 0x74, 0x09, 0x26, 0x36, 0xc2, 0xc8, 0x25, 0xe6, 0x40, - 0x08, 0xb1, 0xad, 0x08, 0x5d, 0xcc, 0x22, 0xe0, 0xee, 0x67, 0xd0, 0x0d, 0x78, 0xc4, 0x68, 0x34, - 0xc7, 0x81, 0x4b, 0xee, 0x27, 0x05, 0xb5, 0x47, 0x2e, 0xe6, 0x62, 0xe1, 0x1e, 0x4f, 0xa7, 0x85, - 0x64, 0xad, 0x0f, 0x21, 0xf9, 0x3a, 0x9c, 0x71, 0xbb, 0x47, 0x66, 0x27, 0x6e, 0xaf, 0xc7, 0x5c, - 0x8e, 0x57, 0xe7, 0xbe, 0x4e, 0x10, 0x38, 0x33, 0xdf, 0x0b, 0x11, 0xf7, 0xa6, 0x81, 0xde, 0x82, - 0x6a, 0x44, 0xd8, 0x57, 0x89, 0x45, 0xae, 0xdf, 0x11, 0xbd, 0x1d, 0xda, 0x82, 0xe7, 0x64, 0xb5, - 0x66, 0x12, 0x0d, 0x31, 0x56, 0x1c, 0xd1, 0x6d, 0x18, 0x6a, 0x39, 0x89, 0xbb, 0x25, 0x32, 0xfc, - 0x8e, 0xec, 0xd8, 0x57, 0xcc, 0xd9, 0x39, 0x8c, 0x51, 0x2f, 0x81, 0x33, 0xc1, 0x92, 0x1b, 0xb5, - 0xd5, 0xdc, 0xb0, 0xd9, 0x0a, 0x03, 0x12, 0x24, 0x52, 0x89, 0x8c, 0xf1, 0xc3, 0x12, 0xd9, 0x8a, - 0x0d, 0x8c, 0x2e, 0x5d, 0xae, 0xd1, 0x26, 0x27, 0xf6, 0xd1, 0xe5, 0x06, 0xb5, 0x5e, 0xcf, 0x53, - 0x65, 0xc3, 0xdc, 0x8a, 0x37, 0xbd, 0x64, 0x2b, 0x6c, 0x27, 0x72, 0x97, 0x2c, 0x14, 0x95, 0x52, - 0x36, 0x4b, 0x39, 0x38, 0x38, 0xf7, 0xc9, 0xac, 0x66, 0x1d, 0xbf, 0x37, 0xcd, 0x7a, 0xa2, 0x0f, - 0xcd, 0x5a, 0x87, 0xd3, 0xac, 0x07, 0xc2, 0x4a, 0x96, 0x4e, 0xcb, 0x78, 0x12, 0xb1, 0xce, 0xab, - 0xe4, 0x98, 0xa5, 0x3c, 0x24, 0x9c, 0xff, 0xec, 0xd9, 0x6f, 0x87, 0x89, 0x2e, 0x21, 0x77, 0x28, - 0x87, 0xe4, 0x02, 0x3c, 0x92, 0x2f, 0x4e, 0x0e, 0xe5, 0x96, 0xfc, 0xb9, 0x4c, 0x50, 0xbb, 0xb1, - 0x45, 0xeb, 0xc3, 0xc5, 0xed, 0x40, 0x99, 0x04, 0x3b, 0x42, 0xbb, 0x5e, 0x3c, 0xda, 0xac, 0xbe, - 0x10, 0xec, 0x70, 0x69, 0xc8, 0xfc, 0x78, 0x17, 0x82, 0x1d, 0x4c, 0x69, 0xa3, 0x1f, 0xb6, 0x52, - 0x1b, 0x08, 0xee, 0x18, 0xff, 0xc8, 0xb1, 0xec, 0x49, 0xfb, 0xde, 0x53, 0xd8, 0xff, 0xb6, 0x04, - 0xe7, 0x0e, 0x22, 0xd2, 0xc7, 0xf0, 0x3d, 0x05, 0x83, 0x31, 0x0b, 0x53, 0x11, 0xea, 0x6a, 0x98, - 0xae, 0x62, 0x1e, 0xb8, 0xf2, 0x3a, 0x16, 0x20, 0xe4, 0x43, 0xb9, 0xe9, 0xb4, 0x84, 0xbf, 0x74, - 0xf1, 0xa8, 0xc9, 0x7f, 0xf4, 0xbf, 0xe3, 0x2f, 0x3b, 0x2d, 0x3e, 0xe7, 0x8d, 0x06, 0x4c, 0xd9, - 0xa0, 0x04, 0x2a, 0x4e, 0x14, 0x39, 0x32, 0x26, 0xe2, 0x6a, 0x31, 0xfc, 0x66, 0x29, 0x49, 0x7e, - 0xa4, 0x9c, 0x6a, 0xc2, 0x9c, 0x99, 0xfd, 0xa3, 0xd5, 0x54, 0xa6, 0x18, 0x0b, 0x74, 0x89, 0x61, - 0x50, 0xb8, 0x49, 0xad, 0xa2, 0x73, 0x2e, 0x79, 0x2a, 0x36, 0xf3, 0x40, 0x88, 0x82, 0x16, 0x82, - 0x15, 0xfa, 0xac, 0xc5, 0xca, 0x46, 0xc8, 0xf4, 0x3b, 0xb1, 0xab, 0x3f, 0x9e, 0x2a, 0x16, 0x66, - 0x31, 0x0a, 0xd9, 0x88, 0x4d, 0xee, 0xa2, 0x34, 0x0e, 0xdb, 0xcd, 0x74, 0x97, 0xc6, 0x61, 0xbb, - 0x13, 0x09, 0x47, 0xbb, 0x39, 0x01, 0x2d, 0x05, 0x94, 0x1e, 0xe8, 0x23, 0x84, 0xe5, 0x4b, 0x16, - 0x4c, 0x78, 0xd9, 0xc8, 0x04, 0xb1, 0x07, 0xbe, 0x59, 0x8c, 0x4f, 0xb3, 0x3b, 0xf0, 0x41, 0x19, - 0x3a, 0x5d, 0x20, 0xdc, 0xdd, 0x19, 0xd4, 0x80, 0x01, 0x2f, 0xd8, 0x08, 0x85, 0x79, 0x37, 0x77, - 0xb4, 0x4e, 0x2d, 0x06, 0x1b, 0xa1, 0x5e, 0xcd, 0xf4, 0x1f, 0x66, 0xd4, 0xd1, 0x12, 0x9c, 0x92, - 0xc9, 0x42, 0x97, 0xbd, 0x38, 0x09, 0xa3, 0xce, 0x92, 0xd7, 0xf4, 0x12, 0x66, 0x9a, 0x95, 0xe7, - 0x26, 0xa9, 0x7a, 0xc3, 0x39, 0x70, 0x9c, 0xfb, 0x14, 0x7a, 0x13, 0x86, 0x64, 0x34, 0x40, 0xb5, - 0x08, 0x7f, 0x42, 0xf7, 0xfc, 0x57, 0x93, 0xa9, 0x2e, 0xc2, 0x01, 0x24, 0x43, 0xf4, 0x19, 0x0b, - 0xc6, 0xf8, 0xef, 0xcb, 0x9d, 0x06, 0xcf, 0x4f, 0xac, 0x15, 0x11, 0xf2, 0x5f, 0x4f, 0xd1, 0x9c, - 0x43, 0x77, 0xf6, 0xa6, 0xc6, 0xd2, 0x6d, 0x38, 0xc3, 0xd7, 0xfe, 0x27, 0x23, 0xd0, 0x1d, 0x3f, - 0x91, 0x0e, 0x96, 0xb0, 0xee, 0x77, 0xb0, 0x04, 0xdd, 0x55, 0xc6, 0x3a, 0xce, 0xa1, 0x80, 0x65, - 0x26, 0xb8, 0xea, 0x63, 0xe8, 0x4e, 0xe0, 0x62, 0xc6, 0x03, 0xb5, 0x61, 0x90, 0x57, 0xa6, 0x12, - 0x1a, 0xe0, 0xe8, 0x27, 0xdf, 0x66, 0x85, 0x2b, 0xed, 0xd6, 0xe2, 0xad, 0x58, 0x30, 0x43, 0xbb, - 0x30, 0xb4, 0xc5, 0xa7, 0xa3, 0xd8, 0xeb, 0x2d, 0x1f, 0x75, 0x7c, 0x53, 0x73, 0x5c, 0x4f, 0x3e, - 0xd1, 0x80, 0x25, 0x3b, 0x16, 0x9b, 0x67, 0x44, 0x0f, 0x71, 0x41, 0x52, 0x5c, 0xaa, 0x65, 0xff, - 0xa1, 0x43, 0x1f, 0x85, 0x91, 0x88, 0xb8, 0x61, 0xe0, 0x7a, 0x3e, 0x69, 0xcc, 0xca, 0x03, 0xb1, - 0xc3, 0x64, 0xd8, 0x31, 0x6f, 0x12, 0x36, 0x68, 0xe0, 0x14, 0x45, 0xb6, 0xce, 0x54, 0xd6, 0x3d, - 0xfd, 0x20, 0x44, 0x1c, 0x7c, 0x2c, 0x15, 0x94, 0xe3, 0xcf, 0x68, 0xf2, 0x75, 0x96, 0x6e, 0xc3, - 0x19, 0xbe, 0xe8, 0x55, 0x80, 0x70, 0x9d, 0x07, 0xe0, 0xcd, 0x26, 0xe2, 0x14, 0xe4, 0x30, 0xaf, - 0x3a, 0xc6, 0x33, 0x75, 0x25, 0x05, 0x6c, 0x50, 0x43, 0x57, 0x01, 0xf8, 0xca, 0x59, 0xeb, 0xb4, - 0xe4, 0x86, 0x50, 0xa6, 0x48, 0x42, 0x5d, 0x41, 0xee, 0xee, 0x4d, 0x75, 0xfb, 0x9c, 0x59, 0x94, - 0x91, 0xf1, 0x38, 0xfa, 0x6e, 0x18, 0x8a, 0xdb, 0xcd, 0xa6, 0xa3, 0xce, 0x48, 0x0a, 0xcc, 0xfd, - 0xe5, 0x74, 0x0d, 0xc1, 0xc8, 0x1b, 0xb0, 0xe4, 0x88, 0x6e, 0x51, 0x11, 0x2f, 0x24, 0x14, 0x5f, - 0x45, 0xdc, 0x42, 0xe1, 0x9e, 0xc0, 0x0f, 0xc8, 0x5d, 0x0c, 0xce, 0xc1, 0xb9, 0xbb, 0x37, 0xf5, - 0x48, 0xba, 0x7d, 0x29, 0x14, 0xd9, 0xb8, 0xb9, 0x34, 0xd1, 0x15, 0x59, 0x84, 0x8b, 0xbe, 0xb6, - 0xac, 0x0d, 0xf3, 0x3e, 0x5d, 0x84, 0x8b, 0x35, 0xf7, 0x1e, 0x33, 0xf3, 0x61, 0xb4, 0x0c, 0x27, - 0xdd, 0x30, 0x48, 0xa2, 0xd0, 0xf7, 0x79, 0x81, 0x3e, 0xbe, 0x37, 0xe7, 0x67, 0x28, 0x8f, 0x89, - 0x6e, 0x9f, 0x9c, 0xef, 0x46, 0xc1, 0x79, 0xcf, 0x51, 0x9b, 0x3c, 0xab, 0x1f, 0xc6, 0x0a, 0x39, - 0x5e, 0x4f, 0xd1, 0x14, 0x12, 0x4a, 0xb9, 0xbd, 0x0f, 0xd0, 0x14, 0x41, 0xfa, 0x90, 0x55, 0x7c, - 0xb1, 0x17, 0x60, 0x84, 0xec, 0x26, 0x24, 0x0a, 0x1c, 0xff, 0x3a, 0x5e, 0x92, 0x07, 0x16, 0x6c, - 0x61, 0x5e, 0x30, 0xda, 0x71, 0x0a, 0x0b, 0xd9, 0xca, 0x4b, 0x66, 0xa4, 0xbd, 0x73, 0x2f, 0x99, - 0xf4, 0x89, 0xd9, 0x3f, 0x5b, 0x4e, 0xd9, 0xac, 0x0f, 0xe4, 0x48, 0x97, 0xd5, 0x57, 0x92, 0x85, - 0xa8, 0x18, 0x40, 0xec, 0xc5, 0x8a, 0xe4, 0xac, 0xa2, 0xe6, 0x56, 0x4c, 0x46, 0x38, 0xcd, 0x17, - 0x6d, 0x43, 0x65, 0x2b, 0x8c, 0x13, 0xb9, 0x43, 0x3b, 0xe2, 0x66, 0xf0, 0x72, 0x18, 0x27, 0xcc, - 0xd0, 0x52, 0xaf, 0x4d, 0x5b, 0x62, 0xcc, 0x79, 0xd0, 0xbd, 0x7f, 0xbc, 0xe5, 0x44, 0x8d, 0x78, - 0x9e, 0x15, 0xa9, 0x18, 0x60, 0x16, 0x96, 0xb2, 0xa7, 0xeb, 0x1a, 0x84, 0x4d, 0x3c, 0xfb, 0x4f, - 0xad, 0xd4, 0xa9, 0xd6, 0x4d, 0x96, 0x71, 0xb0, 0x43, 0x02, 0x2a, 0xa2, 0xcc, 0x18, 0xc7, 0x6f, - 0xce, 0xe4, 0x6f, 0xbf, 0xb7, 0x57, 0x2d, 0xcd, 0xdb, 0x94, 0xc2, 0x34, 0x23, 0x61, 0x84, 0x43, - 0x7e, 0xdc, 0x4a, 0x27, 0xe2, 0x97, 0x8a, 0xd8, 0xba, 0x99, 0xc5, 0x28, 0x0e, 0xcc, 0xe9, 0xb7, - 0x7f, 0xd8, 0x82, 0xa1, 0x39, 0xc7, 0xdd, 0x0e, 0x37, 0x36, 0xd0, 0x33, 0x50, 0x6d, 0xb4, 0x23, - 0xb3, 0x26, 0x80, 0x72, 0x56, 0x2d, 0x88, 0x76, 0xac, 0x30, 0xe8, 0xd4, 0xdf, 0x70, 0x5c, 0x59, - 0x92, 0xa2, 0xcc, 0xa7, 0xfe, 0x45, 0xd6, 0x82, 0x05, 0x84, 0x0e, 0x7f, 0xd3, 0xd9, 0x95, 0x0f, - 0x67, 0x8f, 0xd4, 0x96, 0x35, 0x08, 0x9b, 0x78, 0xf6, 0xaf, 0x5b, 0x30, 0x39, 0xe7, 0xc4, 0x9e, - 0x3b, 0xdb, 0x4e, 0xb6, 0xe6, 0xbc, 0x64, 0xbd, 0xed, 0x6e, 0x93, 0x84, 0x97, 0x2e, 0xa1, 0xbd, - 0x6c, 0xc7, 0x74, 0x05, 0xaa, 0x1d, 0xb3, 0xea, 0xe5, 0x75, 0xd1, 0x8e, 0x15, 0x06, 0x7a, 0x13, - 0x86, 0x5b, 0x4e, 0x1c, 0xdf, 0x0e, 0xa3, 0x06, 0x26, 0x1b, 0xc5, 0x14, 0x37, 0xaa, 0x13, 0x37, - 0x22, 0x09, 0x26, 0x1b, 0x22, 0x40, 0x45, 0xd3, 0xc7, 0x26, 0x33, 0xfb, 0x07, 0x2d, 0x38, 0x35, - 0x47, 0x9c, 0x88, 0x44, 0xac, 0x16, 0x92, 0x7a, 0x11, 0xf4, 0x06, 0x54, 0x13, 0xda, 0x42, 0x7b, - 0x64, 0x15, 0xdb, 0x23, 0x16, 0x5a, 0xb2, 0x26, 0x88, 0x63, 0xc5, 0xc6, 0xfe, 0x82, 0x05, 0x67, - 0xf2, 0xfa, 0x32, 0xef, 0x87, 0xed, 0xc6, 0x83, 0xe8, 0xd0, 0xdf, 0xb5, 0x60, 0x84, 0x1d, 0xd7, - 0x2f, 0x90, 0xc4, 0xf1, 0xfc, 0xae, 0x3a, 0x8c, 0x56, 0x9f, 0x75, 0x18, 0xcf, 0xc1, 0xc0, 0x56, - 0xd8, 0x24, 0xd9, 0x50, 0x93, 0xcb, 0x61, 0x93, 0x60, 0x06, 0x41, 0xcf, 0xd1, 0x49, 0xe8, 0x05, - 0x89, 0x43, 0x97, 0xa3, 0x3c, 0xce, 0x18, 0xe7, 0x13, 0x50, 0x35, 0x63, 0x13, 0xc7, 0xfe, 0x95, - 0x1a, 0x0c, 0x89, 0xb8, 0xa8, 0xbe, 0x4b, 0xe9, 0x48, 0x2f, 0x4e, 0xa9, 0xa7, 0x17, 0x27, 0x86, - 0x41, 0x97, 0x15, 0xcb, 0x15, 0x16, 0xfa, 0xd5, 0x42, 0x02, 0xe9, 0x78, 0xfd, 0x5d, 0xdd, 0x2d, - 0xfe, 0x1f, 0x0b, 0x56, 0xe8, 0x6d, 0x0b, 0xc6, 0xdd, 0x30, 0x08, 0x88, 0xab, 0x6d, 0xc7, 0x81, - 0x22, 0x36, 0x08, 0xf3, 0x69, 0xa2, 0xfa, 0x24, 0x38, 0x03, 0xc0, 0x59, 0xf6, 0xe8, 0x65, 0x18, - 0xe5, 0x63, 0x76, 0x23, 0x75, 0x06, 0xa3, 0xcb, 0xf3, 0x99, 0x40, 0x9c, 0xc6, 0x45, 0xd3, 0xfc, - 0x2c, 0x4b, 0x14, 0xc2, 0x1b, 0xd4, 0xae, 0x6a, 0xa3, 0x04, 0x9e, 0x81, 0x81, 0x22, 0x40, 0x11, - 0xd9, 0x88, 0x48, 0xbc, 0x25, 0xe2, 0xc6, 0x98, 0xdd, 0x3a, 0x74, 0x6f, 0x45, 0x30, 0x70, 0x17, - 0x25, 0x9c, 0x43, 0x1d, 0x6d, 0x0b, 0x37, 0x42, 0xb5, 0x08, 0x79, 0x2e, 0x3e, 0x73, 0x4f, 0x6f, - 0xc2, 0x14, 0x54, 0x98, 0xea, 0x62, 0xf6, 0x72, 0x99, 0x27, 0x5e, 0x32, 0xc5, 0x86, 0x79, 0x3b, - 0x5a, 0x80, 0x13, 0x99, 0xe2, 0x82, 0xb1, 0x38, 0x2b, 0x51, 0x49, 0x76, 0x99, 0xb2, 0x84, 0x31, - 0xee, 0x7a, 0xc2, 0x74, 0x31, 0x0d, 0x1f, 0xe0, 0x62, 0xea, 0xa8, 0xe8, 0x64, 0x7e, 0x8a, 0xf1, - 0x4a, 0x21, 0x03, 0xd0, 0x57, 0x28, 0xf2, 0xe7, 0x33, 0xa1, 0xc8, 0xa3, 0xac, 0x03, 0x37, 0x8a, - 0xe9, 0xc0, 0xe1, 0xe3, 0x8e, 0x1f, 0x64, 0x1c, 0xf1, 0xff, 0xb2, 0x40, 0x7e, 0xd7, 0x79, 0xc7, - 0xdd, 0x22, 0x74, 0xca, 0xa0, 0x0f, 0xc2, 0x98, 0xf2, 0x4e, 0x70, 0x93, 0xc8, 0x62, 0xb3, 0x46, - 0xd9, 0xce, 0x38, 0x05, 0xc5, 0x19, 0x6c, 0x34, 0x03, 0x35, 0x3a, 0x4e, 0xfc, 0x51, 0xae, 0xf7, - 0x95, 0x07, 0x64, 0x76, 0x75, 0x51, 0x3c, 0xa5, 0x71, 0x50, 0x08, 0x13, 0xbe, 0x13, 0x27, 0xac, - 0x07, 0xf5, 0x4e, 0xe0, 0xde, 0x63, 0x09, 0x1a, 0x96, 0xc9, 0xb5, 0x94, 0x25, 0x84, 0xbb, 0x69, - 0xdb, 0xff, 0xbe, 0x02, 0xa3, 0x29, 0xc9, 0x78, 0x48, 0x83, 0xe1, 0x19, 0xa8, 0x4a, 0x1d, 0x9e, - 0xad, 0xb5, 0xa5, 0x14, 0xbd, 0xc2, 0xa0, 0x4a, 0x6b, 0x5d, 0x6b, 0xd5, 0xac, 0x81, 0x63, 0x28, - 0x5c, 0x6c, 0xe2, 0x31, 0xa1, 0x9c, 0xf8, 0xf1, 0xbc, 0xef, 0x91, 0x20, 0xe1, 0xdd, 0x2c, 0x46, - 0x28, 0xaf, 0x2d, 0xd5, 0x4d, 0xa2, 0x5a, 0x28, 0x67, 0x00, 0x38, 0xcb, 0x1e, 0x7d, 0xca, 0x82, - 0x51, 0xe7, 0x76, 0xac, 0x2b, 0xba, 0x8b, 0xa0, 0xe3, 0x23, 0x2a, 0xa9, 0x54, 0x91, 0x78, 0xee, - 0xd8, 0x4f, 0x35, 0xe1, 0x34, 0x53, 0xf4, 0x8e, 0x05, 0x88, 0xec, 0x12, 0x57, 0x86, 0x45, 0x8b, - 0xbe, 0x0c, 0x16, 0xb1, 0x83, 0xbf, 0xd0, 0x45, 0x97, 0x4b, 0xf5, 0xee, 0x76, 0x9c, 0xd3, 0x07, - 0x74, 0x05, 0x50, 0xc3, 0x8b, 0x9d, 0x75, 0x9f, 0xcc, 0x87, 0x4d, 0x99, 0x7d, 0x2c, 0xce, 0xd3, - 0xcf, 0x8a, 0x71, 0x46, 0x0b, 0x5d, 0x18, 0x38, 0xe7, 0x29, 0x36, 0xcb, 0xa2, 0x70, 0xb7, 0x73, - 0x3d, 0xf2, 0x99, 0x96, 0x30, 0x67, 0x99, 0x68, 0xc7, 0x0a, 0xc3, 0xfe, 0xb3, 0xb2, 0x5a, 0xca, - 0x3a, 0x07, 0xc0, 0x31, 0x62, 0x91, 0xad, 0x7b, 0x8f, 0x45, 0xd6, 0x91, 0x52, 0xdd, 0x39, 0xf5, - 0xa9, 0x14, 0xdc, 0xd2, 0x03, 0x4a, 0xc1, 0xfd, 0x3e, 0x2b, 0x55, 0xcf, 0x6e, 0xf8, 0xfc, 0xab, - 0xc5, 0xe6, 0x1f, 0x4c, 0xf3, 0x28, 0xae, 0x8c, 0x5e, 0xc9, 0x04, 0xef, 0x3d, 0x03, 0xd5, 0x0d, - 0xdf, 0x61, 0x55, 0x58, 0xd8, 0x42, 0x35, 0x22, 0xcc, 0x2e, 0x8a, 0x76, 0xac, 0x30, 0xa8, 0xd4, - 0x37, 0x88, 0x1e, 0x4a, 0x6a, 0xff, 0xa7, 0x32, 0x0c, 0x1b, 0x1a, 0x3f, 0xd7, 0x7c, 0xb3, 0x1e, - 0x32, 0xf3, 0xad, 0x74, 0x08, 0xf3, 0xed, 0x7b, 0xa1, 0xe6, 0x4a, 0x6d, 0x54, 0x4c, 0x7d, 0xfe, - 0xac, 0x8e, 0xd3, 0x0a, 0x49, 0x35, 0x61, 0xcd, 0x13, 0x5d, 0x4a, 0xa5, 0x79, 0xa6, 0xfc, 0x02, - 0x79, 0x79, 0x98, 0x42, 0xa3, 0x75, 0x3f, 0x93, 0x8d, 0x0f, 0xa8, 0x1c, 0x1c, 0x1f, 0x60, 0xff, - 0x81, 0xa5, 0x3e, 0xee, 0x7d, 0xa8, 0xe7, 0x73, 0x2b, 0x5d, 0xcf, 0xe7, 0x42, 0x21, 0xc3, 0xdc, - 0xa3, 0x90, 0xcf, 0x35, 0x18, 0x9a, 0x0f, 0x9b, 0x4d, 0x27, 0x68, 0xa0, 0x6f, 0x80, 0x21, 0x97, - 0xff, 0x14, 0x3e, 0x34, 0x76, 0x58, 0x2d, 0xa0, 0x58, 0xc2, 0xd0, 0xe3, 0x30, 0xe0, 0x44, 0x9b, - 0xd2, 0x6f, 0xc6, 0x82, 0xe0, 0x66, 0xa3, 0xcd, 0x18, 0xb3, 0x56, 0xfb, 0x2f, 0x2c, 0x18, 0xa3, - 0x8f, 0x78, 0xec, 0xa5, 0xd8, 0xeb, 0x3c, 0x0d, 0x83, 0x4e, 0x3b, 0xd9, 0x0a, 0xbb, 0xf6, 0x61, - 0xb3, 0xac, 0x15, 0x0b, 0x28, 0xdd, 0x87, 0xa9, 0x42, 0x10, 0xc6, 0x3e, 0x6c, 0x81, 0xce, 0x65, - 0x06, 0xa1, 0xa6, 0x6c, 0xdc, 0x5e, 0xcf, 0x3b, 0x2d, 0xad, 0xf3, 0x66, 0x2c, 0xe1, 0x94, 0xd8, - 0x7a, 0xd8, 0xe8, 0x88, 0xd0, 0x5e, 0x45, 0x6c, 0x2e, 0x6c, 0x74, 0x30, 0x83, 0xa0, 0x27, 0xa0, - 0x1c, 0x6f, 0x39, 0xf2, 0x5c, 0x5e, 0x46, 0x99, 0xd7, 0x2f, 0xcf, 0x62, 0xda, 0xae, 0x92, 0x26, - 0x22, 0x3f, 0x1b, 0x63, 0x9b, 0x4e, 0x9a, 0x88, 0x7c, 0xfb, 0x5f, 0x0c, 0x00, 0x8b, 0xb7, 0x71, - 0x22, 0xd2, 0x58, 0x0b, 0x59, 0x29, 0xe1, 0x63, 0x3d, 0xd6, 0xd6, 0x1b, 0xd9, 0x87, 0xf9, 0x68, - 0xdb, 0x38, 0xde, 0x2c, 0xdf, 0xef, 0xe3, 0xcd, 0xfc, 0x13, 0xeb, 0x81, 0x87, 0xe8, 0xc4, 0xda, - 0xfe, 0x9c, 0x05, 0x48, 0x45, 0x4f, 0xe9, 0x90, 0x92, 0x19, 0xa8, 0xa9, 0x70, 0x2d, 0xb1, 0x5e, - 0xb4, 0x58, 0x94, 0x00, 0xac, 0x71, 0xfa, 0xf0, 0x5e, 0x3c, 0x25, 0x75, 0x56, 0x39, 0x9d, 0x73, - 0xc1, 0x34, 0x9d, 0x50, 0x61, 0xf6, 0xaf, 0x96, 0xe0, 0x11, 0x6e, 0x2e, 0x2d, 0x3b, 0x81, 0xb3, - 0x49, 0x9a, 0xb4, 0x57, 0xfd, 0x06, 0x09, 0xb9, 0x74, 0xdb, 0xec, 0xc9, 0x0c, 0x89, 0xa3, 0xca, - 0x2b, 0x2e, 0x67, 0xb8, 0x64, 0x59, 0x0c, 0xbc, 0x04, 0x33, 0xe2, 0x28, 0x86, 0xaa, 0xbc, 0xcc, - 0x48, 0xe8, 0x9f, 0x82, 0x18, 0x29, 0x51, 0x2c, 0x2c, 0x0b, 0x82, 0x15, 0x23, 0x6a, 0x3e, 0xf8, - 0xa1, 0xbb, 0x4d, 0x97, 0x7c, 0xd6, 0x7c, 0x58, 0x12, 0xed, 0x58, 0x61, 0xd8, 0x4d, 0x18, 0x97, - 0x63, 0xd8, 0xba, 0x4a, 0x3a, 0x98, 0x6c, 0x50, 0x9d, 0xeb, 0xca, 0x26, 0xe3, 0x7e, 0x25, 0xa5, - 0x73, 0xe7, 0x4d, 0x20, 0x4e, 0xe3, 0xca, 0xea, 0xc2, 0xa5, 0xfc, 0xea, 0xc2, 0xf6, 0xaf, 0x5a, - 0x90, 0x55, 0xfa, 0x46, 0x2d, 0x55, 0x6b, 0xdf, 0x5a, 0xaa, 0x87, 0xa8, 0x46, 0xfa, 0x5d, 0x30, - 0xec, 0x24, 0xd4, 0xaa, 0xe3, 0x1e, 0x98, 0xf2, 0xbd, 0x9d, 0x1c, 0x2e, 0x87, 0x0d, 0x6f, 0xc3, - 0x63, 0x9e, 0x17, 0x93, 0x9c, 0xfd, 0x8e, 0x05, 0xb5, 0x85, 0xa8, 0x73, 0xf8, 0x54, 0xb5, 0xee, - 0x44, 0xb4, 0xd2, 0xa1, 0x12, 0xd1, 0x64, 0xaa, 0x5b, 0xb9, 0x57, 0xaa, 0x9b, 0xfd, 0x97, 0x03, - 0x30, 0xd1, 0x95, 0x7b, 0x89, 0x5e, 0x82, 0x11, 0xf5, 0x95, 0xa4, 0xdb, 0xb5, 0x66, 0x06, 0x2f, - 0x6b, 0x18, 0x4e, 0x61, 0xf6, 0xb1, 0x54, 0x17, 0xe1, 0x64, 0x44, 0xde, 0x68, 0x93, 0x36, 0x99, - 0xdd, 0x48, 0x48, 0x54, 0x27, 0x6e, 0x18, 0x34, 0x78, 0x31, 0xe2, 0xf2, 0xdc, 0xa3, 0x77, 0xf6, - 0xa6, 0x4e, 0xe2, 0x6e, 0x30, 0xce, 0x7b, 0x06, 0xb5, 0x60, 0xd4, 0x37, 0xf7, 0x0b, 0x62, 0x9b, - 0x7a, 0x4f, 0x5b, 0x0d, 0x35, 0x5b, 0x53, 0xcd, 0x38, 0xcd, 0x20, 0xbd, 0xe9, 0xa8, 0x3c, 0xa0, - 0x4d, 0xc7, 0x27, 0xf5, 0xa6, 0x83, 0xc7, 0x02, 0x7d, 0xb8, 0xe0, 0xdc, 0xdb, 0x7e, 0x76, 0x1d, - 0x47, 0xd9, 0x47, 0xbc, 0x02, 0x55, 0x19, 0x27, 0xd9, 0x57, 0x7c, 0xa1, 0x49, 0xa7, 0x87, 0x6c, - 0xbf, 0x5b, 0x82, 0x9c, 0xad, 0x32, 0x5d, 0x6b, 0xda, 0xde, 0x4b, 0xad, 0xb5, 0xc3, 0xd9, 0x7c, - 0x68, 0x97, 0xc7, 0x88, 0x72, 0x2d, 0xff, 0xa1, 0xa2, 0xb7, 0xfa, 0x3a, 0x6c, 0x54, 0x49, 0x40, - 0x15, 0x3a, 0x7a, 0x1e, 0x40, 0x9b, 0xe9, 0xc2, 0xd6, 0x53, 0x41, 0x1f, 0xda, 0x9a, 0xc7, 0x06, - 0x16, 0x7a, 0x11, 0x86, 0xbd, 0x20, 0x4e, 0x1c, 0xdf, 0xbf, 0xec, 0x05, 0x89, 0xb0, 0xff, 0x94, - 0x39, 0xb3, 0xa8, 0x41, 0xd8, 0xc4, 0x3b, 0xfb, 0x01, 0xe3, 0xbb, 0x1c, 0xe6, 0x7b, 0x6e, 0xc1, - 0x99, 0x4b, 0x5e, 0xa2, 0x92, 0x0f, 0xd5, 0x3c, 0xa2, 0x56, 0xb8, 0x92, 0x41, 0x56, 0xcf, 0x74, - 0x5b, 0x23, 0xf9, 0xaf, 0x94, 0xce, 0x55, 0xcc, 0x26, 0xff, 0xd9, 0x2e, 0x9c, 0xba, 0xe4, 0x25, - 0x17, 0x3d, 0x9f, 0x1c, 0x23, 0x93, 0x5f, 0x1e, 0x84, 0x11, 0x33, 0x27, 0xff, 0x30, 0x12, 0xfb, - 0x0b, 0xd4, 0x3e, 0x15, 0x03, 0xe1, 0xa9, 0x83, 0xec, 0x9b, 0x47, 0x2e, 0x10, 0x90, 0x3f, 0xb8, - 0x86, 0x89, 0xaa, 0x79, 0x62, 0xb3, 0x03, 0xe8, 0x36, 0x54, 0x36, 0x58, 0x1e, 0x5b, 0xb9, 0x88, - 0x10, 0xa4, 0xbc, 0xc1, 0xd7, 0x2b, 0x92, 0x67, 0xc2, 0x71, 0x7e, 0xd4, 0xac, 0x88, 0xd2, 0xe9, - 0xd3, 0x46, 0x76, 0x81, 0xd0, 0x57, 0x0a, 0xa3, 0x97, 0x56, 0xa8, 0xdc, 0x83, 0x56, 0x48, 0xc9, - 0xe8, 0xc1, 0x07, 0x24, 0xa3, 0x59, 0x4e, 0x62, 0xb2, 0xc5, 0x8c, 0x5e, 0x91, 0x0e, 0x35, 0xc4, - 0x06, 0xc1, 0xc8, 0x49, 0x4c, 0x81, 0x71, 0x16, 0x1f, 0x7d, 0x4c, 0x49, 0xf9, 0x6a, 0x11, 0x07, - 0x05, 0xe6, 0x8c, 0x3e, 0x6e, 0x01, 0xff, 0xb9, 0x12, 0x8c, 0x5d, 0x0a, 0xda, 0xab, 0x97, 0x56, - 0xdb, 0xeb, 0xbe, 0xe7, 0x5e, 0x25, 0x1d, 0x2a, 0xc5, 0xb7, 0x49, 0x67, 0x71, 0x41, 0xac, 0x20, - 0x35, 0x67, 0xae, 0xd2, 0x46, 0xcc, 0x61, 0x54, 0x6e, 0x6d, 0x78, 0xc1, 0x26, 0x89, 0x5a, 0x91, - 0x27, 0x7c, 0xf8, 0x86, 0xdc, 0xba, 0xa8, 0x41, 0xd8, 0xc4, 0xa3, 0xb4, 0xc3, 0xdb, 0x81, 0x2a, - 0x90, 0xa4, 0x68, 0xaf, 0xd0, 0x46, 0xcc, 0x61, 0x14, 0x29, 0x89, 0xda, 0xc2, 0x45, 0x66, 0x20, - 0xad, 0xd1, 0x46, 0xcc, 0x61, 0x62, 0xf7, 0xcd, 0x22, 0xbc, 0x2a, 0x5d, 0xbb, 0x6f, 0x16, 0x1c, - 0x21, 0xe1, 0x14, 0x75, 0x9b, 0x74, 0x16, 0x9c, 0xc4, 0xc9, 0x6e, 0x9e, 0xaf, 0xf2, 0x66, 0x2c, - 0xe1, 0xac, 0x62, 0x72, 0x7a, 0x38, 0xbe, 0xe6, 0x2a, 0x26, 0xa7, 0xbb, 0xdf, 0xc3, 0xd1, 0xf2, - 0x77, 0x4a, 0x30, 0xf2, 0xee, 0xb5, 0xa6, 0x39, 0x17, 0xf6, 0xdc, 0x84, 0x89, 0xae, 0x4c, 0xe8, - 0x3e, 0x2c, 0x9f, 0x03, 0x2b, 0x55, 0xd8, 0x18, 0x86, 0x29, 0x61, 0x59, 0x29, 0x70, 0x1e, 0x26, - 0xf8, 0xe2, 0xa5, 0x9c, 0x58, 0x62, 0xab, 0xca, 0x6e, 0x67, 0x87, 0x54, 0x37, 0xb2, 0x40, 0xdc, - 0x8d, 0x6f, 0x7f, 0xde, 0x82, 0xd1, 0x54, 0x72, 0x7a, 0x41, 0x36, 0x1a, 0x5b, 0xdd, 0x21, 0x8b, - 0x4e, 0x66, 0xd9, 0x22, 0x65, 0xa6, 0x86, 0xf5, 0xea, 0xd6, 0x20, 0x6c, 0xe2, 0xd9, 0xbf, 0x55, - 0x86, 0xaa, 0x8c, 0xa4, 0xea, 0xa3, 0x2b, 0x9f, 0xb5, 0x60, 0x54, 0x1d, 0x0c, 0x32, 0x4f, 0x6e, - 0xa9, 0x88, 0x5c, 0x39, 0xda, 0x03, 0xe5, 0x17, 0x09, 0x36, 0x42, 0xbd, 0x61, 0xc0, 0x26, 0x33, - 0x9c, 0xe6, 0x8d, 0x6e, 0x00, 0xc4, 0x9d, 0x38, 0x21, 0x4d, 0xc3, 0xa7, 0x6c, 0x1b, 0xb3, 0x6c, - 0xda, 0x0d, 0x23, 0x42, 0xe7, 0xd4, 0xb5, 0xb0, 0x41, 0xea, 0x0a, 0x53, 0x5b, 0x78, 0xba, 0x0d, - 0x1b, 0x94, 0xd0, 0x9b, 0xea, 0x18, 0x7b, 0xa0, 0x08, 0xbd, 0x2e, 0xc7, 0xb7, 0x9f, 0x73, 0xec, - 0x23, 0x9c, 0x1b, 0xdb, 0x3f, 0x53, 0x82, 0x13, 0xd9, 0x91, 0x44, 0x1f, 0x86, 0x11, 0x39, 0x68, - 0x86, 0xfb, 0x40, 0x86, 0xaf, 0x8d, 0x60, 0x03, 0x76, 0x77, 0x6f, 0x6a, 0xaa, 0xfb, 0x7e, 0xec, - 0x69, 0x13, 0x05, 0xa7, 0x88, 0xf1, 0x43, 0x65, 0x11, 0xfd, 0x30, 0xd7, 0x99, 0x6d, 0xb5, 0xc4, - 0xc9, 0xb0, 0x71, 0xa8, 0x6c, 0x42, 0x71, 0x06, 0x1b, 0xad, 0xc2, 0x29, 0xa3, 0xe5, 0x1a, 0xf1, - 0x36, 0xb7, 0xd6, 0xc3, 0x48, 0xee, 0x57, 0x1f, 0xd7, 0xc1, 0xb2, 0xdd, 0x38, 0x38, 0xf7, 0x49, - 0x6a, 0x18, 0xb9, 0x4e, 0xcb, 0x71, 0xbd, 0xa4, 0x23, 0x7c, 0xfb, 0x4a, 0x8c, 0xcf, 0x8b, 0x76, - 0xac, 0x30, 0xec, 0x7f, 0x38, 0x00, 0x27, 0x78, 0x74, 0x28, 0x51, 0xc1, 0xcf, 0xe8, 0xc3, 0x50, - 0x8b, 0x13, 0x27, 0xe2, 0xce, 0x0a, 0xeb, 0xd0, 0xa2, 0x4b, 0x67, 0xd4, 0x4b, 0x22, 0x58, 0xd3, - 0x43, 0xaf, 0xb2, 0x72, 0x64, 0x5e, 0xbc, 0xc5, 0xa8, 0x97, 0xee, 0xcd, 0x15, 0x72, 0x51, 0x51, - 0xc0, 0x06, 0x35, 0xf4, 0xad, 0x50, 0x69, 0x6d, 0x39, 0xb1, 0xf4, 0xd3, 0x3d, 0x2d, 0xe5, 0xc4, - 0x2a, 0x6d, 0xbc, 0xbb, 0x37, 0x75, 0x3a, 0xfb, 0xaa, 0x0c, 0x80, 0xf9, 0x43, 0xa6, 0x94, 0x1f, - 0x38, 0xf8, 0xbe, 0x9d, 0x46, 0xd4, 0xa9, 0x5f, 0x9e, 0xcd, 0xde, 0xd0, 0xb2, 0xc0, 0x5a, 0xb1, - 0x80, 0x52, 0x99, 0xb4, 0xc5, 0x59, 0x36, 0x28, 0xf2, 0x60, 0xda, 0xe2, 0xb8, 0xac, 0x41, 0xd8, - 0xc4, 0x43, 0x9f, 0xeb, 0x8e, 0x1d, 0x1e, 0x3a, 0x86, 0xdc, 0x92, 0x7e, 0xa3, 0x86, 0x2f, 0x40, - 0x4d, 0x74, 0x75, 0x2d, 0x44, 0x2f, 0xc1, 0x08, 0x77, 0x03, 0xcd, 0x45, 0x4e, 0xe0, 0x6e, 0x65, - 0x9d, 0x37, 0x6b, 0x06, 0x0c, 0xa7, 0x30, 0xed, 0x65, 0x18, 0xe8, 0x53, 0xc8, 0xf6, 0xb5, 0x27, - 0x7f, 0x05, 0xaa, 0x94, 0x9c, 0xdc, 0xa0, 0x15, 0x41, 0x32, 0x84, 0xaa, 0xbc, 0xbd, 0x11, 0xd9, - 0x50, 0xf6, 0x1c, 0x19, 0x23, 0xa2, 0x96, 0xd0, 0x62, 0x1c, 0xb7, 0xd9, 0xb4, 0xa3, 0x40, 0xf4, - 0x14, 0x94, 0xc9, 0x6e, 0x2b, 0x1b, 0x0c, 0x72, 0x61, 0xb7, 0xe5, 0x45, 0x24, 0xa6, 0x48, 0x64, - 0xb7, 0x85, 0xce, 0x42, 0xc9, 0x6b, 0x88, 0x19, 0x09, 0x02, 0xa7, 0xb4, 0xb8, 0x80, 0x4b, 0x5e, - 0xc3, 0xde, 0x85, 0x9a, 0xba, 0x2e, 0x12, 0x6d, 0x4b, 0x93, 0xca, 0x2a, 0x22, 0x3a, 0x58, 0xd2, - 0xed, 0x61, 0x4c, 0xb5, 0x01, 0x74, 0xa9, 0x86, 0xa2, 0x54, 0xf0, 0x39, 0x18, 0x70, 0x43, 0x51, - 0x64, 0xa7, 0xaa, 0xc9, 0x30, 0x5b, 0x8a, 0x41, 0xec, 0x9b, 0x30, 0x76, 0x35, 0x08, 0x6f, 0xb3, - 0x5b, 0x9d, 0x58, 0x11, 0x63, 0x4a, 0x78, 0x83, 0xfe, 0xc8, 0x5a, 0xee, 0x0c, 0x8a, 0x39, 0x4c, - 0x95, 0x57, 0x2d, 0xf5, 0x2a, 0xaf, 0x6a, 0x7f, 0xdc, 0x82, 0x11, 0x95, 0xf3, 0x7d, 0x69, 0x67, - 0x9b, 0xd2, 0xdd, 0x8c, 0xc2, 0x76, 0x2b, 0x4b, 0x97, 0xdd, 0x4c, 0x8b, 0x39, 0xcc, 0x2c, 0x86, - 0x50, 0x3a, 0xa0, 0x18, 0xc2, 0x39, 0x18, 0xd8, 0xf6, 0x82, 0x46, 0xd6, 0xd9, 0x79, 0xd5, 0x0b, - 0x1a, 0x98, 0x41, 0xec, 0xbf, 0xb2, 0xe0, 0x84, 0xea, 0x82, 0xb4, 0x99, 0x5e, 0x82, 0x91, 0xf5, - 0xb6, 0xe7, 0x37, 0x64, 0x75, 0xe6, 0xcc, 0x72, 0x99, 0x33, 0x60, 0x38, 0x85, 0x89, 0xce, 0x03, - 0xac, 0x7b, 0x81, 0x13, 0x75, 0x56, 0xb5, 0x91, 0xa6, 0xf4, 0xf6, 0x9c, 0x82, 0x60, 0x03, 0x0b, - 0xbd, 0x05, 0xd5, 0x1d, 0x79, 0x2a, 0x5b, 0x2e, 0x34, 0x87, 0x5f, 0x8c, 0x87, 0x5e, 0x09, 0xea, - 0x98, 0x57, 0x71, 0xb4, 0xbf, 0x58, 0x86, 0xb1, 0x74, 0xde, 0x7d, 0x1f, 0x9e, 0x93, 0xa7, 0xa0, - 0xc2, 0x52, 0xf1, 0xb3, 0x13, 0x8b, 0x97, 0x53, 0xe6, 0x30, 0x14, 0xc3, 0x20, 0x17, 0x25, 0xc5, - 0xdc, 0x2d, 0xaa, 0x3a, 0xa9, 0xfc, 0xb3, 0x2c, 0x82, 0x5b, 0xb8, 0xbb, 0x05, 0x2b, 0xf4, 0x29, - 0x0b, 0x86, 0xc2, 0x96, 0x59, 0xd7, 0xf3, 0x43, 0x45, 0xd6, 0x24, 0x10, 0x89, 0xbf, 0xc2, 0x1a, - 0x52, 0x13, 0x4f, 0x4e, 0x06, 0xc9, 0xfa, 0xec, 0xb7, 0xc0, 0x88, 0x89, 0x79, 0x90, 0x41, 0x54, - 0x35, 0x0d, 0xa2, 0xcf, 0x9a, 0x53, 0x52, 0x54, 0x5d, 0xe8, 0x63, 0xb1, 0x5f, 0x87, 0x8a, 0xab, - 0xc2, 0xdc, 0xee, 0xe9, 0x46, 0x01, 0x55, 0x95, 0x8c, 0x85, 0x10, 0x70, 0x6a, 0xf6, 0x1f, 0x58, - 0xc6, 0xfc, 0xc0, 0x24, 0x5e, 0x6c, 0xa0, 0x08, 0xca, 0x9b, 0x3b, 0xdb, 0xc2, 0xc8, 0xb8, 0x52, - 0xd0, 0xf0, 0x5e, 0xda, 0xd9, 0xd6, 0x2b, 0xcc, 0x6c, 0xc5, 0x94, 0x59, 0x1f, 0x87, 0x08, 0xa9, - 0xe2, 0x1c, 0xe5, 0x83, 0x8b, 0x73, 0xd8, 0xef, 0x94, 0x60, 0xa2, 0x6b, 0x52, 0xa1, 0x37, 0xa1, - 0x12, 0xd1, 0xb7, 0x14, 0xaf, 0xb7, 0x54, 0x58, 0x39, 0x8d, 0x78, 0xb1, 0xa1, 0x95, 0x77, 0xba, - 0x1d, 0x73, 0x96, 0xe8, 0x0a, 0x20, 0x1d, 0x8c, 0xa9, 0x4e, 0x30, 0xf8, 0x2b, 0xab, 0x88, 0xad, - 0xd9, 0x2e, 0x0c, 0x9c, 0xf3, 0x14, 0x7a, 0x39, 0x7b, 0x10, 0x92, 0xa9, 0x14, 0xbd, 0xdf, 0x99, - 0x86, 0xfd, 0xb6, 0x39, 0x05, 0x6f, 0x68, 0x61, 0x7a, 0xd4, 0xcd, 0x69, 0x97, 0x64, 0x2d, 0xf7, - 0x2b, 0x59, 0xed, 0x5f, 0x2c, 0xc1, 0x68, 0xaa, 0xf2, 0x2b, 0xf2, 0xa1, 0x4a, 0x7c, 0x76, 0x62, - 0x2b, 0xb5, 0xef, 0x51, 0x2f, 0x81, 0x51, 0x72, 0xf2, 0x82, 0xa0, 0x8b, 0x15, 0x87, 0x87, 0x23, - 0xb6, 0xec, 0x25, 0x18, 0x91, 0x1d, 0xfa, 0x90, 0xd3, 0xf4, 0xb3, 0xc3, 0x77, 0xc1, 0x80, 0xe1, - 0x14, 0xa6, 0xfd, 0x6b, 0x65, 0x98, 0xe4, 0x47, 0xdc, 0x0d, 0xb5, 0x18, 0x54, 0xa8, 0xca, 0x0f, - 0xe9, 0xfa, 0xcc, 0x56, 0x11, 0x37, 0x9d, 0xf7, 0x62, 0xd4, 0x57, 0x48, 0xf4, 0x4f, 0x64, 0x42, - 0xa2, 0xf9, 0x56, 0x7d, 0xf3, 0x98, 0x7a, 0xf4, 0xb5, 0x15, 0x23, 0xfd, 0x4f, 0x4b, 0x30, 0x9e, - 0xb9, 0xd0, 0x0e, 0x7d, 0x31, 0x7d, 0x07, 0x8a, 0x55, 0xc4, 0xf1, 0xdf, 0xbe, 0x77, 0x9c, 0x1d, - 0xee, 0x26, 0x94, 0x07, 0xb4, 0x54, 0xec, 0xdf, 0x2b, 0xc1, 0x58, 0xfa, 0x26, 0xbe, 0x87, 0x70, - 0xa4, 0xde, 0x0f, 0x35, 0x76, 0xd9, 0xd4, 0x55, 0xd2, 0x91, 0xa7, 0x8c, 0xfc, 0x5e, 0x1f, 0xd9, - 0x88, 0x35, 0xfc, 0xa1, 0xb8, 0x60, 0xc6, 0xfe, 0x67, 0x16, 0x9c, 0xe6, 0x6f, 0x99, 0x9d, 0x87, - 0x7f, 0x2b, 0x6f, 0x74, 0x5f, 0x2b, 0xb6, 0x83, 0x99, 0xba, 0xe2, 0x07, 0x8d, 0x2f, 0xbb, 0xef, - 0x5d, 0xf4, 0x36, 0x3d, 0x15, 0x1e, 0xc2, 0xce, 0x1e, 0x6a, 0x32, 0xd8, 0xff, 0xa1, 0x04, 0xc3, - 0x2b, 0xf3, 0x8b, 0x4a, 0x84, 0xcf, 0x40, 0xcd, 0x8d, 0x88, 0xa3, 0xdd, 0x3f, 0x66, 0x00, 0x95, - 0x04, 0x60, 0x8d, 0x43, 0x77, 0x51, 0x3c, 0x00, 0x31, 0xce, 0xee, 0xa2, 0x78, 0x7c, 0x62, 0x8c, - 0x25, 0x1c, 0x3d, 0x03, 0x55, 0x96, 0x1a, 0x7c, 0x3d, 0x92, 0x1a, 0x47, 0x6f, 0xad, 0x59, 0x3b, - 0x5e, 0xc2, 0x0a, 0x83, 0x12, 0x6e, 0x84, 0x6e, 0x4c, 0x91, 0x33, 0x1e, 0x99, 0x05, 0xda, 0x8c, - 0x97, 0xb0, 0x84, 0xb3, 0xca, 0x8e, 0xcc, 0x6b, 0x41, 0x91, 0x2b, 0xe9, 0x4e, 0x73, 0xf7, 0x06, - 0x45, 0xd7, 0x38, 0x87, 0xa9, 0x00, 0x9a, 0x49, 0xcf, 0x1b, 0xea, 0x2f, 0x3d, 0xcf, 0xfe, 0xbd, - 0x32, 0xd4, 0xb4, 0x53, 0xcd, 0x13, 0xf5, 0x30, 0x0a, 0xa9, 0x5b, 0x5f, 0xef, 0x04, 0xae, 0x22, - 0xcd, 0xa3, 0x09, 0x8c, 0x72, 0x18, 0x3f, 0x60, 0xc1, 0xb0, 0x17, 0x78, 0x89, 0xe7, 0x30, 0xdf, - 0x60, 0x31, 0xf7, 0x7f, 0x2b, 0x76, 0x8b, 0x9c, 0x72, 0x18, 0x99, 0x47, 0xfe, 0x8a, 0x19, 0x36, - 0x39, 0xa3, 0x8f, 0x8a, 0x6c, 0xb0, 0x72, 0x61, 0x45, 0x65, 0xaa, 0x99, 0x14, 0xb0, 0x16, 0xb5, - 0xb1, 0x93, 0xa8, 0xa0, 0x5a, 0x4c, 0x98, 0x92, 0x52, 0xf7, 0xa7, 0xa8, 0x5d, 0x0c, 0x6b, 0xc6, - 0x9c, 0x91, 0x1d, 0x03, 0xea, 0x1e, 0x8b, 0x43, 0x66, 0xda, 0xcc, 0x40, 0xcd, 0x69, 0x27, 0x61, - 0x93, 0x0e, 0x93, 0x08, 0x18, 0xd0, 0xb9, 0x44, 0x12, 0x80, 0x35, 0x8e, 0xfd, 0xc5, 0x0a, 0x64, - 0xaa, 0x53, 0xa0, 0x5d, 0xa8, 0xa9, 0xfa, 0x14, 0xc5, 0x64, 0xae, 0xea, 0x19, 0xa5, 0x3a, 0xa3, - 0x9a, 0xb0, 0x66, 0x86, 0x36, 0xa5, 0x9b, 0x95, 0xaf, 0xf6, 0x57, 0xb2, 0x6e, 0xd6, 0xef, 0xe8, - 0xef, 0xd4, 0x8d, 0xce, 0xd5, 0x19, 0x5e, 0x8f, 0x70, 0xfa, 0x40, 0x8f, 0xec, 0x41, 0x37, 0xa0, - 0x7f, 0x42, 0xdc, 0x56, 0x86, 0x49, 0xdc, 0xf6, 0x13, 0x31, 0x1b, 0x5e, 0x29, 0x70, 0x95, 0x71, - 0xc2, 0xba, 0xca, 0x13, 0xff, 0x8f, 0x0d, 0xa6, 0x69, 0xbf, 0xf9, 0xe0, 0xb1, 0xfa, 0xcd, 0x87, - 0x0a, 0xf5, 0x9b, 0x9f, 0x07, 0x60, 0x73, 0x9b, 0x67, 0x04, 0x54, 0x99, 0x3b, 0x53, 0xa9, 0x18, - 0xac, 0x20, 0xd8, 0xc0, 0xb2, 0xbf, 0x09, 0xd2, 0x65, 0xca, 0xd0, 0x94, 0xac, 0x8a, 0xc6, 0x4f, - 0x04, 0x59, 0x32, 0x66, 0xaa, 0x80, 0xd9, 0xcf, 0x5b, 0x60, 0xd6, 0x52, 0x43, 0x6f, 0xf0, 0xa2, - 0x6d, 0x56, 0x11, 0x27, 0x4c, 0x06, 0xdd, 0xe9, 0x65, 0xa7, 0x95, 0x89, 0x76, 0x92, 0x95, 0xdb, - 0xce, 0x7e, 0x00, 0xaa, 0x12, 0x7a, 0x28, 0x63, 0xf9, 0x63, 0x70, 0x52, 0x16, 0x76, 0x90, 0x87, - 0x41, 0x22, 0xea, 0xe0, 0x60, 0x1f, 0xa3, 0x74, 0x1c, 0x96, 0x7a, 0x39, 0x0e, 0xd5, 0x6e, 0xb8, - 0xdc, 0xb3, 0x1c, 0xfb, 0x2f, 0x58, 0x70, 0x2e, 0xdb, 0x81, 0x78, 0x39, 0x0c, 0xbc, 0x24, 0x8c, - 0xea, 0x24, 0x49, 0xbc, 0x60, 0x93, 0xd5, 0xd6, 0xbd, 0xed, 0x44, 0xf2, 0x7e, 0x25, 0x26, 0x28, - 0x6f, 0x3a, 0x51, 0x80, 0x59, 0x2b, 0xea, 0xc0, 0x20, 0x0f, 0xa1, 0x16, 0xbb, 0xa0, 0x23, 0xae, - 0x8d, 0x9c, 0xe1, 0xd0, 0xdb, 0x30, 0x1e, 0xbe, 0x8d, 0x05, 0x43, 0xfb, 0x2b, 0x16, 0xa0, 0x95, - 0x1d, 0x12, 0x45, 0x5e, 0xc3, 0x08, 0xfa, 0x66, 0xb7, 0x7e, 0x1a, 0xb7, 0x7b, 0x9a, 0x65, 0x47, - 0x32, 0xb7, 0x7e, 0x1a, 0xff, 0xf2, 0x6f, 0xfd, 0x2c, 0x1d, 0xee, 0xd6, 0x4f, 0xb4, 0x02, 0xa7, - 0x9b, 0x7c, 0x1b, 0xc7, 0x6f, 0xd2, 0xe3, 0x7b, 0x3a, 0x95, 0x21, 0x7f, 0xe6, 0xce, 0xde, 0xd4, - 0xe9, 0xe5, 0x3c, 0x04, 0x9c, 0xff, 0x9c, 0xfd, 0x01, 0x40, 0x3c, 0xd6, 0x7b, 0x3e, 0x2f, 0x5c, - 0xb5, 0xa7, 0x9b, 0xc3, 0xfe, 0xf1, 0x0a, 0x8c, 0x67, 0x6e, 0xdf, 0xa0, 0x5b, 0xe8, 0xee, 0xf8, - 0xd8, 0x23, 0xeb, 0xef, 0xee, 0xee, 0xf5, 0x15, 0x71, 0x1b, 0x40, 0xc5, 0x0b, 0x5a, 0xed, 0xa4, - 0x98, 0x02, 0x1d, 0xbc, 0x13, 0x8b, 0x94, 0xa0, 0x71, 0x2e, 0x41, 0xff, 0x62, 0xce, 0xa6, 0xc8, - 0xf8, 0xdd, 0xd4, 0x26, 0x67, 0xe0, 0x01, 0xb9, 0x59, 0x3e, 0xa1, 0xa3, 0x69, 0x2b, 0x45, 0xf8, - 0x90, 0x33, 0x93, 0xe5, 0xb8, 0x43, 0xad, 0x7e, 0xb6, 0x04, 0xc3, 0xc6, 0x47, 0x43, 0x3f, 0x99, - 0xae, 0x34, 0x6a, 0x15, 0xf7, 0x4a, 0x8c, 0xfe, 0xb4, 0xae, 0x25, 0xca, 0x5f, 0xe9, 0xe9, 0xee, - 0x22, 0xa3, 0x77, 0xf7, 0xa6, 0x4e, 0x64, 0xca, 0x88, 0xa6, 0x0a, 0x8f, 0x9e, 0xfd, 0x1e, 0x18, - 0xcf, 0x90, 0xc9, 0x79, 0xe5, 0x35, 0xf3, 0x95, 0x8f, 0xec, 0xee, 0x33, 0x87, 0xec, 0xcb, 0x74, - 0xc8, 0x44, 0x5d, 0x80, 0xd0, 0x27, 0x7d, 0xf8, 0x3a, 0x33, 0xfb, 0x8b, 0x52, 0x9f, 0xe5, 0x3f, - 0xde, 0x07, 0xd5, 0x56, 0xe8, 0x7b, 0xae, 0xa7, 0x0a, 0x95, 0xb3, 0x82, 0x23, 0xab, 0xa2, 0x0d, - 0x2b, 0x28, 0xba, 0x0d, 0xb5, 0x5b, 0xb7, 0x13, 0x7e, 0xcc, 0x28, 0x8e, 0x32, 0x8a, 0x3a, 0x5d, - 0x54, 0x46, 0x8b, 0x3a, 0xc7, 0xc4, 0x9a, 0x17, 0xb2, 0x61, 0x90, 0x29, 0x41, 0x99, 0x23, 0xc8, - 0x8e, 0x59, 0x98, 0x76, 0x8c, 0xb1, 0x80, 0xd8, 0xff, 0x6e, 0x18, 0x4e, 0xe5, 0x5d, 0x81, 0x84, - 0xde, 0x82, 0x41, 0xde, 0xc7, 0x62, 0x6e, 0xd9, 0xcb, 0xe3, 0x71, 0x89, 0x11, 0x14, 0xdd, 0x62, - 0xbf, 0xb1, 0xe0, 0x29, 0xb8, 0xfb, 0xce, 0xba, 0x98, 0x21, 0xc7, 0xc3, 0x7d, 0xc9, 0xd1, 0xdc, - 0x97, 0x1c, 0xce, 0xdd, 0x77, 0xd6, 0xd1, 0x2e, 0x54, 0x36, 0xbd, 0x84, 0x38, 0xc2, 0x39, 0x73, - 0xf3, 0x58, 0x98, 0x13, 0x87, 0x5b, 0x69, 0xec, 0x27, 0xe6, 0x0c, 0xd1, 0x97, 0x2c, 0x18, 0x5f, - 0x4f, 0xd7, 0x1d, 0x12, 0xc2, 0xd3, 0x39, 0x86, 0x6b, 0xae, 0xd2, 0x8c, 0xf8, 0xb5, 0xb7, 0x99, - 0x46, 0x9c, 0xed, 0x0e, 0xfa, 0xa4, 0x05, 0x43, 0x1b, 0x9e, 0x6f, 0xdc, 0x23, 0x72, 0x0c, 0x1f, - 0xe7, 0x22, 0x63, 0xa0, 0x77, 0x1c, 0xfc, 0x7f, 0x8c, 0x25, 0xe7, 0x5e, 0x9a, 0x6a, 0xf0, 0xa8, - 0x9a, 0x6a, 0xe8, 0x01, 0x69, 0xaa, 0xcf, 0x58, 0x50, 0x53, 0x23, 0x2d, 0xea, 0xb7, 0x7c, 0xf8, - 0x18, 0x3f, 0x39, 0xf7, 0x48, 0xa9, 0xbf, 0x58, 0x33, 0x47, 0x6f, 0x5b, 0x30, 0xec, 0xbc, 0xd9, - 0x8e, 0x48, 0x83, 0xec, 0x84, 0xad, 0x58, 0x14, 0x56, 0x7d, 0xad, 0xf8, 0xce, 0xcc, 0x52, 0x26, - 0x0b, 0x64, 0x67, 0xa5, 0x15, 0x8b, 0xfc, 0x65, 0xdd, 0x80, 0xcd, 0x2e, 0xa0, 0xef, 0xd7, 0x7a, - 0x1c, 0x8a, 0x28, 0xaf, 0x9d, 0xd7, 0x9b, 0xbe, 0xd2, 0xf1, 0x09, 0x3c, 0xe6, 0x86, 0x41, 0xe2, - 0x05, 0x6d, 0xb2, 0x12, 0x60, 0xd2, 0x0a, 0xaf, 0x85, 0xc9, 0xc5, 0xb0, 0x1d, 0x34, 0x2e, 0x44, - 0x51, 0x18, 0xb1, 0x02, 0x35, 0xc6, 0xe5, 0xaa, 0xf3, 0xbd, 0x51, 0xf1, 0x7e, 0x74, 0x8e, 0x62, - 0x33, 0xec, 0x95, 0x60, 0xea, 0x80, 0xc1, 0x46, 0x2f, 0xc1, 0x48, 0x18, 0x6d, 0x3a, 0x81, 0xf7, - 0xa6, 0x59, 0x73, 0x4d, 0x19, 0xa4, 0x2b, 0x06, 0x0c, 0xa7, 0x30, 0xcd, 0x62, 0x3c, 0xa5, 0x03, - 0x8a, 0xf1, 0x9c, 0x83, 0x81, 0x88, 0xb4, 0xc2, 0xec, 0xbe, 0x8a, 0xa5, 0x1c, 0x32, 0x08, 0x7a, - 0x02, 0xca, 0x4e, 0xcb, 0x13, 0xce, 0x45, 0xb5, 0x5d, 0x9c, 0x5d, 0x5d, 0xc4, 0xb4, 0x3d, 0x55, - 0x1b, 0xac, 0x72, 0x5f, 0x6a, 0x83, 0x51, 0x8d, 0x29, 0x8e, 0xcf, 0x06, 0xb5, 0xc6, 0x4c, 0x1f, - 0x6b, 0xd9, 0xef, 0x94, 0xe1, 0x89, 0x7d, 0x97, 0x96, 0x0e, 0x59, 0xb7, 0xf6, 0x09, 0x59, 0x97, - 0xc3, 0x53, 0x3a, 0x68, 0x78, 0xca, 0x3d, 0x86, 0xe7, 0x93, 0x54, 0x62, 0xc8, 0x5a, 0x75, 0xc5, - 0x5c, 0x10, 0xdf, 0xab, 0xf4, 0x9d, 0x10, 0x16, 0x12, 0x8a, 0x35, 0x5f, 0xba, 0x5d, 0x4a, 0x15, - 0xa2, 0xa9, 0x14, 0xa1, 0x31, 0x7b, 0xd6, 0x8b, 0xe3, 0x62, 0xa2, 0x57, 0x75, 0x1b, 0xfb, 0x97, - 0x06, 0xe0, 0xa9, 0x3e, 0x14, 0x9d, 0x39, 0x8b, 0xad, 0x3e, 0x67, 0xf1, 0xd7, 0xf8, 0x67, 0xfa, - 0x74, 0xee, 0x67, 0xc2, 0xc5, 0x7f, 0xa6, 0xfd, 0xbf, 0x10, 0x3b, 0x81, 0x08, 0x62, 0xe2, 0xb6, - 0x23, 0x9e, 0xbe, 0x63, 0xe4, 0x23, 0x2f, 0x8a, 0x76, 0xac, 0x30, 0xe8, 0xf6, 0xd7, 0x75, 0xe8, - 0xf2, 0x1f, 0x2a, 0xa8, 0xf0, 0x88, 0x99, 0xda, 0xcc, 0xad, 0xaf, 0xf9, 0x59, 0x2a, 0x01, 0x38, - 0x1b, 0xfb, 0xd7, 0x2d, 0x38, 0xdb, 0xdb, 0x1a, 0x41, 0xcf, 0xc1, 0xf0, 0x3a, 0x0b, 0xa6, 0x5c, - 0x66, 0x21, 0x53, 0x62, 0xea, 0xb0, 0xf7, 0xd5, 0xcd, 0xd8, 0xc4, 0x41, 0xf3, 0x30, 0x61, 0x46, - 0x61, 0x2e, 0x1b, 0xb1, 0x56, 0xcc, 0x5f, 0xb2, 0x96, 0x05, 0xe2, 0x6e, 0x7c, 0x34, 0x0d, 0x90, - 0x78, 0x89, 0x4f, 0xf8, 0xd3, 0x7c, 0xa2, 0x31, 0x87, 0xe2, 0x9a, 0x6a, 0xc5, 0x06, 0x86, 0xfd, - 0xd5, 0x72, 0xfe, 0x6b, 0x70, 0x2b, 0xf7, 0x30, 0xb3, 0x5f, 0xcc, 0xed, 0x52, 0x1f, 0x12, 0xba, - 0x7c, 0xbf, 0x25, 0xf4, 0x40, 0x2f, 0x09, 0x8d, 0x16, 0xe0, 0x84, 0x71, 0x5d, 0x2b, 0x2f, 0x5d, - 0xc3, 0x0f, 0xa5, 0x54, 0xdd, 0xb9, 0xd5, 0x0c, 0x1c, 0x77, 0x3d, 0xf1, 0x90, 0x4f, 0xd5, 0xdf, - 0x28, 0xc1, 0x99, 0x9e, 0x1b, 0x8b, 0xfb, 0xa4, 0x81, 0xcc, 0xcf, 0x3f, 0x70, 0x7f, 0x3e, 0xbf, - 0xf9, 0x51, 0x2a, 0x07, 0x7e, 0x94, 0x7e, 0xd4, 0xf9, 0xef, 0x97, 0x7a, 0x2e, 0x16, 0xba, 0x11, - 0xfd, 0x6b, 0x3b, 0x92, 0x2f, 0xc3, 0xa8, 0xd3, 0x6a, 0x71, 0x3c, 0x96, 0x99, 0x91, 0xa9, 0x85, - 0x39, 0x6b, 0x02, 0x71, 0x1a, 0xb7, 0xaf, 0x81, 0xfd, 0x63, 0x0b, 0x6a, 0x98, 0x6c, 0x70, 0x09, - 0x87, 0x6e, 0x89, 0x21, 0xb2, 0x8a, 0xb8, 0x90, 0x80, 0x0e, 0x6c, 0xec, 0xb1, 0x2a, 0xfd, 0x79, - 0x83, 0x7d, 0xd4, 0xca, 0x0a, 0xea, 0x92, 0xd7, 0x72, 0xef, 0x4b, 0x5e, 0xed, 0x5f, 0xae, 0xd1, - 0xd7, 0x6b, 0x85, 0xf3, 0x11, 0x69, 0xc4, 0xf4, 0xfb, 0xb6, 0x23, 0x5f, 0x4c, 0x12, 0xf5, 0x7d, - 0xaf, 0xe3, 0x25, 0x4c, 0xdb, 0x53, 0xe7, 0x93, 0xa5, 0x43, 0x55, 0x02, 0x2c, 0x1f, 0x58, 0x09, - 0xf0, 0x65, 0x18, 0x8d, 0xe3, 0xad, 0xd5, 0xc8, 0xdb, 0x71, 0x12, 0x72, 0x95, 0xc8, 0x92, 0x41, - 0xba, 0x2a, 0x56, 0xfd, 0xb2, 0x06, 0xe2, 0x34, 0x2e, 0xba, 0x04, 0x13, 0xba, 0x1e, 0x1f, 0x89, - 0x12, 0x96, 0xf2, 0xc8, 0x67, 0x82, 0x2a, 0x07, 0xa3, 0x2b, 0xf8, 0x09, 0x04, 0xdc, 0xfd, 0x0c, - 0x95, 0xb9, 0xa9, 0x46, 0xda, 0x91, 0xc1, 0xb4, 0xcc, 0x4d, 0xd1, 0xa1, 0x7d, 0xe9, 0x7a, 0x02, - 0x2d, 0xc3, 0x49, 0x3e, 0x31, 0x66, 0x5b, 0x2d, 0xe3, 0x8d, 0x86, 0xd2, 0x55, 0xe0, 0x2f, 0x75, - 0xa3, 0xe0, 0xbc, 0xe7, 0xd0, 0x8b, 0x30, 0xac, 0x9a, 0x17, 0x17, 0xc4, 0xd1, 0x9a, 0x72, 0xed, - 0x29, 0x32, 0x8b, 0x0d, 0x6c, 0xe2, 0xa1, 0x0f, 0xc1, 0xa3, 0xfa, 0x2f, 0x4f, 0xa1, 0xe7, 0xe7, - 0xcd, 0x0b, 0xa2, 0xd4, 0xa9, 0xba, 0x64, 0xec, 0x52, 0x2e, 0x5a, 0x03, 0xf7, 0x7a, 0x1e, 0xad, - 0xc3, 0x59, 0x05, 0xba, 0x10, 0x24, 0x2c, 0xc9, 0x35, 0x26, 0x73, 0x4e, 0xcc, 0x22, 0x27, 0x80, - 0xbd, 0xa7, 0x2d, 0xa8, 0x9f, 0xbd, 0xe4, 0x25, 0x97, 0xf3, 0x30, 0xf1, 0x12, 0xde, 0x87, 0x0a, - 0x9a, 0x81, 0x1a, 0x09, 0x9c, 0x75, 0x9f, 0xac, 0xcc, 0x2f, 0x8a, 0x1d, 0xa9, 0xce, 0x8e, 0x90, - 0x00, 0xac, 0x71, 0x54, 0x7c, 0xff, 0x48, 0xaf, 0xf8, 0x7e, 0xb4, 0x0a, 0xa7, 0x36, 0xdd, 0x16, - 0xb5, 0x32, 0x3d, 0x97, 0xcc, 0xba, 0x2c, 0xa0, 0x98, 0x7e, 0x18, 0x5e, 0x9e, 0x5f, 0x25, 0x4a, - 0x5d, 0x9a, 0x5f, 0xed, 0xc2, 0xc1, 0xb9, 0x4f, 0xb2, 0xc0, 0xf3, 0x28, 0xdc, 0xed, 0x4c, 0x9e, - 0xcc, 0x04, 0x9e, 0xd3, 0x46, 0xcc, 0x61, 0xe8, 0x0a, 0x20, 0x96, 0x2c, 0x78, 0x39, 0x49, 0x5a, - 0xca, 0xac, 0x9d, 0x3c, 0x95, 0x2e, 0x7c, 0x78, 0xb1, 0x0b, 0x03, 0xe7, 0x3c, 0x45, 0xad, 0x9e, - 0x20, 0x64, 0xd4, 0x27, 0x1f, 0x4d, 0x5b, 0x3d, 0xd7, 0x78, 0x33, 0x96, 0x70, 0xf4, 0x5d, 0x30, - 0xd9, 0x8e, 0x09, 0xdb, 0x30, 0xdf, 0x0c, 0xa3, 0x6d, 0x3f, 0x74, 0x1a, 0x8b, 0xec, 0x36, 0xd9, - 0xa4, 0x33, 0x39, 0xc9, 0x98, 0x9f, 0x13, 0xcf, 0x4e, 0x5e, 0xef, 0x81, 0x87, 0x7b, 0x52, 0xc8, - 0x56, 0xee, 0x3c, 0xd3, 0x67, 0xe5, 0xce, 0x55, 0x38, 0x25, 0xf5, 0xda, 0xca, 0xfc, 0xa2, 0x7a, - 0xe9, 0xc9, 0xb3, 0xe9, 0xeb, 0xe9, 0x16, 0x73, 0x70, 0x70, 0xee, 0x93, 0xf6, 0x1f, 0x59, 0x30, - 0xaa, 0x24, 0xd8, 0x7d, 0x48, 0x5a, 0xf6, 0xd3, 0x49, 0xcb, 0x97, 0x8e, 0xae, 0x03, 0x58, 0xcf, - 0x7b, 0xa4, 0xd8, 0xfc, 0xe8, 0x28, 0x80, 0xd6, 0x13, 0x4a, 0x45, 0x5b, 0x3d, 0x55, 0xf4, 0x43, - 0x2b, 0xa3, 0xf3, 0x2a, 0x31, 0x56, 0x1e, 0x6c, 0x25, 0xc6, 0x3a, 0x9c, 0x96, 0x53, 0x8a, 0x1f, - 0x29, 0x5f, 0x0e, 0x63, 0x25, 0xf2, 0x8d, 0xfb, 0x06, 0x17, 0xf3, 0x90, 0x70, 0xfe, 0xb3, 0x29, - 0xdb, 0x6e, 0xe8, 0x40, 0xdb, 0x4e, 0x49, 0xb9, 0xa5, 0x0d, 0x79, 0x1b, 0x68, 0x46, 0xca, 0x2d, - 0x5d, 0xac, 0x63, 0x8d, 0x93, 0xaf, 0xea, 0x6a, 0x05, 0xa9, 0x3a, 0x38, 0xb4, 0xaa, 0x93, 0x42, - 0x77, 0xb8, 0xa7, 0xd0, 0x95, 0x47, 0x57, 0x23, 0x3d, 0x8f, 0xae, 0x3e, 0x08, 0x63, 0x5e, 0xb0, - 0x45, 0x22, 0x2f, 0x21, 0x0d, 0xb6, 0x16, 0x98, 0x40, 0xae, 0x6a, 0x43, 0x67, 0x31, 0x05, 0xc5, - 0x19, 0xec, 0xb4, 0xa6, 0x18, 0xeb, 0x43, 0x53, 0xf4, 0xd0, 0xcf, 0xe3, 0xc5, 0xe8, 0xe7, 0x13, - 0x47, 0xd7, 0xcf, 0x13, 0xc7, 0xaa, 0x9f, 0x51, 0x21, 0xfa, 0xb9, 0x2f, 0xd5, 0x67, 0x6c, 0xd2, - 0x4f, 0x1d, 0xb0, 0x49, 0xef, 0xa5, 0x9c, 0x4f, 0xdf, 0xb3, 0x72, 0xce, 0xd7, 0xbb, 0x8f, 0xbc, - 0xab, 0x77, 0x0b, 0xd1, 0xbb, 0x9f, 0x29, 0xc1, 0x69, 0xad, 0x99, 0xa8, 0x3c, 0xf0, 0x36, 0xa8, - 0x6c, 0x66, 0x57, 0x6c, 0xf3, 0x03, 0x6f, 0x23, 0x55, 0x5e, 0x17, 0x0b, 0x50, 0x10, 0x6c, 0x60, - 0xb1, 0x8c, 0x73, 0x12, 0xb1, 0xcb, 0x5d, 0xb2, 0x6a, 0x6b, 0x5e, 0xb4, 0x63, 0x85, 0x41, 0x07, - 0x81, 0xfe, 0x16, 0x05, 0x4f, 0xb2, 0x65, 0xc3, 0xe7, 0x35, 0x08, 0x9b, 0x78, 0xe8, 0x7d, 0x9c, - 0x09, 0x13, 0x99, 0x54, 0x75, 0x8d, 0xf0, 0x6d, 0xa5, 0x92, 0x92, 0x0a, 0x2a, 0xbb, 0xc3, 0x2a, - 0x22, 0x54, 0xba, 0xbb, 0xc3, 0x62, 0x47, 0x15, 0x86, 0xfd, 0x3f, 0x2d, 0x38, 0x93, 0x3b, 0x14, - 0xf7, 0xc1, 0x1c, 0xd9, 0x4d, 0x9b, 0x23, 0xf5, 0xa2, 0xb6, 0xa4, 0xc6, 0x5b, 0xf4, 0x30, 0x4d, - 0xfe, 0xa3, 0x05, 0x63, 0x1a, 0xff, 0x3e, 0xbc, 0xaa, 0x97, 0x7e, 0xd5, 0xe2, 0x76, 0xdf, 0xb5, - 0xae, 0x77, 0xfb, 0xb5, 0x12, 0xa8, 0x52, 0xfe, 0xb3, 0x6e, 0xd2, 0x5f, 0xba, 0x59, 0x07, 0x06, - 0x59, 0x04, 0x49, 0x5c, 0x4c, 0x74, 0x5c, 0x9a, 0x3f, 0x8b, 0x46, 0xd1, 0x07, 0x7a, 0xec, 0x6f, - 0x8c, 0x05, 0x43, 0x76, 0xf5, 0x10, 0xaf, 0x92, 0xde, 0x10, 0x89, 0xd3, 0xfa, 0xea, 0x21, 0xd1, - 0x8e, 0x15, 0x06, 0x55, 0x98, 0x9e, 0x1b, 0x06, 0xf3, 0xbe, 0x13, 0xc7, 0xc2, 0x86, 0x53, 0x0a, - 0x73, 0x51, 0x02, 0xb0, 0xc6, 0x61, 0xc1, 0x25, 0x5e, 0xdc, 0xf2, 0x9d, 0x8e, 0xe1, 0x63, 0x31, - 0x0a, 0x7b, 0x29, 0x10, 0x36, 0xf1, 0xec, 0x26, 0x4c, 0xa6, 0x5f, 0x62, 0x81, 0x6c, 0xb0, 0xc8, - 0xee, 0xbe, 0x86, 0x73, 0x06, 0x6a, 0x0e, 0x7b, 0x6a, 0xa9, 0xed, 0x08, 0x99, 0xa0, 0xe3, 0x9b, - 0x25, 0x00, 0x6b, 0x1c, 0xfb, 0x9b, 0xe1, 0x64, 0xce, 0x98, 0xf5, 0x11, 0x40, 0xf7, 0x8b, 0x25, - 0x18, 0x4f, 0x3f, 0x19, 0xb3, 0xdc, 0x47, 0xde, 0x67, 0x2f, 0x76, 0xc3, 0x1d, 0x12, 0x75, 0x68, - 0x37, 0xac, 0x4c, 0xee, 0x63, 0x17, 0x06, 0xce, 0x79, 0x8a, 0xdd, 0xaa, 0xd1, 0x50, 0xaf, 0x2e, - 0xa7, 0xc7, 0x8d, 0x22, 0xa7, 0x87, 0x1e, 0x59, 0x33, 0xe8, 0x47, 0xb1, 0xc4, 0x26, 0x7f, 0x6a, - 0xff, 0xb0, 0xcc, 0x8d, 0xb9, 0xb6, 0xe7, 0x27, 0x5e, 0x20, 0x5e, 0x59, 0x4c, 0x1c, 0x65, 0xff, - 0x2c, 0x77, 0xa3, 0xe0, 0xbc, 0xe7, 0xec, 0xaf, 0x0c, 0x80, 0xaa, 0x80, 0xc2, 0x82, 0x32, 0x0b, - 0x0a, 0x69, 0x3d, 0x6c, 0x06, 0xad, 0xfa, 0xd2, 0x03, 0xfb, 0x45, 0x49, 0x71, 0x2f, 0x99, 0xe9, - 0x4e, 0x57, 0x03, 0xb6, 0xa6, 0x41, 0xd8, 0xc4, 0xa3, 0x3d, 0xf1, 0xbd, 0x1d, 0xc2, 0x1f, 0x1a, - 0x4c, 0xf7, 0x64, 0x49, 0x02, 0xb0, 0xc6, 0x61, 0x45, 0xb4, 0xbd, 0x8d, 0x0d, 0xe1, 0xf2, 0xd1, - 0x45, 0xb4, 0xbd, 0x8d, 0x0d, 0xcc, 0x20, 0xfc, 0xde, 0xa5, 0x70, 0x5b, 0xd8, 0xfc, 0xc6, 0xbd, - 0x4b, 0xe1, 0x36, 0x66, 0x10, 0xfa, 0x95, 0x82, 0x30, 0x6a, 0x3a, 0xbe, 0xf7, 0x26, 0x69, 0x28, - 0x2e, 0xc2, 0xd6, 0x57, 0x5f, 0xe9, 0x5a, 0x37, 0x0a, 0xce, 0x7b, 0x8e, 0x4e, 0xe8, 0x56, 0x44, - 0x1a, 0x9e, 0x9b, 0x98, 0xd4, 0x20, 0x3d, 0xa1, 0x57, 0xbb, 0x30, 0x70, 0xce, 0x53, 0x68, 0x16, - 0xc6, 0x65, 0x05, 0x1b, 0x59, 0xf5, 0x71, 0x38, 0x5d, 0x3a, 0x0e, 0xa7, 0xc1, 0x38, 0x8b, 0x4f, - 0x25, 0x56, 0x53, 0xd4, 0xa2, 0x65, 0x5b, 0x03, 0x43, 0x62, 0xc9, 0x1a, 0xb5, 0x58, 0x61, 0xd8, - 0x9f, 0x28, 0x53, 0x0d, 0xdb, 0xa3, 0xe4, 0xf3, 0x7d, 0x0b, 0xa1, 0x4e, 0xcf, 0xc8, 0x81, 0x3e, - 0x66, 0xe4, 0x0b, 0x30, 0x72, 0x2b, 0x0e, 0x03, 0x15, 0x9e, 0x5c, 0xe9, 0x19, 0x9e, 0x6c, 0x60, - 0xe5, 0x87, 0x27, 0x0f, 0x16, 0x15, 0x9e, 0x3c, 0x74, 0x8f, 0xe1, 0xc9, 0xff, 0xba, 0x02, 0xea, - 0x62, 0xcd, 0x6b, 0x24, 0xb9, 0x1d, 0x46, 0xdb, 0x5e, 0xb0, 0xc9, 0xaa, 0xb1, 0x7c, 0xc9, 0x92, - 0x05, 0x5d, 0x96, 0xcc, 0xb4, 0xdd, 0x8d, 0x82, 0x2e, 0x47, 0x4c, 0x31, 0x9b, 0x5e, 0x33, 0x18, - 0xf1, 0x30, 0x97, 0x4c, 0xe1, 0x18, 0xe1, 0xc1, 0x4f, 0xf5, 0x08, 0x7d, 0x0f, 0x80, 0xf4, 0x8f, - 0x6f, 0x48, 0x09, 0xbc, 0x58, 0x4c, 0xff, 0x30, 0xd9, 0xd0, 0xf6, 0xed, 0x9a, 0x62, 0x82, 0x0d, - 0x86, 0xe8, 0x33, 0x3a, 0xa5, 0x99, 0xe7, 0x31, 0x7d, 0xf4, 0x58, 0xc6, 0xa6, 0x9f, 0x84, 0x66, - 0x0c, 0x43, 0x5e, 0xb0, 0x49, 0xe7, 0x89, 0x08, 0xe3, 0x7c, 0x6f, 0x5e, 0xb1, 0xaf, 0xa5, 0xd0, - 0x69, 0xcc, 0x39, 0xbe, 0x13, 0xb8, 0x24, 0x5a, 0xe4, 0xe8, 0x7a, 0xcf, 0x23, 0x1a, 0xb0, 0x24, - 0xd4, 0x75, 0xfb, 0x67, 0xa5, 0x9f, 0xdb, 0x3f, 0xcf, 0x7e, 0x3b, 0x4c, 0x74, 0x7d, 0xcc, 0x43, - 0xe5, 0x2f, 0x1f, 0xa1, 0xcc, 0xd7, 0x2f, 0x0d, 0x6a, 0xa5, 0x75, 0x2d, 0x6c, 0xf0, 0xcb, 0x24, - 0x23, 0xfd, 0x45, 0x85, 0xfd, 0x5a, 0xe0, 0x14, 0x51, 0x6a, 0xc6, 0x68, 0xc4, 0x26, 0x4b, 0x3a, - 0x47, 0x5b, 0x4e, 0x44, 0x82, 0xe3, 0x9e, 0xa3, 0xab, 0x8a, 0x09, 0x36, 0x18, 0xa2, 0xad, 0x54, - 0xa2, 0xdd, 0xc5, 0xa3, 0x27, 0xda, 0xb1, 0xd2, 0xab, 0x79, 0x77, 0xae, 0xbd, 0x6d, 0xc1, 0x58, - 0x90, 0x9a, 0xb9, 0xc5, 0xc4, 0xd6, 0xe7, 0xaf, 0x0a, 0x7e, 0x2f, 0x73, 0xba, 0x0d, 0x67, 0xf8, - 0xe7, 0xa9, 0xb4, 0xca, 0x21, 0x55, 0x9a, 0xbe, 0xcc, 0x76, 0xb0, 0xd7, 0x65, 0xb6, 0x28, 0x50, - 0xb7, 0x8c, 0x0f, 0x15, 0x51, 0xae, 0x24, 0x75, 0xc5, 0x38, 0xe4, 0x5c, 0x2f, 0x7e, 0xd3, 0xcc, - 0xc3, 0x3d, 0xfc, 0x6d, 0xd3, 0xa3, 0xbd, 0xf2, 0x75, 0xed, 0xff, 0x33, 0x00, 0x27, 0xe4, 0x88, - 0xc8, 0xbc, 0x1c, 0xaa, 0x1f, 0x39, 0x5f, 0x6d, 0x2b, 0x2b, 0xfd, 0x78, 0x59, 0x02, 0xb0, 0xc6, - 0xa1, 0xf6, 0x58, 0x3b, 0x26, 0x2b, 0x2d, 0x12, 0x2c, 0x79, 0xeb, 0xb1, 0x38, 0x0b, 0x57, 0x0b, - 0xe5, 0xba, 0x06, 0x61, 0x13, 0x8f, 0x25, 0x0b, 0xbb, 0x66, 0xc5, 0x0e, 0x9d, 0x2c, 0x2c, 0x0c, - 0x55, 0x09, 0x47, 0x3f, 0x96, 0x7b, 0x07, 0x45, 0x31, 0xd9, 0xac, 0x5d, 0xe9, 0x48, 0x87, 0xbb, - 0x7c, 0x02, 0xfd, 0x23, 0x0b, 0x4e, 0xf3, 0x56, 0x39, 0x92, 0xd7, 0x5b, 0x0d, 0x27, 0x21, 0x71, - 0x31, 0xf7, 0x75, 0xe5, 0xf4, 0x4f, 0xbb, 0xb4, 0xf3, 0xd8, 0xe2, 0xfc, 0xde, 0xa0, 0x2f, 0x5a, - 0x30, 0xbe, 0x9d, 0xaa, 0xb8, 0x25, 0x55, 0xc7, 0x51, 0xcb, 0xd1, 0xa4, 0x88, 0xea, 0xa5, 0x96, - 0x6e, 0x8f, 0x71, 0x96, 0xbb, 0xfd, 0x17, 0x16, 0x98, 0x62, 0xf4, 0xfe, 0x17, 0xea, 0x3a, 0xbc, - 0x29, 0x28, 0xad, 0xcb, 0x4a, 0x4f, 0xeb, 0xf2, 0x09, 0x28, 0xb7, 0xbd, 0x86, 0xd8, 0x5f, 0xe8, - 0xd3, 0xf7, 0xc5, 0x05, 0x4c, 0xdb, 0xed, 0x3f, 0xa9, 0x68, 0x9f, 0x84, 0x48, 0x16, 0xfd, 0x6b, - 0xf1, 0xda, 0x1b, 0xaa, 0x02, 0x2f, 0x7f, 0xf3, 0x6b, 0x5d, 0x15, 0x78, 0xbf, 0xf5, 0xf0, 0xb9, - 0xc0, 0x7c, 0x80, 0x7a, 0x15, 0xe0, 0x1d, 0x3a, 0x20, 0x11, 0xf8, 0x16, 0x54, 0xe9, 0x16, 0x8c, - 0x39, 0x17, 0xab, 0xa9, 0x4e, 0x55, 0x2f, 0x8b, 0xf6, 0xbb, 0x7b, 0x53, 0xdf, 0x72, 0xf8, 0x6e, - 0xc9, 0xa7, 0xb1, 0xa2, 0x8f, 0x62, 0xa8, 0xd1, 0xdf, 0x2c, 0x67, 0x59, 0x6c, 0xee, 0xae, 0x2b, - 0x99, 0x29, 0x01, 0x85, 0x24, 0x44, 0x6b, 0x3e, 0x28, 0x80, 0x1a, 0x45, 0xe4, 0x4c, 0xf9, 0x1e, - 0x70, 0x55, 0x65, 0x0e, 0x4b, 0xc0, 0xdd, 0xbd, 0xa9, 0x97, 0x0f, 0xcf, 0x54, 0x3d, 0x8e, 0x35, - 0x0b, 0x43, 0x35, 0x0e, 0xf7, 0xbc, 0xe7, 0xfd, 0xff, 0x0e, 0xe8, 0xf9, 0x2d, 0x8a, 0x33, 0xff, - 0xb5, 0x98, 0xdf, 0x2f, 0x65, 0xe6, 0xf7, 0xb9, 0xae, 0xf9, 0x3d, 0x46, 0xc7, 0x2c, 0xa7, 0x64, - 0xf4, 0xfd, 0x36, 0x16, 0x0e, 0xf6, 0x49, 0x30, 0x2b, 0xe9, 0x8d, 0xb6, 0x17, 0x91, 0x78, 0x35, - 0x6a, 0x07, 0x5e, 0xb0, 0xc9, 0xa6, 0x6c, 0xd5, 0xb4, 0x92, 0x52, 0x60, 0x9c, 0xc5, 0xa7, 0x1b, - 0x7f, 0x3a, 0x2f, 0x6e, 0x3a, 0x3b, 0x7c, 0xe6, 0x19, 0x85, 0x31, 0xeb, 0xa2, 0x1d, 0x2b, 0x0c, - 0xb4, 0x05, 0x8f, 0x4b, 0x02, 0x0b, 0xc4, 0x27, 0xf4, 0x85, 0x58, 0x54, 0x61, 0xd4, 0xe4, 0x31, - 0xff, 0x3c, 0x30, 0xe4, 0xeb, 0x05, 0x85, 0xc7, 0xf1, 0x3e, 0xb8, 0x78, 0x5f, 0x4a, 0xf6, 0x97, - 0x59, 0x1c, 0x81, 0x51, 0xba, 0x81, 0xce, 0x3e, 0xdf, 0x6b, 0x7a, 0xb2, 0x7e, 0xa7, 0x9a, 0x7d, - 0x4b, 0xb4, 0x11, 0x73, 0x18, 0xba, 0x0d, 0x43, 0xeb, 0xfc, 0xfe, 0xf7, 0x62, 0xee, 0x5d, 0x12, - 0x97, 0xc9, 0xb3, 0xda, 0xdd, 0xf2, 0x66, 0xf9, 0xbb, 0xfa, 0x27, 0x96, 0xdc, 0xec, 0xdf, 0xad, - 0xc0, 0xb8, 0x8c, 0xf5, 0xba, 0xec, 0xc5, 0x2c, 0x3c, 0xc0, 0xbc, 0xd0, 0xa0, 0x74, 0xe0, 0x85, - 0x06, 0x1f, 0x01, 0x68, 0x90, 0x96, 0x1f, 0x76, 0x98, 0x71, 0x38, 0x70, 0x68, 0xe3, 0x50, 0xed, - 0x27, 0x16, 0x14, 0x15, 0x6c, 0x50, 0x14, 0x45, 0x4b, 0xf9, 0xfd, 0x08, 0x99, 0xa2, 0xa5, 0xc6, - 0xed, 0x6c, 0x83, 0xf7, 0xf7, 0x76, 0x36, 0x0f, 0xc6, 0x79, 0x17, 0x55, 0x81, 0x84, 0x7b, 0xa8, - 0x83, 0xc0, 0x52, 0xcc, 0x16, 0xd2, 0x64, 0x70, 0x96, 0xae, 0x79, 0xf5, 0x5a, 0xf5, 0x7e, 0x5f, - 0xbd, 0xf6, 0x7e, 0xa8, 0xc9, 0xef, 0x1c, 0x4f, 0xd6, 0x74, 0xf1, 0x1e, 0x39, 0x0d, 0x62, 0xac, - 0xe1, 0x5d, 0xb5, 0x5e, 0xe0, 0x41, 0xd5, 0x7a, 0xb1, 0xdf, 0x2e, 0xd3, 0x5d, 0x05, 0xef, 0xd7, - 0xa1, 0x6f, 0x2e, 0xbc, 0x6c, 0xdc, 0x5c, 0x78, 0xb8, 0xef, 0x59, 0xcd, 0xdc, 0x70, 0xf8, 0x38, - 0x0c, 0x24, 0xce, 0xa6, 0xcc, 0x88, 0x65, 0xd0, 0x35, 0x67, 0x33, 0xc6, 0xac, 0xf5, 0x30, 0x35, - 0x9e, 0x5f, 0x86, 0xd1, 0xd8, 0xdb, 0x0c, 0x9c, 0xa4, 0x1d, 0x11, 0xe3, 0x30, 0x51, 0x47, 0xcc, - 0x98, 0x40, 0x9c, 0xc6, 0x45, 0x9f, 0xb4, 0x00, 0x22, 0xa2, 0xf6, 0x2c, 0x83, 0x45, 0xcc, 0x21, - 0x25, 0x06, 0x24, 0x5d, 0xb3, 0x46, 0x87, 0xda, 0xab, 0x18, 0x6c, 0xed, 0x4f, 0x5b, 0x30, 0xd1, - 0xf5, 0x14, 0x6a, 0xc1, 0xa0, 0xcb, 0xee, 0x97, 0x2c, 0xa6, 0x2e, 0x65, 0xfa, 0xae, 0x4a, 0xae, - 0x9c, 0x78, 0x1b, 0x16, 0x7c, 0xec, 0x5f, 0x1e, 0x81, 0x53, 0xf5, 0xf9, 0x65, 0x79, 0x2b, 0xd1, - 0xb1, 0xa5, 0xf8, 0xe6, 0xf1, 0xb8, 0x7f, 0x29, 0xbe, 0x3d, 0xb8, 0xfb, 0x46, 0x8a, 0xaf, 0x6f, - 0xa4, 0xf8, 0xa6, 0xf3, 0x2d, 0xcb, 0x45, 0xe4, 0x5b, 0xe6, 0xf5, 0xa0, 0x9f, 0x7c, 0xcb, 0x63, - 0xcb, 0xf9, 0xdd, 0xb7, 0x43, 0x87, 0xca, 0xf9, 0x55, 0x09, 0xd1, 0x85, 0xa4, 0x77, 0xf5, 0xf8, - 0x54, 0xb9, 0x09, 0xd1, 0x2a, 0x19, 0x95, 0xa7, 0x2e, 0x0a, 0xa5, 0xf7, 0x5a, 0xf1, 0x1d, 0xe8, - 0x23, 0x19, 0x55, 0x64, 0x4f, 0x9a, 0x09, 0xd0, 0x43, 0x45, 0x24, 0x40, 0xe7, 0x75, 0xe7, 0xc0, - 0x04, 0xe8, 0x97, 0x61, 0xd4, 0xf5, 0xc3, 0x80, 0xac, 0x46, 0x61, 0x12, 0xba, 0xa1, 0xbc, 0xcd, - 0x5b, 0x5f, 0xcc, 0x68, 0x02, 0x71, 0x1a, 0xb7, 0x57, 0xf6, 0x74, 0xed, 0xa8, 0xd9, 0xd3, 0xf0, - 0x80, 0xb2, 0xa7, 0x8d, 0xfc, 0xe0, 0xe1, 0x22, 0xf2, 0x83, 0xf3, 0xbe, 0x48, 0x5f, 0xf9, 0xc1, - 0xef, 0xf0, 0xcb, 0xec, 0xe9, 0x66, 0x84, 0x4b, 0x61, 0x76, 0x44, 0x37, 0x7c, 0xfe, 0xf5, 0x63, - 0x98, 0xb0, 0x37, 0xeb, 0x9a, 0x8d, 0xba, 0xe0, 0x5e, 0x37, 0xe1, 0x74, 0x47, 0x8e, 0x92, 0x53, - 0xfc, 0xe3, 0x25, 0xf8, 0xba, 0x03, 0xbb, 0x80, 0x6e, 0x03, 0x24, 0xce, 0xa6, 0x98, 0xa8, 0xe2, - 0x20, 0xeb, 0x88, 0x41, 0xbe, 0x6b, 0x92, 0x9e, 0xc8, 0x77, 0x53, 0xe4, 0xb1, 0xc1, 0x8a, 0xc5, - 0xf6, 0x86, 0x7e, 0x57, 0x49, 0x69, 0x1c, 0xfa, 0x04, 0x33, 0x08, 0x35, 0x84, 0x22, 0xb2, 0x49, - 0x8d, 0xfb, 0x72, 0xda, 0x10, 0xc2, 0xac, 0x15, 0x0b, 0x28, 0x7a, 0x11, 0x86, 0x1d, 0xdf, 0xe7, - 0xb9, 0x77, 0x24, 0x16, 0x37, 0xa6, 0xea, 0x42, 0xb2, 0x1a, 0x84, 0x4d, 0x3c, 0xfb, 0xcf, 0x4b, - 0x30, 0x75, 0x80, 0x4c, 0xe9, 0xca, 0xb9, 0xae, 0xf4, 0x9d, 0x73, 0x2d, 0x72, 0x87, 0x06, 0x7b, - 0xe4, 0x0e, 0xbd, 0x08, 0xc3, 0x09, 0x71, 0x9a, 0x22, 0x2c, 0x30, 0x5b, 0x1f, 0x71, 0x4d, 0x83, - 0xb0, 0x89, 0x47, 0xa5, 0xd8, 0x98, 0xe3, 0xba, 0x24, 0x8e, 0x65, 0x72, 0x90, 0xf0, 0x72, 0x17, - 0x96, 0x79, 0xc4, 0x0e, 0x0f, 0x66, 0x53, 0x2c, 0x70, 0x86, 0x65, 0x76, 0xc0, 0x6b, 0x7d, 0x0e, - 0xf8, 0x4f, 0x95, 0xe0, 0x89, 0x7d, 0xb5, 0x5b, 0xdf, 0x79, 0x5b, 0xed, 0x98, 0x44, 0xd9, 0x89, - 0x73, 0x3d, 0x26, 0x11, 0x66, 0x10, 0x3e, 0x4a, 0xad, 0x96, 0x0a, 0xe9, 0x2e, 0x3e, 0xd1, 0x91, - 0x8f, 0x52, 0x8a, 0x05, 0xce, 0xb0, 0xbc, 0xd7, 0x69, 0xf9, 0xbb, 0x03, 0xf0, 0x54, 0x1f, 0x36, - 0x40, 0x81, 0x09, 0xa1, 0xe9, 0x64, 0xe7, 0xf2, 0x03, 0x4a, 0x76, 0xbe, 0xb7, 0xe1, 0x7a, 0x37, - 0x47, 0xba, 0xaf, 0xc4, 0xd3, 0x2f, 0x97, 0xe0, 0x6c, 0x6f, 0x83, 0x05, 0x7d, 0x1b, 0x8c, 0x47, - 0x2a, 0x3e, 0xd0, 0xcc, 0x93, 0x3e, 0xc9, 0x7d, 0x5c, 0x29, 0x10, 0xce, 0xe2, 0xa2, 0x69, 0x80, - 0x96, 0x93, 0x6c, 0xc5, 0x17, 0x76, 0xbd, 0x38, 0x11, 0x85, 0xe5, 0xc6, 0xf8, 0xc9, 0xab, 0x6c, - 0xc5, 0x06, 0x06, 0x65, 0xc7, 0xfe, 0x2d, 0x84, 0xd7, 0xc2, 0x84, 0x3f, 0xc4, 0xb7, 0x9e, 0x27, - 0xe5, 0x35, 0x8c, 0x06, 0x08, 0x67, 0x71, 0x29, 0x3b, 0x76, 0xb6, 0xcf, 0x3b, 0x3a, 0xa0, 0x33, - 0xab, 0x97, 0x54, 0x2b, 0x36, 0x30, 0xb2, 0x19, 0xe0, 0x95, 0x83, 0x33, 0xc0, 0xed, 0x7f, 0x59, - 0x82, 0x33, 0x3d, 0x0d, 0xde, 0xfe, 0xc4, 0xd4, 0xc3, 0x97, 0x85, 0x7d, 0x8f, 0x2b, 0xec, 0x50, - 0xd9, 0xbb, 0xf6, 0x1f, 0xf7, 0x98, 0x69, 0x22, 0x33, 0xf7, 0xde, 0x8b, 0x98, 0x3c, 0x7c, 0xe3, - 0xd9, 0x95, 0x8c, 0x3b, 0x70, 0x88, 0x64, 0xdc, 0xcc, 0xc7, 0xa8, 0xf4, 0xa9, 0x1d, 0xfe, 0xeb, - 0x40, 0xcf, 0xe1, 0xa5, 0x1b, 0xe4, 0xbe, 0x4e, 0x10, 0x16, 0xe0, 0x84, 0x17, 0xb0, 0x8b, 0x75, - 0xeb, 0xed, 0x75, 0x51, 0x6b, 0x8c, 0x17, 0xd4, 0x55, 0xa9, 0x30, 0x8b, 0x19, 0x38, 0xee, 0x7a, - 0xe2, 0x21, 0x4c, 0x8e, 0xbe, 0xb7, 0x21, 0x3d, 0xa4, 0xe4, 0x5e, 0x81, 0xd3, 0x72, 0x28, 0xb6, - 0x9c, 0x88, 0x34, 0x84, 0xb2, 0x8d, 0x45, 0xf2, 0xd3, 0x19, 0x9e, 0x40, 0x95, 0x83, 0x80, 0xf3, - 0x9f, 0x63, 0xb7, 0xa0, 0x86, 0x2d, 0xcf, 0x15, 0x5b, 0x41, 0x7d, 0x0b, 0x2a, 0x6d, 0xc4, 0x1c, - 0xa6, 0xf5, 0x45, 0xed, 0xfe, 0xe8, 0x8b, 0x8f, 0x40, 0x4d, 0x8d, 0x37, 0x4f, 0x70, 0x50, 0x93, - 0xbc, 0x2b, 0xc1, 0x41, 0xcd, 0x70, 0x03, 0x8b, 0xce, 0x0e, 0xba, 0x51, 0xc9, 0xac, 0x56, 0xca, - 0x8f, 0xb6, 0xdb, 0xcf, 0xc3, 0x88, 0xf2, 0x05, 0xf6, 0x7b, 0x17, 0xad, 0xfd, 0x57, 0x25, 0xc8, - 0x5c, 0xbb, 0x86, 0x76, 0xa1, 0xd6, 0x90, 0xd7, 0xf8, 0x17, 0x53, 0xd0, 0x79, 0x41, 0x92, 0xd3, - 0x07, 0x61, 0xaa, 0x09, 0x6b, 0x66, 0xe8, 0x2d, 0x5e, 0x3b, 0x59, 0xb0, 0x2e, 0x15, 0x91, 0x20, - 0x5f, 0x57, 0xf4, 0xcc, 0xcb, 0x26, 0x65, 0x1b, 0x36, 0xf8, 0xa1, 0x04, 0x6a, 0x5b, 0xf2, 0x7a, - 0xb9, 0x62, 0xc4, 0x9d, 0xba, 0xad, 0x8e, 0x9b, 0x68, 0xea, 0x2f, 0xd6, 0x8c, 0xec, 0x3f, 0x2a, - 0xc1, 0xa9, 0xf4, 0x07, 0x10, 0x07, 0x97, 0x3f, 0x63, 0xc1, 0xa3, 0xbe, 0x13, 0x27, 0xf5, 0x36, - 0xdb, 0x28, 0x6c, 0xb4, 0xfd, 0x95, 0x4c, 0x99, 0xed, 0xa3, 0x3a, 0x5b, 0x14, 0xe1, 0xec, 0x75, - 0x84, 0x73, 0x8f, 0xdd, 0xd9, 0x9b, 0x7a, 0x74, 0x29, 0x9f, 0x39, 0xee, 0xd5, 0x2b, 0xf4, 0xb6, - 0x05, 0x27, 0xdc, 0x76, 0x14, 0x91, 0x20, 0xd1, 0x5d, 0xe5, 0x5f, 0xf1, 0x5a, 0x21, 0x03, 0xa9, - 0x3b, 0x78, 0x8a, 0x0a, 0xd4, 0xf9, 0x0c, 0x2f, 0xdc, 0xc5, 0xdd, 0xfe, 0x21, 0xaa, 0x39, 0x7b, - 0xbe, 0xe7, 0xdf, 0xb0, 0xfb, 0x13, 0xff, 0x74, 0x10, 0x46, 0x53, 0xb5, 0xc4, 0x53, 0x87, 0x7d, - 0xd6, 0x81, 0x87, 0x7d, 0x2c, 0x5d, 0xaf, 0x1d, 0xc8, 0xab, 0xe5, 0x8d, 0x74, 0xbd, 0x76, 0x40, - 0x30, 0x87, 0x89, 0x21, 0xc5, 0xed, 0x40, 0xe4, 0x02, 0x98, 0x43, 0x8a, 0xdb, 0x01, 0x16, 0x50, - 0xf4, 0x71, 0x0b, 0x46, 0xd8, 0xe2, 0x13, 0x47, 0xa5, 0x42, 0xa1, 0x5d, 0x29, 0x60, 0xb9, 0xcb, - 0xba, 0xf9, 0x2c, 0x76, 0xd4, 0x6c, 0xc1, 0x29, 0x8e, 0xe8, 0x53, 0x16, 0xd4, 0xd4, 0x3d, 0xb6, - 0xe2, 0x6c, 0xa4, 0x5e, 0x6c, 0xa9, 0xf6, 0x8c, 0xd4, 0x53, 0x35, 0xb3, 0xb1, 0x66, 0x8c, 0x62, - 0x75, 0x8e, 0x39, 0x74, 0x3c, 0xe7, 0x98, 0x90, 0x73, 0x86, 0xf9, 0x7e, 0xa8, 0x35, 0x9d, 0xc0, - 0xdb, 0x20, 0x71, 0xc2, 0x8f, 0x16, 0xe5, 0xcd, 0x1c, 0xb2, 0x11, 0x6b, 0x38, 0x35, 0xf6, 0x63, - 0xf6, 0x62, 0x89, 0x71, 0x16, 0xc8, 0x8c, 0xfd, 0xba, 0x6e, 0xc6, 0x26, 0x8e, 0x79, 0x70, 0x09, - 0x0f, 0xf4, 0xe0, 0x72, 0xf8, 0x80, 0x83, 0xcb, 0x3a, 0x9c, 0x76, 0xda, 0x49, 0x78, 0x99, 0x38, - 0xfe, 0x6c, 0x92, 0x90, 0x66, 0x2b, 0x89, 0x79, 0xf9, 0xf9, 0x11, 0xe6, 0x02, 0x56, 0xd1, 0x6e, - 0x75, 0xe2, 0x6f, 0x74, 0x21, 0xe1, 0xfc, 0x67, 0xed, 0x7f, 0x6e, 0xc1, 0xe9, 0xdc, 0xa9, 0xf0, - 0xf0, 0xe6, 0x19, 0xd8, 0x3f, 0x52, 0x81, 0x93, 0x39, 0x37, 0x0d, 0xa0, 0x8e, 0xb9, 0x48, 0xac, - 0x22, 0x42, 0xf6, 0xd2, 0x11, 0x68, 0xf2, 0xdb, 0xe4, 0xac, 0x8c, 0xc3, 0xc5, 0x22, 0xe8, 0x78, - 0x80, 0xf2, 0xfd, 0x8d, 0x07, 0x30, 0xe6, 0xfa, 0xc0, 0x03, 0x9d, 0xeb, 0x95, 0x03, 0xe6, 0xfa, - 0xcf, 0x5a, 0x30, 0xd9, 0xec, 0x71, 0x6d, 0x98, 0x38, 0x4f, 0xba, 0x71, 0x3c, 0x97, 0x92, 0xcd, - 0x3d, 0x7e, 0x67, 0x6f, 0xaa, 0xe7, 0x6d, 0x6d, 0xb8, 0x67, 0xaf, 0xec, 0xaf, 0x94, 0x81, 0xd9, - 0x6b, 0xac, 0x9a, 0x74, 0x07, 0x7d, 0xcc, 0xbc, 0xb0, 0xc4, 0x2a, 0xea, 0x72, 0x0d, 0x4e, 0x5c, - 0x5d, 0x78, 0xc2, 0x47, 0x30, 0xef, 0xfe, 0x93, 0xac, 0x24, 0x2c, 0xf5, 0x21, 0x09, 0x7d, 0x79, - 0x33, 0x4c, 0xb9, 0xf8, 0x9b, 0x61, 0x6a, 0xd9, 0x5b, 0x61, 0xf6, 0xff, 0xc4, 0x03, 0x0f, 0xe5, - 0x27, 0xfe, 0x15, 0x8b, 0x0b, 0x9e, 0xcc, 0x57, 0xd0, 0xe6, 0x86, 0xb5, 0x8f, 0xb9, 0xf1, 0x0c, - 0x54, 0x63, 0x21, 0x99, 0x85, 0x59, 0xa2, 0x43, 0xc1, 0x44, 0x3b, 0x56, 0x18, 0x74, 0xd7, 0xe5, - 0xf8, 0x7e, 0x78, 0xfb, 0x42, 0xb3, 0x95, 0x74, 0x84, 0x81, 0xa2, 0xb6, 0x05, 0xb3, 0x0a, 0x82, - 0x0d, 0x2c, 0xf4, 0x14, 0x0c, 0xf2, 0xb2, 0x0f, 0xc2, 0xb9, 0x33, 0x4c, 0xd7, 0x21, 0xaf, 0x09, - 0xd1, 0xc0, 0x02, 0x64, 0x6f, 0x81, 0xb1, 0xab, 0xb8, 0xf7, 0xbb, 0xa9, 0x0f, 0xbe, 0x6e, 0xd2, - 0xfe, 0x07, 0x25, 0xc1, 0x8a, 0xef, 0x12, 0x74, 0x64, 0xa0, 0x75, 0xc8, 0xc8, 0xc0, 0xb7, 0x00, - 0xdc, 0xb0, 0xd9, 0xa2, 0xfb, 0xe6, 0xb5, 0xb0, 0x98, 0xcd, 0xd6, 0xbc, 0xa2, 0xa7, 0x47, 0x55, - 0xb7, 0x61, 0x83, 0x5f, 0x4a, 0xb4, 0x97, 0x0f, 0x14, 0xed, 0x29, 0x29, 0x37, 0xb0, 0xbf, 0x94, - 0xb3, 0xff, 0xdc, 0x82, 0x94, 0xd5, 0x87, 0x5a, 0x50, 0xa1, 0xdd, 0xed, 0x08, 0x81, 0xb1, 0x52, - 0x9c, 0x89, 0x49, 0x25, 0xb5, 0x58, 0x85, 0xec, 0x27, 0xe6, 0x8c, 0x90, 0x2f, 0xa2, 0x20, 0x0b, - 0xd9, 0xfc, 0x98, 0x0c, 0x2f, 0x87, 0xe1, 0x36, 0x0f, 0x26, 0xd2, 0x11, 0x95, 0xf6, 0x4b, 0x30, - 0xd1, 0xd5, 0x29, 0x76, 0x9f, 0x75, 0x28, 0x77, 0xf0, 0xc6, 0xea, 0x61, 0xd5, 0x17, 0x30, 0x87, - 0xd9, 0x5f, 0xb6, 0xe0, 0x44, 0x96, 0x3c, 0x7a, 0xc7, 0x82, 0x89, 0x38, 0x4b, 0xef, 0xb8, 0xc6, - 0x4e, 0x65, 0x3b, 0x74, 0x81, 0x70, 0x77, 0x27, 0xec, 0xff, 0x21, 0xb4, 0xc1, 0x4d, 0x2f, 0x68, - 0x84, 0xb7, 0x95, 0x9d, 0x64, 0xf5, 0xb4, 0x93, 0xa8, 0x78, 0x70, 0xb7, 0x48, 0xa3, 0xed, 0x77, - 0xd5, 0x84, 0xa8, 0x8b, 0x76, 0xac, 0x30, 0x58, 0x0a, 0x7c, 0x5b, 0xec, 0x5b, 0x33, 0x93, 0x72, - 0x41, 0xb4, 0x63, 0x85, 0x81, 0x5e, 0x80, 0x11, 0xe3, 0x25, 0xe5, 0xbc, 0x64, 0x9b, 0x0e, 0x43, - 0x83, 0xc7, 0x38, 0x85, 0x85, 0xa6, 0x01, 0x94, 0xcd, 0x25, 0x35, 0x36, 0x73, 0xb4, 0x2b, 0xc1, - 0x18, 0x63, 0x03, 0x83, 0x15, 0x9c, 0xf0, 0xdb, 0x31, 0x3b, 0x49, 0x1e, 0xd4, 0xb7, 0x2b, 0xcc, - 0x8b, 0x36, 0xac, 0xa0, 0x54, 0xb8, 0x35, 0x9d, 0xa0, 0xed, 0xf8, 0x74, 0x84, 0x84, 0xeb, 0x4c, - 0x2d, 0xc3, 0x65, 0x05, 0xc1, 0x06, 0x16, 0x7d, 0xe3, 0xc4, 0x6b, 0x92, 0x57, 0xc3, 0x40, 0x46, - 0xa9, 0xeb, 0xe0, 0x02, 0xd1, 0x8e, 0x15, 0x06, 0x7a, 0x09, 0x86, 0x9d, 0xa0, 0xc1, 0x0d, 0xc4, - 0x30, 0x12, 0x67, 0x94, 0x6a, 0xf7, 0x79, 0x3d, 0x26, 0xb3, 0x1a, 0x8a, 0x4d, 0xd4, 0xec, 0xd5, - 0x12, 0xd0, 0xe7, 0xd5, 0x75, 0x7f, 0x66, 0xc1, 0xb8, 0xae, 0x20, 0xc4, 0x3c, 0x6c, 0x29, 0xd7, - 0xa2, 0x75, 0xa0, 0x6b, 0x31, 0x5d, 0x48, 0xa4, 0xd4, 0x57, 0x21, 0x11, 0xb3, 0xc6, 0x47, 0x79, - 0xdf, 0x1a, 0x1f, 0xdf, 0x00, 0x43, 0xdb, 0xa4, 0x63, 0x14, 0x03, 0x61, 0xca, 0xe1, 0x2a, 0x6f, - 0xc2, 0x12, 0x86, 0x6c, 0x18, 0x74, 0x1d, 0x55, 0x50, 0x70, 0x44, 0xc4, 0xa6, 0xcd, 0x32, 0x24, - 0x01, 0xb1, 0x57, 0xa0, 0xa6, 0x0e, 0xf5, 0xa5, 0xa7, 0xcf, 0xca, 0xf7, 0xf4, 0xf5, 0x75, 0x09, - 0xfe, 0xdc, 0xfa, 0x6f, 0x7e, 0xf5, 0xc9, 0xf7, 0xfc, 0xce, 0x57, 0x9f, 0x7c, 0xcf, 0x1f, 0x7e, - 0xf5, 0xc9, 0xf7, 0x7c, 0xfc, 0xce, 0x93, 0xd6, 0x6f, 0xde, 0x79, 0xd2, 0xfa, 0x9d, 0x3b, 0x4f, - 0x5a, 0x7f, 0x78, 0xe7, 0x49, 0xeb, 0x2b, 0x77, 0x9e, 0xb4, 0xde, 0xfe, 0x2f, 0x4f, 0xbe, 0xe7, - 0xd5, 0xdc, 0xbc, 0x08, 0xfa, 0xe3, 0x59, 0xb7, 0x31, 0xb3, 0xf3, 0x3c, 0x0b, 0xcd, 0xa7, 0xeb, - 0x79, 0xc6, 0x98, 0xc4, 0x33, 0x72, 0x3d, 0xff, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x46, 0x6f, - 0xd4, 0x86, 0x81, 0x00, 0x01, 0x00, + 0x56, 0x18, 0xbc, 0x59, 0xa5, 0x92, 0xaa, 0x8e, 0x5e, 0xad, 0xdb, 0xdd, 0x33, 0xea, 0x9e, 0x99, + 0x56, 0x93, 0x03, 0xb3, 0xcb, 0xb7, 0xb3, 0x12, 0xdb, 0xbb, 0xb3, 0xcc, 0xc7, 0xc0, 0x82, 0x1e, + 0xfd, 0x50, 0xb7, 0xd4, 0xd2, 0xde, 0x52, 0x77, 0xb3, 0x8f, 0xd9, 0xdd, 0x54, 0xd6, 0x95, 0x94, + 0xad, 0xac, 0xcc, 0x9a, 0xcc, 0x2c, 0xb5, 0x6a, 0x18, 0x96, 0x5d, 0x76, 0x17, 0x16, 0xf6, 0x35, + 0x06, 0x87, 0x19, 0x6c, 0x83, 0x17, 0x83, 0x1f, 0x11, 0x8e, 0x0d, 0xb0, 0xf9, 0x61, 0x22, 0x80, + 0x20, 0x78, 0x04, 0x01, 0x7e, 0x81, 0x09, 0x0c, 0xd8, 0xb0, 0xf2, 0x6e, 0xdb, 0x0e, 0x08, 0x47, + 0x98, 0x08, 0xb0, 0x7f, 0x38, 0xda, 0x0e, 0xc2, 0x71, 0xdf, 0x37, 0xb3, 0xb2, 0xa4, 0x52, 0x2b, + 0xa5, 0xee, 0x85, 0xf9, 0x57, 0x75, 0xcf, 0xc9, 0x73, 0x6e, 0xde, 0xbc, 0xf7, 0x9c, 0x73, 0xcf, + 0x3d, 0xe7, 0x5c, 0x58, 0xda, 0xf4, 0x92, 0xad, 0xf6, 0xfa, 0xb4, 0x1b, 0x36, 0x67, 0x9c, 0x68, + 0x33, 0x6c, 0x45, 0xe1, 0x5d, 0xf6, 0xe3, 0x1d, 0x6e, 0x63, 0x66, 0xe7, 0x5d, 0x33, 0xad, 0xed, + 0xcd, 0x19, 0xa7, 0xe5, 0xc5, 0x33, 0x4e, 0xab, 0xe5, 0x7b, 0xae, 0x93, 0x78, 0x61, 0x30, 0xb3, + 0xf3, 0x4e, 0xc7, 0x6f, 0x6d, 0x39, 0xef, 0x9c, 0xd9, 0x24, 0x01, 0x89, 0x9c, 0x84, 0x34, 0xa6, + 0x5b, 0x51, 0x98, 0x84, 0xe8, 0xdb, 0x35, 0xb5, 0x69, 0x49, 0x8d, 0xfd, 0xf8, 0x88, 0xdb, 0x98, + 0xde, 0x79, 0xd7, 0x74, 0x6b, 0x7b, 0x73, 0x9a, 0x52, 0x9b, 0x36, 0xa8, 0x4d, 0x4b, 0x6a, 0xe7, + 0xdf, 0x61, 0xf4, 0x65, 0x33, 0xdc, 0x0c, 0x67, 0x18, 0xd1, 0xf5, 0xf6, 0x06, 0xfb, 0xc7, 0xfe, + 0xb0, 0x5f, 0x9c, 0xd9, 0x79, 0x7b, 0xfb, 0xc5, 0x78, 0xda, 0x0b, 0x69, 0xf7, 0x66, 0xdc, 0x30, + 0x22, 0x33, 0x3b, 0x5d, 0x1d, 0x3a, 0x7f, 0x4d, 0xe3, 0x90, 0xdd, 0x84, 0x04, 0xb1, 0x17, 0x06, + 0xf1, 0x3b, 0x68, 0x17, 0x48, 0xb4, 0x43, 0x22, 0xf3, 0xf5, 0x0c, 0x84, 0x3c, 0x4a, 0xef, 0xd6, + 0x94, 0x9a, 0x8e, 0xbb, 0xe5, 0x05, 0x24, 0xea, 0xe8, 0xc7, 0x9b, 0x24, 0x71, 0xf2, 0x9e, 0x9a, + 0xe9, 0xf5, 0x54, 0xd4, 0x0e, 0x12, 0xaf, 0x49, 0xba, 0x1e, 0x78, 0xcf, 0x41, 0x0f, 0xc4, 0xee, + 0x16, 0x69, 0x3a, 0x5d, 0xcf, 0xbd, 0xab, 0xd7, 0x73, 0xed, 0xc4, 0xf3, 0x67, 0xbc, 0x20, 0x89, + 0x93, 0x28, 0xfb, 0x90, 0xfd, 0xf7, 0x2d, 0x18, 0x9d, 0xbd, 0x53, 0x9f, 0x6d, 0x27, 0x5b, 0xf3, + 0x61, 0xb0, 0xe1, 0x6d, 0xa2, 0x17, 0x60, 0xd8, 0xf5, 0xdb, 0x71, 0x42, 0xa2, 0x9b, 0x4e, 0x93, + 0x4c, 0x5a, 0x17, 0xad, 0xb7, 0xd5, 0xe6, 0x4e, 0xff, 0xd6, 0xde, 0xd4, 0x5b, 0xee, 0xef, 0x4d, + 0x0d, 0xcf, 0x6b, 0x10, 0x36, 0xf1, 0xd0, 0x37, 0xc3, 0x50, 0x14, 0xfa, 0x64, 0x16, 0xdf, 0x9c, + 0x2c, 0xb1, 0x47, 0xc6, 0xc5, 0x23, 0x43, 0x98, 0x37, 0x63, 0x09, 0xa7, 0xa8, 0xad, 0x28, 0xdc, + 0xf0, 0x7c, 0x32, 0x59, 0x4e, 0xa3, 0xae, 0xf2, 0x66, 0x2c, 0xe1, 0xf6, 0x8f, 0x97, 0x60, 0x7c, + 0xb6, 0xd5, 0xba, 0x46, 0x1c, 0x3f, 0xd9, 0xaa, 0x27, 0x4e, 0xd2, 0x8e, 0xd1, 0x26, 0x0c, 0xc6, + 0xec, 0x97, 0xe8, 0xdb, 0x8a, 0x78, 0x7a, 0x90, 0xc3, 0x1f, 0xec, 0x4d, 0x7d, 0x47, 0xde, 0x8c, + 0xde, 0xf4, 0x92, 0xb0, 0x15, 0xbf, 0x83, 0x04, 0x9b, 0x5e, 0x40, 0xd8, 0xb8, 0x6c, 0x31, 0xaa, + 0xd3, 0x26, 0xf1, 0xf9, 0xb0, 0x41, 0xb0, 0x20, 0x4f, 0xfb, 0xd9, 0x24, 0x71, 0xec, 0x6c, 0x92, + 0xec, 0x2b, 0x2d, 0xf3, 0x66, 0x2c, 0xe1, 0x28, 0x02, 0xe4, 0x3b, 0x71, 0xb2, 0x16, 0x39, 0x41, + 0xec, 0xd1, 0x29, 0xbd, 0xe6, 0x35, 0xf9, 0xdb, 0x0d, 0x5f, 0xfa, 0xff, 0xa6, 0xf9, 0x87, 0x99, + 0x36, 0x3f, 0x8c, 0x5e, 0x07, 0x74, 0xde, 0x4c, 0xef, 0xbc, 0x73, 0x9a, 0x3e, 0x31, 0xf7, 0xc4, + 0xfd, 0xbd, 0x29, 0xb4, 0xd4, 0x45, 0x09, 0xe7, 0x50, 0xb7, 0xff, 0xa0, 0x04, 0x30, 0xdb, 0x6a, + 0xad, 0x46, 0xe1, 0x5d, 0xe2, 0x26, 0xe8, 0xa3, 0x50, 0xa5, 0xa4, 0x1a, 0x4e, 0xe2, 0xb0, 0x81, + 0x19, 0xbe, 0xf4, 0x2d, 0xfd, 0x31, 0x5e, 0x59, 0xa7, 0xcf, 0x2f, 0x93, 0xc4, 0x99, 0x43, 0xe2, + 0x05, 0x41, 0xb7, 0x61, 0x45, 0x15, 0x05, 0x30, 0x10, 0xb7, 0x88, 0xcb, 0x06, 0x63, 0xf8, 0xd2, + 0xd2, 0xf4, 0x51, 0x56, 0xfa, 0xb4, 0xee, 0x79, 0xbd, 0x45, 0xdc, 0xb9, 0x11, 0xc1, 0x79, 0x80, + 0xfe, 0xc3, 0x8c, 0x0f, 0xda, 0x51, 0x1f, 0x9a, 0x0f, 0xe4, 0xcd, 0xc2, 0x38, 0x32, 0xaa, 0x73, + 0x63, 0xe9, 0x89, 0x23, 0xbf, 0xbb, 0xfd, 0x15, 0x0b, 0xc6, 0x34, 0xf2, 0x92, 0x17, 0x27, 0xe8, + 0x43, 0x5d, 0x83, 0x3b, 0xdd, 0xdf, 0xe0, 0xd2, 0xa7, 0xd9, 0xd0, 0x9e, 0x12, 0xcc, 0xaa, 0xb2, + 0xc5, 0x18, 0xd8, 0x26, 0x54, 0xbc, 0x84, 0x34, 0xe3, 0xc9, 0xd2, 0xc5, 0xf2, 0xdb, 0x86, 0x2f, + 0x5d, 0x2b, 0xea, 0x3d, 0xe7, 0x46, 0x05, 0xd3, 0xca, 0x22, 0x25, 0x8f, 0x39, 0x17, 0xfb, 0x2f, + 0x47, 0xcd, 0xf7, 0xa3, 0x03, 0x8e, 0xde, 0x09, 0xc3, 0x71, 0xd8, 0x8e, 0x5c, 0x82, 0x49, 0x2b, + 0xa4, 0x0b, 0xab, 0x4c, 0xa7, 0x3b, 0x5d, 0xf0, 0x75, 0xdd, 0x8c, 0x4d, 0x1c, 0xf4, 0x05, 0x0b, + 0x46, 0x1a, 0x24, 0x4e, 0xbc, 0x80, 0xf1, 0x97, 0x9d, 0x5f, 0x3b, 0x72, 0xe7, 0x65, 0xe3, 0x82, + 0x26, 0x3e, 0x77, 0x46, 0xbc, 0xc8, 0x88, 0xd1, 0x18, 0xe3, 0x14, 0x7f, 0x2a, 0xb8, 0x1a, 0x24, + 0x76, 0x23, 0xaf, 0x45, 0xff, 0x0b, 0xd1, 0xa2, 0x04, 0xd7, 0x82, 0x06, 0x61, 0x13, 0x0f, 0x05, + 0x50, 0xa1, 0x82, 0x29, 0x9e, 0x1c, 0x60, 0xfd, 0x5f, 0x3c, 0x5a, 0xff, 0xc5, 0xa0, 0x52, 0x99, + 0xa7, 0x47, 0x9f, 0xfe, 0x8b, 0x31, 0x67, 0x83, 0x3e, 0x6f, 0xc1, 0xa4, 0x10, 0x9c, 0x98, 0xf0, + 0x01, 0xbd, 0xb3, 0xe5, 0x25, 0xc4, 0xf7, 0xe2, 0x64, 0xb2, 0xc2, 0xfa, 0x30, 0xd3, 0xdf, 0xdc, + 0xba, 0x1a, 0x85, 0xed, 0xd6, 0x0d, 0x2f, 0x68, 0xcc, 0x5d, 0x14, 0x9c, 0x26, 0xe7, 0x7b, 0x10, + 0xc6, 0x3d, 0x59, 0xa2, 0x1f, 0xb5, 0xe0, 0x7c, 0xe0, 0x34, 0x49, 0xdc, 0x72, 0xe8, 0xa7, 0xe5, + 0xe0, 0x39, 0xdf, 0x71, 0xb7, 0x59, 0x8f, 0x06, 0x1f, 0xae, 0x47, 0xb6, 0xe8, 0xd1, 0xf9, 0x9b, + 0x3d, 0x49, 0xe3, 0x7d, 0xd8, 0xa2, 0x9f, 0xb6, 0x60, 0x22, 0x8c, 0x5a, 0x5b, 0x4e, 0x40, 0x1a, + 0x12, 0x1a, 0x4f, 0x0e, 0xb1, 0xa5, 0xf7, 0xe1, 0xa3, 0x7d, 0xa2, 0x95, 0x2c, 0xd9, 0xe5, 0x30, + 0xf0, 0x92, 0x30, 0xaa, 0x93, 0x24, 0xf1, 0x82, 0xcd, 0x78, 0xee, 0xec, 0xfd, 0xbd, 0xa9, 0x89, + 0x2e, 0x2c, 0xdc, 0xdd, 0x1f, 0xf4, 0x3d, 0x30, 0x1c, 0x77, 0x02, 0xf7, 0x8e, 0x17, 0x34, 0xc2, + 0x7b, 0xf1, 0x64, 0xb5, 0x88, 0xe5, 0x5b, 0x57, 0x04, 0xc5, 0x02, 0xd4, 0x0c, 0xb0, 0xc9, 0x2d, + 0xff, 0xc3, 0xe9, 0xa9, 0x54, 0x2b, 0xfa, 0xc3, 0xe9, 0xc9, 0xb4, 0x0f, 0x5b, 0xf4, 0x83, 0x16, + 0x8c, 0xc6, 0xde, 0x66, 0xe0, 0x24, 0xed, 0x88, 0xdc, 0x20, 0x9d, 0x78, 0x12, 0x58, 0x47, 0xae, + 0x1f, 0x71, 0x54, 0x0c, 0x92, 0x73, 0x67, 0x45, 0x1f, 0x47, 0xcd, 0xd6, 0x18, 0xa7, 0xf9, 0xe6, + 0x2d, 0x34, 0x3d, 0xad, 0x87, 0x8b, 0x5d, 0x68, 0x7a, 0x52, 0xf7, 0x64, 0x89, 0xbe, 0x0b, 0x4e, + 0xf1, 0x26, 0x35, 0xb2, 0xf1, 0xe4, 0x08, 0x13, 0xb4, 0x67, 0xee, 0xef, 0x4d, 0x9d, 0xaa, 0x67, + 0x60, 0xb8, 0x0b, 0x1b, 0xbd, 0x02, 0x53, 0x2d, 0x12, 0x35, 0xbd, 0x64, 0x25, 0xf0, 0x3b, 0x52, + 0x7c, 0xbb, 0x61, 0x8b, 0x34, 0x44, 0x77, 0xe2, 0xc9, 0xd1, 0x8b, 0xd6, 0xdb, 0xaa, 0x73, 0x6f, + 0x15, 0xdd, 0x9c, 0x5a, 0xdd, 0x1f, 0x1d, 0x1f, 0x44, 0x0f, 0xfd, 0xa6, 0x05, 0xe7, 0x0d, 0x29, + 0x5b, 0x27, 0xd1, 0x8e, 0xe7, 0x92, 0x59, 0xd7, 0x0d, 0xdb, 0x41, 0x12, 0x4f, 0x8e, 0xb1, 0x61, + 0x5c, 0x3f, 0x0e, 0x99, 0x9f, 0x66, 0xa5, 0xe7, 0x65, 0x4f, 0x94, 0x18, 0xef, 0xd3, 0x53, 0xfb, + 0xb7, 0x4b, 0x70, 0x2a, 0x6b, 0x01, 0xa0, 0x7f, 0x6c, 0xc1, 0xf8, 0xdd, 0x7b, 0xc9, 0x5a, 0xb8, + 0x4d, 0x82, 0x78, 0xae, 0x43, 0xe5, 0x34, 0xd3, 0x7d, 0xc3, 0x97, 0xdc, 0x62, 0x6d, 0x8d, 0xe9, + 0xeb, 0x69, 0x2e, 0x97, 0x83, 0x24, 0xea, 0xcc, 0x3d, 0x29, 0xde, 0x69, 0xfc, 0xfa, 0x9d, 0x35, + 0x13, 0x8a, 0xb3, 0x9d, 0x3a, 0xff, 0x59, 0x0b, 0xce, 0xe4, 0x91, 0x40, 0xa7, 0xa0, 0xbc, 0x4d, + 0x3a, 0xdc, 0x12, 0xc6, 0xf4, 0x27, 0x7a, 0x19, 0x2a, 0x3b, 0x8e, 0xdf, 0x26, 0xc2, 0x4c, 0xbb, + 0x7a, 0xb4, 0x17, 0x51, 0x3d, 0xc3, 0x9c, 0xea, 0xb7, 0x95, 0x5e, 0xb4, 0xec, 0xdf, 0x29, 0xc3, + 0xb0, 0xf1, 0xd1, 0x4e, 0xc0, 0xf4, 0x0c, 0x53, 0xa6, 0xe7, 0x72, 0x61, 0xf3, 0xad, 0xa7, 0xed, + 0x79, 0x2f, 0x63, 0x7b, 0xae, 0x14, 0xc7, 0x72, 0x5f, 0xe3, 0x13, 0x25, 0x50, 0x0b, 0x5b, 0x74, + 0x8b, 0x46, 0x6d, 0x98, 0x81, 0x22, 0x3e, 0xe1, 0x8a, 0x24, 0x37, 0x37, 0x7a, 0x7f, 0x6f, 0xaa, + 0xa6, 0xfe, 0x62, 0xcd, 0xc8, 0xfe, 0x43, 0x0b, 0xce, 0x18, 0x7d, 0x9c, 0x0f, 0x83, 0x06, 0xdb, + 0x68, 0xa0, 0x8b, 0x30, 0x90, 0x74, 0x5a, 0x72, 0x1b, 0xa8, 0x46, 0x6a, 0xad, 0xd3, 0x22, 0x98, + 0x41, 0x1e, 0xf7, 0x5d, 0xd2, 0x8f, 0x5a, 0xf0, 0x44, 0xbe, 0x80, 0x41, 0xcf, 0xc1, 0x20, 0xf7, + 0x01, 0x88, 0xb7, 0xd3, 0x9f, 0x84, 0xb5, 0x62, 0x01, 0x45, 0x33, 0x50, 0x53, 0x0a, 0x4f, 0xbc, + 0xe3, 0x84, 0x40, 0xad, 0x69, 0x2d, 0xa9, 0x71, 0xe8, 0xa0, 0xd1, 0x3f, 0xc2, 0x04, 0x55, 0x83, + 0xc6, 0x36, 0xcd, 0x0c, 0x62, 0xff, 0xbe, 0x05, 0xdf, 0xd8, 0x8f, 0xd8, 0x3b, 0xbe, 0x3e, 0xd6, + 0xe1, 0x6c, 0x83, 0x6c, 0x38, 0x6d, 0x3f, 0x49, 0x73, 0x14, 0x9d, 0x7e, 0x46, 0x3c, 0x7c, 0x76, + 0x21, 0x0f, 0x09, 0xe7, 0x3f, 0x6b, 0xff, 0x67, 0x8b, 0x6d, 0xd7, 0xe5, 0x6b, 0x9d, 0xc0, 0xd6, + 0x29, 0x48, 0x6f, 0x9d, 0x16, 0x0b, 0x5b, 0xa6, 0x3d, 0xf6, 0x4e, 0x9f, 0xb7, 0xe0, 0xbc, 0x81, + 0xb5, 0xec, 0x24, 0xee, 0xd6, 0xe5, 0xdd, 0x56, 0x44, 0xe2, 0x98, 0x4e, 0xa9, 0x67, 0x0c, 0x71, + 0x3c, 0x37, 0x2c, 0x28, 0x94, 0x6f, 0x90, 0x0e, 0x97, 0xcd, 0xcf, 0x43, 0x95, 0xaf, 0xb9, 0x30, + 0x12, 0x1f, 0x49, 0xbd, 0xdb, 0x8a, 0x68, 0xc7, 0x0a, 0x03, 0xd9, 0x30, 0xc8, 0x64, 0x2e, 0x95, + 0x41, 0xd4, 0x4c, 0x00, 0xfa, 0xdd, 0x6f, 0xb3, 0x16, 0x2c, 0x20, 0x76, 0x9c, 0xea, 0xce, 0x6a, + 0x44, 0xd8, 0x7c, 0x68, 0x5c, 0xf1, 0x88, 0xdf, 0x88, 0xe9, 0xb6, 0xce, 0x09, 0x82, 0x30, 0x11, + 0x3b, 0x34, 0x63, 0x5b, 0x37, 0xab, 0x9b, 0xb1, 0x89, 0x43, 0x99, 0xfa, 0xce, 0x3a, 0xf1, 0xf9, + 0x88, 0x0a, 0xa6, 0x4b, 0xac, 0x05, 0x0b, 0x88, 0x7d, 0xbf, 0xc4, 0x36, 0x90, 0x4a, 0xa2, 0x91, + 0x93, 0xf0, 0x3e, 0x44, 0x29, 0x15, 0xb0, 0x5a, 0x9c, 0x3c, 0x26, 0xbd, 0x3d, 0x10, 0xaf, 0x66, + 0xb4, 0x00, 0x2e, 0x94, 0xeb, 0xfe, 0x5e, 0x88, 0x8f, 0x97, 0x61, 0x2a, 0xfd, 0x40, 0x97, 0x12, + 0xa1, 0x5b, 0x5e, 0x83, 0x51, 0xd6, 0x57, 0x67, 0xe0, 0x63, 0x13, 0xaf, 0x87, 0x1c, 0x2e, 0x1d, + 0xa7, 0x1c, 0x36, 0xd5, 0x44, 0xf9, 0x00, 0x35, 0xf1, 0x9c, 0x1a, 0xf5, 0x81, 0x8c, 0xcc, 0x4b, + 0xab, 0xca, 0x8b, 0x30, 0x10, 0x27, 0xa4, 0x35, 0x59, 0x49, 0x8b, 0xd9, 0x7a, 0x42, 0x5a, 0x98, + 0x41, 0xd0, 0x77, 0xc0, 0x78, 0xe2, 0x44, 0x9b, 0x24, 0x89, 0xc8, 0x8e, 0xc7, 0xfc, 0xba, 0x6c, + 0x3f, 0x5b, 0x9b, 0x3b, 0x4d, 0xad, 0xae, 0x35, 0x06, 0xc2, 0x12, 0x84, 0xb3, 0xb8, 0xf6, 0x7f, + 0x2f, 0xc1, 0x93, 0xe9, 0x4f, 0xa0, 0x15, 0xe3, 0x77, 0xa6, 0x14, 0xe3, 0xdb, 0x4d, 0xc5, 0xf8, + 0x60, 0x6f, 0xea, 0xa9, 0x1e, 0x8f, 0x7d, 0xdd, 0xe8, 0x4d, 0x74, 0x35, 0xf3, 0x11, 0x66, 0xba, + 0xbc, 0xac, 0xcf, 0xf4, 0x78, 0xc7, 0xcc, 0x57, 0x7a, 0x0e, 0x06, 0x23, 0xe2, 0xc4, 0x61, 0x20, + 0xbe, 0x93, 0xfa, 0x9a, 0x98, 0xb5, 0x62, 0x01, 0xb5, 0x7f, 0xaf, 0x96, 0x1d, 0xec, 0xab, 0xdc, + 0x57, 0x1d, 0x46, 0xc8, 0x83, 0x01, 0xb6, 0x6b, 0xe3, 0x92, 0xe5, 0xc6, 0xd1, 0x56, 0x21, 0xd5, + 0x22, 0x8a, 0xf4, 0x5c, 0x95, 0x7e, 0x35, 0xda, 0x84, 0x19, 0x0b, 0xb4, 0x0b, 0x55, 0x57, 0x6e, + 0xa6, 0x4a, 0x45, 0xb8, 0x1d, 0xc5, 0x56, 0x4a, 0x73, 0x1c, 0xa1, 0xe2, 0x5e, 0xed, 0xc0, 0x14, + 0x37, 0x44, 0xa0, 0xbc, 0xe9, 0x25, 0xe2, 0xb3, 0x1e, 0x71, 0xbb, 0x7c, 0xd5, 0x33, 0x5e, 0x71, + 0x88, 0xea, 0xa0, 0xab, 0x5e, 0x82, 0x29, 0x7d, 0xf4, 0x69, 0x0b, 0x86, 0x63, 0xb7, 0xb9, 0x1a, + 0x85, 0x3b, 0x5e, 0x83, 0x44, 0xc2, 0xc6, 0x3c, 0xa2, 0x64, 0xab, 0xcf, 0x2f, 0x4b, 0x82, 0x9a, + 0x2f, 0x77, 0x5f, 0x68, 0x08, 0x36, 0xf9, 0xd2, 0xbd, 0xd7, 0x93, 0xe2, 0xdd, 0x17, 0x88, 0xcb, + 0x56, 0x9c, 0xdc, 0x33, 0xb3, 0x99, 0x72, 0x64, 0x9b, 0x7b, 0xa1, 0xed, 0x6e, 0xd3, 0xf5, 0xa6, + 0x3b, 0xf4, 0xd4, 0xfd, 0xbd, 0xa9, 0x27, 0xe7, 0xf3, 0x79, 0xe2, 0x5e, 0x9d, 0x61, 0x03, 0xd6, + 0x6a, 0xfb, 0x3e, 0x26, 0xaf, 0xb4, 0x09, 0xf3, 0x88, 0x15, 0x30, 0x60, 0xab, 0x9a, 0x60, 0x66, + 0xc0, 0x0c, 0x08, 0x36, 0xf9, 0xa2, 0x57, 0x60, 0xb0, 0xe9, 0x24, 0x91, 0xb7, 0x2b, 0xdc, 0x60, + 0x47, 0xdc, 0x05, 0x2d, 0x33, 0x5a, 0x9a, 0x39, 0x53, 0xf4, 0xbc, 0x11, 0x0b, 0x46, 0xa8, 0x09, + 0x95, 0x26, 0x89, 0x36, 0xc9, 0x64, 0xb5, 0x08, 0x97, 0xff, 0x32, 0x25, 0xa5, 0x19, 0xd6, 0xa8, + 0x71, 0xc5, 0xda, 0x30, 0xe7, 0x82, 0x5e, 0x86, 0x6a, 0x4c, 0x7c, 0xe2, 0x52, 0xf3, 0xa8, 0xc6, + 0x38, 0xbe, 0xab, 0x4f, 0x53, 0x91, 0xda, 0x25, 0x75, 0xf1, 0x28, 0x5f, 0x60, 0xf2, 0x1f, 0x56, + 0x24, 0xe9, 0x00, 0xb6, 0xfc, 0xf6, 0xa6, 0x17, 0x4c, 0x42, 0x11, 0x03, 0xb8, 0xca, 0x68, 0x65, + 0x06, 0x90, 0x37, 0x62, 0xc1, 0xc8, 0xfe, 0x6f, 0x16, 0xa0, 0xb4, 0x50, 0x3b, 0x01, 0x9b, 0xf8, + 0x95, 0xb4, 0x4d, 0xbc, 0x54, 0xa4, 0xd1, 0xd2, 0xc3, 0x2c, 0xfe, 0xc5, 0x1a, 0x64, 0xd4, 0xc1, + 0x4d, 0x12, 0x27, 0xa4, 0xf1, 0xa6, 0x08, 0x7f, 0x53, 0x84, 0xbf, 0x29, 0xc2, 0x95, 0x08, 0x5f, + 0xcf, 0x88, 0xf0, 0xf7, 0x1a, 0xab, 0x5e, 0xc7, 0x1e, 0x7c, 0x44, 0x05, 0x27, 0x98, 0x3d, 0x30, + 0x10, 0xa8, 0x24, 0xb8, 0x5e, 0x5f, 0xb9, 0x99, 0x2b, 0xb3, 0x3f, 0x92, 0x96, 0xd9, 0x47, 0x65, + 0xf1, 0x37, 0x41, 0x4a, 0xff, 0xa6, 0x05, 0x6f, 0x4d, 0x4b, 0x2f, 0x39, 0x73, 0x16, 0x37, 0x83, + 0x30, 0x22, 0x0b, 0xde, 0xc6, 0x06, 0x89, 0x48, 0xe0, 0x92, 0x58, 0xf9, 0x76, 0xac, 0x5e, 0xbe, + 0x1d, 0xf4, 0x6e, 0x18, 0xb9, 0x1b, 0x87, 0xc1, 0x6a, 0xe8, 0x05, 0x42, 0x04, 0xd1, 0x1d, 0xc7, + 0xa9, 0xfb, 0x7b, 0x53, 0x23, 0x74, 0x44, 0x65, 0x3b, 0x4e, 0x61, 0xa1, 0x79, 0x98, 0xb8, 0xfb, + 0xca, 0xaa, 0x93, 0x18, 0xde, 0x04, 0xb9, 0xef, 0x67, 0xe7, 0x51, 0xd7, 0xdf, 0x97, 0x01, 0xe2, + 0x6e, 0x7c, 0xfb, 0xef, 0x95, 0xe0, 0x5c, 0xe6, 0x45, 0x42, 0xdf, 0x0f, 0xdb, 0x09, 0xdd, 0x13, + 0xa1, 0x9f, 0xb4, 0xe0, 0x54, 0x33, 0xed, 0xb0, 0x88, 0x85, 0xbb, 0xfb, 0xbb, 0x0b, 0xd3, 0x11, + 0x19, 0x8f, 0xc8, 0xdc, 0xa4, 0x18, 0xa1, 0x53, 0x19, 0x40, 0x8c, 0xbb, 0xfa, 0x82, 0x5e, 0x86, + 0x5a, 0xd3, 0xd9, 0xbd, 0xd5, 0x6a, 0x38, 0x89, 0xdc, 0x8e, 0xf6, 0xf6, 0x22, 0xb4, 0x13, 0xcf, + 0x9f, 0xe6, 0x51, 0x2d, 0xd3, 0x8b, 0x41, 0xb2, 0x12, 0xd5, 0x93, 0xc8, 0x0b, 0x36, 0xb9, 0x93, + 0x73, 0x59, 0x92, 0xc1, 0x9a, 0xa2, 0xfd, 0x13, 0x56, 0x56, 0x49, 0xa9, 0xd1, 0x89, 0x9c, 0x84, + 0x6c, 0x76, 0xd0, 0x6b, 0x50, 0xa1, 0xfb, 0x46, 0x39, 0x2a, 0x77, 0x8a, 0xd4, 0x9c, 0xc6, 0x97, + 0xd0, 0x4a, 0x94, 0xfe, 0x8b, 0x31, 0x67, 0x6a, 0xff, 0x64, 0x2d, 0x6b, 0x2c, 0xb0, 0xb3, 0xf9, + 0x4b, 0x00, 0x9b, 0xe1, 0x1a, 0x69, 0xb6, 0x7c, 0x3a, 0x2c, 0x16, 0x3b, 0xe0, 0x51, 0xae, 0x92, + 0xab, 0x0a, 0x82, 0x0d, 0x2c, 0xf4, 0x43, 0x16, 0xc0, 0xa6, 0x9c, 0xf3, 0xd2, 0x10, 0xb8, 0x55, + 0xe4, 0xeb, 0xe8, 0x15, 0xa5, 0xfb, 0xa2, 0x18, 0x62, 0x83, 0x39, 0xfa, 0x7e, 0x0b, 0xaa, 0x89, + 0xec, 0x3e, 0x57, 0x8d, 0x6b, 0x45, 0xf6, 0x44, 0xbe, 0xb4, 0xb6, 0x89, 0xd4, 0x90, 0x28, 0xbe, + 0xe8, 0x07, 0x2c, 0x80, 0xb8, 0x13, 0xb8, 0xab, 0xa1, 0xef, 0xb9, 0x1d, 0xa1, 0x31, 0x6f, 0x17, + 0xea, 0xce, 0x51, 0xd4, 0xe7, 0xc6, 0xe8, 0x68, 0xe8, 0xff, 0xd8, 0xe0, 0x8c, 0x3e, 0x06, 0xd5, + 0x58, 0x4c, 0x37, 0xa1, 0x23, 0xd7, 0x8a, 0x75, 0x2a, 0x71, 0xda, 0x42, 0xbc, 0x8a, 0x7f, 0x58, + 0xf1, 0x44, 0x3f, 0x66, 0xc1, 0x78, 0x2b, 0xed, 0x26, 0x14, 0xea, 0xb0, 0x38, 0x19, 0x90, 0x71, + 0x43, 0x72, 0x6f, 0x4b, 0xa6, 0x11, 0x67, 0x7b, 0x41, 0x25, 0xa0, 0x9e, 0xc1, 0x2b, 0x2d, 0xee, + 0xb2, 0x1c, 0xd2, 0x12, 0xf0, 0x6a, 0x16, 0x88, 0xbb, 0xf1, 0xd1, 0x2a, 0x9c, 0xa1, 0xbd, 0xeb, + 0x70, 0xf3, 0x53, 0xaa, 0x97, 0x98, 0x29, 0xc3, 0xea, 0xdc, 0xd3, 0x62, 0x86, 0xb0, 0xb3, 0x8e, + 0x2c, 0x0e, 0xce, 0x7d, 0x12, 0xfd, 0x8e, 0x05, 0x4f, 0x7b, 0x4c, 0x0d, 0x98, 0x0e, 0x7b, 0xad, + 0x11, 0xc4, 0x41, 0x3b, 0x29, 0x54, 0x56, 0xf4, 0x52, 0x3f, 0x73, 0xdf, 0x28, 0xde, 0xe0, 0xe9, + 0xc5, 0x7d, 0xba, 0x84, 0xf7, 0xed, 0x30, 0xfa, 0x56, 0x18, 0x95, 0xeb, 0x62, 0x95, 0x8a, 0x60, + 0xa6, 0x68, 0x6b, 0x73, 0x13, 0xf7, 0xf7, 0xa6, 0x46, 0xd7, 0x4c, 0x00, 0x4e, 0xe3, 0xd9, 0xff, + 0xaa, 0x9c, 0x3a, 0x25, 0x52, 0x3e, 0x4c, 0x26, 0x6e, 0x5c, 0xe9, 0xff, 0x91, 0xd2, 0xb3, 0x50, + 0x71, 0xa3, 0xbc, 0x4b, 0x5a, 0xdc, 0xa8, 0xa6, 0x18, 0x1b, 0xcc, 0xa9, 0x51, 0x3a, 0xe1, 0x64, + 0x3d, 0xa5, 0x42, 0x02, 0xbe, 0x5c, 0x64, 0x97, 0xba, 0xcf, 0xf4, 0xce, 0x89, 0xae, 0x4d, 0x74, + 0x81, 0x70, 0x77, 0x97, 0xd0, 0xf7, 0x42, 0x2d, 0x52, 0x91, 0x2d, 0xe5, 0x22, 0xb6, 0x6a, 0x72, + 0xda, 0x88, 0xee, 0xa8, 0x03, 0x20, 0x1d, 0xc3, 0xa2, 0x39, 0xda, 0x9f, 0x29, 0xa5, 0x0e, 0xc6, + 0x0c, 0xd9, 0xd1, 0xc7, 0xa1, 0xdf, 0x17, 0x2c, 0x18, 0x8e, 0x42, 0xdf, 0xf7, 0x82, 0x4d, 0x2a, + 0xe7, 0x84, 0xb2, 0xfe, 0xe0, 0xb1, 0xe8, 0x4b, 0x21, 0xd0, 0x98, 0x65, 0x8d, 0x35, 0x4f, 0x6c, + 0x76, 0x00, 0xbd, 0x04, 0xa3, 0x0d, 0xe2, 0x13, 0xfa, 0xec, 0x4a, 0x44, 0xf7, 0x44, 0xdc, 0xc9, + 0xac, 0x22, 0x45, 0x16, 0x4c, 0x20, 0x4e, 0xe3, 0xda, 0x5f, 0xb1, 0x60, 0xb2, 0x97, 0x30, 0x47, + 0x04, 0x9e, 0x92, 0x92, 0x4a, 0x8d, 0xe3, 0x4a, 0x20, 0xe9, 0x09, 0x7d, 0xfc, 0xac, 0xe0, 0xf3, + 0xd4, 0x6a, 0x6f, 0x54, 0xbc, 0x1f, 0x1d, 0xf4, 0x01, 0x38, 0x65, 0x0c, 0x4a, 0xac, 0x46, 0xb5, + 0x36, 0x37, 0x4d, 0xad, 0xa7, 0xd9, 0x0c, 0xec, 0xc1, 0xde, 0xd4, 0x13, 0xd9, 0x36, 0xa1, 0x6d, + 0xba, 0xe8, 0xd8, 0x3f, 0xd3, 0xf5, 0xa9, 0x95, 0xa1, 0xf0, 0x86, 0xd5, 0xe5, 0x8a, 0xf8, 0xee, + 0xe3, 0x50, 0xce, 0xcc, 0x69, 0xa1, 0x62, 0x38, 0x7a, 0xe3, 0x3c, 0xc2, 0x33, 0x7f, 0xfb, 0xdf, + 0x0c, 0xc0, 0x3e, 0x3d, 0xeb, 0xc3, 0xf2, 0x3f, 0xf4, 0x21, 0xec, 0xe7, 0x2c, 0x75, 0xda, 0xc6, + 0x05, 0x40, 0xe3, 0xb8, 0xc6, 0x9e, 0x6f, 0xbe, 0x62, 0x1e, 0x77, 0xa2, 0x5c, 0xf0, 0xe9, 0x73, + 0x3d, 0xf4, 0x25, 0x2b, 0x7d, 0x5e, 0xc8, 0x23, 0x22, 0xbd, 0x63, 0xeb, 0x93, 0x71, 0x08, 0xc9, + 0x3b, 0xa6, 0x8f, 0xae, 0x7a, 0x1d, 0x4f, 0x4e, 0x03, 0x6c, 0x78, 0x81, 0xe3, 0x7b, 0xaf, 0xd2, + 0xad, 0x55, 0x85, 0x59, 0x07, 0xcc, 0xdc, 0xba, 0xa2, 0x5a, 0xb1, 0x81, 0x71, 0xfe, 0xff, 0x87, + 0x61, 0xe3, 0xcd, 0x73, 0xc2, 0x65, 0xce, 0x98, 0xe1, 0x32, 0x35, 0x23, 0xca, 0xe5, 0xfc, 0x7b, + 0xe1, 0x54, 0xb6, 0x83, 0x87, 0x79, 0xde, 0xfe, 0xdf, 0x43, 0xd9, 0x03, 0xbc, 0x35, 0x12, 0x35, + 0x69, 0xd7, 0xde, 0xf4, 0x8a, 0xbd, 0xe9, 0x15, 0x7b, 0xd3, 0x2b, 0x66, 0x1e, 0x6c, 0x08, 0x8f, + 0xcf, 0xd0, 0x09, 0x79, 0x7c, 0x52, 0x3e, 0xac, 0x6a, 0xe1, 0x3e, 0x2c, 0xfb, 0xd3, 0x5d, 0x6e, + 0xff, 0xb5, 0x88, 0x10, 0x14, 0x42, 0x25, 0x08, 0x1b, 0x44, 0x1a, 0xc8, 0xd7, 0x8b, 0xb1, 0xf6, + 0x6e, 0x86, 0x0d, 0x23, 0xd6, 0x9c, 0xfe, 0x8b, 0x31, 0xe7, 0x63, 0x7f, 0x6a, 0x10, 0x52, 0xb6, + 0x28, 0xff, 0xee, 0xdf, 0x0c, 0x43, 0x11, 0x69, 0x85, 0xb7, 0xf0, 0x92, 0xd0, 0x65, 0x3a, 0x55, + 0x87, 0x37, 0x63, 0x09, 0xa7, 0x3a, 0xaf, 0xe5, 0x24, 0x5b, 0x42, 0x99, 0x29, 0x9d, 0xb7, 0xea, + 0x24, 0x5b, 0x98, 0x41, 0xd0, 0x7b, 0x61, 0x2c, 0x49, 0x9d, 0xa3, 0x8b, 0xf3, 0xe2, 0x27, 0x04, + 0xee, 0x58, 0xfa, 0x94, 0x1d, 0x67, 0xb0, 0xd1, 0x2b, 0x30, 0xb0, 0x45, 0xfc, 0xa6, 0xf8, 0xf4, + 0xf5, 0xe2, 0x74, 0x0d, 0x7b, 0xd7, 0x6b, 0xc4, 0x6f, 0x72, 0x49, 0x48, 0x7f, 0x61, 0xc6, 0x8a, + 0xce, 0xfb, 0xda, 0x76, 0x3b, 0x4e, 0xc2, 0xa6, 0xf7, 0xaa, 0x74, 0x93, 0x7e, 0x77, 0xc1, 0x8c, + 0x6f, 0x48, 0xfa, 0xdc, 0x1f, 0xa5, 0xfe, 0x62, 0xcd, 0x99, 0xf5, 0xa3, 0xe1, 0x45, 0x6c, 0xca, + 0x74, 0x84, 0xb7, 0xb3, 0xe8, 0x7e, 0x2c, 0x48, 0xfa, 0xbc, 0x1f, 0xea, 0x2f, 0xd6, 0x9c, 0x51, + 0x47, 0xad, 0xbf, 0x61, 0xd6, 0x87, 0x5b, 0x05, 0xf7, 0x81, 0xaf, 0xbd, 0xdc, 0x75, 0xf8, 0x2c, + 0x54, 0xdc, 0x2d, 0x27, 0x4a, 0x26, 0x47, 0xd8, 0xa4, 0x51, 0xb3, 0x78, 0x9e, 0x36, 0x62, 0x0e, + 0x43, 0xcf, 0x40, 0x39, 0x22, 0x1b, 0x2c, 0xb4, 0xd9, 0x08, 0xaa, 0xc2, 0x64, 0x03, 0xd3, 0x76, + 0x65, 0x97, 0x8d, 0xf5, 0x8c, 0xb6, 0xfb, 0xa9, 0x52, 0xda, 0xb0, 0x4b, 0x8f, 0x0c, 0x5f, 0x0f, + 0x6e, 0x3b, 0x8a, 0xa5, 0x77, 0xcd, 0x58, 0x0f, 0xac, 0x19, 0x4b, 0x38, 0xfa, 0x84, 0x05, 0x43, + 0x77, 0xe3, 0x30, 0x08, 0x48, 0x22, 0x94, 0xe8, 0xed, 0x82, 0x07, 0xeb, 0x3a, 0xa7, 0xae, 0xfb, + 0x20, 0x1a, 0xb0, 0xe4, 0x4b, 0xbb, 0x4b, 0x76, 0x5d, 0xbf, 0xdd, 0xe8, 0x8a, 0xa4, 0xb9, 0xcc, + 0x9b, 0xb1, 0x84, 0x53, 0x54, 0x2f, 0xe0, 0xa8, 0x03, 0x69, 0xd4, 0xc5, 0x40, 0xa0, 0x0a, 0xb8, + 0xfd, 0xf3, 0x55, 0x38, 0x9b, 0xbb, 0x7c, 0xa8, 0xc9, 0xc5, 0x8c, 0x9a, 0x2b, 0x9e, 0x4f, 0x64, + 0x0c, 0x19, 0x33, 0xb9, 0x6e, 0xab, 0x56, 0x6c, 0x60, 0xa0, 0xef, 0x03, 0x68, 0x39, 0x91, 0xd3, + 0x24, 0xca, 0xfb, 0x7d, 0x64, 0xcb, 0x86, 0xf6, 0x63, 0x55, 0xd2, 0xd4, 0x1e, 0x00, 0xd5, 0x14, + 0x63, 0x83, 0x25, 0x7a, 0x01, 0x86, 0x23, 0xe2, 0x13, 0x27, 0x66, 0xb1, 0xf3, 0xd9, 0x44, 0x20, + 0xac, 0x41, 0xd8, 0xc4, 0x43, 0xcf, 0xa9, 0x70, 0xbb, 0x4c, 0xd8, 0x51, 0x3a, 0xe4, 0x0e, 0x7d, + 0xd1, 0x82, 0xb1, 0x0d, 0xcf, 0x27, 0x9a, 0xbb, 0x48, 0xdb, 0x59, 0x39, 0xfa, 0x4b, 0x5e, 0x31, + 0xe9, 0x6a, 0x19, 0x9a, 0x6a, 0x8e, 0x71, 0x86, 0x3d, 0xfd, 0xcc, 0x3b, 0x24, 0x62, 0xc2, 0x77, + 0x30, 0xfd, 0x99, 0x6f, 0xf3, 0x66, 0x2c, 0xe1, 0x68, 0x16, 0xc6, 0x5b, 0x4e, 0x1c, 0xcf, 0x47, + 0xa4, 0x41, 0x82, 0xc4, 0x73, 0x7c, 0x9e, 0x54, 0x53, 0xd5, 0xb1, 0xe8, 0xab, 0x69, 0x30, 0xce, + 0xe2, 0xa3, 0xf7, 0xc3, 0x93, 0xdc, 0xbd, 0xb4, 0xec, 0xc5, 0xb1, 0x17, 0x6c, 0xea, 0x69, 0x20, + 0xbc, 0x6c, 0x53, 0x82, 0xd4, 0x93, 0x8b, 0xf9, 0x68, 0xb8, 0xd7, 0xf3, 0xe8, 0x79, 0xa8, 0xc6, + 0xdb, 0x5e, 0x6b, 0x3e, 0x6a, 0xc4, 0xec, 0x68, 0xa9, 0xaa, 0x7d, 0xba, 0x75, 0xd1, 0x8e, 0x15, + 0x06, 0x72, 0x61, 0x84, 0x7f, 0x12, 0x1e, 0x2f, 0x28, 0x24, 0xe8, 0x3b, 0x7a, 0x2a, 0x72, 0x91, + 0x3f, 0x3b, 0x8d, 0x9d, 0x7b, 0x97, 0xe5, 0x41, 0x17, 0x3f, 0x97, 0xb9, 0x6d, 0x90, 0xc1, 0x29, + 0xa2, 0xe9, 0x3d, 0xdd, 0x70, 0x1f, 0x7b, 0xba, 0x17, 0x60, 0x78, 0xbb, 0xbd, 0x4e, 0xc4, 0xc8, + 0x0b, 0xc1, 0xa6, 0x66, 0xdf, 0x0d, 0x0d, 0xc2, 0x26, 0x1e, 0x0b, 0xd5, 0x6c, 0x79, 0xe2, 0x5f, + 0x3c, 0x39, 0x6a, 0x84, 0x6a, 0xae, 0x2e, 0xca, 0x66, 0x6c, 0xe2, 0xd0, 0xae, 0xd1, 0xb1, 0x58, + 0x23, 0x31, 0xcb, 0xc4, 0xa0, 0xc3, 0xa5, 0xba, 0x56, 0x97, 0x00, 0xac, 0x71, 0xd0, 0x2a, 0x9c, + 0xa1, 0x7f, 0xea, 0x2c, 0x7f, 0xf8, 0xb6, 0xe3, 0x7b, 0x0d, 0x1e, 0x37, 0x38, 0x9e, 0x76, 0x8e, + 0xd6, 0x73, 0x70, 0x70, 0xee, 0x93, 0xf6, 0x8f, 0x97, 0xd2, 0x9e, 0x13, 0x53, 0x84, 0xa1, 0x98, + 0x0a, 0xaa, 0xe4, 0xb6, 0x13, 0x49, 0x83, 0xe7, 0x88, 0x99, 0x51, 0x82, 0xee, 0x6d, 0x27, 0x32, + 0x45, 0x1e, 0x63, 0x80, 0x25, 0x27, 0x74, 0x17, 0x06, 0x12, 0xdf, 0x29, 0x28, 0x95, 0xd2, 0xe0, + 0xa8, 0xbd, 0x60, 0x4b, 0xb3, 0x31, 0x66, 0x3c, 0xd0, 0xd3, 0x74, 0xf7, 0xb6, 0x2e, 0x8f, 0xe9, + 0xc4, 0x86, 0x6b, 0x3d, 0xc6, 0xac, 0xd5, 0xfe, 0xdb, 0xa3, 0x39, 0x5a, 0x47, 0x19, 0x02, 0xe8, + 0x12, 0x00, 0x9d, 0x34, 0xab, 0x11, 0xd9, 0xf0, 0x76, 0x85, 0x21, 0xa6, 0x24, 0xdb, 0x4d, 0x05, + 0xc1, 0x06, 0x96, 0x7c, 0xa6, 0xde, 0xde, 0xa0, 0xcf, 0x94, 0xba, 0x9f, 0xe1, 0x10, 0x6c, 0x60, + 0xa1, 0x77, 0xc3, 0xa0, 0xd7, 0x74, 0x36, 0x55, 0x14, 0xf1, 0xd3, 0x54, 0xa4, 0x2d, 0xb2, 0x96, + 0x07, 0x7b, 0x53, 0x63, 0xaa, 0x43, 0xac, 0x09, 0x0b, 0x5c, 0xf4, 0x33, 0x16, 0x8c, 0xb8, 0x61, + 0xb3, 0x19, 0x06, 0x7c, 0xfb, 0x2c, 0x7c, 0x01, 0x77, 0x8f, 0xcb, 0x4c, 0x9a, 0x9e, 0x37, 0x98, + 0x71, 0x67, 0x80, 0xca, 0xf9, 0x34, 0x41, 0x38, 0xd5, 0x2b, 0x53, 0xf2, 0x55, 0x0e, 0x90, 0x7c, + 0xbf, 0x60, 0xc1, 0x04, 0x7f, 0xd6, 0xd8, 0xd5, 0x8b, 0xf4, 0xc6, 0xf0, 0x98, 0x5f, 0xab, 0xcb, + 0xd1, 0xa1, 0x3c, 0xc5, 0x5d, 0x70, 0xdc, 0xdd, 0x49, 0x74, 0x15, 0x26, 0x36, 0xc2, 0xc8, 0x25, + 0xe6, 0x40, 0x08, 0xb1, 0xad, 0x08, 0x5d, 0xc9, 0x22, 0xe0, 0xee, 0x67, 0xd0, 0x6d, 0x78, 0xc2, + 0x68, 0x34, 0xc7, 0x81, 0x4b, 0xee, 0x0b, 0x82, 0xda, 0x13, 0x57, 0x72, 0xb1, 0x70, 0x8f, 0xa7, + 0xd3, 0x42, 0xb2, 0xd6, 0x87, 0x90, 0xfc, 0x08, 0x9c, 0x73, 0xbb, 0x47, 0x66, 0x27, 0x6e, 0xaf, + 0xc7, 0x5c, 0x8e, 0x57, 0xe7, 0xbe, 0x41, 0x10, 0x38, 0x37, 0xdf, 0x0b, 0x11, 0xf7, 0xa6, 0x81, + 0x5e, 0x83, 0x6a, 0x44, 0xd8, 0x57, 0x89, 0x45, 0xae, 0xdf, 0x11, 0xbd, 0x1d, 0xda, 0x82, 0xe7, + 0x64, 0xb5, 0x66, 0x12, 0x0d, 0x31, 0x56, 0x1c, 0xd1, 0x3d, 0x18, 0x6a, 0x39, 0x89, 0xbb, 0x25, + 0x32, 0xfc, 0x8e, 0xec, 0xd8, 0x57, 0xcc, 0xd9, 0x39, 0x8c, 0x51, 0x2f, 0x81, 0x33, 0xc1, 0x92, + 0x1b, 0xb5, 0xd5, 0xdc, 0xb0, 0xd9, 0x0a, 0x03, 0x12, 0x24, 0x52, 0x89, 0x8c, 0xf1, 0xc3, 0x12, + 0xd9, 0x8a, 0x0d, 0x8c, 0x2e, 0x5d, 0xae, 0xd1, 0x26, 0x27, 0xf6, 0xd1, 0xe5, 0x06, 0xb5, 0x5e, + 0xcf, 0x53, 0x65, 0xc3, 0xdc, 0x8a, 0x77, 0xbc, 0x64, 0x2b, 0x6c, 0x27, 0x72, 0x97, 0x2c, 0x14, + 0x95, 0x52, 0x36, 0x4b, 0x39, 0x38, 0x38, 0xf7, 0xc9, 0xac, 0x66, 0x1d, 0x7f, 0x38, 0xcd, 0x7a, + 0xaa, 0x0f, 0xcd, 0x5a, 0x87, 0xb3, 0xac, 0x07, 0xc2, 0x4a, 0x96, 0x4e, 0xcb, 0x78, 0x12, 0xb1, + 0xce, 0xab, 0xe4, 0x98, 0xa5, 0x3c, 0x24, 0x9c, 0xff, 0xec, 0xf9, 0xef, 0x84, 0x89, 0x2e, 0x21, + 0x77, 0x28, 0x87, 0xe4, 0x02, 0x3c, 0x91, 0x2f, 0x4e, 0x0e, 0xe5, 0x96, 0xfc, 0xf9, 0x4c, 0x50, + 0xbb, 0xb1, 0x45, 0xeb, 0xc3, 0xc5, 0xed, 0x40, 0x99, 0x04, 0x3b, 0x42, 0xbb, 0x5e, 0x39, 0xda, + 0xac, 0xbe, 0x1c, 0xec, 0x70, 0x69, 0xc8, 0xfc, 0x78, 0x97, 0x83, 0x1d, 0x4c, 0x69, 0xa3, 0x1f, + 0xb1, 0x52, 0x1b, 0x08, 0xee, 0x18, 0xff, 0xf0, 0xb1, 0xec, 0x49, 0xfb, 0xde, 0x53, 0xd8, 0xff, + 0xb6, 0x04, 0x17, 0x0f, 0x22, 0xd2, 0xc7, 0xf0, 0x3d, 0x0b, 0x83, 0x31, 0x0b, 0x53, 0x11, 0xea, + 0x6a, 0x98, 0xae, 0x62, 0x1e, 0xb8, 0xf2, 0x11, 0x2c, 0x40, 0xc8, 0x87, 0x72, 0xd3, 0x69, 0x09, + 0x7f, 0xe9, 0xe2, 0x51, 0x93, 0xff, 0xe8, 0x7f, 0xc7, 0x5f, 0x76, 0x5a, 0x7c, 0xce, 0x1b, 0x0d, + 0x98, 0xb2, 0x41, 0x09, 0x54, 0x9c, 0x28, 0x72, 0x64, 0x4c, 0xc4, 0x8d, 0x62, 0xf8, 0xcd, 0x52, + 0x92, 0xfc, 0x48, 0x39, 0xd5, 0x84, 0x39, 0x33, 0xfb, 0xc7, 0xaa, 0xa9, 0x4c, 0x31, 0x16, 0xe8, + 0x12, 0xc3, 0xa0, 0x70, 0x93, 0x5a, 0x45, 0xe7, 0x5c, 0xf2, 0x54, 0x6c, 0xe6, 0x81, 0x10, 0x05, + 0x2d, 0x04, 0x2b, 0xf4, 0x59, 0x8b, 0x95, 0x8d, 0x90, 0xe9, 0x77, 0x62, 0x57, 0x7f, 0x3c, 0x55, + 0x2c, 0xcc, 0x62, 0x14, 0xb2, 0x11, 0x9b, 0xdc, 0x45, 0x69, 0x1c, 0xb6, 0x9b, 0xe9, 0x2e, 0x8d, + 0xc3, 0x76, 0x27, 0x12, 0x8e, 0x76, 0x73, 0x02, 0x5a, 0x0a, 0x28, 0x3d, 0xd0, 0x47, 0x08, 0xcb, + 0x97, 0x2c, 0x98, 0xf0, 0xb2, 0x91, 0x09, 0x62, 0x0f, 0x7c, 0xa7, 0x18, 0x9f, 0x66, 0x77, 0xe0, + 0x83, 0x32, 0x74, 0xba, 0x40, 0xb8, 0xbb, 0x33, 0xa8, 0x01, 0x03, 0x5e, 0xb0, 0x11, 0x0a, 0xf3, + 0x6e, 0xee, 0x68, 0x9d, 0x5a, 0x0c, 0x36, 0x42, 0xbd, 0x9a, 0xe9, 0x3f, 0xcc, 0xa8, 0xa3, 0x25, + 0x38, 0x23, 0x93, 0x85, 0xae, 0x79, 0x71, 0x12, 0x46, 0x9d, 0x25, 0xaf, 0xe9, 0x25, 0xcc, 0x34, + 0x2b, 0xcf, 0x4d, 0x52, 0xf5, 0x86, 0x73, 0xe0, 0x38, 0xf7, 0x29, 0xf4, 0x2a, 0x0c, 0xc9, 0x68, + 0x80, 0x6a, 0x11, 0xfe, 0x84, 0xee, 0xf9, 0xaf, 0x26, 0x53, 0x5d, 0x84, 0x03, 0x48, 0x86, 0xe8, + 0x33, 0x16, 0x8c, 0xf1, 0xdf, 0xd7, 0x3a, 0x0d, 0x9e, 0x9f, 0x58, 0x2b, 0x22, 0xe4, 0xbf, 0x9e, + 0xa2, 0x39, 0x87, 0xee, 0xef, 0x4d, 0x8d, 0xa5, 0xdb, 0x70, 0x86, 0xaf, 0xfd, 0x4f, 0x46, 0xa0, + 0x3b, 0x7e, 0x22, 0x1d, 0x2c, 0x61, 0x9d, 0x74, 0xb0, 0x04, 0xdd, 0x55, 0xc6, 0x3a, 0xce, 0xa1, + 0x80, 0x65, 0x26, 0xb8, 0xea, 0x63, 0xe8, 0x4e, 0xe0, 0x62, 0xc6, 0x03, 0xb5, 0x61, 0x90, 0x57, + 0xa6, 0x12, 0x1a, 0xe0, 0xe8, 0x27, 0xdf, 0x66, 0x85, 0x2b, 0xed, 0xd6, 0xe2, 0xad, 0x58, 0x30, + 0x43, 0xbb, 0x30, 0xb4, 0xc5, 0xa7, 0xa3, 0xd8, 0xeb, 0x2d, 0x1f, 0x75, 0x7c, 0x53, 0x73, 0x5c, + 0x4f, 0x3e, 0xd1, 0x80, 0x25, 0x3b, 0x16, 0x9b, 0x67, 0x44, 0x0f, 0x71, 0x41, 0x52, 0x5c, 0xaa, + 0x65, 0xff, 0xa1, 0x43, 0x1f, 0x85, 0x91, 0x88, 0xb8, 0x61, 0xe0, 0x7a, 0x3e, 0x69, 0xcc, 0xca, + 0x03, 0xb1, 0xc3, 0x64, 0xd8, 0x31, 0x6f, 0x12, 0x36, 0x68, 0xe0, 0x14, 0x45, 0xb6, 0xce, 0x54, + 0xd6, 0x3d, 0xfd, 0x20, 0x44, 0x1c, 0x7c, 0x2c, 0x15, 0x94, 0xe3, 0xcf, 0x68, 0xf2, 0x75, 0x96, + 0x6e, 0xc3, 0x19, 0xbe, 0xe8, 0x03, 0x00, 0xe1, 0x3a, 0x0f, 0xc0, 0x9b, 0x4d, 0xc4, 0x29, 0xc8, + 0x61, 0x5e, 0x75, 0x8c, 0x67, 0xea, 0x4a, 0x0a, 0xd8, 0xa0, 0x86, 0x6e, 0x00, 0xf0, 0x95, 0xb3, + 0xd6, 0x69, 0xc9, 0x0d, 0xa1, 0x4c, 0x91, 0x84, 0xba, 0x82, 0x3c, 0xd8, 0x9b, 0xea, 0xf6, 0x39, + 0xb3, 0x28, 0x23, 0xe3, 0x71, 0xf4, 0x3d, 0x30, 0x14, 0xb7, 0x9b, 0x4d, 0x47, 0x9d, 0x91, 0x14, + 0x98, 0xfb, 0xcb, 0xe9, 0x1a, 0x82, 0x91, 0x37, 0x60, 0xc9, 0x11, 0xdd, 0xa5, 0x22, 0x5e, 0x48, + 0x28, 0xbe, 0x8a, 0xb8, 0x85, 0xc2, 0x3d, 0x81, 0xef, 0x91, 0xbb, 0x18, 0x9c, 0x83, 0xf3, 0x60, + 0x6f, 0xea, 0x89, 0x74, 0xfb, 0x52, 0x28, 0xb2, 0x71, 0x73, 0x69, 0xa2, 0xeb, 0xb2, 0x08, 0x17, + 0x7d, 0x6d, 0x59, 0x1b, 0xe6, 0x6d, 0xba, 0x08, 0x17, 0x6b, 0xee, 0x3d, 0x66, 0xe6, 0xc3, 0x68, + 0x19, 0x4e, 0xbb, 0x61, 0x90, 0x44, 0xa1, 0xef, 0xf3, 0x02, 0x7d, 0x7c, 0x6f, 0xce, 0xcf, 0x50, + 0x9e, 0x12, 0xdd, 0x3e, 0x3d, 0xdf, 0x8d, 0x82, 0xf3, 0x9e, 0xa3, 0x36, 0x79, 0x56, 0x3f, 0x8c, + 0x15, 0x72, 0xbc, 0x9e, 0xa2, 0x29, 0x24, 0x94, 0x72, 0x7b, 0x1f, 0xa0, 0x29, 0x82, 0xf4, 0x21, + 0xab, 0xf8, 0x62, 0xef, 0x86, 0x11, 0xb2, 0x9b, 0x90, 0x28, 0x70, 0xfc, 0x5b, 0x78, 0x49, 0x1e, + 0x58, 0xb0, 0x85, 0x79, 0xd9, 0x68, 0xc7, 0x29, 0x2c, 0x64, 0x2b, 0x2f, 0x99, 0x91, 0xf6, 0xce, + 0xbd, 0x64, 0xd2, 0x27, 0x66, 0xff, 0x5c, 0x39, 0x65, 0xb3, 0x3e, 0x92, 0x23, 0x5d, 0x56, 0x5f, + 0x49, 0x16, 0xa2, 0x62, 0x00, 0xb1, 0x17, 0x2b, 0x92, 0xb3, 0x8a, 0x9a, 0x5b, 0x31, 0x19, 0xe1, + 0x34, 0x5f, 0xb4, 0x0d, 0x95, 0xad, 0x30, 0x4e, 0xe4, 0x0e, 0xed, 0x88, 0x9b, 0xc1, 0x6b, 0x61, + 0x9c, 0x30, 0x43, 0x4b, 0xbd, 0x36, 0x6d, 0x89, 0x31, 0xe7, 0x41, 0xf7, 0xfe, 0xf1, 0x96, 0x13, + 0x35, 0xe2, 0x79, 0x56, 0xa4, 0x62, 0x80, 0x59, 0x58, 0xca, 0x9e, 0xae, 0x6b, 0x10, 0x36, 0xf1, + 0xec, 0x3f, 0xb5, 0x52, 0xa7, 0x5a, 0x77, 0x58, 0xc6, 0xc1, 0x0e, 0x09, 0xa8, 0x88, 0x32, 0x63, + 0x1c, 0xbf, 0x35, 0x93, 0xbf, 0xfd, 0xd6, 0x5e, 0xb5, 0x34, 0xef, 0x51, 0x0a, 0xd3, 0x8c, 0x84, + 0x11, 0x0e, 0xf9, 0x71, 0x2b, 0x9d, 0x88, 0x5f, 0x2a, 0x62, 0xeb, 0x66, 0x16, 0xa3, 0x38, 0x30, + 0xa7, 0xdf, 0xfe, 0x11, 0x0b, 0x86, 0xe6, 0x1c, 0x77, 0x3b, 0xdc, 0xd8, 0x40, 0xcf, 0x43, 0xb5, + 0xd1, 0x8e, 0xcc, 0x9a, 0x00, 0xca, 0x59, 0xb5, 0x20, 0xda, 0xb1, 0xc2, 0xa0, 0x53, 0x7f, 0xc3, + 0x71, 0x65, 0x49, 0x8a, 0x32, 0x9f, 0xfa, 0x57, 0x58, 0x0b, 0x16, 0x10, 0x3a, 0xfc, 0x4d, 0x67, + 0x57, 0x3e, 0x9c, 0x3d, 0x52, 0x5b, 0xd6, 0x20, 0x6c, 0xe2, 0xd9, 0xbf, 0x61, 0xc1, 0xe4, 0x9c, + 0x13, 0x7b, 0xee, 0x6c, 0x3b, 0xd9, 0x9a, 0xf3, 0x92, 0xf5, 0xb6, 0xbb, 0x4d, 0x12, 0x5e, 0xba, + 0x84, 0xf6, 0xb2, 0x1d, 0xd3, 0x15, 0xa8, 0x76, 0xcc, 0xaa, 0x97, 0xb7, 0x44, 0x3b, 0x56, 0x18, + 0xe8, 0x55, 0x18, 0x6e, 0x39, 0x71, 0x7c, 0x2f, 0x8c, 0x1a, 0x98, 0x6c, 0x14, 0x53, 0xdc, 0xa8, + 0x4e, 0xdc, 0x88, 0x24, 0x98, 0x6c, 0x88, 0x00, 0x15, 0x4d, 0x1f, 0x9b, 0xcc, 0xec, 0x1f, 0xb2, + 0xe0, 0xcc, 0x1c, 0x71, 0x22, 0x12, 0xb1, 0x5a, 0x48, 0xea, 0x45, 0xd0, 0x2b, 0x50, 0x4d, 0x68, + 0x0b, 0xed, 0x91, 0x55, 0x6c, 0x8f, 0x58, 0x68, 0xc9, 0x9a, 0x20, 0x8e, 0x15, 0x1b, 0xfb, 0x0b, + 0x16, 0x9c, 0xcb, 0xeb, 0xcb, 0xbc, 0x1f, 0xb6, 0x1b, 0x8f, 0xa2, 0x43, 0x7f, 0xd7, 0x82, 0x11, + 0x76, 0x5c, 0xbf, 0x40, 0x12, 0xc7, 0xf3, 0xbb, 0xea, 0x30, 0x5a, 0x7d, 0xd6, 0x61, 0xbc, 0x08, + 0x03, 0x5b, 0x61, 0x93, 0x64, 0x43, 0x4d, 0xae, 0x85, 0x4d, 0x82, 0x19, 0x04, 0xbd, 0x93, 0x4e, + 0x42, 0x2f, 0x48, 0x1c, 0xba, 0x1c, 0xe5, 0x71, 0xc6, 0x38, 0x9f, 0x80, 0xaa, 0x19, 0x9b, 0x38, + 0xf6, 0xaf, 0xd6, 0x60, 0x48, 0xc4, 0x45, 0xf5, 0x5d, 0x4a, 0x47, 0x7a, 0x71, 0x4a, 0x3d, 0xbd, + 0x38, 0x31, 0x0c, 0xba, 0xac, 0x58, 0xae, 0xb0, 0xd0, 0x6f, 0x14, 0x12, 0x48, 0xc7, 0xeb, 0xef, + 0xea, 0x6e, 0xf1, 0xff, 0x58, 0xb0, 0x42, 0xaf, 0x5b, 0x30, 0xee, 0x86, 0x41, 0x40, 0x5c, 0x6d, + 0x3b, 0x0e, 0x14, 0xb1, 0x41, 0x98, 0x4f, 0x13, 0xd5, 0x27, 0xc1, 0x19, 0x00, 0xce, 0xb2, 0x47, + 0x2f, 0xc1, 0x28, 0x1f, 0xb3, 0xdb, 0xa9, 0x33, 0x18, 0x5d, 0x9e, 0xcf, 0x04, 0xe2, 0x34, 0x2e, + 0x9a, 0xe6, 0x67, 0x59, 0xa2, 0x10, 0xde, 0xa0, 0x76, 0x55, 0x1b, 0x25, 0xf0, 0x0c, 0x0c, 0x14, + 0x01, 0x8a, 0xc8, 0x46, 0x44, 0xe2, 0x2d, 0x11, 0x37, 0xc6, 0xec, 0xd6, 0xa1, 0x87, 0x2b, 0x82, + 0x81, 0xbb, 0x28, 0xe1, 0x1c, 0xea, 0x68, 0x5b, 0xb8, 0x11, 0xaa, 0x45, 0xc8, 0x73, 0xf1, 0x99, + 0x7b, 0x7a, 0x13, 0xa6, 0xa0, 0xc2, 0x54, 0x17, 0xb3, 0x97, 0xcb, 0x3c, 0xf1, 0x92, 0x29, 0x36, + 0xcc, 0xdb, 0xd1, 0x02, 0x9c, 0xca, 0x14, 0x17, 0x8c, 0xc5, 0x59, 0x89, 0x4a, 0xb2, 0xcb, 0x94, + 0x25, 0x8c, 0x71, 0xd7, 0x13, 0xa6, 0x8b, 0x69, 0xf8, 0x00, 0x17, 0x53, 0x47, 0x45, 0x27, 0xf3, + 0x53, 0x8c, 0xf7, 0x15, 0x32, 0x00, 0x7d, 0x85, 0x22, 0x7f, 0x3e, 0x13, 0x8a, 0x3c, 0xca, 0x3a, + 0x70, 0xbb, 0x98, 0x0e, 0x1c, 0x3e, 0xee, 0xf8, 0x51, 0xc6, 0x11, 0xff, 0x2f, 0x0b, 0xe4, 0x77, + 0x9d, 0x77, 0xdc, 0x2d, 0x42, 0xa7, 0x0c, 0x7a, 0x2f, 0x8c, 0x29, 0xef, 0x04, 0x37, 0x89, 0x2c, + 0x36, 0x6b, 0x94, 0xed, 0x8c, 0x53, 0x50, 0x9c, 0xc1, 0x46, 0x33, 0x50, 0xa3, 0xe3, 0xc4, 0x1f, + 0xe5, 0x7a, 0x5f, 0x79, 0x40, 0x66, 0x57, 0x17, 0xc5, 0x53, 0x1a, 0x07, 0x85, 0x30, 0xe1, 0x3b, + 0x71, 0xc2, 0x7a, 0x50, 0xef, 0x04, 0xee, 0x43, 0x96, 0xa0, 0x61, 0x99, 0x5c, 0x4b, 0x59, 0x42, + 0xb8, 0x9b, 0xb6, 0xfd, 0xef, 0x2b, 0x30, 0x9a, 0x92, 0x8c, 0x87, 0x34, 0x18, 0x9e, 0x87, 0xaa, + 0xd4, 0xe1, 0xd9, 0x5a, 0x5b, 0x4a, 0xd1, 0x2b, 0x0c, 0xaa, 0xb4, 0xd6, 0xb5, 0x56, 0xcd, 0x1a, + 0x38, 0x86, 0xc2, 0xc5, 0x26, 0x1e, 0x13, 0xca, 0x89, 0x1f, 0xcf, 0xfb, 0x1e, 0x09, 0x12, 0xde, + 0xcd, 0x62, 0x84, 0xf2, 0xda, 0x52, 0xdd, 0x24, 0xaa, 0x85, 0x72, 0x06, 0x80, 0xb3, 0xec, 0xd1, + 0xa7, 0x2c, 0x18, 0x75, 0xee, 0xc5, 0xba, 0xa2, 0xbb, 0x08, 0x3a, 0x3e, 0xa2, 0x92, 0x4a, 0x15, + 0x89, 0xe7, 0x8e, 0xfd, 0x54, 0x13, 0x4e, 0x33, 0x45, 0x6f, 0x58, 0x80, 0xc8, 0x2e, 0x71, 0x65, + 0x58, 0xb4, 0xe8, 0xcb, 0x60, 0x11, 0x3b, 0xf8, 0xcb, 0x5d, 0x74, 0xb9, 0x54, 0xef, 0x6e, 0xc7, + 0x39, 0x7d, 0x40, 0xd7, 0x01, 0x35, 0xbc, 0xd8, 0x59, 0xf7, 0xc9, 0x7c, 0xd8, 0x94, 0xd9, 0xc7, + 0xe2, 0x3c, 0xfd, 0xbc, 0x18, 0x67, 0xb4, 0xd0, 0x85, 0x81, 0x73, 0x9e, 0x62, 0xb3, 0x2c, 0x0a, + 0x77, 0x3b, 0xb7, 0x22, 0x9f, 0x69, 0x09, 0x73, 0x96, 0x89, 0x76, 0xac, 0x30, 0xec, 0x3f, 0x2b, + 0xab, 0xa5, 0xac, 0x73, 0x00, 0x1c, 0x23, 0x16, 0xd9, 0x7a, 0xf8, 0x58, 0x64, 0x1d, 0x29, 0xd5, + 0x9d, 0x53, 0x9f, 0x4a, 0xc1, 0x2d, 0x3d, 0xa2, 0x14, 0xdc, 0xef, 0xb7, 0x52, 0xf5, 0xec, 0x86, + 0x2f, 0x7d, 0xa0, 0xd8, 0xfc, 0x83, 0x69, 0x1e, 0xc5, 0x95, 0xd1, 0x2b, 0x99, 0xe0, 0xbd, 0xe7, + 0xa1, 0xba, 0xe1, 0x3b, 0xac, 0x0a, 0x0b, 0x5b, 0xa8, 0x46, 0x84, 0xd9, 0x15, 0xd1, 0x8e, 0x15, + 0x06, 0x95, 0xfa, 0x06, 0xd1, 0x43, 0x49, 0xed, 0xff, 0x54, 0x86, 0x61, 0x43, 0xe3, 0xe7, 0x9a, + 0x6f, 0xd6, 0x63, 0x66, 0xbe, 0x95, 0x0e, 0x61, 0xbe, 0x7d, 0x1f, 0xd4, 0x5c, 0xa9, 0x8d, 0x8a, + 0xa9, 0xcf, 0x9f, 0xd5, 0x71, 0x5a, 0x21, 0xa9, 0x26, 0xac, 0x79, 0xa2, 0xab, 0xa9, 0x34, 0xcf, + 0x94, 0x5f, 0x20, 0x2f, 0x0f, 0x53, 0x68, 0xb4, 0xee, 0x67, 0xb2, 0xf1, 0x01, 0x95, 0x83, 0xe3, + 0x03, 0xec, 0x3f, 0xb4, 0xd4, 0xc7, 0x3d, 0x81, 0x7a, 0x3e, 0x77, 0xd3, 0xf5, 0x7c, 0x2e, 0x17, + 0x32, 0xcc, 0x3d, 0x0a, 0xf9, 0xdc, 0x84, 0xa1, 0xf9, 0xb0, 0xd9, 0x74, 0x82, 0x06, 0xfa, 0x26, + 0x18, 0x72, 0xf9, 0x4f, 0xe1, 0x43, 0x63, 0x87, 0xd5, 0x02, 0x8a, 0x25, 0x0c, 0x3d, 0x0d, 0x03, + 0x4e, 0xb4, 0x29, 0xfd, 0x66, 0x2c, 0x08, 0x6e, 0x36, 0xda, 0x8c, 0x31, 0x6b, 0xb5, 0xff, 0xc2, + 0x82, 0x31, 0xfa, 0x88, 0xc7, 0x5e, 0x8a, 0xbd, 0xce, 0x73, 0x30, 0xe8, 0xb4, 0x93, 0xad, 0xb0, + 0x6b, 0x1f, 0x36, 0xcb, 0x5a, 0xb1, 0x80, 0xd2, 0x7d, 0x98, 0x2a, 0x04, 0x61, 0xec, 0xc3, 0x16, + 0xe8, 0x5c, 0x66, 0x10, 0x6a, 0xca, 0xc6, 0xed, 0xf5, 0xbc, 0xd3, 0xd2, 0x3a, 0x6f, 0xc6, 0x12, + 0x4e, 0x89, 0xad, 0x87, 0x8d, 0x8e, 0x08, 0xed, 0x55, 0xc4, 0xe6, 0xc2, 0x46, 0x07, 0x33, 0x08, + 0x7a, 0x06, 0xca, 0xf1, 0x96, 0x23, 0xcf, 0xe5, 0x65, 0x94, 0x79, 0xfd, 0xda, 0x2c, 0xa6, 0xed, + 0x2a, 0x69, 0x22, 0xf2, 0xb3, 0x31, 0xb6, 0xe9, 0xa4, 0x89, 0xc8, 0xb7, 0xff, 0xc5, 0x00, 0xb0, + 0x78, 0x1b, 0x27, 0x22, 0x8d, 0xb5, 0x90, 0x95, 0x12, 0x3e, 0xd6, 0x63, 0x6d, 0xbd, 0x91, 0x7d, + 0x9c, 0x8f, 0xb6, 0x8d, 0xe3, 0xcd, 0xf2, 0x49, 0x1f, 0x6f, 0xe6, 0x9f, 0x58, 0x0f, 0x3c, 0x46, + 0x27, 0xd6, 0xf6, 0xe7, 0x2c, 0x40, 0x2a, 0x7a, 0x4a, 0x87, 0x94, 0xcc, 0x40, 0x4d, 0x85, 0x6b, + 0x89, 0xf5, 0xa2, 0xc5, 0xa2, 0x04, 0x60, 0x8d, 0xd3, 0x87, 0xf7, 0xe2, 0x59, 0xa9, 0xb3, 0xca, + 0xe9, 0x9c, 0x0b, 0xa6, 0xe9, 0x84, 0x0a, 0xb3, 0x7f, 0xad, 0x04, 0x4f, 0x70, 0x73, 0x69, 0xd9, + 0x09, 0x9c, 0x4d, 0xd2, 0xa4, 0xbd, 0xea, 0x37, 0x48, 0xc8, 0xa5, 0xdb, 0x66, 0x4f, 0x66, 0x48, + 0x1c, 0x55, 0x5e, 0x71, 0x39, 0xc3, 0x25, 0xcb, 0x62, 0xe0, 0x25, 0x98, 0x11, 0x47, 0x31, 0x54, + 0xe5, 0x65, 0x46, 0x42, 0xff, 0x14, 0xc4, 0x48, 0x89, 0x62, 0x61, 0x59, 0x10, 0xac, 0x18, 0x51, + 0xf3, 0xc1, 0x0f, 0xdd, 0x6d, 0xba, 0xe4, 0xb3, 0xe6, 0xc3, 0x92, 0x68, 0xc7, 0x0a, 0xc3, 0x6e, + 0xc2, 0xb8, 0x1c, 0xc3, 0xd6, 0x0d, 0xd2, 0xc1, 0x64, 0x83, 0xea, 0x5c, 0x57, 0x36, 0x19, 0xf7, + 0x2b, 0x29, 0x9d, 0x3b, 0x6f, 0x02, 0x71, 0x1a, 0x57, 0x56, 0x17, 0x2e, 0xe5, 0x57, 0x17, 0xb6, + 0x7f, 0xcd, 0x82, 0xac, 0xd2, 0x37, 0x6a, 0xa9, 0x5a, 0xfb, 0xd6, 0x52, 0x3d, 0x44, 0x35, 0xd2, + 0x0f, 0xc1, 0xb0, 0x93, 0x50, 0xab, 0x8e, 0x7b, 0x60, 0xca, 0x0f, 0x77, 0x72, 0xb8, 0x1c, 0x36, + 0xbc, 0x0d, 0x8f, 0x79, 0x5e, 0x4c, 0x72, 0xf6, 0x1b, 0x16, 0xd4, 0x16, 0xa2, 0xce, 0xe1, 0x53, + 0xd5, 0xba, 0x13, 0xd1, 0x4a, 0x87, 0x4a, 0x44, 0x93, 0xa9, 0x6e, 0xe5, 0x5e, 0xa9, 0x6e, 0xf6, + 0x5f, 0x0e, 0xc0, 0x44, 0x57, 0xee, 0x25, 0x7a, 0x11, 0x46, 0xd4, 0x57, 0x92, 0x6e, 0xd7, 0x9a, + 0x19, 0xbc, 0xac, 0x61, 0x38, 0x85, 0xd9, 0xc7, 0x52, 0x5d, 0x84, 0xd3, 0x11, 0x79, 0xa5, 0x4d, + 0xda, 0x64, 0x76, 0x23, 0x21, 0x51, 0x9d, 0xb8, 0x61, 0xd0, 0xe0, 0xc5, 0x88, 0xcb, 0x73, 0x4f, + 0xde, 0xdf, 0x9b, 0x3a, 0x8d, 0xbb, 0xc1, 0x38, 0xef, 0x19, 0xd4, 0x82, 0x51, 0xdf, 0xdc, 0x2f, + 0x88, 0x6d, 0xea, 0x43, 0x6d, 0x35, 0xd4, 0x6c, 0x4d, 0x35, 0xe3, 0x34, 0x83, 0xf4, 0xa6, 0xa3, + 0xf2, 0x88, 0x36, 0x1d, 0x9f, 0xd4, 0x9b, 0x0e, 0x1e, 0x0b, 0xf4, 0xc1, 0x82, 0x73, 0x6f, 0xfb, + 0xd9, 0x75, 0x1c, 0x65, 0x1f, 0xf1, 0x3e, 0xa8, 0xca, 0x38, 0xc9, 0xbe, 0xe2, 0x0b, 0x4d, 0x3a, + 0x3d, 0x64, 0xfb, 0x83, 0x12, 0xe4, 0x6c, 0x95, 0xe9, 0x5a, 0xd3, 0xf6, 0x5e, 0x6a, 0xad, 0x1d, + 0xce, 0xe6, 0x43, 0xbb, 0x3c, 0x46, 0x94, 0x6b, 0xf9, 0xf7, 0x17, 0xbd, 0xd5, 0xd7, 0x61, 0xa3, + 0x4a, 0x02, 0xaa, 0xd0, 0xd1, 0x4b, 0x00, 0xda, 0x4c, 0x17, 0xb6, 0x9e, 0x0a, 0xfa, 0xd0, 0xd6, + 0x3c, 0x36, 0xb0, 0xd0, 0x0b, 0x30, 0xec, 0x05, 0x71, 0xe2, 0xf8, 0xfe, 0x35, 0x2f, 0x48, 0x84, + 0xfd, 0xa7, 0xcc, 0x99, 0x45, 0x0d, 0xc2, 0x26, 0xde, 0xf9, 0xf7, 0x18, 0xdf, 0xe5, 0x30, 0xdf, + 0x73, 0x0b, 0xce, 0x5d, 0xf5, 0x12, 0x95, 0x7c, 0xa8, 0xe6, 0x11, 0xb5, 0xc2, 0x95, 0x0c, 0xb2, + 0x7a, 0xa6, 0xdb, 0x1a, 0xc9, 0x7f, 0xa5, 0x74, 0xae, 0x62, 0x36, 0xf9, 0xcf, 0x76, 0xe1, 0xcc, + 0x55, 0x2f, 0xb9, 0xe2, 0xf9, 0xe4, 0x18, 0x99, 0xfc, 0xca, 0x20, 0x8c, 0x98, 0x39, 0xf9, 0x87, + 0x91, 0xd8, 0x5f, 0xa0, 0xf6, 0xa9, 0x18, 0x08, 0x4f, 0x1d, 0x64, 0xdf, 0x39, 0x72, 0x81, 0x80, + 0xfc, 0xc1, 0x35, 0x4c, 0x54, 0xcd, 0x13, 0x9b, 0x1d, 0x40, 0xf7, 0xa0, 0xb2, 0xc1, 0xf2, 0xd8, + 0xca, 0x45, 0x84, 0x20, 0xe5, 0x0d, 0xbe, 0x5e, 0x91, 0x3c, 0x13, 0x8e, 0xf3, 0xa3, 0x66, 0x45, + 0x94, 0x4e, 0x9f, 0x36, 0xb2, 0x0b, 0x84, 0xbe, 0x52, 0x18, 0xbd, 0xb4, 0x42, 0xe5, 0x21, 0xb4, + 0x42, 0x4a, 0x46, 0x0f, 0x3e, 0x22, 0x19, 0xcd, 0x72, 0x12, 0x93, 0x2d, 0x66, 0xf4, 0x8a, 0x74, + 0xa8, 0x21, 0x36, 0x08, 0x46, 0x4e, 0x62, 0x0a, 0x8c, 0xb3, 0xf8, 0xe8, 0x63, 0x4a, 0xca, 0x57, + 0x8b, 0x38, 0x28, 0x30, 0x67, 0xf4, 0x71, 0x0b, 0xf8, 0xcf, 0x95, 0x60, 0xec, 0x6a, 0xd0, 0x5e, + 0xbd, 0xba, 0xda, 0x5e, 0xf7, 0x3d, 0xf7, 0x06, 0xe9, 0x50, 0x29, 0xbe, 0x4d, 0x3a, 0x8b, 0x0b, + 0x62, 0x05, 0xa9, 0x39, 0x73, 0x83, 0x36, 0x62, 0x0e, 0xa3, 0x72, 0x6b, 0xc3, 0x0b, 0x36, 0x49, + 0xd4, 0x8a, 0x3c, 0xe1, 0xc3, 0x37, 0xe4, 0xd6, 0x15, 0x0d, 0xc2, 0x26, 0x1e, 0xa5, 0x1d, 0xde, + 0x0b, 0x54, 0x81, 0x24, 0x45, 0x7b, 0x85, 0x36, 0x62, 0x0e, 0xa3, 0x48, 0x49, 0xd4, 0x16, 0x2e, + 0x32, 0x03, 0x69, 0x8d, 0x36, 0x62, 0x0e, 0x13, 0xbb, 0x6f, 0x16, 0xe1, 0x55, 0xe9, 0xda, 0x7d, + 0xb3, 0xe0, 0x08, 0x09, 0xa7, 0xa8, 0xdb, 0xa4, 0xb3, 0xe0, 0x24, 0x4e, 0x76, 0xf3, 0x7c, 0x83, + 0x37, 0x63, 0x09, 0x67, 0x15, 0x93, 0xd3, 0xc3, 0xf1, 0x75, 0x57, 0x31, 0x39, 0xdd, 0xfd, 0x1e, + 0x8e, 0x96, 0xbf, 0x53, 0x82, 0x91, 0x37, 0xaf, 0x35, 0xcd, 0xb9, 0xb0, 0xe7, 0x0e, 0x4c, 0x74, + 0x65, 0x42, 0xf7, 0x61, 0xf9, 0x1c, 0x58, 0xa9, 0xc2, 0xc6, 0x30, 0x4c, 0x09, 0xcb, 0x4a, 0x81, + 0xf3, 0x30, 0xc1, 0x17, 0x2f, 0xe5, 0xc4, 0x12, 0x5b, 0x55, 0x76, 0x3b, 0x3b, 0xa4, 0xba, 0x9d, + 0x05, 0xe2, 0x6e, 0x7c, 0xfb, 0xf3, 0x16, 0x8c, 0xa6, 0x92, 0xd3, 0x0b, 0xb2, 0xd1, 0xd8, 0xea, + 0x0e, 0x59, 0x74, 0x32, 0xcb, 0x16, 0x29, 0x33, 0x35, 0xac, 0x57, 0xb7, 0x06, 0x61, 0x13, 0xcf, + 0xfe, 0xed, 0x32, 0x54, 0x65, 0x24, 0x55, 0x1f, 0x5d, 0xf9, 0xac, 0x05, 0xa3, 0xea, 0x60, 0x90, + 0x79, 0x72, 0x4b, 0x45, 0xe4, 0xca, 0xd1, 0x1e, 0x28, 0xbf, 0x48, 0xb0, 0x11, 0xea, 0x0d, 0x03, + 0x36, 0x99, 0xe1, 0x34, 0x6f, 0x74, 0x1b, 0x20, 0xee, 0xc4, 0x09, 0x69, 0x1a, 0x3e, 0x65, 0xdb, + 0x98, 0x65, 0xd3, 0x6e, 0x18, 0x11, 0x3a, 0xa7, 0x6e, 0x86, 0x0d, 0x52, 0x57, 0x98, 0xda, 0xc2, + 0xd3, 0x6d, 0xd8, 0xa0, 0x84, 0x5e, 0x55, 0xc7, 0xd8, 0x03, 0x45, 0xe8, 0x75, 0x39, 0xbe, 0xfd, + 0x9c, 0x63, 0x1f, 0xe1, 0xdc, 0xd8, 0xfe, 0xd9, 0x12, 0x9c, 0xca, 0x8e, 0x24, 0xfa, 0x20, 0x8c, + 0xc8, 0x41, 0x33, 0xdc, 0x07, 0x32, 0x7c, 0x6d, 0x04, 0x1b, 0xb0, 0x07, 0x7b, 0x53, 0x53, 0xdd, + 0xf7, 0x63, 0x4f, 0x9b, 0x28, 0x38, 0x45, 0x8c, 0x1f, 0x2a, 0x8b, 0xe8, 0x87, 0xb9, 0xce, 0x6c, + 0xab, 0x25, 0x4e, 0x86, 0x8d, 0x43, 0x65, 0x13, 0x8a, 0x33, 0xd8, 0x68, 0x15, 0xce, 0x18, 0x2d, + 0x37, 0x89, 0xb7, 0xb9, 0xb5, 0x1e, 0x46, 0x72, 0xbf, 0xfa, 0xb4, 0x0e, 0x96, 0xed, 0xc6, 0xc1, + 0xb9, 0x4f, 0x52, 0xc3, 0xc8, 0x75, 0x5a, 0x8e, 0xeb, 0x25, 0x1d, 0xe1, 0xdb, 0x57, 0x62, 0x7c, + 0x5e, 0xb4, 0x63, 0x85, 0x61, 0xff, 0xc3, 0x01, 0x38, 0xc5, 0xa3, 0x43, 0x89, 0x0a, 0x7e, 0x46, + 0x1f, 0x84, 0x5a, 0x9c, 0x38, 0x11, 0x77, 0x56, 0x58, 0x87, 0x16, 0x5d, 0x3a, 0xa3, 0x5e, 0x12, + 0xc1, 0x9a, 0x1e, 0xfa, 0x00, 0x2b, 0x47, 0xe6, 0xc5, 0x5b, 0x8c, 0x7a, 0xe9, 0xe1, 0x5c, 0x21, + 0x57, 0x14, 0x05, 0x6c, 0x50, 0x43, 0xdf, 0x0e, 0x95, 0xd6, 0x96, 0x13, 0x4b, 0x3f, 0xdd, 0x73, + 0x52, 0x4e, 0xac, 0xd2, 0xc6, 0x07, 0x7b, 0x53, 0x67, 0xb3, 0xaf, 0xca, 0x00, 0x98, 0x3f, 0x64, + 0x4a, 0xf9, 0x81, 0x83, 0xef, 0xdb, 0x69, 0x44, 0x9d, 0xfa, 0xb5, 0xd9, 0xec, 0x0d, 0x2d, 0x0b, + 0xac, 0x15, 0x0b, 0x28, 0x95, 0x49, 0x5b, 0x9c, 0x65, 0x83, 0x22, 0x0f, 0xa6, 0x2d, 0x8e, 0x6b, + 0x1a, 0x84, 0x4d, 0x3c, 0xf4, 0xb9, 0xee, 0xd8, 0xe1, 0xa1, 0x63, 0xc8, 0x2d, 0xe9, 0x37, 0x6a, + 0xf8, 0x32, 0xd4, 0x44, 0x57, 0xd7, 0x42, 0xf4, 0x22, 0x8c, 0x70, 0x37, 0xd0, 0x5c, 0xe4, 0x04, + 0xee, 0x56, 0xd6, 0x79, 0xb3, 0x66, 0xc0, 0x70, 0x0a, 0xd3, 0x5e, 0x86, 0x81, 0x3e, 0x85, 0x6c, + 0x5f, 0x7b, 0xf2, 0xf7, 0x41, 0x95, 0x92, 0x93, 0x1b, 0xb4, 0x22, 0x48, 0x86, 0x50, 0x95, 0xb7, + 0x37, 0x22, 0x1b, 0xca, 0x9e, 0x23, 0x63, 0x44, 0xd4, 0x12, 0x5a, 0x8c, 0xe3, 0x36, 0x9b, 0x76, + 0x14, 0x88, 0x9e, 0x85, 0x32, 0xd9, 0x6d, 0x65, 0x83, 0x41, 0x2e, 0xef, 0xb6, 0xbc, 0x88, 0xc4, + 0x14, 0x89, 0xec, 0xb6, 0xd0, 0x79, 0x28, 0x79, 0x0d, 0x31, 0x23, 0x41, 0xe0, 0x94, 0x16, 0x17, + 0x70, 0xc9, 0x6b, 0xd8, 0xbb, 0x50, 0x53, 0xd7, 0x45, 0xa2, 0x6d, 0x69, 0x52, 0x59, 0x45, 0x44, + 0x07, 0x4b, 0xba, 0x3d, 0x8c, 0xa9, 0x36, 0x80, 0x2e, 0xd5, 0x50, 0x94, 0x0a, 0xbe, 0x08, 0x03, + 0x6e, 0x28, 0x8a, 0xec, 0x54, 0x35, 0x19, 0x66, 0x4b, 0x31, 0x88, 0x7d, 0x07, 0xc6, 0x6e, 0x04, + 0xe1, 0x3d, 0x76, 0xab, 0x13, 0x2b, 0x62, 0x4c, 0x09, 0x6f, 0xd0, 0x1f, 0x59, 0xcb, 0x9d, 0x41, + 0x31, 0x87, 0xa9, 0xf2, 0xaa, 0xa5, 0x5e, 0xe5, 0x55, 0xed, 0x8f, 0x5b, 0x30, 0xa2, 0x72, 0xbe, + 0xaf, 0xee, 0x6c, 0x53, 0xba, 0x9b, 0x51, 0xd8, 0x6e, 0x65, 0xe9, 0xb2, 0x9b, 0x69, 0x31, 0x87, + 0x99, 0xc5, 0x10, 0x4a, 0x07, 0x14, 0x43, 0xb8, 0x08, 0x03, 0xdb, 0x5e, 0xd0, 0xc8, 0x3a, 0x3b, + 0x6f, 0x78, 0x41, 0x03, 0x33, 0x88, 0xfd, 0x57, 0x16, 0x9c, 0x52, 0x5d, 0x90, 0x36, 0xd3, 0x8b, + 0x30, 0xb2, 0xde, 0xf6, 0xfc, 0x86, 0xac, 0xce, 0x9c, 0x59, 0x2e, 0x73, 0x06, 0x0c, 0xa7, 0x30, + 0xd1, 0x25, 0x80, 0x75, 0x2f, 0x70, 0xa2, 0xce, 0xaa, 0x36, 0xd2, 0x94, 0xde, 0x9e, 0x53, 0x10, + 0x6c, 0x60, 0xa1, 0xd7, 0xa0, 0xba, 0x23, 0x4f, 0x65, 0xcb, 0x85, 0xe6, 0xf0, 0x8b, 0xf1, 0xd0, + 0x2b, 0x41, 0x1d, 0xf3, 0x2a, 0x8e, 0xf6, 0x17, 0xcb, 0x30, 0x96, 0xce, 0xbb, 0xef, 0xc3, 0x73, + 0xf2, 0x2c, 0x54, 0x58, 0x2a, 0x7e, 0x76, 0x62, 0xf1, 0x72, 0xca, 0x1c, 0x86, 0x62, 0x18, 0xe4, + 0xa2, 0xa4, 0x98, 0xbb, 0x45, 0x55, 0x27, 0x95, 0x7f, 0x96, 0x45, 0x70, 0x0b, 0x77, 0xb7, 0x60, + 0x85, 0x3e, 0x65, 0xc1, 0x50, 0xd8, 0x32, 0xeb, 0x7a, 0xbe, 0xbf, 0xc8, 0x9a, 0x04, 0x22, 0xf1, + 0x57, 0x58, 0x43, 0x6a, 0xe2, 0xc9, 0xc9, 0x20, 0x59, 0x9f, 0xff, 0x36, 0x18, 0x31, 0x31, 0x0f, + 0x32, 0x88, 0xaa, 0xa6, 0x41, 0xf4, 0x59, 0x73, 0x4a, 0x8a, 0xaa, 0x0b, 0x7d, 0x2c, 0xf6, 0x5b, + 0x50, 0x71, 0x55, 0x98, 0xdb, 0x43, 0xdd, 0x28, 0xa0, 0xaa, 0x92, 0xb1, 0x10, 0x02, 0x4e, 0xcd, + 0xfe, 0x43, 0xcb, 0x98, 0x1f, 0x98, 0xc4, 0x8b, 0x0d, 0x14, 0x41, 0x79, 0x73, 0x67, 0x5b, 0x18, + 0x19, 0xd7, 0x0b, 0x1a, 0xde, 0xab, 0x3b, 0xdb, 0x7a, 0x85, 0x99, 0xad, 0x98, 0x32, 0xeb, 0xe3, + 0x10, 0x21, 0x55, 0x9c, 0xa3, 0x7c, 0x70, 0x71, 0x0e, 0xfb, 0x8d, 0x12, 0x4c, 0x74, 0x4d, 0x2a, + 0xf4, 0x2a, 0x54, 0x22, 0xfa, 0x96, 0xe2, 0xf5, 0x96, 0x0a, 0x2b, 0xa7, 0x11, 0x2f, 0x36, 0xb4, + 0xf2, 0x4e, 0xb7, 0x63, 0xce, 0x12, 0x5d, 0x07, 0xa4, 0x83, 0x31, 0xd5, 0x09, 0x06, 0x7f, 0x65, + 0x15, 0xb1, 0x35, 0xdb, 0x85, 0x81, 0x73, 0x9e, 0x42, 0x2f, 0x65, 0x0f, 0x42, 0x32, 0x95, 0xa2, + 0xf7, 0x3b, 0xd3, 0xb0, 0x5f, 0x37, 0xa7, 0xe0, 0x6d, 0x2d, 0x4c, 0x8f, 0xba, 0x39, 0xed, 0x92, + 0xac, 0xe5, 0x7e, 0x25, 0xab, 0xfd, 0x4b, 0x25, 0x18, 0x4d, 0x55, 0x7e, 0x45, 0x3e, 0x54, 0x89, + 0xcf, 0x4e, 0x6c, 0xa5, 0xf6, 0x3d, 0xea, 0x25, 0x30, 0x4a, 0x4e, 0x5e, 0x16, 0x74, 0xb1, 0xe2, + 0xf0, 0x78, 0xc4, 0x96, 0xbd, 0x08, 0x23, 0xb2, 0x43, 0xef, 0x77, 0x9a, 0x7e, 0x76, 0xf8, 0x2e, + 0x1b, 0x30, 0x9c, 0xc2, 0xb4, 0x7f, 0xbd, 0x0c, 0x93, 0xfc, 0x88, 0xbb, 0xa1, 0x16, 0x83, 0x0a, + 0x55, 0xf9, 0x61, 0x5d, 0x9f, 0xd9, 0x2a, 0xe2, 0xa6, 0xf3, 0x5e, 0x8c, 0xfa, 0x0a, 0x89, 0xfe, + 0xc9, 0x4c, 0x48, 0x34, 0xdf, 0xaa, 0x6f, 0x1e, 0x53, 0x8f, 0xbe, 0xbe, 0x62, 0xa4, 0xff, 0x69, + 0x09, 0xc6, 0x33, 0x17, 0xda, 0xa1, 0x2f, 0xa6, 0xef, 0x40, 0xb1, 0x8a, 0x38, 0xfe, 0xdb, 0xf7, + 0x8e, 0xb3, 0xc3, 0xdd, 0x84, 0xf2, 0x88, 0x96, 0x8a, 0xfd, 0xfb, 0x25, 0x18, 0x4b, 0xdf, 0xc4, + 0xf7, 0x18, 0x8e, 0xd4, 0xdb, 0xa1, 0xc6, 0x2e, 0x9b, 0xba, 0x41, 0x3a, 0xf2, 0x94, 0x91, 0xdf, + 0xeb, 0x23, 0x1b, 0xb1, 0x86, 0x3f, 0x16, 0x17, 0xcc, 0xd8, 0xff, 0xcc, 0x82, 0xb3, 0xfc, 0x2d, + 0xb3, 0xf3, 0xf0, 0x6f, 0xe5, 0x8d, 0xee, 0xcb, 0xc5, 0x76, 0x30, 0x53, 0x57, 0xfc, 0xa0, 0xf1, + 0x65, 0xf7, 0xbd, 0x8b, 0xde, 0xa6, 0xa7, 0xc2, 0x63, 0xd8, 0xd9, 0x43, 0x4d, 0x06, 0xfb, 0x3f, + 0x94, 0x60, 0x78, 0x65, 0x7e, 0x51, 0x89, 0xf0, 0x19, 0xa8, 0xb9, 0x11, 0x71, 0xb4, 0xfb, 0xc7, + 0x0c, 0xa0, 0x92, 0x00, 0xac, 0x71, 0xe8, 0x2e, 0x8a, 0x07, 0x20, 0xc6, 0xd9, 0x5d, 0x14, 0x8f, + 0x4f, 0x8c, 0xb1, 0x84, 0xa3, 0xe7, 0xa1, 0xca, 0x52, 0x83, 0x6f, 0x45, 0x52, 0xe3, 0xe8, 0xad, + 0x35, 0x6b, 0xc7, 0x4b, 0x58, 0x61, 0x50, 0xc2, 0x8d, 0xd0, 0x8d, 0x29, 0x72, 0xc6, 0x23, 0xb3, + 0x40, 0x9b, 0xf1, 0x12, 0x96, 0x70, 0x56, 0xd9, 0x91, 0x79, 0x2d, 0x28, 0x72, 0x25, 0xdd, 0x69, + 0xee, 0xde, 0xa0, 0xe8, 0x1a, 0xe7, 0x30, 0x15, 0x40, 0x33, 0xe9, 0x79, 0x43, 0xfd, 0xa5, 0xe7, + 0xd9, 0xbf, 0x5f, 0x86, 0x9a, 0x76, 0xaa, 0x79, 0xa2, 0x1e, 0x46, 0x21, 0x75, 0xeb, 0xeb, 0x9d, + 0xc0, 0x55, 0xa4, 0x79, 0x34, 0x81, 0x51, 0x0e, 0xe3, 0x07, 0x2d, 0x18, 0xf6, 0x02, 0x2f, 0xf1, + 0x1c, 0xe6, 0x1b, 0x2c, 0xe6, 0xfe, 0x6f, 0xc5, 0x6e, 0x91, 0x53, 0x0e, 0x23, 0xf3, 0xc8, 0x5f, + 0x31, 0xc3, 0x26, 0x67, 0xf4, 0x51, 0x91, 0x0d, 0x56, 0x2e, 0xac, 0xa8, 0x4c, 0x35, 0x93, 0x02, + 0xd6, 0xa2, 0x36, 0x76, 0x12, 0x15, 0x54, 0x8b, 0x09, 0x53, 0x52, 0xea, 0xfe, 0x14, 0xb5, 0x8b, + 0x61, 0xcd, 0x98, 0x33, 0xb2, 0x63, 0x40, 0xdd, 0x63, 0x71, 0xc8, 0x4c, 0x9b, 0x19, 0xa8, 0x39, + 0xed, 0x24, 0x6c, 0xd2, 0x61, 0x12, 0x01, 0x03, 0x3a, 0x97, 0x48, 0x02, 0xb0, 0xc6, 0xb1, 0xbf, + 0x58, 0x81, 0x4c, 0x75, 0x0a, 0xb4, 0x0b, 0x35, 0x55, 0x9f, 0xa2, 0x98, 0xcc, 0x55, 0x3d, 0xa3, + 0x54, 0x67, 0x54, 0x13, 0xd6, 0xcc, 0xd0, 0xa6, 0x74, 0xb3, 0xf2, 0xd5, 0xfe, 0xbe, 0xac, 0x9b, + 0xf5, 0xbb, 0xfa, 0x3b, 0x75, 0xa3, 0x73, 0x75, 0x86, 0xd7, 0x23, 0x9c, 0x3e, 0xd0, 0x23, 0x7b, + 0xd0, 0x0d, 0xe8, 0x9f, 0x10, 0xb7, 0x95, 0x61, 0x12, 0xb7, 0xfd, 0x44, 0xcc, 0x86, 0xf7, 0x15, + 0xb8, 0xca, 0x38, 0x61, 0x5d, 0xe5, 0x89, 0xff, 0xc7, 0x06, 0xd3, 0xb4, 0xdf, 0x7c, 0xf0, 0x58, + 0xfd, 0xe6, 0x43, 0x85, 0xfa, 0xcd, 0x2f, 0x01, 0xb0, 0xb9, 0xcd, 0x33, 0x02, 0xaa, 0xcc, 0x9d, + 0xa9, 0x54, 0x0c, 0x56, 0x10, 0x6c, 0x60, 0xd9, 0xdf, 0x02, 0xe9, 0x32, 0x65, 0x68, 0x4a, 0x56, + 0x45, 0xe3, 0x27, 0x82, 0x2c, 0x19, 0x33, 0x55, 0xc0, 0xec, 0x17, 0x2c, 0x30, 0x6b, 0xa9, 0xa1, + 0x57, 0x78, 0xd1, 0x36, 0xab, 0x88, 0x13, 0x26, 0x83, 0xee, 0xf4, 0xb2, 0xd3, 0xca, 0x44, 0x3b, + 0xc9, 0xca, 0x6d, 0xe7, 0xdf, 0x03, 0x55, 0x09, 0x3d, 0x94, 0xb1, 0xfc, 0x31, 0x38, 0x2d, 0x0b, + 0x3b, 0xc8, 0xc3, 0x20, 0x11, 0x75, 0x70, 0xb0, 0x8f, 0x51, 0x3a, 0x0e, 0x4b, 0xbd, 0x1c, 0x87, + 0x6a, 0x37, 0x5c, 0xee, 0x59, 0x8e, 0xfd, 0x17, 0x2d, 0xb8, 0x98, 0xed, 0x40, 0xbc, 0x1c, 0x06, + 0x5e, 0x12, 0x46, 0x75, 0x92, 0x24, 0x5e, 0xb0, 0xc9, 0x6a, 0xeb, 0xde, 0x73, 0x22, 0x79, 0xbf, + 0x12, 0x13, 0x94, 0x77, 0x9c, 0x28, 0xc0, 0xac, 0x15, 0x75, 0x60, 0x90, 0x87, 0x50, 0x8b, 0x5d, + 0xd0, 0x11, 0xd7, 0x46, 0xce, 0x70, 0xe8, 0x6d, 0x18, 0x0f, 0xdf, 0xc6, 0x82, 0xa1, 0xfd, 0x55, + 0x0b, 0xd0, 0xca, 0x0e, 0x89, 0x22, 0xaf, 0x61, 0x04, 0x7d, 0xb3, 0x5b, 0x3f, 0x8d, 0xdb, 0x3d, + 0xcd, 0xb2, 0x23, 0x99, 0x5b, 0x3f, 0x8d, 0x7f, 0xf9, 0xb7, 0x7e, 0x96, 0x0e, 0x77, 0xeb, 0x27, + 0x5a, 0x81, 0xb3, 0x4d, 0xbe, 0x8d, 0xe3, 0x37, 0xe9, 0xf1, 0x3d, 0x9d, 0xca, 0x90, 0x3f, 0x77, + 0x7f, 0x6f, 0xea, 0xec, 0x72, 0x1e, 0x02, 0xce, 0x7f, 0xce, 0x7e, 0x0f, 0x20, 0x1e, 0xeb, 0x3d, + 0x9f, 0x17, 0xae, 0xda, 0xd3, 0xcd, 0x61, 0xff, 0x44, 0x05, 0xc6, 0x33, 0xb7, 0x6f, 0xd0, 0x2d, + 0x74, 0x77, 0x7c, 0xec, 0x91, 0xf5, 0x77, 0x77, 0xf7, 0xfa, 0x8a, 0xb8, 0x0d, 0xa0, 0xe2, 0x05, + 0xad, 0x76, 0x52, 0x4c, 0x81, 0x0e, 0xde, 0x89, 0x45, 0x4a, 0xd0, 0x38, 0x97, 0xa0, 0x7f, 0x31, + 0x67, 0x53, 0x64, 0xfc, 0x6e, 0x6a, 0x93, 0x33, 0xf0, 0x88, 0xdc, 0x2c, 0x9f, 0xd0, 0xd1, 0xb4, + 0x95, 0x22, 0x7c, 0xc8, 0x99, 0xc9, 0x72, 0xdc, 0xa1, 0x56, 0x3f, 0x57, 0x82, 0x61, 0xe3, 0xa3, + 0xa1, 0x9f, 0x4a, 0x57, 0x1a, 0xb5, 0x8a, 0x7b, 0x25, 0x46, 0x7f, 0x5a, 0xd7, 0x12, 0xe5, 0xaf, + 0xf4, 0x5c, 0x77, 0x91, 0xd1, 0x07, 0x7b, 0x53, 0xa7, 0x32, 0x65, 0x44, 0x53, 0x85, 0x47, 0xcf, + 0x7f, 0x2f, 0x8c, 0x67, 0xc8, 0xe4, 0xbc, 0xf2, 0x9a, 0xf9, 0xca, 0x47, 0x76, 0xf7, 0x99, 0x43, + 0xf6, 0x65, 0x3a, 0x64, 0xa2, 0x2e, 0x40, 0xe8, 0x93, 0x3e, 0x7c, 0x9d, 0x99, 0xfd, 0x45, 0xa9, + 0xcf, 0xf2, 0x1f, 0x6f, 0x83, 0x6a, 0x2b, 0xf4, 0x3d, 0xd7, 0x53, 0x85, 0xca, 0x59, 0xc1, 0x91, + 0x55, 0xd1, 0x86, 0x15, 0x14, 0xdd, 0x83, 0xda, 0xdd, 0x7b, 0x09, 0x3f, 0x66, 0x14, 0x47, 0x19, + 0x45, 0x9d, 0x2e, 0x2a, 0xa3, 0x45, 0x9d, 0x63, 0x62, 0xcd, 0x0b, 0xd9, 0x30, 0xc8, 0x94, 0xa0, + 0xcc, 0x11, 0x64, 0xc7, 0x2c, 0x4c, 0x3b, 0xc6, 0x58, 0x40, 0xec, 0xaf, 0x8c, 0xc0, 0x99, 0xbc, + 0x2b, 0x90, 0xd0, 0x6b, 0x30, 0xc8, 0xfb, 0x58, 0xcc, 0x2d, 0x7b, 0x79, 0x3c, 0xae, 0x32, 0x82, + 0xa2, 0x5b, 0xec, 0x37, 0x16, 0x3c, 0x05, 0x77, 0xdf, 0x59, 0x17, 0x33, 0xe4, 0x78, 0xb8, 0x2f, + 0x39, 0x9a, 0xfb, 0x92, 0xc3, 0xb9, 0xfb, 0xce, 0x3a, 0xda, 0x85, 0xca, 0xa6, 0x97, 0x10, 0x47, + 0x38, 0x67, 0xee, 0x1c, 0x0b, 0x73, 0xe2, 0x70, 0x2b, 0x8d, 0xfd, 0xc4, 0x9c, 0x21, 0xfa, 0x92, + 0x05, 0xe3, 0xeb, 0xe9, 0xba, 0x43, 0x42, 0x78, 0x3a, 0xc7, 0x70, 0xcd, 0x55, 0x9a, 0x11, 0xbf, + 0xf6, 0x36, 0xd3, 0x88, 0xb3, 0xdd, 0x41, 0x9f, 0xb4, 0x60, 0x68, 0xc3, 0xf3, 0x8d, 0x7b, 0x44, + 0x8e, 0xe1, 0xe3, 0x5c, 0x61, 0x0c, 0xf4, 0x8e, 0x83, 0xff, 0x8f, 0xb1, 0xe4, 0xdc, 0x4b, 0x53, + 0x0d, 0x1e, 0x55, 0x53, 0x0d, 0x3d, 0x22, 0x4d, 0xf5, 0x19, 0x0b, 0x6a, 0x6a, 0xa4, 0x45, 0xfd, + 0x96, 0x0f, 0x1e, 0xe3, 0x27, 0xe7, 0x1e, 0x29, 0xf5, 0x17, 0x6b, 0xe6, 0xe8, 0x75, 0x0b, 0x86, + 0x9d, 0x57, 0xdb, 0x11, 0x69, 0x90, 0x9d, 0xb0, 0x15, 0x8b, 0xc2, 0xaa, 0x2f, 0x17, 0xdf, 0x99, + 0x59, 0xca, 0x64, 0x81, 0xec, 0xac, 0xb4, 0x62, 0x91, 0xbf, 0xac, 0x1b, 0xb0, 0xd9, 0x05, 0xf4, + 0x39, 0xba, 0xbf, 0x74, 0x9b, 0xc2, 0xe0, 0x13, 0x65, 0x15, 0x3f, 0x54, 0x7c, 0x8f, 0xea, 0x8a, + 0x87, 0xd8, 0x6a, 0xaa, 0xff, 0xd8, 0xe0, 0x8f, 0x7e, 0x40, 0x9b, 0x15, 0xc3, 0x45, 0x54, 0xfb, + 0xce, 0xeb, 0x4a, 0x5f, 0xd5, 0x01, 0x08, 0x3c, 0xe5, 0x86, 0x41, 0xe2, 0x05, 0x6d, 0xb2, 0x12, + 0x60, 0xd2, 0x0a, 0x6f, 0x86, 0xc9, 0x95, 0xb0, 0x1d, 0x34, 0x2e, 0x47, 0x51, 0x18, 0xb1, 0xbb, + 0x5c, 0x8c, 0xbb, 0x5e, 0xe7, 0x7b, 0xa3, 0xe2, 0xfd, 0xe8, 0x1c, 0xc5, 0x84, 0xd9, 0x2b, 0xc1, + 0xd4, 0x01, 0xdf, 0x1e, 0xbd, 0x08, 0x23, 0x61, 0xb4, 0xe9, 0x04, 0xde, 0xab, 0x66, 0x09, 0x38, + 0x65, 0x1f, 0xaf, 0x18, 0x30, 0x9c, 0xc2, 0x34, 0x6b, 0x03, 0x95, 0x0e, 0xa8, 0x0d, 0x74, 0x11, + 0x06, 0x22, 0xd2, 0x0a, 0xb3, 0xdb, 0x3c, 0x96, 0x01, 0xc9, 0x20, 0xe8, 0x19, 0x28, 0x3b, 0x2d, + 0x4f, 0xf8, 0x3a, 0xd5, 0xee, 0x75, 0x76, 0x75, 0x11, 0xd3, 0xf6, 0x54, 0xa9, 0xb2, 0xca, 0x89, + 0x94, 0x2a, 0xa3, 0x0a, 0x5c, 0x9c, 0xe6, 0x0d, 0x6a, 0x05, 0x9e, 0x3e, 0x65, 0xb3, 0xdf, 0x28, + 0xc3, 0x33, 0xfb, 0xae, 0x74, 0x1d, 0x41, 0x6f, 0xed, 0x13, 0x41, 0x2f, 0x87, 0xa7, 0x74, 0xd0, + 0xf0, 0x94, 0x7b, 0x0c, 0xcf, 0x27, 0xa9, 0x00, 0x93, 0xa5, 0xf3, 0x8a, 0xb9, 0xaf, 0xbe, 0x57, + 0x25, 0x3e, 0x21, 0xbb, 0x24, 0x14, 0x6b, 0xbe, 0x74, 0xf7, 0x96, 0xaa, 0x8b, 0x53, 0x29, 0x42, + 0x81, 0xf7, 0x2c, 0x5f, 0xc7, 0xa5, 0x56, 0xaf, 0x62, 0x3b, 0xf6, 0x2f, 0x0f, 0xc0, 0xb3, 0x7d, + 0xe8, 0x5d, 0x73, 0x16, 0x5b, 0x7d, 0xce, 0xe2, 0xaf, 0xf3, 0xcf, 0xf4, 0xe9, 0xdc, 0xcf, 0x84, + 0x8b, 0xff, 0x4c, 0xfb, 0x7f, 0x21, 0x76, 0x20, 0x12, 0xc4, 0xc4, 0x6d, 0x47, 0x3c, 0x9b, 0xc8, + 0x48, 0x8f, 0x5e, 0x14, 0xed, 0x58, 0x61, 0xd0, 0xdd, 0xb8, 0xeb, 0xd0, 0xe5, 0x3f, 0x54, 0x50, + 0x1d, 0x14, 0x33, 0xd3, 0x9a, 0x1b, 0x83, 0xf3, 0xb3, 0x54, 0x02, 0x70, 0x36, 0xf6, 0x6f, 0x58, + 0x70, 0xbe, 0xb7, 0x71, 0x84, 0xde, 0x09, 0xc3, 0xeb, 0x2c, 0xb6, 0x73, 0x99, 0x45, 0x70, 0x89, + 0xa9, 0xc3, 0xde, 0x57, 0x37, 0x63, 0x13, 0x07, 0xcd, 0xc3, 0x84, 0x19, 0x14, 0xba, 0x6c, 0x84, + 0x7e, 0x31, 0xf7, 0xcd, 0x5a, 0x16, 0x88, 0xbb, 0xf1, 0xd1, 0x34, 0x40, 0xe2, 0x25, 0x3e, 0xe1, + 0x4f, 0xf3, 0x89, 0xc6, 0xb4, 0xe5, 0x9a, 0x6a, 0xc5, 0x06, 0x86, 0xfd, 0xb5, 0x72, 0xfe, 0x6b, + 0x70, 0xa3, 0xfb, 0x30, 0xb3, 0x5f, 0xcc, 0xed, 0x52, 0x1f, 0x12, 0xba, 0x7c, 0xd2, 0x12, 0x7a, + 0xa0, 0x97, 0x84, 0x46, 0x0b, 0x70, 0xca, 0xb8, 0x3d, 0x96, 0x57, 0xd2, 0xe1, 0x67, 0x64, 0xaa, + 0x0c, 0xde, 0x6a, 0x06, 0x8e, 0xbb, 0x9e, 0x78, 0xcc, 0xa7, 0xea, 0x6f, 0x96, 0xe0, 0x5c, 0xcf, + 0x7d, 0xce, 0x09, 0x69, 0x20, 0xf3, 0xf3, 0x0f, 0x9c, 0xcc, 0xe7, 0x37, 0x3f, 0x4a, 0xe5, 0xc0, + 0x8f, 0xd2, 0x8f, 0x3a, 0xff, 0x83, 0x52, 0xcf, 0xc5, 0x42, 0xf7, 0xc5, 0x7f, 0x6d, 0x47, 0xf2, + 0x25, 0x18, 0x75, 0x5a, 0x2d, 0x8e, 0xc7, 0x12, 0x45, 0x32, 0xa5, 0x39, 0x67, 0x4d, 0x20, 0x4e, + 0xe3, 0xf6, 0x35, 0xb0, 0x3f, 0x5d, 0x86, 0x0b, 0xfb, 0x9b, 0xfc, 0xe9, 0xc0, 0x43, 0xab, 0x8f, + 0x5b, 0xc1, 0x0e, 0x8e, 0x65, 0xfc, 0x7a, 0x9f, 0xb2, 0x4a, 0x8e, 0x0c, 0x9e, 0x8c, 0x1c, 0xf9, + 0x13, 0x0b, 0x6a, 0x98, 0x6c, 0x70, 0x3d, 0x84, 0xee, 0x8a, 0x89, 0x6c, 0x15, 0x71, 0x8b, 0x05, + 0x9d, 0xfe, 0xb1, 0xc7, 0xae, 0x76, 0xc8, 0x5b, 0x12, 0x47, 0x2d, 0xc7, 0xa1, 0x6e, 0x06, 0x2e, + 0xf7, 0xbe, 0x19, 0xd8, 0xfe, 0x95, 0x1a, 0x7d, 0xbd, 0x56, 0x38, 0x1f, 0x91, 0x46, 0x4c, 0x27, + 0x47, 0x3b, 0xf2, 0xc5, 0x4c, 0x53, 0x93, 0xe3, 0x16, 0x5e, 0xc2, 0xb4, 0x3d, 0x75, 0xa8, 0x5d, + 0x3a, 0x54, 0xf9, 0xc8, 0xf2, 0x81, 0xe5, 0x23, 0x5f, 0x82, 0xd1, 0x38, 0xde, 0x5a, 0x8d, 0xbc, + 0x1d, 0x27, 0x21, 0x37, 0x88, 0xac, 0x33, 0xa5, 0x4b, 0xa9, 0xd5, 0xaf, 0x69, 0x20, 0x4e, 0xe3, + 0xa2, 0xab, 0x30, 0xa1, 0x8b, 0x38, 0x92, 0x28, 0x61, 0x79, 0xb2, 0x7c, 0xbd, 0xaa, 0x1a, 0x42, + 0xba, 0xec, 0xa3, 0x40, 0xc0, 0xdd, 0xcf, 0x50, 0xcd, 0x98, 0x6a, 0xa4, 0x1d, 0x19, 0x4c, 0x6b, + 0xc6, 0x14, 0x1d, 0xda, 0x97, 0xae, 0x27, 0xd0, 0x32, 0x9c, 0xe6, 0x13, 0x63, 0xb6, 0xd5, 0x32, + 0xde, 0x68, 0x28, 0x7d, 0x75, 0xc0, 0xd5, 0x6e, 0x14, 0x9c, 0xf7, 0x1c, 0x7a, 0x01, 0x86, 0x55, + 0xf3, 0xe2, 0x82, 0x38, 0x8f, 0x55, 0xfe, 0x60, 0x45, 0x66, 0xb1, 0x81, 0x4d, 0x3c, 0xf4, 0x7e, + 0x78, 0x52, 0xff, 0xe5, 0x75, 0x17, 0x78, 0x90, 0xc2, 0x82, 0xa8, 0x8f, 0xab, 0x6e, 0xa6, 0xbb, + 0x9a, 0x8b, 0xd6, 0xc0, 0xbd, 0x9e, 0x47, 0xeb, 0x70, 0x5e, 0x81, 0x2e, 0x07, 0x09, 0xcb, 0x8c, + 0x8e, 0xc9, 0x9c, 0x13, 0xb3, 0x70, 0x1b, 0x60, 0xef, 0x69, 0x0b, 0xea, 0xe7, 0xaf, 0x7a, 0xc9, + 0xb5, 0x3c, 0x4c, 0xbc, 0x84, 0xf7, 0xa1, 0x42, 0x65, 0x1f, 0x09, 0x9c, 0x75, 0x9f, 0xac, 0xcc, + 0x2f, 0xb2, 0x3a, 0xbb, 0x46, 0x4c, 0xc4, 0x65, 0x09, 0xc0, 0x1a, 0x47, 0x25, 0x85, 0x8c, 0xf4, + 0x4a, 0x0a, 0x41, 0xab, 0x70, 0x66, 0xd3, 0x6d, 0xd1, 0xbd, 0x80, 0xe7, 0x92, 0x59, 0x97, 0x45, + 0xa1, 0xd3, 0x0f, 0xc3, 0xef, 0x74, 0x50, 0xd9, 0x75, 0x57, 0xe7, 0x57, 0xbb, 0x70, 0x70, 0xee, + 0x93, 0x2c, 0x5b, 0x21, 0x0a, 0x77, 0x3b, 0x93, 0xa7, 0x33, 0xd9, 0x0a, 0xb4, 0x11, 0x73, 0x18, + 0xba, 0x0e, 0x88, 0x65, 0x98, 0x5e, 0x4b, 0x92, 0x96, 0xda, 0x7c, 0x4c, 0x9e, 0x49, 0x57, 0xcb, + 0xbc, 0xd2, 0x85, 0x81, 0x73, 0x9e, 0xa2, 0xb6, 0x69, 0x10, 0x32, 0xea, 0x93, 0x4f, 0xa6, 0x6d, + 0xd3, 0x9b, 0xbc, 0x19, 0x4b, 0x38, 0xfa, 0x10, 0x4c, 0xb6, 0x63, 0xc2, 0xdc, 0x1a, 0x77, 0xc2, + 0x68, 0xdb, 0x0f, 0x9d, 0xc6, 0x22, 0xbb, 0x82, 0x38, 0xe9, 0x4c, 0x4e, 0x32, 0xe6, 0x17, 0xc5, + 0xb3, 0x93, 0xb7, 0x7a, 0xe0, 0xe1, 0x9e, 0x14, 0xb2, 0xe5, 0x5e, 0xcf, 0xf5, 0x59, 0xee, 0x75, + 0x15, 0xce, 0x48, 0x51, 0xbe, 0x32, 0xbf, 0xa8, 0x5e, 0x7a, 0xf2, 0x7c, 0xfa, 0x4e, 0xc3, 0xc5, + 0x1c, 0x1c, 0x9c, 0xfb, 0xa4, 0xfd, 0xc7, 0x16, 0x8c, 0x2a, 0x09, 0x76, 0x02, 0x99, 0xee, 0x7e, + 0x3a, 0xd3, 0xfd, 0xea, 0xd1, 0x75, 0x00, 0xeb, 0x79, 0x8f, 0xbc, 0xac, 0x1f, 0x1b, 0x05, 0xd0, + 0x7a, 0x42, 0x19, 0x52, 0x56, 0x4f, 0x43, 0xea, 0xb1, 0x95, 0xd1, 0x79, 0xe5, 0x3b, 0x2b, 0x8f, + 0xb6, 0x7c, 0x67, 0x1d, 0xce, 0xca, 0x29, 0xc5, 0xe3, 0x10, 0xae, 0x85, 0xb1, 0x12, 0xf9, 0xc6, + 0x25, 0x95, 0x8b, 0x79, 0x48, 0x38, 0xff, 0xd9, 0x94, 0x39, 0x33, 0x74, 0xa0, 0x39, 0xa3, 0xa4, + 0xdc, 0xd2, 0x86, 0xbc, 0x42, 0x36, 0x23, 0xe5, 0x96, 0xae, 0xd4, 0xb1, 0xc6, 0xc9, 0x57, 0x75, + 0xb5, 0x82, 0x54, 0x1d, 0x1c, 0x5a, 0xd5, 0x49, 0xa1, 0x3b, 0xdc, 0x53, 0xe8, 0x4a, 0x93, 0x74, + 0xa4, 0xa7, 0x49, 0xfa, 0x5e, 0x18, 0xf3, 0x82, 0x2d, 0x12, 0x79, 0x09, 0x69, 0xb0, 0xb5, 0xc0, + 0x04, 0x72, 0x55, 0x1b, 0x3a, 0x8b, 0x29, 0x28, 0xce, 0x60, 0xa7, 0x35, 0xc5, 0x58, 0x1f, 0x9a, + 0xa2, 0x87, 0x7e, 0x1e, 0x2f, 0x46, 0x3f, 0x9f, 0x3a, 0xba, 0x7e, 0x9e, 0x38, 0x56, 0xfd, 0x8c, + 0x0a, 0xd1, 0xcf, 0x7d, 0xa9, 0x3e, 0xc3, 0x95, 0x72, 0xe6, 0x00, 0x57, 0x4a, 0x2f, 0xe5, 0x7c, + 0xf6, 0xa1, 0x95, 0x73, 0xbe, 0xde, 0x7d, 0xe2, 0x4d, 0xbd, 0x5b, 0x88, 0xde, 0xfd, 0x4c, 0x09, + 0xce, 0x6a, 0xcd, 0x44, 0xe5, 0x81, 0xb7, 0x41, 0x65, 0x33, 0xbb, 0x97, 0x9d, 0x47, 0x49, 0x18, + 0xf5, 0x15, 0x74, 0x85, 0x09, 0x05, 0xc1, 0x06, 0x16, 0x2b, 0x53, 0x40, 0x22, 0x76, 0x23, 0x50, + 0x56, 0x6d, 0xcd, 0x8b, 0x76, 0xac, 0x30, 0xe8, 0x20, 0xd0, 0xdf, 0xa2, 0x4a, 0x4e, 0xb6, 0xd6, + 0xfc, 0xbc, 0x06, 0x61, 0x13, 0x0f, 0xbd, 0x8d, 0x33, 0x61, 0x22, 0x93, 0xaa, 0xae, 0x11, 0xbe, + 0x27, 0x55, 0x52, 0x52, 0x41, 0x65, 0x77, 0x58, 0x19, 0x8d, 0x4a, 0x77, 0x77, 0x58, 0xc0, 0xb1, + 0xc2, 0xb0, 0xff, 0xa7, 0x05, 0xe7, 0x72, 0x87, 0xe2, 0x04, 0xcc, 0x91, 0xdd, 0xb4, 0x39, 0x52, + 0x2f, 0x6a, 0x4b, 0x6a, 0xbc, 0x45, 0x0f, 0xd3, 0xe4, 0x3f, 0x5a, 0x30, 0xa6, 0xf1, 0x4f, 0xe0, + 0x55, 0xbd, 0xf4, 0xab, 0x16, 0xb7, 0xfb, 0xae, 0x75, 0xbd, 0xdb, 0xaf, 0x97, 0x40, 0xdd, 0xff, + 0x30, 0xeb, 0x26, 0xfd, 0xe5, 0x28, 0x76, 0x60, 0x90, 0x85, 0x1d, 0xc5, 0xc5, 0x84, 0x54, 0xa6, + 0xf9, 0xb3, 0x10, 0x26, 0x7d, 0xec, 0xca, 0xfe, 0xc6, 0x58, 0x30, 0x64, 0xf7, 0x55, 0xf1, 0xd2, + 0xfa, 0x0d, 0x91, 0x6d, 0xaf, 0xef, 0xab, 0x12, 0xed, 0x58, 0x61, 0x50, 0x85, 0xe9, 0xb9, 0x61, + 0x30, 0xef, 0x3b, 0x71, 0x2c, 0x6c, 0x38, 0xa5, 0x30, 0x17, 0x25, 0x00, 0x6b, 0x1c, 0x16, 0x91, + 0xe4, 0xc5, 0x2d, 0xdf, 0xe9, 0x18, 0x9e, 0x30, 0xa3, 0x1a, 0x9c, 0x02, 0x61, 0x13, 0xcf, 0x6e, + 0xc2, 0x64, 0xfa, 0x25, 0x16, 0xc8, 0x06, 0x4b, 0x07, 0xe8, 0x6b, 0x38, 0x67, 0xa0, 0xe6, 0xb0, + 0xa7, 0x96, 0xda, 0x8e, 0x90, 0x09, 0x3a, 0x28, 0x5e, 0x02, 0xb0, 0xc6, 0xb1, 0xbf, 0x15, 0x4e, + 0xe7, 0x8c, 0x59, 0x1f, 0x51, 0x97, 0xbf, 0x54, 0x82, 0xf1, 0xf4, 0x93, 0x31, 0x4b, 0x98, 0xe5, + 0x7d, 0xf6, 0x62, 0x37, 0xdc, 0x21, 0x51, 0x87, 0x76, 0xc3, 0xca, 0x24, 0xcc, 0x76, 0x61, 0xe0, + 0x9c, 0xa7, 0xd8, 0x55, 0x2c, 0x0d, 0xf5, 0xea, 0x72, 0x7a, 0xdc, 0x2e, 0x72, 0x7a, 0xe8, 0x91, + 0x35, 0x23, 0xc5, 0x14, 0x4b, 0x6c, 0xf2, 0xa7, 0xf6, 0x0f, 0x4b, 0xf7, 0x99, 0x6b, 0x7b, 0x7e, + 0xe2, 0x05, 0xe2, 0x95, 0xc5, 0xc4, 0x51, 0xf6, 0xcf, 0x72, 0x37, 0x0a, 0xce, 0x7b, 0xce, 0xfe, + 0xea, 0x00, 0xa8, 0xb2, 0x39, 0x2c, 0x92, 0xb7, 0xa0, 0x38, 0xe8, 0xc3, 0xa6, 0x5d, 0xab, 0x2f, + 0x3d, 0xb0, 0x5f, 0x68, 0x1d, 0xf7, 0x92, 0x99, 0x87, 0x1e, 0x6a, 0xc0, 0xd6, 0x34, 0x08, 0x9b, + 0x78, 0xb4, 0x27, 0xbe, 0xb7, 0x43, 0xf8, 0x43, 0x83, 0xe9, 0x9e, 0x2c, 0x49, 0x00, 0xd6, 0x38, + 0xac, 0xf2, 0xba, 0xb7, 0xb1, 0x21, 0x5c, 0x3e, 0xba, 0xf2, 0xba, 0xb7, 0xb1, 0x81, 0x19, 0x84, + 0x5f, 0xd6, 0x15, 0x6e, 0x0b, 0x9b, 0xdf, 0xb8, 0xac, 0x2b, 0xdc, 0xc6, 0x0c, 0x42, 0xbf, 0x52, + 0x10, 0x46, 0x4d, 0xc7, 0xf7, 0x5e, 0x25, 0x0d, 0xc5, 0x45, 0xd8, 0xfa, 0xea, 0x2b, 0xdd, 0xec, + 0x46, 0xc1, 0x79, 0xcf, 0xd1, 0x09, 0xdd, 0x8a, 0x48, 0xc3, 0x73, 0x13, 0x93, 0x1a, 0xa4, 0x27, + 0xf4, 0x6a, 0x17, 0x06, 0xce, 0x79, 0x0a, 0xcd, 0xc2, 0xb8, 0x2c, 0x7b, 0x24, 0x4b, 0x85, 0x0e, + 0xa7, 0xeb, 0x0d, 0xe2, 0x34, 0x18, 0x67, 0xf1, 0xa9, 0xc4, 0x6a, 0x8a, 0x02, 0xc6, 0x22, 0x2a, + 0x44, 0x49, 0x2c, 0x59, 0xd8, 0x18, 0x2b, 0x0c, 0xfb, 0x13, 0x65, 0xaa, 0x61, 0x7b, 0xd4, 0x09, + 0x3f, 0xb1, 0xb8, 0xfb, 0xf4, 0x8c, 0x1c, 0xe8, 0x63, 0x46, 0xbe, 0x1b, 0x46, 0xee, 0xc6, 0x61, + 0xa0, 0x62, 0xda, 0x2b, 0x3d, 0x63, 0xda, 0x0d, 0xac, 0xfc, 0x98, 0xf6, 0xc1, 0xa2, 0x62, 0xda, + 0x87, 0x1e, 0x32, 0xa6, 0xfd, 0x5f, 0x57, 0x40, 0xdd, 0xc6, 0x7a, 0x93, 0x24, 0xf7, 0xc2, 0x68, + 0xdb, 0x0b, 0x36, 0x59, 0x09, 0x9f, 0x2f, 0x59, 0xb2, 0x0a, 0xd0, 0x92, 0x99, 0xeb, 0xbd, 0x51, + 0xd0, 0x8d, 0x9a, 0x29, 0x66, 0xd3, 0x6b, 0x06, 0x23, 0x1e, 0x8c, 0x94, 0xa9, 0x36, 0x24, 0xce, + 0x59, 0x52, 0x3d, 0x42, 0xdf, 0x0b, 0x20, 0xfd, 0xe3, 0x1b, 0x52, 0x02, 0x2f, 0x16, 0xd3, 0x3f, + 0x4c, 0x36, 0xb4, 0x7d, 0xbb, 0xa6, 0x98, 0x60, 0x83, 0x21, 0xfa, 0x8c, 0xce, 0x83, 0xe7, 0xc9, + 0x6f, 0x1f, 0x3d, 0x96, 0xb1, 0xe9, 0x27, 0x0b, 0x1e, 0xc3, 0x90, 0x17, 0x6c, 0xd2, 0x79, 0x22, + 0x62, 0x7f, 0xdf, 0x9a, 0x57, 0x21, 0x6e, 0x29, 0x74, 0x1a, 0x73, 0x8e, 0xef, 0x04, 0x2e, 0x89, + 0x16, 0x39, 0xba, 0xde, 0xf3, 0x88, 0x06, 0x2c, 0x09, 0x75, 0x5d, 0x19, 0x5b, 0xe9, 0xe7, 0xca, + 0xd8, 0xf3, 0xdf, 0x09, 0x13, 0x5d, 0x1f, 0xf3, 0x50, 0x49, 0xef, 0x47, 0xa8, 0x0d, 0xf7, 0xcb, + 0x83, 0x5a, 0x69, 0xdd, 0x0c, 0x1b, 0xfc, 0x06, 0xd2, 0x48, 0x7f, 0x51, 0x61, 0xbf, 0x16, 0x38, + 0x45, 0x94, 0x9a, 0x31, 0x1a, 0xb1, 0xc9, 0x92, 0xce, 0xd1, 0x96, 0x13, 0x91, 0xe0, 0xb8, 0xe7, + 0xe8, 0xaa, 0x62, 0x82, 0x0d, 0x86, 0x68, 0x2b, 0x95, 0x9d, 0x79, 0xe5, 0xe8, 0xd9, 0x99, 0xac, + 0x5e, 0x6f, 0xde, 0x45, 0x7d, 0xaf, 0x5b, 0x30, 0x16, 0xa4, 0x66, 0x6e, 0x31, 0x09, 0x19, 0xf9, + 0xab, 0x82, 0x5f, 0xe6, 0x9d, 0x6e, 0xc3, 0x19, 0xfe, 0x79, 0x2a, 0xad, 0x72, 0x48, 0x95, 0xa6, + 0x6f, 0x40, 0x1e, 0xec, 0x75, 0x03, 0x32, 0x0a, 0xd4, 0xd5, 0xf4, 0x43, 0x45, 0xd4, 0xb8, 0x49, + 0xdd, 0x4b, 0x0f, 0x39, 0x77, 0xd2, 0xdf, 0x31, 0x93, 0xb7, 0x0f, 0x7f, 0x45, 0xf9, 0x68, 0xaf, + 0x24, 0x6f, 0xfb, 0xff, 0x0c, 0xc0, 0x29, 0x39, 0x22, 0x32, 0x99, 0x8b, 0xea, 0x47, 0xce, 0x57, + 0xdb, 0xca, 0x4a, 0x3f, 0x5e, 0x93, 0x00, 0xac, 0x71, 0xa8, 0x3d, 0xd6, 0x8e, 0xc9, 0x4a, 0x8b, + 0x04, 0x4b, 0xde, 0x7a, 0x2c, 0x8e, 0x7f, 0xd5, 0x42, 0xb9, 0xa5, 0x41, 0xd8, 0xc4, 0x63, 0x19, + 0xe6, 0xae, 0x59, 0xe6, 0x45, 0x67, 0x98, 0x0b, 0x43, 0x55, 0xc2, 0xd1, 0x8f, 0xe7, 0x5e, 0x5c, + 0x52, 0x4c, 0x0a, 0x74, 0x57, 0x0e, 0xdb, 0xe1, 0x6e, 0x2c, 0x41, 0xff, 0xc8, 0x82, 0xb3, 0xbc, + 0x55, 0x8e, 0xe4, 0xad, 0x56, 0xc3, 0x49, 0x48, 0x5c, 0xcc, 0x25, 0x6f, 0x39, 0xfd, 0xd3, 0x2e, + 0xed, 0x3c, 0xb6, 0x38, 0xbf, 0x37, 0xe8, 0x8b, 0x16, 0x8c, 0x6f, 0xa7, 0xca, 0xb4, 0x49, 0xd5, + 0x71, 0xd4, 0x1a, 0x46, 0x29, 0xa2, 0x7a, 0xa9, 0xa5, 0xdb, 0x63, 0x9c, 0xe5, 0x6e, 0xff, 0x85, + 0x05, 0xa6, 0x18, 0x3d, 0xf9, 0xea, 0x6e, 0x87, 0x37, 0x05, 0xa5, 0x75, 0x59, 0xd9, 0x2f, 0x34, + 0xa3, 0xed, 0x35, 0xc4, 0xfe, 0x42, 0x9f, 0xbe, 0x2f, 0x2e, 0x60, 0xda, 0x6e, 0x7f, 0xa5, 0xa2, + 0x7d, 0x12, 0x22, 0xc3, 0xf8, 0xaf, 0xc5, 0x6b, 0x6f, 0xa8, 0xb2, 0xcd, 0xfc, 0xcd, 0x6f, 0x76, + 0x95, 0x6d, 0xfe, 0xf6, 0xc3, 0x27, 0x90, 0xf3, 0x01, 0xea, 0x55, 0xb5, 0x79, 0xe8, 0x80, 0xec, + 0xf1, 0xbb, 0x50, 0xa5, 0x5b, 0x30, 0xe6, 0x5c, 0xac, 0xa6, 0x3a, 0x55, 0xbd, 0x26, 0xda, 0x1f, + 0xec, 0x4d, 0x7d, 0xdb, 0xe1, 0xbb, 0x25, 0x9f, 0xc6, 0x8a, 0x3e, 0x8a, 0xa1, 0x46, 0x7f, 0xb3, + 0x44, 0x77, 0xb1, 0xb9, 0xbb, 0xa5, 0x64, 0xa6, 0x04, 0x14, 0x92, 0x45, 0xaf, 0xf9, 0xa0, 0x00, + 0x6a, 0x14, 0x91, 0x33, 0xe5, 0x7b, 0xc0, 0x55, 0x95, 0x6e, 0x2e, 0x01, 0x0f, 0xf6, 0xa6, 0x5e, + 0x3a, 0x3c, 0x53, 0xf5, 0x38, 0xd6, 0x2c, 0x0c, 0xd5, 0x38, 0xdc, 0x4b, 0x35, 0xda, 0xff, 0x77, + 0x40, 0xcf, 0x6f, 0x51, 0xd1, 0xfb, 0xaf, 0xc5, 0xfc, 0x7e, 0x31, 0x33, 0xbf, 0x2f, 0x76, 0xcd, + 0xef, 0x31, 0x3a, 0x66, 0x39, 0x75, 0xc6, 0x4f, 0xda, 0x58, 0x38, 0xd8, 0x27, 0xc1, 0xac, 0xa4, + 0x57, 0xda, 0x5e, 0x44, 0xe2, 0xd5, 0xa8, 0x1d, 0x78, 0xc1, 0x26, 0x9b, 0xb2, 0x55, 0xd3, 0x4a, + 0x4a, 0x81, 0x71, 0x16, 0x9f, 0x6e, 0xfc, 0xe9, 0xbc, 0xb8, 0xe3, 0xec, 0xf0, 0x99, 0x67, 0x54, + 0x53, 0xad, 0x8b, 0x76, 0xac, 0x30, 0xd0, 0x16, 0x3c, 0x2d, 0x09, 0x2c, 0x10, 0x9f, 0xd0, 0x17, + 0x62, 0x31, 0x5b, 0x51, 0x93, 0x67, 0x66, 0xf0, 0xc0, 0x90, 0x6f, 0x14, 0x14, 0x9e, 0xc6, 0xfb, + 0xe0, 0xe2, 0x7d, 0x29, 0xd9, 0x5f, 0x66, 0x71, 0x04, 0x46, 0xbd, 0x0f, 0x3a, 0xfb, 0x7c, 0xaf, + 0xe9, 0xc9, 0xa2, 0xaf, 0x6a, 0xf6, 0x2d, 0xd1, 0x46, 0xcc, 0x61, 0xe8, 0x1e, 0x0c, 0xad, 0x3b, + 0xee, 0x76, 0xb8, 0xb1, 0x51, 0xcc, 0x65, 0x5d, 0x73, 0x9c, 0x18, 0x2b, 0xf8, 0x3e, 0x24, 0xfe, + 0x3c, 0xd0, 0x3f, 0xb1, 0xe4, 0x66, 0xff, 0x5e, 0x05, 0xc6, 0x65, 0xac, 0xd7, 0x35, 0x2f, 0x66, + 0xe1, 0x01, 0xe6, 0x2d, 0x18, 0xa5, 0x03, 0x6f, 0xc1, 0xf8, 0x30, 0x40, 0x83, 0xb4, 0xfc, 0xb0, + 0xc3, 0x8c, 0xc3, 0x81, 0x43, 0x1b, 0x87, 0x6a, 0x3f, 0xb1, 0xa0, 0xa8, 0x60, 0x83, 0xa2, 0xa8, + 0x74, 0xcb, 0x2f, 0xd5, 0xc8, 0x54, 0xba, 0x35, 0xae, 0xf4, 0x1b, 0x3c, 0xd9, 0x2b, 0xfd, 0x3c, + 0x18, 0xe7, 0x5d, 0x54, 0x55, 0x35, 0x1e, 0xa2, 0x78, 0x06, 0xcb, 0x4b, 0x5c, 0x48, 0x93, 0xc1, + 0x59, 0xba, 0xe6, 0x7d, 0x7d, 0xd5, 0x93, 0xbe, 0xaf, 0xef, 0xed, 0x50, 0x93, 0xdf, 0x39, 0x9e, + 0xac, 0xe9, 0x8a, 0x4f, 0x72, 0x1a, 0xc4, 0x58, 0xc3, 0xbb, 0x0a, 0x04, 0xc1, 0xa3, 0x2a, 0x10, + 0x64, 0xbf, 0x5e, 0xa6, 0xbb, 0x0a, 0xde, 0xaf, 0x43, 0x5f, 0x77, 0x79, 0xcd, 0xb8, 0xee, 0xf2, + 0x70, 0xdf, 0xb3, 0x9a, 0xb9, 0x16, 0xf3, 0x69, 0x18, 0x48, 0x9c, 0x4d, 0x99, 0x46, 0xcd, 0xa0, + 0x6b, 0xce, 0x66, 0x8c, 0x59, 0xeb, 0x61, 0x0a, 0x83, 0xbf, 0x04, 0xa3, 0xb1, 0xb7, 0x19, 0x38, + 0x49, 0x3b, 0x22, 0xc6, 0x61, 0xa2, 0x8e, 0x98, 0x31, 0x81, 0x38, 0x8d, 0x8b, 0x3e, 0x69, 0x01, + 0x44, 0x44, 0xed, 0x59, 0x06, 0x8b, 0x98, 0x43, 0x4a, 0x0c, 0x48, 0xba, 0x66, 0x61, 0x17, 0xb5, + 0x57, 0x31, 0xd8, 0xda, 0x9f, 0xb6, 0x60, 0xa2, 0xeb, 0x29, 0xd4, 0x82, 0x41, 0x97, 0x5d, 0x4a, + 0x5a, 0x4c, 0x31, 0xd3, 0xf4, 0x05, 0xa7, 0x5c, 0x39, 0xf1, 0x36, 0x2c, 0xf8, 0xd8, 0xff, 0x6e, + 0x14, 0xce, 0xd4, 0xe7, 0x97, 0xe5, 0x55, 0x56, 0xc7, 0x96, 0x17, 0x9e, 0xc7, 0xe3, 0xe4, 0xf2, + 0xc2, 0x7b, 0x70, 0xf7, 0x8d, 0xbc, 0x70, 0xdf, 0xc8, 0x0b, 0x4f, 0x27, 0xe9, 0x96, 0x8b, 0x48, + 0xd2, 0xcd, 0xeb, 0x41, 0x3f, 0x49, 0xba, 0xc7, 0x96, 0x28, 0xbe, 0x6f, 0x87, 0x0e, 0x95, 0x28, + 0xae, 0xb2, 0xe8, 0x0b, 0x49, 0xc2, 0xeb, 0xf1, 0xa9, 0x72, 0xb3, 0xe8, 0x55, 0x06, 0x33, 0x4f, + 0x30, 0x15, 0x4a, 0xef, 0xe5, 0xe2, 0x3b, 0xd0, 0x47, 0x06, 0xb3, 0xc8, 0x71, 0x35, 0xb3, 0xe6, + 0x87, 0x8a, 0xc8, 0x9a, 0xcf, 0xeb, 0xce, 0x81, 0x59, 0xf3, 0x2f, 0xc1, 0xa8, 0xeb, 0x87, 0x01, + 0x59, 0x8d, 0xc2, 0x24, 0x74, 0x43, 0x79, 0x05, 0xbc, 0xbe, 0xcd, 0xd3, 0x04, 0xe2, 0x34, 0x6e, + 0xaf, 0x94, 0xfb, 0xda, 0x51, 0x53, 0xee, 0xe1, 0x11, 0xa5, 0xdc, 0x17, 0x9d, 0xc5, 0x9d, 0xf7, + 0x45, 0xfa, 0xca, 0xe2, 0x7e, 0xc3, 0x82, 0x51, 0xe7, 0x1e, 0xdb, 0x8c, 0x70, 0x29, 0xcc, 0x8e, + 0xe8, 0x86, 0x2f, 0x7d, 0xe4, 0x18, 0x26, 0xec, 0x9d, 0xba, 0x66, 0x33, 0x37, 0xc1, 0x32, 0x6b, + 0xcc, 0x26, 0x9c, 0xee, 0x48, 0x36, 0xf1, 0x7e, 0xb4, 0x88, 0xc4, 0xfb, 0xbc, 0x7e, 0xf5, 0x97, + 0x78, 0x7f, 0x94, 0x44, 0xf4, 0x9f, 0x28, 0xc1, 0x37, 0x1c, 0x38, 0x22, 0xe8, 0x1e, 0x40, 0xe2, + 0x6c, 0x8a, 0x75, 0x23, 0xce, 0xd5, 0x8e, 0x18, 0x73, 0xbc, 0x26, 0xe9, 0x89, 0x24, 0x49, 0x45, + 0x1e, 0x1b, 0xac, 0x58, 0xa8, 0x71, 0xe8, 0x77, 0xa5, 0x12, 0xe1, 0xd0, 0x27, 0x98, 0x41, 0xa8, + 0x5d, 0x16, 0x91, 0x4d, 0xba, 0xd7, 0x28, 0xa7, 0xed, 0x32, 0xcc, 0x5a, 0xb1, 0x80, 0xa2, 0x17, + 0x60, 0xd8, 0xf1, 0x7d, 0x9e, 0xb0, 0x49, 0x62, 0x71, 0xeb, 0xaf, 0x2e, 0x86, 0xac, 0x41, 0xd8, + 0xc4, 0xb3, 0xff, 0xbc, 0x04, 0x53, 0x07, 0x88, 0xb8, 0xae, 0x44, 0xfd, 0x4a, 0xdf, 0x89, 0xfa, + 0x22, 0x0f, 0x6a, 0xb0, 0x47, 0x1e, 0xd4, 0x0b, 0x30, 0x9c, 0x10, 0xa7, 0x29, 0xa2, 0x14, 0xb3, + 0x35, 0x3e, 0xd7, 0x34, 0x08, 0x9b, 0x78, 0x54, 0xa8, 0x8e, 0x39, 0xae, 0x4b, 0xe2, 0x58, 0x26, + 0x3a, 0x09, 0xa7, 0x7b, 0x61, 0x59, 0x54, 0xec, 0x2c, 0x63, 0x36, 0xc5, 0x02, 0x67, 0x58, 0x66, + 0x07, 0xbc, 0xd6, 0xe7, 0x80, 0xff, 0x74, 0x09, 0x9e, 0xd9, 0x57, 0xd9, 0xf6, 0x9d, 0xec, 0xd7, + 0x8e, 0x49, 0x94, 0x9d, 0x38, 0xb7, 0x62, 0x12, 0x61, 0x06, 0xe1, 0xa3, 0xd4, 0x6a, 0xa9, 0x08, + 0xf3, 0xe2, 0xb3, 0x63, 0xf9, 0x28, 0xa5, 0x58, 0xe0, 0x0c, 0xcb, 0x87, 0x9d, 0x96, 0xbf, 0x37, + 0x00, 0xcf, 0xf6, 0x61, 0x92, 0x14, 0x98, 0x45, 0x9c, 0xce, 0x90, 0x2f, 0x3f, 0xa2, 0x0c, 0xf9, + 0x87, 0x1b, 0xae, 0x37, 0x13, 0xeb, 0xfb, 0xca, 0x32, 0xfc, 0x72, 0x09, 0xce, 0xf7, 0xb6, 0x9f, + 0xd0, 0x77, 0xc0, 0x78, 0xa4, 0xc2, 0x15, 0xcd, 0xe4, 0xfa, 0xd3, 0xdc, 0xe5, 0x96, 0x02, 0xe1, + 0x2c, 0x2e, 0x9a, 0x06, 0x68, 0x39, 0xc9, 0x56, 0x7c, 0x79, 0xd7, 0x8b, 0x13, 0x51, 0x1c, 0x71, + 0x8c, 0x1f, 0x04, 0xcb, 0x56, 0x6c, 0x60, 0x50, 0x76, 0xec, 0xdf, 0x42, 0x78, 0x33, 0x4c, 0xf8, + 0x43, 0x7c, 0x27, 0x7c, 0x5a, 0x5e, 0x25, 0x6a, 0x80, 0x70, 0x16, 0x97, 0xb2, 0x63, 0xa1, 0x06, + 0xbc, 0xa3, 0x03, 0x3a, 0x1d, 0x7f, 0x49, 0xb5, 0x62, 0x03, 0x23, 0x5b, 0x36, 0xa0, 0x72, 0x70, + 0xd9, 0x00, 0xfb, 0x5f, 0x96, 0xe0, 0x5c, 0x4f, 0xfb, 0xbb, 0x3f, 0x31, 0xf5, 0xf8, 0xa5, 0xee, + 0x3f, 0xe4, 0x0a, 0x3b, 0x54, 0xfe, 0xac, 0xfd, 0x27, 0x3d, 0x66, 0x9a, 0x48, 0xe7, 0x7e, 0xf8, + 0xca, 0x37, 0x8f, 0xdf, 0x78, 0x76, 0x65, 0x70, 0x0f, 0x1c, 0x22, 0x83, 0x3b, 0xf3, 0x31, 0x2a, + 0x7d, 0x6a, 0x87, 0xff, 0x3a, 0xd0, 0x73, 0x78, 0xe9, 0x7e, 0xbd, 0xaf, 0x03, 0x8d, 0x05, 0x38, + 0xe5, 0x05, 0xec, 0x72, 0xe8, 0x7a, 0x7b, 0x5d, 0xd4, 0xcb, 0xe3, 0x45, 0xa1, 0x55, 0x66, 0xce, + 0x62, 0x06, 0x8e, 0xbb, 0x9e, 0x78, 0x0c, 0x13, 0xbd, 0x1f, 0x6e, 0x48, 0x0f, 0x29, 0xb9, 0x57, + 0xe0, 0xac, 0x1c, 0x8a, 0x2d, 0x27, 0x22, 0x0d, 0xa1, 0x6c, 0x63, 0x91, 0x8b, 0x75, 0x8e, 0xe7, + 0x73, 0xe5, 0x20, 0xe0, 0xfc, 0xe7, 0xd8, 0x4d, 0xbe, 0x61, 0xcb, 0x73, 0xc5, 0xce, 0x54, 0xdf, + 0xe4, 0x4b, 0x1b, 0x31, 0x87, 0x69, 0x7d, 0x51, 0x3b, 0x19, 0x7d, 0xf1, 0x83, 0x65, 0xb8, 0xb0, + 0xff, 0xae, 0x45, 0x7e, 0x7f, 0xab, 0x8f, 0xef, 0x5f, 0x7a, 0x24, 0xdf, 0xbf, 0xfc, 0x10, 0xdf, + 0x7f, 0xa0, 0x7f, 0xcd, 0x5d, 0x39, 0x99, 0x2f, 0xf1, 0x61, 0xa8, 0xa9, 0x37, 0xe7, 0x99, 0x2f, + 0x4a, 0xdc, 0x74, 0x65, 0xbe, 0x28, 0x59, 0x63, 0x60, 0xd1, 0xef, 0x44, 0xb7, 0x8c, 0x19, 0xb9, + 0x49, 0xf9, 0xd1, 0x76, 0xfb, 0x5d, 0x30, 0xa2, 0x9c, 0xc4, 0xfd, 0xde, 0x6c, 0x6d, 0xff, 0x55, + 0x09, 0x32, 0x97, 0x38, 0xa2, 0x5d, 0xa8, 0x35, 0xa2, 0x0e, 0x6f, 0x2c, 0xa6, 0x3c, 0xfc, 0x82, + 0x24, 0xa7, 0x4f, 0x48, 0x55, 0x13, 0xd6, 0xcc, 0xd0, 0x6b, 0xbc, 0x12, 0xbb, 0x60, 0x5d, 0x2a, + 0xa2, 0x72, 0x42, 0x5d, 0xd1, 0x33, 0xaf, 0xae, 0x95, 0x6d, 0xd8, 0xe0, 0x87, 0x12, 0xa8, 0x6d, + 0xc9, 0xcb, 0x2a, 0x8b, 0x51, 0x3c, 0xea, 0xee, 0x4b, 0x6e, 0x2c, 0xab, 0xbf, 0x58, 0x33, 0xb2, + 0xff, 0xb8, 0x04, 0x67, 0xd2, 0x1f, 0x40, 0x9c, 0x68, 0xff, 0xac, 0x05, 0x4f, 0xfa, 0x4e, 0x9c, + 0xd4, 0xdb, 0x6c, 0xcb, 0xb6, 0xd1, 0xf6, 0x57, 0x32, 0x45, 0xfb, 0x8f, 0xea, 0x85, 0x53, 0x84, + 0xb3, 0x97, 0x9b, 0xce, 0x3d, 0x75, 0x7f, 0x6f, 0xea, 0xc9, 0xa5, 0x7c, 0xe6, 0xb8, 0x57, 0xaf, + 0xd0, 0xeb, 0x16, 0x9c, 0x72, 0xdb, 0x51, 0x44, 0x82, 0x44, 0x77, 0x95, 0x7f, 0xc5, 0x9b, 0x85, + 0x0c, 0xa4, 0xee, 0xe0, 0x19, 0xaa, 0xda, 0xe6, 0x33, 0xbc, 0x70, 0x17, 0x77, 0xfb, 0x87, 0xa9, + 0x0d, 0xd3, 0xf3, 0x3d, 0xff, 0x86, 0xdd, 0xc6, 0xfa, 0xa7, 0x83, 0x30, 0x9a, 0xba, 0x99, 0x20, + 0x75, 0x0a, 0x6c, 0x1d, 0x78, 0x0a, 0xcc, 0xf2, 0x38, 0xdb, 0x81, 0xb8, 0x2d, 0xd0, 0xcc, 0xe3, + 0x6c, 0x07, 0x04, 0x73, 0x98, 0x18, 0x52, 0xdc, 0x0e, 0x84, 0xd4, 0x36, 0x87, 0x14, 0xb7, 0x03, + 0x2c, 0xa0, 0xe8, 0xe3, 0x16, 0x8c, 0xb0, 0xc5, 0x27, 0xce, 0xd0, 0x85, 0x69, 0x71, 0xbd, 0x80, + 0xe5, 0x2e, 0x6f, 0xe1, 0x60, 0x41, 0xc5, 0x66, 0x0b, 0x4e, 0x71, 0x44, 0x9f, 0xb2, 0xa0, 0xa6, + 0x6e, 0xc5, 0x16, 0x87, 0x66, 0xf5, 0x62, 0x2f, 0x7e, 0xc8, 0x48, 0x3d, 0x55, 0x81, 0x1f, 0x6b, + 0xc6, 0x28, 0x56, 0x07, 0xdc, 0x43, 0xc7, 0x73, 0xc0, 0x0d, 0x39, 0x87, 0xdb, 0x6f, 0x87, 0x5a, + 0xd3, 0x09, 0xbc, 0x0d, 0x12, 0x27, 0xfc, 0xcc, 0x59, 0xde, 0xf3, 0x23, 0x1b, 0xb1, 0x86, 0xd3, + 0x6d, 0x57, 0xcc, 0x5e, 0x2c, 0x31, 0x0e, 0x89, 0xd9, 0xb6, 0xab, 0xae, 0x9b, 0xb1, 0x89, 0x63, + 0x9e, 0x68, 0xc3, 0x23, 0x3d, 0xd1, 0x1e, 0x3e, 0xe0, 0x44, 0xbb, 0x0e, 0x67, 0x9d, 0x76, 0x12, + 0x5e, 0x23, 0x8e, 0x3f, 0x9b, 0x24, 0xa4, 0xd9, 0x4a, 0x62, 0x7e, 0x99, 0xc5, 0x08, 0x3b, 0x1b, + 0x50, 0x61, 0x90, 0x75, 0xe2, 0x6f, 0x74, 0x21, 0xe1, 0xfc, 0x67, 0xed, 0x7f, 0x6e, 0xc1, 0xd9, + 0xdc, 0xa9, 0xf0, 0xf8, 0x26, 0xa0, 0xd8, 0x3f, 0x5a, 0x81, 0xd3, 0x39, 0xf7, 0x96, 0xa0, 0x8e, + 0xb9, 0x48, 0xac, 0x22, 0x62, 0x39, 0xd3, 0xa1, 0x89, 0xf2, 0xdb, 0xe4, 0xac, 0x8c, 0xc3, 0x05, + 0xa9, 0xe8, 0x40, 0x91, 0xf2, 0xc9, 0x06, 0x8a, 0x18, 0x73, 0x7d, 0xe0, 0x91, 0xce, 0xf5, 0xca, + 0x01, 0x73, 0xfd, 0xe7, 0x2c, 0x98, 0x6c, 0xf6, 0xb8, 0x84, 0x50, 0x1c, 0x34, 0xde, 0x3e, 0x9e, + 0x2b, 0x0e, 0xe7, 0x9e, 0xbe, 0xbf, 0x37, 0xd5, 0xf3, 0xee, 0x47, 0xdc, 0xb3, 0x57, 0xf6, 0x57, + 0xcb, 0xc0, 0xec, 0x35, 0x56, 0x9b, 0xbe, 0x83, 0x3e, 0x66, 0x5e, 0x7f, 0x64, 0x15, 0x75, 0x55, + 0x0f, 0x27, 0xae, 0xae, 0x4f, 0xe2, 0x23, 0x98, 0x77, 0x9b, 0x52, 0x56, 0x12, 0x96, 0xfa, 0x90, + 0x84, 0xbe, 0xbc, 0x67, 0xaa, 0x5c, 0xfc, 0x3d, 0x53, 0xb5, 0xec, 0x1d, 0x53, 0xfb, 0x7f, 0xe2, + 0x81, 0xc7, 0xf2, 0x13, 0xff, 0xaa, 0xc5, 0x05, 0x4f, 0xe6, 0x2b, 0x68, 0x73, 0xc3, 0xda, 0xc7, + 0xdc, 0x78, 0x1e, 0xaa, 0xb1, 0x90, 0xcc, 0xc2, 0x2c, 0xd1, 0x31, 0x82, 0xa2, 0x1d, 0x2b, 0x0c, + 0xba, 0xeb, 0x72, 0x7c, 0x3f, 0xbc, 0x77, 0xb9, 0xd9, 0x4a, 0x3a, 0xc2, 0x40, 0x51, 0xdb, 0x82, + 0x59, 0x05, 0xc1, 0x06, 0x16, 0x7a, 0x16, 0x06, 0x79, 0x3d, 0x10, 0xb1, 0xa5, 0x1c, 0xa6, 0xeb, + 0x90, 0x17, 0x0b, 0x69, 0x60, 0x01, 0xb2, 0xb7, 0xc0, 0xd8, 0x55, 0x3c, 0xfc, 0x4d, 0xf7, 0x07, + 0x5f, 0x5e, 0x6b, 0xff, 0x83, 0x92, 0x60, 0xc5, 0x77, 0x09, 0x3a, 0x64, 0xd4, 0x3a, 0x64, 0xc8, + 0xe8, 0x6b, 0x00, 0x6e, 0xd8, 0x6c, 0x39, 0x11, 0x69, 0xac, 0x85, 0xc5, 0x6c, 0xb6, 0xe6, 0x15, + 0x3d, 0x3d, 0xaa, 0xba, 0x0d, 0x1b, 0xfc, 0x52, 0xa2, 0xbd, 0x7c, 0xa0, 0x68, 0x4f, 0x49, 0xb9, + 0x81, 0xfd, 0xa5, 0x9c, 0xfd, 0xe7, 0x16, 0xa4, 0xac, 0x3e, 0xd4, 0x82, 0x0a, 0xed, 0x6e, 0x47, + 0x08, 0x8c, 0x95, 0xe2, 0x4c, 0x4c, 0x2a, 0xa9, 0xc5, 0x2a, 0x64, 0x3f, 0x31, 0x67, 0x84, 0x7c, + 0x11, 0x1e, 0x5b, 0xc8, 0xe6, 0xc7, 0x64, 0x78, 0x2d, 0x0c, 0xb7, 0x79, 0x94, 0x99, 0x0e, 0xb5, + 0xb5, 0x5f, 0x84, 0x89, 0xae, 0x4e, 0xb1, 0xdb, 0xf1, 0x43, 0xb9, 0x83, 0x37, 0x56, 0x0f, 0x2b, + 0xcb, 0x81, 0x39, 0xcc, 0xfe, 0xb2, 0x05, 0xa7, 0xb2, 0xe4, 0xd1, 0x1b, 0x16, 0x4c, 0xc4, 0x59, + 0x7a, 0xc7, 0x35, 0x76, 0x2a, 0x0d, 0xa6, 0x0b, 0x84, 0xbb, 0x3b, 0x61, 0xff, 0x0f, 0xa1, 0x0d, + 0xee, 0x78, 0x41, 0x23, 0xbc, 0xa7, 0xec, 0x24, 0xab, 0xa7, 0x9d, 0x44, 0xc5, 0x83, 0xbb, 0x45, + 0x1a, 0x6d, 0xbf, 0xab, 0x58, 0x48, 0x5d, 0xb4, 0x63, 0x85, 0xc1, 0x6a, 0x23, 0xb4, 0xc5, 0xbe, + 0x35, 0x33, 0x29, 0x17, 0x44, 0x3b, 0x56, 0x18, 0xe8, 0xdd, 0x30, 0x62, 0xbc, 0xa4, 0x9c, 0x97, + 0x6c, 0xd3, 0x61, 0x68, 0xf0, 0x18, 0xa7, 0xb0, 0xd0, 0x34, 0x80, 0xb2, 0xb9, 0xa4, 0xc6, 0x66, + 0x47, 0x1e, 0x4a, 0x30, 0xc6, 0xd8, 0xc0, 0x60, 0x95, 0x48, 0xfc, 0x76, 0xcc, 0xce, 0xf4, 0x07, + 0xf5, 0x5d, 0x2d, 0xf3, 0xa2, 0x0d, 0x2b, 0x28, 0x15, 0x6e, 0x4d, 0x27, 0x68, 0x3b, 0x3e, 0x1d, + 0x21, 0xe1, 0xc4, 0x54, 0xcb, 0x70, 0x59, 0x41, 0xb0, 0x81, 0x45, 0xdf, 0x38, 0xf1, 0x9a, 0xe4, + 0x03, 0x61, 0x20, 0xd3, 0x17, 0x74, 0xd4, 0x89, 0x68, 0xc7, 0x0a, 0x03, 0xbd, 0x08, 0xc3, 0x4e, + 0xd0, 0xe0, 0x06, 0x62, 0x18, 0x89, 0xd3, 0x62, 0xb5, 0xfb, 0xbc, 0x15, 0x93, 0x59, 0x0d, 0xc5, + 0x26, 0x6a, 0xf6, 0xa2, 0x1a, 0xe8, 0xf3, 0x22, 0xcc, 0x3f, 0xb3, 0x60, 0x5c, 0x97, 0x96, 0x62, + 0x1e, 0xb6, 0x94, 0x93, 0xcf, 0x3a, 0xd0, 0xc9, 0x97, 0xae, 0x30, 0x53, 0xea, 0xab, 0xc2, 0x8c, + 0x59, 0xfc, 0xa5, 0xbc, 0x6f, 0xf1, 0x97, 0x6f, 0x82, 0xa1, 0x6d, 0xd2, 0x31, 0xaa, 0xc4, 0x30, + 0xe5, 0x70, 0x83, 0x37, 0x61, 0x09, 0x43, 0x36, 0x0c, 0xba, 0x8e, 0xaa, 0x34, 0x39, 0x22, 0x82, + 0x16, 0x67, 0x19, 0x92, 0x80, 0xd8, 0x2b, 0x50, 0x53, 0xe1, 0x15, 0xd2, 0xd3, 0x67, 0xe5, 0x7b, + 0xfa, 0xe8, 0xda, 0x36, 0x22, 0x45, 0xf4, 0xda, 0x66, 0xf1, 0x25, 0x22, 0x70, 0x64, 0x6e, 0xfd, + 0xb7, 0xbe, 0x76, 0xe1, 0x2d, 0xbf, 0xfb, 0xb5, 0x0b, 0x6f, 0xf9, 0xa3, 0xaf, 0x5d, 0x78, 0xcb, + 0xc7, 0xef, 0x5f, 0xb0, 0x7e, 0xeb, 0xfe, 0x05, 0xeb, 0x77, 0xef, 0x5f, 0xb0, 0xfe, 0xe8, 0xfe, + 0x05, 0xeb, 0xab, 0xf7, 0x2f, 0x58, 0xaf, 0xff, 0x97, 0x0b, 0x6f, 0xf9, 0x40, 0x6e, 0xc2, 0x0c, + 0xfd, 0xf1, 0x0e, 0xb7, 0x31, 0xb3, 0xf3, 0x2e, 0x96, 0xb3, 0x41, 0xd7, 0xf3, 0x8c, 0x31, 0x89, + 0x67, 0xe4, 0x7a, 0xfe, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x86, 0x70, 0x40, 0x84, 0xcf, 0x04, + 0x01, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -12157,7 +12222,7 @@ func (m *PullRequestGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0 } i-- - dAtA[i] = 0x58 + dAtA[i] = 0x60 if len(m.Values) > 0 { keysForValues := make([]string, 0, len(m.Values)) for k := range m.Values { @@ -12179,9 +12244,21 @@ func (m *PullRequestGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0xa i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) i-- - dAtA[i] = 0x52 + dAtA[i] = 0x5a } } + if m.ScmManager != nil { + { + size, err := m.ScmManager.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } if m.AzureDevOps != nil { { size, err := m.AzureDevOps.MarshalToSizedBuffer(dAtA[:i]) @@ -12748,6 +12825,76 @@ func (m *PullRequestGeneratorGithub) MarshalToSizedBuffer(dAtA []byte) (int, err return len(dAtA) - i, nil } +func (m *PullRequestGeneratorScmManager) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PullRequestGeneratorScmManager) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PullRequestGeneratorScmManager) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.CARef != nil { + { + size, err := m.CARef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + i-- + if m.Insecure { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x28 + if m.TokenRef != nil { + { + size, err := m.TokenRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + i -= len(m.API) + copy(dAtA[i:], m.API) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.API))) + i-- + dAtA[i] = 0x1a + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *RefTarget) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -14433,6 +14580,18 @@ func (m *SCMProviderGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.ScmManager != nil { + { + size, err := m.ScmManager.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a + } if m.AWSCodeCommit != nil { { size, err := m.AWSCodeCommit.MarshalToSizedBuffer(dAtA[:i]) @@ -15106,6 +15265,74 @@ func (m *SCMProviderGeneratorGitlab) MarshalToSizedBuffer(dAtA []byte) (int, err return len(dAtA) - i, nil } +func (m *SCMProviderGeneratorScmManager) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SCMProviderGeneratorScmManager) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SCMProviderGeneratorScmManager) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.CARef != nil { + { + size, err := m.CARef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + i-- + if m.Insecure { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + i-- + if m.AllBranches { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + if m.TokenRef != nil { + { + size, err := m.TokenRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.API) + copy(dAtA[i:], m.API) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.API))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *SecretRef) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -18535,6 +18762,10 @@ func (m *PullRequestGenerator) Size() (n int) { l = m.AzureDevOps.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.ScmManager != nil { + l = m.ScmManager.Size() + n += 1 + l + sovGenerated(uint64(l)) + } if len(m.Values) > 0 { for k, v := range m.Values { _ = k @@ -18729,6 +18960,30 @@ func (m *PullRequestGeneratorGithub) Size() (n int) { return n } +func (m *PullRequestGeneratorScmManager) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.API) + n += 1 + l + sovGenerated(uint64(l)) + if m.TokenRef != nil { + l = m.TokenRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + if m.CARef != nil { + l = m.CARef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *RefTarget) Size() (n int) { if m == nil { return 0 @@ -19380,6 +19635,10 @@ func (m *SCMProviderGenerator) Size() (n int) { l = m.AWSCodeCommit.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.ScmManager != nil { + l = m.ScmManager.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -19569,6 +19828,27 @@ func (m *SCMProviderGeneratorGitlab) Size() (n int) { return n } +func (m *SCMProviderGeneratorScmManager) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.API) + n += 1 + l + sovGenerated(uint64(l)) + if m.TokenRef != nil { + l = m.TokenRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + n += 2 + if m.CARef != nil { + l = m.CARef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *SecretRef) Size() (n int) { if m == nil { return 0 @@ -21831,6 +22111,7 @@ func (this *PullRequestGenerator) String() string { `Template:` + strings.Replace(strings.Replace(this.Template.String(), "ApplicationSetTemplate", "ApplicationSetTemplate", 1), `&`, ``, 1) + `,`, `Bitbucket:` + strings.Replace(this.Bitbucket.String(), "PullRequestGeneratorBitbucket", "PullRequestGeneratorBitbucket", 1) + `,`, `AzureDevOps:` + strings.Replace(this.AzureDevOps.String(), "PullRequestGeneratorAzureDevOps", "PullRequestGeneratorAzureDevOps", 1) + `,`, + `ScmManager:` + strings.Replace(this.ScmManager.String(), "PullRequestGeneratorScmManager", "PullRequestGeneratorScmManager", 1) + `,`, `Values:` + mapStringForValues + `,`, `ContinueOnRepoNotFoundError:` + fmt.Sprintf("%v", this.ContinueOnRepoNotFoundError) + `,`, `}`, @@ -21940,6 +22221,21 @@ func (this *PullRequestGeneratorGithub) String() string { }, "") return s } +func (this *PullRequestGeneratorScmManager) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PullRequestGeneratorScmManager{`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `API:` + fmt.Sprintf("%v", this.API) + `,`, + `TokenRef:` + strings.Replace(this.TokenRef.String(), "SecretRef", "SecretRef", 1) + `,`, + `Insecure:` + fmt.Sprintf("%v", this.Insecure) + `,`, + `CARef:` + strings.Replace(this.CARef.String(), "ConfigMapKeyRef", "ConfigMapKeyRef", 1) + `,`, + `}`, + }, "") + return s +} func (this *RefTarget) String() string { if this == nil { return "nil" @@ -22412,6 +22708,7 @@ func (this *SCMProviderGenerator) String() string { `Template:` + strings.Replace(strings.Replace(this.Template.String(), "ApplicationSetTemplate", "ApplicationSetTemplate", 1), `&`, ``, 1) + `,`, `Values:` + mapStringForValues + `,`, `AWSCodeCommit:` + strings.Replace(this.AWSCodeCommit.String(), "SCMProviderGeneratorAWSCodeCommit", "SCMProviderGeneratorAWSCodeCommit", 1) + `,`, + `ScmManager:` + strings.Replace(this.ScmManager.String(), "SCMProviderGeneratorScmManager", "SCMProviderGeneratorScmManager", 1) + `,`, `}`, }, "") return s @@ -22537,6 +22834,20 @@ func (this *SCMProviderGeneratorGitlab) String() string { }, "") return s } +func (this *SCMProviderGeneratorScmManager) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SCMProviderGeneratorScmManager{`, + `API:` + fmt.Sprintf("%v", this.API) + `,`, + `TokenRef:` + strings.Replace(this.TokenRef.String(), "SecretRef", "SecretRef", 1) + `,`, + `AllBranches:` + fmt.Sprintf("%v", this.AllBranches) + `,`, + `Insecure:` + fmt.Sprintf("%v", this.Insecure) + `,`, + `CARef:` + strings.Replace(this.CARef.String(), "ConfigMapKeyRef", "ConfigMapKeyRef", 1) + `,`, + `}`, + }, "") + return s +} func (this *SecretRef) String() string { if this == nil { return "nil" @@ -43883,16 +44194,52 @@ func (m *PullRequestGenerator) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Bitbucket == nil { - m.Bitbucket = &PullRequestGeneratorBitbucket{} + if m.Bitbucket == nil { + m.Bitbucket = &PullRequestGeneratorBitbucket{} + } + if err := m.Bitbucket.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureDevOps", 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.AzureDevOps == nil { + m.AzureDevOps = &PullRequestGeneratorAzureDevOps{} } - if err := m.Bitbucket.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.AzureDevOps.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 9: + case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AzureDevOps", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ScmManager", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -43919,14 +44266,14 @@ func (m *PullRequestGenerator) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.AzureDevOps == nil { - m.AzureDevOps = &PullRequestGeneratorAzureDevOps{} + if m.ScmManager == nil { + m.ScmManager = &PullRequestGeneratorScmManager{} } - if err := m.AzureDevOps.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ScmManager.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 10: + case 11: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Values", wireType) } @@ -44053,7 +44400,7 @@ func (m *PullRequestGenerator) Unmarshal(dAtA []byte) error { } m.Values[mapkey] = mapvalue iNdEx = postIndex - case 11: + case 12: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field ContinueOnRepoNotFoundError", wireType) } @@ -45647,10 +45994,256 @@ func (m *PullRequestGeneratorGithub) Unmarshal(dAtA []byte) error { } iNdEx = postIndex case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AppSecretName", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AppSecretName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AppSecretName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Labels = append(m.Labels, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PullRequestGeneratorScmManager) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PullRequestGeneratorScmManager: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PullRequestGeneratorScmManager: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field API", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.API = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenRef", 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.TokenRef == nil { + m.TokenRef = &SecretRef{} + } + if err := m.TokenRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Insecure", wireType) } - var stringLen uint64 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -45660,29 +46253,17 @@ func (m *PullRequestGeneratorGithub) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.AppSecretName = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex + m.Insecure = bool(v != 0) case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field CARef", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -45692,23 +46273,27 @@ func (m *PullRequestGeneratorGithub) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Labels = append(m.Labels, string(dAtA[iNdEx:postIndex])) + if m.CARef == nil { + m.CARef = &ConfigMapKeyRef{} + } + if err := m.CARef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -52232,6 +52817,42 @@ func (m *SCMProviderGenerator) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ScmManager", 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.ScmManager == nil { + m.ScmManager = &SCMProviderGeneratorScmManager{} + } + if err := m.ScmManager.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -53959,6 +54580,200 @@ func (m *SCMProviderGeneratorGitlab) Unmarshal(dAtA []byte) error { } return nil } +func (m *SCMProviderGeneratorScmManager) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SCMProviderGeneratorScmManager: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SCMProviderGeneratorScmManager: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field API", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.API = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenRef", 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.TokenRef == nil { + m.TokenRef = &SecretRef{} + } + if err := m.TokenRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AllBranches", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AllBranches = bool(v != 0) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Insecure", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Insecure = bool(v != 0) + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CARef", 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.CARef == nil { + m.CARef = &ConfigMapKeyRef{} + } + if err := m.CARef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *SecretRef) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index be11b3ac327b5..4efa8ded89fa9 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -1609,11 +1609,13 @@ message PullRequestGenerator { // Additional provider to use and config for it. optional PullRequestGeneratorAzureDevOps azuredevops = 9; + optional PullRequestGeneratorScmManager scmManager = 10; + // Values contains key/value pairs which are passed directly as parameters to the template - map values = 10; + map values = 11; // ContinueOnRepoNotFoundError is a flag to continue the ApplicationSet Pull Request generator parameters generation even if the repository is not found. - optional bool continueOnRepoNotFoundError = 11; + optional bool continueOnRepoNotFoundError = 12; } // PullRequestGeneratorAzureDevOps defines connection info specific to AzureDevOps. @@ -1757,6 +1759,27 @@ message PullRequestGeneratorGithub { repeated string labels = 6; } +// PullRequestGenerator defines connection info specific to SCM-Manager. +message PullRequestGeneratorScmManager { + // SCM-Manager namespace. Required. + optional string namespace = 1; + + // SCM-Manager repo name to scan. Required. + optional string name = 2; + + // SCM-Manager Instance URL with context path. Required + optional string api = 3; + + // Authentication token reference. + optional SecretRef tokenRef = 4; + + // Allow insecure tls, for self-signed certificates; default: false. + optional bool insecure = 5; + + // ConfigMap key holding the trusted certificates + optional ConfigMapKeyRef caRef = 6; +} + message RefTarget { optional Repository repo = 1; @@ -2317,6 +2340,8 @@ message SCMProviderGenerator { map values = 11; optional SCMProviderGeneratorAWSCodeCommit awsCodeCommit = 12; + + optional SCMProviderGeneratorScmManager scmManager = 13; } // SCMProviderGeneratorAWSCodeCommit defines connection info specific to AWS CodeCommit. @@ -2479,6 +2504,24 @@ message SCMProviderGeneratorGitlab { optional ConfigMapKeyRef caRef = 9; } +// SCMProviderGeneratorScmManager defines a connection info specific to Scm-Manager. +message SCMProviderGeneratorScmManager { + // The SCM-Manager URL to talk to. For example https://scm-manager.org/scm. + optional string api = 1; + + // Authentication token reference. + optional SecretRef tokenRef = 2; + + // Scan all branches instead of just the default branch. + optional bool allBranches = 3; + + // Allow self-signed TLS / Certificates; default: false + optional bool insecure = 4; + + // ConfigMap key holding the trusted certificates + optional ConfigMapKeyRef caRef = 5; +} + // Utility struct for a reference to a secret key. message SecretRef { optional string secretName = 1; diff --git a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go index 2ca9dc1114767..e1dc6b94d0302 100644 --- a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go @@ -3183,6 +3183,11 @@ func (in *PullRequestGenerator) DeepCopyInto(out *PullRequestGenerator) { *out = new(PullRequestGeneratorAzureDevOps) (*in).DeepCopyInto(*out) } + if in.ScmManager != nil { + in, out := &in.ScmManager, &out.ScmManager + *out = new(PullRequestGeneratorScmManager) + (*in).DeepCopyInto(*out) + } if in.Values != nil { in, out := &in.Values, &out.Values *out = make(map[string]string, len(*in)) @@ -3400,6 +3405,32 @@ func (in *PullRequestGeneratorGithub) DeepCopy() *PullRequestGeneratorGithub { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PullRequestGeneratorScmManager) DeepCopyInto(out *PullRequestGeneratorScmManager) { + *out = *in + if in.TokenRef != nil { + in, out := &in.TokenRef, &out.TokenRef + *out = new(SecretRef) + **out = **in + } + if in.CARef != nil { + in, out := &in.CARef, &out.CARef + *out = new(ConfigMapKeyRef) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PullRequestGeneratorScmManager. +func (in *PullRequestGeneratorScmManager) DeepCopy() *PullRequestGeneratorScmManager { + if in == nil { + return nil + } + out := new(PullRequestGeneratorScmManager) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RefTarget) DeepCopyInto(out *RefTarget) { *out = *in @@ -4111,6 +4142,11 @@ func (in *SCMProviderGenerator) DeepCopyInto(out *SCMProviderGenerator) { *out = new(SCMProviderGeneratorAWSCodeCommit) (*in).DeepCopyInto(*out) } + if in.ScmManager != nil { + in, out := &in.ScmManager, &out.ScmManager + *out = new(SCMProviderGeneratorScmManager) + (*in).DeepCopyInto(*out) + } return } @@ -4338,6 +4374,32 @@ func (in *SCMProviderGeneratorGitlab) DeepCopy() *SCMProviderGeneratorGitlab { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SCMProviderGeneratorScmManager) DeepCopyInto(out *SCMProviderGeneratorScmManager) { + *out = *in + if in.TokenRef != nil { + in, out := &in.TokenRef, &out.TokenRef + *out = new(SecretRef) + **out = **in + } + if in.CARef != nil { + in, out := &in.CARef, &out.CARef + *out = new(ConfigMapKeyRef) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SCMProviderGeneratorScmManager. +func (in *SCMProviderGeneratorScmManager) DeepCopy() *SCMProviderGeneratorScmManager { + if in == nil { + return nil + } + out := new(SCMProviderGeneratorScmManager) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SecretRef) DeepCopyInto(out *SecretRef) { *out = *in diff --git a/util/settings/settings.go b/util/settings/settings.go index d44dcc586329c..e377640fafed3 100644 --- a/util/settings/settings.go +++ b/util/settings/settings.go @@ -76,6 +76,8 @@ type ArgoCDSettings struct { WebhookBitbucketUUID string `json:"webhookBitbucketUUID,omitempty"` // WebhookBitbucketServerSecret holds the shared secret for authenticating BitbucketServer webhook events WebhookBitbucketServerSecret string `json:"webhookBitbucketServerSecret,omitempty"` + // ScmmWebhookSecret holds the secret for authenticating SCM-Manager webhook events + WebhookScmmSecret string `json:"webhookScmmSecret,omitempty"` // WebhookGogsSecret holds the shared secret for authenticating Gogs webhook events WebhookGogsSecret string `json:"webhookGogsSecret,omitempty"` // WebhookAzureDevOpsUsername holds the username for authenticating Azure DevOps webhook events diff --git a/util/webhook/testdata/scmm-webhook-data.json b/util/webhook/testdata/scmm-webhook-data.json new file mode 100644 index 0000000000000..bd214900ab1ce --- /dev/null +++ b/util/webhook/testdata/scmm-webhook-data.json @@ -0,0 +1,11 @@ +{ + "Repository": { + "Name": "argocd-test", + "Namespace": "scm-manager", + "SourceUrl": "https://scm-manager.org/scm/scm-manager/argocd-test" + }, + "Branch": { + "Name": "develop", + "DefaultBranch": true + } +} \ No newline at end of file diff --git a/util/webhook/webhook.go b/util/webhook/webhook.go index 4143f03489243..921d410099b45 100644 --- a/util/webhook/webhook.go +++ b/util/webhook/webhook.go @@ -22,6 +22,7 @@ import ( "github.com/go-playground/webhooks/v6/gitlab" "github.com/go-playground/webhooks/v6/gogs" gogsclient "github.com/gogits/go-gogs-client" + scmmanager "github.com/scm-manager/goscm/argocd" log "github.com/sirupsen/logrus" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -68,6 +69,7 @@ type ArgoCDWebhookHandler struct { gogs *gogs.Webhook settings *settings.ArgoCDSettings settingsSrc settingsSource + scmm *scmmanager.ArgoCDWebhook queue chan any maxWebhookPayloadSizeB int64 } @@ -97,6 +99,10 @@ func NewHandler(namespace string, applicationNamespaces []string, webhookParalle if err != nil { log.Warnf("Unable to init the Azure DevOps webhook") } + scmmWebhook, err := scmmanager.New(scmmanager.Options.Secret(set.WebhookScmmSecret)) + if err != nil { + log.Warnf("Unable to init the SCM-Manager Webhook") + } acdWebhook := ArgoCDWebhookHandler{ ns: namespace, @@ -113,6 +119,7 @@ func NewHandler(namespace string, applicationNamespaces []string, webhookParalle serverCache: serverCache, settings: set, db: argoDB, + scmm: scmmWebhook, queue: make(chan any, payloadQueueSize), maxWebhookPayloadSizeB: maxWebhookPayloadSizeB, } @@ -286,6 +293,11 @@ func (a *ArgoCDWebhookHandler) affectedRevisionInfo(payloadIf any) (webURLs []st changedFiles = append(changedFiles, commit.Modified...) changedFiles = append(changedFiles, commit.Removed...) } + + case scmmanager.PushEventPayload: + webURLs = append(webURLs, payload.Repository.SourceUrl) + touchedHead = payload.Branch.DefaultBranch + revision = payload.Branch.Name } return webURLs, revision, change, touchedHead, changedFiles } @@ -640,6 +652,11 @@ func (a *ArgoCDWebhookHandler) Handler(w http.ResponseWriter, r *http.Request) { if errors.Is(err, bitbucketserver.ErrHMACVerificationFailed) { log.WithField(common.SecurityField, common.SecurityHigh).Infof("BitBucket webhook HMAC verification failed") } + case r.Header.Get("X-SCM-Event") != "": + payload, err = a.scmm.Parse(r, scmmanager.PushEvent) + if errors.Is(err, scmmanager.ErrSecretVerification) { + log.WithField(common.SecurityField, common.SecurityHigh).Infof("SCM Manager webhook verification failed") + } default: log.Debug("Ignoring unknown webhook event") http.Error(w, "Unknown webhook event", http.StatusBadRequest) diff --git a/util/webhook/webhook_test.go b/util/webhook/webhook_test.go index c341f9323f743..b6d6e7e84c551 100644 --- a/util/webhook/webhook_test.go +++ b/util/webhook/webhook_test.go @@ -154,6 +154,24 @@ func TestAzureDevOpsCommitEvent(t *testing.T) { hook.Reset() } +func TestScmmWebhook(t *testing.T) { + hook := test.NewGlobal() + h := NewMockHandler(nil, []string{}) + req := httptest.NewRequest(http.MethodPost, "/api/webhook", nil) + req.Header.Set("X-SCM-Event", "Push") + eventJSON, err := os.ReadFile("testdata/scmm-webhook-data.json") + require.NoError(t, err) + req.Body = io.NopCloser(bytes.NewReader(eventJSON)) + w := httptest.NewRecorder() + h.Handler(w, req) + close(h.queue) + h.Wait() + assert.Equal(t, http.StatusOK, w.Code) + expectedLogResult := "Received push event repo: https://scm-manager.org/scm/scm-manager/argocd-test, revision: develop, touchedHead: true" + assert.Equal(t, expectedLogResult, hook.LastEntry().Message) + hook.Reset() +} + // TestGitHubCommitEvent_MultiSource_Refresh makes sure that a webhook will refresh a multi-source app when at least // one source matches. func TestGitHubCommitEvent_MultiSource_Refresh(t *testing.T) {