diff --git a/Dockerfile b/Dockerfile index ac7737b683aad..5cbb77216d0a7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -136,6 +136,7 @@ USER root RUN ln -s /usr/local/bin/argocd /usr/local/bin/argocd-server && \ ln -s /usr/local/bin/argocd /usr/local/bin/argocd-repo-server && \ ln -s /usr/local/bin/argocd /usr/local/bin/event-reporter-server && \ + ln -s /usr/local/bin/argocd /usr/local/bin/argocd-application-change-revision-controller && \ ln -s /usr/local/bin/argocd /usr/local/bin/argocd-cmp-server && \ ln -s /usr/local/bin/argocd /usr/local/bin/argocd-application-controller && \ ln -s /usr/local/bin/argocd /usr/local/bin/argocd-dex && \ diff --git a/Makefile b/Makefile index 68909700e8697..6a6f6eff5fda5 100644 --- a/Makefile +++ b/Makefile @@ -125,6 +125,7 @@ define run-in-test-client -e GITHUB_TOKEN \ -e GOCACHE=/tmp/go-build-cache \ -e ARGOCD_LINT_GOGC=$(ARGOCD_LINT_GOGC) \ + -e GOSUMDB=off \ -v ${DOCKER_SRC_MOUNT} \ -v ${GOPATH}/pkg/mod:/go/pkg/mod${VOLUME_MOUNT} \ -v ${GOCACHE}:/tmp/go-build-cache${VOLUME_MOUNT} \ diff --git a/acr_controller/application/client.go b/acr_controller/application/client.go new file mode 100644 index 0000000000000..ed09e3e0f5f17 --- /dev/null +++ b/acr_controller/application/client.go @@ -0,0 +1,98 @@ +package application_change_revision_controller + +import ( + "context" + "crypto/tls" + "encoding/json" + "fmt" + "io" + "net/http" + "strings" + "time" + + "google.golang.org/grpc" + + appclient "github.com/argoproj/argo-cd/v2/pkg/apiclient/application" +) + +//go:generate go run github.com/vektra/mockery/v2@v2.43.2 --name=ApplicationClient + +type ApplicationClient interface { + GetChangeRevision(ctx context.Context, in *appclient.ChangeRevisionRequest, opts ...grpc.CallOption) (*appclient.ChangeRevisionResponse, error) +} + +type httpApplicationClient struct { + httpClient *http.Client + baseUrl string + token string + rootpath string +} + +func NewHttpApplicationClient(token string, address string, rootpath string) ApplicationClient { + if rootpath != "" && !strings.HasPrefix(rootpath, "/") { + rootpath = "/" + rootpath + } + + if !strings.Contains(address, "http") { + address = "http://" + address + } + + if rootpath != "" { + address = address + rootpath + } + + return &httpApplicationClient{ + httpClient: &http.Client{ + Timeout: 30 * time.Second, + Transport: &http.Transport{ + // Support for insecure connections + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + }, + }, + baseUrl: address, + token: token, + rootpath: rootpath, + } +} + +func (c *httpApplicationClient) execute(ctx context.Context, url string, result interface{}, printBody ...bool) error { + req, err := http.NewRequestWithContext(ctx, "GET", url, nil) + if err != nil { + return err + } + + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", "Bearer "+c.token) + + res, err := c.httpClient.Do(req) + if err != nil { + return err + } + defer res.Body.Close() + + b, _ := io.ReadAll(res.Body) + + isStatusOK := res.StatusCode >= 200 && res.StatusCode < 300 + if !isStatusOK { + return fmt.Errorf("argocd server respond with code %d, msg is: %s", res.StatusCode, string(b)) + } + + err = json.Unmarshal(b, &result) + if err != nil { + return err + } + return nil +} + +func (c *httpApplicationClient) GetChangeRevision(ctx context.Context, in *appclient.ChangeRevisionRequest, opts ...grpc.CallOption) (*appclient.ChangeRevisionResponse, error) { + params := fmt.Sprintf("?appName=%s&namespace=%s¤tRevision=%s&previousRevision=%s", in.GetAppName(), in.GetNamespace(), in.GetCurrentRevision(), in.GetPreviousRevision()) + + url := fmt.Sprintf("%s/api/v1/application/changeRevision%s", c.baseUrl, params) + + changeRevisionResponse := &appclient.ChangeRevisionResponse{} + err := c.execute(ctx, url, changeRevisionResponse) + if err != nil { + return nil, err + } + return changeRevisionResponse, nil +} diff --git a/acr_controller/application/mocks/ApplicationClient.go b/acr_controller/application/mocks/ApplicationClient.go new file mode 100644 index 0000000000000..096a337652421 --- /dev/null +++ b/acr_controller/application/mocks/ApplicationClient.go @@ -0,0 +1,69 @@ +// Code generated by mockery v2.43.2. DO NOT EDIT. + +package mocks + +import ( + application "github.com/argoproj/argo-cd/v2/pkg/apiclient/application" + + context "context" + + grpc "google.golang.org/grpc" + + mock "github.com/stretchr/testify/mock" +) + +// ApplicationClient is an autogenerated mock type for the ApplicationClient type +type ApplicationClient struct { + mock.Mock +} + +// GetChangeRevision provides a mock function with given fields: ctx, in, opts +func (_m *ApplicationClient) GetChangeRevision(ctx context.Context, in *application.ChangeRevisionRequest, opts ...grpc.CallOption) (*application.ChangeRevisionResponse, error) { + _va := make([]interface{}, len(opts)) + for _i := range opts { + _va[_i] = opts[_i] + } + var _ca []interface{} + _ca = append(_ca, ctx, in) + _ca = append(_ca, _va...) + ret := _m.Called(_ca...) + + if len(ret) == 0 { + panic("no return value specified for GetChangeRevision") + } + + var r0 *application.ChangeRevisionResponse + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *application.ChangeRevisionRequest, ...grpc.CallOption) (*application.ChangeRevisionResponse, error)); ok { + return rf(ctx, in, opts...) + } + if rf, ok := ret.Get(0).(func(context.Context, *application.ChangeRevisionRequest, ...grpc.CallOption) *application.ChangeRevisionResponse); ok { + r0 = rf(ctx, in, opts...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*application.ChangeRevisionResponse) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *application.ChangeRevisionRequest, ...grpc.CallOption) error); ok { + r1 = rf(ctx, in, opts...) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// NewApplicationClient creates a new instance of ApplicationClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewApplicationClient(t interface { + mock.TestingT + Cleanup(func()) +}) *ApplicationClient { + mock := &ApplicationClient{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/acr_controller/controller/broadcaster.go b/acr_controller/controller/broadcaster.go new file mode 100644 index 0000000000000..9056e92203eeb --- /dev/null +++ b/acr_controller/controller/broadcaster.go @@ -0,0 +1,107 @@ +package application_change_revision_controller + +import ( + "sync" + + log "github.com/sirupsen/logrus" + "k8s.io/apimachinery/pkg/watch" + + appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" +) + +type subscriber struct { + ch chan *appv1.ApplicationWatchEvent + filters []func(*appv1.ApplicationWatchEvent) bool +} + +func (s *subscriber) matches(event *appv1.ApplicationWatchEvent) bool { + for i := range s.filters { + if !s.filters[i](event) { + return false + } + } + return true +} + +// Broadcaster is an interface for broadcasting application informer watch events to multiple subscribers. +type Broadcaster interface { + Subscribe(ch chan *appv1.ApplicationWatchEvent, filters ...func(event *appv1.ApplicationWatchEvent) bool) func() + OnAdd(interface{}, bool) + OnUpdate(interface{}, interface{}) + OnDelete(interface{}) +} + +type broadcasterHandler struct { + lock sync.Mutex + subscribers []*subscriber +} + +func NewBroadcaster() Broadcaster { + return &broadcasterHandler{} +} + +func (b *broadcasterHandler) notify(event *appv1.ApplicationWatchEvent) { + val, ok := event.Application.Annotations[appv1.AnnotationKeyManifestGeneratePaths] + if !ok || val == "" { + return + } + + // Make a local copy of b.subscribers, then send channel events outside the lock, + // to avoid data race on b.subscribers changes + subscribers := []*subscriber{} + b.lock.Lock() + subscribers = append(subscribers, b.subscribers...) + b.lock.Unlock() + + for _, s := range subscribers { + if s.matches(event) { + select { + case s.ch <- event: + { + // log.Infof("adding application '%s' to channel", event.Application.Name) + } + default: + // drop event if cannot send right away + log.WithField("application", event.Application.Name).Warn("unable to send event notification") + } + } + } +} + +// Subscribe forward application informer watch events to the provided channel. +// The watch events are dropped if no receives are reading events from the channel so the channel must have +// buffer if dropping events is not acceptable. +func (b *broadcasterHandler) Subscribe(ch chan *appv1.ApplicationWatchEvent, filters ...func(event *appv1.ApplicationWatchEvent) bool) func() { + b.lock.Lock() + defer b.lock.Unlock() + subscriber := &subscriber{ch, filters} + b.subscribers = append(b.subscribers, subscriber) + return func() { + b.lock.Lock() + defer b.lock.Unlock() + for i := range b.subscribers { + if b.subscribers[i] == subscriber { + b.subscribers = append(b.subscribers[:i], b.subscribers[i+1:]...) + break + } + } + } +} + +func (b *broadcasterHandler) OnAdd(obj interface{}, isInInitialList bool) { + if app, ok := obj.(*appv1.Application); ok { + b.notify(&appv1.ApplicationWatchEvent{Application: *app, Type: watch.Added}) + } +} + +func (b *broadcasterHandler) OnUpdate(_, newObj interface{}) { + if app, ok := newObj.(*appv1.Application); ok { + b.notify(&appv1.ApplicationWatchEvent{Application: *app, Type: watch.Modified}) + } +} + +func (b *broadcasterHandler) OnDelete(obj interface{}) { + if app, ok := obj.(*appv1.Application); ok { + b.notify(&appv1.ApplicationWatchEvent{Application: *app, Type: watch.Deleted}) + } +} diff --git a/acr_controller/controller/controller.go b/acr_controller/controller/controller.go new file mode 100644 index 0000000000000..b0c1944d6608f --- /dev/null +++ b/acr_controller/controller/controller.go @@ -0,0 +1,85 @@ +package application_change_revision_controller + +import ( + "context" + "time" + + log "github.com/sirupsen/logrus" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/tools/cache" + + appclient "github.com/argoproj/argo-cd/v2/acr_controller/application" + "github.com/argoproj/argo-cd/v2/acr_controller/service" + appclientset "github.com/argoproj/argo-cd/v2/pkg/client/clientset/versioned" + + appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + applisters "github.com/argoproj/argo-cd/v2/pkg/client/listers/application/v1alpha1" + servercache "github.com/argoproj/argo-cd/v2/server/cache" + "github.com/argoproj/argo-cd/v2/util/settings" +) + +var watchAPIBufferSize = 1000 + +type ACRController interface { + Run(ctx context.Context) +} + +type applicationChangeRevisionController struct { + settingsMgr *settings.SettingsManager + appBroadcaster Broadcaster + cache *servercache.Cache + appLister applisters.ApplicationLister + applicationServiceClient appclient.ApplicationClient + acrService service.ACRService + applicationClientset appclientset.Interface +} + +func NewApplicationChangeRevisionController(appInformer cache.SharedIndexInformer, cache *servercache.Cache, settingsMgr *settings.SettingsManager, applicationServiceClient appclient.ApplicationClient, appLister applisters.ApplicationLister, applicationClientset appclientset.Interface) ACRController { + appBroadcaster := NewBroadcaster() + _, err := appInformer.AddEventHandler(appBroadcaster) + if err != nil { + log.Error(err) + } + return &applicationChangeRevisionController{ + appBroadcaster: appBroadcaster, + cache: cache, + settingsMgr: settingsMgr, + applicationServiceClient: applicationServiceClient, + appLister: appLister, + applicationClientset: applicationClientset, + acrService: service.NewACRService(applicationClientset, applicationServiceClient), + } +} + +func (c *applicationChangeRevisionController) Run(ctx context.Context) { + var logCtx log.FieldLogger = log.StandardLogger() + + calculateIfPermitted := func(ctx context.Context, a appv1.Application, eventType watch.EventType, ts string) error { + if eventType == watch.Bookmark || eventType == watch.Deleted { + return nil // ignore this event + } + + return c.acrService.ChangeRevision(ctx, &a) + } + + // TODO: move to abstraction + eventsChannel := make(chan *appv1.ApplicationWatchEvent, watchAPIBufferSize) + unsubscribe := c.appBroadcaster.Subscribe(eventsChannel) + defer unsubscribe() + for { + select { + case <-ctx.Done(): + return + case event := <-eventsChannel: + // logCtx.Infof("channel size is %d", len(eventsChannel)) + + ts := time.Now().Format("2006-01-02T15:04:05.000Z") + ctx, cancel := context.WithTimeout(ctx, 2*time.Minute) + err := calculateIfPermitted(ctx, event.Application, event.Type, ts) + if err != nil { + logCtx.WithError(err).Error("failed to calculate change revision") + } + cancel() + } + } +} diff --git a/acr_controller/server.go b/acr_controller/server.go new file mode 100644 index 0000000000000..b79302216e506 --- /dev/null +++ b/acr_controller/server.go @@ -0,0 +1,241 @@ +package acr_controller + +import ( + "context" + "crypto/tls" + "fmt" + "net" + "net/http" + "strings" + "time" + + appclient "github.com/argoproj/argo-cd/v2/acr_controller/application" + acr_controller "github.com/argoproj/argo-cd/v2/acr_controller/controller" + "github.com/argoproj/argo-cd/v2/event_reporter/reporter" + + "github.com/redis/go-redis/v9" + log "github.com/sirupsen/logrus" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/tools/cache" + + appclientset "github.com/argoproj/argo-cd/v2/pkg/client/clientset/versioned" + appinformer "github.com/argoproj/argo-cd/v2/pkg/client/informers/externalversions" + applisters "github.com/argoproj/argo-cd/v2/pkg/client/listers/application/v1alpha1" + servercache "github.com/argoproj/argo-cd/v2/server/cache" + "github.com/argoproj/argo-cd/v2/util/db" + errorsutil "github.com/argoproj/argo-cd/v2/util/errors" + "github.com/argoproj/argo-cd/v2/util/healthz" + settings_util "github.com/argoproj/argo-cd/v2/util/settings" +) + +const ( + // catches corrupted informer state; see https://github.com/argoproj/argo-cd/issues/4960 for more information + notObjectErrMsg = "object does not implement the Object interfaces" +) + +var backoff = wait.Backoff{ + Steps: 5, + Duration: 500 * time.Millisecond, + Factor: 1.0, + Jitter: 0.1, +} + +type ACRServer struct { + ACRServerOpts + + settings *settings_util.ArgoCDSettings + log *log.Entry + settingsMgr *settings_util.SettingsManager + appInformer cache.SharedIndexInformer + appLister applisters.ApplicationLister + applicationClientset appclientset.Interface + db db.ArgoDB + + // stopCh is the channel which when closed, will shutdown the Event Reporter server + stopCh chan struct{} + serviceSet *ACRServerSet + featureManager *reporter.FeatureManager +} + +type ACRServerSet struct{} + +type ACRServerOpts struct { + ListenPort int + ListenHost string + Namespace string + KubeClientset kubernetes.Interface + AppClientset appclientset.Interface + ApplicationServiceClient appclient.ApplicationClient + Cache *servercache.Cache + RedisClient *redis.Client + ApplicationNamespaces []string + BaseHRef string + RootPath string +} + +type handlerSwitcher struct { + handler http.Handler + urlToHandler map[string]http.Handler + contentTypeToHandler map[string]http.Handler +} + +type Listeners struct { + Main net.Listener +} + +func (l *Listeners) Close() error { + if l.Main != nil { + if err := l.Main.Close(); err != nil { + return err + } + l.Main = nil + } + return nil +} + +func (s *handlerSwitcher) ServeHTTP(w http.ResponseWriter, r *http.Request) { + if urlHandler, ok := s.urlToHandler[r.URL.Path]; ok { + urlHandler.ServeHTTP(w, r) + } else if contentHandler, ok := s.contentTypeToHandler[r.Header.Get("content-type")]; ok { + contentHandler.ServeHTTP(w, r) + } else { + s.handler.ServeHTTP(w, r) + } +} + +func (a *ACRServer) healthCheck(r *http.Request) error { + if val, ok := r.URL.Query()["full"]; ok && len(val) > 0 && val[0] == "true" { + argoDB := db.NewDB(a.Namespace, a.settingsMgr, a.KubeClientset) + _, err := argoDB.ListClusters(r.Context()) + if err != nil && strings.Contains(err.Error(), notObjectErrMsg) { + return err + } + } + return nil +} + +// Init starts informers used by the API server +func (a *ACRServer) Init(ctx context.Context) { + go a.appInformer.Run(ctx.Done()) + svcSet := newApplicationChangeRevisionServiceSet() + a.serviceSet = svcSet +} + +func (a *ACRServer) RunController(ctx context.Context) { + controller := acr_controller.NewApplicationChangeRevisionController(a.appInformer, a.Cache, a.settingsMgr, a.ApplicationServiceClient, a.appLister, a.applicationClientset) + go controller.Run(ctx) +} + +// newHTTPServer returns the HTTP server to serve HTTP/HTTPS requests. This is implemented +// using grpc-gateway as a proxy to the gRPC server. +func (a *ACRServer) newHTTPServer(ctx context.Context, port int) *http.Server { + endpoint := fmt.Sprintf("localhost:%d", port) + mux := http.NewServeMux() + httpS := http.Server{ + Addr: endpoint, + Handler: &handlerSwitcher{ + handler: mux, + }, + } + + healthz.ServeHealthCheck(mux, a.healthCheck) + return &httpS +} + +func (a *ACRServer) checkServeErr(name string, err error) { + if err != nil { + if a.stopCh == nil { + // a nil stopCh indicates a graceful shutdown + log.Infof("graceful shutdown %s: %v", name, err) + } else { + log.Fatalf("%s: %v", name, err) + } + } else { + log.Infof("graceful shutdown %s", name) + } +} + +func startListener(host string, port int) (net.Listener, error) { + var conn net.Listener + var realErr error + _ = wait.ExponentialBackoff(backoff, func() (bool, error) { + conn, realErr = net.Listen("tcp", fmt.Sprintf("%s:%d", host, port)) + if realErr != nil { + return false, nil + } + return true, nil + }) + return conn, realErr +} + +func (a *ACRServer) Listen() (*Listeners, error) { + mainLn, err := startListener(a.ListenHost, a.ListenPort) + if err != nil { + return nil, err + } + return &Listeners{Main: mainLn}, nil +} + +// Run runs the API Server +// We use k8s.io/code-generator/cmd/go-to-protobuf to generate the .proto files from the API types. +// k8s.io/ go-to-protobuf uses protoc-gen-gogo, which comes from gogo/protobuf (a fork of +// golang/protobuf). +func (a *ACRServer) Run(ctx context.Context, lns *Listeners) { + httpS := a.newHTTPServer(ctx, a.ListenPort) + tlsConfig := tls.Config{} + tlsConfig.GetCertificate = func(info *tls.ClientHelloInfo) (*tls.Certificate, error) { + return a.settings.Certificate, nil + } + go func() { a.checkServeErr("httpS", httpS.Serve(lns.Main)) }() + go a.RunController(ctx) + + if !cache.WaitForCacheSync(ctx.Done(), a.appInformer.HasSynced) { + log.Fatal("Timed out waiting for project cache to sync") + } + + a.stopCh = make(chan struct{}) + <-a.stopCh +} + +// NewServer returns a new instance of the Event Reporter server +func NewApplicationChangeRevisionServer(ctx context.Context, opts ACRServerOpts) *ACRServer { + settingsMgr := settings_util.NewSettingsManager(ctx, opts.KubeClientset, opts.Namespace) + settings, err := settingsMgr.InitializeSettings(true) + errorsutil.CheckError(err) + + appInformerNs := opts.Namespace + if len(opts.ApplicationNamespaces) > 0 { + appInformerNs = "" + } + appFactory := appinformer.NewSharedInformerFactoryWithOptions(opts.AppClientset, 0, appinformer.WithNamespace(appInformerNs), appinformer.WithTweakListOptions(func(options *metav1.ListOptions) {})) + + appInformer := appFactory.Argoproj().V1alpha1().Applications().Informer() + appLister := appFactory.Argoproj().V1alpha1().Applications().Lister() + + dbInstance := db.NewDB(opts.Namespace, settingsMgr, opts.KubeClientset) + + server := &ACRServer{ + ACRServerOpts: opts, + log: log.NewEntry(log.StandardLogger()), + settings: settings, + settingsMgr: settingsMgr, + appInformer: appInformer, + appLister: appLister, + db: dbInstance, + featureManager: reporter.NewFeatureManager(settingsMgr), + applicationClientset: opts.AppClientset, + } + + if err != nil { + // Just log. It's not critical. + log.Warnf("Failed to log in-cluster warnings: %v", err) + } + + return server +} + +func newApplicationChangeRevisionServiceSet() *ACRServerSet { + return &ACRServerSet{} +} diff --git a/acr_controller/service/acr_service.go b/acr_controller/service/acr_service.go new file mode 100644 index 0000000000000..09e2aa89e8c5a --- /dev/null +++ b/acr_controller/service/acr_service.go @@ -0,0 +1,188 @@ +package service + +import ( + "context" + "encoding/json" + "sync" + + log "github.com/sirupsen/logrus" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + "k8s.io/utils/pointer" + + argoclient "github.com/argoproj/argo-cd/v2/acr_controller/application" + appclient "github.com/argoproj/argo-cd/v2/pkg/apiclient/application" + application "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + appclientset "github.com/argoproj/argo-cd/v2/pkg/client/clientset/versioned" +) + +type ACRService interface { + ChangeRevision(ctx context.Context, application *application.Application) error +} + +type acrService struct { + applicationClientset appclientset.Interface + applicationServiceClient argoclient.ApplicationClient + lock sync.Mutex +} + +func NewACRService(applicationClientset appclientset.Interface, applicationServiceClient argoclient.ApplicationClient) ACRService { + return &acrService{ + applicationClientset: applicationClientset, + applicationServiceClient: applicationServiceClient, + } +} + +func getChangeRevisionFromRevisions(revisions []string) string { + if len(revisions) > 0 { + return revisions[0] + } + return "" +} + +func getChangeRevision(app *application.Application) string { + if changeRevision := getChangeRevisionFromRevisions(app.Operation.Sync.ChangeRevisions); changeRevision != "" { + return changeRevision + } + if app.Status.OperationState != nil && app.Status.OperationState.Operation.Sync != nil { + if changeRevision := getChangeRevisionFromRevisions(app.Status.OperationState.Operation.Sync.ChangeRevisions); changeRevision != "" { + return changeRevision + } + } + return "" +} + +func (c *acrService) ChangeRevision(ctx context.Context, a *application.Application) error { + c.lock.Lock() + defer c.lock.Unlock() + + app, err := c.applicationClientset.ArgoprojV1alpha1().Applications(a.Namespace).Get(ctx, a.Name, metav1.GetOptions{}) + if err != nil { + return err + } + + if app.Operation == nil || app.Operation.Sync == nil { + return nil + } + + if getChangeRevision(app) != "" { + log.Infof("Change revision already calculated for application %s", app.Name) + return nil + } + + revision, err := c.calculateRevision(ctx, app) + if err != nil { + return err + } + + if revision == nil || *revision == "" { + log.Infof("Revision for application %s is empty", app.Name) + return nil + } + + log.Infof("Change revision for application %s is %s", app.Name, *revision) + + app, err = c.applicationClientset.ArgoprojV1alpha1().Applications(app.Namespace).Get(ctx, app.Name, metav1.GetOptions{}) + if err != nil { + return err + } + + revisions := []string{*revision} + + if app.Status.OperationState != nil && app.Status.OperationState.Operation.Sync != nil { + log.Infof("Patch operation sync result for application %s", app.Name) + return c.patchOperationSyncResultWithChangeRevision(ctx, app, revisions) + } + + log.Infof("Patch operation for application %s", app.Name) + return c.patchOperationWithChangeRevision(ctx, app, revisions) +} + +func (c *acrService) calculateRevision(ctx context.Context, a *application.Application) (*string, error) { + currentRevision, previousRevision := c.getRevisions(ctx, a) + log.Infof("Calculate revision for application %s, current revision %s, previous revision %s", a.Name, currentRevision, previousRevision) + changeRevisionResult, err := c.applicationServiceClient.GetChangeRevision(ctx, &appclient.ChangeRevisionRequest{ + AppName: pointer.String(a.GetName()), + Namespace: pointer.String(a.GetNamespace()), + CurrentRevision: pointer.String(currentRevision), + PreviousRevision: pointer.String(previousRevision), + }) + if err != nil { + return nil, err + } + return changeRevisionResult.Revision, nil +} + +func (c *acrService) patchOperationWithChangeRevision(ctx context.Context, a *application.Application, revisions []string) error { + if len(revisions) == 1 { + patch, _ := json.Marshal(map[string]interface{}{ + "operation": map[string]interface{}{ + "sync": map[string]interface{}{ + "changeRevision": revisions[0], + }, + }, + }) + _, err := c.applicationClientset.ArgoprojV1alpha1().Applications(a.Namespace).Patch(ctx, a.Name, types.MergePatchType, patch, metav1.PatchOptions{}) + return err + } + + patch, _ := json.Marshal(map[string]interface{}{ + "operation": map[string]interface{}{ + "sync": map[string]interface{}{ + "changeRevisions": revisions, + }, + }, + }) + _, err := c.applicationClientset.ArgoprojV1alpha1().Applications(a.Namespace).Patch(ctx, a.Name, types.MergePatchType, patch, metav1.PatchOptions{}) + return err +} + +func (c *acrService) patchOperationSyncResultWithChangeRevision(ctx context.Context, a *application.Application, revisions []string) error { + if len(revisions) == 1 { + patch, _ := json.Marshal(map[string]interface{}{ + "status": map[string]interface{}{ + "operationState": map[string]interface{}{ + "operation": map[string]interface{}{ + "sync": map[string]interface{}{ + "changeRevision": revisions[0], + }, + }, + }, + }, + }) + _, err := c.applicationClientset.ArgoprojV1alpha1().Applications(a.Namespace).Patch(ctx, a.Name, types.MergePatchType, patch, metav1.PatchOptions{}) + return err + } + + patch, _ := json.Marshal(map[string]interface{}{ + "status": map[string]interface{}{ + "operationState": map[string]interface{}{ + "operation": map[string]interface{}{ + "sync": map[string]interface{}{ + "changeRevisions": revisions, + }, + }, + }, + }, + }) + _, err := c.applicationClientset.ArgoprojV1alpha1().Applications(a.Namespace).Patch(ctx, a.Name, types.MergePatchType, patch, metav1.PatchOptions{}) + return err +} + +func (c *acrService) getRevisions(ctx context.Context, a *application.Application) (string, string) { + if a.Status.History == nil || len(a.Status.History) == 0 { + // it is first sync operation, and we dont need detect change revision in such case + return "", "" + } + + // in case if sync is already done, we need to use revision from sync result and previous revision from history + if a.Status.Sync.Status == "Synced" && a.Status.OperationState != nil && a.Status.OperationState.SyncResult != nil { + currentRevision := a.Status.OperationState.SyncResult.Revision + return currentRevision, a.Status.History[len(a.Status.History)-2].Revision + } + + // in case if sync is in progress, we need to use revision from operation and revision from latest history record + currentRevision := a.Operation.Sync.Revision + previousRevision := a.Status.History[len(a.Status.History)-1].Revision + return currentRevision, previousRevision +} diff --git a/acr_controller/service/acr_service_test.go b/acr_controller/service/acr_service_test.go new file mode 100644 index 0000000000000..310fb2b88800e --- /dev/null +++ b/acr_controller/service/acr_service_test.go @@ -0,0 +1,173 @@ +package service + +import ( + "context" + "testing" + + "github.com/argoproj/argo-cd/v2/acr_controller/application/mocks" + appclient "github.com/argoproj/argo-cd/v2/pkg/apiclient/application" + appsv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + apps "github.com/argoproj/argo-cd/v2/pkg/client/clientset/versioned/fake" + "github.com/argoproj/argo-cd/v2/test" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/utils/pointer" + "sigs.k8s.io/yaml" +) + +const fakeApp = ` +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: test-app + namespace: default +spec: + source: + path: some/path + repoURL: https://github.com/argoproj/argocd-example-apps.git + targetRevision: HEAD + ksonnet: + environment: default + destination: + namespace: ` + test.FakeDestNamespace + ` + server: https://cluster-api.example.com +` + +const syncedAppWithHistory = ` +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + annotations: + argocd.argoproj.io/manifest-generate-paths: . + finalizers: + - resources-finalizer.argocd.argoproj.io + labels: + app.kubernetes.io/instance: guestbook + name: guestbook + namespace: codefresh +operation: + initiatedBy: + automated: true + retry: + limit: 5 + sync: + prune: true + revision: c732f4d2ef24c7eeb900e9211ff98f90bb646505 + syncOptions: + - CreateNamespace=true +spec: + destination: + namespace: guestbook + server: https://kubernetes.default.svc + project: default + source: + path: apps/guestbook + repoURL: https://github.com/pasha-codefresh/precisely-gitsource.git + targetRevision: HEAD +status: + history: + - deployStartedAt: "2024-06-20T19:35:36Z" + deployedAt: "2024-06-20T19:35:44Z" + id: 3 + initiatedBy: {} + revision: 792822850fd2f6db63597533e16dfa27e6757dc5 + source: + path: apps/guestbook + repoURL: https://github.com/pasha-codefresh/precisely-gitsource.git + targetRevision: HEAD + - deployStartedAt: "2024-06-20T19:36:34Z" + deployedAt: "2024-06-20T19:36:42Z" + id: 4 + initiatedBy: {} + revision: ee5373eb9814e247ec6944e8b8897a8ec2f8528e + source: + path: apps/guestbook + repoURL: https://github.com/pasha-codefresh/precisely-gitsource.git + targetRevision: HEAD + operationState: + operation: + sync: + prune: true + revision: c732f4d2ef24c7eeb900e9211ff98f90bb646506 + syncOptions: + - CreateNamespace=true + phase: Running + startedAt: "2024-06-20T19:47:34Z" + syncResult: + revision: c732f4d2ef24c7eeb900e9211ff98f90bb646505 + source: + path: apps/guestbook + repoURL: https://github.com/pasha-codefresh/precisely-gitsource.git + targetRevision: HEAD + sync: + revision: 00d423763fbf56d2ea452de7b26a0ab20590f521 + status: Synced +` + +func newTestACRService(client *mocks.ApplicationClient) *acrService { + fakeAppsClientset := apps.NewSimpleClientset(createTestApp(syncedAppWithHistory)) + return &acrService{ + applicationClientset: fakeAppsClientset, + applicationServiceClient: client, + } +} + +func createTestApp(testApp string, opts ...func(app *appsv1.Application)) *appsv1.Application { + var app appsv1.Application + err := yaml.Unmarshal([]byte(testApp), &app) + if err != nil { + panic(err) + } + for i := range opts { + opts[i](&app) + } + return &app +} + +func Test_getRevisions(r *testing.T) { + r.Run("history list is empty", func(t *testing.T) { + acrService := newTestACRService(&mocks.ApplicationClient{}) + current, previous := acrService.getRevisions(context.TODO(), createTestApp(fakeApp)) + assert.Equal(t, "", current) + assert.Equal(t, "", previous) + }) + + r.Run("application is synced", func(t *testing.T) { + acrService := newTestACRService(&mocks.ApplicationClient{}) + app := createTestApp(syncedAppWithHistory) + current, previous := acrService.getRevisions(context.TODO(), app) + assert.Equal(t, app.Status.OperationState.SyncResult.Revision, current) + assert.Equal(t, app.Status.History[len(app.Status.History)-2].Revision, previous) + }) + + r.Run("application sync is in progress", func(t *testing.T) { + acrService := newTestACRService(&mocks.ApplicationClient{}) + app := createTestApp(syncedAppWithHistory) + app.Status.Sync.Status = "Syncing" + current, previous := acrService.getRevisions(context.TODO(), app) + assert.Equal(t, app.Operation.Sync.Revision, current) + assert.Equal(t, app.Status.History[len(app.Status.History)-1].Revision, previous) + }) +} + +func Test_ChangeRevision(r *testing.T) { + r.Run("Change revision", func(t *testing.T) { + client := &mocks.ApplicationClient{} + client.On("GetChangeRevision", mock.Anything, mock.Anything).Return(&appclient.ChangeRevisionResponse{ + Revision: pointer.String("new-revision"), + }, nil) + acrService := newTestACRService(client) + app := createTestApp(syncedAppWithHistory) + + err := acrService.ChangeRevision(context.TODO(), app) + require.NoError(t, err) + + app, err = acrService.applicationClientset.ArgoprojV1alpha1().Applications(app.Namespace).Get(context.TODO(), app.Name, metav1.GetOptions{}) + require.NoError(t, err) + + assert.Equal(t, "new-revision", app.Status.OperationState.Operation.Sync.ChangeRevision) + }) +} diff --git a/assets/swagger.json b/assets/swagger.json index b89699412e42c..a44bfbe85bd3c 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -251,6 +251,50 @@ } } }, + "/api/v1/application/changeRevision": { + "get": { + "tags": [ + "ApplicationService" + ], + "operationId": "ApplicationService_GetChangeRevision", + "parameters": [ + { + "type": "string", + "name": "appName", + "in": "query" + }, + { + "type": "string", + "name": "namespace", + "in": "query" + }, + { + "type": "string", + "name": "currentRevision", + "in": "query" + }, + { + "type": "string", + "name": "previousRevision", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/applicationChangeRevisionResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/runtimeError" + } + } + } + } + }, "/api/v1/applications": { "get": { "tags": [ @@ -4507,6 +4551,14 @@ } } }, + "applicationChangeRevisionResponse": { + "type": "object", + "properties": { + "revision": { + "type": "string" + } + } + }, "applicationFileChunk": { "type": "object", "properties": { @@ -9220,6 +9272,15 @@ "description": "SyncOperation contains details about a sync operation.", "type": "object", "properties": { + "changeRevision": { + "type": "string" + }, + "changeRevisions": { + "type": "array", + "items": { + "type": "string" + } + }, "dryRun": { "type": "boolean", "title": "DryRun specifies to perform a `kubectl apply --dry-run` without actually performing the sync" diff --git a/changelog/CHANGELOG-2.11-2024.9.18-45633bcd2.md b/changelog/CHANGELOG-2.11-2024.9.18-45633bcd2.md new file mode 100644 index 0000000000000..47cb3a8281c7d --- /dev/null +++ b/changelog/CHANGELOG-2.11-2024.9.18-45633bcd2.md @@ -0,0 +1,2 @@ +### Chore +- chore: selfheal additional logs in CompareAppState \ No newline at end of file diff --git a/changelog/CHANGELOG.md b/changelog/CHANGELOG.md index 97ce74e0e4f8d..4d55728e17ee7 100644 --- a/changelog/CHANGELOG.md +++ b/changelog/CHANGELOG.md @@ -1,2 +1,2 @@ ### Features -- feat: event-reporter: report resource health status errors with application event \ No newline at end of file +- feat: monorepo controller v1.0.0 \ No newline at end of file diff --git a/cmd/application-change-revision-controller/commands/application_change_revision_controller.go b/cmd/application-change-revision-controller/commands/application_change_revision_controller.go new file mode 100644 index 0000000000000..f635906f9d469 --- /dev/null +++ b/cmd/application-change-revision-controller/commands/application_change_revision_controller.go @@ -0,0 +1,158 @@ +package commands + +import ( + "context" + "fmt" + "time" + + acr "github.com/argoproj/argo-cd/v2/acr_controller" + cacheutil "github.com/argoproj/argo-cd/v2/util/cache" + + "github.com/argoproj/pkg/stats" + "github.com/redis/go-redis/v9" + log "github.com/sirupsen/logrus" + "github.com/spf13/cobra" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/tools/clientcmd" + + appclient "github.com/argoproj/argo-cd/v2/acr_controller/application" + + cmdutil "github.com/argoproj/argo-cd/v2/cmd/util" + "github.com/argoproj/argo-cd/v2/common" + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + appclientset "github.com/argoproj/argo-cd/v2/pkg/client/clientset/versioned" + servercache "github.com/argoproj/argo-cd/v2/server/cache" + "github.com/argoproj/argo-cd/v2/util/cli" + "github.com/argoproj/argo-cd/v2/util/env" + "github.com/argoproj/argo-cd/v2/util/errors" + "github.com/argoproj/argo-cd/v2/util/kube" +) + +const ( + failureRetryCountEnv = "EVENT_REPORTER_K8S_RETRY_COUNT" + failureRetryPeriodMilliSecondsEnv = "EVENT_REPORTE_K8S_RETRY_DURATION_MILLISECONDS" +) + +var ( + failureRetryCount = 0 + failureRetryPeriodMilliSeconds = 100 +) + +func init() { + failureRetryCount = env.ParseNumFromEnv(failureRetryCountEnv, failureRetryCount, 0, 10) + failureRetryPeriodMilliSeconds = env.ParseNumFromEnv(failureRetryPeriodMilliSecondsEnv, failureRetryPeriodMilliSeconds, 0, 1000) +} + +func getApplicationClient(address, token string, path string) appclient.ApplicationClient { + return appclient.NewHttpApplicationClient(token, address, path) +} + +// NewCommand returns a new instance of an application change revision command +func NewCommand() *cobra.Command { + var ( + redisClient *redis.Client + listenHost string + listenPort int + glogLevel int + clientConfig clientcmd.ClientConfig + applicationServerAddress string + cacheSrc func() (*servercache.Cache, error) + contentSecurityPolicy string + applicationNamespaces []string + argocdToken string + rootpath string + ) + command := &cobra.Command{ + Use: cliName, + Short: "Run the Change Revision Controller server", + Long: "The Change Revision Controller is a service that listens for application events and updates the application's revision in the application CRD", + DisableAutoGenTag: true, + Run: func(c *cobra.Command, args []string) { + ctx := c.Context() + + vers := common.GetVersion() + namespace, _, err := clientConfig.Namespace() + errors.CheckError(err) + vers.LogStartupInfo( + "Application Change Revision Controller", + map[string]any{ + "namespace": namespace, + "port": listenPort, + }, + ) + + cli.SetLogFormat(cmdutil.LogFormat) + cli.SetLogLevel(cmdutil.LogLevel) + cli.SetGLogLevel(glogLevel) + + config, err := clientConfig.ClientConfig() + errors.CheckError(err) + errors.CheckError(v1alpha1.SetK8SConfigDefaults(config)) + + cache, err := cacheSrc() + errors.CheckError(err) + + kubeclientset := kubernetes.NewForConfigOrDie(config) + + appclientsetConfig, err := clientConfig.ClientConfig() + errors.CheckError(err) + errors.CheckError(v1alpha1.SetK8SConfigDefaults(appclientsetConfig)) + config.UserAgent = fmt.Sprintf("argocd-server/%s (%s)", vers.Version, vers.Platform) + + if failureRetryCount > 0 { + appclientsetConfig = kube.AddFailureRetryWrapper(appclientsetConfig, failureRetryCount, failureRetryPeriodMilliSeconds) + } + appClientSet := appclientset.NewForConfigOrDie(appclientsetConfig) + + changeRevisionServerOpts := acr.ACRServerOpts{ + ListenPort: listenPort, + ListenHost: listenHost, + Namespace: namespace, + KubeClientset: kubeclientset, + AppClientset: appClientSet, + Cache: cache, + RedisClient: redisClient, + ApplicationNamespaces: applicationNamespaces, + ApplicationServiceClient: getApplicationClient(applicationServerAddress, argocdToken, rootpath), + } + + log.Info("Starting change revision controller server") + + stats.RegisterStackDumper() + stats.StartStatsTicker(10 * time.Minute) + stats.RegisterHeapDumper("memprofile") + changeRevisionServer := acr.NewApplicationChangeRevisionServer(ctx, changeRevisionServerOpts) + changeRevisionServer.Init(ctx) + lns, err := changeRevisionServer.Listen() + errors.CheckError(err) + for { + var closer func() + ctx, cancel := context.WithCancel(ctx) + changeRevisionServer.Run(ctx, lns) + cancel() + if closer != nil { + closer() + } + } + }, + } + + clientConfig = cli.AddKubectlFlagsToCmd(command) + command.Flags().StringVar(&rootpath, "argocd-server-path", env.StringFromEnv("ARGOCD_SERVER_ROOTPATH", ""), "Used if Argo CD is running behind reverse proxy under subpath different from /") + command.Flags().StringVar(&cmdutil.LogFormat, "logformat", env.StringFromEnv("ACR_CONTROLLER_LOGFORMAT", "text"), "Set the logging format. One of: text|json") + command.Flags().StringVar(&cmdutil.LogLevel, "loglevel", env.StringFromEnv("ACR_CONTROLLER_LOG_LEVEL", "info"), "Set the logging level. One of: debug|info|warn|error") + command.Flags().IntVar(&glogLevel, "gloglevel", 0, "Set the glog logging level") + command.Flags().StringVar(&applicationServerAddress, "application-server", env.StringFromEnv("ARGOCD_SERVER", common.DefaultApplicationServerAddr), "Application server address") + command.Flags().StringVar(&argocdToken, "argocd-token", env.StringFromEnv("ARGOCD_TOKEN", ""), "ArgoCD server JWT token") + command.AddCommand(cli.NewVersionCmd(cliName)) + command.Flags().StringVar(&listenHost, "address", env.StringFromEnv("ACR_CONTROLLER_LISTEN_ADDRESS", common.DefaultAddressACRController), "Listen on given address") + command.Flags().IntVar(&listenPort, "port", common.DefaultPortACRServer, "Listen on given port") + command.Flags().StringVar(&contentSecurityPolicy, "content-security-policy", env.StringFromEnv("ACR_CONTROLLER_CONTENT_SECURITY_POLICY", "frame-ancestors 'self';"), "Set Content-Security-Policy header in HTTP responses to `value`. To disable, set to \"\".") + command.Flags().StringSliceVar(&applicationNamespaces, "application-namespaces", env.StringsFromEnv("ARGOCD_APPLICATION_NAMESPACES", []string{}, ","), "List of additional namespaces where application resources can be managed in") + cacheSrc = servercache.AddCacheFlagsToCmd(command, cacheutil.Options{ + OnClientCreated: func(client *redis.Client) { + redisClient = client + }, + }) + return command +} diff --git a/cmd/application-change-revision-controller/commands/common.go b/cmd/application-change-revision-controller/commands/common.go new file mode 100644 index 0000000000000..c1ca08e656615 --- /dev/null +++ b/cmd/application-change-revision-controller/commands/common.go @@ -0,0 +1,6 @@ +package commands + +const ( + // cliName is the name of the CLI + cliName = "application-change-revision-controller" +) diff --git a/cmd/main.go b/cmd/main.go index af676e96ad0f8..c8e2458d5aeee 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -6,6 +6,7 @@ import ( "github.com/spf13/cobra" + changerevisioncontroller "github.com/argoproj/argo-cd/v2/cmd/application-change-revision-controller/commands" appcontroller "github.com/argoproj/argo-cd/v2/cmd/argocd-application-controller/commands" applicationset "github.com/argoproj/argo-cd/v2/cmd/argocd-applicationset-controller/commands" cmpserver "github.com/argoproj/argo-cd/v2/cmd/argocd-cmp-server/commands" @@ -39,6 +40,8 @@ func main() { command = eventreporterserver.NewCommand() case "argocd-application-controller": command = appcontroller.NewCommand() + case "argocd-application-change-revision-controller": + command = changerevisioncontroller.NewCommand() case "argocd-repo-server": command = reposerver.NewCommand() case "argocd-cmp-server": diff --git a/common/common.go b/common/common.go index 3de30a104cb69..d3b43828fe761 100644 --- a/common/common.go +++ b/common/common.go @@ -60,6 +60,8 @@ const ( DefaultPortEventReporterServerMetrics = 8087 DefaultPortEventReporterServer = 8088 + + DefaultPortACRServer = 8090 ) // DefaultAddressAPIServer for ArgoCD components @@ -71,6 +73,7 @@ const ( DefaultAddressRepoServerMetrics = "0.0.0.0" DefaultAddressEventReporterServer = "0.0.0.0" + DefaultAddressACRController = "0.0.0.0" DefaultAddressEventReporterServerMetrics = "0.0.0.0" ) diff --git a/controller/appcontroller.go b/controller/appcontroller.go index 7664adb2b4a3e..b3d875392b41b 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -1506,6 +1506,7 @@ func (ctrl *ApplicationController) processAppRefreshQueueItem() (processNext boo return } origApp = origApp.DeepCopy() + needRefresh, refreshType, comparisonLevel := ctrl.needRefreshAppStatus(origApp, ctrl.statusRefreshTimeout, ctrl.statusHardRefreshTimeout) if !needRefresh { diff --git a/manifests/base/acr-controller/acr-controller-deployment.yaml b/manifests/base/acr-controller/acr-controller-deployment.yaml new file mode 100644 index 0000000000000..baf85faaf85df --- /dev/null +++ b/manifests/base/acr-controller/acr-controller-deployment.yaml @@ -0,0 +1,82 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/name: acr-controller + app.kubernetes.io/part-of: argocd + app.kubernetes.io/component: acr-controller + name: acr-controller +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: acr-controller + template: + metadata: + labels: + app.kubernetes.io/name: acr-controller + spec: + serviceAccountName: acr-controller + containers: + - name: acr-controller + image: quay.io/argoproj/argocd:latest + imagePullPolicy: Always + args: + - /usr/local/bin/argocd-application-change-revision-controller + env: + - name: ARGOCD_SERVER + value: "http://argocd-server:80" + - name: ARGOCD_TOKEN + valueFrom: + secretKeyRef: + key: token + name: argocd-token + - name: ARGOCD_APPLICATION_NAMESPACES + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: application.namespaces + optional: true + - name: ACR_CONTROLLER_LOGFORMAT + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: acr.log.format + optional: true + - name: ACR_CONTROLLER_LOG_LEVEL + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: acr.log.level + optional: true + - name: ACR_CONTROLLER_LISTEN_ADDRESS + valueFrom: + configMapKeyRef: + name: argocd-cmd-params-cm + key: acr.listen.address + optional: true + ports: + - containerPort: 8090 + name: health + livenessProbe: + httpGet: + path: /healthz?full=true + port: health + initialDelaySeconds: 3 + periodSeconds: 30 + timeoutSeconds: 5 + readinessProbe: + httpGet: + path: /healthz + port: health + initialDelaySeconds: 3 + periodSeconds: 30 + securityContext: + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + runAsNonRoot: true + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault diff --git a/manifests/base/acr-controller/acr-controller-role.yaml b/manifests/base/acr-controller/acr-controller-role.yaml new file mode 100644 index 0000000000000..3a1e1991680e7 --- /dev/null +++ b/manifests/base/acr-controller/acr-controller-role.yaml @@ -0,0 +1,43 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app.kubernetes.io/name: acr-controller + app.kubernetes.io/part-of: argocd + app.kubernetes.io/component: acr-controller + name: acr-controller +rules: +- apiGroups: + - "" + resources: + - secrets + - configmaps + verbs: + - create + - get + - list + - watch + - update + - patch + - delete +- apiGroups: + - argoproj.io + resources: + - applications + - appprojects + - applicationsets + verbs: + - create + - get + - list + - watch + - update + - delete + - patch +- apiGroups: + - "" + resources: + - events + verbs: + - create + - list diff --git a/manifests/base/acr-controller/acr-controller-rolebinding.yaml b/manifests/base/acr-controller/acr-controller-rolebinding.yaml new file mode 100644 index 0000000000000..e70280a6bc3f9 --- /dev/null +++ b/manifests/base/acr-controller/acr-controller-rolebinding.yaml @@ -0,0 +1,15 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/name: acr-controller + app.kubernetes.io/part-of: argocd + app.kubernetes.io/component: acr-controller + name: acr-controller +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: acr-controller +subjects: +- kind: ServiceAccount + name: acr-controller diff --git a/manifests/base/acr-controller/acr-controller-sa.yaml b/manifests/base/acr-controller/acr-controller-sa.yaml new file mode 100644 index 0000000000000..0042922267f34 --- /dev/null +++ b/manifests/base/acr-controller/acr-controller-sa.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/name: acr-controller + app.kubernetes.io/part-of: argocd + app.kubernetes.io/component: acr-controller + name: acr-controller diff --git a/manifests/base/acr-controller/kustomization.yaml b/manifests/base/acr-controller/kustomization.yaml new file mode 100644 index 0000000000000..93d7ff439875f --- /dev/null +++ b/manifests/base/acr-controller/kustomization.yaml @@ -0,0 +1,8 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: +- acr-controller-deployment.yaml +- acr-controller-role.yaml +- acr-controller-rolebinding.yaml +- acr-controller-sa.yaml diff --git a/manifests/core-install.yaml b/manifests/core-install.yaml index 02c48df268834..b40917e972c7d 100644 --- a/manifests/core-install.yaml +++ b/manifests/core-install.yaml @@ -115,6 +115,12 @@ spec: sync: description: Sync contains parameters for the operation properties: + changeRevision: + type: string + changeRevisions: + items: + type: string + type: array dryRun: description: DryRun specifies to perform a `kubectl apply --dry-run` without actually performing the sync @@ -2562,6 +2568,12 @@ spec: sync: description: Sync contains parameters for the operation properties: + changeRevision: + type: string + changeRevisions: + items: + type: string + type: array dryRun: description: DryRun specifies to perform a `kubectl apply --dry-run` without actually performing the sync diff --git a/manifests/crds/application-crd.yaml b/manifests/crds/application-crd.yaml index 5c54fc0e2da01..ac02f2c328712 100644 --- a/manifests/crds/application-crd.yaml +++ b/manifests/crds/application-crd.yaml @@ -114,6 +114,12 @@ spec: sync: description: Sync contains parameters for the operation properties: + changeRevision: + type: string + changeRevisions: + items: + type: string + type: array dryRun: description: DryRun specifies to perform a `kubectl apply --dry-run` without actually performing the sync @@ -2561,6 +2567,12 @@ spec: sync: description: Sync contains parameters for the operation properties: + changeRevision: + type: string + changeRevisions: + items: + type: string + type: array dryRun: description: DryRun specifies to perform a `kubectl apply --dry-run` without actually performing the sync diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml index ff3d7012b6fff..ce8f94ee36c62 100644 --- a/manifests/ha/install.yaml +++ b/manifests/ha/install.yaml @@ -115,6 +115,12 @@ spec: sync: description: Sync contains parameters for the operation properties: + changeRevision: + type: string + changeRevisions: + items: + type: string + type: array dryRun: description: DryRun specifies to perform a `kubectl apply --dry-run` without actually performing the sync @@ -2562,6 +2568,12 @@ spec: sync: description: Sync contains parameters for the operation properties: + changeRevision: + type: string + changeRevisions: + items: + type: string + type: array dryRun: description: DryRun specifies to perform a `kubectl apply --dry-run` without actually performing the sync diff --git a/manifests/install.yaml b/manifests/install.yaml index a2d56ff0e082e..1fb7679d213c7 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -115,6 +115,12 @@ spec: sync: description: Sync contains parameters for the operation properties: + changeRevision: + type: string + changeRevisions: + items: + type: string + type: array dryRun: description: DryRun specifies to perform a `kubectl apply --dry-run` without actually performing the sync @@ -2562,6 +2568,12 @@ spec: sync: description: Sync contains parameters for the operation properties: + changeRevision: + type: string + changeRevisions: + items: + type: string + type: array dryRun: description: DryRun specifies to perform a `kubectl apply --dry-run` without actually performing the sync diff --git a/pkg/apiclient/application/application.pb.go b/pkg/apiclient/application/application.pb.go index f380c701ee278..a3fd34497197e 100644 --- a/pkg/apiclient/application/application.pb.go +++ b/pkg/apiclient/application/application.pb.go @@ -1715,6 +1715,124 @@ func (m *ApplicationResourceRequest) GetProject() string { return "" } +type ChangeRevisionRequest struct { + AppName *string `protobuf:"bytes,1,req,name=appName" json:"appName,omitempty"` + Namespace *string `protobuf:"bytes,2,opt,name=namespace" json:"namespace,omitempty"` + CurrentRevision *string `protobuf:"bytes,3,opt,name=currentRevision" json:"currentRevision,omitempty"` + PreviousRevision *string `protobuf:"bytes,4,opt,name=previousRevision" json:"previousRevision,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ChangeRevisionRequest) Reset() { *m = ChangeRevisionRequest{} } +func (m *ChangeRevisionRequest) String() string { return proto.CompactTextString(m) } +func (*ChangeRevisionRequest) ProtoMessage() {} +func (*ChangeRevisionRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_df6e82b174b5eaec, []int{22} +} +func (m *ChangeRevisionRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ChangeRevisionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ChangeRevisionRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ChangeRevisionRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ChangeRevisionRequest.Merge(m, src) +} +func (m *ChangeRevisionRequest) XXX_Size() int { + return m.Size() +} +func (m *ChangeRevisionRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ChangeRevisionRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ChangeRevisionRequest proto.InternalMessageInfo + +func (m *ChangeRevisionRequest) GetAppName() string { + if m != nil && m.AppName != nil { + return *m.AppName + } + return "" +} + +func (m *ChangeRevisionRequest) GetNamespace() string { + if m != nil && m.Namespace != nil { + return *m.Namespace + } + return "" +} + +func (m *ChangeRevisionRequest) GetCurrentRevision() string { + if m != nil && m.CurrentRevision != nil { + return *m.CurrentRevision + } + return "" +} + +func (m *ChangeRevisionRequest) GetPreviousRevision() string { + if m != nil && m.PreviousRevision != nil { + return *m.PreviousRevision + } + return "" +} + +type ChangeRevisionResponse struct { + Revision *string `protobuf:"bytes,1,req,name=revision" json:"revision,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ChangeRevisionResponse) Reset() { *m = ChangeRevisionResponse{} } +func (m *ChangeRevisionResponse) String() string { return proto.CompactTextString(m) } +func (*ChangeRevisionResponse) ProtoMessage() {} +func (*ChangeRevisionResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_df6e82b174b5eaec, []int{23} +} +func (m *ChangeRevisionResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ChangeRevisionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ChangeRevisionResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ChangeRevisionResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ChangeRevisionResponse.Merge(m, src) +} +func (m *ChangeRevisionResponse) XXX_Size() int { + return m.Size() +} +func (m *ChangeRevisionResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ChangeRevisionResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ChangeRevisionResponse proto.InternalMessageInfo + +func (m *ChangeRevisionResponse) GetRevision() string { + if m != nil && m.Revision != nil { + return *m.Revision + } + return "" +} + type ApplicationResourcePatchRequest struct { Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"` Namespace *string `protobuf:"bytes,2,opt,name=namespace" json:"namespace,omitempty"` @@ -1735,7 +1853,7 @@ func (m *ApplicationResourcePatchRequest) Reset() { *m = ApplicationReso func (m *ApplicationResourcePatchRequest) String() string { return proto.CompactTextString(m) } func (*ApplicationResourcePatchRequest) ProtoMessage() {} func (*ApplicationResourcePatchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_df6e82b174b5eaec, []int{22} + return fileDescriptor_df6e82b174b5eaec, []int{24} } func (m *ApplicationResourcePatchRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1854,7 +1972,7 @@ func (m *ApplicationResourceDeleteRequest) Reset() { *m = ApplicationRes func (m *ApplicationResourceDeleteRequest) String() string { return proto.CompactTextString(m) } func (*ApplicationResourceDeleteRequest) ProtoMessage() {} func (*ApplicationResourceDeleteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_df6e82b174b5eaec, []int{23} + return fileDescriptor_df6e82b174b5eaec, []int{25} } func (m *ApplicationResourceDeleteRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1972,7 +2090,7 @@ func (m *ResourceActionRunRequest) Reset() { *m = ResourceActionRunReque func (m *ResourceActionRunRequest) String() string { return proto.CompactTextString(m) } func (*ResourceActionRunRequest) ProtoMessage() {} func (*ResourceActionRunRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_df6e82b174b5eaec, []int{24} + return fileDescriptor_df6e82b174b5eaec, []int{26} } func (m *ResourceActionRunRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2075,7 +2193,7 @@ func (m *ResourceActionsListResponse) Reset() { *m = ResourceActionsList func (m *ResourceActionsListResponse) String() string { return proto.CompactTextString(m) } func (*ResourceActionsListResponse) ProtoMessage() {} func (*ResourceActionsListResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_df6e82b174b5eaec, []int{25} + return fileDescriptor_df6e82b174b5eaec, []int{27} } func (m *ResourceActionsListResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2122,7 +2240,7 @@ func (m *ApplicationResourceResponse) Reset() { *m = ApplicationResource func (m *ApplicationResourceResponse) String() string { return proto.CompactTextString(m) } func (*ApplicationResourceResponse) ProtoMessage() {} func (*ApplicationResourceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_df6e82b174b5eaec, []int{26} + return fileDescriptor_df6e82b174b5eaec, []int{28} } func (m *ApplicationResourceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2184,7 +2302,7 @@ func (m *ApplicationPodLogsQuery) Reset() { *m = ApplicationPodLogsQuery func (m *ApplicationPodLogsQuery) String() string { return proto.CompactTextString(m) } func (*ApplicationPodLogsQuery) ProtoMessage() {} func (*ApplicationPodLogsQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_df6e82b174b5eaec, []int{27} + return fileDescriptor_df6e82b174b5eaec, []int{29} } func (m *ApplicationPodLogsQuery) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2341,7 +2459,7 @@ func (m *LogEntry) Reset() { *m = LogEntry{} } func (m *LogEntry) String() string { return proto.CompactTextString(m) } func (*LogEntry) ProtoMessage() {} func (*LogEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_df6e82b174b5eaec, []int{28} + return fileDescriptor_df6e82b174b5eaec, []int{30} } func (m *LogEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2418,7 +2536,7 @@ func (m *OperationTerminateRequest) Reset() { *m = OperationTerminateReq func (m *OperationTerminateRequest) String() string { return proto.CompactTextString(m) } func (*OperationTerminateRequest) ProtoMessage() {} func (*OperationTerminateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_df6e82b174b5eaec, []int{29} + return fileDescriptor_df6e82b174b5eaec, []int{31} } func (m *OperationTerminateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2481,7 +2599,7 @@ func (m *ApplicationSyncWindowsQuery) Reset() { *m = ApplicationSyncWind func (m *ApplicationSyncWindowsQuery) String() string { return proto.CompactTextString(m) } func (*ApplicationSyncWindowsQuery) ProtoMessage() {} func (*ApplicationSyncWindowsQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_df6e82b174b5eaec, []int{30} + return fileDescriptor_df6e82b174b5eaec, []int{32} } func (m *ApplicationSyncWindowsQuery) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2544,7 +2662,7 @@ func (m *ApplicationSyncWindowsResponse) Reset() { *m = ApplicationSyncW func (m *ApplicationSyncWindowsResponse) String() string { return proto.CompactTextString(m) } func (*ApplicationSyncWindowsResponse) ProtoMessage() {} func (*ApplicationSyncWindowsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_df6e82b174b5eaec, []int{31} + return fileDescriptor_df6e82b174b5eaec, []int{33} } func (m *ApplicationSyncWindowsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2608,7 +2726,7 @@ func (m *ApplicationSyncWindow) Reset() { *m = ApplicationSyncWindow{} } func (m *ApplicationSyncWindow) String() string { return proto.CompactTextString(m) } func (*ApplicationSyncWindow) ProtoMessage() {} func (*ApplicationSyncWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_df6e82b174b5eaec, []int{32} + return fileDescriptor_df6e82b174b5eaec, []int{34} } func (m *ApplicationSyncWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2675,7 +2793,7 @@ func (m *OperationTerminateResponse) Reset() { *m = OperationTerminateRe func (m *OperationTerminateResponse) String() string { return proto.CompactTextString(m) } func (*OperationTerminateResponse) ProtoMessage() {} func (*OperationTerminateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_df6e82b174b5eaec, []int{33} + return fileDescriptor_df6e82b174b5eaec, []int{35} } func (m *OperationTerminateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2722,7 +2840,7 @@ func (m *ResourcesQuery) Reset() { *m = ResourcesQuery{} } func (m *ResourcesQuery) String() string { return proto.CompactTextString(m) } func (*ResourcesQuery) ProtoMessage() {} func (*ResourcesQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_df6e82b174b5eaec, []int{34} + return fileDescriptor_df6e82b174b5eaec, []int{36} } func (m *ResourcesQuery) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2818,7 +2936,7 @@ func (m *ManagedResourcesResponse) Reset() { *m = ManagedResourcesRespon func (m *ManagedResourcesResponse) String() string { return proto.CompactTextString(m) } func (*ManagedResourcesResponse) ProtoMessage() {} func (*ManagedResourcesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_df6e82b174b5eaec, []int{35} + return fileDescriptor_df6e82b174b5eaec, []int{37} } func (m *ManagedResourcesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2868,7 +2986,7 @@ func (m *LinkInfo) Reset() { *m = LinkInfo{} } func (m *LinkInfo) String() string { return proto.CompactTextString(m) } func (*LinkInfo) ProtoMessage() {} func (*LinkInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_df6e82b174b5eaec, []int{36} + return fileDescriptor_df6e82b174b5eaec, []int{38} } func (m *LinkInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2936,7 +3054,7 @@ func (m *LinksResponse) Reset() { *m = LinksResponse{} } func (m *LinksResponse) String() string { return proto.CompactTextString(m) } func (*LinksResponse) ProtoMessage() {} func (*LinksResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_df6e82b174b5eaec, []int{37} + return fileDescriptor_df6e82b174b5eaec, []int{39} } func (m *LinksResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2985,7 +3103,7 @@ func (m *ListAppLinksRequest) Reset() { *m = ListAppLinksRequest{} } func (m *ListAppLinksRequest) String() string { return proto.CompactTextString(m) } func (*ListAppLinksRequest) ProtoMessage() {} func (*ListAppLinksRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_df6e82b174b5eaec, []int{38} + return fileDescriptor_df6e82b174b5eaec, []int{40} } func (m *ListAppLinksRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3058,6 +3176,8 @@ func init() { proto.RegisterType((*ApplicationPatchRequest)(nil), "application.ApplicationPatchRequest") proto.RegisterType((*ApplicationRollbackRequest)(nil), "application.ApplicationRollbackRequest") proto.RegisterType((*ApplicationResourceRequest)(nil), "application.ApplicationResourceRequest") + proto.RegisterType((*ChangeRevisionRequest)(nil), "application.ChangeRevisionRequest") + proto.RegisterType((*ChangeRevisionResponse)(nil), "application.ChangeRevisionResponse") proto.RegisterType((*ApplicationResourcePatchRequest)(nil), "application.ApplicationResourcePatchRequest") proto.RegisterType((*ApplicationResourceDeleteRequest)(nil), "application.ApplicationResourceDeleteRequest") proto.RegisterType((*ResourceActionRunRequest)(nil), "application.ResourceActionRunRequest") @@ -3082,191 +3202,197 @@ func init() { } var fileDescriptor_df6e82b174b5eaec = []byte{ - // 2944 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcf, 0x8f, 0x1c, 0x47, - 0xf5, 0xff, 0xd6, 0xcc, 0xce, 0xee, 0xec, 0x1b, 0xff, 0xac, 0xd8, 0xfe, 0x4e, 0xda, 0x1b, 0xb3, - 0x69, 0xff, 0x9a, 0xac, 0xbd, 0x33, 0xf6, 0x10, 0x20, 0xd9, 0x24, 0x02, 0xc7, 0x76, 0x1c, 0x93, - 0xb5, 0x63, 0x7a, 0x9d, 0x18, 0x85, 0x03, 0xe9, 0x74, 0xd7, 0xce, 0x36, 0x3b, 0xd3, 0xdd, 0xae, - 0xee, 0x19, 0x33, 0x0a, 0xb9, 0x04, 0xe5, 0x02, 0x11, 0x08, 0xc8, 0x01, 0x01, 0x02, 0x14, 0x14, - 0x09, 0x21, 0x10, 0x12, 0x42, 0x11, 0x12, 0x42, 0x82, 0x03, 0x08, 0x0e, 0x91, 0x22, 0xf8, 0x07, - 0x50, 0x84, 0x38, 0xc2, 0x25, 0x67, 0x84, 0xaa, 0xba, 0xaa, 0xbb, 0x6a, 0x7e, 0xf4, 0xcc, 0x32, - 0x03, 0xc9, 0x69, 0xfa, 0x55, 0x57, 0xbf, 0xfa, 0xbc, 0x57, 0xef, 0x57, 0xbd, 0x1a, 0x38, 0x15, - 0x11, 0xda, 0x23, 0xb4, 0x61, 0x87, 0x61, 0xdb, 0x73, 0xec, 0xd8, 0x0b, 0x7c, 0xf5, 0xb9, 0x1e, - 0xd2, 0x20, 0x0e, 0x70, 0x45, 0x19, 0x32, 0x56, 0x5a, 0x41, 0xd0, 0x6a, 0x93, 0x86, 0x1d, 0x7a, - 0x0d, 0xdb, 0xf7, 0x83, 0x98, 0x0f, 0x47, 0xc9, 0x54, 0xc3, 0xdc, 0x7d, 0x24, 0xaa, 0x7b, 0x01, - 0x7f, 0xeb, 0x04, 0x94, 0x34, 0x7a, 0x17, 0x1b, 0x2d, 0xe2, 0x13, 0x6a, 0xc7, 0xc4, 0x15, 0x73, - 0x1e, 0xce, 0xe6, 0x74, 0x6c, 0x67, 0xc7, 0xf3, 0x09, 0xed, 0x37, 0xc2, 0xdd, 0x16, 0x1b, 0x88, - 0x1a, 0x1d, 0x12, 0xdb, 0xa3, 0xbe, 0xda, 0x6c, 0x79, 0xf1, 0x4e, 0xf7, 0xa5, 0xba, 0x13, 0x74, - 0x1a, 0x36, 0x6d, 0x05, 0x21, 0x0d, 0xbe, 0xc0, 0x1f, 0xd6, 0x1d, 0xb7, 0xd1, 0x6b, 0x66, 0x0c, - 0x54, 0x59, 0x7a, 0x17, 0xed, 0x76, 0xb8, 0x63, 0x0f, 0x73, 0xbb, 0x3a, 0x81, 0x1b, 0x25, 0x61, - 0x20, 0x74, 0xc3, 0x1f, 0xbd, 0x38, 0xa0, 0x7d, 0xe5, 0x31, 0x61, 0x63, 0xbe, 0x8f, 0xe0, 0xd0, - 0xa5, 0x6c, 0xbd, 0xcf, 0x74, 0x09, 0xed, 0x63, 0x0c, 0x0b, 0xbe, 0xdd, 0x21, 0x55, 0xb4, 0x8a, - 0x6a, 0xcb, 0x16, 0x7f, 0xc6, 0x55, 0x58, 0xa2, 0x64, 0x9b, 0x92, 0x68, 0xa7, 0x5a, 0xe0, 0xc3, - 0x92, 0xc4, 0x06, 0x94, 0xd9, 0xe2, 0xc4, 0x89, 0xa3, 0x6a, 0x71, 0xb5, 0x58, 0x5b, 0xb6, 0x52, - 0x1a, 0xd7, 0xe0, 0x20, 0x25, 0x51, 0xd0, 0xa5, 0x0e, 0x79, 0x9e, 0xd0, 0xc8, 0x0b, 0xfc, 0xea, - 0x02, 0xff, 0x7a, 0x70, 0x98, 0x71, 0x89, 0x48, 0x9b, 0x38, 0x71, 0x40, 0xab, 0x25, 0x3e, 0x25, - 0xa5, 0x19, 0x1e, 0x06, 0xbc, 0xba, 0x98, 0xe0, 0x61, 0xcf, 0xd8, 0x84, 0x7d, 0x76, 0x18, 0xde, - 0xb4, 0x3b, 0x24, 0x0a, 0x6d, 0x87, 0x54, 0x97, 0xf8, 0x3b, 0x6d, 0x8c, 0x61, 0x16, 0x48, 0xaa, - 0x65, 0x0e, 0x4c, 0x92, 0xe6, 0x65, 0x58, 0xbe, 0x19, 0xb8, 0x64, 0xbc, 0xb8, 0x83, 0xec, 0x0b, - 0xc3, 0xec, 0xcd, 0xdf, 0x23, 0x38, 0x6a, 0x91, 0x9e, 0xc7, 0xf0, 0xdf, 0x20, 0xb1, 0xed, 0xda, - 0xb1, 0x3d, 0xc8, 0xb1, 0x90, 0x72, 0x34, 0xa0, 0x4c, 0xc5, 0xe4, 0x6a, 0x81, 0x8f, 0xa7, 0xf4, - 0xd0, 0x6a, 0xc5, 0x7c, 0x61, 0x12, 0x15, 0x4a, 0x12, 0xaf, 0x42, 0x25, 0xd1, 0xe5, 0x75, 0xdf, - 0x25, 0x5f, 0xe4, 0xda, 0x2b, 0x59, 0xea, 0x10, 0x5e, 0x81, 0xe5, 0x5e, 0xa2, 0xe7, 0xeb, 0x2e, - 0xd7, 0x62, 0xc9, 0xca, 0x06, 0xcc, 0xbf, 0x23, 0x38, 0xa1, 0xd8, 0x80, 0x25, 0x76, 0xe6, 0x6a, - 0x8f, 0xf8, 0x71, 0x34, 0x5e, 0xa0, 0xf3, 0x70, 0x58, 0x6e, 0xe2, 0xa0, 0x9e, 0x86, 0x5f, 0x30, - 0x11, 0xd5, 0x41, 0x29, 0xa2, 0x3a, 0xc6, 0x04, 0x91, 0xf4, 0x73, 0xd7, 0xaf, 0x08, 0x31, 0xd5, - 0xa1, 0x21, 0x45, 0x95, 0xf2, 0x15, 0xb5, 0xa8, 0x29, 0xca, 0x7c, 0x17, 0x41, 0x55, 0x11, 0xf4, - 0x86, 0xed, 0x7b, 0xdb, 0x24, 0x8a, 0xa7, 0xdd, 0x33, 0x34, 0xc7, 0x3d, 0xab, 0xc1, 0xc1, 0x44, - 0xaa, 0x5b, 0xcc, 0x1f, 0x59, 0xfc, 0xa9, 0x96, 0x56, 0x8b, 0xb5, 0xa2, 0x35, 0x38, 0xcc, 0xf6, - 0x4e, 0xae, 0x19, 0x55, 0x17, 0xb9, 0x19, 0x67, 0x03, 0xe6, 0x83, 0xb0, 0xfc, 0x94, 0xd7, 0x26, - 0x97, 0x77, 0xba, 0xfe, 0x2e, 0x3e, 0x02, 0x25, 0x87, 0x3d, 0x70, 0x19, 0xf6, 0x59, 0x09, 0x61, - 0x7e, 0x03, 0xc1, 0x83, 0xe3, 0xa4, 0xbe, 0xe3, 0xc5, 0x3b, 0xec, 0xfb, 0x68, 0x9c, 0xf8, 0xce, - 0x0e, 0x71, 0x76, 0xa3, 0x6e, 0x47, 0x9a, 0xac, 0xa4, 0x67, 0x13, 0xdf, 0x7c, 0x06, 0x8e, 0x2b, - 0x90, 0x9e, 0xb7, 0xdb, 0x9e, 0x6b, 0xc7, 0xc4, 0x22, 0x51, 0x18, 0xf8, 0x11, 0x61, 0x82, 0x10, - 0x4a, 0x03, 0x2a, 0x5c, 0x32, 0x21, 0xf0, 0x31, 0x58, 0x24, 0x7e, 0xec, 0xc5, 0x7d, 0xb1, 0x17, - 0x82, 0x32, 0x5f, 0x04, 0x53, 0x35, 0xdf, 0xa0, 0xdd, 0x0e, 0xba, 0x31, 0xfb, 0x79, 0xc9, 0x76, - 0x76, 0x53, 0x9e, 0x2c, 0x80, 0x25, 0xaf, 0x84, 0x8c, 0x92, 0x64, 0x66, 0xe7, 0x93, 0x7b, 0x96, - 0xea, 0x9c, 0x45, 0x4b, 0x1d, 0x32, 0x7f, 0x82, 0xa0, 0x36, 0x51, 0x85, 0x77, 0xa8, 0x1d, 0x86, - 0x84, 0xe2, 0xa7, 0xa0, 0x74, 0x97, 0xbd, 0xe0, 0xe0, 0x2b, 0xcd, 0x7a, 0x5d, 0xcd, 0x47, 0x13, - 0xb9, 0x3c, 0xfd, 0x7f, 0x56, 0xf2, 0x39, 0xae, 0xcb, 0xdd, 0x2c, 0x70, 0x3e, 0xc7, 0x34, 0x3e, - 0xe9, 0xa6, 0xb3, 0xf9, 0x7c, 0xda, 0x93, 0x8b, 0xb0, 0x10, 0xda, 0x34, 0x36, 0x8f, 0xc2, 0x7d, - 0xba, 0x37, 0x73, 0xf9, 0xcd, 0x5f, 0xeb, 0xc6, 0x7f, 0x99, 0x12, 0xae, 0xf1, 0xbb, 0x5d, 0x12, - 0xc5, 0x78, 0x17, 0xd4, 0x14, 0xc9, 0x15, 0x54, 0x69, 0x5e, 0xaf, 0x67, 0x39, 0xa6, 0x2e, 0x73, - 0x0c, 0x7f, 0xf8, 0xbc, 0xe3, 0xd6, 0x7b, 0xcd, 0x7a, 0xb8, 0xdb, 0xaa, 0xb3, 0x8c, 0xa5, 0x21, - 0x93, 0x19, 0x4b, 0x15, 0xd5, 0x52, 0xb9, 0xb3, 0x7d, 0xec, 0x86, 0x11, 0xa1, 0x31, 0x97, 0xac, - 0x6c, 0x09, 0x8a, 0x99, 0x5b, 0x4f, 0x58, 0x02, 0x37, 0xa7, 0xb2, 0x95, 0xd2, 0xe6, 0x6f, 0x74, - 0xf4, 0xcf, 0x85, 0xee, 0x07, 0x85, 0x5e, 0x45, 0x59, 0xd0, 0x51, 0xaa, 0x06, 0x5f, 0xd4, 0x0d, - 0xfe, 0x97, 0x3a, 0xfe, 0x2b, 0xa4, 0x4d, 0x32, 0xfc, 0xa3, 0x7c, 0xaf, 0x0a, 0x4b, 0x8e, 0x1d, - 0x39, 0xb6, 0x2b, 0x57, 0x91, 0x24, 0x8b, 0xbb, 0x21, 0x0d, 0x42, 0xbb, 0xc5, 0x39, 0xdd, 0x0a, - 0xda, 0x9e, 0xd3, 0x17, 0xcb, 0x0d, 0xbf, 0x18, 0xf2, 0xd3, 0x85, 0x7c, 0x3f, 0x2d, 0xe9, 0xb0, - 0x4f, 0x42, 0x65, 0xab, 0xef, 0x3b, 0xcf, 0x86, 0x49, 0x2c, 0x3a, 0x02, 0x25, 0x2f, 0x26, 0x9d, - 0xa8, 0x8a, 0x78, 0x1c, 0x4a, 0x08, 0xf3, 0x5f, 0x25, 0x38, 0xa6, 0xc8, 0xc6, 0x3e, 0xc8, 0x93, - 0x2c, 0x2f, 0xa8, 0x1e, 0x83, 0x45, 0x97, 0xf6, 0xad, 0xae, 0x2f, 0x0c, 0x40, 0x50, 0x6c, 0xe1, - 0x90, 0x76, 0xfd, 0x04, 0x7e, 0xd9, 0x4a, 0x08, 0xbc, 0x0d, 0xe5, 0x28, 0x66, 0x45, 0x51, 0xab, - 0xcf, 0x81, 0x57, 0x9a, 0x9f, 0x9e, 0x6d, 0xd3, 0x19, 0xf4, 0x2d, 0xc1, 0xd1, 0x4a, 0x79, 0xe3, - 0xbb, 0x2c, 0x04, 0x27, 0x71, 0x39, 0xaa, 0x2e, 0xad, 0x16, 0x6b, 0x95, 0xe6, 0xd6, 0xec, 0x0b, - 0x3d, 0x1b, 0xb2, 0x82, 0x4e, 0x49, 0xb8, 0x56, 0xb6, 0x0a, 0x8b, 0xfa, 0x1d, 0x11, 0x1f, 0x22, - 0x51, 0xbc, 0x64, 0x03, 0xf8, 0xb3, 0x50, 0xf2, 0xfc, 0xed, 0x20, 0xaa, 0x2e, 0x73, 0x30, 0x4f, - 0xce, 0x06, 0xe6, 0xba, 0xbf, 0x1d, 0x58, 0x09, 0x43, 0x7c, 0x17, 0xf6, 0x53, 0x12, 0xd3, 0xbe, - 0xd4, 0x42, 0x15, 0xb8, 0x5e, 0x9f, 0x99, 0x6d, 0x05, 0x4b, 0x65, 0x69, 0xe9, 0x2b, 0xe0, 0x0d, - 0xa8, 0x44, 0x99, 0x8d, 0x55, 0x2b, 0x7c, 0xc1, 0xaa, 0xc6, 0x48, 0xb1, 0x41, 0x4b, 0x9d, 0x3c, - 0x64, 0xdd, 0xfb, 0xf2, 0xad, 0x7b, 0xff, 0xc4, 0x24, 0x7c, 0x60, 0x8a, 0x24, 0x7c, 0x70, 0x30, - 0x09, 0x7f, 0x15, 0xc1, 0xca, 0x70, 0x3a, 0xe3, 0x3b, 0xfb, 0xbf, 0x0f, 0x50, 0xe6, 0x3b, 0x7a, - 0xbe, 0x1f, 0xca, 0x87, 0xe3, 0x3d, 0x73, 0x05, 0x96, 0x7d, 0xa5, 0x92, 0x63, 0x2f, 0xb2, 0x01, - 0x5e, 0x9d, 0x25, 0xbc, 0x44, 0x01, 0x57, 0xe0, 0xd5, 0x59, 0x36, 0x84, 0xd7, 0xe0, 0x90, 0x42, - 0xca, 0x78, 0xc3, 0xa6, 0x0d, 0x8d, 0xf3, 0x93, 0x81, 0x40, 0x26, 0x83, 0x41, 0x89, 0x27, 0xde, - 0xc1, 0x61, 0xf3, 0x9f, 0xba, 0x76, 0x93, 0xd0, 0xbf, 0x15, 0x92, 0xdc, 0x20, 0x63, 0xc3, 0x42, - 0x14, 0x12, 0x87, 0x4b, 0x51, 0x69, 0xde, 0x98, 0x9b, 0xaa, 0xf9, 0xba, 0x9c, 0x75, 0x5e, 0xba, - 0x9a, 0x31, 0xea, 0xfe, 0x00, 0xc1, 0xff, 0x2b, 0x6b, 0xde, 0xb2, 0x63, 0x67, 0x27, 0x4f, 0x58, - 0x16, 0x1d, 0xd9, 0x1c, 0xb1, 0x67, 0x09, 0xc1, 0x76, 0x93, 0x3f, 0xdc, 0xee, 0x87, 0x72, 0xb7, - 0xb2, 0x81, 0x19, 0x2b, 0xe9, 0x9f, 0x22, 0x30, 0x06, 0x6c, 0x6c, 0x92, 0x71, 0x1d, 0x80, 0x82, - 0xe7, 0x8a, 0xe2, 0xaa, 0xe0, 0xb9, 0x7b, 0x0c, 0xf5, 0x83, 0x70, 0x17, 0xf3, 0xe1, 0x2e, 0xe9, - 0x70, 0xdf, 0x1f, 0x80, 0x2b, 0x03, 0xee, 0xf4, 0xbe, 0x80, 0x74, 0x5f, 0x18, 0x3e, 0xcd, 0x14, - 0x86, 0x4e, 0x33, 0x55, 0x58, 0xea, 0xa5, 0x67, 0x5e, 0x5e, 0x70, 0x0a, 0x92, 0x89, 0xd8, 0xa2, - 0x41, 0x37, 0x14, 0x4a, 0x4f, 0x08, 0x86, 0x62, 0xd7, 0xf3, 0xd9, 0xf9, 0x8c, 0xa3, 0x60, 0xcf, - 0x7b, 0x3f, 0xe5, 0x6a, 0x62, 0xff, 0xac, 0x00, 0x1f, 0x19, 0x21, 0xf6, 0x44, 0x7b, 0xfa, 0x70, - 0xc8, 0x9e, 0x5a, 0xf5, 0xd2, 0x58, 0xab, 0x2e, 0x4f, 0xb2, 0xea, 0xe5, 0x7c, 0x7d, 0x81, 0xae, - 0xaf, 0x1f, 0x17, 0x60, 0x75, 0x84, 0xbe, 0x26, 0x17, 0x6b, 0x1f, 0x1a, 0x85, 0x6d, 0x07, 0x54, - 0x58, 0x49, 0xd9, 0x4a, 0x08, 0xe6, 0x67, 0x01, 0x0d, 0x77, 0x6c, 0x9f, 0x5b, 0x47, 0xd9, 0x12, - 0xd4, 0x8c, 0xaa, 0xfa, 0x4a, 0x01, 0xaa, 0x52, 0x3f, 0x97, 0x1c, 0xae, 0xad, 0xae, 0xff, 0xe1, - 0x57, 0xd1, 0x31, 0x58, 0xb4, 0x39, 0x5a, 0x61, 0x54, 0x82, 0x1a, 0x52, 0x46, 0x39, 0x5f, 0x19, - 0xcb, 0xba, 0x32, 0x5e, 0x43, 0x70, 0x5c, 0x57, 0x46, 0xb4, 0xe9, 0x45, 0x71, 0x7a, 0xf4, 0xdc, - 0x86, 0xa5, 0x64, 0x9d, 0xa4, 0x70, 0xae, 0x34, 0x37, 0x67, 0x2d, 0xa7, 0x34, 0xc5, 0x4b, 0xe6, - 0xe6, 0xa3, 0xda, 0xa9, 0x3a, 0x8b, 0x72, 0x02, 0x86, 0x01, 0x65, 0x59, 0x42, 0x8a, 0xad, 0x49, - 0x69, 0xf3, 0xb5, 0x05, 0x3d, 0xe5, 0x04, 0xee, 0x66, 0xd0, 0xca, 0x69, 0xfe, 0xe4, 0x6f, 0x27, - 0x53, 0x55, 0xe0, 0x2a, 0x7d, 0x1e, 0x49, 0xb2, 0xef, 0x9c, 0xc0, 0x8f, 0x6d, 0xcf, 0x27, 0x54, - 0x64, 0xc5, 0x6c, 0x80, 0x6d, 0x43, 0xe4, 0xf9, 0x0e, 0xd9, 0x22, 0x4e, 0xe0, 0xbb, 0x11, 0xdf, - 0xcf, 0xa2, 0xa5, 0x8d, 0xe1, 0xa7, 0x61, 0x99, 0xd3, 0xb7, 0xbd, 0x4e, 0x92, 0x06, 0x2a, 0xcd, - 0xb5, 0x7a, 0xd2, 0x90, 0xad, 0xab, 0x0d, 0xd9, 0x4c, 0x87, 0x1d, 0x12, 0xdb, 0xf5, 0xde, 0xc5, - 0x3a, 0xfb, 0xc2, 0xca, 0x3e, 0x66, 0x58, 0x62, 0xdb, 0x6b, 0x6f, 0x7a, 0x3e, 0x2f, 0xeb, 0xd9, - 0x52, 0xd9, 0x00, 0x33, 0x95, 0x6d, 0x56, 0x89, 0xdc, 0x93, 0x7e, 0x93, 0x50, 0xec, 0xab, 0xae, - 0x1f, 0x7b, 0x6d, 0xbe, 0x7e, 0x62, 0x08, 0xd9, 0x00, 0xff, 0xca, 0x6b, 0xc7, 0x84, 0x0a, 0x87, - 0x11, 0x54, 0x6a, 0x8c, 0x95, 0xa4, 0xc7, 0x28, 0xfd, 0x35, 0x31, 0xdb, 0x7d, 0xaa, 0xd9, 0x0e, - 0xba, 0xc2, 0xfe, 0x11, 0x8d, 0x32, 0xde, 0x72, 0x25, 0x3d, 0x2f, 0xe8, 0xb2, 0x8a, 0x95, 0x97, - 0x1e, 0x92, 0x1e, 0x32, 0xe5, 0x83, 0xf9, 0xa6, 0x7c, 0x48, 0x37, 0xe5, 0xdf, 0x22, 0x28, 0x6f, - 0x06, 0xad, 0xab, 0x7e, 0x4c, 0xfb, 0xfc, 0x0c, 0x1a, 0xf8, 0x31, 0xf1, 0xd3, 0x96, 0x89, 0x20, - 0xd9, 0x26, 0xc4, 0x5e, 0x87, 0x6c, 0xc5, 0x76, 0x27, 0x14, 0x35, 0xd6, 0x9e, 0x36, 0x21, 0xfd, - 0x98, 0x29, 0xa6, 0x6d, 0x47, 0x31, 0xf7, 0xf8, 0xb2, 0xc5, 0x9f, 0x99, 0x08, 0xe9, 0x84, 0xad, - 0x98, 0x0a, 0x77, 0xd7, 0xc6, 0x54, 0x13, 0x2b, 0x25, 0xd8, 0x04, 0x69, 0x76, 0xe0, 0xfe, 0xf4, - 0x68, 0x75, 0x9b, 0xd0, 0x8e, 0xe7, 0xdb, 0xf9, 0xd1, 0x7b, 0x8a, 0x5e, 0x6f, 0xce, 0xc9, 0x3e, - 0xd0, 0x9c, 0x8e, 0x9d, 0x54, 0xee, 0x78, 0xbe, 0x1b, 0xdc, 0xcb, 0x71, 0x9e, 0xd9, 0x16, 0xfc, - 0xb3, 0xde, 0xae, 0x55, 0x56, 0x4c, 0x3d, 0xfd, 0x69, 0xd8, 0xcf, 0x62, 0x42, 0x8f, 0x88, 0x17, - 0x22, 0xec, 0x98, 0xe3, 0x5a, 0x51, 0x19, 0x0f, 0x4b, 0xff, 0x10, 0x6f, 0xc2, 0x41, 0x3b, 0x8a, - 0xbc, 0x96, 0x4f, 0x5c, 0xc9, 0xab, 0x30, 0x35, 0xaf, 0xc1, 0x4f, 0x93, 0xa6, 0x06, 0x9f, 0x21, - 0xf6, 0x5b, 0x92, 0xe6, 0x97, 0x11, 0x1c, 0x1d, 0xc9, 0x24, 0xf5, 0x1c, 0xa4, 0x84, 0x71, 0x03, - 0xca, 0x91, 0xb3, 0x43, 0xdc, 0x6e, 0x5b, 0x9e, 0x53, 0x52, 0x9a, 0xbd, 0x73, 0xbb, 0xc9, 0xee, - 0x8b, 0x34, 0x92, 0xd2, 0xf8, 0x04, 0x40, 0xc7, 0xf6, 0xbb, 0x76, 0x9b, 0x43, 0x58, 0xe0, 0x10, - 0x94, 0x11, 0x73, 0x05, 0x8c, 0x51, 0xa6, 0x23, 0x3a, 0x68, 0xff, 0x40, 0x70, 0x40, 0x06, 0x55, - 0xb1, 0xbb, 0x35, 0x38, 0xa8, 0xa8, 0xe1, 0x66, 0xb6, 0xd1, 0x83, 0xc3, 0x13, 0x02, 0xa6, 0xb4, - 0x92, 0xa2, 0x7e, 0xe3, 0xd2, 0xd3, 0xee, 0x4c, 0xa6, 0xce, 0x77, 0x68, 0x4e, 0xf5, 0xe3, 0x97, - 0xa0, 0x7a, 0xc3, 0xf6, 0xed, 0x16, 0x71, 0x53, 0xb1, 0x53, 0x13, 0x7b, 0x51, 0x6d, 0x05, 0xcd, - 0xdc, 0x78, 0x49, 0x4b, 0x2d, 0x6f, 0x7b, 0x5b, 0xb6, 0x95, 0x28, 0x94, 0x37, 0x3d, 0x7f, 0xf7, - 0xba, 0xbf, 0x1d, 0x30, 0x89, 0x63, 0x2f, 0x6e, 0x4b, 0xed, 0x26, 0x04, 0x3e, 0x04, 0xc5, 0x2e, - 0x6d, 0x0b, 0x0b, 0x60, 0x8f, 0xec, 0x8c, 0xea, 0x92, 0xc8, 0xa1, 0x5e, 0x28, 0xf6, 0x9f, 0xdf, - 0x20, 0x28, 0x43, 0x6c, 0x1f, 0x3c, 0x27, 0xf0, 0x2f, 0xb7, 0xed, 0x28, 0x92, 0x09, 0x28, 0x1d, - 0x30, 0x1f, 0x87, 0xfd, 0x6c, 0xcd, 0x4c, 0xcc, 0x73, 0xba, 0x98, 0x47, 0x35, 0xf8, 0x12, 0x9e, - 0x44, 0x6c, 0xc3, 0x7d, 0x2c, 0xef, 0x5f, 0x0a, 0x43, 0xc1, 0x64, 0xca, 0x72, 0xa8, 0x38, 0x2a, - 0x7f, 0x8e, 0x6c, 0x9c, 0x37, 0x7f, 0x71, 0x06, 0xb0, 0xea, 0x27, 0x84, 0xf6, 0x3c, 0x87, 0xe0, - 0x6f, 0x22, 0x58, 0x60, 0x4b, 0xe3, 0x07, 0xc6, 0xb9, 0x25, 0xb7, 0x57, 0x63, 0x7e, 0x07, 0x61, - 0xb6, 0x9a, 0xb9, 0xf2, 0xea, 0x5f, 0xfe, 0xf6, 0xad, 0xc2, 0x31, 0x7c, 0x84, 0x5f, 0x97, 0xf6, - 0x2e, 0xaa, 0x57, 0x97, 0x11, 0x7e, 0x1d, 0x01, 0x16, 0x75, 0x90, 0x72, 0xa1, 0x84, 0xcf, 0x8d, - 0x83, 0x38, 0xe2, 0xe2, 0xc9, 0x78, 0x40, 0xc9, 0x2a, 0x75, 0x27, 0xa0, 0x84, 0xe5, 0x10, 0x3e, - 0x81, 0x03, 0x58, 0xe3, 0x00, 0x4e, 0x61, 0x73, 0x14, 0x80, 0xc6, 0xcb, 0x4c, 0xa3, 0xaf, 0x34, - 0x48, 0xb2, 0xee, 0x9b, 0x08, 0x4a, 0x77, 0xf8, 0x19, 0x62, 0x82, 0x92, 0xb6, 0xe6, 0xa6, 0x24, - 0xbe, 0x1c, 0x47, 0x6b, 0x9e, 0xe4, 0x48, 0x1f, 0xc0, 0xc7, 0x25, 0xd2, 0x28, 0xa6, 0xc4, 0xee, - 0x68, 0x80, 0x2f, 0x20, 0xfc, 0x16, 0x82, 0xc5, 0xa4, 0x35, 0x8f, 0x4f, 0x8f, 0x43, 0xa9, 0xb5, - 0xee, 0x8d, 0xf9, 0xb5, 0x91, 0xcc, 0x87, 0x38, 0xc6, 0x93, 0xe6, 0xc8, 0xed, 0xdc, 0xd0, 0xba, - 0xe0, 0x6f, 0x20, 0x28, 0x5e, 0x23, 0x13, 0xed, 0x6d, 0x8e, 0xe0, 0x86, 0x14, 0x38, 0x62, 0xab, - 0xf1, 0x8f, 0x10, 0xdc, 0x7f, 0x8d, 0xc4, 0xa3, 0xd3, 0x23, 0xae, 0x4d, 0xce, 0x59, 0xc2, 0xec, - 0xce, 0x4d, 0x31, 0x33, 0xcd, 0x0b, 0x0d, 0x8e, 0xec, 0x21, 0x7c, 0x36, 0xcf, 0x08, 0xa3, 0xbe, - 0xef, 0xdc, 0x13, 0x38, 0xfe, 0x84, 0xe0, 0xd0, 0xe0, 0xc5, 0x31, 0xd6, 0x13, 0xea, 0xc8, 0x7b, - 0x65, 0xe3, 0xe6, 0xac, 0x51, 0x56, 0x67, 0x6a, 0x5e, 0xe2, 0xc8, 0x1f, 0xc3, 0x8f, 0xe6, 0x21, - 0x4f, 0xfb, 0x9c, 0x8d, 0x97, 0xe5, 0xe3, 0x2b, 0xfc, 0x4f, 0x0e, 0x1c, 0xf6, 0x3b, 0x08, 0x8e, - 0x48, 0xbe, 0x97, 0x77, 0x6c, 0x1a, 0x5f, 0x21, 0xac, 0x86, 0x8e, 0xa6, 0x92, 0x67, 0xc6, 0xac, - 0xa1, 0xae, 0x67, 0x5e, 0xe5, 0xb2, 0x7c, 0x12, 0x3f, 0xb1, 0x67, 0x59, 0x1c, 0xc6, 0xc6, 0x15, - 0xb0, 0x5f, 0x45, 0xb0, 0xef, 0x1a, 0x89, 0x6f, 0xa4, 0xbd, 0xf6, 0xd3, 0x53, 0xdd, 0xdf, 0x19, - 0x2b, 0x75, 0xe5, 0xbf, 0x15, 0xf2, 0x55, 0x6a, 0x22, 0xeb, 0x1c, 0xdc, 0x59, 0x7c, 0x3a, 0x0f, - 0x5c, 0xd6, 0xdf, 0x7f, 0x13, 0xc1, 0x51, 0x15, 0x44, 0x76, 0x4d, 0xfb, 0xb1, 0xbd, 0xdd, 0x26, - 0x8a, 0x3b, 0xc9, 0x09, 0xe8, 0x9a, 0x1c, 0xdd, 0x79, 0x73, 0xb4, 0x01, 0x77, 0x86, 0x50, 0x6c, - 0xa0, 0xb5, 0x1a, 0xc2, 0xbf, 0x43, 0xb0, 0x98, 0x34, 0x63, 0xc7, 0xeb, 0x48, 0xbb, 0xa7, 0x9b, - 0x67, 0x34, 0x10, 0xbb, 0x6d, 0x5c, 0x18, 0xad, 0x50, 0xf5, 0x7b, 0x69, 0xaa, 0x75, 0xae, 0x65, - 0x3d, 0x8c, 0xbd, 0x8d, 0x00, 0xb2, 0x86, 0x32, 0x7e, 0x28, 0x5f, 0x0e, 0xa5, 0xe9, 0x6c, 0xcc, - 0xb7, 0xa5, 0x6c, 0xd6, 0xb9, 0x3c, 0x35, 0x63, 0x35, 0x37, 0x86, 0x84, 0xc4, 0xd9, 0x48, 0x9a, - 0xcf, 0x3f, 0x44, 0x50, 0xe2, 0x7d, 0x3c, 0x7c, 0x6a, 0x1c, 0x66, 0xb5, 0xcd, 0x37, 0x4f, 0xd5, - 0x9f, 0xe1, 0x50, 0x57, 0x9b, 0x79, 0x81, 0x78, 0x03, 0xad, 0xe1, 0x1e, 0x2c, 0x26, 0x9d, 0xb3, - 0xf1, 0xe6, 0xa1, 0x75, 0xd6, 0x8c, 0xd5, 0x9c, 0xc2, 0x20, 0x31, 0x54, 0x91, 0x03, 0xd6, 0x26, - 0xe5, 0x80, 0x05, 0x16, 0xa6, 0xf1, 0xc9, 0xbc, 0x20, 0xfe, 0x5f, 0x50, 0xcc, 0x39, 0x8e, 0xee, - 0xb4, 0xb9, 0x3a, 0x29, 0x0f, 0x30, 0xed, 0x7c, 0x1b, 0xc1, 0xa1, 0xc1, 0xe2, 0x1a, 0x1f, 0x1f, - 0x88, 0x99, 0xea, 0x59, 0xc3, 0xd0, 0xb5, 0x38, 0xae, 0x30, 0x37, 0x3f, 0xc5, 0x51, 0x6c, 0xe0, - 0x47, 0x26, 0x7a, 0xc6, 0x4d, 0x19, 0x75, 0x18, 0xa3, 0xf5, 0xec, 0xee, 0xf1, 0x57, 0x08, 0xf6, - 0x49, 0xbe, 0xb7, 0x29, 0x21, 0xf9, 0xb0, 0xe6, 0xe7, 0x08, 0x6c, 0x2d, 0xf3, 0x71, 0x0e, 0xff, - 0xe3, 0xf8, 0xe1, 0x29, 0xe1, 0x4b, 0xd8, 0xeb, 0x31, 0x43, 0xfa, 0x07, 0x04, 0x87, 0xef, 0x24, - 0x76, 0xff, 0x01, 0xe1, 0xbf, 0xcc, 0xf1, 0x3f, 0x81, 0x1f, 0xcb, 0xa9, 0xf3, 0x26, 0x89, 0x71, - 0x01, 0xe1, 0x9f, 0x23, 0x28, 0xcb, 0x5b, 0x15, 0x7c, 0x76, 0xac, 0x63, 0xe8, 0xf7, 0x2e, 0xf3, - 0x34, 0x66, 0x51, 0xd4, 0x98, 0xa7, 0x72, 0xd3, 0xa9, 0x58, 0x9f, 0x19, 0xf4, 0x1b, 0x08, 0x70, - 0x7a, 0x66, 0x4e, 0x4f, 0xd1, 0xf8, 0x8c, 0xb6, 0xd4, 0xd8, 0xc6, 0x8c, 0x71, 0x76, 0xe2, 0x3c, - 0x3d, 0x95, 0xae, 0xe5, 0xa6, 0xd2, 0x20, 0x5d, 0xff, 0x6b, 0x08, 0x2a, 0xd7, 0x48, 0x7a, 0x06, - 0xc9, 0xd1, 0xa5, 0x7e, 0x29, 0x64, 0xd4, 0x26, 0x4f, 0x14, 0x88, 0xce, 0x73, 0x44, 0x67, 0x70, - 0xbe, 0xaa, 0x24, 0x80, 0xef, 0x21, 0xd8, 0x7f, 0x4b, 0x35, 0x51, 0x7c, 0x7e, 0xd2, 0x4a, 0x5a, - 0x24, 0x9f, 0x1e, 0xd7, 0x47, 0x39, 0xae, 0x75, 0x73, 0x2a, 0x5c, 0x1b, 0xe2, 0x7e, 0xe5, 0xfb, - 0x28, 0x39, 0xc4, 0x0e, 0xf4, 0xb3, 0xff, 0x53, 0xbd, 0xe5, 0xb4, 0xc5, 0xcd, 0x87, 0x39, 0xbe, - 0x3a, 0x3e, 0x3f, 0x0d, 0xbe, 0x86, 0x68, 0x72, 0xe3, 0xef, 0x20, 0x38, 0xcc, 0xef, 0x1a, 0x54, - 0xc6, 0x03, 0x29, 0x66, 0xdc, 0xcd, 0xc4, 0x14, 0x29, 0x46, 0xc4, 0x1f, 0x73, 0x4f, 0xa0, 0x36, - 0xe4, 0x3d, 0xc2, 0xdb, 0x08, 0x0c, 0xe9, 0x94, 0xc3, 0x77, 0xf0, 0xb8, 0x9e, 0xe7, 0xc8, 0xc3, - 0x97, 0xf4, 0x46, 0x63, 0xea, 0xf9, 0x02, 0xfd, 0x27, 0x38, 0xfa, 0x8b, 0x13, 0xd0, 0x27, 0x1f, - 0xaf, 0xab, 0xde, 0xfb, 0x75, 0x04, 0x07, 0x64, 0x36, 0x16, 0x66, 0xb9, 0x3e, 0x69, 0xc7, 0xf7, - 0x9a, 0xbd, 0x85, 0x9f, 0xac, 0x4d, 0xe7, 0x27, 0xdf, 0x45, 0x70, 0x58, 0xfe, 0x31, 0x70, 0x8b, - 0x3a, 0x97, 0x7c, 0xf7, 0x4a, 0x14, 0x8f, 0xaf, 0xd0, 0x86, 0xfe, 0x74, 0x31, 0xde, 0x51, 0x06, - 0xff, 0x6e, 0x68, 0x5e, 0xe4, 0xc0, 0xce, 0x99, 0x2b, 0x23, 0x80, 0xad, 0xcb, 0x3b, 0x7d, 0xbd, - 0x70, 0x7c, 0x0b, 0xc1, 0x92, 0xb8, 0x24, 0xc9, 0xa9, 0xc0, 0x94, 0x5b, 0x14, 0x63, 0xa0, 0x75, - 0x24, 0x7a, 0xec, 0xe6, 0xe7, 0xf8, 0xda, 0xcf, 0xe1, 0x46, 0x9e, 0x52, 0xc2, 0xc0, 0x8d, 0x1a, - 0x2f, 0x8b, 0x06, 0xf7, 0x2b, 0x8d, 0x76, 0xd0, 0x8a, 0x5e, 0x30, 0x71, 0x6e, 0x9d, 0xc1, 0xe6, - 0x5c, 0x40, 0x38, 0x86, 0x65, 0xe6, 0x73, 0xbc, 0x1f, 0x85, 0x57, 0x07, 0xba, 0x57, 0x43, 0xad, - 0x2a, 0xc3, 0x18, 0xea, 0x6f, 0x65, 0x85, 0x85, 0xe8, 0x0e, 0xe0, 0x07, 0x73, 0x97, 0xe5, 0x0b, - 0xbd, 0x8e, 0xe0, 0xb0, 0x1a, 0x44, 0x92, 0xe5, 0xa7, 0x0e, 0x21, 0x79, 0x28, 0xc4, 0x59, 0x05, - 0xaf, 0x4d, 0xe5, 0x9f, 0x1c, 0xce, 0x93, 0x4f, 0xfd, 0xf1, 0xbd, 0x13, 0xe8, 0xdd, 0xf7, 0x4e, - 0xa0, 0xbf, 0xbe, 0x77, 0x02, 0xbd, 0xf0, 0xc8, 0x74, 0xff, 0xc3, 0x77, 0xda, 0x1e, 0xf1, 0x63, - 0x95, 0xfd, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x14, 0x58, 0x94, 0x48, 0x6d, 0x30, 0x00, 0x00, + // 3034 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5b, 0xcd, 0x8f, 0x1c, 0x47, + 0x15, 0xa7, 0x66, 0x77, 0x76, 0x67, 0xdf, 0xd8, 0x5e, 0xbb, 0x62, 0x2f, 0x9d, 0xf6, 0xc6, 0x6c, + 0xda, 0x76, 0x3c, 0x59, 0x7b, 0x67, 0xec, 0xc5, 0x40, 0xb2, 0x49, 0x04, 0xce, 0xda, 0x71, 0x4c, + 0xd6, 0x8e, 0xe9, 0x75, 0x62, 0x14, 0x0e, 0xa4, 0xd3, 0x5d, 0x3b, 0xdb, 0xec, 0x4c, 0x77, 0xbb, + 0xba, 0x67, 0xcc, 0x2a, 0xe4, 0x12, 0x14, 0x09, 0x41, 0x04, 0x02, 0x72, 0x40, 0x80, 0x00, 0x05, + 0x45, 0x42, 0x08, 0xc4, 0x05, 0x45, 0x48, 0x28, 0x12, 0x1c, 0x40, 0x70, 0x88, 0x14, 0xc1, 0x3f, + 0x80, 0x22, 0xc4, 0x11, 0x2e, 0x39, 0x23, 0x54, 0xd5, 0x55, 0xdd, 0x55, 0xf3, 0xd1, 0x33, 0xcb, + 0x2c, 0xc4, 0xa7, 0xed, 0x57, 0x5d, 0xfd, 0xea, 0xf7, 0x5e, 0xbd, 0xaf, 0x7a, 0x35, 0x0b, 0xa7, + 0x62, 0x42, 0xbb, 0x84, 0x36, 0x9c, 0x28, 0x6a, 0xf9, 0xae, 0x93, 0xf8, 0x61, 0xa0, 0x3e, 0xd7, + 0x23, 0x1a, 0x26, 0x21, 0xae, 0x2a, 0x43, 0xe6, 0x62, 0x33, 0x0c, 0x9b, 0x2d, 0xd2, 0x70, 0x22, + 0xbf, 0xe1, 0x04, 0x41, 0x98, 0xf0, 0xe1, 0x38, 0x9d, 0x6a, 0x5a, 0x3b, 0x8f, 0xc4, 0x75, 0x3f, + 0xe4, 0x6f, 0xdd, 0x90, 0x92, 0x46, 0xf7, 0x42, 0xa3, 0x49, 0x02, 0x42, 0x9d, 0x84, 0x78, 0x62, + 0xce, 0xc5, 0x7c, 0x4e, 0xdb, 0x71, 0xb7, 0xfd, 0x80, 0xd0, 0xdd, 0x46, 0xb4, 0xd3, 0x64, 0x03, + 0x71, 0xa3, 0x4d, 0x12, 0x67, 0xd0, 0x57, 0x1b, 0x4d, 0x3f, 0xd9, 0xee, 0xbc, 0x54, 0x77, 0xc3, + 0x76, 0xc3, 0xa1, 0xcd, 0x30, 0xa2, 0xe1, 0x97, 0xf8, 0xc3, 0x8a, 0xeb, 0x35, 0xba, 0xab, 0x39, + 0x03, 0x55, 0x96, 0xee, 0x05, 0xa7, 0x15, 0x6d, 0x3b, 0xfd, 0xdc, 0xae, 0x8c, 0xe0, 0x46, 0x49, + 0x14, 0x0a, 0xdd, 0xf0, 0x47, 0x3f, 0x09, 0xe9, 0xae, 0xf2, 0x98, 0xb2, 0xb1, 0x3e, 0x40, 0x70, + 0xf8, 0x52, 0xbe, 0xde, 0xe7, 0x3a, 0x84, 0xee, 0x62, 0x0c, 0xd3, 0x81, 0xd3, 0x26, 0x06, 0x5a, + 0x42, 0xb5, 0x39, 0x9b, 0x3f, 0x63, 0x03, 0x66, 0x29, 0xd9, 0xa2, 0x24, 0xde, 0x36, 0x4a, 0x7c, + 0x58, 0x92, 0xd8, 0x84, 0x0a, 0x5b, 0x9c, 0xb8, 0x49, 0x6c, 0x4c, 0x2d, 0x4d, 0xd5, 0xe6, 0xec, + 0x8c, 0xc6, 0x35, 0x98, 0xa7, 0x24, 0x0e, 0x3b, 0xd4, 0x25, 0xcf, 0x13, 0x1a, 0xfb, 0x61, 0x60, + 0x4c, 0xf3, 0xaf, 0x7b, 0x87, 0x19, 0x97, 0x98, 0xb4, 0x88, 0x9b, 0x84, 0xd4, 0x28, 0xf3, 0x29, + 0x19, 0xcd, 0xf0, 0x30, 0xe0, 0xc6, 0x4c, 0x8a, 0x87, 0x3d, 0x63, 0x0b, 0x0e, 0x38, 0x51, 0x74, + 0xc3, 0x69, 0x93, 0x38, 0x72, 0x5c, 0x62, 0xcc, 0xf2, 0x77, 0xda, 0x18, 0xc3, 0x2c, 0x90, 0x18, + 0x15, 0x0e, 0x4c, 0x92, 0xd6, 0x3a, 0xcc, 0xdd, 0x08, 0x3d, 0x32, 0x5c, 0xdc, 0x5e, 0xf6, 0xa5, + 0x7e, 0xf6, 0xd6, 0x1f, 0x10, 0x1c, 0xb3, 0x49, 0xd7, 0x67, 0xf8, 0xaf, 0x93, 0xc4, 0xf1, 0x9c, + 0xc4, 0xe9, 0xe5, 0x58, 0xca, 0x38, 0x9a, 0x50, 0xa1, 0x62, 0xb2, 0x51, 0xe2, 0xe3, 0x19, 0xdd, + 0xb7, 0xda, 0x54, 0xb1, 0x30, 0xa9, 0x0a, 0x25, 0x89, 0x97, 0xa0, 0x9a, 0xea, 0xf2, 0x5a, 0xe0, + 0x91, 0x2f, 0x73, 0xed, 0x95, 0x6d, 0x75, 0x08, 0x2f, 0xc2, 0x5c, 0x37, 0xd5, 0xf3, 0x35, 0x8f, + 0x6b, 0xb1, 0x6c, 0xe7, 0x03, 0xd6, 0x3f, 0x10, 0x9c, 0x50, 0x6c, 0xc0, 0x16, 0x3b, 0x73, 0xa5, + 0x4b, 0x82, 0x24, 0x1e, 0x2e, 0xd0, 0x39, 0x38, 0x22, 0x37, 0xb1, 0x57, 0x4f, 0xfd, 0x2f, 0x98, + 0x88, 0xea, 0xa0, 0x14, 0x51, 0x1d, 0x63, 0x82, 0x48, 0xfa, 0xb9, 0x6b, 0x97, 0x85, 0x98, 0xea, + 0x50, 0x9f, 0xa2, 0xca, 0xc5, 0x8a, 0x9a, 0xd1, 0x14, 0x65, 0xbd, 0x87, 0xc0, 0x50, 0x04, 0xbd, + 0xee, 0x04, 0xfe, 0x16, 0x89, 0x93, 0x71, 0xf7, 0x0c, 0xed, 0xe3, 0x9e, 0xd5, 0x60, 0x3e, 0x95, + 0xea, 0x26, 0xf3, 0x47, 0x16, 0x7f, 0x8c, 0xf2, 0xd2, 0x54, 0x6d, 0xca, 0xee, 0x1d, 0x66, 0x7b, + 0x27, 0xd7, 0x8c, 0x8d, 0x19, 0x6e, 0xc6, 0xf9, 0x80, 0xf5, 0x20, 0xcc, 0x3d, 0xe5, 0xb7, 0xc8, + 0xfa, 0x76, 0x27, 0xd8, 0xc1, 0x47, 0xa1, 0xec, 0xb2, 0x07, 0x2e, 0xc3, 0x01, 0x3b, 0x25, 0xac, + 0x6f, 0x23, 0x78, 0x70, 0x98, 0xd4, 0xb7, 0xfd, 0x64, 0x9b, 0x7d, 0x1f, 0x0f, 0x13, 0xdf, 0xdd, + 0x26, 0xee, 0x4e, 0xdc, 0x69, 0x4b, 0x93, 0x95, 0xf4, 0x64, 0xe2, 0x5b, 0xcf, 0xc0, 0x71, 0x05, + 0xd2, 0xf3, 0x4e, 0xcb, 0xf7, 0x9c, 0x84, 0xd8, 0x24, 0x8e, 0xc2, 0x20, 0x26, 0x4c, 0x10, 0x42, + 0x69, 0x48, 0x85, 0x4b, 0xa6, 0x04, 0x5e, 0x80, 0x19, 0x12, 0x24, 0x7e, 0xb2, 0x2b, 0xf6, 0x42, + 0x50, 0xd6, 0x8b, 0x60, 0xa9, 0xe6, 0x1b, 0xb6, 0x5a, 0x61, 0x27, 0x61, 0x7f, 0x5e, 0x72, 0xdc, + 0x9d, 0x8c, 0x27, 0x0b, 0x60, 0xe9, 0x2b, 0x21, 0xa3, 0x24, 0x99, 0xd9, 0x05, 0xe4, 0xae, 0xad, + 0x3a, 0xe7, 0x94, 0xad, 0x0e, 0x59, 0x3f, 0x47, 0x50, 0x1b, 0xa9, 0xc2, 0xdb, 0xd4, 0x89, 0x22, + 0x42, 0xf1, 0x53, 0x50, 0xbe, 0xc3, 0x5e, 0x70, 0xf0, 0xd5, 0xd5, 0x7a, 0x5d, 0xcd, 0x47, 0x23, + 0xb9, 0x3c, 0xfd, 0x11, 0x3b, 0xfd, 0x1c, 0xd7, 0xe5, 0x6e, 0x96, 0x38, 0x9f, 0x05, 0x8d, 0x4f, + 0xb6, 0xe9, 0x6c, 0x3e, 0x9f, 0xf6, 0xe4, 0x0c, 0x4c, 0x47, 0x0e, 0x4d, 0xac, 0x63, 0x70, 0x9f, + 0xee, 0xcd, 0x5c, 0x7e, 0xeb, 0xb7, 0xba, 0xf1, 0xaf, 0x53, 0xc2, 0x35, 0x7e, 0xa7, 0x43, 0xe2, + 0x04, 0xef, 0x80, 0x9a, 0x22, 0xb9, 0x82, 0xaa, 0xab, 0xd7, 0xea, 0x79, 0x8e, 0xa9, 0xcb, 0x1c, + 0xc3, 0x1f, 0xbe, 0xe8, 0x7a, 0xf5, 0xee, 0x6a, 0x3d, 0xda, 0x69, 0xd6, 0x59, 0xc6, 0xd2, 0x90, + 0xc9, 0x8c, 0xa5, 0x8a, 0x6a, 0xab, 0xdc, 0xd9, 0x3e, 0x76, 0xa2, 0x98, 0xd0, 0x84, 0x4b, 0x56, + 0xb1, 0x05, 0xc5, 0xcc, 0xad, 0x2b, 0x2c, 0x81, 0x9b, 0x53, 0xc5, 0xce, 0x68, 0xeb, 0x1d, 0x1d, + 0xfd, 0x73, 0x91, 0xf7, 0x61, 0xa1, 0x57, 0x51, 0x96, 0x74, 0x94, 0xaa, 0xc1, 0x4f, 0xe9, 0x06, + 0xff, 0x6b, 0x1d, 0xff, 0x65, 0xd2, 0x22, 0x39, 0xfe, 0x41, 0xbe, 0x67, 0xc0, 0xac, 0xeb, 0xc4, + 0xae, 0xe3, 0xc9, 0x55, 0x24, 0xc9, 0xe2, 0x6e, 0x44, 0xc3, 0xc8, 0x69, 0x72, 0x4e, 0x37, 0xc3, + 0x96, 0xef, 0xee, 0x8a, 0xe5, 0xfa, 0x5f, 0xf4, 0xf9, 0xe9, 0x74, 0xb1, 0x9f, 0x96, 0x75, 0xd8, + 0x27, 0xa1, 0xba, 0xb9, 0x1b, 0xb8, 0xcf, 0x46, 0x69, 0x2c, 0x3a, 0x0a, 0x65, 0x3f, 0x21, 0xed, + 0xd8, 0x40, 0x3c, 0x0e, 0xa5, 0x84, 0xf5, 0xef, 0x32, 0x2c, 0x28, 0xb2, 0xb1, 0x0f, 0x8a, 0x24, + 0x2b, 0x0a, 0xaa, 0x0b, 0x30, 0xe3, 0xd1, 0x5d, 0xbb, 0x13, 0x08, 0x03, 0x10, 0x14, 0x5b, 0x38, + 0xa2, 0x9d, 0x20, 0x85, 0x5f, 0xb1, 0x53, 0x02, 0x6f, 0x41, 0x25, 0x4e, 0x58, 0x51, 0xd4, 0xdc, + 0xe5, 0xc0, 0xab, 0xab, 0x9f, 0x9d, 0x6c, 0xd3, 0x19, 0xf4, 0x4d, 0xc1, 0xd1, 0xce, 0x78, 0xe3, + 0x3b, 0x2c, 0x04, 0xa7, 0x71, 0x39, 0x36, 0x66, 0x97, 0xa6, 0x6a, 0xd5, 0xd5, 0xcd, 0xc9, 0x17, + 0x7a, 0x36, 0x62, 0x05, 0x9d, 0x92, 0x70, 0xed, 0x7c, 0x15, 0x16, 0xf5, 0xdb, 0x22, 0x3e, 0xc4, + 0xa2, 0x78, 0xc9, 0x07, 0xf0, 0xe7, 0xa1, 0xec, 0x07, 0x5b, 0x61, 0x6c, 0xcc, 0x71, 0x30, 0x4f, + 0x4e, 0x06, 0xe6, 0x5a, 0xb0, 0x15, 0xda, 0x29, 0x43, 0x7c, 0x07, 0x0e, 0x52, 0x92, 0xd0, 0x5d, + 0xa9, 0x05, 0x03, 0xb8, 0x5e, 0x9f, 0x99, 0x6c, 0x05, 0x5b, 0x65, 0x69, 0xeb, 0x2b, 0xe0, 0x35, + 0xa8, 0xc6, 0xb9, 0x8d, 0x19, 0x55, 0xbe, 0xa0, 0xa1, 0x31, 0x52, 0x6c, 0xd0, 0x56, 0x27, 0xf7, + 0x59, 0xf7, 0x81, 0x62, 0xeb, 0x3e, 0x38, 0x32, 0x09, 0x1f, 0x1a, 0x23, 0x09, 0xcf, 0xf7, 0x26, + 0xe1, 0x6f, 0x20, 0x58, 0xec, 0x4f, 0x67, 0x7c, 0x67, 0xff, 0xff, 0x01, 0xca, 0x7a, 0x57, 0xcf, + 0xf7, 0x7d, 0xf9, 0x70, 0xb8, 0x67, 0x2e, 0xc2, 0x5c, 0xa0, 0x54, 0x72, 0xec, 0x45, 0x3e, 0xc0, + 0xab, 0xb3, 0x94, 0x97, 0x28, 0xe0, 0x4a, 0xbc, 0x3a, 0xcb, 0x87, 0xf0, 0x32, 0x1c, 0x56, 0x48, + 0x19, 0x6f, 0xd8, 0xb4, 0xbe, 0x71, 0x7e, 0x32, 0x10, 0xc8, 0x64, 0x30, 0x28, 0xf3, 0xc4, 0xdb, + 0x3b, 0x6c, 0xfd, 0x4b, 0xd7, 0x6e, 0x1a, 0xfa, 0x37, 0x23, 0x52, 0x18, 0x64, 0x1c, 0x98, 0x8e, + 0x23, 0xe2, 0x72, 0x29, 0xaa, 0xab, 0xd7, 0xf7, 0x4d, 0xd5, 0x7c, 0x5d, 0xce, 0xba, 0x28, 0x5d, + 0x4d, 0x18, 0x75, 0x7f, 0x8c, 0xe0, 0xa3, 0xca, 0x9a, 0x37, 0x9d, 0xc4, 0xdd, 0x2e, 0x12, 0x96, + 0x45, 0x47, 0x36, 0x47, 0xec, 0x59, 0x4a, 0xb0, 0xdd, 0xe4, 0x0f, 0xb7, 0x76, 0x23, 0xb9, 0x5b, + 0xf9, 0xc0, 0x84, 0x95, 0xf4, 0x2f, 0x10, 0x98, 0x3d, 0x36, 0x36, 0xca, 0xb8, 0x0e, 0x41, 0xc9, + 0xf7, 0x44, 0x71, 0x55, 0xf2, 0xbd, 0x3d, 0x86, 0xfa, 0x5e, 0xb8, 0x33, 0xc5, 0x70, 0x67, 0x75, + 0xb8, 0x1f, 0xf4, 0xc0, 0x95, 0x01, 0x77, 0x7c, 0x5f, 0x40, 0xba, 0x2f, 0xf4, 0x9f, 0x66, 0x4a, + 0x7d, 0xa7, 0x19, 0x03, 0x66, 0xbb, 0xd9, 0x99, 0x97, 0x17, 0x9c, 0x82, 0x64, 0x22, 0x36, 0x69, + 0xd8, 0x89, 0x84, 0xd2, 0x53, 0x82, 0xa1, 0xd8, 0xf1, 0x03, 0x76, 0x3e, 0xe3, 0x28, 0xd8, 0xf3, + 0xde, 0x4f, 0xb9, 0x9a, 0xd8, 0x6f, 0x21, 0x38, 0xb6, 0xbe, 0xed, 0x04, 0x4d, 0x22, 0x9d, 0x49, + 0x4a, 0x6c, 0xc0, 0xac, 0xe0, 0x21, 0x8b, 0x61, 0x41, 0x8e, 0x90, 0xbb, 0x06, 0xf3, 0x6e, 0x87, + 0x52, 0x12, 0xe4, 0x5e, 0x9b, 0x56, 0x1e, 0xbd, 0xc3, 0x2c, 0x16, 0x44, 0x2c, 0x42, 0x86, 0x9d, + 0x38, 0x9b, 0x9a, 0x7a, 0x41, 0xdf, 0xb8, 0x75, 0x11, 0x16, 0x7a, 0x61, 0x8a, 0xa2, 0x5d, 0xad, + 0x15, 0x90, 0x7e, 0x68, 0xb6, 0x7e, 0x59, 0x82, 0x8f, 0x0d, 0xd8, 0xd4, 0x91, 0xde, 0x72, 0x6f, + 0xec, 0x6c, 0xe6, 0xb3, 0xb3, 0x43, 0x7d, 0xb6, 0x32, 0xca, 0x67, 0xe7, 0x8a, 0xad, 0x01, 0x74, + 0x6b, 0xf8, 0x59, 0x09, 0x96, 0x06, 0xe8, 0x6b, 0x74, 0x29, 0x7a, 0xcf, 0x28, 0x6c, 0x2b, 0xa4, + 0xc2, 0x07, 0x2a, 0x76, 0x4a, 0xb0, 0x28, 0x12, 0xd2, 0x68, 0xdb, 0x09, 0xb8, 0xed, 0x57, 0x6c, + 0x41, 0x4d, 0xa8, 0xaa, 0xaf, 0x97, 0xc0, 0x90, 0xfa, 0xb9, 0xe4, 0x72, 0x6d, 0x75, 0x82, 0x7b, + 0x5f, 0x45, 0x0b, 0x30, 0xe3, 0x70, 0xb4, 0xc2, 0xa8, 0x04, 0xd5, 0xa7, 0x8c, 0x4a, 0xb1, 0x32, + 0xe6, 0x74, 0x65, 0xbc, 0x86, 0xe0, 0xb8, 0xae, 0x8c, 0x78, 0xc3, 0x8f, 0x93, 0xcc, 0x47, 0xb7, + 0x60, 0x36, 0x5d, 0x27, 0x3d, 0x16, 0x54, 0x57, 0x37, 0x26, 0x2d, 0x16, 0x35, 0xc5, 0x4b, 0xe6, + 0xd6, 0xa3, 0x5a, 0xcf, 0x20, 0x8f, 0xe1, 0x79, 0xa8, 0x90, 0x05, 0xb2, 0x0c, 0x15, 0x92, 0xb6, + 0x5e, 0x9b, 0xd6, 0x13, 0x6a, 0xe8, 0x6d, 0x84, 0xcd, 0x82, 0xd6, 0x56, 0xf1, 0x76, 0x32, 0x55, + 0x85, 0x9e, 0xd2, 0xc5, 0x92, 0x24, 0xfb, 0xce, 0x0d, 0x83, 0xc4, 0xf1, 0x03, 0x42, 0x45, 0xb4, + 0xcb, 0x07, 0xd8, 0x36, 0xc4, 0x7e, 0xe0, 0x92, 0x4d, 0xe2, 0x86, 0x81, 0x17, 0xf3, 0xfd, 0x9c, + 0xb2, 0xb5, 0x31, 0xfc, 0x34, 0xcc, 0x71, 0xfa, 0x96, 0xdf, 0x4e, 0x93, 0x5c, 0x75, 0x75, 0xb9, + 0x9e, 0xb6, 0x9b, 0xeb, 0x6a, 0xbb, 0x39, 0xd7, 0x61, 0x9b, 0x24, 0x4e, 0xbd, 0x7b, 0xa1, 0xce, + 0xbe, 0xb0, 0xf3, 0x8f, 0x19, 0x96, 0xc4, 0xf1, 0x5b, 0x1b, 0x7e, 0xc0, 0x0f, 0x2d, 0x6c, 0xa9, + 0x7c, 0x80, 0x99, 0xca, 0x16, 0xab, 0xb3, 0xee, 0x4a, 0xbf, 0x49, 0x29, 0xf6, 0x55, 0x27, 0x48, + 0xfc, 0x16, 0x5f, 0x3f, 0x35, 0x84, 0x7c, 0x80, 0x7f, 0xe5, 0xb7, 0x12, 0x42, 0x85, 0xc3, 0x08, + 0x2a, 0x33, 0xc6, 0x6a, 0xda, 0x41, 0x95, 0xfe, 0x9a, 0x9a, 0xed, 0x01, 0xd5, 0x6c, 0x7b, 0x5d, + 0xe1, 0xe0, 0x80, 0x36, 0x20, 0x6f, 0x28, 0xa7, 0x29, 0xc2, 0x38, 0x94, 0x16, 0x56, 0x92, 0xee, + 0x33, 0xe5, 0xf9, 0x62, 0x53, 0x3e, 0xac, 0x9b, 0xf2, 0xef, 0x10, 0x54, 0x36, 0xc2, 0xe6, 0x95, + 0x20, 0xa1, 0xbb, 0xfc, 0x84, 0x1d, 0x06, 0x09, 0x09, 0xb2, 0x86, 0x90, 0x20, 0xd9, 0x26, 0x24, + 0x7e, 0x9b, 0x6c, 0x26, 0x4e, 0x3b, 0x12, 0x15, 0xe4, 0x9e, 0x36, 0x21, 0xfb, 0x98, 0x29, 0xa6, + 0xe5, 0xc4, 0x09, 0xf7, 0xf8, 0x8a, 0xcd, 0x9f, 0x99, 0x08, 0xd9, 0x84, 0xcd, 0x84, 0x0a, 0x77, + 0xd7, 0xc6, 0x54, 0x13, 0x2b, 0xa7, 0xd8, 0x04, 0x69, 0xb5, 0xe1, 0xfe, 0xec, 0xe0, 0x78, 0x8b, + 0xd0, 0xb6, 0x1f, 0x38, 0xc5, 0xd1, 0x7b, 0x8c, 0x4e, 0x76, 0x41, 0xdf, 0x22, 0xd4, 0x9c, 0x8e, + 0x9d, 0xc3, 0x6e, 0xfb, 0x81, 0x17, 0xde, 0x2d, 0x70, 0x9e, 0xc9, 0x16, 0xfc, 0x8b, 0xde, 0x8c, + 0x56, 0x56, 0xcc, 0x3c, 0xfd, 0x69, 0x38, 0xc8, 0x62, 0x42, 0x97, 0x88, 0x17, 0x22, 0xec, 0x58, + 0xc3, 0x1a, 0x6d, 0x39, 0x0f, 0x5b, 0xff, 0x10, 0x6f, 0xc0, 0xbc, 0x13, 0xc7, 0x7e, 0x33, 0x20, + 0x9e, 0xe4, 0x55, 0x1a, 0x9b, 0x57, 0xef, 0xa7, 0x69, 0xcb, 0x86, 0xcf, 0x10, 0xfb, 0x2d, 0x49, + 0xeb, 0xab, 0x08, 0x8e, 0x0d, 0x64, 0x92, 0x79, 0x0e, 0x52, 0xc2, 0xb8, 0x09, 0x95, 0xd8, 0xdd, + 0x26, 0x5e, 0xa7, 0x25, 0x4f, 0x61, 0x19, 0xcd, 0xde, 0x79, 0x9d, 0x74, 0xf7, 0x45, 0x1a, 0xc9, + 0x68, 0x7c, 0x02, 0xa0, 0xed, 0x04, 0x1d, 0xa7, 0xc5, 0x21, 0x4c, 0x73, 0x08, 0xca, 0x88, 0xb5, + 0x08, 0xe6, 0x20, 0xd3, 0x11, 0xfd, 0xc1, 0x7f, 0x22, 0x38, 0x24, 0x83, 0xaa, 0xd8, 0xdd, 0x1a, + 0xcc, 0x2b, 0x6a, 0x50, 0xaa, 0xc5, 0xde, 0xe1, 0x11, 0x01, 0x53, 0x5a, 0xc9, 0x94, 0x7e, 0x9f, + 0xd4, 0xd5, 0x6e, 0x84, 0xc6, 0xce, 0x77, 0x68, 0x9f, 0xaa, 0xe3, 0xaf, 0x80, 0x71, 0xdd, 0x09, + 0x9c, 0x26, 0xf1, 0x32, 0xb1, 0x33, 0x13, 0x7b, 0x51, 0x6d, 0x74, 0x4d, 0xdc, 0x56, 0xca, 0x4a, + 0x2d, 0x7f, 0x6b, 0x4b, 0x36, 0xcd, 0x28, 0x54, 0x36, 0xfc, 0x60, 0xe7, 0x5a, 0xb0, 0x15, 0x32, + 0x89, 0x13, 0x3f, 0x69, 0x49, 0xed, 0xa6, 0x04, 0x3e, 0x0c, 0x53, 0x1d, 0xda, 0x12, 0x16, 0xc0, + 0x1e, 0xd9, 0x09, 0xdc, 0x23, 0xb1, 0x4b, 0xfd, 0x28, 0xc9, 0x2b, 0x6f, 0x75, 0x88, 0xed, 0x83, + 0xef, 0x86, 0xc1, 0x7a, 0xcb, 0x89, 0x63, 0x99, 0x80, 0xb2, 0x01, 0xeb, 0x71, 0x38, 0xc8, 0xd6, + 0xcc, 0xc5, 0x3c, 0xab, 0x8b, 0x79, 0x4c, 0x83, 0x2f, 0xe1, 0x49, 0xc4, 0x0e, 0xdc, 0xc7, 0xf2, + 0xfe, 0xa5, 0x28, 0x12, 0x4c, 0xc6, 0x2c, 0x87, 0xa6, 0x06, 0xe5, 0xcf, 0x81, 0xd7, 0x02, 0xab, + 0xef, 0x9c, 0x01, 0xac, 0xfa, 0x09, 0xa1, 0x5d, 0xdf, 0x25, 0xf8, 0x3b, 0x08, 0xa6, 0xd9, 0xd2, + 0xf8, 0x81, 0x61, 0x6e, 0xc9, 0xed, 0xd5, 0xdc, 0xbf, 0x63, 0x3e, 0x5b, 0xcd, 0x5a, 0x7c, 0xf5, + 0xaf, 0x7f, 0xff, 0x6e, 0x69, 0x01, 0x1f, 0xe5, 0x97, 0xc1, 0xdd, 0x0b, 0xea, 0xc5, 0x6c, 0x8c, + 0x5f, 0x47, 0x80, 0x45, 0x1d, 0xa4, 0x5c, 0x97, 0xe1, 0xb3, 0xc3, 0x20, 0x0e, 0xb8, 0x56, 0x33, + 0x1f, 0x50, 0xb2, 0x4a, 0xdd, 0x0d, 0x29, 0x61, 0x39, 0x84, 0x4f, 0xe0, 0x00, 0x96, 0x39, 0x80, + 0x53, 0xd8, 0x1a, 0x04, 0xa0, 0xf1, 0x32, 0xd3, 0xe8, 0x2b, 0x0d, 0x92, 0xae, 0xfb, 0x26, 0x82, + 0xf2, 0x6d, 0x7e, 0x86, 0x18, 0xa1, 0xa4, 0xcd, 0x7d, 0x53, 0x12, 0x5f, 0x8e, 0xa3, 0xb5, 0x4e, + 0x72, 0xa4, 0x0f, 0xe0, 0xe3, 0x12, 0x69, 0x9c, 0x50, 0xe2, 0xb4, 0x35, 0xc0, 0xe7, 0x11, 0x7e, + 0x0b, 0xc1, 0x4c, 0x7a, 0xf1, 0x80, 0x4f, 0x0f, 0x43, 0xa9, 0x5d, 0x4c, 0x98, 0xfb, 0xd7, 0x24, + 0xb3, 0x1e, 0xe6, 0x18, 0x4f, 0x5a, 0x03, 0xb7, 0x73, 0x4d, 0xeb, 0xf1, 0xbf, 0x81, 0x60, 0xea, + 0x2a, 0x19, 0x69, 0x6f, 0xfb, 0x08, 0xae, 0x4f, 0x81, 0x03, 0xb6, 0x1a, 0xff, 0x14, 0xc1, 0xfd, + 0x57, 0x49, 0x32, 0x38, 0x3d, 0xe2, 0xda, 0xe8, 0x9c, 0x25, 0xcc, 0xee, 0xec, 0x18, 0x33, 0xb3, + 0xbc, 0xd0, 0xe0, 0xc8, 0x1e, 0xc6, 0x67, 0x8a, 0x8c, 0x30, 0xde, 0x0d, 0xdc, 0xbb, 0x02, 0xc7, + 0x9f, 0x11, 0x1c, 0xee, 0xbd, 0x16, 0xc7, 0x7a, 0x42, 0x1d, 0x78, 0x6b, 0x6e, 0xde, 0x98, 0x34, + 0xca, 0xea, 0x4c, 0xad, 0x4b, 0x1c, 0xf9, 0x63, 0xf8, 0xd1, 0x22, 0xe4, 0x59, 0x17, 0xb7, 0xf1, + 0xb2, 0x7c, 0x7c, 0x85, 0xff, 0x84, 0x83, 0xc3, 0x7e, 0x17, 0xc1, 0x51, 0xc9, 0x77, 0x7d, 0xdb, + 0xa1, 0xc9, 0x65, 0xc2, 0x6a, 0xe8, 0x78, 0x2c, 0x79, 0x26, 0xcc, 0x1a, 0xea, 0x7a, 0xd6, 0x15, + 0x2e, 0xcb, 0xa7, 0xf1, 0x13, 0x7b, 0x96, 0xc5, 0x65, 0x6c, 0x3c, 0x01, 0xfb, 0x55, 0x04, 0x07, + 0xae, 0x92, 0xe4, 0x7a, 0x76, 0x93, 0x70, 0x7a, 0xac, 0xdb, 0x49, 0x73, 0xb1, 0xae, 0xfc, 0x72, + 0x44, 0xbe, 0xca, 0x4c, 0x64, 0x85, 0x83, 0x3b, 0x83, 0x4f, 0x17, 0x81, 0xcb, 0x6f, 0x2f, 0xde, + 0x44, 0x70, 0x4c, 0x05, 0x91, 0x5f, 0x42, 0x7f, 0x62, 0x6f, 0x77, 0xa5, 0xe2, 0xc6, 0x75, 0x04, + 0xba, 0x55, 0x8e, 0xee, 0x9c, 0x35, 0xd8, 0x80, 0xdb, 0x7d, 0x28, 0xd6, 0xd0, 0x72, 0x0d, 0xe1, + 0xdf, 0x23, 0x98, 0x49, 0x5b, 0xcd, 0xc3, 0x75, 0xa4, 0xdd, 0x42, 0xee, 0x67, 0x34, 0x10, 0xbb, + 0x6d, 0x9e, 0x1f, 0xac, 0x50, 0xf5, 0x7b, 0x69, 0xaa, 0x75, 0xae, 0x65, 0x3d, 0x8c, 0xbd, 0x8d, + 0x00, 0xf2, 0x76, 0x39, 0x7e, 0xb8, 0x58, 0x0e, 0xa5, 0xa5, 0x6e, 0xee, 0x6f, 0xc3, 0xdc, 0xaa, + 0x73, 0x79, 0x6a, 0xe6, 0x52, 0x61, 0x0c, 0x89, 0x88, 0xbb, 0x96, 0xb6, 0xd6, 0x7f, 0x82, 0xa0, + 0xcc, 0xfb, 0x78, 0xf8, 0xd4, 0x30, 0xcc, 0x6a, 0x9b, 0x6f, 0x3f, 0x55, 0xff, 0x10, 0x87, 0xba, + 0xb4, 0x5a, 0x14, 0x88, 0xd7, 0xd0, 0x32, 0xee, 0xc2, 0x4c, 0xda, 0x39, 0x1b, 0x6e, 0x1e, 0x5a, + 0x67, 0xcd, 0x5c, 0x2a, 0x28, 0x0c, 0x52, 0x43, 0x15, 0x39, 0x60, 0x79, 0x54, 0x0e, 0x98, 0x66, + 0x61, 0x1a, 0x9f, 0x2c, 0x0a, 0xe2, 0xff, 0x03, 0xc5, 0x9c, 0xe5, 0xe8, 0x4e, 0x5b, 0x4b, 0xa3, + 0xf2, 0x00, 0xd3, 0xce, 0xf7, 0x10, 0x1c, 0xee, 0x2d, 0xae, 0xf1, 0xf1, 0x9e, 0x98, 0xa9, 0x9e, + 0x35, 0x4c, 0x5d, 0x8b, 0xc3, 0x0a, 0x73, 0xeb, 0x33, 0x1c, 0xc5, 0x1a, 0x7e, 0x64, 0xa4, 0x67, + 0xdc, 0x90, 0x51, 0x87, 0x31, 0x5a, 0xc9, 0x6f, 0x56, 0x7f, 0x83, 0xe0, 0x80, 0xe4, 0x7b, 0x8b, + 0x12, 0x52, 0x0c, 0x6b, 0xff, 0x1c, 0x81, 0xad, 0x65, 0x3d, 0xce, 0xe1, 0x7f, 0x12, 0x5f, 0x1c, + 0x13, 0xbe, 0x84, 0xbd, 0x92, 0x30, 0xa4, 0x7f, 0x44, 0x70, 0xe4, 0x76, 0x6a, 0xf7, 0x1f, 0x12, + 0xfe, 0x75, 0x8e, 0xff, 0x09, 0xfc, 0x58, 0x41, 0x9d, 0x37, 0x4a, 0x8c, 0xf3, 0x08, 0xff, 0x0a, + 0x41, 0x45, 0xde, 0x19, 0xe1, 0x33, 0x43, 0x1d, 0x43, 0xbf, 0x55, 0xda, 0x4f, 0x63, 0x16, 0x45, + 0x8d, 0x75, 0xaa, 0x30, 0x9d, 0x8a, 0xf5, 0x99, 0x41, 0xbf, 0x81, 0x00, 0x67, 0x67, 0xe6, 0xec, + 0x14, 0x8d, 0x1f, 0xd2, 0x96, 0x1a, 0xda, 0x98, 0x31, 0xcf, 0x8c, 0x9c, 0xa7, 0xa7, 0xd2, 0xe5, + 0xc2, 0x54, 0x1a, 0x66, 0xeb, 0x7f, 0x13, 0x41, 0xf5, 0x2a, 0xc9, 0xce, 0x20, 0x05, 0xba, 0xd4, + 0xaf, 0xbc, 0xcc, 0xda, 0xe8, 0x89, 0x02, 0xd1, 0x39, 0x8e, 0xe8, 0x21, 0x5c, 0xac, 0x2a, 0x09, + 0xe0, 0x87, 0x08, 0x0e, 0xde, 0x54, 0x4d, 0x14, 0x9f, 0x1b, 0xb5, 0x92, 0x16, 0xc9, 0xc7, 0xc7, + 0xf5, 0x71, 0x8e, 0x6b, 0xc5, 0x1a, 0x0b, 0xd7, 0x9a, 0xb8, 0x5f, 0xf9, 0x11, 0x4a, 0x0f, 0xb1, + 0x3d, 0xfd, 0xec, 0xff, 0x56, 0x6f, 0x05, 0x6d, 0x71, 0xeb, 0x22, 0xc7, 0x57, 0xc7, 0xe7, 0xc6, + 0xc1, 0xd7, 0x10, 0x4d, 0x6e, 0xfc, 0x7d, 0x04, 0x47, 0xf8, 0x5d, 0x83, 0xca, 0xb8, 0x27, 0xc5, + 0x0c, 0xbb, 0x99, 0x18, 0x23, 0xc5, 0x88, 0xf8, 0x63, 0xed, 0x09, 0xd4, 0x9a, 0xbc, 0x47, 0x78, + 0x1b, 0x81, 0x29, 0x9d, 0xb2, 0xff, 0x17, 0x06, 0xb8, 0x5e, 0xe4, 0xc8, 0xfd, 0x3f, 0x41, 0x30, + 0x1b, 0x63, 0xcf, 0x17, 0xe8, 0x3f, 0xc5, 0xd1, 0x5f, 0x18, 0x81, 0x3e, 0xfd, 0x78, 0x45, 0xf5, + 0xde, 0x6f, 0x21, 0x38, 0x24, 0xb3, 0xb1, 0x30, 0xcb, 0x95, 0x51, 0x3b, 0xbe, 0xd7, 0xec, 0x2d, + 0xfc, 0x64, 0x79, 0x3c, 0x3f, 0xf9, 0x01, 0x82, 0x23, 0xf2, 0x67, 0x8f, 0x9b, 0xd4, 0xbd, 0x14, + 0x78, 0x97, 0xe3, 0x64, 0x78, 0x85, 0xd6, 0xf7, 0x93, 0x92, 0xe1, 0x8e, 0xd2, 0xfb, 0x63, 0x4a, + 0xeb, 0x02, 0x07, 0x76, 0xd6, 0x5a, 0x1c, 0x00, 0x6c, 0x45, 0xfe, 0x62, 0x41, 0x2f, 0x1c, 0xdf, + 0x42, 0x30, 0x2b, 0x2e, 0x49, 0x0a, 0x2a, 0x30, 0xe5, 0x16, 0xc5, 0xec, 0x69, 0x1d, 0x89, 0x1e, + 0xbb, 0xf5, 0x05, 0xbe, 0xf6, 0x73, 0xb8, 0x51, 0xa4, 0x94, 0x28, 0xf4, 0xe2, 0xc6, 0xcb, 0xa2, + 0xc1, 0xfd, 0x4a, 0xa3, 0x15, 0x36, 0xe3, 0x17, 0x2c, 0x5c, 0x58, 0x67, 0xb0, 0x39, 0xe7, 0x11, + 0x4e, 0x60, 0x8e, 0xf9, 0x1c, 0xef, 0x47, 0xe1, 0xa5, 0x9e, 0xee, 0x55, 0x5f, 0xab, 0xca, 0x34, + 0xfb, 0xfa, 0x5b, 0x79, 0x61, 0x21, 0xba, 0x03, 0xf8, 0xc1, 0xc2, 0x65, 0xf9, 0x42, 0xaf, 0x23, + 0x38, 0xa2, 0x06, 0x91, 0x74, 0xf9, 0xb1, 0x43, 0x48, 0x11, 0x0a, 0x71, 0x56, 0xc1, 0xcb, 0x63, + 0xf9, 0x67, 0x0a, 0xe7, 0x6b, 0x08, 0x8e, 0x5c, 0x25, 0x89, 0x7e, 0x83, 0xde, 0x73, 0x40, 0x1d, + 0xf8, 0x2b, 0x00, 0xf3, 0x64, 0xe1, 0x1c, 0x01, 0xa9, 0xa8, 0x09, 0xc5, 0x0e, 0x97, 0xca, 0x37, + 0x4f, 0x3e, 0xf5, 0xa7, 0xf7, 0x4f, 0xa0, 0xf7, 0xde, 0x3f, 0x81, 0xfe, 0xf6, 0xfe, 0x09, 0xf4, + 0xc2, 0x23, 0xe3, 0xfd, 0xc3, 0x83, 0xdb, 0xf2, 0x49, 0x90, 0xa8, 0x6c, 0xff, 0x13, 0x00, 0x00, + 0xff, 0xff, 0x31, 0x6d, 0xd9, 0xbc, 0xd6, 0x31, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3341,6 +3467,7 @@ type ApplicationServiceClient interface { ListLinks(ctx context.Context, in *ListAppLinksRequest, opts ...grpc.CallOption) (*LinksResponse, error) // ListResourceLinks returns the list of all resource deep links ListResourceLinks(ctx context.Context, in *ApplicationResourceRequest, opts ...grpc.CallOption) (*LinksResponse, error) + GetChangeRevision(ctx context.Context, in *ChangeRevisionRequest, opts ...grpc.CallOption) (*ChangeRevisionResponse, error) } type applicationServiceClient struct { @@ -3715,6 +3842,15 @@ func (c *applicationServiceClient) ListResourceLinks(ctx context.Context, in *Ap return out, nil } +func (c *applicationServiceClient) GetChangeRevision(ctx context.Context, in *ChangeRevisionRequest, opts ...grpc.CallOption) (*ChangeRevisionResponse, error) { + out := new(ChangeRevisionResponse) + err := c.cc.Invoke(ctx, "/application.ApplicationService/GetChangeRevision", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ApplicationServiceServer is the server API for ApplicationService service. type ApplicationServiceServer interface { // List returns list of applications @@ -3777,6 +3913,7 @@ type ApplicationServiceServer interface { ListLinks(context.Context, *ListAppLinksRequest) (*LinksResponse, error) // ListResourceLinks returns the list of all resource deep links ListResourceLinks(context.Context, *ApplicationResourceRequest) (*LinksResponse, error) + GetChangeRevision(context.Context, *ChangeRevisionRequest) (*ChangeRevisionResponse, error) } // UnimplementedApplicationServiceServer can be embedded to have forward compatible implementations. @@ -3873,6 +4010,9 @@ func (*UnimplementedApplicationServiceServer) ListLinks(ctx context.Context, req func (*UnimplementedApplicationServiceServer) ListResourceLinks(ctx context.Context, req *ApplicationResourceRequest) (*LinksResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListResourceLinks not implemented") } +func (*UnimplementedApplicationServiceServer) GetChangeRevision(ctx context.Context, req *ChangeRevisionRequest) (*ChangeRevisionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetChangeRevision not implemented") +} func RegisterApplicationServiceServer(s *grpc.Server, srv ApplicationServiceServer) { s.RegisterService(&_ApplicationService_serviceDesc, srv) @@ -4435,6 +4575,24 @@ func _ApplicationService_ListResourceLinks_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } +func _ApplicationService_GetChangeRevision_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ChangeRevisionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ApplicationServiceServer).GetChangeRevision(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/application.ApplicationService/GetChangeRevision", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ApplicationServiceServer).GetChangeRevision(ctx, req.(*ChangeRevisionRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _ApplicationService_serviceDesc = grpc.ServiceDesc{ ServiceName: "application.ApplicationService", HandlerType: (*ApplicationServiceServer)(nil), @@ -4543,6 +4701,10 @@ var _ApplicationService_serviceDesc = grpc.ServiceDesc{ MethodName: "ListResourceLinks", Handler: _ApplicationService_ListResourceLinks_Handler, }, + { + MethodName: "GetChangeRevision", + Handler: _ApplicationService_GetChangeRevision_Handler, + }, }, Streams: []grpc.StreamDesc{ { @@ -6003,6 +6165,99 @@ func (m *ApplicationResourceRequest) MarshalToSizedBuffer(dAtA []byte) (int, err return len(dAtA) - i, nil } +func (m *ChangeRevisionRequest) 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 *ChangeRevisionRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ChangeRevisionRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.PreviousRevision != nil { + i -= len(*m.PreviousRevision) + copy(dAtA[i:], *m.PreviousRevision) + i = encodeVarintApplication(dAtA, i, uint64(len(*m.PreviousRevision))) + i-- + dAtA[i] = 0x22 + } + if m.CurrentRevision != nil { + i -= len(*m.CurrentRevision) + copy(dAtA[i:], *m.CurrentRevision) + i = encodeVarintApplication(dAtA, i, uint64(len(*m.CurrentRevision))) + i-- + dAtA[i] = 0x1a + } + if m.Namespace != nil { + i -= len(*m.Namespace) + copy(dAtA[i:], *m.Namespace) + i = encodeVarintApplication(dAtA, i, uint64(len(*m.Namespace))) + i-- + dAtA[i] = 0x12 + } + if m.AppName == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("appName") + } else { + i -= len(*m.AppName) + copy(dAtA[i:], *m.AppName) + i = encodeVarintApplication(dAtA, i, uint64(len(*m.AppName))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ChangeRevisionResponse) 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 *ChangeRevisionResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ChangeRevisionResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.Revision == nil { + return 0, github_com_gogo_protobuf_proto.NewRequiredNotSetError("revision") + } else { + i -= len(*m.Revision) + copy(dAtA[i:], *m.Revision) + i = encodeVarintApplication(dAtA, i, uint64(len(*m.Revision))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *ApplicationResourcePatchRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -7844,6 +8099,50 @@ func (m *ApplicationResourceRequest) Size() (n int) { return n } +func (m *ChangeRevisionRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.AppName != nil { + l = len(*m.AppName) + n += 1 + l + sovApplication(uint64(l)) + } + if m.Namespace != nil { + l = len(*m.Namespace) + n += 1 + l + sovApplication(uint64(l)) + } + if m.CurrentRevision != nil { + l = len(*m.CurrentRevision) + n += 1 + l + sovApplication(uint64(l)) + } + if m.PreviousRevision != nil { + l = len(*m.PreviousRevision) + n += 1 + l + sovApplication(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *ChangeRevisionResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Revision != nil { + l = len(*m.Revision) + n += 1 + l + sovApplication(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *ApplicationResourcePatchRequest) Size() (n int) { if m == nil { return 0 @@ -12711,6 +13010,283 @@ func (m *ApplicationResourceRequest) Unmarshal(dAtA []byte) error { } return nil } +func (m *ChangeRevisionRequest) Unmarshal(dAtA []byte) error { + var hasFields [1]uint64 + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApplication + } + 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: ChangeRevisionRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ChangeRevisionRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AppName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApplication + } + 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 ErrInvalidLengthApplication + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthApplication + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.AppName = &s + iNdEx = postIndex + hasFields[0] |= uint64(0x00000001) + case 2: + 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 ErrIntOverflowApplication + } + 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 ErrInvalidLengthApplication + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthApplication + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Namespace = &s + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentRevision", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApplication + } + 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 ErrInvalidLengthApplication + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthApplication + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.CurrentRevision = &s + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreviousRevision", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApplication + } + 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 ErrInvalidLengthApplication + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthApplication + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.PreviousRevision = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApplication(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApplication + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + if hasFields[0]&uint64(0x00000001) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("appName") + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ChangeRevisionResponse) Unmarshal(dAtA []byte) error { + var hasFields [1]uint64 + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApplication + } + 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: ChangeRevisionResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ChangeRevisionResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApplication + } + 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 ErrInvalidLengthApplication + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthApplication + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Revision = &s + iNdEx = postIndex + hasFields[0] |= uint64(0x00000001) + default: + iNdEx = preIndex + skippy, err := skipApplication(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApplication + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + if hasFields[0]&uint64(0x00000001) == 0 { + return github_com_gogo_protobuf_proto.NewRequiredNotSetError("revision") + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *ApplicationResourcePatchRequest) Unmarshal(dAtA []byte) error { var hasFields [1]uint64 l := len(dAtA) diff --git a/pkg/apiclient/application/application.pb.gw.go b/pkg/apiclient/application/application.pb.gw.go index 63247c12ec858..1110f199b3bcf 100644 --- a/pkg/apiclient/application/application.pb.gw.go +++ b/pkg/apiclient/application/application.pb.gw.go @@ -2132,6 +2132,42 @@ func local_request_ApplicationService_ListResourceLinks_0(ctx context.Context, m } +var ( + filter_ApplicationService_GetChangeRevision_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_ApplicationService_GetChangeRevision_0(ctx context.Context, marshaler runtime.Marshaler, client ApplicationServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ChangeRevisionRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ApplicationService_GetChangeRevision_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetChangeRevision(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ApplicationService_GetChangeRevision_0(ctx context.Context, marshaler runtime.Marshaler, server ApplicationServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ChangeRevisionRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ApplicationService_GetChangeRevision_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetChangeRevision(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterApplicationServiceHandlerServer registers the http handlers for service ApplicationService to "mux". // UnaryRPC :call ApplicationServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -2771,6 +2807,29 @@ func RegisterApplicationServiceHandlerServer(ctx context.Context, mux *runtime.S }) + mux.Handle("GET", pattern_ApplicationService_GetChangeRevision_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ApplicationService_GetChangeRevision_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ApplicationService_GetChangeRevision_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -3432,6 +3491,26 @@ func RegisterApplicationServiceHandlerClient(ctx context.Context, mux *runtime.S }) + mux.Handle("GET", pattern_ApplicationService_GetChangeRevision_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ApplicationService_GetChangeRevision_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ApplicationService_GetChangeRevision_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -3497,6 +3576,8 @@ var ( pattern_ApplicationService_ListLinks_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v1", "applications", "name", "links"}, "", runtime.AssumeColonVerbOpt(true))) pattern_ApplicationService_ListResourceLinks_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"api", "v1", "applications", "name", "resource", "links"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ApplicationService_GetChangeRevision_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "application", "changeRevision"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( @@ -3561,4 +3642,6 @@ var ( forward_ApplicationService_ListLinks_0 = runtime.ForwardResponseMessage forward_ApplicationService_ListResourceLinks_0 = runtime.ForwardResponseMessage + + forward_ApplicationService_GetChangeRevision_0 = runtime.ForwardResponseMessage ) diff --git a/pkg/apis/api-rules/violation_exceptions.list b/pkg/apis/api-rules/violation_exceptions.list index 0450bb0f0ca94..8a8abc930978f 100644 --- a/pkg/apis/api-rules/violation_exceptions.list +++ b/pkg/apis/api-rules/violation_exceptions.list @@ -86,6 +86,7 @@ API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/ap API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,SCMProviderGeneratorAWSCodeCommit,TagFilters API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,SCMProviderGeneratorFilter,PathsDoNotExist API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,SCMProviderGeneratorFilter,PathsExist +API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,SyncOperation,ChangeRevisions API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,SyncOperation,Manifests API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,SyncOperation,Resources API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,SyncOperation,Revisions diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index 5db94dd9f285d..a3e4debe6fdd7 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -4509,708 +4509,709 @@ func init() { } var fileDescriptor_030104ce3b95bcac = []byte{ - // 11203 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6f, 0x70, 0x24, 0xc7, - 0x75, 0x18, 0xae, 0xd9, 0xc5, 0x02, 0xbb, 0x0f, 0xff, 0xee, 0xfa, 0xee, 0x48, 0xdc, 0x89, 0x24, - 0xce, 0x43, 0x9b, 0xa2, 0x7f, 0x22, 0x01, 0xf3, 0x4c, 0xca, 0xfc, 0x89, 0x96, 0x64, 0xfc, 0xb9, - 0xc3, 0xe1, 0x0e, 0x38, 0x80, 0x0d, 0xdc, 0x9d, 0x44, 0x99, 0xa4, 0x06, 0xbb, 0x8d, 0xc5, 0x1c, - 0x66, 0x67, 0x86, 0x33, 0xb3, 0x38, 0x80, 0x96, 0x64, 0xc9, 0x92, 0x6c, 0x25, 0xfa, 0x43, 0x85, - 0x4a, 0xca, 0x74, 0x62, 0xa9, 0x64, 0x4b, 0x49, 0xc5, 0x95, 0xa8, 0xe2, 0x24, 0x1f, 0xe2, 0xc8, - 0xa9, 0x72, 0xc5, 0x4e, 0xa5, 0x94, 0x38, 0x2e, 0xbb, 0x5c, 0x2e, 0xcb, 0x49, 0x6c, 0x44, 0xba, - 0x54, 0x2a, 0xa9, 0x54, 0xc5, 0x55, 0x4e, 0xfc, 0x21, 0xb9, 0xe4, 0x43, 0xaa, 0xff, 0xf7, 0xcc, - 0xce, 0x02, 0x0b, 0x60, 0x70, 0x77, 0x52, 0xf8, 0x6d, 0xb7, 0xdf, 0x9b, 0xf7, 0x7a, 0x7a, 0xba, - 0xdf, 0x7b, 0xfd, 0xfa, 0xbd, 0xd7, 0xb0, 0xd0, 0x74, 0x93, 0x8d, 0xf6, 0xda, 0x44, 0x3d, 0x68, - 0x4d, 0x3a, 0x51, 0x33, 0x08, 0xa3, 0xe0, 0x16, 0xfb, 0xf1, 0x74, 0xbd, 0x31, 0xb9, 0x75, 0x61, - 0x32, 0xdc, 0x6c, 0x4e, 0x3a, 0xa1, 0x1b, 0x4f, 0x3a, 0x61, 0xe8, 0xb9, 0x75, 0x27, 0x71, 0x03, - 0x7f, 0x72, 0xeb, 0x19, 0xc7, 0x0b, 0x37, 0x9c, 0x67, 0x26, 0x9b, 0xc4, 0x27, 0x91, 0x93, 0x90, - 0xc6, 0x44, 0x18, 0x05, 0x49, 0x80, 0x7e, 0x52, 0x53, 0x9b, 0x90, 0xd4, 0xd8, 0x8f, 0x57, 0xeb, - 0x8d, 0x89, 0xad, 0x0b, 0x13, 0xe1, 0x66, 0x73, 0x82, 0x52, 0x9b, 0x30, 0xa8, 0x4d, 0x48, 0x6a, - 0xe7, 0x9e, 0x36, 0xfa, 0xd2, 0x0c, 0x9a, 0xc1, 0x24, 0x23, 0xba, 0xd6, 0x5e, 0x67, 0xff, 0xd8, - 0x1f, 0xf6, 0x8b, 0x33, 0x3b, 0x67, 0x6f, 0x3e, 0x1f, 0x4f, 0xb8, 0x01, 0xed, 0xde, 0x64, 0x3d, - 0x88, 0xc8, 0xe4, 0x56, 0x47, 0x87, 0xce, 0x5d, 0xd6, 0x38, 0x64, 0x3b, 0x21, 0x7e, 0xec, 0x06, - 0x7e, 0xfc, 0x34, 0xed, 0x02, 0x89, 0xb6, 0x48, 0x64, 0xbe, 0x9e, 0x81, 0x90, 0x47, 0xe9, 0x59, - 0x4d, 0xa9, 0xe5, 0xd4, 0x37, 0x5c, 0x9f, 0x44, 0x3b, 0xfa, 0xf1, 0x16, 0x49, 0x9c, 0xbc, 0xa7, - 0x26, 0xbb, 0x3d, 0x15, 0xb5, 0xfd, 0xc4, 0x6d, 0x91, 0x8e, 0x07, 0xde, 0xb3, 0xdf, 0x03, 0x71, - 0x7d, 0x83, 0xb4, 0x9c, 0x8e, 0xe7, 0x7e, 0xbc, 0xdb, 0x73, 0xed, 0xc4, 0xf5, 0x26, 0x5d, 0x3f, - 0x89, 0x93, 0x28, 0xfb, 0x90, 0xfd, 0xcb, 0x16, 0x0c, 0x4f, 0xdd, 0x5c, 0x99, 0x6a, 0x27, 0x1b, - 0x33, 0x81, 0xbf, 0xee, 0x36, 0xd1, 0x73, 0x30, 0x58, 0xf7, 0xda, 0x71, 0x42, 0xa2, 0x6b, 0x4e, - 0x8b, 0x8c, 0x59, 0xe7, 0xad, 0x27, 0x6b, 0xd3, 0xa7, 0xbe, 0xbd, 0x3b, 0xfe, 0x8e, 0x3b, 0xbb, - 0xe3, 0x83, 0x33, 0x1a, 0x84, 0x4d, 0x3c, 0xf4, 0xa3, 0x30, 0x10, 0x05, 0x1e, 0x99, 0xc2, 0xd7, - 0xc6, 0x4a, 0xec, 0x91, 0x51, 0xf1, 0xc8, 0x00, 0xe6, 0xcd, 0x58, 0xc2, 0x29, 0x6a, 0x18, 0x05, - 0xeb, 0xae, 0x47, 0xc6, 0xca, 0x69, 0xd4, 0x65, 0xde, 0x8c, 0x25, 0xdc, 0xfe, 0xe3, 0x12, 0xc0, - 0x54, 0x18, 0x2e, 0x47, 0xc1, 0x2d, 0x52, 0x4f, 0xd0, 0x47, 0xa0, 0x4a, 0x87, 0xb9, 0xe1, 0x24, - 0x0e, 0xeb, 0xd8, 0xe0, 0x85, 0x1f, 0x9b, 0xe0, 0x6f, 0x3d, 0x61, 0xbe, 0xb5, 0x9e, 0x64, 0x14, - 0x7b, 0x62, 0xeb, 0x99, 0x89, 0xa5, 0x35, 0xfa, 0xfc, 0x22, 0x49, 0x9c, 0x69, 0x24, 0x98, 0x81, - 0x6e, 0xc3, 0x8a, 0x2a, 0xf2, 0xa1, 0x2f, 0x0e, 0x49, 0x9d, 0xbd, 0xc3, 0xe0, 0x85, 0x85, 0x89, - 0xa3, 0xcc, 0xe6, 0x09, 0xdd, 0xf3, 0x95, 0x90, 0xd4, 0xa7, 0x87, 0x04, 0xe7, 0x3e, 0xfa, 0x0f, - 0x33, 0x3e, 0x68, 0x0b, 0xfa, 0xe3, 0xc4, 0x49, 0xda, 0x31, 0x1b, 0x8a, 0xc1, 0x0b, 0xd7, 0x0a, - 0xe3, 0xc8, 0xa8, 0x4e, 0x8f, 0x08, 0x9e, 0xfd, 0xfc, 0x3f, 0x16, 0xdc, 0xec, 0x3f, 0xb3, 0x60, - 0x44, 0x23, 0x2f, 0xb8, 0x71, 0x82, 0x7e, 0xba, 0x63, 0x70, 0x27, 0x7a, 0x1b, 0x5c, 0xfa, 0x34, - 0x1b, 0xda, 0x13, 0x82, 0x59, 0x55, 0xb6, 0x18, 0x03, 0xdb, 0x82, 0x8a, 0x9b, 0x90, 0x56, 0x3c, - 0x56, 0x3a, 0x5f, 0x7e, 0x72, 0xf0, 0xc2, 0xe5, 0xa2, 0xde, 0x73, 0x7a, 0x58, 0x30, 0xad, 0xcc, - 0x53, 0xf2, 0x98, 0x73, 0xb1, 0x7f, 0x6d, 0xc8, 0x7c, 0x3f, 0x3a, 0xe0, 0xe8, 0x19, 0x18, 0x8c, - 0x83, 0x76, 0x54, 0x27, 0x98, 0x84, 0x41, 0x3c, 0x66, 0x9d, 0x2f, 0xd3, 0xa9, 0x47, 0x27, 0xf5, - 0x8a, 0x6e, 0xc6, 0x26, 0x0e, 0xfa, 0xa2, 0x05, 0x43, 0x0d, 0x12, 0x27, 0xae, 0xcf, 0xf8, 0xcb, - 0xce, 0xaf, 0x1e, 0xb9, 0xf3, 0xb2, 0x71, 0x56, 0x13, 0x9f, 0x3e, 0x2d, 0x5e, 0x64, 0xc8, 0x68, - 0x8c, 0x71, 0x8a, 0x3f, 0x5d, 0x9c, 0x0d, 0x12, 0xd7, 0x23, 0x37, 0xa4, 0xff, 0xc5, 0xf2, 0x51, - 0x8b, 0x73, 0x56, 0x83, 0xb0, 0x89, 0x87, 0x7c, 0xa8, 0xd0, 0xc5, 0x17, 0x8f, 0xf5, 0xb1, 0xfe, - 0xcf, 0x1f, 0xad, 0xff, 0x62, 0x50, 0xe9, 0xba, 0xd6, 0xa3, 0x4f, 0xff, 0xc5, 0x98, 0xb3, 0x41, - 0x5f, 0xb0, 0x60, 0x4c, 0x08, 0x07, 0x4c, 0xf8, 0x80, 0xde, 0xdc, 0x70, 0x13, 0xe2, 0xb9, 0x71, - 0x32, 0x56, 0x61, 0x7d, 0x98, 0xec, 0x6d, 0x6e, 0xcd, 0x45, 0x41, 0x3b, 0xbc, 0xea, 0xfa, 0x8d, - 0xe9, 0xf3, 0x82, 0xd3, 0xd8, 0x4c, 0x17, 0xc2, 0xb8, 0x2b, 0x4b, 0xf4, 0x65, 0x0b, 0xce, 0xf9, - 0x4e, 0x8b, 0xc4, 0xa1, 0x43, 0x3f, 0x2d, 0x07, 0x4f, 0x7b, 0x4e, 0x7d, 0x93, 0xf5, 0xa8, 0xff, - 0x70, 0x3d, 0xb2, 0x45, 0x8f, 0xce, 0x5d, 0xeb, 0x4a, 0x1a, 0xef, 0xc1, 0x16, 0x7d, 0xdd, 0x82, - 0x93, 0x41, 0x14, 0x6e, 0x38, 0x3e, 0x69, 0x48, 0x68, 0x3c, 0x36, 0xc0, 0x96, 0xde, 0x2b, 0x47, - 0xfb, 0x44, 0x4b, 0x59, 0xb2, 0x8b, 0x81, 0xef, 0x26, 0x41, 0xb4, 0x42, 0x92, 0xc4, 0xf5, 0x9b, - 0xf1, 0xf4, 0x99, 0x3b, 0xbb, 0xe3, 0x27, 0x3b, 0xb0, 0x70, 0x67, 0x7f, 0xd0, 0xcf, 0xc0, 0x60, - 0xbc, 0xe3, 0xd7, 0x6f, 0xba, 0x7e, 0x23, 0xb8, 0x1d, 0x8f, 0x55, 0x8b, 0x58, 0xbe, 0x2b, 0x8a, - 0xa0, 0x58, 0x80, 0x9a, 0x01, 0x36, 0xb9, 0xe5, 0x7f, 0x38, 0x3d, 0x95, 0x6a, 0x45, 0x7f, 0x38, - 0x3d, 0x99, 0xf6, 0x60, 0x8b, 0x7e, 0xc1, 0x82, 0xe1, 0xd8, 0x6d, 0xfa, 0x4e, 0xd2, 0x8e, 0xc8, - 0x55, 0xb2, 0x13, 0x8f, 0x01, 0xeb, 0xc8, 0x95, 0x23, 0x8e, 0x8a, 0x41, 0x72, 0xfa, 0x8c, 0xe8, - 0xe3, 0xb0, 0xd9, 0x1a, 0xe3, 0x34, 0xdf, 0xbc, 0x85, 0xa6, 0xa7, 0xf5, 0x60, 0xb1, 0x0b, 0x4d, - 0x4f, 0xea, 0xae, 0x2c, 0xd1, 0x4f, 0xc1, 0x09, 0xde, 0xa4, 0x46, 0x36, 0x1e, 0x1b, 0x62, 0x82, - 0xf6, 0xf4, 0x9d, 0xdd, 0xf1, 0x13, 0x2b, 0x19, 0x18, 0xee, 0xc0, 0x46, 0xaf, 0xc1, 0x78, 0x48, - 0xa2, 0x96, 0x9b, 0x2c, 0xf9, 0xde, 0x8e, 0x14, 0xdf, 0xf5, 0x20, 0x24, 0x0d, 0xd1, 0x9d, 0x78, - 0x6c, 0xf8, 0xbc, 0xf5, 0x64, 0x75, 0xfa, 0x5d, 0xa2, 0x9b, 0xe3, 0xcb, 0x7b, 0xa3, 0xe3, 0xfd, - 0xe8, 0xd9, 0xff, 0xaa, 0x04, 0x27, 0xb2, 0x8a, 0x13, 0xfd, 0x1d, 0x0b, 0x46, 0x6f, 0xdd, 0x4e, - 0x56, 0x83, 0x4d, 0xe2, 0xc7, 0xd3, 0x3b, 0x54, 0xbc, 0x31, 0x95, 0x31, 0x78, 0xa1, 0x5e, 0xac, - 0x8a, 0x9e, 0xb8, 0x92, 0xe6, 0x72, 0xd1, 0x4f, 0xa2, 0x9d, 0xe9, 0x87, 0xc5, 0xdb, 0x8d, 0x5e, - 0xb9, 0xb9, 0x6a, 0x42, 0x71, 0xb6, 0x53, 0xe7, 0x3e, 0x67, 0xc1, 0xe9, 0x3c, 0x12, 0xe8, 0x04, - 0x94, 0x37, 0xc9, 0x0e, 0x37, 0xe0, 0x30, 0xfd, 0x89, 0x5e, 0x86, 0xca, 0x96, 0xe3, 0xb5, 0x89, - 0xb0, 0x6e, 0xe6, 0x8e, 0xf6, 0x22, 0xaa, 0x67, 0x98, 0x53, 0x7d, 0x6f, 0xe9, 0x79, 0xcb, 0xfe, - 0xfd, 0x32, 0x0c, 0x1a, 0xfa, 0xed, 0x1e, 0x58, 0x6c, 0x41, 0xca, 0x62, 0x5b, 0x2c, 0x4c, 0x35, - 0x77, 0x35, 0xd9, 0x6e, 0x67, 0x4c, 0xb6, 0xa5, 0xe2, 0x58, 0xee, 0x69, 0xb3, 0xa1, 0x04, 0x6a, - 0x41, 0x48, 0xad, 0x77, 0xaa, 0xfa, 0xfb, 0x8a, 0xf8, 0x84, 0x4b, 0x92, 0xdc, 0xf4, 0xf0, 0x9d, - 0xdd, 0xf1, 0x9a, 0xfa, 0x8b, 0x35, 0x23, 0xfb, 0x3b, 0x16, 0x9c, 0x36, 0xfa, 0x38, 0x13, 0xf8, - 0x0d, 0x97, 0x7d, 0xda, 0xf3, 0xd0, 0x97, 0xec, 0x84, 0x72, 0x87, 0xa0, 0x46, 0x6a, 0x75, 0x27, - 0x24, 0x98, 0x41, 0xa8, 0xa1, 0xdf, 0x22, 0x71, 0xec, 0x34, 0x49, 0x76, 0x4f, 0xb0, 0xc8, 0x9b, - 0xb1, 0x84, 0xa3, 0x08, 0x90, 0xe7, 0xc4, 0xc9, 0x6a, 0xe4, 0xf8, 0x31, 0x23, 0xbf, 0xea, 0xb6, - 0x88, 0x18, 0xe0, 0xff, 0xaf, 0xb7, 0x19, 0x43, 0x9f, 0x98, 0x7e, 0xe8, 0xce, 0xee, 0x38, 0x5a, - 0xe8, 0xa0, 0x84, 0x73, 0xa8, 0xdb, 0x5f, 0xb6, 0xe0, 0xa1, 0x7c, 0x5b, 0x0c, 0x3d, 0x01, 0xfd, - 0x7c, 0x7b, 0x28, 0xde, 0x4e, 0x7f, 0x12, 0xd6, 0x8a, 0x05, 0x14, 0x4d, 0x42, 0x4d, 0xe9, 0x09, - 0xf1, 0x8e, 0x27, 0x05, 0x6a, 0x4d, 0x2b, 0x17, 0x8d, 0x43, 0x07, 0x8d, 0xfe, 0x11, 0x96, 0x9b, - 0x1a, 0x34, 0xb6, 0x9f, 0x62, 0x10, 0xfb, 0x3f, 0x58, 0x30, 0x6a, 0xf4, 0xea, 0x1e, 0x98, 0xe6, - 0x7e, 0xda, 0x34, 0x9f, 0x2f, 0x6c, 0x3e, 0x77, 0xb1, 0xcd, 0xbf, 0x60, 0xc1, 0x39, 0x03, 0x6b, - 0xd1, 0x49, 0xea, 0x1b, 0x17, 0xb7, 0xc3, 0x88, 0xc4, 0x74, 0xeb, 0x8d, 0x1e, 0x35, 0xe4, 0xd6, - 0xf4, 0xa0, 0xa0, 0x50, 0xbe, 0x4a, 0x76, 0xb8, 0x10, 0x7b, 0x0a, 0xaa, 0x7c, 0x72, 0x06, 0x91, - 0x18, 0x71, 0xf5, 0x6e, 0x4b, 0xa2, 0x1d, 0x2b, 0x0c, 0x64, 0x43, 0x3f, 0x13, 0x4e, 0x74, 0xb1, - 0x52, 0x35, 0x04, 0xf4, 0x23, 0xde, 0x60, 0x2d, 0x58, 0x40, 0xec, 0x38, 0xd5, 0x9d, 0xe5, 0x88, - 0xb0, 0x8f, 0xdb, 0xb8, 0xe4, 0x12, 0xaf, 0x11, 0xd3, 0x6d, 0x83, 0xe3, 0xfb, 0x41, 0x22, 0x76, - 0x00, 0xc6, 0xb6, 0x61, 0x4a, 0x37, 0x63, 0x13, 0x87, 0x32, 0xf5, 0x9c, 0x35, 0xe2, 0xf1, 0x11, - 0x15, 0x4c, 0x17, 0x58, 0x0b, 0x16, 0x10, 0xfb, 0x4e, 0x89, 0x6d, 0x50, 0xd4, 0xd2, 0x27, 0xf7, - 0x62, 0x77, 0x1b, 0xa5, 0x64, 0xe5, 0x72, 0x71, 0x82, 0x8b, 0x74, 0xdf, 0xe1, 0xbe, 0x9e, 0x11, - 0x97, 0xb8, 0x50, 0xae, 0x7b, 0xef, 0x72, 0x3f, 0x51, 0x86, 0xf1, 0xf4, 0x03, 0x1d, 0xd2, 0x96, - 0x6e, 0xa9, 0x0c, 0x46, 0x59, 0x7f, 0x87, 0x81, 0x8f, 0x4d, 0xbc, 0x2e, 0x02, 0xab, 0x74, 0x9c, - 0x02, 0xcb, 0x94, 0xa7, 0xe5, 0x7d, 0xe4, 0xe9, 0x13, 0x6a, 0xd4, 0xfb, 0x32, 0x02, 0x2c, 0xad, - 0x53, 0xce, 0x43, 0x5f, 0x9c, 0x90, 0x70, 0xac, 0x92, 0x96, 0x47, 0x2b, 0x09, 0x09, 0x31, 0x83, - 0xa0, 0xf7, 0xc1, 0x68, 0xe2, 0x44, 0x4d, 0x92, 0x44, 0x64, 0xcb, 0x65, 0xbe, 0x31, 0xb6, 0x5f, - 0xaa, 0x4d, 0x9f, 0xa2, 0xe6, 0xc9, 0x2a, 0x03, 0x61, 0x09, 0xc2, 0x59, 0x5c, 0xfb, 0xbf, 0x96, - 0xe0, 0xe1, 0xf4, 0x27, 0xd0, 0x1a, 0xe4, 0x03, 0x29, 0x0d, 0xf2, 0x6e, 0x53, 0x83, 0xdc, 0xdd, - 0x1d, 0x7f, 0x67, 0x97, 0xc7, 0xbe, 0x6f, 0x14, 0x0c, 0x9a, 0xcb, 0x7c, 0x84, 0xc9, 0xf4, 0x47, - 0xb8, 0xbb, 0x3b, 0xfe, 0x68, 0x97, 0x77, 0xcc, 0x7c, 0xa5, 0x27, 0xa0, 0x3f, 0x22, 0x4e, 0x1c, - 0xf8, 0xe2, 0x3b, 0xa9, 0xaf, 0x89, 0x59, 0x2b, 0x16, 0x50, 0xfb, 0x0f, 0x6b, 0xd9, 0xc1, 0x9e, - 0xe3, 0xfe, 0xbe, 0x20, 0x42, 0x2e, 0xf4, 0xb1, 0x5d, 0x01, 0x97, 0x2c, 0x57, 0x8f, 0xb6, 0x0a, - 0xa9, 0x16, 0x51, 0xa4, 0xa7, 0xab, 0xf4, 0xab, 0xd1, 0x26, 0xcc, 0x58, 0xa0, 0x6d, 0xa8, 0xd6, - 0xa5, 0xb1, 0x5e, 0x2a, 0xc2, 0xad, 0x25, 0x4c, 0x75, 0xcd, 0x71, 0x88, 0x8a, 0x7b, 0x65, 0xe1, - 0x2b, 0x6e, 0x88, 0x40, 0xb9, 0xe9, 0x26, 0xe2, 0xb3, 0x1e, 0x71, 0x3b, 0x36, 0xe7, 0x1a, 0xaf, - 0x38, 0x40, 0x75, 0xd0, 0x9c, 0x9b, 0x60, 0x4a, 0x1f, 0x7d, 0xc6, 0x82, 0xc1, 0xb8, 0xde, 0x5a, - 0x8e, 0x82, 0x2d, 0xb7, 0x41, 0x22, 0x61, 0x8c, 0x1d, 0x51, 0xb2, 0xad, 0xcc, 0x2c, 0x4a, 0x82, - 0x9a, 0x2f, 0xdf, 0x1e, 0x6b, 0x08, 0x36, 0xf9, 0xd2, 0x4d, 0xca, 0xc3, 0xe2, 0xdd, 0x67, 0x49, - 0x9d, 0xad, 0x38, 0xb9, 0x27, 0x63, 0x33, 0xe5, 0xc8, 0xc6, 0xe9, 0x6c, 0xbb, 0xbe, 0x49, 0xd7, - 0x9b, 0xee, 0xd0, 0x3b, 0xef, 0xec, 0x8e, 0x3f, 0x3c, 0x93, 0xcf, 0x13, 0x77, 0xeb, 0x0c, 0x1b, - 0xb0, 0xb0, 0xed, 0x79, 0x98, 0xbc, 0xd6, 0x26, 0xcc, 0xe3, 0x52, 0xc0, 0x80, 0x2d, 0x6b, 0x82, - 0x99, 0x01, 0x33, 0x20, 0xd8, 0xe4, 0x8b, 0x5e, 0x83, 0xfe, 0x96, 0x93, 0x44, 0xee, 0xb6, 0x70, - 0xb3, 0x1c, 0x71, 0xbb, 0xb0, 0xc8, 0x68, 0x69, 0xe6, 0x4c, 0xd1, 0xf3, 0x46, 0x2c, 0x18, 0xa1, - 0x16, 0x54, 0x5a, 0x24, 0x6a, 0x92, 0xb1, 0x6a, 0x11, 0x2e, 0xe5, 0x45, 0x4a, 0x4a, 0x33, 0xac, - 0x51, 0xe3, 0x8a, 0xb5, 0x61, 0xce, 0x05, 0xbd, 0x0c, 0xd5, 0x98, 0x78, 0xa4, 0x4e, 0xcd, 0xa3, - 0x1a, 0xe3, 0xf8, 0xe3, 0x3d, 0x9a, 0x8a, 0xd4, 0x2e, 0x59, 0x11, 0x8f, 0xf2, 0x05, 0x26, 0xff, - 0x61, 0x45, 0x92, 0x0e, 0x60, 0xe8, 0xb5, 0x9b, 0xae, 0x3f, 0x06, 0x45, 0x0c, 0xe0, 0x32, 0xa3, - 0x95, 0x19, 0x40, 0xde, 0x88, 0x05, 0x23, 0xfb, 0x3f, 0x59, 0x80, 0xd2, 0x42, 0xed, 0x1e, 0xd8, - 0xc4, 0xaf, 0xa5, 0x6d, 0xe2, 0x85, 0x22, 0x8d, 0x96, 0x2e, 0x66, 0xf1, 0x6f, 0xd6, 0x20, 0xa3, - 0x0e, 0xae, 0x91, 0x38, 0x21, 0x8d, 0xb7, 0x45, 0xf8, 0xdb, 0x22, 0xfc, 0x6d, 0x11, 0xae, 0x44, - 0xf8, 0x5a, 0x46, 0x84, 0xbf, 0xdf, 0x58, 0xf5, 0xfa, 0xfc, 0xf6, 0x55, 0x75, 0xc0, 0x6b, 0xf6, - 0xc0, 0x40, 0xa0, 0x92, 0xe0, 0xca, 0xca, 0xd2, 0xb5, 0x5c, 0x99, 0xfd, 0x6a, 0x5a, 0x66, 0x1f, - 0x95, 0xc5, 0xff, 0x0b, 0x52, 0xfa, 0x5f, 0x5a, 0xf0, 0xae, 0xb4, 0xf4, 0x92, 0x33, 0x67, 0xbe, - 0xe9, 0x07, 0x11, 0x99, 0x75, 0xd7, 0xd7, 0x49, 0x44, 0xfc, 0x3a, 0x89, 0x95, 0x13, 0xc4, 0xea, - 0xe6, 0x04, 0x41, 0xcf, 0xc2, 0xd0, 0xad, 0x38, 0xf0, 0x97, 0x03, 0xd7, 0x17, 0x22, 0x88, 0xee, - 0x38, 0x4e, 0xdc, 0xd9, 0x1d, 0x1f, 0xa2, 0x23, 0x2a, 0xdb, 0x71, 0x0a, 0x0b, 0xcd, 0xc0, 0xc9, - 0x5b, 0xaf, 0x2d, 0x3b, 0x89, 0xe1, 0x4d, 0x90, 0xfb, 0x7e, 0x76, 0xde, 0x71, 0xe5, 0xc5, 0x0c, - 0x10, 0x77, 0xe2, 0xdb, 0x7f, 0xab, 0x04, 0x67, 0x33, 0x2f, 0x12, 0x78, 0x5e, 0xd0, 0x4e, 0xe8, - 0x9e, 0x08, 0x7d, 0xd5, 0x82, 0x13, 0xad, 0xb4, 0xc3, 0x22, 0x16, 0x7e, 0xe1, 0x0f, 0x16, 0xa6, - 0x23, 0x32, 0x1e, 0x91, 0xe9, 0x31, 0x31, 0x42, 0x27, 0x32, 0x80, 0x18, 0x77, 0xf4, 0x05, 0xbd, - 0x0c, 0xb5, 0x96, 0xb3, 0x7d, 0x3d, 0x6c, 0x38, 0x89, 0xdc, 0x8e, 0x76, 0xf7, 0x22, 0xb4, 0x13, - 0xd7, 0x9b, 0xe0, 0x91, 0x01, 0x13, 0xf3, 0x7e, 0xb2, 0x14, 0xad, 0x24, 0x91, 0xeb, 0x37, 0xb9, - 0x37, 0x70, 0x51, 0x92, 0xc1, 0x9a, 0xa2, 0xfd, 0x15, 0x2b, 0xab, 0xa4, 0xd4, 0xe8, 0x44, 0x4e, - 0x42, 0x9a, 0x3b, 0xe8, 0xa3, 0x50, 0xa1, 0xfb, 0x46, 0x39, 0x2a, 0x37, 0x8b, 0xd4, 0x9c, 0xc6, - 0x97, 0xd0, 0x4a, 0x94, 0xfe, 0x8b, 0x31, 0x67, 0x6a, 0x7f, 0xb5, 0x96, 0x35, 0x16, 0xd8, 0xd9, - 0xef, 0x05, 0x80, 0x66, 0xb0, 0x4a, 0x5a, 0xa1, 0x47, 0x87, 0xc5, 0x62, 0x07, 0x08, 0xca, 0x55, - 0x32, 0xa7, 0x20, 0xd8, 0xc0, 0x42, 0x7f, 0xc5, 0x02, 0x68, 0xca, 0x39, 0x2f, 0x0d, 0x81, 0xeb, - 0x45, 0xbe, 0x8e, 0x5e, 0x51, 0xba, 0x2f, 0x8a, 0x21, 0x36, 0x98, 0xa3, 0x9f, 0xb3, 0xa0, 0x9a, - 0xc8, 0xee, 0x73, 0xd5, 0xb8, 0x5a, 0x64, 0x4f, 0xe4, 0x4b, 0x6b, 0x9b, 0x48, 0x0d, 0x89, 0xe2, - 0x8b, 0x7e, 0xde, 0x02, 0x88, 0x77, 0xfc, 0xfa, 0x72, 0xe0, 0xb9, 0xf5, 0x1d, 0xa1, 0x31, 0x6f, - 0x14, 0xea, 0xce, 0x51, 0xd4, 0xa7, 0x47, 0xe8, 0x68, 0xe8, 0xff, 0xd8, 0xe0, 0x8c, 0x3e, 0x0e, - 0xd5, 0x58, 0x4c, 0x37, 0xa1, 0x23, 0x57, 0x8b, 0x75, 0x2a, 0x71, 0xda, 0x42, 0xbc, 0x8a, 0x7f, - 0x58, 0xf1, 0x44, 0xbf, 0x68, 0xc1, 0x68, 0x98, 0x76, 0x13, 0x0a, 0x75, 0x58, 0x9c, 0x0c, 0xc8, - 0xb8, 0x21, 0xb9, 0xb7, 0x25, 0xd3, 0x88, 0xb3, 0xbd, 0xa0, 0x12, 0x50, 0xcf, 0xe0, 0xa5, 0x90, - 0xbb, 0x2c, 0x07, 0xb4, 0x04, 0x9c, 0xcb, 0x02, 0x71, 0x27, 0x3e, 0x5a, 0x86, 0xd3, 0xb4, 0x77, - 0x3b, 0xdc, 0xfc, 0x94, 0xea, 0x25, 0x66, 0xca, 0xb0, 0x3a, 0xfd, 0x88, 0x98, 0x21, 0xec, 0x50, - 0x20, 0x8b, 0x83, 0x73, 0x9f, 0x44, 0xbf, 0x6f, 0xc1, 0x23, 0x2e, 0x53, 0x03, 0xa6, 0xbf, 0x5d, - 0x6b, 0x04, 0x71, 0x90, 0x4b, 0x0a, 0x95, 0x15, 0xdd, 0xd4, 0xcf, 0xf4, 0x0f, 0x8b, 0x37, 0x78, - 0x64, 0x7e, 0x8f, 0x2e, 0xe1, 0x3d, 0x3b, 0x8c, 0x7e, 0x02, 0x86, 0xe5, 0xba, 0x58, 0xa6, 0x22, - 0x98, 0x29, 0xda, 0xda, 0xf4, 0xc9, 0x3b, 0xbb, 0xe3, 0xc3, 0xab, 0x26, 0x00, 0xa7, 0xf1, 0xec, - 0x7f, 0x5d, 0x4e, 0x1d, 0xa7, 0x28, 0x1f, 0x26, 0x13, 0x37, 0x75, 0xe9, 0xff, 0x91, 0xd2, 0xb3, - 0x50, 0x71, 0xa3, 0xbc, 0x4b, 0x5a, 0xdc, 0xa8, 0xa6, 0x18, 0x1b, 0xcc, 0xa9, 0x51, 0x7a, 0xd2, - 0xc9, 0x7a, 0x4a, 0x85, 0x04, 0x7c, 0xb9, 0xc8, 0x2e, 0x75, 0x1e, 0x7e, 0x9d, 0x15, 0x5d, 0x3b, - 0xd9, 0x01, 0xc2, 0x9d, 0x5d, 0x42, 0x1f, 0x83, 0x5a, 0xa4, 0x22, 0x27, 0xca, 0x45, 0x6c, 0xd5, - 0xe4, 0xb4, 0x11, 0xdd, 0x51, 0xa7, 0x39, 0x3a, 0x46, 0x42, 0x73, 0xb4, 0x7f, 0x37, 0x7d, 0x82, - 0x64, 0xc8, 0x8e, 0x1e, 0x4e, 0xc7, 0xbe, 0x68, 0xc1, 0x60, 0x14, 0x78, 0x9e, 0xeb, 0x37, 0xa9, - 0x9c, 0x13, 0xca, 0xfa, 0xc3, 0xc7, 0xa2, 0x2f, 0x85, 0x40, 0x63, 0x96, 0x35, 0xd6, 0x3c, 0xb1, - 0xd9, 0x01, 0xfb, 0xcf, 0x2c, 0x18, 0xeb, 0x26, 0x8f, 0x11, 0x81, 0x77, 0x4a, 0x61, 0xa3, 0x86, - 0x62, 0xc9, 0x9f, 0x25, 0x1e, 0x51, 0x6e, 0xf3, 0xea, 0xf4, 0xe3, 0xe2, 0x35, 0xdf, 0xb9, 0xdc, - 0x1d, 0x15, 0xef, 0x45, 0x07, 0xbd, 0x04, 0x27, 0x8c, 0xf7, 0x8a, 0xd5, 0xc0, 0xd4, 0xa6, 0x27, - 0xa8, 0x01, 0x34, 0x95, 0x81, 0xdd, 0xdd, 0x1d, 0x7f, 0x28, 0xdb, 0x26, 0x14, 0x46, 0x07, 0x1d, - 0xfb, 0x1b, 0xa5, 0xec, 0xd7, 0x52, 0xba, 0xfe, 0x2d, 0xab, 0xc3, 0x9b, 0xf0, 0xc1, 0xe3, 0xd0, - 0xaf, 0xcc, 0xef, 0xa0, 0xc2, 0x4f, 0xba, 0xe3, 0xdc, 0xc7, 0xf3, 0x6d, 0xfb, 0xdf, 0xf4, 0xc1, - 0x1e, 0x3d, 0xeb, 0xc1, 0x78, 0x3f, 0xf0, 0xa1, 0xe8, 0xe7, 0x2d, 0x75, 0x60, 0xc6, 0xd7, 0x70, - 0xe3, 0xb8, 0xc6, 0x9e, 0xef, 0x9f, 0x62, 0x1e, 0x63, 0xa1, 0xbc, 0xe8, 0xe9, 0xa3, 0x39, 0xf4, - 0x35, 0x2b, 0x7d, 0xe4, 0xc7, 0x83, 0xe6, 0xdc, 0x63, 0xeb, 0x93, 0x71, 0x8e, 0xc8, 0x3b, 0xa6, - 0x4f, 0x9f, 0xba, 0x9d, 0x30, 0x4e, 0x00, 0xac, 0xbb, 0xbe, 0xe3, 0xb9, 0xaf, 0xd3, 0xdd, 0x51, - 0x85, 0x29, 0x78, 0x66, 0x31, 0x5d, 0x52, 0xad, 0xd8, 0xc0, 0x38, 0xf7, 0xff, 0xc3, 0xa0, 0xf1, - 0xe6, 0x39, 0xa1, 0x21, 0xa7, 0xcd, 0xd0, 0x90, 0x9a, 0x11, 0xd1, 0x71, 0xee, 0xfd, 0x70, 0x22, - 0xdb, 0xc1, 0x83, 0x3c, 0x6f, 0xff, 0xcf, 0x81, 0xec, 0x19, 0xdc, 0x2a, 0x89, 0x5a, 0xb4, 0x6b, - 0x6f, 0x3b, 0xb6, 0xde, 0x76, 0x6c, 0xbd, 0xed, 0xd8, 0x32, 0xcf, 0x26, 0x84, 0xd3, 0x66, 0xe0, - 0x1e, 0x39, 0x6d, 0x52, 0x6e, 0xa8, 0x6a, 0xe1, 0x6e, 0x28, 0xfb, 0x33, 0x1d, 0x9e, 0xfb, 0xd5, - 0x88, 0x10, 0x14, 0x40, 0xc5, 0x0f, 0x1a, 0x44, 0xda, 0xb8, 0x57, 0x8a, 0x31, 0xd8, 0xae, 0x05, - 0x0d, 0x23, 0x1c, 0x99, 0xfe, 0x8b, 0x31, 0xe7, 0x63, 0xdf, 0xa9, 0x40, 0xca, 0x9c, 0xe4, 0xdf, - 0xfd, 0x47, 0x61, 0x20, 0x22, 0x61, 0x70, 0x1d, 0x2f, 0x08, 0x5d, 0xa6, 0x33, 0x16, 0x78, 0x33, - 0x96, 0x70, 0xaa, 0xf3, 0x42, 0x27, 0xd9, 0x10, 0xca, 0x4c, 0xe9, 0xbc, 0x65, 0x27, 0xd9, 0xc0, - 0x0c, 0x82, 0xde, 0x0f, 0x23, 0x49, 0xea, 0x28, 0x5c, 0x1c, 0xf9, 0x3e, 0x24, 0x70, 0x47, 0xd2, - 0x07, 0xe5, 0x38, 0x83, 0x8d, 0x5e, 0x83, 0xbe, 0x0d, 0xe2, 0xb5, 0xc4, 0xa7, 0x5f, 0x29, 0x4e, - 0xd7, 0xb0, 0x77, 0xbd, 0x4c, 0xbc, 0x16, 0x97, 0x84, 0xf4, 0x17, 0x66, 0xac, 0xe8, 0xbc, 0xaf, - 0x6d, 0xb6, 0xe3, 0x24, 0x68, 0xb9, 0xaf, 0x4b, 0x4f, 0xe7, 0x07, 0x0b, 0x66, 0x7c, 0x55, 0xd2, - 0xe7, 0x2e, 0x25, 0xf5, 0x17, 0x6b, 0xce, 0xac, 0x1f, 0x0d, 0x37, 0x62, 0x53, 0x66, 0x47, 0x38, - 0x2c, 0x8b, 0xee, 0xc7, 0xac, 0xa4, 0xcf, 0xfb, 0xa1, 0xfe, 0x62, 0xcd, 0x19, 0xed, 0xa8, 0xf5, - 0x37, 0xc8, 0xfa, 0x70, 0xbd, 0xe0, 0x3e, 0xf0, 0xb5, 0x97, 0xbb, 0x0e, 0x1f, 0x87, 0x4a, 0x7d, - 0xc3, 0x89, 0x92, 0xb1, 0x21, 0x36, 0x69, 0xd4, 0x2c, 0x9e, 0xa1, 0x8d, 0x98, 0xc3, 0xd0, 0xa3, - 0x50, 0x8e, 0xc8, 0x3a, 0x8b, 0x7e, 0x35, 0xe2, 0xa2, 0x30, 0x59, 0xc7, 0xb4, 0xdd, 0xfe, 0x95, - 0x52, 0xda, 0x6c, 0x4b, 0xbf, 0x37, 0x9f, 0xed, 0xf5, 0x76, 0x14, 0x4b, 0xf7, 0x97, 0x31, 0xdb, - 0x59, 0x33, 0x96, 0x70, 0xf4, 0x49, 0x0b, 0x06, 0x6e, 0xc5, 0x81, 0xef, 0x93, 0x44, 0xa8, 0xc8, - 0x1b, 0x05, 0x0f, 0xc5, 0x15, 0x4e, 0x5d, 0xf7, 0x41, 0x34, 0x60, 0xc9, 0x97, 0x76, 0x97, 0x6c, - 0xd7, 0xbd, 0x76, 0xa3, 0x23, 0xd4, 0xe5, 0x22, 0x6f, 0xc6, 0x12, 0x4e, 0x51, 0x5d, 0x9f, 0xa3, - 0xf6, 0xa5, 0x51, 0xe7, 0x7d, 0x81, 0x2a, 0xe0, 0xf6, 0xdf, 0xe8, 0x87, 0x33, 0xb9, 0x8b, 0x83, - 0x1a, 0x54, 0xcc, 0x64, 0xb9, 0xe4, 0x7a, 0x44, 0x06, 0x79, 0x31, 0x83, 0xea, 0x86, 0x6a, 0xc5, - 0x06, 0x06, 0xfa, 0x59, 0x80, 0xd0, 0x89, 0x9c, 0x16, 0x51, 0xee, 0xe9, 0x23, 0xdb, 0x2d, 0xb4, - 0x1f, 0xcb, 0x92, 0xa6, 0xde, 0xa2, 0xab, 0xa6, 0x18, 0x1b, 0x2c, 0xd1, 0x73, 0x30, 0x18, 0x11, - 0x8f, 0x38, 0x31, 0x0b, 0x9e, 0xce, 0x66, 0x82, 0x60, 0x0d, 0xc2, 0x26, 0x1e, 0x7a, 0x42, 0xc5, - 0xc3, 0x65, 0xe2, 0x82, 0xd2, 0x31, 0x71, 0xe8, 0x0d, 0x0b, 0x46, 0xd6, 0x5d, 0x8f, 0x68, 0xee, - 0x22, 0x6f, 0x63, 0xe9, 0xe8, 0x2f, 0x79, 0xc9, 0xa4, 0xab, 0x25, 0x64, 0xaa, 0x39, 0xc6, 0x19, - 0xf6, 0xf4, 0x33, 0x6f, 0x91, 0x88, 0x89, 0xd6, 0xfe, 0xf4, 0x67, 0xbe, 0xc1, 0x9b, 0xb1, 0x84, - 0xa3, 0x29, 0x18, 0x0d, 0x9d, 0x38, 0x9e, 0x89, 0x48, 0x83, 0xf8, 0x89, 0xeb, 0x78, 0x3c, 0xab, - 0xa2, 0xaa, 0xa3, 0xaa, 0x97, 0xd3, 0x60, 0x9c, 0xc5, 0x47, 0x1f, 0x82, 0x87, 0xb9, 0xff, 0x67, - 0xd1, 0x8d, 0x63, 0xd7, 0x6f, 0xea, 0x69, 0x20, 0xdc, 0x60, 0xe3, 0x82, 0xd4, 0xc3, 0xf3, 0xf9, - 0x68, 0xb8, 0xdb, 0xf3, 0xe8, 0x29, 0xa8, 0xc6, 0x9b, 0x6e, 0x38, 0x13, 0x35, 0x62, 0x76, 0xf6, - 0x53, 0xd5, 0x4e, 0xd7, 0x15, 0xd1, 0x8e, 0x15, 0x06, 0xaa, 0xc3, 0x10, 0xff, 0x24, 0x3c, 0xa0, - 0x4f, 0xc8, 0xc7, 0xa7, 0xbb, 0xaa, 0x69, 0x91, 0x24, 0x38, 0x81, 0x9d, 0xdb, 0x17, 0xe5, 0x49, - 0x14, 0x3f, 0x38, 0xb9, 0x61, 0x90, 0xc1, 0x29, 0xa2, 0xf6, 0x2f, 0x95, 0xd2, 0x3b, 0x7f, 0x73, - 0x91, 0xa2, 0x98, 0x2e, 0xc5, 0xe4, 0x86, 0x13, 0x49, 0x85, 0x7d, 0xc4, 0xe4, 0x0f, 0x41, 0xf7, - 0x86, 0x13, 0x99, 0x8b, 0x9a, 0x31, 0xc0, 0x92, 0x13, 0xba, 0x05, 0x7d, 0x89, 0xe7, 0x14, 0x94, - 0x2d, 0x66, 0x70, 0xd4, 0x8e, 0x98, 0x85, 0xa9, 0x18, 0x33, 0x1e, 0xe8, 0x11, 0xba, 0xfb, 0x58, - 0x93, 0x27, 0x45, 0x62, 0xc3, 0xb0, 0x16, 0x63, 0xd6, 0x6a, 0x7f, 0x6b, 0x30, 0x47, 0xae, 0x2a, - 0x45, 0x86, 0x2e, 0x00, 0xd0, 0x8d, 0xec, 0x72, 0x44, 0xd6, 0xdd, 0x6d, 0x61, 0x48, 0xa8, 0xb5, - 0x7b, 0x4d, 0x41, 0xb0, 0x81, 0x25, 0x9f, 0x59, 0x69, 0xaf, 0xd3, 0x67, 0x4a, 0x9d, 0xcf, 0x70, - 0x08, 0x36, 0xb0, 0xd0, 0xb3, 0xd0, 0xef, 0xb6, 0x9c, 0xa6, 0x0a, 0x64, 0x7d, 0x84, 0x2e, 0xda, - 0x79, 0xd6, 0x72, 0x77, 0x77, 0x7c, 0x44, 0x75, 0x88, 0x35, 0x61, 0x81, 0x8b, 0xbe, 0x61, 0xc1, - 0x50, 0x3d, 0x68, 0xb5, 0x02, 0x9f, 0x6f, 0xff, 0xc4, 0x5e, 0xf6, 0xd6, 0x71, 0xa9, 0xf9, 0x89, - 0x19, 0x83, 0x19, 0xdf, 0xcc, 0xaa, 0xb4, 0x36, 0x13, 0x84, 0x53, 0xbd, 0x32, 0xd7, 0x76, 0x65, - 0x9f, 0xb5, 0xfd, 0x1b, 0x16, 0x9c, 0xe4, 0xcf, 0x1a, 0xbb, 0x52, 0x91, 0xc1, 0x15, 0x1c, 0xf3, - 0x6b, 0x75, 0x6c, 0xd4, 0x95, 0xb3, 0xb2, 0x03, 0x8e, 0x3b, 0x3b, 0x89, 0xe6, 0xe0, 0xe4, 0x7a, - 0x10, 0xd5, 0x89, 0x39, 0x10, 0x42, 0x30, 0x29, 0x42, 0x97, 0xb2, 0x08, 0xb8, 0xf3, 0x19, 0x74, - 0x03, 0x1e, 0x32, 0x1a, 0xcd, 0x71, 0xe0, 0xb2, 0xe9, 0x31, 0x41, 0xed, 0xa1, 0x4b, 0xb9, 0x58, - 0xb8, 0xcb, 0xd3, 0xd4, 0x88, 0x65, 0x10, 0xe5, 0xa4, 0x11, 0xf2, 0x49, 0x8b, 0xe8, 0x14, 0x14, - 0x67, 0xb0, 0xd3, 0x8e, 0x1f, 0xe8, 0xc1, 0xf1, 0xf3, 0x2a, 0x9c, 0xad, 0x77, 0x8e, 0xec, 0x56, - 0xdc, 0x5e, 0x63, 0xe9, 0x4b, 0x94, 0xf7, 0x0f, 0x09, 0x02, 0x67, 0x67, 0xba, 0x21, 0xe2, 0xee, - 0x34, 0xd0, 0x47, 0xa1, 0x1a, 0x11, 0xf6, 0x55, 0x79, 0x1e, 0xd2, 0x91, 0x77, 0xfb, 0xda, 0x82, - 0xe5, 0x64, 0xb5, 0xec, 0x16, 0x0d, 0x31, 0x56, 0x1c, 0xd1, 0x6d, 0x18, 0x08, 0x9d, 0xa4, 0xbe, - 0x41, 0xe2, 0xb1, 0xe1, 0x22, 0x7c, 0xd3, 0x8a, 0x39, 0x3b, 0x4a, 0x30, 0xd2, 0xa6, 0x39, 0x13, - 0x2c, 0xb9, 0x51, 0x6b, 0xa6, 0x1e, 0xb4, 0xc2, 0xc0, 0x27, 0x7e, 0x12, 0x8f, 0x8d, 0x68, 0x6b, - 0x66, 0x46, 0xb5, 0x62, 0x03, 0x03, 0x2d, 0xc3, 0x69, 0xe6, 0xfb, 0xba, 0xe9, 0x26, 0x1b, 0x41, - 0x3b, 0x91, 0x5b, 0xb9, 0xb1, 0xd1, 0xf4, 0x89, 0xcf, 0x42, 0x0e, 0x0e, 0xce, 0x7d, 0xf2, 0xdc, - 0x07, 0xe0, 0x64, 0x87, 0x28, 0x38, 0x90, 0xdb, 0x69, 0x16, 0x1e, 0xca, 0x5f, 0x74, 0x07, 0x72, - 0x3e, 0xfd, 0xe3, 0x4c, 0xf4, 0xb1, 0x61, 0x88, 0xf7, 0xe0, 0xc8, 0x74, 0xa0, 0x4c, 0xfc, 0x2d, - 0xa1, 0x83, 0x2e, 0x1d, 0xed, 0xdb, 0x5d, 0xf4, 0xb7, 0xb8, 0xcc, 0x60, 0xde, 0x9a, 0x8b, 0xfe, - 0x16, 0xa6, 0xb4, 0xd1, 0x9b, 0x56, 0xca, 0x90, 0xe4, 0xee, 0xcf, 0x57, 0x8e, 0x65, 0xe7, 0xd1, - 0xb3, 0x6d, 0x69, 0xff, 0x5e, 0x09, 0xce, 0xef, 0x47, 0xa4, 0x87, 0xe1, 0x7b, 0x1c, 0xfa, 0x63, - 0x16, 0x4f, 0x20, 0x84, 0xfa, 0x20, 0x9d, 0xab, 0x3c, 0xc2, 0xe0, 0x55, 0x2c, 0x40, 0xc8, 0x83, - 0x72, 0xcb, 0x09, 0x85, 0x57, 0x6c, 0xfe, 0xa8, 0xe9, 0x4c, 0xf4, 0xbf, 0xe3, 0x2d, 0x3a, 0x21, - 0xf7, 0xb5, 0x18, 0x0d, 0x98, 0xb2, 0x41, 0x09, 0x54, 0x9c, 0x28, 0x72, 0xe4, 0xe1, 0xf5, 0xd5, - 0x62, 0xf8, 0x4d, 0x51, 0x92, 0xfc, 0xec, 0x2f, 0xd5, 0x84, 0x39, 0x33, 0xfb, 0xf3, 0x03, 0xa9, - 0x94, 0x1e, 0x16, 0x91, 0x10, 0x43, 0xbf, 0x70, 0x86, 0x59, 0x45, 0x67, 0x91, 0xf1, 0x9c, 0x4c, - 0xb6, 0xcf, 0x14, 0x99, 0xed, 0x82, 0x15, 0xfa, 0x9c, 0xc5, 0xf2, 0xc7, 0x65, 0x9a, 0x93, 0xd8, - 0xdd, 0x1d, 0x4f, 0x3a, 0xbb, 0x99, 0x95, 0x2e, 0x1b, 0xb1, 0xc9, 0x5d, 0xd4, 0x81, 0x60, 0x56, - 0x6d, 0x67, 0x1d, 0x08, 0x66, 0xa5, 0x4a, 0x38, 0xda, 0xce, 0x89, 0x3c, 0x28, 0x20, 0x07, 0xb9, - 0x87, 0x58, 0x83, 0xaf, 0x59, 0x70, 0xd2, 0xcd, 0x1e, 0x21, 0x8b, 0xbd, 0xd0, 0xcd, 0x62, 0x3c, - 0x57, 0x9d, 0x27, 0xd4, 0xca, 0x1c, 0xe8, 0x00, 0xe1, 0xce, 0xce, 0xa0, 0x06, 0xf4, 0xb9, 0xfe, - 0x7a, 0x20, 0x8c, 0xa0, 0xe9, 0xa3, 0x75, 0x6a, 0xde, 0x5f, 0x0f, 0xf4, 0x6a, 0xa6, 0xff, 0x30, - 0xa3, 0x8e, 0x16, 0xe0, 0xb4, 0xcc, 0xea, 0xb8, 0xec, 0xc6, 0x49, 0x10, 0xed, 0x2c, 0xb8, 0x2d, - 0x37, 0x61, 0x06, 0x4c, 0x79, 0x7a, 0x8c, 0xea, 0x07, 0x9c, 0x03, 0xc7, 0xb9, 0x4f, 0xa1, 0xd7, - 0x61, 0x40, 0x1e, 0xdb, 0x56, 0x8b, 0xd8, 0x57, 0x76, 0xce, 0x7f, 0x35, 0x99, 0x56, 0xc4, 0xb9, - 0xad, 0x64, 0x68, 0xbf, 0x31, 0x08, 0x9d, 0xa7, 0xcb, 0xe9, 0xa3, 0x64, 0xeb, 0x5e, 0x1f, 0x25, - 0xd3, 0x0d, 0x4f, 0xac, 0x4f, 0x81, 0x0b, 0x98, 0xdb, 0x82, 0xab, 0x3e, 0xe1, 0xdb, 0xf1, 0xeb, - 0x98, 0xf1, 0x40, 0x11, 0xf4, 0x6f, 0x10, 0xc7, 0x4b, 0x36, 0x8a, 0x39, 0x8c, 0xb8, 0xcc, 0x68, - 0x65, 0x53, 0xb1, 0x78, 0x2b, 0x16, 0x9c, 0xd0, 0x36, 0x0c, 0x6c, 0xf0, 0x09, 0x20, 0xf6, 0x20, - 0x8b, 0x47, 0x1d, 0xdc, 0xd4, 0xac, 0xd2, 0x9f, 0x5b, 0x34, 0x60, 0xc9, 0x8e, 0x85, 0x2d, 0x19, - 0x81, 0x15, 0x7c, 0xe9, 0x16, 0x97, 0x85, 0xd6, 0x7b, 0x54, 0xc5, 0x47, 0x60, 0x28, 0x22, 0xf5, - 0xc0, 0xaf, 0xbb, 0x1e, 0x69, 0x4c, 0xc9, 0x83, 0x86, 0x83, 0x24, 0x1f, 0xb1, 0x7d, 0x3c, 0x36, - 0x68, 0xe0, 0x14, 0x45, 0xf4, 0x59, 0x0b, 0x46, 0x54, 0xe6, 0x2e, 0xfd, 0x20, 0x44, 0x38, 0x94, - 0x17, 0x0a, 0xca, 0x13, 0x66, 0x34, 0xa7, 0x11, 0xdd, 0x0b, 0xa4, 0xdb, 0x70, 0x86, 0x2f, 0x7a, - 0x09, 0x20, 0x58, 0xe3, 0xb1, 0x49, 0x53, 0x89, 0xf0, 0x2e, 0x1f, 0xe4, 0x55, 0x47, 0x78, 0x12, - 0xa3, 0xa4, 0x80, 0x0d, 0x6a, 0xe8, 0x2a, 0x00, 0x5f, 0x36, 0xab, 0x3b, 0x21, 0xdf, 0xa3, 0xe8, - 0xec, 0x31, 0x58, 0x51, 0x90, 0xbb, 0xbb, 0xe3, 0x9d, 0xde, 0x3e, 0x16, 0x80, 0x61, 0x3c, 0x8e, - 0x7e, 0x06, 0x06, 0xe2, 0x76, 0xab, 0xe5, 0x28, 0xdf, 0x73, 0x81, 0x69, 0x91, 0x9c, 0xae, 0x21, - 0x8a, 0x78, 0x03, 0x96, 0x1c, 0xd1, 0x2d, 0x2a, 0x54, 0x63, 0xe1, 0x86, 0x64, 0xab, 0x88, 0xdb, - 0x04, 0x83, 0xec, 0x9d, 0xde, 0x23, 0x0d, 0x6f, 0x9c, 0x83, 0x73, 0x77, 0x77, 0xfc, 0xa1, 0x74, - 0xfb, 0x42, 0x20, 0x12, 0x15, 0x73, 0x69, 0xa2, 0x2b, 0xb2, 0xfe, 0x0d, 0x7d, 0x6d, 0x59, 0x96, - 0xe1, 0x49, 0x5d, 0xff, 0x86, 0x35, 0x77, 0x1f, 0x33, 0xf3, 0x61, 0xb4, 0x08, 0xa7, 0xea, 0x81, - 0x9f, 0x44, 0x81, 0xe7, 0xf1, 0xfa, 0x4f, 0x7c, 0xcf, 0xc7, 0x7d, 0xd3, 0xef, 0x14, 0xdd, 0x3e, - 0x35, 0xd3, 0x89, 0x82, 0xf3, 0x9e, 0xb3, 0xfd, 0xf4, 0x39, 0x91, 0x18, 0x9c, 0x67, 0x61, 0x88, - 0x6c, 0x27, 0x24, 0xf2, 0x1d, 0xef, 0x3a, 0x5e, 0x90, 0x5e, 0x59, 0xb6, 0x06, 0x2e, 0x1a, 0xed, - 0x38, 0x85, 0x85, 0x6c, 0xe5, 0x28, 0x31, 0x92, 0x6f, 0xb9, 0xa3, 0x44, 0xba, 0x45, 0xec, 0xff, - 0x55, 0x4a, 0x19, 0x64, 0xf7, 0xe5, 0x54, 0x8a, 0x55, 0x11, 0x91, 0xe5, 0x56, 0x18, 0x40, 0x6c, - 0x34, 0x8a, 0xe4, 0xac, 0xaa, 0x88, 0x2c, 0x99, 0x8c, 0x70, 0x9a, 0x2f, 0xda, 0x84, 0xca, 0x46, - 0x10, 0x27, 0x72, 0xfb, 0x71, 0xc4, 0x9d, 0xce, 0xe5, 0x20, 0x4e, 0x98, 0x15, 0xa1, 0x5e, 0x9b, - 0xb6, 0xc4, 0x98, 0xf3, 0xb0, 0xff, 0xb3, 0x95, 0xf2, 0xc1, 0xdf, 0x64, 0x01, 0xcc, 0x5b, 0xc4, - 0xa7, 0xcb, 0xda, 0x0c, 0x99, 0xfa, 0x89, 0x4c, 0x3a, 0xe8, 0xbb, 0xba, 0x95, 0x37, 0xbb, 0x4d, - 0x29, 0x4c, 0x30, 0x12, 0x46, 0x74, 0xd5, 0x27, 0xac, 0x74, 0x5e, 0x6f, 0xa9, 0x88, 0x0d, 0x86, - 0x99, 0xdb, 0xbe, 0x6f, 0x8a, 0xb0, 0xfd, 0xa6, 0x05, 0x03, 0xd3, 0x4e, 0x7d, 0x33, 0x58, 0x5f, - 0x47, 0x4f, 0x41, 0xb5, 0xd1, 0x8e, 0xcc, 0x14, 0x63, 0xe5, 0x38, 0x98, 0x15, 0xed, 0x58, 0x61, - 0xd0, 0x39, 0xbc, 0xee, 0xd4, 0x65, 0x86, 0x7b, 0x99, 0xcf, 0xe1, 0x4b, 0xac, 0x05, 0x0b, 0x08, - 0x7a, 0x0e, 0x06, 0x5b, 0xce, 0xb6, 0x7c, 0x38, 0x7b, 0x00, 0xb0, 0xa8, 0x41, 0xd8, 0xc4, 0xb3, - 0xff, 0x85, 0x05, 0x63, 0xd3, 0x4e, 0xec, 0xd6, 0xa7, 0xda, 0xc9, 0xc6, 0xb4, 0x9b, 0xac, 0xb5, - 0xeb, 0x9b, 0x24, 0xe1, 0x65, 0x0d, 0x68, 0x2f, 0xdb, 0x31, 0x5d, 0x4a, 0x6a, 0x5f, 0xa7, 0x7a, - 0x79, 0x5d, 0xb4, 0x63, 0x85, 0x81, 0x5e, 0x87, 0xc1, 0xd0, 0x89, 0xe3, 0xdb, 0x41, 0xd4, 0xc0, - 0x64, 0xbd, 0x98, 0xa2, 0x22, 0x2b, 0xa4, 0x1e, 0x91, 0x04, 0x93, 0x75, 0x71, 0x58, 0xae, 0xe9, - 0x63, 0x93, 0x99, 0xfd, 0x45, 0x0b, 0xce, 0x4e, 0x13, 0x27, 0x22, 0x11, 0xab, 0x41, 0xa2, 0x5e, - 0x64, 0xc6, 0x0b, 0xda, 0x0d, 0xf4, 0x1a, 0x54, 0x13, 0xda, 0x4c, 0xbb, 0x65, 0x15, 0xdb, 0x2d, - 0x76, 0xd6, 0xbd, 0x2a, 0x88, 0x63, 0xc5, 0xc6, 0xfe, 0x9b, 0x16, 0x0c, 0xb1, 0xe3, 0xba, 0x59, - 0x92, 0x38, 0xae, 0xd7, 0x51, 0xaa, 0xcb, 0xea, 0xb1, 0x54, 0xd7, 0x79, 0xe8, 0xdb, 0x08, 0x5a, - 0x24, 0x7b, 0xd4, 0x7c, 0x39, 0xa0, 0xdb, 0x6a, 0x0a, 0x41, 0xcf, 0xd0, 0x0f, 0xef, 0xfa, 0x89, - 0x43, 0x97, 0x80, 0x74, 0x07, 0x8f, 0xf2, 0x8f, 0xae, 0x9a, 0xb1, 0x89, 0x63, 0xff, 0xf3, 0x1a, - 0x0c, 0x88, 0xb8, 0x88, 0x9e, 0x4b, 0x5b, 0xc8, 0xfd, 0x7d, 0xa9, 0xeb, 0xfe, 0x3e, 0x86, 0xfe, - 0x3a, 0xab, 0x19, 0x28, 0xcc, 0xc8, 0xab, 0x85, 0x04, 0xd2, 0xf0, 0x32, 0x84, 0xba, 0x5b, 0xfc, - 0x3f, 0x16, 0xac, 0xd0, 0x97, 0x2c, 0x18, 0xad, 0x07, 0xbe, 0x4f, 0xea, 0xda, 0xc6, 0xe9, 0x2b, - 0x22, 0x5e, 0x62, 0x26, 0x4d, 0x54, 0x9f, 0x15, 0x65, 0x00, 0x38, 0xcb, 0x1e, 0xbd, 0x00, 0xc3, - 0x7c, 0xcc, 0x6e, 0xa4, 0x7c, 0xd8, 0xba, 0x82, 0x93, 0x09, 0xc4, 0x69, 0x5c, 0x34, 0xc1, 0xcf, - 0x02, 0x44, 0xad, 0xa4, 0x7e, 0xed, 0xaa, 0x33, 0xaa, 0x24, 0x19, 0x18, 0x28, 0x02, 0x14, 0x91, - 0xf5, 0x88, 0xc4, 0x1b, 0x22, 0x6e, 0x84, 0xd9, 0x57, 0x03, 0x87, 0xcb, 0x63, 0xc7, 0x1d, 0x94, - 0x70, 0x0e, 0x75, 0xb4, 0x29, 0x36, 0x98, 0xd5, 0x22, 0x64, 0xa8, 0xf8, 0xcc, 0x5d, 0xf7, 0x99, - 0xe3, 0x50, 0x89, 0x37, 0x9c, 0xa8, 0xc1, 0xec, 0xba, 0x32, 0xcf, 0x9d, 0x5a, 0xa1, 0x0d, 0x98, - 0xb7, 0xa3, 0x59, 0x38, 0x91, 0xa9, 0x3f, 0x15, 0x33, 0xcb, 0xad, 0xaa, 0xf3, 0x64, 0x32, 0x95, - 0xab, 0x62, 0xdc, 0xf1, 0x84, 0xe9, 0x7c, 0x18, 0xdc, 0xc7, 0xf9, 0xb0, 0xa3, 0xa2, 0x13, 0xb9, - 0x0b, 0xf9, 0xc5, 0x42, 0x06, 0xa0, 0xa7, 0x50, 0xc4, 0x2f, 0x64, 0x42, 0x11, 0xb9, 0x1b, 0xf9, - 0x46, 0x31, 0x1d, 0x38, 0x78, 0xdc, 0xe1, 0xfd, 0x8c, 0x23, 0xfc, 0x4b, 0x0b, 0xe4, 0x77, 0x9d, - 0x71, 0xea, 0x1b, 0x84, 0x4e, 0x19, 0xf4, 0x7e, 0x18, 0x51, 0x5b, 0xe8, 0x99, 0xa0, 0xed, 0xf3, - 0x10, 0xc2, 0xb2, 0x3e, 0xb1, 0xc0, 0x29, 0x28, 0xce, 0x60, 0xa3, 0x49, 0xa8, 0xd1, 0x71, 0xe2, - 0x8f, 0x72, 0x5d, 0xab, 0xb6, 0xe9, 0x53, 0xcb, 0xf3, 0xe2, 0x29, 0x8d, 0x83, 0x02, 0x38, 0xe9, - 0x39, 0x71, 0xc2, 0x7a, 0x40, 0x77, 0xd4, 0x87, 0xac, 0x22, 0xc1, 0x92, 0x31, 0x16, 0xb2, 0x84, - 0x70, 0x27, 0x6d, 0xfb, 0x3b, 0x7d, 0x30, 0x9c, 0x92, 0x8c, 0x07, 0x54, 0xd2, 0x4f, 0x41, 0x55, - 0xea, 0xcd, 0x6c, 0xb9, 0x1c, 0xa5, 0x5c, 0x15, 0x06, 0x55, 0x5a, 0x6b, 0x5a, 0xab, 0x66, 0x8d, - 0x0a, 0x43, 0xe1, 0x62, 0x13, 0x8f, 0x09, 0xe5, 0xc4, 0x8b, 0x67, 0x3c, 0x97, 0xf8, 0x09, 0xef, - 0x66, 0x31, 0x42, 0x79, 0x75, 0x61, 0xc5, 0x24, 0xaa, 0x85, 0x72, 0x06, 0x80, 0xb3, 0xec, 0xd1, - 0xa7, 0x2d, 0x18, 0x76, 0x6e, 0xc7, 0xba, 0xb0, 0xad, 0x08, 0x3a, 0x3c, 0xa2, 0x92, 0x4a, 0xd5, - 0xca, 0xe5, 0x2e, 0xdf, 0x54, 0x13, 0x4e, 0x33, 0x45, 0x6f, 0x59, 0x80, 0xc8, 0x36, 0xa9, 0xcb, - 0xb0, 0x48, 0xd1, 0x97, 0xfe, 0x22, 0x76, 0x9a, 0x17, 0x3b, 0xe8, 0x72, 0xa9, 0xde, 0xd9, 0x8e, - 0x73, 0xfa, 0x60, 0x7f, 0xab, 0xac, 0x16, 0x94, 0x8e, 0xc4, 0x75, 0x8c, 0x88, 0x40, 0xeb, 0xf0, - 0x11, 0x81, 0x3a, 0xa2, 0xa1, 0x33, 0x39, 0x35, 0x95, 0xcb, 0x56, 0xba, 0x4f, 0xb9, 0x6c, 0x3f, - 0x67, 0xa5, 0x0a, 0x43, 0x0d, 0x5e, 0x78, 0xa9, 0xd8, 0x28, 0xe0, 0x09, 0x1e, 0x6d, 0x91, 0x91, - 0xee, 0xe9, 0x20, 0x1b, 0x2a, 0x4d, 0x0d, 0xb4, 0x03, 0x49, 0xc3, 0x7f, 0x57, 0x86, 0x41, 0x43, - 0x93, 0xe6, 0x9a, 0x45, 0xd6, 0x03, 0x66, 0x16, 0x95, 0x0e, 0x60, 0x16, 0xfd, 0x2c, 0xd4, 0xea, - 0x52, 0xca, 0x17, 0x53, 0x1a, 0x39, 0xab, 0x3b, 0xb4, 0xa0, 0x57, 0x4d, 0x58, 0xf3, 0x44, 0x73, - 0xa9, 0x0c, 0x28, 0xa1, 0x21, 0xfa, 0x98, 0x86, 0xc8, 0x4b, 0x51, 0x12, 0x9a, 0xa2, 0xf3, 0x19, - 0x56, 0x3f, 0x2c, 0x74, 0xc5, 0x7b, 0xc9, 0x58, 0x7d, 0x5e, 0x3f, 0x6c, 0x79, 0x5e, 0x36, 0x63, - 0x13, 0xc7, 0xfe, 0x8e, 0xa5, 0x3e, 0xee, 0x3d, 0x28, 0x75, 0x71, 0x2b, 0x5d, 0xea, 0xe2, 0x62, - 0x21, 0xc3, 0xdc, 0xa5, 0xc6, 0xc5, 0x35, 0x18, 0x98, 0x09, 0x5a, 0x2d, 0xc7, 0x6f, 0xa0, 0x1f, - 0x81, 0x81, 0x3a, 0xff, 0x29, 0x1c, 0x3b, 0xec, 0x78, 0x50, 0x40, 0xb1, 0x84, 0xa1, 0x47, 0xa0, - 0xcf, 0x89, 0x9a, 0xd2, 0x99, 0xc3, 0x82, 0x73, 0xa6, 0xa2, 0x66, 0x8c, 0x59, 0xab, 0xfd, 0x8f, - 0xfa, 0x80, 0x9d, 0x69, 0x3b, 0x11, 0x69, 0xac, 0x06, 0xac, 0x34, 0xe3, 0xb1, 0x1e, 0xaa, 0xe9, - 0xcd, 0xd2, 0x83, 0x7c, 0xb0, 0x66, 0x1c, 0xae, 0x94, 0xef, 0xf1, 0xe1, 0x4a, 0x97, 0xf3, 0xb2, - 0xbe, 0x07, 0xe8, 0xbc, 0xcc, 0xfe, 0xbc, 0x05, 0x48, 0x05, 0x42, 0xe8, 0x03, 0xed, 0x49, 0xa8, - 0xa9, 0x90, 0x08, 0x61, 0x58, 0x69, 0x11, 0x21, 0x01, 0x58, 0xe3, 0xf4, 0xb0, 0x43, 0x7e, 0x5c, - 0xca, 0xef, 0x72, 0x3a, 0xae, 0x97, 0x49, 0x7d, 0x21, 0xce, 0xed, 0xdf, 0x2e, 0xc1, 0x43, 0x5c, - 0x25, 0x2f, 0x3a, 0xbe, 0xd3, 0x24, 0x2d, 0xda, 0xab, 0x5e, 0x43, 0x14, 0xea, 0x74, 0x6b, 0xe6, - 0xca, 0x38, 0xdd, 0xa3, 0xae, 0x5d, 0xbe, 0xe6, 0xf8, 0x2a, 0x9b, 0xf7, 0xdd, 0x04, 0x33, 0xe2, - 0x28, 0x86, 0xaa, 0xbc, 0x37, 0x40, 0xc8, 0xe2, 0x82, 0x18, 0x29, 0xb1, 0x24, 0xf4, 0x26, 0xc1, - 0x8a, 0x11, 0x35, 0x5c, 0xbd, 0xa0, 0xbe, 0x89, 0x49, 0x18, 0x30, 0xb9, 0x6b, 0x84, 0x49, 0x2e, - 0x88, 0x76, 0xac, 0x30, 0xec, 0xdf, 0xb6, 0x20, 0xab, 0x91, 0x8c, 0x1a, 0x78, 0xd6, 0x9e, 0x35, - 0xf0, 0x0e, 0x50, 0x45, 0xee, 0xa7, 0x61, 0xd0, 0x49, 0xa8, 0x11, 0xc1, 0xb7, 0xdd, 0xe5, 0xc3, - 0x1d, 0x6b, 0x2c, 0x06, 0x0d, 0x77, 0xdd, 0x65, 0xdb, 0x6d, 0x93, 0x9c, 0xfd, 0xdf, 0xfb, 0xe0, - 0x64, 0x47, 0x56, 0x0b, 0x7a, 0x1e, 0x86, 0xea, 0x62, 0x7a, 0x84, 0xd2, 0xa1, 0x55, 0x33, 0xc3, - 0xea, 0x34, 0x0c, 0xa7, 0x30, 0x7b, 0x98, 0xa0, 0xf3, 0x70, 0x2a, 0xa2, 0x1b, 0xfd, 0x36, 0x99, - 0x5a, 0x4f, 0x48, 0xb4, 0x42, 0xea, 0x81, 0xdf, 0xe0, 0x95, 0x1a, 0xcb, 0xd3, 0x0f, 0xdf, 0xd9, - 0x1d, 0x3f, 0x85, 0x3b, 0xc1, 0x38, 0xef, 0x19, 0x14, 0xc2, 0xb0, 0x67, 0xda, 0x80, 0x62, 0x03, - 0x70, 0x28, 0xf3, 0x51, 0xd9, 0x08, 0xa9, 0x66, 0x9c, 0x66, 0x90, 0x36, 0x24, 0x2b, 0xf7, 0xc9, - 0x90, 0xfc, 0x94, 0x36, 0x24, 0xf9, 0xf9, 0xfb, 0x87, 0x0b, 0xce, 0x6a, 0x3a, 0x6e, 0x4b, 0xf2, - 0x45, 0xa8, 0xca, 0xd8, 0xa4, 0x9e, 0x62, 0x7a, 0x4c, 0x3a, 0x5d, 0x24, 0xda, 0x13, 0xf0, 0xc3, - 0x17, 0xa3, 0xc8, 0x18, 0xcc, 0x6b, 0x41, 0x32, 0xe5, 0x79, 0xc1, 0x6d, 0xaa, 0xa4, 0xaf, 0xc7, - 0x44, 0x78, 0x58, 0xec, 0xbb, 0x25, 0xc8, 0xd9, 0xac, 0xd0, 0xf5, 0xa8, 0x2d, 0x83, 0xd4, 0x7a, - 0x3c, 0x98, 0x75, 0x80, 0xb6, 0x79, 0xfc, 0x16, 0xd7, 0x81, 0x1f, 0x2a, 0x7a, 0xb3, 0xa5, 0x43, - 0xba, 0x54, 0x32, 0x86, 0x0a, 0xeb, 0xba, 0x00, 0xa0, 0x0d, 0x3a, 0x11, 0x6a, 0xaf, 0x8e, 0x87, - 0xb5, 0xdd, 0x87, 0x0d, 0x2c, 0xba, 0xf7, 0x76, 0xfd, 0x38, 0x71, 0x3c, 0xef, 0xb2, 0xeb, 0x27, - 0xc2, 0x89, 0xa8, 0x94, 0xfd, 0xbc, 0x06, 0x61, 0x13, 0xef, 0xdc, 0x7b, 0x8c, 0xef, 0x77, 0x90, - 0xef, 0xbe, 0x01, 0x67, 0xe7, 0xdc, 0x44, 0x25, 0x88, 0xa8, 0xf9, 0x46, 0xed, 0x35, 0x95, 0xf0, - 0x64, 0x75, 0x4d, 0x78, 0x32, 0x12, 0x34, 0x4a, 0xe9, 0x7c, 0x92, 0x6c, 0x82, 0x86, 0xfd, 0x3c, - 0x9c, 0x9e, 0x73, 0x93, 0x4b, 0xae, 0x47, 0x0e, 0xc8, 0xc4, 0xfe, 0xad, 0x7e, 0x18, 0x32, 0x53, - 0x1d, 0x0f, 0x92, 0xb3, 0xf5, 0x45, 0x6a, 0x92, 0x89, 0xb7, 0x73, 0xd5, 0xe1, 0xda, 0xcd, 0x23, - 0xe7, 0x5d, 0xe6, 0x8f, 0x98, 0x61, 0x95, 0x69, 0x9e, 0xd8, 0xec, 0x00, 0xba, 0x0d, 0x95, 0x75, - 0x96, 0x40, 0x50, 0x2e, 0x22, 0x02, 0x21, 0x6f, 0x44, 0xf5, 0x72, 0xe4, 0x29, 0x08, 0x9c, 0x1f, - 0xd5, 0xa4, 0x51, 0x3a, 0x2b, 0xcd, 0x08, 0x5a, 0x15, 0xf9, 0x68, 0x0a, 0xa3, 0x9b, 0x4a, 0xa8, - 0x1c, 0x42, 0x25, 0xa4, 0x04, 0x74, 0xff, 0x7d, 0x12, 0xd0, 0x2c, 0x19, 0x24, 0xd9, 0x60, 0x76, - 0x9e, 0x88, 0xd2, 0x1f, 0x60, 0x83, 0x60, 0x24, 0x83, 0xa4, 0xc0, 0x38, 0x8b, 0x8f, 0x3e, 0xae, - 0x44, 0x7c, 0xb5, 0x08, 0xff, 0xab, 0x39, 0xa3, 0x8f, 0x5b, 0xba, 0x7f, 0xbe, 0x04, 0x23, 0x73, - 0x7e, 0x7b, 0x79, 0x6e, 0xb9, 0xbd, 0xe6, 0xb9, 0xf5, 0xab, 0x64, 0x87, 0x8a, 0xf0, 0x4d, 0xb2, - 0x33, 0x3f, 0x2b, 0x56, 0x90, 0x9a, 0x33, 0x57, 0x69, 0x23, 0xe6, 0x30, 0x2a, 0x8c, 0xd6, 0x5d, - 0xbf, 0x49, 0xa2, 0x30, 0x72, 0x85, 0x6b, 0xd4, 0x10, 0x46, 0x97, 0x34, 0x08, 0x9b, 0x78, 0x94, - 0x76, 0x70, 0xdb, 0x27, 0x51, 0xd6, 0xe0, 0x5d, 0xa2, 0x8d, 0x98, 0xc3, 0x28, 0x52, 0x12, 0xb5, - 0xe3, 0x44, 0x4c, 0x46, 0x85, 0xb4, 0x4a, 0x1b, 0x31, 0x87, 0xd1, 0x95, 0x1e, 0xb7, 0xd7, 0x58, - 0x80, 0x47, 0x26, 0x25, 0x60, 0x85, 0x37, 0x63, 0x09, 0xa7, 0xa8, 0x9b, 0x64, 0x67, 0x96, 0xee, - 0x8e, 0x33, 0x99, 0x41, 0x57, 0x79, 0x33, 0x96, 0x70, 0x56, 0x4b, 0x32, 0x3d, 0x1c, 0xdf, 0x77, - 0xb5, 0x24, 0xd3, 0xdd, 0xef, 0xb2, 0xcf, 0xfe, 0x55, 0x0b, 0x86, 0xcc, 0xb0, 0x2c, 0xd4, 0xcc, - 0xd8, 0xc2, 0x4b, 0x1d, 0xa5, 0x88, 0xdf, 0x97, 0x77, 0x0d, 0x5c, 0xd3, 0x4d, 0x82, 0x30, 0x7e, - 0x9a, 0xf8, 0x4d, 0xd7, 0x27, 0xec, 0xb4, 0x9d, 0x87, 0x73, 0xa5, 0x62, 0xbe, 0x66, 0x82, 0x06, - 0x39, 0x84, 0x31, 0x6d, 0xdf, 0x84, 0x93, 0x1d, 0xe9, 0x60, 0x3d, 0x98, 0x20, 0xfb, 0x26, 0xe3, - 0xda, 0x18, 0x06, 0x29, 0x61, 0x59, 0xcf, 0x68, 0x06, 0x4e, 0xf2, 0x85, 0x44, 0x39, 0xad, 0xd4, - 0x37, 0x48, 0x4b, 0xa5, 0xf8, 0x31, 0x3f, 0xfc, 0x8d, 0x2c, 0x10, 0x77, 0xe2, 0xdb, 0x5f, 0xb0, - 0x60, 0x38, 0x95, 0xa1, 0x57, 0x90, 0xb1, 0xc4, 0x56, 0x5a, 0xc0, 0xa2, 0x04, 0x59, 0xa8, 0x74, - 0x99, 0x29, 0x53, 0xbd, 0xd2, 0x34, 0x08, 0x9b, 0x78, 0xf6, 0x9b, 0x25, 0xa8, 0xca, 0x48, 0x8b, - 0x1e, 0xba, 0xf2, 0x39, 0x0b, 0x86, 0xd5, 0xd9, 0x07, 0x73, 0xaa, 0x95, 0x8a, 0x48, 0x87, 0xa0, - 0x3d, 0x50, 0xdb, 0x72, 0x7f, 0x3d, 0xd0, 0x96, 0x3b, 0x36, 0x99, 0xe1, 0x34, 0x6f, 0x74, 0x03, - 0x20, 0xde, 0x89, 0x13, 0xd2, 0x32, 0xdc, 0x7b, 0xb6, 0xb1, 0xe2, 0x26, 0xea, 0x41, 0x44, 0xe8, - 0xfa, 0xba, 0x16, 0x34, 0xc8, 0x8a, 0xc2, 0xd4, 0x26, 0x94, 0x6e, 0xc3, 0x06, 0x25, 0xfb, 0x1f, - 0x94, 0xe0, 0x44, 0xb6, 0x4b, 0xe8, 0xc3, 0x30, 0x24, 0xb9, 0x1b, 0x37, 0xda, 0xc9, 0xf0, 0x92, - 0x21, 0x6c, 0xc0, 0xee, 0xee, 0x8e, 0x8f, 0x77, 0x5e, 0x29, 0x38, 0x61, 0xa2, 0xe0, 0x14, 0x31, - 0x7e, 0x00, 0x25, 0x4e, 0x4a, 0xa7, 0x77, 0xa6, 0xc2, 0x50, 0x9c, 0x22, 0x19, 0x07, 0x50, 0x26, - 0x14, 0x67, 0xb0, 0xd1, 0x32, 0x9c, 0x36, 0x5a, 0xae, 0x11, 0xb7, 0xb9, 0xb1, 0x16, 0x44, 0x72, - 0x07, 0xf6, 0x88, 0x0e, 0x00, 0xeb, 0xc4, 0xc1, 0xb9, 0x4f, 0x52, 0x6d, 0x5f, 0x77, 0x42, 0xa7, - 0xee, 0x26, 0x3b, 0xc2, 0x5f, 0xa9, 0x64, 0xd3, 0x8c, 0x68, 0xc7, 0x0a, 0xc3, 0x5e, 0x84, 0xbe, - 0x1e, 0x67, 0x50, 0x4f, 0x96, 0xff, 0x8b, 0x50, 0xa5, 0xe4, 0xa4, 0x79, 0x57, 0x04, 0xc9, 0x00, - 0xaa, 0xf2, 0xa6, 0x19, 0x64, 0x43, 0xd9, 0x75, 0xe4, 0x19, 0x9f, 0x7a, 0xad, 0xf9, 0x38, 0x6e, - 0xb3, 0xcd, 0x34, 0x05, 0xa2, 0xc7, 0xa1, 0x4c, 0xb6, 0xc3, 0xec, 0x61, 0xde, 0xc5, 0xed, 0xd0, - 0x8d, 0x48, 0x4c, 0x91, 0xc8, 0x76, 0x88, 0xce, 0x41, 0xc9, 0x6d, 0x08, 0x25, 0x05, 0x02, 0xa7, - 0x34, 0x3f, 0x8b, 0x4b, 0x6e, 0xc3, 0xde, 0x86, 0x9a, 0xba, 0xda, 0x06, 0x6d, 0x4a, 0xd9, 0x6d, - 0x15, 0x11, 0x1a, 0x25, 0xe9, 0x76, 0x91, 0xda, 0x6d, 0x00, 0x9d, 0xaa, 0x58, 0x94, 0x7c, 0x39, - 0x0f, 0x7d, 0xf5, 0x40, 0xa4, 0x51, 0x57, 0x35, 0x19, 0x26, 0xb4, 0x19, 0xc4, 0xbe, 0x09, 0x23, - 0x57, 0xfd, 0xe0, 0x36, 0x2b, 0xac, 0xcf, 0xea, 0xc8, 0x51, 0xc2, 0xeb, 0xf4, 0x47, 0xd6, 0x44, - 0x60, 0x50, 0xcc, 0x61, 0xaa, 0xc2, 0x55, 0xa9, 0x5b, 0x85, 0x2b, 0xfb, 0x13, 0x16, 0x0c, 0xa9, - 0x9c, 0xa5, 0xb9, 0xad, 0x4d, 0x4a, 0xb7, 0x19, 0x05, 0xed, 0x30, 0x4b, 0x97, 0x5d, 0x3e, 0x85, - 0x39, 0xcc, 0x4c, 0x06, 0x2c, 0xed, 0x93, 0x0c, 0x78, 0x1e, 0xfa, 0x36, 0x5d, 0xbf, 0x91, 0xbd, - 0x4d, 0xe5, 0xaa, 0xeb, 0x37, 0x30, 0x83, 0xd8, 0xdf, 0xb2, 0xe0, 0x84, 0xea, 0x82, 0x54, 0x08, - 0xcf, 0xc3, 0xd0, 0x5a, 0xdb, 0xf5, 0x1a, 0xb2, 0x40, 0x5e, 0xc6, 0xa3, 0x32, 0x6d, 0xc0, 0x70, - 0x0a, 0x93, 0xee, 0xeb, 0xd6, 0x5c, 0xdf, 0x89, 0x76, 0x96, 0xb5, 0x06, 0x52, 0x42, 0x69, 0x5a, - 0x41, 0xb0, 0x81, 0x45, 0xb9, 0xc5, 0x24, 0xd1, 0x41, 0x92, 0xfc, 0x43, 0x28, 0x6e, 0x2b, 0x06, - 0x0c, 0xa7, 0x30, 0xed, 0x37, 0xca, 0x30, 0x92, 0xce, 0xf9, 0xea, 0x61, 0x63, 0xf6, 0x38, 0x54, - 0x58, 0x1a, 0x58, 0x76, 0x52, 0xf0, 0x6a, 0x74, 0x1c, 0x86, 0x62, 0xe8, 0xe7, 0x05, 0x28, 0x8a, - 0xb9, 0xc3, 0x48, 0x75, 0x52, 0x79, 0x70, 0x58, 0xc4, 0x9a, 0xa8, 0x79, 0x21, 0x58, 0xa1, 0x4f, - 0x5b, 0x30, 0x10, 0x84, 0x66, 0x4d, 0xa5, 0x0f, 0x15, 0x99, 0x0f, 0x27, 0xd2, 0x71, 0x84, 0x2d, - 0xad, 0x26, 0x8d, 0xfc, 0x90, 0x92, 0xf5, 0xb9, 0xf7, 0xc2, 0x90, 0x89, 0xb9, 0x9f, 0x39, 0x5d, - 0x35, 0xcd, 0xe9, 0xcf, 0x99, 0xd3, 0x49, 0x64, 0xfc, 0xf5, 0xb0, 0x50, 0xaf, 0x43, 0xa5, 0xae, - 0x42, 0x0c, 0x0e, 0x55, 0x90, 0x55, 0x55, 0x84, 0x60, 0xc7, 0x4c, 0x9c, 0x9a, 0xfd, 0x1d, 0xcb, - 0x98, 0x1f, 0x98, 0xc4, 0xf3, 0x0d, 0x14, 0x41, 0xb9, 0xb9, 0xb5, 0x29, 0x8c, 0xd8, 0x2b, 0x05, - 0x0d, 0xef, 0xdc, 0xd6, 0xa6, 0x9e, 0xaf, 0x66, 0x2b, 0xa6, 0xcc, 0x7a, 0x70, 0x33, 0xa6, 0x12, - 0x43, 0xcb, 0xfb, 0x27, 0x86, 0xda, 0x6f, 0x95, 0xe0, 0x64, 0xc7, 0xa4, 0x42, 0xaf, 0x43, 0x25, - 0xa2, 0x6f, 0x29, 0x5e, 0x6f, 0xa1, 0xb0, 0x54, 0xce, 0x78, 0xbe, 0xa1, 0x35, 0x76, 0xba, 0x1d, - 0x73, 0x96, 0xe8, 0x0a, 0x20, 0x1d, 0x08, 0xa3, 0x7c, 0x9c, 0xfc, 0x95, 0xcf, 0x89, 0x47, 0xd1, - 0x54, 0x07, 0x06, 0xce, 0x79, 0x0a, 0xbd, 0x90, 0x75, 0x95, 0x96, 0xd3, 0x27, 0xa3, 0x7b, 0x79, - 0x3d, 0xed, 0x7f, 0x56, 0x82, 0xe1, 0x54, 0x89, 0x2b, 0xe4, 0x41, 0x95, 0x78, 0xec, 0xd8, 0x40, - 0xaa, 0xa9, 0xa3, 0x16, 0xac, 0x56, 0xaa, 0xf5, 0xa2, 0xa0, 0x8b, 0x15, 0x87, 0x07, 0xe3, 0xf8, - 0xfe, 0x79, 0x18, 0x92, 0x1d, 0xfa, 0x90, 0xd3, 0xf2, 0xc4, 0x00, 0xaa, 0x39, 0x7a, 0xd1, 0x80, - 0xe1, 0x14, 0xa6, 0xfd, 0x3b, 0x65, 0x18, 0xe3, 0xe7, 0x2c, 0x0d, 0x35, 0xf3, 0x16, 0xe5, 0x4e, - 0xed, 0xaf, 0xea, 0x42, 0x74, 0x7c, 0x20, 0xd7, 0x8e, 0x7a, 0x3f, 0x44, 0x3e, 0xa3, 0x9e, 0x62, - 0xbf, 0xbe, 0x9a, 0x89, 0xfd, 0xe2, 0x06, 0x7b, 0xf3, 0x98, 0x7a, 0xf4, 0xfd, 0x15, 0x0c, 0xf6, - 0x77, 0x4b, 0x30, 0x9a, 0xb9, 0x7c, 0x03, 0xbd, 0x91, 0xae, 0xd7, 0x6c, 0x15, 0xe1, 0x8d, 0xdf, - 0xf3, 0x3e, 0x86, 0x83, 0x55, 0x6d, 0xbe, 0x4f, 0x4b, 0xc5, 0xfe, 0xa3, 0x12, 0x8c, 0xa4, 0x6f, - 0x0d, 0x79, 0x00, 0x47, 0xea, 0xdd, 0x50, 0x63, 0x85, 0xf1, 0xd9, 0x65, 0xaa, 0xdc, 0x99, 0xcf, - 0x6b, 0x90, 0xcb, 0x46, 0xac, 0xe1, 0x0f, 0x44, 0x31, 0x6c, 0xfb, 0xef, 0x59, 0x70, 0x86, 0xbf, - 0x65, 0x76, 0x1e, 0xfe, 0xb5, 0xbc, 0xd1, 0x7d, 0xb9, 0xd8, 0x0e, 0x66, 0x0a, 0x28, 0xee, 0x37, - 0xbe, 0xec, 0x12, 0x47, 0xd1, 0xdb, 0xf4, 0x54, 0x78, 0x00, 0x3b, 0x7b, 0xa0, 0xc9, 0x60, 0xff, - 0x51, 0x19, 0xf4, 0xbd, 0x95, 0xc8, 0x15, 0x59, 0x94, 0x85, 0x14, 0x92, 0x5c, 0xd9, 0xf1, 0xeb, - 0xfa, 0x86, 0xcc, 0x6a, 0x26, 0x89, 0xf2, 0x17, 0x2c, 0x18, 0x74, 0x7d, 0x37, 0x71, 0x1d, 0xb6, - 0x01, 0x2f, 0xe6, 0x4e, 0x3d, 0xc5, 0x6e, 0x9e, 0x53, 0x0e, 0x22, 0xf3, 0x04, 0x48, 0x31, 0xc3, - 0x26, 0x67, 0xf4, 0x11, 0x11, 0x9e, 0x5d, 0x2e, 0x2c, 0xff, 0xb7, 0x9a, 0x89, 0xc9, 0x0e, 0xa9, - 0xe1, 0x95, 0x44, 0x05, 0xa5, 0xcd, 0x63, 0x4a, 0x4a, 0xd5, 0x24, 0xd6, 0x37, 0x88, 0xd3, 0x66, - 0xcc, 0x19, 0xd9, 0x31, 0xa0, 0xce, 0xb1, 0x38, 0x60, 0xe8, 0xeb, 0x24, 0xd4, 0x9c, 0x76, 0x12, - 0xb4, 0xe8, 0x30, 0x89, 0x43, 0x2a, 0x1d, 0xdc, 0x2b, 0x01, 0x58, 0xe3, 0xd8, 0x6f, 0x54, 0x20, - 0x93, 0xd6, 0x88, 0xb6, 0xcd, 0x3b, 0x57, 0xad, 0x62, 0xef, 0x5c, 0x55, 0x9d, 0xc9, 0xbb, 0x77, - 0x15, 0x35, 0xa1, 0x12, 0x6e, 0x38, 0xb1, 0x34, 0xab, 0x5f, 0x54, 0xfb, 0x38, 0xda, 0x78, 0x77, - 0x77, 0xfc, 0xa7, 0x7a, 0xf3, 0xd7, 0xd2, 0xb9, 0x3a, 0xc9, 0x0b, 0xa4, 0x68, 0xd6, 0x8c, 0x06, - 0xe6, 0xf4, 0x0f, 0x72, 0xab, 0xe0, 0x27, 0xc5, 0x0d, 0x00, 0x98, 0xc4, 0x6d, 0x2f, 0x11, 0xb3, - 0xe1, 0xc5, 0x02, 0x57, 0x19, 0x27, 0xac, 0x13, 0xf2, 0xf9, 0x7f, 0x6c, 0x30, 0x45, 0x1f, 0x86, - 0x5a, 0x9c, 0x38, 0x51, 0x72, 0xc8, 0x14, 0x5a, 0x35, 0xe8, 0x2b, 0x92, 0x08, 0xd6, 0xf4, 0xd0, - 0x4b, 0xac, 0xae, 0xae, 0x1b, 0x6f, 0x1c, 0x32, 0xab, 0x42, 0xd6, 0xe0, 0x15, 0x14, 0xb0, 0x41, - 0x0d, 0x5d, 0x00, 0x60, 0x73, 0x9b, 0x87, 0x12, 0x56, 0x99, 0x7f, 0x4a, 0x89, 0x42, 0xac, 0x20, - 0xd8, 0xc0, 0xb2, 0x7f, 0x0c, 0xd2, 0x15, 0x25, 0xd0, 0xb8, 0x2c, 0x60, 0xc1, 0xfd, 0xd7, 0x2c, - 0x3b, 0x22, 0x55, 0x6b, 0xe2, 0x37, 0x2c, 0x30, 0xcb, 0x5e, 0xa0, 0xd7, 0x78, 0x7d, 0x0d, 0xab, - 0x88, 0x33, 0x47, 0x83, 0xee, 0xc4, 0xa2, 0x13, 0x66, 0x0e, 0xbf, 0x65, 0x91, 0x8d, 0x73, 0xef, - 0x81, 0xaa, 0x84, 0x1e, 0xc8, 0xa8, 0xfb, 0x38, 0x9c, 0xca, 0xde, 0x48, 0x2f, 0xce, 0xab, 0xf6, - 0x77, 0x1a, 0x49, 0x4f, 0x50, 0xa9, 0x9b, 0x27, 0xa8, 0x87, 0x9b, 0x77, 0x7f, 0xd3, 0x82, 0xf3, - 0xfb, 0x5d, 0x9c, 0x8f, 0x1e, 0x81, 0xbe, 0xdb, 0x4e, 0x24, 0x0b, 0x9e, 0x33, 0x41, 0x79, 0xd3, - 0x89, 0x7c, 0xcc, 0x5a, 0xd1, 0x0e, 0xf4, 0xf3, 0x78, 0x33, 0x61, 0xad, 0xbf, 0x58, 0xec, 0x35, - 0xfe, 0x57, 0x89, 0xb1, 0x5d, 0xe0, 0xb1, 0x6e, 0x58, 0x30, 0xb4, 0xbf, 0x6b, 0x01, 0x5a, 0xda, - 0x22, 0x51, 0xe4, 0x36, 0x8c, 0x08, 0x39, 0x76, 0x93, 0x8e, 0x71, 0x63, 0x8e, 0x99, 0x44, 0x9b, - 0xb9, 0x49, 0xc7, 0xf8, 0x97, 0x7f, 0x93, 0x4e, 0xe9, 0x60, 0x37, 0xe9, 0xa0, 0x25, 0x38, 0xd3, - 0xe2, 0xdb, 0x0d, 0x7e, 0x3b, 0x05, 0xdf, 0x7b, 0xa8, 0x94, 0xb5, 0xb3, 0x77, 0x76, 0xc7, 0xcf, - 0x2c, 0xe6, 0x21, 0xe0, 0xfc, 0xe7, 0xec, 0xf7, 0x00, 0xe2, 0x81, 0x71, 0x33, 0x79, 0x51, 0x4e, - 0x5d, 0xdd, 0x2f, 0xf6, 0x57, 0x2a, 0x30, 0x9a, 0x29, 0x87, 0x4b, 0xb7, 0x7a, 0x9d, 0x61, 0x55, - 0x47, 0xd6, 0xdf, 0x9d, 0xdd, 0xeb, 0x29, 0x50, 0xcb, 0x87, 0x8a, 0xeb, 0x87, 0xed, 0xa4, 0x98, - 0x2c, 0x55, 0xde, 0x89, 0x79, 0x4a, 0xd0, 0x70, 0x34, 0xd3, 0xbf, 0x98, 0xb3, 0x29, 0x32, 0xec, - 0x2b, 0x65, 0x8c, 0xf7, 0xdd, 0x27, 0x77, 0xc0, 0x27, 0x75, 0x10, 0x56, 0xa5, 0x08, 0xc7, 0x62, - 0x66, 0xb2, 0x1c, 0xf7, 0x21, 0xfd, 0xaf, 0x97, 0x60, 0xd0, 0xf8, 0x68, 0xe8, 0x57, 0xd2, 0x45, - 0xa1, 0xac, 0xe2, 0x5e, 0x89, 0xd1, 0x9f, 0xd0, 0x65, 0x9f, 0xf8, 0x2b, 0x3d, 0xd1, 0x59, 0x0f, - 0xea, 0xee, 0xee, 0xf8, 0x89, 0x4c, 0xc5, 0xa7, 0x54, 0x8d, 0xa8, 0x73, 0x1f, 0x83, 0xd1, 0x0c, - 0x99, 0x9c, 0x57, 0x5e, 0x35, 0x5f, 0xf9, 0xc8, 0x6e, 0x29, 0x73, 0xc8, 0xbe, 0x49, 0x87, 0x4c, - 0x24, 0xea, 0x05, 0x1e, 0xe9, 0xc1, 0x07, 0x9b, 0xc9, 0xc7, 0x2d, 0xf5, 0x98, 0x8f, 0xfb, 0x24, - 0x54, 0xc3, 0xc0, 0x73, 0xeb, 0xae, 0xaa, 0xbc, 0xc8, 0x32, 0x80, 0x97, 0x45, 0x1b, 0x56, 0x50, - 0x74, 0x1b, 0x6a, 0xb7, 0x6e, 0x27, 0xfc, 0xdc, 0x48, 0xf8, 0xb7, 0x8b, 0x3a, 0x2e, 0x52, 0x46, - 0x8b, 0x3a, 0x98, 0xc2, 0x9a, 0x17, 0xb2, 0xa1, 0x9f, 0x29, 0x41, 0x99, 0x5c, 0xc0, 0x7c, 0xef, - 0x4c, 0x3b, 0xc6, 0x58, 0x40, 0xec, 0xaf, 0xd7, 0xe0, 0x74, 0x5e, 0x4d, 0x72, 0xf4, 0x51, 0xe8, - 0xe7, 0x7d, 0x2c, 0xe6, 0xda, 0x8b, 0x3c, 0x1e, 0x73, 0x8c, 0xa0, 0xe8, 0x16, 0xfb, 0x8d, 0x05, - 0x4f, 0xc1, 0xdd, 0x73, 0xd6, 0xc4, 0x0c, 0x39, 0x1e, 0xee, 0x0b, 0x8e, 0xe6, 0xbe, 0xe0, 0x70, - 0xee, 0x9e, 0xb3, 0x86, 0xb6, 0xa1, 0xd2, 0x74, 0x13, 0xe2, 0x08, 0x27, 0xc2, 0xcd, 0x63, 0x61, - 0x4e, 0x1c, 0x6e, 0xa5, 0xb1, 0x9f, 0x98, 0x33, 0x44, 0x5f, 0xb3, 0x60, 0x74, 0x2d, 0x9d, 0x7c, - 0x2f, 0x84, 0xa7, 0x73, 0x0c, 0x75, 0xe7, 0xd3, 0x8c, 0xf8, 0x55, 0x52, 0x99, 0x46, 0x9c, 0xed, - 0x0e, 0xfa, 0x94, 0x05, 0x03, 0xeb, 0xae, 0x67, 0x94, 0xfe, 0x3d, 0x86, 0x8f, 0x73, 0x89, 0x31, - 0xd0, 0x3b, 0x0e, 0xfe, 0x3f, 0xc6, 0x92, 0x73, 0x37, 0x4d, 0xd5, 0x7f, 0x54, 0x4d, 0x35, 0x70, - 0x9f, 0x34, 0xd5, 0x67, 0x2d, 0xa8, 0xa9, 0x91, 0x16, 0x09, 0xd5, 0x1f, 0x3e, 0xc6, 0x4f, 0xce, - 0x3d, 0x27, 0xea, 0x2f, 0xd6, 0xcc, 0xd1, 0x97, 0x2c, 0x18, 0x74, 0x5e, 0x6f, 0x47, 0xa4, 0x41, - 0xb6, 0x82, 0x30, 0x16, 0xf7, 0x50, 0xbe, 0x5c, 0x7c, 0x67, 0xa6, 0x28, 0x93, 0x59, 0xb2, 0xb5, - 0x14, 0xc6, 0x22, 0xf1, 0x49, 0x37, 0x60, 0xb3, 0x0b, 0xf6, 0x6e, 0x09, 0xc6, 0xf7, 0xa1, 0x80, - 0x9e, 0x87, 0xa1, 0x20, 0x6a, 0x3a, 0xbe, 0xfb, 0xba, 0x59, 0x4d, 0x43, 0x59, 0x59, 0x4b, 0x06, - 0x0c, 0xa7, 0x30, 0xcd, 0x94, 0xef, 0xd2, 0x3e, 0x29, 0xdf, 0xe7, 0xa1, 0x2f, 0x22, 0x61, 0x90, - 0xdd, 0x2c, 0xb0, 0xa4, 0x03, 0x06, 0x41, 0x8f, 0x42, 0xd9, 0x09, 0x5d, 0x11, 0xc2, 0xa6, 0xf6, - 0x40, 0x53, 0xcb, 0xf3, 0x98, 0xb6, 0xa7, 0x2a, 0x50, 0x54, 0xee, 0x49, 0x05, 0x0a, 0xaa, 0x06, - 0xc4, 0xd9, 0x45, 0xbf, 0x56, 0x03, 0xe9, 0x33, 0x05, 0xfb, 0xad, 0x32, 0x3c, 0xba, 0xe7, 0x7c, - 0xd1, 0x11, 0x7c, 0xd6, 0x1e, 0x11, 0x7c, 0x72, 0x78, 0x4a, 0xfb, 0x0d, 0x4f, 0xb9, 0xcb, 0xf0, - 0x7c, 0x8a, 0x2e, 0x03, 0x59, 0x85, 0xa4, 0x98, 0x9b, 0x04, 0xbb, 0x15, 0x35, 0x11, 0x2b, 0x40, - 0x42, 0xb1, 0xe6, 0x4b, 0xf7, 0x00, 0xa9, 0x74, 0xe7, 0x4a, 0x11, 0x6a, 0xa0, 0x6b, 0x55, 0x12, - 0x3e, 0xf7, 0xbb, 0xe5, 0x50, 0xdb, 0xbf, 0x58, 0x82, 0xc7, 0x7b, 0x90, 0xde, 0xe6, 0x2c, 0xb6, - 0x7a, 0x9c, 0xc5, 0xdf, 0xdf, 0x9f, 0xc9, 0xfe, 0xeb, 0x16, 0x9c, 0xeb, 0xae, 0x3c, 0xd0, 0x33, - 0x30, 0xb8, 0x16, 0x39, 0x7e, 0x7d, 0x83, 0xdd, 0x8e, 0x2a, 0x07, 0x85, 0x8d, 0xb5, 0x6e, 0xc6, - 0x26, 0x0e, 0xdd, 0xde, 0xf2, 0x98, 0x04, 0x03, 0x43, 0xa6, 0xa7, 0xd2, 0xed, 0xed, 0x6a, 0x16, - 0x88, 0x3b, 0xf1, 0xed, 0xbf, 0x28, 0xe5, 0x77, 0x8b, 0x1b, 0x19, 0x07, 0xf9, 0x4e, 0xe2, 0x2b, - 0x94, 0x7a, 0x90, 0x25, 0xe5, 0x7b, 0x2d, 0x4b, 0xfa, 0xba, 0xc9, 0x12, 0x34, 0x0b, 0x27, 0x8c, - 0xeb, 0x6b, 0x78, 0xca, 0x31, 0x0f, 0xd5, 0x55, 0x75, 0x38, 0x96, 0x33, 0x70, 0xdc, 0xf1, 0x04, - 0x7a, 0x0a, 0xaa, 0xae, 0x1f, 0x93, 0x7a, 0x3b, 0xe2, 0x21, 0xe2, 0x46, 0x9a, 0xd7, 0xbc, 0x68, - 0xc7, 0x0a, 0xc3, 0xfe, 0xd5, 0x12, 0x9c, 0xed, 0x6a, 0x67, 0xdd, 0x23, 0xd9, 0x65, 0x7e, 0x8e, - 0xbe, 0x7b, 0xf3, 0x39, 0xcc, 0x41, 0xaa, 0xec, 0x3b, 0x48, 0x7f, 0xdc, 0x7d, 0x62, 0x52, 0x9b, - 0xfb, 0x07, 0x76, 0x94, 0x5e, 0x80, 0x61, 0x27, 0x0c, 0x39, 0x1e, 0x8b, 0xf4, 0xcc, 0xd4, 0xe1, - 0x99, 0x32, 0x81, 0x38, 0x8d, 0xdb, 0x93, 0xf6, 0xfc, 0x53, 0x0b, 0x6a, 0x98, 0xac, 0x73, 0xe9, - 0x80, 0x6e, 0x89, 0x21, 0xb2, 0x8a, 0xa8, 0xd8, 0x49, 0x07, 0x36, 0x76, 0x59, 0x25, 0xcb, 0xbc, - 0xc1, 0xee, 0xbc, 0x5e, 0xa8, 0x74, 0xa0, 0xeb, 0x85, 0xd4, 0x05, 0x33, 0xe5, 0xee, 0x17, 0xcc, - 0xd8, 0xdf, 0x1c, 0xa0, 0xaf, 0x17, 0x06, 0x33, 0x11, 0x69, 0xc4, 0xf4, 0xfb, 0xb6, 0x23, 0x4f, - 0x4c, 0x12, 0xf5, 0x7d, 0xaf, 0xe3, 0x05, 0x4c, 0xdb, 0x53, 0x47, 0x31, 0xa5, 0x03, 0x55, 0x21, - 0x29, 0xef, 0x5b, 0x85, 0xe4, 0x05, 0x18, 0x8e, 0xe3, 0x8d, 0xe5, 0xc8, 0xdd, 0x72, 0x12, 0x72, - 0x95, 0xec, 0x08, 0x2b, 0x4b, 0x57, 0x0e, 0x58, 0xb9, 0xac, 0x81, 0x38, 0x8d, 0x8b, 0xe6, 0xe0, - 0xa4, 0xae, 0x05, 0x42, 0xa2, 0x84, 0xe5, 0x05, 0xf0, 0x99, 0xa0, 0xd2, 0x84, 0x75, 0xf5, 0x10, - 0x81, 0x80, 0x3b, 0x9f, 0xa1, 0xf2, 0x2d, 0xd5, 0x48, 0x3b, 0xd2, 0x9f, 0x96, 0x6f, 0x29, 0x3a, - 0xb4, 0x2f, 0x1d, 0x4f, 0xa0, 0x45, 0x38, 0xc5, 0x27, 0xc6, 0x54, 0x18, 0x1a, 0x6f, 0x34, 0x90, - 0xae, 0x94, 0x38, 0xd7, 0x89, 0x82, 0xf3, 0x9e, 0x43, 0xcf, 0xc1, 0xa0, 0x6a, 0x9e, 0x9f, 0x15, - 0xa7, 0x08, 0xca, 0x8b, 0xa1, 0xc8, 0xcc, 0x37, 0xb0, 0x89, 0x87, 0x3e, 0x04, 0x0f, 0xeb, 0xbf, - 0x3c, 0x79, 0x8c, 0x1f, 0xad, 0xcd, 0x8a, 0x32, 0x4b, 0xea, 0x3a, 0x93, 0xb9, 0x5c, 0xb4, 0x06, - 0xee, 0xf6, 0x3c, 0x5a, 0x83, 0x73, 0x0a, 0x74, 0xd1, 0x4f, 0x58, 0x26, 0x48, 0x4c, 0xa6, 0x9d, - 0x98, 0x5c, 0x8f, 0x3c, 0x71, 0x0b, 0x80, 0xba, 0xf1, 0x72, 0xce, 0x4d, 0x2e, 0xe7, 0x61, 0xe2, - 0x05, 0xbc, 0x07, 0x15, 0x34, 0x09, 0x35, 0xe2, 0x3b, 0x6b, 0x1e, 0x59, 0x9a, 0x99, 0x17, 0xf7, - 0x02, 0xe8, 0xc8, 0x5e, 0x09, 0xc0, 0x1a, 0x47, 0xc5, 0xa6, 0x0e, 0x75, 0xbd, 0x7d, 0x75, 0x19, - 0x4e, 0x37, 0xeb, 0x21, 0xb5, 0x3d, 0xdc, 0x3a, 0x99, 0xaa, 0xb3, 0x80, 0x3a, 0xfa, 0x61, 0x78, - 0x09, 0x4b, 0x15, 0x78, 0x3d, 0x37, 0xb3, 0xdc, 0x81, 0x83, 0x73, 0x9f, 0x64, 0x81, 0x97, 0x51, - 0xb0, 0xbd, 0x33, 0x76, 0x2a, 0x13, 0x78, 0x49, 0x1b, 0x31, 0x87, 0xa1, 0x2b, 0x80, 0x58, 0x14, - 0xff, 0xe5, 0x24, 0x09, 0x95, 0xb1, 0x33, 0x76, 0x9a, 0xbd, 0x92, 0x0a, 0x23, 0xbb, 0xd4, 0x81, - 0x81, 0x73, 0x9e, 0xb2, 0xff, 0xbd, 0x05, 0xc3, 0x6a, 0xbd, 0xde, 0x83, 0x3c, 0x16, 0x2f, 0x9d, - 0xc7, 0x32, 0x77, 0x74, 0x89, 0xc7, 0x7a, 0xde, 0x25, 0x18, 0xfa, 0x33, 0x83, 0x00, 0x5a, 0x2a, - 0x2a, 0x85, 0x64, 0x75, 0x55, 0x48, 0x0f, 0xac, 0x44, 0xca, 0xab, 0xcd, 0x52, 0xb9, 0xbf, 0xb5, - 0x59, 0x56, 0xe0, 0x8c, 0x34, 0x17, 0xf8, 0x59, 0xd1, 0xe5, 0x20, 0x56, 0x02, 0xae, 0x3a, 0xfd, - 0xa8, 0x20, 0x74, 0x66, 0x3e, 0x0f, 0x09, 0xe7, 0x3f, 0x9b, 0xb2, 0x52, 0x06, 0xf6, 0xb3, 0x52, - 0xf4, 0x9a, 0x5e, 0x58, 0x97, 0xf7, 0x96, 0x64, 0xd6, 0xf4, 0xc2, 0xa5, 0x15, 0xac, 0x71, 0xf2, - 0x05, 0x7b, 0xad, 0x20, 0xc1, 0x0e, 0x07, 0x16, 0xec, 0x52, 0xc4, 0x0c, 0x76, 0x15, 0x31, 0xd2, - 0x27, 0x3d, 0xd4, 0xd5, 0x27, 0xfd, 0x7e, 0x18, 0x71, 0xfd, 0x0d, 0x12, 0xb9, 0x09, 0x69, 0xb0, - 0xb5, 0xc0, 0xc4, 0x8f, 0x71, 0xe1, 0xca, 0x7c, 0x0a, 0x8a, 0x33, 0xd8, 0x69, 0xb9, 0x38, 0xd2, - 0x83, 0x5c, 0xec, 0xa2, 0x8d, 0x46, 0x8b, 0xd1, 0x46, 0x27, 0x8e, 0xae, 0x8d, 0x4e, 0x1e, 0xab, - 0x36, 0x42, 0x85, 0x68, 0xa3, 0x9e, 0x04, 0xbd, 0xb1, 0xfd, 0x3b, 0xbd, 0xcf, 0xf6, 0xaf, 0x9b, - 0x2a, 0x3a, 0x73, 0x68, 0x55, 0x94, 0xaf, 0x65, 0x1e, 0x3a, 0x94, 0x96, 0xf9, 0x6c, 0x09, 0xce, - 0x68, 0x39, 0x4c, 0x67, 0xbf, 0xbb, 0x4e, 0x25, 0x11, 0xbb, 0xfa, 0x8a, 0x9f, 0xdb, 0x18, 0x69, - 0x55, 0x3a, 0x43, 0x4b, 0x41, 0xb0, 0x81, 0xc5, 0xb2, 0x93, 0x48, 0xc4, 0x0a, 0xf5, 0x66, 0x85, - 0xf4, 0x8c, 0x68, 0xc7, 0x0a, 0x83, 0xce, 0x2f, 0xfa, 0x5b, 0x64, 0x7c, 0x66, 0xcb, 0xd1, 0xcd, - 0x68, 0x10, 0x36, 0xf1, 0xd0, 0x93, 0x9c, 0x09, 0x13, 0x10, 0x54, 0x50, 0x0f, 0x89, 0x3b, 0x79, - 0xa5, 0x4c, 0x50, 0x50, 0xd9, 0x1d, 0x96, 0x86, 0x56, 0xe9, 0xec, 0x0e, 0x0b, 0x81, 0x52, 0x18, - 0xf6, 0xff, 0xb0, 0xe0, 0x6c, 0xee, 0x50, 0xdc, 0x03, 0xe5, 0xbb, 0x9d, 0x56, 0xbe, 0x2b, 0x45, - 0x6d, 0x37, 0x8c, 0xb7, 0xe8, 0xa2, 0x88, 0xff, 0xad, 0x05, 0x23, 0x1a, 0xff, 0x1e, 0xbc, 0xaa, - 0x9b, 0x7e, 0xd5, 0xe2, 0x76, 0x56, 0xb5, 0x8e, 0x77, 0xfb, 0x9d, 0x12, 0xa8, 0x12, 0x91, 0x53, - 0x75, 0x59, 0x80, 0x77, 0x9f, 0x93, 0xc4, 0x1d, 0xe8, 0x67, 0x07, 0xa1, 0x71, 0x31, 0x41, 0x1e, - 0x69, 0xfe, 0xec, 0x50, 0x55, 0x1f, 0x32, 0xb3, 0xbf, 0x31, 0x16, 0x0c, 0x59, 0x19, 0x69, 0x37, - 0xa6, 0xd2, 0xbc, 0x21, 0xf2, 0x88, 0x74, 0x19, 0x69, 0xd1, 0x8e, 0x15, 0x06, 0x55, 0x0f, 0x6e, - 0x3d, 0xf0, 0x67, 0x3c, 0x27, 0x96, 0xf7, 0x3d, 0x2a, 0xf5, 0x30, 0x2f, 0x01, 0x58, 0xe3, 0xb0, - 0x33, 0x52, 0x37, 0x0e, 0x3d, 0x67, 0xc7, 0xd8, 0x3f, 0x1b, 0x95, 0x0d, 0x14, 0x08, 0x9b, 0x78, - 0x76, 0x0b, 0xc6, 0xd2, 0x2f, 0x31, 0x4b, 0xd6, 0x59, 0x80, 0x62, 0x4f, 0xc3, 0x39, 0x09, 0x35, - 0x87, 0x3d, 0xb5, 0xd0, 0x76, 0xb2, 0xd7, 0xc5, 0x4f, 0x49, 0x00, 0xd6, 0x38, 0xf6, 0xaf, 0x59, - 0x70, 0x2a, 0x67, 0xd0, 0x0a, 0x4c, 0x98, 0x4b, 0xb4, 0xb4, 0xc9, 0x53, 0xec, 0x3f, 0x0a, 0x03, - 0x0d, 0xb2, 0xee, 0xc8, 0x10, 0x38, 0x43, 0xb6, 0xcf, 0xf2, 0x66, 0x2c, 0xe1, 0xf6, 0x7f, 0xb3, - 0x60, 0x34, 0xdd, 0xd7, 0x98, 0xa5, 0x92, 0xf0, 0x61, 0x72, 0xe3, 0x7a, 0xb0, 0x45, 0xa2, 0x1d, - 0xfa, 0xe6, 0x56, 0x26, 0x95, 0xa4, 0x03, 0x03, 0xe7, 0x3c, 0xc5, 0x0a, 0xc4, 0x36, 0xd4, 0x68, - 0xcb, 0x19, 0x79, 0xa3, 0xc8, 0x19, 0xa9, 0x3f, 0xa6, 0x79, 0x5c, 0xae, 0x58, 0x62, 0x93, 0xbf, - 0xfd, 0xdd, 0x3e, 0x50, 0x19, 0xb5, 0x2c, 0xfe, 0xa8, 0xa0, 0xe8, 0xad, 0x83, 0x66, 0x10, 0xa9, - 0xc9, 0xd0, 0xb7, 0x57, 0x40, 0x00, 0xf7, 0x92, 0x98, 0xae, 0x4b, 0xf5, 0x86, 0xab, 0x1a, 0x84, - 0x4d, 0x3c, 0xda, 0x13, 0xcf, 0xdd, 0x22, 0xfc, 0xa1, 0xfe, 0x74, 0x4f, 0x16, 0x24, 0x00, 0x6b, - 0x1c, 0xda, 0x93, 0x86, 0xbb, 0xbe, 0x2e, 0xb6, 0xfc, 0xaa, 0x27, 0x74, 0x74, 0x30, 0x83, 0xf0, - 0x9a, 0xdf, 0xc1, 0xa6, 0xb0, 0x82, 0x8d, 0x9a, 0xdf, 0xc1, 0x26, 0x66, 0x10, 0x6a, 0xb7, 0xf9, - 0x41, 0xd4, 0x62, 0xd7, 0xf9, 0x37, 0x14, 0x17, 0x61, 0xfd, 0x2a, 0xbb, 0xed, 0x5a, 0x27, 0x0a, - 0xce, 0x7b, 0x8e, 0xce, 0xc0, 0x30, 0x22, 0x0d, 0xb7, 0x9e, 0x98, 0xd4, 0x20, 0x3d, 0x03, 0x97, - 0x3b, 0x30, 0x70, 0xce, 0x53, 0x68, 0x0a, 0x46, 0x65, 0x46, 0xb4, 0xac, 0x77, 0x33, 0x98, 0xae, - 0xaf, 0x81, 0xd3, 0x60, 0x9c, 0xc5, 0xa7, 0x52, 0xad, 0x25, 0x4a, 0x62, 0x31, 0x63, 0xd9, 0x90, - 0x6a, 0xb2, 0x54, 0x16, 0x56, 0x18, 0xf6, 0x27, 0xcb, 0x54, 0x0b, 0x77, 0x29, 0x05, 0x77, 0xcf, - 0xa2, 0x05, 0xd3, 0x33, 0xb2, 0xaf, 0x87, 0x19, 0xf9, 0x2c, 0x0c, 0xdd, 0x8a, 0x03, 0x5f, 0x45, - 0xe2, 0x55, 0xba, 0x46, 0xe2, 0x19, 0x58, 0xf9, 0x91, 0x78, 0xfd, 0x45, 0x45, 0xe2, 0x0d, 0x1c, - 0x32, 0x12, 0xef, 0x77, 0x2b, 0xa0, 0x2e, 0x1f, 0xb9, 0x46, 0x92, 0xdb, 0x41, 0xb4, 0xe9, 0xfa, - 0x4d, 0x96, 0x49, 0xfe, 0x35, 0x0b, 0x86, 0xf8, 0x7a, 0x59, 0x30, 0x33, 0xa9, 0xd6, 0x0b, 0xba, - 0xd5, 0x22, 0xc5, 0x6c, 0x62, 0xd5, 0x60, 0x94, 0xb9, 0x6e, 0xd4, 0x04, 0xe1, 0x54, 0x8f, 0xd0, - 0xc7, 0x00, 0xa4, 0x7f, 0x74, 0x5d, 0x8a, 0xcc, 0xf9, 0x62, 0xfa, 0x87, 0xc9, 0xba, 0xb6, 0x81, - 0x57, 0x15, 0x13, 0x6c, 0x30, 0x44, 0x9f, 0xd5, 0x59, 0x66, 0x3c, 0x64, 0xff, 0x23, 0xc7, 0x32, - 0x36, 0xbd, 0xe4, 0x98, 0x61, 0x18, 0x70, 0xfd, 0x26, 0x9d, 0x27, 0x22, 0x62, 0xe9, 0x5d, 0x79, - 0x55, 0x18, 0x16, 0x02, 0xa7, 0x31, 0xed, 0x78, 0x8e, 0x5f, 0x27, 0xd1, 0x3c, 0x47, 0x37, 0x2f, - 0xd9, 0x66, 0x0d, 0x58, 0x12, 0xea, 0xb8, 0xb6, 0xa5, 0xd2, 0xcb, 0xb5, 0x2d, 0xe7, 0x3e, 0x00, - 0x27, 0x3b, 0x3e, 0xe6, 0x81, 0x52, 0xca, 0x0e, 0x9f, 0x8d, 0x66, 0xff, 0x5e, 0x4d, 0x2b, 0xad, - 0x6b, 0x41, 0x83, 0x5f, 0x1e, 0x12, 0xe9, 0x2f, 0x2a, 0x6c, 0xdc, 0x02, 0xa7, 0x88, 0x71, 0x51, - 0xb7, 0x6a, 0xc4, 0x26, 0x4b, 0x3a, 0x47, 0x43, 0x27, 0x22, 0xfe, 0x71, 0xcf, 0xd1, 0x65, 0xc5, - 0x04, 0x1b, 0x0c, 0xd1, 0x46, 0x2a, 0xa7, 0xe4, 0xd2, 0xd1, 0x73, 0x4a, 0x58, 0x7d, 0xaa, 0xbc, - 0x7a, 0xff, 0x5f, 0xb2, 0x60, 0xc4, 0x4f, 0xcd, 0xdc, 0x62, 0xc2, 0x48, 0xf3, 0x57, 0x05, 0xbf, - 0xbb, 0x2a, 0xdd, 0x86, 0x33, 0xfc, 0xf3, 0x54, 0x5a, 0xe5, 0x80, 0x2a, 0x4d, 0xdf, 0x42, 0xd4, - 0xdf, 0xed, 0x16, 0x22, 0xe4, 0xab, 0x6b, 0xd8, 0x06, 0x0a, 0xbf, 0x86, 0x0d, 0x72, 0xae, 0x60, - 0xbb, 0x09, 0xb5, 0x7a, 0x44, 0x9c, 0xe4, 0x90, 0x37, 0x72, 0xb1, 0x03, 0xfa, 0x19, 0x49, 0x00, - 0x6b, 0x5a, 0xe8, 0xe3, 0x4a, 0x9e, 0xd5, 0x8a, 0x34, 0x3f, 0xe9, 0x52, 0xec, 0x49, 0x8a, 0xbd, - 0x99, 0xc9, 0x94, 0x85, 0x22, 0x12, 0x1a, 0x53, 0xbd, 0xf8, 0xfe, 0xca, 0x8e, 0xfd, 0xdf, 0x7d, - 0x70, 0x42, 0x76, 0x5f, 0xa6, 0x04, 0x50, 0x7b, 0x85, 0xcf, 0x03, 0xbd, 0xd9, 0x50, 0xf6, 0xca, - 0x65, 0x09, 0xc0, 0x1a, 0x87, 0xda, 0xc7, 0xed, 0x98, 0x2c, 0x85, 0xc4, 0x5f, 0x70, 0xd7, 0x62, - 0x71, 0xee, 0xac, 0xde, 0xfb, 0xba, 0x06, 0x61, 0x13, 0x8f, 0x6e, 0x8e, 0xf8, 0x3e, 0x25, 0xce, - 0xa6, 0x13, 0x89, 0xfd, 0x0f, 0x96, 0x70, 0xf4, 0x4b, 0xb9, 0xb5, 0x82, 0x8b, 0x49, 0xa4, 0xeb, - 0xc8, 0x84, 0x38, 0xe0, 0xa5, 0x9a, 0x7f, 0xdb, 0x82, 0x33, 0xbc, 0x55, 0x8e, 0xe4, 0xf5, 0xb0, - 0xe1, 0x24, 0x24, 0x2e, 0xa6, 0x76, 0x7f, 0x4e, 0xff, 0xb4, 0xd3, 0x3d, 0x8f, 0x2d, 0xce, 0xef, - 0x0d, 0x7a, 0xc3, 0x82, 0xd1, 0xcd, 0x54, 0xf5, 0x16, 0xa9, 0xca, 0x8f, 0x5a, 0x1e, 0x21, 0x45, - 0x54, 0x8b, 0xbe, 0x74, 0x7b, 0x8c, 0xb3, 0xdc, 0xed, 0xbf, 0xb0, 0xc0, 0x54, 0x6b, 0xf7, 0xbe, - 0xe8, 0xcb, 0xc1, 0x4d, 0x73, 0x69, 0xed, 0x57, 0xba, 0x5a, 0xfb, 0x8f, 0x42, 0xb9, 0xed, 0x36, - 0xc4, 0x7e, 0x4f, 0x9f, 0x86, 0xcf, 0xcf, 0x62, 0xda, 0x6e, 0xff, 0xd3, 0x8a, 0xf6, 0x23, 0x89, - 0x3c, 0xb5, 0x1f, 0x88, 0xd7, 0x5e, 0x57, 0x65, 0xe3, 0xf8, 0x9b, 0x5f, 0xeb, 0x28, 0x1b, 0xf7, - 0x93, 0x07, 0x4f, 0x43, 0xe4, 0x03, 0xd4, 0xad, 0x6a, 0xdc, 0xc0, 0x3e, 0x39, 0x88, 0xb7, 0xa0, - 0x4a, 0xb7, 0xc4, 0xcc, 0x21, 0x5c, 0x4d, 0x75, 0xaa, 0x7a, 0x59, 0xb4, 0xdf, 0xdd, 0x1d, 0x7f, - 0xef, 0xc1, 0xbb, 0x25, 0x9f, 0xc6, 0x8a, 0x3e, 0x8a, 0xa1, 0x46, 0x7f, 0xb3, 0x74, 0x49, 0xb1, - 0xd9, 0xbe, 0xae, 0x64, 0xa6, 0x04, 0x14, 0x92, 0x8b, 0xa9, 0xf9, 0x20, 0x1f, 0x6a, 0xec, 0xfe, - 0x61, 0xc6, 0x94, 0xef, 0xc9, 0x97, 0x55, 0xd2, 0xa2, 0x04, 0xdc, 0xdd, 0x1d, 0x7f, 0xe1, 0xe0, - 0x4c, 0xd5, 0xe3, 0x58, 0xb3, 0xb0, 0xdf, 0xec, 0xd3, 0x73, 0x57, 0x54, 0x0b, 0xfc, 0x81, 0x98, - 0xbb, 0xcf, 0x67, 0xe6, 0xee, 0xf9, 0x8e, 0xb9, 0x3b, 0xa2, 0xef, 0xc9, 0x4d, 0xcd, 0xc6, 0x7b, - 0x6d, 0x98, 0xed, 0xef, 0xff, 0x61, 0x16, 0xe9, 0x6b, 0x6d, 0x37, 0x22, 0xf1, 0x72, 0xd4, 0xf6, - 0x5d, 0xbf, 0xc9, 0xa6, 0x63, 0xd5, 0xb4, 0x48, 0x53, 0x60, 0x9c, 0xc5, 0x47, 0x4f, 0x41, 0x95, - 0x7e, 0xf3, 0x9b, 0xce, 0x16, 0x9f, 0x55, 0x46, 0x01, 0xb5, 0x15, 0xd1, 0x8e, 0x15, 0x86, 0xfd, - 0x4d, 0x16, 0x5b, 0x60, 0xe4, 0x69, 0xd3, 0x39, 0xe1, 0xb1, 0x0b, 0x9f, 0x79, 0xf5, 0x35, 0x35, - 0x27, 0xf8, 0x2d, 0xcf, 0x1c, 0x86, 0x6e, 0xc3, 0xc0, 0x1a, 0xbf, 0xf1, 0xb0, 0x98, 0x8a, 0xf4, - 0xe2, 0xfa, 0x44, 0x76, 0xaf, 0x8d, 0xbc, 0x4b, 0xf1, 0xae, 0xfe, 0x89, 0x25, 0x37, 0xfb, 0x0f, - 0x2b, 0x30, 0x9a, 0xb9, 0x12, 0x38, 0x55, 0xf7, 0xb6, 0xb4, 0x6f, 0xdd, 0xdb, 0x57, 0x00, 0x1a, - 0x24, 0xf4, 0x82, 0x1d, 0x66, 0x1e, 0xf7, 0x1d, 0xd8, 0x3c, 0x56, 0x3b, 0xaa, 0x59, 0x45, 0x05, - 0x1b, 0x14, 0x45, 0xc9, 0x39, 0x5e, 0x46, 0x37, 0x53, 0x72, 0xce, 0xb8, 0xb7, 0xa2, 0xff, 0xde, - 0xde, 0x5b, 0xe1, 0xc2, 0x28, 0xef, 0xa2, 0xca, 0x86, 0x3e, 0x44, 0xd2, 0x33, 0xcb, 0x27, 0x99, - 0x4d, 0x93, 0xc1, 0x59, 0xba, 0xf7, 0xf3, 0xc6, 0x6f, 0xf4, 0x6e, 0xa8, 0xc9, 0xef, 0xcc, 0xf7, - 0x28, 0xa2, 0xa2, 0x84, 0x9c, 0x06, 0xec, 0x26, 0x6e, 0xf1, 0xb3, 0xa3, 0xb0, 0x03, 0xdc, 0xaf, - 0xc2, 0x0e, 0xf6, 0x17, 0x4b, 0xd4, 0x8e, 0xe7, 0xfd, 0x52, 0x35, 0x8a, 0x9e, 0x80, 0x7e, 0xa7, - 0x9d, 0x6c, 0x04, 0x1d, 0xf7, 0x37, 0x4e, 0xb1, 0x56, 0x2c, 0xa0, 0x68, 0x01, 0xfa, 0x1a, 0xba, - 0xee, 0xcc, 0x41, 0xbe, 0xa7, 0x76, 0x51, 0x3b, 0x09, 0xc1, 0x8c, 0x0a, 0x7a, 0x04, 0xfa, 0x12, - 0xa7, 0x29, 0x53, 0xe0, 0x58, 0xda, 0xf3, 0xaa, 0xd3, 0x8c, 0x31, 0x6b, 0x35, 0xd5, 0x77, 0xdf, - 0x3e, 0xea, 0xfb, 0x05, 0x18, 0x8e, 0xdd, 0xa6, 0xef, 0x24, 0xed, 0x88, 0x18, 0xc7, 0xae, 0x3a, - 0x92, 0xc6, 0x04, 0xe2, 0x34, 0xae, 0xfd, 0x5b, 0x43, 0x70, 0x7a, 0x65, 0x66, 0x51, 0xd6, 0x61, - 0x3f, 0xb6, 0x2c, 0xb6, 0x3c, 0x1e, 0xf7, 0x2e, 0x8b, 0xad, 0x0b, 0x77, 0xcf, 0xc8, 0x62, 0xf3, - 0x8c, 0x2c, 0xb6, 0x74, 0x4a, 0x51, 0xb9, 0x88, 0x94, 0xa2, 0xbc, 0x1e, 0xf4, 0x92, 0x52, 0x74, - 0x6c, 0x69, 0x6d, 0x7b, 0x76, 0xe8, 0x40, 0x69, 0x6d, 0x2a, 0xe7, 0xaf, 0x90, 0x64, 0x8f, 0x2e, - 0x9f, 0x2a, 0x37, 0xe7, 0x4f, 0xe5, 0x5b, 0xf1, 0x44, 0x26, 0x21, 0xea, 0x5f, 0x2e, 0xbe, 0x03, - 0x3d, 0xe4, 0x5b, 0x89, 0x5c, 0x2a, 0x33, 0xc7, 0x6f, 0xa0, 0x88, 0x1c, 0xbf, 0xbc, 0xee, 0xec, - 0x9b, 0xe3, 0xf7, 0x02, 0x0c, 0xd7, 0xbd, 0xc0, 0x27, 0xcb, 0x51, 0x90, 0x04, 0xf5, 0xc0, 0x13, - 0x66, 0xbd, 0x12, 0x09, 0x33, 0x26, 0x10, 0xa7, 0x71, 0xbb, 0x25, 0x08, 0xd6, 0x8e, 0x9a, 0x20, - 0x08, 0xf7, 0x29, 0x41, 0xf0, 0xe7, 0x75, 0x2a, 0xfb, 0x20, 0xfb, 0x22, 0xaf, 0x14, 0xff, 0x45, - 0x7a, 0xc9, 0x67, 0x47, 0x6f, 0xf1, 0x0b, 0x14, 0xa9, 0x61, 0x3c, 0x13, 0xb4, 0xa8, 0xe1, 0x37, - 0xc4, 0x86, 0xe4, 0xd5, 0x63, 0x98, 0xb0, 0x37, 0x57, 0x34, 0x1b, 0x75, 0xa9, 0xa2, 0x6e, 0xc2, - 0xe9, 0x8e, 0x1c, 0x25, 0xd5, 0xfe, 0x2b, 0x25, 0xf8, 0xa1, 0x7d, 0xbb, 0x80, 0x6e, 0x03, 0x24, - 0x4e, 0x53, 0x4c, 0x54, 0x71, 0x80, 0x75, 0xc4, 0x70, 0xd7, 0x55, 0x49, 0x8f, 0xd7, 0x88, 0x51, - 0x7f, 0xd9, 0xd1, 0x90, 0xfc, 0xcd, 0xa2, 0x5c, 0x03, 0xaf, 0xa3, 0x94, 0x26, 0x0e, 0x3c, 0x82, - 0x19, 0x84, 0xaa, 0xff, 0x88, 0x34, 0xf5, 0x8d, 0xdf, 0xea, 0xf3, 0x61, 0xd6, 0x8a, 0x05, 0x14, - 0x3d, 0x07, 0x83, 0x8e, 0xe7, 0xf1, 0x7c, 0x25, 0x12, 0x8b, 0x1b, 0x94, 0xb4, 0xd7, 0x52, 0x83, - 0xb0, 0x89, 0x67, 0xff, 0x79, 0x09, 0xc6, 0xf7, 0x91, 0x29, 0x1d, 0x19, 0x98, 0x95, 0x9e, 0x33, - 0x30, 0x45, 0xce, 0x48, 0x7f, 0x97, 0x9c, 0x91, 0xe7, 0x60, 0x30, 0x21, 0x4e, 0x4b, 0x04, 0xc8, - 0x09, 0x4f, 0x80, 0x3e, 0x91, 0xd7, 0x20, 0x6c, 0xe2, 0x51, 0x29, 0x36, 0xe2, 0xd4, 0xeb, 0x24, - 0x8e, 0x65, 0x52, 0x88, 0xf0, 0x6e, 0x17, 0x96, 0x71, 0xc2, 0x0e, 0x0d, 0xa6, 0x52, 0x2c, 0x70, - 0x86, 0x65, 0x76, 0xc0, 0x6b, 0x3d, 0x0e, 0xf8, 0xd7, 0x4b, 0xf0, 0xe8, 0x9e, 0xda, 0xad, 0xe7, - 0x7c, 0x9d, 0x76, 0x4c, 0xa2, 0xec, 0xc4, 0xb9, 0x1e, 0x93, 0x08, 0x33, 0x08, 0x1f, 0xa5, 0x30, - 0x34, 0x6e, 0x54, 0x2f, 0x3a, 0x99, 0x8c, 0x8f, 0x52, 0x8a, 0x05, 0xce, 0xb0, 0x3c, 0xec, 0xb4, - 0xfc, 0xfb, 0x25, 0x78, 0xbc, 0x07, 0x1b, 0xa0, 0xc0, 0xa4, 0xbb, 0x74, 0xea, 0x63, 0xf9, 0x3e, - 0x65, 0xa8, 0x1e, 0x72, 0xb8, 0xbe, 0x59, 0x82, 0x73, 0xdd, 0x55, 0x31, 0x7a, 0x1f, 0x8c, 0x46, - 0x2a, 0x2a, 0xce, 0xcc, 0x9a, 0x3c, 0xc5, 0x3d, 0x09, 0x29, 0x10, 0xce, 0xe2, 0xa2, 0x09, 0x80, - 0xd0, 0x49, 0x36, 0xe2, 0x8b, 0xdb, 0x6e, 0x9c, 0x88, 0xaa, 0x40, 0x23, 0xfc, 0x2c, 0x51, 0xb6, - 0x62, 0x03, 0x83, 0xb2, 0x63, 0xff, 0x66, 0x83, 0x6b, 0x41, 0xc2, 0x1f, 0xe2, 0xdb, 0x88, 0x53, - 0xf2, 0xf6, 0x15, 0x03, 0x84, 0xb3, 0xb8, 0x94, 0x1d, 0x3b, 0xe7, 0xe1, 0x1d, 0xe5, 0xfb, 0x0b, - 0xc6, 0x6e, 0x41, 0xb5, 0x62, 0x03, 0x23, 0x9b, 0x0f, 0x5a, 0xd9, 0x3f, 0x1f, 0xd4, 0xfe, 0x27, - 0x25, 0x38, 0xdb, 0xd5, 0x94, 0xeb, 0x6d, 0x01, 0x3e, 0x78, 0x39, 0x9c, 0x87, 0x9b, 0x3b, 0x07, - 0xcc, 0x35, 0xfc, 0xd3, 0x2e, 0x33, 0x4d, 0xe4, 0x1a, 0x1e, 0x3e, 0x59, 0xff, 0xc1, 0x1b, 0xcf, - 0x8e, 0xf4, 0xc2, 0xbe, 0x03, 0xa4, 0x17, 0x66, 0x3e, 0x46, 0xa5, 0xc7, 0x85, 0xfc, 0x97, 0xe5, - 0xae, 0xc3, 0x4b, 0xb7, 0x7e, 0x3d, 0xf9, 0x69, 0x67, 0xe1, 0x84, 0xeb, 0xb3, 0x9b, 0xb8, 0x56, - 0xda, 0x6b, 0xa2, 0x50, 0x4c, 0x29, 0x7d, 0x5f, 0xfe, 0x7c, 0x06, 0x8e, 0x3b, 0x9e, 0x78, 0x00, - 0xd3, 0x3d, 0x0f, 0x37, 0xa4, 0x07, 0x4b, 0x38, 0x46, 0x4b, 0x70, 0x46, 0x0e, 0xc5, 0x86, 0x13, - 0x91, 0x86, 0x50, 0x23, 0xb1, 0x48, 0x70, 0x39, 0xcb, 0x93, 0x64, 0x72, 0x10, 0x70, 0xfe, 0x73, - 0xec, 0xf2, 0xa3, 0x20, 0x74, 0xeb, 0x62, 0x93, 0xa3, 0x2f, 0x3f, 0xa2, 0x8d, 0x98, 0xc3, 0xec, - 0x57, 0xa0, 0xa6, 0xde, 0x9f, 0x87, 0xd9, 0xab, 0x49, 0xd7, 0x11, 0x66, 0xaf, 0x66, 0x9c, 0x81, - 0x45, 0xbf, 0x16, 0x35, 0x89, 0x33, 0xab, 0xe7, 0x2a, 0xd9, 0x61, 0xf6, 0xb1, 0xfd, 0xe3, 0x30, - 0xa4, 0xfc, 0x2c, 0xbd, 0x5e, 0x09, 0x65, 0xbf, 0xd9, 0x0f, 0xc3, 0xa9, 0x62, 0x8d, 0x29, 0x07, - 0xab, 0xb5, 0xaf, 0x83, 0x95, 0xa5, 0x4d, 0xb4, 0x7d, 0x79, 0x5f, 0x9c, 0x91, 0x36, 0xd1, 0xf6, - 0x09, 0xe6, 0x30, 0x6a, 0xde, 0x36, 0xa2, 0x1d, 0xdc, 0xf6, 0x45, 0x78, 0xb3, 0x32, 0x6f, 0x67, - 0x59, 0x2b, 0x16, 0x50, 0xf4, 0x09, 0x0b, 0x86, 0x62, 0xe6, 0xbd, 0xe7, 0xee, 0x69, 0x31, 0xe9, - 0xae, 0x1c, 0xbd, 0x16, 0xa5, 0x2a, 0x4c, 0xca, 0x22, 0x96, 0xcc, 0x16, 0x9c, 0xe2, 0x88, 0x3e, - 0x6d, 0x41, 0x4d, 0x5d, 0x6b, 0x23, 0x2e, 0x7f, 0x5c, 0x29, 0xb6, 0x16, 0x26, 0xf7, 0x6b, 0xaa, - 0x83, 0x10, 0x55, 0x94, 0x10, 0x6b, 0xc6, 0x28, 0x56, 0xbe, 0xe3, 0x81, 0xe3, 0xf1, 0x1d, 0x43, - 0x8e, 0xdf, 0xf8, 0xdd, 0x50, 0x6b, 0x39, 0xbe, 0xbb, 0x4e, 0xe2, 0x84, 0xbb, 0x73, 0x65, 0x89, - 0x5e, 0xd9, 0x88, 0x35, 0x9c, 0x2a, 0xe4, 0x98, 0xbd, 0x58, 0x62, 0xf8, 0x5f, 0x99, 0x42, 0x5e, - 0xd1, 0xcd, 0xd8, 0xc4, 0x31, 0x9d, 0xc5, 0x70, 0x5f, 0x9d, 0xc5, 0x83, 0x7b, 0x3b, 0x8b, 0xed, - 0x7f, 0x68, 0xc1, 0x99, 0xdc, 0xaf, 0xf6, 0xe0, 0x06, 0xa2, 0xda, 0x5f, 0xae, 0xc0, 0xa9, 0x9c, - 0xaa, 0xab, 0x68, 0xc7, 0x9c, 0xcf, 0x56, 0x11, 0x31, 0x04, 0xe9, 0x23, 0x71, 0x39, 0x8c, 0x39, - 0x93, 0xf8, 0x60, 0x47, 0x35, 0xfa, 0xb8, 0xa4, 0x7c, 0x6f, 0x8f, 0x4b, 0x8c, 0x69, 0xd9, 0x77, - 0x5f, 0xa7, 0x65, 0x65, 0x9f, 0x33, 0x8c, 0x5f, 0xb7, 0x60, 0xac, 0xd5, 0xa5, 0xd4, 0xbf, 0x70, - 0x3c, 0xde, 0x38, 0x9e, 0x8b, 0x04, 0xa6, 0x1f, 0xb9, 0xb3, 0x3b, 0xde, 0xf5, 0x86, 0x05, 0xdc, - 0xb5, 0x57, 0xf6, 0x77, 0xcb, 0xc0, 0x4a, 0xfe, 0xb2, 0xca, 0x7a, 0x3b, 0xe8, 0xe3, 0x66, 0xf1, - 0x66, 0xab, 0xa8, 0x42, 0xc3, 0x9c, 0xb8, 0x2a, 0xfe, 0xcc, 0x47, 0x30, 0xaf, 0x16, 0x74, 0x56, - 0x68, 0x95, 0x7a, 0x10, 0x5a, 0x9e, 0xac, 0x92, 0x5d, 0x2e, 0xbe, 0x4a, 0x76, 0x2d, 0x5b, 0x21, - 0x7b, 0xef, 0x4f, 0xdc, 0xf7, 0x40, 0x7e, 0xe2, 0x5f, 0xb6, 0xb8, 0xe0, 0xc9, 0x7c, 0x05, 0x6d, - 0x19, 0x58, 0x7b, 0x58, 0x06, 0x4f, 0x41, 0x35, 0x26, 0xde, 0xfa, 0x65, 0xe2, 0x78, 0xc2, 0x82, - 0xd0, 0xe7, 0xd7, 0xa2, 0x1d, 0x2b, 0x0c, 0x76, 0x01, 0xaf, 0xe7, 0x05, 0xb7, 0x2f, 0xb6, 0xc2, - 0x64, 0x47, 0xd8, 0x12, 0xfa, 0x02, 0x5e, 0x05, 0xc1, 0x06, 0x96, 0xfd, 0xb9, 0x3e, 0x3e, 0x03, - 0x45, 0x10, 0xc4, 0xf3, 0x99, 0x2b, 0x13, 0x7b, 0x8f, 0x1f, 0xf8, 0x28, 0x40, 0x3d, 0x68, 0x85, - 0xd4, 0xee, 0x5b, 0x0d, 0xc4, 0x99, 0xd0, 0xe5, 0x23, 0xdf, 0x98, 0x2e, 0xe8, 0xe9, 0xd7, 0xd0, - 0x6d, 0xd8, 0xe0, 0x97, 0x92, 0xa5, 0xe5, 0x7d, 0x65, 0x69, 0x4a, 0xac, 0xf4, 0xed, 0x23, 0x56, - 0xbe, 0x61, 0xc1, 0x09, 0xa5, 0xd7, 0x67, 0x36, 0x1c, 0xbf, 0x49, 0x1a, 0xa2, 0x38, 0xe0, 0x2b, - 0x45, 0x58, 0x5e, 0x74, 0xf4, 0x26, 0x16, 0x33, 0x0c, 0xb8, 0x9b, 0x5a, 0xed, 0x55, 0xb2, 0x60, - 0xdc, 0xd1, 0xa3, 0x73, 0x33, 0x70, 0x26, 0x97, 0xc8, 0x81, 0xae, 0x7a, 0xfa, 0x73, 0x0b, 0x52, - 0xd6, 0x1f, 0x0a, 0xa1, 0x42, 0xbb, 0xbe, 0x23, 0xa4, 0xd1, 0x52, 0x71, 0xa6, 0x26, 0x55, 0x03, - 0x62, 0x89, 0xb3, 0x9f, 0x98, 0x33, 0x42, 0x9e, 0x88, 0x0b, 0xe1, 0x33, 0xe8, 0x5a, 0x71, 0x0c, - 0x2f, 0x07, 0xc1, 0x26, 0x3f, 0xc4, 0xd5, 0x31, 0x26, 0xf6, 0xf3, 0x70, 0xb2, 0xa3, 0x53, 0xec, - 0x26, 0xb8, 0x80, 0x6a, 0xda, 0xcc, 0xd2, 0x64, 0xc9, 0xc3, 0x98, 0xc3, 0xec, 0x6f, 0x5a, 0x70, - 0x22, 0x4b, 0x1e, 0xbd, 0x65, 0xc1, 0xc9, 0x38, 0x4b, 0xef, 0xb8, 0xc6, 0x4e, 0xc5, 0x76, 0x76, - 0x80, 0x70, 0x67, 0x27, 0xec, 0xff, 0x53, 0xe2, 0x0b, 0xfd, 0xa6, 0xeb, 0x37, 0x82, 0xdb, 0xca, - 0x08, 0xb3, 0xba, 0x1a, 0x61, 0x54, 0xf6, 0xd4, 0x37, 0x48, 0xa3, 0xed, 0x75, 0x64, 0x2d, 0xaf, - 0x88, 0x76, 0xac, 0x30, 0x58, 0x92, 0x66, 0x5b, 0x5c, 0x19, 0x90, 0x59, 0x80, 0xb3, 0xa2, 0x1d, - 0x2b, 0x0c, 0xf4, 0x2c, 0x0c, 0x19, 0x2f, 0x29, 0xd7, 0x20, 0xdb, 0x7c, 0x18, 0xe6, 0x41, 0x8c, - 0x53, 0x58, 0x68, 0x02, 0x40, 0x19, 0x74, 0xd2, 0x1c, 0x60, 0x4e, 0x31, 0x25, 0x75, 0x63, 0x6c, - 0x60, 0xb0, 0x94, 0x68, 0xaf, 0x1d, 0xb3, 0xf3, 0x8c, 0x7e, 0x5d, 0xc6, 0x76, 0x46, 0xb4, 0x61, - 0x05, 0xa5, 0x92, 0xb3, 0xe5, 0xf8, 0x6d, 0xc7, 0xa3, 0x23, 0x24, 0xb6, 0xb9, 0x4a, 0xe4, 0x2c, - 0x2a, 0x08, 0x36, 0xb0, 0xe8, 0x1b, 0x27, 0x6e, 0x8b, 0xbc, 0x14, 0xf8, 0x32, 0x26, 0x4f, 0x1f, - 0x71, 0x89, 0x76, 0xac, 0x30, 0xec, 0xff, 0x62, 0xc1, 0xa8, 0x2e, 0xb0, 0xc0, 0xef, 0x7c, 0x37, - 0x77, 0xe5, 0xd6, 0xbe, 0xbb, 0xf2, 0x74, 0xe6, 0x79, 0xa9, 0xa7, 0xcc, 0x73, 0x33, 0x29, 0xbc, - 0xbc, 0x67, 0x52, 0xf8, 0x8f, 0xe8, 0xfb, 0x84, 0x79, 0xf6, 0xf8, 0x60, 0xde, 0x5d, 0xc2, 0xc8, - 0x86, 0xfe, 0xba, 0xa3, 0xaa, 0x0b, 0x0d, 0xf1, 0x7d, 0xd2, 0xcc, 0x14, 0x43, 0x12, 0x10, 0x7b, - 0x09, 0x6a, 0xea, 0xa4, 0x47, 0x6e, 0xca, 0xad, 0xfc, 0x4d, 0x79, 0x4f, 0xc9, 0xa9, 0xd3, 0x6b, - 0xdf, 0xfe, 0xde, 0x63, 0xef, 0xf8, 0x83, 0xef, 0x3d, 0xf6, 0x8e, 0x3f, 0xf9, 0xde, 0x63, 0xef, - 0xf8, 0xc4, 0x9d, 0xc7, 0xac, 0x6f, 0xdf, 0x79, 0xcc, 0xfa, 0x83, 0x3b, 0x8f, 0x59, 0x7f, 0x72, - 0xe7, 0x31, 0xeb, 0xbb, 0x77, 0x1e, 0xb3, 0xbe, 0xf4, 0x1f, 0x1f, 0x7b, 0xc7, 0x4b, 0xb9, 0x41, - 0x99, 0xf4, 0xc7, 0xd3, 0xf5, 0xc6, 0xe4, 0xd6, 0x05, 0x16, 0x17, 0x48, 0x97, 0xd7, 0xa4, 0x31, - 0xa7, 0x26, 0xe5, 0xf2, 0xfa, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x33, 0x50, 0xda, 0x37, 0x11, - 0xe6, 0x00, 0x00, + // 11232 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x1d, 0xd7, + 0x75, 0x98, 0xf7, 0x7d, 0x00, 0xef, 0x1d, 0x80, 0x00, 0x79, 0x49, 0x4a, 0x20, 0x2d, 0x09, 0xcc, + 0x2a, 0x91, 0x95, 0x5a, 0x02, 0x22, 0x46, 0x72, 0xd4, 0x28, 0x96, 0x83, 0x0f, 0x12, 0x04, 0x09, + 0x10, 0xd0, 0x05, 0x48, 0xda, 0x72, 0x24, 0x79, 0xf1, 0xde, 0xc5, 0xc3, 0x12, 0xfb, 0x76, 0x57, + 0xbb, 0xfb, 0x40, 0x40, 0xb1, 0x1d, 0x3b, 0xb6, 0x13, 0xb7, 0xfe, 0x90, 0x63, 0xb7, 0x13, 0xa5, + 0x8d, 0x3d, 0x4e, 0xec, 0x76, 0x9a, 0x69, 0x3d, 0x4d, 0xdb, 0x1f, 0x4d, 0x9d, 0xce, 0x64, 0x9a, + 0x74, 0x3a, 0x6e, 0xd3, 0x4c, 0x32, 0x99, 0x4c, 0x9c, 0xb6, 0x09, 0x6a, 0xb3, 0xd3, 0x69, 0xa7, + 0x33, 0xcd, 0x4c, 0xda, 0xfc, 0x68, 0xd9, 0xfe, 0xe8, 0xdc, 0xef, 0xbb, 0xfb, 0xf6, 0x11, 0x0f, + 0xc0, 0x82, 0xa4, 0x5d, 0xfd, 0x7b, 0xef, 0x9e, 0xb3, 0xe7, 0xdc, 0xbd, 0x7b, 0xef, 0x39, 0xe7, + 0x9e, 0x7b, 0xce, 0xb9, 0xb0, 0xd0, 0x72, 0x93, 0x8d, 0xce, 0xda, 0x44, 0x23, 0x68, 0x4f, 0x3a, + 0x51, 0x2b, 0x08, 0xa3, 0xe0, 0x26, 0xfb, 0xf1, 0x74, 0xa3, 0x39, 0xb9, 0x75, 0x7e, 0x32, 0xdc, + 0x6c, 0x4d, 0x3a, 0xa1, 0x1b, 0x4f, 0x3a, 0x61, 0xe8, 0xb9, 0x0d, 0x27, 0x71, 0x03, 0x7f, 0x72, + 0xeb, 0x19, 0xc7, 0x0b, 0x37, 0x9c, 0x67, 0x26, 0x5b, 0xc4, 0x27, 0x91, 0x93, 0x90, 0xe6, 0x44, + 0x18, 0x05, 0x49, 0x80, 0x7e, 0x42, 0x53, 0x9b, 0x90, 0xd4, 0xd8, 0x8f, 0xd7, 0x1a, 0xcd, 0x89, + 0xad, 0xf3, 0x13, 0xe1, 0x66, 0x6b, 0x82, 0x52, 0x9b, 0x30, 0xa8, 0x4d, 0x48, 0x6a, 0x67, 0x9f, + 0x36, 0xfa, 0xd2, 0x0a, 0x5a, 0xc1, 0x24, 0x23, 0xba, 0xd6, 0x59, 0x67, 0xff, 0xd8, 0x1f, 0xf6, + 0x8b, 0x33, 0x3b, 0x6b, 0x6f, 0x3e, 0x1f, 0x4f, 0xb8, 0x01, 0xed, 0xde, 0x64, 0x23, 0x88, 0xc8, + 0xe4, 0x56, 0x57, 0x87, 0xce, 0x5e, 0xd2, 0x38, 0x64, 0x3b, 0x21, 0x7e, 0xec, 0x06, 0x7e, 0xfc, + 0x34, 0xed, 0x02, 0x89, 0xb6, 0x48, 0x64, 0xbe, 0x9e, 0x81, 0x90, 0x47, 0xe9, 0x59, 0x4d, 0xa9, + 0xed, 0x34, 0x36, 0x5c, 0x9f, 0x44, 0x3b, 0xfa, 0xf1, 0x36, 0x49, 0x9c, 0xbc, 0xa7, 0x26, 0x7b, + 0x3d, 0x15, 0x75, 0xfc, 0xc4, 0x6d, 0x93, 0xae, 0x07, 0xde, 0xb3, 0xd7, 0x03, 0x71, 0x63, 0x83, + 0xb4, 0x9d, 0xae, 0xe7, 0x7e, 0xb4, 0xd7, 0x73, 0x9d, 0xc4, 0xf5, 0x26, 0x5d, 0x3f, 0x89, 0x93, + 0x28, 0xfb, 0x90, 0xfd, 0xcb, 0x16, 0x1c, 0x9b, 0xba, 0xb1, 0x32, 0xd5, 0x49, 0x36, 0x66, 0x02, + 0x7f, 0xdd, 0x6d, 0xa1, 0xe7, 0x60, 0xa8, 0xe1, 0x75, 0xe2, 0x84, 0x44, 0x57, 0x9d, 0x36, 0x19, + 0xb3, 0xce, 0x59, 0x4f, 0xd6, 0xa7, 0x4f, 0x7e, 0x6b, 0x77, 0xfc, 0x1d, 0xb7, 0x77, 0xc7, 0x87, + 0x66, 0x34, 0x08, 0x9b, 0x78, 0xe8, 0x87, 0x61, 0x30, 0x0a, 0x3c, 0x32, 0x85, 0xaf, 0x8e, 0x95, + 0xd8, 0x23, 0xa3, 0xe2, 0x91, 0x41, 0xcc, 0x9b, 0xb1, 0x84, 0x53, 0xd4, 0x30, 0x0a, 0xd6, 0x5d, + 0x8f, 0x8c, 0x95, 0xd3, 0xa8, 0xcb, 0xbc, 0x19, 0x4b, 0xb8, 0xfd, 0xc7, 0x25, 0x80, 0xa9, 0x30, + 0x5c, 0x8e, 0x82, 0x9b, 0xa4, 0x91, 0xa0, 0x0f, 0x41, 0x8d, 0x0e, 0x73, 0xd3, 0x49, 0x1c, 0xd6, + 0xb1, 0xa1, 0xf3, 0x3f, 0x32, 0xc1, 0xdf, 0x7a, 0xc2, 0x7c, 0x6b, 0x3d, 0xc9, 0x28, 0xf6, 0xc4, + 0xd6, 0x33, 0x13, 0x4b, 0x6b, 0xf4, 0xf9, 0x45, 0x92, 0x38, 0xd3, 0x48, 0x30, 0x03, 0xdd, 0x86, + 0x15, 0x55, 0xe4, 0x43, 0x25, 0x0e, 0x49, 0x83, 0xbd, 0xc3, 0xd0, 0xf9, 0x85, 0x89, 0xc3, 0xcc, + 0xe6, 0x09, 0xdd, 0xf3, 0x95, 0x90, 0x34, 0xa6, 0x87, 0x05, 0xe7, 0x0a, 0xfd, 0x87, 0x19, 0x1f, + 0xb4, 0x05, 0x03, 0x71, 0xe2, 0x24, 0x9d, 0x98, 0x0d, 0xc5, 0xd0, 0xf9, 0xab, 0x85, 0x71, 0x64, + 0x54, 0xa7, 0x47, 0x04, 0xcf, 0x01, 0xfe, 0x1f, 0x0b, 0x6e, 0xf6, 0x9f, 0x59, 0x30, 0xa2, 0x91, + 0x17, 0xdc, 0x38, 0x41, 0x3f, 0xd5, 0x35, 0xb8, 0x13, 0xfd, 0x0d, 0x2e, 0x7d, 0x9a, 0x0d, 0xed, + 0x71, 0xc1, 0xac, 0x26, 0x5b, 0x8c, 0x81, 0x6d, 0x43, 0xd5, 0x4d, 0x48, 0x3b, 0x1e, 0x2b, 0x9d, + 0x2b, 0x3f, 0x39, 0x74, 0xfe, 0x52, 0x51, 0xef, 0x39, 0x7d, 0x4c, 0x30, 0xad, 0xce, 0x53, 0xf2, + 0x98, 0x73, 0xb1, 0x7f, 0x6d, 0xd8, 0x7c, 0x3f, 0x3a, 0xe0, 0xe8, 0x19, 0x18, 0x8a, 0x83, 0x4e, + 0xd4, 0x20, 0x98, 0x84, 0x41, 0x3c, 0x66, 0x9d, 0x2b, 0xd3, 0xa9, 0x47, 0x27, 0xf5, 0x8a, 0x6e, + 0xc6, 0x26, 0x0e, 0xfa, 0xbc, 0x05, 0xc3, 0x4d, 0x12, 0x27, 0xae, 0xcf, 0xf8, 0xcb, 0xce, 0xaf, + 0x1e, 0xba, 0xf3, 0xb2, 0x71, 0x56, 0x13, 0x9f, 0x3e, 0x25, 0x5e, 0x64, 0xd8, 0x68, 0x8c, 0x71, + 0x8a, 0x3f, 0x5d, 0x9c, 0x4d, 0x12, 0x37, 0x22, 0x37, 0xa4, 0xff, 0xc5, 0xf2, 0x51, 0x8b, 0x73, + 0x56, 0x83, 0xb0, 0x89, 0x87, 0x7c, 0xa8, 0xd2, 0xc5, 0x17, 0x8f, 0x55, 0x58, 0xff, 0xe7, 0x0f, + 0xd7, 0x7f, 0x31, 0xa8, 0x74, 0x5d, 0xeb, 0xd1, 0xa7, 0xff, 0x62, 0xcc, 0xd9, 0xa0, 0xcf, 0x59, + 0x30, 0x26, 0x84, 0x03, 0x26, 0x7c, 0x40, 0x6f, 0x6c, 0xb8, 0x09, 0xf1, 0xdc, 0x38, 0x19, 0xab, + 0xb2, 0x3e, 0x4c, 0xf6, 0x37, 0xb7, 0xe6, 0xa2, 0xa0, 0x13, 0x5e, 0x71, 0xfd, 0xe6, 0xf4, 0x39, + 0xc1, 0x69, 0x6c, 0xa6, 0x07, 0x61, 0xdc, 0x93, 0x25, 0xfa, 0x92, 0x05, 0x67, 0x7d, 0xa7, 0x4d, + 0xe2, 0xd0, 0xa1, 0x9f, 0x96, 0x83, 0xa7, 0x3d, 0xa7, 0xb1, 0xc9, 0x7a, 0x34, 0x70, 0xb0, 0x1e, + 0xd9, 0xa2, 0x47, 0x67, 0xaf, 0xf6, 0x24, 0x8d, 0xef, 0xc2, 0x16, 0x7d, 0xcd, 0x82, 0x13, 0x41, + 0x14, 0x6e, 0x38, 0x3e, 0x69, 0x4a, 0x68, 0x3c, 0x36, 0xc8, 0x96, 0xde, 0xab, 0x87, 0xfb, 0x44, + 0x4b, 0x59, 0xb2, 0x8b, 0x81, 0xef, 0x26, 0x41, 0xb4, 0x42, 0x92, 0xc4, 0xf5, 0x5b, 0xf1, 0xf4, + 0xe9, 0xdb, 0xbb, 0xe3, 0x27, 0xba, 0xb0, 0x70, 0x77, 0x7f, 0xd0, 0x4f, 0xc3, 0x50, 0xbc, 0xe3, + 0x37, 0x6e, 0xb8, 0x7e, 0x33, 0xb8, 0x15, 0x8f, 0xd5, 0x8a, 0x58, 0xbe, 0x2b, 0x8a, 0xa0, 0x58, + 0x80, 0x9a, 0x01, 0x36, 0xb9, 0xe5, 0x7f, 0x38, 0x3d, 0x95, 0xea, 0x45, 0x7f, 0x38, 0x3d, 0x99, + 0xee, 0xc2, 0x16, 0xfd, 0xbc, 0x05, 0xc7, 0x62, 0xb7, 0xe5, 0x3b, 0x49, 0x27, 0x22, 0x57, 0xc8, + 0x4e, 0x3c, 0x06, 0xac, 0x23, 0x97, 0x0f, 0x39, 0x2a, 0x06, 0xc9, 0xe9, 0xd3, 0xa2, 0x8f, 0xc7, + 0xcc, 0xd6, 0x18, 0xa7, 0xf9, 0xe6, 0x2d, 0x34, 0x3d, 0xad, 0x87, 0x8a, 0x5d, 0x68, 0x7a, 0x52, + 0xf7, 0x64, 0x89, 0x7e, 0x12, 0x8e, 0xf3, 0x26, 0x35, 0xb2, 0xf1, 0xd8, 0x30, 0x13, 0xb4, 0xa7, + 0x6e, 0xef, 0x8e, 0x1f, 0x5f, 0xc9, 0xc0, 0x70, 0x17, 0x36, 0x7a, 0x1d, 0xc6, 0x43, 0x12, 0xb5, + 0xdd, 0x64, 0xc9, 0xf7, 0x76, 0xa4, 0xf8, 0x6e, 0x04, 0x21, 0x69, 0x8a, 0xee, 0xc4, 0x63, 0xc7, + 0xce, 0x59, 0x4f, 0xd6, 0xa6, 0xdf, 0x25, 0xba, 0x39, 0xbe, 0x7c, 0x77, 0x74, 0xbc, 0x17, 0x3d, + 0xfb, 0x5f, 0x97, 0xe0, 0x78, 0x56, 0x71, 0xa2, 0xbf, 0x6b, 0xc1, 0xe8, 0xcd, 0x5b, 0xc9, 0x6a, + 0xb0, 0x49, 0xfc, 0x78, 0x7a, 0x87, 0x8a, 0x37, 0xa6, 0x32, 0x86, 0xce, 0x37, 0x8a, 0x55, 0xd1, + 0x13, 0x97, 0xd3, 0x5c, 0x2e, 0xf8, 0x49, 0xb4, 0x33, 0xfd, 0xb0, 0x78, 0xbb, 0xd1, 0xcb, 0x37, + 0x56, 0x4d, 0x28, 0xce, 0x76, 0xea, 0xec, 0x67, 0x2c, 0x38, 0x95, 0x47, 0x02, 0x1d, 0x87, 0xf2, + 0x26, 0xd9, 0xe1, 0x06, 0x1c, 0xa6, 0x3f, 0xd1, 0x2b, 0x50, 0xdd, 0x72, 0xbc, 0x0e, 0x11, 0xd6, + 0xcd, 0xdc, 0xe1, 0x5e, 0x44, 0xf5, 0x0c, 0x73, 0xaa, 0x3f, 0x5e, 0x7a, 0xde, 0xb2, 0x7f, 0xbf, + 0x0c, 0x43, 0x86, 0x7e, 0xbb, 0x07, 0x16, 0x5b, 0x90, 0xb2, 0xd8, 0x16, 0x0b, 0x53, 0xcd, 0x3d, + 0x4d, 0xb6, 0x5b, 0x19, 0x93, 0x6d, 0xa9, 0x38, 0x96, 0x77, 0xb5, 0xd9, 0x50, 0x02, 0xf5, 0x20, + 0xa4, 0xd6, 0x3b, 0x55, 0xfd, 0x95, 0x22, 0x3e, 0xe1, 0x92, 0x24, 0x37, 0x7d, 0xec, 0xf6, 0xee, + 0x78, 0x5d, 0xfd, 0xc5, 0x9a, 0x91, 0xfd, 0x6d, 0x0b, 0x4e, 0x19, 0x7d, 0x9c, 0x09, 0xfc, 0xa6, + 0xcb, 0x3e, 0xed, 0x39, 0xa8, 0x24, 0x3b, 0xa1, 0xdc, 0x21, 0xa8, 0x91, 0x5a, 0xdd, 0x09, 0x09, + 0x66, 0x10, 0x6a, 0xe8, 0xb7, 0x49, 0x1c, 0x3b, 0x2d, 0x92, 0xdd, 0x13, 0x2c, 0xf2, 0x66, 0x2c, + 0xe1, 0x28, 0x02, 0xe4, 0x39, 0x71, 0xb2, 0x1a, 0x39, 0x7e, 0xcc, 0xc8, 0xaf, 0xba, 0x6d, 0x22, + 0x06, 0xf8, 0xaf, 0xf4, 0x37, 0x63, 0xe8, 0x13, 0xd3, 0x0f, 0xdd, 0xde, 0x1d, 0x47, 0x0b, 0x5d, + 0x94, 0x70, 0x0e, 0x75, 0xfb, 0x4b, 0x16, 0x3c, 0x94, 0x6f, 0x8b, 0xa1, 0x27, 0x60, 0x80, 0x6f, + 0x0f, 0xc5, 0xdb, 0xe9, 0x4f, 0xc2, 0x5a, 0xb1, 0x80, 0xa2, 0x49, 0xa8, 0x2b, 0x3d, 0x21, 0xde, + 0xf1, 0x84, 0x40, 0xad, 0x6b, 0xe5, 0xa2, 0x71, 0xe8, 0xa0, 0xd1, 0x3f, 0xc2, 0x72, 0x53, 0x83, + 0xc6, 0xf6, 0x53, 0x0c, 0x62, 0xff, 0x47, 0x0b, 0x46, 0x8d, 0x5e, 0xdd, 0x03, 0xd3, 0xdc, 0x4f, + 0x9b, 0xe6, 0xf3, 0x85, 0xcd, 0xe7, 0x1e, 0xb6, 0xf9, 0xe7, 0x2c, 0x38, 0x6b, 0x60, 0x2d, 0x3a, + 0x49, 0x63, 0xe3, 0xc2, 0x76, 0x18, 0x91, 0x98, 0x6e, 0xbd, 0xd1, 0xa3, 0x86, 0xdc, 0x9a, 0x1e, + 0x12, 0x14, 0xca, 0x57, 0xc8, 0x0e, 0x17, 0x62, 0x4f, 0x41, 0x8d, 0x4f, 0xce, 0x20, 0x12, 0x23, + 0xae, 0xde, 0x6d, 0x49, 0xb4, 0x63, 0x85, 0x81, 0x6c, 0x18, 0x60, 0xc2, 0x89, 0x2e, 0x56, 0xaa, + 0x86, 0x80, 0x7e, 0xc4, 0xeb, 0xac, 0x05, 0x0b, 0x88, 0x1d, 0xa7, 0xba, 0xb3, 0x1c, 0x11, 0xf6, + 0x71, 0x9b, 0x17, 0x5d, 0xe2, 0x35, 0x63, 0xba, 0x6d, 0x70, 0x7c, 0x3f, 0x48, 0xc4, 0x0e, 0xc0, + 0xd8, 0x36, 0x4c, 0xe9, 0x66, 0x6c, 0xe2, 0x50, 0xa6, 0x9e, 0xb3, 0x46, 0x3c, 0x3e, 0xa2, 0x82, + 0xe9, 0x02, 0x6b, 0xc1, 0x02, 0x62, 0xdf, 0x2e, 0xb1, 0x0d, 0x8a, 0x5a, 0xfa, 0xe4, 0x5e, 0xec, + 0x6e, 0xa3, 0x94, 0xac, 0x5c, 0x2e, 0x4e, 0x70, 0x91, 0xde, 0x3b, 0xdc, 0x37, 0x32, 0xe2, 0x12, + 0x17, 0xca, 0xf5, 0xee, 0xbb, 0xdc, 0x8f, 0x95, 0x61, 0x3c, 0xfd, 0x40, 0x97, 0xb4, 0xa5, 0x5b, + 0x2a, 0x83, 0x51, 0xd6, 0xdf, 0x61, 0xe0, 0x63, 0x13, 0xaf, 0x87, 0xc0, 0x2a, 0x1d, 0xa5, 0xc0, + 0x32, 0xe5, 0x69, 0x79, 0x0f, 0x79, 0xfa, 0x84, 0x1a, 0xf5, 0x4a, 0x46, 0x80, 0xa5, 0x75, 0xca, + 0x39, 0xa8, 0xc4, 0x09, 0x09, 0xc7, 0xaa, 0x69, 0x79, 0xb4, 0x92, 0x90, 0x10, 0x33, 0x08, 0x7a, + 0x2f, 0x8c, 0x26, 0x4e, 0xd4, 0x22, 0x49, 0x44, 0xb6, 0x5c, 0xe6, 0x1b, 0x63, 0xfb, 0xa5, 0xfa, + 0xf4, 0x49, 0x6a, 0x9e, 0xac, 0x32, 0x10, 0x96, 0x20, 0x9c, 0xc5, 0xb5, 0xff, 0x5b, 0x09, 0x1e, + 0x4e, 0x7f, 0x02, 0xad, 0x41, 0xde, 0x97, 0xd2, 0x20, 0xef, 0x36, 0x35, 0xc8, 0x9d, 0xdd, 0xf1, + 0x77, 0xf6, 0x78, 0xec, 0x7b, 0x46, 0xc1, 0xa0, 0xb9, 0xcc, 0x47, 0x98, 0x4c, 0x7f, 0x84, 0x3b, + 0xbb, 0xe3, 0x8f, 0xf6, 0x78, 0xc7, 0xcc, 0x57, 0x7a, 0x02, 0x06, 0x22, 0xe2, 0xc4, 0x81, 0x2f, + 0xbe, 0x93, 0xfa, 0x9a, 0x98, 0xb5, 0x62, 0x01, 0xb5, 0xff, 0xb0, 0x9e, 0x1d, 0xec, 0x39, 0xee, + 0xef, 0x0b, 0x22, 0xe4, 0x42, 0x85, 0xed, 0x0a, 0xb8, 0x64, 0xb9, 0x72, 0xb8, 0x55, 0x48, 0xb5, + 0x88, 0x22, 0x3d, 0x5d, 0xa3, 0x5f, 0x8d, 0x36, 0x61, 0xc6, 0x02, 0x6d, 0x43, 0xad, 0x21, 0x8d, + 0xf5, 0x52, 0x11, 0x6e, 0x2d, 0x61, 0xaa, 0x6b, 0x8e, 0xc3, 0x54, 0xdc, 0x2b, 0x0b, 0x5f, 0x71, + 0x43, 0x04, 0xca, 0x2d, 0x37, 0x11, 0x9f, 0xf5, 0x90, 0xdb, 0xb1, 0x39, 0xd7, 0x78, 0xc5, 0x41, + 0xaa, 0x83, 0xe6, 0xdc, 0x04, 0x53, 0xfa, 0xe8, 0x53, 0x16, 0x0c, 0xc5, 0x8d, 0xf6, 0x72, 0x14, + 0x6c, 0xb9, 0x4d, 0x12, 0x09, 0x63, 0xec, 0x90, 0x92, 0x6d, 0x65, 0x66, 0x51, 0x12, 0xd4, 0x7c, + 0xf9, 0xf6, 0x58, 0x43, 0xb0, 0xc9, 0x97, 0x6e, 0x52, 0x1e, 0x16, 0xef, 0x3e, 0x4b, 0x1a, 0x6c, + 0xc5, 0xc9, 0x3d, 0x19, 0x9b, 0x29, 0x87, 0x36, 0x4e, 0x67, 0x3b, 0x8d, 0x4d, 0xba, 0xde, 0x74, + 0x87, 0xde, 0x79, 0x7b, 0x77, 0xfc, 0xe1, 0x99, 0x7c, 0x9e, 0xb8, 0x57, 0x67, 0xd8, 0x80, 0x85, + 0x1d, 0xcf, 0xc3, 0xe4, 0xf5, 0x0e, 0x61, 0x1e, 0x97, 0x02, 0x06, 0x6c, 0x59, 0x13, 0xcc, 0x0c, + 0x98, 0x01, 0xc1, 0x26, 0x5f, 0xf4, 0x3a, 0x0c, 0xb4, 0x9d, 0x24, 0x72, 0xb7, 0x85, 0x9b, 0xe5, + 0x90, 0xdb, 0x85, 0x45, 0x46, 0x4b, 0x33, 0x67, 0x8a, 0x9e, 0x37, 0x62, 0xc1, 0x08, 0xb5, 0xa1, + 0xda, 0x26, 0x51, 0x8b, 0x8c, 0xd5, 0x8a, 0x70, 0x29, 0x2f, 0x52, 0x52, 0x9a, 0x61, 0x9d, 0x1a, + 0x57, 0xac, 0x0d, 0x73, 0x2e, 0xe8, 0x15, 0xa8, 0xc5, 0xc4, 0x23, 0x0d, 0x6a, 0x1e, 0xd5, 0x19, + 0xc7, 0x1f, 0xed, 0xd3, 0x54, 0xa4, 0x76, 0xc9, 0x8a, 0x78, 0x94, 0x2f, 0x30, 0xf9, 0x0f, 0x2b, + 0x92, 0x74, 0x00, 0x43, 0xaf, 0xd3, 0x72, 0xfd, 0x31, 0x28, 0x62, 0x00, 0x97, 0x19, 0xad, 0xcc, + 0x00, 0xf2, 0x46, 0x2c, 0x18, 0xd9, 0xff, 0xd9, 0x02, 0x94, 0x16, 0x6a, 0xf7, 0xc0, 0x26, 0x7e, + 0x3d, 0x6d, 0x13, 0x2f, 0x14, 0x69, 0xb4, 0xf4, 0x30, 0x8b, 0x7f, 0xb3, 0x0e, 0x19, 0x75, 0x70, + 0x95, 0xc4, 0x09, 0x69, 0xbe, 0x2d, 0xc2, 0xdf, 0x16, 0xe1, 0x6f, 0x8b, 0x70, 0x25, 0xc2, 0xd7, + 0x32, 0x22, 0xfc, 0x45, 0x63, 0xd5, 0xeb, 0xf3, 0xdb, 0xd7, 0xd4, 0x01, 0xaf, 0xd9, 0x03, 0x03, + 0x81, 0x4a, 0x82, 0xcb, 0x2b, 0x4b, 0x57, 0x73, 0x65, 0xf6, 0x6b, 0x69, 0x99, 0x7d, 0x58, 0x16, + 0xff, 0x3f, 0x48, 0xe9, 0x7f, 0x65, 0xc1, 0xbb, 0xd2, 0xd2, 0x4b, 0xce, 0x9c, 0xf9, 0x96, 0x1f, + 0x44, 0x64, 0xd6, 0x5d, 0x5f, 0x27, 0x11, 0xf1, 0x1b, 0x24, 0x56, 0x4e, 0x10, 0xab, 0x97, 0x13, + 0x04, 0x3d, 0x0b, 0xc3, 0x37, 0xe3, 0xc0, 0x5f, 0x0e, 0x5c, 0x5f, 0x88, 0x20, 0xba, 0xe3, 0x38, + 0x7e, 0x7b, 0x77, 0x7c, 0x98, 0x8e, 0xa8, 0x6c, 0xc7, 0x29, 0x2c, 0x34, 0x03, 0x27, 0x6e, 0xbe, + 0xbe, 0xec, 0x24, 0x86, 0x37, 0x41, 0xee, 0xfb, 0xd9, 0x79, 0xc7, 0xe5, 0x97, 0x32, 0x40, 0xdc, + 0x8d, 0x6f, 0xff, 0xed, 0x12, 0x9c, 0xc9, 0xbc, 0x48, 0xe0, 0x79, 0x41, 0x27, 0xa1, 0x7b, 0x22, + 0xf4, 0x15, 0x0b, 0x8e, 0xb7, 0xd3, 0x0e, 0x8b, 0x58, 0xf8, 0x85, 0xdf, 0x5f, 0x98, 0x8e, 0xc8, + 0x78, 0x44, 0xa6, 0xc7, 0xc4, 0x08, 0x1d, 0xcf, 0x00, 0x62, 0xdc, 0xd5, 0x17, 0xf4, 0x0a, 0xd4, + 0xdb, 0xce, 0xf6, 0xb5, 0xb0, 0xe9, 0x24, 0x72, 0x3b, 0xda, 0xdb, 0x8b, 0xd0, 0x49, 0x5c, 0x6f, + 0x82, 0x47, 0x06, 0x4c, 0xcc, 0xfb, 0xc9, 0x52, 0xb4, 0x92, 0x44, 0xae, 0xdf, 0xe2, 0xde, 0xc0, + 0x45, 0x49, 0x06, 0x6b, 0x8a, 0xf6, 0x97, 0xad, 0xac, 0x92, 0x52, 0xa3, 0x13, 0x39, 0x09, 0x69, + 0xed, 0xa0, 0x0f, 0x43, 0x95, 0xee, 0x1b, 0xe5, 0xa8, 0xdc, 0x28, 0x52, 0x73, 0x1a, 0x5f, 0x42, + 0x2b, 0x51, 0xfa, 0x2f, 0xc6, 0x9c, 0xa9, 0xfd, 0x95, 0x7a, 0xd6, 0x58, 0x60, 0x67, 0xbf, 0xe7, + 0x01, 0x5a, 0xc1, 0x2a, 0x69, 0x87, 0x1e, 0x1d, 0x16, 0x8b, 0x1d, 0x20, 0x28, 0x57, 0xc9, 0x9c, + 0x82, 0x60, 0x03, 0x0b, 0xfd, 0x35, 0x0b, 0xa0, 0x25, 0xe7, 0xbc, 0x34, 0x04, 0xae, 0x15, 0xf9, + 0x3a, 0x7a, 0x45, 0xe9, 0xbe, 0x28, 0x86, 0xd8, 0x60, 0x8e, 0x7e, 0xd6, 0x82, 0x5a, 0x22, 0xbb, + 0xcf, 0x55, 0xe3, 0x6a, 0x91, 0x3d, 0x91, 0x2f, 0xad, 0x6d, 0x22, 0x35, 0x24, 0x8a, 0x2f, 0xfa, + 0x39, 0x0b, 0x20, 0xde, 0xf1, 0x1b, 0xcb, 0x81, 0xe7, 0x36, 0x76, 0x84, 0xc6, 0xbc, 0x5e, 0xa8, + 0x3b, 0x47, 0x51, 0x9f, 0x1e, 0xa1, 0xa3, 0xa1, 0xff, 0x63, 0x83, 0x33, 0xfa, 0x28, 0xd4, 0x62, + 0x31, 0xdd, 0x84, 0x8e, 0x5c, 0x2d, 0xd6, 0xa9, 0xc4, 0x69, 0x0b, 0xf1, 0x2a, 0xfe, 0x61, 0xc5, + 0x13, 0xfd, 0xa2, 0x05, 0xa3, 0x61, 0xda, 0x4d, 0x28, 0xd4, 0x61, 0x71, 0x32, 0x20, 0xe3, 0x86, + 0xe4, 0xde, 0x96, 0x4c, 0x23, 0xce, 0xf6, 0x82, 0x4a, 0x40, 0x3d, 0x83, 0x97, 0x42, 0xee, 0xb2, + 0x1c, 0xd4, 0x12, 0x70, 0x2e, 0x0b, 0xc4, 0xdd, 0xf8, 0x68, 0x19, 0x4e, 0xd1, 0xde, 0xed, 0x70, + 0xf3, 0x53, 0xaa, 0x97, 0x98, 0x29, 0xc3, 0xda, 0xf4, 0x23, 0x62, 0x86, 0xb0, 0x43, 0x81, 0x2c, + 0x0e, 0xce, 0x7d, 0x12, 0xfd, 0xbe, 0x05, 0x8f, 0xb8, 0x4c, 0x0d, 0x98, 0xfe, 0x76, 0xad, 0x11, + 0xc4, 0x41, 0x2e, 0x29, 0x54, 0x56, 0xf4, 0x52, 0x3f, 0xd3, 0x3f, 0x28, 0xde, 0xe0, 0x91, 0xf9, + 0xbb, 0x74, 0x09, 0xdf, 0xb5, 0xc3, 0xe8, 0xc7, 0xe0, 0x98, 0x5c, 0x17, 0xcb, 0x54, 0x04, 0x33, + 0x45, 0x5b, 0x9f, 0x3e, 0x71, 0x7b, 0x77, 0xfc, 0xd8, 0xaa, 0x09, 0xc0, 0x69, 0x3c, 0xfb, 0xdf, + 0x94, 0x53, 0xc7, 0x29, 0xca, 0x87, 0xc9, 0xc4, 0x4d, 0x43, 0xfa, 0x7f, 0xa4, 0xf4, 0x2c, 0x54, + 0xdc, 0x28, 0xef, 0x92, 0x16, 0x37, 0xaa, 0x29, 0xc6, 0x06, 0x73, 0x6a, 0x94, 0x9e, 0x70, 0xb2, + 0x9e, 0x52, 0x21, 0x01, 0x5f, 0x29, 0xb2, 0x4b, 0xdd, 0x87, 0x5f, 0x67, 0x44, 0xd7, 0x4e, 0x74, + 0x81, 0x70, 0x77, 0x97, 0xd0, 0x47, 0xa0, 0x1e, 0xa9, 0xc8, 0x89, 0x72, 0x11, 0x5b, 0x35, 0x39, + 0x6d, 0x44, 0x77, 0xd4, 0x69, 0x8e, 0x8e, 0x91, 0xd0, 0x1c, 0xed, 0xdf, 0x4d, 0x9f, 0x20, 0x19, + 0xb2, 0xa3, 0x8f, 0xd3, 0xb1, 0xcf, 0x5b, 0x30, 0x14, 0x05, 0x9e, 0xe7, 0xfa, 0x2d, 0x2a, 0xe7, + 0x84, 0xb2, 0xfe, 0xe0, 0x91, 0xe8, 0x4b, 0x21, 0xd0, 0x98, 0x65, 0x8d, 0x35, 0x4f, 0x6c, 0x76, + 0xc0, 0xfe, 0x33, 0x0b, 0xc6, 0x7a, 0xc9, 0x63, 0x44, 0xe0, 0x9d, 0x52, 0xd8, 0xa8, 0xa1, 0x58, + 0xf2, 0x67, 0x89, 0x47, 0x94, 0xdb, 0xbc, 0x36, 0xfd, 0xb8, 0x78, 0xcd, 0x77, 0x2e, 0xf7, 0x46, + 0xc5, 0x77, 0xa3, 0x83, 0x5e, 0x86, 0xe3, 0xc6, 0x7b, 0xc5, 0x6a, 0x60, 0xea, 0xd3, 0x13, 0xd4, + 0x00, 0x9a, 0xca, 0xc0, 0xee, 0xec, 0x8e, 0x3f, 0x94, 0x6d, 0x13, 0x0a, 0xa3, 0x8b, 0x8e, 0xfd, + 0xf5, 0x52, 0xf6, 0x6b, 0x29, 0x5d, 0xff, 0x96, 0xd5, 0xe5, 0x4d, 0x78, 0xff, 0x51, 0xe8, 0x57, + 0xe6, 0x77, 0x50, 0xe1, 0x27, 0xbd, 0x71, 0xee, 0xe3, 0xf9, 0xb6, 0xfd, 0x6f, 0x2b, 0x70, 0x97, + 0x9e, 0xf5, 0x61, 0xbc, 0xef, 0xfb, 0x50, 0xf4, 0xb3, 0x96, 0x3a, 0x30, 0xe3, 0x6b, 0xb8, 0x79, + 0x54, 0x63, 0xcf, 0xf7, 0x4f, 0x31, 0x8f, 0xb1, 0x50, 0x5e, 0xf4, 0xf4, 0xd1, 0x1c, 0xfa, 0xaa, + 0x95, 0x3e, 0xf2, 0xe3, 0x41, 0x73, 0xee, 0x91, 0xf5, 0xc9, 0x38, 0x47, 0xe4, 0x1d, 0xd3, 0xa7, + 0x4f, 0xbd, 0x4e, 0x18, 0x27, 0x00, 0xd6, 0x5d, 0xdf, 0xf1, 0xdc, 0x37, 0xe8, 0xee, 0xa8, 0xca, + 0x14, 0x3c, 0xb3, 0x98, 0x2e, 0xaa, 0x56, 0x6c, 0x60, 0x9c, 0xfd, 0xab, 0x30, 0x64, 0xbc, 0x79, + 0x4e, 0x68, 0xc8, 0x29, 0x33, 0x34, 0xa4, 0x6e, 0x44, 0x74, 0x9c, 0x7d, 0x11, 0x8e, 0x67, 0x3b, + 0xb8, 0x9f, 0xe7, 0xed, 0xff, 0x35, 0x98, 0x3d, 0x83, 0x5b, 0x25, 0x51, 0x9b, 0x76, 0xed, 0x6d, + 0xc7, 0xd6, 0xdb, 0x8e, 0xad, 0xb7, 0x1d, 0x5b, 0xe6, 0xd9, 0x84, 0x70, 0xda, 0x0c, 0xde, 0x23, + 0xa7, 0x4d, 0xca, 0x0d, 0x55, 0x2b, 0xdc, 0x0d, 0x65, 0x7f, 0xaa, 0xcb, 0x73, 0xbf, 0x1a, 0x11, + 0x82, 0x02, 0xa8, 0xfa, 0x41, 0x93, 0x48, 0x1b, 0xf7, 0x72, 0x31, 0x06, 0xdb, 0xd5, 0xa0, 0x69, + 0x84, 0x23, 0xd3, 0x7f, 0x31, 0xe6, 0x7c, 0xec, 0xdb, 0x55, 0x48, 0x99, 0x93, 0xfc, 0xbb, 0xff, + 0x30, 0x0c, 0x46, 0x24, 0x0c, 0xae, 0xe1, 0x05, 0xa1, 0xcb, 0x74, 0xc6, 0x02, 0x6f, 0xc6, 0x12, + 0x4e, 0x75, 0x5e, 0xe8, 0x24, 0x1b, 0x42, 0x99, 0x29, 0x9d, 0xb7, 0xec, 0x24, 0x1b, 0x98, 0x41, + 0xd0, 0x8b, 0x30, 0x92, 0xa4, 0x8e, 0xc2, 0xc5, 0x91, 0xef, 0x43, 0x02, 0x77, 0x24, 0x7d, 0x50, + 0x8e, 0x33, 0xd8, 0xe8, 0x75, 0xa8, 0x6c, 0x10, 0xaf, 0x2d, 0x3e, 0xfd, 0x4a, 0x71, 0xba, 0x86, + 0xbd, 0xeb, 0x25, 0xe2, 0xb5, 0xb9, 0x24, 0xa4, 0xbf, 0x30, 0x63, 0x45, 0xe7, 0x7d, 0x7d, 0xb3, + 0x13, 0x27, 0x41, 0xdb, 0x7d, 0x43, 0x7a, 0x3a, 0xdf, 0x5f, 0x30, 0xe3, 0x2b, 0x92, 0x3e, 0x77, + 0x29, 0xa9, 0xbf, 0x58, 0x73, 0x66, 0xfd, 0x68, 0xba, 0x11, 0x9b, 0x32, 0x3b, 0xc2, 0x61, 0x59, + 0x74, 0x3f, 0x66, 0x25, 0x7d, 0xde, 0x0f, 0xf5, 0x17, 0x6b, 0xce, 0x68, 0x47, 0xad, 0xbf, 0x21, + 0xd6, 0x87, 0x6b, 0x05, 0xf7, 0x81, 0xaf, 0xbd, 0xdc, 0x75, 0xf8, 0x38, 0x54, 0x1b, 0x1b, 0x4e, + 0x94, 0x8c, 0x0d, 0xb3, 0x49, 0xa3, 0x66, 0xf1, 0x0c, 0x6d, 0xc4, 0x1c, 0x86, 0x1e, 0x85, 0x72, + 0x44, 0xd6, 0x59, 0xf4, 0xab, 0x11, 0x17, 0x85, 0xc9, 0x3a, 0xa6, 0xed, 0xf6, 0xaf, 0x94, 0xd2, + 0x66, 0x5b, 0xfa, 0xbd, 0xf9, 0x6c, 0x6f, 0x74, 0xa2, 0x58, 0xba, 0xbf, 0x8c, 0xd9, 0xce, 0x9a, + 0xb1, 0x84, 0xa3, 0x8f, 0x5b, 0x30, 0x78, 0x33, 0x0e, 0x7c, 0x9f, 0x24, 0x42, 0x45, 0x5e, 0x2f, + 0x78, 0x28, 0x2e, 0x73, 0xea, 0xba, 0x0f, 0xa2, 0x01, 0x4b, 0xbe, 0xb4, 0xbb, 0x64, 0xbb, 0xe1, + 0x75, 0x9a, 0x5d, 0xa1, 0x2e, 0x17, 0x78, 0x33, 0x96, 0x70, 0x8a, 0xea, 0xfa, 0x1c, 0xb5, 0x92, + 0x46, 0x9d, 0xf7, 0x05, 0xaa, 0x80, 0xdb, 0x7f, 0x73, 0x00, 0x4e, 0xe7, 0x2e, 0x0e, 0x6a, 0x50, + 0x31, 0x93, 0xe5, 0xa2, 0xeb, 0x11, 0x19, 0xe4, 0xc5, 0x0c, 0xaa, 0xeb, 0xaa, 0x15, 0x1b, 0x18, + 0xe8, 0x67, 0x00, 0x42, 0x27, 0x72, 0xda, 0x44, 0xb9, 0xa7, 0x0f, 0x6d, 0xb7, 0xd0, 0x7e, 0x2c, + 0x4b, 0x9a, 0x7a, 0x8b, 0xae, 0x9a, 0x62, 0x6c, 0xb0, 0x44, 0xcf, 0xc1, 0x50, 0x44, 0x3c, 0xe2, + 0xc4, 0x2c, 0x78, 0x3a, 0x9b, 0x09, 0x82, 0x35, 0x08, 0x9b, 0x78, 0xe8, 0x09, 0x15, 0x0f, 0x97, + 0x89, 0x0b, 0x4a, 0xc7, 0xc4, 0xa1, 0x37, 0x2d, 0x18, 0x59, 0x77, 0x3d, 0xa2, 0xb9, 0x8b, 0xbc, + 0x8d, 0xa5, 0xc3, 0xbf, 0xe4, 0x45, 0x93, 0xae, 0x96, 0x90, 0xa9, 0xe6, 0x18, 0x67, 0xd8, 0xd3, + 0xcf, 0xbc, 0x45, 0x22, 0x26, 0x5a, 0x07, 0xd2, 0x9f, 0xf9, 0x3a, 0x6f, 0xc6, 0x12, 0x8e, 0xa6, + 0x60, 0x34, 0x74, 0xe2, 0x78, 0x26, 0x22, 0x4d, 0xe2, 0x27, 0xae, 0xe3, 0xf1, 0xac, 0x8a, 0x9a, + 0x8e, 0xaa, 0x5e, 0x4e, 0x83, 0x71, 0x16, 0x1f, 0x7d, 0x00, 0x1e, 0xe6, 0xfe, 0x9f, 0x45, 0x37, + 0x8e, 0x5d, 0xbf, 0xa5, 0xa7, 0x81, 0x70, 0x83, 0x8d, 0x0b, 0x52, 0x0f, 0xcf, 0xe7, 0xa3, 0xe1, + 0x5e, 0xcf, 0xa3, 0xa7, 0xa0, 0x16, 0x6f, 0xba, 0xe1, 0x4c, 0xd4, 0x8c, 0xd9, 0xd9, 0x4f, 0x4d, + 0x3b, 0x5d, 0x57, 0x44, 0x3b, 0x56, 0x18, 0xa8, 0x01, 0xc3, 0xfc, 0x93, 0xf0, 0x80, 0x3e, 0x21, + 0x1f, 0x9f, 0xee, 0xa9, 0xa6, 0x45, 0x92, 0xe0, 0x04, 0x76, 0x6e, 0x5d, 0x90, 0x27, 0x51, 0xfc, + 0xe0, 0xe4, 0xba, 0x41, 0x06, 0xa7, 0x88, 0xda, 0xbf, 0x54, 0x4a, 0xef, 0xfc, 0xcd, 0x45, 0x8a, + 0x62, 0xba, 0x14, 0x93, 0xeb, 0x4e, 0x24, 0x15, 0xf6, 0x21, 0x93, 0x3f, 0x04, 0xdd, 0xeb, 0x4e, + 0x64, 0x2e, 0x6a, 0xc6, 0x00, 0x4b, 0x4e, 0xe8, 0x26, 0x54, 0x12, 0xcf, 0x29, 0x28, 0x5b, 0xcc, + 0xe0, 0xa8, 0x1d, 0x31, 0x0b, 0x53, 0x31, 0x66, 0x3c, 0xd0, 0x23, 0x74, 0xf7, 0xb1, 0x26, 0x4f, + 0x8a, 0xc4, 0x86, 0x61, 0x2d, 0xc6, 0xac, 0xd5, 0xfe, 0xe6, 0x50, 0x8e, 0x5c, 0x55, 0x8a, 0x0c, + 0x9d, 0x07, 0xa0, 0x1b, 0xd9, 0xe5, 0x88, 0xac, 0xbb, 0xdb, 0xc2, 0x90, 0x50, 0x6b, 0xf7, 0xaa, + 0x82, 0x60, 0x03, 0x4b, 0x3e, 0xb3, 0xd2, 0x59, 0xa7, 0xcf, 0x94, 0xba, 0x9f, 0xe1, 0x10, 0x6c, + 0x60, 0xa1, 0x67, 0x61, 0xc0, 0x6d, 0x3b, 0x2d, 0x15, 0xc8, 0xfa, 0x08, 0x5d, 0xb4, 0xf3, 0xac, + 0xe5, 0xce, 0xee, 0xf8, 0x88, 0xea, 0x10, 0x6b, 0xc2, 0x02, 0x17, 0x7d, 0xdd, 0x82, 0xe1, 0x46, + 0xd0, 0x6e, 0x07, 0x3e, 0xdf, 0xfe, 0x89, 0xbd, 0xec, 0xcd, 0xa3, 0x52, 0xf3, 0x13, 0x33, 0x06, + 0x33, 0xbe, 0x99, 0x55, 0x69, 0x6d, 0x26, 0x08, 0xa7, 0x7a, 0x65, 0xae, 0xed, 0xea, 0x1e, 0x6b, + 0xfb, 0x37, 0x2c, 0x38, 0xc1, 0x9f, 0x35, 0x76, 0xa5, 0x22, 0x83, 0x2b, 0x38, 0xe2, 0xd7, 0xea, + 0xda, 0xa8, 0x2b, 0x67, 0x65, 0x17, 0x1c, 0x77, 0x77, 0x12, 0xcd, 0xc1, 0x89, 0xf5, 0x20, 0x6a, + 0x10, 0x73, 0x20, 0x84, 0x60, 0x52, 0x84, 0x2e, 0x66, 0x11, 0x70, 0xf7, 0x33, 0xe8, 0x3a, 0x3c, + 0x64, 0x34, 0x9a, 0xe3, 0xc0, 0x65, 0xd3, 0x63, 0x82, 0xda, 0x43, 0x17, 0x73, 0xb1, 0x70, 0x8f, + 0xa7, 0xa9, 0x11, 0xcb, 0x20, 0xca, 0x49, 0x23, 0xe4, 0x93, 0x16, 0xd1, 0x29, 0x28, 0xce, 0x60, + 0xa7, 0x1d, 0x3f, 0xd0, 0x87, 0xe3, 0xe7, 0x35, 0x38, 0xd3, 0xe8, 0x1e, 0xd9, 0xad, 0xb8, 0xb3, + 0xc6, 0xd2, 0x97, 0x28, 0xef, 0x1f, 0x10, 0x04, 0xce, 0xcc, 0xf4, 0x42, 0xc4, 0xbd, 0x69, 0xa0, + 0x0f, 0x43, 0x2d, 0x22, 0xec, 0xab, 0xf2, 0x3c, 0xa4, 0x43, 0xef, 0xf6, 0xb5, 0x05, 0xcb, 0xc9, + 0x6a, 0xd9, 0x2d, 0x1a, 0x62, 0xac, 0x38, 0xa2, 0x5b, 0x30, 0x18, 0x3a, 0x49, 0x63, 0x83, 0xc4, + 0x63, 0xc7, 0x8a, 0xf0, 0x4d, 0x2b, 0xe6, 0xec, 0x28, 0xc1, 0x48, 0x9b, 0xe6, 0x4c, 0xb0, 0xe4, + 0x46, 0xad, 0x99, 0x46, 0xd0, 0x0e, 0x03, 0x9f, 0xf8, 0x49, 0x3c, 0x36, 0xa2, 0xad, 0x99, 0x19, + 0xd5, 0x8a, 0x0d, 0x0c, 0xb4, 0x0c, 0xa7, 0x98, 0xef, 0xeb, 0x86, 0x9b, 0x6c, 0x04, 0x9d, 0x44, + 0x6e, 0xe5, 0xc6, 0x46, 0xd3, 0x27, 0x3e, 0x0b, 0x39, 0x38, 0x38, 0xf7, 0xc9, 0xb3, 0xef, 0x83, + 0x13, 0x5d, 0xa2, 0x60, 0x5f, 0x6e, 0xa7, 0x59, 0x78, 0x28, 0x7f, 0xd1, 0xed, 0xcb, 0xf9, 0xf4, + 0x4f, 0x32, 0xd1, 0xc7, 0x86, 0x21, 0xde, 0x87, 0x23, 0xd3, 0x81, 0x32, 0xf1, 0xb7, 0x84, 0x0e, + 0xba, 0x78, 0xb8, 0x6f, 0x77, 0xc1, 0xdf, 0xe2, 0x32, 0x83, 0x79, 0x6b, 0x2e, 0xf8, 0x5b, 0x98, + 0xd2, 0x46, 0x5f, 0xb4, 0x52, 0x86, 0x24, 0x77, 0x7f, 0xbe, 0x7a, 0x24, 0x3b, 0x8f, 0xbe, 0x6d, + 0x4b, 0xfb, 0xf7, 0x4a, 0x70, 0x6e, 0x2f, 0x22, 0x7d, 0x0c, 0xdf, 0xe3, 0x30, 0x10, 0xb3, 0x78, + 0x02, 0x21, 0xd4, 0x87, 0xe8, 0x5c, 0xe5, 0x11, 0x06, 0xaf, 0x61, 0x01, 0x42, 0x1e, 0x94, 0xdb, + 0x4e, 0x28, 0xbc, 0x62, 0xf3, 0x87, 0x4d, 0x67, 0xa2, 0xff, 0x1d, 0x6f, 0xd1, 0x09, 0xb9, 0xaf, + 0xc5, 0x68, 0xc0, 0x94, 0x0d, 0x4a, 0xa0, 0xea, 0x44, 0x91, 0x23, 0x0f, 0xaf, 0xaf, 0x14, 0xc3, + 0x6f, 0x8a, 0x92, 0xe4, 0x67, 0x7f, 0xa9, 0x26, 0xcc, 0x99, 0xd9, 0x9f, 0x1d, 0x4c, 0xa5, 0xf4, + 0xb0, 0x88, 0x84, 0x18, 0x06, 0x84, 0x33, 0xcc, 0x2a, 0x3a, 0x8b, 0x8c, 0xe7, 0x64, 0xb2, 0x7d, + 0xa6, 0xc8, 0x6c, 0x17, 0xac, 0xd0, 0x67, 0x2c, 0x96, 0x3f, 0x2e, 0xd3, 0x9c, 0xc4, 0xee, 0xee, + 0x68, 0xd2, 0xd9, 0xcd, 0xac, 0x74, 0xd9, 0x88, 0x4d, 0xee, 0xa2, 0x0e, 0x04, 0xb3, 0x6a, 0xbb, + 0xeb, 0x40, 0x30, 0x2b, 0x55, 0xc2, 0xd1, 0x76, 0x4e, 0xe4, 0x41, 0x01, 0x39, 0xc8, 0x7d, 0xc4, + 0x1a, 0x7c, 0xd5, 0x82, 0x13, 0x6e, 0xf6, 0x08, 0x59, 0xec, 0x85, 0x6e, 0x14, 0xe3, 0xb9, 0xea, + 0x3e, 0xa1, 0x56, 0xe6, 0x40, 0x17, 0x08, 0x77, 0x77, 0x06, 0x35, 0xa1, 0xe2, 0xfa, 0xeb, 0x81, + 0x30, 0x82, 0xa6, 0x0f, 0xd7, 0xa9, 0x79, 0x7f, 0x3d, 0xd0, 0xab, 0x99, 0xfe, 0xc3, 0x8c, 0x3a, + 0x5a, 0x80, 0x53, 0x32, 0xab, 0xe3, 0x92, 0x1b, 0x27, 0x41, 0xb4, 0xb3, 0xe0, 0xb6, 0xdd, 0x84, + 0x19, 0x30, 0xe5, 0xe9, 0x31, 0xaa, 0x1f, 0x70, 0x0e, 0x1c, 0xe7, 0x3e, 0x85, 0xde, 0x80, 0x41, + 0x79, 0x6c, 0x5b, 0x2b, 0x62, 0x5f, 0xd9, 0x3d, 0xff, 0xd5, 0x64, 0x5a, 0x11, 0xe7, 0xb6, 0x92, + 0xa1, 0xfd, 0xe6, 0x10, 0x74, 0x9f, 0x2e, 0xa7, 0x8f, 0x92, 0xad, 0x7b, 0x7d, 0x94, 0x4c, 0x37, + 0x3c, 0xb1, 0x3e, 0x05, 0x2e, 0x60, 0x6e, 0x0b, 0xae, 0xfa, 0x84, 0x6f, 0xc7, 0x6f, 0x60, 0xc6, + 0x03, 0x45, 0x30, 0xb0, 0x41, 0x1c, 0x2f, 0xd9, 0x28, 0xe6, 0x30, 0xe2, 0x12, 0xa3, 0x95, 0x4d, + 0xc5, 0xe2, 0xad, 0x58, 0x70, 0x42, 0xdb, 0x30, 0xb8, 0xc1, 0x27, 0x80, 0xd8, 0x83, 0x2c, 0x1e, + 0x76, 0x70, 0x53, 0xb3, 0x4a, 0x7f, 0x6e, 0xd1, 0x80, 0x25, 0x3b, 0x16, 0xb6, 0x64, 0x04, 0x56, + 0xf0, 0xa5, 0x5b, 0x5c, 0x16, 0x5a, 0xff, 0x51, 0x15, 0x1f, 0x82, 0xe1, 0x88, 0x34, 0x02, 0xbf, + 0xe1, 0x7a, 0xa4, 0x39, 0x25, 0x0f, 0x1a, 0xf6, 0x93, 0x7c, 0xc4, 0xf6, 0xf1, 0xd8, 0xa0, 0x81, + 0x53, 0x14, 0xd1, 0xa7, 0x2d, 0x18, 0x51, 0x99, 0xbb, 0xf4, 0x83, 0x10, 0xe1, 0x50, 0x5e, 0x28, + 0x28, 0x4f, 0x98, 0xd1, 0x9c, 0x46, 0x74, 0x2f, 0x90, 0x6e, 0xc3, 0x19, 0xbe, 0xe8, 0x65, 0x80, + 0x60, 0x8d, 0xc7, 0x26, 0x4d, 0x25, 0xc2, 0xbb, 0xbc, 0x9f, 0x57, 0x1d, 0xe1, 0x49, 0x8c, 0x92, + 0x02, 0x36, 0xa8, 0xa1, 0x2b, 0x00, 0x7c, 0xd9, 0xac, 0xee, 0x84, 0x7c, 0x8f, 0xa2, 0xb3, 0xc7, + 0x60, 0x45, 0x41, 0xee, 0xec, 0x8e, 0x77, 0x7b, 0xfb, 0x58, 0x00, 0x86, 0xf1, 0x38, 0xfa, 0x69, + 0x18, 0x8c, 0x3b, 0xed, 0xb6, 0xa3, 0x7c, 0xcf, 0x05, 0xa6, 0x45, 0x72, 0xba, 0x86, 0x28, 0xe2, + 0x0d, 0x58, 0x72, 0x44, 0x37, 0xa9, 0x50, 0x8d, 0x85, 0x1b, 0x92, 0xad, 0x22, 0x6e, 0x13, 0x0c, + 0xb1, 0x77, 0x7a, 0x8f, 0x34, 0xbc, 0x71, 0x0e, 0xce, 0x9d, 0xdd, 0xf1, 0x87, 0xd2, 0xed, 0x0b, + 0x81, 0x48, 0x54, 0xcc, 0xa5, 0x89, 0x2e, 0xcb, 0xfa, 0x37, 0xf4, 0xb5, 0x65, 0x59, 0x86, 0x27, + 0x75, 0xfd, 0x1b, 0xd6, 0xdc, 0x7b, 0xcc, 0xcc, 0x87, 0xd1, 0x22, 0x9c, 0x6c, 0x04, 0x7e, 0x12, + 0x05, 0x9e, 0xc7, 0xeb, 0x3f, 0xf1, 0x3d, 0x1f, 0xf7, 0x4d, 0xbf, 0x53, 0x74, 0xfb, 0xe4, 0x4c, + 0x37, 0x0a, 0xce, 0x7b, 0xce, 0xf6, 0xd3, 0xe7, 0x44, 0x62, 0x70, 0x9e, 0x85, 0x61, 0xb2, 0x9d, + 0x90, 0xc8, 0x77, 0xbc, 0x6b, 0x78, 0x41, 0x7a, 0x65, 0xd9, 0x1a, 0xb8, 0x60, 0xb4, 0xe3, 0x14, + 0x16, 0xb2, 0x95, 0xa3, 0xc4, 0x48, 0xbe, 0xe5, 0x8e, 0x12, 0xe9, 0x16, 0xb1, 0xff, 0x77, 0x29, + 0x65, 0x90, 0xdd, 0x97, 0x53, 0x29, 0x56, 0x45, 0x44, 0x96, 0x5b, 0x61, 0x00, 0xb1, 0xd1, 0x28, + 0x92, 0xb3, 0xaa, 0x22, 0xb2, 0x64, 0x32, 0xc2, 0x69, 0xbe, 0x68, 0x13, 0xaa, 0x1b, 0x41, 0x9c, + 0xc8, 0xed, 0xc7, 0x21, 0x77, 0x3a, 0x97, 0x82, 0x38, 0x61, 0x56, 0x84, 0x7a, 0x6d, 0xda, 0x12, + 0x63, 0xce, 0xc3, 0xfe, 0x2f, 0x56, 0xca, 0x07, 0x7f, 0x83, 0x05, 0x30, 0x6f, 0x11, 0x9f, 0x2e, + 0x6b, 0x33, 0x64, 0xea, 0xc7, 0x32, 0xe9, 0xa0, 0xef, 0xea, 0x55, 0xde, 0xec, 0x16, 0xa5, 0x30, + 0xc1, 0x48, 0x18, 0xd1, 0x55, 0x1f, 0xb3, 0xd2, 0x79, 0xbd, 0xa5, 0x22, 0x36, 0x18, 0x66, 0x6e, + 0xfb, 0x9e, 0x29, 0xc2, 0xf6, 0x17, 0x2d, 0x18, 0x9c, 0x76, 0x1a, 0x9b, 0xc1, 0xfa, 0x3a, 0x7a, + 0x0a, 0x6a, 0xcd, 0x4e, 0x64, 0xa6, 0x18, 0x2b, 0xc7, 0xc1, 0xac, 0x68, 0xc7, 0x0a, 0x83, 0xce, + 0xe1, 0x75, 0xa7, 0x21, 0x33, 0xdc, 0xcb, 0x7c, 0x0e, 0x5f, 0x64, 0x2d, 0x58, 0x40, 0xd0, 0x73, + 0x30, 0xd4, 0x76, 0xb6, 0xe5, 0xc3, 0xd9, 0x03, 0x80, 0x45, 0x0d, 0xc2, 0x26, 0x9e, 0xfd, 0x2f, + 0x2d, 0x18, 0x9b, 0x76, 0x62, 0xb7, 0x31, 0xd5, 0x49, 0x36, 0xa6, 0xdd, 0x64, 0xad, 0xd3, 0xd8, + 0x24, 0x09, 0x2f, 0x6b, 0x40, 0x7b, 0xd9, 0x89, 0xe9, 0x52, 0x52, 0xfb, 0x3a, 0xd5, 0xcb, 0x6b, + 0xa2, 0x1d, 0x2b, 0x0c, 0xf4, 0x06, 0x0c, 0x85, 0x4e, 0x1c, 0xdf, 0x0a, 0xa2, 0x26, 0x26, 0xeb, + 0xc5, 0x14, 0x15, 0x59, 0x21, 0x8d, 0x88, 0x24, 0x98, 0xac, 0x8b, 0xc3, 0x72, 0x4d, 0x1f, 0x9b, + 0xcc, 0xec, 0xcf, 0x5b, 0x70, 0x66, 0x9a, 0x38, 0x11, 0x89, 0x58, 0x0d, 0x12, 0xf5, 0x22, 0x33, + 0x5e, 0xd0, 0x69, 0xa2, 0xd7, 0xa1, 0x96, 0xd0, 0x66, 0xda, 0x2d, 0xab, 0xd8, 0x6e, 0xb1, 0xb3, + 0xee, 0x55, 0x41, 0x1c, 0x2b, 0x36, 0xf6, 0xdf, 0xb2, 0x60, 0x98, 0x1d, 0xd7, 0xcd, 0x92, 0xc4, + 0x71, 0xbd, 0xae, 0x52, 0x5d, 0x56, 0x9f, 0xa5, 0xba, 0xce, 0x41, 0x65, 0x23, 0x68, 0x93, 0xec, + 0x51, 0xf3, 0xa5, 0x80, 0x6e, 0xab, 0x29, 0x04, 0x3d, 0x43, 0x3f, 0xbc, 0xeb, 0x27, 0x0e, 0x5d, + 0x02, 0xd2, 0x1d, 0x3c, 0xca, 0x3f, 0xba, 0x6a, 0xc6, 0x26, 0x8e, 0xfd, 0x2f, 0xea, 0x30, 0x28, + 0xe2, 0x22, 0xfa, 0x2e, 0x6d, 0x21, 0xf7, 0xf7, 0xa5, 0x9e, 0xfb, 0xfb, 0x18, 0x06, 0x1a, 0xac, + 0x66, 0xa0, 0x30, 0x23, 0xaf, 0x14, 0x12, 0x48, 0xc3, 0xcb, 0x10, 0xea, 0x6e, 0xf1, 0xff, 0x58, + 0xb0, 0x42, 0x5f, 0xb0, 0x60, 0xb4, 0x11, 0xf8, 0x3e, 0x69, 0x68, 0x1b, 0xa7, 0x52, 0x44, 0xbc, + 0xc4, 0x4c, 0x9a, 0xa8, 0x3e, 0x2b, 0xca, 0x00, 0x70, 0x96, 0x3d, 0x7a, 0x01, 0x8e, 0xf1, 0x31, + 0xbb, 0x9e, 0xf2, 0x61, 0xeb, 0x0a, 0x4e, 0x26, 0x10, 0xa7, 0x71, 0xd1, 0x04, 0x3f, 0x0b, 0x10, + 0xb5, 0x92, 0x06, 0xb4, 0xab, 0xce, 0xa8, 0x92, 0x64, 0x60, 0xa0, 0x08, 0x50, 0x44, 0xd6, 0x23, + 0x12, 0x6f, 0x88, 0xb8, 0x11, 0x66, 0x5f, 0x0d, 0x1e, 0x2c, 0x8f, 0x1d, 0x77, 0x51, 0xc2, 0x39, + 0xd4, 0xd1, 0xa6, 0xd8, 0x60, 0xd6, 0x8a, 0x90, 0xa1, 0xe2, 0x33, 0xf7, 0xdc, 0x67, 0x8e, 0x43, + 0x35, 0xde, 0x70, 0xa2, 0x26, 0xb3, 0xeb, 0xca, 0x3c, 0x77, 0x6a, 0x85, 0x36, 0x60, 0xde, 0x8e, + 0x66, 0xe1, 0x78, 0xa6, 0xfe, 0x54, 0xcc, 0x2c, 0xb7, 0x9a, 0xce, 0x93, 0xc9, 0x54, 0xae, 0x8a, + 0x71, 0xd7, 0x13, 0xa6, 0xf3, 0x61, 0x68, 0x0f, 0xe7, 0xc3, 0x8e, 0x8a, 0x4e, 0xe4, 0x2e, 0xe4, + 0x97, 0x0a, 0x19, 0x80, 0xbe, 0x42, 0x11, 0x3f, 0x97, 0x09, 0x45, 0xe4, 0x6e, 0xe4, 0xeb, 0xc5, + 0x74, 0x60, 0xff, 0x71, 0x87, 0xf7, 0x33, 0x8e, 0xf0, 0x2f, 0x2d, 0x90, 0xdf, 0x75, 0xc6, 0x69, + 0x6c, 0x10, 0x3a, 0x65, 0xd0, 0x8b, 0x30, 0xa2, 0xb6, 0xd0, 0x33, 0x41, 0xc7, 0xe7, 0x21, 0x84, + 0x65, 0x7d, 0x62, 0x81, 0x53, 0x50, 0x9c, 0xc1, 0x46, 0x93, 0x50, 0xa7, 0xe3, 0xc4, 0x1f, 0xe5, + 0xba, 0x56, 0x6d, 0xd3, 0xa7, 0x96, 0xe7, 0xc5, 0x53, 0x1a, 0x07, 0x05, 0x70, 0xc2, 0x73, 0xe2, + 0x84, 0xf5, 0x80, 0xee, 0xa8, 0x0f, 0x58, 0x45, 0x82, 0x25, 0x63, 0x2c, 0x64, 0x09, 0xe1, 0x6e, + 0xda, 0xf6, 0xb7, 0x2b, 0x70, 0x2c, 0x25, 0x19, 0xf7, 0xa9, 0xa4, 0x9f, 0x82, 0x9a, 0xd4, 0x9b, + 0xd9, 0x72, 0x39, 0x4a, 0xb9, 0x2a, 0x0c, 0xaa, 0xb4, 0xd6, 0xb4, 0x56, 0xcd, 0x1a, 0x15, 0x86, + 0xc2, 0xc5, 0x26, 0x1e, 0x13, 0xca, 0x89, 0x17, 0xcf, 0x78, 0x2e, 0xf1, 0x13, 0xde, 0xcd, 0x62, + 0x84, 0xf2, 0xea, 0xc2, 0x8a, 0x49, 0x54, 0x0b, 0xe5, 0x0c, 0x00, 0x67, 0xd9, 0xa3, 0x4f, 0x5a, + 0x70, 0xcc, 0xb9, 0x15, 0xeb, 0xc2, 0xb6, 0x22, 0xe8, 0xf0, 0x90, 0x4a, 0x2a, 0x55, 0x2b, 0x97, + 0xbb, 0x7c, 0x53, 0x4d, 0x38, 0xcd, 0x14, 0xbd, 0x65, 0x01, 0x22, 0xdb, 0xa4, 0x21, 0xc3, 0x22, + 0x45, 0x5f, 0x06, 0x8a, 0xd8, 0x69, 0x5e, 0xe8, 0xa2, 0xcb, 0xa5, 0x7a, 0x77, 0x3b, 0xce, 0xe9, + 0x83, 0xfd, 0xcd, 0xb2, 0x5a, 0x50, 0x3a, 0x12, 0xd7, 0x31, 0x22, 0x02, 0xad, 0x83, 0x47, 0x04, + 0xea, 0x88, 0x86, 0xee, 0xe4, 0xd4, 0x54, 0x2e, 0x5b, 0xe9, 0x3e, 0xe5, 0xb2, 0xfd, 0xac, 0x95, + 0x2a, 0x0c, 0x35, 0x74, 0xfe, 0xe5, 0x62, 0xa3, 0x80, 0x27, 0x78, 0xb4, 0x45, 0x46, 0xba, 0xa7, + 0x83, 0x6c, 0xa8, 0x34, 0x35, 0xd0, 0xf6, 0x25, 0x0d, 0xff, 0x7d, 0x19, 0x86, 0x0c, 0x4d, 0x9a, + 0x6b, 0x16, 0x59, 0x0f, 0x98, 0x59, 0x54, 0xda, 0x87, 0x59, 0xf4, 0x33, 0x50, 0x6f, 0x48, 0x29, + 0x5f, 0x4c, 0x69, 0xe4, 0xac, 0xee, 0xd0, 0x82, 0x5e, 0x35, 0x61, 0xcd, 0x13, 0xcd, 0xa5, 0x32, + 0xa0, 0x84, 0x86, 0xa8, 0x30, 0x0d, 0x91, 0x97, 0xa2, 0x24, 0x34, 0x45, 0xf7, 0x33, 0xac, 0x7e, + 0x58, 0xe8, 0x8a, 0xf7, 0x92, 0xb1, 0xfa, 0xbc, 0x7e, 0xd8, 0xf2, 0xbc, 0x6c, 0xc6, 0x26, 0x8e, + 0xfd, 0x6d, 0x4b, 0x7d, 0xdc, 0x7b, 0x50, 0xea, 0xe2, 0x66, 0xba, 0xd4, 0xc5, 0x85, 0x42, 0x86, + 0xb9, 0x47, 0x8d, 0x8b, 0xab, 0x30, 0x38, 0x13, 0xb4, 0xdb, 0x8e, 0xdf, 0x44, 0x3f, 0x04, 0x83, + 0x0d, 0xfe, 0x53, 0x38, 0x76, 0xd8, 0xf1, 0xa0, 0x80, 0x62, 0x09, 0x43, 0x8f, 0x40, 0xc5, 0x89, + 0x5a, 0xd2, 0x99, 0xc3, 0x82, 0x73, 0xa6, 0xa2, 0x56, 0x8c, 0x59, 0xab, 0xfd, 0x8f, 0x2b, 0xc0, + 0xce, 0xb4, 0x9d, 0x88, 0x34, 0x57, 0x03, 0x56, 0x9a, 0xf1, 0x48, 0x0f, 0xd5, 0xf4, 0x66, 0xe9, + 0x41, 0x3e, 0x58, 0x33, 0x0e, 0x57, 0xca, 0xf7, 0xf8, 0x70, 0xa5, 0xc7, 0x79, 0x59, 0xe5, 0x01, + 0x3a, 0x2f, 0xb3, 0x3f, 0x6b, 0x01, 0x52, 0x81, 0x10, 0xfa, 0x40, 0x7b, 0x12, 0xea, 0x2a, 0x24, + 0x42, 0x18, 0x56, 0x5a, 0x44, 0x48, 0x00, 0xd6, 0x38, 0x7d, 0xec, 0x90, 0x1f, 0x97, 0xf2, 0xbb, + 0x9c, 0x8e, 0xeb, 0x65, 0x52, 0x5f, 0x88, 0x73, 0xfb, 0xb7, 0x4b, 0xf0, 0x10, 0x57, 0xc9, 0x8b, + 0x8e, 0xef, 0xb4, 0x48, 0x9b, 0xf6, 0xaa, 0xdf, 0x10, 0x85, 0x06, 0xdd, 0x9a, 0xb9, 0x32, 0x4e, + 0xf7, 0xb0, 0x6b, 0x97, 0xaf, 0x39, 0xbe, 0xca, 0xe6, 0x7d, 0x37, 0xc1, 0x8c, 0x38, 0x8a, 0xa1, + 0x26, 0xef, 0x0d, 0x10, 0xb2, 0xb8, 0x20, 0x46, 0x4a, 0x2c, 0x09, 0xbd, 0x49, 0xb0, 0x62, 0x44, + 0x0d, 0x57, 0x2f, 0x68, 0x6c, 0x62, 0x12, 0x06, 0x4c, 0xee, 0x1a, 0x61, 0x92, 0x0b, 0xa2, 0x1d, + 0x2b, 0x0c, 0xfb, 0xb7, 0x2d, 0xc8, 0x6a, 0x24, 0xa3, 0x06, 0x9e, 0x75, 0xd7, 0x1a, 0x78, 0xfb, + 0xa8, 0x22, 0xf7, 0x53, 0x30, 0xe4, 0x24, 0xd4, 0x88, 0xe0, 0xdb, 0xee, 0xf2, 0xc1, 0x8e, 0x35, + 0x16, 0x83, 0xa6, 0xbb, 0xee, 0xb2, 0xed, 0xb6, 0x49, 0xce, 0xfe, 0x1f, 0x15, 0x38, 0xd1, 0x95, + 0xd5, 0x82, 0x9e, 0x87, 0xe1, 0x86, 0x98, 0x1e, 0xa1, 0x74, 0x68, 0xd5, 0xcd, 0xb0, 0x3a, 0x0d, + 0xc3, 0x29, 0xcc, 0x3e, 0x26, 0xe8, 0x3c, 0x9c, 0x8c, 0xe8, 0x46, 0xbf, 0x43, 0xa6, 0xd6, 0x13, + 0x12, 0xad, 0x90, 0x46, 0xe0, 0x37, 0x79, 0xa5, 0xc6, 0xf2, 0xf4, 0xc3, 0xb7, 0x77, 0xc7, 0x4f, + 0xe2, 0x6e, 0x30, 0xce, 0x7b, 0x06, 0x85, 0x70, 0xcc, 0x33, 0x6d, 0x40, 0xb1, 0x01, 0x38, 0x90, + 0xf9, 0xa8, 0x6c, 0x84, 0x54, 0x33, 0x4e, 0x33, 0x48, 0x1b, 0x92, 0xd5, 0xfb, 0x64, 0x48, 0x7e, + 0x42, 0x1b, 0x92, 0xfc, 0xfc, 0xfd, 0x83, 0x05, 0x67, 0x35, 0x1d, 0xb5, 0x25, 0xf9, 0x12, 0xd4, + 0x64, 0x6c, 0x52, 0x5f, 0x31, 0x3d, 0x26, 0x9d, 0x1e, 0x12, 0xed, 0x09, 0xf8, 0xc1, 0x0b, 0x51, + 0x64, 0x0c, 0xe6, 0xd5, 0x20, 0x99, 0xf2, 0xbc, 0xe0, 0x16, 0x55, 0xd2, 0xd7, 0x62, 0x22, 0x3c, + 0x2c, 0xf6, 0x9d, 0x12, 0xe4, 0x6c, 0x56, 0xe8, 0x7a, 0xd4, 0x96, 0x41, 0x6a, 0x3d, 0xee, 0xcf, + 0x3a, 0x40, 0xdb, 0x3c, 0x7e, 0x8b, 0xeb, 0xc0, 0x0f, 0x14, 0xbd, 0xd9, 0xd2, 0x21, 0x5d, 0x2a, + 0x19, 0x43, 0x85, 0x75, 0x9d, 0x07, 0xd0, 0x06, 0x9d, 0x08, 0xb5, 0x57, 0xc7, 0xc3, 0xda, 0xee, + 0xc3, 0x06, 0x16, 0xdd, 0x7b, 0xbb, 0x7e, 0x9c, 0x38, 0x9e, 0x77, 0xc9, 0xf5, 0x13, 0xe1, 0x44, + 0x54, 0xca, 0x7e, 0x5e, 0x83, 0xb0, 0x89, 0x77, 0xf6, 0x3d, 0xc6, 0xf7, 0xdb, 0xcf, 0x77, 0xdf, + 0x80, 0x33, 0x73, 0x6e, 0xa2, 0x12, 0x44, 0xd4, 0x7c, 0xa3, 0xf6, 0x9a, 0x4a, 0x78, 0xb2, 0x7a, + 0x26, 0x3c, 0x19, 0x09, 0x1a, 0xa5, 0x74, 0x3e, 0x49, 0x36, 0x41, 0xc3, 0x7e, 0x1e, 0x4e, 0xcd, + 0xb9, 0xc9, 0x45, 0xd7, 0x23, 0xfb, 0x64, 0x62, 0xff, 0xd6, 0x00, 0x0c, 0x9b, 0xa9, 0x8e, 0xfb, + 0xc9, 0xd9, 0xfa, 0x3c, 0x35, 0xc9, 0xc4, 0xdb, 0xb9, 0xea, 0x70, 0xed, 0xc6, 0xa1, 0xf3, 0x2e, + 0xf3, 0x47, 0xcc, 0xb0, 0xca, 0x34, 0x4f, 0x6c, 0x76, 0x00, 0xdd, 0x82, 0xea, 0x3a, 0x4b, 0x20, + 0x28, 0x17, 0x11, 0x81, 0x90, 0x37, 0xa2, 0x7a, 0x39, 0xf2, 0x14, 0x04, 0xce, 0x8f, 0x6a, 0xd2, + 0x28, 0x9d, 0x95, 0x66, 0x04, 0xad, 0x8a, 0x7c, 0x34, 0x85, 0xd1, 0x4b, 0x25, 0x54, 0x0f, 0xa0, + 0x12, 0x52, 0x02, 0x7a, 0xe0, 0x3e, 0x09, 0x68, 0x96, 0x0c, 0x92, 0x6c, 0x30, 0x3b, 0x4f, 0x44, + 0xe9, 0x0f, 0xb2, 0x41, 0x30, 0x92, 0x41, 0x52, 0x60, 0x9c, 0xc5, 0x47, 0x1f, 0x55, 0x22, 0xbe, + 0x56, 0x84, 0xff, 0xd5, 0x9c, 0xd1, 0x47, 0x2d, 0xdd, 0x3f, 0x5b, 0x82, 0x91, 0x39, 0xbf, 0xb3, + 0x3c, 0xb7, 0xdc, 0x59, 0xf3, 0xdc, 0xc6, 0x15, 0xb2, 0x43, 0x45, 0xf8, 0x26, 0xd9, 0x99, 0x9f, + 0x15, 0x2b, 0x48, 0xcd, 0x99, 0x2b, 0xb4, 0x11, 0x73, 0x18, 0x15, 0x46, 0xeb, 0xae, 0xdf, 0x22, + 0x51, 0x18, 0xb9, 0xc2, 0x35, 0x6a, 0x08, 0xa3, 0x8b, 0x1a, 0x84, 0x4d, 0x3c, 0x4a, 0x3b, 0xb8, + 0xe5, 0x93, 0x28, 0x6b, 0xf0, 0x2e, 0xd1, 0x46, 0xcc, 0x61, 0x14, 0x29, 0x89, 0x3a, 0x71, 0x22, + 0x26, 0xa3, 0x42, 0x5a, 0xa5, 0x8d, 0x98, 0xc3, 0xe8, 0x4a, 0x8f, 0x3b, 0x6b, 0x2c, 0xc0, 0x23, + 0x93, 0x12, 0xb0, 0xc2, 0x9b, 0xb1, 0x84, 0x53, 0xd4, 0x4d, 0xb2, 0x33, 0x4b, 0x77, 0xc7, 0x99, + 0xcc, 0xa0, 0x2b, 0xbc, 0x19, 0x4b, 0x38, 0xab, 0x25, 0x99, 0x1e, 0x8e, 0xef, 0xb9, 0x5a, 0x92, + 0xe9, 0xee, 0xf7, 0xd8, 0x67, 0xff, 0xaa, 0x05, 0xc3, 0x66, 0x58, 0x16, 0x6a, 0x65, 0x6c, 0xe1, + 0xa5, 0xae, 0x52, 0xc4, 0xef, 0xcd, 0xbb, 0x06, 0xae, 0xe5, 0x26, 0x41, 0x18, 0x3f, 0x4d, 0xfc, + 0x96, 0xeb, 0x13, 0x76, 0xda, 0xce, 0xc3, 0xb9, 0x52, 0x31, 0x5f, 0x33, 0x41, 0x93, 0x1c, 0xc0, + 0x98, 0xb6, 0x6f, 0xc0, 0x89, 0xae, 0x74, 0xb0, 0x3e, 0x4c, 0x90, 0x3d, 0x93, 0x71, 0x6d, 0x0c, + 0x43, 0x94, 0xb0, 0xac, 0x67, 0x34, 0x03, 0x27, 0xf8, 0x42, 0xa2, 0x9c, 0x56, 0x1a, 0x1b, 0xa4, + 0xad, 0x52, 0xfc, 0x98, 0x1f, 0xfe, 0x7a, 0x16, 0x88, 0xbb, 0xf1, 0xed, 0xcf, 0x59, 0x70, 0x2c, + 0x95, 0xa1, 0x57, 0x90, 0xb1, 0xc4, 0x56, 0x5a, 0xc0, 0xa2, 0x04, 0x59, 0xa8, 0x74, 0x99, 0x29, + 0x53, 0xbd, 0xd2, 0x34, 0x08, 0x9b, 0x78, 0xf6, 0x17, 0x4b, 0x50, 0x93, 0x91, 0x16, 0x7d, 0x74, + 0xe5, 0x33, 0x16, 0x1c, 0x53, 0x67, 0x1f, 0xcc, 0xa9, 0x56, 0x2a, 0x22, 0x1d, 0x82, 0xf6, 0x40, + 0x6d, 0xcb, 0xfd, 0xf5, 0x40, 0x5b, 0xee, 0xd8, 0x64, 0x86, 0xd3, 0xbc, 0xd1, 0x75, 0x80, 0x78, + 0x27, 0x4e, 0x48, 0xdb, 0x70, 0xef, 0xd9, 0xc6, 0x8a, 0x9b, 0x68, 0x04, 0x11, 0xa1, 0xeb, 0xeb, + 0x6a, 0xd0, 0x24, 0x2b, 0x0a, 0x53, 0x9b, 0x50, 0xba, 0x0d, 0x1b, 0x94, 0xec, 0x7f, 0x58, 0x82, + 0xe3, 0xd9, 0x2e, 0xa1, 0x0f, 0xc2, 0xb0, 0xe4, 0x6e, 0xdc, 0x68, 0x27, 0xc3, 0x4b, 0x86, 0xb1, + 0x01, 0xbb, 0xb3, 0x3b, 0x3e, 0xde, 0x7d, 0xa5, 0xe0, 0x84, 0x89, 0x82, 0x53, 0xc4, 0xf8, 0x01, + 0x94, 0x38, 0x29, 0x9d, 0xde, 0x99, 0x0a, 0x43, 0x71, 0x8a, 0x64, 0x1c, 0x40, 0x99, 0x50, 0x9c, + 0xc1, 0x46, 0xcb, 0x70, 0xca, 0x68, 0xb9, 0x4a, 0xdc, 0xd6, 0xc6, 0x5a, 0x10, 0xc9, 0x1d, 0xd8, + 0x23, 0x3a, 0x00, 0xac, 0x1b, 0x07, 0xe7, 0x3e, 0x49, 0xb5, 0x7d, 0xc3, 0x09, 0x9d, 0x86, 0x9b, + 0xec, 0x08, 0x7f, 0xa5, 0x92, 0x4d, 0x33, 0xa2, 0x1d, 0x2b, 0x0c, 0x7b, 0x11, 0x2a, 0x7d, 0xce, + 0xa0, 0xbe, 0x2c, 0xff, 0x97, 0xa0, 0x46, 0xc9, 0x49, 0xf3, 0xae, 0x08, 0x92, 0x01, 0xd4, 0xe4, + 0x4d, 0x33, 0xc8, 0x86, 0xb2, 0xeb, 0xc8, 0x33, 0x3e, 0xf5, 0x5a, 0xf3, 0x71, 0xdc, 0x61, 0x9b, + 0x69, 0x0a, 0x44, 0x8f, 0x43, 0x99, 0x6c, 0x87, 0xd9, 0xc3, 0xbc, 0x0b, 0xdb, 0xa1, 0x1b, 0x91, + 0x98, 0x22, 0x91, 0xed, 0x10, 0x9d, 0x85, 0x92, 0xdb, 0x14, 0x4a, 0x0a, 0x04, 0x4e, 0x69, 0x7e, + 0x16, 0x97, 0xdc, 0xa6, 0xbd, 0x0d, 0x75, 0x75, 0xb5, 0x0d, 0xda, 0x94, 0xb2, 0xdb, 0x2a, 0x22, + 0x34, 0x4a, 0xd2, 0xed, 0x21, 0xb5, 0x3b, 0x00, 0x3a, 0x55, 0xb1, 0x28, 0xf9, 0x72, 0x0e, 0x2a, + 0x8d, 0x40, 0xa4, 0x51, 0xd7, 0x34, 0x19, 0x26, 0xb4, 0x19, 0xc4, 0xbe, 0x01, 0x23, 0x57, 0xfc, + 0xe0, 0x16, 0x2b, 0xac, 0xcf, 0xea, 0xc8, 0x51, 0xc2, 0xeb, 0xf4, 0x47, 0xd6, 0x44, 0x60, 0x50, + 0xcc, 0x61, 0xaa, 0xc2, 0x55, 0xa9, 0x57, 0x85, 0x2b, 0xfb, 0x63, 0x16, 0x0c, 0xab, 0x9c, 0xa5, + 0xb9, 0xad, 0x4d, 0x4a, 0xb7, 0x15, 0x05, 0x9d, 0x30, 0x4b, 0x97, 0x5d, 0x3e, 0x85, 0x39, 0xcc, + 0x4c, 0x06, 0x2c, 0xed, 0x91, 0x0c, 0x78, 0x0e, 0x2a, 0x9b, 0xae, 0xdf, 0xcc, 0xde, 0xa6, 0x72, + 0xc5, 0xf5, 0x9b, 0x98, 0x41, 0xec, 0x6f, 0x5a, 0x70, 0x5c, 0x75, 0x41, 0x2a, 0x84, 0xe7, 0x61, + 0x78, 0xad, 0xe3, 0x7a, 0x4d, 0x59, 0x20, 0x2f, 0xe3, 0x51, 0x99, 0x36, 0x60, 0x38, 0x85, 0x49, + 0xf7, 0x75, 0x6b, 0xae, 0xef, 0x44, 0x3b, 0xcb, 0x5a, 0x03, 0x29, 0xa1, 0x34, 0xad, 0x20, 0xd8, + 0xc0, 0xa2, 0xdc, 0x62, 0x92, 0xe8, 0x20, 0x49, 0xfe, 0x21, 0x14, 0xb7, 0x15, 0x03, 0x86, 0x53, + 0x98, 0xf6, 0x9b, 0x65, 0x18, 0x49, 0xe7, 0x7c, 0xf5, 0xb1, 0x31, 0x7b, 0x1c, 0xaa, 0x2c, 0x0d, + 0x2c, 0x3b, 0x29, 0x78, 0x35, 0x3a, 0x0e, 0x43, 0x31, 0x0c, 0xf0, 0x02, 0x14, 0xc5, 0xdc, 0x61, + 0xa4, 0x3a, 0xa9, 0x3c, 0x38, 0x2c, 0x62, 0x4d, 0xd4, 0xbc, 0x10, 0xac, 0xd0, 0x27, 0x2d, 0x18, + 0x0c, 0x42, 0xb3, 0xa6, 0xd2, 0x07, 0x8a, 0xcc, 0x87, 0x13, 0xe9, 0x38, 0xc2, 0x96, 0x56, 0x93, + 0x46, 0x7e, 0x48, 0xc9, 0xfa, 0xec, 0x8f, 0xc3, 0xb0, 0x89, 0xb9, 0x97, 0x39, 0x5d, 0x33, 0xcd, + 0xe9, 0xcf, 0x98, 0xd3, 0x49, 0x64, 0xfc, 0xf5, 0xb1, 0x50, 0xaf, 0x41, 0xb5, 0xa1, 0x42, 0x0c, + 0x0e, 0x54, 0x90, 0x55, 0x55, 0x84, 0x60, 0xc7, 0x4c, 0x9c, 0x9a, 0xfd, 0x6d, 0xcb, 0x98, 0x1f, + 0x98, 0xc4, 0xf3, 0x4d, 0x14, 0x41, 0xb9, 0xb5, 0xb5, 0x29, 0x8c, 0xd8, 0xcb, 0x05, 0x0d, 0xef, + 0xdc, 0xd6, 0xa6, 0x9e, 0xaf, 0x66, 0x2b, 0xa6, 0xcc, 0xfa, 0x70, 0x33, 0xa6, 0x12, 0x43, 0xcb, + 0x7b, 0x27, 0x86, 0xda, 0x6f, 0x95, 0xe0, 0x44, 0xd7, 0xa4, 0x42, 0x6f, 0x40, 0x35, 0xa2, 0x6f, + 0x29, 0x5e, 0x6f, 0xa1, 0xb0, 0x54, 0xce, 0x78, 0xbe, 0xa9, 0x35, 0x76, 0xba, 0x1d, 0x73, 0x96, + 0xe8, 0x32, 0x20, 0x1d, 0x08, 0xa3, 0x7c, 0x9c, 0xfc, 0x95, 0xcf, 0x8a, 0x47, 0xd1, 0x54, 0x17, + 0x06, 0xce, 0x79, 0x0a, 0xbd, 0x90, 0x75, 0x95, 0x96, 0xd3, 0x27, 0xa3, 0x77, 0xf3, 0x7a, 0xda, + 0xff, 0xbc, 0x04, 0xc7, 0x52, 0x25, 0xae, 0x90, 0x07, 0x35, 0xe2, 0xb1, 0x63, 0x03, 0xa9, 0xa6, + 0x0e, 0x5b, 0xb0, 0x5a, 0xa9, 0xd6, 0x0b, 0x82, 0x2e, 0x56, 0x1c, 0x1e, 0x8c, 0xe3, 0xfb, 0xe7, + 0x61, 0x58, 0x76, 0xe8, 0x03, 0x4e, 0xdb, 0x13, 0x03, 0xa8, 0xe6, 0xe8, 0x05, 0x03, 0x86, 0x53, + 0x98, 0xf6, 0xef, 0x94, 0x61, 0x8c, 0x9f, 0xb3, 0x34, 0xd5, 0xcc, 0x5b, 0x94, 0x3b, 0xb5, 0xbf, + 0xae, 0x0b, 0xd1, 0xf1, 0x81, 0x5c, 0x3b, 0xec, 0xfd, 0x10, 0xf9, 0x8c, 0xfa, 0x8a, 0xfd, 0xfa, + 0x4a, 0x26, 0xf6, 0x8b, 0x1b, 0xec, 0xad, 0x23, 0xea, 0xd1, 0xf7, 0x56, 0x30, 0xd8, 0xdf, 0x2b, + 0xc1, 0x68, 0xe6, 0xf2, 0x0d, 0xf4, 0x66, 0xba, 0x5e, 0xb3, 0x55, 0x84, 0x37, 0xfe, 0xae, 0xf7, + 0x31, 0xec, 0xaf, 0x6a, 0xf3, 0x7d, 0x5a, 0x2a, 0xf6, 0x1f, 0x95, 0x60, 0x24, 0x7d, 0x6b, 0xc8, + 0x03, 0x38, 0x52, 0xef, 0x86, 0x3a, 0x2b, 0x8c, 0xcf, 0x2e, 0x53, 0xe5, 0xce, 0x7c, 0x5e, 0x83, + 0x5c, 0x36, 0x62, 0x0d, 0x7f, 0x20, 0x8a, 0x61, 0xdb, 0x7f, 0xdf, 0x82, 0xd3, 0xfc, 0x2d, 0xb3, + 0xf3, 0xf0, 0x17, 0xf2, 0x46, 0xf7, 0x95, 0x62, 0x3b, 0x98, 0x29, 0xa0, 0xb8, 0xd7, 0xf8, 0xb2, + 0x4b, 0x1c, 0x45, 0x6f, 0xd3, 0x53, 0xe1, 0x01, 0xec, 0xec, 0xbe, 0x26, 0x83, 0xfd, 0x47, 0x65, + 0xd0, 0xf7, 0x56, 0x22, 0x57, 0x64, 0x51, 0x16, 0x52, 0x48, 0x72, 0x65, 0xc7, 0x6f, 0xe8, 0x1b, + 0x32, 0x6b, 0x99, 0x24, 0xca, 0x9f, 0xb7, 0x60, 0xc8, 0xf5, 0xdd, 0xc4, 0x75, 0xd8, 0x06, 0xbc, + 0x98, 0x3b, 0xf5, 0x14, 0xbb, 0x79, 0x4e, 0x39, 0x88, 0xcc, 0x13, 0x20, 0xc5, 0x0c, 0x9b, 0x9c, + 0xd1, 0x87, 0x44, 0x78, 0x76, 0xb9, 0xb0, 0xfc, 0xdf, 0x5a, 0x26, 0x26, 0x3b, 0xa4, 0x86, 0x57, + 0x12, 0x15, 0x94, 0x36, 0x8f, 0x29, 0x29, 0x55, 0x93, 0x58, 0xdf, 0x20, 0x4e, 0x9b, 0x31, 0x67, + 0x64, 0xc7, 0x80, 0xba, 0xc7, 0x62, 0x9f, 0xa1, 0xaf, 0x93, 0x50, 0x77, 0x3a, 0x49, 0xd0, 0xa6, + 0xc3, 0x24, 0x0e, 0xa9, 0x74, 0x70, 0xaf, 0x04, 0x60, 0x8d, 0x63, 0xbf, 0x59, 0x85, 0x4c, 0x5a, + 0x23, 0xda, 0x36, 0xef, 0x5c, 0xb5, 0x8a, 0xbd, 0x73, 0x55, 0x75, 0x26, 0xef, 0xde, 0x55, 0xd4, + 0x82, 0x6a, 0xb8, 0xe1, 0xc4, 0xd2, 0xac, 0x7e, 0x49, 0xed, 0xe3, 0x68, 0xe3, 0x9d, 0xdd, 0xf1, + 0x9f, 0xec, 0xcf, 0x5f, 0x4b, 0xe7, 0xea, 0x24, 0x2f, 0x90, 0xa2, 0x59, 0x33, 0x1a, 0x98, 0xd3, + 0xdf, 0xcf, 0xad, 0x82, 0x1f, 0x17, 0x37, 0x00, 0x60, 0x12, 0x77, 0xbc, 0x44, 0xcc, 0x86, 0x97, + 0x0a, 0x5c, 0x65, 0x9c, 0xb0, 0x4e, 0xc8, 0xe7, 0xff, 0xb1, 0xc1, 0x14, 0x7d, 0x10, 0xea, 0x71, + 0xe2, 0x44, 0xc9, 0x01, 0x53, 0x68, 0xd5, 0xa0, 0xaf, 0x48, 0x22, 0x58, 0xd3, 0x43, 0x2f, 0xb3, + 0xba, 0xba, 0x6e, 0xbc, 0x71, 0xc0, 0xac, 0x0a, 0x59, 0x83, 0x57, 0x50, 0xc0, 0x06, 0x35, 0x74, + 0x1e, 0x80, 0xcd, 0x6d, 0x1e, 0x4a, 0x58, 0x63, 0xfe, 0x29, 0x25, 0x0a, 0xb1, 0x82, 0x60, 0x03, + 0xcb, 0xfe, 0x11, 0x48, 0x57, 0x94, 0x40, 0xe3, 0xb2, 0x80, 0x05, 0xf7, 0x5f, 0xb3, 0xec, 0x88, + 0x54, 0xad, 0x89, 0xdf, 0xb0, 0xc0, 0x2c, 0x7b, 0x81, 0x5e, 0xe7, 0xf5, 0x35, 0xac, 0x22, 0xce, + 0x1c, 0x0d, 0xba, 0x13, 0x8b, 0x4e, 0x98, 0x39, 0xfc, 0x96, 0x45, 0x36, 0xce, 0xbe, 0x07, 0x6a, + 0x12, 0xba, 0x2f, 0xa3, 0xee, 0xa3, 0x70, 0x32, 0x7b, 0x23, 0xbd, 0x38, 0xaf, 0xda, 0xdb, 0x69, + 0x24, 0x3d, 0x41, 0xa5, 0x5e, 0x9e, 0xa0, 0x3e, 0x6e, 0xde, 0xfd, 0x4d, 0x0b, 0xce, 0xed, 0x75, + 0x71, 0x3e, 0x7a, 0x04, 0x2a, 0xb7, 0x9c, 0x48, 0x16, 0x3c, 0x67, 0x82, 0xf2, 0x86, 0x13, 0xf9, + 0x98, 0xb5, 0xa2, 0x1d, 0x18, 0xe0, 0xf1, 0x66, 0xc2, 0x5a, 0x7f, 0xa9, 0xd8, 0x6b, 0xfc, 0xaf, + 0x10, 0x63, 0xbb, 0xc0, 0x63, 0xdd, 0xb0, 0x60, 0x68, 0x7f, 0xc7, 0x02, 0xb4, 0xb4, 0x45, 0xa2, + 0xc8, 0x6d, 0x1a, 0x11, 0x72, 0xec, 0x26, 0x1d, 0xe3, 0xc6, 0x1c, 0x33, 0x89, 0x36, 0x73, 0x93, + 0x8e, 0xf1, 0x2f, 0xff, 0x26, 0x9d, 0xd2, 0xfe, 0x6e, 0xd2, 0x41, 0x4b, 0x70, 0xba, 0xcd, 0xb7, + 0x1b, 0xfc, 0x76, 0x0a, 0xbe, 0xf7, 0x50, 0x29, 0x6b, 0x67, 0x6e, 0xef, 0x8e, 0x9f, 0x5e, 0xcc, + 0x43, 0xc0, 0xf9, 0xcf, 0xd9, 0xef, 0x01, 0xc4, 0x03, 0xe3, 0x66, 0xf2, 0xa2, 0x9c, 0x7a, 0xba, + 0x5f, 0xec, 0x2f, 0x57, 0x61, 0x34, 0x53, 0x0e, 0x97, 0x6e, 0xf5, 0xba, 0xc3, 0xaa, 0x0e, 0xad, + 0xbf, 0xbb, 0xbb, 0xd7, 0x57, 0xa0, 0x96, 0x0f, 0x55, 0xd7, 0x0f, 0x3b, 0x49, 0x31, 0x59, 0xaa, + 0xbc, 0x13, 0xf3, 0x94, 0xa0, 0xe1, 0x68, 0xa6, 0x7f, 0x31, 0x67, 0x53, 0x64, 0xd8, 0x57, 0xca, + 0x18, 0xaf, 0xdc, 0x27, 0x77, 0xc0, 0xc7, 0x75, 0x10, 0x56, 0xb5, 0x08, 0xc7, 0x62, 0x66, 0xb2, + 0x1c, 0xf5, 0x21, 0xfd, 0xaf, 0x97, 0x60, 0xc8, 0xf8, 0x68, 0xe8, 0x57, 0xd2, 0x45, 0xa1, 0xac, + 0xe2, 0x5e, 0x89, 0xd1, 0x9f, 0xd0, 0x65, 0x9f, 0xf8, 0x2b, 0x3d, 0xd1, 0x5d, 0x0f, 0xea, 0xce, + 0xee, 0xf8, 0xf1, 0x4c, 0xc5, 0xa7, 0x54, 0x8d, 0xa8, 0xb3, 0x1f, 0x81, 0xd1, 0x0c, 0x99, 0x9c, + 0x57, 0x5e, 0x35, 0x5f, 0xf9, 0xd0, 0x6e, 0x29, 0x73, 0xc8, 0xbe, 0x41, 0x87, 0x4c, 0x24, 0xea, + 0x05, 0x1e, 0xe9, 0xc3, 0x07, 0x9b, 0xc9, 0xc7, 0x2d, 0xf5, 0x99, 0x8f, 0xfb, 0x24, 0xd4, 0xc2, + 0xc0, 0x73, 0x1b, 0xae, 0xaa, 0xbc, 0xc8, 0x32, 0x80, 0x97, 0x45, 0x1b, 0x56, 0x50, 0x74, 0x0b, + 0xea, 0x37, 0x6f, 0x25, 0xfc, 0xdc, 0x48, 0xf8, 0xb7, 0x8b, 0x3a, 0x2e, 0x52, 0x46, 0x8b, 0x3a, + 0x98, 0xc2, 0x9a, 0x17, 0xb2, 0x61, 0x80, 0x29, 0x41, 0x99, 0x5c, 0xc0, 0x7c, 0xef, 0x4c, 0x3b, + 0xc6, 0x58, 0x40, 0xec, 0xaf, 0xd5, 0xe1, 0x54, 0x5e, 0x4d, 0x72, 0xf4, 0x61, 0x18, 0xe0, 0x7d, + 0x2c, 0xe6, 0xda, 0x8b, 0x3c, 0x1e, 0x73, 0x8c, 0xa0, 0xe8, 0x16, 0xfb, 0x8d, 0x05, 0x4f, 0xc1, + 0xdd, 0x73, 0xd6, 0xc4, 0x0c, 0x39, 0x1a, 0xee, 0x0b, 0x8e, 0xe6, 0xbe, 0xe0, 0x70, 0xee, 0x9e, + 0xb3, 0x86, 0xb6, 0xa1, 0xda, 0x72, 0x13, 0xe2, 0x08, 0x27, 0xc2, 0x8d, 0x23, 0x61, 0x4e, 0x1c, + 0x6e, 0xa5, 0xb1, 0x9f, 0x98, 0x33, 0x44, 0x5f, 0xb5, 0x60, 0x74, 0x2d, 0x9d, 0x7c, 0x2f, 0x84, + 0xa7, 0x73, 0x04, 0x75, 0xe7, 0xd3, 0x8c, 0xf8, 0x55, 0x52, 0x99, 0x46, 0x9c, 0xed, 0x0e, 0xfa, + 0x84, 0x05, 0x83, 0xeb, 0xae, 0x67, 0x94, 0xfe, 0x3d, 0x82, 0x8f, 0x73, 0x91, 0x31, 0xd0, 0x3b, + 0x0e, 0xfe, 0x3f, 0xc6, 0x92, 0x73, 0x2f, 0x4d, 0x35, 0x70, 0x58, 0x4d, 0x35, 0x78, 0x9f, 0x34, + 0xd5, 0xa7, 0x2d, 0xa8, 0xab, 0x91, 0x16, 0x09, 0xd5, 0x1f, 0x3c, 0xc2, 0x4f, 0xce, 0x3d, 0x27, + 0xea, 0x2f, 0xd6, 0xcc, 0xd1, 0x17, 0x2c, 0x18, 0x72, 0xde, 0xe8, 0x44, 0xa4, 0x49, 0xb6, 0x82, + 0x30, 0x16, 0xf7, 0x50, 0xbe, 0x52, 0x7c, 0x67, 0xa6, 0x28, 0x93, 0x59, 0xb2, 0xb5, 0x14, 0xc6, + 0x22, 0xf1, 0x49, 0x37, 0x60, 0xb3, 0x0b, 0xf6, 0x6e, 0x09, 0xc6, 0xf7, 0xa0, 0x80, 0x9e, 0x87, + 0xe1, 0x20, 0x6a, 0x39, 0xbe, 0xfb, 0x86, 0x59, 0x4d, 0x43, 0x59, 0x59, 0x4b, 0x06, 0x0c, 0xa7, + 0x30, 0xcd, 0x94, 0xef, 0xd2, 0x1e, 0x29, 0xdf, 0xe7, 0xa0, 0x12, 0x91, 0x30, 0xc8, 0x6e, 0x16, + 0x58, 0xd2, 0x01, 0x83, 0xa0, 0x47, 0xa1, 0xec, 0x84, 0xae, 0x08, 0x61, 0x53, 0x7b, 0xa0, 0xa9, + 0xe5, 0x79, 0x4c, 0xdb, 0x53, 0x15, 0x28, 0xaa, 0xf7, 0xa4, 0x02, 0x05, 0x55, 0x03, 0xe2, 0xec, + 0x62, 0x40, 0xab, 0x81, 0xf4, 0x99, 0x82, 0xfd, 0x56, 0x19, 0x1e, 0xbd, 0xeb, 0x7c, 0xd1, 0x11, + 0x7c, 0xd6, 0x5d, 0x22, 0xf8, 0xe4, 0xf0, 0x94, 0xf6, 0x1a, 0x9e, 0x72, 0x8f, 0xe1, 0xf9, 0x04, + 0x5d, 0x06, 0xb2, 0x0a, 0x49, 0x31, 0x37, 0x09, 0xf6, 0x2a, 0x6a, 0x22, 0x56, 0x80, 0x84, 0x62, + 0xcd, 0x97, 0xee, 0x01, 0x52, 0xe9, 0xce, 0xd5, 0x22, 0xd4, 0x40, 0xcf, 0xaa, 0x24, 0x7c, 0xee, + 0xf7, 0xca, 0xa1, 0xb6, 0x7f, 0xb1, 0x04, 0x8f, 0xf7, 0x21, 0xbd, 0xcd, 0x59, 0x6c, 0xf5, 0x39, + 0x8b, 0xbf, 0xb7, 0x3f, 0x93, 0xfd, 0x37, 0x2c, 0x38, 0xdb, 0x5b, 0x79, 0xa0, 0x67, 0x60, 0x68, + 0x2d, 0x72, 0xfc, 0xc6, 0x06, 0xbb, 0x1d, 0x55, 0x0e, 0x0a, 0x1b, 0x6b, 0xdd, 0x8c, 0x4d, 0x1c, + 0xba, 0xbd, 0xe5, 0x31, 0x09, 0x06, 0x86, 0x4c, 0x4f, 0xa5, 0xdb, 0xdb, 0xd5, 0x2c, 0x10, 0x77, + 0xe3, 0xdb, 0x7f, 0x51, 0xca, 0xef, 0x16, 0x37, 0x32, 0xf6, 0xf3, 0x9d, 0xc4, 0x57, 0x28, 0xf5, + 0x21, 0x4b, 0xca, 0xf7, 0x5a, 0x96, 0x54, 0x7a, 0xc9, 0x12, 0x34, 0x0b, 0xc7, 0x8d, 0xeb, 0x6b, + 0x78, 0xca, 0x31, 0x0f, 0xd5, 0x55, 0x75, 0x38, 0x96, 0x33, 0x70, 0xdc, 0xf5, 0x04, 0x7a, 0x0a, + 0x6a, 0xae, 0x1f, 0x93, 0x46, 0x27, 0xe2, 0x21, 0xe2, 0x46, 0x9a, 0xd7, 0xbc, 0x68, 0xc7, 0x0a, + 0xc3, 0xfe, 0xd5, 0x12, 0x9c, 0xe9, 0x69, 0x67, 0xdd, 0x23, 0xd9, 0x65, 0x7e, 0x8e, 0xca, 0xbd, + 0xf9, 0x1c, 0xe6, 0x20, 0x55, 0xf7, 0x1c, 0xa4, 0x3f, 0xee, 0x3d, 0x31, 0xa9, 0xcd, 0xfd, 0x7d, + 0x3b, 0x4a, 0x2f, 0xc0, 0x31, 0x27, 0x0c, 0x39, 0x1e, 0x8b, 0xf4, 0xcc, 0xd4, 0xe1, 0x99, 0x32, + 0x81, 0x38, 0x8d, 0xdb, 0x97, 0xf6, 0xfc, 0x53, 0x0b, 0xea, 0x98, 0xac, 0x73, 0xe9, 0x80, 0x6e, + 0x8a, 0x21, 0xb2, 0x8a, 0xa8, 0xd8, 0x49, 0x07, 0x36, 0x76, 0x59, 0x25, 0xcb, 0xbc, 0xc1, 0xee, + 0xbe, 0x5e, 0xa8, 0xb4, 0xaf, 0xeb, 0x85, 0xd4, 0x05, 0x33, 0xe5, 0xde, 0x17, 0xcc, 0xd8, 0xdf, + 0x18, 0xa4, 0xaf, 0x17, 0x06, 0x33, 0x11, 0x69, 0xc6, 0xf4, 0xfb, 0x76, 0x22, 0x4f, 0x4c, 0x12, + 0xf5, 0x7d, 0xaf, 0xe1, 0x05, 0x4c, 0xdb, 0x53, 0x47, 0x31, 0xa5, 0x7d, 0x55, 0x21, 0x29, 0xef, + 0x59, 0x85, 0xe4, 0x05, 0x38, 0x16, 0xc7, 0x1b, 0xcb, 0x91, 0xbb, 0xe5, 0x24, 0xe4, 0x0a, 0xd9, + 0x11, 0x56, 0x96, 0xae, 0x1c, 0xb0, 0x72, 0x49, 0x03, 0x71, 0x1a, 0x17, 0xcd, 0xc1, 0x09, 0x5d, + 0x0b, 0x84, 0x44, 0x09, 0xcb, 0x0b, 0xe0, 0x33, 0x41, 0xa5, 0x09, 0xeb, 0xea, 0x21, 0x02, 0x01, + 0x77, 0x3f, 0x43, 0xe5, 0x5b, 0xaa, 0x91, 0x76, 0x64, 0x20, 0x2d, 0xdf, 0x52, 0x74, 0x68, 0x5f, + 0xba, 0x9e, 0x40, 0x8b, 0x70, 0x92, 0x4f, 0x8c, 0xa9, 0x30, 0x34, 0xde, 0x68, 0x30, 0x5d, 0x29, + 0x71, 0xae, 0x1b, 0x05, 0xe7, 0x3d, 0x87, 0x9e, 0x83, 0x21, 0xd5, 0x3c, 0x3f, 0x2b, 0x4e, 0x11, + 0x94, 0x17, 0x43, 0x91, 0x99, 0x6f, 0x62, 0x13, 0x0f, 0x7d, 0x00, 0x1e, 0xd6, 0x7f, 0x79, 0xf2, + 0x18, 0x3f, 0x5a, 0x9b, 0x15, 0x65, 0x96, 0xd4, 0x75, 0x26, 0x73, 0xb9, 0x68, 0x4d, 0xdc, 0xeb, + 0x79, 0xb4, 0x06, 0x67, 0x15, 0xe8, 0x82, 0x9f, 0xb0, 0x4c, 0x90, 0x98, 0x4c, 0x3b, 0x31, 0xb9, + 0x16, 0x79, 0xe2, 0x16, 0x00, 0x75, 0xe3, 0xe5, 0x9c, 0x9b, 0x5c, 0xca, 0xc3, 0xc4, 0x0b, 0xf8, + 0x2e, 0x54, 0xd0, 0x24, 0xd4, 0x89, 0xef, 0xac, 0x79, 0x64, 0x69, 0x66, 0x5e, 0xdc, 0x0b, 0xa0, + 0x23, 0x7b, 0x25, 0x00, 0x6b, 0x1c, 0x15, 0x9b, 0x3a, 0xdc, 0xf3, 0xf6, 0xd5, 0x65, 0x38, 0xd5, + 0x6a, 0x84, 0xd4, 0xf6, 0x70, 0x1b, 0x64, 0xaa, 0xc1, 0x02, 0xea, 0xe8, 0x87, 0xe1, 0x25, 0x2c, + 0x55, 0xe0, 0xf5, 0xdc, 0xcc, 0x72, 0x17, 0x0e, 0xce, 0x7d, 0x92, 0x05, 0x5e, 0x46, 0xc1, 0xf6, + 0xce, 0xd8, 0xc9, 0x4c, 0xe0, 0x25, 0x6d, 0xc4, 0x1c, 0x86, 0x2e, 0x03, 0x62, 0x51, 0xfc, 0x97, + 0x92, 0x24, 0x54, 0xc6, 0xce, 0xd8, 0x29, 0xf6, 0x4a, 0x2a, 0x8c, 0xec, 0x62, 0x17, 0x06, 0xce, + 0x79, 0xca, 0xfe, 0x0f, 0x16, 0x1c, 0x53, 0xeb, 0xf5, 0x1e, 0xe4, 0xb1, 0x78, 0xe9, 0x3c, 0x96, + 0xb9, 0xc3, 0x4b, 0x3c, 0xd6, 0xf3, 0x1e, 0xc1, 0xd0, 0x9f, 0x1a, 0x02, 0xd0, 0x52, 0x51, 0x29, + 0x24, 0xab, 0xa7, 0x42, 0x7a, 0x60, 0x25, 0x52, 0x5e, 0x6d, 0x96, 0xea, 0xfd, 0xad, 0xcd, 0xb2, + 0x02, 0xa7, 0xa5, 0xb9, 0xc0, 0xcf, 0x8a, 0x2e, 0x05, 0xb1, 0x12, 0x70, 0xb5, 0xe9, 0x47, 0x05, + 0xa1, 0xd3, 0xf3, 0x79, 0x48, 0x38, 0xff, 0xd9, 0x94, 0x95, 0x32, 0xb8, 0x97, 0x95, 0xa2, 0xd7, + 0xf4, 0xc2, 0xba, 0xbc, 0xb7, 0x24, 0xb3, 0xa6, 0x17, 0x2e, 0xae, 0x60, 0x8d, 0x93, 0x2f, 0xd8, + 0xeb, 0x05, 0x09, 0x76, 0xd8, 0xb7, 0x60, 0x97, 0x22, 0x66, 0xa8, 0xa7, 0x88, 0x91, 0x3e, 0xe9, + 0xe1, 0x9e, 0x3e, 0xe9, 0x17, 0x61, 0xc4, 0xf5, 0x37, 0x48, 0xe4, 0x26, 0xa4, 0xc9, 0xd6, 0x02, + 0x13, 0x3f, 0xc6, 0x85, 0x2b, 0xf3, 0x29, 0x28, 0xce, 0x60, 0xa7, 0xe5, 0xe2, 0x48, 0x1f, 0x72, + 0xb1, 0x87, 0x36, 0x1a, 0x2d, 0x46, 0x1b, 0x1d, 0x3f, 0xbc, 0x36, 0x3a, 0x71, 0xa4, 0xda, 0x08, + 0x15, 0xa2, 0x8d, 0xfa, 0x12, 0xf4, 0xc6, 0xf6, 0xef, 0xd4, 0x1e, 0xdb, 0xbf, 0x5e, 0xaa, 0xe8, + 0xf4, 0x81, 0x55, 0x51, 0xbe, 0x96, 0x79, 0xe8, 0x40, 0x5a, 0xe6, 0xd3, 0x25, 0x38, 0xad, 0xe5, + 0x30, 0x9d, 0xfd, 0xee, 0x3a, 0x95, 0x44, 0xec, 0xea, 0x2b, 0x7e, 0x6e, 0x63, 0xa4, 0x55, 0xe9, + 0x0c, 0x2d, 0x05, 0xc1, 0x06, 0x16, 0xcb, 0x4e, 0x22, 0x11, 0x2b, 0xd4, 0x9b, 0x15, 0xd2, 0x33, + 0xa2, 0x1d, 0x2b, 0x0c, 0x3a, 0xbf, 0xe8, 0x6f, 0x91, 0xf1, 0x99, 0x2d, 0x47, 0x37, 0xa3, 0x41, + 0xd8, 0xc4, 0x43, 0x4f, 0x72, 0x26, 0x4c, 0x40, 0x50, 0x41, 0x3d, 0x2c, 0xee, 0xe4, 0x95, 0x32, + 0x41, 0x41, 0x65, 0x77, 0x58, 0x1a, 0x5a, 0xb5, 0xbb, 0x3b, 0x2c, 0x04, 0x4a, 0x61, 0xd8, 0xff, + 0xd3, 0x82, 0x33, 0xb9, 0x43, 0x71, 0x0f, 0x94, 0xef, 0x76, 0x5a, 0xf9, 0xae, 0x14, 0xb5, 0xdd, + 0x30, 0xde, 0xa2, 0x87, 0x22, 0xfe, 0x77, 0x16, 0x8c, 0x68, 0xfc, 0x7b, 0xf0, 0xaa, 0x6e, 0xfa, + 0x55, 0x8b, 0xdb, 0x59, 0xd5, 0xbb, 0xde, 0xed, 0x77, 0x4a, 0xa0, 0x4a, 0x44, 0x4e, 0x35, 0x64, + 0x01, 0xde, 0x3d, 0x4e, 0x12, 0x77, 0x60, 0x80, 0x1d, 0x84, 0xc6, 0xc5, 0x04, 0x79, 0xa4, 0xf9, + 0xb3, 0x43, 0x55, 0x7d, 0xc8, 0xcc, 0xfe, 0xc6, 0x58, 0x30, 0x64, 0x65, 0xa4, 0xdd, 0x98, 0x4a, + 0xf3, 0xa6, 0xc8, 0x23, 0xd2, 0x65, 0xa4, 0x45, 0x3b, 0x56, 0x18, 0x54, 0x3d, 0xb8, 0x8d, 0xc0, + 0x9f, 0xf1, 0x9c, 0x58, 0xde, 0xf7, 0xa8, 0xd4, 0xc3, 0xbc, 0x04, 0x60, 0x8d, 0xc3, 0xce, 0x48, + 0xdd, 0x38, 0xf4, 0x9c, 0x1d, 0x63, 0xff, 0x6c, 0x54, 0x36, 0x50, 0x20, 0x6c, 0xe2, 0xd9, 0x6d, + 0x18, 0x4b, 0xbf, 0xc4, 0x2c, 0x59, 0x67, 0x01, 0x8a, 0x7d, 0x0d, 0xe7, 0x24, 0xd4, 0x1d, 0xf6, + 0xd4, 0x42, 0xc7, 0xc9, 0x5e, 0x17, 0x3f, 0x25, 0x01, 0x58, 0xe3, 0xd8, 0xbf, 0x66, 0xc1, 0xc9, + 0x9c, 0x41, 0x2b, 0x30, 0x61, 0x2e, 0xd1, 0xd2, 0x26, 0x4f, 0xb1, 0xff, 0x30, 0x0c, 0x36, 0xc9, + 0xba, 0x23, 0x43, 0xe0, 0x0c, 0xd9, 0x3e, 0xcb, 0x9b, 0xb1, 0x84, 0xdb, 0xff, 0xdd, 0x82, 0xd1, + 0x74, 0x5f, 0x63, 0x96, 0x4a, 0xc2, 0x87, 0xc9, 0x8d, 0x1b, 0xc1, 0x16, 0x89, 0x76, 0xe8, 0x9b, + 0x5b, 0x99, 0x54, 0x92, 0x2e, 0x0c, 0x9c, 0xf3, 0x14, 0x2b, 0x10, 0xdb, 0x54, 0xa3, 0x2d, 0x67, + 0xe4, 0xf5, 0x22, 0x67, 0xa4, 0xfe, 0x98, 0xe6, 0x71, 0xb9, 0x62, 0x89, 0x4d, 0xfe, 0xf6, 0x77, + 0x2a, 0xa0, 0x32, 0x6a, 0x59, 0xfc, 0x51, 0x41, 0xd1, 0x5b, 0xfb, 0xcd, 0x20, 0x52, 0x93, 0xa1, + 0x72, 0xb7, 0x80, 0x00, 0xee, 0x25, 0x31, 0x5d, 0x97, 0xea, 0x0d, 0x57, 0x35, 0x08, 0x9b, 0x78, + 0xb4, 0x27, 0x9e, 0xbb, 0x45, 0xf8, 0x43, 0x03, 0xe9, 0x9e, 0x2c, 0x48, 0x00, 0xd6, 0x38, 0xb4, + 0x27, 0x4d, 0x77, 0x7d, 0x5d, 0x6c, 0xf9, 0x55, 0x4f, 0xe8, 0xe8, 0x60, 0x06, 0xe1, 0x35, 0xbf, + 0x83, 0x4d, 0x61, 0x05, 0x1b, 0x35, 0xbf, 0x83, 0x4d, 0xcc, 0x20, 0xd4, 0x6e, 0xf3, 0x83, 0xa8, + 0xcd, 0xae, 0xf3, 0x6f, 0x2a, 0x2e, 0xc2, 0xfa, 0x55, 0x76, 0xdb, 0xd5, 0x6e, 0x14, 0x9c, 0xf7, + 0x1c, 0x9d, 0x81, 0x61, 0x44, 0x9a, 0x6e, 0x23, 0x31, 0xa9, 0x41, 0x7a, 0x06, 0x2e, 0x77, 0x61, + 0xe0, 0x9c, 0xa7, 0xd0, 0x14, 0x8c, 0xca, 0x8c, 0x68, 0x59, 0xef, 0x66, 0x28, 0x5d, 0x5f, 0x03, + 0xa7, 0xc1, 0x38, 0x8b, 0x4f, 0xa5, 0x5a, 0x5b, 0x94, 0xc4, 0x62, 0xc6, 0xb2, 0x21, 0xd5, 0x64, + 0xa9, 0x2c, 0xac, 0x30, 0xec, 0x8f, 0x97, 0xa9, 0x16, 0xee, 0x51, 0x0a, 0xee, 0x9e, 0x45, 0x0b, + 0xa6, 0x67, 0x64, 0xa5, 0x8f, 0x19, 0xf9, 0x2c, 0x0c, 0xdf, 0x8c, 0x03, 0x5f, 0x45, 0xe2, 0x55, + 0x7b, 0x46, 0xe2, 0x19, 0x58, 0xf9, 0x91, 0x78, 0x03, 0x45, 0x45, 0xe2, 0x0d, 0x1e, 0x30, 0x12, + 0xef, 0x77, 0xab, 0xa0, 0x2e, 0x1f, 0xb9, 0x4a, 0x92, 0x5b, 0x41, 0xb4, 0xe9, 0xfa, 0x2d, 0x96, + 0x49, 0xfe, 0x55, 0x0b, 0x86, 0xf9, 0x7a, 0x59, 0x30, 0x33, 0xa9, 0xd6, 0x0b, 0xba, 0xd5, 0x22, + 0xc5, 0x6c, 0x62, 0xd5, 0x60, 0x94, 0xb9, 0x6e, 0xd4, 0x04, 0xe1, 0x54, 0x8f, 0xd0, 0x47, 0x00, + 0xa4, 0x7f, 0x74, 0x5d, 0x8a, 0xcc, 0xf9, 0x62, 0xfa, 0x87, 0xc9, 0xba, 0xb6, 0x81, 0x57, 0x15, + 0x13, 0x6c, 0x30, 0x44, 0x9f, 0xd6, 0x59, 0x66, 0x3c, 0x64, 0xff, 0x43, 0x47, 0x32, 0x36, 0xfd, + 0xe4, 0x98, 0x61, 0x18, 0x74, 0xfd, 0x16, 0x9d, 0x27, 0x22, 0x62, 0xe9, 0x5d, 0x79, 0x55, 0x18, + 0x16, 0x02, 0xa7, 0x39, 0xed, 0x78, 0x8e, 0xdf, 0x20, 0xd1, 0x3c, 0x47, 0x37, 0x2f, 0xd9, 0x66, + 0x0d, 0x58, 0x12, 0xea, 0xba, 0xb6, 0xa5, 0xda, 0xcf, 0xb5, 0x2d, 0x67, 0xdf, 0x07, 0x27, 0xba, + 0x3e, 0xe6, 0xbe, 0x52, 0xca, 0x0e, 0x9e, 0x8d, 0x66, 0xff, 0x5e, 0x5d, 0x2b, 0xad, 0xab, 0x41, + 0x93, 0x5f, 0x1e, 0x12, 0xe9, 0x2f, 0x2a, 0x6c, 0xdc, 0x02, 0xa7, 0x88, 0x71, 0x51, 0xb7, 0x6a, + 0xc4, 0x26, 0x4b, 0x3a, 0x47, 0x43, 0x27, 0x22, 0xfe, 0x51, 0xcf, 0xd1, 0x65, 0xc5, 0x04, 0x1b, + 0x0c, 0xd1, 0x46, 0x2a, 0xa7, 0xe4, 0xe2, 0xe1, 0x73, 0x4a, 0x58, 0x7d, 0xaa, 0xbc, 0x7a, 0xff, + 0x5f, 0xb0, 0x60, 0xc4, 0x4f, 0xcd, 0xdc, 0x62, 0xc2, 0x48, 0xf3, 0x57, 0x05, 0xbf, 0xbb, 0x2a, + 0xdd, 0x86, 0x33, 0xfc, 0xf3, 0x54, 0x5a, 0x75, 0x9f, 0x2a, 0x4d, 0xdf, 0x42, 0x34, 0xd0, 0xeb, + 0x16, 0x22, 0xe4, 0xab, 0x6b, 0xd8, 0x06, 0x0b, 0xbf, 0x86, 0x0d, 0x72, 0xae, 0x60, 0xbb, 0x01, + 0xf5, 0x46, 0x44, 0x9c, 0xe4, 0x80, 0x37, 0x72, 0xb1, 0x03, 0xfa, 0x19, 0x49, 0x00, 0x6b, 0x5a, + 0xe8, 0xa3, 0x4a, 0x9e, 0xd5, 0x8b, 0x34, 0x3f, 0xe9, 0x52, 0xec, 0x4b, 0x8a, 0x7d, 0x31, 0x93, + 0x29, 0x0b, 0x45, 0x24, 0x34, 0xa6, 0x7a, 0xf1, 0xbd, 0x95, 0x1d, 0xfb, 0x7f, 0x2a, 0x70, 0x5c, + 0x76, 0x5f, 0xa6, 0x04, 0x50, 0x7b, 0x85, 0xcf, 0x03, 0xbd, 0xd9, 0x50, 0xf6, 0xca, 0x25, 0x09, + 0xc0, 0x1a, 0x87, 0xda, 0xc7, 0x9d, 0x98, 0x2c, 0x85, 0xc4, 0x5f, 0x70, 0xd7, 0x62, 0x71, 0xee, + 0xac, 0xde, 0xfb, 0x9a, 0x06, 0x61, 0x13, 0x8f, 0x6e, 0x8e, 0xf8, 0x3e, 0x25, 0xce, 0xa6, 0x13, + 0x89, 0xfd, 0x0f, 0x96, 0x70, 0xf4, 0x4b, 0xb9, 0xb5, 0x82, 0x8b, 0x49, 0xa4, 0xeb, 0xca, 0x84, + 0xd8, 0xe7, 0xa5, 0x9a, 0x7f, 0xc7, 0x82, 0xd3, 0xbc, 0x55, 0x8e, 0xe4, 0xb5, 0xb0, 0xe9, 0x24, + 0x24, 0x2e, 0xa6, 0x76, 0x7f, 0x4e, 0xff, 0xb4, 0xd3, 0x3d, 0x8f, 0x2d, 0xce, 0xef, 0x0d, 0x7a, + 0xd3, 0x82, 0xd1, 0xcd, 0x54, 0xf5, 0x16, 0xa9, 0xca, 0x0f, 0x5b, 0x1e, 0x21, 0x45, 0x54, 0x8b, + 0xbe, 0x74, 0x7b, 0x8c, 0xb3, 0xdc, 0xed, 0xbf, 0xb0, 0xc0, 0x54, 0x6b, 0xf7, 0xbe, 0xe8, 0xcb, + 0xfe, 0x4d, 0x73, 0x69, 0xed, 0x57, 0x7b, 0x5a, 0xfb, 0x8f, 0x42, 0xb9, 0xe3, 0x36, 0xc5, 0x7e, + 0x4f, 0x9f, 0x86, 0xcf, 0xcf, 0x62, 0xda, 0x6e, 0xff, 0xb3, 0xaa, 0xf6, 0x23, 0x89, 0x3c, 0xb5, + 0xef, 0x8b, 0xd7, 0x5e, 0x57, 0x65, 0xe3, 0xf8, 0x9b, 0x5f, 0xed, 0x2a, 0x1b, 0xf7, 0x13, 0xfb, + 0x4f, 0x43, 0xe4, 0x03, 0xd4, 0xab, 0x6a, 0xdc, 0xe0, 0x1e, 0x39, 0x88, 0x37, 0xa1, 0x46, 0xb7, + 0xc4, 0xcc, 0x21, 0x5c, 0x4b, 0x75, 0xaa, 0x76, 0x49, 0xb4, 0xdf, 0xd9, 0x1d, 0xff, 0xf1, 0xfd, + 0x77, 0x4b, 0x3e, 0x8d, 0x15, 0x7d, 0x14, 0x43, 0x9d, 0xfe, 0x66, 0xe9, 0x92, 0x62, 0xb3, 0x7d, + 0x4d, 0xc9, 0x4c, 0x09, 0x28, 0x24, 0x17, 0x53, 0xf3, 0x41, 0x3e, 0xd4, 0xd9, 0xfd, 0xc3, 0x8c, + 0x29, 0xdf, 0x93, 0x2f, 0xab, 0xa4, 0x45, 0x09, 0xb8, 0xb3, 0x3b, 0xfe, 0xc2, 0xfe, 0x99, 0xaa, + 0xc7, 0xb1, 0x66, 0x61, 0x7f, 0xb1, 0xa2, 0xe7, 0xae, 0xa8, 0x16, 0xf8, 0x7d, 0x31, 0x77, 0x9f, + 0xcf, 0xcc, 0xdd, 0x73, 0x5d, 0x73, 0x77, 0x44, 0xdf, 0x93, 0x9b, 0x9a, 0x8d, 0xf7, 0xda, 0x30, + 0xdb, 0xdb, 0xff, 0xc3, 0x2c, 0xd2, 0xd7, 0x3b, 0x6e, 0x44, 0xe2, 0xe5, 0xa8, 0xe3, 0xbb, 0x7e, + 0x8b, 0x4d, 0xc7, 0x9a, 0x69, 0x91, 0xa6, 0xc0, 0x38, 0x8b, 0x8f, 0x9e, 0x82, 0x1a, 0xfd, 0xe6, + 0x37, 0x9c, 0x2d, 0x3e, 0xab, 0x8c, 0x02, 0x6a, 0x2b, 0xa2, 0x1d, 0x2b, 0x0c, 0xfb, 0x1b, 0x2c, + 0xb6, 0xc0, 0xc8, 0xd3, 0xa6, 0x73, 0xc2, 0x63, 0x17, 0x3e, 0xf3, 0xea, 0x6b, 0x6a, 0x4e, 0xf0, + 0x5b, 0x9e, 0x39, 0x0c, 0xdd, 0x82, 0xc1, 0x35, 0x7e, 0xe3, 0x61, 0x31, 0x15, 0xe9, 0xc5, 0xf5, + 0x89, 0xec, 0x5e, 0x1b, 0x79, 0x97, 0xe2, 0x1d, 0xfd, 0x13, 0x4b, 0x6e, 0xf6, 0x1f, 0x56, 0x61, + 0x34, 0x73, 0x25, 0x70, 0xaa, 0xee, 0x6d, 0x69, 0xcf, 0xba, 0xb7, 0xaf, 0x02, 0x34, 0x49, 0xe8, + 0x05, 0x3b, 0xcc, 0x3c, 0xae, 0xec, 0xdb, 0x3c, 0x56, 0x3b, 0xaa, 0x59, 0x45, 0x05, 0x1b, 0x14, + 0x45, 0xc9, 0x39, 0x5e, 0x46, 0x37, 0x53, 0x72, 0xce, 0xb8, 0xb7, 0x62, 0xe0, 0xde, 0xde, 0x5b, + 0xe1, 0xc2, 0x28, 0xef, 0xa2, 0xca, 0x86, 0x3e, 0x40, 0xd2, 0x33, 0xcb, 0x27, 0x99, 0x4d, 0x93, + 0xc1, 0x59, 0xba, 0xf7, 0xf3, 0xc6, 0x6f, 0xf4, 0x6e, 0xa8, 0xcb, 0xef, 0xcc, 0xf7, 0x28, 0xa2, + 0xa2, 0x84, 0x9c, 0x06, 0xec, 0x26, 0x6e, 0xf1, 0xb3, 0xab, 0xb0, 0x03, 0xdc, 0xaf, 0xc2, 0x0e, + 0xf6, 0xe7, 0x4b, 0xd4, 0x8e, 0xe7, 0xfd, 0x52, 0x35, 0x8a, 0x9e, 0x80, 0x01, 0xa7, 0x93, 0x6c, + 0x04, 0x5d, 0xf7, 0x37, 0x4e, 0xb1, 0x56, 0x2c, 0xa0, 0x68, 0x01, 0x2a, 0x4d, 0x5d, 0x77, 0x66, + 0x3f, 0xdf, 0x53, 0xbb, 0xa8, 0x9d, 0x84, 0x60, 0x46, 0x05, 0x3d, 0x02, 0x95, 0xc4, 0x69, 0xc9, + 0x14, 0x38, 0x96, 0xf6, 0xbc, 0xea, 0xb4, 0x62, 0xcc, 0x5a, 0x4d, 0xf5, 0x5d, 0xd9, 0x43, 0x7d, + 0xbf, 0x00, 0xc7, 0x62, 0xb7, 0xe5, 0x3b, 0x49, 0x27, 0x22, 0xc6, 0xb1, 0xab, 0x8e, 0xa4, 0x31, + 0x81, 0x38, 0x8d, 0x6b, 0xff, 0xd6, 0x30, 0x9c, 0x5a, 0x99, 0x59, 0x94, 0x75, 0xd8, 0x8f, 0x2c, + 0x8b, 0x2d, 0x8f, 0xc7, 0xbd, 0xcb, 0x62, 0xeb, 0xc1, 0xdd, 0x33, 0xb2, 0xd8, 0x3c, 0x23, 0x8b, + 0x2d, 0x9d, 0x52, 0x54, 0x2e, 0x22, 0xa5, 0x28, 0xaf, 0x07, 0xfd, 0xa4, 0x14, 0x1d, 0x59, 0x5a, + 0xdb, 0x5d, 0x3b, 0xb4, 0xaf, 0xb4, 0x36, 0x95, 0xf3, 0x57, 0x48, 0xb2, 0x47, 0x8f, 0x4f, 0x95, + 0x9b, 0xf3, 0xa7, 0xf2, 0xad, 0x78, 0x22, 0x93, 0x10, 0xf5, 0xaf, 0x14, 0xdf, 0x81, 0x3e, 0xf2, + 0xad, 0x44, 0x2e, 0x95, 0x99, 0xe3, 0x37, 0x58, 0x44, 0x8e, 0x5f, 0x5e, 0x77, 0xf6, 0xcc, 0xf1, + 0x7b, 0x01, 0x8e, 0x35, 0xbc, 0xc0, 0x27, 0xcb, 0x51, 0x90, 0x04, 0x8d, 0xc0, 0x13, 0x66, 0xbd, + 0x12, 0x09, 0x33, 0x26, 0x10, 0xa7, 0x71, 0x7b, 0x25, 0x08, 0xd6, 0x0f, 0x9b, 0x20, 0x08, 0xf7, + 0x29, 0x41, 0xf0, 0xe7, 0x74, 0x2a, 0xfb, 0x10, 0xfb, 0x22, 0xaf, 0x16, 0xff, 0x45, 0xfa, 0xc9, + 0x67, 0x47, 0x6f, 0xf1, 0x0b, 0x14, 0xa9, 0x61, 0x3c, 0x13, 0xb4, 0xa9, 0xe1, 0x37, 0xcc, 0x86, + 0xe4, 0xb5, 0x23, 0x98, 0xb0, 0x37, 0x56, 0x34, 0x1b, 0x75, 0xa9, 0xa2, 0x6e, 0xc2, 0xe9, 0x8e, + 0x1c, 0x26, 0xd5, 0xfe, 0xcb, 0x25, 0xf8, 0x81, 0x3d, 0xbb, 0x80, 0x6e, 0x01, 0x24, 0x4e, 0x4b, + 0x4c, 0x54, 0x71, 0x80, 0x75, 0xc8, 0x70, 0xd7, 0x55, 0x49, 0x8f, 0xd7, 0x88, 0x51, 0x7f, 0xd9, + 0xd1, 0x90, 0xfc, 0xcd, 0xa2, 0x5c, 0x03, 0xaf, 0xab, 0x94, 0x26, 0x0e, 0x3c, 0x82, 0x19, 0x84, + 0xaa, 0xff, 0x88, 0xb4, 0xf4, 0x8d, 0xdf, 0xea, 0xf3, 0x61, 0xd6, 0x8a, 0x05, 0x14, 0x3d, 0x07, + 0x43, 0x8e, 0xe7, 0xf1, 0x7c, 0x25, 0x12, 0x8b, 0x1b, 0x94, 0xb4, 0xd7, 0x52, 0x83, 0xb0, 0x89, + 0x67, 0xff, 0x79, 0x09, 0xc6, 0xf7, 0x90, 0x29, 0x5d, 0x19, 0x98, 0xd5, 0xbe, 0x33, 0x30, 0x45, + 0xce, 0xc8, 0x40, 0x8f, 0x9c, 0x91, 0xe7, 0x60, 0x28, 0x21, 0x4e, 0x5b, 0x04, 0xc8, 0x09, 0x4f, + 0x80, 0x3e, 0x91, 0xd7, 0x20, 0x6c, 0xe2, 0x51, 0x29, 0x36, 0xe2, 0x34, 0x1a, 0x24, 0x8e, 0x65, + 0x52, 0x88, 0xf0, 0x6e, 0x17, 0x96, 0x71, 0xc2, 0x0e, 0x0d, 0xa6, 0x52, 0x2c, 0x70, 0x86, 0x65, + 0x76, 0xc0, 0xeb, 0x7d, 0x0e, 0xf8, 0xd7, 0x4a, 0xf0, 0xe8, 0x5d, 0xb5, 0x5b, 0xdf, 0xf9, 0x3a, + 0x9d, 0x98, 0x44, 0xd9, 0x89, 0x73, 0x2d, 0x26, 0x11, 0x66, 0x10, 0x3e, 0x4a, 0x61, 0x68, 0xdc, + 0xa8, 0x5e, 0x74, 0x32, 0x19, 0x1f, 0xa5, 0x14, 0x0b, 0x9c, 0x61, 0x79, 0xd0, 0x69, 0xf9, 0x0f, + 0x4a, 0xf0, 0x78, 0x1f, 0x36, 0x40, 0x81, 0x49, 0x77, 0xe9, 0xd4, 0xc7, 0xf2, 0x7d, 0xca, 0x50, + 0x3d, 0xe0, 0x70, 0x7d, 0xa3, 0x04, 0x67, 0x7b, 0xab, 0x62, 0xf4, 0x5e, 0x18, 0x8d, 0x54, 0x54, + 0x9c, 0x99, 0x35, 0x79, 0x92, 0x7b, 0x12, 0x52, 0x20, 0x9c, 0xc5, 0x45, 0x13, 0x00, 0xa1, 0x93, + 0x6c, 0xc4, 0x17, 0xb6, 0xdd, 0x38, 0x11, 0x55, 0x81, 0x46, 0xf8, 0x59, 0xa2, 0x6c, 0xc5, 0x06, + 0x06, 0x65, 0xc7, 0xfe, 0xcd, 0x06, 0x57, 0x83, 0x84, 0x3f, 0xc4, 0xb7, 0x11, 0x27, 0xe5, 0xed, + 0x2b, 0x06, 0x08, 0x67, 0x71, 0x29, 0x3b, 0x76, 0xce, 0xc3, 0x3b, 0xca, 0xf7, 0x17, 0x8c, 0xdd, + 0x82, 0x6a, 0xc5, 0x06, 0x46, 0x36, 0x1f, 0xb4, 0xba, 0x77, 0x3e, 0xa8, 0xfd, 0x4f, 0x4b, 0x70, + 0xa6, 0xa7, 0x29, 0xd7, 0xdf, 0x02, 0x7c, 0xf0, 0x72, 0x38, 0x0f, 0x36, 0x77, 0xf6, 0x99, 0x6b, + 0xf8, 0xa7, 0x3d, 0x66, 0x9a, 0xc8, 0x35, 0x3c, 0x78, 0xb2, 0xfe, 0x83, 0x37, 0x9e, 0x5d, 0xe9, + 0x85, 0x95, 0x7d, 0xa4, 0x17, 0x66, 0x3e, 0x46, 0xb5, 0xcf, 0x85, 0xfc, 0x97, 0xe5, 0x9e, 0xc3, + 0x4b, 0xb7, 0x7e, 0x7d, 0xf9, 0x69, 0x67, 0xe1, 0xb8, 0xeb, 0xb3, 0x9b, 0xb8, 0x56, 0x3a, 0x6b, + 0xa2, 0x50, 0x4c, 0x29, 0x7d, 0x5f, 0xfe, 0x7c, 0x06, 0x8e, 0xbb, 0x9e, 0x78, 0x00, 0xd3, 0x3d, + 0x0f, 0x36, 0xa4, 0xfb, 0x4b, 0x38, 0x46, 0x4b, 0x70, 0x5a, 0x0e, 0xc5, 0x86, 0x13, 0x91, 0xa6, + 0x50, 0x23, 0xb1, 0x48, 0x70, 0x39, 0xc3, 0x93, 0x64, 0x72, 0x10, 0x70, 0xfe, 0x73, 0xec, 0xf2, + 0xa3, 0x20, 0x74, 0x1b, 0x62, 0x93, 0xa3, 0x2f, 0x3f, 0xa2, 0x8d, 0x98, 0xc3, 0xec, 0x57, 0xa1, + 0xae, 0xde, 0x9f, 0x87, 0xd9, 0xab, 0x49, 0xd7, 0x15, 0x66, 0xaf, 0x66, 0x9c, 0x81, 0x45, 0xbf, + 0x16, 0x35, 0x89, 0x33, 0xab, 0xe7, 0x0a, 0xd9, 0x61, 0xf6, 0xb1, 0xfd, 0xa3, 0x30, 0xac, 0xfc, + 0x2c, 0xfd, 0x5e, 0x09, 0x65, 0xff, 0xc2, 0x20, 0x1c, 0x4b, 0x15, 0x6b, 0x4c, 0x39, 0x58, 0xad, + 0x3d, 0x1d, 0xac, 0x2c, 0x6d, 0xa2, 0xe3, 0xcb, 0xfb, 0xe2, 0x8c, 0xb4, 0x89, 0x8e, 0x4f, 0x30, + 0x87, 0x51, 0xf3, 0xb6, 0x19, 0xed, 0xe0, 0x8e, 0x2f, 0xc2, 0x9b, 0x95, 0x79, 0x3b, 0xcb, 0x5a, + 0xb1, 0x80, 0xa2, 0x8f, 0x59, 0x30, 0x1c, 0x33, 0xef, 0x3d, 0x77, 0x4f, 0x8b, 0x49, 0x77, 0xf9, + 0xf0, 0xb5, 0x28, 0x55, 0x61, 0x52, 0x16, 0xb1, 0x64, 0xb6, 0xe0, 0x14, 0x47, 0xf4, 0x49, 0x0b, + 0xea, 0xea, 0x5a, 0x1b, 0x71, 0xf9, 0xe3, 0x4a, 0xb1, 0xb5, 0x30, 0xb9, 0x5f, 0x53, 0x1d, 0x84, + 0xa8, 0xa2, 0x84, 0x58, 0x33, 0x46, 0xb1, 0xf2, 0x1d, 0x0f, 0x1e, 0x8d, 0xef, 0x18, 0x72, 0xfc, + 0xc6, 0xef, 0x86, 0x7a, 0xdb, 0xf1, 0xdd, 0x75, 0x12, 0x27, 0xdc, 0x9d, 0x2b, 0x4b, 0xf4, 0xca, + 0x46, 0xac, 0xe1, 0x54, 0x21, 0xc7, 0xec, 0xc5, 0x12, 0xc3, 0xff, 0xca, 0x14, 0xf2, 0x8a, 0x6e, + 0xc6, 0x26, 0x8e, 0xe9, 0x2c, 0x86, 0xfb, 0xea, 0x2c, 0x1e, 0xda, 0xc3, 0x59, 0xfc, 0x5e, 0x18, + 0x6d, 0x6c, 0x38, 0x7e, 0x8b, 0x28, 0xe8, 0xd8, 0xb0, 0xb6, 0x6d, 0x66, 0xd2, 0x20, 0x9c, 0xc5, + 0x45, 0x2f, 0xc2, 0x48, 0xba, 0x49, 0xe4, 0x9f, 0xaa, 0x04, 0xb0, 0x34, 0x05, 0x9c, 0xc1, 0xb6, + 0xff, 0x91, 0x05, 0xa7, 0x73, 0x27, 0xcd, 0x83, 0x1b, 0x07, 0x6b, 0x7f, 0xa9, 0x0a, 0x27, 0x73, + 0x8a, 0xbe, 0xa2, 0x1d, 0x73, 0x39, 0x59, 0x45, 0x84, 0x30, 0xa4, 0x4f, 0xe4, 0xe5, 0x57, 0xcc, + 0x59, 0x43, 0xfb, 0x3b, 0x29, 0xd2, 0xa7, 0x35, 0xe5, 0x7b, 0x7b, 0x5a, 0x63, 0xac, 0x8a, 0xca, + 0x7d, 0x5d, 0x15, 0xd5, 0x3d, 0x56, 0xc5, 0xaf, 0x5b, 0x30, 0xd6, 0xee, 0x71, 0xd3, 0x80, 0xf0, + 0x7b, 0x5e, 0x3f, 0x9a, 0x7b, 0x0c, 0xa6, 0x1f, 0xb9, 0xbd, 0x3b, 0xde, 0xf3, 0x82, 0x07, 0xdc, + 0xb3, 0x57, 0xf6, 0x77, 0xca, 0xc0, 0x2a, 0x0e, 0xb3, 0xc2, 0x7e, 0x3b, 0xe8, 0xa3, 0x66, 0xed, + 0x68, 0xab, 0xa8, 0x3a, 0xc7, 0x9c, 0xb8, 0xaa, 0x3d, 0xcd, 0x47, 0x30, 0xaf, 0x14, 0x75, 0x56, + 0x66, 0x96, 0xfa, 0x90, 0x99, 0x9e, 0x2c, 0xd2, 0x5d, 0x2e, 0xbe, 0x48, 0x77, 0x3d, 0x5b, 0xa0, + 0xfb, 0xee, 0x9f, 0xb8, 0xf2, 0x40, 0x7e, 0xe2, 0x5f, 0xb6, 0xb8, 0xe0, 0xc9, 0x7c, 0x05, 0x6d, + 0x98, 0x58, 0x77, 0x31, 0x4c, 0x9e, 0x82, 0x5a, 0x4c, 0xbc, 0xf5, 0x4b, 0xc4, 0xf1, 0x84, 0x01, + 0xa3, 0x8f, 0xcf, 0x45, 0x3b, 0x56, 0x18, 0xec, 0xfe, 0x5f, 0xcf, 0x0b, 0x6e, 0x5d, 0x68, 0x87, + 0xc9, 0x8e, 0x30, 0x65, 0xf4, 0xfd, 0xbf, 0x0a, 0x82, 0x0d, 0x2c, 0xfb, 0x33, 0x15, 0x3e, 0x03, + 0x45, 0x0c, 0xc6, 0xf3, 0x99, 0x1b, 0x1b, 0xfb, 0x0f, 0x5f, 0xf8, 0x30, 0x40, 0x23, 0x68, 0x87, + 0xd4, 0xec, 0x5c, 0x0d, 0xc4, 0x91, 0xd4, 0xa5, 0x43, 0x5f, 0xd8, 0x2e, 0xe8, 0xe9, 0xd7, 0xd0, + 0x6d, 0xd8, 0xe0, 0x97, 0x92, 0xa5, 0xe5, 0x3d, 0x65, 0x69, 0x4a, 0xac, 0x54, 0xf6, 0x10, 0x2b, + 0x5f, 0xb7, 0xe0, 0xb8, 0x32, 0x2b, 0xb8, 0x66, 0x6c, 0x8a, 0xda, 0x84, 0xaf, 0x16, 0x61, 0xf8, + 0xd1, 0xd1, 0x9b, 0x58, 0xcc, 0x30, 0xe0, 0x5e, 0x72, 0xb5, 0x55, 0xca, 0x82, 0x71, 0x57, 0x8f, + 0xce, 0xce, 0xc0, 0xe9, 0x5c, 0x22, 0xfb, 0xba, 0x69, 0xea, 0xcf, 0x2d, 0x48, 0x19, 0x9f, 0x28, + 0x84, 0x2a, 0xed, 0xfa, 0x8e, 0x90, 0x46, 0x4b, 0xc5, 0x59, 0xba, 0x54, 0x0d, 0x88, 0x25, 0xce, + 0x7e, 0x62, 0xce, 0x08, 0x79, 0x22, 0x2c, 0x85, 0xcf, 0xa0, 0xab, 0xc5, 0x31, 0xbc, 0x14, 0x04, + 0x9b, 0xfc, 0x0c, 0x59, 0x87, 0xb8, 0xd8, 0xcf, 0xc3, 0x89, 0xae, 0x4e, 0xb1, 0x8b, 0xe8, 0x02, + 0xaa, 0x69, 0x33, 0x4b, 0x93, 0xe5, 0x2e, 0x63, 0x0e, 0xb3, 0xbf, 0x61, 0xc1, 0xf1, 0x2c, 0x79, + 0xf4, 0x96, 0x05, 0x27, 0xe2, 0x2c, 0xbd, 0xa3, 0x1a, 0x3b, 0x15, 0x5a, 0xda, 0x05, 0xc2, 0xdd, + 0x9d, 0xb0, 0xff, 0x6f, 0x89, 0x2f, 0xf4, 0x1b, 0xae, 0xdf, 0x0c, 0x6e, 0x29, 0x23, 0xcc, 0xea, + 0x69, 0x84, 0x51, 0xd9, 0xd3, 0xd8, 0x20, 0xcd, 0x8e, 0xd7, 0x95, 0x34, 0xbd, 0x22, 0xda, 0xb1, + 0xc2, 0x60, 0x39, 0xa2, 0x1d, 0x71, 0x63, 0x41, 0x66, 0x01, 0xce, 0x8a, 0x76, 0xac, 0x30, 0xd0, + 0xb3, 0x30, 0x6c, 0xbc, 0xa4, 0x5c, 0x83, 0x6c, 0xef, 0x63, 0x98, 0x07, 0x31, 0x4e, 0x61, 0xa1, + 0x09, 0x00, 0x65, 0xd0, 0x49, 0x73, 0x80, 0xf9, 0xe4, 0x94, 0xd4, 0x8d, 0xb1, 0x81, 0xc1, 0x32, + 0xb2, 0xbd, 0x4e, 0xcc, 0x8e, 0x53, 0x06, 0x74, 0x15, 0xdd, 0x19, 0xd1, 0x86, 0x15, 0x94, 0x4a, + 0xce, 0xb6, 0xe3, 0x77, 0x1c, 0x8f, 0x8e, 0x90, 0xd8, 0x65, 0x2b, 0x91, 0xb3, 0xa8, 0x20, 0xd8, + 0xc0, 0xa2, 0x6f, 0x9c, 0xb8, 0x6d, 0xf2, 0x72, 0xe0, 0xcb, 0x90, 0x40, 0x7d, 0xc2, 0x26, 0xda, + 0xb1, 0xc2, 0xb0, 0xff, 0xab, 0x05, 0xa3, 0xba, 0xbe, 0x03, 0xbf, 0x72, 0xde, 0x74, 0x0a, 0x58, + 0x7b, 0x3a, 0x05, 0xd2, 0x89, 0xef, 0xa5, 0xbe, 0x12, 0xdf, 0xcd, 0x9c, 0xf4, 0xf2, 0x5d, 0x73, + 0xd2, 0x7f, 0x48, 0x5f, 0x67, 0xcc, 0x93, 0xd7, 0x87, 0xf2, 0xae, 0x32, 0x46, 0x36, 0x0c, 0x34, + 0x1c, 0x55, 0xdc, 0x68, 0x98, 0x6f, 0xd3, 0x66, 0xa6, 0x18, 0x92, 0x80, 0xd8, 0x4b, 0x50, 0x57, + 0x07, 0x4d, 0xd2, 0x27, 0x60, 0xe5, 0xfb, 0x04, 0xfa, 0xca, 0x8d, 0x9d, 0x5e, 0xfb, 0xd6, 0x77, + 0x1f, 0x7b, 0xc7, 0x1f, 0x7c, 0xf7, 0xb1, 0x77, 0xfc, 0xc9, 0x77, 0x1f, 0x7b, 0xc7, 0xc7, 0x6e, + 0x3f, 0x66, 0x7d, 0xeb, 0xf6, 0x63, 0xd6, 0x1f, 0xdc, 0x7e, 0xcc, 0xfa, 0x93, 0xdb, 0x8f, 0x59, + 0xdf, 0xb9, 0xfd, 0x98, 0xf5, 0x85, 0xff, 0xf4, 0xd8, 0x3b, 0x5e, 0xce, 0x8d, 0x09, 0xa5, 0x3f, + 0x9e, 0x6e, 0x34, 0x27, 0xb7, 0xce, 0xb3, 0xb0, 0x44, 0xba, 0xbc, 0x26, 0x8d, 0x39, 0x35, 0x29, + 0x97, 0xd7, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xda, 0x4c, 0x5b, 0x49, 0x90, 0xe6, 0x00, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -13892,6 +13893,20 @@ func (m *SyncOperation) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + i -= len(m.ChangeRevision) + copy(dAtA[i:], m.ChangeRevision) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ChangeRevision))) + i-- + dAtA[i] = 0x6a + if len(m.ChangeRevisions) > 0 { + for iNdEx := len(m.ChangeRevisions) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ChangeRevisions[iNdEx]) + copy(dAtA[i:], m.ChangeRevisions[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ChangeRevisions[iNdEx]))) + i-- + dAtA[i] = 0x62 + } + } if len(m.Revisions) > 0 { for iNdEx := len(m.Revisions) - 1; iNdEx >= 0; iNdEx-- { i -= len(m.Revisions[iNdEx]) @@ -17886,6 +17901,14 @@ func (m *SyncOperation) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } + if len(m.ChangeRevisions) > 0 { + for _, s := range m.ChangeRevisions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.ChangeRevision) + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -20586,6 +20609,8 @@ func (this *SyncOperation) String() string { `SyncOptions:` + fmt.Sprintf("%v", this.SyncOptions) + `,`, `Sources:` + repeatedStringForSources + `,`, `Revisions:` + fmt.Sprintf("%v", this.Revisions) + `,`, + `ChangeRevisions:` + fmt.Sprintf("%v", this.ChangeRevisions) + `,`, + `ChangeRevision:` + fmt.Sprintf("%v", this.ChangeRevision) + `,`, `}`, }, "") return s @@ -49644,6 +49669,70 @@ func (m *SyncOperation) Unmarshal(dAtA []byte) error { } m.Revisions = append(m.Revisions, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChangeRevisions", 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.ChangeRevisions = append(m.ChangeRevisions, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChangeRevision", 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.ChangeRevision = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index a48788dc68418..d7ec9d68041b1 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -2185,6 +2185,10 @@ message SyncOperation { // Revisions is the list of revision (Git) or chart version (Helm) which to sync each source in sources field for the application to // If omitted, will use the revision specified in app spec. repeated string revisions = 11; + + repeated string changeRevisions = 12; + + optional string changeRevision = 13; } // SyncOperationResource contains resources to sync. diff --git a/pkg/apis/application/v1alpha1/openapi_generated.go b/pkg/apis/application/v1alpha1/openapi_generated.go index 527922c44d426..cb926dde0709c 100644 --- a/pkg/apis/application/v1alpha1/openapi_generated.go +++ b/pkg/apis/application/v1alpha1/openapi_generated.go @@ -7579,6 +7579,26 @@ func schema_pkg_apis_application_v1alpha1_SyncOperation(ref common.ReferenceCall }, }, }, + "changeRevisions": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "changeRevision": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, }, }, }, diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index 212f9ca4f7aa7..15d3732a6ba12 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -1112,7 +1112,9 @@ type SyncOperation struct { Sources ApplicationSources `json:"sources,omitempty" protobuf:"bytes,10,opt,name=sources"` // Revisions is the list of revision (Git) or chart version (Helm) which to sync each source in sources field for the application to // If omitted, will use the revision specified in app spec. - Revisions []string `json:"revisions,omitempty" protobuf:"bytes,11,opt,name=revisions"` + Revisions []string `json:"revisions,omitempty" protobuf:"bytes,11,opt,name=revisions"` + ChangeRevisions []string `json:"changeRevisions,omitempty" protobuf:"bytes,12,opt,name=changeRevisions"` + ChangeRevision string `json:"changeRevision,omitempty" protobuf:"bytes,13,opt,name=changeRevision"` } // IsApplyStrategy returns true if the sync strategy is "apply" diff --git a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go index 0dcfcf6593acf..eb0f60e56bc86 100644 --- a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go @@ -4132,6 +4132,11 @@ func (in *SyncOperation) DeepCopyInto(out *SyncOperation) { *out = make([]string, len(*in)) copy(*out, *in) } + if in.ChangeRevisions != nil { + in, out := &in.ChangeRevisions, &out.ChangeRevisions + *out = make([]string, len(*in)) + copy(*out, *in) + } return } diff --git a/reposerver/apiclient/mocks/RepoServerServiceClient.go b/reposerver/apiclient/mocks/RepoServerServiceClient.go index 2dd9abb7f638e..3c560b32eafa4 100644 --- a/reposerver/apiclient/mocks/RepoServerServiceClient.go +++ b/reposerver/apiclient/mocks/RepoServerServiceClient.go @@ -132,6 +132,43 @@ func (_m *RepoServerServiceClient) GetAppDetails(ctx context.Context, in *apicli return r0, r1 } +// GetChangeRevision provides a mock function with given fields: ctx, in, opts +func (_m *RepoServerServiceClient) GetChangeRevision(ctx context.Context, in *apiclient.ChangeRevisionRequest, opts ...grpc.CallOption) (*apiclient.ChangeRevisionResponse, error) { + _va := make([]interface{}, len(opts)) + for _i := range opts { + _va[_i] = opts[_i] + } + var _ca []interface{} + _ca = append(_ca, ctx, in) + _ca = append(_ca, _va...) + ret := _m.Called(_ca...) + + if len(ret) == 0 { + panic("no return value specified for GetChangeRevision") + } + + var r0 *apiclient.ChangeRevisionResponse + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *apiclient.ChangeRevisionRequest, ...grpc.CallOption) (*apiclient.ChangeRevisionResponse, error)); ok { + return rf(ctx, in, opts...) + } + if rf, ok := ret.Get(0).(func(context.Context, *apiclient.ChangeRevisionRequest, ...grpc.CallOption) *apiclient.ChangeRevisionResponse); ok { + r0 = rf(ctx, in, opts...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*apiclient.ChangeRevisionResponse) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *apiclient.ChangeRevisionRequest, ...grpc.CallOption) error); ok { + r1 = rf(ctx, in, opts...) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // GetGitDirectories provides a mock function with given fields: ctx, in, opts func (_m *RepoServerServiceClient) GetGitDirectories(ctx context.Context, in *apiclient.GitDirectoriesRequest, opts ...grpc.CallOption) (*apiclient.GitDirectoriesResponse, error) { _va := make([]interface{}, len(opts)) diff --git a/reposerver/apiclient/repository.pb.go b/reposerver/apiclient/repository.pb.go index 061e383d4429e..bd29211801e06 100644 --- a/reposerver/apiclient/repository.pb.go +++ b/reposerver/apiclient/repository.pb.go @@ -2630,6 +2630,140 @@ func (m *UpdateRevisionForPathsResponse) GetRevision() string { return "" } +type ChangeRevisionRequest struct { + AppName string `protobuf:"bytes,1,opt,name=appName,proto3" json:"appName,omitempty"` + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + CurrentRevision string `protobuf:"bytes,3,opt,name=currentRevision,proto3" json:"currentRevision,omitempty"` + PreviousRevision string `protobuf:"bytes,4,opt,name=previousRevision,proto3" json:"previousRevision,omitempty"` + Paths []string `protobuf:"bytes,5,rep,name=paths,proto3" json:"paths,omitempty"` + Repo *v1alpha1.Repository `protobuf:"bytes,6,opt,name=repo,proto3" json:"repo,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ChangeRevisionRequest) Reset() { *m = ChangeRevisionRequest{} } +func (m *ChangeRevisionRequest) String() string { return proto.CompactTextString(m) } +func (*ChangeRevisionRequest) ProtoMessage() {} +func (*ChangeRevisionRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_dd8723cfcc820480, []int{36} +} +func (m *ChangeRevisionRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ChangeRevisionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ChangeRevisionRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ChangeRevisionRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ChangeRevisionRequest.Merge(m, src) +} +func (m *ChangeRevisionRequest) XXX_Size() int { + return m.Size() +} +func (m *ChangeRevisionRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ChangeRevisionRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ChangeRevisionRequest proto.InternalMessageInfo + +func (m *ChangeRevisionRequest) GetAppName() string { + if m != nil { + return m.AppName + } + return "" +} + +func (m *ChangeRevisionRequest) GetNamespace() string { + if m != nil { + return m.Namespace + } + return "" +} + +func (m *ChangeRevisionRequest) GetCurrentRevision() string { + if m != nil { + return m.CurrentRevision + } + return "" +} + +func (m *ChangeRevisionRequest) GetPreviousRevision() string { + if m != nil { + return m.PreviousRevision + } + return "" +} + +func (m *ChangeRevisionRequest) GetPaths() []string { + if m != nil { + return m.Paths + } + return nil +} + +func (m *ChangeRevisionRequest) GetRepo() *v1alpha1.Repository { + if m != nil { + return m.Repo + } + return nil +} + +type ChangeRevisionResponse struct { + Revision string `protobuf:"bytes,1,opt,name=revision,proto3" json:"revision,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ChangeRevisionResponse) Reset() { *m = ChangeRevisionResponse{} } +func (m *ChangeRevisionResponse) String() string { return proto.CompactTextString(m) } +func (*ChangeRevisionResponse) ProtoMessage() {} +func (*ChangeRevisionResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_dd8723cfcc820480, []int{37} +} +func (m *ChangeRevisionResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ChangeRevisionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ChangeRevisionResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ChangeRevisionResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ChangeRevisionResponse.Merge(m, src) +} +func (m *ChangeRevisionResponse) XXX_Size() int { + return m.Size() +} +func (m *ChangeRevisionResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ChangeRevisionResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ChangeRevisionResponse proto.InternalMessageInfo + +func (m *ChangeRevisionResponse) GetRevision() string { + if m != nil { + return m.Revision + } + return "" +} + func init() { proto.RegisterType((*ManifestRequest)(nil), "repository.ManifestRequest") proto.RegisterMapType((map[string]bool)(nil), "repository.ManifestRequest.EnabledSourceTypesEntry") @@ -2676,6 +2810,8 @@ func init() { proto.RegisterType((*UpdateRevisionForPathsRequest)(nil), "repository.UpdateRevisionForPathsRequest") proto.RegisterMapType((map[string]*v1alpha1.RefTarget)(nil), "repository.UpdateRevisionForPathsRequest.RefSourcesEntry") proto.RegisterType((*UpdateRevisionForPathsResponse)(nil), "repository.UpdateRevisionForPathsResponse") + proto.RegisterType((*ChangeRevisionRequest)(nil), "repository.ChangeRevisionRequest") + proto.RegisterType((*ChangeRevisionResponse)(nil), "repository.ChangeRevisionResponse") } func init() { @@ -2683,169 +2819,174 @@ func init() { } var fileDescriptor_dd8723cfcc820480 = []byte{ - // 2585 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x1a, 0x4d, 0x73, 0x1c, 0x47, - 0x55, 0xfb, 0x25, 0xed, 0x3e, 0x7d, 0xb7, 0x65, 0x79, 0xbc, 0x89, 0x85, 0x32, 0xc4, 0x2e, 0x47, - 0x4e, 0x66, 0x91, 0x4c, 0xe2, 0xe0, 0x98, 0x50, 0x8a, 0x6c, 0x4b, 0xfe, 0x90, 0xad, 0x8c, 0x9d, - 0x50, 0x0e, 0x06, 0xaa, 0x77, 0xb6, 0xb5, 0x3b, 0xde, 0xf9, 0x68, 0xcf, 0xcc, 0xca, 0xc8, 0x55, - 0x54, 0x51, 0x05, 0xc5, 0x85, 0x3b, 0x07, 0xae, 0xfc, 0x06, 0x8a, 0x23, 0x07, 0x2a, 0x05, 0x27, - 0x8a, 0xe2, 0x42, 0x15, 0x17, 0x28, 0xff, 0x12, 0xaa, 0x3f, 0x66, 0xa6, 0x67, 0x76, 0x76, 0xad, - 0x20, 0x5b, 0x01, 0x2e, 0x52, 0xf7, 0x9b, 0xd7, 0xef, 0xbd, 0x7e, 0x5f, 0xfd, 0x5e, 0xf7, 0xc2, - 0x85, 0x80, 0x50, 0x3f, 0x24, 0xc1, 0x01, 0x09, 0x5a, 0x7c, 0x68, 0x47, 0x7e, 0x70, 0xa8, 0x0c, - 0x0d, 0x1a, 0xf8, 0x91, 0x8f, 0x20, 0x85, 0x34, 0xf5, 0xfe, 0x87, 0xa1, 0x61, 0xfb, 0x2d, 0x4c, - 0xed, 0x96, 0xe5, 0x07, 0xa4, 0x75, 0xb0, 0xde, 0xea, 0x12, 0x8f, 0x04, 0x38, 0x22, 0x1d, 0x81, - 0xdf, 0xfc, 0x76, 0x8a, 0xe3, 0x62, 0xab, 0x67, 0x7b, 0x24, 0x38, 0x6c, 0xd1, 0x7e, 0x97, 0x01, - 0xc2, 0x96, 0x4b, 0x22, 0x5c, 0xb4, 0xea, 0x6e, 0xd7, 0x8e, 0x7a, 0x83, 0xb6, 0x61, 0xf9, 0x6e, - 0x0b, 0x07, 0x5d, 0x9f, 0x06, 0xfe, 0x13, 0x3e, 0x78, 0xcf, 0xea, 0xb4, 0x0e, 0x36, 0x52, 0x02, - 0x98, 0x52, 0xc7, 0xb6, 0x70, 0x64, 0xfb, 0x5e, 0xeb, 0x60, 0x1d, 0x3b, 0xb4, 0x87, 0x87, 0xa9, - 0xbd, 0xd1, 0xf5, 0xfd, 0xae, 0x43, 0x5a, 0x7c, 0xd6, 0x1e, 0xec, 0xb7, 0x88, 0x4b, 0x23, 0xb9, - 0x21, 0xfd, 0x2f, 0xb3, 0x30, 0xbf, 0x8b, 0x3d, 0x7b, 0x9f, 0x84, 0x91, 0x49, 0x9e, 0x0e, 0x48, - 0x18, 0xa1, 0xc7, 0x50, 0x65, 0xdb, 0xd4, 0x4a, 0xab, 0xa5, 0x8b, 0xd3, 0x1b, 0x3b, 0x46, 0x2a, - 0x8d, 0x11, 0x4b, 0xc3, 0x07, 0x3f, 0xb6, 0x3a, 0xc6, 0xc1, 0x86, 0x41, 0xfb, 0x5d, 0x83, 0x49, - 0x63, 0x28, 0xd2, 0x18, 0xb1, 0x34, 0x86, 0x99, 0x28, 0xcc, 0xe4, 0x54, 0x51, 0x13, 0xea, 0x01, - 0x39, 0xb0, 0x43, 0xdb, 0xf7, 0xb4, 0xf2, 0x6a, 0xe9, 0x62, 0xc3, 0x4c, 0xe6, 0x48, 0x83, 0x29, - 0xcf, 0xdf, 0xc2, 0x56, 0x8f, 0x68, 0x95, 0xd5, 0xd2, 0xc5, 0xba, 0x19, 0x4f, 0xd1, 0x2a, 0x4c, - 0x63, 0x4a, 0xef, 0xe2, 0x36, 0x71, 0xee, 0x90, 0x43, 0xad, 0xca, 0x17, 0xaa, 0x20, 0xb6, 0x16, - 0x53, 0x7a, 0x0f, 0xbb, 0x44, 0xab, 0xf1, 0xaf, 0xf1, 0x14, 0xbd, 0x09, 0x0d, 0x0f, 0xbb, 0x24, - 0xa4, 0xd8, 0x22, 0x5a, 0x9d, 0x7f, 0x4b, 0x01, 0xe8, 0xa7, 0xb0, 0xa8, 0x08, 0xfe, 0xc0, 0x1f, - 0x04, 0x16, 0xd1, 0x80, 0x6f, 0xfd, 0xfe, 0xf1, 0xb6, 0xbe, 0x99, 0x27, 0x6b, 0x0e, 0x73, 0x42, - 0x3f, 0x82, 0x1a, 0xf7, 0x29, 0x6d, 0x7a, 0xb5, 0xf2, 0x4a, 0xb5, 0x2d, 0xc8, 0x22, 0x0f, 0xa6, - 0xa8, 0x33, 0xe8, 0xda, 0x5e, 0xa8, 0xcd, 0x70, 0x0e, 0x0f, 0x8f, 0xc7, 0x61, 0xcb, 0xf7, 0xf6, - 0xed, 0xee, 0x2e, 0xf6, 0x70, 0x97, 0xb8, 0xc4, 0x8b, 0xf6, 0x38, 0x71, 0x33, 0x66, 0x82, 0x9e, - 0xc3, 0x42, 0x7f, 0x10, 0x46, 0xbe, 0x6b, 0x3f, 0x27, 0xf7, 0x29, 0x5b, 0x1b, 0x6a, 0xb3, 0x5c, - 0x9b, 0xf7, 0x8e, 0xc7, 0xf8, 0x4e, 0x8e, 0xaa, 0x39, 0xc4, 0x87, 0x39, 0x49, 0x7f, 0xd0, 0x26, - 0x9f, 0x93, 0x80, 0x7b, 0xd7, 0x9c, 0x70, 0x12, 0x05, 0x24, 0xdc, 0xc8, 0x96, 0xb3, 0x50, 0x9b, - 0x5f, 0xad, 0x08, 0x37, 0x4a, 0x40, 0xe8, 0x22, 0xcc, 0x1f, 0x90, 0xc0, 0xde, 0x3f, 0x7c, 0x60, - 0x77, 0x3d, 0x1c, 0x0d, 0x02, 0xa2, 0x2d, 0x70, 0x57, 0xcc, 0x83, 0x91, 0x0b, 0xb3, 0x3d, 0xe2, - 0xb8, 0x4c, 0xe5, 0x5b, 0x01, 0xe9, 0x84, 0xda, 0x22, 0xd7, 0xef, 0xf6, 0xf1, 0x2d, 0xc8, 0xc9, - 0x99, 0x59, 0xea, 0x4c, 0x30, 0xcf, 0x37, 0x65, 0xa4, 0x88, 0x18, 0x41, 0x42, 0xb0, 0x1c, 0x18, - 0x5d, 0x80, 0xb9, 0x28, 0xc0, 0x56, 0xdf, 0xf6, 0xba, 0xbb, 0x24, 0xea, 0xf9, 0x1d, 0xed, 0x14, - 0xd7, 0x44, 0x0e, 0x8a, 0x2c, 0x40, 0xc4, 0xc3, 0x6d, 0x87, 0x74, 0x84, 0x2f, 0x3e, 0x3c, 0xa4, - 0x24, 0xd4, 0x96, 0xf8, 0x2e, 0x2e, 0x1b, 0x4a, 0xee, 0xcb, 0x25, 0x08, 0xe3, 0xc6, 0xd0, 0xaa, - 0x1b, 0x5e, 0x14, 0x1c, 0x9a, 0x05, 0xe4, 0x50, 0x1f, 0xa6, 0xd9, 0x3e, 0x62, 0x57, 0x38, 0xcd, - 0x5d, 0xe1, 0xd6, 0xf1, 0x74, 0xb4, 0x93, 0x12, 0x34, 0x55, 0xea, 0xc8, 0x00, 0xd4, 0xc3, 0xe1, - 0xee, 0xc0, 0x89, 0x6c, 0xea, 0x10, 0x21, 0x46, 0xa8, 0x2d, 0x73, 0x35, 0x15, 0x7c, 0x41, 0x77, - 0x00, 0x02, 0xb2, 0x1f, 0xe3, 0x9d, 0xe1, 0x3b, 0xbf, 0x34, 0x6e, 0xe7, 0x66, 0x82, 0x2d, 0x76, - 0xac, 0x2c, 0x47, 0x6d, 0x38, 0xa5, 0x48, 0xbb, 0x4b, 0x22, 0xdc, 0xc1, 0x11, 0xd6, 0x34, 0xbe, - 0xe3, 0x6f, 0x19, 0xe2, 0x24, 0x30, 0xd4, 0x93, 0x20, 0xdd, 0x26, 0x3b, 0x09, 0x8c, 0x83, 0x75, - 0xe3, 0x7e, 0xfb, 0x09, 0xb1, 0x22, 0xb6, 0xd6, 0x2c, 0x22, 0xc6, 0x36, 0xc8, 0x54, 0x45, 0xac, - 0x48, 0x66, 0x14, 0x9e, 0x3a, 0xce, 0x72, 0x37, 0x2e, 0xf8, 0xc2, 0xfc, 0x5d, 0x42, 0x79, 0x62, - 0x6c, 0x8a, 0x88, 0x50, 0x40, 0xcd, 0x1b, 0x70, 0x66, 0x84, 0x39, 0xd1, 0x02, 0x54, 0xfa, 0xe4, - 0x90, 0x1f, 0x03, 0x0d, 0x93, 0x0d, 0xd1, 0x12, 0xd4, 0x0e, 0xb0, 0x33, 0x20, 0x3c, 0x71, 0xd7, - 0x4d, 0x31, 0xb9, 0x5a, 0xfe, 0xb0, 0xd4, 0xfc, 0x65, 0x09, 0xe6, 0x73, 0xca, 0x29, 0x58, 0xff, - 0x43, 0x75, 0xfd, 0x2b, 0x08, 0x95, 0xfd, 0x87, 0x38, 0xe8, 0x92, 0x48, 0x11, 0x44, 0xff, 0x5b, - 0x09, 0xb4, 0x9c, 0xd5, 0xbe, 0x6f, 0x47, 0xbd, 0x9b, 0xb6, 0x43, 0x42, 0x74, 0x05, 0xa6, 0x02, - 0x01, 0x93, 0x87, 0xdb, 0x1b, 0x63, 0x8c, 0xbd, 0x33, 0x61, 0xc6, 0xd8, 0xe8, 0x63, 0xa8, 0xbb, - 0xb1, 0x41, 0x85, 0xec, 0xab, 0x45, 0x2b, 0x19, 0x97, 0xd8, 0x56, 0x3b, 0x13, 0x66, 0xb2, 0x06, - 0xbd, 0x0f, 0x35, 0xab, 0x37, 0xf0, 0xfa, 0xfc, 0x58, 0x9b, 0xde, 0x38, 0x37, 0x6a, 0xf1, 0x16, - 0x43, 0xda, 0x99, 0x30, 0x05, 0xf6, 0x27, 0x93, 0x50, 0xa5, 0x38, 0x88, 0xf4, 0x9b, 0xb0, 0x54, - 0xc4, 0x82, 0x9d, 0xa5, 0x56, 0x8f, 0x58, 0xfd, 0x70, 0xe0, 0x4a, 0x35, 0x27, 0x73, 0x84, 0xa0, - 0x1a, 0xda, 0xcf, 0x85, 0xaa, 0x2b, 0x26, 0x1f, 0xeb, 0xef, 0xc0, 0xe2, 0x10, 0x37, 0x66, 0x54, - 0x21, 0x1b, 0xa3, 0x30, 0x23, 0x59, 0xeb, 0x03, 0x38, 0xfd, 0x90, 0xeb, 0x22, 0x39, 0x50, 0x4e, - 0xa2, 0x3a, 0xd0, 0x77, 0x60, 0x39, 0xcf, 0x36, 0xa4, 0xbe, 0x17, 0x12, 0xe6, 0xfa, 0x3c, 0x03, - 0xdb, 0xa4, 0x93, 0x7e, 0xe5, 0x52, 0xd4, 0xcd, 0x82, 0x2f, 0xfa, 0x6f, 0xcb, 0xb0, 0x6c, 0x92, - 0xd0, 0x77, 0x0e, 0x48, 0x9c, 0x1e, 0x4f, 0xa6, 0xc0, 0xf9, 0x01, 0x54, 0x30, 0xa5, 0xd2, 0x4d, - 0x6e, 0xbd, 0xb2, 0x12, 0xc2, 0x64, 0x54, 0xd1, 0xbb, 0xb0, 0x88, 0xdd, 0xb6, 0xdd, 0x1d, 0xf8, - 0x83, 0x30, 0xde, 0x16, 0x77, 0xaa, 0x86, 0x39, 0xfc, 0x81, 0x85, 0x7f, 0xc8, 0x23, 0xf2, 0x96, - 0xd7, 0x21, 0x3f, 0xe1, 0x55, 0x53, 0xc5, 0x54, 0x41, 0xba, 0x05, 0x67, 0x86, 0x94, 0x24, 0x15, - 0xae, 0x16, 0x6a, 0xa5, 0x5c, 0xa1, 0x56, 0x28, 0x46, 0x79, 0x84, 0x18, 0xfa, 0xcf, 0x4a, 0x50, - 0x8f, 0xfd, 0x0e, 0xad, 0xc1, 0x82, 0xe5, 0xbb, 0xd4, 0x76, 0x48, 0x27, 0x86, 0x49, 0xf2, 0x43, - 0x70, 0x26, 0x7f, 0x80, 0x9f, 0x25, 0x68, 0x82, 0x81, 0x0a, 0x62, 0x5e, 0x4e, 0x71, 0xd4, 0x93, - 0x2a, 0xe0, 0x63, 0x06, 0x73, 0x6c, 0x8f, 0xf0, 0xed, 0xd6, 0x4c, 0x3e, 0xd6, 0xbf, 0x80, 0x99, - 0xeb, 0x84, 0x12, 0xaf, 0x43, 0x3c, 0xcb, 0x26, 0x21, 0xc7, 0xf1, 0xad, 0xbe, 0xe4, 0xcc, 0xc7, - 0x0c, 0xd6, 0x21, 0x34, 0x94, 0x6c, 0xf8, 0x18, 0xe9, 0x30, 0xc3, 0x72, 0x80, 0x1d, 0xf0, 0x62, - 0x27, 0x94, 0x7c, 0x32, 0x30, 0x3d, 0x84, 0x53, 0x8a, 0x9d, 0x92, 0x4a, 0x62, 0x05, 0x00, 0x53, - 0x1a, 0x17, 0x23, 0x82, 0x91, 0x02, 0x41, 0xd7, 0x60, 0xa6, 0xa3, 0x88, 0x24, 0x1d, 0x46, 0x53, - 0x53, 0x83, 0x2a, 0xb2, 0x99, 0xc1, 0xd6, 0xbf, 0xac, 0xc0, 0x42, 0x9a, 0xb0, 0xa4, 0xc9, 0x36, - 0xa0, 0xe1, 0x4a, 0x58, 0xa8, 0x95, 0xf8, 0x71, 0xb6, 0x54, 0x98, 0xe1, 0x52, 0xb4, 0x6c, 0x75, - 0x5c, 0xce, 0x57, 0xc7, 0xcb, 0x30, 0x29, 0xda, 0x22, 0xb9, 0x73, 0x39, 0xcb, 0x38, 0x47, 0x35, - 0xe7, 0x1c, 0x2b, 0x00, 0x61, 0x72, 0x96, 0x68, 0x93, 0x62, 0xe3, 0x29, 0x84, 0xe9, 0x54, 0xd4, - 0x52, 0x26, 0x09, 0x07, 0x4e, 0xa4, 0x4d, 0x09, 0x9d, 0xaa, 0x30, 0xf4, 0x36, 0xcc, 0x5a, 0xbe, - 0xeb, 0xda, 0xd1, 0x2e, 0x09, 0x43, 0xdc, 0x8d, 0xeb, 0xf6, 0x2c, 0x90, 0x51, 0x12, 0x80, 0xcd, - 0x41, 0xd4, 0xf3, 0x03, 0xad, 0x21, 0x28, 0xa9, 0x30, 0x74, 0x1b, 0x40, 0xcc, 0xaf, 0xe3, 0x28, - 0x2e, 0xec, 0xd7, 0x8e, 0x76, 0x1a, 0x3f, 0xb4, 0x5d, 0x62, 0x2a, 0xab, 0xd1, 0xa7, 0x99, 0x23, - 0x3e, 0x29, 0x23, 0xa7, 0x39, 0xd1, 0x6f, 0xa8, 0x9a, 0x2e, 0x70, 0x08, 0xb3, 0x68, 0xad, 0xee, - 0xc3, 0xfc, 0x5d, 0x9b, 0x99, 0x70, 0x3f, 0x3c, 0x99, 0x0c, 0xfb, 0x01, 0x54, 0x19, 0x33, 0x66, - 0xc1, 0x76, 0x80, 0x3d, 0xab, 0x47, 0x84, 0xab, 0x34, 0xcc, 0x64, 0xce, 0x22, 0x21, 0xc2, 0x5d, - 0xe6, 0x92, 0x0c, 0xce, 0xc7, 0xfa, 0xef, 0xcb, 0x42, 0xd2, 0x4d, 0x4a, 0xc3, 0xaf, 0xbf, 0x53, - 0x2c, 0xae, 0x5d, 0x2b, 0xc3, 0xb5, 0x6b, 0x4e, 0xe4, 0xaf, 0x52, 0xbb, 0xbe, 0xa2, 0xda, 0x48, - 0x1f, 0xc0, 0xd4, 0x26, 0xa5, 0x4c, 0x10, 0xb4, 0x0e, 0x55, 0x4c, 0x69, 0x1c, 0x9b, 0xe7, 0x72, - 0x1e, 0xc3, 0x50, 0xd8, 0x7f, 0x29, 0x12, 0x47, 0x6d, 0x5e, 0x81, 0x46, 0x02, 0x7a, 0x19, 0xdb, - 0x86, 0xca, 0x76, 0x15, 0x40, 0x34, 0x67, 0xb7, 0xbc, 0x7d, 0x9f, 0x99, 0x94, 0x45, 0x75, 0x9c, - 0xf0, 0xd8, 0x58, 0xbf, 0x1a, 0x63, 0x70, 0xd9, 0xde, 0x85, 0x9a, 0x1d, 0x11, 0x37, 0x16, 0x6e, - 0x59, 0x15, 0x2e, 0x25, 0x64, 0x0a, 0x24, 0xfd, 0x4f, 0x75, 0x38, 0xcb, 0x2c, 0xf6, 0x80, 0xe7, - 0x83, 0x4d, 0x4a, 0xaf, 0x93, 0x08, 0xdb, 0x4e, 0xf8, 0xe9, 0x80, 0x04, 0x87, 0xaf, 0xd9, 0x31, - 0xba, 0x30, 0x29, 0xd2, 0x89, 0xcc, 0x99, 0xaf, 0xbc, 0x4f, 0x97, 0xe4, 0xd3, 0xe6, 0xbc, 0xf2, - 0x7a, 0x9a, 0xf3, 0xa2, 0x66, 0xb9, 0x7a, 0x42, 0xcd, 0xf2, 0xe8, 0xfb, 0x12, 0xe5, 0x16, 0x66, - 0x32, 0x7b, 0x0b, 0x53, 0xd0, 0x83, 0x4e, 0x1d, 0xb5, 0x07, 0xad, 0x17, 0xf6, 0xa0, 0x6e, 0x61, - 0x1c, 0x37, 0xb8, 0xba, 0xbf, 0xab, 0x7a, 0xe0, 0x48, 0x5f, 0x3b, 0x4e, 0x37, 0x0a, 0xaf, 0xb5, - 0x1b, 0xfd, 0x2c, 0xd3, 0x5d, 0x8a, 0xfb, 0x9d, 0xf7, 0x8f, 0xb6, 0xa7, 0x31, 0x7d, 0xe6, 0xff, - 0x5d, 0xc7, 0xf6, 0x0b, 0x5e, 0xa8, 0x53, 0x3f, 0xd5, 0x41, 0x52, 0xcf, 0xb0, 0x73, 0x88, 0xd5, - 0x10, 0x32, 0x69, 0xb1, 0x31, 0xba, 0x04, 0x55, 0xa6, 0x64, 0xd9, 0x49, 0x9d, 0x51, 0xf5, 0xc9, - 0x2c, 0xb1, 0x49, 0xe9, 0x03, 0x4a, 0x2c, 0x93, 0x23, 0xa1, 0xab, 0xd0, 0x48, 0x1c, 0x5f, 0x46, - 0xd6, 0x9b, 0xea, 0x8a, 0x24, 0x4e, 0xe2, 0x65, 0x29, 0x3a, 0x5b, 0xdb, 0xb1, 0x03, 0x62, 0xf1, - 0x3e, 0xa3, 0x36, 0xbc, 0xf6, 0x7a, 0xfc, 0x31, 0x59, 0x9b, 0xa0, 0xa3, 0x75, 0x98, 0x14, 0x17, - 0x62, 0x3c, 0x82, 0xa6, 0x37, 0xce, 0x0e, 0x27, 0xd3, 0x78, 0x95, 0x44, 0xd4, 0xbf, 0x2c, 0xc1, - 0x5b, 0xa9, 0x43, 0xc4, 0xd1, 0x14, 0xb7, 0x7a, 0x5f, 0xff, 0x89, 0x7b, 0x01, 0xe6, 0x78, 0x6f, - 0x99, 0xde, 0x8b, 0x89, 0x2b, 0xda, 0x1c, 0x54, 0xff, 0x5d, 0x09, 0xce, 0x0f, 0xef, 0x63, 0xab, - 0x87, 0x83, 0x28, 0x31, 0xef, 0x49, 0xec, 0x25, 0x3e, 0xf0, 0xca, 0xe9, 0x81, 0x97, 0xd9, 0x5f, - 0x25, 0xbb, 0x3f, 0xfd, 0x0f, 0x65, 0x98, 0x56, 0x1c, 0xa8, 0xe8, 0xc0, 0x64, 0x95, 0x2d, 0xf7, - 0x5b, 0x7e, 0x9b, 0xc0, 0x0f, 0x85, 0x86, 0xa9, 0x40, 0x50, 0x1f, 0x80, 0xe2, 0x00, 0xbb, 0x24, - 0x22, 0x01, 0xcb, 0xe4, 0x2c, 0xe2, 0xef, 0x1c, 0x3f, 0xbb, 0xec, 0xc5, 0x34, 0x4d, 0x85, 0x3c, - 0x2b, 0xcd, 0x39, 0xeb, 0x50, 0xe6, 0x6f, 0x39, 0x43, 0xcf, 0x60, 0x6e, 0xdf, 0x76, 0xc8, 0x5e, - 0x2a, 0xc8, 0x24, 0x17, 0xe4, 0xfe, 0xf1, 0x05, 0xb9, 0xa9, 0xd2, 0x35, 0x73, 0x6c, 0xf4, 0x35, - 0x58, 0xc8, 0xc7, 0x13, 0x13, 0xd2, 0x76, 0x71, 0x37, 0xd1, 0x96, 0x9c, 0xe9, 0x08, 0x16, 0xf2, - 0xf1, 0xa3, 0xff, 0xb3, 0x0c, 0xa7, 0x13, 0x72, 0x9b, 0x9e, 0xe7, 0x0f, 0x3c, 0x8b, 0xb7, 0x58, - 0x85, 0xb6, 0x58, 0x82, 0x5a, 0x64, 0x47, 0x4e, 0x52, 0xf8, 0xf0, 0x09, 0x3b, 0xbb, 0x22, 0xdf, - 0x77, 0x22, 0x9b, 0x4a, 0x03, 0xc7, 0x53, 0x61, 0x7b, 0xde, 0xb5, 0x75, 0x78, 0x26, 0xa8, 0x9b, - 0xc9, 0x9c, 0x7d, 0x63, 0x55, 0x0d, 0xef, 0x57, 0x84, 0x32, 0x93, 0x39, 0xf7, 0x7b, 0xdf, 0x71, - 0x88, 0xc5, 0xd4, 0xa1, 0x74, 0x34, 0x39, 0x28, 0xef, 0x94, 0xa2, 0xc0, 0xf6, 0xba, 0xb2, 0x9f, - 0x91, 0x33, 0x26, 0x27, 0x0e, 0x02, 0x7c, 0xa8, 0xd5, 0xb9, 0x02, 0xc4, 0x04, 0x5d, 0x83, 0x8a, - 0x8b, 0xa9, 0x3c, 0xe8, 0xd6, 0x32, 0xd9, 0xa1, 0x48, 0x03, 0xc6, 0x2e, 0xa6, 0xe2, 0x24, 0x60, - 0xcb, 0x9a, 0x1f, 0xb0, 0x7e, 0x9a, 0x7e, 0xf5, 0x92, 0xf0, 0x09, 0xcc, 0x66, 0x92, 0x0f, 0x7a, - 0x04, 0xcb, 0xa9, 0x47, 0xa9, 0x0c, 0x65, 0x11, 0xf8, 0xd6, 0x4b, 0x25, 0x33, 0x47, 0x10, 0xd0, - 0x9f, 0xc2, 0x22, 0x73, 0x19, 0x1e, 0xf8, 0x27, 0xd4, 0xda, 0x7c, 0x04, 0x8d, 0x84, 0x65, 0xa1, - 0xcf, 0x34, 0xa1, 0x7e, 0x10, 0x37, 0x6d, 0xa2, 0xb7, 0x49, 0xe6, 0xfa, 0x26, 0x20, 0x55, 0x5e, - 0x79, 0x02, 0x5d, 0xca, 0x16, 0xc5, 0xa7, 0xf3, 0xc7, 0x0d, 0x47, 0x8f, 0x6b, 0xe2, 0xbf, 0x97, - 0x61, 0x7e, 0xdb, 0xe6, 0x57, 0x6b, 0x27, 0x94, 0xe4, 0xd6, 0x60, 0x21, 0x1c, 0xb4, 0x5d, 0xbf, - 0x33, 0x70, 0x88, 0x2c, 0x0a, 0xe4, 0x49, 0x3f, 0x04, 0x1f, 0x97, 0xfc, 0x92, 0x6b, 0x94, 0xaa, - 0x72, 0x8d, 0x72, 0x0d, 0xce, 0xde, 0x23, 0xcf, 0xe4, 0x7e, 0xb6, 0x1d, 0xbf, 0xdd, 0xb6, 0xbd, - 0x6e, 0xcc, 0xa4, 0xc6, 0x99, 0x8c, 0x46, 0x28, 0x2a, 0x15, 0x27, 0x8b, 0x4b, 0xc5, 0xe4, 0x3a, - 0x60, 0x8b, 0x37, 0xda, 0xb2, 0xa2, 0xcc, 0xc0, 0xf4, 0x9f, 0x97, 0x60, 0x21, 0xd5, 0xac, 0xb4, - 0xcd, 0x15, 0x11, 0x43, 0xc2, 0x32, 0xe7, 0x55, 0xcb, 0xe4, 0x51, 0xff, 0xf3, 0xf0, 0x99, 0x51, - 0xc3, 0xe7, 0x57, 0x65, 0x38, 0xbd, 0x6d, 0x47, 0x71, 0xe2, 0xb2, 0xff, 0xd7, 0xac, 0x5c, 0x60, - 0x93, 0xea, 0xd1, 0x6c, 0x52, 0x2b, 0xb0, 0x89, 0x01, 0xcb, 0x79, 0x65, 0x48, 0xc3, 0x2c, 0x41, - 0x8d, 0x79, 0x50, 0x7c, 0xaf, 0x20, 0x26, 0xfa, 0x3f, 0x26, 0xe1, 0xdc, 0x67, 0xb4, 0x83, 0xa3, - 0xe4, 0xaa, 0xf1, 0xa6, 0x1f, 0xec, 0xb1, 0x4f, 0x27, 0xa3, 0xc5, 0xdc, 0x13, 0x72, 0x79, 0xec, - 0x13, 0x72, 0x65, 0xcc, 0x13, 0x72, 0xf5, 0x48, 0x4f, 0xc8, 0xb5, 0x13, 0x7b, 0x42, 0x1e, 0xee, - 0xb5, 0x26, 0x0b, 0x7b, 0xad, 0x47, 0x99, 0x7e, 0x64, 0x8a, 0x87, 0xcd, 0x77, 0xd4, 0xb0, 0x19, - 0x6b, 0x9d, 0xb1, 0x6f, 0x5f, 0xb9, 0x97, 0xd7, 0xfa, 0x4b, 0x5f, 0x5e, 0x1b, 0xc3, 0x2f, 0xaf, - 0xc5, 0x8f, 0x77, 0x30, 0xf2, 0xf1, 0xee, 0x02, 0xcc, 0x85, 0x87, 0x9e, 0x45, 0x3a, 0xc9, 0x05, - 0xf4, 0xb4, 0xd8, 0x76, 0x16, 0x9a, 0x89, 0x88, 0x99, 0x5c, 0x44, 0x24, 0x9e, 0x3a, 0xab, 0x78, - 0x6a, 0x51, 0x9c, 0xcc, 0x15, 0xc6, 0xc9, 0x7f, 0x4f, 0x13, 0xf5, 0x39, 0xac, 0x8c, 0xb2, 0x9e, - 0x0c, 0x4a, 0x0d, 0xa6, 0xac, 0x1e, 0xf6, 0xba, 0xfc, 0xba, 0x8f, 0x77, 0xf5, 0x72, 0x3a, 0xae, - 0xea, 0xdf, 0xf8, 0x23, 0xc0, 0x62, 0x5a, 0xcd, 0xb3, 0xbf, 0xb6, 0x45, 0xd0, 0x7d, 0x58, 0xd8, - 0x96, 0xbf, 0x32, 0x49, 0x6e, 0xe2, 0xc7, 0x3d, 0xa5, 0x35, 0xdf, 0x2c, 0xfe, 0x28, 0x44, 0xd3, - 0x27, 0x90, 0x05, 0x67, 0xf3, 0x04, 0xd3, 0x57, 0xbb, 0xb7, 0xc7, 0x50, 0x4e, 0xb0, 0x5e, 0xc6, - 0xe2, 0x62, 0x09, 0x3d, 0x82, 0xb9, 0xec, 0xdb, 0x12, 0xca, 0x94, 0x37, 0x85, 0xcf, 0x5d, 0x4d, - 0x7d, 0x1c, 0x4a, 0x22, 0xff, 0x63, 0xe6, 0x06, 0x99, 0x67, 0x14, 0xa4, 0x67, 0x3b, 0xfd, 0xa2, - 0x87, 0xa8, 0xe6, 0x37, 0xc7, 0xe2, 0x24, 0xd4, 0x3f, 0x82, 0x7a, 0x7c, 0x47, 0x9c, 0x55, 0x73, - 0xee, 0xe6, 0xb8, 0xb9, 0x90, 0xa5, 0xb7, 0x1f, 0xea, 0x13, 0xe8, 0x63, 0xb1, 0x78, 0x93, 0xd2, - 0x82, 0xc5, 0xca, 0xcd, 0x68, 0xf3, 0x54, 0xc1, 0x6d, 0xa4, 0x3e, 0x81, 0xbe, 0x07, 0xd3, 0x6c, - 0xb4, 0x27, 0x7f, 0xdf, 0xb1, 0x6c, 0x88, 0x9f, 0x13, 0x19, 0xf1, 0xcf, 0x89, 0x8c, 0x1b, 0x2e, - 0x8d, 0x0e, 0x9b, 0x05, 0xd7, 0x85, 0x92, 0xc0, 0x63, 0x98, 0xdd, 0x26, 0x51, 0xda, 0xdd, 0xa3, - 0xf3, 0x47, 0xba, 0x03, 0x69, 0xea, 0x79, 0xb4, 0xe1, 0x0b, 0x02, 0x7d, 0x02, 0xfd, 0xba, 0x04, - 0xa7, 0xb6, 0x49, 0x94, 0xef, 0x97, 0xd1, 0x7b, 0xc5, 0x4c, 0x46, 0xf4, 0xd5, 0xcd, 0x7b, 0xc7, - 0x8d, 0xc9, 0x2c, 0x59, 0x7d, 0x02, 0xfd, 0xa6, 0x04, 0x67, 0x14, 0xc1, 0xd4, 0x06, 0x18, 0xad, - 0x8f, 0x17, 0xae, 0xa0, 0x59, 0x6e, 0xde, 0x3e, 0xe6, 0xcf, 0x76, 0x14, 0x92, 0xfa, 0x04, 0xda, - 0xe3, 0x36, 0x49, 0xeb, 0x5d, 0x74, 0xae, 0xb0, 0xb0, 0x4d, 0xb8, 0xaf, 0x8c, 0xfa, 0x9c, 0xd8, - 0xe1, 0x36, 0x4c, 0x6f, 0x93, 0x28, 0x2e, 0xbc, 0xb2, 0x9e, 0x96, 0xab, 0x89, 0xb3, 0xa1, 0x9a, - 0xaf, 0xd5, 0xb8, 0xc7, 0x2c, 0x0a, 0x5a, 0x4a, 0x71, 0x91, 0x8d, 0xd5, 0xc2, 0x2a, 0x2c, 0xeb, - 0x31, 0xc5, 0xb5, 0x89, 0x3e, 0x81, 0x9e, 0xc2, 0x72, 0x71, 0xaa, 0x44, 0xef, 0x1c, 0xf9, 0x30, - 0x6c, 0xae, 0x1d, 0x05, 0x35, 0x66, 0xf9, 0xc9, 0xe6, 0x9f, 0x5f, 0xac, 0x94, 0xfe, 0xfa, 0x62, - 0xa5, 0xf4, 0xaf, 0x17, 0x2b, 0xa5, 0x2f, 0x2e, 0xbf, 0xe4, 0xe7, 0x7d, 0xca, 0x6f, 0x11, 0x31, - 0xb5, 0x2d, 0xc7, 0x26, 0x5e, 0xd4, 0x9e, 0xe4, 0xf1, 0x76, 0xf9, 0xdf, 0x01, 0x00, 0x00, 0xff, - 0xff, 0x65, 0x87, 0x9f, 0xa4, 0xaa, 0x28, 0x00, 0x00, + // 2664 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x1a, 0x4d, 0x6f, 0x1c, 0x49, + 0xd5, 0xf3, 0xe9, 0x99, 0x37, 0xfe, 0xac, 0xd8, 0x4e, 0x67, 0x76, 0x63, 0xbc, 0xcd, 0x6e, 0xe4, + 0xf5, 0xee, 0xce, 0x60, 0xef, 0x47, 0x96, 0x6c, 0x58, 0xe4, 0x75, 0x12, 0x3b, 0x1f, 0x4e, 0xbc, + 0x9d, 0xec, 0xa2, 0x2c, 0x01, 0x54, 0xd3, 0x53, 0x9e, 0xe9, 0x4c, 0x7f, 0x54, 0xba, 0x7b, 0x1c, + 0x1c, 0x09, 0x09, 0x09, 0xc4, 0x85, 0x3b, 0x12, 0xdc, 0x10, 0xbf, 0x01, 0x71, 0xe4, 0xb4, 0x82, + 0x13, 0x42, 0x5c, 0x90, 0xb8, 0x80, 0xf2, 0x4b, 0x50, 0x7d, 0x74, 0x77, 0x75, 0x4f, 0x7b, 0xec, + 0xc5, 0x89, 0x17, 0xb8, 0xd8, 0x55, 0xaf, 0xab, 0xde, 0x7b, 0xf5, 0xbe, 0xea, 0xbd, 0x57, 0x03, + 0x97, 0x7c, 0x42, 0xbd, 0x80, 0xf8, 0x07, 0xc4, 0x6f, 0xf3, 0xa1, 0x15, 0x7a, 0xfe, 0xa1, 0x32, + 0x6c, 0x51, 0xdf, 0x0b, 0x3d, 0x04, 0x09, 0xa4, 0xa9, 0x0f, 0x3e, 0x0c, 0x5a, 0x96, 0xd7, 0xc6, + 0xd4, 0x6a, 0x9b, 0x9e, 0x4f, 0xda, 0x07, 0xeb, 0xed, 0x1e, 0x71, 0x89, 0x8f, 0x43, 0xd2, 0x15, + 0xeb, 0x9b, 0xef, 0x25, 0x6b, 0x1c, 0x6c, 0xf6, 0x2d, 0x97, 0xf8, 0x87, 0x6d, 0x3a, 0xe8, 0x31, + 0x40, 0xd0, 0x76, 0x48, 0x88, 0xf3, 0x76, 0xdd, 0xe9, 0x59, 0x61, 0x7f, 0xd8, 0x69, 0x99, 0x9e, + 0xd3, 0xc6, 0x7e, 0xcf, 0xa3, 0xbe, 0xf7, 0x98, 0x0f, 0xde, 0x31, 0xbb, 0xed, 0x83, 0x8d, 0x04, + 0x01, 0xa6, 0xd4, 0xb6, 0x4c, 0x1c, 0x5a, 0x9e, 0xdb, 0x3e, 0x58, 0xc7, 0x36, 0xed, 0xe3, 0x51, + 0x6c, 0xaf, 0xf4, 0x3c, 0xaf, 0x67, 0x93, 0x36, 0x9f, 0x75, 0x86, 0xfb, 0x6d, 0xe2, 0xd0, 0x50, + 0x1e, 0x48, 0xff, 0xcb, 0x34, 0xcc, 0xee, 0x62, 0xd7, 0xda, 0x27, 0x41, 0x68, 0x90, 0x27, 0x43, + 0x12, 0x84, 0xe8, 0x11, 0x94, 0xd9, 0x31, 0xb5, 0xc2, 0x4a, 0x61, 0xb5, 0xb1, 0xb1, 0xd3, 0x4a, + 0xb8, 0x69, 0x45, 0xdc, 0xf0, 0xc1, 0x8f, 0xcc, 0x6e, 0xeb, 0x60, 0xa3, 0x45, 0x07, 0xbd, 0x16, + 0xe3, 0xa6, 0xa5, 0x70, 0xd3, 0x8a, 0xb8, 0x69, 0x19, 0xb1, 0xc0, 0x0c, 0x8e, 0x15, 0x35, 0xa1, + 0xe6, 0x93, 0x03, 0x2b, 0xb0, 0x3c, 0x57, 0x2b, 0xae, 0x14, 0x56, 0xeb, 0x46, 0x3c, 0x47, 0x1a, + 0x4c, 0xba, 0xde, 0x16, 0x36, 0xfb, 0x44, 0x2b, 0xad, 0x14, 0x56, 0x6b, 0x46, 0x34, 0x45, 0x2b, + 0xd0, 0xc0, 0x94, 0xde, 0xc1, 0x1d, 0x62, 0xdf, 0x26, 0x87, 0x5a, 0x99, 0x6f, 0x54, 0x41, 0x6c, + 0x2f, 0xa6, 0xf4, 0x2e, 0x76, 0x88, 0x56, 0xe1, 0x5f, 0xa3, 0x29, 0x7a, 0x15, 0xea, 0x2e, 0x76, + 0x48, 0x40, 0xb1, 0x49, 0xb4, 0x1a, 0xff, 0x96, 0x00, 0xd0, 0x4f, 0x60, 0x5e, 0x61, 0xfc, 0xbe, + 0x37, 0xf4, 0x4d, 0xa2, 0x01, 0x3f, 0xfa, 0xbd, 0xd3, 0x1d, 0x7d, 0x33, 0x8b, 0xd6, 0x18, 0xa5, + 0x84, 0x7e, 0x08, 0x15, 0x6e, 0x53, 0x5a, 0x63, 0xa5, 0xf4, 0x42, 0xa5, 0x2d, 0xd0, 0x22, 0x17, + 0x26, 0xa9, 0x3d, 0xec, 0x59, 0x6e, 0xa0, 0x4d, 0x71, 0x0a, 0x0f, 0x4e, 0x47, 0x61, 0xcb, 0x73, + 0xf7, 0xad, 0xde, 0x2e, 0x76, 0x71, 0x8f, 0x38, 0xc4, 0x0d, 0xf7, 0x38, 0x72, 0x23, 0x22, 0x82, + 0x9e, 0xc1, 0xdc, 0x60, 0x18, 0x84, 0x9e, 0x63, 0x3d, 0x23, 0xf7, 0x28, 0xdb, 0x1b, 0x68, 0xd3, + 0x5c, 0x9a, 0x77, 0x4f, 0x47, 0xf8, 0x76, 0x06, 0xab, 0x31, 0x42, 0x87, 0x19, 0xc9, 0x60, 0xd8, + 0x21, 0x9f, 0x13, 0x9f, 0x5b, 0xd7, 0x8c, 0x30, 0x12, 0x05, 0x24, 0xcc, 0xc8, 0x92, 0xb3, 0x40, + 0x9b, 0x5d, 0x29, 0x09, 0x33, 0x8a, 0x41, 0x68, 0x15, 0x66, 0x0f, 0x88, 0x6f, 0xed, 0x1f, 0xde, + 0xb7, 0x7a, 0x2e, 0x0e, 0x87, 0x3e, 0xd1, 0xe6, 0xb8, 0x29, 0x66, 0xc1, 0xc8, 0x81, 0xe9, 0x3e, + 0xb1, 0x1d, 0x26, 0xf2, 0x2d, 0x9f, 0x74, 0x03, 0x6d, 0x9e, 0xcb, 0x77, 0xfb, 0xf4, 0x1a, 0xe4, + 0xe8, 0x8c, 0x34, 0x76, 0xc6, 0x98, 0xeb, 0x19, 0xd2, 0x53, 0x84, 0x8f, 0x20, 0xc1, 0x58, 0x06, + 0x8c, 0x2e, 0xc1, 0x4c, 0xe8, 0x63, 0x73, 0x60, 0xb9, 0xbd, 0x5d, 0x12, 0xf6, 0xbd, 0xae, 0x76, + 0x8e, 0x4b, 0x22, 0x03, 0x45, 0x26, 0x20, 0xe2, 0xe2, 0x8e, 0x4d, 0xba, 0xc2, 0x16, 0x1f, 0x1c, + 0x52, 0x12, 0x68, 0x0b, 0xfc, 0x14, 0xef, 0xb6, 0x94, 0xd8, 0x97, 0x09, 0x10, 0xad, 0xeb, 0x23, + 0xbb, 0xae, 0xbb, 0xa1, 0x7f, 0x68, 0xe4, 0xa0, 0x43, 0x03, 0x68, 0xb0, 0x73, 0x44, 0xa6, 0xb0, + 0xc8, 0x4d, 0xe1, 0xe6, 0xe9, 0x64, 0xb4, 0x93, 0x20, 0x34, 0x54, 0xec, 0xa8, 0x05, 0xa8, 0x8f, + 0x83, 0xdd, 0xa1, 0x1d, 0x5a, 0xd4, 0x26, 0x82, 0x8d, 0x40, 0x5b, 0xe2, 0x62, 0xca, 0xf9, 0x82, + 0x6e, 0x03, 0xf8, 0x64, 0x3f, 0x5a, 0x77, 0x9e, 0x9f, 0xfc, 0xad, 0x71, 0x27, 0x37, 0xe2, 0xd5, + 0xe2, 0xc4, 0xca, 0x76, 0xd4, 0x81, 0x73, 0x0a, 0xb7, 0xbb, 0x24, 0xc4, 0x5d, 0x1c, 0x62, 0x4d, + 0xe3, 0x27, 0xfe, 0x56, 0x4b, 0xdc, 0x04, 0x2d, 0xf5, 0x26, 0x48, 0x8e, 0xc9, 0x6e, 0x82, 0xd6, + 0xc1, 0x7a, 0xeb, 0x5e, 0xe7, 0x31, 0x31, 0x43, 0xb6, 0xd7, 0xc8, 0x43, 0xc6, 0x0e, 0xc8, 0x44, + 0x45, 0xcc, 0x50, 0x46, 0x14, 0x1e, 0x3a, 0x2e, 0x70, 0x33, 0xce, 0xf9, 0xc2, 0xec, 0x5d, 0x42, + 0x79, 0x60, 0x6c, 0x0a, 0x8f, 0x50, 0x40, 0xcd, 0xeb, 0x70, 0xfe, 0x08, 0x75, 0xa2, 0x39, 0x28, + 0x0d, 0xc8, 0x21, 0xbf, 0x06, 0xea, 0x06, 0x1b, 0xa2, 0x05, 0xa8, 0x1c, 0x60, 0x7b, 0x48, 0x78, + 0xe0, 0xae, 0x19, 0x62, 0x72, 0xa5, 0xf8, 0x61, 0xa1, 0xf9, 0x8b, 0x02, 0xcc, 0x66, 0x84, 0x93, + 0xb3, 0xff, 0x07, 0xea, 0xfe, 0x17, 0xe0, 0x2a, 0xfb, 0x0f, 0xb0, 0xdf, 0x23, 0xa1, 0xc2, 0x88, + 0xfe, 0xb7, 0x02, 0x68, 0x19, 0xad, 0x7d, 0xcf, 0x0a, 0xfb, 0x37, 0x2c, 0x9b, 0x04, 0xe8, 0x32, + 0x4c, 0xfa, 0x02, 0x26, 0x2f, 0xb7, 0x57, 0xc6, 0x28, 0x7b, 0x67, 0xc2, 0x88, 0x56, 0xa3, 0x8f, + 0xa1, 0xe6, 0x44, 0x0a, 0x15, 0xbc, 0xaf, 0xe4, 0xed, 0x64, 0x54, 0x22, 0x5d, 0xed, 0x4c, 0x18, + 0xf1, 0x1e, 0xf4, 0x3e, 0x54, 0xcc, 0xfe, 0xd0, 0x1d, 0xf0, 0x6b, 0xad, 0xb1, 0x71, 0xf1, 0xa8, + 0xcd, 0x5b, 0x6c, 0xd1, 0xce, 0x84, 0x21, 0x56, 0x7f, 0x52, 0x85, 0x32, 0xc5, 0x7e, 0xa8, 0xdf, + 0x80, 0x85, 0x3c, 0x12, 0xec, 0x2e, 0x35, 0xfb, 0xc4, 0x1c, 0x04, 0x43, 0x47, 0x8a, 0x39, 0x9e, + 0x23, 0x04, 0xe5, 0xc0, 0x7a, 0x26, 0x44, 0x5d, 0x32, 0xf8, 0x58, 0x7f, 0x13, 0xe6, 0x47, 0xa8, + 0x31, 0xa5, 0x0a, 0xde, 0x18, 0x86, 0x29, 0x49, 0x5a, 0x1f, 0xc2, 0xe2, 0x03, 0x2e, 0x8b, 0xf8, + 0x42, 0x39, 0x8b, 0xec, 0x40, 0xdf, 0x81, 0xa5, 0x2c, 0xd9, 0x80, 0x7a, 0x6e, 0x40, 0x98, 0xe9, + 0xf3, 0x08, 0x6c, 0x91, 0x6e, 0xf2, 0x95, 0x73, 0x51, 0x33, 0x72, 0xbe, 0xe8, 0xbf, 0x2b, 0xc2, + 0x92, 0x41, 0x02, 0xcf, 0x3e, 0x20, 0x51, 0x78, 0x3c, 0x9b, 0x04, 0xe7, 0xfb, 0x50, 0xc2, 0x94, + 0x4a, 0x33, 0xb9, 0xf9, 0xc2, 0x52, 0x08, 0x83, 0x61, 0x45, 0x6f, 0xc3, 0x3c, 0x76, 0x3a, 0x56, + 0x6f, 0xe8, 0x0d, 0x83, 0xe8, 0x58, 0xdc, 0xa8, 0xea, 0xc6, 0xe8, 0x07, 0xe6, 0xfe, 0x01, 0xf7, + 0xc8, 0x9b, 0x6e, 0x97, 0xfc, 0x98, 0x67, 0x4d, 0x25, 0x43, 0x05, 0xe9, 0x26, 0x9c, 0x1f, 0x11, + 0x92, 0x14, 0xb8, 0x9a, 0xa8, 0x15, 0x32, 0x89, 0x5a, 0x2e, 0x1b, 0xc5, 0x23, 0xd8, 0xd0, 0x7f, + 0x5a, 0x80, 0x5a, 0x64, 0x77, 0x68, 0x0d, 0xe6, 0x4c, 0xcf, 0xa1, 0x96, 0x4d, 0xba, 0x11, 0x4c, + 0xa2, 0x1f, 0x81, 0x33, 0xfe, 0x7d, 0xfc, 0x34, 0x5e, 0x26, 0x08, 0xa8, 0x20, 0x66, 0xe5, 0x14, + 0x87, 0x7d, 0x29, 0x02, 0x3e, 0x66, 0x30, 0xdb, 0x72, 0x09, 0x3f, 0x6e, 0xc5, 0xe0, 0x63, 0xfd, + 0x0b, 0x98, 0xba, 0x46, 0x28, 0x71, 0xbb, 0xc4, 0x35, 0x2d, 0x12, 0xf0, 0x35, 0x9e, 0x39, 0x90, + 0x94, 0xf9, 0x98, 0xc1, 0xba, 0x84, 0x06, 0x92, 0x0c, 0x1f, 0x23, 0x1d, 0xa6, 0x58, 0x0c, 0xb0, + 0x7c, 0x9e, 0xec, 0x04, 0x92, 0x4e, 0x0a, 0xa6, 0x07, 0x70, 0x4e, 0xd1, 0x53, 0x9c, 0x49, 0x2c, + 0x03, 0x60, 0x4a, 0xa3, 0x64, 0x44, 0x10, 0x52, 0x20, 0xe8, 0x2a, 0x4c, 0x75, 0x15, 0x96, 0xa4, + 0xc1, 0x68, 0x6a, 0x68, 0x50, 0x59, 0x36, 0x52, 0xab, 0xf5, 0x2f, 0x4b, 0x30, 0x97, 0x04, 0x2c, + 0xa9, 0xb2, 0x0d, 0xa8, 0x3b, 0x12, 0x16, 0x68, 0x05, 0x7e, 0x9d, 0x2d, 0xe4, 0x46, 0xb8, 0x64, + 0x59, 0x3a, 0x3b, 0x2e, 0x66, 0xb3, 0xe3, 0x25, 0xa8, 0x8a, 0xb2, 0x48, 0x9e, 0x5c, 0xce, 0x52, + 0xc6, 0x51, 0xce, 0x18, 0xc7, 0x32, 0x40, 0x10, 0xdf, 0x25, 0x5a, 0x55, 0x1c, 0x3c, 0x81, 0x30, + 0x99, 0x8a, 0x5c, 0xca, 0x20, 0xc1, 0xd0, 0x0e, 0xb5, 0x49, 0x21, 0x53, 0x15, 0x86, 0x5e, 0x87, + 0x69, 0xd3, 0x73, 0x1c, 0x2b, 0xdc, 0x25, 0x41, 0x80, 0x7b, 0x51, 0xde, 0x9e, 0x06, 0x32, 0x4c, + 0x02, 0xb0, 0x39, 0x0c, 0xfb, 0x9e, 0xaf, 0xd5, 0x05, 0x26, 0x15, 0x86, 0x6e, 0x01, 0x88, 0xf9, + 0x35, 0x1c, 0x46, 0x89, 0xfd, 0xda, 0xc9, 0x6e, 0xe3, 0x07, 0x96, 0x43, 0x0c, 0x65, 0x37, 0xfa, + 0x34, 0x75, 0xc5, 0xc7, 0x69, 0x64, 0x83, 0x23, 0xfd, 0x86, 0x2a, 0xe9, 0x1c, 0x83, 0x30, 0xf2, + 0xf6, 0xea, 0x1e, 0xcc, 0xde, 0xb1, 0x98, 0x0a, 0xf7, 0x83, 0xb3, 0x89, 0xb0, 0x1f, 0x40, 0x99, + 0x11, 0x63, 0x1a, 0xec, 0xf8, 0xd8, 0x35, 0xfb, 0x44, 0x98, 0x4a, 0xdd, 0x88, 0xe7, 0xcc, 0x13, + 0x42, 0xdc, 0x63, 0x26, 0xc9, 0xe0, 0x7c, 0xac, 0xff, 0xa1, 0x28, 0x38, 0xdd, 0xa4, 0x34, 0xf8, + 0xfa, 0x2b, 0xc5, 0xfc, 0xdc, 0xb5, 0x34, 0x9a, 0xbb, 0x66, 0x58, 0xfe, 0x2a, 0xb9, 0xeb, 0x0b, + 0xca, 0x8d, 0xf4, 0x21, 0x4c, 0x6e, 0x52, 0xca, 0x18, 0x41, 0xeb, 0x50, 0xc6, 0x94, 0x46, 0xbe, + 0x79, 0x31, 0x63, 0x31, 0x6c, 0x09, 0xfb, 0x2f, 0x59, 0xe2, 0x4b, 0x9b, 0x97, 0xa1, 0x1e, 0x83, + 0x8e, 0x23, 0x5b, 0x57, 0xc9, 0xae, 0x00, 0x88, 0xe2, 0xec, 0xa6, 0xbb, 0xef, 0x31, 0x95, 0x32, + 0xaf, 0x8e, 0x02, 0x1e, 0x1b, 0xeb, 0x57, 0xa2, 0x15, 0x9c, 0xb7, 0xb7, 0xa1, 0x62, 0x85, 0xc4, + 0x89, 0x98, 0x5b, 0x52, 0x99, 0x4b, 0x10, 0x19, 0x62, 0x91, 0xfe, 0xa7, 0x1a, 0x5c, 0x60, 0x1a, + 0xbb, 0xcf, 0xe3, 0xc1, 0x26, 0xa5, 0xd7, 0x48, 0x88, 0x2d, 0x3b, 0xf8, 0x74, 0x48, 0xfc, 0xc3, + 0x97, 0x6c, 0x18, 0x3d, 0xa8, 0x8a, 0x70, 0x22, 0x63, 0xe6, 0x0b, 0xaf, 0xd3, 0x25, 0xfa, 0xa4, + 0x38, 0x2f, 0xbd, 0x9c, 0xe2, 0x3c, 0xaf, 0x58, 0x2e, 0x9f, 0x51, 0xb1, 0x7c, 0x74, 0xbf, 0x44, + 0xe9, 0xc2, 0x54, 0xd3, 0x5d, 0x98, 0x9c, 0x1a, 0x74, 0xf2, 0xa4, 0x35, 0x68, 0x2d, 0xb7, 0x06, + 0x75, 0x72, 0xfd, 0xb8, 0xce, 0xc5, 0xfd, 0x1d, 0xd5, 0x02, 0x8f, 0xb4, 0xb5, 0xd3, 0x54, 0xa3, + 0xf0, 0x52, 0xab, 0xd1, 0xcf, 0x52, 0xd5, 0xa5, 0xe8, 0xef, 0xbc, 0x7f, 0xb2, 0x33, 0x8d, 0xa9, + 0x33, 0xff, 0xef, 0x2a, 0xb6, 0x9f, 0xf3, 0x44, 0x9d, 0x7a, 0x89, 0x0c, 0xe2, 0x7c, 0x86, 0xdd, + 0x43, 0x2c, 0x87, 0x90, 0x41, 0x8b, 0x8d, 0xd1, 0x5b, 0x50, 0x66, 0x42, 0x96, 0x95, 0xd4, 0x79, + 0x55, 0x9e, 0x4c, 0x13, 0x9b, 0x94, 0xde, 0xa7, 0xc4, 0x34, 0xf8, 0x22, 0x74, 0x05, 0xea, 0xb1, + 0xe1, 0x4b, 0xcf, 0x7a, 0x55, 0xdd, 0x11, 0xfb, 0x49, 0xb4, 0x2d, 0x59, 0xce, 0xf6, 0x76, 0x2d, + 0x9f, 0x98, 0xbc, 0xce, 0xa8, 0x8c, 0xee, 0xbd, 0x16, 0x7d, 0x8c, 0xf7, 0xc6, 0xcb, 0xd1, 0x3a, + 0x54, 0x45, 0x43, 0x8c, 0x7b, 0x50, 0x63, 0xe3, 0xc2, 0x68, 0x30, 0x8d, 0x76, 0xc9, 0x85, 0xfa, + 0x97, 0x05, 0x78, 0x2d, 0x31, 0x88, 0xc8, 0x9b, 0xa2, 0x52, 0xef, 0xeb, 0xbf, 0x71, 0x2f, 0xc1, + 0x0c, 0xaf, 0x2d, 0x93, 0xbe, 0x98, 0x68, 0xd1, 0x66, 0xa0, 0xfa, 0xef, 0x0b, 0xf0, 0xc6, 0xe8, + 0x39, 0xb6, 0xfa, 0xd8, 0x0f, 0x63, 0xf5, 0x9e, 0xc5, 0x59, 0xa2, 0x0b, 0xaf, 0x98, 0x5c, 0x78, + 0xa9, 0xf3, 0x95, 0xd2, 0xe7, 0xd3, 0xff, 0x58, 0x84, 0x86, 0x62, 0x40, 0x79, 0x17, 0x26, 0xcb, + 0x6c, 0xb9, 0xdd, 0xf2, 0x6e, 0x02, 0xbf, 0x14, 0xea, 0x86, 0x02, 0x41, 0x03, 0x00, 0x8a, 0x7d, + 0xec, 0x90, 0x90, 0xf8, 0x2c, 0x92, 0x33, 0x8f, 0xbf, 0x7d, 0xfa, 0xe8, 0xb2, 0x17, 0xe1, 0x34, + 0x14, 0xf4, 0x2c, 0x35, 0xe7, 0xa4, 0x03, 0x19, 0xbf, 0xe5, 0x0c, 0x3d, 0x85, 0x99, 0x7d, 0xcb, + 0x26, 0x7b, 0x09, 0x23, 0x55, 0xce, 0xc8, 0xbd, 0xd3, 0x33, 0x72, 0x43, 0xc5, 0x6b, 0x64, 0xc8, + 0xe8, 0x6b, 0x30, 0x97, 0xf5, 0x27, 0xc6, 0xa4, 0xe5, 0xe0, 0x5e, 0x2c, 0x2d, 0x39, 0xd3, 0x11, + 0xcc, 0x65, 0xfd, 0x47, 0xff, 0x67, 0x11, 0x16, 0x63, 0x74, 0x9b, 0xae, 0xeb, 0x0d, 0x5d, 0x93, + 0x97, 0x58, 0xb9, 0xba, 0x58, 0x80, 0x4a, 0x68, 0x85, 0x76, 0x9c, 0xf8, 0xf0, 0x09, 0xbb, 0xbb, + 0x42, 0xcf, 0xb3, 0x43, 0x8b, 0x4a, 0x05, 0x47, 0x53, 0xa1, 0x7b, 0x5e, 0xb5, 0x75, 0x79, 0x24, + 0xa8, 0x19, 0xf1, 0x9c, 0x7d, 0x63, 0x59, 0x0d, 0xaf, 0x57, 0x84, 0x30, 0xe3, 0x39, 0xb7, 0x7b, + 0xcf, 0xb6, 0x89, 0xc9, 0xc4, 0xa1, 0x54, 0x34, 0x19, 0x28, 0xaf, 0x94, 0x42, 0xdf, 0x72, 0x7b, + 0xb2, 0x9e, 0x91, 0x33, 0xc6, 0x27, 0xf6, 0x7d, 0x7c, 0xa8, 0xd5, 0xb8, 0x00, 0xc4, 0x04, 0x5d, + 0x85, 0x92, 0x83, 0xa9, 0xbc, 0xe8, 0xd6, 0x52, 0xd1, 0x21, 0x4f, 0x02, 0xad, 0x5d, 0x4c, 0xc5, + 0x4d, 0xc0, 0xb6, 0x35, 0x3f, 0x60, 0xf5, 0x34, 0xfd, 0xea, 0x29, 0xe1, 0x63, 0x98, 0x4e, 0x05, + 0x1f, 0xf4, 0x10, 0x96, 0x12, 0x8b, 0x52, 0x09, 0xca, 0x24, 0xf0, 0xb5, 0x63, 0x39, 0x33, 0x8e, + 0x40, 0xa0, 0x3f, 0x81, 0x79, 0x66, 0x32, 0xdc, 0xf1, 0xcf, 0xa8, 0xb4, 0xf9, 0x08, 0xea, 0x31, + 0xc9, 0x5c, 0x9b, 0x69, 0x42, 0xed, 0x20, 0x2a, 0xda, 0x44, 0x6d, 0x13, 0xcf, 0xf5, 0x4d, 0x40, + 0x2a, 0xbf, 0xf2, 0x06, 0x7a, 0x2b, 0x9d, 0x14, 0x2f, 0x66, 0xaf, 0x1b, 0xbe, 0x3c, 0xca, 0x89, + 0xff, 0x5e, 0x84, 0xd9, 0x6d, 0x8b, 0xb7, 0xd6, 0xce, 0x28, 0xc8, 0xad, 0xc1, 0x5c, 0x30, 0xec, + 0x38, 0x5e, 0x77, 0x68, 0x13, 0x99, 0x14, 0xc8, 0x9b, 0x7e, 0x04, 0x3e, 0x2e, 0xf8, 0xc5, 0x6d, + 0x94, 0xb2, 0xd2, 0x46, 0xb9, 0x0a, 0x17, 0xee, 0x92, 0xa7, 0xf2, 0x3c, 0xdb, 0xb6, 0xd7, 0xe9, + 0x58, 0x6e, 0x2f, 0x22, 0x52, 0xe1, 0x44, 0x8e, 0x5e, 0x90, 0x97, 0x2a, 0x56, 0xf3, 0x53, 0xc5, + 0xb8, 0x1d, 0xb0, 0xc5, 0x0b, 0x6d, 0x99, 0x51, 0xa6, 0x60, 0xfa, 0xcf, 0x0a, 0x30, 0x97, 0x48, + 0x56, 0xea, 0xe6, 0xb2, 0xf0, 0x21, 0xa1, 0x99, 0x37, 0x54, 0xcd, 0x64, 0x97, 0xfe, 0xe7, 0xee, + 0x33, 0xa5, 0xba, 0xcf, 0x2f, 0x8b, 0xb0, 0xb8, 0x6d, 0x85, 0x51, 0xe0, 0xb2, 0xfe, 0xd7, 0xb4, + 0x9c, 0xa3, 0x93, 0xf2, 0xc9, 0x74, 0x52, 0xc9, 0xd1, 0x49, 0x0b, 0x96, 0xb2, 0xc2, 0x90, 0x8a, + 0x59, 0x80, 0x0a, 0xb3, 0xa0, 0xa8, 0xaf, 0x20, 0x26, 0xfa, 0x3f, 0xaa, 0x70, 0xf1, 0x33, 0xda, + 0xc5, 0x61, 0xdc, 0x6a, 0xbc, 0xe1, 0xf9, 0x7b, 0xec, 0xd3, 0xd9, 0x48, 0x31, 0xf3, 0x84, 0x5c, + 0x1c, 0xfb, 0x84, 0x5c, 0x1a, 0xf3, 0x84, 0x5c, 0x3e, 0xd1, 0x13, 0x72, 0xe5, 0xcc, 0x9e, 0x90, + 0x47, 0x6b, 0xad, 0x6a, 0x6e, 0xad, 0xf5, 0x30, 0x55, 0x8f, 0x4c, 0x72, 0xb7, 0xf9, 0xb6, 0xea, + 0x36, 0x63, 0xb5, 0x33, 0xf6, 0xed, 0x2b, 0xf3, 0xf2, 0x5a, 0x3b, 0xf6, 0xe5, 0xb5, 0x3e, 0xfa, + 0xf2, 0x9a, 0xff, 0x78, 0x07, 0x47, 0x3e, 0xde, 0x5d, 0x82, 0x99, 0xe0, 0xd0, 0x35, 0x49, 0x37, + 0x6e, 0x40, 0x37, 0xc4, 0xb1, 0xd3, 0xd0, 0x94, 0x47, 0x4c, 0x65, 0x3c, 0x22, 0xb6, 0xd4, 0x69, + 0xc5, 0x52, 0xf3, 0xfc, 0x64, 0x26, 0xd7, 0x4f, 0xfe, 0x7b, 0x8a, 0xa8, 0xcf, 0x61, 0xf9, 0x28, + 0xed, 0x49, 0xa7, 0xd4, 0x60, 0xd2, 0xec, 0x63, 0xb7, 0xc7, 0xdb, 0x7d, 0xbc, 0xaa, 0x97, 0xd3, + 0x71, 0x59, 0xbf, 0xfe, 0xeb, 0x22, 0x2c, 0x6e, 0xf1, 0x75, 0xd9, 0x47, 0x14, 0xc5, 0x59, 0x0a, + 0x63, 0x9c, 0x65, 0xa4, 0xa3, 0xbc, 0x0a, 0xb3, 0xe6, 0xd0, 0xf7, 0x59, 0xea, 0x90, 0x8e, 0x53, + 0x59, 0x30, 0x0b, 0x7b, 0x94, 0x31, 0xa2, 0xbe, 0x31, 0x08, 0xdf, 0x1b, 0x81, 0x27, 0x8a, 0xac, + 0xa8, 0x8a, 0x8c, 0x02, 0x4a, 0xf5, 0xa5, 0xa4, 0x1b, 0xef, 0xc1, 0x52, 0x56, 0x34, 0xc7, 0x3f, + 0x9d, 0x6c, 0xfc, 0xb6, 0x01, 0xf3, 0x49, 0x7d, 0xc4, 0xfe, 0x5a, 0x26, 0x41, 0xf7, 0x60, 0x6e, + 0x5b, 0xfe, 0x6e, 0x27, 0x7e, 0xdb, 0x18, 0xf7, 0x38, 0xd9, 0x7c, 0x35, 0xff, 0xa3, 0x60, 0x40, + 0x9f, 0x40, 0x26, 0x5c, 0xc8, 0x22, 0x4c, 0xde, 0x41, 0x5f, 0x1f, 0x83, 0x39, 0x5e, 0x75, 0x1c, + 0x89, 0xd5, 0x02, 0x7a, 0x08, 0x33, 0xe9, 0xd7, 0x3a, 0x94, 0x4a, 0x18, 0x73, 0x1f, 0x10, 0x9b, + 0xfa, 0xb8, 0x25, 0x31, 0xff, 0x8f, 0x98, 0x63, 0xa5, 0x1e, 0xa6, 0x90, 0x9e, 0xee, 0x9d, 0xe4, + 0x3d, 0xed, 0x35, 0xbf, 0x39, 0x76, 0x4d, 0x8c, 0xfd, 0x23, 0xa8, 0x45, 0x5d, 0xf7, 0xb4, 0x98, + 0x33, 0xbd, 0xf8, 0xe6, 0x5c, 0x1a, 0xdf, 0x7e, 0xa0, 0x4f, 0xa0, 0x8f, 0xc5, 0xe6, 0x4d, 0x4a, + 0x73, 0x36, 0x2b, 0xbd, 0xe6, 0xe6, 0xb9, 0x9c, 0xfe, 0xae, 0x3e, 0x81, 0xbe, 0x0b, 0x0d, 0x36, + 0xda, 0x93, 0xbf, 0x98, 0x59, 0x6a, 0x89, 0x1f, 0x68, 0xb5, 0xa2, 0x1f, 0x68, 0xb5, 0xae, 0x3b, + 0x34, 0x3c, 0x6c, 0xe6, 0x34, 0x60, 0x25, 0x82, 0x47, 0x30, 0xbd, 0x4d, 0xc2, 0xa4, 0x5f, 0x82, + 0xde, 0x38, 0x51, 0x57, 0xa9, 0xa9, 0x67, 0x97, 0x8d, 0xb6, 0x5c, 0xf4, 0x09, 0xf4, 0xab, 0x02, + 0x9c, 0xdb, 0x26, 0x61, 0xb6, 0x03, 0x81, 0xde, 0xc9, 0x27, 0x72, 0x44, 0xa7, 0xa2, 0x79, 0xf7, + 0xb4, 0xde, 0x96, 0x46, 0xab, 0x4f, 0xa0, 0xdf, 0x14, 0xe0, 0xbc, 0xc2, 0x98, 0xda, 0x52, 0x40, + 0xeb, 0xe3, 0x99, 0xcb, 0x69, 0x3f, 0x34, 0x6f, 0x9d, 0xf2, 0x87, 0x50, 0x0a, 0x4a, 0x7d, 0x02, + 0xed, 0x71, 0x9d, 0x24, 0x15, 0x04, 0xba, 0x98, 0x5b, 0x2a, 0xc4, 0xd4, 0x97, 0x8f, 0xfa, 0x1c, + 0xeb, 0xe1, 0x16, 0x34, 0xb6, 0x49, 0x18, 0xa5, 0xb2, 0x69, 0x4b, 0xcb, 0x54, 0x19, 0x69, 0x57, + 0xcd, 0x66, 0xbf, 0xdc, 0x62, 0xe6, 0x05, 0x2e, 0x25, 0x5d, 0x4b, 0xfb, 0x6a, 0x6e, 0x5e, 0x9b, + 0xb6, 0x98, 0xfc, 0x6c, 0x4f, 0x9f, 0x40, 0x4f, 0x60, 0x29, 0xff, 0xf2, 0x41, 0x6f, 0x9e, 0x38, + 0xbd, 0x68, 0xae, 0x9d, 0x64, 0x69, 0xe6, 0x40, 0xe9, 0xf0, 0x9b, 0x3e, 0x50, 0xee, 0xad, 0x95, + 0x3e, 0x50, 0x7e, 0xf4, 0xd6, 0x27, 0x3e, 0xd9, 0xfc, 0xf3, 0xf3, 0xe5, 0xc2, 0x5f, 0x9f, 0x2f, + 0x17, 0xfe, 0xf5, 0x7c, 0xb9, 0xf0, 0xc5, 0xbb, 0xc7, 0xfc, 0x1c, 0x53, 0xf9, 0xed, 0x28, 0xa6, + 0x96, 0x69, 0x5b, 0xc4, 0x0d, 0x3b, 0x55, 0xee, 0xcd, 0xef, 0xfe, 0x3b, 0x00, 0x00, 0xff, 0xff, + 0xb7, 0x12, 0x5d, 0x05, 0x5a, 0x2a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2888,6 +3029,7 @@ type RepoServerServiceClient interface { GetGitDirectories(ctx context.Context, in *GitDirectoriesRequest, opts ...grpc.CallOption) (*GitDirectoriesResponse, error) // UpdateRevisionForPaths will compare two revisions and update the cache with the new revision if no changes are detected in the provided paths UpdateRevisionForPaths(ctx context.Context, in *UpdateRevisionForPathsRequest, opts ...grpc.CallOption) (*UpdateRevisionForPathsResponse, error) + GetChangeRevision(ctx context.Context, in *ChangeRevisionRequest, opts ...grpc.CallOption) (*ChangeRevisionResponse, error) } type repoServerServiceClient struct { @@ -3049,6 +3191,15 @@ func (c *repoServerServiceClient) UpdateRevisionForPaths(ctx context.Context, in return out, nil } +func (c *repoServerServiceClient) GetChangeRevision(ctx context.Context, in *ChangeRevisionRequest, opts ...grpc.CallOption) (*ChangeRevisionResponse, error) { + out := new(ChangeRevisionResponse) + err := c.cc.Invoke(ctx, "/repository.RepoServerService/GetChangeRevision", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // RepoServerServiceServer is the server API for RepoServerService service. type RepoServerServiceServer interface { // GenerateManifest generates manifest for application in specified repo name and revision @@ -3079,6 +3230,7 @@ type RepoServerServiceServer interface { GetGitDirectories(context.Context, *GitDirectoriesRequest) (*GitDirectoriesResponse, error) // UpdateRevisionForPaths will compare two revisions and update the cache with the new revision if no changes are detected in the provided paths UpdateRevisionForPaths(context.Context, *UpdateRevisionForPathsRequest) (*UpdateRevisionForPathsResponse, error) + GetChangeRevision(context.Context, *ChangeRevisionRequest) (*ChangeRevisionResponse, error) } // UnimplementedRepoServerServiceServer can be embedded to have forward compatible implementations. @@ -3127,6 +3279,9 @@ func (*UnimplementedRepoServerServiceServer) GetGitDirectories(ctx context.Conte func (*UnimplementedRepoServerServiceServer) UpdateRevisionForPaths(ctx context.Context, req *UpdateRevisionForPathsRequest) (*UpdateRevisionForPathsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateRevisionForPaths not implemented") } +func (*UnimplementedRepoServerServiceServer) GetChangeRevision(ctx context.Context, req *ChangeRevisionRequest) (*ChangeRevisionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetChangeRevision not implemented") +} func RegisterRepoServerServiceServer(s *grpc.Server, srv RepoServerServiceServer) { s.RegisterService(&_RepoServerService_serviceDesc, srv) @@ -3392,6 +3547,24 @@ func _RepoServerService_UpdateRevisionForPaths_Handler(srv interface{}, ctx cont return interceptor(ctx, in, info, handler) } +func _RepoServerService_GetChangeRevision_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ChangeRevisionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RepoServerServiceServer).GetChangeRevision(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/repository.RepoServerService/GetChangeRevision", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RepoServerServiceServer).GetChangeRevision(ctx, req.(*ChangeRevisionRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _RepoServerService_serviceDesc = grpc.ServiceDesc{ ServiceName: "repository.RepoServerService", HandlerType: (*RepoServerServiceServer)(nil), @@ -3448,6 +3621,10 @@ var _RepoServerService_serviceDesc = grpc.ServiceDesc{ MethodName: "UpdateRevisionForPaths", Handler: _RepoServerService_UpdateRevisionForPaths_Handler, }, + { + MethodName: "GetChangeRevision", + Handler: _RepoServerService_GetChangeRevision_Handler, + }, }, Streams: []grpc.StreamDesc{ { @@ -5886,6 +6063,116 @@ func (m *UpdateRevisionForPathsResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } +func (m *ChangeRevisionRequest) 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 *ChangeRevisionRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ChangeRevisionRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.Repo != nil { + { + size, err := m.Repo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRepository(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + if len(m.Paths) > 0 { + for iNdEx := len(m.Paths) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Paths[iNdEx]) + copy(dAtA[i:], m.Paths[iNdEx]) + i = encodeVarintRepository(dAtA, i, uint64(len(m.Paths[iNdEx]))) + i-- + dAtA[i] = 0x2a + } + } + if len(m.PreviousRevision) > 0 { + i -= len(m.PreviousRevision) + copy(dAtA[i:], m.PreviousRevision) + i = encodeVarintRepository(dAtA, i, uint64(len(m.PreviousRevision))) + i-- + dAtA[i] = 0x22 + } + if len(m.CurrentRevision) > 0 { + i -= len(m.CurrentRevision) + copy(dAtA[i:], m.CurrentRevision) + i = encodeVarintRepository(dAtA, i, uint64(len(m.CurrentRevision))) + i-- + dAtA[i] = 0x1a + } + if len(m.Namespace) > 0 { + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintRepository(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0x12 + } + if len(m.AppName) > 0 { + i -= len(m.AppName) + copy(dAtA[i:], m.AppName) + i = encodeVarintRepository(dAtA, i, uint64(len(m.AppName))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ChangeRevisionResponse) 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 *ChangeRevisionResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ChangeRevisionResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.Revision) > 0 { + i -= len(m.Revision) + copy(dAtA[i:], m.Revision) + i = encodeVarintRepository(dAtA, i, uint64(len(m.Revision))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarintRepository(dAtA []byte, offset int, v uint64) int { offset -= sovRepository(v) base := offset @@ -6979,6 +7266,60 @@ func (m *UpdateRevisionForPathsResponse) Size() (n int) { return n } +func (m *ChangeRevisionRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.AppName) + if l > 0 { + n += 1 + l + sovRepository(uint64(l)) + } + l = len(m.Namespace) + if l > 0 { + n += 1 + l + sovRepository(uint64(l)) + } + l = len(m.CurrentRevision) + if l > 0 { + n += 1 + l + sovRepository(uint64(l)) + } + l = len(m.PreviousRevision) + if l > 0 { + n += 1 + l + sovRepository(uint64(l)) + } + if len(m.Paths) > 0 { + for _, s := range m.Paths { + l = len(s) + n += 1 + l + sovRepository(uint64(l)) + } + } + if m.Repo != nil { + l = m.Repo.Size() + n += 1 + l + sovRepository(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *ChangeRevisionResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Revision) + if l > 0 { + n += 1 + l + sovRepository(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func sovRepository(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -13907,6 +14248,336 @@ func (m *UpdateRevisionForPathsResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *ChangeRevisionRequest) 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 ErrIntOverflowRepository + } + 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: ChangeRevisionRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ChangeRevisionRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AppName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + 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 ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AppName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + 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 ErrIntOverflowRepository + } + 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 ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentRevision", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + 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 ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CurrentRevision = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreviousRevision", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + 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 ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PreviousRevision = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Paths", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + 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 ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Paths = append(m.Paths, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Repo", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRepository + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Repo == nil { + m.Repo = &v1alpha1.Repository{} + } + if err := m.Repo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRepository(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthRepository + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ChangeRevisionResponse) 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 ErrIntOverflowRepository + } + 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: ChangeRevisionResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ChangeRevisionResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + 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 ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Revision = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRepository(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthRepository + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipRepository(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index 4a7e918589755..16a184581ad97 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -3107,3 +3107,70 @@ func (s *Service) updateCachedRevision(logCtx *log.Entry, oldRev string, newRev logCtx.Debugf("manifest cache updated for application %s in repo %s from revision %s to revision %s", request.AppName, request.GetRepo().Repo, oldRev, newRev) return nil } + +func (s *Service) GetChangeRevision(ctx context.Context, request *apiclient.ChangeRevisionRequest) (*apiclient.ChangeRevisionResponse, error) { + logCtx := log.WithFields(log.Fields{"application": request.AppName, "appNamespace": request.Namespace}) + + repo := request.GetRepo() + currentRevision := request.GetCurrentRevision() + previousRevision := request.GetPreviousRevision() + refreshPaths := request.GetPaths() + + if repo == nil { + return nil, status.Error(codes.InvalidArgument, "must pass a valid repo") + } + + if len(refreshPaths) == 0 { + return nil, status.Error(codes.InvalidArgument, "must pass a refresh path") + } + + gitClientOpts := git.WithCache(s.cache, true) + gitClient, revision, err := s.newClientResolveRevision(repo, currentRevision, gitClientOpts) + if err != nil { + return nil, status.Errorf(codes.Internal, "unable to resolve git revision %s: %v", revision, err) + } + + s.metricsServer.IncPendingRepoRequest(repo.Repo) + defer s.metricsServer.DecPendingRepoRequest(repo.Repo) + + closer, err := s.repoLock.Lock(gitClient.Root(), revision, true, func() (goio.Closer, error) { + return s.checkoutRevision(gitClient, revision, false) + }) + if err != nil { + return nil, status.Errorf(codes.Internal, "unable to checkout git repo %s with revision %s: %v", repo.Repo, revision, err) + } + defer io.Close(closer) + + files, err := gitClient.ChangedFiles(previousRevision, revision) + if err != nil { + return nil, status.Errorf(codes.Internal, "unable to get changed files for repo %s with revision %s: %v", repo.Repo, revision, err) + } + + changed := apppathutil.AppFilesHaveChanged(refreshPaths, files) + + if !changed { + logCtx.Debugf("no changes found for application %s in repo %s from revision %s to revision %s", request.AppName, repo.Repo, previousRevision, revision) + return &apiclient.ChangeRevisionResponse{}, nil + } + + revisions, err := gitClient.ListRevisions(previousRevision, revision) + if err != nil { + return nil, status.Errorf(codes.Internal, "failed to get revisions %s..%s", previousRevision, revision) + } + for _, rev := range revisions { + files, err := gitClient.DiffTree(rev) + if err != nil { + continue + } + changedFiles := apppathutil.AppFilesHaveChanged(refreshPaths, files) + if changedFiles { + logCtx.Debugf("changes found for application %s in repo %s from revision %s to revision %s", request.AppName, repo.Repo, previousRevision, revision) + return &apiclient.ChangeRevisionResponse{ + Revision: rev, + }, nil + } + } + + logCtx.Debugf("changes found for application %s in repo %s from revision %s to revision %s", request.AppName, repo.Repo, previousRevision, revision) + return &apiclient.ChangeRevisionResponse{}, nil +} diff --git a/reposerver/repository/repository.proto b/reposerver/repository/repository.proto index 70b6e3da4cce7..ad295e95712a1 100644 --- a/reposerver/repository/repository.proto +++ b/reposerver/repository/repository.proto @@ -320,6 +320,19 @@ message UpdateRevisionForPathsResponse { string revision = 2; } +message ChangeRevisionRequest { + string appName = 1; + string namespace = 2; + string currentRevision = 3; + string previousRevision = 4; + repeated string paths = 5; + github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.Repository repo = 6; +} + +message ChangeRevisionResponse { + string revision = 1; +} + // ManifestService service RepoServerService { @@ -378,4 +391,7 @@ service RepoServerService { // UpdateRevisionForPaths will compare two revisions and update the cache with the new revision if no changes are detected in the provided paths rpc UpdateRevisionForPaths(UpdateRevisionForPathsRequest) returns (UpdateRevisionForPathsResponse) { } + + rpc GetChangeRevision(ChangeRevisionRequest) returns (ChangeRevisionResponse) { + } } diff --git a/server/application/application.go b/server/application/application.go index 00b6a454fa5c6..edf5fbe754427 100644 --- a/server/application/application.go +++ b/server/application/application.go @@ -12,6 +12,8 @@ import ( "strings" "time" + "github.com/argoproj/argo-cd/v2/util/app/path" + kubecache "github.com/argoproj/gitops-engine/pkg/cache" "github.com/argoproj/gitops-engine/pkg/diff" "github.com/argoproj/gitops-engine/pkg/sync/common" @@ -2628,6 +2630,45 @@ func (s *Server) GetApplicationSyncWindows(ctx context.Context, q *application.A return res, nil } +func (s *Server) GetChangeRevision(ctx context.Context, in *application.ChangeRevisionRequest) (*application.ChangeRevisionResponse, error) { + app, err := s.appLister.Applications(in.GetNamespace()).Get(in.GetAppName()) + if err != nil { + return nil, err + } + + val, ok := app.Annotations[appv1.AnnotationKeyManifestGeneratePaths] + if !ok || val == "" { + return nil, status.Errorf(codes.FailedPrecondition, "manifest generation paths not set") + } + + repo, err := s.db.GetRepository(ctx, app.Spec.GetSource().RepoURL, app.Spec.Project) + if err != nil { + return nil, fmt.Errorf("error getting repository: %w", err) + } + + closer, client, err := s.repoClientset.NewRepoServerClient() + if err != nil { + return nil, fmt.Errorf("error creating repo server client: %w", err) + } + defer ioutil.Close(closer) + + response, err := client.GetChangeRevision(ctx, &apiclient.ChangeRevisionRequest{ + AppName: in.GetAppName(), + Namespace: in.GetNamespace(), + CurrentRevision: in.GetCurrentRevision(), + PreviousRevision: in.GetPreviousRevision(), + Paths: path.GetAppRefreshPaths(app), + Repo: repo, + }) + if err != nil { + return nil, fmt.Errorf("error getting change revision: %w", err) + } + + return &application.ChangeRevisionResponse{ + Revision: ptr.To(response.Revision), + }, nil +} + func (s *Server) inferResourcesStatusHealth(app *appv1.Application) { if app.Status.ResourceHealthSource == appv1.ResourceHealthLocationAppTree { tree := &appv1.ApplicationTree{} diff --git a/server/application/application.proto b/server/application/application.proto index e82224dac65e9..a60faffce02eb 100644 --- a/server/application/application.proto +++ b/server/application/application.proto @@ -200,6 +200,19 @@ message ApplicationResourceRequest { optional string project = 8; } +message ChangeRevisionRequest { + required string appName = 1; + optional string namespace = 2; + optional string currentRevision = 3; + optional string previousRevision = 4; +} + +message ChangeRevisionResponse { + required string revision = 1; +} + + + message ApplicationResourcePatchRequest { required string name = 1; optional string namespace = 2; @@ -530,4 +543,8 @@ service ApplicationService { rpc ListResourceLinks(ApplicationResourceRequest) returns (LinksResponse) { option (google.api.http).get = "/api/v1/applications/{name}/resource/links"; } + + rpc GetChangeRevision(ChangeRevisionRequest) returns (ChangeRevisionResponse) { + option (google.api.http).get = "/api/v1/application/changeRevision"; + } } diff --git a/util/git/client.go b/util/git/client.go index c5646e12cb8dc..19c83c15d8912 100644 --- a/util/git/client.go +++ b/util/git/client.go @@ -82,6 +82,8 @@ type Client interface { IsAnnotatedTag(string) bool ChangedFiles(revision string, targetRevision string) ([]string, error) IsRevisionPresent(revision string) bool + ListRevisions(revision string, targetRevision string) ([]string, error) + DiffTree(targetRevision string) ([]string, error) } type EventHandlers struct { @@ -886,3 +888,49 @@ func (m *nativeGitClient) runCmdOutput(cmd *exec.Cmd, ropts runOpts) (string, er } return executil.RunWithExecRunOpts(cmd, opts) } + +func (m *nativeGitClient) Diff(targetRevision string) ([]string, error) { + if !IsCommitSHA(targetRevision) { + return []string{}, fmt.Errorf("invalid revision provided, must be SHA") + } + out, err := m.runCmd("diff-tree", "--no-commit-id", "--name-only", "-r", targetRevision) + if err != nil { + return nil, fmt.Errorf("failed to diff %s: %w", targetRevision, err) + } + + if out == "" { + return []string{}, nil + } + + files := strings.Split(out, "\n") + return files, nil +} + +func (m *nativeGitClient) ListRevisions(revision string, targetRevision string) ([]string, error) { + if !IsCommitSHA(revision) || !IsCommitSHA(targetRevision) { + return nil, fmt.Errorf("invalid revision provided, must be SHA") + } + out, err := m.runCmd("rev-list", "--ancestry-path", fmt.Sprintf("%s..%s", revision, targetRevision)) + if err != nil { + return nil, err + } + ss := strings.Split(out, "\n") + return ss, nil +} + +func (m *nativeGitClient) DiffTree(targetRevision string) ([]string, error) { + if !IsCommitSHA(targetRevision) { + return []string{}, fmt.Errorf("invalid revision provided, must be SHA") + } + out, err := m.runCmd("diff-tree", "--no-commit-id", "--name-only", "-r", targetRevision) + if err != nil { + return nil, fmt.Errorf("failed to diff %s: %w", targetRevision, err) + } + + if out == "" { + return []string{}, nil + } + + files := strings.Split(out, "\n") + return files, nil +} diff --git a/util/git/mocks/Client.go b/util/git/mocks/Client.go index 798c07465431a..538d25e6b735a 100644 --- a/util/git/mocks/Client.go +++ b/util/git/mocks/Client.go @@ -88,6 +88,36 @@ func (_m *Client) CommitSHA() (string, error) { return r0, r1 } +// DiffTree provides a mock function with given fields: targetRevision +func (_m *Client) DiffTree(targetRevision string) ([]string, error) { + ret := _m.Called(targetRevision) + + if len(ret) == 0 { + panic("no return value specified for DiffTree") + } + + var r0 []string + var r1 error + if rf, ok := ret.Get(0).(func(string) ([]string, error)); ok { + return rf(targetRevision) + } + if rf, ok := ret.Get(0).(func(string) []string); ok { + r0 = rf(targetRevision) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]string) + } + } + + if rf, ok := ret.Get(1).(func(string) error); ok { + r1 = rf(targetRevision) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // Fetch provides a mock function with given fields: revision func (_m *Client) Fetch(revision string) error { ret := _m.Called(revision) @@ -160,6 +190,36 @@ func (_m *Client) IsRevisionPresent(revision string) bool { return r0 } +// ListRevisions provides a mock function with given fields: revision, targetRevision +func (_m *Client) ListRevisions(revision string, targetRevision string) ([]string, error) { + ret := _m.Called(revision, targetRevision) + + if len(ret) == 0 { + panic("no return value specified for ListRevisions") + } + + var r0 []string + var r1 error + if rf, ok := ret.Get(0).(func(string, string) ([]string, error)); ok { + return rf(revision, targetRevision) + } + if rf, ok := ret.Get(0).(func(string, string) []string); ok { + r0 = rf(revision, targetRevision) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]string) + } + } + + if rf, ok := ret.Get(1).(func(string, string) error); ok { + r1 = rf(revision, targetRevision) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // LsFiles provides a mock function with given fields: path, enableNewGitFileGlobbing func (_m *Client) LsFiles(path string, enableNewGitFileGlobbing bool) ([]string, error) { ret := _m.Called(path, enableNewGitFileGlobbing)