Repository: apache/camel-k
Pull request #2345 (2021-06-02 05:37:57)

feat(cli): initial support for describing Kamelets with kamel describe #2312
Two things that are not included in this initial commit:

1. Pretty-print the `Flow` content; Flow is dumped as string with this commit but we might want to see it in a more readable format. So far I haven't found an easy way to render raw contents which can be either YAML or JSON.
2. Print `Type Schema`; Do we want to see this with `kamel describe`?  The output can be very lengthy if we do. If we really want to do, we could introduce `--show-type-schema` option.

Also I'll tackle listing kamelets feature #2312 in another commit.


Patch:
diff --git a/.github/workflows/kubernetes.yml b/.github/workflows/kubernetes.yml
index e074b617b..95c07c71a 100644
--- a/.github/workflows/kubernetes.yml
+++ b/.github/workflows/kubernetes.yml
@@ -94,6 +94,14 @@ jobs:
         make IMAGE_NAME=${LOCAL_IMAGE} PACKAGE_ARTIFACTS_STRATEGY=download build package-artifacts images images-push
 
         sudo mv ./kamel /usr/local/bin
+    - name: Install Service Binding
+      run: |
+        echo "Installing Service Binding Operator"
+
+        export SERVICE_BINDING_VERSION=v0.7.1
+        kubectl create -f https://github.com/redhat-developer/service-binding-operator/releases/download/$SERVICE_BINDING_VERSION/release.yaml
+        echo "Waiting for all pods to be ready in service-binding-operator"
+        kubectl wait --for=condition=Ready pod --all -n service-binding-operator --timeout=60s
     - name: Run IT
       # Disable registry tests as not compatible with KinD
       #env:
@@ -119,3 +127,4 @@ jobs:
 
         # Then run integration tests
         make test-integration
+        make test-service-binding
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1c9dcbef7..9d4d0dafa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@
 - Timeout when debugging the operator locally [\#2315](https://github.com/apache/camel-k/issues/2315)
 - Creating an IntegrationPlatform with the route Trait Crashes the Operator [\#2313](https://github.com/apache/camel-k/issues/2313)
 - Integration container build errors are absent from the log messages [\#2306](https://github.com/apache/camel-k/issues/2306)
+- Kamel delete should consider KameletBindings [\#2305](https://github.com/apache/camel-k/issues/2305)
 - Structured logs: remaining bits [\#2286](https://github.com/apache/camel-k/issues/2286)
 - \[Docs\] Broken links on autogenerated API [\#2280](https://github.com/apache/camel-k/issues/2280)
 - Normalize Spectrum build logs [\#2276](https://github.com/apache/camel-k/issues/2276)
@@ -38,9 +39,11 @@
 
 **Merged pull requests:**
 
+- chore\(api\): Encapsulate Maven properties [\#2344](https://github.com/apache/camel-k/pull/2344) ([astefanutti](https://github.com/astefanutti))
 - Fix \#2165: allow configuring traits via annotations [\#2338](https://github.com/apache/camel-k/pull/2338) ([nicolaferraro](https://github.com/nicolaferraro))
 - kamelets: add condition to report when an integration is stuck waiting for them [\#2337](https://github.com/apache/camel-k/pull/2337) ([lburgazzoli](https://github.com/lburgazzoli))
 - doc\(dev\): add instruction for deploying custom images to remote clusters [\#2336](https://github.com/apache/camel-k/pull/2336) ([tadayosi](https://github.com/tadayosi))
+- feat\(cli\): make kamel delete command aware of KameletBindings [\#2332](https://github.com/apache/camel-k/pull/2332) ([tadayosi](https://github.com/tadayosi))
 - feat\(cmd/run\): property configuration refactoring [\#2329](https://github.com/apache/camel-k/pull/2329) ([squakez](https://github.com/squakez))
 - Added K3s to the registry section of navbar [\#2325](https://github.com/apache/camel-k/pull/2325) ([oscerd](https://github.com/oscerd))
 - Nav Bar: Titles fixed [\#2324](https://github.com/apache/camel-k/pull/2324) ([oscerd](https://github.com/oscerd))
diff --git a/config/crd/bases/camel.apache.org_builds.yaml b/config/crd/bases/camel.apache.org_builds.yaml
index 09b377e1d..c5e636430 100644
--- a/config/crd/bases/camel.apache.org_builds.yaml
+++ b/config/crd/bases/camel.apache.org_builds.yaml
@@ -162,6 +162,45 @@ spec:
                                 type: string
                               description: The Maven properties.
                               type: object
+                            repositories:
+                              items:
+                                description: Repository --
+                                properties:
+                                  id:
+                                    type: string
+                                  name:
+                                    type: string
+                                  releases:
+                                    description: RepositoryPolicy --
+                                    properties:
+                                      checksumPolicy:
+                                        type: string
+                                      enabled:
+                                        type: boolean
+                                      updatePolicy:
+                                        type: string
+                                    required:
+                                    - enabled
+                                    type: object
+                                  snapshots:
+                                    description: RepositoryPolicy --
+                                    properties:
+                                      checksumPolicy:
+                                        type: string
+                                      enabled:
+                                        type: boolean
+                                      updatePolicy:
+                                        type: string
+                                    required:
+                                    - enabled
+                                    type: object
+                                  url:
+                                    type: string
+                                required:
+                                - id
+                                - url
+                                type: object
+                              type: array
                             settings:
                               description: A reference to the ConfigMap or Secret
                                 key that contains the Maven settings.
diff --git a/config/crd/bases/camel.apache.org_integrationplatforms.yaml b/config/crd/bases/camel.apache.org_integrationplatforms.yaml
index 92823059d..9c9779f52 100644
--- a/config/crd/bases/camel.apache.org_integrationplatforms.yaml
+++ b/config/crd/bases/camel.apache.org_integrationplatforms.yaml
@@ -113,6 +113,45 @@ spec:
                           type: string
                         description: The Maven properties.
                         type: object
+                      repositories:
+                        items:
+                          description: Repository --
+                          properties:
+                            id:
+                              type: string
+                            name:
+                              type: string
+                            releases:
+                              description: RepositoryPolicy --
+                              properties:
+                                checksumPolicy:
+                                  type: string
+                                enabled:
+                                  type: boolean
+                                updatePolicy:
+                                  type: string
+                              required:
+                              - enabled
+                              type: object
+                            snapshots:
+                              description: RepositoryPolicy --
+                              properties:
+                                checksumPolicy:
+                                  type: string
+                                enabled:
+                                  type: boolean
+                                updatePolicy:
+                                  type: string
+                              required:
+                              - enabled
+                              type: object
+                            url:
+                              type: string
+                          required:
+                          - id
+                          - url
+                          type: object
+                        type: array
                       settings:
                         description: A reference to the ConfigMap or Secret key that
                           contains the Maven settings.
@@ -290,6 +329,45 @@ spec:
                           type: string
                         description: The Maven properties.
                         type: object
+                      repositories:
+                        items:
+                          description: Repository --
+                          properties:
+                            id:
+                              type: string
+                            name:
+                              type: string
+                            releases:
+                              description: RepositoryPolicy --
+                              properties:
+                                checksumPolicy:
+                                  type: string
+                                enabled:
+                                  type: boolean
+                                updatePolicy:
+                                  type: string
+                              required:
+                              - enabled
+                              type: object
+                            snapshots:
+                              description: RepositoryPolicy --
+                              properties:
+                                checksumPolicy:
+                                  type: string
+                                enabled:
+                                  type: boolean
+                                updatePolicy:
+                                  type: string
+                              required:
+                              - enabled
+                              type: object
+                            url:
+                              type: string
+                          required:
+                          - id
+                          - url
+                          type: object
+                        type: array
                       settings:
                         description: A reference to the ConfigMap or Secret key that
                           contains the Maven settings.
diff --git a/deploy/olm-catalog/camel-k-dev/1.5.0-snapshot/camel.apache.org_builds.yaml b/deploy/olm-catalog/camel-k-dev/1.5.0-snapshot/camel.apache.org_builds.yaml
index 09b377e1d..c5e636430 100644
--- a/deploy/olm-catalog/camel-k-dev/1.5.0-snapshot/camel.apache.org_builds.yaml
+++ b/deploy/olm-catalog/camel-k-dev/1.5.0-snapshot/camel.apache.org_builds.yaml
@@ -162,6 +162,45 @@ spec:
                                 type: string
                               description: The Maven properties.
                               type: object
+                            repositories:
+                              items:
+                                description: Repository --
+                                properties:
+                                  id:
+                                    type: string
+                                  name:
+                                    type: string
+                                  releases:
+                                    description: RepositoryPolicy --
+                                    properties:
+                                      checksumPolicy:
+                                        type: string
+                                      enabled:
+                                        type: boolean
+                                      updatePolicy:
+                                        type: string
+                                    required:
+                                    - enabled
+                                    type: object
+                                  snapshots:
+                                    description: RepositoryPolicy --
+                                    properties:
+                                      checksumPolicy:
+                                        type: string
+                                      enabled:
+                                        type: boolean
+                                      updatePolicy:
+                                        type: string
+                                    required:
+                                    - enabled
+                                    type: object
+                                  url:
+                                    type: string
+                                required:
+                                - id
+                                - url
+                                type: object
+                              type: array
                             settings:
                               description: A reference to the ConfigMap or Secret
                                 key that contains the Maven settings.
diff --git a/deploy/olm-catalog/camel-k-dev/1.5.0-snapshot/camel.apache.org_integrationplatforms.yaml b/deploy/olm-catalog/camel-k-dev/1.5.0-snapshot/camel.apache.org_integrationplatforms.yaml
index 92823059d..9c9779f52 100644
--- a/deploy/olm-catalog/camel-k-dev/1.5.0-snapshot/camel.apache.org_integrationplatforms.yaml
+++ b/deploy/olm-catalog/camel-k-dev/1.5.0-snapshot/camel.apache.org_integrationplatforms.yaml
@@ -113,6 +113,45 @@ spec:
                           type: string
                         description: The Maven properties.
                         type: object
+                      repositories:
+                        items:
+                          description: Repository --
+                          properties:
+                            id:
+                              type: string
+                            name:
+                              type: string
+                            releases:
+                              description: RepositoryPolicy --
+                              properties:
+                                checksumPolicy:
+                                  type: string
+                                enabled:
+                                  type: boolean
+                                updatePolicy:
+                                  type: string
+                              required:
+                              - enabled
+                              type: object
+                            snapshots:
+                              description: RepositoryPolicy --
+                              properties:
+                                checksumPolicy:
+                                  type: string
+                                enabled:
+                                  type: boolean
+                                updatePolicy:
+                                  type: string
+                              required:
+                              - enabled
+                              type: object
+                            url:
+                              type: string
+                          required:
+                          - id
+                          - url
+                          type: object
+                        type: array
                       settings:
                         description: A reference to the ConfigMap or Secret key that
                           contains the Maven settings.
@@ -290,6 +329,45 @@ spec:
                           type: string
                         description: The Maven properties.
                         type: object
+                      repositories:
+                        items:
+                          description: Repository --
+                          properties:
+                            id:
+                              type: string
+                            name:
+                              type: string
+                            releases:
+                              description: RepositoryPolicy --
+                              properties:
+                                checksumPolicy:
+                                  type: string
+                                enabled:
+                                  type: boolean
+                                updatePolicy:
+                                  type: string
+                              required:
+                              - enabled
+                              type: object
+                            snapshots:
+                              description: RepositoryPolicy --
+                              properties:
+                                checksumPolicy:
+                                  type: string
+                                enabled:
+                                  type: boolean
+                                updatePolicy:
+                                  type: string
+                              required:
+                              - enabled
+                              type: object
+                            url:
+                              type: string
+                          required:
+                          - id
+                          - url
+                          type: object
+                        type: array
                       settings:
                         description: A reference to the ConfigMap or Secret key that
                           contains the Maven settings.
diff --git a/docs/modules/ROOT/pages/contributing/developers.adoc b/docs/modules/ROOT/pages/contributing/developers.adoc
index cfad1c451..75c47e484 100644
--- a/docs/modules/ROOT/pages/contributing/developers.adoc
+++ b/docs/modules/ROOT/pages/contributing/developers.adoc
@@ -30,7 +30,7 @@ You can run checks via `make lint`, or you can install a GIT pre-commit hook and
 [[checking-out]]
 == Checking Out the Sources
 
-You can create a fork of this project from GitHub, then clone your fork with the `git` command line tool.
+You can create a fork of https://github.com/apache/camel-k[this project] from GitHub, then clone your fork with the `git` command line tool.
 
 [[structure]]
 == Structure
diff --git a/helm/camel-k/crds/crd-build.yaml b/helm/camel-k/crds/crd-build.yaml
index 09b377e1d..c5e636430 100644
--- a/helm/camel-k/crds/crd-build.yaml
+++ b/helm/camel-k/crds/crd-build.yaml
@@ -162,6 +162,45 @@ spec:
                                 type: string
                               description: The Maven properties.
                               type: object
+                            repositories:
+                              items:
+                                description: Repository --
+                                properties:
+                                  id:
+                                    type: string
+                                  name:
+                                    type: string
+                                  releases:
+                                    description: RepositoryPolicy --
+                                    properties:
+                                      checksumPolicy:
+                                        type: string
+                                      enabled:
+                                        type: boolean
+                                      updatePolicy:
+                                        type: string
+                                    required:
+                                    - enabled
+                                    type: object
+                                  snapshots:
+                                    description: RepositoryPolicy --
+                                    properties:
+                                      checksumPolicy:
+                                        type: string
+                                      enabled:
+                                        type: boolean
+                                      updatePolicy:
+                                        type: string
+                                    required:
+                                    - enabled
+                                    type: object
+                                  url:
+                                    type: string
+                                required:
+                                - id
+                                - url
+                                type: object
+                              type: array
                             settings:
                               description: A reference to the ConfigMap or Secret
                                 key that contains the Maven settings.
diff --git a/helm/camel-k/crds/crd-integration-platform.yaml b/helm/camel-k/crds/crd-integration-platform.yaml
index 92823059d..9c9779f52 100644
--- a/helm/camel-k/crds/crd-integration-platform.yaml
+++ b/helm/camel-k/crds/crd-integration-platform.yaml
@@ -113,6 +113,45 @@ spec:
                           type: string
                         description: The Maven properties.
                         type: object
+                      repositories:
+                        items:
+                          description: Repository --
+                          properties:
+                            id:
+                              type: string
+                            name:
+                              type: string
+                            releases:
+                              description: RepositoryPolicy --
+                              properties:
+                                checksumPolicy:
+                                  type: string
+                                enabled:
+                                  type: boolean
+                                updatePolicy:
+                                  type: string
+                              required:
+                              - enabled
+                              type: object
+                            snapshots:
+                              description: RepositoryPolicy --
+                              properties:
+                                checksumPolicy:
+                                  type: string
+                                enabled:
+                                  type: boolean
+                                updatePolicy:
+                                  type: string
+                              required:
+                              - enabled
+                              type: object
+                            url:
+                              type: string
+                          required:
+                          - id
+                          - url
+                          type: object
+                        type: array
                       settings:
                         description: A reference to the ConfigMap or Secret key that
                           contains the Maven settings.
@@ -290,6 +329,45 @@ spec:
                           type: string
                         description: The Maven properties.
                         type: object
+                      repositories:
+                        items:
+                          description: Repository --
+                          properties:
+                            id:
+                              type: string
+                            name:
+                              type: string
+                            releases:
+                              description: RepositoryPolicy --
+                              properties:
+                                checksumPolicy:
+                                  type: string
+                                enabled:
+                                  type: boolean
+                                updatePolicy:
+                                  type: string
+                              required:
+                              - enabled
+                              type: object
+                            snapshots:
+                              description: RepositoryPolicy --
+                              properties:
+                                checksumPolicy:
+                                  type: string
+                                enabled:
+                                  type: boolean
+                                updatePolicy:
+                                  type: string
+                              required:
+                              - enabled
+                              type: object
+                            url:
+                              type: string
+                          required:
+                          - id
+                          - url
+                          type: object
+                        type: array
                       settings:
                         description: A reference to the ConfigMap or Secret key that
                           contains the Maven settings.
diff --git a/pkg/apis/camel/v1/common_types.go b/pkg/apis/camel/v1/common_types.go
index ac83542e1..2bcc733fe 100644
--- a/pkg/apis/camel/v1/common_types.go
+++ b/pkg/apis/camel/v1/common_types.go
@@ -103,7 +103,8 @@ type MavenSpec struct {
 	// Note that the root CA certificates are also imported into the created keystore.
 	CASecret *corev1.SecretKeySelector `json:"caSecret,omitempty"`
 	// Deprecated: use IntegrationPlatform.Spec.Build.Timeout instead
-	Timeout *metav1.Duration `json:"timeout,omitempty"`
+	Timeout      *metav1.Duration `json:"timeout,omitempty"`
+	Repositories []Repository     `json:"repositories,omitempty"`
 }
 
 // ValueSource --
diff --git a/pkg/apis/camel/v1/integrationplatform_types_support.go b/pkg/apis/camel/v1/integrationplatform_types_support.go
index 23acc1ac8..41de3ea62 100644
--- a/pkg/apis/camel/v1/integrationplatform_types_support.go
+++ b/pkg/apis/camel/v1/integrationplatform_types_support.go
@@ -195,14 +195,6 @@ func (b IntegrationPlatformBuildSpec) GetTimeout() metav1.Duration {
 	return *b.Timeout
 }
 
-// GetTimeout returns the specified duration or a default one
-func (m MavenSpec) GetTimeout() metav1.Duration {
-	if m.Timeout == nil {
-		return metav1.Duration{}
-	}
-	return *m.Timeout
-}
-
 var _ ResourceCondition = IntegrationPlatformCondition{}
 
 // GetConditions --
diff --git a/pkg/apis/camel/v1/maven_types.go b/pkg/apis/camel/v1/maven_types.go
new file mode 100644
index 000000000..426f113d1
--- /dev/null
+++ b/pkg/apis/camel/v1/maven_types.go
@@ -0,0 +1,34 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package v1
+
+// Repository --
+type Repository struct {
+	ID        string           `xml:"id" json:"id"`
+	Name      string           `xml:"name,omitempty" json:"name,omitempty"`
+	URL       string           `xml:"url" json:"url"`
+	Snapshots RepositoryPolicy `xml:"snapshots,omitempty" json:"snapshots,omitempty"`
+	Releases  RepositoryPolicy `xml:"releases,omitempty" json:"releases,omitempty"`
+}
+
+// RepositoryPolicy --
+type RepositoryPolicy struct {
+	Enabled        bool   `xml:"enabled" json:"enabled"`
+	UpdatePolicy   string `xml:"updatePolicy,omitempty" json:"updatePolicy,omitempty"`
+	ChecksumPolicy string `xml:"checksumPolicy,omitempty" json:"checksumPolicy,omitempty"`
+}
diff --git a/pkg/apis/camel/v1/zz_generated.deepcopy.go b/pkg/apis/camel/v1/zz_generated.deepcopy.go
index 270d0fe72..0eb99d153 100644
--- a/pkg/apis/camel/v1/zz_generated.deepcopy.go
+++ b/pkg/apis/camel/v1/zz_generated.deepcopy.go
@@ -1272,6 +1272,11 @@ func (in *MavenSpec) DeepCopyInto(out *MavenSpec) {
 		*out = new(metav1.Duration)
 		**out = **in
 	}
+	if in.Repositories != nil {
+		in, out := &in.Repositories, &out.Repositories
+		*out = make([]Repository, len(*in))
+		copy(*out, *in)
+	}
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MavenSpec.
@@ -1402,6 +1407,38 @@ func (in RawMessage) DeepCopy() RawMessage {
 	return *out
 }
 
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Repository) DeepCopyInto(out *Repository) {
+	*out = *in
+	out.Snapshots = in.Snapshots
+	out.Releases = in.Releases
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Repository.
+func (in *Repository) DeepCopy() *Repository {
+	if in == nil {
+		return nil
+	}
+	out := new(Repository)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *RepositoryPolicy) DeepCopyInto(out *RepositoryPolicy) {
+	*out = *in
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RepositoryPolicy.
+func (in *RepositoryPolicy) DeepCopy() *RepositoryPolicy {
+	if in == nil {
+		return nil
+	}
+	out := new(RepositoryPolicy)
+	in.DeepCopyInto(out)
+	return out
+}
+
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *ResourceSpec) DeepCopyInto(out *ResourceSpec) {
 	*out = *in
diff --git a/pkg/apis/camel/v1alpha1/jsonschema_types.go b/pkg/apis/camel/v1alpha1/jsonschema_types.go
index db3b10a43..038307b41 100644
--- a/pkg/apis/camel/v1alpha1/jsonschema_types.go
+++ b/pkg/apis/camel/v1alpha1/jsonschema_types.go
@@ -123,6 +123,18 @@ func (m *RawMessage) UnmarshalJSON(data []byte) error {
 	return nil
 }
 
+// String returns a string representation of RawMessage
+func (m *RawMessage) String() string {
+	if m == nil {
+		return ""
+	}
+	b, err := m.MarshalJSON()
+	if err != nil {
+		return ""
+	}
+	return string(b)
+}
+
 var _ json.Marshaler = (*RawMessage)(nil)
 var _ json.Unmarshaler = (*RawMessage)(nil)
 
@@ -133,4 +145,4 @@ type JSONSchemaURL string
 type ExternalDocumentation struct {
 	Description string `json:"description,omitempty""`
 	URL         string `json:"url,omitempty"`
-}
\ No newline at end of file
+}
diff --git a/pkg/apis/camel/v1alpha1/kamelet_types_support.go b/pkg/apis/camel/v1alpha1/kamelet_types_support.go
index 9e6f54026..52635f28e 100644
--- a/pkg/apis/camel/v1alpha1/kamelet_types_support.go
+++ b/pkg/apis/camel/v1alpha1/kamelet_types_support.go
@@ -18,6 +18,8 @@ limitations under the License.
 package v1alpha1
 
 import (
+	"sort"
+
 	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -137,6 +139,45 @@ func (in *KameletStatus) RemoveCondition(condType KameletConditionType) {
 	in.Conditions = newConditions
 }
 
+// SortedDefinitionPropertiesKeys returns the sorted keys of the Kamelet definition properties
+func (k *Kamelet) SortedDefinitionPropertiesKeys() []string {
+	if k.Spec.Definition == nil {
+		return []string{}
+	}
+	props := k.Spec.Definition.Properties
+	if len(props) == 0 {
+		return []string{}
+	}
+	res := make([]string, len(props))
+	i := 0
+	for key := range props {
+		res[i] = string(key)
+		i++
+	}
+	sort.Strings(res)
+	return res
+}
+
+// SortedTypesKeys returns the sorted keys of the Kamelet spec types
+func (k *Kamelet) SortedTypesKeys() []EventSlot {
+	types := k.Spec.Types
+	if len(types) == 0 {
+		return []EventSlot{}
+	}
+	strs := make([]string, len(types))
+	i := 0
+	for key := range types {
+		strs[i] = string(key)
+		i++
+	}
+	sort.Strings(strs)
+	res := make([]EventSlot, len(types))
+	for i, s := range strs {
+		res[i] = EventSlot(s)
+	}
+	return res
+}
+
 func ValidKameletName(name string) bool {
 	return !reservedKameletNames[name]
 }
@@ -150,3 +191,27 @@ func ValidKameletProperties(kamelet *Kamelet) bool {
 	}
 	return true
 }
+
+// NewKamelet creates a new kamelet
+func NewKamelet(namespace string, name string) Kamelet {
+	return Kamelet{
+		TypeMeta: metav1.TypeMeta{
+			APIVersion: SchemeGroupVersion.String(),
+			Kind:       KameletKind,
+		},
+		ObjectMeta: metav1.ObjectMeta{
+			Namespace: namespace,
+			Name:      name,
+		},
+	}
+}
+
+// NewKameletList creates a new list of kamelets
+func NewKameletList() KameletList {
+	return KameletList{
+		TypeMeta: metav1.TypeMeta{
+			APIVersion: SchemeGroupVersion.String(),
+			Kind:       KameletKind,
+		},
+	}
+}
diff --git a/pkg/builder/quarkus.go b/pkg/builder/quarkus.go
index 4678be565..f9bc2d9cd 100644
--- a/pkg/builder/quarkus.go
+++ b/pkg/builder/quarkus.go
@@ -18,6 +18,7 @@ limitations under the License.
 package builder
 
 import (
+	"context"
 	"fmt"
 	"os"
 	"path"
@@ -81,6 +82,9 @@ func generateQuarkusProject(ctx *builderContext) error {
 	// Add all the properties from the build configuration
 	p.Properties.AddAll(ctx.Build.Maven.Properties)
 
+	// Add Maven repositories
+	p.Repositories = append(p.Repositories, ctx.Build.Maven.Repositories...)
+
 	ctx.Maven.Project = p
 
 	return nil
@@ -142,10 +146,9 @@ func GenerateQuarkusProjectCommon(camelQuarkusVersion string, runtimeVersion str
 }
 
 func buildQuarkusRunner(ctx *builderContext) error {
-	mc := maven.NewContext(path.Join(ctx.Path, "maven"), ctx.Maven.Project)
+	mc := maven.NewContext(path.Join(ctx.Path, "maven"))
 	mc.SettingsContent = ctx.Maven.SettingsData
 	mc.LocalRepository = ctx.Build.Maven.LocalRepository
-	mc.Timeout = ctx.Build.Maven.GetTimeout().Duration
 
 	if ctx.Maven.TrustStoreName != "" {
 		mc.ExtraMavenOpts = append(mc.ExtraMavenOpts,
@@ -154,7 +157,7 @@ func buildQuarkusRunner(ctx *builderContext) error {
 		)
 	}
 
-	err := BuildQuarkusRunnerCommon(mc)
+	err := BuildQuarkusRunnerCommon(ctx.C, mc, ctx.Maven.Project)
 	if err != nil {
 		return err
 	}
@@ -162,7 +165,7 @@ func buildQuarkusRunner(ctx *builderContext) error {
 	return nil
 }
 
-func BuildQuarkusRunnerCommon(mc maven.Context) error {
+func BuildQuarkusRunnerCommon(ctx context.Context, mc maven.Context, project maven.Project) error {
 	resourcesPath := path.Join(mc.Path, "src", "main", "resources")
 	if err := os.MkdirAll(resourcesPath, os.ModePerm); err != nil {
 		return errors.Wrap(err, "failure while creating resource folder")
@@ -179,8 +182,8 @@ func BuildQuarkusRunnerCommon(mc maven.Context) error {
 
 	mc.AddArgument("package")
 
-	// Build the project
-	if err := maven.Run(mc); err != nil {
+	// Run the Maven goal
+	if err := project.Command(mc).Do(ctx); err != nil {
 		return errors.Wrap(err, "failure while building project")
 	}
 
@@ -188,10 +191,9 @@ func BuildQuarkusRunnerCommon(mc maven.Context) error {
 }
 
 func computeQuarkusDependencies(ctx *builderContext) error {
-	mc := maven.NewContext(path.Join(ctx.Path, "maven"), ctx.Maven.Project)
+	mc := maven.NewContext(path.Join(ctx.Path, "maven"))
 	mc.SettingsContent = ctx.Maven.SettingsData
 	mc.LocalRepository = ctx.Build.Maven.LocalRepository
-	mc.Timeout = ctx.Build.Maven.GetTimeout().Duration
 
 	// Process artifacts list and add it to existing artifacts.
 	artifacts, err := ProcessQuarkusTransitiveDependencies(mc)
diff --git a/pkg/cmd/describe.go b/pkg/cmd/describe.go
index 66b38f24f..96a5ae780 100644
--- a/pkg/cmd/describe.go
+++ b/pkg/cmd/describe.go
@@ -85,6 +85,7 @@ func newCmdDescribe(rootCmdOptions *RootCmdOptions) *cobra.Command {
 	cmd.AddCommand(cmdOnly(newDescribeKitCmd(rootCmdOptions)))
 	cmd.AddCommand(cmdOnly(newDescribeIntegrationCmd(rootCmdOptions)))
 	cmd.AddCommand(cmdOnly(newDescribePlatformCmd(rootCmdOptions)))
+	cmd.AddCommand(cmdOnly(newDescribeKameletCmd(rootCmdOptions)))
 
 	return &cmd
 }
diff --git a/pkg/cmd/describe_kamelet.go b/pkg/cmd/describe_kamelet.go
new file mode 100644
index 000000000..7b1c8fffd
--- /dev/null
+++ b/pkg/cmd/describe_kamelet.go
@@ -0,0 +1,172 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package cmd
+
+import (
+	"errors"
+	"fmt"
+	"io"
+	"strings"
+
+	"github.com/spf13/cobra"
+
+	k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
+
+	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+	"github.com/apache/camel-k/pkg/util/indentedwriter"
+)
+
+func newDescribeKameletCmd(rootCmdOptions *RootCmdOptions) (*cobra.Command, *describeKameletCommandOptions) {
+	options := describeKameletCommandOptions{
+		rootCmdOptions,
+	}
+
+	cmd := cobra.Command{
+		Use:     "kamelet",
+		Aliases: []string{"kl"},
+		Short:   "Describe a Kamelet",
+		Long:    `Describe a Kamelet.`,
+		PreRunE: decode(&options),
+		RunE: func(_ *cobra.Command, args []string) error {
+			if err := options.validate(args); err != nil {
+				return err
+			}
+			if err := options.run(args); err != nil {
+				fmt.Println(err.Error())
+			}
+
+			return nil
+		},
+	}
+
+	return &cmd, &options
+}
+
+type describeKameletCommandOptions struct {
+	*RootCmdOptions
+}
+
+func (command *describeKameletCommandOptions) validate(args []string) error {
+	if len(args) != 1 {
+		return errors.New("describe expects a Kamelet name argument")
+	}
+	return nil
+}
+
+func (command *describeKameletCommandOptions) run(args []string) error {
+	c, err := command.GetCmdClient()
+	if err != nil {
+		return err
+	}
+
+	kamelet := v1alpha1.NewKamelet(command.Namespace, args[0])
+	kameletKey := k8sclient.ObjectKey{
+		Namespace: command.Namespace,
+		Name:      args[0],
+	}
+
+	if err := c.Get(command.Context, kameletKey, &kamelet); err == nil {
+		fmt.Print(command.describeKamelet(kamelet))
+	} else {
+		fmt.Printf("Kamelet '%s' does not exist.\n", args[0])
+	}
+
+	return nil
+}
+
+func (command *describeKameletCommandOptions) describeKamelet(kamelet v1alpha1.Kamelet) (string, error) {
+	return indentedwriter.IndentedString(func(out io.Writer) error {
+		w := indentedwriter.NewWriter(out)
+
+		describeObjectMeta(w, kamelet.ObjectMeta)
+
+		w.Write(0, "Phase:\t%s\n", kamelet.Status.Phase)
+
+		// Definition
+		def := kamelet.Spec.Definition
+		if def != nil {
+			w.Write(0, "Definition:\n")
+			w.Write(1, "Title:\t%s\n", def.Title)
+			w.Write(1, "Description:\n")
+			for _, s := range strings.Split(def.Description, "\n") {
+				w.Write(2, "%s\n", s)
+			}
+			if len(def.Required) > 0 {
+				w.Write(1, "Required:\n")
+				for _, req := range def.Required {
+					w.Write(2, "%s\n", req)
+				}
+			}
+			if len(def.Properties) > 0 {
+				w.Write(1, "Properties:\n")
+				for _, k := range kamelet.SortedDefinitionPropertiesKeys() {
+					p := def.Properties[k]
+					w.Write(2, "%s:\n", k)
+					w.Write(3, "Title:\t%s\n", p.Title)
+					w.Write(3, "Description:\t%s\n", p.Description)
+					w.Write(3, "Type:\t%s\n", p.Type)
+					if p.Default != nil {
+						w.Write(3, "Default:\t%s\n", p.Default)
+					}
+				}
+			}
+		}
+
+		// Types
+		if len(kamelet.Spec.Types) > 0 {
+			w.Write(0, "Types:\n")
+			for _, k := range kamelet.SortedTypesKeys() {
+				t := kamelet.Spec.Types[k]
+				w.Write(1, "%s:\n", k)
+				w.Write(2, "Media Type: %s\n", t.MediaType)
+			}
+		}
+
+		// Flow
+		// TODO pretty print flow data
+		flow := kamelet.Spec.Flow
+		if flow != nil {
+			w.Write(0, "Flow:\n")
+			w.Write(1, "%s\n", string(flow.RawMessage))
+		}
+
+		// Dependencies
+		if len(kamelet.Spec.Dependencies) > 0 {
+			w.Write(0, "Dependencies:\t\n")
+			for _, d := range kamelet.Spec.Dependencies {
+				w.Write(1, "%s\n", d)
+			}
+		}
+
+		// Sources
+		if len(kamelet.Spec.Sources) > 0 {
+			w.Write(0, "Sources:\t\n")
+			w.Write(1, "Name\tLanguage\tCompression\tRef\tRef Key\n")
+			for _, s := range kamelet.Spec.Sources {
+				w.Write(1, "%s\t%s\t%t\t%s\t%s\n",
+					s.Name,
+					s.InferLanguage(),
+					s.Compression,
+					s.ContentRef,
+					s.ContentKey)
+			}
+		}
+
+		return nil
+	})
+}
diff --git a/pkg/cmd/describe_kit.go b/pkg/cmd/describe_kit.go
index 73dea2ba7..cb20895de 100644
--- a/pkg/cmd/describe_kit.go
+++ b/pkg/cmd/describe_kit.go
@@ -37,6 +37,7 @@ func newDescribeKitCmd(rootCmdOptions *RootCmdOptions) (*cobra.Command, *describ
 
 	cmd := cobra.Command{
 		Use:     "kit",
+		Aliases: []string{"ik"},
 		Short:   "Describe an Integration Kit",
 		Long:    `Describe an Integration Kit.`,
 		PreRunE: decode(&options),
diff --git a/pkg/cmd/describe_platform.go b/pkg/cmd/describe_platform.go
index 151ac1df7..4c65c7232 100644
--- a/pkg/cmd/describe_platform.go
+++ b/pkg/cmd/describe_platform.go
@@ -37,6 +37,7 @@ func newDescribePlatformCmd(rootCmdOptions *RootCmdOptions) (*cobra.Command, *de
 
 	cmd := cobra.Command{
 		Use:     "platform",
+		Aliases: []string{"ip"},
 		Short:   "Describe an Integration Platform",
 		Long:    `Describe an Integration Platform.`,
 		PreRunE: decode(&options),
diff --git a/pkg/cmd/local_build.go b/pkg/cmd/local_build.go
index b9606ddfc..1a09adf0b 100644
--- a/pkg/cmd/local_build.go
+++ b/pkg/cmd/local_build.go
@@ -167,15 +167,14 @@ func (command *localBuildCmdOptions) run(cmd *cobra.Command, args []string) erro
 	var dependenciesList, propertyFilesList []string
 	routeFiles := args
 	if !command.BaseImage {
-		// Fetch dependencies.
-		dependencies, err := getDependencies(args, command.AdditionalDependencies, command.MavenRepositories, true)
+		dependencies, err := getDependencies(command.Context, args, command.AdditionalDependencies, command.MavenRepositories, true)
 		if err != nil {
 			return err
 		}
 
 		var propertyFiles []string
 		if !command.DependenciesOnly {
-			// Manage integration properties which may come from files or CLI.
+			// Manage integration properties which may come from files or CLI
 			propertyFiles, err = updateIntegrationProperties(command.Properties, command.PropertyFiles, false)
 			if err != nil {
 				return err
diff --git a/pkg/cmd/local_inspect.go b/pkg/cmd/local_inspect.go
index c225a77f3..525e592ac 100644
--- a/pkg/cmd/local_inspect.go
+++ b/pkg/cmd/local_inspect.go
@@ -73,13 +73,11 @@ type localInspectCmdOptions struct {
 }
 
 func (command *localInspectCmdOptions) validate(args []string) error {
-	// Validate integration files.
 	err := validateIntegrationFiles(args)
 	if err != nil {
 		return err
 	}
 
-	// Validate additional dependencies specified by the user.
 	err = validateAdditionalDependencies(command.AdditionalDependencies)
 	if err != nil {
 		return err
@@ -93,13 +91,11 @@ func (command *localInspectCmdOptions) init() error {
 }
 
 func (command *localInspectCmdOptions) run(args []string) error {
-	// Fetch dependencies.
-	dependencies, err := getDependencies(args, command.AdditionalDependencies, command.MavenRepositories, command.AllDependencies)
+	dependencies, err := getDependencies(command.Context, args, command.AdditionalDependencies, command.MavenRepositories, command.AllDependencies)
 	if err != nil {
 		return err
 	}
 
-	// Print dependencies.
 	err = outputDependencies(dependencies, command.OutputFormat)
 	if err != nil {
 		return err
diff --git a/pkg/cmd/local_run.go b/pkg/cmd/local_run.go
index db8c4b490..418830d6b 100644
--- a/pkg/cmd/local_run.go
+++ b/pkg/cmd/local_run.go
@@ -155,8 +155,7 @@ func (command *localRunCmdOptions) run(cmd *cobra.Command, args []string) error
 		}
 		dependencies = localBuildDependencies
 	} else {
-		// Fetch dependencies.
-		computedDependencies, err := getDependencies(args, command.AdditionalDependencies, command.MavenRepositories, true)
+		computedDependencies, err := getDependencies(command.Context, args, command.AdditionalDependencies, command.MavenRepositories, true)
 		if err != nil {
 			return err
 		}
diff --git a/pkg/cmd/util_dependencies.go b/pkg/cmd/util_dependencies.go
index ac6f159b0..89c199901 100644
--- a/pkg/cmd/util_dependencies.go
+++ b/pkg/cmd/util_dependencies.go
@@ -18,6 +18,7 @@ limitations under the License.
 package cmd
 
 import (
+	"context"
 	"fmt"
 	"io/ioutil"
 	"os"
@@ -42,9 +43,9 @@ var additionalDependencyUsageMessage = `Additional top-level dependencies are sp
 <type>:<dependency-name>
 where <type> is one of {` + strings.Join(acceptedDependencyTypes, "|") + `}.`
 
-func getDependencies(args []string, additionalDependencies []string, repositories []string, allDependencies bool) ([]string, error) {
+func getDependencies(ctx context.Context, args []string, additionalDependencies []string, repositories []string, allDependencies bool) ([]string, error) {
 	// Fetch existing catalog or create new one if one does not already exist
-	catalog, err := createCamelCatalog()
+	catalog, err := createCamelCatalog(ctx)
 
 	// Get top-level dependencies
 	dependencies, err := getTopLevelDependencies(catalog, args)
@@ -67,7 +68,7 @@ func getDependencies(args []string, additionalDependencies []string, repositorie
 			util.StringSliceUniqueAdd(&dependencies, runtimeDep.GetDependencyID())
 		}
 
-		dependencies, err = getTransitiveDependencies(catalog, dependencies, repositories)
+		dependencies, err = getTransitiveDependencies(ctx, catalog, dependencies, repositories)
 		if err != nil {
 			return nil, err
 		}
@@ -101,32 +102,23 @@ func getTopLevelDependencies(catalog *camel.RuntimeCatalog, args []string) ([]st
 	return dependencies.List(), nil
 }
 
-func getTransitiveDependencies(
-	catalog *camel.RuntimeCatalog,
-	dependencies []string, repositories []string) ([]string, error) {
-
-	mvn := v1.MavenSpec{
-		LocalRepository: "",
-	}
-
-	// Create Maven project
+func getTransitiveDependencies(ctx context.Context, catalog *camel.RuntimeCatalog, dependencies []string, repositories []string) ([]string, error) {
 	project := builder.GenerateQuarkusProjectCommon(
 		catalog.CamelCatalogSpec.Runtime.Metadata["camel-quarkus.version"],
-		defaults.DefaultRuntimeVersion, catalog.CamelCatalogSpec.Runtime.Metadata["quarkus.version"])
+		defaults.DefaultRuntimeVersion,
+		catalog.CamelCatalogSpec.Runtime.Metadata["quarkus.version"],
+	)
 
-	// Inject dependencies into Maven project
 	err := camel.ManageIntegrationDependencies(&project, dependencies, catalog)
 	if err != nil {
 		return nil, err
 	}
 
-	// Maven local context to be used for generating the transitive dependencies
-	mc := maven.NewContext(util.MavenWorkingDirectory, project)
-	mc.LocalRepository = mvn.LocalRepository
-	mc.Timeout = mvn.GetTimeout().Duration
+	mc := maven.NewContext(util.MavenWorkingDirectory)
+	mc.LocalRepository = ""
 
 	if len(repositories) > 0 {
-		var repoList []maven.Repository
+		var repoList []v1.Repository
 		var mirrors []maven.Mirror
 		for i, repo := range repositories {
 			if strings.Contains(repo, "@mirrorOf=") {
@@ -155,7 +147,7 @@ func getTransitiveDependencies(
 	// Make maven command less verbose
 	mc.AdditionalArguments = append(mc.AdditionalArguments, "-q")
 
-	err = builder.BuildQuarkusRunnerCommon(mc)
+	err = builder.BuildQuarkusRunnerCommon(ctx, mc, project)
 	if err != nil {
 		return nil, err
 	}
@@ -217,7 +209,7 @@ func getLocalBuildRoutes(integrationDirectory string) ([]string, error) {
 	return locallyBuiltRoutes, nil
 }
 
-func generateCatalog() (*camel.RuntimeCatalog, error) {
+func generateCatalog(ctx context.Context) (*camel.RuntimeCatalog, error) {
 	// A Camel catalog is required for this operation
 	settings := ""
 	mvn := v1.MavenSpec{
@@ -229,7 +221,7 @@ func generateCatalog() (*camel.RuntimeCatalog, error) {
 	}
 	var providerDependencies []maven.Dependency
 	var caCert []byte
-	catalog, err := camel.GenerateCatalogCommon(settings, caCert, mvn, runtime, providerDependencies)
+	catalog, err := camel.GenerateCatalogCommon(ctx, settings, caCert, mvn, runtime, providerDependencies)
 	if err != nil {
 		return nil, err
 	}
@@ -237,7 +229,7 @@ func generateCatalog() (*camel.RuntimeCatalog, error) {
 	return catalog, nil
 }
 
-func createCamelCatalog() (*camel.RuntimeCatalog, error) {
+func createCamelCatalog(ctx context.Context) (*camel.RuntimeCatalog, error) {
 	// Attempt to reuse existing Camel catalog if one is present
 	catalog, err := camel.DefaultCatalog()
 	if err != nil {
@@ -246,7 +238,7 @@ func createCamelCatalog() (*camel.RuntimeCatalog, error) {
 
 	// Generate catalog if one was not found
 	if catalog == nil {
-		catalog, err = generateCatalog()
+		catalog, err = generateCatalog(ctx)
 		if err != nil {
 			return nil, err
 		}
diff --git a/pkg/platform/defaults.go b/pkg/platform/defaults.go
index 02264e2dd..07f3ed683 100644
--- a/pkg/platform/defaults.go
+++ b/pkg/platform/defaults.go
@@ -106,8 +106,8 @@ func ConfigureDefaults(ctx context.Context, c client.Client, p *v1.IntegrationPl
 		log.Log.Info("No registry specified for publishing images")
 	}
 
-	if verbose && p.Status.Build.Maven.GetTimeout().Duration != 0 {
-		log.Log.Infof("Maven Timeout set to %s", p.Status.Build.Maven.GetTimeout().Duration)
+	if verbose && p.Status.Build.GetTimeout().Duration != 0 {
+		log.Log.Infof("Maven Timeout set to %s", p.Status.Build.GetTimeout().Duration)
 	}
 
 	return nil
@@ -184,26 +184,8 @@ func setPlatformDefaults(ctx context.Context, c client.Client, p *v1.Integration
 		}
 	}
 
-	if p.Status.Build.Maven.GetTimeout().Duration != 0 {
-		d := p.Status.Build.Maven.GetTimeout().Duration.Truncate(time.Second)
-
-		if verbose && p.Status.Build.Maven.GetTimeout().Duration != d {
-			log.Log.Infof("Maven timeout minimum unit is sec (configured: %s, truncated: %s)", p.Status.Build.Maven.GetTimeout().Duration, d)
-		}
-
-		p.Status.Build.Maven.Timeout = &metav1.Duration{
-			Duration: d,
-		}
-	}
-	if p.Status.Build.Maven.GetTimeout().Duration == 0 {
-		n := p.Status.Build.GetTimeout().Duration.Seconds() * 0.75
-		p.Status.Build.Maven.Timeout = &metav1.Duration{
-			Duration: (time.Duration(n) * time.Second).Truncate(time.Second),
-		}
-	}
-
 	if p.Status.Build.Maven.Settings.ConfigMapKeyRef == nil && p.Status.Build.Maven.Settings.SecretKeyRef == nil {
-		var repositories []maven.Repository
+		var repositories []v1.Repository
 		var mirrors []maven.Mirror
 		for i, c := range p.Status.Configuration {
 			if c.Type == "repository" {
@@ -214,11 +196,11 @@ func setPlatformDefaults(ctx context.Context, c client.Client, p *v1.Integration
 					}
 					mirrors = append(mirrors, mirror)
 				} else {
-					repository := maven.NewRepository(c.Value)
-					if repository.ID == "" {
-						repository.ID = fmt.Sprintf("repository-%03d", i)
+					repo := maven.NewRepository(c.Value)
+					if repo.ID == "" {
+						repo.ID = fmt.Sprintf("repository-%03d", i)
 					}
-					repositories = append(repositories, repository)
+					repositories = append(repositories, repo)
 				}
 			}
 		}
@@ -260,7 +242,6 @@ func setPlatformDefaults(ctx context.Context, c client.Client, p *v1.Integration
 		log.Log.Infof("BaseImage set to %s", p.Status.Build.BaseImage)
 		log.Log.Infof("LocalRepository set to %s", p.Status.Build.Maven.LocalRepository)
 		log.Log.Infof("Timeout set to %s", p.Status.Build.GetTimeout())
-		log.Log.Infof("Maven Timeout set to %s", p.Status.Build.Maven.GetTimeout().Duration)
 	}
 
 	return nil
diff --git a/pkg/resources/resources.go b/pkg/resources/resources.go
index 411629eb2..ad5e8eba6 100644
--- a/pkg/resources/resources.go
+++ b/pkg/resources/resources.go
@@ -78,9 +78,9 @@ var assets = func() http.FileSystem {
 		"/crd/bases/camel.apache.org_builds.yaml": &vfsgen۰CompressedFileInfo{
 			name:             "camel.apache.org_builds.yaml",
 			modTime:          time.Time{},
-			uncompressedSize: 23479,
+			uncompressedSize: 25360,
 
-			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3c\x5d\x73\xdb\x3a\x76\xef\xfa\x15\x67\xe2\x87\x24\x33\x16\x95\xdc\xdd\x6d\x6f\xd5\x87\x8e\x56\x4e\xa6\x6a\x12\xdb\x63\x29\x77\xbb\x8f\x47\xe4\x11\x85\x2b\x12\x60\x01\xd0\xb2\x6e\xa7\xff\xbd\x03\x80\x94\x28\x8b\x1f\xa0\xad\xdc\xeb\x76\x8d\x97\xc4\x14\x70\x70\xbe\x70\xbe\xf0\x71\x01\xc3\xf3\xb5\xc1\x05\x7c\x65\x21\x71\x45\x11\x68\x01\x7a\x4d\x30\xc9\x30\x5c\x13\xcc\xc5\x4a\x6f\x51\x12\x7c\x16\x39\x8f\x50\x33\xc1\xe1\xdd\x64\xfe\xf9\x3d\xe4\x3c\x22\x09\x82\x13\x08\x09\xa9\x90\x34\xb8\x80\x50\x70\x2d\xd9\x32\xd7\x42\x42\xe2\x00\x02\xc6\x92\x28\x25\xae\x55\x00\x30\x27\xb2\xd0\xaf\x6f\x16\xb3\xe9\x27\x58\xb1\x84\x20\x62\xca\x0d\xa2\x08\xb6\x4c\xaf\x07\x17\xa0\xd7\x4c\xc1\x56\xc8\x0d\xac\x84\x04\x8c\x22\x66\x26\xc6\x04\x18\x5f\x09\x99\x3a\x34\x24\xc5\x28\x23\xc6\x63\x08\x45\xb6\x93\x2c\x5e\x6b\x10\x5b\x4e\x52\xad\x59\x16\x0c\x2e\x60\x61\xc8\x98\x7f\x2e\x31\x51\x0e\xac\x9d\x53\x0b\xf8\xbb\xc8\x0b\x1a\x2a\xe4\x16\x5c\xb8\x84\x5f\x48\x2a\x33\xc9\x4f\xc1\x87\xc1\x05\xbc\x33\x5d\xde\x14\x3f\xbe\x79\xff\xaf\xb0\x13\x39\xa4\xb8\x03\x2e\x34\xe4\x8a\x2a\x90\xe9\x21\xa4\x4c\x03\xe3\x10\x8a\x34\x4b\x18\xf2\x90\x0e\x64\xed\x67\x08\xc0\x22\x60\x60\x88\xa5\x46\xc6\x01\x2d\x19\x20\x56\xd5\x6e\x80\x7a\x70\x31\xb8\x00\xdb\xd6\x5a\x67\xe3\xd1\x68\xbb\xdd\x06\x68\xd1\x0d\x84\x8c\x47\x25\x75\xa3\xaf\xb3\xe9\xa7\xeb\xf9\xa7\xa1\x45\x79\x70\x01\xdf\x79\x42\x4a\x81\xa4\xff\xca\x99\xa4\x08\x96\x3b\xc0\x2c\x4b\x58\x88\xcb\x84\x20\xc1\xad\x11\x9c\x95\x8e\x15\x3a\xe3\xb0\x95\x4c\x33\x1e\x5f\x82\x2a\xa4\x3e\xb8\x38\x92\xce\x81\x5d\x25\x7a\x4c\x1d\x75\x10\x1c\x90\xc3\x9b\xc9\x1c\x66\xf3\x37\xf0\xd7\xc9\x7c\x36\xbf\x1c\x5c\xc0\xdf\x66\x8b\x7f\xbf\xf9\xbe\x80\xbf\x4d\xee\xee\x26\xd7\x8b\xd9\xa7\x39\xdc\xdc\xc1\xf4\xe6\xfa\x6a\xb6\x98\xdd\x5c\xcf\xe1\xe6\x33\x4c\xae\xff\x0e\x5f\x66\xd7\x57\x97\x40\x4c\xaf\x49\x02\x3d\x64\xd2\xe0\x2f\x24\x30\xc3\x48\x8a\x8c\x4c\x4b\x05\x2a\x11\x30\xfa\x61\xfe\x56\x19\x85\x6c\xc5\x42\x48\x90\xc7\x39\xc6\x04\xb1\xb8\x27\xc9\x8d\x7a\x64\x24\x53\xa6\x8c\x38\x15\x20\x8f\x06\x17\x90\xb0\x94\x69\xab\x45\xea\x94\x28\x33\xcd\x39\xd7\xd6\x00\x33\x56\xa8\xd3\x18\x30\x63\xf4\xa0\x89\x5b\x6c\x82\xcd\xcf\x2a\x60\x62\x74\xff\x71\xb0\x61\x3c\x1a\xc3\x34\x57\x5a\xa4\x77\xa4\x44\x2e\x43\xba\xa2\x15\xe3\x56\xf3\x07\x29\x69\x8c\x50\xe3\x78\x00\x80\x9c\x8b\x02\x79\xf3\x27\xb8\x55\x27\x92\x84\xe4\x30\x26\x1e\x6c\xf2\x25\x2d\x73\x96\x44\x24\x2d\xf0\x72\xea\xfb\x0f\xc1\x9f\x83\x8f\x03\x80\x50\x92\x1d\xbe\x60\x29\x29\x8d\x69\x36\x06\x9e\x27\xc9\x00\x20\xc1\x25\x25\x05\x54\xcc\xb2\x31\x84\x98\x52\x32\xdc\x0c\x00\x38\xa6\x34\x06\x0b\x57\x05\xf6\x73\x45\x09\x07\x86\xfd\x66\x58\x2c\x45\x5e\x0e\xab\xfe\xee\xc6\x97\xf8\xa2\xa6\x58\x48\x56\xfe\x3d\x84\x8d\xe9\x5f\xfc\x3f\xdc\xff\xdf\xf1\xe4\xaf\x66\x4a\xfb\x77\xc2\x94\xfe\x72\xf8\xf6\x95\x29\x6d\xbf\x67\x49\x2e\x31\x29\x91\xb3\x9f\xd4\x5a\x48\x7d\x7d\x98\x72\x08\x6c\xb3\x74\xbf\x30\x1e\xe7\x09\xca\xa2\xfb\x00\x40\x85\x22\xa3\x31\xd8\xde\x19\x86\x64\xbe\x15\x4c\xb3\xa3\x87\x15\x03\x74\x2b\x19\xd7\x24\xa7\x22\xc9\x53\xbe\x87\x1d\x91\x0a\x25\xcb\xb4\x65\xb3\xb1\x3a\x16\x34\x64\x6b\x54\x34\x70\x6b\xf7\x57\x25\xf8\x2d\xea\xf5\x18\x02\xa5\x51\xe7\x2a\xa8\xfe\xea\x98\x7b\x5b\xf9\xa2\x77\x06\x27\xb3\xb2\x78\xdc\x34\x8b\x66\xa9\x31\x10\xb0\x5d\xb3\x70\x6d\x35\xd8\xcd\xbb\x45\xe5\x64\x4c\xd1\xe9\xec\xa5\x26\x05\x27\x5a\x70\x84\xcb\x24\x3e\xc6\x24\x42\x4d\x4f\xc1\x23\x41\xa5\xe1\x9d\xa4\xe1\x7b\xa5\x51\xd6\x62\x54\xf0\xa3\xf8\x7d\xa2\x8f\xf0\x98\x1f\x8d\xea\xc6\xc5\xcd\x6c\x67\xa5\x07\x0a\x73\xeb\x29\xa2\x5c\x5a\x52\x1b\xe7\x7e\xd4\xc1\x4d\x7d\x75\xfc\xd1\x47\x22\x3c\x4f\x97\xc6\x29\xae\x2a\x93\xa3\xd6\x94\x66\x5a\x35\x4e\xbe\x42\x96\xe4\x92\x02\x49\xa1\x31\x59\xbb\xa0\x18\x71\x2c\x8f\x63\x28\x0e\x19\xa3\x8b\x31\xc9\xc1\xa1\xdb\xfd\x47\xa7\xe4\xe1\x9a\x52\x1c\x17\x9d\x45\x46\x7c\x72\x3b\xfb\xe5\x4f\xf3\xa3\xcf\x70\x8c\xbf\x5d\x53\xc6\xa0\x1b\x01\xba\x9e\x7b\xeb\xea\x56\x16\x4c\x6e\x67\xfb\xb1\x99\x14\x19\x49\xbd\x5f\xc4\xae\x55\x4c\x5d\xe5\xeb\xa3\x99\xde\x1a\x64\x0a\xff\x1a\x19\x1b\x47\x6e\xd2\x62\xd1\x51\x54\xe0\xef\x7c\x21\x33\x2e\xcc\xb8\x02\xe2\xba\x2a\x8f\xb2\x89\x95\xf1\x39\x62\xf9\x2b\x85\x3a\x80\x39\x49\x03\xc6\x18\x80\x3c\x89\x8c\x69\xbc\x27\xa9\xc1\xf0\x36\xe6\xec\xb7\x3d\x6c\x55\xc6\x39\x09\x6a\x52\xfa\x11\x4c\xbb\xc8\x4d\xbc\x71\x8f\x49\x4e\x97\xc6\x6b\x58\x57\x2d\xc9\xcc\x02\x39\xaf\xc0\xb3\x5d\x54\x00\xdf\x84\x24\x1b\x9f\x8c\xad\xa3\x56\xe3\xd1\x28\x66\xba\x34\xf1\xa1\x48\xd3\x9c\x33\xbd\x1b\x55\x62\x24\x35\x8a\xe8\x9e\x92\x91\x62\xf1\x10\x65\xb8\x66\x9a\x42\x9d\x4b\x1a\x61\xc6\x86\x16\x75\x6e\xcd\x7c\x90\x46\x17\xb2\x70\x0a\xea\xed\x11\xae\x27\x5a\xe9\x9a\x35\x9d\x2d\x12\x30\x66\xd4\xc8\x1a\x8b\xa1\x8e\x8a\x03\xa3\xcd\x27\xc3\x9d\xbb\x4f\xf3\x05\x94\x53\x5b\x61\x3c\xe6\xbe\xe5\xfb\x61\xa0\x3a\x88\xc0\x30\x8c\xf1\x95\x75\xae\x26\x3a\x92\x22\xb5\x30\x89\x47\x99\x60\x5c\xdb\x3f\xc2\x84\x11\x7f\xcc\x7e\x95\x2f\x53\xa6\x5d\xe8\x42\x4a\x1b\x59\x05\x30\xb5\x7e\x0f\x96\x04\x79\x66\x2c\x40\x14\xc0\x8c\xc3\xd4\x78\x8b\x29\x9a\x80\xea\x07\x0b\xc0\x70\x5a\x0d\x0d\x63\xfd\x44\x50\x75\xd9\x8f\x3b\x3b\xae\x55\x7e\x28\xfd\x67\x83\xbc\xec\xda\x9c\x67\x14\x1e\xad\x17\xb7\x62\xb5\x30\x3c\x71\xf6\x66\x6f\x28\x5d\xab\x5f\xa3\x16\x0d\x54\x9b\x93\x8f\x00\x4c\x53\x5a\xf3\xf9\x11\x36\x0b\x54\x1b\x18\x0e\x6b\xba\x35\x4f\xe8\x9a\xb5\x23\xb8\xae\xff\xb1\x8e\x66\x5c\x37\x4f\xe6\x33\xa1\x9d\x14\x15\xcd\x52\x8c\xa9\xb9\x4b\xa3\x10\x8f\x9b\xd1\x1c\x7a\xd0\x57\x4c\x3e\x1b\x94\xd1\xd0\x5b\x29\x1e\x76\x73\x0a\x25\xe9\x67\xc3\x63\x67\x21\xd0\x3a\x91\xe7\x02\x91\x14\x9b\x94\x60\xd7\x06\xe8\x48\xd2\x33\xe3\xc6\x9c\xaf\xbd\x4d\x50\x9b\x0c\xef\xae\x80\x61\x75\xbe\x51\xfa\xe0\xa9\x01\xa6\x61\x14\x99\x74\xa2\xbd\x93\x27\x85\x60\x83\xd8\xb3\x81\x62\x5c\x51\x98\xcb\x56\xce\x1f\x00\x2e\x85\x48\x08\x1f\x7b\xc1\xe3\x26\x64\x8c\x9c\xfd\x66\x59\x7a\x36\x34\x55\xa7\xa6\xf6\x00\xd7\x60\x07\x8f\xdb\x3d\xc9\xa5\x50\x1e\x1a\xd9\xce\x93\xce\xb9\x8a\x6c\xc9\xdf\x2c\x91\x7c\x49\x66\xc9\xa2\x7f\x0e\xa3\x14\x51\x46\x3c\x22\x1e\x76\xac\xa6\x46\x37\xd1\x73\xbe\xb2\x1b\x4a\x89\xbb\xc6\x5e\x29\xde\x53\xab\x16\x1f\xc9\xe7\x9b\xe9\x7d\x3e\xb3\x11\x62\xb7\x81\x3e\xc1\xc1\xa4\x02\x6e\x98\xb5\xa8\x36\x7c\xdc\xd0\xee\xd2\x3a\x10\x64\xbc\x88\xae\x3a\x40\x02\x4c\x27\x10\x1a\x24\x57\xcc\xa4\xcc\xef\xd4\x7b\xc8\x8b\x0a\x5d\x28\x38\x37\x71\x97\x16\x20\x29\x15\x9a\x1c\xdd\x9d\x10\x25\x65\x42\x31\x6d\x93\xef\x00\x66\x1a\x42\xe4\x25\x56\xf0\x9f\xc1\x5f\x3e\xfc\x4b\x75\x46\x65\x23\xdf\x4e\xa0\xb7\x5f\xa6\xf3\x8b\x7f\x06\x57\x99\xd3\x14\x55\x41\x40\xb8\x46\xc6\x55\x00\x13\xf8\x8f\x2f\xf3\x43\x9f\x4e\xa0\x1b\xda\x29\x6d\x23\x3a\x05\x98\x6b\x91\xa2\x66\x21\x26\xc9\xae\x4c\x6d\x0d\xed\xae\x87\x89\x85\xa6\x93\x4e\x88\xc7\xac\x74\x41\x7d\x28\xf8\x8a\xc5\xb9\xa4\x32\x8e\xb2\x0c\x46\x13\x18\x6b\x99\x2b\x1f\x44\x1f\x49\x68\xb9\xb3\xf8\x58\x71\x80\x09\x3a\x91\x47\x2a\x80\x6b\x23\x23\xbd\x46\xed\x25\x78\x29\x84\x7e\x24\x7d\x05\x28\x09\x30\x51\x02\x58\x9a\x09\x93\x14\x9b\x34\xc5\x25\x31\xc7\xd9\x7e\x37\x53\x83\x8e\x9e\xbe\xab\xa3\x80\xd9\xdd\xa9\x66\x81\x6c\x68\x5f\xec\x74\x9e\xc5\x0a\x94\x12\xa3\xd6\x26\x57\x08\x00\xbe\xe5\x27\x99\x59\x7d\x5b\x12\xa0\x49\x61\x58\x54\xc2\xda\xd0\xae\x8b\x48\xe8\xe3\xfc\xc0\x23\x3a\xaa\x25\xf5\xed\xb5\xb1\x00\x05\xa1\x92\x56\x24\x89\xeb\xda\x64\x65\x93\x2f\x49\x72\xd2\x64\xf3\x95\x48\x84\xca\xa4\x2a\x21\x65\x5a\x8d\xc4\x3d\xc9\x7b\x46\xdb\xd1\x56\xc8\x0d\xe3\xf1\x70\xcb\xf4\x7a\xe8\x5c\x9a\x1a\xd9\xda\xda\xe8\xc2\xfe\xe3\xc5\xaf\xc5\xcd\xd5\xcd\x18\x26\x51\x04\xc2\xd6\x5a\x73\x45\xab\x3c\x81\x15\xa3\xc4\x28\xeb\x21\x8b\xbf\xb4\x99\xe4\xa5\x17\xd0\x9c\x45\xff\xf6\xf6\xdc\x3c\x17\x99\x2b\xbc\xf5\xe6\xfb\xdc\x16\x84\x77\xb0\x5d\x93\x25\x51\x1f\x6c\xb2\x90\x60\xb2\xcb\x0d\x35\xfb\x9c\x6a\x4b\x73\x65\xd3\x4e\x97\x7a\x75\x2f\xb2\x3e\x81\x1a\xec\xcb\xf3\x5d\x04\x0e\x3d\xf0\xf5\x0a\xaa\x4c\x4b\x44\x88\xc9\x5d\xe9\x0b\x3a\xd7\xef\xc9\xda\xcd\x50\xaf\x4b\x9d\xb6\xb0\x0a\x7b\xb7\x77\x2f\x9d\x8b\xcf\x5b\x09\xfc\x4d\x51\xb5\x4a\xeb\x6f\xbe\x7a\x68\xe3\x09\x1b\x1c\xd1\x07\x0c\xfd\x88\xf6\x90\x8f\x22\xad\x19\x8f\x3b\xd1\x3f\xc2\x68\x52\x9a\x97\x90\xca\xe2\xd6\xd4\xba\xb7\x6f\x98\x19\x9d\x77\xda\xef\x63\xcf\x9d\xa3\x2a\xc2\x02\x55\xf1\x67\x25\x5e\xe7\xf4\x1f\x61\x89\xe3\x17\xda\xdd\xd1\xaa\xff\x42\xb7\x2e\xc3\x78\xec\xc2\xa3\xe0\x81\x6c\x1f\x17\xd0\x07\x57\xf0\xf7\x77\x27\x78\x96\x3e\x6f\xef\xe5\x7c\x90\x83\xbe\xf6\x12\x7a\xf8\xa9\x13\x14\x3b\x7d\x95\x27\x50\xf8\x23\x7c\x1a\xf4\xf2\x6b\xde\x20\xad\xff\xf3\xf6\x6d\xf0\x14\x79\xf5\xf1\x71\xe0\xe3\xe7\xaa\xcb\xde\x9b\xd0\xc2\x25\x3e\xc1\xdd\x41\x4f\x97\x07\x3d\xdc\x1e\x78\xba\x3e\xe8\x63\x5e\x61\x5f\xcd\x38\x9f\xcd\x71\xf0\x5e\xa2\xc1\x69\x08\xb2\xbd\x15\xa3\x12\x8c\x3f\x3d\xd0\x86\x57\x43\xf6\x6a\xc8\x1e\xb7\x7e\x01\xbb\x3f\xa5\xff\x28\x56\xcc\xbb\xab\x66\x29\x89\xbc\x5f\x11\xeb\xed\x15\x65\x92\x42\xd4\x14\x8d\xed\x19\xa7\x9a\x32\x7d\x60\x84\x16\xd8\x92\x68\xb0\x70\x73\x74\x52\xc8\xb8\xd2\x84\x51\x97\x12\x9e\xb3\x8e\x7c\xa6\x6d\x8d\x62\x03\xf6\x99\x95\xd1\x23\x26\x97\x47\x7d\xba\x0b\x96\x7d\xfc\x46\x28\x52\x7b\x76\xca\xa3\xfa\xdf\x4f\xe7\xed\x06\x18\xef\xd4\xa3\x5e\xa6\xa3\x80\xf9\xc5\xc7\xcb\xf5\x07\xeb\xe5\xdd\xfb\x83\x5d\x98\x11\xe7\x84\x9b\x8a\x9c\x6b\x7b\x2e\xe4\x9c\x50\xfd\x1c\x68\x0f\x80\x12\xb7\x53\x5f\x1d\x70\xb5\xde\x31\x2c\x77\xba\xbb\xe2\xd9\x03\x07\xed\xc5\xfb\xda\x65\x66\xc4\xd6\xb5\xcc\x7a\x61\xe3\x69\x81\x7d\xb6\x39\x64\xce\x8d\x99\xf6\xde\xe8\xb8\x73\xfd\xcf\xb8\x43\xea\x0e\x87\x1a\xe8\xd3\x04\xcf\xba\x55\x9a\xe1\x92\x25\xec\xc7\x15\x71\x8e\x18\x33\x2d\xa7\xdb\xf9\x88\xba\x5f\x34\xee\xbb\x43\x76\x68\x1e\x1e\xa1\x81\x0e\x5b\x72\x99\x48\xcd\x56\x18\x6a\x1f\x52\x5c\xeb\x9b\x5e\x98\x86\xc5\x2c\x33\xaf\x48\xa6\x6c\xbd\xe3\x43\xd3\xec\x09\xd1\xdf\x61\x9e\xfb\xba\x63\x68\x67\x9f\xa7\x4f\x00\x08\x36\x08\x3c\xb0\xda\x7b\x48\xc1\xb2\x5e\x31\xac\x67\x16\x0c\x9e\xc6\xe9\xd0\xea\x8f\x35\x35\xb5\xa7\x2d\xe7\x2a\x5e\x3d\xc4\xd1\x8b\x72\x7f\xc9\x0d\x8f\x56\xbd\xa7\xef\x38\x6f\xfc\xde\xc7\xec\x78\x1a\x9c\xe7\x99\x9a\x7e\x46\xa6\xaf\x79\xe9\x29\xf9\x5e\x26\xa5\x27\xec\x5e\x66\xa4\x17\xec\x3e\x0a\xd8\xc3\x68\xf8\x9b\x8b\xde\x8a\xda\x6d\x22\x7c\x8d\xc3\x0f\xdf\xaa\xf1\xa6\x2d\x93\xe2\x9e\xb5\x9c\xfd\x29\x5b\x5d\xe8\x75\x5b\x8c\xed\x5e\x30\xde\x98\x7b\xaa\x9b\x27\x3c\x1f\x15\x1b\x9e\xc4\x7d\xad\x9d\x3d\x4d\xe1\x70\xcf\xd8\xd6\x4e\x05\xb9\xcf\xcd\xef\x7f\x40\x62\x3e\x7f\x4d\xcb\x5f\xd3\xf2\xe2\x22\x40\x48\x99\x16\xb2\xaf\x4f\x9d\x55\x86\xda\xb3\x3b\x65\x75\x14\x58\x44\x5c\xb3\x15\x23\xe9\x53\xd3\xd4\x6b\x02\x21\xe3\xf2\x36\x95\xbb\x5a\xb5\x09\xee\x44\xae\x49\x7d\x15\x18\xb9\xf2\xb0\xbd\xd0\x90\x49\x1a\x65\xc2\xeb\xd0\x4c\x26\x45\x48\x4a\x95\x6b\xa7\xbb\x6c\xe7\x9b\xc7\xf4\x72\x82\xfe\xb1\x67\x79\xaf\xaf\xa7\x14\xbe\x96\xd7\x01\xcf\x99\xf5\x03\x24\x96\xef\x7d\x71\x71\xc2\x62\xca\x5e\x58\x39\x68\x43\xb9\x51\xd1\x21\x65\x2f\x5d\x41\x0d\x5b\x96\x24\x4e\x71\x33\xbb\xe1\xb3\x66\xa5\x94\x01\x75\x59\x66\x78\xd1\x55\xa6\xc2\xa4\xee\x86\x95\x4b\x83\x6d\xed\x98\xcb\x4c\x69\xc3\xd1\x12\x88\xbb\x79\x58\x6e\x04\x00\xe3\x5e\x27\xf0\x4a\xa7\x02\xef\x28\x88\x03\x60\x2b\x8b\xbf\x91\xdd\x1b\x4d\x69\x96\xa0\xa6\x37\xef\x5f\xfc\xa2\xf9\x3f\x5a\xae\xb3\x65\xba\xea\x4d\x97\x0d\xe3\x76\x95\x14\x32\x71\x9d\x97\x5e\xdb\x3a\xf6\x3c\x26\x53\xbe\x69\xe1\x1f\x51\xf9\x53\x9a\xb2\x17\x73\xde\xba\x93\xae\x0d\x72\xb6\x69\xdc\x41\x3d\x92\xe3\x17\xdb\xf5\x25\x1d\x95\x0f\x8d\x75\xf5\x2e\xb1\x1e\xf0\x9f\xda\xd7\x01\xce\x52\x66\x25\x8e\xcb\xa4\x3b\xed\xf3\x8f\xff\x32\x13\x44\x2b\xb3\xc8\x7f\x11\x49\x9e\xd2\x34\x41\x96\xfe\x9e\xd7\x34\x5e\xaf\x45\xbd\x5e\x8b\x2a\xdb\xeb\xb5\xa8\x67\x81\x7b\x51\xd7\xa2\xd4\x4f\xcc\xcb\xcc\xcf\x7f\x62\xcf\xb7\xf1\x67\x34\x22\x67\x59\xae\x1a\xe3\x67\xc2\xe8\xe6\x6f\x46\xa1\x96\x79\xa3\xad\x3e\x39\x1e\x63\x3a\xbf\x28\x6f\x7a\x3e\x99\xbd\x1a\xea\x57\x43\x7d\x68\xff\x2f\x0c\x75\x47\x97\xd6\x9f\x9b\xe3\xf4\xc6\xa3\x5c\xc7\x19\x94\xeb\x55\xf3\x5c\x40\x8a\x0f\x2c\xcd\xd3\x9a\xd7\x51\xea\x8e\x71\x2e\xf6\xe3\x22\xc2\x28\x61\xdc\xa6\xc0\xca\x9d\x23\x3d\x00\xb5\x6f\xb7\xb8\x77\x60\xb2\x24\x77\xd3\x35\x9f\x07\xdb\x4f\x08\xb3\x55\x05\x48\x75\x06\x7a\x08\x89\x22\x8a\x2e\x2b\xbf\x17\xd6\x06\x4e\xde\xa0\x00\xab\xce\x3c\xa4\xc4\x0c\x40\x1e\xd9\xb3\xcc\xf6\x7d\x9d\x12\x55\x0b\xc1\xbe\xaf\xf3\x19\x59\x42\xd1\x29\xad\x65\xfa\xfb\xe8\x29\x98\xc7\x22\xa9\x51\x8c\xa6\x27\x1d\xec\xeb\x2e\xc7\x72\xaa\x79\xd4\xc1\xf6\x3a\x92\x93\x58\x2a\x92\xf7\x64\xb9\xaa\xed\x29\xd6\xc3\x13\x48\x65\x6b\xb6\x1a\xe5\x56\xd1\x93\x5f\x77\x68\xdf\x06\xec\x32\x57\xe1\x9a\xc2\x8d\x6a\xf6\x69\x9d\xcb\x8b\x35\x66\x46\x9d\x43\x13\x11\xb6\x5a\x8c\x4e\x00\x1a\x65\xdc\x6c\x21\x3a\x86\xb7\x6d\xb6\x0c\x81\xd5\xd5\x2a\x9e\x68\x02\x5a\x1c\x78\x0b\x8e\xa1\xe0\x6e\xd3\xed\xc9\x9a\x61\xd5\x70\x5a\x82\xd9\x57\x61\x9c\xd6\xee\x95\x15\x0f\xef\xc5\x60\xbd\x69\x44\x7b\xaf\x15\x19\x07\xfb\x0e\x4c\x9d\xdd\xe9\x52\xb3\x04\x95\x5e\x48\xe4\x8a\x95\x4f\x58\x79\x05\x51\x5f\x51\x15\x66\xca\xde\x9a\xdd\x93\xa2\xf7\xa0\x28\x72\x0f\xd5\x08\x4e\xc5\x0a\x6e\x8e\x10\x05\x20\xb7\xc7\xb3\x9b\x0e\xc0\xef\x6d\x0a\x6a\x1a\xb6\x54\x5d\xbb\x35\x1b\x95\xfe\x6e\x5f\xbd\xf1\x26\x75\x61\xdf\x36\x3a\x90\xcb\x54\x85\xde\x2d\xaa\xfd\x2b\x3a\x3f\x1a\xf7\x94\x94\x6a\x89\xed\x1e\x5d\x61\x5b\xe7\x29\x72\x90\x84\x91\x7d\xa5\xb0\x18\x0c\x8c\x47\x76\x8b\x92\xc7\x10\x91\x46\x96\x28\xc0\x65\xdb\x69\x63\x23\xdf\x83\x54\x9b\x88\xec\x44\x5e\x12\xaa\x66\x83\x72\xc2\x70\xd7\x7d\xff\x6c\xd6\x9e\xe1\x6f\x8b\x87\xd0\xce\x80\x51\x9d\x5b\x69\xc0\xa8\xf0\x2d\xc5\xee\xc2\x1e\x99\x4b\xf7\x68\xe7\x0a\x16\x32\xa7\x4b\xf8\x8c\x89\xa2\x4b\xf8\xce\x37\x5c\x6c\x9f\x8e\x57\x5b\x99\xf7\xb4\xb8\x2b\x56\xee\xf1\x32\xe7\x6b\x0f\xb8\x3d\x71\xfa\x76\xdb\xdb\xb8\x8e\x87\x16\xee\xf9\x0c\x73\xc4\x62\x52\x35\xfe\xa3\x05\xfb\x32\xdc\xe8\x88\xe7\xa6\x6b\xe4\xb1\xbd\xd6\x59\xbe\x4a\x07\x23\x98\xcd\x6f\xe0\xe7\x7f\xfa\xf0\x11\xb6\x6b\xe2\x30\xbd\xbb\x72\xfb\x80\x37\xee\xb9\x37\x9b\x5e\xd6\xd0\x76\xff\xa7\xea\xf3\x58\xeb\x7c\x19\x84\x22\x1d\xdd\x4c\x66\xa3\x62\xe0\x70\x5e\xbc\xa5\x69\xe7\x19\x31\xa5\x72\x52\xa3\x9f\xff\xfc\x97\x3e\x74\x91\x94\xa2\x26\x2b\x6c\x19\x51\x3c\x83\xd7\xc1\x88\xcf\xae\x57\x5d\x70\xd2\xee\x33\xda\x56\x72\xa7\x76\xb9\x87\xf9\xea\x07\xd7\xa1\x77\x57\x8c\x68\x4a\xfd\xba\x93\xbe\xe2\x0d\xc0\xe6\x6c\xc5\xe1\x5c\x7d\x01\xb0\x11\xc8\x37\x7c\x38\x0b\x9c\x36\xdf\xe3\xef\x30\xbc\xac\x6e\xdb\xb9\x95\x21\x1c\x3f\x90\xd8\xf0\xeb\x37\x7c\x68\x11\x76\x73\x5a\xd6\x48\xa4\x1f\x81\xad\xc4\x35\x13\x36\x2c\x14\xb4\xf6\x07\xa7\x4c\x35\x3f\xd5\x62\xd1\x42\x60\x43\x95\xa5\x05\x67\x9b\x45\x75\xac\xc9\x43\x72\x55\xa7\xef\x6d\xc0\x8b\x6a\x49\x2f\x8c\xf6\xef\x84\x9e\x8e\xea\x96\x50\xbf\x24\xee\xe4\xa3\x4b\xcc\xc6\xa0\x65\xee\x60\x2b\x2d\xa4\x61\x69\xe5\x4b\xbe\x3c\xb9\x29\x54\xf8\x6c\xf8\xef\xff\x19\xfc\x6f\x00\x00\x00\xff\xff\x92\xc5\xda\x35\xb7\x5b\x00\x00"),
+			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3c\x5d\x73\xdb\x3a\x76\xef\xfa\x15\x67\xe2\x87\x24\x33\x16\x75\xef\xdd\xdd\xf6\x56\x7d\xe8\x68\x95\x64\xaa\x26\xb1\x3d\x96\x72\xb7\xfb\x78\x44\x1e\x51\x58\x91\x00\x0b\x80\x96\xb5\x9d\xfe\xf7\x0e\x00\x52\xa2\x24\x7e\x80\xb6\xbc\xeb\x76\x8d\x97\xc4\x14\x70\x70\xbe\x70\xbe\xf0\x71\x05\xc3\xcb\xb5\xc1\x15\x7c\x63\x21\x71\x45\x11\x68\x01\x7a\x4d\x30\xc9\x30\x5c\x13\xcc\xc5\x4a\x6f\x51\x12\x7c\x11\x39\x8f\x50\x33\xc1\xe1\xc3\x64\xfe\xe5\x23\xe4\x3c\x22\x09\x82\x13\x08\x09\xa9\x90\x34\xb8\x82\x50\x70\x2d\xd9\x32\xd7\x42\x42\xe2\x00\x02\xc6\x92\x28\x25\xae\x55\x00\x30\x27\xb2\xd0\x6f\x6e\x17\xb3\xe9\x67\x58\xb1\x84\x20\x62\xca\x0d\xa2\x08\xb6\x4c\xaf\x07\x57\xa0\xd7\x4c\xc1\x56\xc8\x0d\xac\x84\x04\x8c\x22\x66\x26\xc6\x04\x18\x5f\x09\x99\x3a\x34\x24\xc5\x28\x23\xc6\x63\x08\x45\xb6\x93\x2c\x5e\x6b\x10\x5b\x4e\x52\xad\x59\x16\x0c\xae\x60\x61\xc8\x98\x7f\x29\x31\x51\x0e\xac\x9d\x53\x0b\xf8\xb3\xc8\x0b\x1a\x2a\xe4\x16\x5c\xb8\x86\xdf\x48\x2a\x33\xc9\x2f\xc1\x4f\x83\x2b\xf8\x60\xba\xbc\x2b\x7e\x7c\xf7\xf1\x5f\x61\x27\x72\x48\x71\x07\x5c\x68\xc8\x15\x55\x20\xd3\x63\x48\x99\x06\xc6\x21\x14\x69\x96\x30\xe4\x21\x1d\xc8\xda\xcf\x10\x80\x45\xc0\xc0\x10\x4b\x8d\x8c\x03\x5a\x32\x40\xac\xaa\xdd\x00\xf5\xe0\x6a\x70\x05\xb6\xad\xb5\xce\xc6\xa3\xd1\x76\xbb\x0d\xd0\xa2\x1b\x08\x19\x8f\x4a\xea\x46\xdf\x66\xd3\xcf\x37\xf3\xcf\x43\x8b\xf2\xe0\x0a\x7e\xf0\x84\x94\x02\x49\xff\x95\x33\x49\x11\x2c\x77\x80\x59\x96\xb0\x10\x97\x09\x41\x82\x5b\x23\x38\x2b\x1d\x2b\x74\xc6\x61\x2b\x99\x66\x3c\xbe\x06\x55\x48\x7d\x70\x75\x24\x9d\x03\xbb\x4a\xf4\x98\x3a\xea\x20\x38\x20\x87\x77\x93\x39\xcc\xe6\xef\xe0\x8f\x93\xf9\x6c\x7e\x3d\xb8\x82\x3f\xcd\x16\xff\x7e\xfb\x63\x01\x7f\x9a\xdc\xdf\x4f\x6e\x16\xb3\xcf\x73\xb8\xbd\x87\xe9\xed\xcd\xa7\xd9\x62\x76\x7b\x33\x87\xdb\x2f\x30\xb9\xf9\x33\x7c\x9d\xdd\x7c\xba\x06\x62\x7a\x4d\x12\xe8\x31\x93\x06\x7f\x21\x81\x19\x46\x52\x64\x64\x5a\x2a\x50\x89\x80\xd1\x0f\xf3\xb7\xca\x28\x64\x2b\x16\x42\x82\x3c\xce\x31\x26\x88\xc5\x03\x49\x6e\xd4\x23\x23\x99\x32\x65\xc4\xa9\x00\x79\x34\xb8\x82\x84\xa5\x4c\x5b\x2d\x52\xe7\x44\x99\x69\x2e\xb9\xb6\x06\x98\xb1\x42\x9d\xc6\x80\x19\xa3\x47\x4d\xdc\x62\x13\x6c\x7e\x55\x01\x13\xa3\x87\x9f\x07\x1b\xc6\xa3\x31\x4c\x73\xa5\x45\x7a\x4f\x4a\xe4\x32\xa4\x4f\xb4\x62\xdc\x6a\xfe\x20\x25\x8d\x11\x6a\x1c\x0f\x00\x90\x73\x51\x20\x6f\xfe\x04\xb7\xea\x44\x92\x90\x1c\xc6\xc4\x83\x4d\xbe\xa4\x65\xce\x92\x88\xa4\x05\x5e\x4e\xfd\xf0\x53\xf0\xfb\xe0\xe7\x01\x40\x28\xc9\x0e\x5f\xb0\x94\x94\xc6\x34\x1b\x03\xcf\x93\x64\x00\x90\xe0\x92\x92\x02\x2a\x66\xd9\x18\x42\x4c\x29\x19\x6e\x06\x00\x1c\x53\x1a\x83\x85\xab\x02\xfb\xb9\xa2\x84\x03\xc3\x7e\x33\x2c\x96\x22\x2f\x87\x55\x7f\x77\xe3\x4b\x7c\x51\x53\x2c\x24\x2b\xff\x1e\xc2\xc6\xf4\x2f\xfe\x1f\xee\xff\xef\x78\xf2\x47\x33\xa5\xfd\x3b\x61\x4a\x7f\x3d\x7c\xfb\xc6\x94\xb6\xdf\xb3\x24\x97\x98\x94\xc8\xd9\x4f\x6a\x2d\xa4\xbe\x39\x4c\x39\x04\xb6\x59\xba\x5f\x18\x8f\xf3\x04\x65\xd1\x7d\x00\xa0\x42\x91\xd1\x18\x6c\xef\x0c\x43\x32\xdf\x0a\xa6\xd9\xd1\xc3\x8a\x01\xba\x93\x8c\x6b\x92\x53\x91\xe4\x29\xdf\xc3\x8e\x48\x85\x92\x65\xda\xb2\xd9\x58\x1d\x0b\x1a\xb2\x35\x2a\x1a\xb8\xb5\xfb\x17\x25\xf8\x1d\xea\xf5\x18\x02\xa5\x51\xe7\x2a\xa8\xfe\xea\x98\x7b\x57\xf9\xa2\x77\x06\x27\xb3\xb2\x78\xdc\x34\x8b\x66\xa9\x31\x10\xb0\x5d\xb3\x70\x6d\x35\xd8\xcd\xbb\x45\xe5\x64\x4c\xd1\xf9\xec\xa5\x26\x05\x67\x5a\x70\x84\xcb\x24\x3e\xc6\x24\x42\x4d\x4f\xc1\x23\x41\xa5\xe1\x83\xa4\xe1\x47\xa5\x51\xd6\x62\x54\xf0\xa3\xf8\x7d\xa2\x8f\xf0\x98\x1f\x8d\xea\xc6\xc5\xcd\x6c\x67\xa5\x47\x0a\x73\xeb\x29\xa2\x5c\x5a\x52\x1b\xe7\x3e\xe9\xe0\xa6\xfe\x74\xfc\xd1\x47\x22\x3c\x4f\x97\xc6\x29\xae\x2a\x93\xa3\xd6\x94\x66\x5a\x35\x4e\xbe\x42\x96\xe4\x92\x02\x49\xa1\x31\x59\xbb\xa0\x18\x71\x2c\x8f\x63\x28\x0e\x19\xa3\x8b\x31\xc9\xc1\xa1\xdb\xc3\xcf\x4e\xc9\xc3\x35\xa5\x38\x2e\x3a\x8b\x8c\xf8\xe4\x6e\xf6\xdb\xef\xe6\x47\x9f\xe1\x18\x7f\xbb\xa6\x8c\x41\x37\x02\x74\x3d\xf7\xd6\xd5\xad\x2c\x98\xdc\xcd\xf6\x63\x33\x29\x32\x92\x7a\xbf\x88\x5d\xab\x98\xba\xca\xd7\x93\x99\xde\x1b\x64\x0a\xff\x1a\x19\x1b\x47\x6e\xd2\x62\xd1\x51\x54\xe0\xef\x7c\x21\x33\x2e\xcc\xb8\x02\xe2\xba\x2a\x8f\xb2\x89\x95\xf1\x39\x62\xf9\x17\x0a\x75\x00\x73\x92\x06\x8c\x31\x00\x79\x12\x19\xd3\xf8\x40\x52\x83\xe1\x6d\xcc\xd9\x5f\xf7\xb0\x55\x19\xe7\x24\xa8\x49\xe9\x13\x98\x76\x91\x9b\x78\xe3\x01\x93\x9c\xae\x8d\xd7\xb0\xae\x5a\x92\x99\x05\x72\x5e\x81\x67\xbb\xa8\x00\xbe\x0b\x49\x36\x3e\x19\x5b\x47\xad\xc6\xa3\x51\xcc\x74\x69\xe2\x43\x91\xa6\x39\x67\x7a\x37\xaa\xc4\x48\x6a\x14\xd1\x03\x25\x23\xc5\xe2\x21\xca\x70\xcd\x34\x85\x3a\x97\x34\xc2\x8c\x0d\x2d\xea\xdc\x9a\xf9\x20\x8d\xae\x64\xe1\x14\xd4\xfb\x23\x5c\xcf\xb4\xd2\x35\x6b\x3a\x5b\x24\x60\xcc\xa8\x91\x35\x16\x43\x1d\x15\x07\x46\x9b\x4f\x86\x3b\xf7\x9f\xe7\x0b\x28\xa7\xb6\xc2\x38\xe5\xbe\xe5\xfb\x61\xa0\x3a\x88\xc0\x30\x8c\xf1\x95\x75\xae\x26\x3a\x92\x22\xb5\x30\x89\x47\x99\x60\x5c\xdb\x3f\xc2\x84\x11\x3f\x65\xbf\xca\x97\x29\xd3\x2e\x74\x21\xa5\x8d\xac\x02\x98\x5a\xbf\x07\x4b\x82\x3c\x33\x16\x20\x0a\x60\xc6\x61\x6a\xbc\xc5\x14\x4d\x40\xf5\xc2\x02\x30\x9c\x56\x43\xc3\x58\x3f\x11\x54\x5d\xf6\x69\x67\xc7\xb5\xca\x0f\xa5\xff\x6c\x90\x97\x5d\x9b\xf3\x8c\xc2\xa3\xf5\xe2\x56\xac\x16\x86\x27\xce\xde\xec\x0d\xa5\x6b\xf5\x6b\xd4\xa2\x81\x6a\x73\xf6\x11\x80\x69\x4a\x6b\x3e\x9f\x60\xb3\x40\xb5\x81\xe1\xb0\xa6\x5b\xf3\x84\xae\x59\x3b\x82\xeb\xfa\x1f\xeb\x68\xc6\x75\xf3\x64\x3e\x13\xda\x49\x51\xd1\x2c\xc5\x98\x9a\xbb\x34\x0a\xf1\xb8\x19\xcd\xa1\x47\xfd\x89\xc9\x67\x83\x32\x1a\x7a\x27\xc5\xe3\x6e\x4e\xa1\x24\xfd\x6c\x78\xec\x22\x04\x5a\x27\xf2\x5c\x20\x92\x62\x93\x12\xec\xda\x00\x1d\x49\x7a\x66\xdc\x98\xf3\xb5\x77\x09\x6a\x93\xe1\xdd\x17\x30\xac\xce\x37\x4a\x1f\x3c\x35\xc0\x34\x8c\x22\x93\x4e\xb4\x77\xf2\xa4\x10\x6c\x10\x7b\x31\x50\x8c\x2b\x0a\x73\xd9\xca\xf9\x03\xc0\xa5\x10\x09\xe1\xa9\x17\x3c\x6e\x42\xc6\xc8\xd9\x5f\x2d\x4b\x2f\x86\xa6\xea\xd4\xd4\x1e\xe0\x1a\xec\xe0\x71\x7b\x20\xb9\x14\xca\x43\x23\xdb\x79\xd2\x39\x57\x91\x2d\xf9\x9b\x25\x92\xaf\xc9\x2c\x59\xf4\x2f\x61\x94\x22\xca\x88\x47\xc4\xc3\x8e\xd5\xd4\xe8\x26\x7a\xce\x57\x76\x43\x29\x71\xd7\xd8\x2b\xc5\x07\x6a\xd5\xe2\x23\xf9\x7c\x37\xbd\x2f\x67\x36\x42\xec\x36\xd0\x67\x38\x98\x54\xc0\x0d\xb3\x16\xd5\x86\x8f\x1b\xda\x5d\x5b\x07\x82\x8c\x17\xd1\x55\x07\x48\x80\xe9\x04\x42\x83\xe4\x8a\x99\x94\xf9\x83\xfa\x08\x79\x51\xa1\x0b\x05\xe7\x26\xee\xd2\x02\x24\xa5\x42\x93\xa3\xbb\x13\xa2\xa4\x4c\x28\xa6\x6d\xf2\x1d\xc0\x4c\x43\x88\xbc\xc4\x0a\xfe\x33\xf8\xc3\x4f\xff\x52\x9d\x51\xd9\xc8\xb7\x13\xe8\xdd\xd7\xe9\xfc\xea\x9f\xc1\x55\xe6\x34\x45\x55\x10\x10\xae\x91\x71\x15\xc0\x04\xfe\xe3\xeb\xfc\xd0\xa7\x13\xe8\x86\x76\x4a\xdb\x88\x4e\x01\xe6\x5a\xa4\xa8\x59\x88\x49\xb2\x2b\x53\x5b\x43\xbb\xeb\x61\x62\xa1\xe9\xa4\x13\xe2\x31\x2b\x5d\x50\x1f\x0a\xbe\x62\x71\x2e\xa9\x8c\xa3\x2c\x83\xd1\x04\xc6\x5a\xe6\xca\x07\xd1\x13\x09\x2d\x77\x16\x1f\x2b\x0e\x30\x41\x27\xf2\x48\x05\x70\x63\x64\xa4\xd7\xa8\xbd\x04\x2f\x85\xd0\x27\xd2\x57\x80\x92\x00\x13\x25\x80\xa5\x99\x30\x49\xb1\x49\x53\x5c\x12\x73\x9c\xed\x77\x33\x35\xe8\xe8\xe9\xbb\x3a\x0a\x98\xdd\x9d\x6a\x16\xc8\x86\xf6\xc5\x4e\xe7\x59\xac\x40\x29\x31\x6a\x6d\x72\x85\x00\xe0\x7b\x7e\x96\x99\xd5\xb7\x25\x01\x9a\x14\x86\x45\x25\xac\x0d\xed\xba\x88\x84\x3e\xce\x0f\x3c\xa2\xa3\x5a\x52\xdf\xdf\x18\x0b\x50\x10\x2a\x69\x45\x92\xb8\xae\x4d\x56\x36\xf9\x92\x24\x27\x4d\x36\x5f\x89\x44\xa8\x4c\xaa\x12\x52\xa6\xd5\x48\x3c\x90\x7c\x60\xb4\x1d\x6d\x85\xdc\x30\x1e\x0f\xb7\x4c\xaf\x87\xce\xa5\xa9\x91\xad\xad\x8d\xae\xec\x3f\x5e\xfc\x5a\xdc\x7e\xba\x1d\xc3\x24\x8a\x40\xd8\x5a\x6b\xae\x68\x95\x27\xb0\x62\x94\x18\x65\x3d\x64\xf1\xd7\x36\x93\xbc\xf6\x02\x9a\xb3\xe8\xdf\xde\x5f\x9a\xe7\x22\x73\x85\xb7\xde\x7c\x9f\xdb\x82\xf0\x0e\xb6\x6b\xb2\x24\xea\x83\x4d\x16\x12\x4c\x76\xb9\xa1\x66\x9f\x53\x6d\x69\xae\x6c\xda\xe9\x52\xaf\xee\x45\xd6\x27\x50\x83\x7d\x79\xbe\x8b\xc0\xa1\x07\xbe\x5e\x41\x95\x69\x89\x08\x31\xb9\x2f\x7d\x41\xe7\xfa\x3d\x5b\xbb\x19\xea\x75\xa9\xd3\x16\x56\x61\xef\xf6\xee\xa5\x73\xf1\x79\x2b\x81\xbf\x29\xaa\x56\x69\xfd\xcd\x57\x0f\x6d\x3c\x63\x83\x23\xfa\x80\xa1\x1f\xd1\x1e\xf2\xa9\xba\xe9\x2e\x12\x3c\x82\xb1\x33\xe4\x0f\xa2\x6f\x8f\x92\x5c\xeb\xe3\x0d\x00\x58\xa7\x2a\xbb\xd6\xcb\x0c\xf8\x1b\xdf\xde\x80\x25\x25\x84\xca\x8f\xb6\x46\x36\xde\x89\x84\x85\x5e\xcc\x84\xde\x0c\x35\x2d\x5c\x53\xb8\x51\x79\xea\xe6\xf1\x1d\xd5\x9b\x17\xa6\x11\xc7\x65\xd2\x6d\x8f\x4e\xe7\xf0\xb3\x76\x65\x73\x25\xbc\x17\xa7\xc6\xd7\xb8\xba\x36\x2c\x69\xef\xa1\x66\x1e\x8b\xd9\x35\xc5\x31\x53\x6b\xa1\xdf\xf4\xac\x68\x6f\x7a\xf6\x22\x7a\x96\x4b\xaf\x58\xa9\x27\x91\xfe\x04\x0e\x81\x75\xd3\x35\x34\x68\x7a\xba\x66\x2f\xca\x7d\xea\x08\x60\x6b\x58\x5a\x33\x1e\x77\xae\x87\xa3\xe5\x37\x29\xe3\xf6\x90\xca\x5d\xa3\xa9\xcd\x1b\xbf\x63\x66\x82\x49\x17\x56\xfa\x24\x4a\x2e\x03\x2c\xf2\x6d\x55\x49\x14\x4b\xbc\x2e\x99\x98\x85\x25\x8e\x5f\x69\x77\x4f\xab\xfe\x11\xb4\xcd\xc5\x4c\x2a\x5c\xa4\x6a\x78\x20\xdb\x27\xb7\xea\x6b\x7d\x3c\x13\xc9\x33\x3c\xcb\x64\x72\x9f\x3e\xfa\x20\x07\x4f\x59\xe6\xfe\x31\x48\xdf\x24\xd0\xdb\x34\xfd\x1d\x92\x45\xe8\x95\x30\x7a\x83\xb4\x89\xa5\x77\xd2\x08\x4f\x91\x57\x9f\xe4\x11\x7c\x12\xc8\xea\xb2\xf7\x26\xb4\xc8\x35\x9f\x90\x47\xc2\x13\xbc\x5e\x1f\x57\xe4\x93\x53\x42\x5f\x17\xe4\x0a\x30\x97\xb3\x39\x0e\xde\x6b\x34\x38\x0d\xd5\x2b\x6f\xc5\xa8\x54\xb9\x9e\x5e\xc1\x82\x37\x43\xf6\x66\xc8\x4e\x5b\xbf\x4a\x98\x3f\xa5\xff\x28\x56\xcc\xbb\xab\x66\x29\x89\xbc\xdf\xee\xd0\xfb\x4f\x94\x49\x0a\x51\x53\x34\xb6\x87\x87\x6b\xf6\xbf\x03\x23\xb4\xc0\xee\x35\x06\x0b\x37\x47\x27\x85\x8c\x2b\x4d\x18\x75\x29\xe1\x25\x37\x68\x2f\x74\x5e\xa0\x38\xd9\xf4\xcc\x2d\xc7\x93\x94\xd9\x01\xed\xde\x09\xec\xe3\x37\x42\x91\xda\x43\xc9\x1e\xdb\xea\xfd\x74\xde\x9e\x2c\xe1\x9d\x7a\xd4\xcb\x74\x14\x30\xbf\xfa\x78\xb9\xfe\x60\xbd\xbc\x7b\x7f\xb0\x0b\x33\xe2\x92\x70\x53\x91\x73\x6d\x0f\x5c\x5e\x12\xaa\x9f\x03\xed\x01\x50\xe2\x76\xea\xab\x03\x6e\x13\x75\x0c\xcb\x9d\xee\xde\x4a\xec\x81\x83\xf6\xe2\x7d\xed\x32\x33\x62\xf3\xa9\x4a\x79\x63\xe3\x69\x81\x7d\xf2\x7e\x99\x73\x63\xa6\xbd\x4f\x10\xdc\xbb\xfe\x17\x3c\x7a\xe4\x6e\x5d\x18\xe8\xd3\x04\x2f\x7a\x06\x29\xc3\x25\x4b\xd8\xcb\xed\x8e\x1c\x31\x66\x5a\x4e\xf7\x02\xbb\x06\xbe\x47\x4f\x0e\xcd\x73\xdf\xa3\x86\x0e\x5b\x72\x99\x48\xcd\x56\x18\x6a\xdf\x5a\xea\x53\xaa\xa9\x00\x58\xcc\x32\xeb\x51\xe7\x7c\x52\x35\xb5\xb8\x7a\xf1\x37\x98\xe7\xa1\xee\x7c\xf7\xc5\xe7\xe9\x57\x51\xb5\x97\x34\xf6\xac\xf6\x1e\x52\xb0\xac\x57\x0c\xeb\x5d\x88\xf5\x2f\x4a\xba\x56\x7f\x5e\xb8\xa9\x3d\x6d\x39\x57\xf1\xea\x21\x8e\x5e\x94\xf7\x29\x15\x57\x57\xfd\xe5\xcb\xc1\x1e\x5d\xfb\x98\x9d\xa7\x6c\xb4\xf6\x36\x35\xfd\x8c\x4c\x5f\xf3\xd2\x53\xf2\xbd\x4c\x4a\x4f\xd8\xbd\xcc\xc8\x8b\xed\x55\xf4\x30\x1a\xfe\xe6\xe2\x05\xf6\x2d\x7c\x8d\xc3\x8b\x9f\x81\xf0\xa6\x2d\x93\xe2\x81\xb5\x1c\xaa\x2d\x5b\x5d\xe8\x75\x57\x8c\xed\x5e\x30\xde\x98\x7b\xaa\x9b\x27\x3c\x1f\x15\x1b\x9e\xc5\x7d\xad\x9d\x3d\x4d\xe1\x70\xcf\xd8\xd6\x4e\x05\xb9\xcf\xcd\xef\x5f\x20\x31\x9f\xbf\xa5\xe5\x6f\x69\x79\x71\xc3\x2e\xa4\x4c\x0b\xd9\xd7\xa7\xce\x2a\x43\xed\xa1\xd8\xb2\x3a\x0a\x2c\x22\xae\xd9\x8a\x91\xf4\xa9\x69\xea\x35\x81\x90\x71\x79\x4d\xd9\xdd\x59\xde\x04\xf7\x22\xd7\xa4\xbe\x09\x8c\x5c\x79\xd8\xde\x14\xcc\x24\x8d\x32\xe1\x75\x1a\x35\x93\x22\x24\xa5\xca\xb5\xd3\x5d\xb6\xf3\xcd\x63\x7a\x39\x41\xff\xd8\xb3\xbc\x30\xdf\x53\x0a\xdf\xca\x7b\xf6\x97\xcc\xfa\x01\x12\xcb\xf7\xbe\xb8\x38\x61\x31\x65\x6f\x82\x1e\xb4\xa1\xdc\xa8\xe8\x90\xb2\x97\xae\xa0\x86\x2d\x4b\x12\xa7\xb8\x99\xdd\xf0\x59\xb3\x52\xca\x80\xba\x2c\x33\xbc\xea\x2a\x53\x61\x52\x77\xc3\xca\x6d\xfc\xb6\x76\xcc\x65\xa6\xb4\xe1\x68\x09\xc4\x5d\xe9\x2f\x37\x02\x80\x71\xaf\xa3\xed\xa5\x53\x81\x0f\x14\xc4\x01\xb0\x95\xc5\xdf\xc8\xee\x9d\xa6\x34\x4b\x50\xd3\xbb\x8f\xaf\x7e\xd1\xfc\x1f\x2d\xd7\xd9\x32\x5d\xf5\x0a\xe9\x86\x71\xbb\x4a\x0a\x99\xb8\xce\x4b\xaf\x6d\x1d\x7b\xd1\x81\x29\xdf\xb4\xf0\xef\x51\xf9\x53\x9a\xb2\x57\x73\x91\xa9\x93\xae\x0d\x72\xb6\x69\xdc\x41\x3d\x92\xe3\x57\xdb\xf5\x35\xdd\x41\x0b\x8d\x75\xf5\x2e\xb1\x1e\xf0\x9f\xda\x67\x77\x2e\x52\x66\xf5\x3c\x50\xe8\x1f\xff\x65\x26\x88\x56\x66\x91\xff\x26\x92\x3c\xa5\x69\x82\x2c\xfd\x5b\xde\x7f\x7c\xbb\x6f\xfc\x76\xdf\xb8\x6c\x6f\xf7\x8d\x9f\x05\xee\x55\xdd\x37\x56\xbf\x30\x2f\x33\x3f\xff\x85\x3d\xdf\xc6\x5f\xd0\x88\x5c\x64\xb9\x6a\x8c\x9f\x09\xa3\x9b\xbf\x19\x85\x5a\xe6\x8d\xb6\xfa\xec\x78\x8c\xe9\xfc\xaa\xbc\xe9\xe5\x64\xf6\x66\xa8\xdf\x0c\xf5\xa1\xfd\xbf\x30\xd4\x1d\x5d\x5a\x7f\x6e\x8e\xd3\x1b\x8f\x72\x1d\x67\x50\xae\x57\xcd\x3b\x3c\x29\x3e\xb2\x34\x4f\x6b\x9e\x1d\xab\x3b\xc6\xb9\xd8\x8f\x8b\x08\xa3\x84\x71\x9b\x02\x2b\x77\x8e\xf4\x00\xd4\x3e\x8a\xe6\x1e\x58\xcb\x92\xdc\x4d\xd7\x7c\x1e\x6c\x3f\x21\xcc\x56\x15\x20\xd5\x19\xe8\x31\x24\x8a\x28\xba\xae\xfc\x5e\x58\x1b\x38\x7b\xdc\x09\xac\x3a\xf3\x90\x12\x33\x00\x79\x64\xcf\x32\xdb\x87\xeb\x4a\x54\x2d\x04\xfb\x70\xdd\x17\x64\x09\x45\xe7\xb4\x96\xe9\xef\xc9\x1b\x6b\xa7\x22\xa9\x51\x8c\x06\x41\xba\x67\xd3\x8e\xe5\x54\xf3\x5a\x92\xed\x75\x24\x27\xb1\x54\x24\x1f\xc8\x72\x55\xdb\x53\xac\x87\xb7\x05\xcb\xd6\x6c\x35\xca\xad\xa2\x27\x3f\x9b\xd4\xbe\x0d\xd8\x65\xae\xca\x9b\x59\x4d\xcb\xac\x73\x79\x35\xdf\xcb\xec\x1c\x9a\x88\xb0\xd5\x62\x74\x02\xd0\x28\xe3\x66\x0b\xd1\x31\xbc\x6d\xb3\xa5\xe1\xb6\xd1\x13\x4d\x40\x8b\x03\x6f\xc1\x31\x14\xdc\x6d\xba\x3d\x59\x33\xac\x1a\x4e\x4b\x30\xfb\x2a\x8c\xd3\xda\xbd\xb2\xe2\xe1\x21\x36\xac\x37\x8d\x68\x1f\x8c\x40\xc6\xc1\x3e\xb0\x56\x67\x77\xba\xd4\x2c\x41\xa5\x17\x12\xb9\x62\xe5\xdb\x90\x5e\x41\xd4\x37\x54\x85\x99\xb2\xcf\x51\xec\x49\xd1\x7b\x50\x14\xb9\x17\xe0\x04\xa7\x62\x05\x37\x47\x88\x02\x90\xdb\xe3\xd9\x4d\x07\xe0\xf7\x36\x05\x35\x0d\x5b\xaa\xae\xdd\x9a\x8d\x4a\xff\xb0\x77\x04\xbd\x49\x5d\xd8\x47\x03\x0f\xe4\x32\x55\xa1\x77\x8b\x6a\xff\x3c\xdd\x4b\xe3\x9e\x92\x52\x2d\xb1\xdd\xc9\x15\xb6\x75\x9e\x22\x07\x49\x18\xd9\xe7\x7f\x8b\xc1\xc0\x78\x64\xb7\x28\x79\x0c\x11\x69\x64\x89\x02\x5c\xb6\x9d\x36\x36\xf2\x3d\x48\xb5\x89\xc8\x4e\xe4\x25\xa1\x6a\x36\x28\x67\x0c\x77\xdd\xf7\xef\x51\xee\x19\xfe\xbe\x78\x61\xf4\x02\x18\xd5\xb9\x95\x06\x8c\x0a\xdf\x52\xec\x2e\xec\x91\xb9\x76\xaf\x61\xaf\x60\x21\x73\xba\x86\x2f\x98\x28\xba\x86\x1f\x7c\xc3\xc5\xf6\xe9\x78\xb5\x95\x79\xcf\x8b\xbb\x62\xe5\x5e\x05\x75\xbe\xf6\x80\xdb\x13\xa7\x6f\xb7\xbd\x8d\xeb\x78\x68\xe1\x5e\xce\x30\x47\x2c\x26\x55\xe3\x3f\x5a\xb0\x2f\xc3\x8d\x8e\x78\x6e\xba\x46\x1e\xdb\x6b\x9d\xe5\x73\xaf\x30\x82\xd9\xfc\x16\x7e\xfd\xa7\x9f\x7e\x86\xed\x9a\x38\x4c\xef\x3f\xb9\x7d\xc0\x5b\xf7\x8e\xaa\x4d\x2f\x6b\x68\x7b\xf8\x5d\xf5\xdd\xc9\x75\xbe\x0c\x42\x91\x8e\x6e\x27\xb3\x51\x31\x70\x38\x2f\x1e\xa9\xb6\xf3\x8c\x98\x52\x39\xa9\xd1\xaf\xbf\xff\x43\x1f\xba\x48\x4a\x51\x93\x15\xb6\x8c\x28\xde\x97\xed\x60\xc4\x17\xd7\xab\x2e\x38\x69\xf7\x19\x6d\x2b\xb9\x53\xbb\xdc\x8b\xb7\xf5\x83\xeb\xd0\xbb\x2f\x46\x34\xa5\x7e\xdd\x49\x5f\xf1\xb8\x6e\x73\xb6\xe2\x70\xae\x3e\xad\xdb\x08\xe4\x3b\x3e\x5e\x04\x4e\x9b\xef\xf1\x77\x18\x5e\x56\xb7\xed\xdc\xca\x10\x8e\x5f\x1e\x6e\xf8\xf5\x3b\x3e\xb6\x08\xbb\x39\x2d\x6b\x24\xd2\x8f\xc0\x56\xe2\x9a\x09\x1b\x16\x0a\x5a\xfb\x83\x53\xa6\x9a\x9f\x6a\xb1\x68\x21\xb0\xa1\xca\xd2\x82\xb3\xcd\xa2\x3a\xd6\xe4\x21\xb9\xaa\xd3\xf7\x36\xe0\x45\xb5\xa4\x17\x46\xfb\x07\xb8\xcf\x47\x75\x4b\xa8\x5f\x12\x77\xf6\xd1\x25\x66\x63\xd0\x32\x77\xb0\x95\x16\xd2\xb0\xb4\xf2\x25\x5f\x9e\xdd\x14\x2a\x7c\x36\xfc\xf7\xff\x0c\xfe\x37\x00\x00\xff\xff\x87\xd4\xf7\xc6\x10\x63\x00\x00"),
 		},
 		"/crd/bases/camel.apache.org_camelcatalogs.yaml": &vfsgen۰CompressedFileInfo{
 			name:             "camel.apache.org_camelcatalogs.yaml",
@@ -99,9 +99,9 @@ var assets = func() http.FileSystem {
 		"/crd/bases/camel.apache.org_integrationplatforms.yaml": &vfsgen۰CompressedFileInfo{
 			name:             "camel.apache.org_integrationplatforms.yaml",
 			modTime:          time.Time{},
-			uncompressedSize: 20632,
+			uncompressedSize: 23926,
 
-			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5c\xdf\x93\xdb\xb6\xf1\x7f\xd7\x5f\xb1\x63\x3d\x38\x99\x39\x51\xc9\xf7\xdb\x4e\x5b\xf5\xa1\x73\x91\xed\xa9\x6a\xfb\xee\xe6\x24\x27\xcd\x23\x44\xae\x24\x44\x20\xc0\x02\xe0\xc9\x4a\xa7\xff\x7b\x67\x17\xa4\x44\x9d\x48\x8a\x77\xe7\x4c\x3d\x19\xf2\xc5\x3e\x11\x58\xec\xcf\xcf\x2e\x80\x95\x86\x30\xfa\x72\xcf\x60\x08\x1f\x64\x8c\xda\x61\x02\xde\x80\xdf\x20\x5c\x67\x22\xde\x20\xcc\xcd\xca\xef\x84\x45\x78\x67\x72\x9d\x08\x2f\x8d\x86\x6f\xae\xe7\xef\xbe\x85\x5c\x27\x68\xc1\x68\x04\x63\x21\x35\x16\x07\x43\x88\x8d\xf6\x56\x2e\x73\x6f\x2c\xa8\x40\x10\xc4\xda\x22\xa6\xa8\xbd\x8b\x00\xe6\x88\x4c\xfd\xe6\x76\x31\x9b\xbe\x85\x95\x54\x08\x89\x74\x61\x12\x26\xb0\x93\x7e\x33\x18\x82\xdf\x48\x07\x3b\x63\xb7\xb0\x32\x16\x44\x92\x48\x5a\x58\x28\x90\x7a\x65\x6c\x1a\xd8\xb0\xb8\x16\x36\x91\x7a\x0d\xb1\xc9\xf6\x56\xae\x37\x1e\xcc\x4e\xa3\x75\x1b\x99\x45\x83\x21\x2c\x48\x8c\xf9\xbb\x92\x13\x17\xc8\xf2\x9a\xde\xc0\xcf\x26\x2f\x64\xa8\x88\x5b\x68\xe1\x0a\x7e\x44\xeb\x68\x91\xff\x8b\xbe\x1b\x0c\xe1\x1b\x1a\xf2\xaa\x78\xf9\xea\xdb\xbf\xc2\xde\xe4\x90\x8a\x3d\x68\xe3\x21\x77\x58\xa1\x8c\x9f\x63\xcc\x3c\x48\x0d\xb1\x49\x33\x25\x85\x8e\xf1\x28\xd6\x61\x85\x08\x98\x01\xa2\x61\x96\x5e\x48\x0d\x82\xc5\x00\xb3\xaa\x0e\x03\xe1\x07\xc3\xc1\x10\xf8\xd9\x78\x9f\x4d\xc6\xe3\xdd\x6e\x17\x09\x66\x37\x32\x76\x3d\x2e\xa5\x1b\x7f\x98\x4d\xdf\xde\xcc\xdf\x8e\x98\xe5\xc1\x10\x3e\x69\x85\xce\x81\xc5\x7f\xe5\xd2\x62\x02\xcb\x3d\x88\x2c\x53\x32\x16\x4b\x85\xa0\xc4\x8e\x0c\xc7\xd6\x61\xa3\x4b\x0d\x3b\x2b\xbd\xd4\xeb\x2b\x70\x85\xd5\x07\xc3\x13\xeb\x1c\xd5\x55\xb2\x27\xdd\xc9\x00\xa3\x41\x68\x78\x75\x3d\x87\xd9\xfc\x15\xfc\x70\x3d\x9f\xcd\xaf\x06\x43\xf8\x69\xb6\xf8\xfb\xed\xa7\x05\xfc\x74\x7d\x7f\x7f\x7d\xb3\x98\xbd\x9d\xc3\xed\x3d\x4c\x6f\x6f\xde\xcc\x16\xb3\xdb\x9b\x39\xdc\xbe\x83\xeb\x9b\x9f\xe1\xfd\xec\xe6\xcd\x15\xa0\xf4\x1b\xb4\x80\x9f\x33\x4b\xfc\x1b\x0b\x92\x14\x89\x09\xd9\xb4\x74\xa0\x92\x01\xf2\x0f\xfa\xdb\x65\x18\xcb\x95\x8c\x41\x09\xbd\xce\xc5\x1a\x61\x6d\x1e\xd0\x6a\x72\x8f\x0c\x6d\x2a\x1d\x99\xd3\x81\xd0\xc9\x60\x08\x4a\xa6\xd2\xb3\x17\xb9\x73\xa1\x68\x99\x2f\x19\x5b\x03\x91\xc9\xc2\x9d\x26\x20\x32\x89\x9f\x3d\x6a\xe6\x26\xda\xfe\xd9\x45\xd2\x8c\x1f\xbe\x1f\x6c\xa5\x4e\x26\x30\xcd\x9d\x37\xe9\x3d\x3a\x93\xdb\x18\xdf\xe0\x4a\x6a\xf6\xfc\x41\x8a\x5e\x24\xc2\x8b\xc9\x00\x40\x68\x6d\x0a\xe6\xe9\x4f\x08\x51\x67\x94\x42\x3b\x5a\xa3\x8e\xb6\xf9\x12\x97\xb9\x54\x09\x5a\x26\x5e\x2e\xfd\xf0\x5d\xf4\x87\xe8\xfb\x01\x40\x6c\x91\xa7\x2f\x64\x8a\xce\x8b\x34\x9b\x80\xce\x95\x1a\x00\x28\xb1\x44\x55\x50\x15\x59\x36\x81\x58\xa4\xa8\x46\xdb\x01\x80\x16\x29\x4e\x40\x6a\x8f\x6b\xcb\xb3\x33\x25\x3c\x05\xa3\x8b\x78\x50\xc5\x25\x07\x64\x0c\x22\xb2\xb6\x26\x2f\x89\x54\xdf\x07\x6a\x25\xf7\xc2\xe3\xda\x58\x59\xfe\x3d\x82\x2d\x8d\x2f\xfe\x1f\x1f\xfe\x1f\x34\x34\x3b\x32\x70\x57\x30\xc0\x6f\x95\x74\xfe\x7d\xd3\x88\x0f\xd2\x79\x1e\x95\xa9\xdc\x0a\x55\x2f\x06\x0f\x70\x1b\x63\xfd\xcd\x91\xb9\x11\xc8\x2c\xbc\x90\x7a\x9d\x2b\x61\x6b\xe7\x0e\x00\x5c\x6c\x32\x9c\x00\x4f\xcd\x44\x8c\xc9\x00\xa0\xd0\x3c\x93\x1a\x55\x50\xec\xce\x12\x0d\x3b\x35\x2a\x4f\xf5\x61\xa1\x04\x5d\x6c\x65\xe6\xd9\x56\x04\x5d\x95\x85\xa0\x5c\x09\xb2\x8d\x70\x38\x08\x78\xf0\x8b\x33\xfa\x4e\xf8\xcd\x04\x22\xe7\x85\xcf\x5d\x54\x7d\x1b\x0c\x76\x57\xf9\xc4\xef\x89\x45\x8a\x56\xbd\x1e\x1c\x87\x3c\x7c\x1f\x24\x8c\x37\x98\x8a\x49\x31\xd6\x64\xa8\xaf\xef\x66\x3f\xfe\xff\xfc\xe4\x63\x38\x65\xb3\x46\xd7\x04\x09\x14\x4c\x61\xde\x21\x3e\x1b\x35\x1e\x9e\xeb\xbb\xd9\xe1\xaf\xcc\x9a\x0c\xad\x3f\x38\x44\x78\x2a\x41\x54\xf9\xf4\x11\x3f\xaf\x89\xe5\x02\xb9\x13\x8a\x1e\x0c\xcc\x14\x96\xc0\xa4\x90\x32\xa0\xac\x24\x70\x24\x90\x41\x1d\xe2\xe9\x84\x30\xd0\x20\xa1\xc1\x2c\x7f\xc1\xd8\x47\x30\x47\x4b\x64\xc8\x45\x72\x95\x50\xd0\x3d\xa0\xf5\x60\x31\x36\x6b\x2d\x7f\x3d\xd0\x76\x65\x06\x55\xc2\x63\xe1\x77\xc7\x87\x2d\x4f\x99\xec\x41\xa8\x1c\xaf\x08\x8f\x38\x09\x58\xa4\x55\x20\xd7\x15\x7a\x3c\xc4\x45\xf0\xd1\x58\xe4\xcc\x37\xe1\x14\xe0\x26\xe3\xf1\x5a\xfa\x12\x3c\x62\x93\xa6\xb9\x96\x7e\x3f\xae\x64\x5f\x37\x4e\xf0\x01\xd5\xd8\xc9\xf5\x48\xd8\x78\x23\x3d\xc6\x3e\xb7\x38\x16\x99\x1c\x31\xeb\x9a\x01\x24\x4a\x93\xa1\x2d\xe0\xc6\xbd\x3e\xe1\xf5\xcc\x5b\xc2\xc3\x61\xd8\x62\x01\x0a\x42\xf2\x01\x51\x4c\x0d\x52\x1c\x15\x4d\x1f\x91\x76\xee\xdf\xce\x17\x50\x2e\xcd\xc6\x78\xac\x7d\xd6\xfb\x71\xa2\x3b\x9a\x80\x14\x26\xf5\x8a\x61\x9b\xf2\xae\x35\x29\xd3\x44\x9d\x64\x46\x6a\xcf\x7f\xc4\x4a\xa2\x7e\xac\x7e\x97\x2f\x53\xe9\x43\x52\x44\xe7\xc9\x56\x11\x4c\x19\x51\x61\x89\x90\x67\x89\xf0\x98\x44\x30\xd3\x30\x25\xe4\x99\x0a\x4a\xd5\xbf\xb1\x01\x48\xd3\x6e\x44\x8a\xed\x66\x82\x6a\x32\x78\x3c\x38\x68\xad\xf2\xa2\xc4\xe2\x06\x7b\xd5\x44\xf0\x3c\xc3\xf8\x24\x7a\x12\x74\x5c\x40\x10\xc8\x20\x45\x45\x13\x08\x97\x4f\x7d\x04\xd3\xc3\x79\xe9\xf1\x87\x97\x59\xfa\x81\xa6\x31\x5f\xa4\x62\x21\xb5\x3b\x22\xa2\x45\x0a\xb4\xe4\x8c\x66\xb1\x58\xb5\x64\x3c\x1b\xd3\xcc\x28\xcf\x17\x0e\x67\xa9\x58\x63\xdd\xcb\x46\xeb\x9c\xac\x3e\xf7\x96\xd2\xdb\xbe\x9e\x42\x37\xb1\x0b\x12\x80\x3a\x4f\x91\xfe\xef\x40\x28\xc5\x45\x11\xd7\xd5\xb5\xb2\x1f\xe5\x77\x61\xbe\xc4\xc7\x01\xd6\x49\x0a\xf2\xf7\x3b\x6b\x3e\xef\xe7\x18\x5b\xf4\xcf\xd2\xc4\x56\x68\xb9\x35\x2c\xcc\x94\x6a\x80\x36\x22\x4b\x63\x14\x8a\x73\x4b\x01\xa4\xe2\x01\x75\x07\x3d\x7e\xa4\x71\xec\x2b\xa3\x51\xed\xe8\x76\xa3\x03\x97\x24\x6d\xd2\x9e\xad\x48\xc9\x3a\x4c\xe0\x8c\xca\x98\xbe\xc5\xfd\x55\xe9\xac\x25\xe4\x4d\xaf\x21\xa6\x85\x57\x92\x6a\x9e\x6f\xdc\xb7\x8d\xe4\x81\x36\x15\x5c\x95\xc7\x46\x6b\x82\x41\x6f\xc0\x62\x6a\x3c\x06\xf9\x08\x16\x8d\x93\x9e\xeb\xa6\x08\x66\x1e\x62\xa1\xcb\xf5\x5a\xc8\xfe\x33\xfa\xe3\x77\x7f\xa9\x72\xe1\x42\x0a\xba\x7b\x3f\x9d\x0f\xff\x04\x21\x52\xa8\x92\xaf\x0c\x81\x78\x43\x11\x17\xb5\x90\xbd\x86\x7f\xbc\x9f\x57\x66\x6f\x71\xef\x3c\x83\xa6\x03\x91\x7b\x43\xe1\x17\x0b\xa5\xf6\xa1\xf6\x0c\xa2\xf1\x88\x16\xa2\xb5\x2a\x0b\xec\xc6\x46\xaf\xe4\x3a\xb7\x81\x10\x01\x37\xa9\x4b\x50\xd6\xf1\x36\x77\xcd\x21\x41\xcf\x29\x41\xda\x16\xd1\x4a\x41\xad\x84\xe5\x42\x27\x2e\x82\x1b\xd2\xb5\xdf\x88\x90\x4c\xac\x31\x8f\x53\x49\xf5\x39\x65\xd3\x01\x6d\x98\x85\x72\x86\x82\xd4\x58\x92\x57\xea\xa2\x2a\x28\x15\x50\xaa\xa8\x59\xad\x97\xfd\x94\x9e\x2d\x36\x80\x4b\xf9\x9c\xb9\xea\x16\x0f\xbb\x4c\x17\xbc\x96\x8c\x81\x8a\xdc\x8c\x52\x69\x04\xf0\x31\x3f\x2b\x5c\x1e\x3f\x4b\x04\x41\xb9\x5d\x26\x25\x95\x2d\xee\xdb\x7c\xe4\x22\x4c\x94\x0f\x57\xa5\xdd\x45\x7a\x4d\x35\x77\x29\x90\xc5\x15\x5a\xd4\xbe\x36\x67\xd3\xc6\xc8\x6a\xf4\xc8\x69\x3b\x31\xb1\xa3\x8c\x4d\xdb\x75\x37\xa6\xcd\xe2\x83\xc4\xdd\x78\x67\xec\x56\xea\xf5\x88\xb6\xec\xa3\x90\x4d\xdd\x98\xb7\x2b\xe3\x21\xff\x73\x41\x2f\x8b\xdb\x37\xb7\x13\xb8\x4e\x12\x30\xbc\x8d\xcd\x1d\xae\x72\x05\x2b\x89\x8a\xdc\xea\x58\xc6\x5e\x71\x29\x75\x05\xb9\x4c\xfe\xf6\xfa\x4b\xe8\xcd\x64\x61\x7b\xf1\x04\xdd\xcd\x79\xd7\xbc\x87\xdd\x06\x99\x59\x7f\x44\x32\xda\x76\x7b\xc7\xce\x92\x76\xf2\x86\x50\x31\xb4\x05\xde\x65\x8c\x0f\x4f\x79\x62\xd1\x2c\xc8\x88\xf8\x6a\x7c\xdb\x50\x09\x55\x1f\x65\x62\xa1\xee\x4b\x0c\x6d\x89\xa0\xb3\xe8\xc9\x84\xdf\x94\xde\xc6\x54\x1e\x03\x72\x4b\x10\x74\x30\x64\x97\xa0\xaf\xee\x24\xbb\x40\x44\x27\xff\x39\x13\x34\x88\x75\xe4\xe7\x92\x58\xad\xfa\x76\xe8\xa9\xf2\x6f\x61\xf3\x64\xfd\xeb\x32\x90\x63\x2c\x77\x53\x53\x86\xfc\x8f\x22\x23\xcf\x9c\x1f\x10\x87\x21\xba\x0d\xec\xcb\x7a\xf1\x88\xf1\x25\x2f\x2f\x45\xde\xb8\xe4\xe8\x3d\xee\xef\x71\xf5\x94\xb0\x63\xb0\xa5\x6c\x55\x60\xb1\x38\x8a\xd7\x0e\xa1\xdd\x38\x83\x2e\x79\xe1\x8c\xab\x32\x37\x1c\xb2\x41\x3b\x2b\xd0\x1d\x99\xa0\x13\xaa\x9f\x31\xf4\x95\x21\x3b\x3c\x03\xdd\x3b\x90\xbc\x8c\xff\xf0\x34\x4d\x77\xcb\x03\xd0\x25\x17\x9c\x04\x9d\xf4\x5d\x34\x54\x26\x8c\xae\x29\x01\x3a\xa7\x05\xe8\x94\x1a\xe0\x62\x7a\x80\x6e\x90\x05\x0c\x5b\x84\x33\x5f\x22\xbe\x03\xa5\xff\x7d\x70\xbf\xbc\xf0\x83\xe7\x15\x7f\xd0\xc3\xc5\xef\x1e\x2e\xce\x4a\xc7\x0e\xf2\xfc\x4e\xb0\xa2\xc3\x20\x2f\x53\x34\x79\xd7\x43\x85\xd7\x6f\x30\xb3\x48\xdb\xc9\x64\xc2\x57\x8c\x35\xe7\x43\x11\x19\x21\xe2\x83\x95\x68\x11\xa8\xb7\x48\x22\xb5\xf3\x28\x92\x66\xe7\xb9\xe8\x34\x17\x84\xcc\xc8\x97\x9d\x47\xed\x7f\x34\x2a\x4f\x71\xaa\x84\x4c\x9f\x75\x62\x94\xe5\x4b\x25\xdd\xe6\x0b\x9c\x9e\xdd\x9d\x52\xaa\x1c\xa2\x35\xa8\xe1\xd1\xd1\x5a\xc9\xca\x0b\x8f\xd1\x2c\xae\xa5\xf3\x4d\x1b\x8d\x4b\x92\xdc\x17\xb3\x5f\x76\xaa\x25\x92\xc4\xa2\x6b\xc9\x2d\x1d\x40\x23\x16\x2f\x9a\x2e\xb5\xc3\x38\xb7\x2d\xc8\xde\x25\xbc\x8d\x5d\x0b\x2d\x7f\x65\x15\xbd\x88\x1d\x77\xe1\x94\xef\xa5\x01\x61\x73\x4d\x41\x7f\x67\xcd\x83\x4c\xd0\x76\x30\xfe\xfd\xe9\x8c\x26\x63\x5f\xf2\xb6\x40\xa5\xf6\xbe\xac\x23\x89\x56\xb0\x6a\x9d\xdb\xa2\x93\x58\xe5\xce\xd7\xe9\xe1\x52\x00\x4c\xc3\xc4\xf2\x6e\x91\x72\x25\x25\x7a\x63\xe3\x0d\x72\x60\xd6\x1d\xee\x1f\xd6\xe3\x39\x59\xe5\x7e\x92\x90\x50\x28\x55\x1c\xcb\x35\x48\x50\x2b\x5e\x79\xf0\xd8\xe0\x7b\xd2\x63\x5a\x1b\x60\x27\x02\x4e\xab\x44\x9a\x63\xfa\x52\x44\x33\x9b\x4d\xb9\xe6\x92\xe7\xf2\xad\xdc\x33\x67\xb7\x25\xd6\x11\x4f\xae\x7d\xc1\x4b\xd6\xb9\x5a\x5b\x10\x85\x97\xc2\x5a\xf1\x38\x49\x73\x97\x40\x5d\xf4\x5e\x72\xa6\xf7\x61\x62\x93\xe2\xdb\xd5\x5e\x3d\x77\xaf\x57\x5f\xa3\x0f\x3c\x81\xb7\xe3\xc9\x54\x1b\xe4\x77\xdb\x31\xe4\x56\xbe\xf0\x70\xe8\x62\x6d\xd3\x6c\xa4\xd6\xc9\x99\x35\x2b\xa9\x6a\xbc\xf0\x74\xe7\x62\x85\xf4\x77\x61\x68\xe5\x36\x98\x3b\x3e\x1c\x97\xfb\x34\xc0\x85\xb3\x7a\x61\x11\x50\x8b\xa5\xaa\xad\x24\xcf\x9a\x85\x0a\x20\x60\x13\x8c\x2b\x2d\x0a\x4f\x81\x84\xc3\xf5\xf9\xd3\x3d\xb1\x6c\xf4\x71\x4f\xbe\xda\x3c\x2c\xfa\x14\x7d\x07\x45\x9d\xb3\xd9\xf5\x3c\xf1\xd1\x11\x1d\x1b\xe6\x94\x73\xbe\xe0\xa8\xa2\x5b\xd8\xfc\xf2\xc2\xcf\x40\xb8\x0b\x68\x5b\xc3\x15\xf3\x74\x82\xaf\xcd\xc1\xd3\xa1\x64\xff\x3c\x3a\x6e\x15\x47\xec\x79\xf6\x01\x47\xb9\xde\x6a\xb3\xd3\xa3\xb0\x8d\x9b\x80\xb7\xb5\xb8\xd6\x0e\x93\x27\xb2\x3d\x0f\x15\x6b\x5e\x36\x35\x01\x70\x7b\xd0\x13\xdb\x00\x78\xce\x49\x23\x80\x59\xb2\x02\xfa\x4e\x80\x5a\x73\xf4\x9d\x00\x7d\x27\x40\xdf\x09\xd0\x77\x02\xf4\x9d\x00\x7d\x27\x00\xf4\x9d\x00\x7d\x27\x40\xdf\x09\x50\xf3\xf4\x9d\x00\x7d\x27\x40\x7f\xb5\x57\xfb\x7c\xcd\x57\x7b\x7d\x27\x40\xdf\x09\x50\xf7\xf4\x9d\x00\x3d\x5c\xf4\x9d\x00\x4f\x1c\xd4\x77\x02\x74\x5e\xaa\xef\x04\xe8\x3b\x01\xfa\x4e\x80\xbe\x13\xe0\x6b\xec\x04\x08\x7b\xef\x9a\x30\xea\xd6\x06\x50\x27\x5d\x49\xb4\x18\xb9\x2c\x2e\x5e\xca\xfb\x96\x5a\x1b\x88\xe3\xd7\x68\x85\x07\xc1\xe7\x8f\x42\x6a\xe0\xaf\xc2\xd6\x95\x62\x97\x00\x42\x09\xe7\x17\x56\x68\x27\xcb\x5f\x09\xe8\x74\xf7\xf6\x41\x38\xcf\xde\x52\x5e\x03\x16\xa2\xf8\x03\x29\x4c\xc2\x77\x75\x8d\xc6\xe2\x4a\xaa\x39\xe0\x0c\x08\xcd\xa5\x52\x53\x31\x19\xce\x98\x27\x90\x08\x8f\x23\x5a\xb6\x29\xd9\x5e\x0a\x5d\x12\xf7\x13\x7f\xf1\xb7\xb3\xa8\x0b\xfe\x7a\xf7\x51\x5c\xe9\x2a\xf2\xee\x84\x3b\x7c\x91\xf8\xb7\xe6\x3d\x45\xe7\x1a\xaf\xa5\xce\x8e\x52\x36\x79\x2a\x34\x58\x14\x09\xff\x04\x48\x31\x19\xa4\x4e\x64\x2c\xf8\x9b\xd9\x09\x7a\x21\x95\x03\xb1\x6c\xab\x20\xc8\xbe\x47\xab\x36\x09\x79\x91\x79\x8b\xc2\x75\xbd\xd7\xe5\x42\x9e\x86\x1f\x2e\xf1\x0f\x0a\x7f\xed\x0a\x5b\xbc\x9c\xa3\xba\x7b\xd2\x06\x8e\x8a\xeb\xd1\x62\x93\x71\x60\xe6\x2a\xfc\x22\xce\x0a\x16\x36\xc7\x2b\x78\x27\x94\xc3\x2b\xf8\x14\x6e\x8c\x9f\xcd\x57\x5b\xab\xcf\xa9\x9e\xf6\x19\xaf\x5e\xfd\xed\x88\x03\x6f\xcf\x5c\xbe\xfd\x1e\xbb\x31\x8e\x1b\x3b\x81\x9e\xd9\xef\xd3\xb7\x5e\xf5\xad\x57\x7d\xeb\x55\xfd\x80\xa7\xb7\x5e\x6d\x84\xbb\xd4\x78\x55\xa3\x23\xfe\x35\x99\x3a\x9d\xb4\x88\xd2\x77\x79\xf5\x5d\x5e\x7d\x97\xd7\x17\xed\xf2\x3a\xfc\xb4\xd4\xf9\xa2\x8d\x2e\x5c\x4b\xec\xec\xc3\xd0\xdf\x55\x11\xd6\x79\x63\xa9\xc0\xac\x7c\x92\x2f\xcf\x82\xa1\xa8\x9b\xe0\xdf\xff\x19\xfc\x37\x00\x00\xff\xff\xf6\x4b\x14\x36\x98\x50\x00\x00"),
+			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3c\x5b\x93\xdb\xb6\xd5\xef\xfa\x15\x67\xac\x07\x27\x33\x2b\x2a\xf9\xbe\x76\xda\xaa\x0f\x1d\x45\xb6\xa7\xaa\xed\xdd\x9d\x95\x9c\x34\x8f\x10\x79\x44\x21\x02\x01\x16\x00\x57\x56\x3a\xfd\xef\x9d\x03\x90\x12\x25\xf1\xa6\xdd\xcd\xd4\x13\x13\x2f\xbb\x22\x81\x83\x73\xbf\x00\x67\x38\x84\xd1\xcb\x8d\xc1\x10\x3e\xf0\x10\xa5\xc1\x08\xac\x02\xbb\x41\x98\xa6\x2c\xdc\x20\x2c\xd4\xda\xee\x98\x46\x78\xa7\x32\x19\x31\xcb\x95\x84\x6f\xa6\x8b\x77\xdf\x42\x26\x23\xd4\xa0\x24\x82\xd2\x90\x28\x8d\x83\x21\x84\x4a\x5a\xcd\x57\x99\x55\x1a\x84\x07\x08\x2c\xd6\x88\x09\x4a\x6b\x02\x80\x05\xa2\x83\x7e\x7b\xb7\x9c\xcf\xde\xc2\x9a\x0b\x84\x88\x1b\xbf\x08\x23\xd8\x71\xbb\x19\x0c\xc1\x6e\xb8\x81\x9d\xd2\x5b\x58\x2b\x0d\x2c\x8a\x38\x6d\xcc\x04\x70\xb9\x56\x3a\xf1\x68\x68\x8c\x99\x8e\xb8\x8c\x21\x54\xe9\x5e\xf3\x78\x63\x41\xed\x24\x6a\xb3\xe1\x69\x30\x18\xc2\x92\xc8\x58\xbc\x2b\x30\x31\x1e\xac\xdb\xd3\x2a\xf8\x59\x65\x39\x0d\x25\x72\x73\x2e\xdc\xc0\x8f\xa8\x0d\x6d\xf2\x7f\xc1\x77\x83\x21\x7c\x43\x53\x5e\xe5\x2f\x5f\x7d\xfb\x57\xd8\xab\x0c\x12\xb6\x07\xa9\x2c\x64\x06\x4b\x90\xf1\x73\x88\xa9\x05\x2e\x21\x54\x49\x2a\x38\x93\x21\x1e\xc9\x3a\xec\x10\x80\x43\x80\x60\xa8\x95\x65\x5c\x02\x73\x64\x80\x5a\x97\xa7\x01\xb3\x83\xe1\x60\x08\x6e\x6c\xac\x4d\x27\xe3\xf1\x6e\xb7\x0b\x98\x43\x37\x50\x3a\x1e\x17\xd4\x8d\x3f\xcc\x67\x6f\x6f\x17\x6f\x47\x0e\xe5\xc1\x10\x3e\x49\x81\xc6\x80\xc6\x7f\x65\x5c\x63\x04\xab\x3d\xb0\x34\x15\x3c\x64\x2b\x81\x20\xd8\x8e\x04\xe7\xa4\xe3\x84\xce\x25\xec\x34\xb7\x5c\xc6\x37\x60\x72\xa9\x0f\x86\x27\xd2\x39\xb2\xab\x40\x8f\x9b\x93\x09\x4a\x02\x93\xf0\x6a\xba\x80\xf9\xe2\x15\xfc\x30\x5d\xcc\x17\x37\x83\x21\xfc\x34\x5f\xfe\xfd\xee\xd3\x12\x7e\x9a\x3e\x3c\x4c\x6f\x97\xf3\xb7\x0b\xb8\x7b\x80\xd9\xdd\xed\x9b\xf9\x72\x7e\x77\xbb\x80\xbb\x77\x30\xbd\xfd\x19\xde\xcf\x6f\xdf\xdc\x00\x72\xbb\x41\x0d\xf8\x39\xd5\x84\xbf\xd2\xc0\x89\x91\x18\x91\x4c\x0b\x05\x2a\x10\x20\xfd\xa0\xdf\x26\xc5\x90\xaf\x79\x08\x82\xc9\x38\x63\x31\x42\xac\x1e\x51\x4b\x52\x8f\x14\x75\xc2\x0d\x89\xd3\x00\x93\xd1\x60\x08\x82\x27\xdc\x3a\x2d\x32\x97\x44\xd1\x36\x2f\x69\x5b\x03\x96\xf2\x5c\x9d\x26\xc0\x52\x8e\x9f\x2d\x4a\x87\x4d\xb0\xfd\xb3\x09\xb8\x1a\x3f\x7e\x3f\xd8\x72\x19\x4d\x60\x96\x19\xab\x92\x07\x34\x2a\xd3\x21\xbe\xc1\x35\x97\x4e\xf3\x07\x09\x5a\x16\x31\xcb\x26\x03\x00\x26\xa5\xca\x91\xa7\x9f\xe0\xad\x4e\x09\x81\x7a\x14\xa3\x0c\xb6\xd9\x0a\x57\x19\x17\x11\x6a\x07\xbc\xd8\xfa\xf1\xbb\xe0\x0f\xc1\xf7\x03\x80\x50\xa3\x5b\xbe\xe4\x09\x1a\xcb\x92\x74\x02\x32\x13\x62\x00\x20\xd8\x0a\x45\x0e\x95\xa5\xe9\x04\x42\x96\xa0\x18\x6d\x07\x00\x92\x25\x38\x01\x2e\x2d\xc6\xda\xad\x4e\x05\xb3\x64\x8c\x26\x70\x93\x4a\x2a\x39\x20\x61\x10\x90\x58\xab\xac\x00\x52\x7e\xef\xa1\x15\xd8\x33\x8b\xb1\xd2\xbc\xf8\x3d\x82\x2d\xcd\xcf\xff\x0f\x0f\xff\x7b\x0e\xcd\x8f\x08\xdc\xe7\x08\xb8\xb7\x82\x1b\xfb\xbe\x6e\xc6\x07\x6e\xac\x9b\x95\x8a\x4c\x33\x51\x4d\x86\x9b\x60\x36\x4a\xdb\xdb\x23\x72\x23\xe0\xa9\x7f\xc1\x65\x9c\x09\xa6\x2b\xd7\x0e\x00\x4c\xa8\x52\x9c\x80\x5b\x9a\xb2\x10\xa3\x01\x40\xce\x79\x07\x6a\x54\xf2\x62\xf7\x9a\x60\xe8\x99\x12\x59\x22\x0f\x1b\x45\x68\x42\xcd\x53\xeb\x64\x45\xae\xab\xb4\x11\x14\x3b\x41\xba\x61\x06\x07\xde\x1f\xfc\x62\x94\xbc\x67\x76\x33\x81\xc0\x58\x66\x33\x13\x94\xdf\x7a\x81\xdd\x97\x9e\xd8\x3d\xa1\x48\xd6\x2a\xe3\xc1\x71\xca\xe3\xf7\x9e\xc2\x70\x83\x09\x9b\xe4\x73\x55\x8a\x72\x7a\x3f\xff\xf1\xff\x17\x27\x8f\xe1\x14\xcd\x0a\x5e\x93\x4b\x20\x63\xf2\xeb\x0e\xf6\x59\xcb\x71\x3f\xa6\xf7\xf3\xc3\xaf\x54\xab\x14\xb5\x3d\x28\x84\x1f\x25\x23\x2a\x3d\x3d\xc3\xe7\x35\xa1\x9c\x7b\xee\x88\xac\x07\x3d\x32\xb9\x24\x30\xca\xa9\xf4\x5e\x96\x93\x73\x24\x27\x83\xd2\xdb\xd3\x09\x60\xa0\x49\x4c\x82\x5a\xfd\x82\xa1\x0d\x60\x81\x9a\xc0\x90\x8a\x64\x22\x22\xa3\x7b\x44\x6d\x41\x63\xa8\x62\xc9\x7f\x3d\xc0\x36\x45\x04\x15\xcc\x62\xae\x77\xc7\xe1\x24\x4f\x91\xec\x91\x89\x0c\x6f\xc8\x1f\xb9\x20\xa0\x91\x76\x81\x4c\x96\xe0\xb9\x29\x26\x80\x8f\x4a\xa3\x8b\x7c\x13\x17\x02\xcc\x64\x3c\x8e\xb9\x2d\x9c\x47\xa8\x92\x24\x93\xdc\xee\xc7\xa5\xe8\x6b\xc6\x11\x3e\xa2\x18\x1b\x1e\x8f\x98\x0e\x37\xdc\x62\x68\x33\x8d\x63\x96\xf2\x91\x43\x5d\x3a\x07\x12\x24\xd1\x50\xe7\xee\xc6\xbc\x3e\xc1\xf5\x42\x5b\xfc\x70\x66\xd8\x20\x01\x32\x42\xd2\x01\x96\x2f\xf5\x54\x1c\x19\x4d\x8f\x88\x3b\x0f\x6f\x17\x4b\x28\xb6\x76\xc2\x38\xe7\xbe\xe3\xfb\x71\xa1\x39\x8a\x80\x18\xc6\xe5\xda\xb9\x6d\x8a\xbb\x5a\x25\x0e\x26\xca\x28\x55\x5c\x5a\xf7\x23\x14\x1c\xe5\x39\xfb\x4d\xb6\x4a\xb8\xf5\x41\x11\x8d\x25\x59\x05\x30\x73\x1e\x15\x56\x08\x59\x1a\x31\x8b\x51\x00\x73\x09\x33\xf2\x3c\x33\x46\xa1\xfa\x37\x16\x00\x71\xda\x8c\x88\xb1\xdd\x44\x50\x0e\x06\xe7\x93\x3d\xd7\x4a\x2f\x0a\x5f\x5c\x23\xaf\x0a\x0b\x5e\xa4\x18\x9e\x58\x4f\x84\xc6\x25\x10\xe4\x64\x90\xac\xa2\xce\x09\x17\xa3\xda\x82\x69\xb8\xb8\x74\xfe\xb0\x1d\xa5\x1f\x68\x99\xc3\x8b\x58\xcc\xb8\x34\x47\x8f\xa8\x91\x0c\x2d\xba\x80\x99\x6f\x56\x4e\x19\x2f\xe6\xd4\x23\xea\xd6\x33\x83\xf3\x84\xc5\x58\xf5\xb2\x56\x3a\x27\xbb\x2f\xac\xa6\xf0\xb6\xaf\x86\xd0\x8d\xec\x1c\x04\xa0\xcc\x12\xa4\xff\x0d\x30\x21\x5c\x52\xe4\xf2\xea\x4a\xda\x8f\xf4\x1b\xbf\x9e\xe3\xb9\x81\x75\xa2\x82\xf4\xfd\x5e\xab\xcf\xfb\x05\x86\x1a\xed\x93\x38\xb1\x65\x92\x6f\x95\x23\x66\x46\x39\x40\x13\x90\x95\x52\x02\xd9\xa5\xa4\x00\x12\xf6\x88\xb2\x03\x1f\x3f\xd2\x3c\xa7\x2b\xa3\x51\xe5\xec\x66\xa1\x83\x4b\x49\x9a\xa8\xbd\xd8\x91\x82\xb5\x5f\xe0\x22\xaa\xf3\xe9\x5b\xdc\xdf\x14\xca\x5a\xb8\xbc\xd9\x14\x42\xda\x78\xcd\x29\xe7\xf9\xc6\x7c\x5b\x0b\x1e\xa8\xa8\x70\x59\x79\xa8\xa4\x24\x37\x68\x15\x68\x4c\x94\x45\x4f\x1f\xb9\x45\x65\xb8\x75\x79\x53\x00\x73\x0b\x21\x93\xc5\x7e\x0d\x60\xff\x19\xfc\xf1\xbb\xbf\x94\xb1\x30\x3e\x04\xdd\xbf\x9f\x2d\x86\x7f\x02\x6f\x29\x94\xc9\x97\xa6\x40\xb8\x21\x8b\x0b\x1a\xc0\x4e\xe1\x1f\xef\x17\xa5\xd5\x5b\xdc\x1b\xeb\x9c\xa6\x01\x96\x59\x45\xe6\x17\x32\x21\xf6\x3e\xf7\xf4\xa4\xb9\x19\x0d\x40\x2b\x59\xe6\xd1\x0d\x95\x5c\xf3\x38\xd3\x1e\x10\x39\x6e\x62\x17\xa3\xa8\x63\x75\x66\xea\x4d\x82\xc6\x29\x40\x2a\x8b\x68\x27\xcf\x56\xf2\xe5\x4c\x46\x26\x80\x5b\xe2\xb5\xdd\x30\x1f\x4c\xb4\x52\xe7\xa1\xa4\x3c\x4e\xd1\x34\x40\x05\x33\x13\x46\x91\x91\x2a\x4d\xf4\x72\x99\x67\x05\x05\x03\x0a\x16\xd5\xb3\xb5\x5d\x4f\x69\x6c\xb1\xc6\xb9\x14\xe3\x42\x55\xb7\x78\xa8\x32\x8d\xd7\x5a\x12\x06\x0a\x52\x33\x0a\xa5\x01\xc0\xc7\xec\x22\x71\x39\x1f\x2b\x04\x46\xb1\x9d\x47\x05\x94\x2d\xee\x9b\x74\xa4\xd5\x4d\x14\xc3\x65\xa5\xdd\x49\x7a\x4d\x39\x77\x41\x90\xc6\x35\x6a\x94\xb6\x32\x66\x53\x61\xa4\x25\x5a\x74\x61\x3b\x52\xa1\xa1\x88\x4d\xe5\xba\x19\x53\xb1\xf8\xc8\x71\x37\xde\x29\xbd\xe5\x32\x1e\x51\xc9\x3e\xf2\xd1\xd4\x8c\x5d\xb9\x32\x1e\xba\x3f\x2d\x7c\x59\xde\xbd\xb9\x9b\xc0\x34\x8a\x40\xb9\x32\x36\x33\xb8\xce\x04\xac\x39\x0a\x52\xab\x63\x1a\x7b\xe3\x52\xa9\x1b\xc8\x78\xf4\xb7\xd7\x2f\xc1\x37\x95\xfa\xf2\xe2\x0a\xde\x2d\x5c\xd5\xbc\x87\xdd\x06\x1d\xb2\xf6\xe8\xc9\xa8\xec\xb6\xc6\x29\x4b\xd2\x49\x1b\x7c\xc6\xd0\x64\x78\xed\x3e\xde\x8f\xe2\xc4\xa2\x9e\x90\x11\xe1\x55\xfb\xb6\x26\x13\x2a\x0f\xa1\x42\x26\x1e\x0a\x1f\xda\x60\x41\x17\xd6\x93\x32\xbb\x29\xb4\xcd\x41\x39\x77\xc8\x0d\x46\xd0\x41\x90\x5d\x8c\xbe\x5c\x49\x76\x71\x11\x9d\xf4\xe7\x82\x50\x4f\xd6\x11\x9f\x36\xb2\x1a\xf9\x5d\x0e\x57\xf5\xa8\x72\x8b\x49\x23\x25\x27\x48\x1e\xc5\x57\x17\xe9\xfd\xe8\xe6\x47\x01\x78\x83\xc2\xf9\xd1\xd1\x10\xbb\xb8\xb0\x2b\x80\x69\x14\xc8\x4c\x1b\xf6\xb5\xcc\xb9\x57\x82\x87\x2d\x2c\x82\x2b\xd8\x44\x23\xdc\x60\xb8\x35\x59\xe2\x61\xb7\xcf\xbf\x82\x5a\x1a\x28\xd9\x4a\x34\xd9\xff\x39\xdc\x36\x8f\x52\x0c\x5f\xdf\xfd\x26\x58\xb7\x3b\x2d\x3f\x46\x05\x75\x9d\xd4\xa3\xd1\xa8\xfc\x30\x92\xa5\x66\xa3\x6c\xaf\x1f\xf5\x70\xbf\x66\xfd\xc8\x74\x4b\x46\xd0\x99\x8c\x2e\x24\x8c\x80\x37\x61\x3e\x22\x74\x5a\x43\x55\x0b\x55\x7e\x12\xd3\x9a\xd5\xe5\x00\x06\xad\xe5\x32\x6e\xd0\xd4\x13\x63\x98\x16\x79\x63\x88\xc5\xe1\xdd\xcc\x55\x18\x1f\x59\x4a\x89\xd0\xe2\x90\xe0\xba\x8a\xa0\xa9\xb6\x28\x8e\x27\x8e\x25\x45\x81\xcb\x73\x13\xfd\xb0\xc0\xe8\x3d\xee\x1f\x70\x7d\x4d\x96\xe7\x72\x7b\x2a\x8e\xf2\xd4\x9f\x1d\xc9\x6b\xce\xd8\xbb\xdb\x7c\x6b\x19\x72\x81\x55\x51\x8a\x1c\x8a\x8f\x66\x54\xe0\x3a\x73\xeb\x12\x81\xbf\xec\x42\x02\x9e\x50\x4c\x74\x00\xd9\x5e\x6e\xc0\x75\x9c\xee\x56\x76\x40\x97\xd2\xe3\xc4\xe8\xb8\xed\xc2\xa1\xa2\x3e\xe9\x5a\x81\xc0\x55\x31\xa1\x9b\xd3\x6e\xae\x46\xa0\xbb\xb3\xf6\x85\xf4\x4b\xd8\xb7\x87\xf4\xbf\x37\xee\xe7\x9f\x33\xc0\xd3\xce\x1a\xa0\x77\x17\xbf\x7b\x77\x71\x71\x52\xd1\x81\x9e\xdf\x89\xaf\xe8\x30\xc9\xf2\x04\x55\xd6\xf5\x0c\xfb\xf5\x1b\x4c\x35\x86\xcc\x62\x34\x71\x1d\x2d\x15\xd7\x11\x01\x09\x21\x70\xe7\xf8\xc1\xd2\x43\x6f\xa0\x84\x4b\x63\x91\x45\xf5\xca\xd3\xaa\x34\x2d\x44\xa6\xa4\xcb\xc6\xa2\xb4\x3f\x2a\x91\x25\x38\x13\x8c\x27\x4f\xba\xa0\x48\xb3\x95\xe0\x66\xf3\x02\x97\x35\xf7\xa7\x90\x4a\x77\x36\x35\x6c\x38\xbb\xc9\x29\x50\x79\xe6\xad\x8d\xc6\x98\x1b\x5b\x77\xae\xd5\x46\xc9\x43\xbe\xfa\x79\x97\x28\x2c\x8a\x34\x9a\x86\xd8\xd2\xc1\x69\x84\xec\x59\xcb\xb9\x34\x18\x66\xba\xc1\xb3\x77\x31\x6f\xa5\x63\x26\xf9\xaf\x8e\x45\xcf\x42\xc7\xb4\x5c\x2a\x3d\xd7\x20\x74\x26\xc9\xe8\xef\xb5\x7a\xe4\x11\xea\x0e\xc2\x7f\x38\x5d\x51\x27\xec\x36\x6d\xf3\x50\x2a\xdb\x33\x3a\x82\x68\x74\x56\x8d\x6b\x1b\x78\x12\x8a\xcc\xd8\x2a\x3e\xb4\x19\xc0\xcc\x2f\x2c\x5a\x59\x28\x56\x52\xa0\x57\x3a\xdc\xa0\x33\xcc\xaa\xbb\xe4\xc3\x7e\x6e\x4d\x5a\x6a\x87\x21\x4f\xc8\x84\xc8\x6f\x81\x6a\x28\xa8\x24\xaf\xb8\xe7\xaa\xd1\xbd\xda\xf3\xd2\x13\x02\x67\x65\x20\xf5\x36\xdd\x66\xd1\x0e\xcd\xba\x58\xd3\xa6\xb9\xae\x09\xe4\x89\xab\x9b\x02\xeb\xc8\x2d\xae\x7c\xe1\xb6\xac\x52\xb5\x26\x23\xaa\x3f\x5a\x70\x4d\x69\x55\xd6\xdb\xa6\x4c\xef\xfd\xc2\x3a\xc6\x37\xb3\xbd\xfd\xdc\xbc\xf1\xcc\xbc\x23\x6e\xc7\xc3\xc0\x26\x97\xdf\xad\x62\xc8\x34\x7f\xe6\x5d\x44\x6b\x6e\xd3\x74\xfe\xd3\xb0\x38\xd5\x6a\xcd\x45\x85\x16\x9e\x56\x2e\x9a\x71\x7b\xef\xa7\x96\x9a\x8f\x5c\x83\xa1\x71\xe9\x3e\x4d\x30\xfe\x6a\x98\x69\x6c\x38\xae\xbb\xe8\x4d\xcd\x1d\x81\x13\xc1\xb8\xd4\x11\x77\x8d\x4b\x38\x74\x6b\x5d\xaf\x89\x45\x5f\xa9\xb9\xba\x93\xe6\xb0\xe9\x35\xfc\xf6\x8c\xba\x44\xb3\xeb\xf5\xd5\xd9\x11\x9d\x13\xcc\x29\xe6\xee\x3e\xbd\xec\xdd\x7c\xf1\xeb\x36\x7e\x82\x87\x6b\xf1\xb6\x15\x58\x39\x9c\x4e\xfc\x6b\xbd\xf1\x74\x48\xd9\x3f\x8f\x8e\xa5\xe2\xc8\x69\x9e\x7e\xc4\x51\x26\xb7\x52\xed\xe4\xc8\x97\x71\x13\xb0\xba\xd2\xaf\x35\xbb\xc9\x13\xda\x9e\xe6\x15\x2b\x5e\xd6\xf5\x9c\xb9\x6e\xd4\x2b\xbb\xce\xdc\x9a\x93\xbe\x33\xb5\x72\x0c\xe8\x1b\xcf\x2a\xc5\xd1\x37\x9e\xf5\x8d\x67\x7d\xe3\x59\xdf\x78\xd6\x37\x9e\xf5\x8d\x67\xd0\x37\x9e\xf5\x8d\x67\x7d\xe3\x59\xc5\xe8\x1b\xcf\x9e\x0e\xac\x6f\x3c\x6b\x85\xfb\x35\x37\x16\xf5\x8d\x67\xed\x70\xbf\x66\xfd\xe8\x1b\xcf\xaa\x46\xdf\x78\xd6\x37\x9e\x7d\xd9\x85\x04\x7c\x7d\x9d\x24\x7d\xe3\x59\xdf\x78\x56\x35\xfa\xc6\xb3\xde\x5d\xf4\x8d\x67\x57\x4e\xea\x1b\xcf\x3a\x6f\xd5\x37\x9e\xf5\x8d\x67\x7d\xe3\x59\xdf\x78\xf6\x25\x36\x9e\xf9\xa3\xde\x0a\x33\xea\xd6\x75\x56\x45\x5d\x01\x34\x9f\xb9\xca\xef\xf9\x8b\xeb\xfd\x4a\x19\xb0\xe3\x47\x82\x98\x05\xe6\xae\xbb\x18\x97\xe0\x3e\xf4\x53\x95\x8a\xb5\x39\x08\xc1\x8c\x5d\x6a\x26\x0d\x2f\xbe\x81\xd6\xa9\xd5\xe3\x03\x33\xd6\x69\x4b\xd1\x75\x92\x93\x62\x0f\xa0\x30\xf2\x5f\x22\x52\x12\xf3\x0e\x88\x7a\x83\x53\xc0\xa4\x4b\x95\xea\x92\x49\x7f\xa5\x39\x81\x88\x59\x1c\xd1\xb6\x75\xc1\xb6\xcd\x74\x89\xdc\x4f\xee\x74\xa9\x33\xa9\x4b\xf7\xf1\xaa\x23\xb9\xdc\x94\xe8\xdd\x31\x73\xf8\x4c\xd2\x6f\x8d\x7b\x82\xc6\xd4\x76\x41\x5c\x1c\xa5\x6c\xb2\x84\x49\xd0\xc8\x22\xf7\x81\xc3\x7c\x31\x70\x19\xf1\x90\xb9\xef\x4e\x45\x68\x19\x17\x06\xd8\xaa\x29\x83\x20\xf9\x1e\xa5\x5a\x47\x64\x2b\xf2\x1a\x99\xe9\xda\x46\xe4\x12\x79\x9a\x7e\xe8\x19\x3b\x30\xfc\xb5\xc9\x65\xf1\x7c\x8c\xaa\xda\x72\x6a\x30\xca\xbb\x71\xf2\x22\xe3\x80\xcc\x8d\xff\xde\xe7\x1a\x96\x3a\xc3\x1b\x78\xc7\x84\xc1\x1b\xf8\xe4\x1b\x94\x9e\x8c\x57\x53\x67\xe9\x29\x9f\xf6\xa9\xdb\xbd\xfc\x65\xbc\x03\x6e\x4f\xdc\xbe\xb9\x6d\xaa\xd6\x8e\x6b\x1b\x4f\x9f\xd8\x5e\xda\x77\xfa\xf6\x9d\xbe\x7d\xa7\x6f\xf5\x84\xeb\x3b\x7d\x37\xcc\xb4\xf5\xf9\x56\xf0\xc8\x7d\x2b\xb3\x8a\x27\x0d\xa4\xf4\x4d\xc5\x7d\x53\x71\xdf\x54\xfc\xa2\x4d\xc5\x87\x0f\xe7\x5e\x6e\x5a\xab\xc2\x95\xc0\x2e\x1e\xfa\x76\xe2\x12\xb1\xc6\x2a\x4d\x09\x66\xe9\x49\xb6\xba\x30\x86\x3c\x6f\x82\x7f\xff\x67\xf0\xdf\x00\x00\x00\xff\xff\x51\x84\x17\x9c\x76\x5d\x00\x00"),
 		},
 		"/crd/bases/camel.apache.org_integrations.yaml": &vfsgen۰CompressedFileInfo{
 			name:             "camel.apache.org_integrations.yaml",
diff --git a/pkg/trait/builder.go b/pkg/trait/builder.go
index ba8e26f98..a7e354a0d 100644
--- a/pkg/trait/builder.go
+++ b/pkg/trait/builder.go
@@ -26,6 +26,7 @@ import (
 
 	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
 	"github.com/apache/camel-k/pkg/builder"
+	mvn "github.com/apache/camel-k/pkg/util/maven"
 )
 
 // The builder trait is internally used to determine the best strategy to
@@ -134,13 +135,19 @@ func (t *builderTrait) Apply(e *Environment) error {
 }
 
 func (t *builderTrait) builderTask(e *Environment) (*v1.BuilderTask, error) {
+	maven := e.Platform.Status.Build.Maven
+
+	// Add Maven repositories defined in the IntergrationKit
+	for _, repo := range e.IntegrationKit.Spec.Repositories {
+		maven.Repositories = append(maven.Repositories, mvn.NewRepository(repo))
+	}
 	task := &v1.BuilderTask{
 		BaseTask: v1.BaseTask{
 			Name: "builder",
 		},
 		Runtime:      e.CamelCatalog.Runtime,
 		Dependencies: e.IntegrationKit.Spec.Dependencies,
-		Maven:        e.Platform.Status.Build.Maven,
+		Maven:        maven,
 	}
 
 	if task.Maven.Properties == nil {
diff --git a/pkg/trait/camel.go b/pkg/trait/camel.go
index 8a82430b6..d64e54ceb 100644
--- a/pkg/trait/camel.go
+++ b/pkg/trait/camel.go
@@ -18,6 +18,7 @@ limitations under the License.
 package trait
 
 import (
+	"context"
 	"fmt"
 	"strings"
 
@@ -96,7 +97,9 @@ func (t *camelTrait) loadOrCreateCatalog(e *Environment, runtimeVersion string)
 		// the required versions (camel and runtime) are not expressed as
 		// semver constraints
 		if exactVersionRegexp.MatchString(runtimeVersion) {
-			catalog, err = camel.GenerateCatalog(e.C, e.Client, ns, e.Platform.Status.Build.Maven, runtime, []maven.Dependency{})
+			ctx, cancel := context.WithTimeout(e.C, e.Platform.Status.Build.GetTimeout().Duration)
+			defer cancel()
+			catalog, err = camel.GenerateCatalog(ctx, e.Client, ns, e.Platform.Status.Build.Maven, runtime, []maven.Dependency{})
 			if err != nil {
 				return err
 			}
diff --git a/pkg/trait/logging.go b/pkg/trait/logging.go
index 3e3fee74c..92b5f86c2 100644
--- a/pkg/trait/logging.go
+++ b/pkg/trait/logging.go
@@ -18,10 +18,11 @@ limitations under the License.
 package trait
 
 import (
+	"strconv"
+
 	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
 	"github.com/apache/camel-k/pkg/util"
 	"github.com/apache/camel-k/pkg/util/envvar"
-	"strconv"
 )
 
 const (
diff --git a/pkg/trait/openapi.go b/pkg/trait/openapi.go
index 9ba84cf4d..8ad421efd 100644
--- a/pkg/trait/openapi.go
+++ b/pkg/trait/openapi.go
@@ -18,6 +18,7 @@ limitations under the License.
 package trait
 
 import (
+	"context"
 	"fmt"
 	"io/ioutil"
 	"os"
@@ -201,9 +202,8 @@ func (t *openAPITrait) createNewOpenAPIConfigMap(e *Environment, resource v1.Res
 		return err
 	}
 
-	mc := maven.NewContext(tmpDir, project)
+	mc := maven.NewContext(tmpDir)
 	mc.LocalRepository = e.Platform.Status.Build.Maven.LocalRepository
-	mc.Timeout = e.Platform.Status.Build.Maven.GetTimeout().Duration
 	mc.AddArgument("-Dopenapi.spec=" + in)
 	mc.AddArgument("-Ddsl.out=" + out)
 
@@ -232,7 +232,9 @@ func (t *openAPITrait) createNewOpenAPIConfigMap(e *Environment, resource v1.Res
 		)
 	}
 
-	err = maven.Run(mc)
+	ctx, cancel := context.WithTimeout(e.C, e.Platform.Status.Build.GetTimeout().Duration)
+	defer cancel()
+	err = project.Command(mc).Do(ctx)
 	if err != nil {
 		return err
 	}
diff --git a/pkg/util/camel/camel_dependencies.go b/pkg/util/camel/camel_dependencies.go
index 411cb33c1..9f2c439e8 100644
--- a/pkg/util/camel/camel_dependencies.go
+++ b/pkg/util/camel/camel_dependencies.go
@@ -101,14 +101,14 @@ func ManageIntegrationDependencies(
 					}
 				}
 				if addRepo {
-					project.Repositories = append(project.Repositories, maven.Repository{
+					project.Repositories = append(project.Repositories, v1.Repository{
 						ID:  "jitpack.io-" + xid.New().String(),
 						URL: jitpack.RepoURL,
-						Releases: maven.RepositoryPolicy{
+						Releases: v1.RepositoryPolicy{
 							Enabled:        true,
 							ChecksumPolicy: "fail",
 						},
-						Snapshots: maven.RepositoryPolicy{
+						Snapshots: v1.RepositoryPolicy{
 							Enabled:        true,
 							ChecksumPolicy: "fail",
 						},
diff --git a/pkg/util/camel/catalog.go b/pkg/util/camel/catalog.go
index 47a53590f..0aeae20bd 100644
--- a/pkg/util/camel/catalog.go
+++ b/pkg/util/camel/catalog.go
@@ -83,10 +83,11 @@ func GenerateCatalog(
 		}
 	}
 
-	return GenerateCatalogCommon(settings, caCert, mvn, runtime, providerDependencies)
+	return GenerateCatalogCommon(ctx, settings, caCert, mvn, runtime, providerDependencies)
 }
 
 func GenerateCatalogCommon(
+	ctx context.Context,
 	settings string,
 	caCert []byte,
 	mvn v1.MavenSpec,
@@ -107,9 +108,8 @@ func GenerateCatalogCommon(
 
 	project := generateMavenProject(runtime.Version, providerDependencies)
 
-	mc := maven.NewContext(tmpDir, project)
+	mc := maven.NewContext(tmpDir)
 	mc.LocalRepository = mvn.LocalRepository
-	mc.Timeout = mvn.GetTimeout().Duration
 	mc.AddSystemProperty("catalog.path", tmpDir)
 	mc.AddSystemProperty("catalog.file", "catalog.yaml")
 	mc.AddSystemProperty("catalog.runtime", string(runtime.Provider))
@@ -132,7 +132,7 @@ func GenerateCatalogCommon(
 		)
 	}
 
-	err = maven.Run(mc)
+	err = project.Command(mc).Do(ctx)
 	if err != nil {
 		return nil, err
 	}
diff --git a/pkg/util/maven/maven.go b/pkg/util/maven/maven_command.go
similarity index 65%
rename from pkg/util/maven/maven.go
rename to pkg/util/maven/maven_command.go
index 596627f5f..bca1a97f8 100644
--- a/pkg/util/maven/maven.go
+++ b/pkg/util/maven/maven_command.go
@@ -23,7 +23,6 @@ import (
 	"fmt"
 	"io"
 	"io/ioutil"
-	"math"
 	"os"
 	"os/exec"
 	"path"
@@ -38,47 +37,13 @@ import (
 
 var Log = log.WithName("maven")
 
-func GenerateProjectStructure(context Context) error {
-	if err := util.WriteFileWithBytesMarshallerContent(context.Path, "pom.xml", context.Project); err != nil {
-		return err
-	}
-
-	if context.SettingsContent != nil {
-		if err := util.WriteFileWithContent(context.Path, "settings.xml", context.SettingsContent); err != nil {
-			return err
-		}
-	}
-
-	for k, v := range context.AdditionalEntries {
-		var bytes []byte
-		var err error
-
-		if dc, ok := v.([]byte); ok {
-			bytes = dc
-		} else if dc, ok := v.(io.Reader); ok {
-			bytes, err = ioutil.ReadAll(dc)
-			if err != nil {
-				return err
-			}
-		} else {
-			return fmt.Errorf("unknown content type: name=%s, content=%+v", k, v)
-		}
-
-		if len(bytes) > 0 {
-			Log.Infof("write entry: %s (%d bytes)", k, len(bytes))
-
-			err = util.WriteFileWithContent(context.Path, k, bytes)
-			if err != nil {
-				return err
-			}
-		}
-	}
-
-	return nil
+type Command struct {
+	context Context
+	project Project
 }
 
-func Run(ctx Context) error {
-	if err := GenerateProjectStructure(ctx); err != nil {
+func (c *Command) Do(ctx context.Context) error {
+	if err := generateProjectStructure(c.context, c.project); err != nil {
 		return err
 	}
 
@@ -90,13 +55,13 @@ func Run(ctx Context) error {
 	args := make([]string, 0)
 	args = append(args, "--batch-mode")
 
-	if ctx.LocalRepository == "" {
+	if c.context.LocalRepository == "" {
 		args = append(args, "-Dcamel.noop=true")
-	} else if _, err := os.Stat(ctx.LocalRepository); err == nil {
-		args = append(args, "-Dmaven.repo.local="+ctx.LocalRepository)
+	} else if _, err := os.Stat(c.context.LocalRepository); err == nil {
+		args = append(args, "-Dmaven.repo.local="+c.context.LocalRepository)
 	}
 
-	settingsPath := path.Join(ctx.Path, "settings.xml")
+	settingsPath := path.Join(c.context.Path, "settings.xml")
 	settingsExists, err := util.FileExists(settingsPath)
 	if err != nil {
 		return err
@@ -106,32 +71,24 @@ func Run(ctx Context) error {
 		args = append(args, "--settings", settingsPath)
 	}
 
-	args = append(args, ctx.AdditionalArguments...)
-
-	timeout := ctx.Timeout
-	if timeout == 0 {
-		timeout = math.MaxInt64
-	}
-
-	c, cancel := context.WithTimeout(context.Background(), timeout)
-	defer cancel()
+	args = append(args, c.context.AdditionalArguments...)
 
-	cmd := exec.CommandContext(c, mvnCmd, args...)
-	cmd.Dir = ctx.Path
+	cmd := exec.CommandContext(ctx, mvnCmd, args...)
+	cmd.Dir = c.context.Path
 
 	var mavenOptions string
-	if len(ctx.ExtraMavenOpts) > 0 {
+	if len(c.context.ExtraMavenOpts) > 0 {
 		// Inherit the parent process environment
 		env := os.Environ()
 
 		mavenOpts, ok := os.LookupEnv("MAVEN_OPTS")
 		if !ok {
-			mavenOptions = strings.Join(ctx.ExtraMavenOpts, " ")
+			mavenOptions = strings.Join(c.context.ExtraMavenOpts, " ")
 			env = append(env, "MAVEN_OPTS="+mavenOptions)
 		} else {
 			var extraOptions []string
 			options := strings.Fields(mavenOpts)
-			for _, extraOption := range ctx.ExtraMavenOpts {
+			for _, extraOption := range c.context.ExtraMavenOpts {
 				// Basic duplicated key detection, that should be improved
 				// to support a wider range of JVM options
 				key := strings.SplitN(extraOption, "=", 2)[0]
@@ -160,36 +117,32 @@ func Run(ctx Context) error {
 		cmd.Env = env
 	}
 
-	Log.WithValues("timeout", timeout.String(), "MAVEN_OPTS", mavenOptions).
-		Infof("executing: %s", strings.Join(cmd.Args, " "))
+	Log.WithValues("MAVEN_OPTS", mavenOptions).Infof("executing: %s", strings.Join(cmd.Args, " "))
 
-	stdOut, error := cmd.StdoutPipe()
-	if error != nil {
+	stdOut, err := cmd.StdoutPipe()
+	if err != nil {
 		return nil
 	}
 
-	error = cmd.Start()
+	err = cmd.Start()
 
-	if error != nil {
-		return error
+	if err != nil {
+		return err
 	}
 
 	scanner := bufio.NewScanner(stdOut)
 
 	Log.Debug("About to start parsing the Maven output")
-
 	for scanner.Scan() {
 		line := scanner.Text()
-
-		mavenLog, parseError := ParseLog(line)
-
+		mavenLog, parseError := parseLog(line)
 		if parseError == nil {
-			NormalizeLog(mavenLog)
+			normalizeLog(mavenLog)
 		} else {
 			// Why we are ignoring the parsing errors here: there are a few scenarios where this would likely occur.
 			// For example, if something outside of Maven outputs something (i.e.: the JDK, a misbehaved plugin,
 			// etc). The build may still have succeeded, though.
-			NonNormalizedLog(line)
+			nonNormalizedLog(line)
 		}
 	}
 	Log.Debug("Finished parsing Maven output")
@@ -197,7 +150,90 @@ func Run(ctx Context) error {
 	return cmd.Wait()
 }
 
-// ParseGAV decode a maven artifact id to a dependency definition.
+func NewContext(buildDir string) Context {
+	return Context{
+		Path:                buildDir,
+		AdditionalArguments: make([]string, 0),
+		AdditionalEntries:   make(map[string]interface{}),
+	}
+}
+
+type Context struct {
+	Path string
+	// Project             Project
+	ExtraMavenOpts      []string
+	SettingsContent     []byte
+	AdditionalArguments []string
+	AdditionalEntries   map[string]interface{}
+	// Timeout             time.Duration
+	LocalRepository string
+	// Stdout              io.Writer
+}
+
+func (c *Context) AddEntry(id string, entry interface{}) {
+	if c.AdditionalEntries == nil {
+		c.AdditionalEntries = make(map[string]interface{})
+	}
+
+	c.AdditionalEntries[id] = entry
+}
+
+func (c *Context) AddArgument(argument string) {
+	c.AdditionalArguments = append(c.AdditionalArguments, argument)
+}
+
+func (c *Context) AddArgumentf(format string, args ...interface{}) {
+	c.AdditionalArguments = append(c.AdditionalArguments, fmt.Sprintf(format, args...))
+}
+
+func (c *Context) AddArguments(arguments ...string) {
+	c.AdditionalArguments = append(c.AdditionalArguments, arguments...)
+}
+
+func (c *Context) AddSystemProperty(name string, value string) {
+	c.AddArgumentf("-D%s=%s", name, value)
+}
+
+func generateProjectStructure(context Context, project Project) error {
+	if err := util.WriteFileWithBytesMarshallerContent(context.Path, "pom.xml", project); err != nil {
+		return err
+	}
+
+	if context.SettingsContent != nil {
+		if err := util.WriteFileWithContent(context.Path, "settings.xml", context.SettingsContent); err != nil {
+			return err
+		}
+	}
+
+	for k, v := range context.AdditionalEntries {
+		var bytes []byte
+		var err error
+
+		if dc, ok := v.([]byte); ok {
+			bytes = dc
+		} else if dc, ok := v.(io.Reader); ok {
+			bytes, err = ioutil.ReadAll(dc)
+			if err != nil {
+				return err
+			}
+		} else {
+			return fmt.Errorf("unknown content type: name=%s, content=%+v", k, v)
+		}
+
+		if len(bytes) > 0 {
+			Log.Infof("write entry: %s (%d bytes)", k, len(bytes))
+
+			err = util.WriteFileWithContent(context.Path, k, bytes)
+			if err != nil {
+				return err
+			}
+		}
+	}
+
+	return nil
+}
+
+// ParseGAV decodes the provided Maven GAV into the corresponding Dependency.
 //
 // The artifact id is in the form of:
 //
diff --git a/pkg/util/maven/maven_log.go b/pkg/util/maven/maven_log.go
index 3b2536867..c01957d43 100644
--- a/pkg/util/maven/maven_log.go
+++ b/pkg/util/maven/maven_log.go
@@ -19,10 +19,11 @@ package maven
 
 import (
 	"encoding/json"
+
 	"github.com/apache/camel-k/pkg/util/log"
 )
 
-type MavenLog struct {
+type mavenLog struct {
 	Level            string `json:"level"`
 	Ts               string `json:"ts"`
 	Logger           string `json:"logger"`
@@ -45,13 +46,13 @@ const (
 
 var mavenLogger = log.WithName("maven.build")
 
-func ParseLog(line string) (mavenLog MavenLog, error error) {
+func parseLog(line string) (mavenLog mavenLog, error error) {
 	error = json.Unmarshal([]byte(line), &mavenLog)
 
 	return mavenLog, error
 }
 
-func NormalizeLog(mavenLog MavenLog) {
+func normalizeLog(mavenLog mavenLog) {
 	switch mavenLog.Level {
 	case DEBUG, TRACE:
 		mavenLogger.Debug(mavenLog.Msg)
@@ -62,6 +63,6 @@ func NormalizeLog(mavenLog MavenLog) {
 	}
 }
 
-func NonNormalizedLog(rawLog string) {
+func nonNormalizedLog(rawLog string) {
 	mavenLogger.Info(rawLog)
 }
diff --git a/pkg/util/maven/maven_project.go b/pkg/util/maven/maven_project.go
index ddf020fce..e9ed19ddc 100644
--- a/pkg/util/maven/maven_project.go
+++ b/pkg/util/maven/maven_project.go
@@ -21,6 +21,8 @@ import (
 	"bytes"
 	"encoding/xml"
 	"strings"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
 )
 
 func NewProject() Project {
@@ -44,6 +46,13 @@ func NewProjectWithGAV(group string, artifact string, version string) Project {
 	return p
 }
 
+func (p Project) Command(context Context) *Command {
+	return &Command{
+		context: context,
+		project: p,
+	}
+}
+
 func (p Project) MarshalBytes() ([]byte, error) {
 	w := &bytes.Buffer{}
 	w.WriteString(xml.Header)
@@ -136,7 +145,37 @@ func (p *Project) AddDependencyExclusions(dep Dependency, exclusions ...Exclusio
 	}
 }
 
-// NewDependency create an new dependency from the given gav info
+type propertiesEntry struct {
+	XMLName xml.Name
+	Value   string `xml:",chardata"`
+}
+
+func (m Properties) AddAll(properties map[string]string) {
+	for k, v := range properties {
+		m[k] = v
+	}
+}
+
+func (m Properties) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+	if len(m) == 0 {
+		return nil
+	}
+
+	err := e.EncodeToken(start)
+	if err != nil {
+		return err
+	}
+
+	for k, v := range m {
+		if err := e.Encode(propertiesEntry{XMLName: xml.Name{Local: k}, Value: v}); err != nil {
+			return err
+		}
+	}
+
+	return e.EncodeToken(start.End())
+}
+
+// NewDependency creates an new dependency from the given GAV
 func NewDependency(groupID string, artifactID string, version string) Dependency {
 	return Dependency{
 		GroupID:    groupID,
@@ -147,24 +186,22 @@ func NewDependency(groupID string, artifactID string, version string) Dependency
 	}
 }
 
+// NewRepository parses the given repository URL and generates the corresponding v1.Repository.
 //
-// NewRepository parse the given repo url ang generated the related struct.
-//
-// The repository can be customized by appending @instruction to the repository
-// uri, as example:
+// The repository can be customized by appending @param to the repository
+// URL, e.g.:
 //
 //     http://my-nexus:8081/repository/publicc@id=my-repo@snapshots
 //
-// Will enable snapshots and sets the repo it to my-repo
-//
-func NewRepository(repo string) Repository {
-	r := Repository{
+// That enables snapshots and sets the repository id to `my-repo`
+func NewRepository(repo string) v1.Repository {
+	r := v1.Repository{
 		URL: repo,
-		Releases: RepositoryPolicy{
+		Releases: v1.RepositoryPolicy{
 			Enabled:        true,
 			ChecksumPolicy: "fail",
 		},
-		Snapshots: RepositoryPolicy{
+		Snapshots: v1.RepositoryPolicy{
 			Enabled:        false,
 			ChecksumPolicy: "fail",
 		},
diff --git a/pkg/util/maven/maven_settings.go b/pkg/util/maven/maven_settings.go
index a1bac602b..6fff12148 100644
--- a/pkg/util/maven/maven_settings.go
+++ b/pkg/util/maven/maven_settings.go
@@ -18,12 +18,14 @@ limitations under the License.
 package maven
 
 import (
+	"bytes"
 	"encoding/xml"
 	"strings"
 
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
 	"github.com/apache/camel-k/pkg/util"
 )
 
@@ -31,6 +33,21 @@ import (
 // This variable can be overridden at build time
 var DefaultMavenRepositories = "https://repo.maven.apache.org/maven2@id=central"
 
+func (s Settings) MarshalBytes() ([]byte, error) {
+	w := &bytes.Buffer{}
+	w.WriteString(xml.Header)
+
+	e := xml.NewEncoder(w)
+	e.Indent("", "  ")
+
+	err := e.Encode(s)
+	if err != nil {
+		return []byte{}, err
+	}
+
+	return w.Bytes(), nil
+}
+
 func NewSettings() Settings {
 	return Settings{
 		XMLName:           xml.Name{Local: "settings"},
@@ -40,10 +57,10 @@ func NewSettings() Settings {
 	}
 }
 
-func NewDefaultSettings(repositories []Repository, mirrors []Mirror) Settings {
+func NewDefaultSettings(repositories []v1.Repository, mirrors []Mirror) Settings {
 	settings := NewSettings()
 
-	var additionalRepos []Repository
+	var additionalRepos []v1.Repository
 	for _, defaultRepo := range defaultMavenRepositories() {
 		if !containsRepo(repositories, defaultRepo.ID) {
 			additionalRepos = append(additionalRepos, defaultRepo)
@@ -95,14 +112,14 @@ func SettingsConfigMap(namespace string, name string, settings Settings) (*corev
 	return cm, nil
 }
 
-func defaultMavenRepositories() (repos []Repository) {
+func defaultMavenRepositories() (repos []v1.Repository) {
 	for _, repoDesc := range strings.Split(DefaultMavenRepositories, ",") {
 		repos = append(repos, NewRepository(repoDesc))
 	}
 	return
 }
 
-func containsRepo(repositories []Repository, id string) bool {
+func containsRepo(repositories []v1.Repository, id string) bool {
 	for _, r := range repositories {
 		if r.ID == id {
 			return true
diff --git a/pkg/util/maven/maven_types.go b/pkg/util/maven/maven_types.go
index 3bac74068..ecf3cc50f 100644
--- a/pkg/util/maven/maven_types.go
+++ b/pkg/util/maven/maven_types.go
@@ -18,30 +18,11 @@ limitations under the License.
 package maven
 
 import (
-	"bytes"
 	"encoding/xml"
-	"fmt"
-	"io"
-	"time"
-)
-
-// Repository --
-type Repository struct {
-	ID        string           `xml:"id"`
-	Name      string           `xml:"name,omitempty"`
-	URL       string           `xml:"url"`
-	Snapshots RepositoryPolicy `xml:"snapshots,omitempty"`
-	Releases  RepositoryPolicy `xml:"releases,omitempty"`
-}
 
-// RepositoryPolicy --
-type RepositoryPolicy struct {
-	Enabled        bool   `xml:"enabled"`
-	UpdatePolicy   string `xml:"updatePolicy,omitempty"`
-	ChecksumPolicy string `xml:"checksumPolicy,omitempty"`
-}
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+)
 
-// Mirror --
 type Mirror struct {
 	ID       string `xml:"id"`
 	Name     string `xml:"name,omitempty"`
@@ -49,13 +30,11 @@ type Mirror struct {
 	MirrorOf string `xml:"mirrorOf"`
 }
 
-// Build --
 type Build struct {
 	DefaultGoal string   `xml:"defaultGoal,omitempty"`
 	Plugins     []Plugin `xml:"plugins>plugin,omitempty"`
 }
 
-// Plugin --
 type Plugin struct {
 	GroupID      string       `xml:"groupId"`
 	ArtifactID   string       `xml:"artifactId"`
@@ -64,101 +43,15 @@ type Plugin struct {
 	Dependencies []Dependency `xml:"dependencies>dependency,omitempty"`
 }
 
-// Execution --
 type Execution struct {
 	ID    string   `xml:"id,omitempty"`
 	Phase string   `xml:"phase,omitempty"`
 	Goals []string `xml:"goals>goal,omitempty"`
 }
 
-// Properties --
 type Properties map[string]string
 
-type propertiesEntry struct {
-	XMLName xml.Name
-	Value   string `xml:",chardata"`
-}
-
-// AddAll --
-func (m Properties) AddAll(properties map[string]string) {
-	for k, v := range properties {
-		m[k] = v
-	}
-}
-
-// MarshalXML --
-func (m Properties) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if len(m) == 0 {
-		return nil
-	}
-
-	err := e.EncodeToken(start)
-	if err != nil {
-		return err
-	}
-
-	for k, v := range m {
-		if err := e.Encode(propertiesEntry{XMLName: xml.Name{Local: k}, Value: v}); err != nil {
-			return err
-		}
-	}
-
-	return e.EncodeToken(start.End())
-}
-
-// NewContext --
-func NewContext(buildDir string, project Project) Context {
-	return Context{
-		Path:                buildDir,
-		Project:             project,
-		AdditionalArguments: make([]string, 0),
-		AdditionalEntries:   make(map[string]interface{}),
-	}
-}
-
-// Context --
-type Context struct {
-	Path                string
-	Project             Project
-	ExtraMavenOpts      []string
-	SettingsContent     []byte
-	AdditionalArguments []string
-	AdditionalEntries   map[string]interface{}
-	Timeout             time.Duration
-	LocalRepository     string
-	Stdout              io.Writer
-}
-
-// AddEntry --
-func (c *Context) AddEntry(id string, entry interface{}) {
-	if c.AdditionalEntries == nil {
-		c.AdditionalEntries = make(map[string]interface{})
-	}
-
-	c.AdditionalEntries[id] = entry
-}
-
-// AddArgument --
-func (c *Context) AddArgument(argument string) {
-	c.AdditionalArguments = append(c.AdditionalArguments, argument)
-}
-
-// AddArgumentf --
-func (c *Context) AddArgumentf(format string, args ...interface{}) {
-	c.AdditionalArguments = append(c.AdditionalArguments, fmt.Sprintf(format, args...))
-}
-
-// AddArguments --
-func (c *Context) AddArguments(arguments ...string) {
-	c.AdditionalArguments = append(c.AdditionalArguments, arguments...)
-}
-
-// AddSystemProperty --
-func (c *Context) AddSystemProperty(name string, value string) {
-	c.AddArgumentf("-D%s=%s", name, value)
-}
-
-// Settings represent a maven settings
+// Settings models a Maven settings
 type Settings struct {
 	XMLName           xml.Name
 	XMLNs             string    `xml:"xmlns,attr"`
@@ -169,23 +62,7 @@ type Settings struct {
 	Mirrors           []Mirror  `xml:"mirrors>mirror,omitempty"`
 }
 
-// MarshalBytes --
-func (s Settings) MarshalBytes() ([]byte, error) {
-	w := &bytes.Buffer{}
-	w.WriteString(xml.Header)
-
-	e := xml.NewEncoder(w)
-	e.Indent("", "  ")
-
-	err := e.Encode(s)
-	if err != nil {
-		return []byte{}, err
-	}
-
-	return w.Bytes(), nil
-}
-
-// Project represent a maven project
+// Project models a Maven project
 type Project struct {
 	XMLName              xml.Name
 	XMLNs                string                `xml:"xmlns,attr"`
@@ -198,23 +75,23 @@ type Project struct {
 	Properties           Properties            `xml:"properties,omitempty"`
 	DependencyManagement *DependencyManagement `xml:"dependencyManagement"`
 	Dependencies         []Dependency          `xml:"dependencies>dependency,omitempty"`
-	Repositories         []Repository          `xml:"repositories>repository,omitempty"`
-	PluginRepositories   []Repository          `xml:"pluginRepositories>pluginRepository,omitempty"`
+	Repositories         []v1.Repository       `xml:"repositories>repository,omitempty"`
+	PluginRepositories   []v1.Repository       `xml:"pluginRepositories>pluginRepository,omitempty"`
 	Build                *Build                `xml:"build,omitempty"`
 }
 
-// Exclusion represent a maven's dependency exlucsion
+// Exclusion models a dependency exclusion
 type Exclusion struct {
 	GroupID    string `xml:"groupId" yaml:"groupId"`
 	ArtifactID string `xml:"artifactId" yaml:"artifactId"`
 }
 
-// DependencyManagement represent maven's dependency management block
+// DependencyManagement models dependency management
 type DependencyManagement struct {
 	Dependencies []Dependency `xml:"dependencies>dependency,omitempty"`
 }
 
-// Dependency represent a maven's dependency
+// Dependency models a dependency
 type Dependency struct {
 	GroupID    string       `xml:"groupId" yaml:"groupId"`
 	ArtifactID string       `xml:"artifactId" yaml:"artifactId"`
@@ -225,22 +102,19 @@ type Dependency struct {
 	Exclusions *[]Exclusion `xml:"exclusions>exclusion,omitempty" yaml:"exclusions,omitempty"`
 }
 
-// Profile --
 type Profile struct {
-	ID                 string       `xml:"id"`
-	Activation         Activation   `xml:"activation,omitempty"`
-	Properties         Properties   `xml:"properties,omitempty"`
-	Repositories       []Repository `xml:"repositories>repository,omitempty"`
-	PluginRepositories []Repository `xml:"pluginRepositories>pluginRepository,omitempty"`
+	ID                 string          `xml:"id"`
+	Activation         Activation      `xml:"activation,omitempty"`
+	Properties         Properties      `xml:"properties,omitempty"`
+	Repositories       []v1.Repository `xml:"repositories>repository,omitempty"`
+	PluginRepositories []v1.Repository `xml:"pluginRepositories>pluginRepository,omitempty"`
 }
 
-// Activation --
 type Activation struct {
 	ActiveByDefault bool                `xml:"activeByDefault"`
 	Property        *PropertyActivation `xml:"property,omitempty"`
 }
 
-// PropertyActivation --
 type PropertyActivation struct {
 	Name  string `xml:"name"`
 	Value string `xml:"value"`
diff --git a/script/Makefile b/script/Makefile
index 01a400b1e..fb2ff57c6 100644
--- a/script/Makefile
+++ b/script/Makefile
@@ -180,6 +180,10 @@ test-upgrade: build
 	STAGING_RUNTIME_REPO="$(STAGING_RUNTIME_REPO)" \
 	go test -timeout 60m -v ./e2e/upgrade -tags=integration
 
+test-service-binding: build
+	STAGING_RUNTIME_REPO="$(STAGING_RUNTIME_REPO)" go test -timeout 60m -v ./e2e/service-binding -tags=integration
+	#go test -timeout 60m -v ./e2e/service-binding -tags=integration
+
 build-kamel:
 # Ensure the binary is statically linked when building on Linux due to ABI changes in newer glibc 2.32, otherwise
 # it would not run on older versions. See https://github.com/apache/camel-k/pull/2141#issuecomment-800990117


Test patch:
diff --git a/e2e/common/build/maven_ca_secret_test.go b/e2e/common/build/maven_ca_secret_test.go
index e93798f28..25bd761c2 100644
--- a/e2e/common/build/maven_ca_secret_test.go
+++ b/e2e/common/build/maven_ca_secret_test.go
@@ -453,7 +453,7 @@ ProxyPreserveHost On
 	})
 }
 
-func getRepositoryAttributes(repository maven.Repository) []string {
+func getRepositoryAttributes(repository v1.Repository) []string {
 	var attributes []string
 	if repository.ID != "" {
 		attributes = append(attributes, "@id="+repository.ID)
diff --git a/e2e/common/build/maven_repository_test.go b/e2e/common/build/maven_repository_test.go
new file mode 100644
index 000000000..44d5af13a
--- /dev/null
+++ b/e2e/common/build/maven_repository_test.go
@@ -0,0 +1,51 @@
+// +build integration
+
+// To enable compilation of this file in Goland, go to "Settings -> Go -> Vendoring & Build Tags -> Custom Tags" and add "integration"
+
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package build
+
+import (
+	"testing"
+
+	. "github.com/onsi/gomega"
+
+	v1 "k8s.io/api/core/v1"
+
+	. "github.com/apache/camel-k/e2e/support"
+	camelv1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+)
+
+func TestRunExtraRepository(t *testing.T) {
+	WithNewTestNamespace(t, func(ns string) {
+		Expect(Kamel("install", "-n", ns).Execute()).To(Succeed())
+
+		name := "java"
+		Expect(Kamel("run", "-n", ns, "files/Java.java",
+			"--maven-repository", "https://maven.repository.redhat.com/ga@id=redhat",
+			"--dependency", "mvn:jakarta.annotation:jakarta.annotation-api:1.3.5.redhat-00002",
+			"--name", name,
+		).Execute()).To(Succeed())
+
+		Eventually(IntegrationPodPhase(ns, name), TestTimeoutMedium).Should(Equal(v1.PodRunning))
+		Eventually(IntegrationCondition(ns, name, camelv1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(v1.ConditionTrue))
+		Eventually(IntegrationLogs(ns, name), TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
+		Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed())
+	})
+}
diff --git a/e2e/service-binding/ServiceBinding.java b/e2e/service-binding/ServiceBinding.java
new file mode 100644
index 000000000..2f7c72987
--- /dev/null
+++ b/e2e/service-binding/ServiceBinding.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.camel.builder.RouteBuilder;
+
+public class ServiceBinding extends RouteBuilder {
+  @Override
+  public void configure() throws Exception {
+	  from("timer:tick")
+        .setBody(simple("${properties:host}:${properties:port}"))
+        .log("${body}");
+  }
+}
\ No newline at end of file
diff --git a/e2e/service-binding/service_binding_test.go b/e2e/service-binding/service_binding_test.go
new file mode 100644
index 000000000..9b8871757
--- /dev/null
+++ b/e2e/service-binding/service_binding_test.go
@@ -0,0 +1,80 @@
+// +build integration
+
+// To enable compilation of this file in Goland, go to "Settings -> Go -> Vendoring & Build Tags -> Custom Tags" and add "integration"
+
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package service_binding
+
+import (
+	"fmt"
+	"testing"
+
+	. "github.com/onsi/gomega"
+
+	corev1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+
+	. "github.com/apache/camel-k/e2e/support"
+	camelv1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+)
+
+func TestServiceBindingTrait(t *testing.T) {
+	WithNewTestNamespace(t, func(ns string) {
+		Expect(Kamel("install", "-n", ns).Execute()).To(Succeed())
+
+		// Create our mock service config
+		host := "hostname"
+		port := "12324"
+		service := &corev1.ConfigMap{
+			TypeMeta: metav1.TypeMeta{
+				Kind:       "ConfigMap",
+				APIVersion: "v1",
+			},
+			ObjectMeta: metav1.ObjectMeta{
+				Name:      "mock-service-config",
+				Namespace: ns,
+				Annotations: map[string]string{
+					"service.binding/host": "path={.data.service-host}",
+					"service.binding/port": "path={.data.service-port}",
+				},
+			},
+			Data: map[string]string{
+				"service-host": host,
+				"service-port": port,
+			},
+		}
+		serviceRef := fmt.Sprintf("%s:%s/%s", service.TypeMeta.Kind, ns, service.ObjectMeta.Name)
+		Expect(TestClient().Create(TestContext, service)).To(Succeed())
+
+		// Create integration and bind it to our service
+		name := "service-binding"
+		Expect(Kamel("run", "ServiceBinding.java",
+			"--name", name,
+			"--connect", serviceRef,
+			"-n", ns,
+		).Execute()).To(Succeed())
+
+		Eventually(IntegrationPodPhase(ns, name), TestTimeoutMedium).Should(Equal(corev1.PodRunning))
+		Eventually(IntegrationCondition(ns, name, camelv1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
+		Eventually(IntegrationLogs(ns, name), TestTimeoutShort).Should(ContainSubstring(fmt.Sprintf("%s:%s", host, port)))
+
+		// Clean up
+		Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed())
+	})
+}
diff --git a/pkg/controller/integrationplatform/initialize_test.go b/pkg/controller/integrationplatform/initialize_test.go
index 2e6737991..4c7aa1259 100644
--- a/pkg/controller/integrationplatform/initialize_test.go
+++ b/pkg/controller/integrationplatform/initialize_test.go
@@ -22,15 +22,14 @@ import (
 	"testing"
 	"time"
 
-	"github.com/apache/camel-k/pkg/platform"
 	"github.com/rs/xid"
 
+	"github.com/stretchr/testify/assert"
+
 	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/platform"
 	"github.com/apache/camel-k/pkg/util/log"
 	"github.com/apache/camel-k/pkg/util/test"
-
-	"github.com/stretchr/testify/assert"
-
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
@@ -54,10 +53,6 @@ func TestTimeouts_Default(t *testing.T) {
 	assert.Nil(t, err)
 	assert.NotNil(t, answer)
 
-	n := answer.Status.Build.GetTimeout().Duration.Seconds() * 0.75
-	d := (time.Duration(n) * time.Second).Truncate(time.Second)
-
-	assert.Equal(t, d, answer.Status.Build.Maven.GetTimeout().Duration)
 	assert.Equal(t, 5*time.Minute, answer.Status.Build.GetTimeout().Duration)
 }
 
@@ -88,10 +83,6 @@ func TestTimeouts_MavenComputedFromBuild(t *testing.T) {
 	assert.Nil(t, err)
 	assert.NotNil(t, answer)
 
-	n := answer.Status.Build.GetTimeout().Duration.Seconds() * 0.75
-	d := (time.Duration(n) * time.Second).Truncate(time.Second)
-
-	assert.Equal(t, d, answer.Status.Build.Maven.GetTimeout().Duration)
 	assert.Equal(t, 1*time.Minute, answer.Status.Build.GetTimeout().Duration)
 }
 
@@ -109,13 +100,6 @@ func TestTimeouts_Truncated(t *testing.T) {
 		Duration: bt,
 	}
 
-	mt, err := time.ParseDuration("2m1ms")
-	assert.Nil(t, err)
-
-	ip.Spec.Build.Maven.Timeout = &metav1.Duration{
-		Duration: mt,
-	}
-
 	c, err := test.NewFakeClient(&ip)
 	assert.Nil(t, err)
 
@@ -129,7 +113,6 @@ func TestTimeouts_Truncated(t *testing.T) {
 	assert.Nil(t, err)
 	assert.NotNil(t, answer)
 
-	assert.Equal(t, 2*time.Minute, answer.Status.Build.Maven.GetTimeout().Duration)
 	assert.Equal(t, 5*time.Minute, answer.Status.Build.GetTimeout().Duration)
 }
 
diff --git a/pkg/util/maven/maven_project_test.go b/pkg/util/maven/maven_project_test.go
index 978039387..595bc58c0 100644
--- a/pkg/util/maven/maven_project_test.go
+++ b/pkg/util/maven/maven_project_test.go
@@ -20,6 +20,7 @@ package maven
 import (
 	"testing"
 
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
 	"github.com/apache/camel-k/pkg/util"
 
 	"github.com/stretchr/testify/assert"
@@ -101,27 +102,27 @@ func TestPomGeneration(t *testing.T) {
 			Version:    "1.0.0",
 		},
 	}
-	project.Repositories = []Repository{
+	project.Repositories = []v1.Repository{
 		{
 			ID:  "central",
 			URL: "https://repo.maven.apache.org/maven2",
-			Snapshots: RepositoryPolicy{
+			Snapshots: v1.RepositoryPolicy{
 				Enabled: false,
 			},
-			Releases: RepositoryPolicy{
+			Releases: v1.RepositoryPolicy{
 				Enabled:      true,
 				UpdatePolicy: "never",
 			},
 		},
 	}
-	project.PluginRepositories = []Repository{
+	project.PluginRepositories = []v1.Repository{
 		{
 			ID:  "central",
 			URL: "https://repo.maven.apache.org/maven2",
-			Snapshots: RepositoryPolicy{
+			Snapshots: v1.RepositoryPolicy{
 				Enabled: false,
 			},
-			Releases: RepositoryPolicy{
+			Releases: v1.RepositoryPolicy{
 				Enabled:      true,
 				UpdatePolicy: "never",
 			},
diff --git a/pkg/util/maven/maven_settings_test.go b/pkg/util/maven/maven_settings_test.go
index aa8b01052..a6b6a6a45 100644
--- a/pkg/util/maven/maven_settings_test.go
+++ b/pkg/util/maven/maven_settings_test.go
@@ -22,6 +22,7 @@ import (
 
 	"github.com/stretchr/testify/assert"
 
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
 	"github.com/apache/camel-k/pkg/util"
 )
 
@@ -181,15 +182,15 @@ func TestSettingsGeneration(t *testing.T) {
 			Activation: Activation{
 				ActiveByDefault: true,
 			},
-			Repositories: []Repository{
+			Repositories: []v1.Repository{
 				{
 					ID:  "central",
 					URL: "https://repo.maven.apache.org/maven2",
-					Snapshots: RepositoryPolicy{
+					Snapshots: v1.RepositoryPolicy{
 						Enabled:        false,
 						ChecksumPolicy: "warn",
 					},
-					Releases: RepositoryPolicy{
+					Releases: v1.RepositoryPolicy{
 						Enabled:        true,
 						UpdatePolicy:   "never",
 						ChecksumPolicy: "fail",
@@ -208,7 +209,7 @@ func TestSettingsGeneration(t *testing.T) {
 }
 
 func TestDefaultSettingsGeneration(t *testing.T) {
-	settings := NewDefaultSettings([]Repository{}, []Mirror{})
+	settings := NewDefaultSettings([]v1.Repository{}, []Mirror{})
 
 	content, err := util.EncodeXML(settings)
 
@@ -219,7 +220,7 @@ func TestDefaultSettingsGeneration(t *testing.T) {
 }
 
 func TestDefaultSettingsGenerationWithAdditionalRepo(t *testing.T) {
-	repositories := []Repository{
+	repositories := []v1.Repository{
 		NewRepository("https://repo1.maven.org/maven2@id=central"),
 		NewRepository("https://foo.bar.org/repo@id=foo"),
 	}
@@ -237,7 +238,7 @@ func TestDefaultSettingsGenerationWithAdditionalRepo(t *testing.T) {
 }
 
 func TestCreateSettingsConfigMap(t *testing.T) {
-	settings := NewDefaultSettings([]Repository{}, []Mirror{})
+	settings := NewDefaultSettings([]v1.Repository{}, []Mirror{})
 
 	configMap, err := SettingsConfigMap("foo", "bar", settings)
 	assert.Nil(t, err)