From 39c3ed891ac6b20489451e7805ca6af3c87e9490 Mon Sep 17 00:00:00 2001 From: gmuselli Date: Mon, 23 Oct 2023 08:50:31 -0400 Subject: [PATCH] fix(11164): Advanced Templating using templatePatch Signed-off-by: gmuselli --- .../controllers/applicationset_controller.go | 295 ++-- .../applicationset_controller_test.go | 12 + applicationset/utils/templatePatch.go | 42 + applicationset/utils/templatePatch_test.go | 99 ++ applicationset/utils/utils.go | 1 + assets/swagger.json | 3 + .../applicationset/Template.md | 57 + manifests/core-install.yaml | 2 + manifests/crds/applicationset-crd.yaml | 2 + manifests/ha/install.yaml | 2 + manifests/install.yaml | 2 + .../v1alpha1/applicationset_types.go | 1 + pkg/apis/application/v1alpha1/generated.pb.go | 1410 +++++++++-------- pkg/apis/application/v1alpha1/generated.proto | 2 + .../application/v1alpha1/openapi_generated.go | 6 + .../v1alpha1/zz_generated.deepcopy.go | 5 + test/e2e/applicationset_test.go | 128 ++ 17 files changed, 1254 insertions(+), 815 deletions(-) create mode 100644 applicationset/utils/templatePatch.go create mode 100644 applicationset/utils/templatePatch_test.go diff --git a/applicationset/controllers/applicationset_controller.go b/applicationset/controllers/applicationset_controller.go index 45b6649685e6e..3a6f026ed6244 100644 --- a/applicationset/controllers/applicationset_controller.go +++ b/applicationset/controllers/applicationset_controller.go @@ -50,7 +50,7 @@ import ( "github.com/argoproj/argo-cd/v2/util/db" "github.com/argoproj/argo-cd/v2/util/glob" - argov1alpha1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" appclientset "github.com/argoproj/argo-cd/v2/pkg/client/clientset/versioned" argoutil "github.com/argoproj/argo-cd/v2/util/argo" @@ -68,7 +68,7 @@ const ( var ( defaultPreservedAnnotations = []string{ NotifiedAnnotationKey, - argov1alpha1.AnnotationKeyRefresh, + appv1.AnnotationKeyRefresh, } ) @@ -81,7 +81,7 @@ type ApplicationSetReconciler struct { ArgoDB db.ArgoDB ArgoAppClientset appclientset.Interface KubeClientset kubernetes.Interface - Policy argov1alpha1.ApplicationsSyncPolicy + Policy appv1.ApplicationsSyncPolicy EnablePolicyOverride bool utils.Renderer ArgoCDNamespace string @@ -99,7 +99,7 @@ type ApplicationSetReconciler struct { func (r *ApplicationSetReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { logCtx := log.WithField("applicationset", req.NamespacedName) - var applicationSetInfo argov1alpha1.ApplicationSet + var applicationSetInfo appv1.ApplicationSet parametersGenerated := false if err := r.Get(ctx, req.NamespacedName, &applicationSetInfo); err != nil { @@ -121,11 +121,11 @@ func (r *ApplicationSetReconciler) Reconcile(ctx context.Context, req ctrl.Reque if err != nil { _ = r.setApplicationSetStatusCondition(ctx, &applicationSetInfo, - argov1alpha1.ApplicationSetCondition{ - Type: argov1alpha1.ApplicationSetConditionErrorOccurred, + appv1.ApplicationSetCondition{ + Type: appv1.ApplicationSetConditionErrorOccurred, Message: err.Error(), Reason: string(applicationSetReason), - Status: argov1alpha1.ApplicationSetConditionStatusTrue, + Status: appv1.ApplicationSetConditionStatusTrue, }, parametersGenerated, ) return ctrl.Result{}, err @@ -146,18 +146,18 @@ func (r *ApplicationSetReconciler) Reconcile(ctx context.Context, req ctrl.Reque _ = r.setApplicationSetStatusCondition(ctx, &applicationSetInfo, - argov1alpha1.ApplicationSetCondition{ - Type: argov1alpha1.ApplicationSetConditionErrorOccurred, + appv1.ApplicationSetCondition{ + Type: appv1.ApplicationSetConditionErrorOccurred, Message: err.Error(), - Reason: argov1alpha1.ApplicationSetReasonApplicationValidationError, - Status: argov1alpha1.ApplicationSetConditionStatusTrue, + Reason: appv1.ApplicationSetReasonApplicationValidationError, + Status: appv1.ApplicationSetConditionStatusTrue, }, parametersGenerated, ) return ctrl.Result{RequeueAfter: ReconcileRequeueOnValidationError}, nil } // appMap is a name->app collection of Applications in this ApplicationSet. - appMap := map[string]argov1alpha1.Application{} + appMap := map[string]appv1.Application{} // appSyncMap tracks which apps will be synced during this reconciliation. appSyncMap := map[string]bool{} @@ -166,7 +166,7 @@ func (r *ApplicationSetReconciler) Reconcile(ctx context.Context, req ctrl.Reque // If appset used progressive sync but stopped, clean up the progressive sync application statuses log.Infof("Removing %v unnecessary AppStatus entries from ApplicationSet %v", len(applicationSetInfo.Status.ApplicationStatus), applicationSetInfo.Name) - err := r.setAppSetApplicationStatus(ctx, &applicationSetInfo, []argov1alpha1.ApplicationSetApplicationStatus{}) + err := r.setAppSetApplicationStatus(ctx, &applicationSetInfo, []appv1.ApplicationSetApplicationStatus{}) if err != nil { return ctrl.Result{}, fmt.Errorf("failed to clear previous AppSet application statuses for %v: %w", applicationSetInfo.Name, err) } @@ -188,7 +188,7 @@ func (r *ApplicationSetReconciler) Reconcile(ctx context.Context, req ctrl.Reque } } - var validApps []argov1alpha1.Application + var validApps []appv1.Application for i := range desiredApplications { if validateErrors[i] == nil { validApps = append(validApps, desiredApplications[i]) @@ -207,11 +207,11 @@ func (r *ApplicationSetReconciler) Reconcile(ctx context.Context, req ctrl.Reque } _ = r.setApplicationSetStatusCondition(ctx, &applicationSetInfo, - argov1alpha1.ApplicationSetCondition{ - Type: argov1alpha1.ApplicationSetConditionErrorOccurred, + appv1.ApplicationSetCondition{ + Type: appv1.ApplicationSetConditionErrorOccurred, Message: message, - Reason: argov1alpha1.ApplicationSetReasonApplicationValidationError, - Status: argov1alpha1.ApplicationSetConditionStatusTrue, + Reason: appv1.ApplicationSetReasonApplicationValidationError, + Status: appv1.ApplicationSetConditionStatusTrue, }, parametersGenerated, ) } @@ -224,11 +224,11 @@ func (r *ApplicationSetReconciler) Reconcile(ctx context.Context, req ctrl.Reque if err != nil { _ = r.setApplicationSetStatusCondition(ctx, &applicationSetInfo, - argov1alpha1.ApplicationSetCondition{ - Type: argov1alpha1.ApplicationSetConditionErrorOccurred, + appv1.ApplicationSetCondition{ + Type: appv1.ApplicationSetConditionErrorOccurred, Message: err.Error(), - Reason: argov1alpha1.ApplicationSetReasonSyncApplicationError, - Status: argov1alpha1.ApplicationSetConditionStatusTrue, + Reason: appv1.ApplicationSetReasonSyncApplicationError, + Status: appv1.ApplicationSetConditionStatusTrue, }, parametersGenerated, ) return ctrl.Result{}, err @@ -241,11 +241,11 @@ func (r *ApplicationSetReconciler) Reconcile(ctx context.Context, req ctrl.Reque if err != nil { _ = r.setApplicationSetStatusCondition(ctx, &applicationSetInfo, - argov1alpha1.ApplicationSetCondition{ - Type: argov1alpha1.ApplicationSetConditionErrorOccurred, + appv1.ApplicationSetCondition{ + Type: appv1.ApplicationSetConditionErrorOccurred, Message: err.Error(), - Reason: argov1alpha1.ApplicationSetReasonUpdateApplicationError, - Status: argov1alpha1.ApplicationSetConditionStatusTrue, + Reason: appv1.ApplicationSetReasonUpdateApplicationError, + Status: appv1.ApplicationSetConditionStatusTrue, }, parametersGenerated, ) return ctrl.Result{}, err @@ -255,11 +255,11 @@ func (r *ApplicationSetReconciler) Reconcile(ctx context.Context, req ctrl.Reque if err != nil { _ = r.setApplicationSetStatusCondition(ctx, &applicationSetInfo, - argov1alpha1.ApplicationSetCondition{ - Type: argov1alpha1.ApplicationSetConditionErrorOccurred, + appv1.ApplicationSetCondition{ + Type: appv1.ApplicationSetConditionErrorOccurred, Message: err.Error(), - Reason: argov1alpha1.ApplicationSetReasonCreateApplicationError, - Status: argov1alpha1.ApplicationSetConditionStatusTrue, + Reason: appv1.ApplicationSetReasonCreateApplicationError, + Status: appv1.ApplicationSetConditionStatusTrue, }, parametersGenerated, ) return ctrl.Result{}, err @@ -271,11 +271,11 @@ func (r *ApplicationSetReconciler) Reconcile(ctx context.Context, req ctrl.Reque if err != nil { _ = r.setApplicationSetStatusCondition(ctx, &applicationSetInfo, - argov1alpha1.ApplicationSetCondition{ - Type: argov1alpha1.ApplicationSetConditionResourcesUpToDate, + appv1.ApplicationSetCondition{ + Type: appv1.ApplicationSetConditionResourcesUpToDate, Message: err.Error(), - Reason: argov1alpha1.ApplicationSetReasonDeleteApplicationError, - Status: argov1alpha1.ApplicationSetConditionStatusTrue, + Reason: appv1.ApplicationSetReasonDeleteApplicationError, + Status: appv1.ApplicationSetConditionStatusTrue, }, parametersGenerated, ) return ctrl.Result{}, err @@ -289,11 +289,11 @@ func (r *ApplicationSetReconciler) Reconcile(ctx context.Context, req ctrl.Reque logCtx.Warnf("error occurred while updating ApplicationSet: %v", err) _ = r.setApplicationSetStatusCondition(ctx, &applicationSetInfo, - argov1alpha1.ApplicationSetCondition{ - Type: argov1alpha1.ApplicationSetConditionErrorOccurred, + appv1.ApplicationSetCondition{ + Type: appv1.ApplicationSetConditionErrorOccurred, Message: err.Error(), - Reason: argov1alpha1.ApplicationSetReasonRefreshApplicationError, - Status: argov1alpha1.ApplicationSetConditionStatusTrue, + Reason: appv1.ApplicationSetReasonRefreshApplicationError, + Status: appv1.ApplicationSetConditionStatusTrue, }, parametersGenerated, ) return ctrl.Result{}, err @@ -305,11 +305,11 @@ func (r *ApplicationSetReconciler) Reconcile(ctx context.Context, req ctrl.Reque if len(validateErrors) == 0 { if err := r.setApplicationSetStatusCondition(ctx, &applicationSetInfo, - argov1alpha1.ApplicationSetCondition{ - Type: argov1alpha1.ApplicationSetConditionResourcesUpToDate, + appv1.ApplicationSetCondition{ + Type: appv1.ApplicationSetConditionResourcesUpToDate, Message: "All applications have been generated successfully", - Reason: argov1alpha1.ApplicationSetReasonApplicationSetUpToDate, - Status: argov1alpha1.ApplicationSetConditionStatusTrue, + Reason: appv1.ApplicationSetReasonApplicationSetUpToDate, + Status: appv1.ApplicationSetConditionStatusTrue, }, parametersGenerated, ); err != nil { return ctrl.Result{}, err @@ -326,67 +326,67 @@ func (r *ApplicationSetReconciler) Reconcile(ctx context.Context, req ctrl.Reque }, nil } -func getParametersGeneratedCondition(parametersGenerated bool, message string) argov1alpha1.ApplicationSetCondition { - var paramtersGeneratedCondition argov1alpha1.ApplicationSetCondition +func getParametersGeneratedCondition(parametersGenerated bool, message string) appv1.ApplicationSetCondition { + var paramtersGeneratedCondition appv1.ApplicationSetCondition if parametersGenerated { - paramtersGeneratedCondition = argov1alpha1.ApplicationSetCondition{ - Type: argov1alpha1.ApplicationSetConditionParametersGenerated, + paramtersGeneratedCondition = appv1.ApplicationSetCondition{ + Type: appv1.ApplicationSetConditionParametersGenerated, Message: "Successfully generated parameters for all Applications", - Reason: argov1alpha1.ApplicationSetReasonParametersGenerated, - Status: argov1alpha1.ApplicationSetConditionStatusTrue, + Reason: appv1.ApplicationSetReasonParametersGenerated, + Status: appv1.ApplicationSetConditionStatusTrue, } } else { - paramtersGeneratedCondition = argov1alpha1.ApplicationSetCondition{ - Type: argov1alpha1.ApplicationSetConditionParametersGenerated, + paramtersGeneratedCondition = appv1.ApplicationSetCondition{ + Type: appv1.ApplicationSetConditionParametersGenerated, Message: message, - Reason: argov1alpha1.ApplicationSetReasonErrorOccurred, - Status: argov1alpha1.ApplicationSetConditionStatusFalse, + Reason: appv1.ApplicationSetReasonErrorOccurred, + Status: appv1.ApplicationSetConditionStatusFalse, } } return paramtersGeneratedCondition } -func getResourceUpToDateCondition(errorOccurred bool, message string, reason string) argov1alpha1.ApplicationSetCondition { - var resourceUpToDateCondition argov1alpha1.ApplicationSetCondition +func getResourceUpToDateCondition(errorOccurred bool, message string, reason string) appv1.ApplicationSetCondition { + var resourceUpToDateCondition appv1.ApplicationSetCondition if errorOccurred { - resourceUpToDateCondition = argov1alpha1.ApplicationSetCondition{ - Type: argov1alpha1.ApplicationSetConditionResourcesUpToDate, + resourceUpToDateCondition = appv1.ApplicationSetCondition{ + Type: appv1.ApplicationSetConditionResourcesUpToDate, Message: message, Reason: reason, - Status: argov1alpha1.ApplicationSetConditionStatusFalse, + Status: appv1.ApplicationSetConditionStatusFalse, } } else { - resourceUpToDateCondition = argov1alpha1.ApplicationSetCondition{ - Type: argov1alpha1.ApplicationSetConditionResourcesUpToDate, + resourceUpToDateCondition = appv1.ApplicationSetCondition{ + Type: appv1.ApplicationSetConditionResourcesUpToDate, Message: "ApplicationSet up to date", - Reason: argov1alpha1.ApplicationSetReasonApplicationSetUpToDate, - Status: argov1alpha1.ApplicationSetConditionStatusTrue, + Reason: appv1.ApplicationSetReasonApplicationSetUpToDate, + Status: appv1.ApplicationSetConditionStatusTrue, } } return resourceUpToDateCondition } -func (r *ApplicationSetReconciler) setApplicationSetStatusCondition(ctx context.Context, applicationSet *argov1alpha1.ApplicationSet, condition argov1alpha1.ApplicationSetCondition, paramtersGenerated bool) error { +func (r *ApplicationSetReconciler) setApplicationSetStatusCondition(ctx context.Context, applicationSet *appv1.ApplicationSet, condition appv1.ApplicationSetCondition, paramtersGenerated bool) error { // check if error occurred during reconcile process - errOccurred := condition.Type == argov1alpha1.ApplicationSetConditionErrorOccurred + errOccurred := condition.Type == appv1.ApplicationSetConditionErrorOccurred - var errOccurredCondition argov1alpha1.ApplicationSetCondition + var errOccurredCondition appv1.ApplicationSetCondition if errOccurred { errOccurredCondition = condition } else { - errOccurredCondition = argov1alpha1.ApplicationSetCondition{ - Type: argov1alpha1.ApplicationSetConditionErrorOccurred, + errOccurredCondition = appv1.ApplicationSetCondition{ + Type: appv1.ApplicationSetConditionErrorOccurred, Message: "Successfully generated parameters for all Applications", - Reason: argov1alpha1.ApplicationSetReasonApplicationSetUpToDate, - Status: argov1alpha1.ApplicationSetConditionStatusFalse, + Reason: appv1.ApplicationSetReasonApplicationSetUpToDate, + Status: appv1.ApplicationSetConditionStatusFalse, } } paramtersGeneratedCondition := getParametersGeneratedCondition(paramtersGenerated, condition.Message) resourceUpToDateCondition := getResourceUpToDateCondition(errOccurred, condition.Message, condition.Reason) - newConditions := []argov1alpha1.ApplicationSetCondition{errOccurredCondition, paramtersGeneratedCondition, resourceUpToDateCondition} + newConditions := []appv1.ApplicationSetCondition{errOccurredCondition, paramtersGeneratedCondition, resourceUpToDateCondition} needToUpdateConditions := false for _, condition := range newConditions { @@ -398,10 +398,10 @@ func (r *ApplicationSetReconciler) setApplicationSetStatusCondition(ctx context. } } } - evaluatedTypes := map[argov1alpha1.ApplicationSetConditionType]bool{ - argov1alpha1.ApplicationSetConditionErrorOccurred: true, - argov1alpha1.ApplicationSetConditionParametersGenerated: true, - argov1alpha1.ApplicationSetConditionResourcesUpToDate: true, + evaluatedTypes := map[appv1.ApplicationSetConditionType]bool{ + appv1.ApplicationSetConditionErrorOccurred: true, + appv1.ApplicationSetConditionParametersGenerated: true, + appv1.ApplicationSetConditionResourcesUpToDate: true, } if needToUpdateConditions || len(applicationSet.Status.Conditions) < 3 { @@ -430,7 +430,7 @@ func (r *ApplicationSetReconciler) setApplicationSetStatusCondition(ctx context. // validateGeneratedApplications uses the Argo CD validation functions to verify the correctness of the // generated applications. -func (r *ApplicationSetReconciler) validateGeneratedApplications(ctx context.Context, desiredApplications []argov1alpha1.Application, applicationSetInfo argov1alpha1.ApplicationSet) (map[int]error, error) { +func (r *ApplicationSetReconciler) validateGeneratedApplications(ctx context.Context, desiredApplications []appv1.Application, applicationSetInfo appv1.ApplicationSet) (map[int]error, error) { errorsByIndex := map[int]error{} namesSet := map[string]bool{} for i, app := range desiredApplications { @@ -460,7 +460,7 @@ func (r *ApplicationSetReconciler) validateGeneratedApplications(ctx context.Con return errorsByIndex, nil } -func (r *ApplicationSetReconciler) getMinRequeueAfter(applicationSetInfo *argov1alpha1.ApplicationSet) time.Duration { +func (r *ApplicationSetReconciler) getMinRequeueAfter(applicationSetInfo *appv1.ApplicationSet) time.Duration { var res time.Duration for _, requestedGenerator := range applicationSetInfo.Spec.Generators { @@ -480,8 +480,8 @@ func (r *ApplicationSetReconciler) getMinRequeueAfter(applicationSetInfo *argov1 return res } -func getTempApplication(applicationSetTemplate argov1alpha1.ApplicationSetTemplate) *argov1alpha1.Application { - var tmplApplication argov1alpha1.Application +func getTempApplication(applicationSetTemplate appv1.ApplicationSetTemplate) *appv1.Application { + var tmplApplication appv1.Application tmplApplication.Annotations = applicationSetTemplate.Annotations tmplApplication.Labels = applicationSetTemplate.Labels tmplApplication.Namespace = applicationSetTemplate.Namespace @@ -492,11 +492,11 @@ func getTempApplication(applicationSetTemplate argov1alpha1.ApplicationSetTempla return &tmplApplication } -func (r *ApplicationSetReconciler) generateApplications(applicationSetInfo argov1alpha1.ApplicationSet) ([]argov1alpha1.Application, argov1alpha1.ApplicationSetReasonType, error) { - var res []argov1alpha1.Application +func (r *ApplicationSetReconciler) generateApplications(applicationSetInfo appv1.ApplicationSet) ([]appv1.Application, appv1.ApplicationSetReasonType, error) { + var res []appv1.Application var firstError error - var applicationSetReason argov1alpha1.ApplicationSetReasonType + var applicationSetReason appv1.ApplicationSetReasonType for _, requestedGenerator := range applicationSetInfo.Spec.Generators { t, err := generators.Transform(requestedGenerator, r.Generators, applicationSetInfo.Spec.Template, &applicationSetInfo, map[string]interface{}{}) @@ -505,7 +505,7 @@ func (r *ApplicationSetReconciler) generateApplications(applicationSetInfo argov Error("error generating application from params") if firstError == nil { firstError = err - applicationSetReason = argov1alpha1.ApplicationSetReasonApplicationParamsGenerationError + applicationSetReason = appv1.ApplicationSetReasonApplicationParamsGenerationError } continue } @@ -515,16 +515,35 @@ func (r *ApplicationSetReconciler) generateApplications(applicationSetInfo argov for _, p := range a.Params { app, err := r.Renderer.RenderTemplateParams(tmplApplication, applicationSetInfo.Spec.SyncPolicy, p, applicationSetInfo.Spec.GoTemplate, applicationSetInfo.Spec.GoTemplateOptions) + if err != nil { log.WithError(err).WithField("params", a.Params).WithField("generator", requestedGenerator). Error("error generating application from params") if firstError == nil { firstError = err - applicationSetReason = argov1alpha1.ApplicationSetReasonRenderTemplateParamsError + applicationSetReason = appv1.ApplicationSetReasonRenderTemplateParamsError } continue } + + if applicationSetInfo.Spec.TemplatePatch != nil { + patchedApplication, err := r.applyTemplatePatch(app, applicationSetInfo, p) + + if err != nil { + log.WithError(err).WithField("params", a.Params).WithField("generator", requestedGenerator). + Error("error generating application from params") + + if firstError == nil { + firstError = err + applicationSetReason = appv1.ApplicationSetReasonRenderTemplateParamsError + } + continue + } + + app = patchedApplication + } + res = append(res, *app) } } @@ -536,6 +555,16 @@ func (r *ApplicationSetReconciler) generateApplications(applicationSetInfo argov return res, applicationSetReason, firstError } +func (r *ApplicationSetReconciler) applyTemplatePatch(app *appv1.Application, applicationSetInfo appv1.ApplicationSet, params map[string]interface{}) (*appv1.Application, error) { + replacedTemplate, err := r.Renderer.Replace(*applicationSetInfo.Spec.TemplatePatch, params, applicationSetInfo.Spec.GoTemplate, applicationSetInfo.Spec.GoTemplateOptions) + + if err != nil { + return nil, err + } + + return utils.ApplyPatchTemplate(app, replacedTemplate) +} + func ignoreNotAllowedNamespaces(namespaces []string) predicate.Predicate { return predicate.Funcs{ CreateFunc: func(e event.CreateEvent) bool { @@ -569,8 +598,8 @@ func (r *ApplicationSetReconciler) SetupWithManager(mgr ctrl.Manager, enableProg return ctrl.NewControllerManagedBy(mgr).WithOptions(controller.Options{ MaxConcurrentReconciles: maxConcurrentReconciliations, - }).For(&argov1alpha1.ApplicationSet{}). - Owns(&argov1alpha1.Application{}, builder.WithPredicates(ownsHandler)). + }).For(&appv1.ApplicationSet{}). + Owns(&appv1.Application{}, builder.WithPredicates(ownsHandler)). WithEventFilter(ignoreNotAllowedNamespaces(r.ApplicationSetNamespaces)). Watches( &source.Kind{Type: &corev1.Secret{}}, @@ -605,7 +634,7 @@ func (r *ApplicationSetReconciler) updateCache(ctx context.Context, obj client.O // - For new applications, it will call create // - For existing application, it will call update // The function also adds owner reference to all applications, and uses it to delete them. -func (r *ApplicationSetReconciler) createOrUpdateInCluster(ctx context.Context, applicationSet argov1alpha1.ApplicationSet, desiredApplications []argov1alpha1.Application) error { +func (r *ApplicationSetReconciler) createOrUpdateInCluster(ctx context.Context, applicationSet appv1.ApplicationSet, desiredApplications []appv1.Application) error { var firstError error // Creates or updates the application in appList @@ -617,7 +646,7 @@ func (r *ApplicationSetReconciler) createOrUpdateInCluster(ctx context.Context, // Normalize to avoid fighting with the application controller. generatedApp.Spec = *argoutil.NormalizeApplicationSpec(&generatedApp.Spec) - found := &argov1alpha1.Application{ + found := &appv1.Application{ ObjectMeta: metav1.ObjectMeta{ Name: generatedApp.Name, Namespace: generatedApp.Namespace, @@ -714,7 +743,7 @@ func (r *ApplicationSetReconciler) createOrUpdateInCluster(ctx context.Context, } // applyIgnoreDifferences applies the ignore differences rules to the found application. It modifies the found application in place. -func applyIgnoreDifferences(applicationSetIgnoreDifferences argov1alpha1.ApplicationSetIgnoreDifferences, found *argov1alpha1.Application, generatedApp argov1alpha1.Application) error { +func applyIgnoreDifferences(applicationSetIgnoreDifferences appv1.ApplicationSetIgnoreDifferences, found *appv1.Application, generatedApp appv1.Application) error { diffConfig, err := argodiff.NewDiffConfigBuilder(). WithDiffSettings(applicationSetIgnoreDifferences.ToApplicationIgnoreDifferences(), nil, false). WithNoCache(). @@ -753,7 +782,7 @@ func applyIgnoreDifferences(applicationSetIgnoreDifferences argov1alpha1.Applica return nil } -func appToUnstructured(app *argov1alpha1.Application) (*unstructured.Unstructured, error) { +func appToUnstructured(app *appv1.Application) (*unstructured.Unstructured, error) { u, err := runtime.DefaultUnstructuredConverter.ToUnstructured(app) if err != nil { return nil, fmt.Errorf("failed to convert app object to unstructured: %w", err) @@ -763,9 +792,9 @@ func appToUnstructured(app *argov1alpha1.Application) (*unstructured.Unstructure // createInCluster will filter from the desiredApplications only the application that needs to be created // Then it will call createOrUpdateInCluster to do the actual create -func (r *ApplicationSetReconciler) createInCluster(ctx context.Context, applicationSet argov1alpha1.ApplicationSet, desiredApplications []argov1alpha1.Application) error { +func (r *ApplicationSetReconciler) createInCluster(ctx context.Context, applicationSet appv1.ApplicationSet, desiredApplications []appv1.Application) error { - var createApps []argov1alpha1.Application + var createApps []appv1.Application current, err := r.getCurrentApplications(ctx, applicationSet) if err != nil { return fmt.Errorf("error getting current applications: %w", err) @@ -789,9 +818,9 @@ func (r *ApplicationSetReconciler) createInCluster(ctx context.Context, applicat return r.createOrUpdateInCluster(ctx, applicationSet, createApps) } -func (r *ApplicationSetReconciler) getCurrentApplications(_ context.Context, applicationSet argov1alpha1.ApplicationSet) ([]argov1alpha1.Application, error) { +func (r *ApplicationSetReconciler) getCurrentApplications(_ context.Context, applicationSet appv1.ApplicationSet) ([]appv1.Application, error) { // TODO: Should this use the context param? - var current argov1alpha1.ApplicationList + var current appv1.ApplicationList err := r.Client.List(context.Background(), ¤t, client.MatchingFields{".metadata.controller": applicationSet.Name}) if err != nil { @@ -803,7 +832,7 @@ func (r *ApplicationSetReconciler) getCurrentApplications(_ context.Context, app // deleteInCluster will delete Applications that are currently on the cluster, but not in appList. // The function must be called after all generators had been called and generated applications -func (r *ApplicationSetReconciler) deleteInCluster(ctx context.Context, applicationSet argov1alpha1.ApplicationSet, desiredApplications []argov1alpha1.Application) error { +func (r *ApplicationSetReconciler) deleteInCluster(ctx context.Context, applicationSet appv1.ApplicationSet, desiredApplications []appv1.Application) error { // settingsMgr := settings.NewSettingsManager(context.TODO(), r.KubeClientset, applicationSet.Namespace) // argoDB := db.NewDB(applicationSet.Namespace, settingsMgr, r.KubeClientset) // clusterList, err := argoDB.ListClusters(ctx) @@ -858,7 +887,7 @@ func (r *ApplicationSetReconciler) deleteInCluster(ctx context.Context, applicat } // removeFinalizerOnInvalidDestination removes the Argo CD resources finalizer if the application contains an invalid target (eg missing cluster) -func (r *ApplicationSetReconciler) removeFinalizerOnInvalidDestination(ctx context.Context, applicationSet argov1alpha1.ApplicationSet, app *argov1alpha1.Application, clusterList *argov1alpha1.ClusterList, appLog *log.Entry) error { +func (r *ApplicationSetReconciler) removeFinalizerOnInvalidDestination(ctx context.Context, applicationSet appv1.ApplicationSet, app *appv1.Application, clusterList *appv1.ClusterList, appLog *log.Entry) error { // Only check if the finalizers need to be removed IF there are finalizers to remove if len(app.Finalizers) == 0 { @@ -905,7 +934,7 @@ func (r *ApplicationSetReconciler) removeFinalizerOnInvalidDestination(ctx conte // Filter out the Argo CD finalizer from the finalizer list var newFinalizers []string for _, existingFinalizer := range app.Finalizers { - if existingFinalizer != argov1alpha1.ResourcesFinalizerName { // only remove this one + if existingFinalizer != appv1.ResourcesFinalizerName { // only remove this one newFinalizers = append(newFinalizers, existingFinalizer) } } @@ -929,7 +958,7 @@ func (r *ApplicationSetReconciler) removeFinalizerOnInvalidDestination(ctx conte return nil } -func (r *ApplicationSetReconciler) performProgressiveSyncs(ctx context.Context, appset argov1alpha1.ApplicationSet, applications []argov1alpha1.Application, desiredApplications []argov1alpha1.Application, appMap map[string]argov1alpha1.Application) (map[string]bool, error) { +func (r *ApplicationSetReconciler) performProgressiveSyncs(ctx context.Context, appset appv1.ApplicationSet, applications []appv1.Application, desiredApplications []appv1.Application, appMap map[string]appv1.Application) (map[string]bool, error) { appDependencyList, appStepMap, err := r.buildAppDependencyList(ctx, appset, desiredApplications) if err != nil { @@ -967,13 +996,13 @@ func (r *ApplicationSetReconciler) performProgressiveSyncs(ctx context.Context, } // this list tracks which Applications belong to each RollingUpdate step -func (r *ApplicationSetReconciler) buildAppDependencyList(ctx context.Context, applicationSet argov1alpha1.ApplicationSet, applications []argov1alpha1.Application) ([][]string, map[string]int, error) { +func (r *ApplicationSetReconciler) buildAppDependencyList(ctx context.Context, applicationSet appv1.ApplicationSet, applications []appv1.Application) ([][]string, map[string]int, error) { if applicationSet.Spec.Strategy == nil || applicationSet.Spec.Strategy.Type == "" || applicationSet.Spec.Strategy.Type == "AllAtOnce" { return [][]string{}, map[string]int{}, nil } - steps := []argov1alpha1.ApplicationSetRolloutStep{} + steps := []appv1.ApplicationSetRolloutStep{} if progressiveSyncsStrategyEnabled(&applicationSet, "RollingSync") { steps = applicationSet.Spec.Strategy.RollingSync.Steps } @@ -1020,7 +1049,7 @@ func (r *ApplicationSetReconciler) buildAppDependencyList(ctx context.Context, a return appDependencyList, appStepMap, nil } -func labelMatchedExpression(val string, matchExpression argov1alpha1.ApplicationMatchExpression) bool { +func labelMatchedExpression(val string, matchExpression appv1.ApplicationMatchExpression) bool { if matchExpression.Operator != "In" && matchExpression.Operator != "NotIn" { log.Errorf("skipping AppSet rollingUpdate step Application selection, invalid matchExpression operator provided: %q ", matchExpression.Operator) return false @@ -1041,7 +1070,7 @@ func labelMatchedExpression(val string, matchExpression argov1alpha1.Application } // this map is used to determine which stage of Applications are ready to be updated in the reconciler loop -func (r *ApplicationSetReconciler) buildAppSyncMap(ctx context.Context, applicationSet argov1alpha1.ApplicationSet, appDependencyList [][]string, appMap map[string]argov1alpha1.Application) (map[string]bool, error) { +func (r *ApplicationSetReconciler) buildAppSyncMap(ctx context.Context, applicationSet appv1.ApplicationSet, appDependencyList [][]string, appMap map[string]appv1.Application) (map[string]bool, error) { appSyncMap := map[string]bool{} syncEnabled := true @@ -1083,7 +1112,7 @@ func (r *ApplicationSetReconciler) buildAppSyncMap(ctx context.Context, applicat return appSyncMap, nil } -func appSyncEnabledForNextStep(appset *argov1alpha1.ApplicationSet, app argov1alpha1.Application, appStatus argov1alpha1.ApplicationSetApplicationStatus) bool { +func appSyncEnabledForNextStep(appset *appv1.ApplicationSet, app appv1.Application, appStatus appv1.ApplicationSetApplicationStatus) bool { if progressiveSyncsStrategyEnabled(appset, "RollingSync") { // we still need to complete the current step if the Application is not yet Healthy or there are still pending Application changes @@ -1093,7 +1122,7 @@ func appSyncEnabledForNextStep(appset *argov1alpha1.ApplicationSet, app argov1al return true } -func progressiveSyncsStrategyEnabled(appset *argov1alpha1.ApplicationSet, strategyType string) bool { +func progressiveSyncsStrategyEnabled(appset *appv1.ApplicationSet, strategyType string) bool { if appset.Spec.Strategy == nil || appset.Spec.Strategy.Type != strategyType { return false } @@ -1105,7 +1134,7 @@ func progressiveSyncsStrategyEnabled(appset *argov1alpha1.ApplicationSet, strate return true } -func isApplicationHealthy(app argov1alpha1.Application) bool { +func isApplicationHealthy(app appv1.Application) bool { healthStatusString, syncStatusString, operationPhaseString := statusStrings(app) if healthStatusString == "Healthy" && syncStatusString != "OutOfSync" && (operationPhaseString == "Succeeded" || operationPhaseString == "") { @@ -1114,7 +1143,7 @@ func isApplicationHealthy(app argov1alpha1.Application) bool { return false } -func statusStrings(app argov1alpha1.Application) (string, string, string) { +func statusStrings(app appv1.Application) (string, string, string) { healthStatusString := string(app.Status.Health.Status) syncStatusString := string(app.Status.Sync.Status) operationPhaseString := "" @@ -1126,10 +1155,10 @@ func statusStrings(app argov1alpha1.Application) (string, string, string) { } // check the status of each Application's status and promote Applications to the next status if needed -func (r *ApplicationSetReconciler) updateApplicationSetApplicationStatus(ctx context.Context, applicationSet *argov1alpha1.ApplicationSet, applications []argov1alpha1.Application, appStepMap map[string]int) ([]argov1alpha1.ApplicationSetApplicationStatus, error) { +func (r *ApplicationSetReconciler) updateApplicationSetApplicationStatus(ctx context.Context, applicationSet *appv1.ApplicationSet, applications []appv1.Application, appStepMap map[string]int) ([]appv1.ApplicationSetApplicationStatus, error) { now := metav1.Now() - appStatuses := make([]argov1alpha1.ApplicationSetApplicationStatus, 0, len(applications)) + appStatuses := make([]appv1.ApplicationSetApplicationStatus, 0, len(applications)) for _, app := range applications { @@ -1137,11 +1166,11 @@ func (r *ApplicationSetReconciler) updateApplicationSetApplicationStatus(ctx con idx := findApplicationStatusIndex(applicationSet.Status.ApplicationStatus, app.Name) - currentAppStatus := argov1alpha1.ApplicationSetApplicationStatus{} + currentAppStatus := appv1.ApplicationSetApplicationStatus{} if idx == -1 { // AppStatus not found, set default status of "Waiting" - currentAppStatus = argov1alpha1.ApplicationSetApplicationStatus{ + currentAppStatus = appv1.ApplicationSetApplicationStatus{ Application: app.Name, LastTransitionTime: &now, Message: "No Application status found, defaulting status to Waiting.", @@ -1215,10 +1244,10 @@ func (r *ApplicationSetReconciler) updateApplicationSetApplicationStatus(ctx con } // check Applications that are in Waiting status and promote them to Pending if needed -func (r *ApplicationSetReconciler) updateApplicationSetApplicationStatusProgress(ctx context.Context, applicationSet *argov1alpha1.ApplicationSet, appSyncMap map[string]bool, appStepMap map[string]int, appMap map[string]argov1alpha1.Application) ([]argov1alpha1.ApplicationSetApplicationStatus, error) { +func (r *ApplicationSetReconciler) updateApplicationSetApplicationStatusProgress(ctx context.Context, applicationSet *appv1.ApplicationSet, appSyncMap map[string]bool, appStepMap map[string]int, appMap map[string]appv1.Application) ([]appv1.ApplicationSetApplicationStatus, error) { now := metav1.Now() - appStatuses := make([]argov1alpha1.ApplicationSetApplicationStatus, 0, len(applicationSet.Status.ApplicationStatus)) + appStatuses := make([]appv1.ApplicationSetApplicationStatus, 0, len(applicationSet.Status.ApplicationStatus)) // if we have no RollingUpdate steps, clear out the existing ApplicationStatus entries if applicationSet.Spec.Strategy != nil && applicationSet.Spec.Strategy.Type != "" && applicationSet.Spec.Strategy.Type != "AllAtOnce" { @@ -1294,7 +1323,7 @@ func (r *ApplicationSetReconciler) updateApplicationSetApplicationStatusProgress return appStatuses, nil } -func (r *ApplicationSetReconciler) updateApplicationSetApplicationStatusConditions(ctx context.Context, applicationSet *argov1alpha1.ApplicationSet) ([]argov1alpha1.ApplicationSetCondition, error) { +func (r *ApplicationSetReconciler) updateApplicationSetApplicationStatusConditions(ctx context.Context, applicationSet *appv1.ApplicationSet) ([]appv1.ApplicationSetCondition, error) { appSetProgressing := false for _, appStatus := range applicationSet.Status.ApplicationStatus { @@ -1306,7 +1335,7 @@ func (r *ApplicationSetReconciler) updateApplicationSetApplicationStatusConditio appSetConditionProgressing := false for _, appSetCondition := range applicationSet.Status.Conditions { - if appSetCondition.Type == argov1alpha1.ApplicationSetConditionRolloutProgressing && appSetCondition.Status == argov1alpha1.ApplicationSetConditionStatusTrue { + if appSetCondition.Type == appv1.ApplicationSetConditionRolloutProgressing && appSetCondition.Status == appv1.ApplicationSetConditionStatusTrue { appSetConditionProgressing = true break } @@ -1315,21 +1344,21 @@ func (r *ApplicationSetReconciler) updateApplicationSetApplicationStatusConditio if appSetProgressing && !appSetConditionProgressing { _ = r.setApplicationSetStatusCondition(ctx, applicationSet, - argov1alpha1.ApplicationSetCondition{ - Type: argov1alpha1.ApplicationSetConditionRolloutProgressing, + appv1.ApplicationSetCondition{ + Type: appv1.ApplicationSetConditionRolloutProgressing, Message: "ApplicationSet Rollout Rollout started", - Reason: argov1alpha1.ApplicationSetReasonApplicationSetModified, - Status: argov1alpha1.ApplicationSetConditionStatusTrue, + Reason: appv1.ApplicationSetReasonApplicationSetModified, + Status: appv1.ApplicationSetConditionStatusTrue, }, false, ) } else if !appSetProgressing && appSetConditionProgressing { _ = r.setApplicationSetStatusCondition(ctx, applicationSet, - argov1alpha1.ApplicationSetCondition{ - Type: argov1alpha1.ApplicationSetConditionRolloutProgressing, + appv1.ApplicationSetCondition{ + Type: appv1.ApplicationSetConditionRolloutProgressing, Message: "ApplicationSet Rollout Rollout complete", - Reason: argov1alpha1.ApplicationSetReasonApplicationSetRolloutComplete, - Status: argov1alpha1.ApplicationSetConditionStatusFalse, + Reason: appv1.ApplicationSetReasonApplicationSetRolloutComplete, + Status: appv1.ApplicationSetConditionStatusFalse, }, false, ) } @@ -1337,7 +1366,7 @@ func (r *ApplicationSetReconciler) updateApplicationSetApplicationStatusConditio return applicationSet.Status.Conditions, nil } -func findApplicationStatusIndex(appStatuses []argov1alpha1.ApplicationSetApplicationStatus, application string) int { +func findApplicationStatusIndex(appStatuses []appv1.ApplicationSetApplicationStatus, application string) int { for i := range appStatuses { if appStatuses[i].Application == application { return i @@ -1348,7 +1377,7 @@ func findApplicationStatusIndex(appStatuses []argov1alpha1.ApplicationSetApplica // setApplicationSetApplicationStatus updates the ApplicatonSet's status field // with any new/changed Application statuses. -func (r *ApplicationSetReconciler) setAppSetApplicationStatus(ctx context.Context, applicationSet *argov1alpha1.ApplicationSet, applicationStatuses []argov1alpha1.ApplicationSetApplicationStatus) error { +func (r *ApplicationSetReconciler) setAppSetApplicationStatus(ctx context.Context, applicationSet *appv1.ApplicationSet, applicationStatuses []appv1.ApplicationSetApplicationStatus) error { needToUpdateStatus := false if len(applicationStatuses) != len(applicationSet.Status.ApplicationStatus) { @@ -1373,7 +1402,7 @@ func (r *ApplicationSetReconciler) setAppSetApplicationStatus(ctx context.Contex namespacedName := types.NamespacedName{Namespace: applicationSet.Namespace, Name: applicationSet.Name} // rebuild ApplicationStatus from scratch, we don't need any previous status history - applicationSet.Status.ApplicationStatus = []argov1alpha1.ApplicationSetApplicationStatus{} + applicationSet.Status.ApplicationStatus = []appv1.ApplicationSetApplicationStatus{} for i := range applicationStatuses { applicationSet.Status.SetApplicationStatus(applicationStatuses[i]) } @@ -1397,8 +1426,8 @@ func (r *ApplicationSetReconciler) setAppSetApplicationStatus(ctx context.Contex return nil } -func (r *ApplicationSetReconciler) syncValidApplications(ctx context.Context, applicationSet *argov1alpha1.ApplicationSet, appSyncMap map[string]bool, appMap map[string]argov1alpha1.Application, validApps []argov1alpha1.Application) ([]argov1alpha1.Application, error) { - rolloutApps := []argov1alpha1.Application{} +func (r *ApplicationSetReconciler) syncValidApplications(ctx context.Context, applicationSet *appv1.ApplicationSet, appSyncMap map[string]bool, appMap map[string]appv1.Application, validApps []appv1.Application) ([]appv1.Application, error) { + rolloutApps := []appv1.Application{} for i := range validApps { pruneEnabled := false @@ -1426,20 +1455,20 @@ func (r *ApplicationSetReconciler) syncValidApplications(ctx context.Context, ap } // used by the RollingSync Progressive Sync strategy to trigger a sync of a particular Application resource -func syncApplication(application argov1alpha1.Application, prune bool) (argov1alpha1.Application, error) { +func syncApplication(application appv1.Application, prune bool) (appv1.Application, error) { - operation := argov1alpha1.Operation{ - InitiatedBy: argov1alpha1.OperationInitiator{ + operation := appv1.Operation{ + InitiatedBy: appv1.OperationInitiator{ Username: "applicationset-controller", Automated: true, }, - Info: []*argov1alpha1.Info{ + Info: []*appv1.Info{ { Name: "Reason", Value: "ApplicationSet RollingSync triggered a sync of this Application resource.", }, }, - Sync: &argov1alpha1.SyncOperation{}, + Sync: &appv1.SyncOperation{}, } if application.Spec.SyncPolicy != nil { @@ -1470,11 +1499,11 @@ func getOwnsHandlerPredicates(enableProgressiveSyncs bool) predicate.Funcs { }, UpdateFunc: func(e event.UpdateEvent) bool { log.Debugln("received update event from owning an application") - appOld, isApp := e.ObjectOld.(*argov1alpha1.Application) + appOld, isApp := e.ObjectOld.(*appv1.Application) if !isApp { return false } - appNew, isApp := e.ObjectNew.(*argov1alpha1.Application) + appNew, isApp := e.ObjectNew.(*appv1.Application) if !isApp { return false } @@ -1495,7 +1524,7 @@ func getOwnsHandlerPredicates(enableProgressiveSyncs bool) predicate.Funcs { // We do not need to re-reconcile if parts of the application change outside the applicationset's control. // An example being, Application.ApplicationStatus.ReconciledAt which gets updated by the application controller. // Additionally, Application.ObjectMeta.ResourceVersion and Application.ObjectMeta.Generation which are set by K8s. -func shouldRequeueApplicationSet(appOld *argov1alpha1.Application, appNew *argov1alpha1.Application, enableProgressiveSyncs bool) bool { +func shouldRequeueApplicationSet(appOld *appv1.Application, appNew *appv1.Application, enableProgressiveSyncs bool) bool { if appOld == nil || appNew == nil { return false } diff --git a/applicationset/controllers/applicationset_controller_test.go b/applicationset/controllers/applicationset_controller_test.go index d734d26ff437e..7cd164f401180 100644 --- a/applicationset/controllers/applicationset_controller_test.go +++ b/applicationset/controllers/applicationset_controller_test.go @@ -88,6 +88,12 @@ func (g *generatorMock) GenerateParams(appSetGenerator *v1alpha1.ApplicationSetG return args.Get(0).([]map[string]interface{}), args.Error(1) } +func (g *generatorMock) Replace(tmpl string, replaceMap map[string]interface{}, useGoTemplate bool, goTemplateOptions []string) (string, error) { + args := g.Called(tmpl, replaceMap, useGoTemplate, goTemplateOptions) + + return args.Get(0).(string), args.Error(1) +} + type rendererMock struct { mock.Mock } @@ -109,6 +115,12 @@ func (r *rendererMock) RenderTemplateParams(tmpl *v1alpha1.Application, syncPoli } +func (r *rendererMock) Replace(tmpl string, replaceMap map[string]interface{}, useGoTemplate bool, goTemplateOptions []string) (string, error) { + args := r.Called(tmpl, replaceMap, useGoTemplate, goTemplateOptions) + + return args.Get(0).(string), args.Error(1) +} + func TestExtractApplications(t *testing.T) { scheme := runtime.NewScheme() err := v1alpha1.AddToScheme(scheme) diff --git a/applicationset/utils/templatePatch.go b/applicationset/utils/templatePatch.go new file mode 100644 index 0000000000000..36ed522d1a35a --- /dev/null +++ b/applicationset/utils/templatePatch.go @@ -0,0 +1,42 @@ +package utils + +import ( + "encoding/json" + "fmt" + + "k8s.io/apimachinery/pkg/util/strategicpatch" + + appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" +) + +func ApplyPatchTemplate(app *appv1.Application, templatePatch string) (*appv1.Application, error) { + + appString, err := json.Marshal(app) + if err != nil { + return nil, fmt.Errorf("error while marhsalling Application %w", err) + } + + convertedTemplatePatch, err := ConvertYAMLToJSON(templatePatch) + + if err != nil { + return nil, fmt.Errorf("error while converting template to json %q: %w", convertedTemplatePatch, err) + } + + if err := json.Unmarshal([]byte(convertedTemplatePatch), &appv1.Application{}); err != nil { + return nil, fmt.Errorf("invalid templatePatch %q: %w", convertedTemplatePatch, err) + } + + data, err := strategicpatch.StrategicMergePatch([]byte(appString), []byte(convertedTemplatePatch), appv1.Application{}) + + if err != nil { + return nil, fmt.Errorf("error while applying templatePatch template to json %q: %w", convertedTemplatePatch, err) + } + + finalApp := appv1.Application{} + err = json.Unmarshal(data, &finalApp) + if err != nil { + return nil, fmt.Errorf("error while unmarhsalling patched application %w", err) + } + + return &finalApp, err +} diff --git a/applicationset/utils/templatePatch_test.go b/applicationset/utils/templatePatch_test.go new file mode 100644 index 0000000000000..6c9515ee5c886 --- /dev/null +++ b/applicationset/utils/templatePatch_test.go @@ -0,0 +1,99 @@ +package utils + +import ( + "testing" + + appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + argov1alpha1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + "github.com/argoproj/argo-cd/v2/test/e2e/fixture/applicationsets/utils" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +func validate(t *testing.T, patch string) { + app := &appv1.Application{ + TypeMeta: metav1.TypeMeta{ + Kind: "Application", + APIVersion: "argoproj.io/v1alpha1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "my-cluster-guestbook", + Namespace: utils.ArgoCDExternalNamespace, + Finalizers: []string{"resources-finalizer.argocd.argoproj.io"}, + }, + Spec: argov1alpha1.ApplicationSpec{ + Project: "default", + Source: &argov1alpha1.ApplicationSource{ + RepoURL: "https://github.com/argoproj/argocd-example-apps.git", + TargetRevision: "HEAD", + Path: "guestbook", + }, + Destination: argov1alpha1.ApplicationDestination{ + Server: "https://kubernetes.default.svc", + Namespace: "guestbook", + }, + }, + } + + result, err := ApplyPatchTemplate(app, patch) + require.NoError(t, err) + require.Contains(t, result.ObjectMeta.Annotations, "annotation-some-key") + assert.Equal(t, result.ObjectMeta.Annotations["annotation-some-key"], "annotation-some-value") + + assert.Equal(t, result.Spec.SyncPolicy.Automated.Prune, true) + require.Contains(t, result.Spec.Source.Helm.ValueFiles, "values.test.yaml") + require.Contains(t, result.Spec.Source.Helm.ValueFiles, "values.big.yaml") +} + +func TestWithJson(t *testing.T) { + + validate(t, `{ + "metadata": { + "annotations": { + "annotation-some-key": "annotation-some-value" + } + }, + "spec": { + "source": { + "helm": { + "valueFiles": [ + "values.test.yaml", + "values.big.yaml" + ] + } + }, + "syncPolicy": { + "automated": { + "prune": true + } + } + } + }`) + +} + +func TestWithYaml(t *testing.T) { + + validate(t, ` +metadata: + annotations: + annotation-some-key: annotation-some-value +spec: + source: + helm: + valueFiles: + - values.test.yaml + - values.big.yaml + syncPolicy: + automated: + prune: true`) +} + +func TestError(t *testing.T) { + app := &appv1.Application{} + + result, err := ApplyPatchTemplate(app, "hello world") + require.Error(t, err) + require.Nil(t, result) +} diff --git a/applicationset/utils/utils.go b/applicationset/utils/utils.go index 089a6ff103100..bad3df145e0c1 100644 --- a/applicationset/utils/utils.go +++ b/applicationset/utils/utils.go @@ -39,6 +39,7 @@ func init() { type Renderer interface { RenderTemplateParams(tmpl *argoappsv1.Application, syncPolicy *argoappsv1.ApplicationSetSyncPolicy, params map[string]interface{}, useGoTemplate bool, goTemplateOptions []string) (*argoappsv1.Application, error) + Replace(tmpl string, replaceMap map[string]interface{}, useGoTemplate bool, goTemplateOptions []string) (string, error) } type Render struct { diff --git a/assets/swagger.json b/assets/swagger.json index b9d4cbf21c563..d8255cc84c211 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -6140,6 +6140,9 @@ }, "template": { "$ref": "#/definitions/v1alpha1ApplicationSetTemplate" + }, + "templatePatch": { + "type": "string" } } }, diff --git a/docs/operator-manual/applicationset/Template.md b/docs/operator-manual/applicationset/Template.md index f66a403586bbd..4fd1a2233a977 100644 --- a/docs/operator-manual/applicationset/Template.md +++ b/docs/operator-manual/applicationset/Template.md @@ -108,3 +108,60 @@ spec: (*The full example can be found [here](https://github.com/argoproj/argo-cd/tree/master/applicationset/examples/template-override).*) In this example, the ApplicationSet controller will generate an `Application` resource using the `path` generated by the List generator, rather than the `path` value defined in `.spec.template`. + +## Patch Template + +Templating is only available on string type. However some uses cases may require to apply templating on other types. + +Example: + +- Set the automated sync policy +- Switch prune boolean to true +- Add multiple helm value files + +ArgoCD has a `templatePatch` feature to allow advanced templating. It supports both json and yaml + + +```yaml +apiVersion: argoproj.io/v1alpha1 +kind: ApplicationSet +metadata: + name: guestbook +spec: + goTemplate: true + generators: + - list: + elements: + - cluster: engineering-dev + url: https://kubernetes.default.svc + autoSync: true + prune: true + valueFiles: + - values.large.yaml + - values.debug.yaml + templatePatch: | + spec: + source: + helm: + valueFiles: + {{- range $valueFile := .valueFiles }} + - {{ $valueFile }} + {{- end }} + {{- if .autoSync }} + syncPolicy: + automated: + prune: {{ .prune }} + {{- end }} + template: + metadata: + name: '{{.cluster}}-deployment' + spec: + project: "default" + source: + repoURL: https://github.com/infra-team/cluster-deployments.git + targetRevision: HEAD + path: guestbook/{{ .cluster }} + destination: + server: '{{.url}}' + namespace: guestbook +``` \ No newline at end of file diff --git a/manifests/core-install.yaml b/manifests/core-install.yaml index 8456f5c3ef430..5b0c55a5e16d7 100644 --- a/manifests/core-install.yaml +++ b/manifests/core-install.yaml @@ -19855,6 +19855,8 @@ spec: - metadata - spec type: object + templatePatch: + type: string required: - generators - template diff --git a/manifests/crds/applicationset-crd.yaml b/manifests/crds/applicationset-crd.yaml index 9348368951811..b31ed4f7a64ce 100644 --- a/manifests/crds/applicationset-crd.yaml +++ b/manifests/crds/applicationset-crd.yaml @@ -14991,6 +14991,8 @@ spec: - metadata - spec type: object + templatePatch: + type: string required: - generators - template diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml index a2e1e5b91b668..e6eca3ad330eb 100644 --- a/manifests/ha/install.yaml +++ b/manifests/ha/install.yaml @@ -19855,6 +19855,8 @@ spec: - metadata - spec type: object + templatePatch: + type: string required: - generators - template diff --git a/manifests/install.yaml b/manifests/install.yaml index 6783484ed0150..e4907fff98c6b 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -19855,6 +19855,8 @@ spec: - metadata - spec type: object + templatePatch: + type: string required: - generators - template diff --git a/pkg/apis/application/v1alpha1/applicationset_types.go b/pkg/apis/application/v1alpha1/applicationset_types.go index 99db8124e51ea..41721d0c2287c 100644 --- a/pkg/apis/application/v1alpha1/applicationset_types.go +++ b/pkg/apis/application/v1alpha1/applicationset_types.go @@ -65,6 +65,7 @@ type ApplicationSetSpec struct { // ApplyNestedSelectors enables selectors defined within the generators of two level-nested matrix or merge generators ApplyNestedSelectors bool `json:"applyNestedSelectors,omitempty" protobuf:"bytes,8,name=applyNestedSelectors"` IgnoreApplicationDifferences ApplicationSetIgnoreDifferences `json:"ignoreApplicationDifferences,omitempty" protobuf:"bytes,9,name=ignoreApplicationDifferences"` + TemplatePatch *string `json:"templatePatch,omitempty" protobuf:"bytes,10,name=templatePatch"` } type ApplicationPreservedFields struct { diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index 91e8f8d42963b..f24cf01ede35a 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -4448,692 +4448,693 @@ func init() { } var fileDescriptor_030104ce3b95bcac = []byte{ - // 10945 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6f, 0x70, 0x1c, 0xc9, - 0x75, 0x18, 0xae, 0xd9, 0x3f, 0xc0, 0xee, 0x03, 0x08, 0x92, 0x4d, 0xf2, 0x0e, 0xa4, 0xee, 0x0e, - 0xf4, 0xdc, 0xcf, 0xa7, 0xf3, 0x4f, 0x77, 0x80, 0x8f, 0xba, 0x53, 0x2e, 0x3a, 0x5b, 0x32, 0xfe, - 0x90, 0x20, 0x48, 0x80, 0xc0, 0x35, 0x40, 0x52, 0x3a, 0xf9, 0x74, 0x1a, 0xec, 0x36, 0x16, 0x43, - 0xcc, 0xce, 0xcc, 0xcd, 0xcc, 0x82, 0xc0, 0x59, 0x92, 0x25, 0x4b, 0xb6, 0x95, 0xe8, 0xcf, 0x29, - 0x52, 0x52, 0x3e, 0x27, 0x91, 0x23, 0x5b, 0x4e, 0x2a, 0xae, 0x44, 0x15, 0x27, 0xf9, 0x10, 0x27, - 0x4e, 0xca, 0x65, 0x3b, 0x95, 0x52, 0x4a, 0x49, 0xd9, 0x95, 0x72, 0x59, 0x4e, 0x62, 0x23, 0x12, - 0x52, 0xae, 0xa4, 0x52, 0x15, 0x57, 0x39, 0xf1, 0x07, 0x87, 0xc9, 0x87, 0x54, 0xff, 0xef, 0x99, - 0x9d, 0x05, 0x16, 0xc0, 0x80, 0xa4, 0x94, 0xfb, 0xb6, 0xdb, 0xef, 0xcd, 0x7b, 0x3d, 0x3d, 0xdd, - 0xef, 0xbd, 0x7e, 0xfd, 0xde, 0x6b, 0x98, 0x6f, 0xb9, 0xc9, 0x7a, 0x67, 0x75, 0xbc, 0x11, 0xb4, - 0x27, 0x9c, 0xa8, 0x15, 0x84, 0x51, 0x70, 0x87, 0xfd, 0x78, 0xb6, 0xd1, 0x9c, 0xd8, 0xbc, 0x34, - 0x11, 0x6e, 0xb4, 0x26, 0x9c, 0xd0, 0x8d, 0x27, 0x9c, 0x30, 0xf4, 0xdc, 0x86, 0x93, 0xb8, 0x81, - 0x3f, 0xb1, 0xf9, 0x9c, 0xe3, 0x85, 0xeb, 0xce, 0x73, 0x13, 0x2d, 0xe2, 0x93, 0xc8, 0x49, 0x48, - 0x73, 0x3c, 0x8c, 0x82, 0x24, 0x40, 0x3f, 0xa2, 0xa9, 0x8d, 0x4b, 0x6a, 0xec, 0xc7, 0x6b, 0x8d, - 0xe6, 0xf8, 0xe6, 0xa5, 0xf1, 0x70, 0xa3, 0x35, 0x4e, 0xa9, 0x8d, 0x1b, 0xd4, 0xc6, 0x25, 0xb5, - 0x0b, 0xcf, 0x1a, 0x7d, 0x69, 0x05, 0xad, 0x60, 0x82, 0x11, 0x5d, 0xed, 0xac, 0xb1, 0x7f, 0xec, - 0x0f, 0xfb, 0xc5, 0x99, 0x5d, 0xb0, 0x37, 0x5e, 0x8c, 0xc7, 0xdd, 0x80, 0x76, 0x6f, 0xa2, 0x11, - 0x44, 0x64, 0x62, 0xb3, 0xab, 0x43, 0x17, 0xae, 0x6a, 0x1c, 0xb2, 0x95, 0x10, 0x3f, 0x76, 0x03, - 0x3f, 0x7e, 0x96, 0x76, 0x81, 0x44, 0x9b, 0x24, 0x32, 0x5f, 0xcf, 0x40, 0xc8, 0xa3, 0xf4, 0xbc, - 0xa6, 0xd4, 0x76, 0x1a, 0xeb, 0xae, 0x4f, 0xa2, 0x6d, 0xfd, 0x78, 0x9b, 0x24, 0x4e, 0xde, 0x53, - 0x13, 0xbd, 0x9e, 0x8a, 0x3a, 0x7e, 0xe2, 0xb6, 0x49, 0xd7, 0x03, 0xef, 0xdd, 0xef, 0x81, 0xb8, - 0xb1, 0x4e, 0xda, 0x4e, 0xd7, 0x73, 0xef, 0xe9, 0xf5, 0x5c, 0x27, 0x71, 0xbd, 0x09, 0xd7, 0x4f, - 0xe2, 0x24, 0xca, 0x3e, 0x64, 0xbf, 0x0e, 0x27, 0x26, 0x6f, 0x2f, 0x4f, 0x76, 0x92, 0xf5, 0xe9, - 0xc0, 0x5f, 0x73, 0x5b, 0xe8, 0x05, 0x18, 0x6a, 0x78, 0x9d, 0x38, 0x21, 0xd1, 0x0d, 0xa7, 0x4d, - 0x46, 0xad, 0x8b, 0xd6, 0xd3, 0xf5, 0xa9, 0x33, 0xdf, 0xdc, 0x19, 0x7b, 0xc7, 0xee, 0xce, 0xd8, - 0xd0, 0xb4, 0x06, 0x61, 0x13, 0x0f, 0xfd, 0x10, 0x0c, 0x46, 0x81, 0x47, 0x26, 0xf1, 0x8d, 0xd1, - 0x12, 0x7b, 0xe4, 0xa4, 0x78, 0x64, 0x10, 0xf3, 0x66, 0x2c, 0xe1, 0xf6, 0xef, 0x97, 0x00, 0x26, - 0xc3, 0x70, 0x29, 0x0a, 0xee, 0x90, 0x46, 0x82, 0x3e, 0x0a, 0x35, 0x3a, 0x74, 0x4d, 0x27, 0x71, - 0x18, 0xb7, 0xa1, 0x4b, 0x3f, 0x3c, 0xce, 0xdf, 0x64, 0xdc, 0x7c, 0x13, 0x3d, 0x71, 0x28, 0xf6, - 0xf8, 0xe6, 0x73, 0xe3, 0x8b, 0xab, 0xf4, 0xf9, 0x05, 0x92, 0x38, 0x53, 0x48, 0x30, 0x03, 0xdd, - 0x86, 0x15, 0x55, 0xe4, 0x43, 0x25, 0x0e, 0x49, 0x83, 0x75, 0x6c, 0xe8, 0xd2, 0xfc, 0xf8, 0x51, - 0x66, 0xe8, 0xb8, 0xee, 0xf9, 0x72, 0x48, 0x1a, 0x53, 0xc3, 0x82, 0x73, 0x85, 0xfe, 0xc3, 0x8c, - 0x0f, 0xda, 0x84, 0x81, 0x38, 0x71, 0x92, 0x4e, 0x3c, 0x5a, 0x66, 0x1c, 0x6f, 0x14, 0xc6, 0x91, - 0x51, 0x9d, 0x1a, 0x11, 0x3c, 0x07, 0xf8, 0x7f, 0x2c, 0xb8, 0xd9, 0x7f, 0x64, 0xc1, 0x88, 0x46, - 0x9e, 0x77, 0xe3, 0x04, 0xfd, 0x78, 0xd7, 0xe0, 0x8e, 0xf7, 0x37, 0xb8, 0xf4, 0x69, 0x36, 0xb4, - 0xa7, 0x04, 0xb3, 0x9a, 0x6c, 0x31, 0x06, 0xb6, 0x0d, 0x55, 0x37, 0x21, 0xed, 0x78, 0xb4, 0x74, - 0xb1, 0xfc, 0xf4, 0xd0, 0xa5, 0xab, 0x45, 0xbd, 0xe7, 0xd4, 0x09, 0xc1, 0xb4, 0x3a, 0x47, 0xc9, - 0x63, 0xce, 0xc5, 0xfe, 0x95, 0x61, 0xf3, 0xfd, 0xe8, 0x80, 0xa3, 0xe7, 0x60, 0x28, 0x0e, 0x3a, - 0x51, 0x83, 0x60, 0x12, 0x06, 0xf1, 0xa8, 0x75, 0xb1, 0x4c, 0xa7, 0x1e, 0x9d, 0xa9, 0xcb, 0xba, - 0x19, 0x9b, 0x38, 0xe8, 0x8b, 0x16, 0x0c, 0x37, 0x49, 0x9c, 0xb8, 0x3e, 0xe3, 0x2f, 0x3b, 0xbf, - 0x72, 0xe4, 0xce, 0xcb, 0xc6, 0x19, 0x4d, 0x7c, 0xea, 0xac, 0x78, 0x91, 0x61, 0xa3, 0x31, 0xc6, - 0x29, 0xfe, 0x74, 0xc5, 0x35, 0x49, 0xdc, 0x88, 0xdc, 0x90, 0xfe, 0x67, 0x73, 0xc6, 0x58, 0x71, - 0x33, 0x1a, 0x84, 0x4d, 0x3c, 0xe4, 0x43, 0x95, 0xae, 0xa8, 0x78, 0xb4, 0xc2, 0xfa, 0x3f, 0x77, - 0xb4, 0xfe, 0x8b, 0x41, 0xa5, 0x8b, 0x55, 0x8f, 0x3e, 0xfd, 0x17, 0x63, 0xce, 0x06, 0x7d, 0xc1, - 0x82, 0x51, 0xb1, 0xe2, 0x31, 0xe1, 0x03, 0x7a, 0x7b, 0xdd, 0x4d, 0x88, 0xe7, 0xc6, 0xc9, 0x68, - 0x95, 0xf5, 0x61, 0xa2, 0xbf, 0xb9, 0x35, 0x1b, 0x05, 0x9d, 0xf0, 0xba, 0xeb, 0x37, 0xa7, 0x2e, - 0x0a, 0x4e, 0xa3, 0xd3, 0x3d, 0x08, 0xe3, 0x9e, 0x2c, 0xd1, 0x57, 0x2c, 0xb8, 0xe0, 0x3b, 0x6d, - 0x12, 0x87, 0x0e, 0xfd, 0xb4, 0x1c, 0x3c, 0xe5, 0x39, 0x8d, 0x0d, 0xd6, 0xa3, 0x81, 0xc3, 0xf5, - 0xc8, 0x16, 0x3d, 0xba, 0x70, 0xa3, 0x27, 0x69, 0xbc, 0x07, 0x5b, 0xf4, 0x75, 0x0b, 0x4e, 0x07, - 0x51, 0xb8, 0xee, 0xf8, 0xa4, 0x29, 0xa1, 0xf1, 0xe8, 0x20, 0x5b, 0x7a, 0x1f, 0x39, 0xda, 0x27, - 0x5a, 0xcc, 0x92, 0x5d, 0x08, 0x7c, 0x37, 0x09, 0xa2, 0x65, 0x92, 0x24, 0xae, 0xdf, 0x8a, 0xa7, - 0xce, 0xed, 0xee, 0x8c, 0x9d, 0xee, 0xc2, 0xc2, 0xdd, 0xfd, 0x41, 0x3f, 0x01, 0x43, 0xf1, 0xb6, - 0xdf, 0xb8, 0xed, 0xfa, 0xcd, 0xe0, 0x6e, 0x3c, 0x5a, 0x2b, 0x62, 0xf9, 0x2e, 0x2b, 0x82, 0x62, + // 10969 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x70, 0x1c, 0xc9, + 0x75, 0x18, 0xae, 0xd9, 0x0f, 0x60, 0xf7, 0xe1, 0x83, 0x64, 0x93, 0xbc, 0x03, 0xa9, 0xbb, 0x03, + 0x3d, 0xf7, 0xf3, 0xe9, 0xfc, 0xd3, 0x1d, 0xe0, 0xa3, 0xef, 0xe4, 0x8b, 0xce, 0x96, 0x8c, 0x0f, + 0x12, 0x04, 0x09, 0x10, 0xb8, 0x06, 0x48, 0x4a, 0x27, 0x9f, 0x4e, 0x83, 0xdd, 0xc6, 0x62, 0x88, + 0xd9, 0x99, 0xb9, 0x99, 0x59, 0x10, 0x38, 0x4b, 0xb2, 0x64, 0xc9, 0xb6, 0x12, 0x7d, 0x9c, 0x22, + 0x25, 0xe5, 0x73, 0x12, 0x29, 0xb2, 0xe5, 0xa4, 0xe2, 0x4a, 0x54, 0x71, 0x92, 0x3f, 0xe2, 0xc4, + 0x49, 0xb9, 0x6c, 0xa7, 0x52, 0x4a, 0x29, 0x29, 0xbb, 0x52, 0x2e, 0xcb, 0x49, 0x6c, 0x44, 0x62, + 0x2a, 0x95, 0x54, 0xaa, 0xe2, 0x2a, 0x27, 0xfe, 0xc3, 0x61, 0xf2, 0x47, 0xaa, 0xbf, 0x7b, 0x66, + 0x67, 0x81, 0x05, 0x30, 0x20, 0x29, 0xe5, 0xfe, 0xdb, 0xed, 0xf7, 0xe6, 0xbd, 0x9e, 0x9e, 0xee, + 0xf7, 0x5e, 0xbf, 0x7e, 0xef, 0x35, 0x2c, 0xb4, 0xdc, 0x64, 0xa3, 0xb3, 0x36, 0xd1, 0x08, 0xda, + 0x93, 0x4e, 0xd4, 0x0a, 0xc2, 0x28, 0xb8, 0xcd, 0x7e, 0x3c, 0xdb, 0x68, 0x4e, 0x6e, 0x5d, 0x9c, + 0x0c, 0x37, 0x5b, 0x93, 0x4e, 0xe8, 0xc6, 0x93, 0x4e, 0x18, 0x7a, 0x6e, 0xc3, 0x49, 0xdc, 0xc0, + 0x9f, 0xdc, 0x7a, 0xce, 0xf1, 0xc2, 0x0d, 0xe7, 0xb9, 0xc9, 0x16, 0xf1, 0x49, 0xe4, 0x24, 0xa4, + 0x39, 0x11, 0x46, 0x41, 0x12, 0xa0, 0x1f, 0xd3, 0xd4, 0x26, 0x24, 0x35, 0xf6, 0xe3, 0xb5, 0x46, + 0x73, 0x62, 0xeb, 0xe2, 0x44, 0xb8, 0xd9, 0x9a, 0xa0, 0xd4, 0x26, 0x0c, 0x6a, 0x13, 0x92, 0xda, + 0xf9, 0x67, 0x8d, 0xbe, 0xb4, 0x82, 0x56, 0x30, 0xc9, 0x88, 0xae, 0x75, 0xd6, 0xd9, 0x3f, 0xf6, + 0x87, 0xfd, 0xe2, 0xcc, 0xce, 0xdb, 0x9b, 0x2f, 0xc6, 0x13, 0x6e, 0x40, 0xbb, 0x37, 0xd9, 0x08, + 0x22, 0x32, 0xb9, 0xd5, 0xd5, 0xa1, 0xf3, 0x57, 0x34, 0x0e, 0xd9, 0x4e, 0x88, 0x1f, 0xbb, 0x81, + 0x1f, 0x3f, 0x4b, 0xbb, 0x40, 0xa2, 0x2d, 0x12, 0x99, 0xaf, 0x67, 0x20, 0xe4, 0x51, 0x7a, 0x5e, + 0x53, 0x6a, 0x3b, 0x8d, 0x0d, 0xd7, 0x27, 0xd1, 0x8e, 0x7e, 0xbc, 0x4d, 0x12, 0x27, 0xef, 0xa9, + 0xc9, 0x5e, 0x4f, 0x45, 0x1d, 0x3f, 0x71, 0xdb, 0xa4, 0xeb, 0x81, 0xf7, 0xec, 0xf7, 0x40, 0xdc, + 0xd8, 0x20, 0x6d, 0xa7, 0xeb, 0xb9, 0x1f, 0xe9, 0xf5, 0x5c, 0x27, 0x71, 0xbd, 0x49, 0xd7, 0x4f, + 0xe2, 0x24, 0xca, 0x3e, 0x64, 0xbf, 0x0e, 0x23, 0x53, 0xb7, 0x56, 0xa6, 0x3a, 0xc9, 0xc6, 0x4c, + 0xe0, 0xaf, 0xbb, 0x2d, 0xf4, 0x02, 0x0c, 0x35, 0xbc, 0x4e, 0x9c, 0x90, 0xe8, 0xba, 0xd3, 0x26, + 0x63, 0xd6, 0x05, 0xeb, 0xe9, 0xfa, 0xf4, 0xe9, 0x6f, 0xee, 0x8e, 0xbf, 0xe3, 0xee, 0xee, 0xf8, + 0xd0, 0x8c, 0x06, 0x61, 0x13, 0x0f, 0xfd, 0x10, 0x0c, 0x46, 0x81, 0x47, 0xa6, 0xf0, 0xf5, 0xb1, + 0x12, 0x7b, 0xe4, 0x84, 0x78, 0x64, 0x10, 0xf3, 0x66, 0x2c, 0xe1, 0xf6, 0x1f, 0x94, 0x00, 0xa6, + 0xc2, 0x70, 0x39, 0x0a, 0x6e, 0x93, 0x46, 0x82, 0x3e, 0x02, 0x35, 0x3a, 0x74, 0x4d, 0x27, 0x71, + 0x18, 0xb7, 0xa1, 0x8b, 0x3f, 0x3c, 0xc1, 0xdf, 0x64, 0xc2, 0x7c, 0x13, 0x3d, 0x71, 0x28, 0xf6, + 0xc4, 0xd6, 0x73, 0x13, 0x4b, 0x6b, 0xf4, 0xf9, 0x45, 0x92, 0x38, 0xd3, 0x48, 0x30, 0x03, 0xdd, + 0x86, 0x15, 0x55, 0xe4, 0x43, 0x25, 0x0e, 0x49, 0x83, 0x75, 0x6c, 0xe8, 0xe2, 0xc2, 0xc4, 0x51, + 0x66, 0xe8, 0x84, 0xee, 0xf9, 0x4a, 0x48, 0x1a, 0xd3, 0xc3, 0x82, 0x73, 0x85, 0xfe, 0xc3, 0x8c, + 0x0f, 0xda, 0x82, 0x81, 0x38, 0x71, 0x92, 0x4e, 0x3c, 0x56, 0x66, 0x1c, 0xaf, 0x17, 0xc6, 0x91, + 0x51, 0x9d, 0x1e, 0x15, 0x3c, 0x07, 0xf8, 0x7f, 0x2c, 0xb8, 0xd9, 0x7f, 0x6c, 0xc1, 0xa8, 0x46, + 0x5e, 0x70, 0xe3, 0x04, 0xfd, 0x64, 0xd7, 0xe0, 0x4e, 0xf4, 0x37, 0xb8, 0xf4, 0x69, 0x36, 0xb4, + 0x27, 0x05, 0xb3, 0x9a, 0x6c, 0x31, 0x06, 0xb6, 0x0d, 0x55, 0x37, 0x21, 0xed, 0x78, 0xac, 0x74, + 0xa1, 0xfc, 0xf4, 0xd0, 0xc5, 0x2b, 0x45, 0xbd, 0xe7, 0xf4, 0x88, 0x60, 0x5a, 0x9d, 0xa7, 0xe4, + 0x31, 0xe7, 0x62, 0xff, 0xea, 0xb0, 0xf9, 0x7e, 0x74, 0xc0, 0xd1, 0x73, 0x30, 0x14, 0x07, 0x9d, + 0xa8, 0x41, 0x30, 0x09, 0x83, 0x78, 0xcc, 0xba, 0x50, 0xa6, 0x53, 0x8f, 0xce, 0xd4, 0x15, 0xdd, + 0x8c, 0x4d, 0x1c, 0xf4, 0x05, 0x0b, 0x86, 0x9b, 0x24, 0x4e, 0x5c, 0x9f, 0xf1, 0x97, 0x9d, 0x5f, + 0x3d, 0x72, 0xe7, 0x65, 0xe3, 0xac, 0x26, 0x3e, 0x7d, 0x46, 0xbc, 0xc8, 0xb0, 0xd1, 0x18, 0xe3, + 0x14, 0x7f, 0xba, 0xe2, 0x9a, 0x24, 0x6e, 0x44, 0x6e, 0x48, 0xff, 0xb3, 0x39, 0x63, 0xac, 0xb8, + 0x59, 0x0d, 0xc2, 0x26, 0x1e, 0xf2, 0xa1, 0x4a, 0x57, 0x54, 0x3c, 0x56, 0x61, 0xfd, 0x9f, 0x3f, + 0x5a, 0xff, 0xc5, 0xa0, 0xd2, 0xc5, 0xaa, 0x47, 0x9f, 0xfe, 0x8b, 0x31, 0x67, 0x83, 0x3e, 0x6f, + 0xc1, 0x98, 0x58, 0xf1, 0x98, 0xf0, 0x01, 0xbd, 0xb5, 0xe1, 0x26, 0xc4, 0x73, 0xe3, 0x64, 0xac, + 0xca, 0xfa, 0x30, 0xd9, 0xdf, 0xdc, 0x9a, 0x8b, 0x82, 0x4e, 0x78, 0xcd, 0xf5, 0x9b, 0xd3, 0x17, + 0x04, 0xa7, 0xb1, 0x99, 0x1e, 0x84, 0x71, 0x4f, 0x96, 0xe8, 0xcb, 0x16, 0x9c, 0xf7, 0x9d, 0x36, + 0x89, 0x43, 0x87, 0x7e, 0x5a, 0x0e, 0x9e, 0xf6, 0x9c, 0xc6, 0x26, 0xeb, 0xd1, 0xc0, 0xe1, 0x7a, + 0x64, 0x8b, 0x1e, 0x9d, 0xbf, 0xde, 0x93, 0x34, 0xde, 0x83, 0x2d, 0xfa, 0xba, 0x05, 0xa7, 0x82, + 0x28, 0xdc, 0x70, 0x7c, 0xd2, 0x94, 0xd0, 0x78, 0x6c, 0x90, 0x2d, 0xbd, 0x0f, 0x1f, 0xed, 0x13, + 0x2d, 0x65, 0xc9, 0x2e, 0x06, 0xbe, 0x9b, 0x04, 0xd1, 0x0a, 0x49, 0x12, 0xd7, 0x6f, 0xc5, 0xd3, + 0x67, 0xef, 0xee, 0x8e, 0x9f, 0xea, 0xc2, 0xc2, 0xdd, 0xfd, 0x41, 0x3f, 0x05, 0x43, 0xf1, 0x8e, + 0xdf, 0xb8, 0xe5, 0xfa, 0xcd, 0xe0, 0x4e, 0x3c, 0x56, 0x2b, 0x62, 0xf9, 0xae, 0x28, 0x82, 0x62, 0x01, 0x6a, 0x06, 0xd8, 0xe4, 0x96, 0xff, 0xe1, 0xf4, 0x54, 0xaa, 0x17, 0xfd, 0xe1, 0xf4, 0x64, - 0xda, 0x83, 0x2d, 0xfa, 0x59, 0x0b, 0x4e, 0xc4, 0x6e, 0xcb, 0x77, 0x92, 0x4e, 0x44, 0xae, 0x93, - 0xed, 0x78, 0x14, 0x58, 0x47, 0xae, 0x1d, 0x71, 0x54, 0x0c, 0x92, 0x53, 0xe7, 0x44, 0x1f, 0x4f, - 0x98, 0xad, 0x31, 0x4e, 0xf3, 0xcd, 0x5b, 0x68, 0x7a, 0x5a, 0x0f, 0x15, 0xbb, 0xd0, 0xf4, 0xa4, - 0xee, 0xc9, 0x12, 0xfd, 0x18, 0x9c, 0xe2, 0x4d, 0x6a, 0x64, 0xe3, 0xd1, 0x61, 0x26, 0x68, 0xcf, - 0xee, 0xee, 0x8c, 0x9d, 0x5a, 0xce, 0xc0, 0x70, 0x17, 0x36, 0x7a, 0x1d, 0xc6, 0x42, 0x12, 0xb5, - 0xdd, 0x64, 0xd1, 0xf7, 0xb6, 0xa5, 0xf8, 0x6e, 0x04, 0x21, 0x69, 0x8a, 0xee, 0xc4, 0xa3, 0x27, - 0x2e, 0x5a, 0x4f, 0xd7, 0xa6, 0xde, 0x25, 0xba, 0x39, 0xb6, 0xb4, 0x37, 0x3a, 0xde, 0x8f, 0x9e, - 0xfd, 0xaf, 0x4b, 0x70, 0x2a, 0xab, 0x38, 0xd1, 0xdf, 0xb1, 0xe0, 0xe4, 0x9d, 0xbb, 0xc9, 0x4a, - 0xb0, 0x41, 0xfc, 0x78, 0x6a, 0x9b, 0x8a, 0x37, 0xa6, 0x32, 0x86, 0x2e, 0x35, 0x8a, 0x55, 0xd1, - 0xe3, 0xd7, 0xd2, 0x5c, 0x2e, 0xfb, 0x49, 0xb4, 0x3d, 0xf5, 0xa8, 0x78, 0xbb, 0x93, 0xd7, 0x6e, - 0xaf, 0x98, 0x50, 0x9c, 0xed, 0xd4, 0x85, 0xcf, 0x59, 0x70, 0x36, 0x8f, 0x04, 0x3a, 0x05, 0xe5, - 0x0d, 0xb2, 0xcd, 0xad, 0x32, 0x4c, 0x7f, 0xa2, 0x57, 0xa1, 0xba, 0xe9, 0x78, 0x1d, 0x22, 0xac, - 0x9b, 0xd9, 0xa3, 0xbd, 0x88, 0xea, 0x19, 0xe6, 0x54, 0xdf, 0x57, 0x7a, 0xd1, 0xb2, 0x7f, 0xa7, - 0x0c, 0x43, 0x86, 0x7e, 0xbb, 0x0f, 0x16, 0x5b, 0x90, 0xb2, 0xd8, 0x16, 0x0a, 0x53, 0xcd, 0x3d, - 0x4d, 0xb6, 0xbb, 0x19, 0x93, 0x6d, 0xb1, 0x38, 0x96, 0x7b, 0xda, 0x6c, 0x28, 0x81, 0x7a, 0x10, - 0x52, 0x8b, 0x9c, 0xaa, 0xfe, 0x4a, 0x11, 0x9f, 0x70, 0x51, 0x92, 0x9b, 0x3a, 0xb1, 0xbb, 0x33, - 0x56, 0x57, 0x7f, 0xb1, 0x66, 0x64, 0x7f, 0xdb, 0x82, 0xb3, 0x46, 0x1f, 0xa7, 0x03, 0xbf, 0xe9, - 0xb2, 0x4f, 0x7b, 0x11, 0x2a, 0xc9, 0x76, 0x28, 0xcd, 0x7e, 0x35, 0x52, 0x2b, 0xdb, 0x21, 0xc1, - 0x0c, 0x42, 0x0d, 0xfd, 0x36, 0x89, 0x63, 0xa7, 0x45, 0xb2, 0x86, 0xfe, 0x02, 0x6f, 0xc6, 0x12, - 0x8e, 0x22, 0x40, 0x9e, 0x13, 0x27, 0x2b, 0x91, 0xe3, 0xc7, 0x8c, 0xfc, 0x8a, 0xdb, 0x26, 0x62, - 0x80, 0xff, 0xff, 0xfe, 0x66, 0x0c, 0x7d, 0x62, 0xea, 0x91, 0xdd, 0x9d, 0x31, 0x34, 0xdf, 0x45, - 0x09, 0xe7, 0x50, 0xb7, 0xbf, 0x62, 0xc1, 0x23, 0xf9, 0xb6, 0x18, 0x7a, 0x0a, 0x06, 0xf8, 0x96, - 0x4f, 0xbc, 0x9d, 0xfe, 0x24, 0xac, 0x15, 0x0b, 0x28, 0x9a, 0x80, 0xba, 0xd2, 0x13, 0xe2, 0x1d, - 0x4f, 0x0b, 0xd4, 0xba, 0x56, 0x2e, 0x1a, 0x87, 0x0e, 0x1a, 0xfd, 0x23, 0x2c, 0x37, 0x35, 0x68, - 0x6c, 0x93, 0xc4, 0x20, 0xf6, 0x7f, 0xb2, 0xe0, 0xa4, 0xd1, 0xab, 0xfb, 0x60, 0x9a, 0xfb, 0x69, - 0xd3, 0x7c, 0xae, 0xb0, 0xf9, 0xdc, 0xc3, 0x36, 0xff, 0x82, 0x05, 0x17, 0x0c, 0xac, 0x05, 0x27, - 0x69, 0xac, 0x5f, 0xde, 0x0a, 0x23, 0x12, 0xd3, 0xed, 0x34, 0x7a, 0xdc, 0x90, 0x5b, 0x53, 0x43, - 0x82, 0x42, 0xf9, 0x3a, 0xd9, 0xe6, 0x42, 0xec, 0x19, 0xa8, 0xf1, 0xc9, 0x19, 0x44, 0x62, 0xc4, - 0xd5, 0xbb, 0x2d, 0x8a, 0x76, 0xac, 0x30, 0x90, 0x0d, 0x03, 0x4c, 0x38, 0xd1, 0xc5, 0x4a, 0xd5, - 0x10, 0xd0, 0x8f, 0x78, 0x8b, 0xb5, 0x60, 0x01, 0xb1, 0xe3, 0x54, 0x77, 0x96, 0x22, 0xc2, 0x3e, - 0x6e, 0xf3, 0x8a, 0x4b, 0xbc, 0x66, 0x4c, 0xb7, 0x0d, 0x8e, 0xef, 0x07, 0x89, 0xd8, 0x01, 0x18, - 0xdb, 0x86, 0x49, 0xdd, 0x8c, 0x4d, 0x1c, 0xca, 0xd4, 0x73, 0x56, 0x89, 0xc7, 0x47, 0x54, 0x30, - 0x9d, 0x67, 0x2d, 0x58, 0x40, 0xec, 0xdd, 0x12, 0xdb, 0xa0, 0xa8, 0xa5, 0x4f, 0xee, 0xc7, 0xee, - 0x36, 0x4a, 0xc9, 0xca, 0xa5, 0xe2, 0x04, 0x17, 0xe9, 0xbd, 0xc3, 0x7d, 0x23, 0x23, 0x2e, 0x71, - 0xa1, 0x5c, 0xf7, 0xde, 0xe5, 0xfe, 0x66, 0x09, 0xc6, 0xd2, 0x0f, 0x74, 0x49, 0x5b, 0xba, 0xa5, + 0xda, 0x83, 0x2d, 0xfa, 0x79, 0x0b, 0x46, 0x62, 0xb7, 0xe5, 0x3b, 0x49, 0x27, 0x22, 0xd7, 0xc8, + 0x4e, 0x3c, 0x06, 0xac, 0x23, 0x57, 0x8f, 0x38, 0x2a, 0x06, 0xc9, 0xe9, 0xb3, 0xa2, 0x8f, 0x23, + 0x66, 0x6b, 0x8c, 0xd3, 0x7c, 0xf3, 0x16, 0x9a, 0x9e, 0xd6, 0x43, 0xc5, 0x2e, 0x34, 0x3d, 0xa9, + 0x7b, 0xb2, 0x44, 0x3f, 0x01, 0x27, 0x79, 0x93, 0x1a, 0xd9, 0x78, 0x6c, 0x98, 0x09, 0xda, 0x33, + 0x77, 0x77, 0xc7, 0x4f, 0xae, 0x64, 0x60, 0xb8, 0x0b, 0x1b, 0xbd, 0x0e, 0xe3, 0x21, 0x89, 0xda, + 0x6e, 0xb2, 0xe4, 0x7b, 0x3b, 0x52, 0x7c, 0x37, 0x82, 0x90, 0x34, 0x45, 0x77, 0xe2, 0xb1, 0x91, + 0x0b, 0xd6, 0xd3, 0xb5, 0xe9, 0x77, 0x89, 0x6e, 0x8e, 0x2f, 0xef, 0x8d, 0x8e, 0xf7, 0xa3, 0x67, + 0xff, 0xab, 0x12, 0x9c, 0xcc, 0x2a, 0x4e, 0xf4, 0xb7, 0x2d, 0x38, 0x71, 0xfb, 0x4e, 0xb2, 0x1a, + 0x6c, 0x12, 0x3f, 0x9e, 0xde, 0xa1, 0xe2, 0x8d, 0xa9, 0x8c, 0xa1, 0x8b, 0x8d, 0x62, 0x55, 0xf4, + 0xc4, 0xd5, 0x34, 0x97, 0x4b, 0x7e, 0x12, 0xed, 0x4c, 0x3f, 0x2a, 0xde, 0xee, 0xc4, 0xd5, 0x5b, + 0xab, 0x26, 0x14, 0x67, 0x3b, 0x75, 0xfe, 0xb3, 0x16, 0x9c, 0xc9, 0x23, 0x81, 0x4e, 0x42, 0x79, + 0x93, 0xec, 0x70, 0xab, 0x0c, 0xd3, 0x9f, 0xe8, 0x55, 0xa8, 0x6e, 0x39, 0x5e, 0x87, 0x08, 0xeb, + 0x66, 0xee, 0x68, 0x2f, 0xa2, 0x7a, 0x86, 0x39, 0xd5, 0xf7, 0x96, 0x5e, 0xb4, 0xec, 0xdf, 0x2d, + 0xc3, 0x90, 0xa1, 0xdf, 0xee, 0x83, 0xc5, 0x16, 0xa4, 0x2c, 0xb6, 0xc5, 0xc2, 0x54, 0x73, 0x4f, + 0x93, 0xed, 0x4e, 0xc6, 0x64, 0x5b, 0x2a, 0x8e, 0xe5, 0x9e, 0x36, 0x1b, 0x4a, 0xa0, 0x1e, 0x84, + 0xd4, 0x22, 0xa7, 0xaa, 0xbf, 0x52, 0xc4, 0x27, 0x5c, 0x92, 0xe4, 0xa6, 0x47, 0xee, 0xee, 0x8e, + 0xd7, 0xd5, 0x5f, 0xac, 0x19, 0xd9, 0xdf, 0xb6, 0xe0, 0x8c, 0xd1, 0xc7, 0x99, 0xc0, 0x6f, 0xba, + 0xec, 0xd3, 0x5e, 0x80, 0x4a, 0xb2, 0x13, 0x4a, 0xb3, 0x5f, 0x8d, 0xd4, 0xea, 0x4e, 0x48, 0x30, + 0x83, 0x50, 0x43, 0xbf, 0x4d, 0xe2, 0xd8, 0x69, 0x91, 0xac, 0xa1, 0xbf, 0xc8, 0x9b, 0xb1, 0x84, + 0xa3, 0x08, 0x90, 0xe7, 0xc4, 0xc9, 0x6a, 0xe4, 0xf8, 0x31, 0x23, 0xbf, 0xea, 0xb6, 0x89, 0x18, + 0xe0, 0xff, 0xbf, 0xbf, 0x19, 0x43, 0x9f, 0x98, 0x7e, 0xe4, 0xee, 0xee, 0x38, 0x5a, 0xe8, 0xa2, + 0x84, 0x73, 0xa8, 0xdb, 0x5f, 0xb6, 0xe0, 0x91, 0x7c, 0x5b, 0x0c, 0x3d, 0x05, 0x03, 0x7c, 0xcb, + 0x27, 0xde, 0x4e, 0x7f, 0x12, 0xd6, 0x8a, 0x05, 0x14, 0x4d, 0x42, 0x5d, 0xe9, 0x09, 0xf1, 0x8e, + 0xa7, 0x04, 0x6a, 0x5d, 0x2b, 0x17, 0x8d, 0x43, 0x07, 0x8d, 0xfe, 0x11, 0x96, 0x9b, 0x1a, 0x34, + 0xb6, 0x49, 0x62, 0x10, 0xfb, 0x3f, 0x5a, 0x70, 0xc2, 0xe8, 0xd5, 0x7d, 0x30, 0xcd, 0xfd, 0xb4, + 0x69, 0x3e, 0x5f, 0xd8, 0x7c, 0xee, 0x61, 0x9b, 0x7f, 0xde, 0x82, 0xf3, 0x06, 0xd6, 0xa2, 0x93, + 0x34, 0x36, 0x2e, 0x6d, 0x87, 0x11, 0x89, 0xe9, 0x76, 0x1a, 0x3d, 0x6e, 0xc8, 0xad, 0xe9, 0x21, + 0x41, 0xa1, 0x7c, 0x8d, 0xec, 0x70, 0x21, 0xf6, 0x0c, 0xd4, 0xf8, 0xe4, 0x0c, 0x22, 0x31, 0xe2, + 0xea, 0xdd, 0x96, 0x44, 0x3b, 0x56, 0x18, 0xc8, 0x86, 0x01, 0x26, 0x9c, 0xe8, 0x62, 0xa5, 0x6a, + 0x08, 0xe8, 0x47, 0xbc, 0xc9, 0x5a, 0xb0, 0x80, 0xd8, 0x71, 0xaa, 0x3b, 0xcb, 0x11, 0x61, 0x1f, + 0xb7, 0x79, 0xd9, 0x25, 0x5e, 0x33, 0xa6, 0xdb, 0x06, 0xc7, 0xf7, 0x83, 0x44, 0xec, 0x00, 0x8c, + 0x6d, 0xc3, 0x94, 0x6e, 0xc6, 0x26, 0x0e, 0x65, 0xea, 0x39, 0x6b, 0xc4, 0xe3, 0x23, 0x2a, 0x98, + 0x2e, 0xb0, 0x16, 0x2c, 0x20, 0xf6, 0xdd, 0x12, 0xdb, 0xa0, 0xa8, 0xa5, 0x4f, 0xee, 0xc7, 0xee, + 0x36, 0x4a, 0xc9, 0xca, 0xe5, 0xe2, 0x04, 0x17, 0xe9, 0xbd, 0xc3, 0x7d, 0x23, 0x23, 0x2e, 0x71, + 0xa1, 0x5c, 0xf7, 0xde, 0xe5, 0xfe, 0x56, 0x09, 0xc6, 0xd3, 0x0f, 0x74, 0x49, 0x5b, 0xba, 0xa5, 0x32, 0x18, 0x65, 0x9d, 0x18, 0x06, 0x3e, 0x36, 0xf1, 0x7a, 0x08, 0xac, 0xd2, 0x71, 0x0a, 0x2c, 0x53, 0x9e, 0x96, 0xf7, 0x91, 0xa7, 0x4f, 0xa9, 0x51, 0xaf, 0x64, 0x04, 0x58, 0x5a, 0xa7, 0x5c, - 0x84, 0x4a, 0x9c, 0x90, 0x70, 0xb4, 0x9a, 0x96, 0x47, 0xcb, 0x09, 0x09, 0x31, 0x83, 0xd8, 0xff, - 0xad, 0x04, 0x8f, 0xa6, 0xc7, 0x50, 0xab, 0x80, 0x0f, 0xa4, 0x54, 0xc0, 0xbb, 0x4d, 0x15, 0x70, - 0x6f, 0x67, 0xec, 0x9d, 0x3d, 0x1e, 0xfb, 0x9e, 0xd1, 0x10, 0x68, 0x36, 0x33, 0x8a, 0x13, 0xe9, - 0x51, 0xbc, 0xb7, 0x33, 0xf6, 0x78, 0x8f, 0x77, 0xcc, 0x0c, 0xf3, 0x53, 0x30, 0x10, 0x11, 0x27, - 0x0e, 0x7c, 0x31, 0xd0, 0xea, 0x73, 0x60, 0xd6, 0x8a, 0x05, 0xd4, 0xfe, 0x77, 0xf5, 0xec, 0x60, - 0xcf, 0x72, 0x27, 0x5c, 0x10, 0x21, 0x17, 0x2a, 0xcc, 0xac, 0xe7, 0xa2, 0xe1, 0xfa, 0xd1, 0x96, - 0x11, 0x55, 0x03, 0x8a, 0xf4, 0x54, 0x8d, 0x7e, 0x35, 0xda, 0x84, 0x19, 0x0b, 0xb4, 0x05, 0xb5, + 0x80, 0x4a, 0x9c, 0x90, 0x70, 0xac, 0x9a, 0x96, 0x47, 0x2b, 0x09, 0x09, 0x31, 0x83, 0xd8, 0xff, + 0xad, 0x04, 0x8f, 0xa6, 0xc7, 0x50, 0xab, 0x80, 0xf7, 0xa7, 0x54, 0xc0, 0xbb, 0x4d, 0x15, 0x70, + 0x6f, 0x77, 0xfc, 0x9d, 0x3d, 0x1e, 0xfb, 0x9e, 0xd1, 0x10, 0x68, 0x2e, 0x33, 0x8a, 0x93, 0xe9, + 0x51, 0xbc, 0xb7, 0x3b, 0xfe, 0x78, 0x8f, 0x77, 0xcc, 0x0c, 0xf3, 0x53, 0x30, 0x10, 0x11, 0x27, + 0x0e, 0x7c, 0x31, 0xd0, 0xea, 0x73, 0x60, 0xd6, 0x8a, 0x05, 0xd4, 0xfe, 0xb7, 0xf5, 0xec, 0x60, + 0xcf, 0x71, 0x27, 0x5c, 0x10, 0x21, 0x17, 0x2a, 0xcc, 0xac, 0xe7, 0xa2, 0xe1, 0xda, 0xd1, 0x96, + 0x11, 0x55, 0x03, 0x8a, 0xf4, 0x74, 0x8d, 0x7e, 0x35, 0xda, 0x84, 0x19, 0x0b, 0xb4, 0x0d, 0xb5, 0x86, 0xb4, 0xb6, 0x4b, 0x45, 0xf8, 0xa5, 0x84, 0xad, 0xad, 0x39, 0x0e, 0x53, 0x79, 0xad, 0x4c, - 0x74, 0xc5, 0x0d, 0x11, 0x28, 0xb7, 0xdc, 0x44, 0x7c, 0xd6, 0x23, 0xee, 0xa7, 0x66, 0x5d, 0xe3, - 0x15, 0x07, 0xa9, 0x12, 0x99, 0x75, 0x13, 0x4c, 0xe9, 0xa3, 0x9f, 0xb6, 0x60, 0x28, 0x6e, 0xb4, - 0x97, 0xa2, 0x60, 0xd3, 0x6d, 0x92, 0x48, 0x58, 0x53, 0x47, 0x14, 0x4d, 0xcb, 0xd3, 0x0b, 0x92, - 0xa0, 0xe6, 0xcb, 0xf7, 0xb7, 0x1a, 0x82, 0x4d, 0xbe, 0x74, 0x97, 0xf1, 0xa8, 0x78, 0xf7, 0x19, - 0xd2, 0x70, 0xa9, 0xfe, 0x93, 0x9b, 0x2a, 0x36, 0x53, 0x8e, 0x6c, 0x5d, 0xce, 0x74, 0x1a, 0x1b, - 0x74, 0xbd, 0xe9, 0x0e, 0xbd, 0x73, 0x77, 0x67, 0xec, 0xd1, 0xe9, 0x7c, 0x9e, 0xb8, 0x57, 0x67, - 0xd8, 0x80, 0x85, 0x1d, 0xcf, 0xc3, 0xe4, 0xf5, 0x0e, 0x61, 0x2e, 0x93, 0x02, 0x06, 0x6c, 0x49, - 0x13, 0xcc, 0x0c, 0x98, 0x01, 0xc1, 0x26, 0x5f, 0xf4, 0x3a, 0x0c, 0xb4, 0x9d, 0x24, 0x72, 0xb7, - 0x84, 0x9f, 0xe4, 0x88, 0xf6, 0xfe, 0x02, 0xa3, 0xa5, 0x99, 0x33, 0x4d, 0xcd, 0x1b, 0xb1, 0x60, - 0x84, 0xda, 0x50, 0x6d, 0x93, 0xa8, 0x45, 0x46, 0x6b, 0x45, 0xf8, 0x84, 0x17, 0x28, 0x29, 0xcd, - 0xb0, 0x4e, 0xad, 0x23, 0xd6, 0x86, 0x39, 0x17, 0xf4, 0x2a, 0xd4, 0x62, 0xe2, 0x91, 0x06, 0xb5, - 0x6f, 0xea, 0x8c, 0xe3, 0x7b, 0xfa, 0xb4, 0xf5, 0xa8, 0x61, 0xb1, 0x2c, 0x1e, 0xe5, 0x0b, 0x4c, - 0xfe, 0xc3, 0x8a, 0x24, 0x1d, 0xc0, 0xd0, 0xeb, 0xb4, 0x5c, 0x7f, 0x14, 0x8a, 0x18, 0xc0, 0x25, - 0x46, 0x2b, 0x33, 0x80, 0xbc, 0x11, 0x0b, 0x46, 0xf6, 0x1f, 0x5b, 0x80, 0xd2, 0x42, 0xed, 0x3e, - 0x18, 0xb5, 0xaf, 0xa7, 0x8d, 0xda, 0xf9, 0x22, 0xad, 0x8e, 0x1e, 0x76, 0xed, 0xaf, 0xd7, 0x21, - 0xa3, 0x0e, 0x6e, 0x90, 0x38, 0x21, 0xcd, 0xb7, 0x45, 0xf8, 0xdb, 0x22, 0xfc, 0x6d, 0x11, 0xae, - 0x44, 0xf8, 0x6a, 0x46, 0x84, 0xbf, 0xdf, 0x58, 0xf5, 0xfa, 0x50, 0xf5, 0x35, 0x75, 0xea, 0x6a, - 0xf6, 0xc0, 0x40, 0xa0, 0x92, 0xe0, 0xda, 0xf2, 0xe2, 0x8d, 0x5c, 0x99, 0xfd, 0x5a, 0x5a, 0x66, - 0x1f, 0x95, 0xc5, 0xff, 0x0b, 0x52, 0xfa, 0x5f, 0x59, 0xf0, 0xae, 0xb4, 0xf4, 0x92, 0x33, 0x67, - 0xae, 0xe5, 0x07, 0x11, 0x99, 0x71, 0xd7, 0xd6, 0x48, 0x44, 0xfc, 0x06, 0x89, 0x95, 0x17, 0xc3, - 0xea, 0xe5, 0xc5, 0x40, 0xcf, 0xc3, 0xf0, 0x9d, 0x38, 0xf0, 0x97, 0x02, 0xd7, 0x17, 0x22, 0x88, - 0x6e, 0x84, 0x4f, 0xed, 0xee, 0x8c, 0x0d, 0xd3, 0x11, 0x95, 0xed, 0x38, 0x85, 0x85, 0xa6, 0xe1, - 0xf4, 0x9d, 0xd7, 0x97, 0x9c, 0xc4, 0x70, 0x07, 0xc8, 0x8d, 0x3b, 0x3b, 0xb0, 0xb8, 0xf6, 0x72, - 0x06, 0x88, 0xbb, 0xf1, 0xed, 0xbf, 0x51, 0x82, 0xf3, 0x99, 0x17, 0x09, 0x3c, 0x2f, 0xe8, 0x24, - 0x74, 0x53, 0x83, 0x7e, 0xc1, 0x82, 0x53, 0xed, 0xb4, 0xc7, 0x21, 0x16, 0x8e, 0xdd, 0x0f, 0x16, - 0xa6, 0x23, 0x32, 0x2e, 0x8d, 0xa9, 0x51, 0x31, 0x42, 0xa7, 0x32, 0x80, 0x18, 0x77, 0xf5, 0x05, - 0xbd, 0x0a, 0xf5, 0xb6, 0xb3, 0x75, 0x33, 0x6c, 0x3a, 0x89, 0xdc, 0x4f, 0xf6, 0x76, 0x03, 0x74, - 0x12, 0xd7, 0x1b, 0xe7, 0xc7, 0xf5, 0xe3, 0x73, 0x7e, 0xb2, 0x18, 0x2d, 0x27, 0x91, 0xeb, 0xb7, - 0xb8, 0x3b, 0x6f, 0x41, 0x92, 0xc1, 0x9a, 0xa2, 0xfd, 0x55, 0x2b, 0xab, 0xa4, 0xd4, 0xe8, 0x44, - 0x4e, 0x42, 0x5a, 0xdb, 0xe8, 0x63, 0x50, 0xa5, 0x1b, 0x3f, 0x39, 0x2a, 0xb7, 0x8b, 0xd4, 0x9c, - 0xc6, 0x97, 0xd0, 0x4a, 0x94, 0xfe, 0x8b, 0x31, 0x67, 0x6a, 0xff, 0x71, 0x2d, 0x6b, 0x2c, 0xb0, - 0xc3, 0xdb, 0x4b, 0x00, 0xad, 0x60, 0x85, 0xb4, 0x43, 0x8f, 0x0e, 0x8b, 0xc5, 0x4e, 0x00, 0x94, - 0xaf, 0x63, 0x56, 0x41, 0xb0, 0x81, 0x85, 0xfe, 0x92, 0x05, 0xd0, 0x92, 0x73, 0x5e, 0x1a, 0x02, - 0x37, 0x8b, 0x7c, 0x1d, 0xbd, 0xa2, 0x74, 0x5f, 0x14, 0x43, 0x6c, 0x30, 0x47, 0x3f, 0x65, 0x41, - 0x2d, 0x91, 0xdd, 0xe7, 0xaa, 0x71, 0xa5, 0xc8, 0x9e, 0xc8, 0x97, 0xd6, 0x36, 0x91, 0x1a, 0x12, - 0xc5, 0x17, 0xfd, 0x8c, 0x05, 0x10, 0x6f, 0xfb, 0x8d, 0xa5, 0xc0, 0x73, 0x1b, 0xdb, 0x42, 0x63, - 0xde, 0x2a, 0xd4, 0x1f, 0xa3, 0xa8, 0x4f, 0x8d, 0xd0, 0xd1, 0xd0, 0xff, 0xb1, 0xc1, 0x19, 0x7d, - 0x02, 0x6a, 0xb1, 0x98, 0x6e, 0x42, 0x47, 0xae, 0x14, 0xeb, 0x15, 0xe2, 0xb4, 0x85, 0x78, 0x15, - 0xff, 0xb0, 0xe2, 0x89, 0x7e, 0xce, 0x82, 0x93, 0x61, 0xda, 0xcf, 0x27, 0xd4, 0x61, 0x71, 0x32, - 0x20, 0xe3, 0x47, 0x9c, 0x3a, 0xb3, 0xbb, 0x33, 0x76, 0x32, 0xd3, 0x88, 0xb3, 0xbd, 0xa0, 0x12, - 0x50, 0xcf, 0xe0, 0xc5, 0x90, 0xfb, 0x1c, 0x07, 0xb5, 0x04, 0x9c, 0xcd, 0x02, 0x71, 0x37, 0x3e, - 0x5a, 0x82, 0xb3, 0xb4, 0x77, 0xdb, 0xdc, 0xfc, 0x94, 0xea, 0x25, 0x66, 0xca, 0xb0, 0x36, 0xf5, - 0x98, 0x98, 0x21, 0xcc, 0xab, 0x9f, 0xc5, 0xc1, 0xb9, 0x4f, 0xa2, 0xdf, 0xb1, 0xe0, 0x31, 0x97, - 0xa9, 0x01, 0xd3, 0x61, 0xae, 0x35, 0x82, 0x38, 0x89, 0x25, 0x85, 0xca, 0x8a, 0x5e, 0xea, 0x67, - 0xea, 0xff, 0x13, 0x6f, 0xf0, 0xd8, 0xdc, 0x1e, 0x5d, 0xc2, 0x7b, 0x76, 0xd8, 0xfe, 0x56, 0x29, - 0x75, 0xac, 0xa1, 0x7c, 0x89, 0x4c, 0x6a, 0x34, 0xa4, 0x1b, 0x47, 0x0a, 0xc1, 0x42, 0xa5, 0x86, - 0x72, 0x12, 0x69, 0xa9, 0xa1, 0x9a, 0x62, 0x6c, 0x30, 0xa7, 0xb6, 0xe5, 0x69, 0x27, 0xeb, 0xb1, - 0x14, 0x82, 0xec, 0xd5, 0x22, 0xbb, 0xd4, 0x7d, 0x08, 0x75, 0x5e, 0x74, 0xed, 0x74, 0x17, 0x08, - 0x77, 0x77, 0xc9, 0xfe, 0x56, 0xfa, 0x28, 0xc5, 0x58, 0x83, 0x7d, 0x1c, 0x13, 0x7d, 0xd1, 0x82, - 0xa1, 0x28, 0xf0, 0x3c, 0xd7, 0x6f, 0x51, 0x79, 0x21, 0x94, 0xde, 0x87, 0x8f, 0x45, 0xef, 0x08, - 0xc1, 0xc0, 0x2c, 0x54, 0xac, 0x79, 0x62, 0xb3, 0x03, 0xf6, 0x1f, 0x59, 0x30, 0xda, 0x4b, 0xae, - 0x21, 0x02, 0xef, 0x94, 0x8b, 0x56, 0x05, 0x49, 0x2c, 0xfa, 0x33, 0xc4, 0x23, 0xca, 0x7f, 0x5c, - 0x9b, 0x7a, 0x52, 0xbc, 0xe6, 0x3b, 0x97, 0x7a, 0xa3, 0xe2, 0xbd, 0xe8, 0xa0, 0x57, 0xe0, 0x94, - 0xf1, 0x5e, 0xb1, 0x1a, 0x98, 0xfa, 0xd4, 0x38, 0x35, 0x24, 0x26, 0x33, 0xb0, 0x7b, 0x3b, 0x63, - 0x8f, 0x64, 0xdb, 0x84, 0xe0, 0xed, 0xa2, 0x63, 0xff, 0x72, 0x29, 0xfb, 0xb5, 0x94, 0xce, 0x7c, - 0xcb, 0xea, 0xda, 0x95, 0x7f, 0xf0, 0x38, 0xf4, 0x14, 0xdb, 0xbf, 0xab, 0x38, 0x8c, 0xde, 0x38, - 0x0f, 0xf0, 0xa0, 0xd7, 0xfe, 0x37, 0x15, 0xd8, 0xa3, 0x67, 0x7d, 0x18, 0xc1, 0x07, 0x3e, 0x1d, - 0xfc, 0xbc, 0xa5, 0x4e, 0x8e, 0xca, 0x6c, 0x91, 0x37, 0x8f, 0x6b, 0xec, 0xf9, 0x3e, 0x24, 0xe6, - 0xc1, 0x06, 0xca, 0x1b, 0x9d, 0x3e, 0xa3, 0x42, 0x5f, 0xb3, 0xd2, 0x67, 0x5f, 0x3c, 0x7a, 0xcc, - 0x3d, 0xb6, 0x3e, 0x19, 0x07, 0x6a, 0xbc, 0x63, 0xfa, 0x18, 0xa6, 0xd7, 0x51, 0xdb, 0x38, 0xc0, - 0x9a, 0xeb, 0x3b, 0x9e, 0xfb, 0x06, 0xdd, 0x65, 0x54, 0x99, 0xa2, 0x64, 0x96, 0xc7, 0x15, 0xd5, - 0x8a, 0x0d, 0x8c, 0x0b, 0x7f, 0x11, 0x86, 0x8c, 0x37, 0xcf, 0x89, 0x91, 0x38, 0x6b, 0xc6, 0x48, - 0xd4, 0x8d, 0xd0, 0x86, 0x0b, 0xef, 0x87, 0x53, 0xd9, 0x0e, 0x1e, 0xe4, 0x79, 0xfb, 0xcf, 0x07, - 0xb3, 0x87, 0x51, 0x2b, 0x24, 0x6a, 0xd3, 0xae, 0xbd, 0xed, 0x20, 0x7a, 0xdb, 0x41, 0xf4, 0xb6, - 0x83, 0xc8, 0xf4, 0xf1, 0x0b, 0xe7, 0xc7, 0xe0, 0x7d, 0x72, 0x7e, 0xa4, 0xdc, 0x39, 0xb5, 0xc2, - 0xdd, 0x39, 0xf6, 0x6e, 0x15, 0x52, 0x76, 0x14, 0x1f, 0xef, 0x1f, 0x82, 0xc1, 0x88, 0x84, 0xc1, - 0x4d, 0x3c, 0x2f, 0x74, 0x88, 0x8e, 0x83, 0xe7, 0xcd, 0x58, 0xc2, 0xa9, 0xae, 0x09, 0x9d, 0x64, - 0x5d, 0x28, 0x11, 0xa5, 0x6b, 0x96, 0x9c, 0x64, 0x1d, 0x33, 0x08, 0x7a, 0x3f, 0x8c, 0x24, 0x4e, - 0xd4, 0xa2, 0x66, 0xf3, 0x26, 0xfb, 0xac, 0xe2, 0xc8, 0xf2, 0x11, 0x81, 0x3b, 0xb2, 0x92, 0x82, - 0xe2, 0x0c, 0x36, 0x7a, 0x1d, 0x2a, 0xeb, 0xc4, 0x6b, 0x8b, 0x21, 0x5f, 0x2e, 0x4e, 0xc6, 0xb3, - 0x77, 0xbd, 0x4a, 0xbc, 0x36, 0x97, 0x40, 0xf4, 0x17, 0x66, 0xac, 0xe8, 0x7c, 0xab, 0x6f, 0x74, - 0xe2, 0x24, 0x68, 0xbb, 0x6f, 0x48, 0x4f, 0xdd, 0x07, 0x0b, 0x66, 0x7c, 0x5d, 0xd2, 0xe7, 0x2e, - 0x11, 0xf5, 0x17, 0x6b, 0xce, 0xac, 0x1f, 0x4d, 0x37, 0x62, 0x9f, 0x6a, 0x5b, 0x38, 0xdc, 0x8a, - 0xee, 0xc7, 0x8c, 0xa4, 0xcf, 0xfb, 0xa1, 0xfe, 0x62, 0xcd, 0x19, 0x6d, 0xab, 0x79, 0x3f, 0xc4, - 0xfa, 0x70, 0xb3, 0xe0, 0x3e, 0xf0, 0x39, 0x9f, 0x3b, 0xff, 0x9f, 0x84, 0x6a, 0x63, 0xdd, 0x89, - 0x92, 0xd1, 0x61, 0x36, 0x69, 0x94, 0x6b, 0x66, 0x9a, 0x36, 0x62, 0x0e, 0x43, 0x8f, 0x43, 0x39, - 0x22, 0x6b, 0x2c, 0xfc, 0xd2, 0x08, 0xcc, 0xc1, 0x64, 0x0d, 0xd3, 0x76, 0xfb, 0x17, 0x4b, 0x69, - 0x73, 0x29, 0xfd, 0xde, 0x7c, 0xb6, 0x37, 0x3a, 0x51, 0x2c, 0xdd, 0x37, 0xc6, 0x6c, 0x67, 0xcd, - 0x58, 0xc2, 0xd1, 0xa7, 0x2c, 0x18, 0xbc, 0x13, 0x07, 0xbe, 0x4f, 0x12, 0xa1, 0x9a, 0x6e, 0x15, - 0x3c, 0x14, 0xd7, 0x38, 0x75, 0xdd, 0x07, 0xd1, 0x80, 0x25, 0x5f, 0xda, 0x5d, 0xb2, 0xd5, 0xf0, - 0x3a, 0xcd, 0xae, 0x58, 0x8b, 0xcb, 0xbc, 0x19, 0x4b, 0x38, 0x45, 0x75, 0x7d, 0x8e, 0x5a, 0x49, - 0xa3, 0xce, 0xf9, 0x02, 0x55, 0xc0, 0xed, 0xbf, 0x36, 0x00, 0xe7, 0x72, 0x17, 0x07, 0x35, 0x64, - 0x98, 0xa9, 0x70, 0xc5, 0xf5, 0x88, 0x8c, 0x32, 0x62, 0x86, 0xcc, 0x2d, 0xd5, 0x8a, 0x0d, 0x0c, - 0xf4, 0x93, 0x00, 0xa1, 0x13, 0x39, 0x6d, 0xa2, 0xdc, 0xab, 0x47, 0xb6, 0x17, 0x68, 0x3f, 0x96, - 0x24, 0x4d, 0xbd, 0x37, 0x55, 0x4d, 0x31, 0x36, 0x58, 0xa2, 0x17, 0x60, 0x28, 0x22, 0x1e, 0x71, - 0x62, 0x16, 0xbd, 0x9b, 0x4d, 0x45, 0xc0, 0x1a, 0x84, 0x4d, 0x3c, 0xf4, 0x94, 0x0a, 0xc8, 0xca, - 0x04, 0xa6, 0xa4, 0x83, 0xb2, 0xd0, 0x9b, 0x16, 0x8c, 0xac, 0xb9, 0x1e, 0xd1, 0xdc, 0x45, 0xe2, - 0xc0, 0xe2, 0xd1, 0x5f, 0xf2, 0x8a, 0x49, 0x57, 0x4b, 0xc8, 0x54, 0x73, 0x8c, 0x33, 0xec, 0xe9, - 0x67, 0xde, 0x24, 0x11, 0x13, 0xad, 0x03, 0xe9, 0xcf, 0x7c, 0x8b, 0x37, 0x63, 0x09, 0x47, 0x93, - 0x70, 0x32, 0x74, 0xe2, 0x78, 0x3a, 0x22, 0x4d, 0xe2, 0x27, 0xae, 0xe3, 0xf1, 0xb0, 0xfe, 0x9a, - 0x0e, 0xeb, 0x5d, 0x4a, 0x83, 0x71, 0x16, 0x1f, 0x7d, 0x08, 0x1e, 0xe5, 0xfe, 0x8b, 0x05, 0x37, - 0x8e, 0x5d, 0xbf, 0xa5, 0xa7, 0x81, 0x70, 0xe3, 0x8c, 0x09, 0x52, 0x8f, 0xce, 0xe5, 0xa3, 0xe1, - 0x5e, 0xcf, 0xa3, 0x67, 0xa0, 0x16, 0x6f, 0xb8, 0xe1, 0x74, 0xd4, 0x8c, 0xd9, 0xd9, 0x45, 0x4d, - 0x3b, 0x0d, 0x97, 0x45, 0x3b, 0x56, 0x18, 0xa8, 0x01, 0xc3, 0xfc, 0x93, 0xf0, 0x88, 0x32, 0x21, - 0x1f, 0x9f, 0xed, 0xa9, 0x1e, 0x45, 0xe6, 0xd9, 0x38, 0x76, 0xee, 0x5e, 0x96, 0x27, 0x29, 0xdc, - 0xf1, 0x7f, 0xcb, 0x20, 0x83, 0x53, 0x44, 0xed, 0x9f, 0x2f, 0xa5, 0x77, 0xdc, 0xe6, 0x22, 0x45, - 0x31, 0x5d, 0x8a, 0xc9, 0x2d, 0x27, 0x92, 0xde, 0x98, 0x23, 0x66, 0x1f, 0x08, 0xba, 0xb7, 0x9c, - 0xc8, 0x5c, 0xd4, 0x8c, 0x01, 0x96, 0x9c, 0xd0, 0x1d, 0xa8, 0x24, 0x9e, 0x53, 0x50, 0xba, 0x92, - 0xc1, 0x51, 0x3b, 0x40, 0xe6, 0x27, 0x63, 0xcc, 0x78, 0xa0, 0xc7, 0xa8, 0xd5, 0xbf, 0x2a, 0x4f, - 0x3a, 0x84, 0xa1, 0xbe, 0x1a, 0x63, 0xd6, 0x6a, 0xff, 0x79, 0x3d, 0x47, 0xae, 0x2a, 0x45, 0x86, - 0x2e, 0x01, 0xd0, 0x0d, 0xe4, 0x52, 0x44, 0xd6, 0xdc, 0x2d, 0x61, 0x48, 0xa8, 0xb5, 0x7b, 0x43, - 0x41, 0xb0, 0x81, 0x25, 0x9f, 0x59, 0xee, 0xac, 0xd1, 0x67, 0x4a, 0xdd, 0xcf, 0x70, 0x08, 0x36, - 0xb0, 0xd0, 0xf3, 0x30, 0xe0, 0xb6, 0x9d, 0x96, 0x8a, 0xa4, 0x7c, 0x8c, 0x2e, 0xda, 0x39, 0xd6, - 0x72, 0x6f, 0x67, 0x6c, 0x44, 0x75, 0x88, 0x35, 0x61, 0x81, 0x8b, 0x7e, 0xd9, 0x82, 0xe1, 0x46, - 0xd0, 0x6e, 0x07, 0x3e, 0xdf, 0x76, 0x89, 0x3d, 0xe4, 0x9d, 0xe3, 0x52, 0xf3, 0xe3, 0xd3, 0x06, - 0x33, 0xbe, 0x89, 0x54, 0x79, 0x55, 0x26, 0x08, 0xa7, 0x7a, 0x65, 0xae, 0xed, 0xea, 0x3e, 0x6b, - 0xfb, 0xd7, 0x2c, 0x38, 0xcd, 0x9f, 0x35, 0x76, 0x83, 0x22, 0x85, 0x28, 0x38, 0xe6, 0xd7, 0xea, - 0xda, 0x20, 0x2b, 0x2f, 0x5d, 0x17, 0x1c, 0x77, 0x77, 0x12, 0xcd, 0xc2, 0xe9, 0xb5, 0x20, 0x6a, - 0x10, 0x73, 0x20, 0x84, 0x60, 0x52, 0x84, 0xae, 0x64, 0x11, 0x70, 0xf7, 0x33, 0xe8, 0x16, 0x3c, - 0x62, 0x34, 0x9a, 0xe3, 0xc0, 0x65, 0xd3, 0x13, 0x82, 0xda, 0x23, 0x57, 0x72, 0xb1, 0x70, 0x8f, - 0xa7, 0xd3, 0x0e, 0x93, 0x7a, 0x1f, 0x0e, 0x93, 0xd7, 0xe0, 0x7c, 0xa3, 0x7b, 0x64, 0x36, 0xe3, - 0xce, 0x6a, 0xcc, 0x25, 0x55, 0x6d, 0xea, 0x07, 0x04, 0x81, 0xf3, 0xd3, 0xbd, 0x10, 0x71, 0x6f, - 0x1a, 0xe8, 0x63, 0x50, 0x8b, 0x08, 0xfb, 0x2a, 0xb1, 0xc8, 0xa7, 0x39, 0xe2, 0x2e, 0x59, 0x5b, - 0xa0, 0x9c, 0xac, 0x96, 0xbd, 0xa2, 0x21, 0xc6, 0x8a, 0x23, 0xba, 0x0b, 0x83, 0xa1, 0x93, 0x34, - 0xd6, 0x45, 0x16, 0xcd, 0x91, 0xc3, 0x58, 0x14, 0xf3, 0x25, 0x4a, 0x55, 0x4f, 0xf2, 0x25, 0xce, - 0x04, 0x4b, 0x6e, 0x17, 0x3e, 0x00, 0xa7, 0xbb, 0x16, 0xd2, 0x81, 0x9c, 0x25, 0x33, 0xf0, 0x48, - 0xfe, 0x94, 0x3d, 0x90, 0xcb, 0xe4, 0x1f, 0x67, 0x62, 0x4f, 0x0d, 0x33, 0xb6, 0x0f, 0xf7, 0x9b, - 0x03, 0x65, 0xe2, 0x6f, 0x0a, 0x09, 0x7e, 0xe5, 0x68, 0x23, 0x77, 0xd9, 0xdf, 0xe4, 0x2b, 0x8e, - 0xf9, 0x18, 0x2e, 0xfb, 0x9b, 0x98, 0xd2, 0x46, 0x5f, 0xb6, 0x52, 0x66, 0x18, 0x77, 0xda, 0x7d, - 0xe4, 0x58, 0xec, 0xf6, 0xbe, 0x2d, 0x33, 0xfb, 0xdf, 0x96, 0xe0, 0xe2, 0x7e, 0x44, 0xfa, 0x18, - 0xbe, 0x27, 0x61, 0x20, 0x66, 0xa7, 0xc9, 0x42, 0x24, 0x0e, 0xd1, 0x99, 0xc2, 0xcf, 0x97, 0x5f, - 0xc3, 0x02, 0x84, 0x3c, 0x28, 0xb7, 0x9d, 0x50, 0xf8, 0x72, 0xe6, 0x8e, 0x9a, 0x8d, 0x42, 0xff, - 0x3b, 0xde, 0x82, 0x13, 0x72, 0x0f, 0x81, 0xd1, 0x80, 0x29, 0x1b, 0x94, 0x40, 0xd5, 0x89, 0x22, - 0x47, 0x1e, 0x5d, 0x5e, 0x2f, 0x86, 0xdf, 0x24, 0x25, 0x39, 0x75, 0x7a, 0x77, 0x67, 0xec, 0x44, - 0xaa, 0x09, 0x73, 0x66, 0xf6, 0xe7, 0x07, 0x53, 0x19, 0x19, 0xec, 0x3c, 0x3a, 0x86, 0x01, 0xe1, - 0xc2, 0xb1, 0x8a, 0x4e, 0x02, 0xe2, 0x29, 0x75, 0x6c, 0x97, 0x26, 0x12, 0x93, 0x05, 0x2b, 0xf4, - 0x39, 0x8b, 0xa5, 0xff, 0xca, 0x2c, 0x15, 0xb1, 0x37, 0x3a, 0x9e, 0x6c, 0x64, 0x33, 0xa9, 0x58, - 0x36, 0x62, 0x93, 0x3b, 0xd5, 0x99, 0x21, 0x4f, 0x64, 0xcb, 0xee, 0x90, 0x64, 0x82, 0xb0, 0x84, - 0xa3, 0xad, 0x9c, 0x73, 0xe7, 0x02, 0x52, 0x48, 0xfb, 0x38, 0x69, 0xfe, 0x9a, 0x05, 0xa7, 0xdd, - 0xec, 0x01, 0xa2, 0xd8, 0x49, 0x1c, 0x31, 0xb2, 0xa1, 0xf7, 0xf9, 0xa4, 0x52, 0xa6, 0x5d, 0x20, - 0xdc, 0xdd, 0x19, 0xd4, 0x84, 0x8a, 0xeb, 0xaf, 0x05, 0xc2, 0x84, 0x98, 0x3a, 0x5a, 0xa7, 0xe6, - 0xfc, 0xb5, 0x40, 0xaf, 0x66, 0xfa, 0x0f, 0x33, 0xea, 0x68, 0x1e, 0xce, 0x46, 0xc2, 0xd7, 0x73, - 0xd5, 0x8d, 0xe9, 0x8e, 0x7c, 0xde, 0x6d, 0xbb, 0x09, 0x53, 0xff, 0xe5, 0xa9, 0xd1, 0xdd, 0x9d, - 0xb1, 0xb3, 0x38, 0x07, 0x8e, 0x73, 0x9f, 0x42, 0x6f, 0xc0, 0xa0, 0xcc, 0x57, 0xae, 0x15, 0xb1, - 0x2b, 0xeb, 0x9e, 0xff, 0x6a, 0x32, 0x2d, 0x8b, 0xd4, 0x64, 0xc9, 0xd0, 0x7e, 0x73, 0x08, 0xba, - 0x0f, 0x25, 0xd1, 0xc7, 0xa1, 0x1e, 0xa9, 0x1c, 0x6a, 0xab, 0x08, 0x65, 0x29, 0xbf, 0xaf, 0x38, - 0x10, 0x55, 0x86, 0x88, 0xce, 0x96, 0xd6, 0x1c, 0xe9, 0x76, 0x21, 0xd6, 0x67, 0x97, 0x05, 0xcc, - 0x6d, 0xc1, 0x55, 0x9f, 0x4b, 0x6d, 0xfb, 0x0d, 0xcc, 0x78, 0xa0, 0x08, 0x06, 0xd6, 0x89, 0xe3, - 0x25, 0xeb, 0xc5, 0xb8, 0xd0, 0xaf, 0x32, 0x5a, 0xd9, 0x4c, 0x1a, 0xde, 0x8a, 0x05, 0x27, 0xb4, - 0x05, 0x83, 0xeb, 0x7c, 0x02, 0x08, 0x0b, 0x7e, 0xe1, 0xa8, 0x83, 0x9b, 0x9a, 0x55, 0xfa, 0x73, - 0x8b, 0x06, 0x2c, 0xd9, 0xb1, 0xa0, 0x15, 0xe3, 0x3c, 0x9e, 0x2f, 0xdd, 0xe2, 0x92, 0x88, 0xfa, - 0x3f, 0x8c, 0xff, 0x28, 0x0c, 0x47, 0xa4, 0x11, 0xf8, 0x0d, 0xd7, 0x23, 0xcd, 0x49, 0xe9, 0x1e, - 0x3f, 0x48, 0xea, 0x09, 0xdb, 0x05, 0x63, 0x83, 0x06, 0x4e, 0x51, 0x44, 0x9f, 0xb5, 0x60, 0x44, - 0x25, 0x5e, 0xd2, 0x0f, 0x42, 0x84, 0x3b, 0x76, 0xbe, 0xa0, 0x34, 0x4f, 0x46, 0x73, 0x0a, 0xed, - 0xee, 0x8c, 0x8d, 0xa4, 0xdb, 0x70, 0x86, 0x2f, 0x7a, 0x05, 0x20, 0x58, 0xe5, 0x91, 0x29, 0x93, - 0x89, 0xf0, 0xcd, 0x1e, 0xe4, 0x55, 0x47, 0x78, 0x0e, 0x9a, 0xa4, 0x80, 0x0d, 0x6a, 0xe8, 0x3a, - 0x00, 0x5f, 0x36, 0x2b, 0xdb, 0xa1, 0x34, 0xf3, 0x65, 0xee, 0x10, 0x2c, 0x2b, 0xc8, 0xbd, 0x9d, - 0xb1, 0x6e, 0x5f, 0x19, 0x0b, 0x1b, 0x30, 0x1e, 0x47, 0x3f, 0x01, 0x83, 0x71, 0xa7, 0xdd, 0x76, - 0x94, 0xe7, 0xb6, 0xc0, 0xac, 0x36, 0x4e, 0xd7, 0x10, 0x45, 0xbc, 0x01, 0x4b, 0x8e, 0xe8, 0x0e, - 0x15, 0xaa, 0xb1, 0x70, 0xe2, 0xb1, 0x55, 0xc4, 0x6d, 0x82, 0x21, 0xf6, 0x4e, 0xef, 0x95, 0x81, - 0x36, 0x38, 0x07, 0xe7, 0xde, 0xce, 0xd8, 0x23, 0xe9, 0xf6, 0xf9, 0x40, 0xe4, 0x99, 0xe5, 0xd2, - 0x44, 0xd7, 0x64, 0xf9, 0x12, 0xfa, 0xda, 0x32, 0xab, 0xfe, 0x69, 0x5d, 0xbe, 0x84, 0x35, 0xf7, - 0x1e, 0x33, 0xf3, 0x61, 0xb4, 0x00, 0x67, 0x1a, 0x81, 0x9f, 0x44, 0x81, 0xe7, 0xf1, 0x9a, 0x3c, - 0x7c, 0xc7, 0xc5, 0x3d, 0xbb, 0xef, 0x14, 0xdd, 0x3e, 0x33, 0xdd, 0x8d, 0x82, 0xf3, 0x9e, 0xb3, - 0xfd, 0x74, 0xc8, 0x9e, 0x18, 0x9c, 0xe7, 0x61, 0x98, 0x6c, 0x25, 0x24, 0xf2, 0x1d, 0xef, 0x26, - 0x9e, 0x97, 0x3e, 0x4d, 0xb6, 0x06, 0x2e, 0x1b, 0xed, 0x38, 0x85, 0x85, 0x6c, 0xe5, 0x66, 0x30, - 0x72, 0x27, 0xb9, 0x9b, 0x41, 0x3a, 0x15, 0xec, 0xff, 0x55, 0x4a, 0x19, 0x64, 0x2b, 0x11, 0x21, - 0x28, 0x80, 0xaa, 0x1f, 0x34, 0x95, 0xec, 0xbf, 0x56, 0x8c, 0xec, 0xbf, 0x11, 0x34, 0x8d, 0x1a, - 0x27, 0xf4, 0x5f, 0x8c, 0x39, 0x1f, 0x56, 0x04, 0x42, 0x56, 0xcb, 0x60, 0x00, 0xb1, 0xd1, 0x28, - 0x92, 0xb3, 0x2a, 0x02, 0xb1, 0x68, 0x32, 0xc2, 0x69, 0xbe, 0x68, 0x03, 0xaa, 0xeb, 0x41, 0x9c, - 0xc8, 0xed, 0xc7, 0x11, 0x77, 0x3a, 0x57, 0x83, 0x38, 0x61, 0x56, 0x84, 0x7a, 0x6d, 0xda, 0x12, - 0x63, 0xce, 0xc3, 0xfe, 0x2f, 0x56, 0xca, 0x83, 0x7d, 0x9b, 0x85, 0xaf, 0x6e, 0x12, 0x9f, 0x2e, - 0x6b, 0x33, 0xd0, 0xe7, 0x2f, 0x64, 0x92, 0x01, 0xdf, 0xd5, 0xab, 0xe2, 0xd4, 0x5d, 0x4a, 0x61, - 0x9c, 0x91, 0x30, 0x62, 0x82, 0x3e, 0x69, 0xa5, 0xd3, 0x32, 0x4b, 0x45, 0x6c, 0x30, 0xcc, 0xd4, - 0xe4, 0x7d, 0x33, 0x3c, 0xed, 0x2f, 0x5b, 0x30, 0x38, 0xe5, 0x34, 0x36, 0x82, 0xb5, 0x35, 0xf4, - 0x0c, 0xd4, 0x9a, 0x9d, 0xc8, 0xcc, 0x10, 0x55, 0xdb, 0xf6, 0x19, 0xd1, 0x8e, 0x15, 0x06, 0x9d, - 0xc3, 0x6b, 0x4e, 0x43, 0x26, 0x28, 0x97, 0xf9, 0x1c, 0xbe, 0xc2, 0x5a, 0xb0, 0x80, 0xa0, 0x17, - 0x60, 0xa8, 0xed, 0x6c, 0xc9, 0x87, 0xb3, 0xee, 0xf3, 0x05, 0x0d, 0xc2, 0x26, 0x9e, 0xfd, 0x2f, - 0x2d, 0x18, 0x9d, 0x72, 0x62, 0xb7, 0x31, 0xd9, 0x49, 0xd6, 0xa7, 0xdc, 0x64, 0xb5, 0xd3, 0xd8, - 0x20, 0x09, 0xcf, 0x4a, 0xa7, 0xbd, 0xec, 0xc4, 0x74, 0x29, 0xa9, 0x7d, 0x9d, 0xea, 0xe5, 0x4d, - 0xd1, 0x8e, 0x15, 0x06, 0x7a, 0x03, 0x86, 0x42, 0x27, 0x8e, 0xef, 0x06, 0x51, 0x13, 0x93, 0xb5, - 0x62, 0x6a, 0x42, 0x2c, 0x93, 0x46, 0x44, 0x12, 0x4c, 0xd6, 0xc4, 0x11, 0xaf, 0xa6, 0x8f, 0x4d, - 0x66, 0xf6, 0x17, 0x2d, 0x38, 0x3f, 0x45, 0x9c, 0x88, 0x44, 0xac, 0x84, 0x84, 0x7a, 0x91, 0x69, - 0x2f, 0xe8, 0x34, 0xd1, 0xeb, 0x50, 0x4b, 0x68, 0x33, 0xed, 0x96, 0x55, 0x6c, 0xb7, 0xd8, 0x09, - 0xed, 0x8a, 0x20, 0x8e, 0x15, 0x1b, 0xfb, 0xaf, 0x5b, 0x30, 0xcc, 0x0e, 0xbb, 0x66, 0x48, 0xe2, - 0xb8, 0x5e, 0x57, 0xa5, 0x25, 0xab, 0xcf, 0x4a, 0x4b, 0x17, 0xa1, 0xb2, 0x1e, 0xb4, 0x49, 0xf6, - 0xa0, 0xf6, 0x6a, 0x40, 0xb7, 0xd5, 0x14, 0x82, 0x9e, 0xa3, 0x1f, 0xde, 0xf5, 0x13, 0x87, 0x2e, - 0x01, 0xe9, 0x4c, 0x3d, 0xc9, 0x3f, 0xba, 0x6a, 0xc6, 0x26, 0x8e, 0xfd, 0x9b, 0x75, 0x18, 0x14, - 0xa7, 0xf9, 0x7d, 0x57, 0x26, 0x90, 0xfb, 0xfb, 0x52, 0xcf, 0xfd, 0x7d, 0x0c, 0x03, 0x0d, 0x56, - 0xc7, 0x4d, 0x98, 0x91, 0xd7, 0x0b, 0x09, 0xff, 0xe0, 0xa5, 0xe1, 0x74, 0xb7, 0xf8, 0x7f, 0x2c, - 0x58, 0xa1, 0x2f, 0x59, 0x70, 0xb2, 0x11, 0xf8, 0x3e, 0x69, 0x68, 0x1b, 0xa7, 0x52, 0xc4, 0x29, - 0xff, 0x74, 0x9a, 0xa8, 0x3e, 0x69, 0xc9, 0x00, 0x70, 0x96, 0x3d, 0x7a, 0x09, 0x4e, 0xf0, 0x31, - 0xbb, 0x95, 0xf2, 0x00, 0xeb, 0x02, 0x3c, 0x26, 0x10, 0xa7, 0x71, 0xd1, 0x38, 0xf7, 0xa4, 0x8b, - 0x52, 0x37, 0x03, 0xfa, 0xd8, 0xce, 0x28, 0x72, 0x63, 0x60, 0xa0, 0x08, 0x50, 0x44, 0xd6, 0x22, - 0x12, 0xaf, 0x8b, 0x68, 0x07, 0x66, 0x5f, 0x0d, 0x1e, 0x2e, 0x8b, 0x19, 0x77, 0x51, 0xc2, 0x39, - 0xd4, 0xd1, 0x86, 0xd8, 0x60, 0xd6, 0x8a, 0x90, 0xa1, 0xe2, 0x33, 0xf7, 0xdc, 0x67, 0x8e, 0x41, - 0x35, 0x5e, 0x77, 0xa2, 0x26, 0xb3, 0xeb, 0xca, 0x3c, 0x73, 0x66, 0x99, 0x36, 0x60, 0xde, 0x8e, - 0x66, 0xe0, 0x54, 0xa6, 0x7c, 0x50, 0x2c, 0x3c, 0xb5, 0x2a, 0x4b, 0x22, 0x53, 0x78, 0x28, 0xc6, - 0x5d, 0x4f, 0x98, 0xce, 0x87, 0xa1, 0x7d, 0x9c, 0x0f, 0xdb, 0x2a, 0xa6, 0x8e, 0xfb, 0x50, 0x5f, - 0x2e, 0x64, 0x00, 0xfa, 0x0a, 0xa0, 0xfb, 0x42, 0x26, 0x80, 0xee, 0x04, 0xeb, 0xc0, 0xad, 0x62, - 0x3a, 0x70, 0xf0, 0x68, 0xb9, 0x07, 0x19, 0xfd, 0xf6, 0x67, 0x16, 0xc8, 0xef, 0x3a, 0xed, 0x34, - 0xd6, 0x09, 0x9d, 0x32, 0xe8, 0xfd, 0x30, 0xa2, 0xb6, 0xd0, 0xd3, 0x41, 0xc7, 0xe7, 0x81, 0x6f, - 0x65, 0x7d, 0x24, 0x8b, 0x53, 0x50, 0x9c, 0xc1, 0x46, 0x13, 0x50, 0xa7, 0xe3, 0xc4, 0x1f, 0xe5, - 0xba, 0x56, 0x6d, 0xd3, 0x27, 0x97, 0xe6, 0xc4, 0x53, 0x1a, 0x07, 0x05, 0x70, 0xda, 0x73, 0xe2, - 0x84, 0xf5, 0x80, 0xee, 0xa8, 0x0f, 0x59, 0x43, 0x80, 0x85, 0xe2, 0xcf, 0x67, 0x09, 0xe1, 0x6e, - 0xda, 0xf6, 0xb7, 0x2b, 0x70, 0x22, 0x25, 0x19, 0x0f, 0xa8, 0xa4, 0x9f, 0x81, 0x9a, 0xd4, 0x9b, - 0xd9, 0x6a, 0x27, 0x4a, 0xb9, 0x2a, 0x0c, 0xaa, 0xb4, 0x56, 0xb5, 0x56, 0xcd, 0x1a, 0x15, 0x86, - 0xc2, 0xc5, 0x26, 0x1e, 0x13, 0xca, 0x89, 0x17, 0x4f, 0x7b, 0x2e, 0xf1, 0x13, 0xde, 0xcd, 0x62, - 0x84, 0xf2, 0xca, 0xfc, 0xb2, 0x49, 0x54, 0x0b, 0xe5, 0x0c, 0x00, 0x67, 0xd9, 0xa3, 0xcf, 0x58, - 0x70, 0xc2, 0xb9, 0x1b, 0xeb, 0x62, 0xa3, 0x22, 0x54, 0xee, 0x88, 0x4a, 0x2a, 0x55, 0xbf, 0x94, - 0xbb, 0x7c, 0x53, 0x4d, 0x38, 0xcd, 0x14, 0xbd, 0x65, 0x01, 0x22, 0x5b, 0xa4, 0x21, 0x83, 0xf9, - 0x44, 0x5f, 0x06, 0x8a, 0xd8, 0x69, 0x5e, 0xee, 0xa2, 0xcb, 0xa5, 0x7a, 0x77, 0x3b, 0xce, 0xe9, - 0x83, 0xfd, 0xcf, 0xca, 0x6a, 0x41, 0xe9, 0xf8, 0x51, 0xc7, 0x88, 0x63, 0xb3, 0x0e, 0x1f, 0xc7, - 0xa6, 0xe3, 0x01, 0xba, 0x53, 0x13, 0x53, 0x99, 0x4c, 0xa5, 0x07, 0x94, 0xc9, 0xf4, 0x53, 0x56, - 0xaa, 0xae, 0xcf, 0xd0, 0xa5, 0x57, 0x8a, 0x8d, 0x5d, 0x1d, 0xe7, 0xb1, 0x0a, 0x19, 0xe9, 0x9e, - 0x0e, 0x51, 0xa1, 0xd2, 0xd4, 0x40, 0x3b, 0x90, 0x34, 0xfc, 0x0f, 0x65, 0x18, 0x32, 0x34, 0x69, - 0xae, 0x59, 0x64, 0x3d, 0x64, 0x66, 0x51, 0xe9, 0x00, 0x66, 0xd1, 0x4f, 0x42, 0xbd, 0x21, 0xa5, - 0x7c, 0x31, 0x95, 0x6d, 0xb3, 0xba, 0x43, 0x0b, 0x7a, 0xd5, 0x84, 0x35, 0x4f, 0x34, 0x9b, 0x4a, - 0x9c, 0x11, 0x1a, 0xa2, 0xc2, 0x34, 0x44, 0x5e, 0x66, 0x8b, 0xd0, 0x14, 0xdd, 0xcf, 0xb0, 0xf2, - 0x4f, 0xa1, 0x2b, 0xde, 0x4b, 0x46, 0x98, 0xf3, 0xf2, 0x4f, 0x4b, 0x73, 0xb2, 0x19, 0x9b, 0x38, - 0xf6, 0xb7, 0x2d, 0xf5, 0x71, 0xef, 0x43, 0xa1, 0x83, 0x3b, 0xe9, 0x42, 0x07, 0x97, 0x0b, 0x19, - 0xe6, 0x1e, 0x15, 0x0e, 0x6e, 0xc0, 0xe0, 0x74, 0xd0, 0x6e, 0x3b, 0x7e, 0x13, 0xfd, 0x20, 0x0c, - 0x36, 0xf8, 0x4f, 0xe1, 0xd8, 0x61, 0xc7, 0x83, 0x02, 0x8a, 0x25, 0x0c, 0x3d, 0x06, 0x15, 0x27, - 0x6a, 0x49, 0x67, 0x0e, 0x0b, 0x6d, 0x99, 0x8c, 0x5a, 0x31, 0x66, 0xad, 0xf6, 0x3f, 0xaa, 0x00, - 0x4c, 0x07, 0xed, 0xd0, 0x89, 0x48, 0x73, 0x25, 0x60, 0x95, 0xf5, 0x8e, 0xf5, 0x50, 0x4d, 0x6f, - 0x96, 0x1e, 0xe6, 0x83, 0x35, 0xe3, 0x70, 0xa5, 0x7c, 0x9f, 0x0f, 0x57, 0x7a, 0x9c, 0x97, 0x55, - 0x1e, 0xa2, 0xf3, 0x32, 0xfb, 0xf3, 0x16, 0x20, 0x3a, 0x69, 0x02, 0x9f, 0xf8, 0x89, 0x3e, 0xd0, - 0x9e, 0x80, 0x7a, 0x43, 0xb6, 0x0a, 0xc3, 0x4a, 0x8b, 0x08, 0x09, 0xc0, 0x1a, 0xa7, 0x8f, 0x1d, - 0xf2, 0x93, 0x52, 0x7e, 0x97, 0xd3, 0x51, 0xb1, 0x4c, 0xea, 0x0b, 0x71, 0x6e, 0xff, 0x56, 0x09, - 0x1e, 0xe1, 0x2a, 0x79, 0xc1, 0xf1, 0x9d, 0x16, 0x69, 0xd3, 0x5e, 0xf5, 0x1b, 0xa2, 0xd0, 0xa0, - 0x5b, 0x33, 0x57, 0x46, 0xb9, 0x1e, 0x75, 0xed, 0xf2, 0x35, 0xc7, 0x57, 0xd9, 0x9c, 0xef, 0x26, - 0x98, 0x11, 0x47, 0x31, 0xd4, 0x64, 0x29, 0x77, 0x21, 0x8b, 0x0b, 0x62, 0xa4, 0xc4, 0x92, 0xd0, - 0x9b, 0x04, 0x2b, 0x46, 0xd4, 0x70, 0xf5, 0x82, 0xc6, 0x06, 0x26, 0x61, 0xc0, 0xe4, 0xae, 0x11, - 0x64, 0x38, 0x2f, 0xda, 0xb1, 0xc2, 0xb0, 0x7f, 0xcb, 0x82, 0xac, 0x46, 0x32, 0x4a, 0x98, 0x59, - 0x7b, 0x96, 0x30, 0x3b, 0x40, 0x0d, 0xb1, 0x1f, 0x87, 0x21, 0x27, 0xa1, 0x46, 0x04, 0xdf, 0x76, - 0x97, 0x0f, 0x77, 0xac, 0xb1, 0x10, 0x34, 0xdd, 0x35, 0x97, 0x6d, 0xb7, 0x4d, 0x72, 0xf6, 0xff, - 0xa8, 0xc0, 0xe9, 0xae, 0x5c, 0x0c, 0xf4, 0x22, 0x0c, 0x37, 0xc4, 0xf4, 0x08, 0xa5, 0x43, 0xab, - 0x6e, 0x06, 0xa5, 0x69, 0x18, 0x4e, 0x61, 0xf6, 0x31, 0x41, 0xe7, 0xe0, 0x4c, 0x44, 0x37, 0xfa, - 0x1d, 0x32, 0xb9, 0x96, 0x90, 0x68, 0x99, 0x34, 0x02, 0xbf, 0xc9, 0x0b, 0xed, 0x95, 0xa7, 0x1e, - 0xdd, 0xdd, 0x19, 0x3b, 0x83, 0xbb, 0xc1, 0x38, 0xef, 0x19, 0x14, 0xc2, 0x09, 0xcf, 0xb4, 0x01, - 0xc5, 0x06, 0xe0, 0x50, 0xe6, 0xa3, 0xb2, 0x11, 0x52, 0xcd, 0x38, 0xcd, 0x20, 0x6d, 0x48, 0x56, - 0x1f, 0x90, 0x21, 0xf9, 0x69, 0x6d, 0x48, 0xf2, 0xf3, 0xf7, 0x0f, 0x17, 0x9c, 0x8b, 0x73, 0xdc, - 0x96, 0xe4, 0xcb, 0x50, 0x93, 0xb1, 0x49, 0x7d, 0xc5, 0xf4, 0x98, 0x74, 0x7a, 0x48, 0xb4, 0x7b, - 0x25, 0xc8, 0xd9, 0x84, 0xd0, 0x75, 0xa6, 0x35, 0x7e, 0x6a, 0x9d, 0x1d, 0x4c, 0xeb, 0xa3, 0x2d, - 0x1e, 0x97, 0xc5, 0x75, 0xdb, 0x87, 0x8a, 0xde, 0x44, 0xe9, 0x50, 0x2d, 0x95, 0xa2, 0xa0, 0xc2, - 0xb5, 0x2e, 0x01, 0x68, 0x43, 0x4d, 0x04, 0xa0, 0xab, 0x63, 0x5f, 0x6d, 0xcf, 0x61, 0x03, 0x8b, - 0xee, 0xa9, 0x5d, 0x3f, 0x4e, 0x1c, 0xcf, 0xbb, 0xea, 0xfa, 0x89, 0x70, 0x0e, 0x2a, 0x25, 0x3e, - 0xa7, 0x41, 0xd8, 0xc4, 0xbb, 0xf0, 0x5e, 0xe3, 0xbb, 0x1c, 0xe4, 0x7b, 0xae, 0xc3, 0xf9, 0x59, - 0x37, 0x51, 0x69, 0x13, 0x6a, 0x1e, 0x51, 0x3b, 0x4c, 0xa5, 0x01, 0x59, 0x3d, 0xd3, 0x80, 0x8c, - 0xb4, 0x85, 0x52, 0x3a, 0xcb, 0x22, 0x9b, 0xb6, 0x60, 0xbf, 0x08, 0x67, 0x67, 0xdd, 0xe4, 0x8a, - 0xeb, 0x91, 0x03, 0x32, 0xb1, 0x7f, 0x63, 0x00, 0x86, 0xcd, 0xc4, 0xbb, 0x83, 0x64, 0x32, 0x7d, - 0x91, 0x9a, 0x5a, 0xe2, 0xed, 0x5c, 0x75, 0x68, 0x76, 0xfb, 0xc8, 0x59, 0x80, 0xf9, 0x23, 0x66, - 0x58, 0x5b, 0x9a, 0x27, 0x36, 0x3b, 0x80, 0xee, 0x42, 0x75, 0x8d, 0x85, 0xd5, 0x97, 0x8b, 0x88, - 0x2c, 0xc8, 0x1b, 0x51, 0xbd, 0xcc, 0x78, 0x60, 0x3e, 0xe7, 0x47, 0x35, 0x64, 0x94, 0xce, 0xd5, - 0x32, 0x42, 0x41, 0x45, 0x96, 0x96, 0xc2, 0xe8, 0x25, 0xea, 0xab, 0x87, 0x10, 0xf5, 0x29, 0xc1, - 0x3b, 0xf0, 0x80, 0x04, 0x2f, 0x4b, 0x91, 0x48, 0xd6, 0x99, 0xfd, 0x26, 0x62, 0xd7, 0x07, 0xd9, - 0x20, 0x18, 0x29, 0x12, 0x29, 0x30, 0xce, 0xe2, 0xa3, 0x4f, 0x28, 0xd1, 0x5d, 0x2b, 0xc2, 0xaf, - 0x6a, 0xce, 0xe8, 0xe3, 0x96, 0xda, 0x9f, 0x2f, 0xc1, 0xc8, 0xac, 0xdf, 0x59, 0x9a, 0x5d, 0xea, - 0xac, 0x7a, 0x6e, 0xe3, 0x3a, 0xd9, 0xa6, 0xa2, 0x79, 0x83, 0x6c, 0xcf, 0xcd, 0x88, 0x15, 0xa4, - 0xe6, 0xcc, 0x75, 0xda, 0x88, 0x39, 0x8c, 0x0a, 0xa3, 0x35, 0xd7, 0x6f, 0x91, 0x28, 0x8c, 0x5c, - 0xe1, 0xf2, 0x34, 0x84, 0xd1, 0x15, 0x0d, 0xc2, 0x26, 0x1e, 0xa5, 0x1d, 0xdc, 0xf5, 0x49, 0x94, - 0x35, 0x64, 0x17, 0x69, 0x23, 0xe6, 0x30, 0x8a, 0x94, 0x44, 0x9d, 0x38, 0x11, 0x93, 0x51, 0x21, - 0xad, 0xd0, 0x46, 0xcc, 0x61, 0x74, 0xa5, 0xc7, 0x9d, 0x55, 0x16, 0xb8, 0x91, 0x09, 0x94, 0x5f, - 0xe6, 0xcd, 0x58, 0xc2, 0x29, 0xea, 0x06, 0xd9, 0x9e, 0xa1, 0xbb, 0xde, 0x4c, 0xbe, 0xcc, 0x75, - 0xde, 0x8c, 0x25, 0x9c, 0x55, 0x08, 0x4c, 0x0f, 0xc7, 0xf7, 0x5c, 0x85, 0xc0, 0x74, 0xf7, 0x7b, - 0xec, 0x9f, 0x7f, 0xc9, 0x82, 0x61, 0x33, 0xdc, 0x0a, 0xb5, 0x32, 0x36, 0xee, 0x62, 0x57, 0x81, - 0xd9, 0x1f, 0xcd, 0xbb, 0x71, 0xab, 0xe5, 0x26, 0x41, 0x18, 0x3f, 0x4b, 0xfc, 0x96, 0xeb, 0x13, - 0x76, 0x8a, 0xce, 0xc3, 0xb4, 0x52, 0xb1, 0x5c, 0xd3, 0x41, 0x93, 0x1c, 0xc2, 0x48, 0xb6, 0x6f, - 0xc3, 0xe9, 0xae, 0x24, 0xa9, 0x3e, 0x4c, 0x8b, 0x7d, 0x53, 0x54, 0x6d, 0x0c, 0x43, 0x94, 0xb0, - 0xac, 0x52, 0x33, 0x0d, 0xa7, 0xf9, 0x42, 0xa2, 0x9c, 0x96, 0x1b, 0xeb, 0xa4, 0xad, 0x12, 0xdf, - 0x98, 0x7f, 0xfd, 0x56, 0x16, 0x88, 0xbb, 0xf1, 0xed, 0x2f, 0x58, 0x70, 0x22, 0x95, 0xb7, 0x56, - 0x90, 0x11, 0xc4, 0x56, 0x5a, 0xc0, 0xa2, 0xff, 0x58, 0x08, 0x74, 0x99, 0x29, 0x53, 0xbd, 0xd2, - 0x34, 0x08, 0x9b, 0x78, 0xf6, 0x97, 0x4b, 0x50, 0x93, 0x11, 0x14, 0x7d, 0x74, 0xe5, 0x73, 0x16, - 0x9c, 0x50, 0x67, 0x1a, 0xcc, 0x59, 0x56, 0x2a, 0x22, 0xc9, 0x80, 0xf6, 0x40, 0x6d, 0xb7, 0xfd, - 0xb5, 0x40, 0x5b, 0xe4, 0xd8, 0x64, 0x86, 0xd3, 0xbc, 0xd1, 0x2d, 0x80, 0x78, 0x3b, 0x4e, 0x48, - 0xdb, 0x70, 0xdb, 0xd9, 0xc6, 0x8a, 0x1b, 0x6f, 0x04, 0x11, 0xa1, 0xeb, 0xeb, 0x46, 0xd0, 0x24, - 0xcb, 0x0a, 0x53, 0x9b, 0x50, 0xba, 0x0d, 0x1b, 0x94, 0xec, 0x7f, 0x50, 0x82, 0x53, 0xd9, 0x2e, - 0xa1, 0x0f, 0xc3, 0xb0, 0xe4, 0x6e, 0xdc, 0x1e, 0x26, 0xc3, 0x46, 0x86, 0xb1, 0x01, 0xbb, 0xb7, - 0x33, 0x36, 0xd6, 0x7d, 0x7b, 0xdb, 0xb8, 0x89, 0x82, 0x53, 0xc4, 0xf8, 0xc1, 0x92, 0x38, 0x01, - 0x9d, 0xda, 0x9e, 0x0c, 0x43, 0x71, 0x3a, 0x64, 0x1c, 0x2c, 0x99, 0x50, 0x9c, 0xc1, 0x46, 0x4b, - 0x70, 0xd6, 0x68, 0xb9, 0x41, 0xdc, 0xd6, 0xfa, 0x6a, 0x10, 0xc9, 0x9d, 0xd5, 0x63, 0x3a, 0xb0, - 0xab, 0x1b, 0x07, 0xe7, 0x3e, 0x49, 0xb5, 0x7d, 0xc3, 0x09, 0x9d, 0x86, 0x9b, 0x6c, 0x0b, 0x3f, - 0xa4, 0x92, 0x4d, 0xd3, 0xa2, 0x1d, 0x2b, 0x0c, 0x7b, 0x01, 0x2a, 0x7d, 0xce, 0xa0, 0xbe, 0x2c, - 0xfa, 0x97, 0xa1, 0x46, 0xc9, 0x49, 0xf3, 0xae, 0x08, 0x92, 0x01, 0xd4, 0xe4, 0x05, 0x20, 0xc8, - 0x86, 0xb2, 0xeb, 0xc8, 0xb3, 0x3b, 0xf5, 0x5a, 0x73, 0x71, 0xdc, 0x61, 0x9b, 0x64, 0x0a, 0x44, - 0x4f, 0x42, 0x99, 0x6c, 0x85, 0xd9, 0x43, 0xba, 0xcb, 0x5b, 0xa1, 0x1b, 0x91, 0x98, 0x22, 0x91, - 0xad, 0x10, 0x5d, 0x80, 0x92, 0xdb, 0x14, 0x4a, 0x0a, 0x04, 0x4e, 0x69, 0x6e, 0x06, 0x97, 0xdc, - 0xa6, 0xbd, 0x05, 0x75, 0x75, 0xe3, 0x08, 0xda, 0x90, 0xb2, 0xdb, 0x2a, 0x22, 0xe4, 0x49, 0xd2, - 0xed, 0x21, 0xb5, 0x3b, 0x00, 0x3a, 0x81, 0xaf, 0x28, 0xf9, 0x72, 0x11, 0x2a, 0x8d, 0x40, 0x24, - 0x17, 0xd7, 0x34, 0x19, 0x26, 0xb4, 0x19, 0xc4, 0xbe, 0x0d, 0x23, 0xd7, 0xfd, 0xe0, 0x2e, 0x2b, - 0x97, 0xce, 0xaa, 0x83, 0x51, 0xc2, 0x6b, 0xf4, 0x47, 0xd6, 0x44, 0x60, 0x50, 0xcc, 0x61, 0xaa, - 0xde, 0x52, 0xa9, 0x57, 0xbd, 0x25, 0xfb, 0x93, 0x16, 0x0c, 0xab, 0x4c, 0xa0, 0xd9, 0xcd, 0x0d, - 0x4a, 0xb7, 0x15, 0x05, 0x9d, 0x30, 0x4b, 0x97, 0xdd, 0x09, 0x84, 0x39, 0xcc, 0x4c, 0x91, 0x2b, - 0xed, 0x93, 0x22, 0x77, 0x11, 0x2a, 0x1b, 0xae, 0xdf, 0xcc, 0x5e, 0x72, 0x71, 0xdd, 0xf5, 0x9b, - 0x98, 0x41, 0x68, 0x17, 0x4e, 0xa9, 0x2e, 0x48, 0x85, 0xf0, 0x22, 0x0c, 0xaf, 0x76, 0x5c, 0xaf, - 0x29, 0xcb, 0x9e, 0x65, 0x3c, 0x25, 0x53, 0x06, 0x0c, 0xa7, 0x30, 0xe9, 0xbe, 0x6e, 0xd5, 0xf5, - 0x9d, 0x68, 0x7b, 0x49, 0x6b, 0x20, 0x25, 0x94, 0xa6, 0x14, 0x04, 0x1b, 0x58, 0xf6, 0x9b, 0x65, - 0x18, 0x49, 0xe7, 0x43, 0xf5, 0xb1, 0xbd, 0x7a, 0x12, 0xaa, 0x2c, 0x45, 0x2a, 0xfb, 0x69, 0xd9, - 0xf3, 0x98, 0xc3, 0x50, 0x0c, 0x03, 0xbc, 0xb8, 0x42, 0x31, 0x17, 0xc4, 0xa8, 0x4e, 0x2a, 0xff, - 0x0a, 0x8b, 0x27, 0x13, 0xf5, 0x1c, 0x04, 0x2b, 0xf4, 0x19, 0x0b, 0x06, 0x83, 0xd0, 0xac, 0xd3, - 0xf3, 0xa1, 0x22, 0x73, 0xc5, 0x44, 0xb2, 0x8c, 0xb0, 0x88, 0xd5, 0xa7, 0x97, 0x9f, 0x43, 0xb2, - 0xbe, 0xf0, 0x3e, 0x18, 0x36, 0x31, 0xf7, 0x33, 0x8a, 0x6b, 0xa6, 0x51, 0xfc, 0x39, 0x73, 0x52, - 0x88, 0x6c, 0xb8, 0x3e, 0x96, 0xdb, 0x4d, 0xa8, 0x36, 0x54, 0x00, 0xc0, 0xa1, 0x8a, 0x65, 0xaa, - 0x6a, 0x07, 0xec, 0x10, 0x88, 0x53, 0xb3, 0xbf, 0x6d, 0x19, 0xf3, 0x03, 0x93, 0x78, 0xae, 0x89, - 0x22, 0x28, 0xb7, 0x36, 0x37, 0x84, 0x29, 0x7a, 0xad, 0xa0, 0xe1, 0x9d, 0xdd, 0xdc, 0xd0, 0x73, - 0xdc, 0x6c, 0xc5, 0x94, 0x59, 0x1f, 0x4e, 0xc0, 0x54, 0xd2, 0x64, 0x79, 0xff, 0xa4, 0x49, 0xfb, - 0xad, 0x12, 0x9c, 0xee, 0x9a, 0x54, 0xe8, 0x0d, 0xa8, 0x46, 0xf4, 0x2d, 0xc5, 0xeb, 0xcd, 0x17, - 0x96, 0xe6, 0x18, 0xcf, 0x35, 0xb5, 0xde, 0x4d, 0xb7, 0x63, 0xce, 0x12, 0x5d, 0x03, 0xa4, 0xc3, - 0x54, 0x94, 0x07, 0x92, 0xbf, 0xf2, 0x05, 0xf1, 0x28, 0x9a, 0xec, 0xc2, 0xc0, 0x39, 0x4f, 0xa1, - 0x97, 0xb2, 0x8e, 0xcc, 0x72, 0xfa, 0xdc, 0x72, 0x2f, 0x9f, 0xa4, 0xfd, 0xcf, 0x4b, 0x70, 0x22, - 0x55, 0x36, 0x09, 0x79, 0x50, 0x23, 0x1e, 0x73, 0xea, 0x4b, 0x65, 0x73, 0xd4, 0x62, 0xc2, 0x4a, - 0x41, 0x5e, 0x16, 0x74, 0xb1, 0xe2, 0xf0, 0x70, 0x1c, 0xae, 0xbf, 0x08, 0xc3, 0xb2, 0x43, 0x1f, - 0x72, 0xda, 0x9e, 0x18, 0x40, 0x35, 0x47, 0x2f, 0x1b, 0x30, 0x9c, 0xc2, 0xb4, 0x7f, 0xbb, 0x0c, - 0xa3, 0xfc, 0x14, 0xa4, 0xa9, 0x66, 0xde, 0x82, 0xdc, 0x6f, 0xfd, 0x65, 0x5d, 0xdc, 0x8c, 0x0f, - 0xe4, 0xea, 0x51, 0x6b, 0xf7, 0xe7, 0x33, 0xea, 0x2b, 0x32, 0xeb, 0x17, 0x32, 0x91, 0x59, 0xdc, - 0xec, 0x6e, 0x1d, 0x53, 0x8f, 0xbe, 0xb7, 0x42, 0xb5, 0xfe, 0x6e, 0x09, 0x4e, 0x66, 0x2e, 0x46, - 0x40, 0x6f, 0xa6, 0x6b, 0xe9, 0x5a, 0x45, 0xf8, 0xca, 0xf7, 0xac, 0x95, 0x7f, 0xb0, 0x8a, 0xba, - 0x0f, 0x68, 0xa9, 0xd8, 0xbf, 0x57, 0x82, 0x91, 0xf4, 0x8d, 0x0e, 0x0f, 0xe1, 0x48, 0xbd, 0x1b, - 0xea, 0xac, 0x68, 0x39, 0xbb, 0xa9, 0x92, 0xbb, 0xe4, 0x79, 0x7d, 0x68, 0xd9, 0x88, 0x35, 0xfc, - 0xa1, 0x28, 0x54, 0x6c, 0xff, 0x3d, 0x0b, 0xce, 0xf1, 0xb7, 0xcc, 0xce, 0xc3, 0xbf, 0x92, 0x37, - 0xba, 0xaf, 0x16, 0xdb, 0xc1, 0x4c, 0x51, 0xbe, 0xfd, 0xc6, 0x97, 0xdd, 0x90, 0x27, 0x7a, 0x9b, - 0x9e, 0x0a, 0x0f, 0x61, 0x67, 0x0f, 0x34, 0x19, 0xec, 0xdf, 0x2b, 0x83, 0xbe, 0x14, 0x10, 0xb9, - 0x22, 0xc7, 0xb1, 0x90, 0xe2, 0x84, 0xcb, 0xdb, 0x7e, 0x43, 0x5f, 0x3f, 0x58, 0xcb, 0xa4, 0x38, - 0xfe, 0xac, 0x05, 0x43, 0xae, 0xef, 0x26, 0xae, 0xc3, 0xb6, 0xd1, 0xc5, 0x5c, 0x58, 0xa6, 0xd8, - 0xcd, 0x71, 0xca, 0x41, 0x64, 0x9e, 0xe3, 0x28, 0x66, 0xd8, 0xe4, 0x8c, 0x3e, 0x2a, 0x82, 0xa7, - 0xcb, 0x85, 0x65, 0xe7, 0xd6, 0x32, 0x11, 0xd3, 0x21, 0x35, 0xbc, 0x92, 0xa8, 0xa0, 0xa4, 0x76, - 0x4c, 0x49, 0xa9, 0x3a, 0xb7, 0xfa, 0x7a, 0x66, 0xda, 0x8c, 0x39, 0x23, 0x3b, 0x06, 0xd4, 0x3d, - 0x16, 0x07, 0x0c, 0x4c, 0x9d, 0x80, 0xba, 0xd3, 0x49, 0x82, 0x36, 0x1d, 0x26, 0x71, 0xd4, 0xa4, - 0x43, 0x6f, 0x25, 0x00, 0x6b, 0x1c, 0xfb, 0xcd, 0x2a, 0x64, 0x92, 0x0e, 0xd1, 0x96, 0x79, 0xa1, - 0xa5, 0x55, 0xec, 0x85, 0x96, 0xaa, 0x33, 0x79, 0x97, 0x5a, 0xa2, 0x16, 0x54, 0xc3, 0x75, 0x27, - 0x96, 0x66, 0xf5, 0xcb, 0x6a, 0x1f, 0x47, 0x1b, 0xef, 0xed, 0x8c, 0xfd, 0x58, 0x7f, 0x5e, 0x57, - 0x3a, 0x57, 0x27, 0x78, 0xf1, 0x10, 0xcd, 0x9a, 0xd1, 0xc0, 0x9c, 0xfe, 0x41, 0xae, 0x6c, 0xfb, - 0x94, 0xa8, 0xce, 0x8e, 0x49, 0xdc, 0xf1, 0x12, 0x31, 0x1b, 0x5e, 0x2e, 0x70, 0x95, 0x71, 0xc2, - 0x3a, 0x5d, 0x9e, 0xff, 0xc7, 0x06, 0x53, 0xf4, 0x61, 0xa8, 0xc7, 0x89, 0x13, 0x25, 0x87, 0x4c, - 0x70, 0x55, 0x83, 0xbe, 0x2c, 0x89, 0x60, 0x4d, 0x0f, 0xbd, 0xc2, 0x6a, 0xb5, 0xba, 0xf1, 0xfa, - 0x21, 0x73, 0x1e, 0x64, 0x5d, 0x57, 0x41, 0x01, 0x1b, 0xd4, 0xd0, 0x25, 0x00, 0x36, 0xb7, 0x79, - 0xa0, 0x5f, 0x8d, 0x79, 0x99, 0x94, 0x28, 0xc4, 0x0a, 0x82, 0x0d, 0x2c, 0xfb, 0x87, 0x21, 0x5d, - 0xef, 0x01, 0x8d, 0xc9, 0xf2, 0x12, 0xdc, 0x0b, 0xcd, 0x72, 0x17, 0x52, 0x95, 0x20, 0x7e, 0xcd, - 0x02, 0xb3, 0x28, 0x05, 0x7a, 0x9d, 0x57, 0xbf, 0xb0, 0x8a, 0x38, 0x39, 0x34, 0xe8, 0x8e, 0x2f, - 0x38, 0x61, 0xe6, 0x08, 0x5b, 0x96, 0xc0, 0xb8, 0xf0, 0x5e, 0xa8, 0x49, 0xe8, 0x81, 0x8c, 0xba, - 0x4f, 0xc0, 0x99, 0xec, 0x75, 0xdf, 0xe2, 0xd4, 0x69, 0x7f, 0xd7, 0x8f, 0xf4, 0xe7, 0x94, 0x7a, - 0xf9, 0x73, 0xfa, 0xb8, 0xd6, 0xf4, 0xd7, 0x2d, 0xb8, 0xb8, 0xdf, 0xad, 0xe4, 0xe8, 0x31, 0xa8, - 0xdc, 0x75, 0x22, 0x59, 0x44, 0x9b, 0x09, 0xca, 0xdb, 0x4e, 0xe4, 0x63, 0xd6, 0x8a, 0xb6, 0x61, - 0x80, 0x47, 0x83, 0x09, 0x6b, 0xfd, 0xe5, 0x62, 0xef, 0x48, 0xbf, 0x4e, 0x8c, 0xed, 0x02, 0x8f, - 0x44, 0xc3, 0x82, 0xa1, 0xfd, 0x1d, 0x0b, 0xd0, 0xe2, 0x26, 0x89, 0x22, 0xb7, 0x69, 0xc4, 0xaf, - 0xb1, 0x5b, 0x4e, 0x8c, 0xdb, 0x4c, 0xcc, 0x14, 0xd7, 0xcc, 0x2d, 0x27, 0xc6, 0xbf, 0xfc, 0x5b, - 0x4e, 0x4a, 0x07, 0xbb, 0xe5, 0x04, 0x2d, 0xc2, 0xb9, 0x36, 0xdf, 0x6e, 0xf0, 0x9b, 0x03, 0xf8, - 0xde, 0x43, 0x25, 0x94, 0x9d, 0xdf, 0xdd, 0x19, 0x3b, 0xb7, 0x90, 0x87, 0x80, 0xf3, 0x9f, 0xb3, - 0xdf, 0x0b, 0x88, 0x87, 0xad, 0x4d, 0xe7, 0xc5, 0x20, 0xf5, 0x74, 0xbf, 0xd8, 0x5f, 0xad, 0xc2, - 0xc9, 0x4c, 0x89, 0x55, 0xba, 0xd5, 0xeb, 0x0e, 0x7a, 0x3a, 0xb2, 0xfe, 0xee, 0xee, 0x5e, 0x5f, - 0x61, 0x54, 0x3e, 0x54, 0x5d, 0x3f, 0xec, 0x24, 0xc5, 0xe4, 0x90, 0xf2, 0x4e, 0xcc, 0x51, 0x82, - 0x86, 0xbb, 0x98, 0xfe, 0xc5, 0x9c, 0x4d, 0x91, 0x41, 0x59, 0x29, 0x63, 0xbc, 0xf2, 0x80, 0xdc, - 0x01, 0x9f, 0xd2, 0x21, 0x52, 0xd5, 0x22, 0x1c, 0x8b, 0x99, 0xc9, 0x72, 0xdc, 0x47, 0xed, 0xbf, - 0x5a, 0x82, 0x21, 0xe3, 0xa3, 0xa1, 0x5f, 0x4c, 0x97, 0x6c, 0xb2, 0x8a, 0x7b, 0x25, 0x46, 0x7f, - 0x5c, 0x17, 0x65, 0xe2, 0xaf, 0xf4, 0x54, 0x77, 0xb5, 0xa6, 0x7b, 0x3b, 0x63, 0xa7, 0x32, 0xf5, - 0x98, 0x52, 0x15, 0x9c, 0x2e, 0x7c, 0x1c, 0x4e, 0x66, 0xc8, 0xe4, 0xbc, 0xf2, 0x4a, 0xfa, 0x36, - 0xf7, 0x23, 0xba, 0xa5, 0xcc, 0x21, 0xfb, 0x06, 0x1d, 0x32, 0x91, 0x46, 0x17, 0x78, 0xa4, 0x0f, - 0x1f, 0x6c, 0x26, 0x5b, 0xb6, 0xd4, 0x67, 0xb6, 0xec, 0xd3, 0x50, 0x0b, 0x03, 0xcf, 0x6d, 0xb8, - 0xaa, 0xaa, 0x20, 0xcb, 0xcf, 0x5d, 0x12, 0x6d, 0x58, 0x41, 0xd1, 0x5d, 0xa8, 0xab, 0x8b, 0xef, - 0x85, 0x7f, 0xbb, 0xa8, 0x43, 0x1f, 0x65, 0xb4, 0xe8, 0x0b, 0xed, 0x35, 0x2f, 0x64, 0xc3, 0x00, - 0x53, 0x82, 0x32, 0xf4, 0x9f, 0xf9, 0xde, 0x99, 0x76, 0x8c, 0xb1, 0x80, 0xd8, 0x5f, 0xaf, 0xc3, - 0xd9, 0xbc, 0x3a, 0xd7, 0xe8, 0x63, 0x30, 0xc0, 0xfb, 0x58, 0xcc, 0x55, 0x0a, 0x79, 0x3c, 0x66, - 0x19, 0x41, 0xd1, 0x2d, 0xf6, 0x1b, 0x0b, 0x9e, 0x82, 0xbb, 0xe7, 0xac, 0x8a, 0x19, 0x72, 0x3c, - 0xdc, 0xe7, 0x1d, 0xcd, 0x7d, 0xde, 0xe1, 0xdc, 0x3d, 0x67, 0x15, 0x6d, 0x41, 0xb5, 0xe5, 0x26, - 0xc4, 0x11, 0x4e, 0x84, 0xdb, 0xc7, 0xc2, 0x9c, 0x38, 0xdc, 0x4a, 0x63, 0x3f, 0x31, 0x67, 0x88, - 0xbe, 0x66, 0xc1, 0xc9, 0xd5, 0x74, 0x6a, 0xbc, 0x10, 0x9e, 0xce, 0x31, 0xd4, 0x32, 0x4f, 0x33, - 0xe2, 0xd7, 0xfc, 0x64, 0x1a, 0x71, 0xb6, 0x3b, 0xe8, 0xd3, 0x16, 0x0c, 0xae, 0xb9, 0x9e, 0x51, - 0xd6, 0xf6, 0x18, 0x3e, 0xce, 0x15, 0xc6, 0x40, 0xef, 0x38, 0xf8, 0xff, 0x18, 0x4b, 0xce, 0xbd, - 0x34, 0xd5, 0xc0, 0x51, 0x35, 0xd5, 0xe0, 0x03, 0xd2, 0x54, 0x9f, 0xb5, 0xa0, 0xae, 0x46, 0x5a, - 0xa4, 0x3b, 0x7f, 0xf8, 0x18, 0x3f, 0x39, 0xf7, 0x9c, 0xa8, 0xbf, 0x58, 0x33, 0x47, 0x5f, 0xb2, - 0x60, 0xc8, 0x79, 0xa3, 0x13, 0x91, 0x26, 0xd9, 0x0c, 0xc2, 0x58, 0xdc, 0x11, 0xf8, 0x6a, 0xf1, - 0x9d, 0x99, 0xa4, 0x4c, 0x66, 0xc8, 0xe6, 0x62, 0x18, 0x8b, 0xb4, 0x24, 0xdd, 0x80, 0xcd, 0x2e, - 0xd8, 0x3b, 0x25, 0x18, 0xdb, 0x87, 0x02, 0x7a, 0x11, 0x86, 0x83, 0xa8, 0xe5, 0xf8, 0xee, 0x1b, - 0x66, 0xad, 0x0b, 0x65, 0x65, 0x2d, 0x1a, 0x30, 0x9c, 0xc2, 0x34, 0x13, 0xb2, 0x4b, 0xfb, 0x24, - 0x64, 0x5f, 0x84, 0x4a, 0x44, 0xc2, 0x20, 0xbb, 0x59, 0x60, 0x29, 0x01, 0x0c, 0x82, 0x1e, 0x87, - 0xb2, 0x13, 0xba, 0x22, 0x10, 0x4d, 0xed, 0x81, 0x26, 0x97, 0xe6, 0x30, 0x6d, 0x4f, 0xd5, 0x87, - 0xa8, 0xde, 0x97, 0xfa, 0x10, 0xc6, 0x95, 0xfe, 0x03, 0x3d, 0xaf, 0xf4, 0x7f, 0xab, 0x0c, 0x8f, - 0xef, 0x39, 0x5f, 0x74, 0x1c, 0x9e, 0xb5, 0x47, 0x1c, 0x9e, 0x1c, 0x9e, 0xd2, 0x7e, 0xc3, 0x53, - 0xee, 0x31, 0x3c, 0x9f, 0xa6, 0xcb, 0x40, 0xd6, 0x08, 0x29, 0xe6, 0x96, 0xb7, 0x5e, 0x25, 0x47, - 0xc4, 0x0a, 0x90, 0x50, 0xac, 0xf9, 0xd2, 0x3d, 0x40, 0x2a, 0x19, 0xb9, 0x5a, 0x84, 0x1a, 0xe8, - 0x59, 0x33, 0x84, 0xcf, 0xfd, 0x5e, 0x19, 0xce, 0xf6, 0xcf, 0x95, 0xe0, 0xc9, 0x3e, 0xa4, 0xb7, - 0x39, 0x8b, 0xad, 0x3e, 0x67, 0xf1, 0xf7, 0xf6, 0x67, 0xb2, 0xff, 0xaa, 0x05, 0x17, 0x7a, 0x2b, - 0x0f, 0xf4, 0x1c, 0x0c, 0xad, 0x46, 0x8e, 0xdf, 0x58, 0x67, 0x37, 0x57, 0xca, 0x41, 0x61, 0x63, - 0xad, 0x9b, 0xb1, 0x89, 0x43, 0xb7, 0xb7, 0x3c, 0x26, 0xc1, 0xc0, 0x90, 0xc9, 0xa3, 0x74, 0x7b, - 0xbb, 0x92, 0x05, 0xe2, 0x6e, 0x7c, 0xfb, 0x4f, 0x4b, 0xf9, 0xdd, 0xe2, 0x46, 0xc6, 0x41, 0xbe, - 0x93, 0xf8, 0x0a, 0xa5, 0x3e, 0x64, 0x49, 0xf9, 0x7e, 0xcb, 0x92, 0x4a, 0x2f, 0x59, 0x82, 0x66, - 0xe0, 0x94, 0x71, 0x25, 0x0a, 0x4f, 0x08, 0xe6, 0x01, 0xb7, 0xaa, 0x4a, 0xc6, 0x52, 0x06, 0x8e, - 0xbb, 0x9e, 0x40, 0xcf, 0x40, 0xcd, 0xf5, 0x63, 0xd2, 0xe8, 0x44, 0x3c, 0xd0, 0xdb, 0x48, 0xc2, - 0x9a, 0x13, 0xed, 0x58, 0x61, 0xd8, 0xbf, 0x54, 0x82, 0xf3, 0x3d, 0xed, 0xac, 0xfb, 0x24, 0xbb, - 0xcc, 0xcf, 0x51, 0xb9, 0x3f, 0x9f, 0xc3, 0x1c, 0xa4, 0xea, 0xbe, 0x83, 0xf4, 0xfb, 0xbd, 0x27, - 0x26, 0xb5, 0xb9, 0xbf, 0x6f, 0x47, 0xe9, 0x25, 0x38, 0xe1, 0x84, 0x21, 0xc7, 0x63, 0xf1, 0x9a, - 0x99, 0x2a, 0x39, 0x93, 0x26, 0x10, 0xa7, 0x71, 0xfb, 0xd2, 0x9e, 0x7f, 0x68, 0x41, 0x1d, 0x93, - 0x35, 0x2e, 0x1d, 0xd0, 0x1d, 0x31, 0x44, 0x56, 0x11, 0xf5, 0x34, 0xe9, 0xc0, 0xc6, 0x2e, 0xab, - 0x33, 0x99, 0x37, 0xd8, 0xdd, 0x57, 0xe7, 0x94, 0x0e, 0x74, 0x75, 0x8e, 0xba, 0x3c, 0xa5, 0xdc, - 0xfb, 0xf2, 0x14, 0xfb, 0x1b, 0x83, 0xf4, 0xf5, 0xc2, 0x60, 0x3a, 0x22, 0xcd, 0x98, 0x7e, 0xdf, - 0x4e, 0xe4, 0x89, 0x49, 0xa2, 0xbe, 0xef, 0x4d, 0x3c, 0x8f, 0x69, 0x7b, 0xea, 0x28, 0xa6, 0x74, - 0xa0, 0x1a, 0x21, 0xe5, 0x7d, 0x6b, 0x84, 0xbc, 0x04, 0x27, 0xe2, 0x78, 0x7d, 0x29, 0x72, 0x37, - 0x9d, 0x84, 0x5c, 0x27, 0xdb, 0xc2, 0xca, 0xd2, 0x79, 0xfd, 0xcb, 0x57, 0x35, 0x10, 0xa7, 0x71, - 0xd1, 0x2c, 0x9c, 0xd6, 0x95, 0x3a, 0x48, 0x94, 0xb0, 0xe8, 0x7e, 0x3e, 0x13, 0x54, 0x12, 0xaf, - 0xae, 0xed, 0x21, 0x10, 0x70, 0xf7, 0x33, 0x54, 0xbe, 0xa5, 0x1a, 0x69, 0x47, 0x06, 0xd2, 0xf2, - 0x2d, 0x45, 0x87, 0xf6, 0xa5, 0xeb, 0x09, 0xb4, 0x00, 0x67, 0xf8, 0xc4, 0x98, 0x0c, 0x43, 0xe3, - 0x8d, 0x06, 0xd3, 0x75, 0x0c, 0x67, 0xbb, 0x51, 0x70, 0xde, 0x73, 0xe8, 0x05, 0x18, 0x52, 0xcd, - 0x73, 0x33, 0xe2, 0x14, 0x41, 0x79, 0x31, 0x14, 0x99, 0xb9, 0x26, 0x36, 0xf1, 0xd0, 0x87, 0xe0, - 0x51, 0xfd, 0x97, 0xa7, 0x80, 0xf1, 0xa3, 0xb5, 0x19, 0x51, 0x04, 0x49, 0x5d, 0xd5, 0x31, 0x9b, - 0x8b, 0xd6, 0xc4, 0xbd, 0x9e, 0x47, 0xab, 0x70, 0x41, 0x81, 0x2e, 0xfb, 0x09, 0xcb, 0xe7, 0x88, - 0xc9, 0x94, 0x13, 0x93, 0x9b, 0x91, 0xc7, 0xca, 0x26, 0xd5, 0xf5, 0x2d, 0x8a, 0xb3, 0x6e, 0x72, - 0x35, 0x0f, 0x13, 0xcf, 0xe3, 0x3d, 0xa8, 0xa0, 0x09, 0xa8, 0x13, 0xdf, 0x59, 0xf5, 0xc8, 0xe2, - 0xf4, 0x1c, 0x2b, 0xa6, 0x64, 0x9c, 0xe4, 0x5d, 0x96, 0x00, 0xac, 0x71, 0x54, 0x84, 0xe9, 0x70, - 0xcf, 0x1b, 0x3d, 0x97, 0xe0, 0x6c, 0xab, 0x11, 0x52, 0xdb, 0xc3, 0x6d, 0x90, 0xc9, 0x06, 0x0b, - 0xa8, 0xa3, 0x1f, 0x86, 0x17, 0x98, 0x54, 0xe1, 0xd3, 0xb3, 0xd3, 0x4b, 0x5d, 0x38, 0x38, 0xf7, - 0x49, 0x16, 0x78, 0x19, 0x05, 0x5b, 0xdb, 0xa3, 0x67, 0x32, 0x81, 0x97, 0xb4, 0x11, 0x73, 0x18, - 0xba, 0x06, 0x88, 0xc5, 0xe2, 0x5f, 0x4d, 0x92, 0x50, 0x19, 0x3b, 0xa3, 0x67, 0xd9, 0x2b, 0xa9, - 0x30, 0xb2, 0x2b, 0x5d, 0x18, 0x38, 0xe7, 0x29, 0xfb, 0x3f, 0x5a, 0x70, 0x42, 0xad, 0xd7, 0xfb, - 0x90, 0x8d, 0xe2, 0xa5, 0xb3, 0x51, 0x66, 0x8f, 0x2e, 0xf1, 0x58, 0xcf, 0x7b, 0x84, 0x34, 0xff, - 0xf4, 0x10, 0x80, 0x96, 0x8a, 0x4a, 0x21, 0x59, 0x3d, 0x15, 0xd2, 0x43, 0x2b, 0x91, 0xf2, 0x2a, - 0xa7, 0x54, 0x1f, 0x6c, 0xe5, 0x94, 0x65, 0x38, 0x27, 0xcd, 0x05, 0x7e, 0x56, 0x74, 0x35, 0x88, - 0x95, 0x80, 0xab, 0x4d, 0x3d, 0x2e, 0x08, 0x9d, 0x9b, 0xcb, 0x43, 0xc2, 0xf9, 0xcf, 0xa6, 0xac, - 0x94, 0xc1, 0xfd, 0xac, 0x14, 0xbd, 0xa6, 0xe7, 0xd7, 0xe4, 0x9d, 0x1c, 0x99, 0x35, 0x3d, 0x7f, - 0x65, 0x19, 0x6b, 0x9c, 0x7c, 0xc1, 0x5e, 0x2f, 0x48, 0xb0, 0xc3, 0x81, 0x05, 0xbb, 0x14, 0x31, - 0x43, 0x3d, 0x45, 0x8c, 0xf4, 0x49, 0x0f, 0xf7, 0xf4, 0x49, 0xbf, 0x1f, 0x46, 0x5c, 0x7f, 0x9d, - 0x44, 0x6e, 0x42, 0x9a, 0x6c, 0x2d, 0x30, 0xf1, 0x53, 0xd3, 0x6a, 0x7d, 0x2e, 0x05, 0xc5, 0x19, - 0xec, 0xb4, 0x5c, 0x1c, 0xe9, 0x43, 0x2e, 0xf6, 0xd0, 0x46, 0x27, 0x8b, 0xd1, 0x46, 0xa7, 0x8e, - 0xae, 0x8d, 0x4e, 0x1f, 0xab, 0x36, 0x42, 0x85, 0x68, 0xa3, 0xbe, 0x04, 0xbd, 0xb1, 0xfd, 0x3b, - 0xbb, 0xcf, 0xf6, 0xaf, 0x97, 0x2a, 0x3a, 0x77, 0x68, 0x55, 0x94, 0xaf, 0x65, 0x1e, 0x39, 0x94, - 0x96, 0xf9, 0x6c, 0x09, 0xce, 0x69, 0x39, 0x4c, 0x67, 0xbf, 0xbb, 0x46, 0x25, 0x11, 0xbb, 0xd6, - 0x89, 0x9f, 0xdb, 0x18, 0xc9, 0x51, 0x3a, 0xcf, 0x4a, 0x41, 0xb0, 0x81, 0xc5, 0x72, 0x8c, 0x48, - 0xc4, 0xca, 0xe8, 0x66, 0x85, 0xf4, 0xb4, 0x68, 0xc7, 0x0a, 0x83, 0xce, 0x2f, 0xfa, 0x5b, 0xe4, - 0x6d, 0x66, 0x8b, 0xc5, 0x4d, 0x6b, 0x10, 0x36, 0xf1, 0xd0, 0xd3, 0x9c, 0x09, 0x13, 0x10, 0x54, - 0x50, 0x0f, 0x8b, 0x7b, 0x5e, 0xa5, 0x4c, 0x50, 0x50, 0xd9, 0x1d, 0x96, 0x4c, 0x56, 0xed, 0xee, - 0x0e, 0x0b, 0x81, 0x52, 0x18, 0xf6, 0xff, 0xb4, 0xe0, 0x7c, 0xee, 0x50, 0xdc, 0x07, 0xe5, 0xbb, - 0x95, 0x56, 0xbe, 0xcb, 0x45, 0x6d, 0x37, 0x8c, 0xb7, 0xe8, 0xa1, 0x88, 0xff, 0xbd, 0x05, 0x23, - 0x1a, 0xff, 0x3e, 0xbc, 0xaa, 0x9b, 0x7e, 0xd5, 0xe2, 0x76, 0x56, 0xf5, 0xae, 0x77, 0xfb, 0xed, - 0x12, 0xa8, 0x02, 0x8e, 0x93, 0x0d, 0x59, 0x1e, 0x77, 0x9f, 0x93, 0xc4, 0x6d, 0x18, 0x60, 0x07, - 0xa1, 0x71, 0x31, 0x41, 0x1e, 0x69, 0xfe, 0xec, 0x50, 0x55, 0x1f, 0x32, 0xb3, 0xbf, 0x31, 0x16, - 0x0c, 0x59, 0x91, 0x67, 0x37, 0xa6, 0xd2, 0xbc, 0x29, 0xd2, 0xb2, 0x74, 0x91, 0x67, 0xd1, 0x8e, - 0x15, 0x06, 0x55, 0x0f, 0x6e, 0x23, 0xf0, 0xa7, 0x3d, 0x27, 0x96, 0x77, 0x19, 0x2a, 0xf5, 0x30, - 0x27, 0x01, 0x58, 0xe3, 0xb0, 0x33, 0x52, 0x37, 0x0e, 0x3d, 0x67, 0xdb, 0xd8, 0x3f, 0x1b, 0xf5, - 0x09, 0x14, 0x08, 0x9b, 0x78, 0x76, 0x1b, 0x46, 0xd3, 0x2f, 0x31, 0x43, 0xd6, 0x58, 0x80, 0x62, - 0x5f, 0xc3, 0x39, 0x01, 0x75, 0x87, 0x3d, 0x35, 0xdf, 0x71, 0xb2, 0x57, 0x90, 0x4f, 0x4a, 0x00, - 0xd6, 0x38, 0xf6, 0xaf, 0x58, 0x70, 0x26, 0x67, 0xd0, 0x0a, 0x4c, 0x7b, 0x4b, 0xb4, 0xb4, 0xc9, - 0x53, 0xec, 0x3f, 0x04, 0x83, 0x4d, 0xb2, 0xe6, 0xc8, 0x10, 0x38, 0x43, 0xb6, 0xcf, 0xf0, 0x66, - 0x2c, 0xe1, 0xf6, 0x7f, 0xb7, 0xe0, 0x64, 0xba, 0xaf, 0x31, 0x4b, 0x25, 0xe1, 0xc3, 0xe4, 0xc6, - 0x8d, 0x60, 0x93, 0x44, 0xdb, 0xf4, 0xcd, 0xad, 0x4c, 0x2a, 0x49, 0x17, 0x06, 0xce, 0x79, 0x8a, - 0x95, 0x6f, 0x6d, 0xaa, 0xd1, 0x96, 0x33, 0xf2, 0x56, 0x91, 0x33, 0x52, 0x7f, 0x4c, 0xf3, 0xb8, - 0x5c, 0xb1, 0xc4, 0x26, 0x7f, 0xfb, 0x3b, 0x15, 0x50, 0x79, 0xb1, 0x2c, 0xfe, 0xa8, 0xa0, 0xe8, - 0xad, 0x83, 0x66, 0x10, 0xa9, 0xc9, 0x50, 0xd9, 0x2b, 0x20, 0x80, 0x7b, 0x49, 0x4c, 0xd7, 0xa5, - 0x7a, 0xc3, 0x15, 0x0d, 0xc2, 0x26, 0x1e, 0xed, 0x89, 0xe7, 0x6e, 0x12, 0xfe, 0xd0, 0x40, 0xba, - 0x27, 0xf3, 0x12, 0x80, 0x35, 0x0e, 0xed, 0x49, 0xd3, 0x5d, 0x5b, 0x13, 0x5b, 0x7e, 0xd5, 0x13, - 0x3a, 0x3a, 0x98, 0x41, 0x78, 0x45, 0xee, 0x60, 0x43, 0x58, 0xc1, 0x46, 0x45, 0xee, 0x60, 0x03, - 0x33, 0x08, 0xb5, 0xdb, 0xfc, 0x20, 0x6a, 0xb3, 0x2b, 0xe2, 0x9b, 0x8a, 0x8b, 0xb0, 0x7e, 0x95, - 0xdd, 0x76, 0xa3, 0x1b, 0x05, 0xe7, 0x3d, 0x47, 0x67, 0x60, 0x18, 0x91, 0xa6, 0xdb, 0x48, 0x4c, - 0x6a, 0x90, 0x9e, 0x81, 0x4b, 0x5d, 0x18, 0x38, 0xe7, 0x29, 0x34, 0x09, 0x27, 0x65, 0x5e, 0xb3, - 0xac, 0x5a, 0x33, 0x94, 0xae, 0x92, 0x81, 0xd3, 0x60, 0x9c, 0xc5, 0xa7, 0x52, 0xad, 0x2d, 0x0a, - 0x56, 0x31, 0x63, 0xd9, 0x90, 0x6a, 0xb2, 0x90, 0x15, 0x56, 0x18, 0xf6, 0xa7, 0xca, 0x54, 0x0b, - 0xf7, 0x28, 0xd4, 0x76, 0xdf, 0xa2, 0x05, 0xd3, 0x33, 0xb2, 0xd2, 0xc7, 0x8c, 0x7c, 0x1e, 0x86, - 0xef, 0xc4, 0x81, 0xaf, 0x22, 0xf1, 0xaa, 0x3d, 0x23, 0xf1, 0x0c, 0xac, 0xfc, 0x48, 0xbc, 0x81, - 0xa2, 0x22, 0xf1, 0x06, 0x0f, 0x19, 0x89, 0xf7, 0xad, 0x2a, 0xa8, 0xab, 0x41, 0x6e, 0x90, 0xe4, - 0x6e, 0x10, 0x6d, 0xb8, 0x7e, 0x8b, 0xe5, 0x83, 0x7f, 0xcd, 0x82, 0x61, 0xbe, 0x5e, 0xe6, 0xcd, - 0x4c, 0xaa, 0xb5, 0x82, 0xee, 0x9c, 0x48, 0x31, 0x1b, 0x5f, 0x31, 0x18, 0x65, 0xae, 0xd2, 0x34, - 0x41, 0x38, 0xd5, 0x23, 0xf4, 0x71, 0x00, 0xe9, 0x1f, 0x5d, 0x93, 0x22, 0x73, 0xae, 0x98, 0xfe, - 0x61, 0xb2, 0xa6, 0x6d, 0xe0, 0x15, 0xc5, 0x04, 0x1b, 0x0c, 0xd1, 0x67, 0x75, 0x96, 0x19, 0x0f, - 0xd9, 0xff, 0xe8, 0xb1, 0x8c, 0x4d, 0x3f, 0x39, 0x66, 0x18, 0x06, 0x5d, 0xbf, 0x45, 0xe7, 0x89, - 0x88, 0x58, 0x7a, 0x57, 0x5e, 0x2d, 0x85, 0xf9, 0xc0, 0x69, 0x4e, 0x39, 0x9e, 0xe3, 0x37, 0x48, - 0x34, 0xc7, 0xd1, 0xcd, 0x0b, 0xa4, 0x59, 0x03, 0x96, 0x84, 0xba, 0x2e, 0x55, 0xa9, 0xf6, 0x73, - 0xa9, 0xca, 0x85, 0x0f, 0xc0, 0xe9, 0xae, 0x8f, 0x79, 0xa0, 0x94, 0xb2, 0xc3, 0x67, 0xa3, 0xd9, - 0xff, 0x62, 0x40, 0x2b, 0xad, 0x1b, 0x41, 0x93, 0x5f, 0xed, 0x11, 0xe9, 0x2f, 0x2a, 0x6c, 0xdc, - 0x02, 0xa7, 0x88, 0x71, 0x09, 0xb5, 0x6a, 0xc4, 0x26, 0x4b, 0x3a, 0x47, 0x43, 0x27, 0x22, 0xfe, - 0x71, 0xcf, 0xd1, 0x25, 0xc5, 0x04, 0x1b, 0x0c, 0xd1, 0x7a, 0x2a, 0xa7, 0xe4, 0xca, 0xd1, 0x73, - 0x4a, 0x58, 0x95, 0xa9, 0xbc, 0x6a, 0xfc, 0x5f, 0xb2, 0x60, 0xc4, 0x4f, 0xcd, 0xdc, 0x62, 0xc2, - 0x48, 0xf3, 0x57, 0x05, 0xbf, 0x59, 0x2a, 0xdd, 0x86, 0x33, 0xfc, 0xf3, 0x54, 0x5a, 0xf5, 0x80, - 0x2a, 0x4d, 0xdf, 0x11, 0x34, 0xd0, 0xeb, 0x8e, 0x20, 0xe4, 0xab, 0x4b, 0xd2, 0x06, 0x0b, 0xbf, - 0x24, 0x0d, 0x72, 0x2e, 0x48, 0xbb, 0x0d, 0xf5, 0x46, 0x44, 0x9c, 0xe4, 0x90, 0xf7, 0x65, 0xb1, - 0x03, 0xfa, 0x69, 0x49, 0x00, 0x6b, 0x5a, 0xf6, 0xff, 0xae, 0xc0, 0x29, 0x39, 0x22, 0x32, 0x04, - 0x9d, 0xea, 0x47, 0xce, 0x57, 0x1b, 0xb7, 0x4a, 0x3f, 0x5e, 0x95, 0x00, 0xac, 0x71, 0xa8, 0x3d, - 0xd6, 0x89, 0xc9, 0x62, 0x48, 0xfc, 0x79, 0x77, 0x35, 0x16, 0xe7, 0x9c, 0x6a, 0xa1, 0xdc, 0xd4, - 0x20, 0x6c, 0xe2, 0x51, 0x63, 0x9c, 0xdb, 0xc5, 0x71, 0x36, 0x7d, 0x45, 0xd8, 0xdb, 0x58, 0xc2, - 0xd1, 0xcf, 0xe7, 0x56, 0x8e, 0x2d, 0x26, 0x71, 0xab, 0x2b, 0xf2, 0xfe, 0x80, 0x57, 0x2c, 0xfe, - 0x6d, 0x0b, 0xce, 0xf1, 0x56, 0x39, 0x92, 0x37, 0xc3, 0xa6, 0x93, 0x90, 0xb8, 0x98, 0x4a, 0xee, - 0x39, 0xfd, 0xd3, 0x4e, 0xde, 0x3c, 0xb6, 0x38, 0xbf, 0x37, 0xe8, 0x4d, 0x0b, 0x4e, 0x6e, 0xa4, - 0x6a, 0x7e, 0x48, 0xd5, 0x71, 0xd4, 0x74, 0xfc, 0x14, 0x51, 0xbd, 0xd4, 0xd2, 0xed, 0x31, 0xce, - 0x72, 0xb7, 0xff, 0xd4, 0x02, 0x53, 0x8c, 0xde, 0xff, 0x52, 0x21, 0x07, 0x37, 0x05, 0xa5, 0x75, - 0x59, 0xed, 0x69, 0x5d, 0x3e, 0x0e, 0xe5, 0x8e, 0xdb, 0x14, 0xfb, 0x0b, 0x7d, 0xfa, 0x3a, 0x37, - 0x83, 0x69, 0xbb, 0xfd, 0x4f, 0xab, 0xda, 0x6f, 0x21, 0xf2, 0xa2, 0xbe, 0x2f, 0x5e, 0x7b, 0x4d, - 0x15, 0x1b, 0xe3, 0x6f, 0x7e, 0xa3, 0xab, 0xd8, 0xd8, 0x8f, 0x1c, 0x3c, 0xed, 0x8d, 0x0f, 0x50, - 0xaf, 0x5a, 0x63, 0x83, 0xfb, 0xe4, 0xbc, 0xdd, 0x81, 0x1a, 0xdd, 0x82, 0x31, 0x07, 0x64, 0x2d, - 0xd5, 0xa9, 0xda, 0x55, 0xd1, 0x7e, 0x6f, 0x67, 0xec, 0x7d, 0x07, 0xef, 0x96, 0x7c, 0x1a, 0x2b, - 0xfa, 0x28, 0x86, 0x3a, 0xfd, 0xcd, 0xd2, 0xf3, 0xc4, 0xe6, 0xee, 0xa6, 0x92, 0x99, 0x12, 0x50, - 0x48, 0xee, 0x9f, 0xe6, 0x83, 0x7c, 0xa8, 0xb3, 0xdb, 0x68, 0x19, 0x53, 0xbe, 0x07, 0x5c, 0x52, - 0x49, 0x72, 0x12, 0x70, 0x6f, 0x67, 0xec, 0xa5, 0x83, 0x33, 0x55, 0x8f, 0x63, 0xcd, 0xc2, 0xfe, - 0x72, 0x45, 0xcf, 0x5d, 0x51, 0x63, 0xee, 0xfb, 0x62, 0xee, 0xbe, 0x98, 0x99, 0xbb, 0x17, 0xbb, - 0xe6, 0xee, 0x88, 0xbe, 0x35, 0x35, 0x35, 0x1b, 0xef, 0xb7, 0x21, 0xb0, 0xbf, 0xbf, 0x81, 0x59, - 0x40, 0xaf, 0x77, 0xdc, 0x88, 0xc4, 0x4b, 0x51, 0xc7, 0x77, 0xfd, 0x16, 0x9b, 0x8e, 0x35, 0xd3, - 0x02, 0x4a, 0x81, 0x71, 0x16, 0x9f, 0x6e, 0xea, 0xe9, 0x37, 0xbf, 0xed, 0x6c, 0xf2, 0x59, 0x65, - 0x94, 0xdd, 0x5a, 0x16, 0xed, 0x58, 0x61, 0xd8, 0xdf, 0x60, 0x67, 0xd9, 0x46, 0x5e, 0x30, 0x9d, - 0x13, 0x1e, 0xbb, 0xfe, 0x97, 0xd7, 0xec, 0x52, 0x73, 0x82, 0xdf, 0xf9, 0xcb, 0x61, 0xe8, 0x2e, - 0x0c, 0xae, 0xf2, 0xfb, 0xef, 0x8a, 0xa9, 0x4f, 0x2e, 0x2e, 0xd3, 0x63, 0xb7, 0x9c, 0xc8, 0x9b, - 0xf5, 0xee, 0xe9, 0x9f, 0x58, 0x72, 0xb3, 0xbf, 0x59, 0x81, 0x93, 0x99, 0x0b, 0x62, 0x53, 0xd5, - 0x52, 0x4b, 0xfb, 0x56, 0x4b, 0xfd, 0x08, 0x40, 0x93, 0x84, 0x5e, 0xb0, 0xcd, 0xcc, 0xb1, 0xca, - 0x81, 0xcd, 0x31, 0x65, 0xc1, 0xcf, 0x28, 0x2a, 0xd8, 0xa0, 0x28, 0x0a, 0x95, 0xf1, 0xe2, 0xab, - 0x99, 0x42, 0x65, 0xc6, 0x2d, 0x06, 0x03, 0xf7, 0xf7, 0x16, 0x03, 0x17, 0x4e, 0xf2, 0x2e, 0xaa, - 0xec, 0xdb, 0x43, 0x24, 0xd9, 0xb2, 0xfc, 0x85, 0x99, 0x34, 0x19, 0x9c, 0xa5, 0xfb, 0x20, 0xef, - 0x7f, 0x46, 0xef, 0x86, 0xba, 0xfc, 0xce, 0xf1, 0x68, 0x5d, 0x57, 0x30, 0x90, 0xd3, 0x80, 0xdd, - 0xcb, 0x2c, 0x7e, 0xda, 0x5f, 0x2c, 0x51, 0xeb, 0x99, 0xff, 0x53, 0x95, 0x68, 0x9e, 0x82, 0x01, - 0xa7, 0x93, 0xac, 0x07, 0x5d, 0x77, 0xe8, 0x4d, 0xb2, 0x56, 0x2c, 0xa0, 0x68, 0x1e, 0x2a, 0x4d, - 0x5d, 0x5d, 0xe4, 0x20, 0xa3, 0xa8, 0x1d, 0x91, 0x4e, 0x42, 0x30, 0xa3, 0x82, 0x1e, 0x83, 0x4a, - 0xe2, 0xb4, 0x64, 0xa2, 0x13, 0x4b, 0x6e, 0x5d, 0x71, 0x5a, 0x31, 0x66, 0xad, 0xa6, 0xd2, 0xac, - 0xec, 0xa3, 0x34, 0x5f, 0x82, 0x13, 0xb1, 0xdb, 0xf2, 0x9d, 0xa4, 0x13, 0x11, 0xe3, 0x70, 0x4d, - 0xc7, 0x4b, 0x98, 0x40, 0x9c, 0xc6, 0xb5, 0x7f, 0x63, 0x18, 0xce, 0x2e, 0x4f, 0x2f, 0xc8, 0x9a, - 0xd9, 0xc7, 0x96, 0xab, 0x94, 0xc7, 0xe3, 0xfe, 0xe5, 0x2a, 0xf5, 0xe0, 0xee, 0x19, 0xb9, 0x4a, - 0x9e, 0x91, 0xab, 0x94, 0x4e, 0x1c, 0x29, 0x17, 0x91, 0x38, 0x92, 0xd7, 0x83, 0x7e, 0x12, 0x47, - 0x8e, 0x2d, 0x79, 0x69, 0xcf, 0x0e, 0x1d, 0x28, 0x79, 0x49, 0x65, 0x76, 0x15, 0x12, 0xd2, 0xdf, - 0xe3, 0x53, 0xe5, 0x66, 0x76, 0xa9, 0xac, 0x1a, 0x9e, 0xae, 0x22, 0x04, 0xec, 0xab, 0xc5, 0x77, - 0xa0, 0x8f, 0xac, 0x1a, 0x91, 0x31, 0x63, 0x66, 0x72, 0x0d, 0x16, 0x91, 0xc9, 0x95, 0xd7, 0x9d, - 0x7d, 0x33, 0xb9, 0x5e, 0x82, 0x13, 0x0d, 0x2f, 0xf0, 0xc9, 0x52, 0x14, 0x24, 0x41, 0x23, 0xf0, - 0x84, 0x31, 0xad, 0x44, 0xc2, 0xb4, 0x09, 0xc4, 0x69, 0xdc, 0x5e, 0x69, 0x60, 0xf5, 0xa3, 0xa6, - 0x81, 0xc1, 0x03, 0x4a, 0x03, 0xfb, 0x19, 0x9d, 0xb0, 0x3c, 0xc4, 0xbe, 0xc8, 0x47, 0x8a, 0xff, - 0x22, 0xfd, 0x64, 0x2d, 0xa3, 0xb7, 0xf8, 0x25, 0x76, 0xd4, 0x1c, 0x9d, 0x0e, 0xda, 0xd4, 0xdc, - 0x1a, 0x66, 0x43, 0xf2, 0xda, 0x31, 0x4c, 0xd8, 0xdb, 0xcb, 0x9a, 0x8d, 0xba, 0xd8, 0x4e, 0x37, - 0xe1, 0x74, 0x47, 0x8e, 0x92, 0x50, 0xfd, 0xd5, 0x12, 0xfc, 0xc0, 0xbe, 0x5d, 0x40, 0x77, 0x01, - 0x12, 0xa7, 0x25, 0x26, 0xaa, 0x38, 0xa6, 0x38, 0x62, 0x50, 0xe3, 0x8a, 0xa4, 0xc7, 0x2b, 0x81, - 0xa8, 0xbf, 0xec, 0x00, 0x40, 0xfe, 0x66, 0xb1, 0x8c, 0x81, 0xd7, 0x55, 0x30, 0x11, 0x07, 0x1e, - 0xc1, 0x0c, 0x42, 0xd5, 0x7f, 0x44, 0x5a, 0xfa, 0xd6, 0x65, 0xf5, 0xf9, 0x30, 0x6b, 0xc5, 0x02, - 0x8a, 0x5e, 0x80, 0x21, 0xc7, 0xf3, 0x78, 0x56, 0x0a, 0x89, 0xc5, 0x2d, 0x36, 0xba, 0x72, 0x9b, - 0x06, 0x61, 0x13, 0xcf, 0xfe, 0x93, 0x12, 0x8c, 0xed, 0x23, 0x53, 0xba, 0xf2, 0xec, 0xaa, 0x7d, - 0xe7, 0xd9, 0x89, 0xcc, 0x80, 0x81, 0x1e, 0x99, 0x01, 0x2f, 0xc0, 0x50, 0x42, 0x9c, 0xb6, 0x08, - 0x83, 0x12, 0xfb, 0x6f, 0x7d, 0xee, 0xaa, 0x41, 0xd8, 0xc4, 0xa3, 0x52, 0x6c, 0xc4, 0x69, 0x34, - 0x48, 0x1c, 0xcb, 0xd0, 0x7f, 0xe1, 0xc3, 0x2c, 0x2c, 0xaf, 0x80, 0xb9, 0x86, 0x27, 0x53, 0x2c, - 0x70, 0x86, 0x65, 0x76, 0xc0, 0xeb, 0x7d, 0x0e, 0xf8, 0xd7, 0x4b, 0xf0, 0xf8, 0x9e, 0xda, 0xad, - 0xef, 0xac, 0x8c, 0x4e, 0x4c, 0xa2, 0xec, 0xc4, 0xb9, 0x19, 0x93, 0x08, 0x33, 0x08, 0x1f, 0xa5, - 0x30, 0x34, 0x6e, 0xb5, 0x2e, 0x3a, 0x65, 0x88, 0x8f, 0x52, 0x8a, 0x05, 0xce, 0xb0, 0x3c, 0xec, - 0xb4, 0xfc, 0xfb, 0x25, 0x78, 0xb2, 0x0f, 0x1b, 0xa0, 0xc0, 0xd4, 0xaa, 0x74, 0x82, 0x5b, 0xf9, - 0x01, 0xe5, 0x21, 0x1e, 0x72, 0xb8, 0xbe, 0x51, 0x82, 0x0b, 0xbd, 0x55, 0x31, 0xfa, 0x51, 0xba, - 0x87, 0x97, 0xb1, 0x4f, 0x66, 0x6e, 0xdc, 0x19, 0xbe, 0x7f, 0x4f, 0x81, 0x70, 0x16, 0x17, 0x8d, - 0x03, 0x84, 0x4e, 0xb2, 0x1e, 0x5f, 0xde, 0x72, 0xe3, 0x44, 0xd4, 0x7e, 0x19, 0xe1, 0x27, 0x46, - 0xb2, 0x15, 0x1b, 0x18, 0x94, 0x1d, 0xfb, 0x37, 0x13, 0xdc, 0x08, 0x12, 0xfe, 0x10, 0xdf, 0x46, - 0x9c, 0x91, 0x37, 0x65, 0x18, 0x20, 0x9c, 0xc5, 0xa5, 0xec, 0xd8, 0x99, 0x24, 0xef, 0x28, 0xdf, - 0x5f, 0x30, 0x76, 0xf3, 0xaa, 0x15, 0x1b, 0x18, 0xd9, 0xac, 0xbf, 0xea, 0xfe, 0x59, 0x7f, 0xf6, - 0x3f, 0x29, 0xc1, 0xf9, 0x9e, 0xa6, 0x5c, 0x7f, 0x0b, 0xf0, 0xe1, 0xcb, 0xd4, 0x3b, 0xdc, 0xdc, - 0x39, 0x60, 0x46, 0xd9, 0x1f, 0xf6, 0x98, 0x69, 0x22, 0xa3, 0xec, 0xf0, 0x29, 0xd9, 0x0f, 0xdf, - 0x78, 0x76, 0x25, 0x91, 0x55, 0x0e, 0x90, 0x44, 0x96, 0xf9, 0x18, 0xd5, 0x3e, 0x17, 0xf2, 0x9f, - 0x95, 0x7b, 0x0e, 0x2f, 0xdd, 0xfa, 0xf5, 0xe5, 0x1d, 0x9d, 0x81, 0x53, 0xae, 0xcf, 0x6e, 0x4d, - 0x5a, 0xee, 0xac, 0x8a, 0x72, 0x20, 0xa5, 0xf4, 0x9d, 0xe5, 0x73, 0x19, 0x38, 0xee, 0x7a, 0xe2, - 0x21, 0x4c, 0xea, 0x3b, 0xdc, 0x90, 0x1e, 0x2c, 0xad, 0x14, 0x2d, 0xc2, 0x39, 0x39, 0x14, 0xeb, - 0x4e, 0x44, 0x9a, 0x42, 0x8d, 0xc4, 0x22, 0x8d, 0xe1, 0x3c, 0x4f, 0x85, 0xc8, 0x41, 0xc0, 0xf9, - 0xcf, 0xb1, 0x8b, 0x6a, 0x82, 0xd0, 0x6d, 0x88, 0x4d, 0x8e, 0xbe, 0xa8, 0x86, 0x36, 0x62, 0x0e, - 0xb3, 0x3f, 0x02, 0x75, 0xf5, 0xfe, 0x3c, 0x98, 0x5a, 0x4d, 0xba, 0xae, 0x60, 0x6a, 0x35, 0xe3, - 0x0c, 0x2c, 0xfa, 0xb5, 0xa8, 0x49, 0x9c, 0x59, 0x3d, 0xd7, 0xc9, 0x36, 0xb3, 0x8f, 0xed, 0xf7, - 0xc0, 0xb0, 0xf2, 0xb3, 0xf4, 0x7b, 0x7d, 0x8f, 0xfd, 0xe5, 0x01, 0x38, 0x91, 0x2a, 0xc9, 0x97, - 0x72, 0x6b, 0x5a, 0xfb, 0xba, 0x35, 0x59, 0x70, 0x7c, 0xc7, 0x97, 0x77, 0x7b, 0x19, 0xc1, 0xf1, - 0x1d, 0x9f, 0x60, 0x0e, 0xa3, 0xe6, 0x6d, 0x33, 0xda, 0xc6, 0x1d, 0x5f, 0x04, 0xb1, 0x2a, 0xf3, - 0x76, 0x86, 0xb5, 0x62, 0x01, 0x45, 0x9f, 0xb4, 0x60, 0x38, 0x66, 0x3e, 0x73, 0xee, 0x14, 0x16, - 0x93, 0xee, 0xda, 0xd1, 0x2b, 0x0e, 0xaa, 0xf2, 0x93, 0x2c, 0x2e, 0xc5, 0x6c, 0xc1, 0x29, 0x8e, - 0xe8, 0x33, 0x16, 0xd4, 0xd5, 0x15, 0x24, 0xe2, 0x02, 0xbe, 0xe5, 0x62, 0x2b, 0x1e, 0x72, 0x6f, - 0xa2, 0x3a, 0x7e, 0x50, 0xa5, 0xe7, 0xb0, 0x66, 0x8c, 0x62, 0xe5, 0xb1, 0x1d, 0x3c, 0x1e, 0x8f, - 0x2d, 0xe4, 0x78, 0x6b, 0xdf, 0x0d, 0xf5, 0xb6, 0xe3, 0xbb, 0x6b, 0x24, 0x4e, 0xb8, 0x13, 0x55, - 0x16, 0x62, 0x95, 0x8d, 0x58, 0xc3, 0xa9, 0x42, 0x8e, 0xd9, 0x8b, 0x25, 0x86, 0xd7, 0x93, 0x29, - 0xe4, 0x65, 0xdd, 0x8c, 0x4d, 0x1c, 0xd3, 0x45, 0x0b, 0x0f, 0xd4, 0x45, 0x3b, 0xb4, 0x8f, 0x8b, - 0xf6, 0x1f, 0x5a, 0x70, 0x2e, 0xf7, 0xab, 0x3d, 0xbc, 0xe1, 0x86, 0xf6, 0x57, 0xaa, 0x70, 0x26, - 0xa7, 0xb6, 0x26, 0xda, 0x36, 0xe7, 0xb3, 0x55, 0xc4, 0xc9, 0x7d, 0xfa, 0x20, 0x5a, 0x0e, 0x63, - 0xce, 0x24, 0x3e, 0xd8, 0x01, 0x89, 0x3e, 0xa4, 0x28, 0xdf, 0xdf, 0x43, 0x0a, 0x63, 0x5a, 0x56, - 0x1e, 0xe8, 0xb4, 0xac, 0xee, 0x3d, 0x2d, 0xd1, 0xaf, 0x5a, 0x30, 0xda, 0xee, 0x51, 0xd0, 0x5d, - 0x38, 0x1e, 0x6f, 0x1d, 0x4f, 0xb9, 0xf8, 0xa9, 0xc7, 0x76, 0x77, 0xc6, 0x7a, 0xd6, 0xd1, 0xc7, - 0x3d, 0x7b, 0x65, 0x7f, 0xa7, 0x0c, 0xac, 0xb0, 0x2b, 0xab, 0x9f, 0xb6, 0x8d, 0x3e, 0x61, 0x96, - 0xe8, 0xb5, 0x8a, 0x2a, 0x27, 0xcb, 0x89, 0xab, 0x12, 0xbf, 0x7c, 0x04, 0xf3, 0x2a, 0xfe, 0x66, - 0x85, 0x56, 0xa9, 0x0f, 0xa1, 0xe5, 0xc9, 0x5a, 0xc8, 0xe5, 0xe2, 0x6b, 0x21, 0xd7, 0xb3, 0x75, - 0x90, 0xf7, 0xfe, 0xc4, 0x95, 0x87, 0xf2, 0x13, 0xff, 0x4d, 0x8b, 0x0b, 0x9e, 0xcc, 0x57, 0xd0, - 0x96, 0x81, 0xb5, 0x87, 0x65, 0xf0, 0x0c, 0xd4, 0x62, 0xe2, 0xad, 0x5d, 0x25, 0x8e, 0x27, 0x2c, - 0x08, 0x7d, 0x6a, 0x2c, 0xda, 0xb1, 0xc2, 0x60, 0x97, 0xa5, 0x7a, 0x5e, 0x70, 0xf7, 0x72, 0x3b, - 0x4c, 0xb6, 0x85, 0x2d, 0xa1, 0x2f, 0x4b, 0x55, 0x10, 0x6c, 0x60, 0xd9, 0x7f, 0xab, 0xc4, 0x67, - 0xa0, 0x08, 0x3d, 0x78, 0x31, 0x73, 0xbd, 0x5d, 0xff, 0xa7, 0xf6, 0x1f, 0x03, 0x68, 0xa8, 0x8b, - 0xe1, 0xc5, 0x99, 0xd0, 0xd5, 0x23, 0xdf, 0x5a, 0x2d, 0xe8, 0xe9, 0xd7, 0xd0, 0x6d, 0xd8, 0xe0, - 0x97, 0x92, 0xa5, 0xe5, 0x7d, 0x65, 0x69, 0x4a, 0xac, 0x54, 0xf6, 0xd1, 0x76, 0x7f, 0x62, 0x41, - 0xca, 0x22, 0x42, 0x21, 0x54, 0x69, 0x77, 0xb7, 0x8b, 0xb9, 0xf3, 0xde, 0x24, 0x4d, 0x45, 0xa3, - 0x98, 0xf6, 0xec, 0x27, 0xe6, 0x8c, 0x90, 0x27, 0x22, 0x14, 0xf8, 0xa8, 0xde, 0x28, 0x8e, 0xe1, - 0xd5, 0x20, 0xd8, 0xe0, 0x07, 0x9b, 0x3a, 0xda, 0xc1, 0x7e, 0x11, 0x4e, 0x77, 0x75, 0x8a, 0xdd, - 0x64, 0x15, 0xc8, 0x8b, 0xfe, 0x8d, 0xe9, 0xca, 0xd2, 0x26, 0x31, 0x87, 0xd9, 0xdf, 0xb0, 0xe0, - 0x54, 0x96, 0x3c, 0x7a, 0xcb, 0x82, 0xd3, 0x71, 0x96, 0xde, 0x71, 0x8d, 0x9d, 0x8a, 0x32, 0xec, - 0x02, 0xe1, 0xee, 0x4e, 0xd8, 0xff, 0x47, 0x4c, 0xfe, 0xdb, 0xae, 0xdf, 0x0c, 0xee, 0x2a, 0xc3, - 0xc4, 0xea, 0x69, 0x98, 0xd0, 0xf5, 0xd8, 0x58, 0x27, 0xcd, 0x8e, 0xd7, 0x95, 0xaf, 0xb9, 0x2c, - 0xda, 0xb1, 0xc2, 0x60, 0xe9, 0x69, 0x1d, 0x51, 0x2c, 0x3d, 0x33, 0x29, 0x67, 0x44, 0x3b, 0x56, - 0x18, 0xe8, 0x79, 0x18, 0x36, 0x5e, 0x52, 0xce, 0x4b, 0x66, 0x90, 0x1b, 0x2a, 0x33, 0xc6, 0x29, - 0x2c, 0x34, 0x0e, 0xa0, 0x8c, 0x1c, 0xa9, 0x22, 0x99, 0xa3, 0x48, 0x49, 0xa2, 0x18, 0x1b, 0x18, - 0x2c, 0x19, 0xd4, 0xeb, 0xc4, 0xcc, 0xc7, 0x3f, 0xa0, 0x0b, 0x78, 0x4e, 0x8b, 0x36, 0xac, 0xa0, - 0x54, 0x9a, 0xb4, 0x1d, 0xbf, 0xe3, 0x78, 0x74, 0x84, 0xc4, 0xd6, 0x4f, 0x2d, 0xc3, 0x05, 0x05, - 0xc1, 0x06, 0x16, 0x7d, 0xe3, 0xc4, 0x6d, 0x93, 0x57, 0x02, 0x5f, 0x46, 0x87, 0xe9, 0x63, 0x1f, - 0xd1, 0x8e, 0x15, 0x86, 0xfd, 0x5f, 0x2d, 0x38, 0xa9, 0x53, 0xcb, 0xf9, 0x9d, 0xd5, 0xe6, 0x4e, - 0xd5, 0xda, 0x77, 0xa7, 0x9a, 0xce, 0xb9, 0x2d, 0xf5, 0x95, 0x73, 0x6b, 0xa6, 0xc3, 0x96, 0xf7, - 0x4c, 0x87, 0xfd, 0x41, 0x7d, 0x1f, 0x2a, 0xcf, 0x9b, 0x1d, 0xca, 0xbb, 0x0b, 0x15, 0xd9, 0x30, - 0xd0, 0x70, 0x54, 0x5d, 0x95, 0x61, 0xbe, 0x77, 0x98, 0x9e, 0x64, 0x48, 0x02, 0x62, 0x2f, 0x42, - 0x5d, 0x9d, 0x7e, 0xc8, 0x8d, 0xaa, 0x95, 0xbf, 0x51, 0xed, 0x2b, 0x2d, 0x6f, 0x6a, 0xf5, 0x9b, - 0xdf, 0x7d, 0xe2, 0x1d, 0xbf, 0xfb, 0xdd, 0x27, 0xde, 0xf1, 0x07, 0xdf, 0x7d, 0xe2, 0x1d, 0x9f, - 0xdc, 0x7d, 0xc2, 0xfa, 0xe6, 0xee, 0x13, 0xd6, 0xef, 0xee, 0x3e, 0x61, 0xfd, 0xc1, 0xee, 0x13, - 0xd6, 0x77, 0x76, 0x9f, 0xb0, 0xbe, 0xf4, 0x9f, 0x9f, 0x78, 0xc7, 0x2b, 0xb9, 0xe1, 0x81, 0xf4, - 0xc7, 0xb3, 0x8d, 0xe6, 0xc4, 0xe6, 0x25, 0x16, 0xa1, 0x46, 0x97, 0xd7, 0x84, 0x31, 0xa7, 0x26, - 0xe4, 0xf2, 0xfa, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa1, 0x4f, 0x88, 0x2f, 0x3c, 0xe0, 0x00, - 0x00, + 0x74, 0xc5, 0x0d, 0x11, 0x28, 0xb7, 0xdc, 0x44, 0x7c, 0xd6, 0x23, 0xee, 0xa7, 0xe6, 0x5c, 0xe3, + 0x15, 0x07, 0xa9, 0x12, 0x99, 0x73, 0x13, 0x4c, 0xe9, 0xa3, 0x9f, 0xb5, 0x60, 0x28, 0x6e, 0xb4, + 0x97, 0xa3, 0x60, 0xcb, 0x6d, 0x92, 0x48, 0x58, 0x53, 0x47, 0x14, 0x4d, 0x2b, 0x33, 0x8b, 0x92, + 0xa0, 0xe6, 0xcb, 0xf7, 0xb7, 0x1a, 0x82, 0x4d, 0xbe, 0x74, 0x97, 0xf1, 0xa8, 0x78, 0xf7, 0x59, + 0xd2, 0x70, 0xa9, 0xfe, 0x93, 0x9b, 0x2a, 0x36, 0x53, 0x8e, 0x6c, 0x5d, 0xce, 0x76, 0x1a, 0x9b, + 0x74, 0xbd, 0xe9, 0x0e, 0xbd, 0xf3, 0xee, 0xee, 0xf8, 0xa3, 0x33, 0xf9, 0x3c, 0x71, 0xaf, 0xce, + 0xb0, 0x01, 0x0b, 0x3b, 0x9e, 0x87, 0xc9, 0xeb, 0x1d, 0xc2, 0x5c, 0x26, 0x05, 0x0c, 0xd8, 0xb2, + 0x26, 0x98, 0x19, 0x30, 0x03, 0x82, 0x4d, 0xbe, 0xe8, 0x75, 0x18, 0x68, 0x3b, 0x49, 0xe4, 0x6e, + 0x0b, 0x3f, 0xc9, 0x11, 0xed, 0xfd, 0x45, 0x46, 0x4b, 0x33, 0x67, 0x9a, 0x9a, 0x37, 0x62, 0xc1, + 0x08, 0xb5, 0xa1, 0xda, 0x26, 0x51, 0x8b, 0x8c, 0xd5, 0x8a, 0xf0, 0x09, 0x2f, 0x52, 0x52, 0x9a, + 0x61, 0x9d, 0x5a, 0x47, 0xac, 0x0d, 0x73, 0x2e, 0xe8, 0x55, 0xa8, 0xc5, 0xc4, 0x23, 0x0d, 0x6a, + 0xdf, 0xd4, 0x19, 0xc7, 0x1f, 0xe9, 0xd3, 0xd6, 0xa3, 0x86, 0xc5, 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, + 0xc1, 0xa8, 0x7d, 0x3d, 0x6d, 0xd4, 0x2e, 0x14, 0x69, 0x75, 0xf4, 0xb0, 0x6b, 0x7f, 0xa3, 0x0e, + 0x19, 0x75, 0x70, 0x9d, 0xc4, 0x09, 0x69, 0xbe, 0x2d, 0xc2, 0xdf, 0x16, 0xe1, 0x6f, 0x8b, 0x70, + 0x25, 0xc2, 0xd7, 0x32, 0x22, 0xfc, 0x7d, 0xc6, 0xaa, 0xd7, 0x87, 0xaa, 0xaf, 0xa9, 0x53, 0x57, + 0xb3, 0x07, 0x06, 0x02, 0x95, 0x04, 0x57, 0x57, 0x96, 0xae, 0xe7, 0xca, 0xec, 0xd7, 0xd2, 0x32, + 0xfb, 0xa8, 0x2c, 0xfe, 0x5f, 0x90, 0xd2, 0xff, 0xd2, 0x82, 0x77, 0xa5, 0xa5, 0x97, 0x9c, 0x39, + 0xf3, 0x2d, 0x3f, 0x88, 0xc8, 0xac, 0xbb, 0xbe, 0x4e, 0x22, 0xe2, 0x37, 0x48, 0xac, 0xbc, 0x18, + 0x56, 0x2f, 0x2f, 0x06, 0x7a, 0x1e, 0x86, 0x6f, 0xc7, 0x81, 0xbf, 0x1c, 0xb8, 0xbe, 0x10, 0x41, + 0x74, 0x23, 0x7c, 0xf2, 0xee, 0xee, 0xf8, 0x30, 0x1d, 0x51, 0xd9, 0x8e, 0x53, 0x58, 0x68, 0x06, + 0x4e, 0xdd, 0x7e, 0x7d, 0xd9, 0x49, 0x0c, 0x77, 0x80, 0xdc, 0xb8, 0xb3, 0x03, 0x8b, 0xab, 0x2f, + 0x67, 0x80, 0xb8, 0x1b, 0xdf, 0xfe, 0xeb, 0x25, 0x38, 0x97, 0x79, 0x91, 0xc0, 0xf3, 0x82, 0x4e, + 0x42, 0x37, 0x35, 0xe8, 0xab, 0x16, 0x9c, 0x6c, 0xa7, 0x3d, 0x0e, 0xb1, 0x70, 0xec, 0x7e, 0xa0, + 0x30, 0x1d, 0x91, 0x71, 0x69, 0x4c, 0x8f, 0x89, 0x11, 0x3a, 0x99, 0x01, 0xc4, 0xb8, 0xab, 0x2f, + 0xe8, 0x55, 0xa8, 0xb7, 0x9d, 0xed, 0x1b, 0x61, 0xd3, 0x49, 0xe4, 0x7e, 0xb2, 0xb7, 0x1b, 0xa0, + 0x93, 0xb8, 0xde, 0x04, 0x3f, 0xae, 0x9f, 0x98, 0xf7, 0x93, 0xa5, 0x68, 0x25, 0x89, 0x5c, 0xbf, + 0xc5, 0xdd, 0x79, 0x8b, 0x92, 0x0c, 0xd6, 0x14, 0xed, 0xaf, 0x58, 0x59, 0x25, 0xa5, 0x46, 0x27, + 0x72, 0x12, 0xd2, 0xda, 0x41, 0x1f, 0x85, 0x2a, 0xdd, 0xf8, 0xc9, 0x51, 0xb9, 0x55, 0xa4, 0xe6, + 0x34, 0xbe, 0x84, 0x56, 0xa2, 0xf4, 0x5f, 0x8c, 0x39, 0x53, 0xfb, 0xab, 0xf5, 0xac, 0xb1, 0xc0, + 0x0e, 0x6f, 0x2f, 0x02, 0xb4, 0x82, 0x55, 0xd2, 0x0e, 0x3d, 0x3a, 0x2c, 0x16, 0x3b, 0x01, 0x50, + 0xbe, 0x8e, 0x39, 0x05, 0xc1, 0x06, 0x16, 0xfa, 0x8b, 0x16, 0x40, 0x4b, 0xce, 0x79, 0x69, 0x08, + 0xdc, 0x28, 0xf2, 0x75, 0xf4, 0x8a, 0xd2, 0x7d, 0x51, 0x0c, 0xb1, 0xc1, 0x1c, 0xfd, 0x8c, 0x05, + 0xb5, 0x44, 0x76, 0x9f, 0xab, 0xc6, 0xd5, 0x22, 0x7b, 0x22, 0x5f, 0x5a, 0xdb, 0x44, 0x6a, 0x48, + 0x14, 0x5f, 0xf4, 0x73, 0x16, 0x40, 0xbc, 0xe3, 0x37, 0x96, 0x03, 0xcf, 0x6d, 0xec, 0x08, 0x8d, + 0x79, 0xb3, 0x50, 0x7f, 0x8c, 0xa2, 0x3e, 0x3d, 0x4a, 0x47, 0x43, 0xff, 0xc7, 0x06, 0x67, 0xf4, + 0x71, 0xa8, 0xc5, 0x62, 0xba, 0x09, 0x1d, 0xb9, 0x5a, 0xac, 0x57, 0x88, 0xd3, 0x16, 0xe2, 0x55, + 0xfc, 0xc3, 0x8a, 0x27, 0xfa, 0x05, 0x0b, 0x4e, 0x84, 0x69, 0x3f, 0x9f, 0x50, 0x87, 0xc5, 0xc9, + 0x80, 0x8c, 0x1f, 0x71, 0xfa, 0xf4, 0xdd, 0xdd, 0xf1, 0x13, 0x99, 0x46, 0x9c, 0xed, 0x05, 0x95, + 0x80, 0x7a, 0x06, 0x2f, 0x85, 0xdc, 0xe7, 0x38, 0xa8, 0x25, 0xe0, 0x5c, 0x16, 0x88, 0xbb, 0xf1, + 0xd1, 0x32, 0x9c, 0xa1, 0xbd, 0xdb, 0xe1, 0xe6, 0xa7, 0x54, 0x2f, 0x31, 0x53, 0x86, 0xb5, 0xe9, + 0xc7, 0xc4, 0x0c, 0x61, 0x5e, 0xfd, 0x2c, 0x0e, 0xce, 0x7d, 0x12, 0xfd, 0xae, 0x05, 0x8f, 0xb9, + 0x4c, 0x0d, 0x98, 0x0e, 0x73, 0xad, 0x11, 0xc4, 0x49, 0x2c, 0x29, 0x54, 0x56, 0xf4, 0x52, 0x3f, + 0xd3, 0xff, 0x9f, 0x78, 0x83, 0xc7, 0xe6, 0xf7, 0xe8, 0x12, 0xde, 0xb3, 0xc3, 0xe8, 0x47, 0x61, + 0x44, 0xae, 0x8b, 0x65, 0x2a, 0x82, 0x99, 0xa2, 0xad, 0x4f, 0x9f, 0xba, 0xbb, 0x3b, 0x3e, 0xb2, + 0x6a, 0x02, 0x70, 0x1a, 0xcf, 0xfe, 0x56, 0x29, 0x75, 0x1e, 0xa2, 0x9c, 0x90, 0x4c, 0xdc, 0x34, + 0xa4, 0xff, 0x47, 0x4a, 0xcf, 0x42, 0xc5, 0x8d, 0xf2, 0x2e, 0x69, 0x71, 0xa3, 0x9a, 0x62, 0x6c, + 0x30, 0xa7, 0x46, 0xe9, 0x29, 0x27, 0xeb, 0xea, 0x14, 0x12, 0xf0, 0xd5, 0x22, 0xbb, 0xd4, 0x7d, + 0x7a, 0x75, 0x4e, 0x74, 0xed, 0x54, 0x17, 0x08, 0x77, 0x77, 0xc9, 0xfe, 0x56, 0xfa, 0x0c, 0xc6, + 0x58, 0xbc, 0x7d, 0x9c, 0x2f, 0x7d, 0xc1, 0x82, 0xa1, 0x28, 0xf0, 0x3c, 0xd7, 0x6f, 0x51, 0x41, + 0x23, 0xb4, 0xe5, 0x87, 0x8e, 0x45, 0x61, 0x09, 0x89, 0xc2, 0x4c, 0x5b, 0xac, 0x79, 0x62, 0xb3, + 0x03, 0xf6, 0x1f, 0x5b, 0x30, 0xd6, 0x4b, 0x20, 0x22, 0x02, 0xef, 0x94, 0xab, 0x5d, 0x45, 0x57, + 0x2c, 0xf9, 0xb3, 0xc4, 0x23, 0xca, 0xf1, 0x5c, 0x9b, 0x7e, 0x52, 0xbc, 0xe6, 0x3b, 0x97, 0x7b, + 0xa3, 0xe2, 0xbd, 0xe8, 0xa0, 0x57, 0xe0, 0xa4, 0xf1, 0x5e, 0xb1, 0x1a, 0x98, 0xfa, 0xf4, 0x04, + 0xb5, 0x40, 0xa6, 0x32, 0xb0, 0x7b, 0xbb, 0xe3, 0x8f, 0x64, 0xdb, 0x84, 0xc4, 0xee, 0xa2, 0x63, + 0xff, 0x4a, 0x29, 0xfb, 0xb5, 0x94, 0xb2, 0x7d, 0xcb, 0xea, 0xda, 0xce, 0x7f, 0xe0, 0x38, 0x14, + 0x1c, 0xdb, 0xf8, 0xab, 0x00, 0x8e, 0xde, 0x38, 0x0f, 0xf0, 0x84, 0xd8, 0xfe, 0xd7, 0x15, 0xd8, + 0xa3, 0x67, 0x7d, 0x58, 0xcf, 0x07, 0x3e, 0x56, 0xfc, 0x9c, 0xa5, 0x8e, 0x9c, 0xca, 0x6c, 0x91, + 0x37, 0x8f, 0x6b, 0xec, 0xf9, 0x06, 0x26, 0xe6, 0x51, 0x0a, 0xca, 0x8d, 0x9d, 0x3e, 0xdc, 0x42, + 0x5f, 0xb3, 0xd2, 0x87, 0x66, 0x3c, 0xec, 0xcc, 0x3d, 0xb6, 0x3e, 0x19, 0x27, 0x71, 0xbc, 0x63, + 0xfa, 0xfc, 0xa6, 0xd7, 0x19, 0xdd, 0x04, 0xc0, 0xba, 0xeb, 0x3b, 0x9e, 0xfb, 0x06, 0xdd, 0x9e, + 0x54, 0x99, 0x86, 0x65, 0x26, 0xcb, 0x65, 0xd5, 0x8a, 0x0d, 0x8c, 0xf3, 0x7f, 0x01, 0x86, 0x8c, + 0x37, 0xcf, 0x09, 0xae, 0x38, 0x63, 0x06, 0x57, 0xd4, 0x8d, 0x98, 0x88, 0xf3, 0xef, 0x83, 0x93, + 0xd9, 0x0e, 0x1e, 0xe4, 0x79, 0xfb, 0xcf, 0x07, 0xb3, 0xa7, 0x58, 0xab, 0x24, 0x6a, 0xd3, 0xae, + 0xbd, 0xed, 0x59, 0x7a, 0xdb, 0xb3, 0xf4, 0xb6, 0x67, 0xc9, 0x3c, 0x1c, 0x10, 0x5e, 0x93, 0xc1, + 0xfb, 0xe4, 0x35, 0x49, 0xf9, 0x81, 0x6a, 0x85, 0xfb, 0x81, 0xec, 0xbb, 0x55, 0x48, 0xd9, 0x51, + 0x7c, 0xbc, 0x7f, 0x08, 0x06, 0x23, 0x12, 0x06, 0x37, 0xf0, 0x82, 0xd0, 0x21, 0x3a, 0x80, 0x9e, + 0x37, 0x63, 0x09, 0xa7, 0xba, 0x26, 0x74, 0x92, 0x0d, 0xa1, 0x44, 0x94, 0xae, 0x59, 0x76, 0x92, + 0x0d, 0xcc, 0x20, 0xe8, 0x7d, 0x30, 0x9a, 0x38, 0x51, 0x8b, 0xda, 0xdb, 0x5b, 0xec, 0xb3, 0x8a, + 0xb3, 0xce, 0x47, 0x04, 0xee, 0xe8, 0x6a, 0x0a, 0x8a, 0x33, 0xd8, 0xe8, 0x75, 0xa8, 0x6c, 0x10, + 0xaf, 0x2d, 0x86, 0x7c, 0xa5, 0x38, 0x19, 0xcf, 0xde, 0xf5, 0x0a, 0xf1, 0xda, 0x5c, 0x02, 0xd1, + 0x5f, 0x98, 0xb1, 0xa2, 0xf3, 0xad, 0xbe, 0xd9, 0x89, 0x93, 0xa0, 0xed, 0xbe, 0x21, 0x5d, 0x7c, + 0x1f, 0x28, 0x98, 0xf1, 0x35, 0x49, 0x9f, 0xfb, 0x52, 0xd4, 0x5f, 0xac, 0x39, 0xb3, 0x7e, 0x34, + 0xdd, 0x88, 0x7d, 0xaa, 0x1d, 0xe1, 0xa9, 0x2b, 0xba, 0x1f, 0xb3, 0x92, 0x3e, 0xef, 0x87, 0xfa, + 0x8b, 0x35, 0x67, 0xb4, 0xa3, 0xe6, 0xfd, 0x10, 0xeb, 0xc3, 0x8d, 0x82, 0xfb, 0xc0, 0xe7, 0x7c, + 0xee, 0xfc, 0x7f, 0x12, 0xaa, 0x8d, 0x0d, 0x27, 0x4a, 0xc6, 0x86, 0xd9, 0xa4, 0x51, 0x3e, 0x9d, + 0x19, 0xda, 0x88, 0x39, 0x0c, 0x3d, 0x0e, 0xe5, 0x88, 0xac, 0xb3, 0xb8, 0x4d, 0x23, 0xa2, 0x07, + 0x93, 0x75, 0x4c, 0xdb, 0xed, 0x5f, 0x2a, 0xa5, 0xcd, 0xa5, 0xf4, 0x7b, 0xf3, 0xd9, 0xde, 0xe8, + 0x44, 0xb1, 0xf4, 0xfb, 0x18, 0xb3, 0x9d, 0x35, 0x63, 0x09, 0x47, 0x9f, 0xb4, 0x60, 0xf0, 0x76, + 0x1c, 0xf8, 0x3e, 0x49, 0x84, 0x6a, 0xba, 0x59, 0xf0, 0x50, 0x5c, 0xe5, 0xd4, 0x75, 0x1f, 0x44, + 0x03, 0x96, 0x7c, 0x69, 0x77, 0xc9, 0x76, 0xc3, 0xeb, 0x34, 0xbb, 0x82, 0x34, 0x2e, 0xf1, 0x66, + 0x2c, 0xe1, 0x14, 0xd5, 0xf5, 0x39, 0x6a, 0x25, 0x8d, 0x3a, 0xef, 0x0b, 0x54, 0x01, 0xb7, 0xff, + 0xea, 0x00, 0x9c, 0xcd, 0x5d, 0x1c, 0xd4, 0x90, 0x61, 0xa6, 0xc2, 0x65, 0xd7, 0x23, 0x32, 0x3c, + 0x89, 0x19, 0x32, 0x37, 0x55, 0x2b, 0x36, 0x30, 0xd0, 0x4f, 0x03, 0x84, 0x4e, 0xe4, 0xb4, 0x89, + 0xf2, 0xcb, 0x1e, 0xd9, 0x5e, 0xa0, 0xfd, 0x58, 0x96, 0x34, 0xf5, 0xde, 0x54, 0x35, 0xc5, 0xd8, + 0x60, 0x89, 0x5e, 0x80, 0xa1, 0x88, 0x78, 0xc4, 0x89, 0x59, 0xd8, 0x6f, 0x36, 0x87, 0x01, 0x6b, + 0x10, 0x36, 0xf1, 0xd0, 0x53, 0x2a, 0x92, 0x2b, 0x13, 0xd1, 0x92, 0x8e, 0xe6, 0x42, 0x6f, 0x5a, + 0x30, 0xba, 0xee, 0x7a, 0x44, 0x73, 0x17, 0x19, 0x07, 0x4b, 0x47, 0x7f, 0xc9, 0xcb, 0x26, 0x5d, + 0x2d, 0x21, 0x53, 0xcd, 0x31, 0xce, 0xb0, 0xa7, 0x9f, 0x79, 0x8b, 0x44, 0x4c, 0xb4, 0x0e, 0xa4, + 0x3f, 0xf3, 0x4d, 0xde, 0x8c, 0x25, 0x1c, 0x4d, 0xc1, 0x89, 0xd0, 0x89, 0xe3, 0x99, 0x88, 0x34, + 0x89, 0x9f, 0xb8, 0x8e, 0xc7, 0xf3, 0x01, 0x6a, 0x3a, 0x1e, 0x78, 0x39, 0x0d, 0xc6, 0x59, 0x7c, + 0xf4, 0x41, 0x78, 0x94, 0x3b, 0x3e, 0x16, 0xdd, 0x38, 0x76, 0xfd, 0x96, 0x9e, 0x06, 0xc2, 0xff, + 0x33, 0x2e, 0x48, 0x3d, 0x3a, 0x9f, 0x8f, 0x86, 0x7b, 0x3d, 0x8f, 0x9e, 0x81, 0x5a, 0xbc, 0xe9, + 0x86, 0x33, 0x51, 0x33, 0x66, 0x87, 0x1e, 0x35, 0xed, 0x6d, 0x5c, 0x11, 0xed, 0x58, 0x61, 0xa0, + 0x06, 0x0c, 0xf3, 0x4f, 0xc2, 0x43, 0xd1, 0x84, 0x7c, 0x7c, 0xb6, 0xa7, 0x7a, 0x14, 0x29, 0x6b, + 0x13, 0xd8, 0xb9, 0x73, 0x49, 0x1e, 0xc1, 0xf0, 0x13, 0x83, 0x9b, 0x06, 0x19, 0x9c, 0x22, 0x6a, + 0xff, 0x62, 0x29, 0xbd, 0xe3, 0x36, 0x17, 0x29, 0x8a, 0xe9, 0x52, 0x4c, 0x6e, 0x3a, 0x91, 0xf4, + 0xc6, 0x1c, 0x31, 0x6d, 0x41, 0xd0, 0xbd, 0xe9, 0x44, 0xe6, 0xa2, 0x66, 0x0c, 0xb0, 0xe4, 0x84, + 0x6e, 0x43, 0x25, 0xf1, 0x9c, 0x82, 0xf2, 0x9c, 0x0c, 0x8e, 0xda, 0x01, 0xb2, 0x30, 0x15, 0x63, + 0xc6, 0x03, 0x3d, 0x46, 0xad, 0xfe, 0x35, 0x79, 0x44, 0x22, 0x0c, 0xf5, 0xb5, 0x18, 0xb3, 0x56, + 0xfb, 0xcf, 0xeb, 0x39, 0x72, 0x55, 0x29, 0x32, 0x74, 0x11, 0x80, 0x6e, 0x20, 0x97, 0x23, 0xb2, + 0xee, 0x6e, 0x0b, 0x43, 0x42, 0xad, 0xdd, 0xeb, 0x0a, 0x82, 0x0d, 0x2c, 0xf9, 0xcc, 0x4a, 0x67, + 0x9d, 0x3e, 0x53, 0xea, 0x7e, 0x86, 0x43, 0xb0, 0x81, 0x85, 0x9e, 0x87, 0x01, 0xb7, 0xed, 0xb4, + 0x54, 0x08, 0xe6, 0x63, 0x74, 0xd1, 0xce, 0xb3, 0x96, 0x7b, 0xbb, 0xe3, 0xa3, 0xaa, 0x43, 0xac, + 0x09, 0x0b, 0x5c, 0xf4, 0x2b, 0x16, 0x0c, 0x37, 0x82, 0x76, 0x3b, 0xf0, 0xf9, 0xb6, 0x4b, 0xec, + 0x21, 0x6f, 0x1f, 0x97, 0x9a, 0x9f, 0x98, 0x31, 0x98, 0xf1, 0x4d, 0xa4, 0x4a, 0xc8, 0x32, 0x41, + 0x38, 0xd5, 0x2b, 0x73, 0x6d, 0x57, 0xf7, 0x59, 0xdb, 0xbf, 0x6e, 0xc1, 0x29, 0xfe, 0xac, 0xb1, + 0x1b, 0x14, 0xb9, 0x47, 0xc1, 0x31, 0xbf, 0x56, 0xd7, 0x06, 0x59, 0x79, 0xe9, 0xba, 0xe0, 0xb8, + 0xbb, 0x93, 0x68, 0x0e, 0x4e, 0xad, 0x07, 0x51, 0x83, 0x98, 0x03, 0x21, 0x04, 0x93, 0x22, 0x74, + 0x39, 0x8b, 0x80, 0xbb, 0x9f, 0x41, 0x37, 0xe1, 0x11, 0xa3, 0xd1, 0x1c, 0x07, 0x2e, 0x9b, 0x9e, + 0x10, 0xd4, 0x1e, 0xb9, 0x9c, 0x8b, 0x85, 0x7b, 0x3c, 0x9d, 0x76, 0x98, 0xd4, 0xfb, 0x70, 0x98, + 0xbc, 0x06, 0xe7, 0x1a, 0xdd, 0x23, 0xb3, 0x15, 0x77, 0xd6, 0x62, 0x2e, 0xa9, 0x6a, 0xd3, 0x3f, + 0x20, 0x08, 0x9c, 0x9b, 0xe9, 0x85, 0x88, 0x7b, 0xd3, 0x40, 0x1f, 0x85, 0x5a, 0x44, 0xd8, 0x57, + 0x89, 0x45, 0x22, 0xce, 0x11, 0x77, 0xc9, 0xda, 0x02, 0xe5, 0x64, 0xb5, 0xec, 0x15, 0x0d, 0x31, + 0x56, 0x1c, 0xd1, 0x1d, 0x18, 0x0c, 0x9d, 0xa4, 0xb1, 0x21, 0xd2, 0x6f, 0x8e, 0x1c, 0xff, 0xa2, + 0x98, 0x33, 0x1f, 0xb8, 0x9e, 0xe4, 0xcb, 0x9c, 0x09, 0x96, 0xdc, 0xce, 0xbf, 0x1f, 0x4e, 0x75, + 0x2d, 0xa4, 0x03, 0x39, 0x4b, 0x66, 0xe1, 0x91, 0xfc, 0x29, 0x7b, 0x20, 0x97, 0xc9, 0x3f, 0xca, + 0x04, 0xad, 0x1a, 0x66, 0x6c, 0x1f, 0xee, 0x37, 0x07, 0xca, 0xc4, 0xdf, 0x12, 0x12, 0xfc, 0xf2, + 0xd1, 0x46, 0xee, 0x92, 0xbf, 0xc5, 0x57, 0x1c, 0xf3, 0x31, 0x5c, 0xf2, 0xb7, 0x30, 0xa5, 0x8d, + 0xbe, 0x64, 0xa5, 0xcc, 0x30, 0xee, 0xb4, 0xfb, 0xf0, 0xb1, 0xd8, 0xed, 0x7d, 0x5b, 0x66, 0xf6, + 0xbf, 0x29, 0xc1, 0x85, 0xfd, 0x88, 0xf4, 0x31, 0x7c, 0x4f, 0xc2, 0x40, 0xcc, 0x8e, 0xa1, 0x85, + 0x48, 0x1c, 0xa2, 0x33, 0x85, 0x1f, 0x4c, 0xbf, 0x86, 0x05, 0x08, 0x79, 0x50, 0x6e, 0x3b, 0xa1, + 0xf0, 0xe5, 0xcc, 0x1f, 0x35, 0x8d, 0x85, 0xfe, 0x77, 0xbc, 0x45, 0x27, 0xe4, 0x1e, 0x02, 0xa3, + 0x01, 0x53, 0x36, 0x28, 0x81, 0xaa, 0x13, 0x45, 0x8e, 0x3c, 0xf3, 0xbc, 0x56, 0x0c, 0xbf, 0x29, + 0x4a, 0x92, 0x1f, 0x19, 0xa5, 0x9a, 0x30, 0x67, 0x66, 0x7f, 0x6e, 0x30, 0x95, 0xca, 0xc1, 0x0e, + 0xb2, 0x63, 0x18, 0x10, 0x2e, 0x1c, 0xab, 0xe8, 0xec, 0x21, 0x9e, 0x8b, 0xc7, 0x76, 0x69, 0x22, + 0xa3, 0x59, 0xb0, 0x42, 0x9f, 0xb5, 0x58, 0xde, 0xb0, 0x4c, 0x6f, 0x11, 0x7b, 0xa3, 0xe3, 0x49, + 0x63, 0x36, 0xb3, 0x91, 0x65, 0x23, 0x36, 0xb9, 0x53, 0x9d, 0x19, 0xf2, 0x0c, 0xb8, 0xec, 0x0e, + 0x49, 0x66, 0x16, 0x4b, 0x38, 0xda, 0xce, 0x39, 0xb0, 0x2e, 0x20, 0xf7, 0xb4, 0x8f, 0x23, 0xea, + 0xaf, 0x59, 0x70, 0xca, 0xcd, 0x9e, 0x3c, 0x8a, 0x9d, 0xc4, 0x11, 0x43, 0x22, 0x7a, 0x1f, 0x6c, + 0x2a, 0x65, 0xda, 0x05, 0xc2, 0xdd, 0x9d, 0x41, 0x4d, 0xa8, 0xb8, 0xfe, 0x7a, 0x20, 0x4c, 0x88, + 0xe9, 0xa3, 0x75, 0x6a, 0xde, 0x5f, 0x0f, 0xf4, 0x6a, 0xa6, 0xff, 0x30, 0xa3, 0x8e, 0x16, 0xe0, + 0x4c, 0x24, 0x7c, 0x3d, 0x57, 0xdc, 0x98, 0xee, 0xc8, 0x17, 0xdc, 0xb6, 0x9b, 0x30, 0xf5, 0x5f, + 0x9e, 0x1e, 0xbb, 0xbb, 0x3b, 0x7e, 0x06, 0xe7, 0xc0, 0x71, 0xee, 0x53, 0xe8, 0x0d, 0x18, 0x94, + 0x89, 0xce, 0xb5, 0x22, 0x76, 0x65, 0xdd, 0xf3, 0x5f, 0x4d, 0xa6, 0x15, 0x91, 0xd3, 0x2c, 0x19, + 0xda, 0x6f, 0x0e, 0x41, 0xf7, 0xa1, 0x24, 0xfa, 0x18, 0xd4, 0x23, 0x95, 0x7c, 0x6d, 0x15, 0xa1, + 0x2c, 0xe5, 0xf7, 0x15, 0x07, 0xa2, 0xca, 0x10, 0xd1, 0x69, 0xd6, 0x9a, 0x23, 0xdd, 0x2e, 0xc4, + 0xfa, 0xec, 0xb2, 0x80, 0xb9, 0x2d, 0xb8, 0xea, 0x73, 0xa9, 0x1d, 0xbf, 0x81, 0x19, 0x0f, 0x14, + 0xc1, 0xc0, 0x06, 0x71, 0xbc, 0x64, 0xa3, 0x18, 0x17, 0xfa, 0x15, 0x46, 0x2b, 0x9b, 0x82, 0xc3, + 0x5b, 0xb1, 0xe0, 0x84, 0xb6, 0x61, 0x70, 0x83, 0x4f, 0x00, 0x61, 0xc1, 0x2f, 0x1e, 0x75, 0x70, + 0x53, 0xb3, 0x4a, 0x7f, 0x6e, 0xd1, 0x80, 0x25, 0x3b, 0x16, 0xed, 0x62, 0x9c, 0xc7, 0xf3, 0xa5, + 0x5b, 0x5c, 0xf6, 0x51, 0xff, 0x87, 0xf1, 0x1f, 0x81, 0xe1, 0x88, 0x34, 0x02, 0xbf, 0xe1, 0x7a, + 0xa4, 0x39, 0x25, 0xdd, 0xe3, 0x07, 0xc9, 0x59, 0x61, 0xbb, 0x60, 0x6c, 0xd0, 0xc0, 0x29, 0x8a, + 0xe8, 0x33, 0x16, 0x8c, 0xaa, 0x8c, 0x4d, 0xfa, 0x41, 0x88, 0x70, 0xc7, 0x2e, 0x14, 0x94, 0x1f, + 0xca, 0x68, 0x4e, 0xa3, 0xbb, 0xbb, 0xe3, 0xa3, 0xe9, 0x36, 0x9c, 0xe1, 0x8b, 0x5e, 0x01, 0x08, + 0xd6, 0x78, 0x48, 0xcb, 0x54, 0x22, 0x7c, 0xb3, 0x07, 0x79, 0xd5, 0x51, 0x9e, 0xbc, 0x26, 0x29, + 0x60, 0x83, 0x1a, 0xba, 0x06, 0xc0, 0x97, 0xcd, 0xea, 0x4e, 0x28, 0xcd, 0x7c, 0x99, 0x74, 0x04, + 0x2b, 0x0a, 0x72, 0x6f, 0x77, 0xbc, 0xdb, 0x57, 0xc6, 0xc2, 0x06, 0x8c, 0xc7, 0xd1, 0x4f, 0xc1, + 0x60, 0xdc, 0x69, 0xb7, 0x1d, 0xe5, 0xb9, 0x2d, 0x30, 0x1d, 0x8e, 0xd3, 0x35, 0x44, 0x11, 0x6f, + 0xc0, 0x92, 0x23, 0xba, 0x4d, 0x85, 0x6a, 0x2c, 0x9c, 0x78, 0x6c, 0x15, 0x71, 0x9b, 0x60, 0x88, + 0xbd, 0xd3, 0x7b, 0x64, 0x84, 0x0e, 0xce, 0xc1, 0xb9, 0xb7, 0x3b, 0xfe, 0x48, 0xba, 0x7d, 0x21, + 0x10, 0x09, 0x6a, 0xb9, 0x34, 0xd1, 0x55, 0x59, 0xf7, 0x84, 0xbe, 0xb6, 0x4c, 0xc7, 0x7f, 0x5a, + 0xd7, 0x3d, 0x61, 0xcd, 0xbd, 0xc7, 0xcc, 0x7c, 0x18, 0x2d, 0xc2, 0xe9, 0x46, 0xe0, 0x27, 0x51, + 0xe0, 0x79, 0xbc, 0x98, 0x0f, 0xdf, 0x71, 0x71, 0xcf, 0xee, 0x3b, 0x45, 0xb7, 0x4f, 0xcf, 0x74, + 0xa3, 0xe0, 0xbc, 0xe7, 0x6c, 0x3f, 0x1d, 0xeb, 0x27, 0x06, 0xe7, 0x79, 0x18, 0x26, 0xdb, 0x09, + 0x89, 0x7c, 0xc7, 0xbb, 0x81, 0x17, 0xa4, 0x4f, 0x93, 0xad, 0x81, 0x4b, 0x46, 0x3b, 0x4e, 0x61, + 0x21, 0x5b, 0xb9, 0x19, 0x8c, 0xa4, 0x4b, 0xee, 0x66, 0x90, 0x4e, 0x05, 0xfb, 0x7f, 0x95, 0x52, + 0x06, 0xd9, 0x6a, 0x44, 0x08, 0x0a, 0xa0, 0xea, 0x07, 0x4d, 0x25, 0xfb, 0xaf, 0x16, 0x23, 0xfb, + 0xaf, 0x07, 0x4d, 0xa3, 0x38, 0x0a, 0xfd, 0x17, 0x63, 0xce, 0x87, 0x55, 0x8f, 0x90, 0x65, 0x36, + 0x18, 0x40, 0x6c, 0x34, 0x8a, 0xe4, 0xac, 0xaa, 0x47, 0x2c, 0x99, 0x8c, 0x70, 0x9a, 0x2f, 0xda, + 0x84, 0xea, 0x46, 0x10, 0x27, 0x72, 0xfb, 0x71, 0xc4, 0x9d, 0xce, 0x95, 0x20, 0x4e, 0x98, 0x15, + 0xa1, 0x5e, 0x9b, 0xb6, 0xc4, 0x98, 0xf3, 0xb0, 0xff, 0x8b, 0x95, 0xf2, 0x60, 0xdf, 0x62, 0x71, + 0xaf, 0x5b, 0xc4, 0xa7, 0xcb, 0xda, 0x0c, 0xf4, 0xf9, 0xd1, 0x4c, 0x16, 0xe1, 0xbb, 0x7a, 0x95, + 0xaa, 0xba, 0x43, 0x29, 0x4c, 0x30, 0x12, 0x46, 0x4c, 0xd0, 0x27, 0xac, 0x74, 0x3e, 0x67, 0xa9, + 0x88, 0x0d, 0x86, 0x99, 0xd3, 0xbc, 0x6f, 0x6a, 0xa8, 0xfd, 0x25, 0x0b, 0x06, 0xa7, 0x9d, 0xc6, + 0x66, 0xb0, 0xbe, 0x8e, 0x9e, 0x81, 0x5a, 0xb3, 0x13, 0x99, 0xa9, 0xa5, 0x6a, 0xdb, 0x3e, 0x2b, + 0xda, 0xb1, 0xc2, 0xa0, 0x73, 0x78, 0xdd, 0x69, 0xc8, 0xcc, 0xe6, 0x32, 0x9f, 0xc3, 0x97, 0x59, + 0x0b, 0x16, 0x10, 0xf4, 0x02, 0x0c, 0xb5, 0x9d, 0x6d, 0xf9, 0x70, 0xd6, 0x7d, 0xbe, 0xa8, 0x41, + 0xd8, 0xc4, 0xb3, 0xff, 0x85, 0x05, 0x63, 0xd3, 0x4e, 0xec, 0x36, 0xa6, 0x3a, 0xc9, 0xc6, 0xb4, + 0x9b, 0xac, 0x75, 0x1a, 0x9b, 0x24, 0xe1, 0xe9, 0xec, 0xb4, 0x97, 0x9d, 0x98, 0x2e, 0x25, 0xb5, + 0xaf, 0x53, 0xbd, 0xbc, 0x21, 0xda, 0xb1, 0xc2, 0x40, 0x6f, 0xc0, 0x50, 0xe8, 0xc4, 0xf1, 0x9d, + 0x20, 0x6a, 0x62, 0xb2, 0x5e, 0x4c, 0x31, 0x89, 0x15, 0xd2, 0x88, 0x48, 0x82, 0xc9, 0xba, 0x38, + 0xe2, 0xd5, 0xf4, 0xb1, 0xc9, 0xcc, 0xfe, 0x82, 0x05, 0xe7, 0xa6, 0x89, 0x13, 0x91, 0x88, 0xd5, + 0x9e, 0x50, 0x2f, 0x32, 0xe3, 0x05, 0x9d, 0x26, 0x7a, 0x1d, 0x6a, 0x09, 0x6d, 0xa6, 0xdd, 0xb2, + 0x8a, 0xed, 0x16, 0x3b, 0xa1, 0x5d, 0x15, 0xc4, 0xb1, 0x62, 0x63, 0xff, 0x35, 0x0b, 0x86, 0xd9, + 0x61, 0xd7, 0x2c, 0x49, 0x1c, 0xd7, 0xeb, 0x2a, 0xd1, 0x64, 0xf5, 0x59, 0xa2, 0xe9, 0x02, 0x54, + 0x36, 0x82, 0x36, 0xc9, 0x1e, 0xd4, 0x5e, 0x09, 0xe8, 0xb6, 0x9a, 0x42, 0xd0, 0x73, 0xf4, 0xc3, + 0xbb, 0x7e, 0xe2, 0xd0, 0x25, 0x20, 0x9d, 0xa9, 0x27, 0xf8, 0x47, 0x57, 0xcd, 0xd8, 0xc4, 0xb1, + 0x7f, 0xab, 0x0e, 0x83, 0xe2, 0x34, 0xbf, 0xef, 0x92, 0x06, 0x72, 0x7f, 0x5f, 0xea, 0xb9, 0xbf, + 0x8f, 0x61, 0xa0, 0xc1, 0x0a, 0xc0, 0x09, 0x33, 0xf2, 0x5a, 0x21, 0xe1, 0x1f, 0xbc, 0xa6, 0x9c, + 0xee, 0x16, 0xff, 0x8f, 0x05, 0x2b, 0xf4, 0x45, 0x0b, 0x4e, 0x34, 0x02, 0xdf, 0x27, 0x0d, 0x6d, + 0xe3, 0x54, 0x8a, 0x38, 0xe5, 0x9f, 0x49, 0x13, 0xd5, 0x27, 0x2d, 0x19, 0x00, 0xce, 0xb2, 0x47, + 0x2f, 0xc1, 0x08, 0x1f, 0xb3, 0x9b, 0x29, 0x0f, 0xb0, 0xae, 0xdc, 0x63, 0x02, 0x71, 0x1a, 0x17, + 0x4d, 0x70, 0x4f, 0xba, 0xa8, 0x91, 0x33, 0xa0, 0x8f, 0xed, 0x8c, 0xea, 0x38, 0x06, 0x06, 0x8a, + 0x00, 0x45, 0x64, 0x3d, 0x22, 0xf1, 0x86, 0x88, 0x76, 0x60, 0xf6, 0xd5, 0xe0, 0xe1, 0xd2, 0x9f, + 0x71, 0x17, 0x25, 0x9c, 0x43, 0x1d, 0x6d, 0x8a, 0x0d, 0x66, 0xad, 0x08, 0x19, 0x2a, 0x3e, 0x73, + 0xcf, 0x7d, 0xe6, 0x38, 0x54, 0xe3, 0x0d, 0x27, 0x6a, 0x32, 0xbb, 0xae, 0xcc, 0x53, 0x6e, 0x56, + 0x68, 0x03, 0xe6, 0xed, 0x68, 0x16, 0x4e, 0x66, 0xea, 0x0e, 0xc5, 0xc2, 0x53, 0xab, 0xd2, 0x2b, + 0x32, 0x15, 0x8b, 0x62, 0xdc, 0xf5, 0x84, 0xe9, 0x7c, 0x18, 0xda, 0xc7, 0xf9, 0xb0, 0xa3, 0x62, + 0xea, 0xb8, 0x0f, 0xf5, 0xe5, 0x42, 0x06, 0xa0, 0xaf, 0x00, 0xba, 0xcf, 0x67, 0x02, 0xe8, 0x46, + 0x58, 0x07, 0x6e, 0x16, 0xd3, 0x81, 0x83, 0x47, 0xcb, 0x3d, 0xc8, 0xe8, 0xb7, 0x3f, 0xb3, 0x40, + 0x7e, 0xd7, 0x19, 0xa7, 0xb1, 0x41, 0xe8, 0x94, 0x41, 0xef, 0x83, 0x51, 0xb5, 0x85, 0x9e, 0x09, + 0x3a, 0x3e, 0x0f, 0x7c, 0x2b, 0xeb, 0x23, 0x59, 0x9c, 0x82, 0xe2, 0x0c, 0x36, 0x9a, 0x84, 0x3a, + 0x1d, 0x27, 0xfe, 0x28, 0xd7, 0xb5, 0x6a, 0x9b, 0x3e, 0xb5, 0x3c, 0x2f, 0x9e, 0xd2, 0x38, 0x28, + 0x80, 0x53, 0x9e, 0x13, 0x27, 0xac, 0x07, 0x74, 0x47, 0x7d, 0xc8, 0xe2, 0x03, 0x2c, 0x86, 0x7f, + 0x21, 0x4b, 0x08, 0x77, 0xd3, 0xb6, 0xbf, 0x5d, 0x81, 0x91, 0x94, 0x64, 0x3c, 0xa0, 0x92, 0x7e, + 0x06, 0x6a, 0x52, 0x6f, 0x66, 0xcb, 0xa4, 0x28, 0xe5, 0xaa, 0x30, 0xa8, 0xd2, 0x5a, 0xd3, 0x5a, + 0x35, 0x6b, 0x54, 0x18, 0x0a, 0x17, 0x9b, 0x78, 0x4c, 0x28, 0x27, 0x5e, 0x3c, 0xe3, 0xb9, 0xc4, + 0x4f, 0x78, 0x37, 0x8b, 0x11, 0xca, 0xab, 0x0b, 0x2b, 0x26, 0x51, 0x2d, 0x94, 0x33, 0x00, 0x9c, + 0x65, 0x8f, 0x3e, 0x6d, 0xc1, 0x88, 0x73, 0x27, 0xd6, 0x55, 0x4a, 0x45, 0xa8, 0xdc, 0x11, 0x95, + 0x54, 0xaa, 0xf0, 0x29, 0x77, 0xf9, 0xa6, 0x9a, 0x70, 0x9a, 0x29, 0x7a, 0xcb, 0x02, 0x44, 0xb6, + 0x49, 0x43, 0x06, 0xf3, 0x89, 0xbe, 0x0c, 0x14, 0xb1, 0xd3, 0xbc, 0xd4, 0x45, 0x97, 0x4b, 0xf5, + 0xee, 0x76, 0x9c, 0xd3, 0x07, 0xfb, 0x9f, 0x96, 0xd5, 0x82, 0xd2, 0xf1, 0xa3, 0x8e, 0x11, 0xc7, + 0x66, 0x1d, 0x3e, 0x8e, 0x4d, 0xc7, 0x03, 0x74, 0xe7, 0x34, 0xa6, 0x52, 0xa0, 0x4a, 0x0f, 0x28, + 0x05, 0xea, 0x67, 0xac, 0x54, 0x41, 0xa0, 0xa1, 0x8b, 0xaf, 0x14, 0x1b, 0xbb, 0x3a, 0xc1, 0x63, + 0x15, 0x32, 0xd2, 0x3d, 0x1d, 0xa2, 0x42, 0xa5, 0xa9, 0x81, 0x76, 0x20, 0x69, 0xf8, 0xef, 0xcb, + 0x30, 0x64, 0x68, 0xd2, 0x5c, 0xb3, 0xc8, 0x7a, 0xc8, 0xcc, 0xa2, 0xd2, 0x01, 0xcc, 0xa2, 0x9f, + 0x86, 0x7a, 0x43, 0x4a, 0xf9, 0x62, 0x4a, 0xe2, 0x66, 0x75, 0x87, 0x16, 0xf4, 0xaa, 0x09, 0x6b, + 0x9e, 0x68, 0x2e, 0x95, 0x38, 0x23, 0x34, 0x44, 0x85, 0x69, 0x88, 0xbc, 0xcc, 0x16, 0xa1, 0x29, + 0xba, 0x9f, 0x61, 0x75, 0xa3, 0x42, 0x57, 0xbc, 0x97, 0x8c, 0x30, 0xe7, 0x75, 0xa3, 0x96, 0xe7, + 0x65, 0x33, 0x36, 0x71, 0xec, 0x6f, 0x5b, 0xea, 0xe3, 0xde, 0x87, 0x0a, 0x09, 0xb7, 0xd3, 0x15, + 0x12, 0x2e, 0x15, 0x32, 0xcc, 0x3d, 0x4a, 0x23, 0x5c, 0x87, 0xc1, 0x99, 0xa0, 0xdd, 0x76, 0xfc, + 0x26, 0xfa, 0x41, 0x18, 0x6c, 0xf0, 0x9f, 0xc2, 0xb1, 0xc3, 0x8e, 0x07, 0x05, 0x14, 0x4b, 0x18, + 0x7a, 0x0c, 0x2a, 0x4e, 0xd4, 0x92, 0xce, 0x1c, 0x16, 0xda, 0x32, 0x15, 0xb5, 0x62, 0xcc, 0x5a, + 0xed, 0x7f, 0x58, 0x01, 0x98, 0x09, 0xda, 0xa1, 0x13, 0x91, 0xe6, 0x6a, 0xc0, 0x4a, 0xf2, 0x1d, + 0xeb, 0xa1, 0x9a, 0xde, 0x2c, 0x3d, 0xcc, 0x07, 0x6b, 0xc6, 0xe1, 0x4a, 0xf9, 0x3e, 0x1f, 0xae, + 0xf4, 0x38, 0x2f, 0xab, 0x3c, 0x44, 0xe7, 0x65, 0xf6, 0xe7, 0x2c, 0x40, 0x74, 0xd2, 0x04, 0x3e, + 0xf1, 0x13, 0x7d, 0xa0, 0x3d, 0x09, 0xf5, 0x86, 0x6c, 0x15, 0x86, 0x95, 0x16, 0x11, 0x12, 0x80, + 0x35, 0x4e, 0x1f, 0x3b, 0xe4, 0x27, 0xa5, 0xfc, 0x2e, 0xa7, 0xa3, 0x62, 0x99, 0xd4, 0x17, 0xe2, + 0xdc, 0xfe, 0xed, 0x12, 0x3c, 0xc2, 0x55, 0xf2, 0xa2, 0xe3, 0x3b, 0x2d, 0xd2, 0xa6, 0xbd, 0xea, + 0x37, 0x44, 0xa1, 0x41, 0xb7, 0x66, 0xae, 0x8c, 0x72, 0x3d, 0xea, 0xda, 0xe5, 0x6b, 0x8e, 0xaf, + 0xb2, 0x79, 0xdf, 0x4d, 0x30, 0x23, 0x8e, 0x62, 0xa8, 0xc9, 0x1a, 0xf0, 0x42, 0x16, 0x17, 0xc4, + 0x48, 0x89, 0x25, 0xa1, 0x37, 0x09, 0x56, 0x8c, 0xa8, 0xe1, 0xea, 0x05, 0x8d, 0x4d, 0x4c, 0xc2, + 0x80, 0xc9, 0x5d, 0x23, 0xc8, 0x70, 0x41, 0xb4, 0x63, 0x85, 0x61, 0xff, 0xb6, 0x05, 0x59, 0x8d, + 0x64, 0xd4, 0x3e, 0xb3, 0xf6, 0xac, 0x7d, 0x76, 0x80, 0xe2, 0x63, 0x3f, 0x09, 0x43, 0x4e, 0x42, + 0x8d, 0x08, 0xbe, 0xed, 0x2e, 0x1f, 0xee, 0x58, 0x63, 0x31, 0x68, 0xba, 0xeb, 0x2e, 0xdb, 0x6e, + 0x9b, 0xe4, 0xec, 0xff, 0x51, 0x81, 0x53, 0x5d, 0xb9, 0x18, 0xe8, 0x45, 0x18, 0x6e, 0x88, 0xe9, + 0x11, 0x4a, 0x87, 0x56, 0xdd, 0x0c, 0x4a, 0xd3, 0x30, 0x9c, 0xc2, 0xec, 0x63, 0x82, 0xce, 0xc3, + 0xe9, 0x88, 0x6e, 0xf4, 0x3b, 0x64, 0x6a, 0x3d, 0x21, 0xd1, 0x0a, 0x69, 0x04, 0x7e, 0x93, 0x57, + 0xe8, 0x2b, 0x4f, 0x3f, 0x7a, 0x77, 0x77, 0xfc, 0x34, 0xee, 0x06, 0xe3, 0xbc, 0x67, 0x50, 0x08, + 0x23, 0x9e, 0x69, 0x03, 0x8a, 0x0d, 0xc0, 0xa1, 0xcc, 0x47, 0x65, 0x23, 0xa4, 0x9a, 0x71, 0x9a, + 0x41, 0xda, 0x90, 0xac, 0x3e, 0x20, 0x43, 0xf2, 0x53, 0xda, 0x90, 0xe4, 0xe7, 0xef, 0x1f, 0x2a, + 0x38, 0x17, 0xe7, 0xb8, 0x2d, 0xc9, 0x97, 0xa1, 0x26, 0x63, 0x93, 0xfa, 0x8a, 0xe9, 0x31, 0xe9, + 0xf4, 0x90, 0x68, 0xf7, 0x4a, 0x90, 0xb3, 0x09, 0xa1, 0xeb, 0x4c, 0x6b, 0xfc, 0xd4, 0x3a, 0x3b, + 0x98, 0xd6, 0x47, 0xdb, 0x3c, 0x2e, 0x8b, 0xeb, 0xb6, 0x0f, 0x16, 0xbd, 0x89, 0xd2, 0xa1, 0x5a, + 0x2a, 0x45, 0x41, 0x85, 0x6b, 0x5d, 0x04, 0xd0, 0x86, 0x9a, 0x08, 0x40, 0x57, 0xc7, 0xbe, 0xda, + 0x9e, 0xc3, 0x06, 0x16, 0xdd, 0x53, 0xbb, 0x7e, 0x9c, 0x38, 0x9e, 0x77, 0xc5, 0xf5, 0x13, 0xe1, + 0x1c, 0x54, 0x4a, 0x7c, 0x5e, 0x83, 0xb0, 0x89, 0x77, 0xfe, 0x3d, 0xc6, 0x77, 0x39, 0xc8, 0xf7, + 0xdc, 0x80, 0x73, 0x73, 0x6e, 0xa2, 0xd2, 0x26, 0xd4, 0x3c, 0xa2, 0x76, 0x98, 0x4a, 0x03, 0xb2, + 0x7a, 0xa6, 0x01, 0x19, 0x69, 0x0b, 0xa5, 0x74, 0x96, 0x45, 0x36, 0x6d, 0xc1, 0x7e, 0x11, 0xce, + 0xcc, 0xb9, 0xc9, 0x65, 0xd7, 0x23, 0x07, 0x64, 0x62, 0xff, 0xe6, 0x00, 0x0c, 0x9b, 0x89, 0x77, + 0x07, 0xc9, 0x64, 0xfa, 0x02, 0x35, 0xb5, 0xc4, 0xdb, 0xb9, 0xea, 0xd0, 0xec, 0xd6, 0x91, 0xb3, + 0x00, 0xf3, 0x47, 0xcc, 0xb0, 0xb6, 0x34, 0x4f, 0x6c, 0x76, 0x00, 0xdd, 0x81, 0xea, 0x3a, 0x0b, + 0xab, 0x2f, 0x17, 0x11, 0x59, 0x90, 0x37, 0xa2, 0x7a, 0x99, 0xf1, 0xc0, 0x7c, 0xce, 0x8f, 0x6a, + 0xc8, 0x28, 0x9d, 0xab, 0x65, 0x84, 0x82, 0x8a, 0x2c, 0x2d, 0x85, 0xd1, 0x4b, 0xd4, 0x57, 0x0f, + 0x21, 0xea, 0x53, 0x82, 0x77, 0xe0, 0x01, 0x09, 0x5e, 0x96, 0x22, 0x91, 0x6c, 0x30, 0xfb, 0x4d, + 0xc4, 0xae, 0x0f, 0xb2, 0x41, 0x30, 0x52, 0x24, 0x52, 0x60, 0x9c, 0xc5, 0x47, 0x1f, 0x57, 0xa2, + 0xbb, 0x56, 0x84, 0x5f, 0xd5, 0x9c, 0xd1, 0xc7, 0x2d, 0xb5, 0x3f, 0x57, 0x82, 0xd1, 0x39, 0xbf, + 0xb3, 0x3c, 0xb7, 0xdc, 0x59, 0xf3, 0xdc, 0xc6, 0x35, 0xb2, 0x43, 0x45, 0xf3, 0x26, 0xd9, 0x99, + 0x9f, 0x15, 0x2b, 0x48, 0xcd, 0x99, 0x6b, 0xb4, 0x11, 0x73, 0x18, 0x15, 0x46, 0xeb, 0xae, 0xdf, + 0x22, 0x51, 0x18, 0xb9, 0xc2, 0xe5, 0x69, 0x08, 0xa3, 0xcb, 0x1a, 0x84, 0x4d, 0x3c, 0x4a, 0x3b, + 0xb8, 0xe3, 0x93, 0x28, 0x6b, 0xc8, 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, 0x70, + 0x23, 0x13, 0x28, 0xbf, 0xc2, 0x9b, 0xb1, 0x84, 0x53, 0xd4, 0x4d, 0xb2, 0x33, 0x4b, 0x77, 0xbd, + 0x99, 0x7c, 0x99, 0x6b, 0xbc, 0x19, 0x4b, 0x38, 0x2b, 0x2d, 0x98, 0x1e, 0x8e, 0xef, 0xb9, 0xd2, + 0x82, 0xe9, 0xee, 0xf7, 0xd8, 0x3f, 0xff, 0xb2, 0x05, 0xc3, 0x66, 0xb8, 0x15, 0x6a, 0x65, 0x6c, + 0xdc, 0xa5, 0xae, 0xca, 0xb4, 0x3f, 0x9e, 0x77, 0x55, 0x57, 0xcb, 0x4d, 0x82, 0x30, 0x7e, 0x96, + 0xf8, 0x2d, 0xd7, 0x27, 0xec, 0x14, 0x9d, 0x87, 0x69, 0xa5, 0x62, 0xb9, 0x66, 0x82, 0x26, 0x39, + 0x84, 0x91, 0x6c, 0xdf, 0x82, 0x53, 0x5d, 0x49, 0x52, 0x7d, 0x98, 0x16, 0xfb, 0xa6, 0xa8, 0xda, + 0x18, 0x86, 0x28, 0x61, 0x59, 0xde, 0x66, 0x06, 0x4e, 0xf1, 0x85, 0x44, 0x39, 0xad, 0x34, 0x36, + 0x48, 0x5b, 0x25, 0xbe, 0x31, 0xff, 0xfa, 0xcd, 0x2c, 0x10, 0x77, 0xe3, 0xdb, 0x9f, 0xb7, 0x60, + 0x24, 0x95, 0xb7, 0x56, 0x90, 0x11, 0xc4, 0x56, 0x5a, 0xc0, 0xa2, 0xff, 0x58, 0x08, 0x74, 0x99, + 0x29, 0x53, 0xbd, 0xd2, 0x34, 0x08, 0x9b, 0x78, 0xf6, 0x97, 0x4a, 0x50, 0x93, 0x11, 0x14, 0x7d, + 0x74, 0xe5, 0xb3, 0x16, 0x8c, 0xa8, 0x33, 0x0d, 0xe6, 0x2c, 0x2b, 0x15, 0x91, 0x64, 0x40, 0x7b, + 0xa0, 0xb6, 0xdb, 0xfe, 0x7a, 0xa0, 0x2d, 0x72, 0x6c, 0x32, 0xc3, 0x69, 0xde, 0xe8, 0x26, 0x40, + 0xbc, 0x13, 0x27, 0xa4, 0x6d, 0xb8, 0xed, 0x6c, 0x63, 0xc5, 0x4d, 0x34, 0x82, 0x88, 0xd0, 0xf5, + 0x75, 0x3d, 0x68, 0x92, 0x15, 0x85, 0xa9, 0x4d, 0x28, 0xdd, 0x86, 0x0d, 0x4a, 0xf6, 0xdf, 0x2f, + 0xc1, 0xc9, 0x6c, 0x97, 0xd0, 0x87, 0x60, 0x58, 0x72, 0x37, 0xae, 0x1d, 0x93, 0x61, 0x23, 0xc3, + 0xd8, 0x80, 0xdd, 0xdb, 0x1d, 0x1f, 0xef, 0xbe, 0xf6, 0x6d, 0xc2, 0x44, 0xc1, 0x29, 0x62, 0xfc, + 0x60, 0x49, 0x9c, 0x80, 0x4e, 0xef, 0x4c, 0x85, 0xa1, 0x38, 0x1d, 0x32, 0x0e, 0x96, 0x4c, 0x28, + 0xce, 0x60, 0xa3, 0x65, 0x38, 0x63, 0xb4, 0x5c, 0x27, 0x6e, 0x6b, 0x63, 0x2d, 0x88, 0xe4, 0xce, + 0xea, 0x31, 0x1d, 0xd8, 0xd5, 0x8d, 0x83, 0x73, 0x9f, 0xa4, 0xda, 0xbe, 0xe1, 0x84, 0x4e, 0xc3, + 0x4d, 0x76, 0x84, 0x1f, 0x52, 0xc9, 0xa6, 0x19, 0xd1, 0x8e, 0x15, 0x86, 0xbd, 0x08, 0x95, 0x3e, + 0x67, 0x50, 0x5f, 0x16, 0xfd, 0xcb, 0x50, 0xa3, 0xe4, 0xa4, 0x79, 0x57, 0x04, 0xc9, 0x00, 0x6a, + 0xf2, 0xe6, 0x10, 0x64, 0x43, 0xd9, 0x75, 0xe4, 0xd9, 0x9d, 0x7a, 0xad, 0xf9, 0x38, 0xee, 0xb0, + 0x4d, 0x32, 0x05, 0xa2, 0x27, 0xa1, 0x4c, 0xb6, 0xc3, 0xec, 0x21, 0xdd, 0xa5, 0xed, 0xd0, 0x8d, + 0x48, 0x4c, 0x91, 0xc8, 0x76, 0x88, 0xce, 0x43, 0xc9, 0x6d, 0x0a, 0x25, 0x05, 0x02, 0xa7, 0x34, + 0x3f, 0x8b, 0x4b, 0x6e, 0xd3, 0xde, 0x86, 0xba, 0xba, 0xaa, 0x04, 0x6d, 0x4a, 0xd9, 0x6d, 0x15, + 0x11, 0xf2, 0x24, 0xe9, 0xf6, 0x90, 0xda, 0x1d, 0x00, 0x9d, 0xc0, 0x57, 0x94, 0x7c, 0xb9, 0x00, + 0x95, 0x46, 0x20, 0x92, 0x8b, 0x6b, 0x9a, 0x0c, 0x13, 0xda, 0x0c, 0x62, 0xdf, 0x82, 0xd1, 0x6b, + 0x7e, 0x70, 0x87, 0xd5, 0x59, 0x67, 0x65, 0xc5, 0x28, 0xe1, 0x75, 0xfa, 0x23, 0x6b, 0x22, 0x30, + 0x28, 0xe6, 0x30, 0x55, 0x6f, 0xa9, 0xd4, 0xab, 0xde, 0x92, 0xfd, 0x09, 0x0b, 0x86, 0x55, 0x26, + 0xd0, 0xdc, 0xd6, 0x26, 0xa5, 0xdb, 0x8a, 0x82, 0x4e, 0x98, 0xa5, 0xcb, 0x2e, 0x13, 0xc2, 0x1c, + 0x66, 0xa6, 0xc8, 0x95, 0xf6, 0x49, 0x91, 0xbb, 0x00, 0x95, 0x4d, 0xd7, 0x6f, 0x66, 0x6f, 0xc7, + 0xb8, 0xe6, 0xfa, 0x4d, 0xcc, 0x20, 0xb4, 0x0b, 0x27, 0x55, 0x17, 0xa4, 0x42, 0x78, 0x11, 0x86, + 0xd7, 0x3a, 0xae, 0xd7, 0x94, 0xf5, 0xd2, 0x32, 0x9e, 0x92, 0x69, 0x03, 0x86, 0x53, 0x98, 0x74, + 0x5f, 0xb7, 0xe6, 0xfa, 0x4e, 0xb4, 0xb3, 0xac, 0x35, 0x90, 0x12, 0x4a, 0xd3, 0x0a, 0x82, 0x0d, + 0x2c, 0xfb, 0xcd, 0x32, 0x8c, 0xa6, 0xf3, 0xa1, 0xfa, 0xd8, 0x5e, 0x3d, 0x09, 0x55, 0x96, 0x22, + 0x95, 0xfd, 0xb4, 0xbc, 0xc4, 0x18, 0x87, 0xa1, 0x18, 0x06, 0x78, 0x71, 0x85, 0x62, 0x6e, 0x96, + 0x51, 0x9d, 0x54, 0xfe, 0x15, 0x16, 0x4f, 0x26, 0xea, 0x39, 0x08, 0x56, 0xe8, 0xd3, 0x16, 0x0c, + 0x06, 0xa1, 0x59, 0xa7, 0xe7, 0x83, 0x45, 0xe6, 0x8a, 0x89, 0x64, 0x19, 0x61, 0x11, 0xab, 0x4f, + 0x2f, 0x3f, 0x87, 0x64, 0x7d, 0xfe, 0xbd, 0x30, 0x6c, 0x62, 0xee, 0x67, 0x14, 0xd7, 0x4c, 0xa3, + 0xf8, 0xb3, 0xe6, 0xa4, 0x10, 0xd9, 0x70, 0x7d, 0x2c, 0xb7, 0x1b, 0x50, 0x6d, 0xa8, 0x00, 0x80, + 0x43, 0x55, 0xd9, 0x54, 0xd5, 0x0e, 0xd8, 0x21, 0x10, 0xa7, 0x66, 0x7f, 0xdb, 0x32, 0xe6, 0x07, + 0x26, 0xf1, 0x7c, 0x13, 0x45, 0x50, 0x6e, 0x6d, 0x6d, 0x0a, 0x53, 0xf4, 0x6a, 0x41, 0xc3, 0x3b, + 0xb7, 0xb5, 0xa9, 0xe7, 0xb8, 0xd9, 0x8a, 0x29, 0xb3, 0x3e, 0x9c, 0x80, 0xa9, 0xa4, 0xc9, 0xf2, + 0xfe, 0x49, 0x93, 0xf6, 0x5b, 0x25, 0x38, 0xd5, 0x35, 0xa9, 0xd0, 0x1b, 0x50, 0x8d, 0xe8, 0x5b, + 0x8a, 0xd7, 0x5b, 0x28, 0x2c, 0xcd, 0x31, 0x9e, 0x6f, 0x6a, 0xbd, 0x9b, 0x6e, 0xc7, 0x9c, 0x25, + 0xba, 0x0a, 0x48, 0x87, 0xa9, 0x28, 0x0f, 0x24, 0x7f, 0xe5, 0xf3, 0xe2, 0x51, 0x34, 0xd5, 0x85, + 0x81, 0x73, 0x9e, 0x42, 0x2f, 0x65, 0x1d, 0x99, 0xe5, 0xf4, 0xb9, 0xe5, 0x5e, 0x3e, 0x49, 0xfb, + 0x9f, 0x95, 0x60, 0x24, 0x55, 0x36, 0x09, 0x79, 0x50, 0x23, 0x1e, 0x73, 0xea, 0x4b, 0x65, 0x73, + 0xd4, 0x2a, 0xc4, 0x4a, 0x41, 0x5e, 0x12, 0x74, 0xb1, 0xe2, 0xf0, 0x70, 0x1c, 0xae, 0xbf, 0x08, + 0xc3, 0xb2, 0x43, 0x1f, 0x74, 0xda, 0x9e, 0x18, 0x40, 0x35, 0x47, 0x2f, 0x19, 0x30, 0x9c, 0xc2, + 0xb4, 0x7f, 0xa7, 0x0c, 0x63, 0xfc, 0x14, 0xa4, 0xa9, 0x66, 0xde, 0xa2, 0xdc, 0x6f, 0xfd, 0x25, + 0x5d, 0xdc, 0x8c, 0x0f, 0xe4, 0xda, 0x51, 0x8b, 0xfe, 0xe7, 0x33, 0xea, 0x2b, 0x32, 0xeb, 0xab, + 0x99, 0xc8, 0x2c, 0x6e, 0x76, 0xb7, 0x8e, 0xa9, 0x47, 0xdf, 0x5b, 0xa1, 0x5a, 0x7f, 0xa7, 0x04, + 0x27, 0x32, 0x37, 0x2a, 0xa0, 0x37, 0xd3, 0x45, 0x78, 0xad, 0x22, 0x7c, 0xe5, 0x7b, 0x16, 0xd9, + 0x3f, 0x58, 0x29, 0xde, 0x07, 0xb4, 0x54, 0xec, 0xdf, 0x2f, 0xc1, 0x68, 0xfa, 0x2a, 0x88, 0x87, + 0x70, 0xa4, 0xde, 0x0d, 0x75, 0x56, 0xed, 0x9c, 0x5d, 0x71, 0xc9, 0x5d, 0xf2, 0xbc, 0xb0, 0xb4, + 0x6c, 0xc4, 0x1a, 0xfe, 0x50, 0x54, 0x38, 0xb6, 0xff, 0xae, 0x05, 0x67, 0xf9, 0x5b, 0x66, 0xe7, + 0xe1, 0x5f, 0xce, 0x1b, 0xdd, 0x57, 0x8b, 0xed, 0x60, 0xa6, 0x28, 0xdf, 0x7e, 0xe3, 0xcb, 0xae, + 0xd6, 0x13, 0xbd, 0x4d, 0x4f, 0x85, 0x87, 0xb0, 0xb3, 0x07, 0x9a, 0x0c, 0xf6, 0xef, 0x97, 0x41, + 0xdf, 0x26, 0x88, 0x5c, 0x91, 0xe3, 0x58, 0x48, 0x71, 0xc2, 0x95, 0x1d, 0xbf, 0xa1, 0xef, 0x2d, + 0xac, 0x65, 0x52, 0x1c, 0x7f, 0xde, 0x82, 0x21, 0xd7, 0x77, 0x13, 0xd7, 0x61, 0xdb, 0xe8, 0x62, + 0x6e, 0x3a, 0x53, 0xec, 0xe6, 0x39, 0xe5, 0x20, 0x32, 0xcf, 0x71, 0x14, 0x33, 0x6c, 0x72, 0x46, + 0x1f, 0x11, 0xc1, 0xd3, 0xe5, 0xc2, 0xb2, 0x73, 0x6b, 0x99, 0x88, 0xe9, 0x90, 0x1a, 0x5e, 0x49, + 0x54, 0x50, 0x52, 0x3b, 0xa6, 0xa4, 0x54, 0x9d, 0x5b, 0x7d, 0xaf, 0x33, 0x6d, 0xc6, 0x9c, 0x91, + 0x1d, 0x03, 0xea, 0x1e, 0x8b, 0x03, 0x06, 0xa6, 0x4e, 0x42, 0xdd, 0xe9, 0x24, 0x41, 0x9b, 0x0e, + 0x93, 0x38, 0x6a, 0xd2, 0xa1, 0xb7, 0x12, 0x80, 0x35, 0x8e, 0xfd, 0x66, 0x15, 0x32, 0x49, 0x87, + 0x68, 0xdb, 0xbc, 0x09, 0xd3, 0x2a, 0xf6, 0x26, 0x4c, 0xd5, 0x99, 0xbc, 0xdb, 0x30, 0x51, 0x0b, + 0xaa, 0xe1, 0x86, 0x13, 0x4b, 0xb3, 0xfa, 0x65, 0xb5, 0x8f, 0xa3, 0x8d, 0xf7, 0x76, 0xc7, 0x7f, + 0xa2, 0x3f, 0xaf, 0x2b, 0x9d, 0xab, 0x93, 0xbc, 0x78, 0x88, 0x66, 0xcd, 0x68, 0x60, 0x4e, 0xff, + 0x20, 0x77, 0xbd, 0x7d, 0x52, 0x94, 0x75, 0xc7, 0x24, 0xee, 0x78, 0x89, 0x98, 0x0d, 0x2f, 0x17, + 0xb8, 0xca, 0x38, 0x61, 0x9d, 0x2e, 0xcf, 0xff, 0x63, 0x83, 0x29, 0xfa, 0x10, 0xd4, 0xe3, 0xc4, + 0x89, 0x92, 0x43, 0x26, 0xb8, 0xaa, 0x41, 0x5f, 0x91, 0x44, 0xb0, 0xa6, 0x87, 0x5e, 0x61, 0xb5, + 0x5a, 0xdd, 0x78, 0xe3, 0x90, 0x39, 0x0f, 0xb2, 0xae, 0xab, 0xa0, 0x80, 0x0d, 0x6a, 0xe8, 0x22, + 0x00, 0x9b, 0xdb, 0x3c, 0xd0, 0xaf, 0xc6, 0xbc, 0x4c, 0x4a, 0x14, 0x62, 0x05, 0xc1, 0x06, 0x96, + 0xfd, 0xc3, 0x90, 0xae, 0xf7, 0x80, 0xc6, 0x65, 0x79, 0x09, 0xee, 0x85, 0x66, 0xb9, 0x0b, 0xa9, + 0x4a, 0x10, 0xbf, 0x6e, 0x81, 0x59, 0x94, 0x02, 0xbd, 0xce, 0xab, 0x5f, 0x58, 0x45, 0x9c, 0x1c, + 0x1a, 0x74, 0x27, 0x16, 0x9d, 0x30, 0x73, 0x84, 0x2d, 0x4b, 0x60, 0x9c, 0x7f, 0x0f, 0xd4, 0x24, + 0xf4, 0x40, 0x46, 0xdd, 0xc7, 0xe1, 0x74, 0xf6, 0x9e, 0x70, 0x71, 0xea, 0xb4, 0xbf, 0xeb, 0x47, + 0xfa, 0x73, 0x4a, 0xbd, 0xfc, 0x39, 0x7d, 0xdc, 0x87, 0xfa, 0x1b, 0x16, 0x5c, 0xd8, 0xef, 0x3a, + 0x73, 0xf4, 0x18, 0x54, 0xee, 0x38, 0x91, 0x2c, 0xa2, 0xcd, 0x04, 0xe5, 0x2d, 0x27, 0xf2, 0x31, + 0x6b, 0x45, 0x3b, 0x30, 0xc0, 0xa3, 0xc1, 0x84, 0xb5, 0xfe, 0x72, 0xb1, 0x97, 0xab, 0x5f, 0x23, + 0xc6, 0x76, 0x81, 0x47, 0xa2, 0x61, 0xc1, 0xd0, 0xfe, 0x8e, 0x05, 0x68, 0x69, 0x8b, 0x44, 0x91, + 0xdb, 0x34, 0xe2, 0xd7, 0xd8, 0xf5, 0x28, 0xc6, 0x35, 0x28, 0x66, 0x8a, 0x6b, 0xe6, 0x7a, 0x14, + 0xe3, 0x5f, 0xfe, 0xf5, 0x28, 0xa5, 0x83, 0x5d, 0x8f, 0x82, 0x96, 0xe0, 0x6c, 0x9b, 0x6f, 0x37, + 0xf8, 0x95, 0x03, 0x7c, 0xef, 0xa1, 0x12, 0xca, 0xce, 0xdd, 0xdd, 0x1d, 0x3f, 0xbb, 0x98, 0x87, + 0x80, 0xf3, 0x9f, 0xb3, 0xdf, 0x03, 0x88, 0x87, 0xad, 0xcd, 0xe4, 0xc5, 0x20, 0xf5, 0x74, 0xbf, + 0xd8, 0x5f, 0xa9, 0xc2, 0x89, 0x4c, 0x89, 0x55, 0xba, 0xd5, 0xeb, 0x0e, 0x7a, 0x3a, 0xb2, 0xfe, + 0xee, 0xee, 0x5e, 0x5f, 0x61, 0x54, 0x3e, 0x54, 0x5d, 0x3f, 0xec, 0x24, 0xc5, 0xe4, 0x90, 0xf2, + 0x4e, 0xcc, 0x53, 0x82, 0x86, 0xbb, 0x98, 0xfe, 0xc5, 0x9c, 0x4d, 0x91, 0x41, 0x59, 0x29, 0x63, + 0xbc, 0xf2, 0x80, 0xdc, 0x01, 0x9f, 0xd4, 0x21, 0x52, 0xd5, 0x22, 0x1c, 0x8b, 0x99, 0xc9, 0x72, + 0xdc, 0x47, 0xed, 0xbf, 0x56, 0x82, 0x21, 0xe3, 0xa3, 0xa1, 0x5f, 0x4a, 0x97, 0x6c, 0xb2, 0x8a, + 0x7b, 0x25, 0x46, 0x7f, 0x42, 0x17, 0x65, 0xe2, 0xaf, 0xf4, 0x54, 0x77, 0xb5, 0xa6, 0x7b, 0xbb, + 0xe3, 0x27, 0x33, 0xf5, 0x98, 0x52, 0x15, 0x9c, 0xce, 0x7f, 0x0c, 0x4e, 0x64, 0xc8, 0xe4, 0xbc, + 0xf2, 0x6a, 0xfa, 0x1a, 0xf8, 0x23, 0xba, 0xa5, 0xcc, 0x21, 0xfb, 0x06, 0x1d, 0x32, 0x91, 0x46, + 0x17, 0x78, 0xa4, 0x0f, 0x1f, 0x6c, 0x26, 0x5b, 0xb6, 0xd4, 0x67, 0xb6, 0xec, 0xd3, 0x50, 0x0b, + 0x03, 0xcf, 0x6d, 0xb8, 0xaa, 0xaa, 0x20, 0xcb, 0xcf, 0x5d, 0x16, 0x6d, 0x58, 0x41, 0xd1, 0x1d, + 0xa8, 0xab, 0x1b, 0xf3, 0x85, 0x7f, 0xbb, 0xa8, 0x43, 0x1f, 0x65, 0xb4, 0xe8, 0x9b, 0xf0, 0x35, + 0x2f, 0x64, 0xc3, 0x00, 0x53, 0x82, 0x32, 0xf4, 0x9f, 0xf9, 0xde, 0x99, 0x76, 0x8c, 0xb1, 0x80, + 0xd8, 0x5f, 0xaf, 0xc3, 0x99, 0xbc, 0x3a, 0xd7, 0xe8, 0xa3, 0x30, 0xc0, 0xfb, 0x58, 0xcc, 0x55, + 0x0a, 0x79, 0x3c, 0xe6, 0x18, 0x41, 0xd1, 0x2d, 0xf6, 0x1b, 0x0b, 0x9e, 0x82, 0xbb, 0xe7, 0xac, + 0x89, 0x19, 0x72, 0x3c, 0xdc, 0x17, 0x1c, 0xcd, 0x7d, 0xc1, 0xe1, 0xdc, 0x3d, 0x67, 0x0d, 0x6d, + 0x43, 0xb5, 0xe5, 0x26, 0xc4, 0x11, 0x4e, 0x84, 0x5b, 0xc7, 0xc2, 0x9c, 0x38, 0xdc, 0x4a, 0x63, + 0x3f, 0x31, 0x67, 0x88, 0xbe, 0x66, 0xc1, 0x89, 0xb5, 0x74, 0x6a, 0xbc, 0x10, 0x9e, 0xce, 0x31, + 0xd4, 0x32, 0x4f, 0x33, 0xe2, 0xf7, 0x03, 0x65, 0x1a, 0x71, 0xb6, 0x3b, 0xe8, 0x53, 0x16, 0x0c, + 0xae, 0xbb, 0x9e, 0x51, 0xd6, 0xf6, 0x18, 0x3e, 0xce, 0x65, 0xc6, 0x40, 0xef, 0x38, 0xf8, 0xff, + 0x18, 0x4b, 0xce, 0xbd, 0x34, 0xd5, 0xc0, 0x51, 0x35, 0xd5, 0xe0, 0x03, 0xd2, 0x54, 0x9f, 0xb1, + 0xa0, 0xae, 0x46, 0x5a, 0xa4, 0x3b, 0x7f, 0xe8, 0x18, 0x3f, 0x39, 0xf7, 0x9c, 0xa8, 0xbf, 0x58, + 0x33, 0x47, 0x5f, 0xb4, 0x60, 0xc8, 0x79, 0xa3, 0x13, 0x91, 0x26, 0xd9, 0x0a, 0xc2, 0x58, 0x5c, + 0x2e, 0xf8, 0x6a, 0xf1, 0x9d, 0x99, 0xa2, 0x4c, 0x66, 0xc9, 0xd6, 0x52, 0x18, 0x8b, 0xb4, 0x24, + 0xdd, 0x80, 0xcd, 0x2e, 0xd8, 0xbb, 0x25, 0x18, 0xdf, 0x87, 0x02, 0x7a, 0x11, 0x86, 0x83, 0xa8, + 0xe5, 0xf8, 0xee, 0x1b, 0x66, 0xad, 0x0b, 0x65, 0x65, 0x2d, 0x19, 0x30, 0x9c, 0xc2, 0x34, 0x13, + 0xb2, 0x4b, 0xfb, 0x24, 0x64, 0x5f, 0x80, 0x4a, 0x44, 0xc2, 0x20, 0xbb, 0x59, 0x60, 0x29, 0x01, + 0x0c, 0x82, 0x1e, 0x87, 0xb2, 0x13, 0xba, 0x22, 0x10, 0x4d, 0xed, 0x81, 0xa6, 0x96, 0xe7, 0x31, + 0x6d, 0x4f, 0xd5, 0x87, 0xa8, 0xde, 0x97, 0xfa, 0x10, 0x54, 0x0d, 0x88, 0xb3, 0x8b, 0x01, 0xad, + 0x06, 0xd2, 0x67, 0x0a, 0xf6, 0x5b, 0x65, 0x78, 0x7c, 0xcf, 0xf9, 0xa2, 0xe3, 0xf0, 0xac, 0x3d, + 0xe2, 0xf0, 0xe4, 0xf0, 0x94, 0xf6, 0x1b, 0x9e, 0x72, 0x8f, 0xe1, 0xf9, 0x14, 0x5d, 0x06, 0xb2, + 0x46, 0x48, 0x31, 0xd7, 0xc3, 0xf5, 0x2a, 0x39, 0x22, 0x56, 0x80, 0x84, 0x62, 0xcd, 0x97, 0xee, + 0x01, 0x52, 0xc9, 0xc8, 0xd5, 0x22, 0xd4, 0x40, 0xcf, 0x9a, 0x21, 0x7c, 0xee, 0xf7, 0xca, 0x70, + 0xb6, 0x7f, 0xa1, 0x04, 0x4f, 0xf6, 0x21, 0xbd, 0xcd, 0x59, 0x6c, 0xf5, 0x39, 0x8b, 0xbf, 0xb7, + 0x3f, 0x93, 0xfd, 0x57, 0x2c, 0x38, 0xdf, 0x5b, 0x79, 0xa0, 0xe7, 0x60, 0x68, 0x2d, 0x72, 0xfc, + 0xc6, 0x06, 0xbb, 0xf2, 0x52, 0x0e, 0x0a, 0x1b, 0x6b, 0xdd, 0x8c, 0x4d, 0x1c, 0xba, 0xbd, 0xe5, + 0x31, 0x09, 0x06, 0x86, 0x4c, 0x1e, 0xa5, 0xdb, 0xdb, 0xd5, 0x2c, 0x10, 0x77, 0xe3, 0xdb, 0x7f, + 0x5a, 0xca, 0xef, 0x16, 0x37, 0x32, 0x0e, 0xf2, 0x9d, 0xc4, 0x57, 0x28, 0xf5, 0x21, 0x4b, 0xca, + 0xf7, 0x5b, 0x96, 0x54, 0x7a, 0xc9, 0x12, 0x34, 0x0b, 0x27, 0x8d, 0x2b, 0x51, 0x78, 0x42, 0x30, + 0x0f, 0xb8, 0x55, 0x55, 0x32, 0x96, 0x33, 0x70, 0xdc, 0xf5, 0x04, 0x7a, 0x06, 0x6a, 0xae, 0x1f, + 0x93, 0x46, 0x27, 0xe2, 0x81, 0xde, 0x46, 0x12, 0xd6, 0xbc, 0x68, 0xc7, 0x0a, 0xc3, 0xfe, 0xe5, + 0x12, 0x9c, 0xeb, 0x69, 0x67, 0xdd, 0x27, 0xd9, 0x65, 0x7e, 0x8e, 0xca, 0xfd, 0xf9, 0x1c, 0xe6, + 0x20, 0x55, 0xf7, 0x1d, 0xa4, 0x3f, 0xe8, 0x3d, 0x31, 0xa9, 0xcd, 0xfd, 0x7d, 0x3b, 0x4a, 0x2f, + 0xc1, 0x88, 0x13, 0x86, 0x1c, 0x8f, 0xc5, 0x6b, 0x66, 0xaa, 0xe4, 0x4c, 0x99, 0x40, 0x9c, 0xc6, + 0xed, 0x4b, 0x7b, 0xfe, 0x91, 0x05, 0x75, 0x4c, 0xd6, 0xb9, 0x74, 0x40, 0xb7, 0xc5, 0x10, 0x59, + 0x45, 0xd4, 0xd3, 0xa4, 0x03, 0x1b, 0xbb, 0xac, 0xce, 0x64, 0xde, 0x60, 0x77, 0x5f, 0x9d, 0x53, + 0x3a, 0xd0, 0xd5, 0x39, 0xea, 0xf2, 0x94, 0x72, 0xef, 0xcb, 0x53, 0xec, 0x6f, 0x0c, 0xd2, 0xd7, + 0x0b, 0x83, 0x99, 0x88, 0x34, 0x63, 0xfa, 0x7d, 0x3b, 0x91, 0x27, 0x26, 0x89, 0xfa, 0xbe, 0x37, + 0xf0, 0x02, 0xa6, 0xed, 0xa9, 0xa3, 0x98, 0xd2, 0x81, 0x6a, 0x84, 0x94, 0xf7, 0xad, 0x11, 0xf2, + 0x12, 0x8c, 0xc4, 0xf1, 0xc6, 0x72, 0xe4, 0x6e, 0x39, 0x09, 0xb9, 0x46, 0x76, 0x84, 0x95, 0xa5, + 0xf3, 0xfa, 0x57, 0xae, 0x68, 0x20, 0x4e, 0xe3, 0xa2, 0x39, 0x38, 0xa5, 0x2b, 0x75, 0x90, 0x28, + 0x61, 0xd1, 0xfd, 0x7c, 0x26, 0xa8, 0x24, 0x5e, 0x5d, 0xdb, 0x43, 0x20, 0xe0, 0xee, 0x67, 0xa8, + 0x7c, 0x4b, 0x35, 0xd2, 0x8e, 0x0c, 0xa4, 0xe5, 0x5b, 0x8a, 0x0e, 0xed, 0x4b, 0xd7, 0x13, 0x68, + 0x11, 0x4e, 0xf3, 0x89, 0x31, 0x15, 0x86, 0xc6, 0x1b, 0x0d, 0xa6, 0xeb, 0x18, 0xce, 0x75, 0xa3, + 0xe0, 0xbc, 0xe7, 0xd0, 0x0b, 0x30, 0xa4, 0x9a, 0xe7, 0x67, 0xc5, 0x29, 0x82, 0xf2, 0x62, 0x28, + 0x32, 0xf3, 0x4d, 0x6c, 0xe2, 0xa1, 0x0f, 0xc2, 0xa3, 0xfa, 0x2f, 0x4f, 0x01, 0xe3, 0x47, 0x6b, + 0xb3, 0xa2, 0x08, 0x92, 0xba, 0xaa, 0x63, 0x2e, 0x17, 0xad, 0x89, 0x7b, 0x3d, 0x8f, 0xd6, 0xe0, + 0xbc, 0x02, 0x5d, 0xf2, 0x13, 0x96, 0xcf, 0x11, 0x93, 0x69, 0x27, 0x26, 0x37, 0x22, 0x4f, 0xdc, + 0x75, 0xaa, 0x6e, 0x51, 0x9c, 0x73, 0x93, 0x2b, 0x79, 0x98, 0x78, 0x01, 0xef, 0x41, 0x05, 0x4d, + 0x42, 0x9d, 0xf8, 0xce, 0x9a, 0x47, 0x96, 0x66, 0xe6, 0x59, 0x31, 0x25, 0xe3, 0x24, 0xef, 0x92, + 0x04, 0x60, 0x8d, 0xa3, 0x22, 0x4c, 0x87, 0x7b, 0xde, 0xe8, 0xb9, 0x0c, 0x67, 0x5a, 0x8d, 0x90, + 0xda, 0x1e, 0x6e, 0x83, 0x4c, 0x35, 0x58, 0x40, 0x1d, 0xfd, 0x30, 0xbc, 0xc0, 0xa4, 0x0a, 0x9f, + 0x9e, 0x9b, 0x59, 0xee, 0xc2, 0xc1, 0xb9, 0x4f, 0xb2, 0xc0, 0xcb, 0x28, 0xd8, 0xde, 0x19, 0x3b, + 0x9d, 0x09, 0xbc, 0xa4, 0x8d, 0x98, 0xc3, 0xd0, 0x55, 0x40, 0x2c, 0x16, 0xff, 0x4a, 0x92, 0x84, + 0xca, 0xd8, 0x19, 0x3b, 0xc3, 0x5e, 0x49, 0x85, 0x91, 0x5d, 0xee, 0xc2, 0xc0, 0x39, 0x4f, 0xd9, + 0xff, 0xc1, 0x82, 0x11, 0xb5, 0x5e, 0xef, 0x43, 0x36, 0x8a, 0x97, 0xce, 0x46, 0x99, 0x3b, 0xba, + 0xc4, 0x63, 0x3d, 0xef, 0x11, 0xd2, 0xfc, 0xb3, 0x43, 0x00, 0x5a, 0x2a, 0x2a, 0x85, 0x64, 0xf5, + 0x54, 0x48, 0x0f, 0xad, 0x44, 0xca, 0xab, 0x9c, 0x52, 0x7d, 0xb0, 0x95, 0x53, 0x56, 0xe0, 0xac, + 0x34, 0x17, 0xf8, 0x59, 0xd1, 0x95, 0x20, 0x56, 0x02, 0xae, 0x36, 0xfd, 0xb8, 0x20, 0x74, 0x76, + 0x3e, 0x0f, 0x09, 0xe7, 0x3f, 0x9b, 0xb2, 0x52, 0x06, 0xf7, 0xb3, 0x52, 0xf4, 0x9a, 0x5e, 0x58, + 0x97, 0x77, 0x72, 0x64, 0xd6, 0xf4, 0xc2, 0xe5, 0x15, 0xac, 0x71, 0xf2, 0x05, 0x7b, 0xbd, 0x20, + 0xc1, 0x0e, 0x07, 0x16, 0xec, 0x52, 0xc4, 0x0c, 0xf5, 0x14, 0x31, 0xd2, 0x27, 0x3d, 0xdc, 0xd3, + 0x27, 0xfd, 0x3e, 0x18, 0x75, 0xfd, 0x0d, 0x12, 0xb9, 0x09, 0x69, 0xb2, 0xb5, 0xc0, 0xc4, 0x4f, + 0x4d, 0xab, 0xf5, 0xf9, 0x14, 0x14, 0x67, 0xb0, 0xd3, 0x72, 0x71, 0xb4, 0x0f, 0xb9, 0xd8, 0x43, + 0x1b, 0x9d, 0x28, 0x46, 0x1b, 0x9d, 0x3c, 0xba, 0x36, 0x3a, 0x75, 0xac, 0xda, 0x08, 0x15, 0xa2, + 0x8d, 0xfa, 0x12, 0xf4, 0xc6, 0xf6, 0xef, 0xcc, 0x3e, 0xdb, 0xbf, 0x5e, 0xaa, 0xe8, 0xec, 0xa1, + 0x55, 0x51, 0xbe, 0x96, 0x79, 0xe4, 0x50, 0x5a, 0xe6, 0x33, 0x25, 0x38, 0xab, 0xe5, 0x30, 0x9d, + 0xfd, 0xee, 0x3a, 0x95, 0x44, 0xec, 0x5a, 0x27, 0x7e, 0x6e, 0x63, 0x24, 0x47, 0xe9, 0x3c, 0x2b, + 0x05, 0xc1, 0x06, 0x16, 0xcb, 0x31, 0x22, 0x11, 0x2b, 0xa3, 0x9b, 0x15, 0xd2, 0x33, 0xa2, 0x1d, + 0x2b, 0x0c, 0x3a, 0xbf, 0xe8, 0x6f, 0x91, 0xb7, 0x99, 0x2d, 0x16, 0x37, 0xa3, 0x41, 0xd8, 0xc4, + 0x43, 0x4f, 0x73, 0x26, 0x4c, 0x40, 0x50, 0x41, 0x3d, 0x2c, 0xee, 0x79, 0x95, 0x32, 0x41, 0x41, + 0x65, 0x77, 0x58, 0x32, 0x59, 0xb5, 0xbb, 0x3b, 0x2c, 0x04, 0x4a, 0x61, 0xd8, 0xff, 0xd3, 0x82, + 0x73, 0xb9, 0x43, 0x71, 0x1f, 0x94, 0xef, 0x76, 0x5a, 0xf9, 0xae, 0x14, 0xb5, 0xdd, 0x30, 0xde, + 0xa2, 0x87, 0x22, 0xfe, 0x77, 0x16, 0x8c, 0x6a, 0xfc, 0xfb, 0xf0, 0xaa, 0x6e, 0xfa, 0x55, 0x8b, + 0xdb, 0x59, 0xd5, 0xbb, 0xde, 0xed, 0x77, 0x4a, 0xa0, 0x0a, 0x38, 0x4e, 0x35, 0x64, 0x79, 0xdc, + 0x7d, 0x4e, 0x12, 0x77, 0x60, 0x80, 0x1d, 0x84, 0xc6, 0xc5, 0x04, 0x79, 0xa4, 0xf9, 0xb3, 0x43, + 0x55, 0x7d, 0xc8, 0xcc, 0xfe, 0xc6, 0x58, 0x30, 0x64, 0x45, 0x9e, 0xdd, 0x98, 0x4a, 0xf3, 0xa6, + 0x48, 0xcb, 0xd2, 0x45, 0x9e, 0x45, 0x3b, 0x56, 0x18, 0x54, 0x3d, 0xb8, 0x8d, 0xc0, 0x9f, 0xf1, + 0x9c, 0x58, 0xde, 0x65, 0xa8, 0xd4, 0xc3, 0xbc, 0x04, 0x60, 0x8d, 0xc3, 0xce, 0x48, 0xdd, 0x38, + 0xf4, 0x9c, 0x1d, 0x63, 0xff, 0x6c, 0xd4, 0x27, 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, 0x41, 0x3e, 0x25, 0x01, 0x58, 0xe3, 0xd8, 0xbf, 0x6a, 0xc1, 0xe9, 0x9c, 0x41, + 0x2b, 0x30, 0xed, 0x2d, 0xd1, 0xd2, 0x26, 0x4f, 0xb1, 0xff, 0x10, 0x0c, 0x36, 0xc9, 0xba, 0x23, + 0x43, 0xe0, 0x0c, 0xd9, 0x3e, 0xcb, 0x9b, 0xb1, 0x84, 0xdb, 0xff, 0xdd, 0x82, 0x13, 0xe9, 0xbe, + 0xc6, 0x2c, 0x95, 0x84, 0x0f, 0x93, 0x1b, 0x37, 0x82, 0x2d, 0x12, 0xed, 0xd0, 0x37, 0xb7, 0x32, + 0xa9, 0x24, 0x5d, 0x18, 0x38, 0xe7, 0x29, 0x56, 0xbe, 0xb5, 0xa9, 0x46, 0x5b, 0xce, 0xc8, 0x9b, + 0x45, 0xce, 0x48, 0xfd, 0x31, 0xcd, 0xe3, 0x72, 0xc5, 0x12, 0x9b, 0xfc, 0xed, 0xef, 0x54, 0x40, + 0xe5, 0xc5, 0xb2, 0xf8, 0xa3, 0x82, 0xa2, 0xb7, 0x0e, 0x9a, 0x41, 0xa4, 0x26, 0x43, 0x65, 0xaf, + 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, 0x15, 0xb9, 0x83, 0x4d, + 0x61, 0x05, 0x1b, 0x15, 0xb9, 0x83, 0x4d, 0xcc, 0x20, 0xd4, 0x6e, 0xf3, 0x83, 0xa8, 0xcd, 0xae, + 0x88, 0x6f, 0x2a, 0x2e, 0xc2, 0xfa, 0x55, 0x76, 0xdb, 0xf5, 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, 0x9c, 0x90, 0x79, 0xcd, 0xb2, 0x6a, 0xcd, 0x50, 0xba, 0x4a, 0x06, 0x4e, 0x83, + 0x71, 0x16, 0x9f, 0x4a, 0xb5, 0xb6, 0x28, 0x58, 0xc5, 0x8c, 0x65, 0x43, 0xaa, 0xc9, 0x42, 0x56, + 0x58, 0x61, 0xd8, 0x9f, 0x2c, 0x53, 0x2d, 0xdc, 0xa3, 0x50, 0xdb, 0x7d, 0x8b, 0x16, 0x4c, 0xcf, + 0xc8, 0x4a, 0x1f, 0x33, 0xf2, 0x79, 0x18, 0xbe, 0x1d, 0x07, 0xbe, 0x8a, 0xc4, 0xab, 0xf6, 0x8c, + 0xc4, 0x33, 0xb0, 0xf2, 0x23, 0xf1, 0x06, 0x8a, 0x8a, 0xc4, 0x1b, 0x3c, 0x64, 0x24, 0xde, 0xb7, + 0xaa, 0xa0, 0xae, 0x06, 0xb9, 0x4e, 0x92, 0x3b, 0x41, 0xb4, 0xe9, 0xfa, 0x2d, 0x96, 0x0f, 0xfe, + 0x35, 0x0b, 0x86, 0xf9, 0x7a, 0x59, 0x30, 0x33, 0xa9, 0xd6, 0x0b, 0xba, 0x73, 0x22, 0xc5, 0x6c, + 0x62, 0xd5, 0x60, 0x94, 0xb9, 0x4a, 0xd3, 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, 0xd1, 0x59, 0x66, 0x3c, 0x64, 0xff, 0x23, 0xc7, 0x32, 0x36, 0xfd, 0xe4, 0x98, + 0x61, 0x18, 0x74, 0xfd, 0x16, 0x9d, 0x27, 0x22, 0x62, 0xe9, 0x5d, 0x79, 0xb5, 0x14, 0x16, 0x02, + 0xa7, 0x39, 0xed, 0x78, 0x8e, 0xdf, 0x20, 0xd1, 0x3c, 0x47, 0x37, 0x2f, 0x90, 0x66, 0x0d, 0x58, + 0x12, 0xea, 0xba, 0x54, 0xa5, 0xda, 0xcf, 0xa5, 0x2a, 0xe7, 0xdf, 0x0f, 0xa7, 0xba, 0x3e, 0xe6, + 0x81, 0x52, 0xca, 0x0e, 0x9f, 0x8d, 0x66, 0xff, 0xf3, 0x01, 0xad, 0xb4, 0xae, 0x07, 0x4d, 0x7e, + 0xb5, 0x47, 0xa4, 0xbf, 0xa8, 0xb0, 0x71, 0x0b, 0x9c, 0x22, 0xc6, 0x25, 0xd4, 0xaa, 0x11, 0x9b, + 0x2c, 0xe9, 0x1c, 0x0d, 0x9d, 0x88, 0xf8, 0xc7, 0x3d, 0x47, 0x97, 0x15, 0x13, 0x6c, 0x30, 0x44, + 0x1b, 0xa9, 0x9c, 0x92, 0xcb, 0x47, 0xcf, 0x29, 0x61, 0x55, 0xa6, 0xf2, 0xaa, 0xf1, 0x7f, 0xd1, + 0x82, 0x51, 0x3f, 0x35, 0x73, 0x8b, 0x09, 0x23, 0xcd, 0x5f, 0x15, 0xfc, 0x66, 0xa9, 0x74, 0x1b, + 0xce, 0xf0, 0xcf, 0x53, 0x69, 0xd5, 0x03, 0xaa, 0x34, 0x7d, 0x47, 0xd0, 0x40, 0xaf, 0x3b, 0x82, + 0x90, 0xaf, 0x2e, 0x49, 0x1b, 0x2c, 0xfc, 0x92, 0x34, 0xc8, 0xb9, 0x20, 0xed, 0x16, 0xd4, 0x1b, + 0x11, 0x71, 0x92, 0x43, 0xde, 0x97, 0xc5, 0x0e, 0xe8, 0x67, 0x24, 0x01, 0xac, 0x69, 0xd9, 0xff, + 0xbb, 0x02, 0x27, 0xe5, 0x88, 0xc8, 0x10, 0x74, 0xaa, 0x1f, 0x39, 0x5f, 0x6d, 0xdc, 0x2a, 0xfd, + 0x78, 0x45, 0x02, 0xb0, 0xc6, 0xa1, 0xf6, 0x58, 0x27, 0x26, 0x4b, 0x21, 0xf1, 0x17, 0xdc, 0xb5, + 0x58, 0x9c, 0x73, 0xaa, 0x85, 0x72, 0x43, 0x83, 0xb0, 0x89, 0x47, 0x8d, 0x71, 0x6e, 0x17, 0xc7, + 0xd9, 0xf4, 0x15, 0x61, 0x6f, 0x63, 0x09, 0x47, 0xbf, 0x98, 0x5b, 0x39, 0xb6, 0x98, 0xc4, 0xad, + 0xae, 0xc8, 0xfb, 0x03, 0x5e, 0xb1, 0xf8, 0xb7, 0x2c, 0x38, 0xcb, 0x5b, 0xe5, 0x48, 0xde, 0x08, + 0x9b, 0x4e, 0x42, 0xe2, 0x62, 0x2a, 0xb9, 0xe7, 0xf4, 0x4f, 0x3b, 0x79, 0xf3, 0xd8, 0xe2, 0xfc, + 0xde, 0xa0, 0x37, 0x2d, 0x38, 0xb1, 0x99, 0xaa, 0xf9, 0x21, 0x55, 0xc7, 0x51, 0xd3, 0xf1, 0x53, + 0x44, 0xf5, 0x52, 0x4b, 0xb7, 0xc7, 0x38, 0xcb, 0xdd, 0xfe, 0x53, 0x0b, 0x4c, 0x31, 0x7a, 0xff, + 0x4b, 0x85, 0x1c, 0xdc, 0x14, 0x94, 0xd6, 0x65, 0xb5, 0xa7, 0x75, 0xf9, 0x38, 0x94, 0x3b, 0x6e, + 0x53, 0xec, 0x2f, 0xf4, 0xe9, 0xeb, 0xfc, 0x2c, 0xa6, 0xed, 0xf6, 0x3f, 0xa9, 0x6a, 0xbf, 0x85, + 0xc8, 0x8b, 0xfa, 0xbe, 0x78, 0xed, 0x75, 0x55, 0x6c, 0x8c, 0xbf, 0xf9, 0xf5, 0xae, 0x62, 0x63, + 0x3f, 0x76, 0xf0, 0xb4, 0x37, 0x3e, 0x40, 0xbd, 0x6a, 0x8d, 0x0d, 0xee, 0x93, 0xf3, 0x76, 0x1b, + 0x6a, 0x74, 0x0b, 0xc6, 0x1c, 0x90, 0xb5, 0x54, 0xa7, 0x6a, 0x57, 0x44, 0xfb, 0xbd, 0xdd, 0xf1, + 0xf7, 0x1e, 0xbc, 0x5b, 0xf2, 0x69, 0xac, 0xe8, 0xa3, 0x18, 0xea, 0xf4, 0x37, 0x4b, 0xcf, 0x13, + 0x9b, 0xbb, 0x1b, 0x4a, 0x66, 0x4a, 0x40, 0x21, 0xb9, 0x7f, 0x9a, 0x0f, 0xf2, 0xa1, 0xce, 0x6e, + 0xa3, 0x65, 0x4c, 0xf9, 0x1e, 0x70, 0x59, 0x25, 0xc9, 0x49, 0xc0, 0xbd, 0xdd, 0xf1, 0x97, 0x0e, + 0xce, 0x54, 0x3d, 0x8e, 0x35, 0x0b, 0xfb, 0x4b, 0x15, 0x3d, 0x77, 0x45, 0x8d, 0xb9, 0xef, 0x8b, + 0xb9, 0xfb, 0x62, 0x66, 0xee, 0x5e, 0xe8, 0x9a, 0xbb, 0xa3, 0xfa, 0xd6, 0xd4, 0xd4, 0x6c, 0xbc, + 0xdf, 0x86, 0xc0, 0xfe, 0xfe, 0x06, 0x66, 0x01, 0xbd, 0xde, 0x71, 0x23, 0x12, 0x2f, 0x47, 0x1d, + 0xdf, 0xf5, 0x5b, 0x6c, 0x3a, 0xd6, 0x4c, 0x0b, 0x28, 0x05, 0xc6, 0x59, 0x7c, 0xba, 0xa9, 0xa7, + 0xdf, 0xfc, 0x96, 0xb3, 0xc5, 0x67, 0x95, 0x51, 0x76, 0x6b, 0x45, 0xb4, 0x63, 0x85, 0x61, 0x7f, + 0x83, 0x9d, 0x65, 0x1b, 0x79, 0xc1, 0x74, 0x4e, 0x78, 0xec, 0xfa, 0x5f, 0x5e, 0xb3, 0x4b, 0xcd, + 0x09, 0x7e, 0xe7, 0x2f, 0x87, 0xa1, 0x3b, 0x30, 0xb8, 0xc6, 0xef, 0xbf, 0x2b, 0xa6, 0x3e, 0xb9, + 0xb8, 0x4c, 0x8f, 0xdd, 0x72, 0x22, 0x6f, 0xd6, 0xbb, 0xa7, 0x7f, 0x62, 0xc9, 0xcd, 0xfe, 0x66, + 0x05, 0x4e, 0x64, 0x2e, 0x88, 0x4d, 0x55, 0x4b, 0x2d, 0xed, 0x5b, 0x2d, 0xf5, 0xc3, 0x00, 0x4d, + 0x12, 0x7a, 0xc1, 0x0e, 0x33, 0xc7, 0x2a, 0x07, 0x36, 0xc7, 0x94, 0x05, 0x3f, 0xab, 0xa8, 0x60, + 0x83, 0xa2, 0x28, 0x54, 0xc6, 0x8b, 0xaf, 0x66, 0x0a, 0x95, 0x19, 0xb7, 0x18, 0x0c, 0xdc, 0xdf, + 0x5b, 0x0c, 0x5c, 0x38, 0xc1, 0xbb, 0xa8, 0xb2, 0x6f, 0x0f, 0x91, 0x64, 0xcb, 0xf2, 0x17, 0x66, + 0xd3, 0x64, 0x70, 0x96, 0xee, 0x83, 0xbc, 0xff, 0x19, 0xbd, 0x1b, 0xea, 0xf2, 0x3b, 0xc7, 0x63, + 0x75, 0x5d, 0xc1, 0x40, 0x4e, 0x03, 0x76, 0x2f, 0xb3, 0xf8, 0x69, 0x7f, 0xa1, 0x44, 0xad, 0x67, + 0xfe, 0x4f, 0x55, 0xa2, 0x79, 0x0a, 0x06, 0x9c, 0x4e, 0xb2, 0x11, 0x74, 0xdd, 0xa1, 0x37, 0xc5, + 0x5a, 0xb1, 0x80, 0xa2, 0x05, 0xa8, 0x34, 0x75, 0x75, 0x91, 0x83, 0x8c, 0xa2, 0x76, 0x44, 0x3a, + 0x09, 0xc1, 0x8c, 0x0a, 0x7a, 0x0c, 0x2a, 0x89, 0xd3, 0x92, 0x89, 0x4e, 0x2c, 0xb9, 0x75, 0xd5, + 0x69, 0xc5, 0x98, 0xb5, 0x9a, 0x4a, 0xb3, 0xb2, 0x8f, 0xd2, 0x7c, 0x09, 0x46, 0x62, 0xb7, 0xe5, + 0x3b, 0x49, 0x27, 0x22, 0xc6, 0xe1, 0x9a, 0x8e, 0x97, 0x30, 0x81, 0x38, 0x8d, 0x6b, 0xff, 0xe6, + 0x30, 0x9c, 0x59, 0x99, 0x59, 0x94, 0x35, 0xb3, 0x8f, 0x2d, 0x57, 0x29, 0x8f, 0xc7, 0xfd, 0xcb, + 0x55, 0xea, 0xc1, 0xdd, 0x33, 0x72, 0x95, 0x3c, 0x23, 0x57, 0x29, 0x9d, 0x38, 0x52, 0x2e, 0x22, + 0x71, 0x24, 0xaf, 0x07, 0xfd, 0x24, 0x8e, 0x1c, 0x5b, 0xf2, 0xd2, 0x9e, 0x1d, 0x3a, 0x50, 0xf2, + 0x92, 0xca, 0xec, 0x2a, 0x24, 0xa4, 0xbf, 0xc7, 0xa7, 0xca, 0xcd, 0xec, 0x52, 0x59, 0x35, 0x3c, + 0x5d, 0x45, 0x08, 0xd8, 0x57, 0x8b, 0xef, 0x40, 0x1f, 0x59, 0x35, 0x22, 0x63, 0xc6, 0xcc, 0xe4, + 0x1a, 0x2c, 0x22, 0x93, 0x2b, 0xaf, 0x3b, 0xfb, 0x66, 0x72, 0xbd, 0x04, 0x23, 0x0d, 0x2f, 0xf0, + 0xc9, 0x72, 0x14, 0x24, 0x41, 0x23, 0xf0, 0x84, 0x31, 0xad, 0x44, 0xc2, 0x8c, 0x09, 0xc4, 0x69, + 0xdc, 0x5e, 0x69, 0x60, 0xf5, 0xa3, 0xa6, 0x81, 0xc1, 0x03, 0x4a, 0x03, 0xfb, 0x39, 0x9d, 0xb0, + 0x3c, 0xc4, 0xbe, 0xc8, 0x87, 0x8b, 0xff, 0x22, 0xfd, 0x64, 0x2d, 0xa3, 0xb7, 0xf8, 0x25, 0x76, + 0xd4, 0x1c, 0x9d, 0x09, 0xda, 0xd4, 0xdc, 0x1a, 0x66, 0x43, 0xf2, 0xda, 0x31, 0x4c, 0xd8, 0x5b, + 0x2b, 0x9a, 0x8d, 0xba, 0xd8, 0x4e, 0x37, 0xe1, 0x74, 0x47, 0x8e, 0x92, 0x50, 0xfd, 0x95, 0x12, + 0xfc, 0xc0, 0xbe, 0x5d, 0x40, 0x77, 0x00, 0x12, 0xa7, 0x25, 0x26, 0xaa, 0x38, 0xa6, 0x38, 0x62, + 0x50, 0xe3, 0xaa, 0xa4, 0xc7, 0x2b, 0x81, 0xa8, 0xbf, 0xec, 0x00, 0x40, 0xfe, 0x66, 0xb1, 0x8c, + 0x81, 0xd7, 0x55, 0x30, 0x11, 0x07, 0x1e, 0xc1, 0x0c, 0x42, 0xd5, 0x7f, 0x44, 0x5a, 0xfa, 0xd6, + 0x65, 0xf5, 0xf9, 0x30, 0x6b, 0xc5, 0x02, 0x8a, 0x5e, 0x80, 0x21, 0xc7, 0xf3, 0x78, 0x56, 0x0a, + 0x89, 0xc5, 0x2d, 0x36, 0xba, 0x72, 0x9b, 0x06, 0x61, 0x13, 0xcf, 0xfe, 0x93, 0x12, 0x8c, 0xef, + 0x23, 0x53, 0xba, 0xf2, 0xec, 0xaa, 0x7d, 0xe7, 0xd9, 0x89, 0xcc, 0x80, 0x81, 0x1e, 0x99, 0x01, + 0x2f, 0xc0, 0x50, 0x42, 0x9c, 0xb6, 0x08, 0x83, 0x12, 0xfb, 0x6f, 0x7d, 0xee, 0xaa, 0x41, 0xd8, + 0xc4, 0xa3, 0x52, 0x6c, 0xd4, 0x69, 0x34, 0x48, 0x1c, 0xcb, 0xd0, 0x7f, 0xe1, 0xc3, 0x2c, 0x2c, + 0xaf, 0x80, 0xb9, 0x86, 0xa7, 0x52, 0x2c, 0x70, 0x86, 0x65, 0x76, 0xc0, 0xeb, 0x7d, 0x0e, 0xf8, + 0xd7, 0x4b, 0xf0, 0xf8, 0x9e, 0xda, 0xad, 0xef, 0xac, 0x8c, 0x4e, 0x4c, 0xa2, 0xec, 0xc4, 0xb9, + 0x11, 0x93, 0x08, 0x33, 0x08, 0x1f, 0xa5, 0x30, 0x34, 0x6e, 0xb5, 0x2e, 0x3a, 0x65, 0x88, 0x8f, + 0x52, 0x8a, 0x05, 0xce, 0xb0, 0x3c, 0xec, 0xb4, 0xfc, 0x7b, 0x25, 0x78, 0xb2, 0x0f, 0x1b, 0xa0, + 0xc0, 0xd4, 0xaa, 0x74, 0x82, 0x5b, 0xf9, 0x01, 0xe5, 0x21, 0x1e, 0x72, 0xb8, 0xbe, 0x51, 0x82, + 0xf3, 0xbd, 0x55, 0x31, 0xfa, 0x71, 0xba, 0x87, 0x97, 0xb1, 0x4f, 0x66, 0x6e, 0xdc, 0x69, 0xbe, + 0x7f, 0x4f, 0x81, 0x70, 0x16, 0x17, 0x4d, 0x00, 0x84, 0x4e, 0xb2, 0x11, 0x5f, 0xda, 0x76, 0xe3, + 0x44, 0xd4, 0x7e, 0x19, 0xe5, 0x27, 0x46, 0xb2, 0x15, 0x1b, 0x18, 0x94, 0x1d, 0xfb, 0x37, 0x1b, + 0x5c, 0x0f, 0x12, 0xfe, 0x10, 0xdf, 0x46, 0x9c, 0x96, 0x37, 0x65, 0x18, 0x20, 0x9c, 0xc5, 0xa5, + 0xec, 0xd8, 0x99, 0x24, 0xef, 0x28, 0xdf, 0x5f, 0x30, 0x76, 0x0b, 0xaa, 0x15, 0x1b, 0x18, 0xd9, + 0xac, 0xbf, 0xea, 0xfe, 0x59, 0x7f, 0xf6, 0x3f, 0x2e, 0xc1, 0xb9, 0x9e, 0xa6, 0x5c, 0x7f, 0x0b, + 0xf0, 0xe1, 0xcb, 0xd4, 0x3b, 0xdc, 0xdc, 0x39, 0x60, 0x46, 0xd9, 0x1f, 0xf5, 0x98, 0x69, 0x22, + 0xa3, 0xec, 0xf0, 0x29, 0xd9, 0x0f, 0xdf, 0x78, 0x76, 0x25, 0x91, 0x55, 0x0e, 0x90, 0x44, 0x96, + 0xf9, 0x18, 0xd5, 0x3e, 0x17, 0xf2, 0x9f, 0x95, 0x7b, 0x0e, 0x2f, 0xdd, 0xfa, 0xf5, 0xe5, 0x1d, + 0x9d, 0x85, 0x93, 0xae, 0xcf, 0x6e, 0x4d, 0x5a, 0xe9, 0xac, 0x89, 0x72, 0x20, 0xa5, 0xf4, 0x9d, + 0xe5, 0xf3, 0x19, 0x38, 0xee, 0x7a, 0xe2, 0x21, 0x4c, 0xea, 0x3b, 0xdc, 0x90, 0x1e, 0x2c, 0xad, + 0x14, 0x2d, 0xc1, 0x59, 0x39, 0x14, 0x1b, 0x4e, 0x44, 0x9a, 0x42, 0x8d, 0xc4, 0x22, 0x8d, 0xe1, + 0x1c, 0x4f, 0x85, 0xc8, 0x41, 0xc0, 0xf9, 0xcf, 0xb1, 0x8b, 0x6a, 0x82, 0xd0, 0x6d, 0x88, 0x4d, + 0x8e, 0xbe, 0xa8, 0x86, 0x36, 0x62, 0x0e, 0xb3, 0x3f, 0x0c, 0x75, 0xf5, 0xfe, 0x3c, 0x98, 0x5a, + 0x4d, 0xba, 0xae, 0x60, 0x6a, 0x35, 0xe3, 0x0c, 0x2c, 0xfa, 0xb5, 0xa8, 0x49, 0x9c, 0x59, 0x3d, + 0xd7, 0xc8, 0x0e, 0xb3, 0x8f, 0xed, 0x1f, 0x81, 0x61, 0xe5, 0x67, 0xe9, 0xf7, 0xfa, 0x1e, 0xfb, + 0x4b, 0x03, 0x30, 0x92, 0x2a, 0xc9, 0x97, 0x72, 0x6b, 0x5a, 0xfb, 0xba, 0x35, 0x59, 0x70, 0x7c, + 0xc7, 0x97, 0x77, 0x7b, 0x19, 0xc1, 0xf1, 0x1d, 0x9f, 0x60, 0x0e, 0xa3, 0xe6, 0x6d, 0x33, 0xda, + 0xc1, 0x1d, 0x5f, 0x04, 0xb1, 0x2a, 0xf3, 0x76, 0x96, 0xb5, 0x62, 0x01, 0x45, 0x9f, 0xb0, 0x60, + 0x38, 0x66, 0x3e, 0x73, 0xee, 0x14, 0x16, 0x93, 0xee, 0xea, 0xd1, 0x2b, 0x0e, 0xaa, 0xf2, 0x93, + 0x2c, 0x2e, 0xc5, 0x6c, 0xc1, 0x29, 0x8e, 0xe8, 0xd3, 0x16, 0xd4, 0xd5, 0x15, 0x24, 0xe2, 0x02, + 0xbe, 0x95, 0x62, 0x2b, 0x1e, 0x72, 0x6f, 0xa2, 0x3a, 0x7e, 0x50, 0xa5, 0xe7, 0xb0, 0x66, 0x8c, + 0x62, 0xe5, 0xb1, 0x1d, 0x3c, 0x1e, 0x8f, 0x2d, 0xe4, 0x78, 0x6b, 0xdf, 0x0d, 0xf5, 0xb6, 0xe3, + 0xbb, 0xeb, 0x24, 0x4e, 0xb8, 0x13, 0x55, 0x16, 0x62, 0x95, 0x8d, 0x58, 0xc3, 0xa9, 0x42, 0x8e, + 0xd9, 0x8b, 0x25, 0x86, 0xd7, 0x93, 0x29, 0xe4, 0x15, 0xdd, 0x8c, 0x4d, 0x1c, 0xd3, 0x45, 0x0b, + 0x0f, 0xd4, 0x45, 0x3b, 0xb4, 0x8f, 0x8b, 0xf6, 0x1f, 0x58, 0x70, 0x36, 0xf7, 0xab, 0x3d, 0xbc, + 0xe1, 0x86, 0xf6, 0x97, 0xab, 0x70, 0x3a, 0xa7, 0xb6, 0x26, 0xda, 0x31, 0xe7, 0xb3, 0x55, 0xc4, + 0xc9, 0x7d, 0xfa, 0x20, 0x5a, 0x0e, 0x63, 0xce, 0x24, 0x3e, 0xd8, 0x01, 0x89, 0x3e, 0xa4, 0x28, + 0xdf, 0xdf, 0x43, 0x0a, 0x63, 0x5a, 0x56, 0x1e, 0xe8, 0xb4, 0xac, 0xee, 0x3d, 0x2d, 0xd1, 0xaf, + 0x59, 0x30, 0xd6, 0xee, 0x51, 0xd0, 0x5d, 0x38, 0x1e, 0x6f, 0x1e, 0x4f, 0xb9, 0xf8, 0xe9, 0xc7, + 0xee, 0xee, 0x8e, 0xf7, 0xac, 0xa3, 0x8f, 0x7b, 0xf6, 0xca, 0xfe, 0x4e, 0x19, 0x58, 0x61, 0x57, + 0x56, 0x3f, 0x6d, 0x07, 0x7d, 0xdc, 0x2c, 0xd1, 0x6b, 0x15, 0x55, 0x4e, 0x96, 0x13, 0x57, 0x25, + 0x7e, 0xf9, 0x08, 0xe6, 0x55, 0xfc, 0xcd, 0x0a, 0xad, 0x52, 0x1f, 0x42, 0xcb, 0x93, 0xb5, 0x90, + 0xcb, 0xc5, 0xd7, 0x42, 0xae, 0x67, 0xeb, 0x20, 0xef, 0xfd, 0x89, 0x2b, 0x0f, 0xe5, 0x27, 0xfe, + 0x1b, 0x16, 0x17, 0x3c, 0x99, 0xaf, 0xa0, 0x2d, 0x03, 0x6b, 0x0f, 0xcb, 0xe0, 0x19, 0xa8, 0xc5, + 0xc4, 0x5b, 0xbf, 0x42, 0x1c, 0x4f, 0x58, 0x10, 0xfa, 0xd4, 0x58, 0xb4, 0x63, 0x85, 0xc1, 0x2e, + 0x4b, 0xf5, 0xbc, 0xe0, 0xce, 0xa5, 0x76, 0x98, 0xec, 0x08, 0x5b, 0x42, 0x5f, 0x96, 0xaa, 0x20, + 0xd8, 0xc0, 0xb2, 0xff, 0x66, 0x89, 0xcf, 0x40, 0x11, 0x7a, 0xf0, 0x62, 0xe6, 0x7a, 0xbb, 0xfe, + 0x4f, 0xed, 0x3f, 0x0a, 0xd0, 0x50, 0x17, 0xc3, 0x8b, 0x33, 0xa1, 0x2b, 0x47, 0xbe, 0xb5, 0x5a, + 0xd0, 0xd3, 0xaf, 0xa1, 0xdb, 0xb0, 0xc1, 0x2f, 0x25, 0x4b, 0xcb, 0xfb, 0xca, 0xd2, 0x94, 0x58, + 0xa9, 0xec, 0xa3, 0xed, 0xfe, 0xc4, 0x82, 0x94, 0x45, 0x84, 0x42, 0xa8, 0xd2, 0xee, 0xee, 0x14, + 0x73, 0xe7, 0xbd, 0x49, 0x9a, 0x8a, 0x46, 0x31, 0xed, 0xd9, 0x4f, 0xcc, 0x19, 0x21, 0x4f, 0x44, + 0x28, 0xf0, 0x51, 0xbd, 0x5e, 0x1c, 0xc3, 0x2b, 0x41, 0xb0, 0xc9, 0x0f, 0x36, 0x75, 0xb4, 0x83, + 0xfd, 0x22, 0x9c, 0xea, 0xea, 0x14, 0xbb, 0xc9, 0x2a, 0x90, 0x17, 0xfd, 0x1b, 0xd3, 0x95, 0xa5, + 0x4d, 0x62, 0x0e, 0xb3, 0xbf, 0x61, 0xc1, 0xc9, 0x2c, 0x79, 0xf4, 0x96, 0x05, 0xa7, 0xe2, 0x2c, + 0xbd, 0xe3, 0x1a, 0x3b, 0x15, 0x65, 0xd8, 0x05, 0xc2, 0xdd, 0x9d, 0xb0, 0xff, 0x8f, 0x98, 0xfc, + 0xb7, 0x5c, 0xbf, 0x19, 0xdc, 0x51, 0x86, 0x89, 0xd5, 0xd3, 0x30, 0xa1, 0xeb, 0xb1, 0xb1, 0x41, + 0x9a, 0x1d, 0xaf, 0x2b, 0x5f, 0x73, 0x45, 0xb4, 0x63, 0x85, 0xc1, 0xd2, 0xd3, 0x3a, 0xa2, 0x58, + 0x7a, 0x66, 0x52, 0xce, 0x8a, 0x76, 0xac, 0x30, 0xd0, 0xf3, 0x30, 0x6c, 0xbc, 0xa4, 0x9c, 0x97, + 0xcc, 0x20, 0x37, 0x54, 0x66, 0x8c, 0x53, 0x58, 0x68, 0x02, 0x40, 0x19, 0x39, 0x52, 0x45, 0x32, + 0x47, 0x91, 0x92, 0x44, 0x31, 0x36, 0x30, 0x58, 0x32, 0xa8, 0xd7, 0x89, 0x99, 0x8f, 0x7f, 0x40, + 0x17, 0xf0, 0x9c, 0x11, 0x6d, 0x58, 0x41, 0xa9, 0x34, 0x69, 0x3b, 0x7e, 0xc7, 0xf1, 0xe8, 0x08, + 0x89, 0xad, 0x9f, 0x5a, 0x86, 0x8b, 0x0a, 0x82, 0x0d, 0x2c, 0xfa, 0xc6, 0x89, 0xdb, 0x26, 0xaf, + 0x04, 0xbe, 0x8c, 0x0e, 0xd3, 0xc7, 0x3e, 0xa2, 0x1d, 0x2b, 0x0c, 0xfb, 0xbf, 0x5a, 0x70, 0x42, + 0xa7, 0x96, 0xf3, 0x3b, 0xab, 0xcd, 0x9d, 0xaa, 0xb5, 0xef, 0x4e, 0x35, 0x9d, 0x73, 0x5b, 0xea, + 0x2b, 0xe7, 0xd6, 0x4c, 0x87, 0x2d, 0xef, 0x99, 0x0e, 0xfb, 0x83, 0xfa, 0x3e, 0x54, 0x9e, 0x37, + 0x3b, 0x94, 0x77, 0x17, 0x2a, 0xb2, 0x61, 0xa0, 0xe1, 0xa8, 0xba, 0x2a, 0xc3, 0x7c, 0xef, 0x30, + 0x33, 0xc5, 0x90, 0x04, 0xc4, 0x5e, 0x82, 0xba, 0x3a, 0xfd, 0x90, 0x1b, 0x55, 0x2b, 0x7f, 0xa3, + 0xda, 0x57, 0x5a, 0xde, 0xf4, 0xda, 0x37, 0xbf, 0xfb, 0xc4, 0x3b, 0x7e, 0xef, 0xbb, 0x4f, 0xbc, + 0xe3, 0x0f, 0xbf, 0xfb, 0xc4, 0x3b, 0x3e, 0x71, 0xf7, 0x09, 0xeb, 0x9b, 0x77, 0x9f, 0xb0, 0x7e, + 0xef, 0xee, 0x13, 0xd6, 0x1f, 0xde, 0x7d, 0xc2, 0xfa, 0xce, 0xdd, 0x27, 0xac, 0x2f, 0xfe, 0xa7, + 0x27, 0xde, 0xf1, 0x4a, 0x6e, 0x78, 0x20, 0xfd, 0xf1, 0x6c, 0xa3, 0x39, 0xb9, 0x75, 0x91, 0x45, + 0xa8, 0xd1, 0xe5, 0x35, 0x69, 0xcc, 0xa9, 0x49, 0xb9, 0xbc, 0xfe, 0x6f, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xc8, 0x3b, 0x61, 0xf6, 0x75, 0xe0, 0x00, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -6425,6 +6426,13 @@ func (m *ApplicationSetSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.TemplatePatch != nil { + i -= len(*m.TemplatePatch) + copy(dAtA[i:], *m.TemplatePatch) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.TemplatePatch))) + i-- + dAtA[i] = 0x52 + } if len(m.IgnoreApplicationDifferences) > 0 { for iNdEx := len(m.IgnoreApplicationDifferences) - 1; iNdEx >= 0; iNdEx-- { { @@ -14835,6 +14843,10 @@ func (m *ApplicationSetSpec) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } + if m.TemplatePatch != nil { + l = len(*m.TemplatePatch) + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -18117,6 +18129,7 @@ func (this *ApplicationSetSpec) String() string { `GoTemplateOptions:` + fmt.Sprintf("%v", this.GoTemplateOptions) + `,`, `ApplyNestedSelectors:` + fmt.Sprintf("%v", this.ApplyNestedSelectors) + `,`, `IgnoreApplicationDifferences:` + repeatedStringForIgnoreApplicationDifferences + `,`, + `TemplatePatch:` + valueToStringGenerated(this.TemplatePatch) + `,`, `}`, }, "") return s @@ -24385,6 +24398,39 @@ func (m *ApplicationSetSpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TemplatePatch", 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 + } + s := string(dAtA[iNdEx:postIndex]) + m.TemplatePatch = &s + 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 a0e6782be69f9..b0bab3a59d9f9 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -316,6 +316,8 @@ message ApplicationSetSpec { optional bool applyNestedSelectors = 8; repeated ApplicationSetResourceIgnoreDifferences ignoreApplicationDifferences = 9; + + optional string templatePatch = 10; } // ApplicationSetStatus defines the observed state of ApplicationSet diff --git a/pkg/apis/application/v1alpha1/openapi_generated.go b/pkg/apis/application/v1alpha1/openapi_generated.go index 561b361d13d43..ad0399c02db58 100644 --- a/pkg/apis/application/v1alpha1/openapi_generated.go +++ b/pkg/apis/application/v1alpha1/openapi_generated.go @@ -1281,6 +1281,12 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSetSpec(ref common.Referenc }, }, }, + "templatePatch": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, }, Required: []string{"generators", "template"}, }, diff --git a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go index 8732d2f484996..8a2b20e3a99ec 100644 --- a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go @@ -733,6 +733,11 @@ func (in *ApplicationSetSpec) DeepCopyInto(out *ApplicationSetSpec) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.TemplatePatch != nil { + in, out := &in.TemplatePatch, &out.TemplatePatch + *out = new(string) + **out = **in + } return } diff --git a/test/e2e/applicationset_test.go b/test/e2e/applicationset_test.go index f56f9f552e9f6..ee5748a6ff1d2 100644 --- a/test/e2e/applicationset_test.go +++ b/test/e2e/applicationset_test.go @@ -412,6 +412,134 @@ func TestRenderHelmValuesObject(t *testing.T) { } +func TestTemplatePatch(t *testing.T) { + + expectedApp := argov1alpha1.Application{ + TypeMeta: metav1.TypeMeta{ + Kind: application.ApplicationKind, + APIVersion: "argoproj.io/v1alpha1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "my-cluster-guestbook", + Namespace: fixture.TestNamespace(), + Finalizers: []string{"resources-finalizer.argocd.argoproj.io"}, + Annotations: map[string]string{ + "annotation-some-key": "annotation-some-value", + }, + }, + Spec: argov1alpha1.ApplicationSpec{ + Project: "default", + Source: &argov1alpha1.ApplicationSource{ + RepoURL: "https://github.com/argoproj/argocd-example-apps.git", + TargetRevision: "HEAD", + Path: "guestbook", + }, + Destination: argov1alpha1.ApplicationDestination{ + Server: "https://kubernetes.default.svc", + Namespace: "guestbook", + }, + SyncPolicy: &argov1alpha1.SyncPolicy{ + SyncOptions: argov1alpha1.SyncOptions{"CreateNamespace=true"}, + }, + }, + } + + templatePatch := `{ + "metadata": { + "annotations": { + {{- range $k, $v := .annotations }} + "{{ $k }}": "{{ $v }}" + {{- end }} + } + }, + {{- if .createNamespace }} + "spec": { + "syncPolicy": { + "syncOptions": [ + "CreateNamespace=true" + ] + } + } + {{- end }} + } + ` + + var expectedAppNewNamespace *argov1alpha1.Application + var expectedAppNewMetadata *argov1alpha1.Application + + Given(t). + // Create a ListGenerator-based ApplicationSet + When().Create(v1alpha1.ApplicationSet{ObjectMeta: metav1.ObjectMeta{ + Name: "patch-template", + }, + Spec: v1alpha1.ApplicationSetSpec{ + GoTemplate: true, + Template: v1alpha1.ApplicationSetTemplate{ + ApplicationSetTemplateMeta: v1alpha1.ApplicationSetTemplateMeta{Name: "{{.cluster}}-guestbook"}, + Spec: argov1alpha1.ApplicationSpec{ + Project: "default", + Source: &argov1alpha1.ApplicationSource{ + RepoURL: "https://github.com/argoproj/argocd-example-apps.git", + TargetRevision: "HEAD", + Path: "guestbook", + }, + Destination: argov1alpha1.ApplicationDestination{ + Server: "{{.url}}", + Namespace: "guestbook", + }, + }, + }, + TemplatePatch: &templatePatch, + Generators: []v1alpha1.ApplicationSetGenerator{ + { + List: &v1alpha1.ListGenerator{ + Elements: []apiextensionsv1.JSON{{ + Raw: []byte(`{ + "cluster": "my-cluster", + "url": "https://kubernetes.default.svc", + "createNamespace": true, + "annotations": { + "annotation-some-key": "annotation-some-value" + } + }`), + }}, + }, + }, + }, + }, + }).Then().Expect(ApplicationsExist([]argov1alpha1.Application{expectedApp})). + + // Update the ApplicationSet template namespace, and verify it updates the Applications + When(). + And(func() { + expectedAppNewNamespace = expectedApp.DeepCopy() + expectedAppNewNamespace.Spec.Destination.Namespace = "guestbook2" + }). + Update(func(appset *v1alpha1.ApplicationSet) { + appset.Spec.Template.Spec.Destination.Namespace = "guestbook2" + }).Then().Expect(ApplicationsExist([]argov1alpha1.Application{*expectedAppNewNamespace})). + + // Update the metadata fields in the appset template, and make sure it propagates to the apps + When(). + And(func() { + expectedAppNewMetadata = expectedAppNewNamespace.DeepCopy() + expectedAppNewMetadata.ObjectMeta.Labels = map[string]string{ + "label-key": "label-value", + } + }). + Update(func(appset *v1alpha1.ApplicationSet) { + appset.Spec.Template.Labels = map[string]string{"label-key": "label-value"} + }).Then().Expect(ApplicationsExist([]argov1alpha1.Application{*expectedAppNewMetadata})). + + // verify the ApplicationSet status conditions were set correctly + Expect(ApplicationSetHasConditions("patch-template", ExpectedConditions)). + + // Delete the ApplicationSet, and verify it deletes the Applications + When(). + Delete().Then().Expect(ApplicationsDoNotExist([]argov1alpha1.Application{*expectedAppNewMetadata})) + +} + func TestSyncPolicyCreateUpdate(t *testing.T) { expectedApp := argov1alpha1.Application{